“The Open IMS Core is an Open Source implementation of IMS Call Session Control Functions (CSCFs) and a lightweight Home Subscriber Server (HSS), which together form the core elements of all IMS/NGN architectures as specified today within 3GPP, 3GPP2, ETSI TISPAN and the PacketCable intiative. The four components are all based upon Open Source software(e.g. the SIP Express Router (SER) or MySQL).”

Download & Install libmysqlclient15off from:
Note: To install openimscore-fhoss you’ll need to install sun-java6-jre since it depends on it. Add the repositories to your sources.list file.
And run:
Follow the configuration instructions. And….. you’re done.
:-)
“The way the processor industry is going is to add more and more cores, but nobody knows how to program those things. I mean, two, yeah; four, not really; eight, forget it.”
Steve Jobs, NY Times interview, June 10 2008
Nowadays, as new hardware platforms evolve, so concepts do. Yesterday, a computer was an unified processing unit. Today it is a heterogeneous machine with processing units growing in number and in processing power as well. Units like CPUs, GPUs or DSPs… So why not take advantage of all these resources? That’s where OpenCL comes in.

OpenCL stands for Open Computing Language and is a framework for writing programs that execute across heterogeneous platforms consisting of CPUs, GPUs, and other processors. (…) OpenCL provides parallel computing using task-based and data-based parallelism. [+]
(I may leave a conceptional approach on this subject later on.)
The basic hardware platform is composed of a Host and a few Devices made of a few compute units. Each compute unit is made of a few processing elements. The OpenCL platform allows applications to use a host and one or more OpenCL devices as a single heterogeneous parallel computer system. e.g. Multiple cores on CPU or GPU together are a single device and OpenCL executes kernels across all cores in a data-parallel manner.
A Host program in order to perform a very specific task relies on an OpenCL C programming language derived from the ISO C99 with slight differences in keywords and syntax and with some additions and some restrictions. That piece of code should be called a Kernel. The Host program also relies on the OpenCL platform and runtime layer.
Inside this platform there’s the OpenCL Runtime layer and allows the host program to create memory objects associated to contexts as well as manipulate contexts once they have been created. It also allows to compile and create kernel program objects, issue commands to command-queue, synchronization of commands and cleaning up OpenCL resources.
Contexts enable sharing of memory between devices. In order to do that, both devices must be in the same context. Contexts are also central elements to manage:
Command Queues (for kernel execution coordination) are ment to store a set of operations to perform and are associated to a context. All work is submitted through queues so each device must have a queue. Multiple command-queues can be created to handle independent commands that don’t require synchronization;
Memory objects to transfer or mapping of memory object data, Programs and Kernels.
In the OpenCL platform, the compiler is built into the runtime layer and can be invoked on the raw text or a binary can be built and saved for later load.
Running an OpenCL calculation takes these steps.
Writing the Kernel:
Initialization: Selecting a device and creating a context in which to run the calculation
1.
2.
3.
Note: The “best” device is algorithm- and hardware-dependent, so in order to pick the best device for your algorithm it is best to query some device info.
clGetDeviceInfo(device, name, size, *value, *value_size_ret)
Number of compute units: CL_DEVICE_MAX_COMPUTE_UNITS
Clock frequency: CL_DEVICE_MAX_CLOCK_FREQUENCY
Memory size: CL_DEVICE_GLOBAL_MEM_SIZE…
Allocation of memory/storage that will be used on the device and push it to the device. Creating memory objects : Programs and kernels are read in from source and compiled or loaded as binary
1.
2.
Note: Buffers are simple chunks of memory so Kernels can access them for reading and writing however they like (pointers, arrays, structs). Images can only be accessed via read_image() and write_image(). One image cannot be read and written in the same kernel.
The arguments to the kernel are set and the kernel is executed on all data
Tear down.
Note: I didn’t messed with synchronization neither events.
So let’s go for some fun! Grab the code. I’m using a 32bits Ubuntu 10.04 Lucid Lynx with an ATI graphics card.
Let’s go for the prerequisites. I had to fetch the drivers from the ATI website.
Next download the ATI Stream SDK from AMD website.
Add some variables to your .bashrc
Download the icd-registration from AMD website and extract it on the root of your system.
You can now start programming with:
#include <CL/opencl.h>
and compile it like:
gcc foo.c -o foo -lOpenCL
Reference Links:
http://www.macresearch.org/opencl
http://www.haifux.org/lectures/212/
After having a X server and a window manager up and running on my eeepc’s Debian 5.0 fresh installation it was about time to start surfing the web… One of my favourite websites is Youtube. As I tried to watch a clip I was barried with a message saying that would need to enable javascript on the browser or download the latest flash plugin for it. Then I started looking in the repositories for something with flashplugin and found the package flashplugin-nonfree-extrasound.
Installed it but nothing.. I couln’d stand without visiting Youtube! Then i decided to download the flashplugin from Adobe’s website.
Still with the package from the repo installed I’ve downloaded Adobe’s plugin. It was extracted:
Copied to a place where don’t bother me:
The previous plugin from the package was unlinked:
And the new plugin was linked using the same linkname from the previous plugin:
And finally I could watch on Youtube at will…
[video]
[video]
Android - An Open Handset Alliance Project -
I was invited by NEECT (the representative group of my course students) to speak about the experience I’ve been taking so far when architecturing and developing applications for embedded devices. I’ll speak a little about Android and the Android Framework as well as comparing the differences when developing for other mobile platforms. This talk is free of charge and is open to the academic community. Feel free to join this talk in a chilled atmosphere :)