Every Flavour Beans

“The time has come…to talk of many [technologies].” –Lewis Carroll(’The Walrus and the Carpenter’)
Development Tools. Web Frameworks. GNU/Linux. Nokia N800. Video Encoding.

August 6, 2008

C++ Development Environment on Windows using Eclipse Ganymede and Nuwen MinGW

Filed under: C++, C++ Boost, Eclipse — tabrez @ 9:37 pm

My friend alerted me a month ago about Nuwen’s build of MinGW toolchain that has version 4(currently 4.2.1) build of g++ compiler. Now that’s awesome. But that is not all: it also comes with C++ Boost 1.35 bundled as part of it, among many other useful C++ libraries.

Consider this post to be an update of my previous post “Setting Up C++ Development Environment on Windows with EasyEclipse and MinGW.” I will be using the following components in this post to setup the development environment for C++:

  1. Eclipse Ganymede for C++ instead of EasyEclipse for C++.
  2. Nuwen’s MinGW 3.9 Distro instead of official MinGW build.

Download/Install Eclipse Ganymede for C/C++ and Nuwen’s MinGW for Windows

  1. Download Nuwen’s MinGW distro and extract it in a directory. Try to extract it in a directory that doesn’t contain spaces or special characters in it: a good place to extract will be C:\MinGW.
    Download Nuwen's MinGW distribution.

    Extract Nuwen's MinGW distribution in a directory.

  2. Download Eclipse Ganymede IDE for C++ and extract it a directory.
    Download Eclipse Ganymede for C/C++ IDE.

    Extract Eclipse Ganymede for C/C++ in a directory.

  3. Run the Eclipse executable from the directory where you have extracted it(you can later place a shortcut to the Eclipse executable on the windows desktop/start menu/quick launch bar/etc. for quick access). When you try to create a new C++ project in Eclipse, MinGW will be automatically detected and be listed as one of the available toolchains. Automatic detection works the best if you extract in the directory as recommended in Step 1.

    Select installed Nuwen's MinGW toolchain when creating new C/C++ projects in Eclipse Ganymede for C/C++ IDE.

  4. You can check the version of the g++ compiler from the command prompt.
    C:\> cd C:\MinGW\bin
    C:\> g++ -v
    gcc version 4.2.1-dw2 (mingw32-2)

    (You don’t have the change the working directory to MinGW bin directory if its location is in the PATH variable.)

  5. Let’s write some C++ code making use of a Boost library and try compiling the code. Here is a screenshot of an example HelloWorld program(click to see the large version):

    HelloWorld C++ application in Eclipse IDE using Nuwen's MinGW distro.

It’s such a good thing for me to have discovered a MinGW build with g++ v4 and Boost bundled in it at around the same time that Eclipse Ganymede was released, I have to thank Stephen T Lavavej for bringing the C++ development experience on Windows a bit closer to that of GNU/Linux. Head to Nuwen’s MinGW page to learn what all is included in the distribution. You may also be interested in my previous post that I referred to at the beginning of this post.

Now for some more paying with the g++ 4.2.1 compiler on Windows ;)


If you want to receive future posts by email, enter your email address here:

