For WordPress: Affiliate Link Cloak Plugin
I have created a simple WordPress plugin for anyone who wants it.
Basically it allows you to cloak any links of your choosing so that the user doesn’t know where they are to be redirected when they click on them.
There is a page in the admin section of WordPress to maintain the list of cloaked links as well as a sidebar option list in the “Write Post” page so that you can easily choose which link to insert into the post you are constructing.
The links will be in the format :
<your site>/go/<your link text>
e.g http://blog.mcnicholl.com/go/musicreviewzone
The above example is setup to redirect to http://www.musicreviewzone. There are many improvements that I could make to this plugin, but finding the time is difficult. If there is enough demand for enhancements – then I’ll see what I can do
The plugin is pretty simple but hasn’t been extensively tested – definitely working with WordPress 2.3.2 – definitely not working with 2.6 – I’ll find out why and post an update. So be warned. Any feedback is welcome and if you could drop me a note to say how it is working out for you – that’d be great.
User Manual:
- Install the plugin
- Go to Manage->Redirect Links to administrate your cloaked links
- Go to Write->Post to use the links. You should see a side menu called “Redirect Links” – from here you just have to click on a cloaked link to insert it into the body of your post.
- That’s it!
Screenshots:
Download the plugin here : 20080827_mcn_redirect
Tags: affiliate, cloak, cloak links, wordpress plugin
Categories: Uncategorized
Symfony 1.2.4: Build-All Bug? Cannot fetch TableMap…
So, I have been recently trying to get back into Symfony. I had taken a break from it for a while to concentrate on Music Review Zone.
I bought a domain recently that I’d like to develop a Symfony application for and since my current knowledge base is with Symfony 1.0 – I thought I’d use it. Then I noticed the benefits of Symfony 1.2.4 and couldn’t pass it up.
So I started creating my project in the usual way:
php symfony init-project <name of project>
php symfony init-app front
I then setup my databases.yml file and completed my schema.yml file. I then ran:
php symfony propel:build-all
… and got the following output:
symfony propel:build-all
>> schema converting "C:/wamp/vhosts/private/config/schema.yml" to XML
>> schema putting C:/wamp/vhosts/private/config/generated-schema.xml
>> propel Running "om" phing task
>> file- C:/wamp/vhosts/private/config/generated-schema.xml
>> file- C:/wamp/vhosts/private/co...enerated-schema-transformed.xml
>> autoload reloading autoloading
Phing was run before and used many custom classes that might conflict with
your model classes. In case of errors try running "propel:build-forms" and
"propel:build-filters" alone. This is due to a PHP limitation that cannot be
fixed in symfony.
>> propel generating form classes
Cannot fetch TableMap for undefined table: location. Make sure you have the
static MapBuilder registration code after your peer stub class definition.
[?php
/**
* User form base class.
*
* @package ##PROJECT_NAME##
* @subpackage form
* @author ##AUTHOR_NAME##
* @version SVN: $Id: sfPropelFormGeneratedTemplate.php 12815 2008-11-09
10:43:58Z fabien $
*/
class BaseUserForm extends BaseFormPropel
{
public function setup()
{
$this->setWidgets(array(
'id' => new sfWidgetFormInputHidden(),
'username' => new sfWidgetFormInput(),
'location_id' => new sfWidgetFormPropelChoice(
I am beat as to why this is occurring.
My schema.yml file creates a user and location table, among others. Each user has a location which I state in the YAML as :
user:
_attributes { phpName: User }
id: ~
username: { type: varchar(50), required: true, index: unique }
location_id: ~
I also define the location table as:
location:
_attributes { phpName: Location }
id: ~
name: varchar(50)
created_at: ~
So I do not know why ‘symfony propel:build-all ‘ is failing.
When I run each of the commands that makes up the ‘build-all’ option – each succeeds. i.e:
- build-schema
- build-sql
- build-model
- build-filters
- build-forms
So is this a bug or are your fresh eyes noticing something that I am missing?
Tags: symfony, symfony 1.2.4, tablemap
Categories: Programming, symfony
Roundup: Top 5 Music Review Zone News from June
Here are the top 5 news stories to be featured on Music Review Zone this in June.
- The Verve End Glastonbury On A High
- Amy Winehouse Hits Out At Glastonbury
- Do you believe in Ghosts? Chris Martin Does!
- Radiohead Hugs iTunes
- Courtney Love: Someone Has Stolen Kurt Cobain’s Ashes
Now, you maybe wandering where the top 5 news articles for May post is? No? Well – the reason I didn’t post one was because May was a very slow month on the site front.
I got married and a lot of planning was needed – so my time was heavily diverted away from my sites.
This set back any marketing of the site as well – so June was a claw back month.
I have been taking part in an Entrecard drive to get all members actively joining Digg. That sounds strange – I know but I currently have over 200 friends on Digg under my musicreviewzone account. Friend me if you are a Digg user.
The benefits of having so many friends on Digg can be quite obvious – but at the moment these benefits are not paying off. Entrecarders joined up – but don’t really bother digging anything. People will not Digg your stories unless you Digg theirs – which makes the whole thing a waste of time.
The amount of ‘shouts’ that people make are ridiculous and most want you to Digg boring stories. Which is why I am contemplating un-friending some people.
Tags: MusicReviewZone.com
Categories: MusicReviewZone.com, My Sites
Google Keywords, the iPhone and Fighting Your Competition
So everyone on the planet must know that the new iPhone 3G is coming out next month and I for one will be getting one. So slender and sleek, refined and 3G. It’s also cheap as chips – so why wouldn’t you get one?
I was wanting to see some more images of the phone (I do this with everything I buy – so that by the time I actually own it, it’s like I’ve had it for 10 years) just to familiarize myself with it. So off I trumbled to Google, entered ‘iphone’ and hit the ‘search’ button.
207 million articles returned. Yeah – I don’t think I’ll move past the first page (who ever does?). Loads of places to go see the phone but which one to choose?
I then let my eyes move away from the usual hotspots to the left, and in order to try being the exception on one of those ‘webpage heat map’ thing’im’a'jigs – I took a look at the sponsored links to the right. Shocked – I found that the first link for the keyword ‘iPhone’ is held by one of the phones biggest rivals. LG.
LG are currently marketing their ‘Secret’ phone. No its not actually a secret – that is just the name of the device.
I don’t know what they paid for the ‘iPhone’ keyword but this is a little underhanded in my opinion.
Not to be outdone by the iPhone craze, Blackberry also jumped in on the keyword. They obviously don’t value their device as high as LG does because they only spent enough to be position 3 – but still, high enough.
You could pass this off as ‘ya gotta do what ya gotta do’, but why don’t these companies just make better phones? All blackberry’s are ugly bricks. The LG Secret, although nice, just doesn’t come close.
These types of companies, Nokia included, need to start making their software more plugable to different technologies so that they cannot be stepped on by a newcomer, like Apple with the iPhone. Nothing Apple has done is innovative. The technology has been there for years. It’s just laziness that has allowed a competitor into the market and they only have themselves to blame.
Tags: apple, blackberry, google adwords, iphone, lg secret, nokia
The Entrecard Forum Debacle…
Over at the forums on Entrecard, there is a movement growing, prospering and above all striving for the free speech of adults everywhere.
Recently the owner of Entrecard banned some members who verbally attacked one of the moderators of the forum. Those who where banned, were wronged as the forum that they were venting their frustrations on had been specifically setup for just such things : to vent – and the moderator was giving just as good as he was getting.
The new forum, named Firestorm, was created by the programmer of the site as a direct response to some members becoming irritated by the attitude and written language used by others – believing it to be rude and offensive.
Now the banned users have had their accounts reinstated and issued with apologies as the whole sorry mess was a big misunderstanding.
Ofcourse this hasn’t helped right the wrong and some of the banned users are now trying to make their last stand: To protect free speech.
The internet is a volitile place and some areas can be quite disturbing. It’s like walking through a city – some areas are pleasant, some disgusting and the rest is just dingey. Forums can also be viewed in the same way. Anyone that doesn’t like something contained in them should just not look at it.
This post is a little rant-ish, sorry for that. Just needed to let that out
Move along. Nothing to see here…
Categories: Uncategorized
The Planet: H1 Datacenter Explosion
A lot has been reported lately about the explosion at The Planets H1 datacenter. The issue has now been resolved but some of the press around the incident is farcical.
The Tech Herald (thetechheard.com) mentioned that The Planets correspondence with its customers was “incredible”. I find this absolutely hilarious reporting.
The Planet began communicating the issue 45 minutes after it occurred. The next update came 1hr 45mins later. I work in the financial sector at the moment and if I responded to an issue 45 minutes after it occurred I’d lose my job. Now – I understand that The Planets response to the issue probably happened as soon as they heard something explode, but their communication to their customers took 45mins. They also indicated that communication lines would be difficult to man (as in : Don’t hold your breath for someone picking up if you call us). This is not acceptable.
The Planet is one of the biggest webhosts in the business and have many customers who are resellers of their services. Those customers in turn have customers of their own. As a result I am left baffled as to how so many websites were down as a result of this issue. This datacenter is not their only datacenter and replication is a default backup solution these days.
One customer reported that he’d probably lose out on a $10million advertising deal as a result of the outage as it made him look unprofessional.
How does a company of this size get away with over 28 hours of non production of services?
Either people are restraining their legal abilities or they do not know that they have the right.
Tags: h1 datacenter, the planet, webhost
Categories: WebHosts
The Economics of The Big Word Project
I just came across an article on Wired that lead me to ‘The Big Word Project‘ – which has been created by fellow Northern Ireland-ers. Keen to explore – I dived in.
Basically – you buy a word in the English dictionary and pay $1 for each letter in that word. The word, on the big word project’s website, then has a permanent link to any website/page of your choice.
I flicked through the site, nicely designed, and blog for a while and then started to think…. Isn’t this a massive case of text-link-ads?
Text-Link-Ads is about buying a text link on someones website. When someone clicks on the link – you are taken to your website. Sweet. Prices vary depending on the popularity of the site you advertise on.
The Big Word Project seems very little different. You buy a word which links to your website.
The value of buying a word that links to your website needs a little thought :
- How much does the word cost
- How many visitors will click through to my website
- What additional benefits will I get from buying
How much does the word cost
The cost of the word is simple. Count up the number of letters in your word and that is how many dollars it will cost.
How many visitors will click through to my website
This question has a positive and negative aspect. Since the site is so new and the self proclaimed ‘Viral Guy’ , co-owner, is pushing all the right buttons to publicise it – you can be guaranteed some early traffic as website owners scramble to pick up the shoddy remains of the English dictionary (after all the good words are gone).
The problem comes when the initial clamour of interest wanes – the novelty wears off and site traffic deminishes – that your investment seems short lived.
What additional benefits will I get from buying
The pagerank and link text are key here. You talk about money on your site and a page with good pagerank links to you with the keyword ‘money’ and you are quids in. Google will like you a little more.
Roundup
Buy a word, link it to your site and watch the traffic flow in – but it will mostly be novelty and short lived traffic.
The fact that most companies have names and not English dictionary words causes concern for me. I would want my word to be ‘McNicholl’ – but its not a word in the dictionary so its not allowed.
Google hammered blogs not so long ago for their irrelevant links – which posed to similarity to the content of the site that they were linking from. Bloggers the world over cried and called the end to Text-Link Ads as a revenue model. Their Pageranks crumbled. So how will ‘The Big Word Project’ give you good pagerank when Google wont pass the Pagerank love through to your site?
One way the guys over at ‘The Big Word Project’ could help out would be to have an individual page for each word that is text customizable by the person buying the word. That way they could make it seem a lot more relevant and the Pagerank would be passed through.
Fair play to the guys for the idea as it seems to be bringing in the money. It’s the simplest ideas that pay the biggest dividends.
Top 5 MusicReviewZone.com Articles From April
Well, another month down and the continuation of Musc Review Zone continues.
The Music site has moved up to a PageRank of 3 in as many months. A fantastic rise considering that it is only into its fifth month. This is all due to marketing the site in all the right places – Technorati, Entrecard, Other Blogs, forums, digg, reddit etc.
Without further ado … Here are the top 5 articles from my Music News and Album Reviews website :
- Pete Doherty Is Homeless
- Guns N’ Roses: Chinese Democracy is ready
- Simon Cowell: American Idol is Boring
- Velvet Revolver Kick Weiland
- John Lennon Widow Feels Sorry For Heather Mills
As always, you should drop by and contribute. Comments help to create a community. At this stage I am looking for guest posters – so if you have a keen interest in Music (any and all tastes) – let me know via this form. Or this form.
Tags: music review zone
Categories: MusicReviewZone.com, My Sites
Symfony Session Timeout Annoyance…
I have recently found that symfony doesn’t attempt to properly maintain the user’s session after logout.
This is a tad annoying as any attributes that have been set during a valid login session will still be set when the user is communicating with the server. It is also a security risk.
Symfony provides the basic building blocks for creating an application, and session management is a part of that. The myUser class contains paramter, attribute, credentials classes as well as some variables like culture (for internationalisation), authenticated and timedout.
The ‘authenticated’ variable’s use should be pretty obvious – when the application is processing the users login it should set the authenticated variable to ‘true’ :
$this->getUser()->setAuthenticated(true);
The ‘timedout’ variable is set automatically be symfony when … alas … the users session has expired/timed out – pretty self explanatory.
The problem comes when your application sets any parameters or attributes during the sessions lifetime. For example, in my application when the user logs in I set a session variable ‘nickname’ so that I can reference/identify the user during any subsequent requests :
$this->getUser()->setAttribute('nickname', $user->getNickname());
This is pretty basic and normal functionality.
This attribute should die along with the session, when it times out – but it doesn’t. There are some perfectly valid reasons why this happens e.g The ‘Validated User’ and the ‘Browsing User’ are two different things to the system but the contents of the shopping cart are not. Another example would be website tracking software. It monitors where users are and what they are looking at – a very good tool for marketing. This type of software doesn’t have to care whether the user is logged in order not as its only concern is where they are and what they are doing. This information needs session data to follow the user. If all session data were cleared after the user logged out – then the monitoring software would be thinking a new user arrived – which would be wrong.
What is needed in this situation is a trigger or a test that determines if the session has expired and if it has – then action something appropriately.
The only way that I have determined to do this is by editing the myUser.class.php file for the application (and every other application) in your project.
As the myUser class is instantiated before any actions we can alter/clean up the session before any proper processing is done :
class myUser extends sfBasicSecurityUser
{
public function initialize($context, $parameters = array()) {
parent::initialize($context, $parameters = array());
if($this->isTimedOut()) {
$this->getAttributeHolder()->remove('nickname');
}
}
}
If you don’t like the idea of having to do this for all your applications – then you can create a new class and make the myUser class extend it instead (you must ensure that the new class also extends sfBasicSecurityUser. That way you have one central place to update when you need to clean up your session.
Hope this helps…
If you have any better ways of doing this – please let me know. I’d be interested to hear your take on it.
Categories: Programming, symfony
Site Outage Is Now An Opportunity To Beg
I never thought I’d see an opportunity for someone to outright beg when their website went down – but low and behold Tyler Cruz has managed it.
Posted on his site today is this :
Hello everyone, I apologize profusely for the site downtime (4 days now!). Unfortunately, one of my servers crashed and the data was wiped. I did have many backup solutions in place, but a series of unfortunate events occured (Murphy's Law). To make matters worse, the server crash occured right before I went on vacation - I am currently writing this on my laptop in he hotel room. We have recovered most of the data now, but there is one particular file that didn't get backed up which is vital. Unfortunately, it is on my home computer. Please be patient as I am working hard on getting my sites back up and running, and again, I apologize for the downtime. I have spent a lot of money on server upgrades and 911 emergency server administration costs, so if you'd like to donate something to help cover all the fees, I'd certainly appreciate it - any amount would be helpful. But please don't feel obligated to as I do make decent money from my websites. If you'd like to donate something, my PayPal address is: [email protected] - please put in the subject line "Server Donation". Thank you, and I hope to get everything back up and running ASAP! Cheers, Tyler Cruz Merendi Networks Inc.
(see attached image)
This plea comes from a man that supposedly, by his own admission, makes nearly $100, 000 per year. I find extra hillarity in the the sentence “But please don’t feel obligated to as I do make decent money from my websites.”. Who is he expecting will donate? I donate to charity but this is just pathetic idiocracy from a John Chow lap dog.
Get a backbone man.
Categories: General