Please add ideas Immediately!
RPerl Optimizing Perl 5 Compiler
Inline::CPP - Fix various long-standing bugs in Inline, Inline::C and Inline::CPP, including the notorious Inline::CPP Perl Namespace Hack.
Test Suite - Enhance and expand RPerl compiler test suite.
Example Apps - Implement various example RPerl applications and useful libraries.
CPAN Modules - Target and upgrade key CPAN modules to be compiled and optimized using RPerl.
Mentor: Will Braswell
Perl 5 Modules
CPAN Modules - There are a number of modules on CPAN whose current maintainer is unable to continue managing the project. This task helps to provide exposure not just to programming in Perl, but working in a FLOSS environment. Maintaining a Perl module is a good way to become an active member of the community. For more info, see the ADOPTME and HANDOFF pseudo-maintainers on CPAN. Possible mentors: the current maintainer, jmadler, ??
PathTools - The PathTools suite of modules is essential for portable file operations. It's also crufty and has a lot of bugs that could use some dedicated cross-platform work.
Google@Home - Google@Home it's a new and young project to bring google services and google now functionality at your home. You can set up your domotic control system with embedded devices (raspberryPi or others) which you can control with your voice (using Google SpeechSynth) or via web/android app, obviously in perl. For more, visit the Github page or the dedicated GSoC page to have a look at the avaible task - mentors: mudler, ??
perlcc/roast - Improve the perl5 core testsuite in sync with p5p, B::C and roast to support multiple compilers and versions (p5, the 3 perlcc, rperl, perl5 in perl6, perlito, p2). mentor: Reini Urban, FROGGS, ???
Rakudo (Perl 6 implementation)
Implement missing regex/grammar features - Perl 6 has a fairly comprehensive regex and grammar engine. Rakudo's implementation is fairly complete, but some features are still missing, most notably various backtracking control constructs (::, :::, <cut> <commit>) and a few more esoteric features, like <*foo> and recursion into rules associated with submatches (<~~0> and the likes). S05 has the gory details. A student interested in regex compilers could implement those missing features. Possible mentors: Coke, ???
Make rakudo manage precompilation of modules Possible mentors: Coke, FROGGS, ???
NFG Strings - The Perl 6 specification contains a feature that hasn't been implemented in any backend yet: The ability to treat strings not as a collection of bytes or codepoints, but as a collection of grapheme clusters. A proposal to implement this is to store a string as a series of integers, with negative integers being indexes into a table that maps the numbers to grapheme clusters for those that do not a have an NFC representation. A student interested in Unicode could implement this in the JVM or the MoarVM backend. Possible mentors: moritz, Coke, ???
Allomorphic Types - Implement allomorphic types (IntStr, RatStr, etc.), val(), proper handling in MAIN(), and fix everywhere that assumes a single value cannot be both a Numeric type and a Stringy type at the same time. For more Synopsis 2#Allomorphic_value_semantics Possible mentors: Coke, ???
MoarVM (Virtual Machine for Rakudo)
Break the VM - MoarVM has an existing GC torture test which allowed us to significantly reduce the number of stability/correctness bugs in the memory management systems. However, we need similar torture testing (and fuzzers, etc.) for other MoarVM subsystems, such as IO, concurrency, and native code interop. Implement one (or more!) such torture tools and diagnose and/or fix the issues it uncovers. Possible mentors: ???
JIT - MoarVM has a relatively efficient bytecode interpreter, but as yet no JIT. Create a working (though not necessarily complete) JIT for at least one CPU on at least one supported OS, refactoring the interpreter as needed to allow the JIT to work seamlessly, efficiently, and correctly. Possible mentors: ???
Perl 6 Test suite
- Test Rosetta Code's Perl 6 entires - Implement a testing framework that works with Perl 6's roast that tests all existing Rosetta Code examples to verify they still work. Possible mentors: Coke, moritz, FROGGS, ???
Perl 6 Module ecosystem
Native library bindings
SSL/TLS bindings - Create a complete NativeCall binding for an existing SSL/TLS library. Provide working example code (or better yet, modules) for HTTPS and one or more other secure protocols. Test that it works with at least the JVM or MoarVM backend. Possible mentors: Coke, FROGGS, ???
OpenGL bindings - Create a complete (or mostly complete) NativeCall binding for OpenGL and/or OpenGL ES. Create or translate example code for at least 2.x-style GL. Test that it works for at least the JVM or MoarVM backend. Possible mentors: Coke, ???
GUI toolkit bindings - Create NativeCall bindings for a cross-platform windowing toolkit such as Qt or GTK+. Create or translate example code for a simple program that can be easily extended by programmers learning how to use the toolkit for their own applications. Test that it works for at least the JVM or MoarVM backend. Possible mentors: Coke, FROGGS, ???
Ecosystem website - Create an "are we fast yet?" site for Perl 6, similar to or speed.pypy.org featuring colorful plots, possibly utilizing the perl6/bench-scripts and/or japhb/perl6-bench. Would track performance of the major Perl 6 implementations. Possible mentors: moritz, Coke, FROGGS, ???
Create a rock-solid HTTP client and server modules - Possible mentors: Coke, FROGGS, ???
Improve performance of method signatures - Signatures were radically simplified and deoptimized a few years ago. Merge the old compile-times optimizations back in. Possible mentors: Reini Urban, Jonathan Leto
Fix NQPLexPad for parrot threads - parrot threads are essentially lock-less so they scale linearly, but NQPLexPad's need to be fixed first. A small but tricky task. GH issue #67 Possible mentors: Reini Urban, ???
Several minor OO bugfixes - Zefram recently identified several OO inconsistencies. See GH issues Mentor: Reini Urban
Our code base is based on current best practices and modern web technologies. Our stack includes Catalyst, Plack, ElasticSearch, jQuery, Bootstrap and nginx. We also use Puppet for deployment and Vagrant + VirtualBox for development VMs. We have integration with Twitter, Github, PAUSE, Facebook and Google. All code is managed on Github and we have an active channel (#metacpan) on irc.perl.org. Try the mibbit web client to access the channel.
There are many available projects within MetaCPAN which you could take on or contribute to and there is also room for you to suggest improvements which you would like to make. The project list is ever growing and subject to change as volunteers take items on, but here's a sampling of what we'd love for you to consider working on.
Potential Student Projects
This is one of the most important things which MetaCPAN potentially can offer to the Perl community at large. A way for users to contribute to the categorizing and organization of the many, many available modules on CPAN. "There's more than one way to do it" is a good thing, but it can also get in the way of solving a problem when you are faced with too many choices. Some thoughts on tagging make for a good starting point:
Web of Trust
Dave Rolsky, back in 2010, posted an idea he had about how to mark modules as trustworthy (ie used by people he trusts). He said:
"I've long wanted some sort of "web of trust" system for CPAN. A CPAN user would mark authors and/or distributions as trusted. We’d take the graph of trust relationships and try to figure out which authors and modules are most trusted. Trust here would be some combination of good code, good docs, responsive author, whatever. The idea is to organically highlight the best of CPAN, and in particular help people discover the best modules in their class. I think this would be really useful for new users, and a lot more useful than the current CPAN rating system."
Using ++ data (which we already have) and possibly module tagging, we can provide "web of trust" data. This does not, however, require the module tagging implementation to be useful and this would be of great value to many in the Perl community.
Bug Fixes + Wish List Items + API Documentation
There are many outstanding issues waiting to be resolved. The large number of tickets is not indicative of a lack of response on the part of MetaCPAN developers (we try to stay on top of them), but it indicates the enthusiasm with which people are helping us track ways to improve. Starting with some open issues would be a good way to familiarize yourself with our codebase.
Wish list items can be found here: https://github.com/CPAN-API/cpan-api/wiki/Wishlist
Because things traditionally have changed so rapidly, our documentation has either not kept up or not been written to completion. You can help us (and many Perl developers) by documenting the API and posting example code for both new and experienced MetaCPAN users. For example, most people do not know that MetaCPAN can function as an OAuth provider and could, therefore, be used for authenticating users across a range of Perl services. You could post example code for this use case and help facilitate MetaCPAN OAuth integrations.
MetaCPAN is used by web, command line, Android and iOS apps, so there are many kinds of examples which could be documented.
What can MetaCPAN offer students?
First off, we've done this before -- we have experience in mentoring. We feel, as mentors, it's our job to remove roadblocks which are preventing the student from making progress and conversely, to stay out of the way when the student is progressing well. We're here to facilitate, but not to micro-manage. We also want you to have fun. It's a project we enjoy working on. We wish the same for anyone who hopes to contribute.
It's already clear from the materials above that there are many ways for you to make your mark on MetaCPAN, but what can we offer you? You will have the chance to be mentored by experienced (and employed) Perl developers. We will carefully review all of your code and give you constructive (and kind) feedback. We will help you improve your code and your coding practices. MetaCPAN is a positive place. We will help you get from A to B with your code, but your work won't be trashed and you won't be insulted. We value all contributions and we want every contributor to know that she or he is appreciated. There are some harsh places on the Internet and in Open Source. This is not one of them.
You'll have the chance to learn about the technologies as listed in our "stack" above. You will have help and guidance in working with these technologies from people who are quite familiar with them. Your code will deploy on robust hardware (think 30+ GB of RAM). Your code will often deploy within hours or even minutes of being submitted. Your work will immediately be put to the test by our many users on our very busy services. You'll gain experience in NoSQL (ElasticSearch), git, and also in participating in an Open Source project which functions as a highly available web service. You will gain experience not just in writing code, but in participating in the full cycle of code deployment, skills which are quite valuable in the real world.
If any of this sounds remotely interesting to you, please don't hesitate to get in touch. You can contact me directly via the information listed below. If you just want to see how you like the project, feel free to get involved via github, IRC or both. We'll guide you through the process and you can decide for yourself if it's a good fit for you. We look forward to hearing from you.
Mentor: Olaf Alders (OALDERS)
Backup mentors: Randy Stauner (RWSTAUNER), Thomas Sibley (TSIBLEY)
oalders on IRC #metacpan on irc.perl.org
Showing changes from previous revision.