There are a number of ways to create a pdf file by using open source software. For example, openoffice can export their document files into PDF. But How's about others file type? For example, how can I export a web page into PDF?
I found the best way is getting a PDF Printer driver. I just need to open the file and print it into a PDF Printer. Then it will "print" into a pdf file. I am using PDFCreator to do this task. It is free and opensource.
In the Java World, we have a set of library, Commons, from Apache. They provide a lot of cores functions such as email, logging and validations. In our .Net World, the open source community build a set of Commons Library. They provide a lot of cores functions, such as ORM, CSV Parser and validations. Those are different from the java version. Anyway, there are a strong set of functions. They are useful for building your own web framework. Such as, Logging and CSV Parser are essential functions for a web framework.
Previously, I used "Joo ReCaptcha". That is very a good plug-in. But ReCaptcha got a bug in IE. When its captcha text field will disappear when I use jQuery.blur() or focus(). I used superfish menu. It used these two jQuery methods a lot. When I show the sub-menu, then captcha text field will disappear. I have spent a day to fix it but I cannot find a solution or work around.
Thus, I gave it up. I used another Captcha Plug-in which is not using ReCaptcha. That is OSOLCaptcha. This is very similar with ReCaptcha, but it can convert captcha text to speech. This may be some accessibility issue. Besides of this, that is very similar with Joo ReCaptcha. You just need to install the plug-in, then it will works in Contact form, login and register form. That is good.
Good captcha plug-in in Joomla
I got a lot of error from a LINQ DataContext, such as "Invalid attempt to call Read when reader is closed" . That is because I was using a singleton for DataContext in a multi-threads.
The codes like that:
That is not very thread-safe. A thread will close the DataContext, but others threads are still using DataContext. Then it will throw the error above.
I changed the DataContext in a pre-thread. I initialize the DataContext in each thread. The errors are gone! You also can do the DataContext in a pre-object. That is simpler.