Planet phpBB

May 28, 2012

zerokspot.com • zeroKFormer Team Member

Bye-bye ep.io

So, in less than 3 days ep.io will shut down. It was a great service and I want to use this opportunity to say thank you to Andrew and Ben for it and all the hard work they put into it.

I think it was December 2010 when I first heard about it through some chatter and later on at DjangoCon.eu in Amsterdam. At first I thought this might be interesting but I wasn't really into using cloud services for this kind of stuff. But then I got the chance to give it a try through a beta invite and some performance constraints on one of my servers. Since then PyGRAZ.org has been running on it and except for the understandable start-up delay on the free plan it was a blast! Basically, ep.io and the workflow when using it set kind of the mark for me on how I want sites to be deployed. It was just so easy :-)

So now that ep.io is gone, Heroku and Gordor seem to be these places where probably most folks will move to. Well, that or just hosting sites by themselves again, as I did with PyGRAZ.org again (with some Fabric-scripting to make deployments as painless as on ep.io).

Bye, ep.io. You will be missed :-(

(The ep.io logo was screenshot'd from the ep.io website)

May 28, 2012 06:58 PM

phpBB Twitter • the phpBB Team

phpbb: London phpBB Community Meetup - 9th June 2012: Following the success of last year's Manchester Meetup, another p... http://t.co/YxvfzHRS

by phpBB at May 28, 2012 01:40 AM

phpBB.com Announcements • the phpBB Team

London phpBB Community Meetup - 9th June 2012

Following the success of last year's Manchester Meetup, another phpBB Community Meetup has been organised in the UK.

phpBB Meetups are a great way to see who is really behind the phpBB Project, put faces to usernames, and meet new people.

Where?
London

Who?
Anyone who has a passion for phpBB

What?
We will meet up and head to lunch at Nandos. The afternoon activity is still being planned. In the evening, we will retreat to Bodeans.

When?
Saturday 9th June (The Queen's Birthday on the year of her jubilee).
11AM

If you wish to attend, please register in the next few days to ensure adequate space. You can register for free at http://phpbblondon2012.eventbrite.com/.

More details will be confirmed within the next few days. You can view the latest information or ask any questions you might have in the following topic: viewtopic.php?f=64&t=2153759.

I hope to see you there.

by Unknown Bliss at May 28, 2012 12:46 AM

May 22, 2012

phpBB Twitter • the phpBB Team

phpbb: Help Us Automate phpBB Testing: Automated Testing is a vital part of the development cycle, as it decreases the ... http://t.co/ae5n7zuE

by phpBB at May 22, 2012 06:08 PM

phpBB.com Blog • the phpBB Team

Help Us Automate phpBB Testing

Automated Testing is a vital part of the development cycle, as it decreases the amount of time developers must spend making sure certain functionality works, and prevents new patches from breaking areas of functionality that are covered by the test suite. As you may have guessed, Automated Tests are simply sets of functionality tests that are automatically run as new features are developed, bugs are fixed, and changes are made to the codebase. Nothing is merged into the core phpBB repository without ensuring that whatever changes are being made do not break any existing functionality. If any tests fail, the developer is able to save time and energy that would have been spent later on, when a bug report would have been filed, by finding the problem and fixing it up front. Not only does this help by increasing the efficiency of the development cycle, but it also improves the quality of the software as a whole, because we can be certain that all features work as intended without having to manually test each one every time something is changed.

That sounds great, doesn’t it? Well, it is. The only problem is, only a very small portion of the code is actually covered by tests. One reason for this is because the automated tests have not been around for as long as the phpBB3 codebase, so they have had to be written long after the features they are testing have been merged, rather than in conjunction with the features themselves. Another reason is that there are two types of tests that need to be written: unit tests and functional tests.

Unit tests are simply tests that attempt to run certain peices of code that do not require a webserver or phpBB installation to work. These tests are generally easier and faster because all of the information they need is readily available and hardcoded into the test suite.

On the other hand, Functional tests are needed to run functionality that requires a phpBB installation. For instance, if you want to test whether an authentication plugin works, you have to actually be able to test logging into a board. For that, you need a database with a user account. You also need to be able to test that a cookie is sent. Unit tests cannot handle that, but Functional tests, are able to simulate browsing and using the forum almost just like a normal user.

However, functional tests cover even less of the code and functionality than unit tests do, and time that is spent writing functional tests is time that is not spent writing new functionality or expanding on existing functionality. So while we need functional tests to reap the benefits I explained above, it does not make sense to devote all of our time to writing tests and therefore have a significant “dry period”, during which no new or changed functionality is incorporated into the software.

This is where you come in. I, like many of you, was kind of intimidated when I first started to contribute to the core of phpBB. I felt much safer writing MODs because I knew my work would not be scrutinized as much as if I were to submit a patch to the core (that is not to say that the MOD team does not carefully review each and every MOD, but rather, that my code would likely not be viewed by as many people and would not be held to as high a standard). However, I found that by writing functional tests, I not only was able to contribute to the betterment of the software, but I also was able to better learn how things worked and how I could therefore use the things I learned in not only my MODs but also my core patches.

So all of that to say, there is plenty of work to be done and we would love to see contributions to our test framework from our vast, talented phpBB community. As I said, these contributions help not only the software and phpBB community as a whole, but also can give you the knowledge and skills you need to improve your MODs and, should you decide to, your patches to the phpBB software.

There is a wealth of information in the phpBB Development Wiki (see Automated Tests) to get you started with writing and running tests. And if you have a question or need help understanding how to do something, you are welcome to ask me or another developer in the #phpbb-dev IRC channel.

May 22, 2012 05:21 PM

May 20, 2012

zerokspot.com • zeroKFormer Team Member

tmux, split-window and pwd

For the last couple of weeks I've been playing around with tmux as kind of an alternative/addon/... to iTerm2 and my terminal-focused work-style in general. One things that drove me nuts again and again is that -- for some reason -- I could never get the split-window command to respect my current working directory. I tried the first two solutions mentioned on the ArchLinux-wiki but the second simply did clash too much with how I'm using split-window and the first solution didn't work at all (for some reason PWD didn't propagate correctly and so default-path always defaulted back to the cwd of tmux' parent shell).

With all other options gone I started to look into the third solution. This one involved extracting the PWD from the pane's shell from the outside via /proc. But since I'm working on OSX, this doesn't work quite like this.

The main differences here are that I can't use /proc to look for the PWD but have to rely on lsof and that ps doesn't have a forest-rendering. So the resulting script looks like this:


#!/usr/bin/env ruby
=begin
Helper script for tmux' split-window command that retains the original PWD
This script is based on https://wiki.archlinux.org/index.php/Tmux#.2Fproc_method
=end
SHELL = 'reattach-to-user-namespace -l zsh'

session_id, window_id, pane_id = `tmux display-message -p "#S:#I:#P"`.chomp.split(/:/)
tty = nil
in_sessions = false
in_right_session = false
in_right_window = false
in_right_pane = false

# First step is to find our tty
`tmux server-info`.each_line do |line|
    break if line.start_with? 'Terminals'
    if line.start_with? 'Sessions: '
        in_sessions = true
        next
    end
    if in_sessions and line =~ /^\s\d+: #{session_id}: \d+ window..*[flags=.*]/
        in_right_session = true
        next
    end   
    if in_right_session and line =~ /^\s{3}#{window_id}:/
        in_right_window = true
        next
    end
    if in_right_window and line =~ /^\s*#{pane_id}: \/dev\/(\S+) /
        tty = $1
        break
    end
end

raise "No matching tty found" if tty.nil?

# Now let's find the process with this tty
pid = `ps -t #{tty}`.split($/)[1].split(' ')[0]

# ... and now its PWD
pwd = `lsof -a -d cwd -p #{pid} -F n`.split($/)[1][1..-1]
args = ARGV * " "

# Let's put it all together by calling split-window with the shell and the path
`tmux split-window #{args} 'cd #{pwd}; #{SHELL}'`
Gist

Thankfully, getting access to a process' PWD is pretty straight forward with lsof -d cwd and ps has a nice shortcut for filtering for a specific tty. And yes, I know that the tty-scanning is really rocky up there and this is probably the one part of this script that will evolve over time. The solution for the missing "--forest" support is also not perfect yet, but so far it works just fine for me :-)

So, once you've put this script somewhere in your path (for me that ~/.local/bin/split-in-cwd.rb) and made it executable, all that is left to do, is to add it to your split-window bindings:

unbind s
bind s run '~/.local/bin/split-in-cwd.rb -v'
unbind v
bind v run '~/.local/bin/split-in-cwd.rb -h'

May 20, 2012 05:38 PM

May 17, 2012

zerokspot.com • zeroKFormer Team Member

Maintainable JavaScript

When you're working on your own on a project with JavaScript you usually know how you like your code formatted, structured and organized. But once you are part of a team, be it on a spare-time project or during office hours, there needs to be consensus about this not only for you but also for the rest of the team. Only very few things are a bigger waste of time then ending up with badly formatted or structured code because everyone was adhering to their own personal coding style.

Nicholas C. Zakas with his new book "Maintainable JavaScript" tries to prevent this by comparing multiple coding style-guides and describing common JavaScript coding practices as well as how to automate things like testing against these best practices and he does a pretty good job at that. I bought this book as in the "Early release" version, so some of the points I make down below might not be applicable anymore.

The first part compare different style-guides and does some cherry-picking here and there. The result is very informative and luckily comes pretty close to the style I personally prefer. Also, the author does mention JSHint and JSLint right from the get-go. This first part might perhaps seem a bit basic for most readers but the comparison between the JQuery coding guidelines and those of other projects make it quite an informative read.

The second part describes common coding practices like avoiding global variables, loose coupling, exception handling and so on. Personally, this was basically the part of the book I was expecting when reading the title and I was not disappointed. There was some very good stuff in there like how to do exception throwing and handling in a cross-browser compatible manner. Also the drawbacks and advantages of browser-detection vs. feature-detection where described very clearly.

For some of the topics discussed in this part there are already tons of solutions in the popular JS frameworks like JQuery, Dojo and YUI available. Where appropriate the author includes examples from those libraries.

One thing I would have preferred reading more of here was the whole modularization of JavaScript development. The author goes into that when explaining how to get rid of global variables but this and how to clearly structure a larger project would have been a killer-chapter for me. There is also no mention of the whole CommonJS-approach on modularization which goes hand-in-hand with a total lack of server-side discussions. There is a short chapter on AMD and also RequireJS gets mentioned but more would have been greatly appreciated.

Perhaps the third part could have lost some pages to put those into part two ;-) This third and last part of the book deals with automating what was taught before and making it ready for prime-time via deployment. The tool of choice here is Ant, which receives IMO a bit too much focus here, but given that quite a lot of tools around the JS ecosystem are Java-based this makes sense. That said, it kind of made me skip most of this part since I have already worked with most of the tools mentioned in this chapter before.

Verdict

If you're looking for a book about best practices and coding style-guides for client-side JavaScript I can really recommend this one. Everything is well explained and well structured. There are some rough edges here and there but overall it is an enjoyable read esp. thanks to the second part.

4/5

May 17, 2012 12:45 PM

May 15, 2012

Ramonfincken.com • Ramon Fincken

[solution] Cronjob does not respect your bashrc or other library profile settings

If you need a cronjob and use the exact code and user as CLI .. you may find that libraries cannot be found.

It turns out that even when using the same user on which CLI calls work, the ld_library_path is NOT read or applied.

So when using a bash shell script, make sure you have your environment paths in order before actually firing your line(s) with code.


In my case:

cron bash call to this file:

Code:
#!/bin/bash

# Source global definitions
if [ -f /etc/bashrc ]; then
   . /etc/bashrc
fi

# User specific aliases and functions
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/home/dev/all_libraries:/opt/MATLAB/MATLAB_Compiler_Runtime/v714 ;
export LD_LIBRARY_PATH

# fire all code here

by ramon fincken at May 15, 2012 01:08 PM

[imagej] Unknown command PNG

Problems with IJ.saveAS("PNG",fullpath); ?

use this:

Code:
   /**
    * Uses imagePlus and writes PNG file as write_to_png file
    * @author Ramon Fincken http://www.ramonfincken.com/permalink/topic256.html
    * @param imp1
    * @param write_to_png
    */
   private void write_imp_as_png(ImagePlus imp1, String write_to_png)
   {
      FileSaver fs = new FileSaver(imp1);
      fs.saveAsPng(write_to_png);
   }

by ramon fincken at May 15, 2012 11:50 AM

May 14, 2012

Ramonfincken.com • Ramon Fincken

SSH without password (using keys)

This is a partial quote from http://www.linuxquestions.org/questions...rd-533684/ User: Brianetta

The way that does not require a password. You can use public/private key authentication instead of passwords with SSH. I'm going to assume that you're using OpenSSH, which comes with practically every Linux distribution that there is.


  • Configure your SSH server to accept private key logins. In /etc/ssh/sshd_config make sure that there's a line that says PubkeyAuthentication yes (and that there is no # infront of it). If you change this file, you need to restart the sshd service. If you're not sure, stop and ask somebody here before you break it.
  • On your local machine (not the server), create yourself a pair of keys with ssh-keygen -t rsa (you can use other options than rsa, but I'm keeping it simple). Do not specify a password. Save the keys in the locations prompted.
  • Open the contents of the id_rsa.pub file that you just created (it's one very long line of text), and copy the contents into the end of the file $HOME/.ssh/authorized_keys on the server machine. Create the file if it doesn't exist.

Now you should be able to ssh user@remote.host without a password. If that works, you can use it in scripts, etc. Because you have a private key with no password to protect it, it's important that you make sure that nobody gets their grubby hands on your id_rsa file. They can have the id_rsa.pub file (it's public, you see) but the other one's your precious.

If you think somebody has a copy of your id_rsa file, you can delete the line that you added to authorized_keys on the server, to disable that key.

by ramon fincken at May 14, 2012 09:06 AM

May 08, 2012

Left on the Web • Stefan KoopmanschapFormer Team Member

Boston PHP community, I need your help!

This morning, I had a nice e-mail in my mailbox telling me I got accepted into the NorthEast PHP conference with no less than 3(!) topics! Awesome, and I would love to be part of the conference, however... the conference is organized by the community, and the way they work, there is no travel reimbursement.

May 08, 2012 01:57 PM

May 07, 2012

Ramonfincken.com • Ramon Fincken

[matlab] Get file directory or extension of file

Use fileparts and you will get the directory without using any / or \ explode usage.


Code:
>> fullpath
fullpath = /home/user/www/site/trunk/tempuploads/test/174_bw_tractsresize.png

>> [pathstr, name, ext] = fileparts(fullpath)

pathstr =
/home/user/www/site/trunk/tempuploads/test

name =
174_bw_tractsresize

ext =
.png

by ramon fincken at May 07, 2012 11:49 AM

[matlab][solution] Get file directory or extension of file

Use fileparts and you will get the directory without using any / or \ explode usage.


Code:
>> fullpath
fullpath = /home/user/www/site/trunk/tempuploads/test/174_bw_tractsresize.png

>> [pathstr, name, ext] = fileparts(fullpath)

pathstr =
/home/user/www/site/trunk/tempuploads/test

name =
174_bw_tractsresize

ext =
.png

by ramon fincken at May 07, 2012 11:49 AM

April 27, 2012

Ramonfincken.com • Ramon Fincken

[centos] Tweak your swappyness

Want to control your swappyness in CentOS?
http://www.nzlinux.com/2009/04/tweak-your-swappiness/

Example, set to 20
Code:
su
echo 20 > /proc/sys/vm/swappiness

by ramon fincken at April 27, 2012 01:10 PM

April 26, 2012

Ramonfincken.com • Ramon Fincken

[solution] MySQL #1093 - You can't specify target table for update in FROM clause

Having #1093 - You can't specify target table for update in FROM clause problems?

I encountered one today, trying to delete old record in a table based on a select based on a timestamp column in the very same table.

I saw the light when I found this thread:
http://stackoverflow.com/questions/8333...rom-clause

which cheats MySQL by using a temporary table like so ( this is the example from Stack )
Code:
UPDATE giveaways SET winner = '1' WHERE ID =
(
  SELECT id FROM
  (
    SELECT MAX(ID) as id FROM giveaways
  ) AS tmptable
)

by ramon fincken at April 26, 2012 08:55 AM

April 24, 2012

phpBB Doctor Blog • drathbunFormer Team Member

Google Summer of Code

I found it interesting to read that phpBB is participating in the Google Summer of Code this year. One of the features that they hope to get out of the process is a post revision history… something that I started designing years ago, and will be releasing into production on my largest board within the next few weeks! Great minds thinking alike and all of that…

Turns out that in this case, phpBB2 was probably easier to work with than phpBB3. With phpBB2 the post text is already separated from most of the other post meta data (such as poster, poster IP address, and so on) which made it very easy to design a way to track post revisions. In phpBB3 they combined the phpbb_posts and phpbb_posts_text tables into a single table. In order to track post revisions in that case, the design would call for splitting the text out into a separate table in order to track the post text revisions without having to duplicate all of the other post meta data.

In any case, I have finished the coding and testing for everything and it’s functional. What’s left is going back and adding in some security checks to make sure people can’t do things they’re not supposed to do…

by Dave Rathbun at April 24, 2012 06:33 PM

April 23, 2012

phpBB Twitter • the phpBB Team

phpbb: Google & phpBB Summer of Code Participants Announced: As we excitedly announced last month, phpBB is participati... http://t.co/J9L0f09E

by phpBB at April 23, 2012 07:51 PM

phpBB.com Announcements • the phpBB Team

Google & phpBB Summer of Code Participants Announced

As we excitedly announced last month, phpBB is participating in Google Summer of Code 2012.

phpBB received a large number of fantastic proposals and we have had a blast getting to know some of the applicants over the past few weeks. Our mentors dedicated their utmost attention to carefully ranking the entries and filling the provided slots with proposals that we feel will have the greatest benefit for the phpBB community. We sincerely wish that we could accommodate every worthwhile proposal, however resources are limited and we are focusing on facilitating the best possible experience for our winners.

Without further adieu, it is my pleasure to announce our 2012 GSoC winners (In no particular order):

  • Search Backend Refactoring by Dhruv Goel, India
    Dhruv will focus on enabling proper abstraction in the search system and allowing for individual backends to modify the user interface. He will also integrate Sphinx and PostgreSQL Fulltext search into the phpBB codebase.

  • Attachment Improvements by Kim Mantas, Hong Kong & UK
    Kim will improve both the interface and functionality of the attachment system by implementing multiple file uploads, an improved user interface and a tool for downloading several attachments at once.

  • Auth Plugin Refactoring & User Integration by Joseph Warner, United States
    Joseph will enable phpBB to simply integrate with third party authentication services. The generic interface will allow administrators to configure which services to accept or add additional services at a later time.

In addition to the slots provided by Google, phpBB will be extending the program by two additional slots. phpBB Summer of Code 2012 will follow much of the same guidelines set forth by GSoC. This year, both slots have been awarded to students on our own development team:

  • Closing RFCs Like a Boss by Joas Schilling, Germany
    Joas will focus on completing some existing RFCs, including events, proper grouping for the teams page, improved ACP layout, soft delete, a log class, native php timezone handling, and others.

  • Post Revisions/Edit Log by David King, United States
    David will implement a post revision system, enabling moderators to view detailed differences between edits made to a post with the ability to revert. This feature will have an option to be disabled, and can be further configured via the ACP to enable revision pruning.


If your proposal was not chosen, please accept our sincerest gratitude for your participation. Please do not feel discouraged to participate in the phpBB community regardless of GSoC as there are many opportunities to apply your skills.

Thank you,

The phpBB Team


You may discuss this announcement in the discussion topic

by Marshalrusty at April 23, 2012 07:18 PM

Ramonfincken.com • Ramon Fincken

Mount /tmp in RAM memory

fstab trick:

Code:
tmpfs                   /tmp                    tmpfs   size=512m       0 0


the 512m stands for itself ..

by ramon fincken at April 23, 2012 09:54 AM

Mount var/www as home/user/www

Here we go:

Code:
/home/myuser/www      /var/www      none   bind      0 0

by ramon fincken at April 23, 2012 09:49 AM

April 20, 2012

Ramonfincken.com • Ramon Fincken

[java] Still not finding your JAR classes?

Have you considered adding each JAR file to the classpath like so?

Code:
clear;java -Xms1500m -Xincgc -Xmx2500m -cp .:/home/myuser/workspace/myproject/build/classes/servlet:/home/dev/all_libraries/javabuilder.jar:/home/dev/all_libraries/tracts.jar:/home/dev/all_libraries/java_blue_filter_commandline.jar:/home/dev/all_libraries/java_rgb_bw_mask_commandline.jar:/home/dev/all_libraries/java_treshold_rgb.jar:/home/myuser/workspace/myproject/WebContent/WEB-INF/lib/ij.jar:/home/dev/all_libraries/mysql-connector-java-3.1.14-bin.jar general_package/My_cron

by ramon fincken at April 20, 2012 08:26 AM

April 18, 2012

phpBB Twitter • the phpBB Team

phpbb: Introducing Forumatic - Managed phpBB Hosting: We are extremely excited to announce the availability of Forumati... http://t.co/9KSP0sgO

by phpBB at April 18, 2012 10:21 AM

phpBB.com Announcements • the phpBB Team

Introducing Forumatic - Managed phpBB Hosting

The phpBB team is extremely excited to announce the availability of Forumatic, a managed hosting platform powered by the phpBB software you know and love.

Forumatic was born out of a desire to establish a comprehensive plan for phpBB to remain the competitive project it has been for nearly 12 years. Unlike conventional hosting, Forumatic is tailored specifically toward forum owners — both professionals and amateurs — who are looking to quickly launch an online community without the cost of hiring a professional staff.

Absolutely no experience is required — just choose a name and fill in a form. Forumatic will handle all the maintenance, both hardware and software, leaving you free to focus on building your community. There are no contracts, and administrators can export their data at any time.

Forumatic users also effectively contribute to the phpBB community. The model employed by Forumatic is the result of careful study of the constructive relationships employed by Automattic/Wordpress, Acquia/Drupal, Canonical/Ubuntu and a host of other open source organisations. Revenue generated by Forumatic will be put toward the phpBB community in the form of full time developers, events and other productive endeavors, backing up the team and improving development time.

We welcome you to check it out at http://www.forumatic.com

Thanks :)


You may discuss this topic in the discussion topic.

by Marshalrusty at April 18, 2012 09:27 AM

April 16, 2012

Left on the Web • Stefan KoopmanschapFormer Team Member

GlobIterator: Easy access to specific files

For a project I am working on I needed to iterate over all .xml files in a specific directory. I started out with a DirectoryIterator, then considered I didn't want the XML filtering to take place inside my foreach loop. I decided to add a FilterIterator to the setup, but then felt this was not the right solution either. So I turned to my favorite SPL guru, Joshua Thijssen, to see if I was overseeing some kind of filter-option in the DirectoryIterator. I didn't, but I did oversee something else: GlobIterator.

April 16, 2012 02:54 PM

April 15, 2012

zerokspot.com • zeroKFormer Team Member

Keeping image centers in the center

If you ever need to keep an image's center centered on a website no matter what viewport size your browser has, there is a neat little trick I stumbled upon on StackOverflow provided by Amber Yust. The goal is that the image is cropped not only on the right but also on the left side to keep the center of the image also in the center of the screen. The appoach mentioned by Amber is to position the image absolutely with an offset of 50% from the left and then re-adjust this offset using a negative margin of minus half the image's actual width.


#container {
    position: relative;
}
#container img#demoimage {
    display: block;
    margin: auto;
    position: absolute;
    left: 50%;
    margin-left: -600px;
/* If 600px is half of your image's width */
}

