The new version 3.0 of YACA-Monitor is a Java EE 6 Web Application that visualizes the current activities in a running server. Just drop the yaca-monitor-jee.war into autodeploy folder of your application server, start the monitor and see the call graphs of your applications. The call graph is rendered with WebGL in 3D, based on Barnes-Hut N-Body-Simulation algorithm.
Extremely Fast and Simple WebGL Motion Detector to Rotate 3D Graphic
This experiment demonstrates how the browser captures the video signal and compares subsequent frames to detect motion of the user. With this signal the program finds the viewpoint and rotates the 3D cube.
YACA-Monitor 2.0 - Live Visualization of Call Stack in Running Java Applications with THREE.js
This experiment demonstrates how to visualize the method calls of a running
Java application with a web client. The application uses THREE.js to render the graphic with webGL.
N-Body Simulation of a Growing Water Melon in a Box
This experiment demonstrates how to visualize a growing water melon in a web client. The simulation is more than a simple geometrical transformation from a sphere to a cube.
Visualization of Artificial Neural Network
This experiment shows an Artificial Neural Network which learns to detect the frequency of the input signal independent from the phase. The implementation is based on Three.js, Guava and Google Web Toolkit.
The experiment demonstrates the implementation of a minimal Finite Element Method (FEM) Simulation running in a web browser and uses device orientation signals. This works on mobile devices.
Experiments in Java & Some How-To's
How to Solve Verbal Arithmetic with Constraint Programming in Java?
This article describes basics of Constraint Programming with CHOCO. Constraint Programming is a very powerful method to solve certain classes of real world problems and/or numerical puzzles.
Simulated Annealing the Swiss Army Knife of Global Optimization
This article describes the use of Simulated Annealing for global optimization problems using the example of Java. The application reads a caller-callee-graph, some initial cluster information and makes a cluster analysis.
More how to's:
Performance & Frameworks
A Library to Empirically Estimate Big-O Time Efficiency and Check Results of Analysis in JUnit Tests
The library BigOTest.jar provides support to measure the big-o time efficiency and checks results of this analysis in standard JUnit tests. The key approach is to call the system under test (method of a class) several times and fit possible functions to the measured data points.
Performance Impact of Java HotSpot™ to Quick-Sort, Heap-Sort and Bubble-Sort Algorithm?
It is commonly assumed that Bubble-Sort is an extremely poor sort algorithm and gets really slow with larger number of input data. In the following a small Java implementation shows some Use Cases where Bubble-Sort can even be faster than Heap-Sort and/or Quick-Sort.
Memory and Runtime Analysis for the removeAll() Method of Java TreeSet and ArrayList
This article describes the differences between using the removeAll() method of TreeSet and ArrayList class. Both implementations of removeAll() show quiet different behavior in respect to run time and memory consumption. It is important to know the behavior of collection classes of Java.
Lessons Learned from GPU Experiments with Aparapi
In the following you can read about some experiments with Aparapi for GPU programming - the results of these experiments have not been completely satisfying, but after all very insightful. In the lessons learned and recommendations paragraph of this article you may find some conclusions.
More performance & frameworks:
Static & Dynamic Code Analysis and Testing
Top 12 Selected Unit Testing Best Practices
Writing just another best practice list about unit testing is easy, but working according these recommendations is a more difficult task. In the project described in 'A Library to Empirically Estimate Big-O Time Efficiency and Check Results of Analysis in JUnit Tests' I followed my own tips. All the source code in this project has been developed with 100% TDD and applied most of the best practices.
The continuously increasing need for more and more speed in software development fosters the use of static and dynamic code analysis tools. Code analysis tools are great, but don't think that static and dynamic code analysis tools can substitute the old fashioned peer review between humans.
Top 10 Lessons Learned from 2 Years Work with Codehaus Sonar
Two years ago we decided to use Sonar for a beginning Java Enterprise project in one of my teams. In the following you may read the top 10 lessons learned from introducing and working with Sonar in a medium size Java project over a period of two years.
This article describes a basic implementation of a HashMap and demonstrates the minimal needed test code. You will see that with an 100% line and branch coverage approach for unit tests - the implementation of utility and/or framework classes should have a ratio of ~60% test code and ~40% production code.
More static and dynamic code analysis:
Skills & Management
Top 10 Things Software Developers Can Learn from Martial Arts
Practicing martial arts and working in software development has more in common than you may think. The following list is a collection of my personal lessons learned from training martial arts.
How to Reduce Waste with Clever Communication?
A lot of time and energy is wasted every day in development projects, maintenance teams and IT operations units - due to inefficient communication. Many developers tend to write unnecessary, bad structured and to long mails.
The following rules of thumb should be helpful to get quick effort estimations. They explain typical scenarios in software development projects and/or maintenance tasks. Collecting just some quotations is always dangerous - because of missing context information - but I tried here to select more likely true numbers.
Top 10 Tips to Develop Unmaintainable Code
This article describes how to write unmaintainable code and have an excellent paid job for the rest of your life. Obfuscation of the code - besides poor design, no test cases and overly complex algorithms
Source: Wikipedia - TOS-day of the dove klingons.png; fair use rationale;
This article describes the hidden factory in software development projects & maintenance and ways to reduce the hidden factory. The size of the hidden factory is different in organizations and teams, but something between 20 and 65 percent of total work capacity is not unusual.
Source: Wikipedia; Standard YouTube License
The Dunning-Kruger-Effect in Software Engineering
In this short article you may read that low-skilled developers tend to mistakenly overrate their own and others abilities. They even are not able to recognize what they do something wrong.
Periodic Table of Software Engineering - Top 118 Fundamental Elements of Software Engineering
Collection of most important and fundamental elements of software engineering. It may serve as a guideline what a software engineer or programmer should learn, know and most of them practice. By Markus Sprunck
More skills & management:
Controversial & Fun
How to Successfully Pretend to Work Hard as Software Developer?
There are many more other helpful techniques to get more freedom in work. The most important rule is: "Work hard, be clever and fast if you work - then allow yourself to do what you like to do in the remaining time."
From the architectural point of view the models of Spring and Java EE are competitors. Depending on the strategy and constraints of your organization both show strengths and weaknesses. Spring Framework is not a standard - it is a product and an implementation of a framework. This means, there is no alternative vendor. Please, keep this always in mind.
More controversial & fun: