Skip to main content
 

DisplayAnything3

DisplayAnything3 is a file and image gallery module for SilverStripe 3.0 with a big list of features. I'm looking forward to trying the module on a future project.

 

Carbon 0.2.3 Released

I've released another version of Carbon, the framework powering this website. It's really a refinement and bugfix release, with the following changes:

  • config: Admin password now needs to be manually enabled
  • cache: Correctly generate htaccess
  • deployment: only replace hostnames in text files
  • cache: only write cache when caching is enabled.
  • theme: remove older articles link (non functional)
  • deployment: new feature - replace hostname from a to b before deploying cached site

Releases are available via github by clicking on tags.

Screencast

To celebrate the new release, I've also recorded another screencast (list of screencasts). In Screencast #4, we create a new post using the admin interface; use the generate site feature to create a full static cache; and finally run the powershell deployment script to deploy to my host over sftp.

All in under 2 minutes!

 

PHP 5.5 drops support for Windows XP / Server 2003

PHP 5.5 will no longer support Windows XP and 2003. Those systems are around a decade old, so PHP is pulling the plug on them.

It was already mentioned on the PHP 5.4 release changelog. It makes sense, but I’m sure it will cause some issues with organisations who have not been paying attention. I would encourage all developers to sign up for the PHP Announcements mailinglist.

 

Fixing Samba network-share change notifications

Today a problem came up where the files on my Samba fileshare did not indicate to my Windows system that they were changed. Software that relies on this information such as TortoiseHG and SimpleLESS would not know that the file had changed. This was especially obvious with SimpleLESS which should take the .less file and process it, but wouldn’t.

It turns out that the cause of this is that on the linux system the system time was off by a large margin. Using Arbab Nazar’s article on setting up time synchronization fixed the issue and prevents it from reoccurring.

 

Facebook wants to be your email

Gervase Markham’s writes about the changes to your Facebook profile, where now by default a @facebook address is shown instead of your own email address:

The email instead goes to my Facebook inbox, and I don’t get a notification email to say it’s there.

So this is why Facebook introduced it: They want you to go to their site to check for email. They don’t want to send the messages to your email and have you interact there, they don’t want you to use a search engine to find content, and they don’t want you to use forums and instant messages to talk to people. They don’t want you ever to get the idea to leave the site.

 

Link: Stop paying your jQuery tax

Speed up your jQuery powered site by moving scripts to the footer.

Turns out that pushing jQuery to the footer is quite easy for the common case. If all we want is a nice $.ready function that we have accessible everywhere we can explicitly define it without jQuery. Then we can pass the functions we capture to jQuery later on after it loads.

The big lesson learned is that we could avoided this whole problem if we started off with my proposed helper.

via Stop paying your jQuery tax.

 

Modified Files - Windows 7 Productivity Tip

To quickly access the files you've been working on today, create a new Favorites item for these files.

To do this, open Windows Explorer and select your Libraries link on the left. Then in the search box, enter modified:today and click the Save Search toolbar button.

Enter a name, such as Libraries Today, and press enter. You will now see the new item appear in your Favorites menu.

You can select this item whenever you need to access recently worked on files.

 

 

 

How to tell a site is reputable or not?

I get asked every now and then if a new online shopping site is reputable or not. As there is no magic way to determine this I have written up these pointers to help you do the same.  Now please I am not responsible for any mistakes in ordering from a site that seems legit and then turns out to be fraudulent!

I'm trying to look at the following things:

  1. Do a google search for the domain name together with one of the following words added: reliable, reputable, fraud, scam etc. This might bring up a few experiences, check some links to determine that these experiences are genuine (not written by a competitor for example).
  2. Search for the domain name on the Web Of Trust and TrustPilot. Don't just look at the figures, look at the comments, so these seem genuine (have they been written with due care and attention and proper punctuation etc)?
  3. View the incoming links for the domain, using Alexa. Are these from genuine sites or things like link directories where people can add their sites just to get higher in the search results.
  4. All reputable shops will use social networking for marketing purposes. Check their Twitter replies and Facebook wall comments for happy / unhappy customers.
  5. If you know of a community that discusses the subject matter, search there too. They will probably have determined whether or not the site can be trusted.
  6. If you are still unsure, attempt a trial checkout and see if the website supports reputable external payment options. If your payment details are not stored with the website then they are safe in the event of a hack / security breach.
From the resources above you will get a general gist of any major issues. Feel free to get in touch with any of your tips.

 

On Free to Play games

Many gamers now look at the listing of a game in the store, and if there is an inapp purchases link and they see 100 of x, 200 of x, 300 of x where x is energy, credits, bux, dollars, street cred, or whatever just skip the game - even though it might have interesting mechanics. Just be brave and proud and ask for a subscription instead of hoovering money out of my pockets. It's a black mark on the state of gaming in my opinion.

