Skip to main content

Posts

How to install Python 2.7.2 on RedHat Enterprise Linux 5.2

Want you install Python 2.7 to run a Google App Engine server on your old RHEL 5.2? I can just say that it was impossible for me from the sources. Hopefully, I find a excellent blog post which gives an alternative install script. Just download and run it. It will download and install Python 2.7.2 and its commons dependencies. The only limit I know is that you cannot Python based apps with GUIs because it's not compiled against TCL/TK.

http://rajaseelan.com/2012/01/28/installing-python-2-dot-7-2-on-centos-5-dot-2/

JRebel free alternatives

I'm a daily user of JRebel. JRebel allows you to program in Java like in PHP. It means that you don't need to restart your application to see your changes because JRebel perfoms hot code replace.

Even if it's a fantastic product, I wanted to see if I could integrate such a feature in an open source project I'm working on (tomcat-lsd). And I found these projects :

dcevm : http://ssw.jku.at/dcevmFakeReplace : https://github.com/fakereplaceApache common jci fam : http://commons.apache.org/jci/commons-jci-fam/index.htmlAgent Smith : http://java.net/projects/agentsmith Of course, JRebel is still more powerfull than these projects but I think they are two very good intiatives.

PS : after some other goolings, I found a blog dedicated to class reloading : http://classreloadingwebapp.blogspot.com/  . Many thanks to its author and his great post on jci.

How to register SSL certificates in your JVM?

You wrote a Java program which needs to access to a external ressource through SSL (such as LDAPS or HTTPS)?

Okay, this post is for you.

The first thing you have to know is that the first time you established a secured connection to something, you (normally) have to accept the certificate used to encrypt the dialog. In apps with interaction with end users (such as a web browser), the user often see a popup which asks him to trust the certificate. But, if the secured connection is establised behind the scene  (without any possibility to show a popup to somebody, such in batch process apps), the certificate must be trusted before establishing the connection.

In Java, there's a wallet which contains trusted certificate. It is located in [JAVA_HOME]/jre/lib/security/cacerts

I explain here how to extract the public key of a SSL certificate and how to register is in the cacerts file.

Step 1 : let's extract the public key from a secured connection
We will use OpenSSL for that. Just…

Inject constants in bean fields with Spring 3.0

Today, I imported some properties in my Spring config file. I wrote something like this :

<!-- define properties from a file -->
<util:properties id="securityProperties"  location="classpath:/securityProperties.properties" />

I could also wrote :

<!-- look for properties from a JNDI context -->
<jee:jndi-lookup id="securityProperties" jndi-name="props/security" />

... or even more simpler :

<!-- simply declare properties directly -->
<util:properties id="securityConstant">
    <prop key="cas.base.url">blablabla</prop>
</util:properties>

So, I needed to retrieve my cas.base.url. In my bean, I just had to do :

@Value("#{securityProperties['cas.base.url']}")
private String SSO_CAS_BASE_URL;

That's why I like Spring.

Google Groups Settings : an "how-to" solution without Google's Java API

I'm used to work with Google online services and my opinion is :
Google protocol is good (of course!) and I think that the direction which is taken to migrate to REST services is the good one.the documentation is never up-to-date and often contains wrong code samples (which sometimes doesn't compile because it contains deprecated instruction calls or string values).the Java API provides by Google is horrible. The support of Maven is still bad (it's better since of few months). It's confused between the provisioning API (GData library) and the Google Java Client API. Sometimes, you have to use the first one, sometimes the second.the authentication methods are also confused. You have to choice between ClientLogin, AuthSub, OAuth1 and OAuth2 (and OpenID?) : what's the fuck? On OAuth, you have other choice to take because the authentication workflow is different if you application is on the web or embedded. This situation could be clearer and Google should refine its au…

Yeaaah! What a cluster!

Remember to put a timeout on your heartbeat pings

I'm working a distributed piece of software which needs to be disabled when a tier is not reachable. To do that, I developed a Spring bean (a java service class) and I scheduled a method on it (with a @scheduled annotation). This method makes some heartbeat pings on each tier. The java service class contains a flag which indicates if all is OK. If an heartbeat fails, this boolean status is set to false. Of course, thanks to Spring, I easily injected this class into my web pages. If a user tries to access to the application and the health status is set to false, he is automatically redirected to a page which indicates that the service is closed. But, let's go back to pings.