This has one caveat, though: You have to know the dimensions of the image in advance or determine them via JavaScript and adjust the negative margin after the fact.


(function(img) {
    // This will get called, once the image has actually been
    // loaded from the server
    function updater() {
        img.style.position = "absolute";
        img.style.left = "50%";
        img.style.marginLeft = "" + -img.width / 2 + "px";
        console.log(img.style.marginLeft);
    }
    img.addEventListener('load', updater, false);
})(document.getElementById("demoimage"));

If JavaScript is disabled, the margin:auto up there will at least center the image if there is enough room for it and prevent a slight jumping if JavaScript is enabled and the repositioning takes place.

For IE you will have to add some extra code to ensure your event is fired even then the image is already available within the browser's cache, but that's mostly it.

Another approach to this issue, which I usually prefer, is to have the image itself be situated in the background of the controller and positoned in its center. The upside of this solution is, that you don't need to position the image using JavaScript if you know its height to make room for it in the container. A downside here is, that without JavaScript this won't work if there is an imagemap on top of the image (which was the case and the original reason why I was looking for a different solution).

April 15, 2012 06:13 PM

Chrome Buran

Everytime I travel I take some time to also check for local retailers of messenger bags et al. It kind of started more than 10 years ago with trip to Hamburg where I picked up my first Crumpler bag and it continues to this day with my visit to the NYC Chrome store about a month ago.

