July 2006 Archives

Kevin Shockey

AddThis Social Bookmark Button

Back in Portland again for this week’s open source convention. This will be my third, second as a speaker, but my first as a journalist. Early this year I took over the TUX Magazine Editor in Chief position from Nicholas Peterley. TUX Magazine is the first and only magazine for the new Linux user. It’s been an exciting and new change for me. This job has been a reset (of sorts) in my life, as I initially started my career by studying journalism before switching to computer science. I feel fortunate that the trajectory of my life and career has brought me back to journalism. Although I still haven’t gotten used to thinking of my self as a journalist. I love computers, software development, Linux, and open source so much it is a real privilege to actually write about what I’d be doing anyway.

Curtis Poe

AddThis Social Bookmark Button

This is just a quick post to let folks know that I am not, in fact, dead. I’ve not had much internet access while I try and get my new life together in the UK, but I hope to be regularly posting again soon. In the meantime, here’s a short bit of inspiration for all open source programmers.

Every once in a while I think about making a small improvement to one of my modules but I assume the project is basically dead because I don’t hear any feedback and I’ve no indication that anyone is using it. A few months ago I applied a patch from Raphael Manfredi allowing my AI::NeuralNet::Simple to support multiple networks and persistence via Storable. A couple of weeks ago I answered a question about Class::Trait because after upgrading, it broke someone’s production code (which was regrettable, but necessary). Today I found out that Joshua Ben Jore had written a patch for AI::Prolog because he wanted it to be able to call back into Perl.

This astonishes me because even though those are some of my favorite projects, I assumed there was no interest in them. Just goes to show that no matter how marginal you think your work is, there’s still a chance that someone, somewhere, will find it useful.

Jonathan Wellons

AddThis Social Bookmark Button

It struck me the other day that the Operating System Microsoft will be releasing next year is the same one I was writing about for my Technology column in a newsletter back in college, about 3 years ago.

A lot of things in my world have changed, but Microsoft’s upcoming OS has been a steady rock. Thanks for keeping it real for me, Microsoft!

brian d foy

AddThis Social Bookmark Button

The white camel is a special sort of beast. You’ve seen pictures of camels. and they were probably brown. Every so often, a white camel appears, and camelherders consider them to be extra special and more valuable. The Perl community has its own valuable members who go far beyond their own personal interest to make the community a better place for everyone.

Jeremy Jones

AddThis Social Bookmark Button

I just stumbled across a news story which mentioned that a pre-release of Flash Player 9 for Linux would likely be available before the end of this year and the full release could be expected by early 2007. I don’t mean to sound ungrateful, but I have mixed feelings about this. I’m annoyed with sites that needlessly put content into Flash. I’m even more annoyed with Adobe for skipping Flash 8 for Linux. I’m thoroughly annoyed with sites which require Flash 8 (or presumably, higher) in order to work properly. That said, I’m glad that Adobe is working on Flash 9 for Linux so I can go back to being annoyed at viewing content in Flash rather than going to a site, seeing that it requires Flash, being annoyed, and then being perturbed that I can’t view it with my version.

I read on Penguin.swf’s blog a few days ago that the Linux Flash development effort was going not-so-great. (S)he did have encouraging words to say about audio/video synchronisation, which has some … umm … issues in the current Flash 7 for Linux.

Andy Lester

AddThis Social Bookmark Button

I’ve been spending the last few months driving the technical side of preparing Socialtext Open, the open source version of Socialtext’s core wiki product. I’ve been working with other Socialtext developers to get a huge codebase that only needed to be tended by internal developers into a form that can be easily downloaded and installed by anyone. It’s been a daunting task.

As we came down to the wire, preparing for today’s big release, I read Nat’s Radar article “Opening the source” about how much more than mere licensing will change when open sourcing a project. It prompted me to write a list that I posted to my internal development blog.

Socialtext Open is going to change everything about how we write code. Even if you’re not one of those directly responsible for getting Socialtext Open out the door on Monday, after that day, we’ll see a huge shift in how things happen. It won’t happen overnight, but it’ll happen.

