Two new Whitebooks published on the Whitehorses Blog.

My colleagues have produced two new articles this month, which are, as always, definitely worth reading.
The first is by Herman Bunnekreef about extending your enterprise web applications to mobile, using MAF (Mobile Application Framework) with Oracle SOA Suite at the heart of this solution. The article itself is in Dutch but still might be readable in Google Translate.

The second article is written by Jos van Otterloo, and he discusses the Manifesto for Software Craftsmanship. This document is a response to the Agile Manifesto, emphasizing even more on programming skills and software quality.  An article to reflect on, with plenty of references to other interesting reads (in English language) on this subject.

Check out these and many more Whitebooks on http://www.whitehorses.nl/whitebooks.

What to do with a raspberry pi

Introduction

This is a living and growing blogpost. I’ll collect some features and packages which are nice to have or useful on your Raspberry Pi. As I found most of the information on the web instead of figuring out myself, I’ll link to the tutorials I found.

If you have any suggestions, please feel free to let me know in the comments.

What to do with a Raspberry Pi

I assumed you know what you bought and probably you installed an OS already. I use Raspbian, and prefer it above other OS’es like Noobs or Pidora. I guess you also have some knowledge of Unix and Linux. If not, good luck with executing commands you don’t understand!

installing MySQL and the PHP extension.

A database is always useful, and apparently PHP can be used to build websites. Or so I’m told. Check this great tutorial. It’s easy.

Configure the Pi as an airplay device.

How cool is that! And relatively straightforward too. Go to http://www.raywenderlich.com/44918/raspberry-pi-airplay-tutorial. I started at the section “Updating the Packages”.

Make a box for it!

Personally, I love this tutorial on Instructables where user Sandshock demonstrates a nice looking oak casing for a few dollars.

Use it for your DDNS service

In a previous blogpost I explained how to make a Dynamic DNS service.  The Raspberry is a perfect device for it.

Install version control software like Git or SVN

For installing SVN in Raspbian, Jeremy Morgan has a tutorial. I haven’t installed the GIT service yet, but I guess this is a good starting point on Instructables.

improving Oracle SOA performance by tweaking the entropy pool

I stumbled upon a nice blog post by Peter Lorenzen about the entropy generator in Linux, for creating random numbers (used in encryption and many other features).

When you encounter Java performance problems (stalling and lagging), please read Peter’s blog carefully, I think it’s very informative. Also take note of the possible security issues he mentions.

Update

I’ve found another solution that was really helpful in getting our EM console up to speed. I’ve written a blog post on my company’s website. Check it out at the Whitehorses Blog. The TLDR; version is:

I used the linux program haveged, which is a userspace entropy daemon which is not dependent upon the standard mechanisms for harvesting randomness for the system entropy pool. 

 After installation, the entropy pool is replenished much faster, so programs do not have to wait (or stall) when the entropy pool is depleted.

improving Oracle SOA performance by tweaking the entropy pool.
XKCD’s view on truly random numbers.

Configuring Ubuntu 12.04 and higher for running Oracle XE

After upgrading my Ubuntu, I found out the database failed to start. I got the following error:

ORA-00845: MEMORY_TARGET not supported

Apparently some symbolic links are modified, causing the configuration to break.

There is a nice thread on the Oracle Support Forums explaining how to fix this once and for all. I’ve pasted the solution here below.

------------------------------------------------------------------------------------------
Another solution is to prevent Ubuntu from creating the symbolic link from /dev/shm to /run/shm by default. This is just a matter of editing /etc/init/mounted-dev.conf and commenting out the line that reads:
# [ -e /dev/shm ] || ln -s /run/shm /dev/shm
Then it's just a matter of adding an entry into /etc/fstab for the shared memory temporary file system mounted at /dev/shm, say for a 2 gigabyte file add:
shm /dev/shm tmpfs size=2g 0 0
NB. The really neat thing about this is that you now don't need the /etc/init.d/oracle-shm fix-up script at all as described in Section 7) of Oracle 11gR2 Express Edition on Linux Ubuntu 11.10 howto. However if you have already created it you can remove it using:
update-rc.d -f oracle-shm remove
Then either reboot to mount the new file system, or run:
rm -f /dev/shm
mount /dev/shm
------------------------------------------------------------------------------------------
I used a 1 gigabyte shared memory temporary file, and it worked fine for me.

Conditional branching in Oracle BPEL processes; the Switch vs If Activity