I scheduled my pings to be executed each minute. That was for me a good value. But, a problem appeared during my first real tests. I realized that pings durations could be longer than one minute because the network connect() method blocked my thread. Of course, I forgot to manage short timeouts!

After a few go…

Use Spring 3 Expression Language (spEL) to get an Integer from an environment variable

Today, I played with Spring Batch. As you probably know, in a classic XML Spring config file, you can use ${my.property} to inject a system property in a bean attribute. That's quite simple.

But, in a JPA item reader (Spring Batch users should understand that), you cannot use this old syntax to inject values in your HQL query (using a parameterValues property). So, I decided to test the fabulously complicated spEL. A wonderful idea...

So, my problem is to get an Integer value from an argument passed to my JVM with something -Dmy.prop=value. Of course, if I don't have any JVM param, I want to have a default value.

Here is the solution :

#{(T(java.lang.Integer).parseInt(systemProperties['process.past.days']?:0))}

So, let's explain it :
#{(systemProperties['process.past.days'])} is required to retrieve a system property called process.past.days#{(systemProperties['process.past.days']?:0)} is required if you want to set 0 as default value... but... it's …

Colorify your Eclipse

Yesterday, while I was watching a video about the Play! framework, I realized that I was contemplating TextMate's colors. So, after some googlings, I discovered a "color plugin" which changes the text theme (it doesn't concern the overall look and feel but just the text apparence here). It is so nice so I put here the update-site url :
http://eclipse-color-theme.github.com/update

Spring saved my day on an UTF-8 encoding problem

I'm working on Jasig CAS (an SSO server) and I had an issue with special chars. For example, it was impossible to log in with a password like &é"'(-.
I checked my jsp file :it was encoded in UTF-8I checked the encoding directive (<%@ page contentType="text/html; charset=UTF-8" %>) : OKThe idea was to force the request encoding with something like :

request.setCharacterEncoding("UTF-8");

But I was in Spring MVC and I didn't want an ugly hack. Fortunately, Spring saved my day with a builtin servlet filter to declare in the web.xml.

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<par…

Kill Oracle session after a JVM was killed

For the moment, I'm playing with Spring Batch. In development, it appends that I need to kill my JVM. The problem is that C3P0 is not allowed to acquire another connection on Oracle on next restart. It's just because the previous one is still there. If you have an Oracle account with the required privileges, the you can see your old session in v$session and destroy it :
select * from v$sessionalter system kill session 'sid,serial#'

Ubuntu 11.10 and ATI radeon problem : fan always on

Since I migrated my laptop (HP 4720s) to Ubuntu 11.10 with gnome-shell, I have the following issue :
the open source ATI drivers works well but my fan is always spinningthe additional drivers proposed by Ubuntu don't work and make gnome-shell unusablethe drivers (11.9) from AMD is very slow

So, for the moment, the best deal for me is to keep the open source drivers. DON'T INSTALL ANY OTHER DRIVER THAN THE ONCE INSTALLED BY DEFAULT. What we will do is to underclock the GPU to keep the temperature acceptable and avoid any problems with the fan. Let's open a terminal :echo -e '#!/bin/sh\necho low > /sys/class/drm/card0/device/power_profile' | sudo tee /etc/init.d/ati-power-savesudo chmod +x /etc/init.d/ati-power-savesudo update-rc.d ati-power-save defaults 99By the way, we will increase FPS by disabling vertical sync.

echo 'export vblank_mode=0' | sudo tee -a /etc/environment
Reboot and enjoy the silence!

Ubuntu 11.10 : you should try gnome-shell

Ubuntu 11.10 is provided with Unity, the graphical user interface from Canonical. Compared to the previous release (Ubuntu 11.04), you can now swith to Gnome Shell. But, why should you swith from Unity to Gnome Shell that you could consider as very similar? My opinion is that Gnome Shell is more pragmatic and beautiful than Unity.
So, how to activate Gnome Shell ? Go to the software center and activate the patner repositories in the software sourcesIn a terminal, run sudo apt-get install gnome-shellActivate it by default with sudo /usr/lib/lightdm/lightdm-set-defaults -s gnome-shellReboot and enjoy!Now that you have almost a prefect shell, you should install some addons : sudo apt-get install ubuntu-restricted-extras (for flash, java and dvd features)enable dvd decryption with sudo sh /usr/share/doc/libdvdread4/install-css.shsudo apt-get updatesudo apt-get install chromium-browsersudo apt-get remove firefoxsudo apt-get install smplayerA good thing is also to enable numlock on lightdm : …