English

PHP is dead! (on addons.mozilla.org)

This is just a short note to recognize the long coming milestone of PHP being effectively off[1] on addons.mozilla.org. We started the migration in 2010 and just finished it up a couple weeks ago. After the major pages were completed it was hard to budget time for all the minor details we had implemented since there was so much other important stuff to do (I’m looking at you, marketplace.mozilla.org). Now that the switch is done though we can simplify our setup instructions for AMO, simplify our infrastructure, optimize apache for python only, have full unit test coverage – the list goes on.

Forum v3.0

A new version of Forum has been released, version 3.0. Please download the new tag or view the documentation. If you have any questions, be sure to send me an email or comment on this post. If you run into any problems, be sure to report an issue on the Github repository.

Version: 3.0
Tested On: PHP 5.3, CakePHP 2.0.3
Requires: PHP 5.2, CakePHP 2
Commit Hash: 29a069931bc3dfd5f6ec88e69cf870b34aa3ce0d
Changes:

  • Updated to CakePHP 2.0 (not backwards compatible with 1.3)
  • Updated Decoda to 3.3
  • Updated AjaxHandlerComponent to 2.0.1
  • Added a way to load custom configuration outside of config.php by creating a custom.php file

Cakephp 2 simple bookmarklet helper

Just a basic helper that renders a “post it!” bookmarklet. (in brief, it’s the content of an old post, -well, two old posts- packaged as an helper) Let your users submit content from webpages – tell them to save the rendered link to their bookmars bar.

Cakephp 2.0 Address Finder Helper

I’m publishing as open source a simple -but hopefully useful- helper. It is based on http://tech.cibul.net/geocode-with-google-maps-api-v3/, most of the credit goes to this script.

FusionCharts plugin for CakePHP 2.x

It seems like another update was due..

How to write jQuery plugins

jQuery, the most popular javascript library out there, is great for DOM abstraction. It allows you to encapsulate functionality into your own plugins, which
is a great way to write reusable code. However, jQuery's rules for writing plugins are very loose, which leads to different plugin development practices - some of which are pretty poor.

With this article I want to provide a simple plugin development pattern that will work in many situations. If the functionality you would like to encapsulate is large and really complex, jQuery plugins are probably not what you should use in the first place.
You'd rather use something like BackboneJS or jQuery.Controller in this case.

If you can't or don't want to use Backbone, you might still get away with my solution ...

The next step in my career

Today is my last day working for the Cake Development Corporation. In my three years with CakeDC, I have had the opportunity to be exposed to awesome people, projects, and have had the opportunity to learn new and exciting approaches to CakePHP development and in general, web development and production.For some time now, I have been engaged in and interested in game development, specifically un...

Vim Workshop in Berlin (April 20)

My friend Drew of Vimcast fame is organizing two half-day vim workshops in Berlin on April 20.

As a former Textmate user, I cannot overstate the productivity gains from mastering vim. With the early bird discount, the tickets sell at 75 GBP (~90 EUR), and there are only a few tickets left, so you should act quickly.

The workshops are aimed at intermediate users, so if your vim skills are non-existing or very rusty, you should probably play with vimtutor before showing up.

I'll be attending the afternoon workshop along with Tim, so hope to see you there!

--fg

Zen and the art of nearshore agile development, notes after StartupCamp Berlin 2012

One of Monterail clients is Stefan Wolpers. On top of other dozen exciting things, Stefan organizes StartUp Camp Berlin. We have been lucky enough to be invited by him to the event. So Bartosz and I spent the last weekend in a vibrant atmosphere of Berlin-Kreuzberg at Startup Camp Berlin 2012. Vibrant has actually kept on being the main theme throughout the whole event.
First of all, Berlin is a 3 hour drive from Wrocław. A very pleasant one in mid-March. The proximity is not a surprising fact while lazily scrolling through the map. Not until one actually does hop into the car and after a while finds herself amazed by the atmosphere of the city and the event itself.

Error: invalid XML tag syntax and Extplorer

A client of mine uses standalone version of Extplorer as Client section of his website. Because they are Studio for Printing materials, it’s normal, that their “production” is quite large as file size. Recently they asked me to increase the … Continue reading →

Re-designing CakePHP

Myself and the rest of the CakePHP team recently embarked on a journey to refresh and redesign the CakePHP website and brand. I wanted to delve into my process and thinking around the changes.

The cakephp.org website has been around for quite sometime. Its previous incarnation served the project amazingly well.

Codecademy – Javascript tutorials for newbies

It’s not every day you see a tutorial set that really makes you smile, but Codeyear’s attempt to teach people Javascript through weekly courses and projects is admirable, especially given the quality of the site, the clarity of the courses, … Continue reading →