Off the top of my head:

  • We’re going to have a larger dev team.
  • We’re going to get a tenfold increase in potential distractions.
  • What once were nice-to-have features may become mandatory.
  • Socialtext Open releases will become big events.
  • Little arcane bits of knowledge stored in our collective brains, like the maintenance of /etc/aliases.deliver, will need to get documented in a central place.
  • We’re going to have two bug tracking systems to maintain: our existing RT system, and one on SourceForge (not RT) for the open source community.
  • Our visibility will increase tenfold.
  • Each of us will have to know more about our products than we did before, because we will all become the face of Socialtext.
  • Design decisions will have to be documented for the world to see.
  • FAQs will be VERY FAQs.
  • It won’t just be the business folks checking us out, but now also the code folks.
  • Things that we’re used to, that have grown organically over time and that we’ve lived with for a while, may be held against us when held up to new eyes. (”Why do you guys use both TT and Mason? That’s stupid!”)

I know there are plenty of others. If you’ve gone from a closed to open source product, I’d love to hear your additions to the list.

brian d foy

AddThis Social Bookmark Button

Earlier this summer, I interviewed Curtis “Ovid” Poe about Perl Hacks, grants from The Perl Foundation, logic programming, and his effort to make CGI programming less tedoius and more productive through Class::CGI. Now you can read his answers!

Dave Cross

AddThis Social Bookmark Button

Plagger is a great tool for doing interesting things with RSS feeds. It’s written by Japanese Perl Monger Tatsuhiko Miyagawa (with help from a large supporting cast). If you want to get a feel for what it does then the slides from the talk that Miyagawa gave at YAPC::NA are a good start. Over the next couple of months he’ll be giving similar talks at YAPC::Europe and OSCON.

I haven’t yet got fully to grips with all of the cool things that you can do with Plagger, but what I have been doing is to use it to build blog aggregation web sites (which people have started calling “planets”). I reckon that it currently takes me about five minutes to set up a new planet - and most of that is finding the list of feeds to aggregate. Recently I’ve set up planets for my local area, UK MPs’ blogs and a “personal planet” that contains links to various web feeds that I create. Yes, I realise that they all look the same, but I don’t really expect people to visit the web sites as they all produce both RSS and Atom feeds that you can add to your favourite feed reader.

All in all, Plagger looks like a very useful tool if you’re doing any kind of work with RSS feeds. And I think I’ve barely scratched the surface of its power.

AddThis Social Bookmark Button

As code grows and grows more portable and gains more dependencies, themselves portable, how can you validate it? What can a company or individual do to repay a community for millions of lines of useful code? How can developers and users give and receive feedback more smoothly?

Jeremy Jones

AddThis Social Bookmark Button

I just finished listening to the Adrian Holovaty interview that I just recently blogged. I’ll post later today with a review of it, but, basically, it’s an excellent interview. Good questions, great answers.

Something that Adrian had mentioned in the interview (can’t remember what it was now) made me think about Django as compared to other Python web frameworks. Django is a unified framework. It has an ORM, a templating system, a URL mapper, and other miscelania. It is built together to solve the problem of building websites and web applications. Every piece of Django is built with the big picture in mind. Every piece of Django is also built with the goal of total integration in mind. While the components that make up Django can be used outside of Django, their re-use outside of Django was not a primary consideration in their design and development. Usage within Django was the primary concern.

This unification of components is one of Django’s key strengths. It allows the development of Django to get the big picture. It provides a framework where the components “just work” together. It provides a framework with strong accountability; if someone in the Django dev team breaks a component’s interaction with another component, they are accountable to the project they are working on to fix it. If you use various components from various sources and one of the components break another component, the accountability isn’t as strong. Yes, there is accountability to the community, but that isn’t as strong as the accountability to one’s own developement team.

Note that I have chosen to post this entry under an “Opinion” category. I believe that Django’s philosophy of owning the whole framework is the best way to go. Others, most notably TurboGears, believe differently. I’m not going to knock TurboGears (or anyone else who has taken on the brobdingnagian task of creating an open source web framework). I think Kevin has done a great job with TurboGears and I’m excited about the ideas that invariably cross-pollinate from projects like this. I’m just saying that if I were going to build my own web framework, I would choose the Django route. I would build it from scratch because of the particular set of benefits that come from that course of action.

This will likely spur another discussion of re-use vs. reinventing the wheel. I’m not going to discount all code re-use. I think it has its place. I also think that there are times when the benefits of non-re-use outweigh re-use. And I think Django is a perfect case-study arount that assertion.

Jeremy Jones

AddThis Social Bookmark Button

