Set up Latex in Debian Wheezy

1) Using Synaptic Package Manager to install texlive packages and textworks editor

2) If using multirow.sty, need to install texlive-latex-extra package, and run the following command: >sudo texhash

3) For true type fonts,

3.1) create a new directory in /usr/share/fonts/truetype/<yourfontdir>: >sudo mkdir <yourfontdir>

3.2) copy all .ttf into the newly-created directory: >sudo mv *.tff /usr/share/fonts/truetype/<yourfontdir>/

3.3) run the following command: >sudo fc-cache -f -v

4) Run the texworks using XeLatex

Posted in Uncategorized | Leave a comment

Assign MySQL Root Password Using XAMMP Security Page

A fresh installed MySQL has a blank password. So, my scenario is that my MySQL server was installed by XAMPP 1.8.1, and I wanted to assign a root password to it. Instead of doing that in a traditional way, I chose to use XAMPP Security Page.

  1. Open XAMPP Control Panel
  2. Start Apache Server and MySQL Server
  3. Open a Web browser and point to the address: http://localhost/security
  4. Change the Language to English.
  5. Click on the link http://localhost/security/xamppsecurity.php on that page.
  6. Enter the new root password for MySQL
  7. Check on http radio button for the phpMyAdmin authentication
  8. Click on Password changing button
  9. Point browser to the address http://localhost/phpmyadmin/, you will be presented with a pop-up window for entering username and password
  10. enter “root” as a username, and whatever that you just set it up for password.
Posted in Uncategorized | Leave a comment

XAMPP 1.8.1: Cannot start Tomcat server using XAMPP Control Panel

My situation is that I was installing XAMPP 1.8.1 in Windows 8 Professional. After finished the installation, I used XAMPP Control Panel to successfully start Apache Server, MySQL Server, and Tomcat Server, respectively.

The problem was that after I stopped all those services and tried to restart them again using XAMPP Control Panel, the Tomcat server could not be started.

Problem: there is an error in the catalina_start.bat in the $XAMPP_HOME directory. So, the script cannot find the CATALINA_HOME. There are two alternative ways to fix this problem.

Fix #1: Use a text editor to edit the catalina_start.bat in the $XAMPP_HOME directory. Search for:

echo.
echo [XAMPP]: Using JDK
set "CURRENT_DIR=%cd%"
set "CATALINA_HOME=%CURRENT_DIR%\tomcat"

and change it to

echo.
echo [XAMPP]: Using JDK
cd..
set "CURRENT_DIR=%cd%"
set "CATALINA_HOME=%CURRENT_DIR%\tomcat"

Fix #2: Change the path in the Start In properties of the XAMPP Control Panel shortcut icon on the Desktop.

  1. Right click on the XAMPP Control Panel shortcut icon on the Desktop to open a context menu
  2. Click on Properties
  3. Change the Start in path from d:\myxampp\tmp\ to d:\myxampp\
  4. Click Apply and OK buttons
Posted in Uncategorized | Leave a comment

Netbeans IDE 7.2.1: Cannot load platform/lib/nbexec.dll module

I encountered the following error message: cannot load platform/lib/nbexec.dll module, when I installed Netbeans IDE 7.2.1 in Windows 8 Professional with jdk 1.7.0_09.

To fix this problem, right click on the Netbeans IDE shortcut icon on the Desktop, click on Properties, and change path in the “Start in” box from


"C:\Program Files\NetBeans 7.2.1"

to


"C:\Program Files\NetBeans 7.2.1\bin"

Posted in Uncategorized | Leave a comment

Hide/show a Save button in Netbeans Platform 7

When we incorporate NetBEANS Platform 7 into our application, we usually employ Action Annotations rather than layer.xml file for registering actions into a system.

For example, the code below is an implementation of closing a TopComponent. (Notes: we create a PaymentEditorTopComponent.class in org/editor/payment package, and CloseWindowAction.class in the org/action/payment package.)


@ActionID(category = "MyPaymentEditorToolbars_WindowActions",
id = "org.action.payment.CloseWindowAction")
@ActionRegistration(iconBase = "org/action/payment/cross.png",
displayName = "#CTL_CloseWindowAction")
@ActionReferences({
@ActionReference(path = "Toolbars/MyPaymentEditorToolbars_WindowActions", position = 300)
})
@Messages("CTL_CloseWindowAction=Close Window")
public final class CloseWindowAction implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
// TODO implement action body
PaymentEditorTopComponent tc = (PaymentEditorTopComponent)WindowManager.getDefault().findTopComponent("PaymentEditorTopComponent");
if (tc.canClose()) {
tc.close();
}
}
}

Then, we add the following code snippets into componentActivated() and componentDeactivated() of the PaymentEditorTopComponent class.


