ASE Home Page Products Download Purchase Support About ASE
ChartDirector General
Forum HomeForum Home   SearchSearch

Message ListMessage List     Post MessagePost Message

  Chartdir as Ruby gem
Posted by Greg on Jul-17-2011 17:37
Hi,

1. Are there any plans to release Chartdir as Ruby gem? As far I know existing installer for
Ruby 1.9 works. However Rails 3 and Bundler require all additional software to be in the gem
format.

2. JRuby implementation is becoming more and more popular. Is there any way to use
Chartdir under JRuby? I guess it is possible to load Java version of Chartdir under JRuby but
what about Chartdir API, is it the same in Ruby and Java?

Thanks

  Re: Chartdir as Ruby gem
Posted by Greg on Oct-04-2011 01:02
Ruby bcrypt gem https://github.com/codahale/bcrypt-ruby is a good example how
ChartDirector gem should look like. bcrypt has C binary extension and also JRuby version of
the extension.

  Re: Chartdir as Ruby gem
Posted by Peter Kwan on Oct-05-2011 01:39
Hi Greg,

Thanks a lot for your information. We will very seriously consider to release ChartDirector for Ruby as a gem.

When we released "ChartDirector for Ruby", we were worried that many Ruby hosting companies did not allow custom gems. (I suspect this is still the case today.) So we would need a method that can work without any specific installation step (other than to copy files to the hard disk).

Currently, for a Rails application, you just need to copy the ChartDirector for Ruby library files to the "vendor" subdirectory of the Rails application directory. No installation is needed.  You can choose to run the "install.rb" script included in ChartDirector if you are using Ruby but not Rails.

I have never used "Bundler" before. From reading the Bundlers web page, my interpretation is that if you want to install software using "Bundler", then the software must be in a gem format. However, you can "install" the software without using "Bundler". Also, you may not need to "install" the software at all. As mentioned above, ChartDirector for Ruby does not require any particular installation step (other than to copy files to the hard disk).

I have not tried JRuby before. From the JRuby web page, it seems to suggest JRuby can use Java libraries. ChartDirector for JSP/Java is a Java library, so its API should be accessible from JRuby. The API of ChartDirector for JSP/Java and ChartDirector for Ruby are almost identical. I have attached the Ruby and Java version of the "Multiline Chart" sample code for your reference. You can see that they are very similar.

Regards
Peter Kwan



=========== Ruby Version ============

#!/usr/bin/env ruby
require("chartdirector")

# The data for the line chart
data0 = [42, 49, 33, 38, 51, 46, 29, 41, 44, 57, 59, 52, 37, 34, 51, 56, 56, 60, 70,
    76, 63, 67, 75, 64, 51]
data1 = [50, 55, 47, 34, 42, 49, 63, 62, 73, 59, 56, 50, 64, 60, 67, 67, 58, 59, 73,
    77, 84, 82, 80, 84, 98]
data2 = [36, 28, 25, 33, 38, 20, 22, 30, 25, 33, 30, 24, 28, 15, 21, 26, 46, 42, 48,
    45, 43, 52, 64, 60, 70]

# The labels for the line chart
labels = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
    "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"]

# Create an XYChart object of size 600 x 300 pixels, with a light blue (EEEEFF)
# background, black border, 1 pxiel 3D border effect and rounded corners
c = ChartDirector::XYChart.new(600, 300, 0xeeeeff, 0x000000, 1)
c.setRoundedFrame()

# Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white background.
# Turn on both horizontal and vertical grid lines with light grey color (0xcccccc)
c.setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc)

# Add a legend box at (50, 30) (top of the chart) with horizontal layout. Use 9 pts
# Arial Bold font. Set the background and border color to Transparent.
c.addLegend(50, 30, false, "arialbd.ttf", 9).setBackground(ChartDirector::Transparent
    )

# Add a title box to the chart using 15 pts Times Bold Italic font, on a light blue
# (CCCCFF) background with glass effect. white (0xffffff) on a dark red (0x800000)
# background, with a 1 pixel 3D border.
c.addTitle("Application Server Throughput", "timesbi.ttf", 15).setBackground(
    0xccccff, 0x000000, ChartDirector::glassEffect())