Adrian just blogged that the Ruby on Rails podcast interviewed him about Django. This struck me as really interesting, but not overly surprising. I blogged some months back about a video of a meeting between Ruby on Rails folks and Django folks where each side (David Heinemeier Hansson from Rails and Adrian Holovaty from Django) presented their respective frameworks and had some interesting discussion. The interaction between Adrian and David seemed pretty amiable and the approaches taken by the Rails folks and Django folks don’t seem too terribly different from one another. It’s nice to see positive recognition among “competing” frameworks and “competing” languages. At least I hope this is positive recognition. I haven’t yet had a chance to listen to the podcast. I’ll post back with a report when I do listen to it.

AddThis Social Bookmark Button

At YAPC::NA 2006, The Perl Foundation President Bill Odom gave a short keynote about the state of The Perl Foundation and his plans to encourage the continued success and growth of the Perl language and community. I took some concise notes, and hope to do Bill’s speech and views justice by expanding on them.

Jeremy Jones

AddThis Social Bookmark Button

In a web framework performance shootout among Symfony (PHP), Ruby on Rails, and Django (Python), Django came out the clear winner. The results of the study are posted here. I’d love to see an exhaustive analysis like this which includes lines of code and any other (meaningful) code metrics (if LOC is meaningful) and which compares dynamic languages (Perl, Python, PHP, Ruby) against their more static competition (Java, .net).

Jeremy Jones

AddThis Social Bookmark Button

I’ve been posting on my progress around the podcast grabber I’ve been building. You can find a couple of my back blogs here and here, and some preliminary source code here.

My latest work in the podgrabber saga has been to convert the GUI from using Glade and PyGTK to hand-coded PyGTK. See the blog posts above for more details. I have now converted over everything except for a simple configuration dialog. The old GUI view Python module (using Glade) weighed in at 419 lines of code. The new GUI view Python module (using hand-coded PyGTK) weighs in at 477 lines of code. This is really interesting to me because the Glade way didn’t have any definitions of GUI code in it; all of that was stored in a .glade file. The new way has both the GUI definitions as well as the event handling code. I’m surprised that it’s only a 58 line difference in size (or about 14% increase).

After making the switch to hand-coded PyGTK, I’m starting to wonder what the benefit was to using Glade. Maybe it provided me, an inexperienced GUI person, with some sort of a security blanket as I tromped through unfamiliar territory. I don’t know. This is totally subjective and maybe a fallible comparison, but my code feels cleaner in the re-vamped raw PyGTK module than the module using Glade. It could be because I’m copying and pasting a lot of code from the old module and am refactoring it as I go. Or it could be because I feel more in control of the whole process, so I’m asserting myself to structure things better. Anyway, I thought this was an interesting comparison.

Jeremy Jones

AddThis Social Bookmark Button

You can find the download and release notes here.

Jeremy Jones

AddThis Social Bookmark Button

I’ve been reworking my podcast grabber. When I started putting a GUI frontend on it, I decided to use Glade because I lack any skill whatsoever in GUI development. (Glade is a GUI builder application which stores the structure of an application in XML. It is also a library which interprets the XML file and allows your application code to interact with the GUI you built.) After using Glade to build a usable interface with most of the functionality I wanted, I felt like I lacked the desired level of control over my GUI. It has also been a little bit of a hassle to layer objects in deeper containers than what I would have expected. For example, I have a couple of TreeViews side by side and I wanted them to be embedded in an HPaned (horizontal pane) so I could easily resize them. In order to put my TreeViews inside of an HPaned, I had to add another row to my main VBox, add an HPaned to it, cut and paste each of my TreeViews into it, and then delete the now-empty VBox row. This wasn’t a deal-breaker for me and there is probably an easier way to do it, but it was a little bit of a nuissance.

I have been reading docs and playing with building a GUI app by hand using PyGTK. In my reading, I came across the concepts of Actions, ActionGroups, and UIManagers in PyGTK (actually, they’re gtk constructs which have PyGTK wrappers). You can find some documentation around Actions and ActionGroups in this section of the PyGTK tutorial. Basically, you create an Action for different things a user might want to do such as quit, open a file, edit configuration settings. These actions may have different ways the user can accomplish them such as a button, a menu item, or a keyboard accelerator. You attach an Action to a “proxy object” such as a button or menu item.

The UIManager provides a way to create menus and toolbars using an XML description. Some documentation for the UIManager can be found here.