This time I left the shop (on the second visit) with a brand new Chrome Buran laptop messenger bag which should replace the Crumpler Spanky Jones for me. The problems with the Spany Jones is, that besides the laptop and some cables, you don't get all that much into it. The whole flying zipper concepts gets in the way here.

I want something new

The only other bag I could seriously use a replacement for this was that first Crumpler bag I bought in Hamburg (the Sticky Date) which is massive, though and not really something I'd want to carry with me every day on my way to work.

The Buran

That's where the Buran comes in. It is slightly larger than the Spanky Jones (45.72 x 31.75 x 15.25 cm vs 41.00 x 31.00 x 19.50 cm) but it has so much room for everything I want to have with me. I guess, the comparison is not really fair, though, since they both have difference target audiences. While the Crumpler bag is mostly a general purpose bag it is quite obvious that the Chrome bag is mostly for bike commuters with the tight shoulder bag and the region on the shoulder pad where you can attach utility bags etc.

<figure> <figcaption>

The Chrome Buran

</figcaption> </figure>

Right now I have among other things my 15" MBP, a large A4 notebook, a moleskin-style small notebook, various pens and fountain pens, a 0.5l water bottle, a book, a document map, some duct-tape ... The Spany Jones would only hold the laptop, the cables, the moleskin and the pens comfortably.

The bag is mostly divided into 3 parts: The main compartment which also holds a separate laptop sleeve, a utility compartment with things like pen holders, and the front of the bag which has two pockets with about the dimensions of a Kindle.

<figure> <figcaption>

Tons of space

</figcaption> </figure>

Regarding wearing comfort, unlike most Crumpler bags, the Buran doesn't have a padded back but the padding of the laptop sleeve is enough to not make it unfortable when you have a laptop with you. In general it took me quite some time to adjust the back to a way I truly enjoy wearing it, but once you're there, it is awesome. Part of the comfort is also the belt buckle. At first I thought of this more a toy or even just a design element, but it is incredibly useful. After a couple of days I never took the bag off without using the buckle. You just grab the briefcase handle, hit the button and off it goes!

<figure> <figcaption>

The magic buckle

</figcaption> </figure>

The position of the support strap for when riding your bike takes a bit of getting used to but it keeps the bag in place very well. And unlike other solutions this one even keeps the hard parts away from you by placing the shoulder strap between it and your body.

When it comes to weather resistance and resilience I have high hopes there. The material looks and feels very strong and there is quite a lot of trampolin in there, so water shouldn't be a problem.

Verdict

So to sum this up, I like this bag a lot. It is not cheap (155 USD before taxes) and when you get it and plan to commute using your bike with it also spend the extra 10USD for a small utility pocket (attachable to the shoulder pad). This combo is really awesome! This is so far the first messenger bag I've owned, that combines space with not being massive and being great to carry when biking.

5/5

April 15, 2012 03:54 PM

April 13, 2012

Left on the Web • Stefan KoopmanschapFormer Team Member

Setting millisecond-timeouts with curl

I'm currently working on a project where I need to curl to an external server to get some information. If this takes too long, I fall back to a local solution. The timeout for this should be really, really low, so we decided on a 250ms timeout. While testing with this timeout feature, for some reason it *always* used the local fallback. I couldn't figure out why, as when I did a manual curl to the external server, it took 50ms at maximum, way below the timeout value. Turns out it is a problem with libcurl.

April 13, 2012 02:34 PM

April 11, 2012

Left on the Web • Stefan KoopmanschapFormer Team Member

Using custom namespaces with (C/S)ilex and Composer

For a new proof of concept application I'm building, I need both a simple web interface as well as some commandline tools. I decided to use Silex for the web interface and Cilex for the CLI tools, and opted for using Composer for installing these dependencies into my project. I ran into some issues with the custom project libraries I was building for this application however. Registering my custom namespace into Silex and Cilex didn't result in the classes being loaded for some reason. Composer helped me out though.

April 11, 2012 03:10 PM

April 09, 2012

phpBB Doctor Blog • drathbunFormer Team Member

Party Like It’s 1992

Alternate title for this post was “The Butterfly Effect.” You have have heard about that concept, where a butterfly flapping its wings in New York causes storms in Tokyo or something along those lines. I had a similar moment this weekend when I discovered that a clock being set ahead by one hour resulted in iTunes deleting songs after they were synced to my iPod. It’s a long story, so I’ll start at the beginning.

NetGear Duo Backup Process

My last post on this blog was about how I used a shell script on my NetGear Duo to automate the backup process for my various phpBB2 boards and other web sites. As part of that post I wrote:

To make sure I didn’t miss out on backup files any more I also added a line at the end of the process to email me the results of the backup script. Now each morning I can check my smartphone and confirm that the backup process ran correctly the night before.

For a while this backup process ran just fine. The notification came in to my phone just as expected. Then at some point I noticed that the back up process which was supposed to run at 2AM was instead running at 3AM. I did not worry about it too much. I just assumed that there was something going on with the cron schedule and I would look at it later when I had time. The important issue (downloading the back up files) was being handled, albeit at a different time than expected.

Ancient Virus

Remember nimda? It was a virus that came out back in 2001. I guess the formal classification is that it was really a worm, not a virus, but many folks use the terms interchangeably even though they’re not the same. I had some friends with some older computer hardware that they were trying to retire, but they still had some data on the older machines that they were trying to retrieve. The problem is that the files they needed to move were too big for a thumb drive, this particular computer had no cd-writer (it was from 2000, after all), and they weren’t comfortable removing the hard drive and moving it to a new machine. So they brought it over to my house.

I first tried removing the hard drive and putting it into an external drive chassis to read the files. Interestingly enough, the drive would not get show up. :-? I wasn’t sure why, but that wasn’t the problem I was trying to solve. I noticed that the original computer case had a network port, so I decided to put the hard drive back in the box and connect it to my network. We had already established that the machine would boot up so I knew that would work.

As soon as we did that, my own computer started going crazy, making all sorts of beeps and noises! Turns out that this ancient machine was infected by the Nimda worm, and as soon as it got connected to my network it started to spread. Funny, being attacked by a ten-year old worm! I say “funny” because my AVG installation seemed to be doing its job and properly sending all of the infected files to the quarantine. I guess if you’re in the anti-virus (anti-worm) market, you had better make sure that you can capture anything that’s ten years old just as efficiently as newer stuff.

Ultimately we were able to recover the files for my friends, and I learned my lesson. The next time they brought over a computer I set up an isolated network between their machines rather than attach them to my network.

Interesting footnote: my iTunes library is stored on my NetGear device, both for redundancy and for file sharing purposes. Because it’s shared, that particular volume is open to the network. Because it’s open to the network, I think Nimda dropped a file into every single folder, which I then had to clean up. More on this later.

iTunes Difficulties

Around the same time iTunes released a new version (10.6) that was supposed to handle album artwork better. Now normally I am not a fan of jumping on the latest update. In fact I have my “automatic update” turned off for iTunes just to avoid experiencing a broken system when something that I have is already working. But in this case I had experienced a number of issues with managing my iTunes art, so I decided to install the update. It does, in fact, handle album artwork much better so I was pleased with the update.

A few days later I made a trip to a local used book / compact disc store and came home with a stack of about 20 cds or so. I ripped them using iTunes, reset the artist from “First Last” format to “Last, First” as I like to do, and downloaded album art from my favorite album art site Album Art Exchange. These are all steps that I normally would do. While performing these various steps I was also listening to some of the new music that I had purchased. (”New” is a relative term, as I recall on this particular trip I found a number of “classic rock” artists from the 80’s so it was a nice blast of nostalgia.) Once I had performed all of my updates I synced iTunes to my iPod.

Here’s where it gets weird.

I went back to play some of the songs, and they were gone! The files were physically missing from the hard drive.

Investigation Part I

Remember that earlier I mentioned that my iTunes library is stored on a public network share, and that it had been attacked by Nimda, right? That was the first area I investigated. I first did a full scan of the entire system with AVG. I did a search for the file “droppings” that Nimda had left behind, and when I found them I deleted them or removed them from the AVG quarantine. I wondered if the worm was renaming some of my audio files rather than creating these as new files, but the only songs that were deleted were new ones. Nothing that had been ripped months (or years) ago was being deleted, it was only the new files.

I downloaded some specific scanners designed to find and remove Nimda and confirmed that I was infection free. Now what?

Investigation Part II

I re-ripped the music from cds, and carefully repeated the process. It seemed that once the songs were on the iPod, as long as I recovered them somehow iTunes was fine. It did not do any further deleting. I wasn’t sure what was going on, but at least the problem was something I could recover from. Next I ran a controlled test. Here’s what I did, and what I observed.

  1. I ripped three new cds (new meaning ones that I had not ripped from my collection yet)
  2. I navigated to the folder and confirmed that all songs had been ripped. I then zipped up the contents of each folder.
  3. I made some minor edits to the data once the cds were ripped. As mentioned above, I prefer artist names to be “Last, First” rather than “First Last” so I generally update the artist and the album artist to reflect this. I also have a group tagging strategy, so every song has at least one entry in the grouping field. All of this worked fine.
  4. I sync’d to my iPod. But this time I kept a Windows Explorer session open on one of the new folders. Gotcha… I watched some (but not all) of the files disappear.
  5. I then checked my iPod. The files were there on the iPod, they just were no longer on my hard drive. Of the 3 new albums, here are the specific details.

    Album 1 – 11 tracks ripped, track 1, 3, 5, 6, 8, and 10 missing after sync
    Album 2 – 9 tracks ripped, track 1 missing after sync
    Album 3 – 11 tracks ripped, all 11 tracks deleted during sync process

    Seemingly a random sequence of events. I am not sure what to make of this right now.

  6. To recover I unzipped the archived files I made for each album, and verified that iTunes could see the data (no more ! next to the song).
  7. I sync’d to my iPod again. Now remember that the songs already exist on my iPod, they were just deleted from my hard drive. So there’s nothing to update. After the sync (the second time) the songs are still there on the hard drive, still on the iPod, and no issues.

