Yes, it’s true. There have essentially been no new updates since the recovery from the server crash, with the exception of the 2018 standings graph. Sooooo much has happened. I’m still trying to figure out the future of this site, and involved in a lot of other things like for example this upcoming Subbuteo table soccer tournament.
Portland Table Soccer Club
One of the things that happened since this site went down, there is now a thriving Subbuteo table soccer club in Portland. Check us out on Facebook, or come by one of our bi-onthly Monday night events at the Portland Game Store. We’re listed on their (online) calendar as Subbuteo – Table Soccer. In fact, if you’re reading this on the day the postwar published (3-19-18) we’re playing tonight. No experience necessary. Expect a lot more Subbuteo-based content on this site, as soon as I get some time to work on a new theme.
We’re back!!!!!!!!!!!!!!!!!!!!!
Just 3 days before the 2018 season and PTFZine is online again! So much has happened that I wasn’t able to post about since the site went down in October… but it’s finally online again!
TLDR: Web host had massive hard drive failure. Everything was lost. Now, several months later, they managed to recover the files, and I’ve managed to reinstate them. There might be some weirdness here and there that I haven’t discovered yet, and if there is, I will be fixing that in the coming week.
The full Story: My web host had a catastrophic RAID failure, and had no off-site backups. Apparently, that’s my job. They must have have done something wrong however, because after they tried to fleece their customers for a forensic hard drive recovery service and didn’t get enough takers, the eventually decided to pay for it themselves and only charge their users $20 a site to retrieve what they could. Fortunately, everything appears to have been recovered for this domain.
One of these figures is a larger than life legend
One of these figures is a larger than life legend, and the other is Paul Bunyan! Timber Jim outside Providence Park showing off his Paul Bunyan sticker benefiting the Kenton neighborhoods restoration efforts for the beloved Paul Bunyan statue. Get yours at Green Zebra grocery in the Kenton neighborhood. Check out that ring! Then check out the Timber-themed patch that the sticker was based on.
He always beat me at Subbuteo…
My curiosity about Subbuteo finally reached tipping point after seeing Subbuteo article on MLSsoccer.com. Not being from the U.K., I didn’t grow up with it as a kid. In fact the first time I ever became aware of it was as a teenager, listening to My Perfect Cousin, by the Undertones.
Even at the age of ten
Smart boy Kevin was a smart boy then
He always beat me at Subbuteo
’cause he flicked the kick
And I didn’t know
Seeing the custom painted Sporting Kansas City Subbuteo teams on the MLS web made me pul the trigger. SKC is my lest favorite team outside of the Sounders, but those figures looked sharp. I figured it would be easy to find in the U.S., being owned by Hasbro these days, but it isn’t distributed here. I tried local game shops, but had to go to Amazon to find it. In my search I went to Ebay as well, seeing all the different teams available got me thinking. On a whim, I entered “Portland Timbers Subbuteo” and it actually returned a result, but first, lets’ get to the Subbuteo review.
Multiple updates made since the original post!
Sweet eBay score…
Timber Jim IPA
Somehow I missed this Hopworks release of Timber Jim IPA that benefits Meals on Wheels People. Jim does not stop doing things for other people. I had shaken his hand a couple times at matches did not really meet him as person until he found out about a patch I made modeled after the Paul Bunyan statue in Kenton. He wanted to use the image for stickers as a fundraiser for restoration efforts. (More on that to follow) It was wonderful to meet him in a non-Timbers context. He is gung-ho about everything he does. Jim’s mother used to drive for Meals on Wheels up until she started needing their services. Watch him talk about it on KPTV. Despite Widmer’s official relationship with he Timbers, this is at least the second collaboration by Hopworks with a Timbers figure.
[Images via @hopworksbeer]
Now Tracking Points Per Game
There are some minor additions to the Season Tracker seen at the top of every page. Points Per Game (PPG) have been added to individual games (visible on rollover) as well as the current PPG in the legend under the individual match boxes. On the Standings chart, PPG has been added as well as the individual match result and the opposing team. As a bonus, the data is pulled from the match results the Season Tracker uses. This means the chart is updated the fly as I update a match, and I don’t have to monkey with the embedded javascript in the post. Can you say Data Integrity? Tim will appreciate this.
MLS Season Tracker Plugin for WordPress
I made a WordPress plugin to help visualize match results and double as schedule that would allow me to easily see who and when we were playing. If you operate a WordPress-based site you can use it to track the Portland Timbers, or some other, inferior MLS team. Rolling over one of those squares will give you the match date, and if the match is finished, goals, and other results. A running tabulation of the season is kept at the bottom, and you can sort by home or away, conference, and games played, and more.
You can see it under the banner at the top of every page. Those are generated by a function called in the theme template. You can also generate it inline with shortcode in a post. [See below]
2016 Timbers Schedule and Results
Goals For: 2
Goals Against: 1
GP: 1
PPG: 3
Conference: 3
Supporters Shield: 6
MLS Power Ranking: 1
Goals For: 1
Goals Against: 2
GP: 2
PPG: 1.5
Conference: 6
Supporters Shield: 9
MLS Power Ranking: 2
Goals For: 2
Goals Against: 2
GP: 3
PPG: 1.33
Conference: 8
Supporters Shield: 13
MLS Power Ranking: 3
Goals For: 1
Goals Against: 4
GP: 4
PPG: 1
Conference: 9
Supporters Shield: 16
MLS Power Ranking: 8
Goals For: 1
Goals Against: 1
GP: 5
PPG: 1
Conference: 9
Supporters Shield: 17
MLS Power Ranking: 10
Goals For: 1
Goals Against: 3
GP: 6
PPG: 0.83
Conference: 9
Supporters Shield: 17
MLS Power Ranking: 10
Goals For: 3
Goals Against: 1
GP: 7
PPG: 1.14
Conference: 8
Supporters Shield: 14
MLS Power Ranking: 8
Goals For: 1
Goals Against: 1
GP: 8
PPG: 1.13
Conference: 8
Supporters Shield: 13
MLS Power Ranking: 10
Goals For: 2
Goals Against: 1
GP: 9
PPG: 1.33
Conference: 7
Supporters Shield: 9
MLS Power Ranking: 9
Goals For: 1
Goals Against: 2
GP: 10
PPG: 1.2
Conference: 8
Supporters Shield: 10
MLS Power Ranking: 8
Goals For: 1
Goals Against: 2
GP: 11
PPG: 1.09
Conference: 9
Supporters Shield: 13
MLS Power Ranking: 8
Goals For: 1
Goals Against: 2
GP: 12
PPG: 1
Conference: 9
Supporters Shield: 15
MLS Power Ranking: 12
Goals For: 4
Goals Against: 2
GP: 13
PPG: 1.15
Conference: 8
Supporters Shield: 13
MLS Power Ranking: 11
Goals For: 1
Goals Against: 1
GP: 14
PPG: 1.14
Conference: 8
Supporters Shield: 14
MLS Power Ranking: 11
Goals For: 1
Goals Against: 0
GP: 15
PPG: 1.27
Conference: 7
Supporters Shield: 10
MLS Power Ranking: 9
Goals For: 2
Goals Against: 2
GP: 16
PPG: 1.25
Conference: 8
Supporters Shield: 12
MLS Power Ranking: 9
Goals For: 3
Goals Against: 2
GP: 17
PPG: 1.35
Conference: 5
Supporters Shield: 8
MLS Power Ranking: 8
Goals For: 0
Goals Against: 0
GP: 18
PPG: 1.33
Conference: 7
Supporters Shield: 10
MLS Power Ranking: 7
Goals For: 0
Goals Against: 0
GP: 19
PPG: 1.32
Conference: 7
Supporters Shield: 10
MLS Power Ranking: 7
Goals For: 1
Goals Against: 1
GP: 20
PPG: 1.3
Conference: 7
Supporters Shield: 11
MLS Power Ranking: 7
Goals For: 3
Goals Against: 1
GP: 21
PPG: 1.38
Conference: 6
Supporters Shield: 8
MLS Power Ranking: 6
Goals For: 2
Goals Against: 1
GP: 22
PPG: 1.45
Conference: 7
Supporters Shield: 11
MLS Power Ranking: 11
Goals For: 0
Goals Against: 1
GP: 23
PPG: 1.39
Conference: 7
Supporters Shield: 12
MLS Power Ranking: 11
Goals For: 3
Goals Against: 0
GP: 24
PPG: 1.46
Conference: 6
Supporters Shield: 10
MLS Power Ranking: 9
Goals For: 0
Goals Against: 2
GP: 25
PPG: 1.4
Conference: 6
Supporters Shield: 11
MLS Power Ranking: 11
Goals For: 1
Goals Against: 3
GP: 26
PPG: 1.35
Conference: 6
Supporters Shield: 11
MLS Power Ranking: 12
Goals For: 4
Goals Against: 2
GP: 27
PPG: 1.41
Conference: 6
Supporters Shield: 11
MLS Power Ranking: 10
Goals For: 1
Goals Against: 3
GP: 28
PPG: 1.36
Conference: 6
Supporters Shield: 11
MLS Power Ranking: 11
Goals For: 1
Goals Against: 0
GP: 29
PPG: 1.41
Conference: 6
Supporters Shield: 10
MLS Power Ranking: 9
Goals For: 2
Goals Against: 1
GP: 30
PPG: 1.47
Conference: 5
Supporters Shield: 9
MLS Power Ranking: 7
Goals For: 1
Goals Against: 3
GP: 31
PPG: 1.42
Conference: 6
Supporters Shield: 10
MLS Power Ranking: 11
Goals For: 0
Goals Against: 1
GP: 32
PPG: 1.38
Conference: 7
Supporters Shield: 13
MLS Power Ranking: 14
Goals For: 1
Goals Against: 0
GP: 33
PPG: 1.42
Conference: 7
Supporters Shield: 12
MLS Power Ranking: 10
Goals For: 1
Goals Against: 4
GP: 34
PPG: 1.38
Conference: 7
Supporters Shield: 12
MLS Power Ranking: x
The project started last season. Once I figured the basics of how I wanted it to work, I coded up some CSS, Javascript, and PHP to make it work. It’s pretty easy in a one use situation, where you’ve only got one season and you’re only interested in one specific team. Updating results was a matter of editing a text file with serialized information. It was simple, but not simple enough. I wanted to be able to do the whole thing in the backend of WordPress, make it reusable, and not limit it to one team. I imagined a scenario where someone might want to show two different teams on the same page, or the same team in multiple seasons. Simple enough… sort of. It needed to be flexible enough to easily accommodate expansion teams and teams that switch from one conference to another during different seasons. Figuring out the approach to take was the hardest part. It would have been easiest to create my own tables in the MySQL database, but I considered it a challenge rearrange my thinking and make it work with custom post types, taxonomy, and custom meta boxes.
Installing and activating the plugin automatically creates the teams. It’s up to you to create the matches and sign home and away teams to each match. You can do it manually, or you can upload it in a CSV spreadsheet and do it all at once. I used the MLS calendar subscriptions viewed in the Google Calendar, agenda tab. A copy and paste into a text document and some search and replacing made it a pretty quick affair, and one where I didn’t have to worry about typos on match dates. Now that I’ve got it figured out, I might even consider converting some other teams schedules and making them available for others.
Implementing it in a site can be done with a function call in a template, or shortcode in a WordPress post or widget. Of course, if you fail to specify a team, it defaults to the mighty Portland Timbers. After a game is done, you edit the match with the goals and optional information like Conference and Supporters Shield standings. If you’re logged in as an admin you’ll be able to access edit links directly from the match info rollovers.
On the roadmap, I want to submit it to the WordPress Plugin Repository. There are some minor options I’d like to add, and some tweaks to the UI. Once that’s tackled, I want to work on making the CSS more elegant, but I figure that can wait until the mechanics are more or less complete. Also, the interface is based on rollovers, so I need to make it work on touch devices too, because apparently these new-fangled iPhones and iPads are going to stick around…
I’d love to hear feedback. Until it makes it to the official repository, you can download the code here. No, I’m not on Github.