Actions seem a much more code-maintenance-friendly way of associating actions with objects the user is going to interact with as opposed to the alternative: create an object (such as a button), specify all the attributes of it such as label, tooltips, etc, and (with Glade) create event handlers by name and associate the event name with some function. I guess the alternative isn’t so bad, but it’s nice to see a library provide facilities to make code management a little nicer.

There appears to be a steeper learning curve to building a GUI by hand than using something like Glade, but I’m hoping that it’ll pay off in a tighter level of control as well as ease of maintenance. I’ll post back as I make headway with coding PyGTK by hand.

Jeremy Jones

AddThis Social Bookmark Button

I’ve been having a problem getting audio while playing Flash videos on my Ubuntu Dapper powered laptop. Many times, if I want to ask a ninja or find out how emo Hope is, I see moving video, but I don’t hear anything. The (pain in the rear) workaround has been to kill Firefox, “killall esd“ from a terminal window, restart Firefox, and try to watch the video again. While this has worked, it’s been a huge pain. I just decided to google for “flash esd ubuntu” and stumbled across a Ubuntu launchpad page. Something that I just tried which seems to have fixed my problem is the following suggestion from Daniel Carrera:

sudo ln -s /usr/lib/libesd.so.0 /usr/lib/libesd.so.1
sudo mkdir -p /tmp/.esd/
sudo touch /tmp/.esd/socket

And I am happily asking a ninja and seeing how emo Hope is. Now if Hope would just release a new podcast…..

Jeremy Jones

AddThis Social Bookmark Button

Anthony Baxter just announced the release of Python 2.5 beta 2. You can download it here, see what’s new here, and see my comments on Python 2.5 beta 1 here.

Jeremy Jones

AddThis Social Bookmark Button

This article at DesktopLinux.com talks about running WoW on Linux. They mention that Linux users have been able to run WoW (and other “Windows only” games) on Linux by using Cedega. However, due to recent improvements in wine (a Windows emulator), Crossover Office may be able to run WoW as well. I guess the only reason this is news is that Cedega and Crossover provide a “just works” solution. Wine appears to be able to install and run WoW with some work. Has anyone actually tried this? Anyone actually have the time to play WoW?

Jeremy Jones

AddThis Social Bookmark Button

I just found a link to a PyPy Video Documentation page. There are interviews, discussions, and overviews. This looks like great stuff. The files are only available via bittorrent, but there are quite a few seeds and not many folks downloading. All of the videos are divx avi, so that’s a nice standard format that should play anywhere. I look forward to watching these videos. Looks like there is about 5 1/2 hours of video, so that will keep me busy for a while.

For anyone not aware, PyPy is an implementation of Python in Python. It is Python compiling and running Python.

Tara McGoldrick Walsh, ORN Editor

AddThis Social Bookmark Button

To keep track of my work life, I’ve been using one of those GIANT 2′ by 2′ calendar pads–you know, the kind you can order from Staples that takes up pretty much half of your existing desk space. About as low-tech as you can get, and not exactly portable. And for me, since I often split work time between O’Reilly and my home office, not exactly the best way to keep track of meetings and appointments.

(I guess I could set up a webcam pointed at my calendar at the office so I could view it when I am working from home…. Nah. Though that might be a good way to pinpoint when the folks from janitorial swipe the
bacteria-ridden water bottle off my office desk to send to the recycling bin. I think they’re trying to tell me something there. OK, I’ll admit this: to thwart their efforts, I’ve taken to putting a yellow sticky-note on my water bottle that says “Please do not throw this away!”. I figure I should have the right to decide when I’ve consumed enough bacteria.)

Serious digression aside, it’s long been time for me to get a better calendar system. I tried Outlook’s version once, played around on my partner’s Palm (there’s an interesting sentence) to see if I should get one, and way, way, way back, when it was stylish, I carried a Franklin (because they were cheaper than Day-TImers). But everything just seemed like too much work, so somehow I settled into this simpler calendar pad system. Yet when I work from home these days, I always have this uneasy feeling I am forgetting something that I’ve written down on that giant calendar pad at work.

So, when I read Giles Turnbull’s Your Life in Web Apps, I was intrigued by what he had to say about using Google Calendar. When you work in online publishing, you pretty much are always on–a necessary thing for using any of the many web apps Giles covers exhaustively in the PDF–so trying Google Calendar on for size sounded like a good idea for me. Long story, longer, here’s what I found out.

Jeremy Jones

AddThis Social Bookmark Button