What About Other Data?

At this point I had eliminated the Nimda worm from consideration. I went through some other applications and carefully created specific files on various folders throughout my network disk device. I opened / edited / closed and did a number of other operations. Nothing I did deleted files in other areas of the network disk device, so at this point I eliminated that from consideration. It really seemed to be the iTunes 10.6 update that was the culprit here, but how to fix it?

10.6.1 came out a few weeks later, and I immediately updated. It did not fix my problem.

Investigation Part III – Isolation

I decided to try a different iTunes installation. I repeated this experiment with the same cds on another computer. This computer also has iTunes 10.6 but is only used to sync to an iPhone belonging to my wife. There were no songs on this computer prior to me adding these test albums, so the library is very small. The library on my computer contains over 40,000 songs. Nothing went wrong on my wife’s computer, which is also running Windows XP. The primary difference is that on the second computer the iTunes library is stored locally rather than on the network device.

But I have already done what I can to eliminate the network device as the culprit.

I’m going in circles.

On my last test, back on my computer, I ripped a single cd and did not do any of my normal steps. I ripped and then moved immediately to sync to my iPod. The entire album – all 21 tracks – was deleted. Even the folder was removed! :shock:

Butterfly Wings

Yesterday (Sunday) I checked my email for the back up process. It ran, but all of the files were stamped August instead of April, and the year was 1992! I opened a shell session on the network disk device and confirmed that yes, it thought the date was 1992. I opened the administrator tool and confirmed that the date there was also showing as 1992. The device was set up to sync to a time server hosted by NetGear, so I turned that off and reset to the proper time manually. I confirmed that the new date took, and then went back and reset to the NetGear time service. It was back in 1992 again. A quick check of the NetGear forums found several other posts about the same thing, some of which suggested moving to a different time service.

Now it gets interesting. When I moved to a public time service (off of the private NetGear hosted service) not only did I get the correct time, but the hour difference mentioned at the very beginning of this post was also corrected!

All of a sudden a light went off. Could the one-hour time difference be impacting my iTunes?

Problem Resolved

In my earlier tests, when I ripped and immediately synced a single album, it meant that the entire set of songs was processed within an hour. I wondered if these songs were being deleted because iTunes was confused. According to my network disk device, these files would have been ripped one hour into the future! I know iTunes tracks a ton of data, including last played date, last skipped date, and of course the ripped date. Since the ripped date and the file create date on the operating system were out of sync by an hour, I can only assume that iTunes was doing something weird and ultimately deleting the files. The reason the deleting was more random when I ripped a bunch of songs was because (I guessed) the overall process took longer than one hour. If I worked quickly, more songs got deleted. If I took my time, fewer songs were deleted.

To test this concept I deleted the most recent album from iTunes and synced my iPod to clear everything up. I then ripped and synced the same album and none of the tracks got dropped. Everything was processed just fine. Earlier using these same steps all 21 tracks had been deleted.

Ultimately it appears that the Nimda worm was a red herring. It had nothing to do with the issue. The network drives were also functioning perfectly from a mechanical perspective. The network was also fine. I was not having a problem with any other application, only iTunes.

It was a combination of the network time service being wrong in conjunction with some weird program bug in iTunes that was causing random files to disappear. Once I reset my time using a public time service (the same one used for my Windows system) iTunes functioned fine.

That’s the butterfly effect. A clock is wrong by one hour and random music tracks are deleted as they are synced to my iPod.

That was my fun for the month. How was yours? 8-)

by Dave Rathbun at April 09, 2012 05:50 PM

April 06, 2012

ericfaerber.com • wGEricFormer Team Member

Using Maven to Create and Install CQ5 Package

Creating components using CRXDE and CRXDE Lite can be frustrating. Both are buggy and are different environments than what you are use to working with. You can use Maven to create a package that it can then install the package in CQ5.

If you have ever extracted a package then you’ll see that there are two folders within it, jcr_root and META-INF. Both of these files are important and they determine how the Maven project should be setup. META-INF holds the filters (paths) that the package contains. jcr_root has all of your files for components, templates, etc. I typically put these files in src/main/content in the Maven project so my code will have that path.

First thing you need to do is in pom.xml under <build> add the following code so that it knows to include your files in the bundle. This also excludes any file vault (VLT) files.

<resources>
    <!-- filter meta information to get some properties into the files -->
    <resource>
        <directory>${basedir}/src/main/content/META-INF</directory>
        <targetPath>META-INF</targetPath>
        <filtering>true</filtering>
    </resource>
    <!-- exclude .vlt control files and tests -->
    <resource>
        <directory>${basedir}/src/main/content/jcr_root</directory>
        <excludes>
            <exclude>**/.vlt</exclude>
            <exclude>**/.vltignore</exclude>
            <exclude>**/.DS_Store</exclude>
        </excludes>
        <targetPath>jcr_root</targetPath>
    </resource>
</resources

Next you need to setup a profile that uses Groovy to install the package to CQ5 using POST.

<profile>
    <id>installUI</id>
    <activation>
        <property>
            <name>installUI</name>
        </property>
    </activation>
    <properties>
        <hostname>http://localhost</hostname>
        <hostport>4502</hostport>
        <publishhostname>http://localhost</publishhostname>
        <publishhostport>4503</publishhostport>
        <packageName>${artifactId}-${version}</packageName>
        <cquser>admin</cquser>
        <cqpassword>admin</cqpassword>
        <showUpload>true</showUpload>
        <showInstall>true</showInstall>
        <projectDir>${basedir}</projectDir>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>1.2</version>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.gmaven.runtime</groupId>
                        <artifactId>gmaven-runtime-1.7</artifactId>
                        <version>1.2</version>
                    </dependency>
                    <dependency>
                        <groupId>commons-httpclient</groupId>
                        <artifactId>commons-httpclient</artifactId>
                        <version>3.1</version>
                    </dependency>
                    <dependency>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                        <version>1.1.1</version>
                        <type>jar</type>
                        <scope>compile</scope>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <defaults>
                                <cqservers>localhost:4502</cqservers>
                                <cquser>admin</cquser>
                                <cqpassword>admin</cqpassword>
                                <packageName>${artifactId}-${version}</packageName>
                                <projectDir>${basedir}</projectDir>
                            </defaults>
                            <source>
                                import org.apache.commons.httpclient.*
                                import org.apache.commons.httpclient.methods.*
                                import org.apache.commons.httpclient.auth.*
                                import org.apache.commons.httpclient.methods.multipart.*

                                //method declaration for execute of PostMethod
                                def executePost(httpclient, httppost, outputResponse){
                                    try {
                                        httpclient.executeMethod(httppost);
                                        if (outputResponse){
                                            println httppost.responseBodyAsString
                                        }
                                    } catch (Exception e) {
                                        println("exception: " + e)
                                    } finally {
                                        httppost.releaseConnection()
                                    }
                                }

                                def uploadAndInstall(hostPort, packageName, projectRoot, httpclient){
                                    //upload package
                                    def httppost = new PostMethod('http://' + hostPort + '/crx/packmgr/service.jsp')
                                    def file = new File(projectRoot + '/target/' + packageName + '.jar')

                                    println("Installing package" +packageName+" to " + hostPort)

                                    if(file.exists()){

                                        def parts = [new FilePart("file", file)] as Part[]
                                        httppost.setRequestEntity(new MultipartRequestEntity(parts,
                                        httppost.getParams()))

                                        executePost(httpclient, httppost, true)

                                        //install package
                                        def installURL = 'http://' + hostPort +
                                        '/crx/packmgr/service/.json/etc/packages/' + packageName + '.zip'
                                        println('INASTALL: ' + installURL)
                                        httppost = new PostMethod(installURL)
                                        httppost.addParameter("cmd", "install")

                                        executePost(httpclient, httppost, true)
                                    } else {
                                        println("File does not exist for " + packageName + ". Not Deploying.")
                                    }
                                }

                                def user = project.properties['cquser']
                                def pass = project.properties['cqpassword']
                                def packageName = project.properties['packageName']
                                def projectRoot = project.properties['projectDir']

                                // set up the client
                                def httpclient = new HttpClient()
                                def defaultcreds = new UsernamePasswordCredentials(user, pass)
                                httpclient.getState().setCredentials(AuthScope.ANY, defaultcreds)
                                httpclient.getParams().setAuthenticationPreemptive(true)

                                println "CQSERVERS:" + project.properties['cqservers']

                                project.properties['cqservers'].tokenize(',').each {
                                    uploadAndInstall(it, packageName, projectRoot, httpclient)
                                }

                            </source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Compile Java classes for OSGi bundle -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</profile>

When building the project make sure you select the installUi profile or if you are using the command line add the argument -DinstallUI and it will automatically install the package into CQ5.

I have created a sample project that contains everything you need that you can download here: cq5-sample-ui.zip


by wgeric at April 06, 2012 06:50 PM

Install OSGI Bundles Using Maven

For my job I do a lot of CQ5 work. Often this involves creating OSGI bundles. To install an OSGI bundle you either have to put the bundle in /apps/myproject/install or manually install it in the Felix Web Console. Both of these methods get old after doing it multiple times.

Sling has a Maven plugin that simplifies this process by installing the bundle for you when you build the project. Simply add the following code to your pom.xml file for your Maven project and then select the install-osgi profile when building.

<profile>
	<id>install-osgi</id>
	<activation>
		<property>
			<name>install-osgi</name>
		</property>
	</activation>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.sling</groupId>
				<artifactId>maven-sling-plugin</artifactId>
				<version>2.0.4-incubator</version>
				<executions>
					<execution>
						<id>install-osgi</id>
						<goals>
							<goal>install</goal>
						</goals>
						<configuration>
							<slingUrl>http://localhost:4502/system/console/install</slingUrl>
							<user>admin</user>
							<password>admin</password>
							<skip>false</skip>
							<bundleStartLevel>20</bundleStartLevel>
							<bundleStart>true</bundleStart>
							<refreshPackages>true</refreshPackages>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</profile>

Or if you are using command line to build the project, add -Dinstall-osgi to the arguments. You can create as many profiles as you’d like for the different environments you may be working with (author, publish).


by wgeric at April 06, 2012 05:37 PM

April 03, 2012

Left on the Web • Stefan KoopmanschapFormer Team Member

Using git-svn with Symfony2's deps installer

I work a lot with Symfony2's deps file for installing 3rd party bundles into my project (yeah I know, I should be using Composer, right?). This works really well when working with pure Git. However, when you're not using Git on it's own but instead use git-svn, you may run into some issues when issuing git svn dcommit, such as: 2d35d2c11c4cfdf66e09ca216b5f8896f8f04af5 doesn't exist in the repository at /usr/libexec/git-core/git-svn line 4817 Failed to read object 2d35d2c11c4cfdf66e09ca216b5f8896f8f04af5 at /usr/libexec/git-core/git-svn line 595 This appears to be due to the fact that there are git repositories inside the git repository, which git doesn't mind but Subversion does.

April 03, 2012 11:32 AM

March 23, 2012

A Donut's Blog • A_Jelly_DoughnutDevelopment Team

A Thursday Passage for March 22, 2012

(The title is a reference to a regular segment on the television program Sunday Morning on CBS that notes an historic event)

Thanks to a tweet from @stickerboy, I went looking to see what he was talking about. The most notable change is the retirement of the longest serving team member, Florian Messner.

I don't know much about Mr. Messner other than that he is German. Never met him, never really interacted with him in any kind of social context. But he served in the phpBB teams for a period of almost ten years, a most notable achievement. (I believe he joined the support team in October of 2002, and retired quite recently as moderator team leader.)

