<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:iweb="http://www.apple.com/iweb" version="2.0">
  <channel>
    <title>Company Blog</title>
    <link>http://www.adcdata.co.uk/Company_Blog/Company_Blog.html</link>
    <description>Welcome to the ADC company blog, here you will find postings on a range of topics, some of the posts may be insightful whilst others may simply be a log of how to do something for our future reference. &lt;br/&gt;</description>
    <generator>iWeb 3.0.1</generator>
    <item>
      <title>Streaming multimedia content with Apache</title>
      <link>http://www.adcdata.co.uk/Company_Blog/Entries/2009/11/4_Streaming_multimedia_content_with_Apache.html</link>
      <guid isPermaLink="false">76c22349-5903-4f9f-b57c-adf73bce3489</guid>
      <pubDate>Wed, 4 Nov 2009 09:20:47 +0000</pubDate>
      <description>Although the intention of this blog is to post about business intelligence related topics the nature of a blog makes it an ideal medium to log digital content and to subsequently retrieve this information. This post is more of an aide memoir although hopefully it will prove useful to others.&lt;br/&gt;&lt;br/&gt;Those users who have looked around the site, will have come across several multimedia clips in the form of flash videos. Well today I decided to enabled pseudo streaming of these videos on the website using an apache extension.&lt;br/&gt;&lt;br/&gt;So what exactly is pseudo streaming ? When you visit a website such as youtube you can skip within the file to a point of interest, this is enabled by streaming the content to the client. It confers several advantages, firstly the entire video does not need to be downloaded upfront which makes the whole experience more responsive and if the user effectively fast forwards the content then only data from that part of the video onwards is streamed. &lt;br/&gt;&lt;br/&gt;Although this sounds simply the commercial reality is quite different. Typically to stream media you are required to purchase a separate streaming media server, which is often an expensive proposition. For unix users there is the possibility of using the open source Darwin Steaming Media server from apple, but again this means installing a separate software component.&lt;br/&gt;&lt;br/&gt;Fortunately there are some alternatives, although these are not full streaming media server they are a decent compromise. &lt;br/&gt;&lt;br/&gt;The apache module mod_flvx can be used to achieve pseudo streaming of media. Effectively what happens here is when a user skips to the middle of a video the module will read the contents of the file, truncate the part the user wishes to skip and the send the remaining content. &lt;br/&gt;&lt;br/&gt;To use this module the following steps were taken.&lt;br/&gt;&lt;br/&gt;	1)	Install the httpd-devel tools&lt;br/&gt;&lt;br/&gt;    sudo yum install httpd-devel&lt;br/&gt;&lt;br/&gt;	1)	Download the extension from the &lt;a href=&quot;http://people.apache.org/%7Epquerna/modules/mod_flvx.c&quot;&gt;apache website&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;	1)	Compile the extension&lt;br/&gt;&lt;br/&gt;    apxs -c -i ./mod_flvx.c &lt;br/&gt;&lt;br/&gt;	1)	Edit your apache configuration file (often called httpd.conf) and add the following lines&lt;br/&gt;&lt;br/&gt;      LoadModule flvx_module modules/mod_flvx.so &lt;br/&gt;     AddHandler flv-stream .flv &lt;br/&gt;&lt;br/&gt;	1)	Restart apache&lt;br/&gt;&lt;br/&gt;    /etc/init.d/httpd restart&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</description>
    </item>
    <item>
      <title>The strange nature of the XMLA Drop Command</title>
      <link>http://www.adcdata.co.uk/Company_Blog/Entries/2009/10/23_The_strange_nature_of_the_XMLA_Delete_Command.html</link>
      <guid isPermaLink="false">8c11f98e-1b6d-4d18-b602-d8a7a731b70c</guid>
      <pubDate>Fri, 23 Oct 2009 19:24:09 +0100</pubDate>
      <description>During the past few weeks I have spent a great deal of time writing XMLA. I have come across some unexpected issues and behaviours, some which can be explained and some which I currently have no explanation for.&lt;br/&gt;&lt;br/&gt;Generally I have to admit that I am fairly impressed with XMLA, although I do find some aspects of it frustrating, perhaps some this is due to the fact that XMLA has been around for so long although some of the design seems illogical. &lt;br/&gt;&lt;br/&gt;My first encounter with Analysis Services (SSAS) was with the 2000 version. I recall encountering so many issues... we were running on 32 bit machines and found that it was impossible to process our account dimension, which held around 3 million members. When we first hit this issue we were able to use the 2 gb switch to give a temporary reprieve but ultimately it became apparent that the product did not scale in terms of it’s MOLAP offering. The issue in this case being the fact that incremental dimensional process was really just a marketing term. In reality it pulled all of the records from the relational dimension table and then compared these with the current olap dimension and inserted / updated and deleting the data where necessary. In effect it said “select * from sourceTable”.&lt;br/&gt;Since we realised that the product couldn’t scale the decision was made that we would only hold a fixed amount of data and create stored procedures which would purge older facts and no longer required dimension members.&lt;br/&gt;&lt;br/&gt;Things have improved a great deal in the 2005 and 2008 offerings and 64 bit servers and now also much more ubiquitous. On the current project we will be deploying our analysis services cubes on a server with 256Gb of RAM and 32 cores. With this kind of computing power you could hold a vast amount of data in memory, unfortunatley there is now easy way to pin SSAS partitions in memory, indeed Microsoft chose to remove the pin table feature from recent version of SQL Server. &lt;br/&gt;&lt;br/&gt;So generally things have improved a great deal, however when you have a very demanding user base and tight SLAs to adhere to there is always the need for compromise. One of the unfortunate issues with using MOLAP cubes is that any structural change to a dimension requires that dimension needs to be fully processed, which has the knock on effect of invalidating (deleting) any cube partitions associated with that dimension.&lt;br/&gt;&lt;br/&gt;The fact that all of your historical data is wiped out until you can reprocess really is not ideal. Due to this it is fairly common to build a system which is a compromise. Recent records are held in MOLAP and historical data is held in ROLAP.&lt;br/&gt;&lt;br/&gt;One other annoyance is the fact that page level dimension members are treated as separate entities in relation to pivot tables. This is obviously done for performance reasons, however it does mean that many members are displayed which have absolutely no relation to other filtering attributes. &lt;br/&gt;&lt;br/&gt;Therefore if you are going to have a mixed architecture of MOLAP and ROLAP then it might be worth splitting these into separate cubes, so that when you display dimension members in the MOLAP pivots you are displaying the more relevant members, yes they still will not be inter-related but the very fact that the dimension is smaller means less combinations are shown.&lt;br/&gt;&lt;br/&gt;Given this requirement how can you delete dimension members? Well you could do this act the relational level, and process the dimension but this would also affect your relational ROLAP model and in any case would be a compromise, since the set of dimension members required to support the last month of data will be less than that required to support the historic data.&lt;br/&gt;&lt;br/&gt;Within XMLA there is a delete command, so the command below can be used to delete the elements from an Analysis Services Dimension.&lt;br/&gt;&lt;br/&gt;&amp;lt;Drop xsi:type=&amp;quot;Drop&amp;quot; xmlns:xsd=&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;http://www.w3.org/2001/XMLSchema&lt;/a&gt;&amp;quot; &lt;br/&gt;  xmlns:xsi=&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;&amp;quot; &lt;br/&gt;  xmlns:ddl2=&amp;quot;&lt;a href=&quot;http://schemas.microsoft.com/analysisservices/2003/engine/2&quot;&gt;http://schemas.microsoft.com/analysisservices/2003/engine/2&lt;/a&gt;&amp;quot; &lt;br/&gt;  xmlns:ddl2_2=&amp;quot;&lt;a href=&quot;http://schemas.microsoft.com/analysisservices/2003/engine/2/2&quot;&gt;http://schemas.microsoft.com/analysisservices/2003/engine/2/2&lt;/a&gt;&amp;quot; &lt;br/&gt;  xmlns=&amp;quot;&lt;a href=&quot;http://schemas.microsoft.com/analysisservices/2003/engine&quot;&gt;http://schemas.microsoft.com/analysisservices/2003/engine&lt;/a&gt;&amp;quot;&gt;&lt;br/&gt;  &amp;lt;Object&gt;&lt;br/&gt;    &amp;lt;Database&gt;Warehouse&amp;lt;/Database&gt;&lt;br/&gt;    &amp;lt;Cube&gt;Sales&amp;lt;/Cube&gt;&lt;br/&gt;    &amp;lt;Dimension&gt;Client&amp;lt;/Dimension&gt;&lt;br/&gt;  &amp;lt;/Object&gt;&lt;br/&gt;  &amp;lt;Where&gt;&lt;br/&gt;    &amp;lt;Attribute&gt;&lt;br/&gt;      &amp;lt;AttributeName&gt;Account Number&amp;lt;/AttributeName&gt;&lt;br/&gt;      &amp;lt;Keys&gt;&lt;br/&gt;        &amp;lt;Key xsi:type=&amp;quot;xsd:integer&amp;quot;&gt;5000&amp;lt;/Key&gt;&lt;br/&gt;      &amp;lt;/Keys&gt;&lt;br/&gt;      &amp;lt;/Attribute&gt;&lt;br/&gt;  &amp;lt;/Where&gt;&lt;br/&gt;  &amp;lt;DeleteWithDescendants&gt;true&amp;lt;/DeleteWithDescendants&gt;&lt;br/&gt;&amp;lt;/Drop&gt;&lt;br/&gt;&lt;br/&gt;So what is so weird about this command ? Well firstly the fact that is was necessary to specify a cube. A dimension can be shared across multiple cubes so it seems kind of illogical that it is necessary to specify a dimension. However this is the only way I could get the command to work, without a cube being specified the command refused to execute. Perhaps this is some kind of check to validate if data is held in the cube which could be orphaned by deleting the dimension key, that would seem like a reasonable explanation. &lt;br/&gt;&lt;br/&gt;The other thing is that the command actually deleted the element from the underlying dimension table in an Oracle database. This is exactly the kind of behaviour which we were trying to avoid. This is indeed surprising since the dimension is configured to be held as MOLAP and is not a write-back enabled dimension, so why was the data removed from the warehouse ?&lt;br/&gt;&lt;br/&gt;At some point in the next week or two I will come back and investigate the subject a little further, perhaps then I will be able to shed some light on the subject. </description>
    </item>
    <item>
      <title>Installing Perl Packages on CentOS - The magic of YUM</title>
      <link>http://www.adcdata.co.uk/Company_Blog/Entries/2009/10/4_Installing_Perl_Packages_on_CentOS_-_The_magic_of_YUM.html</link>
      <guid isPermaLink="false">ba7fa784-abf6-43ff-9239-0053428498f6</guid>
      <pubDate>Sun, 4 Oct 2009 21:03:36 +0100</pubDate>
      <description>Sometime ago I wrote a perl CGI program to send mail using STMP. In order to create this script I was write required to install some perl packages which proved relatively straight forward to install using CPAN.&lt;br/&gt;&lt;br/&gt;However recently I decided to migrate this code to a bare bones CentOS machine. &lt;br/&gt;&lt;br/&gt;I ran cpan and then realised I was missing a C compiler. So quit and performed the following operations&lt;br/&gt;&lt;br/&gt;yum -y update &lt;br/&gt;yum install gcc&lt;br/&gt;yum install make&lt;br/&gt;yum install unzip&lt;br/&gt;&lt;br/&gt;Now I ran cpan again and tried to install the first dependant module in this case Net::SSLeay&lt;br/&gt;&lt;br/&gt;Unfortunately I was presented with the following message :&lt;br/&gt;&lt;br/&gt;*** Found OpenSSL-0.9.8e installed in /usr&lt;br/&gt;*** Be sure to use the same compiler and options to compile your OpenSSL, perl,&lt;br/&gt;    and Net::SSLeay. Mixing and matching compilers is not supported.&lt;br/&gt;&lt;br/&gt;Oh no!! I certainly did not want to have to recompile perl, and OpenSSL with the same compiler.&lt;br/&gt;&lt;br/&gt;However on this occasion I was saved by the yum package manager. A quick check with the command yum whatprovides 'perl(Net::SSLeay)'&lt;br/&gt;produced the following message:&lt;br/&gt;&lt;br/&gt;perl-Net-SSLeay-1.30-4.fc6.x86_64 : Perl extension for using OpenSSL&lt;br/&gt;Matched from:&lt;br/&gt;Other       : perl(Net::SSLeay)&lt;br/&gt;&lt;br/&gt;What a great result, there is a package already available, no need for CPAN or compiling. So the next step was to issue the command&lt;br/&gt;&lt;br/&gt;yum install perl(Net::SSLeay)&lt;br/&gt;&lt;br/&gt;So far so good, yum indicated the module was now installed, so the following command was issued to confirm if this was indeed the case and if perl could use the module.&lt;br/&gt;&lt;br/&gt;perl -MNet::SSLeay -e 1&lt;br/&gt;&lt;br/&gt;No errors were shown with the above command, so all was looking good. Yum resulted in a clean install, which has the added benefit that it can be upgraded along with the rest of the system as and new versions become available. &lt;br/&gt;&lt;br/&gt;I have never installed perl modules using a package manager before and have always either used CPAN or compiled them from C. I now feel like I have been living in the dark ages and from this day forward will aways try to use the built in package manager where possible. &lt;br/&gt;&lt;br/&gt;This approach also worked like a dream for the following modules&lt;br/&gt;&lt;br/&gt;yum install 'perl(IO::Socket::SSL)'&lt;br/&gt;</description>
    </item>
    <item>
      <title>JPalo is a really nice unfortunately there is no default mac download</title>
      <link>http://www.adcdata.co.uk/Company_Blog/Entries/2009/7/29_JPalo_is_a_really_nice_unfortunately_there_is_no_default_mac_download.html</link>
      <guid isPermaLink="false">82f3abc3-d7e2-4d5e-99eb-b1694c884b98</guid>
      <pubDate>Wed, 29 Jul 2009 09:43:39 +0100</pubDate>
      <description>We really like the JPalo eclipse client. The ad-hoc browsing is excellent, it makes stacking dimensions very simple. The only set back is that there is no version of OSX available in the downloads section. However making this great tool work on the mac is a simple task which can easily be accomplished by any user.&lt;br/&gt;&lt;br/&gt;The following step are required to perform this task&lt;br/&gt;	•	    Download the Mac OSX Java EE Edition from &lt;a href=&quot;http://www.eclipse.org/downloads/&quot;&gt;here&lt;/a&gt;&lt;br/&gt;	•	    Extract the archive from the above file and copy the eclipse folder to the applications section in finder&lt;br/&gt;	•	    Complete the necessary steps to download the eclipse client in either the windows or linux format from the JPalo website (The actual type does     not matter, since we simply extract the necessary dependancies from the archive)&lt;br/&gt;	•	    Extract the file downloaded from the JPalo website&lt;br/&gt;	•	    Enter the features directory of the JPalo archive and copy all the the directories which are contained within. Paste these folders into the features folder in the eclipse application which was previously downloaded&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;	•	    Copy all of the files which begin com.tensegrity from the plugins folder in the archive downloaded from the JPalo website to the corresponding folder in you eclipse directory.&lt;br/&gt;&lt;br/&gt;The core files are now in place. &lt;br/&gt;&lt;br/&gt;Start eclipse and change the perspective to one of the palo perspectives. &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;As can be seen you can now perform adhoc queries and drag and drop dimensions to slice and dice the cube at your will.&lt;br/&gt;&lt;br/&gt;We have not tried out all of the features offered by the tool and it is possible that some of the features, such as searching for dimension elements are missing since these might depend on code in the Apache Lucene library. If you want to ensure that every feature will work then copy all of the jar files from the plugins folder in the JPalo archive to the the corresponding folder in Eclipse.</description>
    </item>
  </channel>
</rss>