Related Posts:

  • Setting Up C++ Development Environment on Windows with EasyEclipse and MinGW
  • Wascana is Eclipse Based Standalone C++ IDE for MS Windows
  • Six Popular IDEs For Developing Software in C/C++ on Windows Platform
  • Build C++ Programs With SCons in Eclipse Using SConsBuilder Plugin(MS Windows)
  • Unit Testing C++ Programs using CppUnit in Eclipse IDE on Windows
  • EasyEclipse is the Best Packaged Distribution of Eclipse Platform
  • Setting Up Rails Development Environment using Aptana Studio

  • Readers who viewed this page, also viewed:


    September 17, 2007

    Installing C++ Boost 1.34.1 on Slackware/Zenwalk

    Filed under: C++ Boost, GNU/Linux — tabrez @ 8:43 pm

    NOTE: This post is an update of my earlier post Installing C++ Boost 1.33.1 on Slackware/Zenwalk, to now use the new version of C++ Boost libraries - 1.34.1. What follows below is the traditional way of downloading and installing C++ Boost 1.34.1 on any Slackware based distribution such as Zenwalk and Absolute; for a simpler way of installing it using SlackBuild build script, go to the bottom of the post. .

    C++ Boost 1.34.1 on Slackware : Traditional Method

    1. Download bjam(tgz) and boost-1_34_1(tar.bz2) source packages from the sourceforge.net website:
      bjam for Slackware
      C++ Boost source package
      (or Google for the latest versions of these two packages)
    2. Save these two files in the home directory and then cd to it:
      sh# cd $HOME
    3. Install bjam(as root):
      sh# installpkg boost-jam-3.1.14-1-linuxx86.tgz
      sh# export PATH=$PATH:/boost-jam-3.1.14-1-linuxx86/
    4. Compile and install boost(as root)*:
      sh# tar xjvf boost_1_34_1.tar.bz2
      sh# cd boost_1_34_1
      sh# bjam ––toolset=gcc

    C++ Boost is now installed. This procedure doesn’t install the files in the default library paths, so compilation commands are slightly longer than they are for distributions like Gentoo and Debian/Ubuntu:

    sh# g++ -o first first.cpp -I/usr/local/include/boost-1_34_1
    sh# g++ -o second second.cpp -I/usr/local/include/boost-1_34_1 -L/usr/local/lib -lboost_filesystem-gcc

    You can simplify this by adding the paths of boost folders to gcc library environment variables:

    sh# export CPLUS_INCLUDE_PATH=/usr/local/include/boost-1_34_1
    sh# export LIBRARY_PATH=/usr/local/lib

    The compilation can now be performed using the following simple commands:

    sh# g++ -o first first.cpp
    sh# g++ -o second second.cpp -lboost_filesystem-gcc

    The two ‘export’ commands can be added at the end of the profile file(/etc/profile or $HOME/.bash_profile or something like that) to avoid having to type them every time a new shell is opened. Other way to simplify the process would be to create symbolic links to boost library paths in the Slackware standard include paths so that gcc can find them directly.

    *Thanks to kerrigangster for reminding me about the new syntax to build C++ Boost libraries using bjam build tool.

    C++ Boost 1.34.1 on Slackware - SlackBuild Method

    kerrigangster also pointed out a neat way of installing packages on Slackware using the SlackBuild build scripts, so if you don’t want to download the required files manually, you can automate the download and installation process of Boost libraries using the C++ Boost SlackBuild script:

    1. Download(Right-click -> Save As…) the following two files and save them in your home directory:
      boost.SlackBuild script
      C++ Boost slack-desc
      (please email me if any of the above two links stop working)
    2. Run the downloaded boost.SlackBuild script(as root):
      sh# sh boost.SlackBuild ––cleanup

      You need to be connected to Internet for the above script to run successfully. Alternatively you can manually download the C++ Boost source package and store it in the same directory as boost.Slackbuild before running the script.

    3. The installation package will be created in /tmp. Build from there:
      sh# ls /tmp/boost*
      sh# installpkg /tmp/boost-1.34.1-i486-1.tgz

      You can delete all the temporary files now if you want. Files from /tmp may be deleted automatically by the operating system at the next reboot. You can test the installation as explained in the first section.

    Too easy, right? :)


    If you want to receive future posts by email, enter your email address here:

    Related Posts:

  • Installing C++ Boost on Slackware/Zenwalk
  • Installing C++ Boost on SuSE and Fedora
  • C++ Boost Filesystem Library(Part III): Example Programs
  • How to Test C++ Boost Installation
  • C++ Boost Filesystem Library(Part II): Example Programs
  • Boost Filesystem Library: Writing Portable C++ Programs to Acess The Filesystem
  • Setting the Stage for C++ Boost

  • Readers who viewed this page, also viewed:


    August 20, 2007

    Installing C++ Boost on Microsoft Windows for Visual Studio .NET 2003/2005/Orcas

    Filed under: C++ Boost — tabrez @ 5:07 pm

    Boost Consultancy has created a wizard based installer for downloading and installing the correct version of Boost components on a Windows machine for Visual Studio .NET IDEs. The Installer simplifies the process of installation by getting rid of the time-consuming, and on rare occasions error-prone, process of compilation from the sources. But if you use any IDE other than Visual Studio .NET(even the old Visual Studio 6.0 IDE) then you need to use the typical Boost installation method(). Below is the procedure to install Boost for Visual Studio .NET IDEs using the Boost Installer for Windows.

    1. Download Boost Installer for Windows(~180K in size) from Boost Consultancy website. Run the installer. You will see the following license agreement displayed(Installer license).

      Installing Boost on Windows

      Read it and press "I Agree" if you agree to the terms. Another license agreement will be displayed next(Boost Libraries license).

      Installing Boost on Windows

      Read it too and press "I Agree" again if you agree to the terms.

    2. Based on your geographical location, you can select one of the nearest location from the provided list of mirror locations. Select one or leave the default selection to select a location randomly. Press "Next".

      Installing Boost on Windows

    3. The following dialog box allows one or more variants of Boost libraries to be selected for downloading and installing on your system. First select the complier to download Boost libraries for. If you have both Visual Studio .NET 2003 and 2005 versions installed, and so prefer to use Boost with both of them, then you can select both the compilers in the left pane("Compilers").

      Then select which variant(s) of Boost library binaries you want to install. If you have absolutely no idea what to select here, then go with "Multithread Debug, static runtime" among any others you want to select. Press "Next" after making your selection(s).

      Installing Boost on Windows

    4. The next dialog box prompts the user to select the components of Boost to be installed. You may consider including "Source and Documentation" if the download size is not a big concern for you. The same (but updated) documentation is always available at Boost Documentation page anyway.

      Installing Boost on Windows

    5. I prefer to select a destination folder path that doesn't contain any spaces or special characters in it. Accept the default path as shown below to use Boost with Microsoft products or get into the habit of always installing programming or Unix like tools in paths that don't contain any spaces in them, like: C:\boost\boost_1_34_1 or C:\programs\boost\boost_1_34_1. (MinGW, Eclipse etc will be very happy with paths like these.)

      Installing Boost on Windows

    6. Time to take a coffee break. Depending upon the download size and the speed of the Internet connection, the download and install process may take some time to finish. (To give you an idea, it downloaded ~90MB in around 30 minutes of time on my machine.)

      Installing Boost on Windows

    7. Installation is finished.

      Installing Boost on Windows

      Time to start testing the installation.

    Testing Boost Installation in Visual Studio .NET 2003/2005/Orcas

    Boost has two type of libraries : header-only(which are compiler independent) and compiled binary libraries.

    • Testing Boost Header-only libraries:
      1. Start the Microsoft Visual Studio .NET IDE and create a new C++ project in it(File -> New Project). select Visual C++ -> Win32 in the left pane and Win32 Console Application/Win32 Console Project in the right pane. Enter a name(BoostDemo) for the project and click OK.

        Testing Boost Installation in Visual Studio .NET

      2. Right-click on the project name and select Properties(or select Project->BoostDemo Properties). Select Configuration Properties -> C/C++ -> General in the left pane and type/select Boost installation root directory(C:\boost\boost_1_34_1) in "Additional Include Directories" field in the right pane.

        Testing Boost Installation in Visual Studio .NET

      3. Add the following code just above the _tmain() function(in the generated file - BoostDemo.cpp).
        C++:
        1. #include<iostream>
        2. #include<boost/any.hpp>

        Add the following code with in the _tmain() function:

        C++:
        1. boost::any a(5);
        2. a = 7.67;
        3. std::cout<<boost::any_cast<double>(a)<<std::endl;

        Testing Boost Installation in Visual Studio .NET

      4. Select Build -> Build Solution to build the project and, assuming the build completes successfully without any errors, select Debug->Start Debugging to run the program.
    • Testing Boost Compiled Binary Libraries
      1. First complete the Header-only test as described above. In the same project, right-click on the project name and select "Properties". Select Configuration Properties -> Linker in the left pane and type/select the Boost lib directory path(C:\boost\boost_1_34_1\lib) in "Additional Library Directories" field in the right pane.

        Testing Boost Installation in Visual Studio .NET

      2. Add the following code just above the _tmain() function
        C++:
        1. #include<boost/filesystem/operations.hpp>
        2. namespace bfs=boost::filesystem;

        Add the following code with in the _tmain() function:

        C++:
        1. bfs::path p("BoostDemo.cpp");
        2. if(bfs::exists(p))
        3.     std::cout<<p.leaf()<<std::endl;

      3. Build and run the program as before.

    I have tested the above procedure with the latest release of Visual Studio Orcas Beta too.

    A NOTE:

    If you have not selected static runtime libraries to be installed in Step 3 in the installation procedure above, you need to configure Visual Studio to link dynamically with the Boost dll files. Alternatively, add the following code at the top of the file:

    C++:
    1. #define BOOST_ALL_DYN_LINK
    2. #define BOOST_LIB_DIAGNOSTIC

    Also you need to add the path to the dlls(C:\boost\boost_1_34_1\lib) to the system PATH variable(Control Panel -> System -> Advanced System Settings -> Environment Variables) before running the programs. This has to be done only once.

    Also see:
    Getting Started on Windows with Boost
    Building Boost Libraries for Visual Studio
    Building Boost for Other Compilers and Other Platforms
    More EFB Posts on C++ Boost


    If you want to receive future posts by email, enter your email address here:

    Related Posts:

  • Six Popular IDEs For Developing Software in C/C++ on Windows Platform
  • Installing C++ Boost on SuSE and Fedora
  • Setting Up Rails Development Environment using Aptana Studio
  • Installing C++ Boost on Slackware/Zenwalk
  • Installing C++ Boost 1.34.1 on Slackware/Zenwalk
  • How to Test C++ Boost Installation
  • “Hello, World” Web Application in Ruby on Rails using Aptana Studio

  • Readers who viewed this page, also viewed:


    December 31, 2006

    Six Popular IDEs For Developing Software in C/C++ on Windows Platform

    Filed under: C++ Boost — tabrez @ 11:32 pm

    For all the languages getting created these days, a decent IDE seems to be created even before the development of the language reaches the final stage ;) But even after being in the academics and in the industry for more than three decades, there isn't one consistently released, active C++ IDE project for the Windows platforms. Some names that come to mind when thinking about C++ IDEs for Windows platform are: DevC++, MinGW Studio, Emacs, Microsoft Visual Studio, CodeBlocks, Eclipse etc. Except DevC++, I use all the other C++ IDEs fairly regularly even today whenever I get to work in Windows.

    1. DevC++

    DevC++ C++ Programming IDE Screenshot
    DevC++ is one of the most popular C++ IDEs amongst the student community as I was able to see during my visits to a few C++ forums on the Internet - 8 out of 10 people on such forums stated that they use DevC++ IDE and whole-heartedly recommend it to the others. I have heard very few complaints from such DevC++ fans, which makes me wonder why I was never able to make myself to like this development tool, DevC++ always looked ugly and unintuitive to me. Most of the C++ programmers from the student community have exactly the opposite to say about it though and it is the first choice for those who want to develop Windows applications using SDL, wxWidgets or DirectX SDK. DevC++ IDE uses MinGW port of gcc as the compiler. It is also an actively developed product though the rate at which it is developed seems to be a bit low. I have read that it is now supported on gnu/linux platform too though I have never tried it myself outside of Windows platform.

    More Information & Download

    2. MinGW Studio

    MinGW Studio C++ IDE Screenshot
    MinGW Studio is my answer to all the DevC++ fans. I like the interface of the MinGW Studio IDE very much, and it loads fast and runs fast. MinGW Studio also uses MinGW port of gcc as the back-end compiler and has good integration with wxWidgets SDK. Both DevC++ and MinGW support slightly older versions of gcc, which forces the users to compile gcc from the source if they want to use a more later version of it. The biggest factor that goes against this IDE is that the development of MinGW Studio is almost like having stopped. It seems like ages since the last useful feature was added to this product, though it is still good enough for light-weight C++ development. I have used it on both Windows and GNU/Linux and it works the same way on both the platforms(though it remains a secret why someone would use it on GNU/Linux platform).

    More Information
    Download
    Screenshots: Windows and GNU/Linux

    3. GNU Emacs and XEmacs

    Emacs-GTK.png
    Using Emacs as an IDE for C++ development is only for those who already know how to use emacs; otherwise it entails considerable investment in learning how to use the emacs editor(the effort will more than get paid off in the end). People coming from *nix background feel right at home using emacs for C++ development, but it is not a natural choice for those who have only Windows background with them. Remember that the achievable productivity levels with the emacs editor(for development with standard C++, not platform specific extensions) is comparable to that of Visual Studio and Eclipse IDEs, if not higher. XEmacs is a variant of GNU Emacs that is very popular on Windows.

    More Information: GNU Emacs & XEmacs
    Download GNU Emacs
    Download XEmacs

    4. Microsoft Visual C++ 2005

    Visual C++ 2005 Express Edition Screenshot
    Microsoft has come a long way with its support for C++ Standard since the Visual C++ 6.0 version of its popular IDE. Visual Studio 2005/Visual C++ 2005 Express Edition support the C++ Standard as good as any other popular C++ compiler and allows, to a large extent, developing pure C++ applications without bothering with Windows specific extensions. The new versions of the IDE also support keyboard commands for most of the operations, which means the usage of the mouse can be minimized by those seeking to be productive. The cost of the IDE has also come down for those who need a basic C++ IDE with no extra support for Windows specific extensions - the Express Edition is totally free of cost and Microsoft claims that it will remain to be free forever.

    Visual C++ 2005 Express Edition:
    Feature Tour
    Download

    5. Eclipse for C++ with CDT

    Eclipse for C++ IDE is becoming the #1 choice for the C++ programmers as the support for this language keeps on increasing with improvements in the CDT plugin. Eclipse can be used on GNU/Linux platform too; on Windows, one needs to have gcc already installed on the system(say, MingW gcc port). Then installing Eclipse along with CDT plugin will get you ready to go. The only glitch here is that the integration between the installed gcc package and Eclipse doesn't go smoothly for everyone(in my observation). An integrated package of [gcc port + Eclipse + CDT] should be very helpful in this case. Programmers need to write their own build scripts(eg. Makefile) to build the C++ programs in Eclipse for C++. In the long term, Eclipse for C++ should become increasingly appealing for C++ development on Windows.

    More Information
    Download EasyEclipse for C++

    6. Code::Blocks

    Code::Blocks C++ IDE Screenshot
    My first choice for a light-weight C++ development environment has changed from MinGW Studio to Code::Blocks IDE in the last year. Like MinGW Studio, Code::Blocks IDE also loads and runs at good speed, uses MinGW as back-end compiler and its interface is also to my liking. Where Code::Blocks scores over MinGW Studio is the amount of development that is taking for this product: new code is added almost on a daily basis. Code::Blocks can also be used under GNU/Linux operating system.

    More Information
    Download
    Screenshots

    There are other excellent editors available that allow developing software in C++ language - like SciTE, notepad2, notepad++ etc. - but none of them support direct support to build the entire application from one place. Drop in a word if you have some other development environment for developing C++ applications that is not listed here as your favourite one under the Windows operating system.


    If you want to receive future posts by email, enter your email address here:

    Related Posts:

  • Develop Ruby Applications Using SciTE Editor
  • 7-Zip Compression Format Support on GNU/Linux Using p7zip
  • Wascana is Eclipse Based Standalone C++ IDE for MS Windows
  • Which is my favourite OS?
  • Free Software Community Catching Up to Social Networking Trend
  • Develop Ruby Applications Using JEdit Editor
  • What do you plan to do on the Software Freedom Day(Sep 15th)?

  • Readers who viewed this page, also viewed:


    December 10, 2006

    Getting Started with C++ TR1 Libraries

    Filed under: C++ Boost — tabrez @ 3:03 pm

    What is C++ TR1?

    What exactly is C++ TR1? It is the first Technical Report on C++ Library Extensions as accepted by C++ standards committee and these library extensions will be available in the next official C++ standard to be released - C++0x. All the libraries that are a part of C++ TR1 will be included (hopefully) by the compilers once the next C++ standard is finalised and released. Mathew Austern nicely introduces C++ TR1 on the Dr. Dobbs Journal website:

    The C++ Standard Library is a large and successful project. The specification of the library is about 370 pages in length[..] If a C++ program was written within the last five years, it's standard fare for it to use std::string, STL containers and algorithms, or IOStreams.
    But if we look at it a little differently, the Standard Library doesn't seem so large after all. The Perl, Python, and Java standard libraries include facilities for parsing XML, performing regular expression searches, manipulating image files, and sending data over the network. From that perspective, the C++ Standard Library looks like it's only the beginning.[...] The question isn't whether we need a more comprehensive library, but how we get one. Historically, members of the Standards committee came up with two answers: Boost Libraries and C++ TR1.

    The draft version of the official document describing the extensions to the C++ standard library is available for download from open-std.org website.

    Does My Compiler Support C++ TR1?

    But if you would like to immediately start playing with these libraries in your C++ programs without having to wait for the next C++ standard to be finalised and released, you have two options to do so.

    1. If you are using one of the later versions of the ubiquitous GCC compiler collection(4.0 or later) on a *NIX flavour of operating system, then consider yourself lucky as the libstdc++ library that had shipped with GCC on your system might already contain a partial implementation of the C++ TR1. GCC website documents the currently supported C++ TR1 libraries. See below for some examples on compiling C++ TR1 code using the recent GCC versions.

      If you are a Windows user, then you can either search for a the binary package of GCC 4.0 or later(only DJGPP seems to support the GCC 4 version; MinGW and Cygwin use older versions) or you can try to build such a version manually from the latest GCC sources. Scott Meyers describes his experience at manually building GCC on his machine and an adapted version of the same is published by MinGW website:

      Testing C++ TR1 Support on Your GCC System

      Fire up your favourite programming editor and enter the following code in it:

      C++:
      1. #include<tr1/array>
      2. #include<iostream>
      3.  
      4. int main()
      5. {
      6.   std::tr1::array<int, 5> a = {{ 1,2,3,4,5 }};
      7.   std::cout <<a[3] <<'\n';
      8. }

      If the above program compiles on your system without any complains from the compiler, then you have got the right version of gcc and libstdc++ installed on your system. You can start scanning through the TR1 libraries and testing how many of them are supported on your system. Below is just another example to test:

      C++:
      1. #include<iostream>
      2. #include<tr1/tuple>
      3. int main()
      4. {
      5.   std::tr1::tuple<int, std::string, double> t(12,"Hello", 43.56);
      6.   std::cout<<std::tr1::get<1>(t)<<std::endl;
      7. }

      You can find more example TR1 code snippets in Austern's article or on the Boost website.

    2. The second way is to download and use the C++ Boost Libraries, which is a collection of high quality C++ libraries including, but not limited to, the C++ TR1 libraries. You can read more about the C++ Boost libraries on the Boost website. If interested, you can browse through the installation procedure of C++ Boost on various operating systems.

    New Boost Subset Package For C++ TR1

    Boost has announced a new package couple of weeks back containing the subset of Boost Libraries by including only those libraries that have been accepted in C++ TR1. It is in alpha stage right now and currently going through evaluation by the community members. Those who are interested in such a library package can download it from the sourceforge.net website and give it a try. The procedure to download, install, and use the library is summarised below.

    1. Download the alpha version of the package from the sourceforge.net website(use the latest version from the page; currently it is alpha).
    2. Extract it in your home directory, change to the extracted directory and build the package. Let us keep it in the home directory so as not to overwrite the actual Boost library installation(in case it is also installed). This way it helps in updating the package easily in the future by just deleting the contents of the directory and extracting the updated package over it when later versions of the package will be released.
    3. Set include and library paths according to the compiler that you are using.
    4. Create a sample program that uses the boost libraries(see above for some examples) and build it.

    According to the (one month old) mailing list announcement, the subset includes:

    • Reference Wrappers
    • Shared_ptr
    • result_of
    • mem_fn
    • Function Object Binders
    • Polymorphic Function Wrappers
    • Type Traits
    • Random Numbers
    • Tuples
    • Array
    • Hash Functions
    • Regular Expressions
    • Complex Number Algorithms

    For more documentation on these libraries, refer to the official TR1 document and Boost website. I will follow up with step-by-step procedure to download and install Boost C++ TR1 subset library.


    If you want to receive future posts by email, enter your email address here:

    Related Posts:

  • Is C++ really a bigger language than Java?
  • Setting the Stage for C++ Boost
  • Maemo SDK VMWare Appliance 0.4 Released With Lot of Goodies
  • Installing C++ Boost on Microsoft Windows for Visual Studio .NET 2003/2005/Orcas
  • Installing C++ Boost on Gentoo and Debian/Ubuntu
  • Wascana is Eclipse Based Standalone C++ IDE for MS Windows
  • Boost Filesystem Library: Writing Portable C++ Programs to Acess The Filesystem

  • Readers who viewed this page, also viewed:


    Next Page »

    Copyright (c) 2006, 2007 Tabrez Iqbal.
    Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. Verbatim copying and distribution of this entire article is permitted in any medium without royalty provided this notice is preserved. A copy of the license is included in the section entitled "GNU Free Documentation License".


    Powered by WordPress
    This website is hosted by Dreamhost