Domain: apache.org
Stories and comments across the archive that link to apache.org.
Comments · 2,937
-
Apache for Win32
He said servers on Windows and he was right.
How is Apache HTTP Server not a "server on Windows"? Since around 1.3.12, Apache has worked fine on Win32 systems, even Win9x systems. Many people I know use it on their workstations for file-sharing and personal web pages. Of course, you shouldn't be running a Microsoft OS on a production server, but sometimes IE and Mozilla react slightly differently when retrieving pages from http://localhost than from file:///C/web (for example, you can use SSI and PHP), and in any case, you often don't want to be FTP'ing your files around all the time between the development box and the test server, or you can't afford a dedicated test server for the content creators.
-
Re:You should be afraid...
How long did it take them to: (a) Kill Netscape with MSIE, (b) maim RealAudio with Windows Media, (c) shutdown 3rd-party Windows webservers with IIS, etc.? Not long.
(a) 2 Years. Netscape was closed source at the time, and the company was severely disfunctional. Now that it's open, it's almost back in the lead (if you haven't used Mozilla 0.9.7, use it as your primary for one week before you respond).
(b) 5 Years. RealAudio is closed source.
(c) Are you high? Haven't you heard of Apache? Granted, there was a ~12 month period when IIS first came out that Apache/Win32 was more black art than science, and IIS is still preferred 10 to 0 by people who use the server that comes with Windows, but I hardly consider that "shutting Apache down".
I'm not saying Microsoft is incapable of putting up a fight. Fearing them is healthy, particularly if it drives us to greatness. But they are not the irresistable juggernaut you portray. -
My experience with Common Lisp
Since the day I joined Franz Inc. as the new Webmaster, I have been writing more code than at any previous point in my career. I have become immersed in Lisp programming, specifically AllegroCL, which I found to be a stimulating challenge to learn. I discovered that writing Lisp is sheer joy to anyone who has ever been frustrated out of programming by the tedium of obligatory declaration of data types, allocation and de-allocation of memory and the like, or simply by the time they take to learn. To finalize my education in AllegroCL, I was tasked with replacing the Franz webserver with AllegroServe. Though I am not a slow student, I made many mistakes and found that the simplified testing of code via the AllegroCL debugger and the ability to modify a program while it is running were indispensable tools both in my education and software troubleshooting. Making use of these features, I have found that adding new code to a program is remarkably easy to do, even when that new code requires making significant structural changes. In the end, I'm always left with a program which runs as quickly as any others I use and exhibits enhanced stability and security features while maintaining a reasonable memory footprint.
Among my first tasks at Franz was familiarizing myself with Allegro Common Lisp. My interest in Lisp's long, rich and diverse history was one of the chief reasons I applied for the job, so I was happy to oblige. I've always found the history of computing to be of great interest, and Lisp has been there throughout most of the last 50 years (of currently-used languages, only Fortran predates its nativity), so I find its endurance of especial interest. Lisp has undergone a process of evolution during its lifetime spawning several dialects, one of which is Common Lisp; AllegroCL is an implementation of Common Lisp.
The aspects which I find most satisfying in AllegroCL include automatic memory management and dynamic typing of data. Both of these features eliminate a tremendous amount of tedium from coding and allow me to get more work done in less time. I was never a serious programmer before I was introduced to Lisp, but now I've found a passion which outweighs my penchant for computer gaming. In the past, I would frequently spend much of my free time mastering the newest reason to own a 3d-accelerated video card, but recently I've found that I have more to show afterwards if I write code for fun, as evidenced by the chatroom software I wrote as an educational exercise which can be seen in production on my server at home, here (running on AllegroServe). It took a little longer to write the chat software than it usually takes me to master a new game, but at a total of 16 hours, it was less than half the time that most games take to complete. I began working more and producing a tremendously increased level of output, all without the slightest increase in my stress level.
After spending a couple of months with Franz, familiarizing myself with my responsibilities as Webmaster while learning Allegro Common Lisp, I was tasked with converting the Franz website from Apache webserver to an AllegroServe-based solution, which entailed writing a webserver which used AllegroServe at its core and provided all of the features which I found in Apache, while adding a few site-specific features. AllegroServe's chief developer, John Foderaro, and I were able to complete this task in time for the recent release of AllegroCL 6.1. The speed of development under AllegroCL was due in no small part to the ACL debugger of which I made prodigious use early-on. The ability to inspect running code and make modifications at the point of failure not only made it a simple matter to identify and fix bugs, but it was also an invaluable educational tool. Initially, I wrote bad code - lots of bad code - but every mistake I made was immediately obviated and resolved through liberal application of this handy tool. The ability to directly interact with data in a running program provided education that extended beyond the scope of any single programming language, my ability to visualize software structure and the flow of data was greatly enhanced.
After a few weeks of use, I began to realize that I wasn't having more than one bug in my code every few days - needless to say, I was elated. Until this point, I was working on relatively simple aspects of the webserver, such as the Franz menu generation, customer survey, and trial download sections. This accelerated rate of learning gave me enough positive feedback that I felt comfortable taking on more ambitious segments of the project. After I progressed through the header, menu, and footer-wrapping code which provides the interface to my earlier menu generator's output on Franz' "lhtml" pages, I came to the logging facility. By far, writing the code to manage the log handling was the most challenging aspect of the webserver's design so far. It was at this point that John and I came to realize that we would need to significantly enhance the virtual-host capabilities of AllegroServe to provide such services as separate access and error log streams for each individual virtual host. Despite the challenge, John managed to implement these changes in less time than it took me to write the code to handle formatting the logfiles in a manner compatible with Apache's output, which Franz especially required to enable the continued use of certain website log analysis tools. The two of us had completely changed the manner in which AllegroServe handled logging in a mere two days. John also eventually added excellent support for running standard CGI programs which would have their own log streams, and I made use of the added functionality to support a "cgiroot" which allows the Apache-like feature of being able to specify a path in which cgi programs will reside while sending any cgi log output to the vhost error log. I would encourage any current Apache users who wish to try-out AllegroServe to make use of this feature when configuring a server, it makes CGI installation and use a snap. After I'd written the bulk of my contribution to our system, I hit upon another necessary feature, the ability to include in-tree access control files akin to ".htaccess" files under Apache. This was a significantly more complex challenge than the logging and virtual host modifications John and I had previously added, due to the depth of the AllegroServe feature-set we would have to make available for modification within these files, and the associated security concerns. This obstacle took a fair amount of time to surmount, John made significant changes throughout AllegroServe, and we went through a great deal of testing to ensure that no security risks had been created. In the end, we were satisfied that we had made a very worthwhile addition to the webserver.
I continued writing interface and configuration code and enlisted John's expert help whenever I would find a feature AllegroServe lacked, and we concluded the conversion with a version of the Franz webserver that has only required minor modifications since. When I had ironed-out any remaining bugs, of which there were fortunately very few, John assisted me in profiling our code to assess its speed bottlenecks. After heavily load-testing the server, we discovered that the slowest part of the code was that used to check the timestamps on files for the purposes of updating our cache. This was greatly satisfying because the speed of this code was so fast that we could not consider this to be a problem. We also discovered that there was an excessive memory waste within a few seemingly clean segments of code, we were using a dynamically-sized string creation function which relies upon the multiple different data types for the sake of convenience. We converted this to make use of a large fixed-size array which would contain the string, even if it grew as long as it possibly could, and halved the server's memory usage. Bandwidth load testing showed that we had an extremely fast server - we were able to utilize around 850-900KB/sec. across a 10 megabit network when running the system on an Intel Celeron 533. Additionally, thanks to our prior memory-usage enhancement which came-up during profiling, we were only using a total of 30MB of RAM for the webserver, cache and all.
I am very satisfied to have had a hand in such a successful project, especially successful considering that I was a rank novice programmer when I began work on it. The speed with which I learned to program in AllegroCL was an entirely new phenomenon to me, one which has enriched my computer usage and allowed me to express my ideas for software in code, something I never had the capability of doing in the past due to my unwillingness to suffer through the tedium programming had historically presented me with. When I found myself attaining a satisfactory level of programming ability, I was struck by the ease of writing clean and modular code on the first attempt. Augmenting that ability, the ease of adding and restructuring AllegroCL code to a running or non-running program, especially with the aid of the ACL debugger, greatly decreased both my development time and my frustration while further enhancing my level of programming skill. I have learned a great deal about Lisp, AllegroCL, and programming in general over the course of this project, and without it I would not have had the chance to make such a satisfying acquaintance with Allegro Common Lisp, which has become my programming language of choice.
-
Re:Quality Config Tools
-
Re:WebDav support
as keanu would say: "whoa." that was a pretty insane post. i'm still dizzy.
the kickass new "sorta still beta" Apache Tomcat servlet container has built-in WebDAV too. Anyone know if there's some coordination between the two implementations? -
xml documentation
we just wrote a web app which uses xml/xsl processing to create web pages, so decided to write the docs in xml too. nice text based format for the doc, easily readable & updateable by us, easy to version control etc.
we use xalan/xerces from xml.apache.org to transform the xml into pdf/html using xsl/fop for presenting to users etc - bit of work setting it up, but we'd done most of it already for the app so it wasn't much work, and now its set up its a lovely method, just edit the xml and run a script to output to pdf/html.
anorakgirl
ps i do think we have a habit of doing things the long way round though, sticking with text editors & scripts rather than using ready made apps... :) -
Re:Apache Cocoon...
Damn sorry, that link should have been this one.
-
Be a little wary of DocBookI've done Beej's Guide to Network Programming in DocBook (it used to be HTML). It works quite nicely for HTML output with NWalsh's stylesheets.
What was hard was getting it set up, and getting help out of the DocBook people in the know. (They can be pretty unapproachable sometimes.)
What was also hard was getting print output to work nicely. I was running fine for a while until I upgraded openjade, and then blammo--two-sided print output doesn't work anymore. Openjade simply refused to put the two-side directive in the TeX output, so I did it myself.
And what is it about my document that causes openjade to take 3 minutes to pump out TeX output, when it does the HTML in about 5 seconds?
Why is it that when I put two tables on the same page openjade/jadetex doesn't take that into account and keeps printing text off the bottom of the sheet?
The other place I've looked is Xerces/Xalan/Fop at Apache. I like the Formatted Objects idea, and it seems pretty sound. Also, the whole thing was about 827 times easier to set up than the jade stuff. Unfortunately, the code is alpha and doesn't work very well, sometimes crashing during the render.
"How does ORA do it, then?" I hear you asking. They have custom in-house tools for processing DocBook that have been in development for some time. Word on the street is that they might be releasing them soon.
Conclusion: if you want print output, you might have trouble getting what you want with DocBook at this time. At least when I code TeX it does what I say. (I don't recomment plain TeX for documentation. Maybe LaTeX since it's easier to convert to HTML. And pdf(la)tex produces nice PDFs.)
-
Apache Cocoon...
apache cocoon is an awesome publishing tool. I recently created a site that creates a web site and a series of PDF documents from the same source. Your input documents are as simple as you want them to be, because you define it yourself and transform it into HTML or XSL:FO via XSLT.
-
XML & XSL
I have a DIY documentation system that is (so far) good enough for my needs. I started righting documentation in HTML but wanted to produce nice hardcopy as well. Rather than writing it twice; once in HTML, once in LaTeX, I turned my HTML docs into HTML-like XML and wrote myself some XSL transforms that produce either proper HTML or LaTeX. At some stage I'll probably do a transform to produce XSL-FO (formatting objects) which I can run through the Apache Group's FOP to produce PDFs.
I know it's reinventing the wheel but I was learning XSL at that stage and my documentation requirements are pretty lean.
Geoff.
-
tried XML?i've used XML:fo with pretty good results. checkout xml.apache.org and checkout the section on FOP. it's excellent for formatting text documents. you write the xml and then a stylesheet for the targeted format (pdf, html among several others.) i've even used it for quite complex (tables within tables etc.. with explicit control over page breaks
...)what it's good for:
1. content independent formatting (but you knew that as soon as i mentioned xml)
2. several popular target formats. PDFs, SVG, html...
3. completely ASCII so you can check it in and out of CVSs all day long.
3. platform independent. java -- standard rules apply.
What it's not good for (in my opinion anyways)1. doing 'auto-documentation' ie. getting the documentation straight out from the source files. but you can overcome that with some other script that ends up with the xml input for FOP.
2. problems with HUGE input files. it runs slow and without the -mx and -ms switches for java-runtime it almost always chokes with large files.
all in all tho, with a good xml editor (and emacs is as good as any
;) ) FOP just can't be beat. recent versions even do bookmarks in PDFs. that's been very handy. several target formats with just a different switch and a stylesheet?!! quite impressive. check it out. it's very worth the try. -
Re:javadoc works well for Java code
The ANT build tool contains a built in Javadoc task, we are able to build up to date Javadoc that way. It is also possible to write tasks for generating docs from other sources, Tex for example.
-
FOP
For an XML and PDF based solution, check out FOP from the Apache XML Project. Based on XSL Formatting Objects, an upcoming W3C-standard. It rocks!
-
Re:the text of the letter to Bill Gates
Can apache run ISAPI applications?
Yes.
http://httpd.apache.org/docs/mod/mod_isapi.html -
Re:This might make it a bit more intriguingI've only used IBM and apache SOAP parsers, so maybe microsoft has written an optimized SAX parser specifically for validating SOAP documents. I've written custom parser using JAXP 1.0 and Xerces 1. Even though I was wrong in my original post (oops no coffee), SOAP is still incomplete for complex distributed processes. If I had to implement a driver to charge credit cards for an E-commerce site (which is most likely the first use of SOAP), I would rather do it with XML RPC.
Just because my brain was caffiene deprived
:), doesn't mean SOAP is any better for complex distributed processes, or light enough for simple web services. -
1.0Re: Barr and Roblimo predictions. VERY BORING.
I'm excited about several potentially significant projects that may have their first "stable" releases next year. Everyone knows about OpenOffice, Apache 2 and Mozilla (I'm surprised that neither article mentioned the last two). Here are a few others:
- Subversion version control rethought, could replace CVS as free software tool of choice
- E capability secure programming
- Reptile reputation-based content aggregator
-
Re:Use framework, seperate code form display.. andPerl has plenty of web application frameworks, and they're all approach the problem differently. See the mod_perl page for starters. <plug>OpenInteract is probably one of the most complete of them as it includes a framework for data access, security, user and group management -- all the fun stuff.</plug>
Chris
-
Re:It IS hard to explain to people.
OK, I did a little research (about 10 seconds worth, should have done it originally), and found the Apache Foundation's contribution guidelines. Basically, they are not yet registered/qualified as a charity, but you can donate to them and write it off as a business expense (which gets to the heart of the original poster's comment about whether or not donating would be legal for a public company).
-
Re:Soap
Were you thinking of Axis?. It's still work in progress, because SOAP is too
-
Re:Thanks to the GPL
Feeding a troll, perhaps, but this is factually incorrect. Apache's license is fairly similar to that of BSD- Apple was not forced to release anything for Apache.
-
WebDAV
Try a webdav based solution. WebDAV allows you to interact with a WebDAV enabled server to manipulate files with support for locking via extensions to HTTP 1.1
Delta V adds version control to that.
There are webdav enabled DMSs starting to appear (inc eg MS Sharepoint); WebDAV and its related standards will become the standard API for interacting with a DMS.
While not yet fully featured DMS, there are good open source implementations of webDAV clients and servers; I use Slide - which works well with Tomcat 4.
-
Name lookups can be trickyI've either had to customize other people's statistics generators or write my own. Most of the services I've had to work with either have no session tracking or else use GET and include an identifier in the path. This make for long bookmarks / URLs but makes it easy to follow one session in the logs.
One issue that I have noticed is that unless you are serving scripts, hostnames in the logs are becoming less relevant due to caching and proxies. However, if you do track host names then getting a 100%(ok 99%) accurate list is hard -- If you wait a few days, weeks or months to analyse your logs, then some of the IP may have changed owners. If you try to let the HTTP daemon do the lookup, then you suffer a drop in performance and the very first lookup or two often fails anyway.
If you use Apache (I have no experience with the others), then it is easy to pipe the log output directly to a script.
CustomLog "|/usr/local/apache/bin/rotatelogs
You can even make it tab-delimited or what ever it takes to be easier to parse. /var/log/access_log 86400" common
LogFormat "%h\t%l\t%u\t%t\t%r\t%>s\t%b\t%{Referer}i\t%{Us er-Agent}i" tab
Myself, I'm about to experiment with logrotate, rotatelogs, cronolog and mod_mylog. mod_mylog puts the log output straight into your RDBMS and even claims to cache records if the RDBMS is temporarily unavailable.
CustomLog /var/log/httpd/access_log combined CustomLog /var/log/httpd/funky_new_log tab -
Re:Performance?During a two semester introductory course in software engineering I participated in a group that refractored a J2EE application (improved underlying code yet left it bug-for-bug compatible) and then completely reimplementation another J2EE application concept. Throughout both experiences, the rich support of architectures and patterns, on which JBoss (and Tomcat) are designed, made the projects simpler and more effective at achieving the goals of writing maintainable code.
More importantly for this point-of-view is these (like many other programming techniques) allowed the group to implement solutions with widely varying performance: from slow but explicit code to hand-tooled solutions that utilize aspects of the problem domain. While it is a common conception that systems with as rich a feature set as JBoss are performance hogs, it should be noted that most enterprise scale systems don't have very attractive small-scale performance (some Oracle DBs can have a +1GB footprint before any user data or DBs are added which ain't exactly embedded.) JBoss is both small and fast enough to run from student/school-lab quality development systems (real budget machines IHMO) but has sufficient performance to match wits with a full-blown ecommerce application. I helped implement a complete on-line store (liquor store, that is) that held under our test loads (page view/transactions per sec) without relying on clustering.
The onjava.com article does bring up a valid point: like many complex software packages (tcsh, ant, Java) does have a complex environment to setup and maintain. A large part of this however (much like with tcshrc config files) it is a matter of how much you want to custom tailor YOUR system. Much like makefiles and easy builds, a little bit o' work goes a long way (I've seen a factor of ten improvement with some cases.) I think though you will find the best improvement in performance not from hoping between J2EE systems but from good ol' fashion Data Structures and Algorithm Analysis appropriate to you application.
Happy coding.
-
Jakarta Plug & My AppServer Experiences
...JBoss article.... must... plug... Jakarta Project.
Jakarta contains whole bunches of open source tools that work great for Java Projects (I'm using struts and ant on my current project).
They all work extremely well (and simple to install) with JBoss.
I don't know the level of people using JBoss, though. The top two app servers are WebSphere and Weblogic. They take 50% of the market. The next is iPlanet (netscape), then I think its JBoss. So, even though its the cheapest (free), doesn't mean its got the market.
It'll be tough to crack WebSphere & WebLogic.
What JBoss needs is a certification (with levels) for developers to obtain.
If I go to a client and say "I have a level 3 WebLogic certification, a level 2 WebSphere certification, and know JBoss", what are they gonna pick? -
Divide & conquer and other adviceI'm assuming that since your system is a large project, it has subsystems in subdirectories. If this is the case, you can do a "pilot". Pick a very small subsystem and convert it to autoconf. Then pick a real target (for example, the most awkward system which is not gigantic) for a proof-of-principle. This process will provide you with enough evidence to back you up - or it will provide you with evidence that you shouldn't do the conversion after all. If you end up converting, you will have a top-level configure script that cascades down and calls the other ones.
Don't forget the Autoconf macro library and also the fact that there are thousands of free packages out there which will have configure scripts from which you can borrow - try to find packages in a similar domain to your own.
The difficulty (complexity, time taken) in maintaining a package which works on N platforms is usually proportional to N - or if you are unlucky, some small power of N like 2. What your code is really doing is trying to understand the properties of the target system and so the #ifdef __hpux__ for example in line 1249 of blurfl.c is actually trying to determine if the quux is use like this or like that. Autoconf on the other hand will produce a single preprocessor macro for driving the quux. This means that you don't have an extra 15 lines of #ifs to handle quuxes in other operating systems. Hence you may not have less #ifdeffed bits, but each of the #ifdeffed bits will be shorter.
Autoconf works differently to thge standard approach - it allows your code to work with each feature independently, and so while the normal approach is O(N) or O(N^2) in the number of suppoered OSes, the complexity of maintaining an autoconfiscated program is O(N) in the number of different features supported by the operating systems between them. The great thing about this is that Autoconf keeps these orthogonal and prevents these things from interacting too heavily, and it turns out to the the case that the total number of different features basically flattens out to some constant number even when you continue to add more supported OSes (i.e. there are only a certain total number of different ways of doing things even though each of the N operating systems can choose among X ways of doing Y things).
So, what this means is that you shold do the feasibility study as discussed above, but naturally autoconfiscating the whole system will take a while. The ideal time to do this is either
- when you are in any case adding support for an extra platform or two or
- on a piecemeal basis for each subsystem.
Another option to explore in combination with Autoconf is the Apache Portable Runtime. There is also Autoproject but I suspect that is a little lightweight for your needs.
Taking all the above together I suggest that you
- Propose a feasibility study, using a couple of sections of the project
- Identify a way of making the newly autoconf-ed section fit in with your existing build mechanism (so that you can roll out autoconfiscation gradually across the project).
- Identify any related open-source projects which might have useful autoconf macros (e.g. Gnome has lots).
-
Re:Astoundedanother example of security through obscurity.
No. Mac may have some "security through rarity", but OS X is not obscured. Neither are its web services nor its SQL implementations.
So I have to ask, what are you talking about? -
mod_rewrite reference, examples
Well some docs are here, and the mod_rewrite reference is here.
Here is a goofy example that does a redirect back to their google query, except with the word "porn" appended to it. As an added bonus, it only does it when the clock's seconds are an even number. (Or do the same test to the last digit of their IP address). Replace the plus sign before "porn" with about 100 plus signs and they won't see the addition because each plus sign becomes a space. The "%1" refers to their original query.
RewriteEngine On
RewriteCond %{TIME_SEC} [02468]$
RewriteCond %{HTTP_REFERER} google\.com/search [NC]
RewriteCond %{HTTP_REFERER} [?&]q=([^&]+)
RewriteRule . http://www.google.com/search?q=%1+porn [R=temp,L]Here's another one that checks the user-agent for an URL, and then redirects to it. This keeps most spiders and stuff off your pages since they usually put their URLs in the User-Agent:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "(http://[^ )]+)"
RewriteRule . %1 [R=permanent,L]Anything you can think of is possible. I think you can even hook it into external scripts.
-
mod_rewrite reference, examples
Well some docs are here, and the mod_rewrite reference is here.
Here is a goofy example that does a redirect back to their google query, except with the word "porn" appended to it. As an added bonus, it only does it when the clock's seconds are an even number. (Or do the same test to the last digit of their IP address). Replace the plus sign before "porn" with about 100 plus signs and they won't see the addition because each plus sign becomes a space. The "%1" refers to their original query.
RewriteEngine On
RewriteCond %{TIME_SEC} [02468]$
RewriteCond %{HTTP_REFERER} google\.com/search [NC]
RewriteCond %{HTTP_REFERER} [?&]q=([^&]+)
RewriteRule . http://www.google.com/search?q=%1+porn [R=temp,L]Here's another one that checks the user-agent for an URL, and then redirects to it. This keeps most spiders and stuff off your pages since they usually put their URLs in the User-Agent:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "(http://[^ )]+)"
RewriteRule . %1 [R=permanent,L]Anything you can think of is possible. I think you can even hook it into external scripts.
-
Say what?All the leading commercial calendar servers support iCalendar. The one that comes to mind is the iPlanet server that used to belong to Netscape. The Evolution product page mentions Exchange and Notes -- two choices I find very curious from an Open Source company!
Jetspeed has iCalendar support, but apparently nobody's currently working on it.
Apparently Ximian thinks it's enough to make clients open-source and leave servers to the proprietary folks.
-
Say what?All the leading commercial calendar servers support iCalendar. The one that comes to mind is the iPlanet server that used to belong to Netscape. The Evolution product page mentions Exchange and Notes -- two choices I find very curious from an Open Source company!
Jetspeed has iCalendar support, but apparently nobody's currently working on it.
Apparently Ximian thinks it's enough to make clients open-source and leave servers to the proprietary folks.
-
Re:better yet, get away from von NeumannAssignment-statement-free languages are a nice idea for certain kinds of tasks (I find XSLT useful for simple data manipulation, for example). However, I haven't found many papers on object-oriented databases (or long-term persistence) in functional languages. That's probably because object-oriented databases really need imperative programming.
Yes you can dump and reload RAM, and yes you can use virtual memory. But that just brings out the main gripe I have against the idea of an assignment-free language - it seems to me that there is lack of sufficient control over performance, which is important. (If something is going to page in and out for 5 minutes before doing anything useful, like my installation of VMWare used to do sometimes before I upgraded my RAM, it's simply unacceptable.)
That and the lack of flexibility. I would rather try to formalise contracts in imperative languages, building on things like Eiffel's Design by Contract, even though it might be perceived as more "dangerous" than assignment-free languages in some theoretical, ivory-tower sense. (Which I don't believe because the most important fact about programming is that it is a human activity, and if the human beings involved don't understand the code, it's unlikely to work - and not everyone can understand all the intracies of even say Java, so I don't hold out much hope for even more counterintuitive languages!)
-
Re:You have the answer
Many APIs use reflection as a convenient replacement for the lack of method pointers - it is so much easier to use a method name and a object reference than creating a new (inner) class for each method.
So let's add pointers to Java? And while we're at it, let's add multiple inheritance, operator overloading, a macro preprocessor, etc., and end up with a slower version of C++. And then we can address the slowness by getting rid of the JVM and compiling to native machine code. Of course, we'll have to add a sizeof operator, and fill our headers will lot's of #ifdef I386 macros, but that's OK, because then Java would be almost as good as C++.Pointers don't exist in Java for a reason. Are pointers evil? Of course not, they're great! But they have some serious drawbacks, so Java chose to avoid them to improve stability and security.
That there are people who are fed up with writing Classname.methodname for each invocation of a static method so they use inheritance to get rid of it.
You either have to write 20 or more characters for each invocation, which can make complicated code unreadable and is annoying to type, or you write wrappers for each static method in your own class, or you inherit from the class that is providing the static methods.
Many would argue that forcing the programmer to put the explicit "class.method()" instead of just "method()" in their code makes it clearer to later maintainers exactly what's being called.
And Martin Fowler would argue that if the code is that complicated, you need to do some refactoring!Just look at the Jakarta stuff.
Which Jakarta stuff? There are over 20 distinct projects. Most of them are very, very good. Ant is gaining a lot of momentum and is being included with many new open source projects. The same can be said of Struts, and Velocity is a very important component of ArgoUML. And we all know that Tomcat, with version 4.0, has evolved into a very good quality JSP/Servlet platform. -
Re:You have the answer
Many APIs use reflection as a convenient replacement for the lack of method pointers - it is so much easier to use a method name and a object reference than creating a new (inner) class for each method.
So let's add pointers to Java? And while we're at it, let's add multiple inheritance, operator overloading, a macro preprocessor, etc., and end up with a slower version of C++. And then we can address the slowness by getting rid of the JVM and compiling to native machine code. Of course, we'll have to add a sizeof operator, and fill our headers will lot's of #ifdef I386 macros, but that's OK, because then Java would be almost as good as C++.Pointers don't exist in Java for a reason. Are pointers evil? Of course not, they're great! But they have some serious drawbacks, so Java chose to avoid them to improve stability and security.
That there are people who are fed up with writing Classname.methodname for each invocation of a static method so they use inheritance to get rid of it.
You either have to write 20 or more characters for each invocation, which can make complicated code unreadable and is annoying to type, or you write wrappers for each static method in your own class, or you inherit from the class that is providing the static methods.
Many would argue that forcing the programmer to put the explicit "class.method()" instead of just "method()" in their code makes it clearer to later maintainers exactly what's being called.
And Martin Fowler would argue that if the code is that complicated, you need to do some refactoring!Just look at the Jakarta stuff.
Which Jakarta stuff? There are over 20 distinct projects. Most of them are very, very good. Ant is gaining a lot of momentum and is being included with many new open source projects. The same can be said of Struts, and Velocity is a very important component of ArgoUML. And we all know that Tomcat, with version 4.0, has evolved into a very good quality JSP/Servlet platform. -
Re:You have the answer
Many APIs use reflection as a convenient replacement for the lack of method pointers - it is so much easier to use a method name and a object reference than creating a new (inner) class for each method.
So let's add pointers to Java? And while we're at it, let's add multiple inheritance, operator overloading, a macro preprocessor, etc., and end up with a slower version of C++. And then we can address the slowness by getting rid of the JVM and compiling to native machine code. Of course, we'll have to add a sizeof operator, and fill our headers will lot's of #ifdef I386 macros, but that's OK, because then Java would be almost as good as C++.Pointers don't exist in Java for a reason. Are pointers evil? Of course not, they're great! But they have some serious drawbacks, so Java chose to avoid them to improve stability and security.
That there are people who are fed up with writing Classname.methodname for each invocation of a static method so they use inheritance to get rid of it.
You either have to write 20 or more characters for each invocation, which can make complicated code unreadable and is annoying to type, or you write wrappers for each static method in your own class, or you inherit from the class that is providing the static methods.
Many would argue that forcing the programmer to put the explicit "class.method()" instead of just "method()" in their code makes it clearer to later maintainers exactly what's being called.
And Martin Fowler would argue that if the code is that complicated, you need to do some refactoring!Just look at the Jakarta stuff.
Which Jakarta stuff? There are over 20 distinct projects. Most of them are very, very good. Ant is gaining a lot of momentum and is being included with many new open source projects. The same can be said of Struts, and Velocity is a very important component of ArgoUML. And we all know that Tomcat, with version 4.0, has evolved into a very good quality JSP/Servlet platform. -
Re:You have the answer
Many APIs use reflection as a convenient replacement for the lack of method pointers - it is so much easier to use a method name and a object reference than creating a new (inner) class for each method.
So let's add pointers to Java? And while we're at it, let's add multiple inheritance, operator overloading, a macro preprocessor, etc., and end up with a slower version of C++. And then we can address the slowness by getting rid of the JVM and compiling to native machine code. Of course, we'll have to add a sizeof operator, and fill our headers will lot's of #ifdef I386 macros, but that's OK, because then Java would be almost as good as C++.Pointers don't exist in Java for a reason. Are pointers evil? Of course not, they're great! But they have some serious drawbacks, so Java chose to avoid them to improve stability and security.
That there are people who are fed up with writing Classname.methodname for each invocation of a static method so they use inheritance to get rid of it.
You either have to write 20 or more characters for each invocation, which can make complicated code unreadable and is annoying to type, or you write wrappers for each static method in your own class, or you inherit from the class that is providing the static methods.
Many would argue that forcing the programmer to put the explicit "class.method()" instead of just "method()" in their code makes it clearer to later maintainers exactly what's being called.
And Martin Fowler would argue that if the code is that complicated, you need to do some refactoring!Just look at the Jakarta stuff.
Which Jakarta stuff? There are over 20 distinct projects. Most of them are very, very good. Ant is gaining a lot of momentum and is being included with many new open source projects. The same can be said of Struts, and Velocity is a very important component of ArgoUML. And we all know that Tomcat, with version 4.0, has evolved into a very good quality JSP/Servlet platform. -
Try the Apache Portable Runtme
The Apache Portable Runtime has good cross-platform I/O, threading and networking support. Plus you know it will have been tested in a demanding environment (Apache!)
-
Apache Portable Runtime
would be a good place to start for the threading and networking parts. from what i've seen, it looks like a well engeneered package (and you'll have a hard time finding a better tested library
:-). http://apr.apache.org/ -
What works for ApacheWhile this isn't exactly what you asked for this is what works for Apache.
Yeah, ok I'm a karma whore. Still, if it helps this guy what's the harm? -
What works for ApacheWhile this isn't exactly what you asked for this is what works for Apache.
Yeah, ok I'm a karma whore. Still, if it helps this guy what's the harm? -
What works for ApacheWhile this isn't exactly what you asked for this is what works for Apache.
Yeah, ok I'm a karma whore. Still, if it helps this guy what's the harm? -
Re:Static PHP + scripts running as users
Actually the way they do it is there is an MPm called perchild. With the perchild scheme each process runs under a different userid(to replace suexec), so you would have php scripts run as a different user.
You can see more about MPMs here -
Re:Powered by NSPR!
Wrong. Apache uses APR, not NSPR:
http://apr.apache.org/ -
mod_perlWhat about all of the cool API stuff and plugins, I suppose they all have to be rewritten? Mod_rewrite, mod_perl, etc, etc, yes?
AFAIK Apache's API have been changed and indeed all its modules should be rewritten for new Apache.
I don't know about all modules but here some info about mod_perl. There is already exist rewrite of mod_perl for Apache 2.0 with threads support. It has many tasty features. Check yourself.
-
mod_perlWhat about all of the cool API stuff and plugins, I suppose they all have to be rewritten? Mod_rewrite, mod_perl, etc, etc, yes?
AFAIK Apache's API have been changed and indeed all its modules should be rewritten for new Apache.
I don't know about all modules but here some info about mod_perl. There is already exist rewrite of mod_perl for Apache 2.0 with threads support. It has many tasty features. Check yourself.
-
Re:At $1495 per CPU
Yes quite, for those of you who just want to download Apache 2.0, compile it and have it running by the time you could have bought the package from Covalent, go here
-
Apache has released 2.0 betas
"It's not clear when the Open Source Edition (or whatever) will come out and I didn't find anything at the official Apache Site."
Here is apache 2.0 documentation and you can download 2.0.16 (public beta) or 2.0.18 (it's an alpha).. but what do you want them to open source? The 2.0 core (it is) or the proprietary enhancements (yeah right).
Kenny
at least slashdot didn't change my urls into http://slashdot.org/httpd.apache.org this time. -
Apache has released 2.0 betas
"It's not clear when the Open Source Edition (or whatever) will come out and I didn't find anything at the official Apache Site."
Here is apache 2.0 documentation and you can download 2.0.16 (public beta) or 2.0.18 (it's an alpha).. but what do you want them to open source? The 2.0 core (it is) or the proprietary enhancements (yeah right).
Kenny
at least slashdot didn't change my urls into http://slashdot.org/httpd.apache.org this time. -
Re:Features for a Java IDE
Regarding the debugging, using a debugger is really a pain in a multithreaded environnement, such as a GUI app, or a servlet. So a good debugger is not what I'm really looking for in a Java IDE. Of course it's useful if you have one procedure to observe and which is not correlated with other things.
But for complicated services, I really prefer to use advanced logging, such with log4j. They also discuss in the documentation the pros and cons between logging and interactive debugging. -
IDEA increased my productivity
I write EJB web applications for a living and having tried a variety of IDEs I have to recommend IDEA, by IntelliJ. It is the IDE for rapid development, every feature is right where you need it, and nothing is in the way. I find that with IDEA I write better/cleaner code than with any other editor. I particularly appreciate the integrated ANT and CVS integration. It is a java app and was a breeze to install on Linux, Win2k and MacOS X. I won't be going back to any other IDE!
-
Text editor + Jakarta Ant
Actually, the best way to improve developer productivity is to throw away IDE's completely -- use a good text editor such as SciTE (www.scintilla.org) and for a build tool I'd recommend Jakarta Ant. IDE's tend to make programmers lazy, and thus don't actually think things through before they start coding.