Enable mod_status for CAKEPHP

I’ve been trying to isolate a CPU issue for an app running on Apache2 written with Cakephp. Apache has a module to monitor the server status with mod_status. http://www.debian-administration.org/article/Monitoring_Apache_with_mod_...

For Apache 1.2 enable mod_info and restart apache.

sudo a2enmod info
sudo /etc/init.d/apache2 restart

You should also enabled ExtendedStatus.

sudo vi /etc/apache2/conf.d/extendedstatus

Add the following

ExtendedStatus On

Once the module is enabled you have to enable the settings in the appropriate vhost in /etc/apache2/sites-enabled

Uploader v3.3

A new version of Uploader has been released, version 3.3. Please download the new tag or view the documentation. If you have any questions, be sure to send me an email or comment on this post. If you run into any problems, be sure to report an issue on the Github repository.

Version: 3.3
Tested On: PHP 5.3, CakePHP 2.0.5
Requires: PHP 5.2, CakePHP 2.0
Commit Hash: a7f98d51909a1ba74ca9cdd6a15366f19a383b8c
Changes:

  • Added a saveAsFilename option to AttachmentBehavior to save an upload without the relative path [Issue #41]

Music Artist/Track Search & Request Script

I've been a last.fm user for quite a number of years and with the release of their API (I'm aware this was yonks ago) I wanted an excuse to have a play and get to use it, I'm getting married next year with the intention of setting up a Wedding website where family & friends can visit to get infomation about the day. I thought it would be a cool idea to create an online script where people c...

NPM - An intervention

Update: Isaac commented and explained why fuzzy version specifiers are here to stay. I'll be ok with it and will adapt my workflow accordingly.

Update 2: I did not give up on the bug that is part of the story below, a test case and fix has been submitted and merged!

Update 3: NPM Shrinkwrap is now a real thing.

NPM is the official node.js package manager. Unlike many package managers
that came before, it is actually incredibly awesome, and has helped to create
one of the most vibrant communities in the history of open source.

CakePHP: Loosing translated texts

This one drove me crazy for the last couple of hours, so I thought I better share it right away.

I have a bilingual CakePHP application that displays content messages translated from English to Greek. To achieve this I wrap all my English texts inside cake's __() function and then run the cake i18n extract script in order to assemble a .pot file. Finally, I translate my original messages to Greek using the POEdit program to create and manage the necessary translations. Everything seemed to work well: Each time I added new strings, I would execute the cake i18n extract script, then open POEdit, update my .po catalogue from the generated .pot file and translate only the new texts.

Uploader v3.2

A new version of Uploader has been released, version 3.2. Please download the new tag or view the documentation. If you have any questions, be sure to send me an email or comment on this post. If you run into any problems, be sure to report an issue on the Github repository.

Version: 3.2
Tested On: PHP 5.3, CakePHP 2.0.5
Requires: PHP 5.2, CakePHP 2.0
Commit Hash: f061776a146919f3d5305bd9573c466eac24e2ee
Changes:

  • Fixed a Linux upload issue regarding multiple transforms
  • Fixed Uploader::addMimeType() to not overwrite existing values
  • Fixed Uploader::crop() when both height and width are equal
  • Fixed strict errors

Decoda v3.3

A new version of Decoda has been released, version 3.3. Please download the new tag or view the documentation. If you have any questions, be sure to send me an email or comment on this post. If you run into any problems, be sure to report an issue on the Github repository.

Version: 3.3
Tested On: PHP 5.3
Requires: PHP 5.2
Commit Hash: 710b972a367d908a33d198134417a30ef418b54b
Changes:

  • Added DecodaFilter::setupHooks() to allow filters to initialize hook dependencies
  • Added DecodaHook::setupFilters() to allow hooks to initialize filter dependencies

How To: Install Netcool Omnibus Using The Multitiered Architecture On Redhat 6.2 (Part 1)

*** JARED’S NETCOOL README ****
NOTES
– ldd and strace are your friends when tracking down libs, conf files, and mother trucking logs
- NETCOOL only runs on i686/i386 libs, you were warned (UPDATE: Jacob Steinberger on the netcoolusers.org list serv wanted me to point out that netcool runs on SunOs)
*** NETCOOL ***
[1] create netcool user as root
[2] login as netcool (do not su -, don’t ask me why, ibm’s docs say so)
[3] create dir `~/core`, transfer renamed tar to `core` and unpack (from ibm’s site CI3JDML, i renamed it for context)

tar xvf ~/core/CI3JDML_tivoli_netcool_omnibus_v731_core.tar

[4] vi /etc/hosts (*hack for now)

Syndicate content