Messner is replaced by Paul Cammish, whom I did meet in London in 2008.

On a semi-historical note: I'm fairly certain that the longest serving active team member is now Nils (aka naderman) who joined up in 2005.

by Josh W at March 23, 2012 02:49 AM

March 21, 2012

phpBB Doctor Blog • drathbunFormer Team Member

More Backup Automation

Some years back I purchased a couple of NetGear Duo RAID disk enclosures. Each enclosure was loaded up with dual 1TB disk drives from Western Digital. Everything written to one drive was mirrored to the second drive. This helped protect against a single disk failure.

I also had a very old (PIII processor!) computer that was running linux. At one point I was using it as a development environment, but it had long since been retired from that duty. Why was it still around? I had created mount points for each of the RAID arrays on this linux box, and it was responsible for going to my web server (which hosts this blog, among other things) and downloading the nightly database backup files. (My web server runs a hot backup at 1AM each morning using the mysqldump command.) This linux box also had a script (running at 2AM) that would ftp to my web server, retrieve all of the database dumps, download them, add a date stamp to the file name, and then copy the resulting files out to the RAID array. The entire process was automatic, transparent, and for a long time was quite robust.

Until a few weeks ago.

At various points I would go out to the disk array and check to see that the backup files were properly being retrieved. The last time I checked, it seemed that I was not getting any backup files… at least not for the past several weeks. Attempting to log in to the development / backup box via ssh proved to be unsuccessful. After rebooting the box, though, everything came up and seemed to work. I was able to run the backup script without errors.

The next morning, however, there was no backup file from the prior night, and the box was once again locked up. To be honest, it wasn’t worth fixing. It was noisy, a power hog, and the only thing it was doing at this point was downloading the nightly backup files. The NetGear Duo was also running a variation of linux, so why not try that? I installed an add-on that enabled ssh access to the device and went to town. After a couple of different attempts I eventually got a cron job set up that would connect to my web server and do all of the same things my old linux box used to do, with the added advantage that the Duo was already on as a file server anyway so it was now taking on an additional task.

Life was good, and backup files began to show up on a regular basis once again. To make sure I didn’t miss out on backup files any more I also added a line at the end of the process to email me the results of the backup script. Now each morning I can check my smartphone and confirm that the backup process ran correctly the night before.

Time To Upgrade

But never one to leave well enough alone :) I decided to try upgrading one of the Duo devices to a newer model, the Ultra 2 Plus. This new device had a lot more memory, dual network ports, and a multi-core CPU. Everything should be faster. I also upgraded to the “black” series of Western Digital disk drives as I had experienced intermittent problems with using the “green” series inside the RAID enclosures. Everything came in last week and was installed with only a little fuss. I got my security configuration reset so that I can use the scp command (secure copy) to download the files from my web server. The last hurdle was that the new Ultra 2 Plus device did not have a mail command installed! After some research and posting on the ReadyNas forums (which by the way run phpBB) I got the answer: I have to use the sendmail command instead. This command is not quite as friendly as the mail command, but I got it to work.

Database Backup Script

My web server already has a cron job scheduled at 1AM that uses the mysqldump command to create a database dump of every database that I want to back up. Here is the following cron job which is scheduled on the Ultra 2 Plus. It’s responsible for connecting to the server, downloading the files, adding a date stamp, and then copying the files out to the designated sub-directory on the RAID. Finally it creates the mail file and sends it out. The list of databases to back up is included in a text file so that I don’t have maintain that script.

#!/bin/bash

# first establish local path location
cd /w_drive/incoming/

# next get updated copy of dbnames.txt
scp username@example.com:db_backups/dbnames.txt .

for dbname in `cat dbnames.txt`; do

#       Go get database backup file
        echo "Processing $dbname "
        scp username@example.com:db_backups/$dbname.sql.gz .

#       Establish some local variables
        filename="_`date +%Y-%m-%d`.sql.gz"
        filename="$dbname$filename"
        outputpath="/w_drive/$dbname/$filename"

        echo "Moving $dbname.sql.gz to $outputpath"

#       Rename local copy of db backup file to include date
        mv $dbname.sql.gz $filename

#       Then move dated backup file to proper output path
        mv $filename $outputpath
        chmod 644 $outputpath

done

# Build mail formatted file
echo "date: `date +%Y-%m-%d`" > mail.txt
echo "to: email@example.com" >> mail.txt
echo "subject: Backup" >> mail.txt
echo "from: email@example.com" >> mail.txt
cat /w_drive/incoming/getbackup.out | grep -v "tty" >> mail.txt

# Send the email
/usr/sbin/sendmail email@example.com < /w_drive/incoming/mail.txt

As an additional bonus, my office is a lot quieter without the extra server running. I don't know that it will make a noticeable difference in my power bill, but it will certainly help at least a little bit.

by Dave Rathbun at March 21, 2012 06:35 PM

March 20, 2012

phpBB Twitter • the phpBB Team

phpbb: phpBB is participating in Google Summer of Code 2012: We are excited to announce that phpBB has been accepted as... http://t.co/Kqfp69rm

by phpBB at March 20, 2012 01:15 PM

phpBB.com Announcements • the phpBB Team

phpBB is participating in Google Summer of Code 2012

We are excited to announce that phpBB has been accepted as a mentoring organisation in Google Summer of Code (GSoC) 2012.

Google's Summer of Code program encourages students to get involved in free and open source software (F/OSS) by pairing them up with experienced mentors in popular F/OSS projects. In addition to making valuable contributions to their host organisation, students gain experience working in a group environment and are further rewarded with a monetary stipend.

Prospective students can start by browsing our Ideas Page to see the kinds of tasks we would consider beneficial. We do, of course, welcome proposals for your own unique ideas and you may submit multiple proposals if you like. For instructions on how to apply to work with us, please see the Instructions Page.

phpBB uses Github for source control and students are encouraged to become familiar with the system as early on as possible. Our development wiki contains a beginner's guide (Working_with_Git) and extensive documentation can be found on help.github.com. Additional information regarding phpBB development can be found on Area51.

Student application submission officially opens on March 26. In the meantime, students should contact us via IRC in #phpbb-dev on irc.freenode.net

We are looking forward to this experience and hope to make this the most productive summer in phpBB's history.

phpBB GSoC application page: http://www.google-melange.com/gsoc/org/ ... 2012/phpbb
GSoC Timeline: http://www.google-melange.com/gsoc/even ... e/gsoc2012


You may discuss this announcement in the discussion topic.

by Marshalrusty at March 20, 2012 12:52 PM

March 10, 2012

phpBB Twitter • the phpBB Team

phpbb: phpBB 3.1 "Ascraeus" to require PHP 5.3.2: The next major release of phpBB, phpBB 3.1 "Ascraeus", will require P... http://t.co/xo17xf58

by phpBB at March 10, 2012 02:57 AM

March 09, 2012

phpBB.com Announcements • the phpBB Team

phpBB 3.1 "Ascraeus" to require PHP 5.3.2

The next major release of phpBB, phpBB 3.1 "Ascraeus", will require PHP 5.3.2 or newer.

PHP 5.3 provides important functionality that a number of established projects are using. As it is phpBB's goal to use components from other projects where doing so makes sense, raising minimum PHP version to 5.3 allows phpBB to reuse some components from Symfony instead of reimplementing equivalent functionality. This will speed up the completion of phpBB 3.1 by reducing the amount of work that Development Team has to do.

You can read the discussion leading to the decision.

All major distributions are already shipping PHP 5.3.2 or newer in their current stable versions. You can find a table of several distributions and the versions they ship here.

phpBB 3.0 "Olympus" will continue to require PHP 4.3.3 as the minimum version.

phpBB 3.0.10 supports PHP 5.3. Since PHP 5.2 is no longer maintained by PHP developers, all users not already running PHP 5.3 are strongly encouraged to move to PHP 5.3.

As phpBB 3.1 "Ascraeus" is still under active development, there is still plenty of time to upgrade your PHP installation.

Additionally, one should note that this announcement does not imply that phpBB 3.1 will see large portions of code rewritten in order to take advantage of new features in PHP 5.3. Instead, sections of code will be updated as needed in the 3.x release cycle.


Please discuss this announcement here.

by Oleg at March 09, 2012 04:21 PM

March 02, 2012

Left on the Web • Stefan KoopmanschapFormer Team Member

On Conferences, Women and Sponsors

Tech conference ConFoo has been getting a lot of criticism this year about the amount of female speakers and now also about their choice of sponsors. I personally feel this is quite unfair, and after I read this blogpost I felt inclined to comment. Since the comment turned out quite long, I decided to also post it here. Below is the comment I posted on the above linked blogpost.

March 02, 2012 05:13 PM

February 11, 2012

phpBB Twitter • the phpBB Team

phpbb: Abandoned MODs Forum: Hello to all,From time to time MOD authors either lose interest in developing a particular... http://t.co/KUoZyxs2

by phpBB at February 11, 2012 07:01 AM

phpBB.com Announcements • the phpBB Team

Abandoned MODs Forum

Hello to all,

From time to time MOD authors either lose interest in developing a particular MOD, are having trouble finding time to work on their code, or have simply moved on. When this happens it has been standard practice to lock the topic and mark as abandoned [ABD].

In addition to this the topics will now be moved to a new forum. The MOD Team would like to announce the unveiling of this new forum under the [3.0.x] MODs in Development forum:
[3.0.x] Abandoned MODs

It is our hope that having this forum with a list of MODs that have been abandoned will encourage users to pick up where others left off. This will also better separate the currently developed MODs from those that are no longer being developed or supported. In order to accomodate this change, the MODs in Development forum rules have been modified. You can see those changes here under section 7.

All MODs in Development topics that were locked and properly marked have been moved to this new forum.

Thank you,
The phpBB Modifications Team.

P.S. You may discuss this announcement in this topic.

by DavidIQ at February 11, 2012 04:48 AM

February 05, 2012

zerokspot.com • zeroKFormer Team Member

Getting to know Android

I've head iOS devices for a really long time. My first one I got during PyCON UK 2008 in Birmingham with a 2nd gen iPod touch, kind of as a mobile movie player. Over the years I grew quite fond of the aesthetics and the general look and feel of the iPhone 3GS and later on the iPad 2. But somehow, over the years, I also grew somehow tired of it. I couldn't help myself feeling a bit underwhelmed by the waste the primary "screen" of the OS represented. Instead of useful information you're always greeted by your favorite apps.

I don't want to take part in that whole Android vs. iOS fanboy war so I'll just leave it at that: I definitely see the usefulness of a widget concept when it comes to screen-estate on small devices.

And when I saw Ice Cream Sandwich in November in Berlin during the #GDDDE I definitely wanted to give it a try. My previous cell-phone plan had expired and had been overpriced to begin with. So, I had gotten a contract without minimum length a month before #GDDDE just to keep all my options open, and in December I finally decided on getting the Android 4.0 flagship handset by Samsung, the Galaxy Nexus.

Probably the first thing I did was install all the apps (if available) that I had used on iOS before: Evernote, Spotify, Scotty and a couple more. Then came the first important step: Getting podcasts.

In case I start to babble again: At the end of the article is a tl;dr section ;-)

Podcasts on ICS

With iOS podcasts are straight forward. iTunes can handle them for you and it was all I needed since 2008. In fact, podcasts are for me the most important thing of the morning after reading the news, so getting a good experience on my new phone is crucial.

For Android and years ago I had heard of Google Listen, so this was the first app I tried. Not bad, but kind of completely outdated. I definitely looks like the experiment it actually is. So after looking around a little bit I stumbled upon Pocket Casts. Both of them handle not only the playback of the weekly shows but also all other aspects of subscription management. Sure, I could have used Pocket Casts also on my iPhone but here I was more or less forced to jump into the water on undetermined temperature... and it was perfect ;-)

