Acxiom Co-ops

Who is Acxiom?
Projects

Who is Acxiom?

From Acxiom's website: "At Acxiom, we create and deliver customer and information management solutions that enable many of the largest, most respected companies in the world to build great relationships with their customers. Acxiom achieves this by blending data, technology and services to provide the most advanced customer information infrastructure available in the marketplace today."

I co-oped at Acxiom for 3 blocks (9 months) working in Financial Services. Our job was to create software for our financial related clients. My work was mainly Java development.

Projects







Mail Planning Tool - When finished, this tool will allow our client to work more efficiently. It will reduce a process that took a week to a process that takes less than a day. Unfortunately, after I left, this project was put on hold, so it may never see the light of day. My job was to create generic GUI components that could be assembled into the front-end of the application.

The first component (shown in the first screenshot) allowed easy creation of content. Each level in the tree structure represents a different category and each node at that level represents an option of that category. By selecting nodes in the tree, you can create different sets of options, which show up in the table below. The tree shown with 10 nodes can create 24 different possibilities. In practice, there would be a lot more nodes to choose from.

The second component (shown in the second through fourth screenshots) allows you to match two things in a list. When one option is selected, it draws a line to a question mark in the center of the component. When something is selected from the other list, it draws another line from it to the center of the component and changes the question mark to a check. Once two things are selected, the user can proceed. The component draws an arrow if the selected item is off the screen. Typing in the text field below the list can also narrow each of the lists.


Fancy Toolbar - I implemented a toolbar that uses the JLayeredPane class to allow it to act sort of like the Mac dock bar. When the mouse rolls over a button, the button gets bigger. The two buttons around it also increase in size. When the buttons resize, the get drawn over other components, so that the other components are not resized. The toolbar supports tooltips.
MEDIC - MEDIC is an internal tool for people to connect to a very large database file on a remote server and search / manipulate it. The command line version of MEDIC was run on the servers through SSH. The version we are creating is a Java front-end that provides more usability features. The Java version of MEDIC SSH's into a server using a Java SSH2 library. Once there, you would run a specially written version of MEDIC with specific command line options and parse what is returned.

My first task was to create the way we were going to show the text of the file. We had to develop a way to show the 100 lines or so we cached but have the scrollbar reflect the entire file of a few million or more records. It was a major chore to enable scrolling this way. Record by record, byte by byte, page by page, and random access scrolling was achieved throughout the entire file.

Another obstacle was the display. We needed a layout that Java doesn't provide a LayoutManager for. This custom component was a major challenge. In addition to just displaying the text, we needed the ability to color certain portions of the text and "glow" certain columns. In addition to all this, certain parts should scroll together and certain parts shouldn't. When scrolling, it should pop up custom tooltips to tell you which record and byte you are on in the file.

In my second co-op, I was responsible for writing an extensive utility for dealing with java.util.Property files easily, some custom graphics work, PDF/Print capability, and help with Thread synchronization. With all this complexity for us as programmers, we've begun creating a tool that's simplistic and intuitive for the user to use. In my third co-op, I was responsible for creating a generic error dialog, more general bug fixes, compatibility with Mac OSX, GUI enhancements, improving GUI consistency, usability fixes, and auto-detection of the most secure protocol to use when available (SSH over telnet, SFTP over FTP).

JavaHelp - I created user documentation for a help system that utilized the JavaHelp API.
Graphics Printer / PDFWriter - A previous application offered graphics capabilities that utilized java.awt.Graphics. The customer requested the ability to print the graph and to save it to a PDF file. I wrote a class that extends JPanel and adds methods for print functionality utilizing Java's Printing API. I also wrote a static class that takes a Container and saves its visual representation to a PDF file using the iText PDF library.
Extractor - A layout is simply a collection of fields. Extractor is a web-based application that allows a user to open a layout, select which fields of the layout they want to keep, and write out the new layout file. All front-end work was written in Java Server Faces.

To open a layout, you must first find a file that is associated with that layout. To do this, I created a custom filechooser JSF component to browse mounts. The component is shown in the first screenshot. The path is displayed as a set of links that allow easy traversal up the directory tree. The directory listing lists the current directory highlighted and all the directories at the same level as your current directory. The contents listing lists all the files and folders in the current folder. The search field narrows the contents field as you type search criteria. I wrote a lot of javascript to increase interactivity without requiring client-server roundtrip times. When a folder is clicked on, the component refreshes and updates with the new directory information.

In order to navigate different mounts that are on different filesystems, the JSF filechooser talks to a Navigator EJB that was written by another team. Once you select a file, that file is passed off to a LayoutManager webservice that returns the associated layout. If there is more than one layout associated with that file, a JSF component allows you to select which layout you want to use. Another JSF component then allows you to select the fields from the layout that you want to keep. The actual extraction will be implemented after I leave in another company technology.