I just stumbled across a posting on the TurboGears mailing list which stated that a TurboGears package had been accepted into Debian Experimental. The author of the previously mentioned post is optimistic that TurboGears will be included in the upcoming Debian Etch release. Congratulations to the TurboGears team and the TurboGears community. This is great news.

This got me thinking about my choice of Python web frameworks, Django. I didn’t find Django in any of the Debian repositories. However, I did find it on a list of packages being worked on. Sadly, it doesn’t look like there is any recent (for the last couple of months, anyway) activity on moving this forward. Hopefully this will right itself and we’ll see TurboGears and Django in the Etch release. And presumably that’ll trickle down to Ubuntu.

While this is all fine and dandy and great for the projects from the standpoint of credibility and publicity, I doubt that it will help me much. Both of these projects have been under pretty heavy development over the past number of months. When I have wanted to run either of their code bases, I would typically just grab it from their respective SVN repositories. Even deploying to production (on shared hosting), I rely on a build of Python which I compiled myself and a build of Django which I’ve been running in testing for a while. I guess maybe inclusion in Debian will be more useful when both of these projects stabilize and APIs solidify. Nevertheless, it is good to see both of these projects even considered for inclusion in Debian.

AddThis Social Bookmark Button

use.perl.org reader amoore’s first journal entry, How to Sneak Testing into Your Development Team is an excellent personal retrospective of improving the quality and test coverage of an existing, large, untested application. I particularly like his (her?) second and third suggestions — especially racheting up quality.

Not every language or environment has the same tools as Perl (particularly the cannot-say-enough-good-things-about-it Perl::Critic), but these suggestions can work with minor modifications in many environments.

AddThis Social Bookmark Button

David Golden has just announced the release of Vanilla Perl build 4. This is an important project, as the completed version will provide Windows users with a standard Perl as well as a freely redistributable compiler, making it possible to install CPAN modules with the same ease as on a standard Unix system.

(There’s much more to post from YAPC::NA 2006; I’ll get to it through the week.)

Jeremy Jones

AddThis Social Bookmark Button

I’ve been working on wrapping PyGTK around a podcast grabbing Python script that I wrote. You can take a glance at the code that actually does the work here. The posted code, particularly the configuration management, is really tightly coupled to all other parts of the app. Also, the download manager expects much more information than it should in an odd data type comprised of a dictionary and an elementtree object. I’ve removed some of those warts in the version I’m currently working on.

Anyway, I’ve been working on wrapping PyGTK around the above-mentioned script and have finally gotten something that sort of works. One of the minor annoyances, though, is that when I click on a button that tells the app to show me which podcasts are available for download, the app freezes up until it has figured out every last available download. Even though I have code to update the status bar in the method which handles this button press, the only way I can figure out if anything is going on is to look at the terminal window I started the podgrabber app from.

Since I have the app somewhat functional, I decided to fix this blocking annoyance. The reason that this GUI app is behaving like this is that when the application is launched, it is being controlled by a single thread of execution. When you click on any button, that single thread of execution has to run code to perform any actions associated with that button click event. Subsequently, all other activity handling is blocked until the main thread returns from handling the current request.

So, a fix is to allow the main thread of execution to spawn a new thread to handle the button click event. Here is the code that currently executes when the “show downloads” button is clicked:

def OnShowDownloads(self, widget):
    status_bar = self.wTree.get_widget("mainStatusbar")
    self.downloadList.clear()
    for feed_url in self.controller.get_available_feeds():
        feed_name = self.config.Feeds[feed_url]["name"]
        mode = self.config.Feeds[feed_url]["mode"]
        status_bar.push(1, feed_name)
        for download in self.controller.get_download_list(feed_url):
            dl_url = download["enclosure"].attrib.get("url", "NONE")
            try:
                length = int(download["enclosure"].attrib.get("length", "0"))
            except ValueError:
                length = 0
            file_type = download["enclosure"].attrib.get("type", "UNKNOWN")
            title = download.get("title", "No Title")
            self.downloadList.append([feed_name, dl_url, length, file_type, mode, title])
        status_bar.push(1, "%s - Done" % feed_name)

Adding threading support here was pretty easy. I simply had to add “gtk.gdk.threads_init()” at the beginning of the program, create a threading decorator, apply the threading decorator to the event handler, and strategically sprinkle “gtk.threads_enter()” and “gtk.threads_leave()” throughout the affected code. Here is the decorator that I created:


def threaded(f):
    def wrapper(*args):
        t = threading.Thread(target=f, args=args)
        t.start()
    return wrapper