The experience

So my primary use-cases are all covered: E-mail (even better thanks to GMail integration), music, podcasts and note-taking. As for the rest of Android and ICS, I got used to the different UI pretty quickly. Within perhaps a day I was as quickly with my Galaxy Nexus finding my way from e-mails to news-posts and back as I was using my iPhone. Is iOS more consistent? Perhaps, but more in the positioning of buttons than the actual look and feel of apps. After Game Center Apple fanboys should probably think twice before dissing Android apps ;-)

Another big plus for me is the whole integration of online contacts with the classic contact management. I admit I'm a pretty heavy Google+ user so I really like that all my contacts there are already synchronized. Same goes for Twitter (I haven't installed the Facebook app yet simply because I don't use Facebook that often and try to not use it at all except for logging into Spotify).

And since I'm a Google+ user I also use GMail quite heavily, which, naturally, integrates extremely nicely with the rest of the system. In general the whole system seems to offer enough hooks for developers to integrate their apps into the core aspects of Android. For example, the browser offers a "share" button which has Evernote and todo.txt hooked into it. Mobile Safari didn't allow me to send content straight to Evernote which had become extremely annoying to me over the last couple of months.

And the bad parts

I guess, over the last couple of paragraphs I've, despite my original plan, started to read like some Android fanboy and partially that is also true. But, naturally, iOS and iPhones haven't come to be where they are right now by being a bad choice. The whole integration between iTunes and the players and apps on all iOS devices is something Google can't provide right now. Amazon perhaps in the future.

Another integration issue is the one of hardware. With my iPhone I could simply go into a store and buy a pair of headphones labelled as "works with the iPhone" and things like pausing playback, increasing and decreasing the volume worked right away. Not so much with the Galaxy Nexus. But at least after an update Pocket Casts can use my earphones' pause button :-)

But this is pretty much all the negative I can write about my experience with Android so far. I'm pretty sure there are more dark corners to be discovered but for now I'm extremely happy I dared the switch :-) I'm probably also closer than ever to wanting to develop for a mobile device thanks to the more open developer infrastructure. But more on this if I really find the time to dive into Dalvik ;-)

TL;DR

  • I'm positively surprised by how Android feels with ICS
  • All the apps I need are there and sometimes even more stable than on iOS (e.g. Spotify).
  • Don't use Google Listen for podcasts but instead invest in something like Pocket Casts if podcasts are important to you.
  • Pause buttons on headphones seem to work, volume buttons do not.
  • Contact integration with Google accounts and Twitter is really handy.
  • Sharing integration not only with Google services but also things like Evernote work out of the box (after installing Evernote)

February 05, 2012 07:35 PM

A Donut's Blog • A_Jelly_DoughnutDevelopment Team

Amplifications Regarding Charlie White

I'm not an attorney, but I wanted to get to the actual laws regarding the Charlie White case because I found the press coverage confusing. I do that by starting with the the story as reported in the web edition of the Evansville Courier & Press

From the newspaper, paragraph 3.

But the governor said he was holding off on naming a permanent replacement because a judge could reduce the charge to a misdemeanor, allowing White to regain the office.

This is a correct summary of the statement the Governor released. But it ignores Indiana Code 3.8.1.5(d) , which states:

The subsequent reduction of a felony to a Class A misdemeanor under IC 35-50-2-7 or IC 35-38-1-1.5 after the public announcement of a felony... does not affect the operation of subsection (c).

This section of the law describes candidacy and not a condition for an officeholder who is convicted of a felony. There is a separate statute (IC 3.5.1.38) for felonies committed while in office which appears to allow for Mr. White's return.

However, because at least one of Mr. White's felonies was committed before taking office, one can certainly argue that he could have been a convicted felon prior to taking office if the criminal justice system had worked more quickly. This would become a question for the courts, but only if the Hamilton County Superior Court were to downgrade the felony convictions to misdemeanors.

The second legal issue presented in the article relates to the assertion of Democratic state chair Dan Parker that Democrat Vop Osili should take office. I understand that this is what was ruled by Marion County judge Louis Rosenberg on multiple occasions, most recently on December 21, 2011. This is accounted for in IC 3.12.11.25(a)

Except as provided in subsection (b), whenever the commission makes a final determination under section 18 of this chapter that the candidate who is subject to a contest proceeding is not eligible to serve in the office to which the candidate is nominated or elected, the candidate who received the second highest number of votes for the office is entitled to a certificate of nomination or certificate of election even though a certificate may have been issued to another candidate upon the tabulation of the votes.

However, I reference IC 3.8.8.8(b) and (c) which seems to contradict 3.12.11.25:

(b) If, after the election, it is determined as provided by law that the individual was not qualified to be elected to the office, it shall be considered that: (1) an eligible candidate of the same political party, if any, as the ineligible candidate had been elected; and (2) a vacancy in the office occurred after the election. (c) The vacancy in the office shall be filled as otherwise provided by law.

If this is the applicable section, then the Governor would appoint Mr. White's permanent replacement. The ambiguity is somewhat removed by the section title of 3.8.8.8: "Effect of candidate who withdraws receiving most votes in election; filling vacancy" (emphasis added).

Because there is at least the potential for ambiguity, I believe this case will end up with a decision by the Indiana Supreme Court, and I suspect it would lean towards the Governor appointing White's replacement.

by Josh W at February 05, 2012 05:05 AM

January 31, 2012

ericfaerber.com • wGEricFormer Team Member

29G planted aquarium background and plan

This is my second attempt at my 29 gallon tank. I didn’t really know what I was doing with my first attempt. I saw some plants at Petco and thought it would be cool to try it. It failed miserably since I didn’t know anything and was trying to learn as I went. I’ve learned that there is lots of work and learning that needs to be done in order to have a planted tank. I need to be patience and learn as much as I can before jumping in with both feet.

I’ve decided to give it a shot again. I’m attempting to do a high tech setup on a budget.

The Details

Substrate: I’m am using a 50/50 mix of flourite and black gravel. It is about 3 inches deep.
Lighting: I have three 8.5 inch clamp lights from Home Depot with 27 watt (or was it 23? I don’t remember) 6500k spiral CFL blubs in them. I write another post explaining my light in more detail.
Filter: I have a SunSun HW-302 canister filter that I plan on using after I fill the tank with water.
CO2: I have a 20# CO2 tank with an Aquatek Regulator and bubble counter. Along with the filter this isn’t being used at the moment since the air contains plenty of CO2 so I don’t need to inject it into the tank.
Fertilizers: I’m still doing research on these but I plan on adding fertilizers once I add water to the tank. I’ll post more about this when I have this figured out.
Plants: I’m going to stick to mostly easy plants and set myself up for success. I’ll throw in a couple harder plants once I get things figured out. I plan to have a heavily planted tank.
Fish: I want some schooling fish for sure. I haven’t thought about this a whole lot since the plants have been my main focus.


by wgeric at January 31, 2012 07:16 AM

January 26, 2012

Left on the Web • Stefan KoopmanschapFormer Team Member

Setting iTerm tab names

I work a lot with terminal windows, and on my MacBook Pro I use iTerm2 for this. But a lot of tabs can be confusing. Unfortunately, there is no simple GUI for setting tab names in iTerm2 (that I have found). After a quick question, Joshua Thijssen found the answer on how to do this through a simple command.

January 26, 2012 08:15 AM

phpBB Twitter • the phpBB Team

phpbb: Possible downtime: Some of you may have noticed an inability to connect to our site earlier today. The provider ... http://t.co/8Xg4UKKy

by phpBB at January 26, 2012 05:05 AM

phpBB.com Announcements • the phpBB Team

Possible downtime

Some of you may have noticed an inability to connect to our site earlier today. The provider (NERO) who serves our host (OSUOSL) is currently facing faults in some of their routers. Corrective measures were taken earlier to resolve most of the issues, but they will need to perform some maintenance on the devices. Until then, there may still be some connectivity issues. While they will make attempts to route traffic through other devices during the maintenance window, it is possible that some users may be unable to connect during that time.

Maintenance on the devices will occur between 11:00 - 14:00 UTC, January 26.

Thanks,
The phpBB Team

by Noxwizard at January 26, 2012 04:18 AM

January 18, 2012

phpBB Twitter • the phpBB Team

phpbb: We oppose SOPA / PIPA, and so should you!: The United States Congress is currently considering two bills, known ... http://t.co/AJmKJeFt

by phpBB at January 18, 2012 08:39 AM

phpBB.com Announcements • the phpBB Team

We oppose SOPA / PIPA, and so should you!

The United States Congress is currently considering two bills, known as the Stop Online Piracy Act (SOPA) and the Protect IP Act (PIPA). The passage of these bills would be extremely harmful to the internet community that we all share and love.

Learn more about SOPA / PIPA and, if you are a Unites States citizen, tell your Congressman and Senator that you are in favor of a free and open internet!

Wikipedia wrote:SOPA and PIPA put the burden on website owners to police user-contributed material and call for the unnecessary blocking of entire sites. Small sites won't have sufficient resources to defend themselves. Big media companies may seek to cut off funding sources for their foreign competitors, even if copyright isn't being infringed. Foreign sites will be blacklisted, which means they won't show up in major search engines. SOPA and PIPA build a framework for future restrictions and suppression.


Further reading:
Wikipedia's message: https://en.wikipedia.org/wiki/Special:CongressLookup
Google's message: https://www.google.com/landing/takeaction/
Reddit's message: http://blog.reddit.com/2012/01/stopped- ... s-all.html

Wikipedia's article on SOPA (not blacked out): https://en.wikipedia.org/wiki/Stop_Online_Piracy_Act
Google search for "SOPA": https://encrypted.google.com/search?q=sopa

by Marshalrusty at January 18, 2012 08:13 AM

January 17, 2012

phpBB Twitter • the phpBB Team

phpbb: A few US based events (NYC, Philly, Boston, DC) Jan 19 - 25: Hello everyone,Apologies about the late notice, but... http://t.co/Thbc3Eiq

by phpBB at January 17, 2012 05:38 AM

phpBB.com Announcements • the phpBB Team

A few US based events (NYC, Philly, Boston, DC) Jan 19 - 25

Hello everyone,

Apologies about the late notice, but I would like to announce a few US East Coast based events that some of you may be interested in attending,

I will be joining Nick Mailer, co-founder of the The Positive Internet Company and Richard Stallman, who needs no introduction, to discuss the roots of phpBB, problems we have experienced over the years and some steps that will be taken to resolve some of those problems in the near future. The talks will include cloud based technologies with branching into other topics.

For more information about the presentation and speakers, please see the following two pages:
http://www.positive-internet.net/events ... -the-cloud
http://www.positive-internet.net/events ... -the-cloud

- Please register at the links above ASAP to guarantee space.
- Please reblog/tweet/etc. this post to spread the word if your audience might be interested in attending.

Boston, MA
Thursday, Janaury 19, 2012
The Colonnade Hotel
120 Huntington Avenue, Boston, MA 02116

Washington DC
Friday, January 20, 2012
Willard Intercontinental Hotel
1401 Pennsylvania Ave NW, Washington, DC 20004

Philadelphia, PA
Monday, January 23, 2012
Omni Hotel Independence Park
401 Chestnut Street, Philadelphia, PA 19106

New York, NY
January 21, 24 & 25, 2012
The New York Palace Hotel
455 Madison Avenue at 50th Street, New York, NY 10022

Feel free to get in touch with me if you have any questions.

I look forward to seeing some of you there.

by Marshalrusty at January 17, 2012 04:35 AM

January 15, 2012

