Win a copy of Head First Android this week in the Android forum!

Randy Abernethy

+ Follow
since May 28, 2019
Randy likes ...
Python C++ Linux
Cows and Likes
Total received
In last 30 days
Total given
Total received
Received in last 30 days
Total given
Given in last 30 days
Forums and Threads
Scavenger Hunt
expand Ranch Hand Scavenger Hunt
expand Greenhorn Scavenger Hunt

Recent posts by Randy Abernethy

This is a list of libraries and applications that tend to get discussed frequently in the Other Open Source Projects forum, but feel free to add others as well. It would be helpful if you added a few words why a particular package stands out.

The AccessingFileFormats lists lots of projects that can read and write various file formats.

  • iText - iText can create PDF files, fill in AcroForms, and modify PDF files in limited ways. It's also possible to generate RTF and HTML output with the same code. A demo of some basic features can be found at ItextExample. Article on How to sign a PDF using iText. Example of How to create a submittable form. An introduction using iText 5 is here.
    • An older version of iText (2.1) used to be licensed under the Lesser GPL (LGPL), which is much more amenable to business use than the Affero GPL (AGPL) under which iText is currently licensed. This is particularly important if you want to use iText in web applications. iText 2 has most of the functionality of iText 5, so you may want to consider using it instead: jar file, javadocs

  • Apache Thrift A high performance, cross platform RPC framework for microservices and more.

  • PDFBox can create PDFs, and apply various transformations to existing PDF files. A demo of some basic features can be found at PDFBoxExample.

  • FlyingSaucer is a library that can render XHTML/CSS to a Swing component, and -with the help of iText- to a PDF file. Introduction

  • Apache FOP is a library for rendering XML into properly layouted formats like PDF, RTF, AWT, PNG and others. It does this by using XML-FO transformations.

  • PDFRenderer is a Swing component for displaying and printing PDF files (download jar file, code examples, print a PDF).

  • POI - Read and write Excel files. There are also parts that deal with Word, PowerPoint, Visio and Outlook files, but they're less advanced, although usable.

  • JasperReports - a powerful reporting engine - Introduction 1 - Introduction 2 - Introduction 3 - Discussion

  • log4j - the premier logging package - Manual - Tutorial - Introduction 1 - Introduction 2 - wiki - Log4jXmlFormat

  • JFreeChart - versatile charting package. An example web app showing how to use it in a servlet can be found here. A simple demo can be found at JFreeChartDemo. cewolf is a JSP tag library on top of JFreeChart.

  • JChart2D - another 2D charting package, this one aimed more at realtime graphics in desktop applications. A simple demo can be found at JChart2DDemo

  • Axis 2 - a complete SOAP web service stack with lots of tools for debugging. See also WebServicesFaq.

  • ImageJ - an image processing application and library that can read and write plenty of file formats, and even more with the help of the Jimi plugin

  • Lucene - a library that can index and search collections of documents. Links: another introduction part 1 part 2, advanced functionalities, Jakarta FAQ

  • Displaytag is an JSP tag library for creating, customizing and displaying tables, including pagination and data export.

  • Playing media

  • Java Media Framework - Sun API for working with various media formats (which is no longer being developed). Code examples can be found here and here (The links on the latter page seem to be broken; an archive of those code samples is available here.) JMF can play Flash 2 files. Through the FOBS library (which itself is a Java layer on top of the ffmpeg library), support for Windows Media can be added to JMF. Jffmpeg adds a few more audio and video formats like MPEG-4 and Ogg/Vorbis. There's also an MP3 plugin for JMF. Several libraries for working with ID3 tags are listed in this thread. FMJ is an open source alternative to JMF. Xuggler is another Java binding for ffmpeg.

  • Playing Media with Java Media Components

  • QuickTime for Java - Apple API for working with various media formats. The Java API QT4J is not open source, but it is free to use, and can play Flash 5 files. Unfortunately, it is no longer supported, and has problems on 64-bit Java. The Amateur project puts a Swing GUI on top of QT4J. On OS X, the Flip4Mac Components can be used to add support for Windows Media to QT4J (be sure to do a "Custom Install", lest you inadvertently install Silverlight as well). Also on OS X, Perian adds support for a wide range of audio and video formats. (Note that QT4J, Perian and Flip4Mac are not open source, but free to use.)

  • VLC has Java bindings through which many video formats can be played. An example Java client can be found here. vlcj is an alternative, more recently updated, Java binding for VLC.

  • has Java implementations of the Ogg, Vorbis and Shout libraries.

  • The Tritonus project has some additional plugins for the Java Sound API.

  • LAMEOnJ is a Java API on top of the LAME MP3 encoder.

  • MP4 Parser can handle MP4 files.

    Q: How can I create an image containing a barcode?

    Numerous libraries are available that can do this: Barcode4j, JBarcodeBean, Barbecue, JBars. The iText library can create PDFs containing barcodes.

    2 years ago
    Hey Guys,

    While Thrift is not specifically for games, as Tim mentions, more and more games are massively multiplayer and make use of huge cloud backends. It’s the backend systems where Apache Thrift shines. In particular, games demand low latency, high performance backends, Thrift can be a big help in this capacity.

    Hey All,

    Thanks for the welcome! Look forward to answering any and all questions!

    Hey Paul,

    Thrift provides a high performance (can be 1-2 orders of magnitude faster than REST) functional API mechanism that supports the widest array of languages and platforms in its class.

    When most folks say "web service" they are implying something with a REST or HTTP/JSON type API. These API types are the gold standard over the Internet, effectively leveraging the infrastructure of the world wide web and all of the intermediate devices and technologies it consists of (proxies, reverse proxies, gateways, etc.).

    Backend systems don't often have all of the infrastructure of the www, however. Also backend system are frequently decomposed into microservices these days, meaning many services need to collaborate to perform a task. Reducing backend latency and wire payload can make a big difference in user experience. Another value prop is that Thrift is function based. If you are decomposing a monolithic application into services, it will probably be easy to extract bits into services with function interfaces. REST/HTTP interfaces use routes, verbs, query params and various other bits, all alien to an old school modular monolith. So in a microservice world, fast services that are organized into functional interfaces can pay big dividends.

    Containers and platforms like Kubernetes make tooling like Apache Thrift and gRPC (a similar offering from Google) make a lot of sense. In fact all of the hyperscale folks use something other than REST on the backend for performance (Facebook invented Thrift, Google has ProtoBuf and stubby, Twitter created Scrooge and Finagle [originally built on top of Thrift], etc.).

    One last point is that if you want to call from the browser straight back to a Thrift service without a gateway doing translation you can. This enable a single high performance path all the way back to the browser when the application demands it.