2007-05-28

Gays ban Hetrosexuals from Bar in Melbourne, Australia

Oh my god! If this isn't the biggest case of sexual discrimination, I don't know what is.

Tonight I was ENRAGED to hear about a Bar in Melbourne has decided to ban Hetrosexuals simply because they are scared of us.

Ok, I really feel angry about this so I'll pause, then break down what I believe is the issue I have about this.

1. A government has allowed a law (whatever) to pass that allows someone (anyone, I don't care who) to discriminate against someone else based on their sexual preference.

2. Patrons of the bar (esp. the owner) felt that their security was SO badly at risk that they couldn't employ any other means other than apply for this whatever it is to be implemented.

3. The Equal Opportunities Board of Australia decided that being unequal is the solution that they wish to endorse.

I'm hetrosexual. I've never had gay tendencies or been tempted to "join the other side", and now because of this, I'm unable to go to their bar simply because this is the way I am?

What gives them the right to make me feel like I've done something wrong by being the person I am simply because they have a different sense of sexuality?

--- checked out a website ---

How funny...I've just been to the Human Rights and Equal Opportunity Commission website to enquire about how such a law could be passed when it so blatentley biased only to find 26, no shit, twenty six articles on how women's rights have to be protected and god knows more about women's rights than you can poke a stick at.

I then had a look to see what articles were posted about men's rights and shock horror, nothing. I did a search on men and guess what I found, "Gay men and lesbian rights".

At no point did I find a reference to what rights I have as a man. Even a search revealed that without a lot of digging, I'm probably not going to find a document called, basic_mens_rights.pdf or i_am_not_a_woman_aboriginal_torres_straight_islander_gay_lesbian_so_what_are_my_rights.pdf document either am I?

I feel so ashamed of the government, so very ashamed. The woman from the EEO commission on the news who so smugly promoted the "win" for gay people said that this is something that needs to be done if other gay people are to have a safe and secure social life.

The problem with that is, if I go to a bar, I'm just as likely going to get smashed in the face by a bunch of rowdy idiots as anyone else is, and I bet they're not going to ask me if I'm gay before I take a hit to the head, so where is my EEO commission person saying that rowdy people can't come into some bar so hetrosexuals can have a safe and secure social life. What a pathetic joke.

If I knew her name, I'd tell you to your face that you are a sad, sad woman who sees not five minutes in front of her own actions.

Next, we're going to have gay aboriginals bars, gay non-aboriginal bars and so on. Where does this stupidity end?

2007-05-06

Zimbra on Fedora Core 6

Having built my own web-based email client and experiencing how much effort goes into parsing the email message itself, and then moving on to building my own web-based Calendar, I appreciate when a company goes to all that trouble and releases a free version of a very good collaboration tool such as Zimbra.

Here is my experience with deploying Zimbra Collaboration Suite on Fedora Core 6 (minimal installation specifically designed to server as an "applicance" server and nothing more).

I downloaded zcs open edition and proceeded to jump right in. After un-taring the tarball I went straight into the directory and looked at what was in there. I checked out the README and saw that you need to run ./install.sh, so I did.

After agreeing to the License agreement (who reads these things anyhow?), it checked for the pre-req's, two of which I didn't meet.

I needed to install GPM and libstdc++. A simple yum install gpm was sufficient to have this installed. But I have to go to RPMFind and look for libstdc++ and find the compat-libstdc++ RPM manually.

After installing these two packages, all the requirements were met. It checked for any of the Zimbra packages that might be installed (none were found obviously) and moved on to asking whether or not it could install these packages.

After installing the packages, it went directly to the System Config script (/opt/zimbra/libexec/zmsetup.pl). After going through the "your server is not set up in the DNS correctly" and bypassing certain config issues simply because I had to, I got to the installation of LDAP.

The error that came back said something about su (or sudo) failing because I needed a TTY. A quick bit of research found that in the /etc/sudoers file (visudo) the DEFAULTS requiretty was enabled, literally killing the install scripts ability to execute what it needed to.

After commenting this out, re-running the zmsetup.pl script, LDAP installed correctly.

Other than this, there were no other issues with the install script.

Everything got to the end and the "Setup Completed - Press any Key" prompt graced my presence and I was happy.

I su - zimbra and issued the zmcontrol status command and found that tomcat wasn't running.

I checked the /var/log/zimbra.log and a few other log files and it turned out that something was not able to access the MySQL server that zimbra installed.

After at least three days of searching, a very simple solution presented itself to me.

The order of my /etc/hosts file was incorrect, which caused MySQL to use the incorrect "domain" as part of it's authentication process for the zimbra system which caused tomcat to fail to start.

I put my 127.0.0.1 localhost.localdomain localhost entry as the first line in my /etc/hosts file and issued a zmcontrol stop; zmcontrol start; zmcontrol status command to find that bingo, everything started up and was running perfectly.

I've since created an account, auto-forwarded my email from my original mail server to the appliance server and so far so good. I'm in the process of training the SPAM and HAM filters (love the concept of HAM btw) and am about to convert my entire company to Zimbra.

As for the user interface on both the web client and admin console, I have worked with DHTML/AJAX applications for years and the easy of use combined with the beautiful/sexy interfaces is a triumph for Zimbra. They have done extremely well! Congratuations Zimbra Inc.

As far as the Network Edition (NE), if I felt that the Open Source (OS) version was incapable of performing the tasks that the NE version does then I'm more than happy to have my company pay for the licenses, but until then, the OS version is spot on perfect.

I'm in the middle of reading about how I can make a contribution to the ZCS but I'm afraid that my area's of expertise might not be where they would need it the most, but I am still going to try to contribute.

I very much do recommend Zimbra as a solution to your corporate email issues.

2007-02-02

Xgl + compiz Installation

I have just found the best User Interface out! Gnome with Xgl+compiz support.

People who look at Vista and go, wow, I love the way it does 3D now (it only does one thing in 3D, nothing else) can now look at Linux and see a HUGE assortment of 3D funky visualisations and stick Vista up Microsoft's whoohah!

I had an issue with Xgl + compiz though, when I hit Shift+Backspace it would kill the X server. I found this site which gives you an xmodmap command to execute and it works perfectly (http://www.linuxjournal.com/node/1000095).

2007-01-12

Ruby vs Perl

I've been working with Perl for the last 15 years and it's safe to say that I know Perl and I know her well, but as for Ruby, I've only been learning it for the last two weeks and unfortunately I've come to a conclusion that I thought would take a little bit longer if it were going to happen at all!

I've read the entire Pick-Axe book (version 2) and was extremely excited about the language in general as it has some very nice features that I could very easily become accustomed to but I felt that I needed to have a comparison against my favourite language in order to make a better decision.

I have a price list Excel document that I need to extract just two columns from, B and J.

The filesize is approx. 3.5MB and all in all, it's a pretty straight foward request.

Ruby loaded the Excel document into memory in 1.9 seconds as opposed to Perl doing it in 2.1 seconds (yep, IO is dependant on what's going on at the time so this could certainly be a skewed result).

But unfortunately, Ruby took a total of 21 lines of code to accomplish the same thing that Perl did in only 6 lines!

I certainly have a steep learning curve before I'm half as fluent in Ruby as I am in Perl but when it comes to the crunch, the simple tasks are what I use Perl for. If Ruby can't cut it in regards to being fast to code, them I'm going to have to put Ruby on the back-burner.

Unless someone can show me better stats and less code, Perl is the choice for me.

2007-01-02

Cross-browser JavaScript PopUp Calendar

Ok, I'm going overboard now, I'll post for like a day and a half, say everything that I've ever thought of, then I won't post for another year! hehehe Just kidding.

Ok, here's my second Cross-browser JavaScript widget that I just love building, my PopUp Calendar. It was originally inspired by the Visual Basic 6 Calendar Object, then modified because people at my previous employment wanted it to function differently.

So here goes again q:)



You can download the source code and the example HTML file from here, but once again, please leave my name on the code. It's just a simple sign of respect that's all.

Code Explanation

After including the popUpCalendar.css and popUpCalendar.js files into your HTML file, we need two additional objects to complete the exercise, a Receiving Object and a Parent Object.

The Receiving Object typically is a form item that can be set using JavaScript, though I have allowed for <DIV> and <SPAN> tags to receive the value using innerHTML or innerText.

The Receiving Object

<INPUT TYPE="text" ID="receivingObject" NAME="receivingObject" />

This can be placed anywhere in your code that you want to receive Dates for. You can have as many of these as you like, just remember that typically you have a Receiving Object and a Parent Object combo, rather than multiple Receiving Objects and a single Parent.

The Parent Object

<INPUT TYPE="button" ID="parentObject" NAME="parentObject" VALUE="..." ONCLICK="puc_showCal('parentObject', 'receivingObject', 'dateFormat', 'receivingObjectType_String');" />


The INPUT tag is pretty self explanatory, it simply displays a button with an ellipsis (three periods in a row) on it which activates the puc_showCal() function when clicked.

The puc_showCal() function is pretty straight forward. It requires that you send through the name of the objects, not the objects themselves. I've a simple function that returns an object using the names as references.

The parentObject is an anchor object. It simply uses the X and Y coordinates of this object as the TOP and LEFT values for the layer. Please note: you can hack the script if you wish there to be a distance between the TOP and LEFT points of the parentObject and the layer. In the function puc_showCal() lines 298 and 299 have variables x and y respectively, you can make your mods there if you wish.

The receivingObject is the HTML object that's going to be modified after the user has selected the Date they wish to use. There are actually four Object Types that can be used here:
  • VALUE - Typically a form element that has the property VALUE (ie. INPUT TYPE="text" or TEXTAREA objects)

  • INNERTEXT or INNERHTML - These apply to anything that has the properties innerText or innerHTML (ie. DIV's and SPAN's)

  • VARIABLE - If you declare a variable at the HEAD or above the call to puc_showCal(), you can have the value placed inside that variable for additional processing


This widget comes with a CSS file that can allow you to change it's appearance pretty easily and make it your own with just a few code changes!

Cross-browser JavaScript TreeView

I'm going to have a go at putting up a working example of my Cross-browser JavaScript TreeView Control working, plus an example of how you can use it on your website!

So here I go...



It works under Firefox (version 1.0.8 through 2 (even the new Beta version)) and the dreaded Internet Explorer (version 5.0 and up).

I've currently finished my first Web-based Content Management System (WebCMS) which uses this treeView for the organisation of your files on the web server, but I build the Tree Nodes dynamically using my beloved Perl!

Please feel free to download the files and use them as you wish. I only ask that you leave my name in them for my personal credit/ego q:) I've created a .TAR.GZ for you to download

Code Explanation

  1. Firstly, create an HTML file and link the Style Sheet and JavaScript files like so:

    <link rel="stylesheet" type="text/css" href="tv.css" />
    <script type="text/javascript" src="treeView3.js"></script>
    <script type="text/javascript" src="treeViewConfig.js"></script>


  2. Next, include the call to the function that starts it all off, renderTreeView();
    <script type="text/javascript">

    renderTreeView();

    </script>

    somewhere inside the BODY tag

  3. Save your HTML file and edit your treeViewConfig.js file. It doesn't have to be called this, but it makes sense that's all. The treeViewConfig.js file must have at least the following items for the renderTreeView(); function to do anything of interest at all

    imageDir = "[path_to_tv_directory_with_images_in_it]";

    createRootNode([rootNodeID], "[Root Node Label To Display]", "javascript:toggleNode([roodNodeID]);", "[frame_to_perform_action_in]", 0, 1);

    addNode([nodeID], [parentNodeID], "[Child Node Label To Display]", "[action_to_perform_when_node_is_clicked]", "[frame_to_perform_action_in]", 2, 2);


  4. Load your HTML file in a browser

I'll give you a bit more explanation of the functions mentioned in step 3.

imageDir = "[path_to_tv_directory_with_images_in_it]";

This sets the path to all the images that the TreeView will use during it's rendering. Without this set correctly, the TreeView will render but all these broken image links will appear, making it look like crap. It's relative to the HTML file I believe (I could be wrong), just have a play around with it.

createRootNode([rootNodeID], "[Root Node Label To Display]", "javascript:toggleNode([roodNodeID]);", "[frame_to_perform_action_in]", 0, 1);

Every TreeView requires a Root Node (ok, that's not entirely true simply because you can have a TreeView without a Root Node but that's not the way I've designed this one). This TreeView requires a Root Node q:)

The createRootNode() function allows you to give the Root Node an ID to which every other Child Node can be added to (typically make this a Numerical Value, it's easier to parse trees this way, though String Values will work, just slower). It also allows you to specify the Label that appears for the Root Node. This can include any HTML you see fit.

Next is the "javascript:toggleNode([roodNodeID]);" parameter. This forms the <A HREF=""> part of the code that's generated, so whatever you can stick inside a normal <A HREF=""> attribute will happily go in here.

The "[frame_to_perform_action_in]" parameter in most cases for you, will be a blank string (ie. ""). This was included incase you decided to do a two framer version where the left frame would hold the TreeView and the content accessed by the Nodes would be displayed in the right frame. If this is the case, the value for this typically would always be the name of the right frame.

And lastly, the 0, 1 parameters. These are simply image indicies within the IMAGELIST array. At the moment, the first image that I load is the Plus Node icon which means that the Root Node by default would be closed, second image that I load is the Minus Node icon, so this specifies that if I have not selected this Node, use IMAGELIST[0]. If I've selected the Node use IMAGELIST[1] and so on.

Finally, the addNode([nodeID], [parentNodeID], "[Child Node Label To Display]", "[action_to_perform_when_node_is_clicked]", "[frame_to_perform_action_in]", 2, 2); code. This line is almost identical to the createRootNode() function call except this now applies to Nodes within the Root Node. Same details apply to these parameters as they do for the createRootNode() except the [parentNodeID] obviously references a Node that this Child is going to belong to.

Well that's about it for my second post. A whole lot of waffling going on here, but somehow, I now kinda understand what Programming books are like 1000 pages long!

My first posting!

Wow, I truly never thought that I'd be creating a Blog but here I am, doing just that q:)

I hope I don't offend anyone with my opinions but I feel that I need to join the online community in a way that I was able to contribute my opinions about everything without having the world say no I can't.

At least this way I can find out how everyone else feels about my thoughts and perhaps their opinions might help shape mine!

Anyhow, if you're reading this then all I can say is, Hello, I'm Bradley, and I've got ideas about how things should be and if you'd like to hear about them, I'll be glad to post about them!