# Add a title to the y axis
c.yAxis().setTitle("MBytes per hour")

# Set the labels on the x axis.
c.xAxis().setLabels(labels)

# Display 1 out of 3 labels on the x-axis.
c.xAxis().setLabelStep(3)

# Add a title to the x axis
c.xAxis().setTitle("Jun 12, 2006")

# Add a line layer to the chart
layer = c.addLineLayer2()

# Set the default line width to 2 pixels
layer.setLineWidth(2)

# Add the three data sets to the line layer. For demo purpose, we use a dash line
# color for the last line
layer.addDataSet(data0, 0xff0000, "Server #1")
layer.addDataSet(data1, 0x008800, "Server #2")
layer.addDataSet(data2, c.dashLineColor(0x3333ff, ChartDirector::DashLine),
    "Server #3")

# Output the chart
c.makeChart("multiline.png")



============= Java Version ==============

class Test
{
    public static void main(String[] args)
   {
        // The data for the line chart
        double[] data0 = {42, 49, 33, 38, 51, 46, 29, 41, 44, 57, 59, 52, 37, 34, 51,
            56, 56, 60, 70, 76, 63, 67, 75, 64, 51};
        double[] data1 = {50, 55, 47, 34, 42, 49, 63, 62, 73, 59, 56, 50, 64, 60, 67,
            67, 58, 59, 73, 77, 84, 82, 80, 84, 98};
        double[] data2 = {36, 28, 25, 33, 38, 20, 22, 30, 25, 33, 30, 24, 28, 15, 21,
            26, 46, 42, 48, 45, 43, 52, 64, 60, 70};

        // The labels for the line chart
        String[] labels = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22",
            "23", "24"};

        // Create an XYChart object of size 600 x 300 pixels, with a light blue
        // (EEEEFF) background, black border, 1 pxiel 3D border effect and rounded
        // corners
        XYChart c = new XYChart(600, 300, 0xeeeeff, 0x000000, 1);
        c.setRoundedFrame();

        // Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white
        // background. Turn on both horizontal and vertical grid lines with light
        // grey color (0xcccccc)
        c.setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc);

        // Add a legend box at (50, 30) (top of the chart) with horizontal layout.
        // Use 9 pts Arial Bold font. Set the background and border color to
        // Transparent.
        c.addLegend(50, 30, false, "Arial Bold", 9).setBackground(Chart.Transparent);

        // Add a title box to the chart using 15 pts Times Bold Italic font, on a
        // light blue (CCCCFF) background with glass effect. white (0xffffff) on a
        // dark red (0x800000) background, with a 1 pixel 3D border.
        c.addTitle("Application Server Throughput", "Times New Roman Bold Italic", 15
            ).setBackground(0xccccff, 0x000000, Chart.glassEffect());

        // Add a title to the y axis
        c.yAxis().setTitle("MBytes per hour");

        // Set the labels on the x axis.
        c.xAxis().setLabels(labels);

        // Display 1 out of 3 labels on the x-axis.
        c.xAxis().setLabelStep(3);

        // Add a title to the x axis
        c.xAxis().setTitle("Jun 12, 2006");

        // Add a line layer to the chart
        LineLayer layer = c.addLineLayer2();

        // Set the default line width to 2 pixels
        layer.setLineWidth(2);

        // Add the three data sets to the line layer. For demo purpose, we use a dash
        // line color for the last line
        layer.addDataSet(data0, 0xff0000, "Server #1");
        layer.addDataSet(data1, 0x008800, "Server #2");
        layer.addDataSet(data2, c.dashLineColor(0x3333ff, Chart.DashLine),
            "Server #3");

        // Output the chart
        c.makeChart("multiline.png");
    }
}

  Re: Chartdir as Ruby gem
Posted by Greg on Oct-05-2011 19:42
Thanks for your answer. I've tested ChartDir with Rails 3, Ruby 1.9.2 on Ubuntu and it
works great.

Bundler + rubygems.org is becoming very popular in RoR community. It is an "App Store" for
Ruby developers.