Conditional branches in Oracle BPEL are designed to create decision points in your BPEL flow executions.

There are a number of activities that allow conditional branching. If you’re working on a BPEL 2.0 project, it’s good to know that the switch activity is no longer available and replaced by the “IF” activity. The name change is entirely dictated by the BPEL v1.1 to v2.0 standard upgrade. There is no extension to the functionality; just rename the switch to if, make the condition attribute of the first case element a child element of the if element and change it’s xsl variable format. Other case elements change to elseif’s. Finally, otherwise becomes else.

The While activity is available in all BPEL versions and is used to create a loop that, for instance, keeps polling until an activity is available or a specific condition is met.

Just keep in mind, look for the “If” in projects that comply with BPEL 2.0 standards, and use “switch” in BPEL 1.1 projects. When upgrading, you  possibly should change the syntax manually.

WLRAConfigurationException during deployment of dbAdapter

If you ever run into this error while deploying or redeploying your dbAdapter or when restarting the OSB AdminServer or managed servers:

Failed to initialize the application 'DbAdapter' due to error weblogic.application.ModuleException: weblogic.connector.exception.WLRAConfigurationException:

The stack trace looks something like this:

There are 1 nested errors:

weblogic.descriptor.DescriptorException: Unmarshaller failed
        at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:161)
        at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:323)
        at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:287)
        at weblogic.application.descriptor.AbstractDescriptorLoader.getPlanMergedDescriptor(AbstractDescriptorLoader.java:593)
        at weblogic.application.descriptor.AbstractDescriptorLoader.getPlanMergedDescriptorBean(AbstractDescriptorLoader.java:548)
        at weblogic.connector.configuration.ConnectorDescriptor.getWeblogicConnectorBean(ConnectorDescriptor.java:332)
        at weblogic.connector.configuration.DDUtil.getRAInfo(DDUtil.java:132)
        at weblogic.connector.deploy.ConnectorModule.loadDescriptors(ConnectorModule.java:794)
......

You might want to recheck your osb_dbadapter.xml for validity, or the weblogic-ra.xml in other setups. Even if you didn’t modify it. In my case, the configproperty tag in the file was there multiple times for one datasource:

     <variable>
       <name>ConnectionInstance_/eis/DB/BogusDB_JNDIName_13800278320830</name>
       <value>eis/DB/BogusDB</value>
     </variable>
     <variable>
       <name>ConfigProperty_dataSourceName_Value_13800278750590</name>
       <value>jdbc/BogusDB</value>
     </variable>
     <variable>
       <name>ConfigProperty_xADataSourceName_Value_13800279128421</name>
       <value>jdbc/BogusDB</value>
     </variable>
     <variable>
       <name>ConfigProperty_xADataSourceName_Value_13800281891200</name>
       <value></value>
     </variable>

As you see, one ConfigProperty was there twice and one was empty. Apparently this may happen without anyone touching the file when the OSB server crashes.

I removed the  part with the blue textcolor and redeployed the dbAdapter succesfully.

Enabling wget in OS X

Although Mac OS X has a lot of UNIX commands, wget is not one of them. The alternative command curl is vey powerful, but many UNIX scripts rely on wget. Enabling wget in OS X is quite straightforward.

Enabling wget in OS X.

On Andrew Merenbach’s site is an OS X package for wget, download it here: Download

Install the package and you’re all set and done. When typing wget in your terminal, this is the result:

iMac-van-Patrick:~ patricksinke$ wget
wget: missing URL
Usage: wget [OPTION]... [URL]...
Try `wget --help' for more options.

Alternative method

It’s also possible to build the binary yourself:

1) download and install XCode from the App Store. It’s free, although quite bulky (1.5GB).

2) Start XCode. Go to Menu -> Preferences -> Tab Downloads.

3) Install Command Line Tools.

4) Execute on the Terminal:

curl -O http://ftp.gnu.org/gnu/wget/wget-1.14.tar.gz
 tar xvzf wget-1.14.tar.gz
 cd wget-1.14
 ./configure --with-ssl=openssl
 make
 sudo make install

For unknown reasons, this didn’t work for me; I got the following error:

configure: error: --with-ssl was given, but GNUTLS is not available.

Maybe some other non-installed libraries are required.

NetFlix will be available for Dutch Apple TV!

When visiting the Dutch Apple site, there isn’t any mention of Netflix for the Netherlands yet. But the site’s Google summary mentions NetFlix already, and so do the meta tags:

<title>Apple - Apple TV - iTunes, Netflix en livewedstrijden op je HD-tv.</title>
<meta name="omni_page" content="Apple TV - What’s On" />
<meta name="Description" content="Met Apple TV kun je je favoriete films en tv-programma's van iTunes en Netflix bekijken, plus livewedstrijden, YouTube-filmpjes en nog veel meer."   />

This is definitely good news for all Dutch Apple TV owners! Not only is NetFlix coming to The Netherlands, it will probably also be available on Apple TV right away!

This site: Moreflix.com sums up nicely which movies and series will be available here. I guess the UK and Denmark collection will be similar to ours.

The Walking Dead, Breaking Bad, and others.

Moreflix TV Shows content

Update: The Netflix info on the site is gone for some time now. Strange. While the US Apple TV continues to be upgraded with new features, there is not much news on the Dutch version.

Improving Oracle SOA EM console performance

has a useful blog entry about improving Oracle SOA EM console performance in Oracle SOA 11g.

The last few weeks, our Oracle SOA EM performance deteriorated rapidly. Loading the process dashboard could take 10 minutes or more. I applied the settings as Albin suggested ( Right Click on SOA-INFRA in the EM console, go to SOA Administration->Common properties, check all boxes in Data Display Options).

settings that improve EM performance

Additional info.

You have to keep a couple of things in mind when setting a duration. Setting it to 1 hour does not only imply it shows the processes started in the last hour, but also calculates the instances count of the last hour. This cannot be overridden in the dashboard. If you would like a bigger timeframe, try to find a trade-off between performance and calculation interval. Because we have relatively few, but long-running instances (weeks to months), we chose a duration of 21 days.

The drawback is that older instances are not visible anymore. Chances are big these are the ones requiring extra scrutiny.
Fortunately, you can override the duration of the displayed instances in the Instances tab. The Start Time From parameter is prefilled with a date based on the duration. You can modify it and rerun the query. Instances started before the default duration are shown in the overview.

Create a DIY dynamic DNS service, for free

I’m one of the unlucky people with a provider who doesn’t provide a static IP address. One solution would be to subscribe to a Dynamic DNS (or DDNS) service like DynDNS. Those services are not free (anymore), and although the subscription price is not too steep, it does not justify for the limited use I have.

A little scripting provided a solution which works for me too. I previously ran this on a Mac, but since I have a Raspberry Pi running anyway, the script is now scheduled on the Raspberry Pi with the Raspbian OS  installed.

First, I need to obtain my external IP address. There are plenty of free services. I found a little script that does the job for me:

curl -L -s --max-time 10 http://checkip.dyndns.org | 
      egrep -o -m 1 '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

It fetches the webpage from the DynDNS site and strips out  the IP address using a regular expression.

I created a quick and dirty shell script that creates a file that contains some simple HTML with a redirect to my public IP. The generated file is then uploaded to my hosting provider:

printf "<html><head><meta HTTP-EQUIV=\"REFRESH\" content=\"0; url=http://" > redirect.html
curl -L -s --max-time 10 http://checkip.dyndns.org | egrep -o -m 1 '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' >>redirect.html
printf "\"></head><body>Redirecting ...</body></html>" >> redirect.html
curl -u user:password -T redirect.html ftp://ftp.mysite:21

Not the most elegant code, but it works. I can run this manually or schedule it with launchdcron or something similar. If necessary you can even manually create the HTML file and upload it yourself from time to time.

The final step I took was make sure the page redirects me to a webserver running locally in a virtual machine. I set one up in Virtualbox, using a Bridged Network so it acts as a full network citizen in my local network. Creating a port forwarding entry in my router ensures that all incoming requests on port 80 are redirected to port 7780 on the IP address of the virtual machine.

And so I’m done. Opening the page on my hosted site automatically redirects me to my local web server. At no cost and hardly any coding at all!

Addition January 1st., 2014:

I’ve found another trick that might not always work, but it rules out the need for an external service to display your external IP address.

The following line returns your external IP adres in OS X:

curl ifconfig.me

The script then becomes as simple as:

printf "<html><head><meta HTTP-EQUIV=\"REFRESH\" content=\"0; url=http://" > redirect.html
curl ifconfig.me >>redirect.html
printf "\"></head><body>Redirecting ...</body></html>" >> redirect.html
curl -u user:password -T redirect.html ftp://ftp.mysite:21


By using this site you acknowledge the use of cookies (which are mostly harmless, btw) More information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below you are agreeing to these settings.

Close