@Override
protected void componentActivated() {
Toolbar toolbar = ToolbarPool.getDefault().findToolbar("MyPaymentEditorToolbars_WindowActions");
if (!toolbar.isVisible()) {
toolbar.setVisible(true);
}
}

@Override
protected void componentDeactivated() {
Toolbar toolbar = ToolbarPool.getDefault().findToolbar("MyPaymentEditorToolbars_WindowActions");
if (toolbar.isVisible()) {
toolbar.setVisible(false);
}
}

By the above means, the Close Window toolbar will be displayed when the PaymentEditorTopComponent is active, and hidden when the PaymentEditorTopComponent is not active.

There is catch. From my understanding, to be able to have Action Annotation as above, the action class must implement ActionListener.

However, the Save button implements SaveCookie, not ActionListener. So, what could we do to hide and show the Save button?

What I have done is to go back to the layer.xml approach.

  1. I create a class file named MySavePaymentCookieImpl which implements SaveCookie as usual.
  2. I have InstanceContent, and fire(boolean){} as shown in the CRUD tutorial
  3. I add the following code into layer.xml

  4. <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
    <filesystem>
    <folder name="Toolbars">
    <folder name="MyPaymentEditorToolbars_WindowActions">
    <file name="org-openide-actions-SaveAction.shadow">
    <attr name="originalFile" stringvalue="Actions/System/org-openide-actions-SaveAction.instance"/>
    <attr name="position" intvalue="300"/>
    </file>

    <file name="org-openide-actions-SaveAllAction.shadow_hidden"/>
    </folder>
    </folder>
    </filesystem>

  5. Now, the key step is to inform the system to use layer.xml file by adding the following line into Module Manifest file

    OpenIDE-Module-Layer: org/editor/payment/layer.xml
Posted in Uncategorized | Leave a comment

Store image into and load image from JavaDB using EclipseLink