And here is the slightly modified handler method:

    @threaded
    def OnShowDownloads(self, widget):
        gtk.threads_enter()
        status_bar = self.wTree.get_widget("mainStatusbar")
        self.downloadList.clear()
        gtk.threads_leave()
        for feed_url in self.controller.get_available_feeds():
            feed_name = self.config.Feeds[feed_url]["name"]
            mode = self.config.Feeds[feed_url]["mode"]
            gtk.threads_enter()
            status_bar.push(1, feed_name)
            gtk.threads_leave()
            for download in self.controller.get_download_list(feed_url):
                dl_url = download["enclosure"].attrib.get("url", "NONE")
                try:
                    length = int(download["enclosure"].attrib.get("length", "0"))
                except ValueError:
                    length = 0
                file_type = download["enclosure"].attrib.get("type", "UNKNOWN")
                title = download.get("title", "No Title")
                gtk.threads_enter()
                self.downloadList.append([feed_name, dl_url, length, file_type, mode, title])
                gtk.threads_leave()
            gtk.threads_enter()
            status_bar.push(1, "%s - Done" % feed_name)
            gtk.threads_leave()

Andy Lester

AddThis Social Bookmark Button

I’ve put on my overalls and rubber gloves to help Perl 6. I’m the chief Parrot Cage Cleaner, and I’d like you to join me in helping to keep this crucial bird healthy.

Parrot is the virtual machine designed to efficiently compile and execute bytecode for interpreted languages. Parrot will be the target for the final Perl 6 compiler, and is already usable as a backend for Pugs, as well as variety of other languages.

The Parrot project was re-energized by a week-long hackathon at YAPC::NA 2006, with Parrot wizards from around the world converging on Chicago to create more magic. However, when wizards create magic, they spend less time fighting entropy. The Parrot project is starting to accumulate technical debt, and that helps diminish the potential velocity of the project. It often turns out that without janitors, the wizards get stuck.

That’s where I come in — and where you can join me, even if you’re new to Perl or Parrot. I don’t know Perl 6 or Parrot yet, but I don’t need to, and neither do you. The beauty of a janitorial job on a project is that it doesn’t require wizard-level skills on the main project, but a competence on the lower-level parts of maintenance. Parrot Cage Cleaners just need to be comfortable with building C programs, and with large projects, and an eye to watching the corners.

Cage cleaning will be a learning experience for everyone. This is a great way to get familiar with Parrot, and get your feet wet working on a next-generation virtual machine. It’s also a way to help out on an important open source project without having to devote lots of time. There are always smaller tasks to be done.

I’ve worked with Chip Salzenberg, the new Parrot pumpking, to come up with a list of high-level goals:

  • Enforcing coding standards, naming conventions, etc

  • Smoke testing on many platforms

  • Decreasing the amount of repeated code

  • Automated generation of C headers

  • Improve low-level code quality

  • Creating automated code checking tools

  • Documenting function behavior and structure members

  • Developing coverage tools where they don’t exist

This is a great opportunity for those of you out there (and I know you’re out there!) who have always wanted to help out Perl, but don’t know where to start. If you’re interested, please contact me at andy at perl.org, or visit the #parrot IRC channel on irc.perl.org. You should also subscribe to the parrot-porters mailing list at lists.perl.org, currently transitioning from the name perl6-internals. For the latest information on the Cage Cleaners, visit http://parrotcode.org/cage-cleaners/.

I hope to see you soon!

Curtis Poe

AddThis Social Bookmark Button

My apologies for not writing much lately. I’ve just moved from the USA to Nottingham, UK. The whirlwind of settling into a new job, trying to find an apartment (ahem, “flat”), and learning how to type on a British keyboard has been quite a distraction for the last few weeks. Now, on with the show!

Have you wanted to contribute to the open-source community but you need a bit of incentive? If you have an idea for doing some work for the Perl community and you think it’s worthy of a grant, please send your grant application to tpf-proposals@perl-foundation.org. Grant applications must be in by the last day of July and we will be awarding the grants at the beginning of September.

First, please read about how to submit a grant. Read that carefully as grants are often rejected if they don’t meet the criteria. For example, if you want to submit improvements to a well-known project but there’s no evidence that you have at least tried to work with the maintainers of that project, the grant will likely not be approved. You can also read through our rules of operation for a better idea of thee grant process.

Advertisement