Talks
Summarized using AI

Goals for Prawn 1.0

by Gregory Brown

Goals for Prawn 1.0

In this talk at LoneStarRuby Conf 2009, Gregory Brown discusses the objectives and ongoing development of Prawn, a Ruby library for generating PDF documents. Brown reflects on the project's origins and current status, providing insights into the features planned for the future release of Prawn 1.0.

Key Points Discussed:

  • Introduction to Prawn: Brown begins by engaging the audience about their familiarity with Prawn, highlighting its use as a PDF generation tool that is built entirely in Ruby.
  • Development Challenges: Acknowledging a mishap with his presentation slides, Brown shares that while the project has faced slowdowns due to his return to work, the team has continued to write code.
  • Goals for Prawn 1.0: Key features being pursued for the 1.0 version include:
    • A high-level interface for generating basic reports with a focus on ease of use and efficiency.
    • Full Unicode support and automation of transcoding for Ruby 1.9 users, as well as maintaining support for Ruby 1.8.6 and above.
    • The intention to replace PDF Writer, addressing its performance issues by creating an API compatibility layer that eases the transition for users.
    • Enhancing the library's core implementation to be more readable and maintainable, drawing from best practices in software design.
  • Technical Challenges: Brown outlines challenges related to the complexity of the PDF specification and the management of object systems within PDFs. He cites the need for improvements in handling pointers across pages and mentions ongoing work to tackle these issues.
  • Community Involvement: The success of Prawn is attributed to its 40 contributors, which showcases the collaborative nature of open-source development. Brown emphasizes the importance of maintaining the independence of Prawn from third-party packages.
  • Conclusion and Future of Prawn: The talk concludes with Brown inviting questions from the audience, indicating that there are plans to release a book on the subject and aims to make key aspects open-source by March 15.

Overall, Brown urges the audience to engage with Prawn, suggesting they can collaborate or ask questions about its development as the team continues to enhance the library as they approach the official release of version 1.0.

00:00:20.939 Okay.
00:00:22.199 Um, just a show of hands—who has heard of or worked with Prawn at some point?
00:00:24.000 Okay, quite a few of you. Great! Yesterday, I was supposed to be doing a talk in the main room but I had a mishap and destroyed my slides about thirty seconds before my talk.
00:00:28.859 I've now learned the value of Apple Left.
00:00:30.779 These were the goals that I was going to cover. When I first proposed the talk, I was hoping to have Prawn 1.0 almost ready for this conference.
00:00:35.100 Unfortunately, we are nowhere near there. However, what we are close to is deciding what features will be included in that version and setting a timeline.
00:00:41.520 Prawn started off as a project where many people donated to support my work in open source. I decided to focus on PDF generation because it seemed to be what the community wanted most.
00:00:48.120 During that time, I was doing regular releases, at least once a month, maybe even more frequently. But once I had to return to work, things began to slow down.
00:00:55.739 It's been five months since we had an official stable release of Prawn, even though we have been writing code all that time. Let me quickly run through our goals.
00:01:02.340 We want to have a high-level interface for basic reports.
00:01:05.580 This serves several goals at once. You can see here that we are simply using a TrueType font and rendering some UTF-8 text, which is all you need to do to use Prawn for basic reports.
00:01:47.040 If anyone saw my RubyConf 2008 talk, which is available on Concrete, you may recall that I reverse engineered the GitHub invoices sent out to you. That took around 20 to 25 lines of code, showing that Prawn is efficient for basic tasks.
00:02:03.799 It is also the fastest pure Ruby PDF implementation with its feature set. If you visit that URL, you will see that, while it may not be as fast if you're working with non-pure Ruby tools, Prawn is significantly faster than alternatives like PDF Writer.
00:02:20.280 We do not rely on any third-party packages, whether C extensions or other gems. Everything was developed by the team working on Prawn. If you are familiar with PDF generation, you know that is significant work.
00:02:38.160 We handle low-level tasks, including font parsing and processing. Our goal is to maintain this control, and as a result, Prawn runs on multiple Ruby implementations, including MRI, JRuby, and Rubinius.
00:02:46.500 Internationalization is a top priority for us. We have full Unicode support, and if you're running on Ruby 1.9, it will transcode automatically, provided your encoding is compatible.
00:03:11.780 We plan to support Ruby 1.8.6 and above, including every version released from 1.9 up to Prawn 1.0. Our very first release actively supported Ruby 1.9, and we will continue to do so.
00:03:35.280 We also aim to replace PDF Writer. How many of you have used or are using PDF Writer? How many have managed to migrate everything over to Prawn?
00:03:54.480 The biggest issues with PDF Writer are its slowness and bugs. If we create an API compatibility layer, it will allow you to transition to using Prawn's functionality while maintaining familiar API calls.
00:04:30.139 Another goal is to establish a readable, unhackable core implementation. In my book, I frequently refer to best practices, and I emphasize that the design of Prawn is of high quality.
00:04:52.680 The fact that we've had over 40 contributors working on something as complex as a PDF generation library indicates we’ve had success, but there are still challenging areas.
00:05:12.240 For instance, the PDF format has a 1300-page specification. It implements its own object system, and that complicates things, especially when it comes to features like 'Page one of ten.'
00:05:26.820 Currently, we face limitations due to how we manage pointers across pages. However, last night and throughout today, we are working on replacing that object system.
00:05:45.300 By the time we release 1.0, you will certainly have more features for handling objects within the PDF, and we might even roll out some enhancements in the coming weeks.
00:06:03.440 That concludes my talk. I'm not sure if I have any more time to take questions. Does anyone have a question?
00:06:20.639 Alright, I cannot talk about that just yet, but my book has a contract that it will be open source by March 15th. We are trying to accelerate that timeline.
00:06:27.840 The book could be available for free sooner than March 15th, so keep an eye out for that.
00:06:39.539 Here, we will be working on the object system until we leave. If anyone wants to see me and ask questions about Prawn or work on it, just let me know.
00:06:42.380 Okay, thank you everybody.
Explore all talks recorded at LoneStarRuby Conf 2009
+14