My successful experience on how to store and load an image (.jpg) using JavaDB+EclipseLink+Java 1.6.0_25 and NetBeans 7.0 is as follows.

  1. A table named, Customer, is used as an illustrating example. There are three attributes in this table: CustomerId, Name, and Photo.
  2. An SQL script of this table is shown below:


    create table APP.Customer
    (
    CUSTOMER_ID INTEGER not null primary key generated always as identity (start with 1, increment by 1),
    FIRST_NAME VARCHAR(255),
    PHOTO BLOB(2147483647)
    )

  3. Create a database named, CustDB, through the Services tab of NetBeans IDE.
    1. In NetBeans IDE 7.0, click on the Services tab.
    2. Right-click on the JavaDB node, and then click on Create Database…
    3. Enter the database name, user name and password in the provided text boxes. Use “mydb” for the user name and password.
  4. Create a new connection to the newly-created database.
    1. On the “Services” tab, right-click on the “Databases” node, and then click on “New Connection…”
    2. We will use JavaDB Network for this tutorial, so select “JavaDB (Network)” for the driver. Then, click Next.
    3. Enter Host Name: localhost, Port: 1527, Database: CustDB, User name: mydb, and Password: mydb.
    4. Click Next
    5. Select “APP” as the schema name
    6. Click Finish
    7. A new connection node: jdbc:derby:localhost:1527/CustDB [myapp on APP]
  5. Create a new table in CustDB
    1. Expand the CustDB connection node
    2. Expand the APP node under CustDB node
    3. Right-click on the “Table” node under the CustDB/APP node, and click on “Execute Command…” to open an SQL window
    4. Copy the SQL script shown above into the SQL window, and click “Execute” icon.
  6. Create Java Library Project
    1. On the Netbeans IDE 7.0 menu, File –> New Project
    2. Categories: Java and Projects: Java Class Library
    3. Click Next
    4. Project Name: MyCustomerLibraryProject
    5. Click Finish
    6. On the Project tab, right-click on the MyCustomerLibraryProject node –> New –> Entity Classes from Databases …
    7. Select the CustDB connection that is just created above for the Database Connection. Then, there should be only one available table, named Customer.
    8. Click “Add All” and then click “Next”
    9. Put “demo” as the package name, and then click “Finish”
  7. Modify the generated Customer.class file in the MyCustomerJavaLibraryProject
    1. Click the “demo” node to expand the node, there will be one Java file named, “Customer.java”.
    2. Click the file to open it in the NetBeans IDE editor.
    3. Since we use “mydb” as user name and password, we need to use a fully-qualified name for the table name. So, change:


      @Table(name = "CUSTOMER")

      to


      @Table(name = "APP.CUSTOMER")

      The reason is that JavaDB will presume that the user name, in this case “mydb”, is the schema name, however, we create the Customer table in “APP” schema. As a result, we need to use a fully-qualified name for the Customer table which is “APP.CUSTOMER”.

    4. In JavaDB, EclipseLink maps “BLOB” SQL data type into “Serializable” Java SQL data type. However, to store an image, we need to use “byte[]” Java SQL data type. Accordingly, we need to change:
      • The data type of “photo” variable definition from Serializable to byte[].

        @Lob
        @Column(name = "PHOTO")
        private Serializable photo;

        to

        @Lob
        @Column(name = "PHOTO")
        private byte[] photo;
      • The returned data type of getPhoto() method from Serializable to byte[]

        public Serializable getPhoto() {
        return photo;
        }

        to

        public byte[] getPhoto() {
        return photo;
        }
      • The parameter data type of setPhoto() from Serializable to byte[]

        public void setPhoto(Serializable photo) {
        this.photo = photo;
        }

        to

        public void setPhoto(byte[] photo) {
        this.photo = photo;
        }

    5. Now, we are ready to generate MyCustomerLibrary.jar by right-clicking on the “MyCustomerLibraryProject” and then click “Clean and Build”
  8. Create a Library Wrapper module containing “MyCustomerLibraryProject.jar” created above. Then, set the dependencies of this module to DerbyClient and EclipseLink library wrapper modules. Assume that these two modules are created beforehand.
  9. Now, in a Java code where we need to save an image from JLabel into our CustDB database in JavaDB, use the following code snippet.


    //Store image from jLabel into JavaDB
    Customer newCustomer = new Customer();
    ImageIcon imgIcon = (ImageIcon) jLabelImage.getIcon();

    if (imgIcon != null) {

    Image img = imgIcon.getImage();
    byte[] imgByte = getByteArrayFromImage(img);

    newCustomer.setPhoto(imgByte);

  10. The getByteArrayFromImage() method is defined as follows.


    private byte[] getByteArrayFromImage(Image img) {

    byte[] imgByte = null;

    try {
    int imgWidth = img.getWidth(null);
    int imgHeight = img.getHeight(null);
    int imgType = BufferedImage.TYPE_INT_ARGB; // you can experiment with this one
    BufferedImage bi = new BufferedImage(imgWidth, imgHeight, imgType);
    Graphics2D g2 = bi.createGraphics();
    g2.drawImage(img, 0, 0, null);
    g2.dispose();

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    if (ImageIO.write(bi, "JPEG", baos)) {
    imgByte = baos.toByteArray();
    }

    } catch (IOException ex) {
    Exceptions.printStackTrace(ex);
    }

    return imgByte;

    }

  11. In addition, for the Java code where an image is loaded from CustDB and displayed in JLabel, use the following code snippet:


    //For image from database to jLabel
    Customer existingCustomer = getCustomerFromDB(customerID);//load a Customer object from database
    byte[] imageByte = existingCustomer.getPhoto();
    if (imageByte != null) {

    ImageIcon imageIcon = new ImageIcon(imageByte);
    java.awt.Image img = imageIcon.getImage();

    this.jLabelImage.setIcon(imageIcon);
    this.jLabelImage.setText(null);

    }

  12. That’s pretty much all we need to do. However, you may need to specify allowable image file types, and scale an image before putting in a JLabel.
  13. The methods in steps #9, #10 and #11 can be used for MySQL database. The thing is that MySQL maps BLOB SQL data type into byte[] Java SQL data type. Therefore, we do not need to do step #7.
  14. The most important steps are #7, #9, #10 and #11 that we need to modify Customer.java file and define save/load methods.

Have fun!

Posted in Uncategorized | 5 Comments

CRUD NetBeans Platform Application with Embedded JavaDB

If you guys have followed this tutorial: CRUD tutorial for NetBeans Platform 7.0, and tried to make it an Embedded JavaDB application based on the following tutorial: Embedded Database for NetBeans Platform CRUD, and you receive this Table/View does not exist. error message, you need to edit a persistence.xml file as follows.

After creating entity classes from database, edit a persistence.xml file by adding:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>

into the file within the existing <properties></properties> tags as shown below. (Notes: add the above line to persistence.xml before you create a dist folder).


<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:CustDB;create=true"/>
<property name="javax.persistence.jdbc.password" value="app"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.user" value="app"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.logging.level" value="INFO"/>
</properties>

Next, you just do the “Clean and Build All” to create a “dist” folder containing a “.jar” file. The .jar file will then be used for the CustomerLibrary wrapper module.

In my understanding, the reason is that the create=true property in the connection string URL, jdbc:derby:CustDB;create=true, will only create a new database, but does not create tables.

In addition, when making a connection using Services tab, a new database is created in $NetBeans_Home/.netbeans/7.0/derby. However, when creating a database from running the application, the database is created in $Project_Home or DBManager folder (Click the Files tab to see a newly-created database).

That’s why we still see tables existed when using Services tab, but the application issues “Table/View does not exist.” error message.

Cheers….

Posted in Uncategorized | 16 Comments