It's a clear indication that the game is not made to have the most fun with, but to make the most money out of you by artifical limiting the experience. Where a subscription allows the same steady income without affecting the game experience. Just say no.

The fact that f2p iap titles sell well just proves my argument that "the game is not made to have the most fun with, but to make the most money out of you by artifical limiting the experience". I didn't say these games are not financially successful, because they are.

If the free2play games are so much fun to play, you'd expect to see a lot of sequels in the charts to build on previous success. In the top grossing list (which favour inapp free2play titles) there are no f2p sequels as opposed to 2-4 paid sequels.

So it seems the only way to get people to play your f2p iap title is to make it appear like a new experience by reframing the theme, from restaurant to club to bakery - or from vampire to gangster to army.

Is this because people get jaded from the f2p model?

 

WordPress Coding Standards

If you are looking for guidance on how how to format your code, you could do worse than to base it this coding standards styleguide.

via WordPress Coding Standards

 

Wordpress Plugin Settings Chaos

I wish all Wordpress Plugins had their settings in ONE menu, and all entries in this Plugin Settings menu MUST be named identically to the plugin.

Not "broken links" plugin with settings -> permalinks -> "link checker" because I will never find it.

Time for a wordpress plugin settings corrector plugin

 

Why MySQL does not start

The other day I was provided with a new Ubuntu server with a large data drive. It seemed a good idea to move (among other things) the mysql data folder onto this drive.

[code language="bash"]

sudo mv /var/lib /var/media/lib
sudo ln -s /var/media/lib /var

[/code]

However when trying to start MySQL it will no longer start:

[code language="bash"]

service mysql start
start: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

[/code]

The whole reason I did use a symbolic link was to avoid issues like this. What to do? It turns out AppArmor does not allow mysql to read out of the new /var/media/lib location, as noted in the my.conf file:

[code language="bash"]

# * IMPORTANT
# If you make changes to these settings and your system uses apparmor, you may
# also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.

[/code]

Simply open the mentioned file, duplicate the /var/lib/mysql lines and correct the path to the new locations. Restart AppArmor (or reboot) and Mysql can be started. Verify this by running:

[code language="bash"]
ps -ef | grep mysql
[/code]

 

 

Reminder Bear

You know how every now and then you want to revisit a page in a while to see what's changed? Perhaps review if something has been added to a discussion? Maybe you're waiting for a beta to open or you have posted to a forum that doesn't have topic notification (or it is a regular website).

Simply click the reminder bear bookmark and customize when you want to get an email reminding you off the page. It's like a disposable bookmark, and lets you get on with more important things. I find it very liberating, try it out yourself.

 

 

Hide Trackbacks - Hide ping- and trackbacks from your comments

Introducing Hide Trackbacks - You can have the benefits of track/ping backs (know when someone writes about posts) whilst keeping the comments clean and uncluttered.

After enabling the plugin, trackbacks and pingbacks are no longer shown on your posts and the comment count is updated correctly to reflect this. You can still access them via the admin panel. NOTE: Although the plugin officially requires WordPress 3.1.2 it might very well work on older WordPress versions (if it does please let me know).
Derived from original code created by  Honey Singh (used with permission of the author).

Installation is simple:

  1. Upload the `hide-trackbacks` directory to `/wp-content/plugins/`.
  2. Activate the plugin through the 'Plugins' menu in WordPress.

Download link and information:
Wordpress.org Hide Trackbacks

 

Serve.sh - A shell script for serving sites

I am experimenting with using a Linux virtual machine as my web development environment of choice. I store the vm on a removable drive so that I can develop from any location, without having to setup a working environment. Previously I had to check out the repositories, setup a local webserver and I had trouble keeping things working, because every configuration change had to be applied in every location. Now it is all centralized and my life is simpler.

The aim is to make working on projects as easy as possible. I have all projects checked out in a folder called /var/sites. They are mostly PHP projects and because of my shared hosting environment they share a single apache configuration. How can I easily serve them? Having seperate virtualhosts for each project would result in me having to make manual changes on every location again, so this was not the way to go.

Instead I created a simple shell script that creates a symbolic link from the Apache's webroot to the project I am working on:

[gallery link="file"]

#!/bin/bash
echo "Available sites:"
ls  /var/sites
echo
echo -n "Type site to serve: "
read site
if [ -z "$site" ]
then
exit
fi
sudo rm /var/www
sudo ln -s /var/sites/$site /var/www

 

[Patch] CodeIgniter Helper class patch for Textile

For those that do not follow me on twitter (@pacifika), I've created a patched version of Textile, the html generator alternative to Markdown, to make it easier to use in CodeIgniter projects. I have provided the patch and patched Textile on support forums of both projects.