zerokspot.com • zeroKFormer Team Member

When setup.py check fails

Last night I was about to release a new version of django-flatblocks, when I ran into a weird problem:

$ python setup.py check -r                                                                                                                                                                           [develop] 13:58+0100
running check
Traceback (most recent call last):
  File "setup.py", line 32, in <module>
    zip_safe = False,
  File ".../distutils/core.py", line 152, in setup
    dist.run_commands()
  File ".../distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File ".../distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File ".../distutils/command/check.py", line 69, in run
    self.check_restructuredtext()
  File ".../distutils/command/check.py", line 111, in check_restructuredtext
    for warning in self._check_rst_data(data):
  File ".../distutils/command/check.py", line 138, in _check_rst_data
    parser.parse(data, document)
  File ".../docutils/parsers/rst/__init__.py", line 157, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)

    .....

  File ".../docutils/parsers/rst/states.py", line 991, in implicit_inline
    return [nodes.Text(unescape(text), rawsource=unescape(text, 1))]
  File ".../docutils/nodes.py", line 331, in __new__
    return reprunicode.__new__(cls, data)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 26: ordinal not in range(128)
</module>

The cause of this issue was a bit unexcected: A string in the release notes of a version I had already released about a year ago. So what changed? Probably the Python version but also most definitely the version of docutils I had installed in order to preview the release notes before every release.

So I started downgrading from 0.8.1 all the way to 0.5.x to finally make the check command not die on me anymore.

There is also an issue in Python's issue tracker which has a patch attached (and committed) that solves this issue. So if you don't want to downgrade docutils in your virtualenv, this is probably the way to go :-)

January 15, 2012 02:11 PM

phpBB.com Blog • the phpBB Team

The Teal Troopers – The Website Team: Past, Present, and Future

Up until recently, the Website Team was a sleepy team within phpBB that acquired team members from other teams and worked behind closed doors in order to ensure the full operation of the website. It is a team that is not very well publicized nor is really known what exactly we do. It has had its lows and even fewer highs, but now the need is too great to keep our operation small and closed.

The past

This historically small team has been known to take current phpBB team members in prior to their departure, during a time where it is not easy for them to contribute much at all. General website maintenance fell to the team’s themselves, each of them taking care of their patron area of the website. While this worked for a while, it has caused more issues than it was worth. Our website is inundated with duplicate CSS, inefficiency in JavaScript, and general chaos in the backend code.

The present

During the past year, the website team has been making the transition from a sleepy team who takes care of few things to a more active team that handles day-to-day maintenance and testing prior to deployment of the website.

We’ve picked a few members and lost many. This is mainly due with the fact that this is only team where it is impossible to get help directly from the community because it’s an internal codebase. It may not have been very noticeable, but any team member the website team picked up was formerly on another team within phpBB.

The future

Currently, we have serveral maintenance projects we are overseeing and one very large project that’s early in development. Unfortunately, we are not in a position to announce these at the moment. I do think it is worth mentioning though, for we are eventually looking to adopt a more open model, even going so far as to release some new code we’re writing on github in an effort to pick up contributors.

To do so, however, we’ll need some help. The future of phpBB.com is a blank slate–and we’re looking for designers, programmers, and other individuals with skills who can help draft the slate into a reality. If you’d like to help out, and have the time and ability to do so, please contact Sam with samples of your work (P.S. being active on the forums on phpbb.com and Area51 are a huge plus). This is your opportunity to make an impact on the phpBB project for users, developers, team members, and more.

January 15, 2012 01:40 AM

January 14, 2012

A Donut's Blog • A_Jelly_DoughnutDevelopment Team

Introducing BAM!

"Bam" became the tagline of celebrity chef Emeril LaGasse at the start of the last decade.

With Emeril's star having largely faded, a coalition has now proposed a new use for the word. They propose to use it as an acronym to replace the word "Jazz". The acronym's long form? Black American Music, and Nicholas Payton introduces us to the new genre with his new album, "Bitches."

The word "Coalition" may not be the right one. It appears that Nicholas Payton was the first to publish his thoughts on the issue on his blog in a lengthy November entry where Payton simply states several dozen reasons why "Jazz" is no longer a relevant term. A few other musicians have signed on since then although I have been unable to find a listing.

So I give you two pieces of music to compare, both taken from Payton. First is the quintessential "Take Five" from Dave Brubeck. http://www.youtube.com/watch?v=BwNr...
And the second is off of Payton's recent release, "Bitches" (apparently a reference to Miles Davis's groundbreaking 1970 Columbia release, "Bitches Brew") is the original composition "Give Light. Live Life. Love." http://www.youtube.com/watch?v=OXgy...
Not so different, stylistically. Close enough that they can be described using the term jazz, I think. But one has sold millions of copies (over 43 years) and the other would be delighted to sell 100,000.

And that is really the core of Payton's argument -- Jazz is a hard sell in America today. Maybe jazzers should try something else.

With that, "Bitches" provides some interesting new tracks such as "iStole Your iPhone" which melds elements from Jazz, the Caribbean, and Urban music. But take away the vocal track, and its still jazz.

Another part of Payton's explanation is one that flirts with "Occupy Jazz." Payton tries to convolve jazz with the n-word, calling it in a subsequent blog entry "the derogatory j-word." I don't want to touch that one, so I simply quote someone hopefully more versed in the field than I, AllAboutJazz columnist Greg Thomas

Equating jazz with the "n" word, is, in my estimation, not wise.

My total opinion of the project is this: I feel it is a fool's errand for Payton to try changing a genre that has become known for its closed-mindedness, a genre with few living influential figures, and hundreds of academics who will try to defend the original label by psychoanalyzing the statements deceased greats like Miles Davis.

The album itself probably deserves 3 and a half stars on the five star scale. If not for Payton manufacturing this controversy, it probably would have slipped under the radar of almost everyone as being too experimental -- which suggests that Payton's speaking out is having the desired effect. If not for the "BAM" storyline, I never would have heard of the album. It will be interesting to see if the statement causes Payton to be shunned in the future, though.

by Josh W at January 14, 2012 11:58 PM

January 11, 2012

phpBB.com Blog • the phpBB Team

How you can aid development

Since we opened up development and moved our code onto GitHub, we’ve received several contributions. It allowed a number of non-development team members to contribute. We have been listing these contributors in the 3.0 release announcements, and you can also see them on the area51 contributors page.

However, I think we can do better. And this is why I want to reach out to the modding community. We have limited ressources and we need your help.

Contribute patches

The bug tracker is filled with bug reports. You may have reported a few bugs yourself. There’s so many, it’s likely that a large amount will never get fixed.

This is your chance. If you ran into a bug that really bugs you (pun absolutely intended), now is the time to fix it. If you’ve interacted with the MODding community, maybe by submitting some MODs to the cusomisation database, you should already be somewhat familiar with the phpBB code base and its coding guidelines.

Creating a patch is like creating a MOD. Except you don’t have to write a MODX file. Instead you can have a diff generated for you or just use git to manage the changes.

Once you are done with your patch, you can either attach a patch file to the ticket, or you can be awesome and create a pull request on GitHub. Pull requests make it easier for us to read, discuss, and test your patch. For this reason it will likely be merged faster.

Review pull requests

Pull requests are patches awaiting review. Most of the time they will be from developers. That’s right: every change to the phpBB code base needs to be reviewed by another developer. This allows us to catch problems early, and distribute the blame when something goes wrong.

There is a list of open pull requests that are waiting to be merged. Some of them already have comments, while others have not been reviewed yet.

Reviewing these is a lot of work. But you can help! If you know the phpBB code base well, you can help by checking the diffs and making sure no new problems are being introduced. Be sure to comment with your opinion; even simply saying “looks good” is helpful because it shows that someone has reviewed the patch.

The other thing you can do is test pull requests. Reviewing is nice and dandy, but testing allows you to see if things are really working. And this is very similar to testing MODs. So if you are a MOD author or maybe even a junior MOD validator, this process should be fairly familiar to you. The only difference is that everyone will be watching you.

Git

We use git for version control. This may be intimidating to lots of you, but for development there is really no way around it. It is a great tool, and I encourage anyone who writes code to learn how to use it.

You will first need to fork the phpbb3 repository. Then you will need it to create a branch on your fork for your change. When you have finished your patch, push to your fork on GitHub and submit a pull request. You can also checkout someone else’s branch with that person’s proposed changes, in order to test it.

I’ll be honest with you: it’s tough.

But there are lots of great resources out there! One of my favorites is the “Getting Git” talk by Scott Chacon. He explains the basics of how git works. This really helps you to get an initial understanding, so that you can move on to learn how to actually use it. Some great guides that can get you started using Git are the Git Reference or Pro Git. And we also have the Working with Git article on the phpBB wiki.

And fear not, we are here to help. If you run into any problems, just come onto IRC and ask.

In conclusion

So there you have it, secure your place on the area51 contributors page!

If you have questions or just want to see what we are up to, join us in the #phpbb-dev IRC channel on irc.freenode.net.

January 11, 2012 10:34 PM

phpBB Doctor Blog • drathbunFormer Team Member

phpBB3 MODs Domain Names Available

I have posted a topic on phpbb.com letting folks know I’m not going to renew my phpBB3 MODs-related domains. If you’re interested, hop on over to phpbb.com and send me a PM to let me know.

First come, first served.

by Dave Rathbun at January 11, 2012 09:30 PM

Left on the Web • Stefan KoopmanschapFormer Team Member

Installing the Geoip PECL package for Zend Server on OSX

Today I needed to get a client application up and running on my local system. This application uses the Geoip PECL package, so I needed to get this up and running. This turned out to be slightly more difficult than just a PECL install, as you're missing some libraries by default, so here is my log of things to do to get it up and running.

January 11, 2012 07:20 PM

phpBB.com Blog • the phpBB Team

Guest post: MOD Creation, From Start to Finish by Unknown Bliss

Written by: Unknown Bliss

Within this article I’m going to briefly outline how to create your modification, package it up, submit it to the Modifications Database and support it afterwards.

Writing MODs can be so simple but yet so complex. It really depends on what MOD you wish to make. If you wish to make a portal or arcade then it will be quite complex. If you just want to make dynamic page titles or ACP Link in header it will be a rather small trivial task.

The first thing you need to do is open up word or notepad and prepare information on your modification, a brainstorm of ideas. It should include items such as your modification name, description, what sort of features you might include and what requirements do you want. Then you need to think about what features you’ll need. For instance, if you are creating a portal, will you have a configuration setting to toggle or re-order individual modules?

Once you have a good idea of how you want to make your MOD you can start to do a bit of research. Take a look at something similar. If you’re designing a blog with articles and comments then take a look at phpBB’s Topic and Replies system. See how it works and what can be done with it. While you’re doing research feel free to note down bits and pieces of information for future reference.

Once you know what you’re making and you have a rough idea on how you are going to make it, you can start working on it. Normally, it’s easiest to start with the database structure. If you have a bug tracker you know you need to make the table for tickets, the table for projects, table for comments/replies, table for logging etc. So plan this structure out.

After you have done all the planning, notes and researching you can install your test board. I recommend you use QuickInstall (QI) as it does a lot of items already done for you and it can generate multiple boards faster. If you use QI then I always find it’s best to populate your board with users and posts as it can come in handy later on. If you don’t use QI then you need to install a board then enable debug and debug extra. You also should change the recompile style components option to ‘yes’ inside ACP –> Load Settings so you don’t need to refresh your style components or cache every time you make an edit to a style file. There is a blog article about QI here

Now that you have a test board, you should use your DB Structure Plan to make your database changes. If you need to add something later then you can. Once you have your database changes in place what you’ll need to do next is write the PHP functions files. I can’t say much about this except that this is when you need to take out your notes and use a checklist of everything that you need to include.

