Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
Please recommend a data visualisation library that meets the following requirements:
1. works on all popular browsers (including ios safari)
2. java compatible
3. open-source (preferable)
So far I have used BirdEye (a comprehensive open source information visualization and visual analytics library for Adobe Flex) http://code.google.com/p/birdeye/
Pros of BirdEye: open source
Cons of BirdEye: does not work on ios browsers (it is flash-based)
I don't want to write a native app for iOS. Hence, I need something like BirdEye which works on iOS as well.
The primary goal of that application is to draw graphs for strategy map.
I have worked on google visualization API. I found it easy to use and supports wide range of options. Also their site has good sample code so learning curve is smooth.
I had done it for iOS safari. But I think, its supported on all major browsers because it's a Javascript based library.
visualization API of Google
How sophisticated does it need to be?
If you just need standard charting like interactive line charts, bars, stacked bars, pie charts, dot charts, etc then go with gRaphael. It's built on Raphael which uses SVG or VML (IE6-8's weird SVG clone) as appropriate. It works in IE6+, all major desktop browsers, iOS Safari, and modern Android stock browsers. The only browser I'm aware of where it doesn't work in is the stock Android browser in Android versions 1 and 2 - i.e. old Android phones (not tablets, which use v3) from mid 2011 or earlier, where the user hasn't replaced the stock browser or updated.
If you need serious stuff, look into taking the output from D3.js (an awesome SVG data visualisation library used in many of the most sophisticated data visualisations on the web, including most of the New York Times' award-winning interactive visualisations, for example) and pipe it through Raphael to make it cross-browser. D3 outputs SVG paths and shapes, and Raphael takes SVG path strings and shape co-ordinates as input... Getting the two libraries working together is never actually that simple, but it's not a major struggle either - here's a blog article on how to do it using a force-directed graph as an example. Of course, while this is great for cross-browser compatibility, it uses a lot of processing power. Optimise for performance, and consider using some loading animation spinning gif :-)
Tip: If you're doing anything serious with Raphael that involves manipulating paths or shapes using or looking at their bounding box dimensions, and if the latest version or the version you're using is 2.1 or earlier (as it is at time of writing), apply this bug fix to avoid strange unpredictable behaviour.
I liked to use (after some research):
YUI
InfoVis
highcharts
Enjoy!
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I'm looking for a free Java library to visualize some data. I want to do something similar as the following two images. Is there any possibility? I first thought of prefuse, but this isn't developed since 2007. So any oher libraries?
Have you considered looking at GraphViz?
Graphviz (short for Graph Visualization Software) is a package of open-source tools initiated by AT&T Labs Research for drawing graphs specified in DOT language scripts. It also provides libraries for software applications to use the tools. Graphviz is free software licensed under the Eclipse Public License.
You can do some fairly cool stuff with it:
For the timeline part, you should really consider Google Visualization API which contains annoted timelines, ...
Try Protovis, which seems to be the successor of Prefuse and may be a good alternative option. It is written in JavaScript, but a Java Graphical Toolkit is available.
D3.js is the successor of Protovis today. (Recommended by Protovis.)
GraphStream is a possibility.
Check ou:
http://processing.org/
http://www.axiis.org/ (not java)
http://gephi.org/
Further links can be found at:
http://en.wikipedia.org/wiki/Data_visualization
http://en.wikipedia.org/wiki/Scientific_visualization
An other alternative is to use JUNG framework. If you are looking for browser/Javascript based libraries as well, checkout three.js
Another library you could consider is JGraph. It works mainly with graphs but you can easily implement a timeline as a one. The project can be found on GitHub https://github.com/jgraph/jgraphx and was recently updated.
You'd have to no doubt do a lot of customization, but Google's Chart Tools offers a lot of flexibility and options (http://code.google.com/apis/chart/). I have not done anything as involved as the images that you pasted above, but it was fairly easy to set up various charts using the Google Visualization API.
It might be worth it to post your images on the Google Visualization API group (http://groups.google.com/group/google-visualization-api?pli=1) to see if anyone has done more involved charts like those you've proposed above using the Visualization API...
I am surprised this hasn't been listed. I used jFreeChart a while back: http://www.jfree.org/jfreechart/
If you are explicitly looking for a swing library, ignore this answer!
But in the world of web, Raphaël and D3.js are my favorites. Back-end could be implemented in java.
If you dont mind to use javascript solution timeglider is what you need for the second screenshot.
I am currently working on a small project, which shall load an image from an URL, resize and change it's colour depth to only 16 colours using a specified colour palette. The main problem for me is, that I want a program, which I can use on an Android device and on a desktop computer.
Do you know a good image processing library which works on both systems?
Thanks in advance.
There are several tools:
ImageJ, http://rsbweb.nih.gov/ij/
Fiji, http://fiji.sc/wiki/index.php/Fiji
IMMI, http://www.burgsys.com/image-processing-software-free.php
BoofCV: http://boofcv.org
The answers on this page are quite dated as of February 2014. I was searching to find a free Android image processing library and I came across the Stanford lecture notes here: http://www.stanford.edu/class/ee368/Android/index.html
Investigating a bit further, I found out that they are using OpenCV in their course material. It has a Java interface (along with many other languages), but the library is written natively in C++. They state that:
Along with well-established companies like Google, Yahoo, Microsoft,
Intel, IBM, Sony, Honda, Toyota that employ the library, there are
many startups such as Applied Minds, VideoSurf, and Zeitera, that make
extensive use of OpenCV.
I am excited(!) to have found this, looking forward to going home and giving it a go.
The Android NDK allows you to use an existing C/C++ library that does not require java.awt or any of the Android classes. For example, you could easily compile libpng as a shared library for Android and then write a JNI interface to pass images from the Java layer to the png library. Similarly, you will also be able to compile libpng as a shared library for your desktop computer and use it from there.
I recently wrote a tutorial on how to compile open-source libraries for Android. If you browse the Android source, you will find some classes that use the skia graphics library via jni. I have not used skia before, but since Android has skia in its base framework, it should not be too difficult to get it to work in your app/desktop program.
Writing cross-platform programs has been an area of active interest amongst the mobile developers community, and some engines such as libgdx have gotten really good at it. So what you are attempting is definitely possible.
Octoate,
I don't think there is a library that exists that does what you want, the reason for that is on non-mobile platform every graphical operation you are going to use in Java is going to use the Java2D rendering pipeline to some degree. On Android, this doesn't exist.
Android provides its own graphical pipeline for image manipulation and actually simplifies a lot of things that are more complicated in standard Java.
All that being said, it looks like you found a library (JJIL) that acts as an abstraction layer on top of these differences, in that case I would be a bit worried about performance and do some testing in your own code to see how it performs compared to the platform methods. For example, I saw this quote from JJIL:
allows images to be converted from Android bitmaps into JJIL RgbImages
When I look at the source for RgbImages, it looks like the image data gets converted and stored in an internal array; all of those layers of abstraction are going to cost you CPU time and memory, especially as images on mobile devices get bigger due to higher resolution cameras and high-bandwidth connections.
This may not be that big of an issue, but again, you'll probably want to do some profiling/testing/performance comparisons.
Any pure Java library should work on both platforms. A Google search of "Java image processing library" produced several results. Try to find the lightest weight lib that serves your purposes since memory and CPU are limited on mobile devices.
Barry
Does JFreeChart work on Blackberry?
(Just want to get a quick answer before I spend hours trying to give it a shot, would rather know now if it doesn't work)
No, as it states on the front page for that library "JFreeChart requires the Java 2 platform (JDK version 1.3 or later)" and the BlackBerry platform is J2ME (CLDC 1.1).
If you can post what requirements you are looking for, perhaps the community can recomand a library that works for you. For example on of the regular BlackBerry contributors on Stack Overflow works for a company that provides a product called aiCharts and I'm guessing there are others out there, too.
You cannot if you are looking to run JFreeChart directly on the Blackberry as Marc mentioned. If however you are up for a little web programming then JFreeChart would be on the server which could surely meet the java requirements. JFreeChart can serve up images and html maps for interactive use. Check out another answer of mine for tips.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
What is the most efficient way to port an iPhone app to Android? I know Apple doesn't like 3rd-party, non-Objective C platforms generating code for their platform ... but is there something out there that can take an iPhone app and convert it to Android friendly code?
If not, how have folks out there been creating Android versions of their existing iPhone apps?
Thanks
There's nothing of the sort to port your app. You can use 3rd party tools to create apps that work in both. That's what Titanium and PhoneGap were aiming at. With the new changes to the SDK Agreement, those look like they're not really "legal" or at least violate the agreement.
As for your other question, yes, people do create 2 separate apps. One for Android and one for iPhone. That's the way I currently do it and seems as if Facebook and others do the same.
Yeah, people don't usually love the answer that we have for this one at Appiction. It seems like it should be easy since they are so similar, but they are completely different operating systems with different ways of being used. Sometimes a company will be able to cut a deal with you since the art has already be developed and the basic wireframes have been conceived. At Appiction we created a video to answer this exact question for our clients: http://www.youtube.com/watch?v=Y-fdRw1WNYI
Apportable provides a platform to build and deploy existing Objective C apps to Android.
There are few alternatives to port an app from one platform to other. like Rhodes Mobile, Titanium and PhoneGap. In fact they did a good job and tried very well to remove fragmentation in smart phone app development.
But according to Apple's SDK Agreement version 4.0, section 3.3.1
app must be developed in C/C++/JAVA script.
At this stage convincing way is to write it separately.
PhoneGap is not a true cross platform app development tool.
If you want to create an app for both iPhone and Android using PhoneGap, then you have to create two different apps that will make use of PhoneGap framework. But one single app for iPhone and Android can't be created using PhoneGap.
There really isn't a short cut to porting. The best thing you can do is use a company that specializes in porting, like migration.mobi. The cross-platform frameworks have performance problems and really limit what you're able to do.
Games are a different story altogether, so be ready for different answers if you've been a complex real-time game on iPhone and you want it to work on another platform.
Noodlecake Studios appear to have solved the issue of porting from iOS to Android, recently porting Trainyard among others:
Its no secret that the process of porting iOS games to the Android
platform has been met with rough waters... These issues are
familiar to us at Noodlecake Studios and prompted the creation of
Noodlecake Games, a porting and publishing entity designed to
alleviate many of these problems. Through our efforts over the past
year, we have developed technology that allows us run iOS code
natively on android devices. What that means for developers is there
is no need to rewrite iOS code for the Android platform, it all runs
automatically. To be expected, many developers at first didn’t believe
what we were doing was even possible.
At android there are 2 categories: the lower one, with g1 and the better with Nexus 1 if you want to develop games.
Those cross platform libraries I think they can do cross platform "Hello word" applications.
To generate a correct Blackberry networking application or an optimized Android graphic application (to both categories), I highly doubt it!
the frameworks has the big cons, when you want to look outside of the sandbox. Those 3-4 custom stuff, plugin often cost more, than the whole application written fast until that point.
So, "Hello word" +very basic, only soft stuff with cross platform.
High performance, nice graphic, easier to bugfix, support, professional work: develop for each platform and categories.
There actually is a tool that does exactly what you're asking called O2J. You can leverage your existing Objective-C codebase and convert it to Java with the O2J conversion tool.
It's a paid app available on the Mac App Store... O2J Objective-C to Java Converter
Most of the time it's preferable to have a native UI and native code for performance, working with the platform UI paradigms and to take advantage of platform specific APIs/services.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
I'm looking for a lightweight java reporting engine to be embedded in an applet application.
My first option was Jasper Reports, but the jar is over 2Mb, a little too heavy (and too bloated) for my needs. I don't know if there is modular jasper distribution, with funcionalities split in several jars (like html rendering, pdf, excel, compilation, runtime, etc).
I need to preview the report using Swing and print it. PDF export is a plus.
Jasper Reports does include a jar with basic funcionality to preview and print reports. It's packaged as jasperreports-x.x.x-applet.jar, with around 350k.
I know this is a bit late, but with your requirements it seems like a perfect fit would be the reporting solution the company I work for puts out: i-net Clear Reports (used to be i-net Crystal-Clear).
Lightweight and simple viewer (similar to a PDF viewer)
Very simple-to-use API
Can export into a bunch of different formats including PDF
Supports any JDBC data source, or also manual setting of data
Can run Crystal Reports templates
We also offer a free and fully functional report designer
Check it out and tell us what you think.
See NextReports Engine with around 300k. NextReports Designer is FREE to use.
If you can find no better solution, it should be possible to create a stripped down JAR file for Jasper Reports. The GenJar tool is supposed to be able to build a JAR file based on its static dependencies.
A long time ago, I used to use Zelix's "Classmaster" obfuscation tool which gave you the option of stripping out classes that were not used. I think it might even have stripped unused methods, though my memory is a bit hazy. (I used it on a closed source product ... that has since disappeared down an IP "blackhole".)
EDIT: another option is ProGuard, which does obfuscation and stripping like Classmaster, except that it is open source. (Sadly, they seem to have misconfigured their SF website link. But the link above works.)
Of course, if Jasper Reports uses Class.forName() you would need to identify all the relevant classes add them as "root" dependencies for the stripping tool that you use. In addition, you would need to look at the Jasper Reports license to make sure that you are allowed to "distribute" a stripped JAR file.
Why is 2Mb too big for a server-side library? Docmosis has a jar size under 500k, but requires OpenOffice on the server, so it is smaller in one way and bigger in another. Java won't load the 2Mb Jasper into memory unless you use all the features/classes.
IMHO Chunk Templating engine is the best. The jar file only has 180 KB! and support IF and iteration. How cool is that !