One of the first things I did with the PlayBook -- or, rather, with the lack of one -- was to build a simulator. Not the SDK simulator... everyone has one of those. I mean a physical one. It's nothing more than an old copy of a Rand McNally world atlas with a couple of sheets of thin steel wrapped around it to stiffen it and add weight, some black construction paper and a sheet of clear plastic for the screen area.
It has the same dimensions as the real thing except that it's thicker. Turns out there aren't that many materials with the same density as the PlayBook (1.6 g/cm3)... straight metal is way too heavy, paper is too light, and although a solid block of magnesium would be almost perfect I just didn't have any kicking around. The combination of paper and metal brings this one to precisely 400g; I figured having the right weight was more important than having the right thickness.
To simulate the screen I can slide a screenshot under the plastic window. I can also just use it to draw screen designs on paper and often tape them to the front on top of the plastic. At the moment I have about 10 sheets representing different pages of the app taped one on top of the other so I can flip through them.
The screen area of the PlayBook, based on 0.15mm per pixel and 1024 by 600 pixels, is exactly 153.6mm by 90.0mm. A regular A4 sheet of paper (8.5" by 11") turns out to hold three of those screens nicely.
I'm making a PDF available for anyone to use if they want to make their own simulator, or just want to draw some screen ideas on paper. The Python code (using ReportLab) is also available:
'''Generate BlackBerry PlayBook screen templates. Copyright 2010 Peter Hansen. http://peterhansen.ca Free for any use. ''' from reportlab.lib.pagesizes import LETTER from reportlab.pdfgen import canvas def mm(x): from reportlab.lib.units import mm return x * mm destination_file = 'pbscreen_3.pdf' height = mm(90.0) width = mm(153.6) weight = mm(0.0) padding = mm(0.2) margin = mm(10.0) def main(): c = canvas.Canvas(destination_file, pagesize=LETTER) c.setLineWidth(weight) for left, bottom, orientation in [ (0, 0, 'rotated'), (height + padding + weight, 0, 'rotated'), (0, width + padding + weight, 'normal'), ]: w, h = (width, height) if orientation == 'normal' else (height, width) c.rect(margin + left, margin + bottom, w, h) c.setFont('Helvetica', 9) c.drawString(mm(20), mm(268), 'BlackBerry PlayBook screen template, v1') c.drawString(mm(20), mm(263), 'Courtesy of Peter Hansen. Free for any use.') c.setFont('Courier', 9) c.drawString(mm(30), mm(258), 'http://peterhansen.ca') c.showPage() c.save() if __name__ == '__main__': main()