Once you have made the PHP Function Files you need to create the basic language PHP files. At the moment, you won’t have much to put in them. However, you will need to put in the basics, such as, if you are making a set of modules, you will need language entries such as “Recent posts”. Just a reminder that all standard language files should be inside /language/en/mods as all MODs should have an English language built into the MOD. Any additional languages should be in additional MODX Files but I’ll come back to that later. As a general rule it’s normally useful to have a generic error and success message for most MODs.

Now that you have made you language and function PHP files you need to make your template files. These may need to contain the Overall Header and Overall Footer and sometimes forum jump but otherwise its up to you what goes in them. One very common error people make is putting hardcoded language inside template files. This is against phpBB Coding Guidelines and it will make your Modification deny worthy. If you can remember this rule it then means less of a nightmare later on when your MOD is denied for hard coded language and you then have to re-submit it. Note: Hardcoded language can be anywhere, the most obvious and common place to put it is in template files but you can put it in most files and that’s where it normally catches people off-guard.

Now you need to make your PHP file that the user will visit (such as viewtopic.php or blog.php or index.php rather than /includes/acp/info/blog.php). An attempt should be made to keep file names short and simple like portal.php or blog.php rather than my_absloutley_almighty_cool_portal.php.
Once you have a working set of files you need to start adding your ACP, UCP, MCP etc. Modules. I’m not going to go into much more detail with regards to this much except to say that when designing these try to keep them looking uniform with the built-in modules in these control panels.

Now you should have a working test board. At this moment in time you shouldn’t have all of your features implemented except the very core and basic ones. Now you need to add your UMIL files. To do this just generate a UMIF File with the hosted UMIF Generator. Also make sure you include a copy of the latest UMIL and you must make sure this is always the latest and when a new version is released remember to update. Outdated UMIL makes a MOD deny-worthy.

So now its time to create a development topic in the phpBB.com MODs in Development Forum. Make a topic and I recommend you use the suggested template for your topic. At this moment in time don’t attach any downloads and keep the status as [DEV] but if you wish you can provide screenshots.

Now you need to package it into a MODX. I suggest you use the MODX Generator. Once you have this you can then edit the MODX using the MODX Creator with additional information.

Now that you have made your MOD you need to make a new board. This board should be the same as the one you made earlier with debug, debug extra and AutoMOD. Now you need to zip up your modification, go into AutoMOD on the new board and upload it using the upload feature within the AutoMOD module. Once it has been uploaded, install it. If it fails but you can’t see why double check if you have used spaces instead of tabs and vice-versa in finds. Once you have AutoMOD working you are almost ready to submit your MOD.

You should now update your topic to Alpha or Beta (ALPHA is for a VERY unstable MOD. BETA is generally when almost all of the features have at least been implemented, but not much testing has taken place) and add a download link. Downloads aren’t required for the alpha stage but are recommended; otherwise how do people test your MOD and provide feedback? Downloads for beta are required due to rule 3d. The MODs in Development Forum is a place to get ideas, free beta testers and market your Modification so you should take advantage of it.

Once you have added a download I recommend you test your MOD thoroughly for any bugs and fix them. There is a blog post about how the Junior MOD Validators test (and I recommend you test it in the same way) here. Once you are quite sure that all of the bugs have been squashed and that all of the features have been implemented, as you planned from the start, you can promote the MOD status from the BETA to RC (Release Candidate) stage. Many MOD authors will not accept any more feature requests for the current MOD version, pushing any further requests back to the next major version (X.Y). At this point, your MOD should be ready to be submitted for validation by the MOD Team for approval and release into the MOD Database.

To submit it for validation you need to create a Modification type contribution in the MOD Database. For the contribution details, you should generally use the same information as was used in your MODX install file. You will also have the opportunity to include further information, such as a demo URL and screenshots. Finally, select one or more relevant categories into which your MOD fits. Note that at the bottom of the submissions page there is an option to upload screenshots, not revisions.

The next page to come up will be the “New revision” page. On this page you should upload your zipped up Modification, type in your version number and version name (can be the codename for the release or just the version number or the name of the mod). Then you have the notes to the MOD Team section in which I personally add a note of thanks to those who out of their own free time test and validate my MOD’s code but its up to you what you enter into this section.

Once your MOD has been submitted, it is a waiting game of sorts while the MOD Team and Junior MOD Validators review the code and test the functionality. Note that it can normally take a month, sometimes more, for the entire process to be completed, due to the number of MODs submitted. Once your MOD has been approved or denied, you will receive a PM with validation notes. This can include issues in the code, or problems found while testing. Even if your MOD is approved, it is suggested that the validation notes be taken into account for the next version of your MOD. If your MOD is denied, most of the issues found in the report must be changed before your MOD can be resubmitted. If you find that something in the validation report is incorrect or that there is an issue in the report, you may communicate that by replying to your Queue Discussion topic, found in the Discussion/Support tab of your Contribution page. This topic is only viewable to you, the MOD team, and the Junior MOD Validators. If your MOD is denied multiple times, do not become discouraged. Sometimes, when different people look through your code and test your MOD, different problems will be found. Simply fix the issues and resubmit your MOD.

So when you get your MOD approved it is time to provide support for it. This is not required but is asked for by the phpBB.com MOD Team that you update for new versions/bug fixes and support your MOD. I suggest you subscribe to the support tab in your Modification section in the Modifications Database so that you get updates when support is posted. When new phpBB Versions are released you are asked to re-submit it with any fixes that my be required.

If you wish to add features to it you can also re-submit it at any time for that.
And that’s it really. If you have finished this Modification perhaps you would like to start work on another modification (Maybe from the MOD Requests Forum).

In closing, this guide is just that: a guide. It is how I tend to approach the MOD writing process. If you have a method that works better for you, then you are welcome to use that and possibly share it in the discussion topic. It is quite common to skip the earlier section with planning but that is totally up to you. It can, however, prevent confusion, duplication and missing code later on.
Also remember, if you ever need help with anything MOD related you can always ask in the MOD Writers Discussion, in the Queue Discussion Topic (for queries about issues in a validators report being un-reproducible, queries as to what they mean or any notes to the team about issues that arise in validation etc.) or by asking on the FreeNode #phpbb-coding IRC Channel.

January 11, 2012 04:55 PM

January 10, 2012

phpBB Doctor Blog • drathbunFormer Team Member

Passwords Matter

Way back in 2009 phpbb.com was hacked via an exposure in the phplist mailing list software. (Just to be very clear, there was no exploit found in the phpBB code used to run the site, only this supplementary program used to run the email notification system.) One of the results of the hack of phpbb.com was that several thousand user passwords were exposed and posted on the Internet. They were exposed, frankly, because they were too simple, and that’s not phpBB’s fault.

Pet Names Don’t Make Good Passwords

People often struggle with remembering passwords. Yes, there are programs that can help you with that, but are they really that much more secure than writing things down on a piece of paper? Here’s one take from one of my favorite web comic authors:

The bottom line is that a password is supposed to protect an account from unauthorized access. It’s not supposed to prevent authorized access, but for infrequently used resources it can do that as well. :)

Password Storage

One indicator of concern to me is whether a web site can send you your existing password when you forget it. That means they’re likely using an encryption process rather than a hashing algorithm to store passwords. And that means anyone with access to the decryption key can read every password in the system. phpBB2 uses a hashing algorithm which means as a board owner / administrator I can safely say to any of my users that I cannot tell them what their password is. I can assign them a new one, and of course there is a self-service option available to phpBB2 users that will do just that, but I cannot tell them what their existing password is. In a default phpBB2 installation a user password is hashed and stored as a 32 character string. Similar passwords will generate very dissimilar hash strings, so there is no way for someone to easily guess what a password might be simply based on the results of the hash. For example, here are a few similar input values and the resulting MD5 hash outputs:

test     098f6bcd4621d373cade4e832627b4f6
Test     0cbc6611f5540bd0809a388dc95a615b
tset     751ec45015a704a39dc403001c963e97
test1    5a105e8b9d40e1329780d62ea2265d8a

Despite the similarity of the input values they all have very different hash values. That means that similar hash values are going to have very different input values as well. Also, because a hash is generated by a one-way function there is no way to recreate the input value based on the hash. (There are some cases where two different input values could generate the same output hash; that’s allowed.)

If that’s the case, then how can I tell if a user has entered the correct password when they log in? It’s actually really simple. When a user logs in, phpBB takes the password provided on the form, hashes it, and then compares the resulting hash value to the hash stored in the database. As long as the input values are the same (entering “test” as my password will always generate 098f6bcd4621d373cade4e832627b4f6 as the hash value) then the password matches and the user is logged in.

How, then, were hackers able to decipher the passwords stored in the phpBB.com database if there is no way to reverse a hash process? They didn’t. :) Instead they used a lookup table (also called a rainbow table) to match up known hash values with their source value. Imagine taking a dictionary and running every word in it through the hashing process. When you’re done, you have a list of hashes and their source. By matching password hash values against the list of known entries the hackers were able to figure out what a number of phpBB.com user passwords were.

To help defeat this sort of process, phpBB3 now uses a salted hash which provides even more security. I imagine someone has back-ported this to phpBB2 as a MOD but I have not had time to look for one yet. But the fact is if a secure password is used (a combination of words and numbers, or as the cartoon above suggests several words run together) the odds of the password appearing in a rainbow table are extremely slim, and even the simple hashing algorithm used in phpBB2 is essentially safe. Even changing the case of one letter helps, as shown in these two hash examples from earlier:

test     098f6bcd4621d373cade4e832627b4f6
Test     0cbc6611f5540bd0809a388dc95a615b

Changing the “t” to a “T” changes the hash. It might be even better to change something other than the first letter, for example changing the “e” to an “E” as in tEst. That’s a very easy word to remember and it’s not likely to show up on any rainbow table, unless a hacker wants to run every possible combination of upper and lower case letters for every possible dictionary word. :shock: Ultimately it would be better to use a combination of letters (mixed case), numbers, and even symbols where allowed.

So how important is it that phpBB3 uses a salted algorithm for passwords? If people were smart about what passwords they use then it really would not matter so much. :) But as shown in some of the related links at the end of this post, people are not very smart about the passwords they pick. In that case, the salting process is quite beneficial.

Social Engineering

Which brings me to my final issue for this post: people can be fond of certain passwords and often use (reuse) them on more than one site. If you use the same password for a phpBB board that you use for your banking system, then change it. Change it now. For one thing, most phpBB board owners do not use a secure protocol (such as HTTPS rather than HTTP) for their sites. That means the password is exposed during the transmission of the form data. Ultimately no matter how a password is stored or how complex the password might be, if people can be tricked into giving up their passwords by phishing emails, web site plugins, and other techniques, that’s a problem. If a hacker manages to grab the password for one site, they may then be able to use it on other sites. I have made a practice of using a unique password on every service I sign up for in order to prevent this for a very long time. But once again, xkcd.com says it better:

Related Links

by Dave Rathbun at January 10, 2012 05:53 PM

January 06, 2012

subblue • subBlueFormer Team Member

L'Eclaireur

Animations from an installation at L'Eclaireur in Paris.

L'Eclaireur Sévigné has a unique installation with 147 screens dotted around like picture frames. Early in 2011 I was commissioned to create some original videos for the space, which have been playing for the last six months.

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/41558647?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34656394?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34657460?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34657542?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34657573?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34657651?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34657710?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34658252?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34658271?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34658286?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34659879?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

<iframe allowfullscreen="1" frameborder="0" height="329" mozallowfullscreen="1" src="http://player.vimeo.com/video/34659899?portrait=0&amp;loop=1" webkitallowfullscreen="1" width="585"></iframe>

January 06, 2012 12:00 AM