java

Java (Indonesian: Jawa; Javanese: ꦗꦮ) is an island of Indonesia. With a population of 143 million, Java is the world's most populous island, and one of the most densely populated places in the world. [read more at http://en.wikipedia.org/wiki/Java]

  • Enterprise grade performances tuning with critical memory constraints (part 2)

    Still not enough, we were forced to profile the java code and make some big changes.... (from part 1)

    Profiling

    You either profile an application for speed and/or memory usage and/or memory leaks. Our application is fast enough at the moment. Our major concern is optimizing memory usage and thus avoiding disk memory swapping.

    Some words about architecture


    It is not possible to profile any applications without having a deep understanding of the architecture behind. The Product Catalog is an innovative product which is a meta model for storing insurances product in a database, a Product is read only and  can derivate instance that we call Policies. Policies are users data holder, containing no text, just values, and sharing a similar structure as the Product. This let the product know everything about (cross) default values, (cross) validations,  multiple texts, attributes order/length/type etc... and thus separate definition (Products) from implementation (Policies). Products and Policies can be fully described  with Bricks, Attributes in a tree manner.

    Reduce the number of object created


    Looking at the code, we have seen that too many Products (17 Products has 15000 objects either Attributes/Bricks/Texts/Value/ValueRange) were loaded in memory. While this is clearly giving a speed advantage on an application server, it is simply killing the offline platform with it 1GB RAM (remember memory really free is 500Mb)
    The problem is that Attributes and Brick are using/can use  a lot of fields/meta data in the database which translate into simple java type (String for UUID, and meta data keys and values) in  memory. We start looking at the profiler and the 100 MB used by the product cache.
    Reducing this amount of object was the first priority, a lot of them are meta data which are common and spread across the Product Tree in memory. Since avoiding creation of unneeded object is always recommended, we decide to remove duplicate element in the tree by singularizing them. This is possible because the product is Read Only and made of identical meta data keys, meta keys value.

    Entropy and cardinality of meta data
    An Attribute may have an unlimited number of meta text (among other things), common meta data keys are  "long", and "short" and "help" text description in 4 languages (en_us, fr_ch, de_ch, it_ch), while this is not a problem in the database, this make the Product  object tree size quite huge  in the Product cache (containing Products Value Object). ..Counting some of them in database for example return stunning result. 
    We found 60000 "long" texts which translate into 60000 String text keys and 60000 String text values (worst case scenario since texts values may not be all reusable). Reducing this number of Objects is done quite easily by not creating new instance of  String, Decimal, Integer object and returning always the right and same Object instance. (we keep them in a MAP and return either a new instance or a previously cache one).

    Large objects cardinality  but a poor entropy
    By running two or three SQL statement and trying to distinguish real distinct values, we found that a lot of these meta data are made of a relative small number of different values. By just storing a limited number of String like "0", "1", "2" to... "99", "default", "long", "short", "de_ch", "fr_ch" we have reach a cache efficiency and reuse of object instance of 99%
    After that "small" change in the way value objects (VO) are created and connected, a java String object containing before "de_ch" and existing 10000 times in memory is now replaced across all  Attributes/Bricks by the same instance!

     The gain is simply phenomenal. Memory gain is bigger than 50%.

    Reducing the number of objects in memory 
    Instead of storing thousands of Products Text String in memory,  we decided to allocate them on disk using  java reflection API and a Dynamic Proxy.

    The idea is to save all String in one or more files on disk, the position of each text and length being saved in the corresponding Value Object. So basically we gain the space used by a String in memory  at the expense of a long (String position in file relative to start of file) and an  int (length of String) primitive type

    References:  Proxy  - InvocationHandler
    Resume: Java String disk based allocation
    Code snippet: soon

    Use better data structures
    Java has a lot of  quality library, commons collections from apache are well known. Javalution is a real time library with real time and reduce garbage collector impact. We have use FastTable and FastMap where it make sense.

    For example the class FastTablehas the following advantages over the widely used java.util.ArrayList:
    • No large array allocation (for large collections multi-dimensional arrays are employed). The garbage collector is not stressed with large chunk of memory to allocate (likely to trigger a full garbage collection due to memory fragmentation).
    • Support concurrent access/iteration without synchronization if the collection values are not removed/inserted

    Different caching strategy
    By design the ProductCatalog is able to use many caching strategy. One is named "Nocache" limit number of object in memory to the bare minimum, and redirect all access to product to database. In a mono user environment, and since products reside in 4 tables only (so only 4 select to read all data from DB and some VO to rebuild the tree are needed), the through output is more than enough.

    More to come...



    References
  • .NET / Java portability with Mainsoft

     Mainsoft Corporation's porting solution, Visual MainWin, enables software developers to recompile their Windows source code (ASP.net, VB .NET) to java bytecode and let it run on Linux, Unix, HPUx/Itanium, Macintosh

    As you know, when you compile an application in Visual Studio .NET, it generates Microsoft Intermediate Language (MS IL), which executes on the Microsoft Common Language Runtime (CLR) .NET framework. Grasshopper is a plug-in to Visual Studio .NET, which takes this MS IL and converts it into Java Byte Code, which executes on a Java Virtual Machine. Grasshopper also includes J2EE implementations of ASP.NET, ADO.NET, and the most common .NET namespaces, so the required dependencies are available on your J2EE platform.

    Read more at http://www.mainsoft.com/,

  • 4 ways to automate MAMBO database backup...

    For "Joe six pack" user to advance users... 

    1. You only want to use Mambo admin panel-EASIEST
    2. Your provider has given You a plesk panel -EASY
    3. Your provider only give You a Telnet or ssh access to the server -ADVANCE USER
    4. You want more! - VERY ADVANCE USER

    I am using the method 4, which isn't more difficult and a lot better, open the script and set the variable according to the internal documentation. Upload the file to the server (not in httpdocs under plesk), chmod the file to 700 (rwx- - - - - -) and define a daily crontab. This script is making daily, weekly, monthy backup and send me a mail with the result and a report...

     1. You only want to use Mambo admin panel-EASIEST

    Install a Mambo component: Site backup from bigAPE

    The Component provides a basic site backup feature set. The following features are currently offered:

    • Ability to backup the entire Mambo file and database system to a compressed file.
    • Ability to select which folders to include and exclude from the backup
    • Ability to download & manage archives of the Mambo file system
    • Ability to generate, download & manage archives of the Mambo mySQL database
    • Archives files are unique to the Mambo installation based on creation time and secret key
    • Ability to email the generated archive file to a specified account (BETA)
    • Backup excludes existing backup sets to conserve space
    • Backwardly compatible with 4.5.1

    Note: this plugin is only backing up your DB and files when You want it. It is a lot BETTER to use a periodical backup strategy

    2. Your provider has given You a plesk panel-EASY

    We will use crontab:

    The crontab command, found in Unix and Unix-like operating systems, is used to schedule commands to be executed periodically. It reads a series of commands from standard input and collects them into a file known also known as a "crontab" which is later read and whose instructions are carried out.

    Go in the crontab section of plesk. (I have use here Plesk 7.5.2)

    Values that are allowed to be use:

    • Minute - 0-59 or *
    • Hour - 0-23 or *
    • Day of the Month - 1-31 or *
    • Month - 1-12 or *
    • Day of the Week - 0-6 (0 is Sunday) or *

    We need at least 3 tasks

    1. A task which extract all data from the database (here starting at 12:00)

    MinuteHourDay of the MonthMonthDay of the WeekCommand
    00***/usr/local/mysql/bin/mysqldump -uXXXX -pYYYY -q -hHOST TABLE > /home/httpd/vhosts/waltercedric.com/private/dbbackups/mambobackup.txt

    -uXXXX replace XXXX with your Mambo username for mysql
    -pYYYY replace YYYY with your Mambo password for mysql
    -hHOSTis yourdomain.com or .net or whatever tld your domain has
    TABLE is the Mambo table You want to backup
    /home/httpd/vhosts/waltercedric.com/private/dbbackups/mambobackup.txt is a file in a directory outside /httpdocs chmod to 700 (or rwx------_)

    2. A task which create a zip of the resulting file (here starting at 12:05)

    MinuteHourDay of the MonthMonthDay of the WeekCommand
    50***gzip -9 -f /home/httpd/vhosts/waltercedric.com/private/dbbackups/mambobackup.txt

    Notes

    1. You can also combine task 2 and 3 in one line and without temporary file (mambobackup.txt) by defining task:
      /usr/local/mysql/bin/mysqldump
      -uXXXX -pYYYY -q -hHOST TABLE | gzip -9 > /home/httpd/vhosts/waltercedric.com/private/dbbackups/mambobackup.txt.gz
    2. File mambobackup.txt is overwritten at each execution of the task -> may be not a goo idea :-(

    3. A task which send an email of the result (here starting at 12:10)

    MinuteHourDay of the MonthMonthDay of the WeekCommand
    100***MAILTO=This email address is being protected from spambots. You need JavaScript enabled to view it. /home/httpd/vhosts/waltercedric.com/private/dbbackups/mambobackup.txt.gz

    This email address is being protected from spambots. You need JavaScript enabled to view it. is the mail recipient

     

    3. Your provider only give You a Telnet or ssh access to the server -ADVANCE USER

    Follow the guide of TVB on Mambers forums, below is

    A copy of this text...All credits to author
    Cronjobbing your mambo (or any mysql db for that matter)--a short tutorial
    This is a script that was put together by another Futurequest site owner that I have changed very slightly for my own purposes

    If you comfortable backing up via command line, then hopefully this will help you. I suspect if you are backing up this way, you already know this stuff.

    If you don't know how to backup via command line or a cron job, it's real easy to follow the instructions (I hope they are---I tried to make them easy).

    Please note this is for a *nix setup and your setup or file structure on your server may be different. I am unable to offer support for it as I only know it works for me, and hopefully it will for you as well. Use at your own risk and enjoyment.

    I'm posting it because I am always seeing a lot of questions on backing up.

    *********************
    Step 1. Using your file manager or your ftp client, create a directory called dbbackups above the www level (for example: /big/dom/xyourdomain/dbbackups) Chmod it to 700.

    .
    Step 2. using notepad or your favorite text editor create a text file with the following contents:

    Code:

    #!/bin/bash /usr/local/mysql/bin/mysqldump -uxyourdomain -pyourpassword -q -hmysql.yourdomain.tld xyourdomain >/big/dom/xyourdomain/dbbackups/mambobackup.txt



    after the -u is your username for mysql
    after the -p is your password for mysql
    after the -hmysql is yourdomain.com or .net or whatever tld your domain has

    Following that is the name of the database you are using to run mambo. If you need help remembering which database you used to run mambo, check your config.php file in your mambo or check with phpMyadmin.
    After the /big/dom/x insert your actual domain name (no tld this time)

    Name this text file mambobackup.sh and install it at the root ( /big/dom/xyourdomain/mambobackup.sh ) & Chomod it 700.

    Step 3. Telnet into your account with your favorite SSH client (I like Putty) using your ftp username and password. On the command line enter /big/dom/xyourdomain/mambobackup.sh and hit enter. Put your actual domain in place of yourdomain in the example.

    Step 4. From your file manager or your ftp client, check the contents of the folder at /big/dom/xyourdomain/dbbackups/ and inside it you should find a file named mambobackup.txt which is a copy of your mysql database used to run your mambo.

    I also use vbulletin and have the same exact script installed substituting "forum" for "mambo" wherever it occurs. Both backup to the dbbackups directory


    Automating your backup:

    Important-if you have a crontab job already running, these instructions will overwrite it. Chances are, if you have one running, and want to make backups automated, you will want to add this to your existing crontab job and then reinstall it.

    Step 1. Using your favorite text editor create a text file with the following contents.

    MAILTO=This email address is being protected from spambots. You need JavaScript enabled to view it.
    5 10 * * * /big/dom/xyourdomain/backupscript.sh


    make sure that after .sh you hit enter at least once to create a line feed. Put your actual domain name and tld in place of yourdomain.tld and put your actual domain in place of xyourdomain. Name this file cronjob.txt and install it above the www, ( /big/dom/xyourdomain/cronjob.txt )Chomod it 700

    Using your favorite telnet client, telnet into your account using your ftp username and password. On the command line enter

    crontab /big/dom/xyourdomain/cronjob.txt

    and hit enter. At 10:05 am server time, each day, a new file will overwrite your old one and you will have a daily, fresh backup made automatically for you at /big/dom/xyourdomain/forumbackup/backup.txt You can of course adjust the timing of the backup, by changing the first two entries of cronjob.txt In the example, the 5 is minutes and the 10 is hours. If you wanted the backup to be done at 11:00 PM each day, you would put 0 23 as the first two numbers. However, as it is shown will work fine.

    One consideration in making backups is server storage space or disk usage.

    Automating your backup and saving disk space by gzipping your backup file

    With 1 more file, and a change in the cronjob.txt file, it's easy to create an automated backup file in in a zipped format (which cuts the space used by about 25%. This is what you will need to add:

    1. Create a text file called zip.sh

    Inside this file, put in the following code, replacing xyourdomain with your actual information.

    Code:

    gzip -9 -f /big/dom/xyourdomain/dbbackups/mambobackup.txt



    (I have a second line of code here doing the same for our vbulletin forums, substitituting forumbackup.txt for mambobackup.txt)

    Install this file above the www ( /big/dom/xyourdomain/zip.sh ) and chomod it 700. This script will make mambobackup.txt into mambobackup.txt.gz

    2. You will now need to modify the cronjob.txt file as follows replacing yourdomain.tld and xyourdomain with your actual information.

    MAILTO=This email address is being protected from spambots. You need JavaScript enabled to view it.
    5 10 * * * /big/dom/xyourdomain/backupscript.sh
    10 10 * * * /big/dom/xyourdomain/zip.sh

    after the last .sh be sure to hit enter at least once to insert a line feed. Install the new file in place of the old one above the www ( /big/dom/xyourdomain/cronjob.txt)

    Telnet into your account from CNC using your ftp username and password and on the command line put

    crontab /big/dom/xyourdomain/cronjob.txt

    and hit enter. Replace yourdomain with your actual domain information.
    What will happen is that at 10:05 AM each day, a file called backup.txt will be created in the forumbackup folder. At 10:10 AM each day, that file will be zipped up and made into backup.txt.gz and then gzip automatically deletes backup.txt. This series of events will happen automatically each day until you cancel the crontab job.

    You may change the timing of this by changing the first two numbers on the 2nd and 3rd lines in the cronjob.txt file to suit yourself. IE to run this at 1:05 PM and finish it at 1:10 PM the crontab.txt file would be

    MAILTO=This email address is being protected from spambots. You need JavaScript enabled to view it.
    5 13 * * * /big/dom/xyourdomain/backupscript.sh
    10 13 * * * /big/dom/xyourdomain/zip.sh

    Depending upon your site's busy times, it is best to schedule a backup during slower times of useage. When the backup is being made by the mambobackup.sh script, the site or forum is locked and on a larger site, this could last for 20-30 seconds while myslq dumps the data. You won't lose any data or posts, but your site may appear to be sluggish during this time.

    Betsy

     

    4. You want more! - VERY ADVANCE USER

    You can use the open source project:AutoMySQLBackup

    A script to take daily, weekly and monthly backups of your MySQL databases using mysqldump. Features - Backup mutiple databases - Single backup file or to a seperate file for each DB - Compress backup files - Backup remote servers - E-mail logs -

    • Backup mutiple MySQL databases with one script. (Now able to backup ALL databases on a server easily. no longer need to specify each database seperately)
    • Backup all databases to a single backup file or to a seperate directory and file for each database.
    • Automatically compress the backup files to save disk space using either gzip or bzip2 compression.
    • Can backup remote MySQL servers to a central server.
    • Runs automatically using cron or can be run manually.
    • Can e-mail the backup log to any specified e-mail address instead of "root". (Great for hosted websites and databases).
    • Can email the compressed database backup files to the specified email address.
    • Can specify maximun size backup to email.
    • Can be set to run PRE and POST backup commands.
    • Choose which day of the week to run weekly backups.
  • 404SEF without mod rewrite

    Use 404SEF when you can not activate mod rewrite in apache because Your internet provider do not allow it....

    1. Enable SEF in mambo configuration
    2. do NOT rename the htaccess.txt
    3. open /includes/sef.php and change this line: (~ line 217)
      return $mosConfig_live_site."/".$string;
      to
      return $mosConfig_live_site."/index.php/".$string;
  • 90 deg. CCPM

    90 deg. CCPMbyCK_

    When in MMS mode, move the link from the blue ball to the red ball. Do this on both side of the swashplate.
    All credit toCK_

    "As for the 90 deg. CCPM, here's why I did it. I started with the stock 120 deg. CCPM with 3 9202s. If I banged the cyclic around quickly there was a lot of collective interaction. Try it for yourself. Wiggle the cyclic and watch the antirotation pin and jump up and down 1/8". The interaction happens because the servos are slow and the front swash input has to move twice as fast as the two in the rear for a fore/aft cyclic movement because the front ball is twice the distance from the center as the rear balls. If you move the cyclic faster than the servos can move then all three servos will move the same speed (the max speed of the servo) and collective interaction will happen because the front swash input is not moving at twice the speed of the other two. Curtis' 140 deg. or whatever it is on the Vigor CS puts the front ball exactly the same fore/aft distance from the center as the two rear balls. This means that all three servos move the same speed for a fore/aft cyclic input. No interaction.

    If you use 90 deg. then fore/aft cyclic only moves one servo. There can never be interaction if only one servo is moving. Lateral cyclic will move two servos at equal and opposite speeds. No chance for servos to "run out of speed" like with 120 deg. I still get a little bit of interaction but it's nothing like I had with the stock setup.

    Like I said before, I still don't know why 120 deg. is pretty much the standard and 90 deg. is rarely used when 120 deg. has much more collective interaction. Anyone got any ideas?
    "
    Great response by Dr.Ben

    "Your info about the 140 degree CCPM is entirely valid. One drawback of having the single ele input up from is that the swash is less stable. 120/140 d. CCPM surrounds the entire swash with support. There is also a control power component here. One reason the big gun CCPM models such as the Fury and Vigor CS can pull such abrupt maneuvers is the combined input of the servos - two for any roll command, THREE for pitch command, and three for a collective command. 90 degree CCPM takes two servos out of the power equation on the pitch axis. I realize the control power issue is of less consequence in a 30 sized bird, but you asked why manufacturers don't employ 90 CCPM more commonly.

    Much of the interaction you saw is a direct result of the somewhat slow analog 9202's (still a hell of a good servo) and not the 120 d. CCPM per se. If you go to a upper or lower collective command and input a hard over roll input, you will note a pretty good collective interaction because the servo arm on one of the two roll servos is approaching centerline and thus moving its pushrod further, while the other servo arm is retreating from centerline and moving the pushrod less. This differential phenomena is present in all CCPM models with rotary servos and is somewhat minimized by using servo wheels large enough to avoid movement a large number of degrees off centerline. A linear output servo is the only way to avoid the problem completely; we ain't there, yet <g>. The Caliber 30 system might work a bit better better if the bellcranks were designed to create less swash travel per unit of servo movement (meaning equal ball input points on both arms of the bellcrank), and then larger servo wheels were used to get the collective/cyclic range needed (less differential effect).

    Ben Minor
    "


  • A desktop review

    This page was last modified on Mon, 16 Aug 2004 17:06:24 GMT

    SUSE 9.0
    a desktop review
    My experience installing Linux and some throughts...
    When you finish this article, You may want to read the round 2 HERE

    GNU Free Documentation License - Copyright (c) 2003 Walter Cédric.

    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. A copy of the license is included in the section entitled
    "GNU Free Documentation License".

    -> this page is getting bigger and bigger with the time, I will also start soon a SUSE section and divide this page into smaller sections.

    I decide to buy the professional edition instead of downloading all cd from ftp.suse even if I have a 2MB internet line. You must support company like Suse or Mandrake which develop linux distributions and buy their package. All versions or patchs can be acquire freely and download from their FTP or HTTP mirror..

    If you still hesitate about Linux, I would recommend You to try a Live Eval of Linux. A live eval is a set of applications and a fully functionnal Linux (nearly 2Gb) compressed on 1 CD and It does not require a hard disk to start!

    * Knoppix live cd, the fastest and first version, highly recommended since Divx, DVD, NTFS drive are recognized as default.
    "KNOPPIX is a bootable CD with a collection of GNU/Linux software, automatic hardware detection, and support for many graphics cards, sound cards, SCSI and USB devices and other peripherals. KNOPPIX can be used as a Linux demo, educational CD, rescue system, or adapted and used as a platform for commercial software product demos. It is not necessary to install anything on a hard disk. Due to on-the-fly decompression, the CD can have up to 2 GB of executable software installed on it." fromwww.knoppix.net

    You can use knoppix and have a home on USB disk. K, Knoppix, Configuration, Create Persistent home dir, then boot with the option:
    knoppix home=scan

      *Gnoppix live cd
    "Gnoppix is a linux live cd based upon Debian GNU/Linux 3.0 (woody). It can be compared to Knoppix but GNOPPIX uses GNOME as desktop environment." from
    http://www.gnoppix.org/faq/index.html
    * Suse live cd which did not convince me at all, this bootable cd take too much time and user interaction to initialized itself: more than five minutes are required. Moreover NTFS drive are not recognized.
    * Mandrake Move live cd was developed to work with a USB stick to save user data permanently. This is another step for Linux, you can take any PC in the world, insert this CD, restart it and have a runnable Linux system and tools you're familiar with.
      * Pclinux review
    "PCLinuxOS 2K4 Preview 4 is a live Knoppix style cd based on Mandrake 9.2 that runs entirely from a bootable CD. Data on the CD is uncompressed on the fly, allowing up to 2 GB worth of system and programs on one CD
    including a complete X server, KDE 3.1.4 and Gnome 2.4, and large packages like OpenOffice 1.1final and Mozila 1.5 plus plugins. Since it runs solely off the CD, PCLinuxOS makes an excellent portable Linux demo or system rescue disk, but its completeness makes it a good general purpose desktop as well. PCLinuxOS should work on most modern computer hardware. Recommended memory to run is 256mb or more."
      * GeeXbox turns your PC into a dedicated media player. It boots a version of the Linux kernel, and then uses the popular mplayer to allow you to play DVDs, VCDs, or regular audio CDs. It also allows you to play pretty much any multimedia file from your hard drive, and can mount Samba shares as well. Best of all, the ISO is a mere 4.3 megabytes...
    Download it HERE
      After knoppix...welcome flonix
    "a linux system that can reside on a USB key!!!! (use less than 60Mo). It is based on knoppix and let you start linux everywhere if you can boot on USB!
    You can:
    - play dvd, burn CD, watch and edit pictures, scan, browse internet,
    word processing, sync a Palm PDA,
    read PDF files, start a webserver and more....
    read more here:
    http://linuxdocs.tuxfamily.org/flonix/doc/wakka.php?wiki=EnPresentation

    * can be download freely

    Test system:

    One more time, here is my system, The Linux experience you will have is very depending on hardware (and also drivers).....

    Mainboard Nvidia Nforce 2 ASUS A7VN8X deluxe
    2 integrated ethernet card
    6 USB - 2 Firewire
    On Board soundcard
    Harddisk IBM 120Go UDMA 133 (primary master)
    Harddisk IBM 80Go UDMA 133 (primary slave)
    CDR/RW 16x IDE noname
    Geforce FX 5600 256Mb MyVivo Athlon XP 1700 overclocked at 3200 with my watercooling
    512Mb DDR Dual Channel mode PC3200 (new)
    SUSE Linux 9.0 and the KDE 3.1.4 desktop  

    My Background:

    Can be read HERE and my experience with Linux? I am using Cygwin with ssh at work to connect to the HPUX development system, deployment, release management is done with ANT and bash scripts.So I am only a user but I use to write some FAQs in the past when I was using Linux at highschool (a small part is reproducedHERE, sorry it is in french ).

    My collegues ofXDreamTeam have installed a SUSE on a dual AMD64 Opteron server, and they will write a review soon.

    Some sentences you may hear about Linux:

    Linux user interface is ugly, Xp is better!
    Who can still says this?, look at this KDE 3.2 pictures

    (click to enlarge). KDE default user interface for Ark Linux, Conectiva, Knoppix, Lindows,
    Lycoris, Mandrake Linux, SUSE Linux, TurboLinux and Xandros.

    Moreover you can choose another desktop manager, instead of KDE, a lot of people prefer Gnome. If you still can't live without Windows, try this windows manager under linux http://www.xpde.com/index.php

    Suse (or Linux in general) is difficult to use!
    Not so much, in fact the tool YAST: "Yet Another Setup Tool" do a great job when dealing with the configuration of your computer, softwares and hardware can be configured in a hierarchical control panel. I found it even better than the equivalent of "Windows world". What can be disturbing is the organisation of files and program on disk. I would say that someone who never use Windows before will have the same learning curve and encounter more or less the same difficulties with linux, the only drawback I see is that no so much friends can help you (and give you tools for which you have no licence ;-) ) since Linux as a desktop is not so much floating around. Now if you are a Windows user like me (since 10 years), you will encounter some difficulties, I prefer to say "forget some bad Windows habits", like

    • Windows make no differences between upper and lower case filename, but Linux does! which is normal because we also make this distinction when we write letters and office documents.
    • Windows use drive letter and this is a pain to maintain especially when you need to configure software, Linux use a directory base mapping, symbolic links can be created on files or directories. Example: 2 documents folders can have different name but point to the same folder:
      For example you have a website which is located in a directory "MywebsiteV1.12" and you want to have only one reference in all program that use your homepage (typically in configurations files), all you have to do is to open a terminal and type:
      ln -s MywebsiteV1.12 httpdocs

      and use everywhere httpdocs instead of the path to MywebsiteV1.12in configuration files. The same apply if you want to alias office documents or media files (reference the same file under different names but always use the same target)
      this is a lot more powerful than the Window's shortcuts.

    • Windows has a limited command line size, and limited number of subdirectories.
    • Even on XP, you must sometimes restart your PC because the program XX has freeze and can not be terminate.
      Bill Gates said in an interview: "instability do not come from Windows itself, but merely from applications installed" For Me, a good OS must protect the user/itself from system crashing, XP isn't good at this, Linux is a little better.
      On Unix a # kill -9 pidProcess has a lot of chance to succeed and you can even restart some part of the system, without restarting the whole (restart the network server or the soundcard). Try also CTRL-ALT- ESC to kill graphically a process!

    Why choosing Linux now?

    http://www.mandrake.tips.4.free.fr/switchsuccess.html A very good article, how you can switch with success and what your motivation can be

    Here are the personal reasons why I am switching to Linux, You may find a lot of website which may present You better arguments:

    • Suse (replace with any Linux distribution) come with a lot of applications (= packages) to do almost everything, not all of them are of the same qualities, or can be compared to commercial applications, but in linux world they do not require any licences! (some of them are freeware, giftware, shareware through)
    • I want to live in a world where, I can search and solve problems instead of restarting the machine which is for me not a solution....(I am a developer and like challenges, restarting is like loosing a race fsor me) yeah as today 16.12.2003 I am FREE with LINUX, even if this freedom will have a cost (a relative complexity in usage at the beginning)
    • Virus threat, less virus are living in Unix world. At least till today.
    • You can still run Windows and Linux together thank to a great multi boot menu (no System commander, Partition Magic, old text based LILO required)
    • Real Multi users system, program are running with user right privileges.
    • Linux is gaining market place, I do not want to loose connection with the market reality.
    • The community is extraordinary! they develop at a speed never seen before, even If I am convince that too much project are started and do the same things with more or less success . Look at Mono (.NET platform on Linux) which already support 99% of .NET ASP. Ximian (acquired at the beginning of 2003 by Novell and Suse) will continue to support the effort of Mono development.
    • Linux is modular, there is like 120 distributions, 30 are dying per year and are replace instantly. Look at Flonix (Linux on a USB stick 64Mo, burning, browsing internet, webserver, GUI), or Knoppix ("From zero to GNU linux in five Minutes") this is great. Linux can be start on nearly all plattform (portability) and does not require good machine (Windows Longhorn will require 1Gb of memory (dixit Microsoft) so understand 2Gb to work flawlessy).
      Linux was first developed for 32-bit x86-based PCs (386 or higher). These days it also runs on Compaq Alpha AXP, Sun SPARC, Sun UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64 , CRIS architectures. This includes Handled, celullar phone, gaming station like Xbox, Dreamcast.
    • Everything is free, thanks to the open source community: Apache is the best/most used webserver, Tomcat the best servlet runner. Of course, the open source community has to find now a economical model. I am convince that developing is like speaking, you can not stop people to talk or think.
    • Each days, I enjoy the use of CygWin under windows (for developing or maintaining this homepage), combining unix tools like: grep, sed, awk, and others...using ssh is now natural and I am feeling sad when I must start the poor Windows command.com terminal.
    • I am using products from the open source coomunitysince 3 years now, at work: mainly the Apache Fundation and their frameworks, at home a lot of tools: virtual dub, videolan, GIMP,... and this all under Windows 2000. I am totaly satisfied by these tools, so why not replacing also windows by a totally free and open source system.
    • I can install Suse Linux everywhere (on all PC I have, currently 3 desktop) and has no annoying licence scheme or registration process and even give it to friends as long as I give it for free.
    • There is a difference between "choice" and "apparence of choice", before choosing an OS (Operating System) was easy:

    - On one side Windows, which cover more than 90% of the market, is shipped with new PC, has many softwares of good qualities. All your friends (normal users not geek), companies or your office, are certainly running under Windows. This is good but you do not install Windows because it is your choice, you install it because it is common to install it.

    - On the other side, alternatives OS: Mac, Linux, BeOS (I am also a big fan of BeOS) are installed by people who want to try something different, (remember the moto "think different" from Mac corp). Geek users accept some instabilities because they want to improve the system, or even help at the source code level. End users give a try or installed it at home because they discover it at their universities.

    This was before, before mean "Linux without good support of hardware ( I remember installing Mandrake 9.0 and fighting 10 minutes to find a USB driver for my Microsoft mouse), without good desktops manager (Now this time is over thanks to KDE and Gnome), without a huge base of applications" Now this is slowly changing, On the server side, there is already a big change, HP, IBM and major actors are now committed to Linux and that is great. Now you have the choice, because now you can hesitate between Linux and Windows and/or even dual boot both (It has never been so easy as today because dual boot is integrated in many Linux distributions)

    SUSE home for the version 9.0 is http://www.suse.com/us/private/products/suse_linux/i386/index.html
    SUSE has a page which present 10 reasons to choose Linux Suse http://www.suse.com/us/private/products/suse_linux/i386/10_reasons.html
    SUSE has also a FAQ (Frequently Asked Questions) page here: http://www.suse.com/us/private/products/suse_linux/i386/faqs/index.html

    Choose a file system
    ext2 or ext3 or ??? a good articles can be found here:http://www.linux-mag.com/cgi-bin/printer.pl?issue=2002-10&article=jfs

    Installation

    Great menu everywhere for installing the OS, 10s after having insert the CD (and choosing a resolution with F2 - default is 1280x1024), the linux Kernel is loaded and guide you through the installation process.

    Personnaly what I dislike is the number of "package" (understand application, with strange name and strange revision number) given, like 10 tools to do the same task...I know I do not want to see any new Microsoft take the advantage under linux, but why the open source community does not concentrate on GUI. A user will remember that the GUI was horrible even if the program has done its job. That is my point of view. As a developer, I do not care but as an end user....

    I decide to install everything, this take nearly 3 Gb of hard disk, Yes it is much but do not forget that XP take alone 1.2Gb without any office, photoshop, and so on. In this case the installation took 37 minutes, too long? You can also send complaint to hard disk manufacturer!

    The partition manager compute the best option depending on your configuration, in my case I reserved 80Gb for Suse but on my secondary disk. By default linux want to modify the primary disk (and move windows data if needed), I switch to manual mode and only say click on "use everything" of the second disk. YAST then install then a small graphical boot manager on disk 1. This allow me at boot to start Windows if it is needed.

    One page display a resume of all settings choosen, you may change the value of each section by clicking on the topic title. No technical words at all, You must only choosing some options in selection boxes.

    Due to the huge number of Linux tools, you must also deal with 5 cd or one double face DVD, each disk may copy data during 15 minutes depending on options you have selected. (I forget to say that my CD drive is an old 16X). The estimated time to complete installation is quite accurate.

    After completing the first disk the system restart and continue on CD2, a windows show you the list of package copied in realtime, you must just wait (Suse is made of more than 7000 packages or programs).

    The system asks then for the root password, You can use the whole keyboard layout (letters, numbers, special characters) except accent (éà è) and umlaut (öüë), I choose a highly complex root paswword and write it down, till I have time learn it. Some word about security, program on unix system are running under user privileges, that mean that a potential virus MAY only destruct your data, and no data of others users (most of Unix virus try to replace some binary executable to gain a higher level access or may install a trojan horse)

    The 2 integrated networks card were detected automatically (mainboard ASUS nforce 2 desluxe has a 3COM and Nvidia 100MB network card),

    The system then ask if you want to download new packages and security upgrades from internet. This is higly recommended. No compagny in the world can ship a perfect code, this is True even in Linux world. I am pretty convince bugs handling is better in opensource paradigm, because nearly all users can see the source code (OK, I admit NO all users are developers, but there is a lot of great skilled developer which in their spare time review code, not to speak about university students which may have a lot of time :-) ). On the other side, take any business compagny:

    • They first try to reproduce the bugs and know how many users are affected (which is OK),
    • Worse, They try to minimize effects resulting of a bug (to avoid some political problems with clients, but correct the bug as fast as possible in the background),
    • They speak about money all the time (but I am happy to get paid as a developer ;-) ), can we ship in delay? can we not correct this for the next release?

    In opensource world, Linux developer consider this as a hobby and may try to correct everything or at least move the delivery date.

    Back to the installation, I choose stand alone, because I do not want to use this linux box as a server. In Mandrake, this is a little better, since you can choose the security level: (Mandrake install may activate the firewall for You during the install), or block installation of some packages which can help a hacker (like ssh, webserver, VNC).

    I strongly recommend You to deactivate auto login, security come always at a cost, I do not want that somebody simply restart the computer to gain access to my data and read private documents: Yes you will have to enter your password at each restart. Password is limited to 8 characters...which is somehow strange The password length is limited to 8 character because the default password encryption methd is set to DES (most compatible but SUSE also allow md5 or blowfish which have no length limit but at the cost of more cpu power and the loss of backward compatibility across other systems or old software). You can change this underYast - Security and Users Password settings

    Finally the release note of suse 9.0 is displayed, You can read it to be sure that nothing has changed since the manual printout.

    YAST, then dectect hardware and set a graphical resolution.

    ATTENTION, always use the test button to validate any refresh rate and resolution before applying changes, otherwise you may have a black screen at the next logon! If it ever happen, the only way is to reboot and choose "safe mode", logging as root, go to /etc/X11 and open the file X86Config....or rename the previous backup done by YAST (backup named X86Config.YAST). I have also done this mistake

    Choose "safe mode" in booting menu
    logging using user root
    # cd X11/etc
    rename the old X86Config to X86Config.old
    # mv X86Config X86Config.old
    then restore the YAST backup if it exist
    # mv X86Config.YAST X86Config
    CTRL-D
    or type Exit
    restart the PC

    Manual upgrade of all drivers to the their latest status
    In my case I went to www.nvidia.com and download all latest rpm (rpm are like setup.exe in windows world),

    To resume: Suse has now a very good and reliable installation system. YAST is now mature, detection of most hardware is good (at least on my system). I think it is even easier to install SUSE than an equivalent Windows system, mainly because partiioning is better support in YAST

    How to install RPM

    There is many ways to install RPM. In facts, choose the one you prefer. Note that you must be loogged as root to install any application.

    Method 1: With Konqueror: click on RPM filename and after the download completion right click and choose "install packet with YAST"
    Methhod 2,3,4,5 can be found on this page http://portal.suse.com/sdb/en/2002/04/wessels_packageinst.html

    Install divx codecs and drivers

    For some legal issues, SUSE can not deliver Divx drivers in the distribution, but they can be download at www.divx.com/divx/linux/
    This internet page propose binary version of all major Linux program http://packman.links2linux.org

    One of the best player can be found at www.xinehq.de , Caffeine (installed as default) is only a frontend GUI and use the runtme libs from Xine.

    Emulation

    You can use one of the following to use some of your windows applications: www.winehq.comand for directX games www.transgaming.com (even without recompiling the game!!!) and this even without installing Windows! Vmware www.vmware.com is a commercial alternative but required a fully licensed windows images. MORE TO COME...

    Killer apps

    These applications are installed as default,
    Open Office (OO), which can open nearly all Microsoft office documents, GUI is not as good as MS Office but it do the job. Some powerpoint made with MS Office have some strange alignment, but MS Office represent correctly document created with OO.
    GIMP a program for manipulating 2D images (like photoshop), run also on Windows because of the porting of GTK (open source 2D library)

    from www.gimp.org in about the GIMP

    This is only a very quickly thrown together list of GIMP features. This is only the tip of the iceberg.

    Full suite of painting tools including Brush, Pencil, Airbrush, Clone,etc.
    Tile based memory managent so image size is limited only by available disk space.
    Sub-pixel sampling for all paint tools for high quality anti-aliasing
    Full alpha channel support
    Layers and channels
    A Procedural Database for calling internal GIMP functions from external programs as in Script-fu
    Advanced scripting capabilities
    Multiple Undo/Redo (limited only by diskspace)
    Virtually unlimited number of images open at one time
    Extremely powerful gradient editor and blend tool.
    Load and save animations in a convenient frame-as-layer format.
    Transformation tools including rotate, scale, shear and flip.
    File formats supported include gif, jpg, png, xpm, tiff, tga, mpeg, ps, pdf, pcx, bmp, and many others.
    Load, display, convert, save to many file formats.
    Selection tools including rectangle, ellipse, free, fuzzy, bezier and intelligent.
    Plug-ins which allow for the easy addition of new file formats and new effect filters.
    Over 100 plugins already available.
    Supports custom brushes and patterns
    Much, much more!


    Playing DVD, MP3, all tasks can de done under Suse without having any licence!!!! I recommend you to donate some money to the authors if you like their programs (so that they can pay their homepage hosting at least)
    Opera Opera is a religion. All those features, mouse gestures, keyboard shortcuts, embedded mail client, drag-around panels, skins, GREAT standards-support, it's so fast, easyness of bookmarking, the "magic-wand"... and the list goes on and on...It is not open source but I like it so much.

    Files manager

    I am a big fan since 1991 of Norton Commander (I was using NC 1.0 on floppy disk), In windows I am usingWindows Commander a lot to order million of files.
    http://www.rmonet.com/commander/ This page contains nearly all file commander clones of Norton Commander.
    http://www.xnc.dubna.su/ XNC 5.0
    http://krusader.sourceforge.net/

    Forums and Help

    French
    www.linuxfrench.net
    www.linuxquestion.org

    English
    http://librenix.com/ news site on linux
    Great forums

    Others reviewsyou can submit me a new linkHERE

    http://www.unixreview.com/documents/s=8925/ur0310l/
    http://www.arstechnica.com/etc/linux/index.html
    http://madpenguin.org/modules.php?op=modload&name=News&file=article&sid=503
    http://www.newsforge.com/article.pl?sid=03/11/11/1929234
    http://www.osnews.com/story.php?news_id=5157
    http://www.linuxnetmag.com/de/issue9/m9rh_suse1.html Suse vs Redhat
    http://www.internetwk.com/breakingNews/showArticle.jhtml?articleID=17300233

    How to/tutorials

    http://www.usalug.org/phpBB2/viewtopic.php?p=8161 Step by step install of SUSE 9.0 using FTP (non need to download and burn the iso's)
    http://homepages.ulb.ac.be/~secollet/ Linux on HP Compaq NX7000 (that's my notebook at work)

    Links

    http://distrowatch.com/index.php?language=EN "This site is an attempt to provide a basic feature list and a package comparison table of major, minor and regional Linux distributions"

    Links with reference to this article

    When you finish this article, You may want to read theround 2 HERE

  • A good worker. a good tool!

    • Use only Eclipse and try to buy codepro or found a free plugin that create java pattern templates and has refactoring capabilities..
    • Use only Borland if you need to do a RAD (Rapid applications development) applications
    • And for the text editor or xml or xsl or whatever, use only JEDIT, it is free and for sure the best editor, many of my colleagues are still fighting, convince that ultraedit or notepad or mpad are a lot better. You are clever only if you accept sometimes you are not right....
    • TCPviewer and Process viewer, free tools that can be download at www.winternals.com
  • A patch to protect Mambo administrator login page

    A Patch to protect Mambo administrator login page against brute force password attack!

    How it is working?

    1. It is a component com_hashcash containing alls script to create a MD5 key in PHP and javascript, and verifying a challenge.
    2. The server is sending inside a hidden field a MD5 value which is directly linked to the server, user sessionid, time.
    3. The client will have to encrypt with a MD5 javascript (costly cpu operation for a spammer) the value of this hidden field and send it back to the server as hidden field name.
    4. If the test is not succesful, the spammer will get banned for 60seconds.
    5. All successful/unsucessful submit are logged in a file.
    6. When the file get bigger as 64kb, an email is sent to the admin.

    Installation:
    This component has no administration panel! Simply overwrite the file on Your server with the content of the zip. A component package install is on the way.

    Original Mambo file affected for the login page:

    • /administrator/index.php <- add verification of the challenge
    • administrator\templates\mambo_admin\login.php <- insert hidden fields, and reference to MD5 javascript
    • administrator\templates\mambo_admin_blue\login.php <- insert hidden fields, and reference to MD5 javascript

     Future?
    • Many cryptographic algorithm, SHA1 on the way,
    • A mambots for changing on the fly all FORM before submit,
    • Ako_comment has been already patched, and  tested -> Waiting OK from Arthur Konze for releasing.
    • Ako_guestbok must be changed
    link in download section...

  • A strategy for Integrations versions with maven...

     apache_maven

    We are currently asking ourselves at INNOVEO, if we need to keep a version of integration versions.
    Integration versions main objective is to be integrated with other modules to make and test an
    application or a framework. This question is quickly becoming essential when working with several
    modules, where you will have to to rely on intermediate, non finalized versions of modules.

    Since we are also following  the continuous integration paradigm for all our modules, Thanks to
    Apache MAVEN, these integration versions are produced by a continuous integration server
    (Team City from JetBrain), very frequently.

    So, how can you deal with these, possibly numerous, integration versions? The response is coming
    from this extract from IVY documentation

    There are basically two ways to deal with them,

    Use a naming convention
    The idea is pretty simple, each time you publish a new integration of your module you give the same
    name to the version (in maven world this is for example 1.0-SNAPSHOT). The dependency manager
    should then be aware that this version is special because it changes over time, so that it does not
    trust its local cache if it already has the version, but check the date of the version on the repository
    and see if it has changed.

     
    Create automatically a new version for each
    in this case you use either a build number or a timestamp to publish each new integration version
    with a new version name. Then you can use one of the numerous ways in Ivy to express a version
    constraint. Usually selecting the very latest one (using 'latest.integration' as version constraint) is
    enough.

    But usually we recommend to use the second one, because using a new version each time you publish
    a new version better fits the version identity paradigm, and can make all your builds reproducible,
    even integration one. And this is interesting because it enables, with some work in your build system,
    to introduce a mechanism to promote an integration build to a more stable status, like a milestone
    or a release.

    The example given is very interesting...

    Imagine you have a customer which comes on a Monday morning and asks your latest version of your
    software, for testing or demonstration purpose. Obviously he needs it for the afternoon :-) Now if
    you have a continuous integration process and a good tracking of your changes and your artifacts, it
    may occur that you are actually able to fulfill his request without needing the use of a dolorean to
    give you some more time :-) But it may occur also that your latest version stable enough to be used
    for the purpose of the customer was actually built a few days ago, because the very latest just break
    a feature or introduce a new one you don't want to deliver. In this case, you can deliver this 'stable'
    integration build if you want, but be sure that a few days, or weeks, or even months later, the
    customer will ask for a bug fix on this demo only version. Why? Because it's a customer, and we
    all know how they are :-)

    So, with a build promotion feature of any build in your repository, the solution would be pretty easy:
    when the customer ask for the version, you not only deliver the integration build, but you also
    promote it to a milestone status, for example. this promotion indicates that you should keep track of
    this version in a long period, to be able to come back to it and create a branch if needed.

    Note this is the strategy at Eclipse.org, where a nightly build (N20080420) can be promoted to an Maintenance
    release if quality is good enough. Below I've put an extract of a presentation document from © 2006 by Alex Blewitt;
    made available under the EPL v1.0 |  2006-03-20  |  http://www.rcpapps.org/

    We are now using the same naming convention at INNOVEO for our product

    Eclipse_logo_white
    Eclipse builds are of different type:

    (N) Nightly
    • Built every night (whether successful or not)
    • Used to run quality metrics and whether tests have passed
    (I) Integration
    • Used to ensure that code works together
    • Used to run quality metrics
    (M) Maintenance
    • Released at the end of each build cycle
    (R) Release
    • Released at the end of each release cycle

    Each product is given a build id,

    • Build Type (N, I, M or R)
    • Build ID (M20060118)
    • Build Label (M20060118-1600)
    • Timestamp of build (16:00 on the 18th Jan, 2006)
    • Each release corresponds to a specific build label
    • May also be known as other aliases in CVS
    • R3_1_2, vI20060118-1000, R3_1_Maintenance

    To keep the Eclipse ecosystem in step, everything is tagged

    • Part of the build process tags the current code with vI20060320
    • A build is only promoted from N->I if there are no build failures
    • A build is promoted from I->M if there are no failures and all the
      functionality works to a satisfactory level
    • A build is promoted from M->R at the end of a release cycle and
      the quality is suitably high

     On the other hand, the main drawback of this solution is that it can produce a lot of intermediate
    versions, and you will have to run some cleaning scripts in your repository...

    I will present You later how you can achieve this goal with MAVEN and Team City

  • A wireless hacking computer

    This is the kind of geek stuff that put a big smile on my face when I read it... a portable ladtop capable of listening 300 wireless networks and hacking WEP keys in 5 minutes....

    A small security firm has made a portable computer that is capable of scanning 300 networks simultaneously. Dubbed the "Janus Project", the computer also has a unique "Instant Off" switch that renders the captured data inaccessible.

    At first glance, the Janus computer looks like a ladtop, but Williams said it is much more powerful than that. Inside the rugged yellow case sits a mini-computer motherboard powered by a 1.5 GHz VIA C7 processor and an Acer 17" LCD screen. Ubuntu 6.0 Linux runs the eight Atheros a/b/g Gold mini-PCI cards which continuously scan wireless networks. [....]

    In addition to scanning for wireless traffic, Williams says the computer can break most WEP keys very quickly by focusing all eight wireless cards on the access point. Using a combination of common utilities like airreplay, airdump and aircrack, Willams said, "When I use all 8 radios to focus in on a single access point, [the WEP key] lasts less than five minutes." However, he added that some retail wireless access points will "just die" after being hit with so much traffic... read more here

  • abnormal situation,exception, exception handling,

     

      <>Articles:

    A very good document, if you want to improve your code, Click HERE to download it

    This paper informs about design and implementation of error handling facilities in business information systems. It presents a pattern language for the object oriented design of components needed for error handling and also present sample code in different programming languages (C++, Java, Cobol, Smalltalk).
    List of Patterns

    Error Object, Exception Hierarchy , Error Traps, Assertion Checking Object, Backtrace , Centralized Error Logging, Error Handler, Default Error Handling, Error Dialog, Resource Preallocation, Checkpoint Restart, Exception Abstraction, Exception Wrapper, Multithread Exception Handling

    found at: http://www.objectarchitects.de/arcus/cookbook/exhandling/index.htm

    List of Patterns
    To get a better idea of the various patterns and the problems they are related to, we list all pattern names together with page references and questions defining the problems:

    Error Object* What characterizes an error? How to structure and administrate error information?

    Exception Hierarchy * How to structure error types? What role does inheritance play in the structuring of errors?

    Error Traps * What indicators are useful to detect erroneous situations and where to install the traps in the application code?

    Assertion Checking Object * How to implement Error Traps in an object oriented language without using a generative approach?

    Backtrace * How to collect and trace useful information for the system developers or the maintenance team, so that it supports them by the analysis of the error situation? Especially, if we have no or limited access to the stack administered by the system itself.

    Centralized Error Logging * How do you organize exception reporting so that you can offer your maintenance personnel good enough information for analyzing the branch offices problems?

    Error Handler * Where and how do you handle errors?

    Default Error Handling * How do you ensure that you handle every possible exception correctly (no unhandled exception and limited damage)?

    Error Dialog * How to signal errors to an application user?

    Resource Preallocation * How to ensure error processing although resources are short?

    Checkpoint Restart * How do you avoid a complete rerun of a batch as a result of an error?

    Exception Abstraction * How do you generate reasonable error messages without violating abstraction levels?

    Exception Wrapper * How do you integrate a ready-to-use library into your exception handling system?

    Multithread Exception Handling * How to schedule exceptions in a multithread environment?

     



    Softwares:

    Analysis

    Structural Analysis for Java "SA4J is a technology that analyzes structural dependencies of Java applications in order to measure their stability. It detects structural "anti-patterns" (suspicious design elements) and provides dependency web browsing for detailed exploration of anti-patterns in the dependency web. SA4J also enables "what if" analysis in order to assess the impact of change on the functionality of the application; and it offers guidelines for package re-factoring."
       

    Metrics

    Metrics sourceforge
    eclipse plugin
     
       
  • Abstract factory

    Provide an interface for creating families of related or dependent objects without specifying their concrete classes.



    Source Code

    /**
     * Abstract factory declares an interface for operations that create abstract
     * product objects.
     * 
     * @role __Factory
     */
    public interface AbstractFactory {
            /**
      * Creates abstract product
      */
            ProductA createProductA();        /**
      * Creates abstract product
      */
            ProductB createProductB();}
    
    /**
     * Abstract factory declares an interface for operations that create abstract
     * product objects.
     * 
     * @role __Factory
     */
    public interface AbstractFactory {
            /**
      * Creates abstract product
      */
            ProductA createProductA();        /**
      * Creates abstract product
      */
            ProductB createProductB();}
    
    /**
     * Abstract product - an interface for a type of Product object.
     * 
     * @role __Product
     * @see AbstractFactory
     */
    public interface ProductA {
    
            /*
      * add product method declarations here
      */
    }
    
    /**
     * Concrete Factory implements operations of AbstractFactory to create Concrete
     * product objects.
     */
    public class MyFactory implements AbstractFactory {
    
            /**
      * Creates concrete product ConcreteProduct1
      */
            public ProductA createProductA() {
                    return new ConcreteProduct1();        }
    
            /**
      * Creates concrete product ConcreteProduct2
      */
            public ProductB createProductB() {
                    return new ConcreteProduct2();        }
    
    }
    
    /**
     * Concrete product defines a product object to be created by the corresponding
     * concrete factory.
     * 
     * @see MyFactory
     */
    public class ConcreteProduct1 implements ProductA {
    
    }
    
    /**
     * Concrete product defines a product object to be created by the corresponding
     * concrete factory.
     * 
     * @see MyFactory
     */
    public class ConcreteProduct2 implements ProductB {
    
    }
    
  • Access to Joomla CVS forge using eclipse

     I show You here (with screenshots) How to access Joomla Forge CVS system using the standard Eclipse CVS client.

    Click Read more !



    Go to the perspective CVS Repository Exploring
    New Repository LocationAdd a new repository location (the screenshots show a workspace I am using with all repositories already defined...)
    add CVS repositoryEnter the following informations:
    • Host is scm.joomla.org
    • Repository pathis /cvsroot/com_akocommentplus
    • Enter your user login (create one if needed here)
    • Enter your Password
    • Connection type should be extssh
    Click on button Finish
    check out HEAD from Joomla ForgeYoure done, you can now checkout the HEAD

  • Acheter a l'étranger: Japon, USA...Prix scandaleux en france!

    Ce qui est dangeureux: c'est le port (40â € voire 70€ pour un kit hélico), les frais de douanes et de TVA: 25% de la valeur déclarée du paquet. Ce qui est bien: nouveautés 4 mois à 1 an avant les autres, toujours moins cher de 200€ ou plus sur un kit, 60% moins cher pour les piéces détachées.
    • Astuces: demander au vendeur de déclarer ou de conditionner le colis comme un cadeau (gift) et zou plus de frais de douanes!
    • Si le mode cadeau n'existe pas, demander lui de déballer tous les sachets individuelles et de n'en faire qu'un (en vrac dans un sachet sans réferences: bonne chance monsieur les douaniers! :-), si il vous demande une participation pour la manutention supplémentaire, accepter de bon coeur, mieux offrer lui la!
    • Demander au vendeur de spécifier un prix fantaisiste sur le paquet! ex pour 1000â €, spécifier 70€ vous ne serez alors que taxer sur 70€, mais pas rembourser en cas de perte du paquet, c'est vrai, mais c'est trés rare la perte de paquet surtout avec UPS, Fedex etc...
    • La période de noêl est propice: les douanes sont surchargés! c'est du vécu cela, noêl et nouvel an! c'est le moment.
    • Si vous êtes moins ambitieux, regarder en Europe! les différerences de prix sont des fois édifiantes.
    • Trichez! faites vous livrez dans un pays limitrophes aux droits de douanes moindres....chez grand mère en belgique, en allemagne, la suisse (7% de TVA et le droit de passer des valeurs sans déclaration jusqu'a 250€ par jour)
    • Oui c'est dégeu, oui le pauvre magasin du coin va mourir, oui encore des chomeurs...solutions? protectionnisme, fermer les frontieres etc... non sans blague, le gars au japon, il vit et fait des bénéfices aussi! le gars du coin qui nous a B.... pendant 20 ans, il a qu'a ce dire que il a mangé son pain blanc, ses meilleures années sont derrière lui!

    Exemple révoltant: la canopy du raptor 30: 48€ en france, $15.5 (+20€ de port) au japon, faites en venir 3, 2 seront presque gratuite! regroupez vous. Commander en quantité, regrouper vous dans votre club et voler sur la même machine!

  • Adapter

    Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.



    Source Code

    /**
     * Defines an existing interface that needs adapting
     * 
     * @role __Adaptee
     */
    public class Adaptee {
    	/* Some adaptee-specific behavior */
    	public void specificRequest() {
    		// some adaptee specific stuff is going here
    	}
    }
    
    /**
     * This class adapts the interface of Adaptee to the Target interface
     */
    
    public class Adapter extends Target {
    	/** reference to the object being adapted */
    	private Adaptee adaptee;
    
    	/**
    	 * @param adaptMe
    	 *            class to adapt whis this adapter
    	 */
    	public Adapter(Adaptee adaptMe) {
    		this.adaptee = adaptMe;
    	}
    
    	/**
    	 * Implementation of target method that uses adaptee to perform task
    	 */
    	public void request() {
    		adaptee.specificRequest();
    	}
    
    }
    
    /**
     * This class defines domain-specific interface used by client
     * 
     * @role __Target
     */
    
    public abstract class Target {
    	/** This method is called by client when he needs some domain-specific stuff */
    	public abstract void request();
    }
    
  • Add a harddisk led to Your XBOX

    Add a led to your Xbox to seehard disk activity

    This mod is quite risky, especially if you
    can not solder with precision 

    xboxIcon Legal Issues

    1. It is strictly forbidden to modify your xBox, sell or install mods chip in france.
    2. Even opening the XBOX is forbidden.
    3. Remember pirating is a crime, support the developers and film companies.

    {mosgoogle center}

    xboxIcon 1. How To

    Required:
    • LED
    • Resistor 220 Ohms

    The resistor (value depending of the LED power) has to be soldered on the longest LED wire



    +5 Volts is taken from the connector, you can open the connector and close it without any difficulties

    The trickiest part is to solder on pin39 the signal (negative)

    You should also verify carefully your soldering, this tool may help



    Drill a 3mm hole or bigger depending on LED size

    Final Result


  • Adding Google Analytics To MediaWiki

    MediaWiki-logo I search and search on how to add a Google analytics to MediaWiki, seems pretty damn simple as long as you know which templates you are using as default.

    The current skins is configured in LocalSettings.php

    ## Default skin: you can change the default skin. Use the internal symbolic
    ## names, ie 'standard', 'nostalgia', 'cologneblue', 'monobook':
    $wgDefaultSkin = 'monobook';

    Head to {mediawiki_root}/skins and edit  the right skins, for me it is MonoBook.php

    Just add your analytics scripts before the </body>. Now MediaWiki will add the marker in every page

    Before

    <?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
    <?php $this->html('reporttime') ?>
    <?php if ( $this->data['debug'] ): ?>
    <!-- Debug output:
    <?php $this->text( 'debug' ); ?>
    -->
    <?php endif; ?>
    </body></html>

    After

    <?php $this->html('bottomscripts'); /* JS call to runBodyOnloadHook */ ?>
    <?php $this->html('reporttime') ?>
    <?php if ( $this->data['debug'] ): ?>
    <!-- Debug output:
    <?php $this->text( 'debug' ); ?>
    -->
    <?php endif; ?>
    <script type="text/javascript">
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    document.write(unescape("%3Cscript src='" + gaJsHost
    + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> <script type="text/javascript"> try { var pageTracker = _gat._getTracker("UA-88600-7"); pageTracker._trackPageview(); } catch(err) {}</script>
    </body></html>
  • Adding mod_security to better protect your webserver

    ModSecurityTM is an open source intrusion detection and prevention engine for web applications (or a web application firewall). Operating as an Apache Web server module or standalone, the purpose of ModSecurity is to increase web application security, protecting web applications from known and unknown attacks.from http://www.modsecurity.org/
     
    Installing mod_security as DSO is easier, and the procedure is the same for both Apache branches. First unpack the distribution somewhere (anywhere will do, I copy the .c files in my home),

    # cd
    # wget http://www.modsecurity.org/download/mod_security-1.9.4.tar.gz
    # tar -zxfv mod_security-1.9.4.tar.gz
    # cd mod_security-1.9.4/apache2

    and compile the module with:

    apache1apache2
    /usr/local/psa/admin/bin/apxs  -cia ~/mod_security.c/usr/sbin/apxs2  -cia ~/mod_security.c

    First problem that may occur is the absence of
    • GccThe GNU Compiler Collection (usually shortened to GCC) is a set of programming language compilers produced by the GNU Project. It is free software distributed by the Free Software Foundation (FSF) under the GNU GPL, and is a key component of the GNU toolchain. It is the standard compiler for the open source Unix-like operating systems, and certain proprietary operating systems derived therefrom such as Mac OS X. [WikiPedia]
    • apache-dev: contains the apxs tool, and required pache heder to compile a module
    Both can be installed via YaST2...

    Tips: if your apxs2 is not located at /usr/bin/apxs2, you can search it by typing # find / -name apxs2

    # /usr/sbin/apxs2  -cia ~/mod_security.c
    /usr/share/apache2/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -g -fPIC -Wall -fno-strict-aliasing -D_LARGEFILE_SOURCE -DAP_HAVE_DESIGNATED_INITIALIZER -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -DAP_DEBUG -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -pthread -I/usr/include/apache2  -I/usr/include/apache2   -I/usr/include/apache2   -c -o /root/mod_security.lo /root/mod_security.c && touch /root/mod_security.slo
    /usr/share/apache2/build/libtool --silent --mode=link gcc -o /root/mod_security.la  -rpath /usr/lib/apache2 -module -avoid-version    /root/mod_security.lo
    /usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apache2/build/libtool' /root/mod_security.la /usr/lib/apache2
    /usr/share/apache2/build/libtool --mode=install cp /root/mod_security.la /usr/lib/apache2/
    cp /root/.libs/mod_security.so /usr/lib/apache2/mod_security.so
    cp /root/.libs/mod_security.lai /usr/lib/apache2/mod_security.la
    cp /root/.libs/mod_security.a /usr/lib/apache2/mod_security.a
    ranlib /usr/lib/apache2/mod_security.a
    chmod 644 /usr/lib/apache2/mod_security.a
    PATH="$PATH:/sbin" ldconfig -n /usr/lib/apache2
    ----------------------------------------------------------------------
    Libraries have been installed in:
       /usr/lib/apache2

    If you ever happen to want to link against installed libraries
    in a given directory, LIBDIR, you must either use libtool, and
    specify the full pathname of the library, or use the `-LLIBDIR'
    flag during linking and do at least one of the following:
       - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
         during execution
       - add LIBDIR to the `LD_RUN_PATH' environment variable
         during linking
       - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
       - have your system administrator add LIBDIR to `/etc/ld.so.conf'

    See any operating system documentation about shared libraries for
    more information, such as the ld(1) and ld.so(8) manual pages.
    ----------------------------------------------------------------------
    chmod 755 /usr/lib/apache2/mod_security.so
    apxs:Error: Config file /etc/apache2/httpd2-prefork.conf not found.

    Do not take care of the error in blue, since the resulting shared library (mod_security.so) has been automatically copied into /usr/lib/apache2

    Copy then the desired rule set (modsecurity-general.confor modsecurity-php.conf) into /etc/apache2

    Edit /etc/apache2/httpd.confand add the following lines at the end of file, it is also recommended to use the rules from www.GotRoot.com

    LoadModule security_module /usr/lib/apache2/mod_security.so
    SecFilterEngine On
    Include /etc/apache2/modsecurity_rules/modsecurity-general.conf
    Include /etc/apache2/modsecurity_rules/modsecurity-hardening.conf

    #rules set found at http://www.gotroot.com/tiki-index.php?page=mod_security+rules
    Include /etc/apache2/modsecurity_rules/gotroot/apache2-rules.conf
    Include /etc/apache2/modsecurity_rules/gotroot/badips.conf
    Include /etc/apache2/modsecurity_rules/gotroot/blacklist2.conf
    Include /etc/apache2/modsecurity_rules/gotroot/blacklist.conf
    Include /etc/apache2/modsecurity_rules/gotroot/exclude.conf
    Include /etc/apache2/modsecurity_rules/gotroot/jitp.conf
    Include /etc/apache2/modsecurity_rules/gotroot/proxy.conf
    Include /etc/apache2/modsecurity_rules/gotroot/recons.conf
    Include /etc/apache2/modsecurity_rules/gotroot/rootkits.conf
    Include /etc/apache2/modsecurity_rules/gotroot/rules.conf
    Include /etc/apache2/modsecurity_rules/gotroot/useragents.conf

    BUT be carefull with modsecurity-hardening.conf
    1. This fle has to be tuned  for your server: logs files location, advanced rulesets, read carfeully and uncomment TODO if needed
    2. As default mod_security is in learning mode: it log and let the request  pass through (line SecFilterDefaultAction "pass, log"), recommended as soon as You have a good rulesets SecFilterDefaultAction "deny,log,status:500"
     Restart Apache2 by typing
    # /etc/init.d/apache2 restart

    Now it is time to check if mod_security is running       

    # tail -f /var/log/apache2/error_log
    [Mon Aug 21 18:43:38 2006] [notice] Apache/2.0.53 (Linux/SUSE) configured -- resuming normal operations
    [Mon Aug 21 19:01:56 2006] [notice] caught SIGTERM, shutting down
    [Mon Aug 21 19:01:57 2006] [warn] Init: Session Cache is not configured [hint: SSLSessionCache]
    [Mon Aug 21 19:01:57 2006] [warn] RSA server certificate CommonName (CN) `h790663.serverkompetenz.net' does NOT match server name!?
    [Mon Aug 21 19:01:57 2006] [warn] RSA server certificate CommonName (CN) `plesk' does NOT match server name!?
    [Mon Aug 21 19:01:57 2006] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec2)
    [Mon Aug 21 19:01:57 2006] [notice] mod_security/1.9.4 configured
    [Mon Aug 21 19:01:57 2006] [warn] RSA server certificate CommonName (CN) `h790663.serverkompetenz.net' does NOT match server name!?
    [Mon Aug 21 19:01:57 2006] [warn] RSA server certificate CommonName (CN) `plesk' does NOT match server name!?
    [Mon Aug 21 19:01:57 2006] [notice] Apache/2.0.53 (Linux/SUSE) configured -- resuming normal operations

    links
  • Adding oil to you fuel

    nullIf you have 15/16 percent (nitro/oil) mix fuel and want to go for 20% oil - it can made help the OS .32 to run cooler and have a little more top-end power.

    a = 1.28(d - c)/(1 - d/100)

    where:
    a = amount of oil you need to add (in oz)
    d = desired oil percentage (use 20 for 20%, for example)
    c = current oil percentage (use 16 for 16%, for example)

    So you if you want d = 20 (20% oil), c = 16 (actually you have 16% oil) result a = 6.4 (ie, add 6.4 oz of oil to each gallon of fuel).

    Note that by adding oil, you're reducing your nitro % a little. My figures show that my nitro is now down to about 14.3%... Seems to be a good trade.

  • Advanced Oracle Weblogic start/stop script

    oracle_logo3

    The Oracle WebLogic 11g application server product line is the industry's most comprehensive Java platform for developing, deploying, and integrating enterprise applications. It provides the foundation for application grid, which is an architecture that enables enterprises to outperform their competitors while minimizing operational costs.

    Some notes

    This script may look unsecure (and it is)

    Since password are store inside (admin server login: admin and password is admin), by doing so I can restart Oracle Weblogic in a cron job since stopping wont query the console for the login and password: feel free to remove these lines in blue

    I always recommend to install web process in its own user group and use a dedicated user to mitigate any securities issues:

    # groupadd weblogic
    # useradd -g weblogic-c weblogicuser for weblogic' -m weblogic
    # su – weblogic

    Install then weblogic in /home/weblogic

    Respect the order of component for starting

    1. Start Weblogic Node Manager,
    2. Start WebLogic Admin server,
    3. Start all Managed Server in any order.

    and stopping components

    1. Stop the Node Manager
    2. Stop all Managed WebLogic server
    3. Stop WebLogic

    Names of the managed server

     managed server names are in the script so add remove start and stop command for them

    Logs files of start and stop operations

    are written in 2 files, that use timestamp, see WLS_LOG_START and WLS_LOG_STOP

    /etc/init.d/weblogic file

    Create a new file as root in /etc/init.d/weblogic

    # vi /etc/init.d/weblogic

    and paste inside the following

    #!/bin/sh
    # description: webLogic adminServer and managedServer start script
    #

    # customized below to your likings
    WLS_DOMAIN=mytestdomain
    WLS_BASE=/home/weblogic/
    WLS_HOME=${WLS_BASE}/bea/user_projects/domains/$WLS_DOMAIN
    WLS_NODE_HOME=${WLS_BASE}/bea/wlserver_10.3/server/bin
    WLS_OWNER=
    weblogic
    WLS_ADMIN_PORT=7001
    WLS_ADMIN_LOGIN=admin
    WLS_ADMIN_PWD=admin
    WLS_LOG_START=${WLS_BASE}/logs/start.`date '+%d%m%y'`.log
    WLS_LOG_STOP=${WLS_BASE}/logs/stop.`date '+%d%m%y'`.log
    WLS_MANAGED_SERVER1=dev
    WLS_MANAGED_SERVER2=test
    JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.management.username=${WLS_ADMIN_LOGIN}"
    JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.management.password=${WLS_ADMIN_PWD}"

    export JAVA_OPTIONS

    if [ ! -f $WLS_HOME/startWebLogic.sh ]
    then
        echo "WebLogic startup: cannot $WLS_HOME/startWebLogic.sh "
        exit
    fi

    startWeblogic()
    {
    su - $WLS_OWNER -c "nohup $WLS_NODE_HOME/startNodeManager.sh > ${WLS_LOG_START} 2>&1 &"
    sleep 10
    su - $WLS_OWNER -c "nohup $WLS_HOME/startWebLogic.sh >> ${WLS_LOG_START} 2>&1 &"
    sleep 10
    su - $WLS_OWNER -c "nohup $WLS_HOME/bin/startManagedServer.sh >> ${WLS_LOG_START} 2>&1 &"
    sleep 10
    su - $WLS_OWNER -c "nohup $WLS_HOME/bin/startManagedServer.sh >> ${WLS_LOG_START} 2>&1 &"
    return 0
    }

    stopWeblogic()
    {
    su - $WLS_OWNER -c "nohup $WLS_NODE_HOME/stopNodeManager.sh > ${WLS_LOG_STOP} 2>&1 &"
    sleep 10
    su - $WLS_OWNER -c "nohup $WLS_HOME/bin/stopManagedWebLogic.sh $WLS_MANAGED_SERVER1t3://localhost:$WLS_ADMIN_PORT ${WLS_ADMIN_LOGIN} ${WLS_ADMIN_PWD} >> ${WLS_LOG_STOP} 2>&1 &"
    sleep 10
    su - $WLS_OWNER -c "nohup $WLS_HOME/bin/stopManagedWebLogic.sh $WLS_MANAGED_SERVER2 t3://localhost:$WLS_ADMIN_PORT  ${WLS_ADMIN_LOGIN} ${WLS_ADMIN_PWD}>> ${WLS_LOG_STOP} 2>&1 &"
    sleep 10
    su - $WLS_OWNER -c "nohup $WLS_HOME/bin/stopWebLogic.sh >> ${WLS_LOG_STOP} 2>&1 &"
    return 0
    }

    case "$1" in
        'start')
            startWeblogic
            ;;
        'stop')
            stopWeblogic
            ;;
        'restart')
            stopWeblogic
            startWeblogic
            ;;
        *)
            echo "Usage: $0 start|stop|restart"
            exit 1
            ;;
    esac

  • All Eclipse Ganymede Shortcuts

    ganymede

    Here is the list of all 380 default shortcuts keys for eclipse Ganymede in an easy to print layout (4 pages A4). I recommend you to print a booklet out of it.

    Nobody on Internet is currently providing such a list, except a sourceforge project but their keys binding is for eclipse 2.1,Others keys binding for eclipse will follows soon.

    3rd party plugin shortcuts:

    Download as PDF now eclipse.ganymede.shortcuts.keys.binding.pdf

  • All Playstation lenses in one post

    sony_playstation_ps3

    I will keep this post up to date with all possible PS3 lenses, you are welcome to send me any new/better pictures. As say a lot of time before. Open up your PS3 before ordering any of these optical lenses online. There is no guarantee that your model with have one of the other model. This post should help you identify which lens to order.

    KES-410ACA Playstation 3

    PS3 Compatible Replacement Laser Lens (KES-410ACA)

    KES-400A Playstation 3  40GB

    Sony PS3 Laser Lens Repair KES-400A (40gbPlaystation 3 Compat Replacement Laser Lens KES400AAA

    KES-450A Playstation 3 slim

    KES-450A.ps3.slimPS 3 Slim Compatible Remplacement Laser Lens KES450A

    KES-460A Playstation 3 slim 160-320GB

    LASER LENS PS3 SLIM 160-320GB KES-460A

  • Alternate row colour and onhover effect in html table

    domTableEnhance is a script that turns every table with a special class into an enhanced one. The tables enhanced by domTableEnhance will have an alternate row colour and have a rollover on each row that includes cells (header rows won't get a rollover). domTableenhance adds these effects by applying classes to the rows, which means that you don't need to know any Javascript to change the look.More here at the official homepage
  • Android how to delete system application and remove unwanted MyTaxi on Galaxy S3

    I use the hard way, free but a bit more difficult as it require a rooted device, I personally use “Android Terminal Emulator” with granted root permissions (after typing su a prompt will appear)

    Android how to delete system application

    su (enter)
    mount -o rw,remount /system (enter)
    rm -r /system/app/FILE-NAME-HERE.apk (enter)

    How to remove this SHIT of myTaxi – Passenger Taxi App on Samsung Galaxy S3

    This application got installed without my knowledge by a Samsung update as a System App that CANNOT BE UN INSTALLED!

    First before I forgot: Go to hell Samsung andIntelligent Apps GmbH

    If either of you continue in that direction, installing software without my prior permission, the next update to my Samsung Galaxy S3 will be CyanogenMod 10

    Back to the removal of MyTaxi,  Samsung did hide taxi.android.client_v2.5.1.apk under the name /system/app/samsung_ch.apk

    To remove it

    su (enter)
    mount -o rw,remount /system (enter)
    rm -r /system/app/samsung_ch.apk (enter)
  • Ant scripts How to...