Andrew E. Bruno

A sourceful of secrets

Rotate Labels JFreeChart

with 15 comments

When creating a chart that has rather long labels for the x-axis it is sometimes desirable to rotate them a bit so they fit on the plot. The method to use is setCategoryLabelPositions(..) on the CategoryAxis class. Here’s a quick example:

And the code..

import java.io.File;
import java.io.IOException;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartColor;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.data.category.DefaultCategoryDataset;

public class RotateLabels {
    public static void main(String[] args) {
        DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
        dataSet.addValue(51, "series", "Colonel Forbin");
        dataSet.addValue(92, "series", "The Lizards");
        dataSet.addValue(33, "series", "Wilson");
        dataSet.addValue(77, "series", "Rutherford the Brave");
        dataSet.addValue(37, "series", "The Unit Monster");
        dataSet.addValue(97, "series", "The Famous Mockingbird");
        dataSet.addValue(67, "series", "Poster Nutbag");

        JFreeChart chart = ChartFactory.createBarChart(
            "Gamehendge",
            null,
            null,
            dataSet,
            PlotOrientation.VERTICAL,
            false,
            false,
            false
        );

        CategoryPlot plot = (CategoryPlot)chart.getPlot();
        CategoryAxis xAxis = (CategoryAxis)plot.getDomainAxis();
        xAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

        chart.setBackgroundPaint(ChartColor.WHITE);
        try {
            ChartUtilities.saveChartAsPNG(new File("chart.png"), chart, 400, 300);
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

Written by Andrew

2007/08/14 at 19:06

Posted in Java

MySQL bigint types and iBATIS

with one comment

One nuance I recently ran into while using iBATIS was inserting data into MySQL bigint unsigned columns. iBATIS doesn’t seem to have a way to handle BigInteger data types and throws an exception when attempting to do an insert. Fetching data out seemed to work OK because if iBATIS doesn’t know how to handle a certain type it just returns a java.lang.Object. The way to go about inserting BigInteger types is to set up a type handler. Here’s an example type handler for BigInteger types:

package org.qnot.util;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.sql.Types;

import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;

public class BigIntegerTypeHandler implements TypeHandlerCallback {

    public Object getResult(ResultGetter getter) throws SQLException {
        if(getter.wasNull()) {
            return null;
        }

        Object o = getter.getObject();
        if(o instanceof BigDecimal) {
            BigDecimal bd = (BigDecimal)o;
            return bd.toBigInteger();
        } else if(o instanceof BigInteger) {
            return (BigInteger)o;
        } else {
            return o;
        }
    }

    public void setParameter(ParameterSetter setter, Object parameter)
            throws SQLException {
        if (parameter == null) {
            setter.setNull(Types.BIGINT);
        } else {
            BigInteger i = (BigInteger) parameter;
            setter.setBigDecimal(new BigDecimal(i));
        }
    }

    public Object valueOf(String s) {
        return s;
    }
}

Written by Andrew

2007/07/16 at 13:22

Posted in Java

Buffalo Going Green

leave a comment »

Eight windmills now line up the shore of Lake Erie at the site which was once home to the old Bethlehem Steel plant. It’s exciting to see Buffalo on the forefront of renewable energy and this new wind farm dubbed “Steel Winds” is the first urban wind farm in the country. It’s also the world’s first commercial project to use Clipper Windpower’s Liberty series turbines.

Here’s some quick stats about the turbines:

  • Stand approximately 255 feet tall (410 feet with blades extended)
  • Can potentially produce 20 megawatts of pollution-free electric power
  • Could provide the annual electrical needs of more than 6,000 homes
  • Total project cost around $40 million

There’s also talk about expanding the project to include as many as 19 additional windmills.

Sources:
1. http://www.buffaloniagara.org/Home/LatestNews/WindmillPoweraReality
2. http://buffalo.bizjournals.com/buffalo/stories/2007/06/04/daily21.html
3. http://buffalo.bizjournals.com/buffalo/stories/2007/04/16/story9.html

Written by Andrew

2007/07/13 at 20:12

Posted in Personal

Customizing Pidgin Chat Windows

with 4 comments

In my previous post I discussed customizing Gaim chat windows. Since then Gaim has formally changed it’s name to Pidgin due to legal issues with AOL. I finally upgraded to Pidgin and had to do a few minor tweaks to get the same chat window customizations as before. I updated ~/.purple/gtkrc-2.0 which previously resided in ~/.gaim and changed the widget names from gaim_gtkconv_* to pidgin_conv_*. Here’s my updated ~/.purple/gtkrc-2.0 file:

style "pidgin-dark" {
    base[NORMAL]="#000000"
    text[NORMAL]="#00FF00"
    GtkIMHtml::hyperlink-color="#007FFF"
    GtkWidget::cursor-color="#60AFFE"
    GtkWidget::secondary-cursor-color="#A4D3EE"
}
widget "*pidgin_conv_imhtml" style "pidgin-dark"
widget "*pidgin_conv_entry" style "pidgin-dark"

Written by Andrew

2007/07/06 at 21:53

Posted in Hacks, Linux

phpLDAPadmin and Kerberos

with 5 comments

I’ve been experimenting with phpLDAPadmin for browsing/searching LDAP directories over the web and found it to be a wonderful tool. I’m currently working with LDAP in a central authentication system together with Kerberos and wanted to have a nice web interface for managing user information within the LDAP directory. phpLDAPadmin provides a very nice interface for browsing, searching, and updating entries which makes it a bit easier than working with the ldap* command line tools. Here’s my basic setup of phpLDAPadmin using Kerberos for authentication. This assumes you already have an LDAP/Kerberos setup working and are using Apache as your web server.

First step is to make sure you have SASL support compiled into the LDAP PHP extension --with-ldap-sasl. Check out phpinfo() and make sure you see SASL Support Enabled under the LDAP extension. If not re-compile PHP.
Read the rest of this entry »

Written by Andrew

2007/06/26 at 18:56

Posted in Hacks, PHP

Follow

Get every new post delivered to your Inbox.