Showing posts with label PAPER. Show all posts
Showing posts with label PAPER. Show all posts
Wednesday, November 23, 2011
PAPER Ratings are Up
It's still early days yet, but individual PAPER ratings and translated statistics are up for the current season.
Labels:
PAPER
Tuesday, February 15, 2011
What's a Chris Singleton Worth?
I'm currently working on a program that will allow me to replace a player in a team's lineup with one or more players, or even to build theoretical lineups and player rotations from scratch. This will have some fun applications--who would win if all-conference teams could play each other?--but more importantly it'll make it possible to assess exactly what kind of impact an injury or suspension of a key player is likely to have on a team. It's not ready yet, but hopefully I'll have the bugs worked out in time for the NCAA Tournament.
Until then, though, we can use PAPER to make some quick calculations about what kind of impact a key player's absence might have. Here's how, using Florida State's Chris Singleton, out for at least a month with a broken foot, as the test case:
PAPER tells us that Singleton is an ordinary offensive player (worth 0.1 points per 100 possessions less than an average BCS-league power forward) and an outstanding defensive one (5.2 points per 100 possessions better than an average BCS power forward). For every 40 minutes that Singleton spends on the floor, his team is going to be about 3⅓ points better than they would be if they had an ordinary player.
Of course, Florida State won't be replacing Singleton with one ordinary player; they'll be filling his 30 minutes per game by increasing the minutes played by Okaro White and Bernard James and the return from injury of Xavier Gibson and Terrance Shannon. So we'll have to make some guesses about how Leonard Hamilton will distribute playing time, and four our purposes I'm going to give 10 minutes each to White and James and 5 minutes each to Gibson and Shannon. According to PAPER, the rates for the five players in question are thus:
| Player | Offense | Defense |
| Chris Singleton | -0.10 | -5.21 |
| Okaro White | -0.55 | -1.11 |
| Bernard James | -0.23 | -3.34 |
| Xavier Gibson | -4.16 | +0.26 |
| Terrance Shannon | -4.27 | +0.85 |
The value of the four-headed monster replacing Singleton can be determined by simply multiplying each individual's value by the share of Singleton's minutes he'll be filling, so on offense it's:
[(-0.55 x 10) + (-0.23 x 10) + (-4.16 x 5) + (-4.27 x 5)] / 30
Which yields -1.67 points per 100 possessions. Since Singleton himself is worth -0.1 points per 100 possessions, the difference between Singleton and his replacements on offense is -1.57 points per 100 possessions. Performing the same calculation for the defensive side of the ball, we get a value for the four-headed replacement of -1.3 points per 100 possessions, or 3.91 points per 100 possessions more than Singleton would allow.
All this is still pretty abstract, so it's time to put those numbers into context. To do that, let's apply them to Florida State's TAPE ratings. To do that, we just multiply each difference by the proportion of FSU's minutes played by Singleton (because the 25% of the game during which Singleton was on the bench before will for our purposes be unaffected by his absence), and then add that number to FSU's offensive and defensive effectiveness.
On offense, a Singleton-free Florida State team would score 0.9459 points per possession against an average BCS team, which drops the Seminoles from #157 to #190 nationally. On defense, they would allow 0.9434 points per possession, which amazingly still keeps them at #2 in the nation. What's important here is to note that the offensive number is still higher than the defensive one. Florida State's TAPE rating without Singleton would be .50484. Since TAPE is scaled to BCS-average, that means that even without Singleton, the Seminoles would be an NCAA Tournament bubble team.
Bottom line: In terms of points on the scoreboard, over the course of a 40-minute, 69-possession conference game, Florida State will score 0.8 fewer points and give up 2 more points without Singleton than they would with him. Over the final five games of the season, his absence is going to cost the Seminoles about four-tenths of a win. It shouldn't keep Florida State out of the NCAA Tournament, but if Singleton's still not ready to go by mid-March, it probably should cost Florida State a couple seed-lines on the S-curve.
Labels:
Florida State,
PAPER
Monday, December 6, 2010
PAPER Player Ratings Are Up
The national PAPER ratings are up and they do surprisingly well in the sniff test. Some of the positional assignments are still a little bit off, but they should get better fairly quickly. (Positions in the system are assigned based on a regression model using five rate stats, and this early in the season there's still some slack in that line.) In addition to PAPER, there are a couple other reports available. The first lists the line stats of each player who's played at least 10 minutes per game, translated into a BCS-league environment. The second consists of each player's rate stats, also translated into a BCS-league environment.
The conference-only reports are also updated with information from the current season, and will continue to be updated as conference games are played. Those reports are going to be wacky until everyone's played at least 3 or 4 conference games, so don't read much into them until the middle of January or so.
The conference-only reports are also updated with information from the current season, and will continue to be updated as conference games are played. Those reports are going to be wacky until everyone's played at least 3 or 4 conference games, so don't read much into them until the middle of January or so.
Thursday, December 17, 2009
Position Rankings Are Up
I've added player positions to the PAPER and Translation reports, as well as a series of links with each positon pre-filtered for your convenience. Since I have neither the time nor the inclination to individually assign a position to all 4,406 players in the active database, these positions are assigned using a formula that categorizes them based on 8 rate stats.
Thursday, December 10, 2009
PAPER Teaser
I'm putting the finishing touches on a method for determining a player's position based on his box score stats. Instead of being labeled by the meaningless and unhelpful designations G, F, G-F, F, and C as they are on most rosters, players will be categorized into one of seven groups: Point Guards, Combo Guards, Shooting Guards, Swingmen (I'm open to a better name for this category), Small Forwards, Power Forwards, and Bigs. These designations do a better job of reflecting actual player usage than the traditional G-F-C or 1-2-3-4-5, and they should both streamline the nightly generation of the player ratings, as well as allow for positional rankings in addition to the overall rankings.
In preparation for the new PAPER, I've run and uploaded the first player translations of the season. Each player's line represents what his per-game averages would be if he was on a team of average BCS league players playing at an average BCS league pace against average BCS league teams.
In preparation for the new PAPER, I've run and uploaded the first player translations of the season. Each player's line represents what his per-game averages would be if he was on a team of average BCS league players playing at an average BCS league pace against average BCS league teams.
Labels:
PAPER
Tuesday, March 10, 2009
A Quarter Win from Normal: Tyler Hansbrough in 2009
Here's the thing, though: there wasn't anything extraordinary about Tyler Hansbrough's 2009 season. And I don't mean that in an "After three years we've come to expect greatness from Psycho T, so he has to do something more in his senior year to really impress" way. I mean that he didn't do much more than would be expected of any ACC-level big man.
The one thing Tyler Hansbrough did very well, just as he has throughout his career, was score points. Even after adjusting for the pace of play (Carolina plays 6.8% faster than the league average) and the quality of his teammates (Hansbrough was set up well and often by three better-than-average passers in Lawson, Ellington, and Green), Hansbrough would score 16.9 points per game for a typical ACC team in conference play. That rates Hansbrough best among big men and 8th-best in the league.
As a rebounder, Hansbrough racked up large numbers, but on a percentage basis he was just about average. A 6'9" and 250-pound player should rebound 1 out of every 9 of his team's misses; Hansbrough rebounded 1 out of every 9.5. Someone that size should rebound one out of every 6.2 of his opponents' misses; Tyler rebounded 1 out of every 5.8.
Defensively, Hansbrough grades out below average. Someone his size is expected to block 1 out of every 22 two-pointers attempted by his opponents; Hansbrough blocked one out of every 72. He should have recorded a steal once every 59 defensive possessions; Tyler made a steal once every 119. Even with a better than normal foul rate and slightly better than average defensive field goal percentages, Hansbrough was a little more than a point per game worse than an average big man.
All in all, Hansbrough was a slightly better-than-average ACC big man this year. His reputation and eye-popping counting stats made him a shoo-in for first-team all-league honors (and, it would seem, the frontrunner for a repeat as ACC Player of the Year), but in terms of actual value he was the fifth-best player on his own team.
Thursday, February 19, 2009
Conference-Only PAPER Is Live
For space reasons, there are separate files for BCS leagues, non-BCS majors (which I define as the Atlantic 10, Conference USA, Missouri Valley, Mountain West, West Coast, and WAC conferences), and everyone else. The first two contain lines for every player who has seen the floor in conference play, while the latter only contains players who've logged 25% or more of their team's floor time. Included in each file is each player's net offensive and defensive contribution, wins added, plus a translated per-game line which places each player into a league-average offense and league-average pace. There are links to each file in the sidebar, and I plan on updating these daily for the remainder of the season.
Wednesday, February 11, 2009
PAPER in Translation
All of the bugs are now worked out, and the national version of PAPER is up and should continue to be updated at least a couple times a week for the remainder of the season. It takes about 25-30 minutes to run the whole simulation and I haven't written code to automate it to run when I'm not around or awake, so until that happens it'll probably only be updated on Mondays and Fridays.
The column headers on the report are pretty self-explanatory, but there is a new feature, and it's actually what the report is sorted on: Wins Added. This represents the number of wins over the course of a 16-game conference season that the player would add to an average BCS-League team relative to a league-average player at the same position. So, for example, if you replaced a league-average power forward on a .500 BCS-League team with Blake Griffin for 33 minutes a game, that team would be expected to win 71% of its games against other BCS teams.
The ratings in the PAPER report are based on all games played between Division I teams. Just as in TAPE, each team and individual performance is translated from the actual statistics into a hypothetical performance against an average BCS team. The individual translations are now available for all players who have logged at least 10 minutes per game.
The translations report is sorted by a column marked PARTOBS, which is my preferred quick-and-dirty way of measuring performance. It is simply Points plus Assists plus Rebounds minus Turnovers plus half each of Blocks and Steals. While there's only a moderate correlation between PARTOBS and actual value--it's possible for players to run up gaudy counting stats while still doing their team more harm than good--there is a very strong correlation between PARTOBS and perceived value. Check out any league's all-conference team and it's a good bet that most if not all of the players selected are at the top of the conference's leaderboard. In any case, I sorted on PARTOBS because it's better than just points or rebounds.
Reading either of these reports in HTML form is kind of a drag, so feel free to download either PAPER (csv, xls, ods) or the Translations (csv, xls, ods) into your favorite spreadsheet software, where you can filter and sort to your heart's content.
The next item on the punch list is conference-only PAPER for each of the BCS leagues. If all goes according to plan I should have more on that by the early part of next week.
The column headers on the report are pretty self-explanatory, but there is a new feature, and it's actually what the report is sorted on: Wins Added. This represents the number of wins over the course of a 16-game conference season that the player would add to an average BCS-League team relative to a league-average player at the same position. So, for example, if you replaced a league-average power forward on a .500 BCS-League team with Blake Griffin for 33 minutes a game, that team would be expected to win 71% of its games against other BCS teams.
The ratings in the PAPER report are based on all games played between Division I teams. Just as in TAPE, each team and individual performance is translated from the actual statistics into a hypothetical performance against an average BCS team. The individual translations are now available for all players who have logged at least 10 minutes per game.
The translations report is sorted by a column marked PARTOBS, which is my preferred quick-and-dirty way of measuring performance. It is simply Points plus Assists plus Rebounds minus Turnovers plus half each of Blocks and Steals. While there's only a moderate correlation between PARTOBS and actual value--it's possible for players to run up gaudy counting stats while still doing their team more harm than good--there is a very strong correlation between PARTOBS and perceived value. Check out any league's all-conference team and it's a good bet that most if not all of the players selected are at the top of the conference's leaderboard. In any case, I sorted on PARTOBS because it's better than just points or rebounds.
Reading either of these reports in HTML form is kind of a drag, so feel free to download either PAPER (csv, xls, ods) or the Translations (csv, xls, ods) into your favorite spreadsheet software, where you can filter and sort to your heart's content.
The next item on the punch list is conference-only PAPER for each of the BCS leagues. If all goes according to plan I should have more on that by the early part of next week.
Monday, February 9, 2009
Do You Know Who This Man Is?
His name is Kenneth Faried and he plays for Morehead State. He's a rebounding machine, and he just might be the best defensive player in the country.I'm finally close to having PAPER for all Divsion I players. Once all the kinks are worked out, PAPER will represent the value a player would have, in terms of marginal points scored and allowed, to an average BCS Conference team. Right now, the point values don't add up--offensive value is tremendously overstated, and defensive value is understated--but I'm confident in the players' positions relative to one another.
The 25 best players in college basketball, through the games of Saturday, February 7:
1. DeJuan Blair, PittsburghThe complete list is available here.
2. Terrence Williams, Louisville
3. Kenneth Faried, Morehead State
4. Blake Griffin, Oklahoma
5. John Bryant, Santa Clara
6. Tony Gaffney, UMass
7. Taj Gibson, USC
8. Jared Quayle, Utah State
9. Ty Lawson, North Carolina
10. Cole Aldrich, Kansas
11. Stephen Curry, Davidson
12. Trevor Booker, Clemson
13. Jeff Pendergraph, Arizona State
14. Jarvis Varnado, Mississippi State
15. Talor Battle, Penn State
16. Tommy Brenton, Stony Brook
17. Lee Cummard, BYU
18. Nick Calathes, Florida
19. Gordon Hayward, Butler
20. Manny Harris, Michigan
21. Patrick Patterson, Kentucky
22. Luke Harangody, Notre Dame
23. Chester Frazier, Illinois
24. James Harden, Arizona State
25. Aaron Jackson, Duquesne
Labels:
PAPER
Friday, March 7, 2008
PAPER 2.0 Has Been Uploaded
The new version is based on a complete overhaul (and much-needed simplification) of the formulae that produce PAPER, as well as an entirely new possession model that relies almost entirely on observed data instead of relying mostly on estimates. The end result looks the same, though, and represents the same information (RATE is a player's value per-possession, PAPER is a cumulative statistic based on RATE that represents the number of points a player is worth, versus a hypothetical league-average player, and Wins Added are the number of wins the player would be worth to an otherwise-average team over the course of a 16-game conference season). The full list can be found here (note that only 2008 is PAPER 2.0; all the prior years are still based on the inferred data, and I seriously doubt that I'll ever get around to changing that).
Before too long I'll make a post (or several posts) highlighting the new system, but for right now I just want to get the thing posted.
Before too long I'll make a post (or several posts) highlighting the new system, but for right now I just want to get the thing posted.
Labels:
PAPER
Monday, February 18, 2008
PAPER 1.2 Is Ready
I've finally gotten around to uploading the current version of PAPER to the spreadsheet. It's taken so long to get the data up because I'm now using full play-by-play data instead of just the boxscore data that I was using for past years. This means that I've got actual possession counts for all games, full substitution data for all games not played in Chapel Hill and Blacksburg, and that everything is generally going to be a whole lot more accurate than the previous years.
- Your current All-ACC First Team (on paper, of course): Greivis Vasquez, DeMarcus Nelson, Ty Lawson, K.C. Rivers, and Sean Singletary. This is a guard's league.
- J.J. Hickson and Kyle Singler get all the attention, but Wake's James Johnson is every bit as good as those two.
- The best defensive player in the conference right now is Virginia Tech's Jeff Allen.
- Ben McCauley and Brandon Costner...ouch.
- Look for Virginia's play to continue to improve in the second half of the season as they replace the bulk of Ryan Pettinella's minutes with those of league-average Lars Mikalauskas.
- Every Duke regular has a negative (which is a good thing in this case) Defensive Rate.
I'll be going through this week and completely re-working the code for PAPER. Right now it's basically just using the old system and bypassing all the estimates with real data. The new code will build a new possession model based completely on the PbP data.
Labels:
PAPER
Tuesday, January 22, 2008
Tale of the TAPE
One of the things I was hoping to do with the site this season was to produce PAPER numbers for the entire season, not just the conference portion of the schedule. The problem with that is that schedules are so varied that it's hard to find a way to make an aples-to-apples comparison. I thought about using items that were already in the ACC database--specifically treating each opponent from a given conference as the same team--but rejected that idea pretty quickly. There's just too much variation in quality within conferences for that to work.With no easy solution available, I decided to go big. I've entered all the linescore data from every game between Division I teams into the database and I've used that to adjust every team's offensive and defensive rates across all the statistical categories that relate to team scoring. That data, which represents what each team would have done over the course of the season if all games were played against a Division I-average opponent on a neutral floor, can be found here.
With all that done, it's just a matter of plugging numbers into the same probabilistic model used for PAPER to arrive at an estimate of the number of points each team in Division I would score and allow against neutral competition. The Pythagorean expectation derived from those numbers (an exponent of 9.2 maximizes the r-squared in this model) is the Team Adjusted Probabilistic Effectiveness, or, in keeping with the office supplies theme, TAPE. The current Top 25 (through the games of 1/21/08) are:
The full list of TAPE is available here. Other information on the spreadsheet includes each team's full raw winning percentage and Pythagorean expectation (exponent 8.5), as well as their adjusted records converting each opponent into a hypothetical average team.
Coming up next: using the component pieces of TAPE to predict the future.
Thursday, March 1, 2007
ALL-ACC ON PAPER: WHERE'S HANSBROUGH?
With only 8 games left in the ACC's regular season, it's time to start seriously talking about All-ACC teams. There's general consensus out there that the ACC Player of the Year is going to be one of six players: Zabian Dowdell, Jared Dudley, Tyler Hansbrough, J.R. Reynolds, Al Thornton, or Sean Singletary. PAPER agrees with five of those six, but sees Josh McRoberts as more valuable than Hansbrough.How can that be, though? Hansbrough is the 5th-leading scorer and 3rd-leading rebounder in ACC play, and has been just about exactly what everybody thought he would be in his sophomore season. McRoberts, on the other hand, has been labeled a disappointment after being a preseason All-ACC choice. Is the conventional wisdom--gasp!--wrong?
Well, yeah. Offensively, neither player has actually been all that impressive. Yeah, Hansbrough pours in the points, but he's barely above average on the boards, he turns the ball over more often than he ought to, and he's a lousy passer, even for a big man. McRoberts' advantages in range, field goal percentage, and setup rate are offset by an even greater tendency to turn the ball over and his below-average offensive rebounding.
But offense isn't the difference between these two. The fact is, Hansbrough, on paper at least, is only a slightly above-average defensive player, while McRoberts has been the best defensive player in the league by a huge margin. Most of that difference is due to the fact that Hansbrough is the worst net shot blocker in the league (net blocks being the difference between expected block rate and actual block rate). When you're 6'9" and 245 pounds, you've got to have more than 8 blocks in the season. Throw in that Tyler's also worse than average at forcing turnovers, and the only thing that's keeping him from being below league average is his high rebound rate.
None of this is to say that Tyler Hansbrough isn't a good player. He is. This year, though, he hasn't been an elite player.
Tuesday, February 27, 2007
AN INTRODUCTION TO PAPER
On the right side of the page you'll find a series of links to various statistics. Some of them are intuitive, others not so much. The one I'm most proud of is PAPER, which stands for Player Adjusted Probabilistic Effectiveness Rating. It is my attempt to condense all of an individual's box score numbers into one unified number.
PAPER represents the number of points a player would contribute to a league-average team over the course of a 16-game conference season, relative to the expected contribution of a hypothetical league-average player. Only statistics from conference games are used. PAPER does not simply assign a set value to the various statistics that individuals accumulate. Instead, it uses a model of a typical league possession and introduces the player's net contribution to determine what the expected scoring output would be.
WHAT'S IN A POSSESSION?
When a team gains possession of the ball, one of three things is going to happen: they will turn the ball over, a player will be fouled and sent to the free throw line, or they will take a field goal attempt. (Actually, there is a fourth possible outcome--the end of a period or game--but we're not going to concern ourselves with that right now.) Within all but the first, there are additional possible outcomes. Free throws and field goals can be made, in which case points are scored, and the possession ends. They can also be missed, in which case either the defense grabs the rebound, and the possession ends, or the rebound goes to the offense, in which case the possession is renewed.
The first step in calculating PAPER is to determine the frequency with which each of these events occur. This is simply a matter of dividing the number of times an event took place in all conference games by the total number of possessions in all conference games.
DETERMINING PLAYER CONTRIBUTION
The next step is to similarly find the frequency, on a per-possession basis, with which a player causes an event to occur. To determine offensive PAPER we'll need to know each of the following:
PAPER represents the number of points a player would contribute to a league-average team over the course of a 16-game conference season, relative to the expected contribution of a hypothetical league-average player. Only statistics from conference games are used. PAPER does not simply assign a set value to the various statistics that individuals accumulate. Instead, it uses a model of a typical league possession and introduces the player's net contribution to determine what the expected scoring output would be.
WHAT'S IN A POSSESSION?
When a team gains possession of the ball, one of three things is going to happen: they will turn the ball over, a player will be fouled and sent to the free throw line, or they will take a field goal attempt. (Actually, there is a fourth possible outcome--the end of a period or game--but we're not going to concern ourselves with that right now.) Within all but the first, there are additional possible outcomes. Free throws and field goals can be made, in which case points are scored, and the possession ends. They can also be missed, in which case either the defense grabs the rebound, and the possession ends, or the rebound goes to the offense, in which case the possession is renewed.
The first step in calculating PAPER is to determine the frequency with which each of these events occur. This is simply a matter of dividing the number of times an event took place in all conference games by the total number of possessions in all conference games.
DETERMINING PLAYER CONTRIBUTION
The next step is to similarly find the frequency, on a per-possession basis, with which a player causes an event to occur. To determine offensive PAPER we'll need to know each of the following:
- Turnover rate: how often the player turns the ball over
- Foul rate: how often the player gets sent to the free throw line
- Free throw percentage: self explanatory
- Shot rate: the percentage of his team's shots a player takes
- Field goal percentage: again, self explanatory
- Make value: the average value of a player's make (if a player makes 20 shots from the field and 8 of them are 3-pointers, his make value is 2.4 points)
- Setup rate: how often the player passes the ball to a teammate in position to make the shot (much more on this will follow in a later post)
- Offensive rebound rate: the percentage of his team's offensive misses that a player rebounds.
Defensive PAPER makes use of the following individual statistics:
- Steal rate: the percentage of defensive possessions on which a player records a steal
- Team turnover share: all five players on the floor at the time of a non-steal turnover are assumed to deserve equal credit for its creation; this represents the frequency with which a turnover was forced while the player was in the game.
- Foul rate: how often a player commits a defensive foul that results in free throw attempts
- Player defensive unblocked FG%: the percentage of unblocked field goal attempts that opponents make while a player is on the court; much more on the philosophy behind this will follow in a later post. Unblocked FG% is used so as not to double-credit blocks.
- Block rate: the percentage of opponent field goal attempts a player blocks
- Defensive rebound rate: the percentage of his opponents' misses that a player rebounds
MAKING ADJUSTMENTS
There are two key adjustments to be made so that PAPER will accurately compare players to the league average.
Pace is built into the system, since all statistics are rate stats based on per-possession (or per-miss, for rebounding) rates. Possessions are estimated based on the formula Ken Pomeroy lays out at the bottom of this page. Hopefully in the near future play-by-play data will be posted by more schools, and I'll be able to use counted possessions rather than estimates. (I'm not counting on this, though; some schools still aren't posting the standard box score for their home games, and others will only post them in PDF format. This is annoying.)
Size is the second key adjustment. Size functions as a basic proxy for position in this analysis. For the purpose of PAPER, which attempts to place each player in the context of an average team, this is an important adjustment to make. A team on the floor is not made up simply of five 6'7" 205# players. A 6'2" point guard has different responsibilities than a 6'10" post player, and both should be judged by how they fill their roles rather than how they perform against a generic standard. More importantly, the other four players on the floor will have different profiles in each case.
PUTTING IT ALL TOGETHER
Once all the adjustments have been made, we're ready to construct the new model and find out how many points per possession the player would contribute to the average team. This can be found in the columns labeled RATE. Multiply RATE by the number of possessions a player would participate in, e voila! you've got PAPER.
There are two key adjustments to be made so that PAPER will accurately compare players to the league average.
Pace is built into the system, since all statistics are rate stats based on per-possession (or per-miss, for rebounding) rates. Possessions are estimated based on the formula Ken Pomeroy lays out at the bottom of this page. Hopefully in the near future play-by-play data will be posted by more schools, and I'll be able to use counted possessions rather than estimates. (I'm not counting on this, though; some schools still aren't posting the standard box score for their home games, and others will only post them in PDF format. This is annoying.)
Size is the second key adjustment. Size functions as a basic proxy for position in this analysis. For the purpose of PAPER, which attempts to place each player in the context of an average team, this is an important adjustment to make. A team on the floor is not made up simply of five 6'7" 205# players. A 6'2" point guard has different responsibilities than a 6'10" post player, and both should be judged by how they fill their roles rather than how they perform against a generic standard. More importantly, the other four players on the floor will have different profiles in each case.
PUTTING IT ALL TOGETHER
Once all the adjustments have been made, we're ready to construct the new model and find out how many points per possession the player would contribute to the average team. This can be found in the columns labeled RATE. Multiply RATE by the number of possessions a player would participate in, e voila! you've got PAPER.
Subscribe to:
Posts (Atom)