[Patch] CodeIgniter Helper class patch for classTextile.php · Textpattern CMS Support Forum.

After patching, you can just use Textile like this:

$this->load->helper('textile');
$text = Textile("Dude this is *my* code!");

For more information read the post on the forums!

 

[Plugin: WP List Files] Fix: links don't work when blog not installed in root of site

wp-list-filesUpdate: This plugin is no longer available.

We’re using a customized version of WordPress as an electronic portfolio for students and we are using WP List Files to make documents available on the ePortfolio. Unfortunately the WordPress support forums seem to hide my topic (possibly because it's an older version) and the author is no longer supporting the plugin.

Due to time constraints, these plugins are no longer supported and will not be updated, ever! Unless you know what you’re doing, I strongly discourage using these on a production blog since they have not been tested since WordPress 2.5.

The plugin didn't work in version 2.0.3 that we are using because the wp_enqueue_script function does not exist in this version  (the codex page does not say when this function was added). Anyway after manually adding the JavaScript to the theme's head element the plugin almost worked fine - links didn't take our folder structure into account.

works:
joeblogs.com</dir specified in post or page>

doesn't work:
allblogs.com/blogs/joebloggs</dir specified in post of page>

Fix it by replacing line 231 to read:

$files .= '

  • wpurl').$item['link'].'">'.$itemName.''.

 

The hyperlink created for the item didn’t have the complete blog URL in it. It assumed the blog was installed in the root of the domain. After this fix the plugin works fine.

 

Letter to Ministry of Sound

Dear sir/madam,
I am writing you to complain about the new ministry of sound website and the lack of data protection with regards to your users.

Earlier today I received an email notification about the new MoS website. The email also notified me that a new password was issued to use on the website. These are two characteristics of a phishing mail - in this case launching a new website and sending out new passwords, they could easily have been sent from a malicious source wanting me to login to their MoS-lookalike website and take my credit card details. You shouldn't send out a new password unless someone requests it on your website, because email can be forged. You also sent out my password in plain text email rather than on a secure part of your website. Anyone can read it and login to my account and purchase orders.

Also to my surprise while investigating the source of the mail, several of the links point to a http://www.c-f-1.com/ domain (update: this domain name no longer exists!), the name doesn't help to improve the trust in your email. To my astonishment the link led to a webpage with the html email, again with my password in plain sight. Have a look (link removed), I changed my password already. Let's wait for Google to index it so that anyone can search for my account information. They already found other newsletters.

Finally, I used mosdownload.com to buy my mp3s online. This site no longer works as an error comes up when it tries to redirect, due to a configuration error. My order history is gone, most of my profile is gone.

I'm very disappointed with your lack of security and care for your customers and unfortunately have come to the conclusion that I won't be using your service again, and I will recommend my friends and family to do the same, due to these trust issues.

 

TracFogbugzPlugin 0.9u-py2.5 Patch for Trac 0.11

If you use both VisualSvn + Trac (or another flavour of Subversion and Trac), and tried to integrate them with Fogbugz , you will have tried the TracFogbugzPlugin.

Trying to get this to work isn’t straightforward as it’s not compatible with Trac 0.11. You will come across the following error:

Traceback (most recent call last):
File "C:\Python25\Lib\site-packages\trac\web\api.py", line 339, in
send_error
'text/html')
File "C:\Python25\Lib\site-packages\trac\web\chrome.py", line 684, in
render_template
data = self.populate_data(req, data)
File "C:\Python25\Lib\site-packages\trac\web\chrome.py", line 592, in
populate_data
d['chrome'].update(req.chrome)
File "C:\Python25\Lib\site-packages\trac\web\api.py", line 168, in
__getattr__
value = self.callbacks[name](self)
File "C:\Python25\Lib\site-packages\trac\web\chrome.py", line 460, in
prepare_request
for category, name, text in contributor.get_navigation_items(req):
File
"c:\Python25\lib\site-packages\tracfogbugzplugin-0.9u-py2.5.egg\fogbugz\fogb
ugz.py", line 22, in get_navigation_items
yield 'mainnav', 'fogbugz', Markup('<a href="%s">FogBuz</a>',
self.baseurl)
LookupError: unknown encoding: >/">https://<<myurl>>/

To fix this line 22 needs changed, to read:

yield 'mainnav', 'fogbugz', Markup('<a href="%s">FogBuz</a>'%self.baseurl)

Or download the file below and use it as part of the installation instructions (if this is your first Python Egg you want to read about installing Trac plugins. ;)

Now it is loading but the plugin doesn't seem to work, haha.

Download: Patched tracfogbugzplugin-09u-py25