Andrea Girardi - It's my blog!

Gap di competenze per Industria 4.0

«Non vedo un rischio di disoccupazione maggiore provocato dalle tecnologie, il saldo non sarà negativo», spiega ancora l’economista Ocse che però vede una minaccia nell’aumento delle diseguaglianze – «sia come stipendi che come prospettive di carriera» – tra chi ha competenze adeguate e chi no: «I lavori intermedi già negli ultimi venti anni sono stati colpiti, ma negli ultimi anni questo processo si è velocizzato».

Gap di competenze per Industria 4.0

Allarme Ocse: in Italia un lavoratore su due ha scarsissime o nulle conoscenze in ambito Ict


The Noble Art of Maintenance Programming

Yes, I am a big fan of code readability and refactoring. I always have in mind this:

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it? – Brian Kernighan

Refactoring is a big challenge, you must be twice smarter of the developer who debugged is code (and the challenge of rewriting other people’s code makes it fun as hell).

Read this: The Noble Art of Maintenance Programming

Delete Files Older Than x Days on Linux

Command Syntax

find /folder/files* -mtime +15 -exec rm {} \;

The first argument is the path to the files. This can be a path, a directory, or a wildcard as in the example above. The second argument, -mtime, is used to specify the number of days old that the file is. If you enter +15, it will find files older than 15 days. The third argument, -exec, allows you to pass in a command such as rm. The {} \; at the end is required to end the command.

Another way to do it is:

/bin/rm `find /var/tmp/stuff -mtime +15 -print`

How do I fix a 65535 bytes limit Stacktrace?

It is possible that after an upgrade you may encounter this error on some of the more complex pages and root cause provided by tomcat console is :

Unable to compile class for JSP
The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

To solve the issue you need to locate the file [Tomcat_Home]/conf/web.xml and search the file for ‘JspServlet’. This should return an xml node of containing some values. You will need to add an additional the same as the below.


The resulting block of the web.xml file, once you have inserted the above, should look like the code below.


Save the file and restart the Tomcat service.

How to kill all processes with a given (partial) name?

Usually I open more than on instance of tail -f to monitor my application, so, to kill all with one single command I can use this:

ps -ef | grep tail | grep -v grep | awk '{print $2}' | xargs kill -9

MappingJacksonHttpMessageConverter not found

I was trying to run a java batch that call an application context without success (it’s a java app that calls a Camel spring context). This is what I get during the startup:

ERROR ApplicationProperties @ addApplicationProperty [28] org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [/MessageRouting/src/test/resources/META-INF/spring/LOCALHOST-db-context.xml]; nested exception is java.lang.NoClassDefFoundError: org/springframework/http/converter/json/MappingJacksonHttpMessageConverter
Fatal error! java.lang.RuntimeException: Error loading ClassPathXmlApplicationContext file - src/test/resources/META-INF/spring/LOCALHOST-db-context.xml

I’m using spring 4.2.3 (updated yesterday, probably the reason for which it doesn’t work. It was 4.0.9). I know that MappingJacksonHttpMessageConverter has been replaced by MappingJackson2HttpMessageConverter but, how can I tell to spring to use the new version???

I followed some suggestion and I added this to my pom.xml:


But this didn’t fix so, I finally resolved the issue adding this dependency to my pom.xml:


Which log4j configuration are you using?

Sometimes log4j is not working properly and you need to verify where it is actually writing the log entries. This can be easily verified turning on the log4j.debug:


It will print to System.out lots of helpful information about which file it used to initialize itself, which loggers / appenders got configured and how etc.

Looking for new challenge – Day #7

Replied to more than 20 job offers.
No replies.
Too much experience?

If found this article really interesting about the relocation: Relocation? No way! But please, keep requiring it by @alobbs

Consider this, here in Italy the job offers are for something absolutely not interesting (in some case really boring) and / or not honestly payed so, it’s mandatory to find outside Italy. Not a problem, there are a million of job offers, but what if somebody can’t relocate easily? (or can’t relocate at all?) I don’t want to settle and be unhappy for my entire life. I want to do something really interesting and exiting!

Parse an unknown JSON with Jquery

Sometime it happens to receive a JSON string than need to be visualized without knowing the structure. Suppose we have an HTML table:

<tbody id="reportTable">					

To populate this table with jQuery it’s possible to use this simple code:

var rows = ${reportRows};
var html = $.each(rows, function(key, value){
	$.each(value, function (key, data) {
		$("#reportTable").append("<td>" + data + "</td>");

${reportRows} comes from a Spring MVC Controller and it’s a Java string generates using Jackson (or Gson) in this way:

ColumnMapRowMapper rowMapper = new ColumnMapRowMapper();
List<Map<String, Object>> reportDataList =  getJdbcTemplate().query(sqlComplete, rowMapper);
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(reportDataList);

So, we have a query that return a not know number of column (suppose your code dynamically generate the query), we translate the results in JSON and we use jQuery to render the results.

« Older posts

Copyright © 2017 Andrea Girardi – It's my blog!

Theme by Anders NorenUp ↑