<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>All about Miguel Luis moralities.</description><title>guess what...</title><generator>Tumblr (3.0; @mluis)</generator><link>http://www.mluis.com/</link><item><title>The easy way to the OpenSource IP Multimedia Subsystem.</title><description>&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;&lt;span&gt;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).&amp;#8221;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;#8212; &lt;/span&gt;&lt;a href="http://www.openimscore.org/" target="_blank"&gt;&lt;a href="http://www.openimscore.org/" target="_blank"&gt;http://www.openimscore.org/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img align="middle" alt="OpenSourceIMS" height="611" src="http://www.openimscore.org/docs/OSIMS-Raute.gif" width="594"/&gt;&lt;/p&gt;
&lt;p&gt;Download &amp;amp; Install libmysqlclient15off from:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://packages.debian.org/lenny/libmysqlclient15off" target="_blank"&gt;&lt;a href="http://packages.debian.org/lenny/libmysqlclient15off" target="_blank"&gt;http://packages.debian.org/lenny/libmysqlclient15off&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Note: To install openimscore-fhoss you&amp;#8217;ll need to install &lt;a href="http://bit.ly/v30qR9" title="Intall sun-java6-jre on Ubuntu 11.10" target="_blank"&gt;sun-java6-jre&lt;/a&gt; since it depends on it. Add the repositories to your sources.list file.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;deb &lt;a href="http://glua.ua.pt/~mluis/apt" target="_blank"&gt;http://glua.ua.pt/~mluis/apt&lt;/a&gt; oneiric main contrib non-free&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And run:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;sudo apt-get update&lt;/li&gt;
&lt;li&gt;sudo apt-get install openimscore*&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Follow the configuration instructions. And&amp;#8230;.. you&amp;#8217;re done.&lt;/p&gt;
&lt;p&gt;:-)&lt;/p&gt;</description><link>http://www.mluis.com/post/13827945072</link><guid>http://www.mluis.com/post/13827945072</guid><pubDate>Tue, 06 Dec 2011 15:34:00 +0000</pubDate></item><item><title>OpenCL: An Open standard for heterogeneous parallel computing</title><description>&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;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.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Steve Jobs, NY Times interview, June 10&amp;#160;2008&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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&amp;#8230; So &lt;span id="result_box" class="short_text"&gt;&lt;span&gt;why not take advantage of all these resources&lt;/span&gt;&lt;/span&gt;? That&amp;#8217;s where OpenCL comes in.&lt;/p&gt;
&lt;p&gt;&lt;img alt="OpenCL Diagram" src="http://images.macrumors.com/article/2008/12/09/023502-opencl.jpg" align="middle" width="425" height="318"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;OpenCL&lt;/strong&gt; stands for &lt;strong&gt;Open&lt;/strong&gt; &lt;strong&gt;C&lt;/strong&gt;omputing &lt;strong&gt;L&lt;/strong&gt;anguage and is a framework for writing programs that execute across &lt;a title="Heterogeneity" href="http://en.wikipedia.org/wiki/Heterogeneity" target="_blank"&gt;heterogeneous&lt;/a&gt; platforms consisting of &lt;a title="Central processing unit" href="http://en.wikipedia.org/wiki/Central_processing_unit" target="_blank"&gt;CPUs&lt;/a&gt;, &lt;a title="Graphics processing unit" href="http://en.wikipedia.org/wiki/Graphics_processing_unit" target="_blank"&gt;GPUs&lt;/a&gt;, and other processors. (&amp;#8230;) &lt;/span&gt;OpenCL provides &lt;a title="Parallel computing" href="http://en.wikipedia.org/wiki/Parallel_computing" target="_blank"&gt;parallel computing&lt;/a&gt; using task-based and data-based parallelism.&lt;span&gt; [&lt;a title="Wikipedia::OpenCL" target="_blank" href="http://en.wikipedia.org/wiki/OpenCL"&gt;+&lt;/a&gt;]&lt;a title="OpenCL Overview" target="_blank" href="http://www.khronos.org/opencl/"&gt; &lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a title="OpenCL Overview" target="_blank" href="http://www.khronos.org/opencl/"&gt;Overview&lt;/a&gt;.&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;(I may leave a  conceptional approach on this subject later on.)&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;strong&gt;Kernel&lt;/strong&gt;. The Host program also relies on the OpenCL platform and runtime layer.&lt;/p&gt;
&lt;p&gt;Inside this platform there&amp;#8217;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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Contexts&lt;/strong&gt; 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:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Command Queues&lt;/strong&gt; (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&amp;#8217;t require synchronization;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory objects&lt;/strong&gt; to transfer or mapping of memory object data, &lt;strong&gt;Programs&lt;/strong&gt; and &lt;strong&gt;Kernels&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;A &lt;strong&gt;Program&lt;/strong&gt; encapsulate a context, a program source or binary and a list of target devices and build options.&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;A &lt;strong&gt;Kernel&lt;/strong&gt; is written in OpenCL C and declared with the kernel qualifier. It encapsulates a specific function in a program and is precompiled into a binary format and there are function calls for dealing with module and function loading.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Running an OpenCL calculation takes these steps.&lt;/p&gt;
&lt;p&gt;Writing the &lt;strong&gt;Kernel&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;const char *ProgramSource =&lt;br/&gt; &amp;#8220;__kernel void hello(__global float *input, __global float *output)\n&amp;#8221;\&lt;br/&gt; &amp;#8220;{\n&amp;#8221;\&lt;br/&gt; &amp;#8220;  size_t id = get_global_id(0);\n&amp;#8221;\&lt;br/&gt; &amp;#8220;  output[id] = input[id] * input[id];\n&amp;#8221;\&lt;br/&gt; &amp;#8220;}\n&amp;#8221;;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Initialization: Selecting a device and creating a context in which to run the calculation&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Query platform&lt;/li&gt;
&lt;li&gt;Query device(s)&lt;/li&gt;
&lt;li&gt;Create a context&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;1.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cl_uint num_of_platforms=0;&lt;br/&gt;cl_platform_id platform_id;&lt;br/&gt;// retreive a list of platforms avaible&lt;br/&gt;if( clGetPlatformIDs(1, &amp;amp;platform_id, &amp;amp;num_of_platforms)!= CL_SUCCESS ){&lt;br/&gt;    printf(&amp;#8220;Unable to get platform_id\n&amp;#8221;);&lt;br/&gt;    return 1;&lt;br/&gt;}&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;2.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cl_device_id device_id;&lt;br/&gt;cl_uint num_of_devices=0;&lt;br/&gt;// try to get a supported GPU or CPU device&lt;br/&gt;if( clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_CPU, 1, &amp;amp;device_id, &amp;amp;num_of_devices)&amp;#160;!= CL_SUCCESS ){&lt;br/&gt;    printf(&amp;#8220;Unable to get device_id\n&amp;#8221;);&lt;br/&gt;    return 1;&lt;br/&gt;}&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;3.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cl_context_properties properties[3];&lt;br/&gt;// context properties list - must be terminated with 0&lt;br/&gt;properties[0]= CL_CONTEXT_PLATFORM;&lt;br/&gt;properties[1]= (cl_context_properties) platform_id;&lt;br/&gt;properties[2]= 0;&lt;br/&gt;&lt;br/&gt;cl_int err;&lt;br/&gt;cl_context context;&lt;br/&gt;// create a context with the GPU device&lt;br/&gt;context = clCreateContext(properties,1,&amp;amp;device_id,NULL,NULL,&amp;amp;err);&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The &amp;#8220;best&amp;#8221; 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.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a title="Get information about an OpenCL device." target="_blank" href="http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/clGetDeviceInfo.html"&gt;clGetDeviceInfo(device, name, size, *value, *value_size_ret)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Number of compute units: CL_DEVICE_MAX_COMPUTE_UNITS&lt;br/&gt;Clock frequency: CL_DEVICE_MAX_CLOCK_FREQUENCY&lt;br/&gt;Memory size: CL_DEVICE_GLOBAL_MEM_SIZE&lt;/p&gt;
&lt;p&gt;&amp;#8230;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Allocation of memory/storage that will be used on the device and push it to the device. Creating memory objects&amp;#160;: Programs and kernels are read in from source and compiled or loaded as binary&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Create command-queue / Allocation of resources&lt;/li&gt;
&lt;li&gt;Create memory object&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;1.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cl_command_queue command_queue;&lt;br/&gt;// create command queue using the context and device&lt;br/&gt;command_queue = clCreateCommandQueue(context, device_id, 0, &amp;amp;err);&lt;br/&gt;&lt;br/&gt;cl_mem input, output;&lt;br/&gt;// create buffers for the input and ouput&lt;br/&gt;input = clCreateBuffer(context, CL_MEM_READ_ONLY, sizeof(float) * DATA_SIZE, NULL, NULL);&lt;br/&gt;output = clCreateBuffer(context, CL_MEM_WRITE_ONLY, sizeof(float) * DATA_SIZE, NULL, NULL);&lt;br/&gt;&lt;br/&gt;float inputData[DATA_SIZE]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};&lt;br/&gt;// load data into the input buffer&lt;br/&gt;clEnqueueWriteBuffer(command_queue, input, CL_TRUE, 0, sizeof(float) * DATA_SIZE, inputData, 0, NULL, NULL);&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;2.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cl_program program;&lt;br/&gt; // create a program from the kernel source code&lt;br/&gt; program = clCreateProgramWithSource(context,1,(const char **) &amp;amp;ProgramSource, NULL, &amp;amp;err);&lt;br/&gt;&lt;br/&gt; // compile the program&lt;br/&gt; if( clBuildProgram(program, 0, NULL, NULL, NULL, NULL)&amp;#160;!= CL_SUCCESS ){&lt;br/&gt;     printf(&amp;#8220;Error building program\n&amp;#8221;);&lt;br/&gt;     return 1;&lt;br/&gt; }&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Note: Buffers&lt;/strong&gt; are simple chunks of memory so Kernels can access them for reading and writing however they like (pointers, arrays, structs). &lt;strong&gt;Images&lt;/strong&gt; can only be accessed via read_image() and write_image(). One image cannot be read and written in the same kernel.&lt;/p&gt;
&lt;p&gt;The arguments to the kernel are set and the kernel is executed on all data&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;cl_kernel kernel;&lt;br/&gt;// specify which kernel from the program to execute&lt;br/&gt;kernel = clCreateKernel(program, &amp;#8220;hello&amp;#8221;, &amp;amp;err);&lt;br/&gt;&lt;br/&gt;// set the argument list for the kernel command&lt;br/&gt;clSetKernelArg(kernel, 0, sizeof(cl_mem), &amp;amp;input);&lt;br/&gt;clSetKernelArg(kernel, 1, sizeof(cl_mem), &amp;amp;output);&lt;br/&gt;        &lt;br/&gt;size_t global;&lt;br/&gt;global=DATA_SIZE;&lt;br/&gt;// enqueue the kernel command for execution&lt;br/&gt;clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &amp;amp;global, NULL, 0, NULL, NULL);&lt;br/&gt;clFinish(command_queue);&lt;br/&gt;&lt;br/&gt;float results[DATA_SIZE]={0};&lt;br/&gt;// copy the results from out of the output buffer&lt;br/&gt;clEnqueueReadBuffer(command_queue, output, CL_TRUE, 0, sizeof(float) *DATA_SIZE, results, 0, NULL, NULL);&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Tear down.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;// print the results&lt;br/&gt;printf(&amp;#8220;output: &amp;#8220;);&lt;br/&gt;int i;&lt;br/&gt;for( i=0;i&amp;lt;DATA_SIZE; i++ ){&lt;br/&gt;    printf(&amp;#8220;%f &amp;#8220;,results[i]);&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;// cleanup - release OpenCL resources&lt;br/&gt;clReleaseMemObject(input);&lt;br/&gt;clReleaseMemObject(output);&lt;br/&gt;clReleaseProgram(program);&lt;br/&gt;clReleaseKernel(kernel);&lt;br/&gt;clReleaseCommandQueue(command_queue);&lt;br/&gt;clReleaseContext(context);&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Note: I didn&amp;#8217;t messed with synchronization neither events.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;So let&amp;#8217;s go for some fun!&lt;/span&gt; &lt;a title="OpenCL Code Sample" target="_blank" href="http://paste-it.net/public/c8f0d27/"&gt;Grab the code&lt;/a&gt;. I&amp;#8217;m using a 32bits Ubuntu 10.04 Lucid Lynx with an ATI graphics card.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s go for the prerequisites. I had to fetch the drivers from the ATI website.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;sudo wget &lt;a title="ati-driver" target="_blank" href="https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/ati-driver-installer-10-7-x86.x86_64.run"&gt;link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;sudo chmod +x ./ati-driver-installer-10-7-x86.x86_64.run&lt;/li&gt;
&lt;li&gt;sudo ./ati-driver-installer-10-7-x86.x86_64.run &amp;#8212;buildpkg Ubuntu/lucid&lt;/li&gt;
&lt;li&gt;sudo dpkg -i fglrx-modaliases_8.753-0ubuntu1_i386.deb fglrx-dev_8.753-0ubuntu1_i386.deb fglrx-amdcccle_8.753-0ubuntu1_i386.deb fglrx_8.753-0ubuntu1_i386.deb&lt;/li&gt;
&lt;li&gt;rm fglrx-modaliases_8.753-0ubuntu1_i386.deb&lt;br/&gt;rm fglrx-dev_8.753-0ubuntu1_i386.deb&lt;br/&gt;rm fglrx-amdcccle_8.753-0ubuntu1_i386.deb&lt;br/&gt;rm fglrx_8.753-0ubuntu1_i386.deb&lt;br/&gt;rm fglrx-installer_8.753-0ubuntu1_i386.changes&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Next download the ATI Stream SDK from AMD &lt;a title="SDK" target="_blank" href="http://developer.amd.com/gpu/ATIStreamSDK/Pages/default.aspx"&gt;website&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;tar zxvf /path/to/download/ati-stream-sdk-v2.2-lnx32.tgz -C ~&lt;/li&gt;
&lt;li&gt;mv ~/ati-stream-sdk-v2.2-lnx32 ~/.ati-stream-sdk-v2.2-lnx32&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Add some variables to your .bashrc&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;export LIBRARY_PATH=$LIBRARY_PATH&amp;#8221;:/home/YOURUSER/.ati-stream-sdk-v2.2-lnx32/lib/x86/&amp;#8221;&lt;/li&gt;
&lt;li&gt;export C_INCLUDE_PATH=$C_INCLUDE_PATH&amp;#8221;:/home/YOURUSER/.ati-stream-sdk-v2.2-lnx32/include/&amp;#8221;&lt;/li&gt;
&lt;li&gt;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH&amp;#8221;:/home/YOURUSER/.ati-stream-sdk-v2.2-lnx32/lib/x86/&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Download the icd-registration from AMD &lt;a title="icd-registration" target="_blank" href="http://developer.amd.com/Downloads/icd-registration.tgz"&gt;website&lt;/a&gt; and extract it on the root of your system.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;sudo tar zxvf /path/to/icd-registration.tgz -C /&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can now start programming with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;#include &amp;lt;CL/opencl.h&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and compile it like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;gcc foo.c -o foo -lOpenCL&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Reference Links:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.macresearch.org/opencl" target="_blank"&gt;http://www.macresearch.org/opencl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.haifux.org/lectures/212/" target="_blank"&gt;http://www.haifux.org/lectures/212/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sa09.idav.ucdavis.edu/" target="_blank"&gt;http://sa09.idav.ucdavis.edu/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mathnathan.com/" target="_blank"&gt;http://mathnathan.com/&lt;/a&gt;&lt;/p&gt;</description><link>http://www.mluis.com/post/1175432560</link><guid>http://www.mluis.com/post/1175432560</guid><pubDate>Fri, 24 Sep 2010 00:18:00 +0100</pubDate><category>OpenCL</category><category>programming</category><category>linux</category></item><item><title>Giving Iceweasel Flash support: a workaround.</title><description>&lt;p&gt;After having a X server and a window manager up and running on my eeepc&amp;#8217;s Debian 5.0 fresh installation it was about time to start surfing the web&amp;#8230; 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 &lt;b&gt;flashplugin-nonfree-extrasound&lt;/b&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;# apt-get install flashplugin-nonfree-extrasound&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Installed it but nothing.. I couln&amp;#8217;d stand without visiting Youtube! Then i decided to download the flashplugin from &lt;a title="flashplugin_linux" target="_self" href="http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz"&gt;Adobe&amp;#8217;s&lt;/a&gt; website.&lt;/p&gt;
&lt;p&gt;Still with the package from the repo installed I&amp;#8217;ve downloaded Adobe&amp;#8217;s plugin. It was extracted:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;$ tar zxvf install_flash_player_10_linux.tar.gz&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Copied to a place where don&amp;#8217;t bother me:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;# cp install_flash_player_10_linux/libflashplayer.so /usr/lib/iceweasel&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;# cd /usr/lib/iceweasel&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The previous plugin from the package was unlinked:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;# unlink libflashsupport.so&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And the new plugin was linked using the same linkname from the previous plugin:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;# ln -s libflashplayer.so libflashsupport.so&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And finally I could watch on Youtube at will&amp;#8230;&lt;/p&gt;</description><link>http://www.mluis.com/post/80598389</link><guid>http://www.mluis.com/post/80598389</guid><pubDate>Thu, 14 Jan 2010 21:18:00 +0000</pubDate><category>hacks</category></item><item><title>Açorianos: Quem somos?</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/qU7S-KvMHag?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;blockquote&gt;Açorianos: Quem somos?&lt;br/&gt;&lt;/blockquote&gt;&lt;/p&gt;</description><link>http://www.mluis.com/post/204423399</link><guid>http://www.mluis.com/post/204423399</guid><pubDate>Sun, 04 Oct 2009 20:42:00 +0100</pubDate></item><item><title>Mumy look!.. The importance of Responsability.</title><description>&lt;iframe width="400" height="323" src="http://www.youtube.com/embed/zORv8wwiadQ?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Mumy look!.. The importance of Responsability.&lt;/p&gt;</description><link>http://www.mluis.com/post/134449171</link><guid>http://www.mluis.com/post/134449171</guid><pubDate>Fri, 03 Jul 2009 01:18:15 +0100</pubDate></item><item><title>Android - An Open Handset Alliance Project -
I was invited by...</title><description>&lt;img src="http://25.media.tumblr.com/2hVKssVrpnbopsvrWtHKBsDqo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a target="_blank" title="Android's Webpage" href="http://www.android.com/"&gt;Android&lt;/a&gt; - An &lt;a target="_blank" title="OpenHandsetAlliance Webpage" href="http://www.openhandsetalliance.com/"&gt;Open Handset Alliance&lt;/a&gt; Project -&lt;/p&gt;
&lt;p&gt;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 :)&lt;/p&gt;</description><link>http://www.mluis.com/post/105930030</link><guid>http://www.mluis.com/post/105930030</guid><pubDate>Sun, 10 May 2009 20:30:00 +0100</pubDate></item><item><title>I’ve been at the John Lennon’s wall in Prague and it...</title><description>&lt;img src="http://25.media.tumblr.com/2hVKssVrpmkpoznsImWlAsC1o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;I’ve been at the John Lennon’s wall in Prague and it was one of the best moments of Zen I’ve ever had. :)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;
&lt;object height="110" width="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"&gt;
&lt;param name="wmode" value="transparent"&gt;&lt;param name="src" value="http://media.imeem.com/m/n2SDDGqfWo/aus=false/"&gt;&lt;embed height="110" width="300" src="http://media.imeem.com/m/n2SDDGqfWo/aus=false/" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;a href="http://www.imeem.com/people/VuQJeLm/music/Fd2TxA_V/john-lemon-imagine/" target="_blank"&gt;&lt;br/&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://www.mluis.com/post/98661954</link><guid>http://www.mluis.com/post/98661954</guid><pubDate>Tue, 21 Apr 2009 23:28:00 +0100</pubDate><category>places</category></item><item><title>Performance Analysis and Visualization of a GNU/Linux Boot Process in the user-space Landview</title><description>&lt;p&gt;Sometimes one&amp;#8217;s never pleased with the performance of a boot process for the most services one may opt not to start at boot time. Before performing any optimizations to that maybe should be better to take a closer look on where it is slow. That&amp;#8217;s when &lt;a target="_blank" title="Bootchart's Homepage" href="http://www.bootchart.org"&gt;bootchart&lt;/a&gt; comes into play.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;&amp;#8220;Bootchart provides a shell script to be run by the kernel in the &lt;code&gt;init&lt;/code&gt; phase.  The script will run in background and collect  process information, CPU statistics and disk usage statistics from the &lt;code&gt;/proc&lt;/code&gt; file system.  The performance data are stored in memory and are written to disk once the boot process completes.&amp;#8221;&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Start by installing the application:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;# apt-get install bootchart bootchart-view&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The next step is to tell the system that it must start bootchartd before anything else on the user-space level (after loading the kernel into RAM). Let&amp;#8217;s reboot the machine and then stop by the GRUB boot menu. Once there choose the kernel you want to analyse by using the arrow keys and then press &amp;#8216;e&amp;#8217; to edit that kernel entry in the GRUB list. Then press &amp;#8216;e&amp;#8217; again to edit the line where is loaded the vmlinuz image and at the end of that line add:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;init=/sbin/bootchartd&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Save and press &amp;#8216;b&amp;#8217; to boot. The system may boot as usual. (Note: If you intent to use bootchart oftenly I recommend editing /boot/grub/menu.lst and write it there for time saving.)  Once it&amp;#8217;s complete there should be a file /var/log/bootchart.tgz wich is used to generate a graph of the boot process. Issue:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;$ bootchart &amp;#8212;format png&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Then you should have a graph of the boot process in a png image format.&lt;/p&gt;
&lt;p&gt;This is the graph of the boot process of my eeepc running Debian 5.0 in a Linux 2.6.26-1-686 kernel:&lt;/p&gt;
&lt;p&gt;&lt;img alt="eeepc boot graph" src="http://21.media.tumblr.com/2hVKssVrpkznzb3fEGzGjRUxo1_500.png" align="middle"/&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m willing to post about the entire boot process from BIOS until the user-space state but someday later. If you have some ideas or expertise on tweaking the boot process leave a comment.&lt;/p&gt;</description><link>http://www.mluis.com/post/86254336</link><guid>http://www.mluis.com/post/86254336</guid><pubDate>Fri, 13 Mar 2009 22:27:47 +0000</pubDate><category>performance</category><category>linux</category><category>apps</category><category>tweaking</category></item><item><title>About: Indexing the Zero</title><description>&lt;p&gt;&lt;img alt="Miguel Luis" src="http://7.media.tumblr.com/2hVKssVrphc9m0x7smEOTY2Po1_100.png" align="middle"/&gt;&lt;/p&gt;
&lt;p&gt;Yet Another &amp;#8216;Hello World&amp;#8217; Blog Post.. :) Hello World!&lt;/p&gt;
&lt;p&gt;&lt;i&gt;This is just another bunch of &lt;/i&gt;web content  that everyone notes that won&amp;#8217;t congest that many the world wide network for how many times its blogger access it to read his own blog entries anyway&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Who is Miguel Luís in the context of this blog?&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Every entity in this world apparently has an issuer, and in the case of this blog posts that&amp;#8217;s the name of him. Miguel Luís is a (CTE) computer and telematics engineering student at the &lt;a target="_blank" title="Universidade de Aveiro's website" href="http://www.ua.pt"&gt;University of Aveiro&lt;/a&gt;. He&amp;#8217;s a FLOSS vindicator, a GNU appologist, FLOC (Free Libre Open Consultant), a Linux user and maybe something else that is missing here&amp;#8230; One can find more information on Links. (&lt;a target="_blank" title="Miguel Luis at Linkedin" href="http://www.linkedin.com/in/mlluis"&gt;Linkedin&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis at Twitter.com" href="http://twitter.com/mluis"&gt;Twitter&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis profile at Handivi" href="http://handivi.com/mluis"&gt;Handivi&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis at Qik" href="http://www.qik.com/mluis"&gt;Qik&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis at last.fm" href="http://www.last.fm/user/mlluis"&gt;last.fm&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis at Brightkite" href="http://brightkite.com/people/mluis/"&gt;Brightkite&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis at Delicious" href="http://delicious.com/mlluis"&gt;Delicious&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis at YouTube" href="http://www.youtube.com/mluis0pt"&gt;YouTube&lt;/a&gt;, &lt;a target="_blank" title="Miguel Lui's Profile at Dopplr" href="http://www.dopplr.com/traveller/mluis"&gt;Dopplr&lt;/a&gt;, &lt;a target="_blank" title="Miguel Luis's Profile at Heterogeneous Networking Group" href="http://hng.av.it.pt/people/profile/mluis"&gt;HNG&lt;/a&gt;, &lt;a target="_blank" title="Miguel Lui's profile ad GLUA" href="http://glua.ua.pt/MiguelLuis"&gt;GLUA&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Why the hack did Miguel Luís start blogging?&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;At some point in life one start feeling that may have ripeness enough in one&amp;#8217;s oppinion that consequently might worth throwing it out of oneself making it available for sharing. Recently found this a place where can expose one&amp;#8217;s points of view with the chance of being publicly read.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;b&gt;What you may expect from Miguel Luís&amp;#8217;s blog?&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;As a safer, but still a compromising description Miguel Luís would say: expect nothing. However, rather than a white and black scratch draft but deeply thought and taking the liberty to variegate somehow are left some keywords to help the author to get in context while posting: technology, informatics, gadgets, FLOSS, GNU, Linux, market, trips, sailing, phishing, networking, tips&amp;amp;tricks, geek stuff, hacking, phreaking, code, &lt;strike&gt;sex&lt;/strike&gt;, fun, cooking, thoughts and yet again something missing but&amp;#8230; &lt;b&gt;guess what&lt;/b&gt;&amp;#160;?!&lt;/li&gt;
&lt;br/&gt;&lt;/ul&gt;&lt;p&gt;*Update - April09:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;This Blog on your Mobile!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;img alt="Miguel Luis's Blog on your Mobile" src="http://img26.imageshack.us/img26/4208/barcodemluismobile.png" width="136" height="154"/&gt;&lt;br/&gt;&lt;/b&gt;&lt;/p&gt;</description><link>http://www.mluis.com/post/80123877</link><guid>http://www.mluis.com/post/80123877</guid><pubDate>Sat, 21 Feb 2009 02:32:00 +0000</pubDate><category>index zero</category></item></channel></rss>

