Difference between revisions of "Summer of Code 2010"

From Dreamwidth Notes
Jump to: navigation, search
(An Introduction to Dreamwidth Development)
(Wiki markup; expanded tinyurl links, for ease of finding later.)
 
(2 intermediate revisions by one other user not shown)
Line 29: Line 29:
 
== Summer of Code Project Ideas ==
 
== Summer of Code Project Ideas ==
  
This page serves as a beginning ideas list for the Google Summer of Code project -- it isn't the sole list of projects that might interest a new developer who's looking for a summer-long project, but it's a list of things that we think are fairly standalone and would work well as modular projects. If you don't see something here to strike your fancy, you might also want to look over our [http://tinyurl.com/yhnjfua unassigned 'effort-major'] bugs, or our list of [http://tinyurl.com/yc2fk3x unassigned user suggestions]. (Or, if you're already a Dreamwidth user and have an idea for something in particular you want to work on, we'd love to hear about it.)
+
This page serves as a beginning ideas list for the Google Summer of Code project -- it isn't the sole list of projects that might interest a new developer who's looking for a summer-long project, but it's a list of things that we think are fairly standalone and would work well as modular projects. If you don't see something here to strike your fancy, you might also want to look over our [http://bugs.dwscoalition.org/buglist.cgi?keywords=effort-major&query_format=advanced&keywords_type=allwords&bug_status=NEW&known_name=unassigned%20effort-minor unassigned 'effort-major'] bugs, or our list of [http://bugs.dwscoalition.org/buglist.cgi?keywords=from-suggestions&query_format=advanced&keywords_type=allwords&bug_status=NEW unassigned user suggestions]. (Or, if you're already a Dreamwidth user and have an idea for something in particular you want to work on, we'd love to hear about it.)
  
 
Most of these ideas are flexible -- so you'll have lots of leeway no matter what you choose. Still, if you're interested in a more self-guided experience, you might want to choose something that's less specified, while if you're the type who prefers to work to a spec, you should pick a project that has a functional spec written. (Or, if you're really interested in a project that doesn't have a functional spec yet, but you work better with one, just let us know. We'll get you one.)
 
Most of these ideas are flexible -- so you'll have lots of leeway no matter what you choose. Still, if you're interested in a more self-guided experience, you might want to choose something that's less specified, while if you're the type who prefers to work to a spec, you should pick a project that has a functional spec written. (Or, if you're really interested in a project that doesn't have a functional spec yet, but you work better with one, just let us know. We'll get you one.)
Line 37: Line 37:
 
Some of these projects are more standalone than others -- we've marked the ones that are more tied in to how the site's culture works, or things we think might require significant user input. Those projects would be a good choice for someone who's interested in getting experience gathering, working with, and incorporating end-user feedback. (We'll do as much of the end-user communication for you as you'd like, or we'll coach and guide you through the process if you'd like to get experience doing it yourself. You can check the <dwcomm>dw_biz</dwcomm> and <dwcomm>dw_suggestions</dwcomm> communities for some examples of our user feedback.)
 
Some of these projects are more standalone than others -- we've marked the ones that are more tied in to how the site's culture works, or things we think might require significant user input. Those projects would be a good choice for someone who's interested in getting experience gathering, working with, and incorporating end-user feedback. (We'll do as much of the end-user communication for you as you'd like, or we'll coach and guide you through the process if you'd like to get experience doing it yourself. You can check the <dwcomm>dw_biz</dwcomm> and <dwcomm>dw_suggestions</dwcomm> communities for some examples of our user feedback.)
  
<b>Project</b>:
+
'''Project''':
  
<b>Description</b>:
+
'''Description''':
  
<b>Code area to look at</b>:
+
'''Code area to look at''':
  
<b>Difficulty level</b>:
+
'''Difficulty level''':
  
<b>Skills needed</b>:  
+
'''Skills needed''':  
  
<b>Spec available</b>:
+
'''Spec available''':
  
<b>Mentor help needed</b>:
+
'''Mentor help needed''':
  
 
=== Client Projects ===
 
=== Client Projects ===
Line 63: Line 63:
 
====Desktop clients====
 
====Desktop clients====
  
<b>Project</b>: Desktop client
+
'''Project''': Desktop client
  
<b>Description</b>: Program a downloadable client (for the platform of your choice) that will allow users to interact with their journal remotely, without needing a web browser. Ideally, a client program will allow users to post entries to their journal, read their "reading page", and manage the settings of their account (to the extent available through the protocol), but at a bare minimum, the client program should allow the user to post entries to their journal.
+
'''Description''': Program a downloadable client (for the platform of your choice) that will allow users to interact with their journal remotely, without needing a web browser. Ideally, a client program will allow users to post entries to their journal, read their "reading page", and manage the settings of their account (to the extent available through the protocol), but at a bare minimum, the client program should allow the user to post entries to their journal.
  
<b>Code area to look at</b>: The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal client protocol] contains all of the functions you'd need to implement.
+
'''Code area to look at''': The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal client protocol] contains all of the functions you'd need to implement.
  
<b>Difficulty level</b>: Medium
+
'''Difficulty level''': Medium
  
<b>Skills needed</b>: Desktop software development, proficiency in application language of your choice
+
'''Skills needed''': Desktop software development, proficiency in application language of your choice
  
<b>Spec available</b>: No formal spec, but the [http://www.livejournal.com/download/ LiveJournal download page] contains examples of client programs written for LiveJournal. Clients written for Dreamwidth should function in roughly the same way.
+
'''Spec available''': No formal spec, but the [http://www.livejournal.com/download/ LiveJournal download page] contains examples of client programs written for LiveJournal. Clients written for Dreamwidth should function in roughly the same way.
  
<b>Mentor help needed</b>: Your mentor will help guide you through the client protocol -- specifically, the changes Dreamwidth has made to the [http://www.livejournal.com/doc/server/ljp.csp.protocol.html LiveJournal client protocol] -- and help you to determine what further changes need to be made to the client protocol to best serve client authors. (There are also several LiveJournal client authors who have expressed interest in adapting their clients to work with Dreamwidth.)
+
'''Mentor help needed''': Your mentor will help guide you through the client protocol -- specifically, the changes Dreamwidth has made to the [http://www.livejournal.com/doc/server/ljp.csp.protocol.html LiveJournal client protocol] -- and help you to determine what further changes need to be made to the client protocol to best serve client authors. (There are also several LiveJournal client authors who have expressed interest in adapting their clients to work with Dreamwidth.)
  
 
====Mobile clients====
 
====Mobile clients====
  
<b>Project</b>: Mobile client
+
'''Project''': Mobile client
  
<b>Description</b>: Program a mobile/handheld client (for the platform of your choice -- we're particularly interested in an iPhone application, but any mobile platform would be awesome) that will allow users to interact with their journal through their mobile device. Ideally, a client program will allow users to post entries to their journal, read their "reading page", and manage the settings of their account (to the extent available through the protocol), but at a bare minimum, the client program should allow the user to post entries to their journal.
+
'''Description''': Program a mobile/handheld client (for the platform of your choice -- we're particularly interested in an iPhone application, but any mobile platform would be awesome) that will allow users to interact with their journal through their mobile device. Ideally, a client program will allow users to post entries to their journal, read their "reading page", and manage the settings of their account (to the extent available through the protocol), but at a bare minimum, the client program should allow the user to post entries to their journal.
  
<b>Code area to look at</b>: The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal client protocol] contains all of the functions you'd need to implement.
+
'''Code area to look at''': The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal client protocol] contains all of the functions you'd need to implement.
  
<b>Difficulty level</b>: Medium
+
'''Difficulty level''': Medium
  
<b>Skills needed</b>: Mobile platform software development, proficiency in the mobile programming language of your choice
+
'''Skills needed''': Mobile platform software development, proficiency in the mobile programming language of your choice
  
<b>Spec available</b>: No formal spec, but the [http://www.livejournal.com/download/ LiveJournal download page] contains examples of client programs written for LiveJournal. Clients written for Dreamwidth should function in roughly the same way.
+
'''Spec available''': No formal spec, but the [http://www.livejournal.com/download/ LiveJournal download page] contains examples of client programs written for LiveJournal. Clients written for Dreamwidth should function in roughly the same way.
  
<b>Mentor help needed</b>: Your mentor will help guide you through the client protocol -- specifically, the changes Dreamwidth has made to the [http://www.livejournal.com/doc/server/ljp.csp.protocol.html LiveJournal client protocol] -- and help you to determine what further changes need to be made to the client protocol to best serve client authors.
+
'''Mentor help needed''': Your mentor will help guide you through the client protocol -- specifically, the changes Dreamwidth has made to the [http://www.livejournal.com/doc/server/ljp.csp.protocol.html LiveJournal client protocol] -- and help you to determine what further changes need to be made to the client protocol to best serve client authors.
  
 
====Atom Modernization====
 
====Atom Modernization====
  
<b>Project</b>: API Extensions
+
'''Project''': API Extensions
  
<b>Description</b>: In addition to the existing LiveJournal protocol, Dreamwidth supports the Atom specification from back when it was originally proposed.  Our implementation is out of date and does not work well with modern Atom based clients.  Similarly, we don't implement all of the functionality available to the standard today.
+
'''Description''': In addition to the existing LiveJournal protocol, Dreamwidth supports the Atom specification from back when it was originally proposed.  Our implementation is out of date and does not work well with modern Atom based clients.  Similarly, we don't implement all of the functionality available to the standard today.
  
 
This project would be to modernize our Atom infrastructure to make it compliant with the standard and work with modern clients.  You will be expected to look at our existing Atom support and determine the best way to bring it up to compliance.
 
This project would be to modernize our Atom infrastructure to make it compliant with the standard and work with modern clients.  You will be expected to look at our existing Atom support and determine the best way to bring it up to compliance.
  
<b>Code area to look at</b>: The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal protocol] is where the existing protocol lives -- all transactions with the site go through the protocol, even web-based transactions. Additional APIs would need to be implemented in a way that would tie in to the existing protocol. We have existing bare-bones [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/Apache/LiveJournal/Interface/ implementations] of the Blogger and Atom APIs to look at, too.  Additionally, see the [http://tools.ietf.org/html/rfc5023 Atom RFC].
+
'''Code area to look at''': The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal protocol] is where the existing protocol lives -- all transactions with the site go through the protocol, even web-based transactions. Additional APIs would need to be implemented in a way that would tie in to the existing protocol. We have existing bare-bones [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/Apache/LiveJournal/Interface/ implementations] of the Blogger and Atom APIs to look at, too.  Additionally, see the [http://tools.ietf.org/html/rfc5023 Atom RFC].
  
<b>Difficulty level</b>: Medium
+
'''Difficulty level''': Medium
  
<b>Skills needed</b>: Backend programming knowledge, Perl, and it wouldn't hurt to be familiar with Atom.
+
'''Skills needed''': Backend programming knowledge, Perl, and it wouldn't hurt to be familiar with Atom.
  
<b>Spec available</b>: No Dreamwidth-specific spec, but the specs for various APIs are widely available.
+
'''Spec available''': No Dreamwidth-specific spec, but the specs for various APIs are widely available.
  
<b>Mentor help needed</b>: Your mentor will answer questions about the existing client protocol and help you make decisions about how to translate other APIs' features to Dreamwidth's feature set.
+
'''Mentor help needed''': Your mentor will answer questions about the existing client protocol and help you make decisions about how to translate other APIs' features to Dreamwidth's feature set.
  
 
=== External Integration ===
 
=== External Integration ===
Line 117: Line 117:
 
==== OAuth ====
 
==== OAuth ====
  
<strong>Project</strong>: Implement OAuth Support
+
'''Project''': Implement OAuth Support
  
<strong>Description</strong>: Right now the various APIs that Dreamwidth supports require users to provide their password to third party tools and web sites.  This is not up to date with modern best practices, so we'd like to add support for OAuth.
+
'''Description''': Right now the various APIs that Dreamwidth supports require users to provide their password to third party tools and web sites.  This is not up to date with modern best practices, so we'd like to add support for OAuth.
  
 
Presently we do have one of our core contributors already looking at and working on OAuth functionality, so if you take on this project you will be working with her to fully integrate OAuth with Dreamwidth.  This would include developing the frontend/administration pages, logging/tracking functionality, and other tasks.
 
Presently we do have one of our core contributors already looking at and working on OAuth functionality, so if you take on this project you will be working with her to fully integrate OAuth with Dreamwidth.  This would include developing the frontend/administration pages, logging/tracking functionality, and other tasks.
  
<b>Code area to look at</b>: The crossposting system that we've developed (in which Dreamwidth acts as a native client for other blogging platforms) is in [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ cgi-bin/DW/External].  
+
'''Code area to look at''': The crossposting system that we've developed (in which Dreamwidth acts as a native client for other blogging platforms) is in [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ cgi-bin/DW/External].  
  
<strong>Difficulty level</strong>: Medium
+
'''Difficulty level''': Medium
  
<strong>Skills needed</strong>: In addition to our general requirements, this project requires you to read and understand OAuth and be able to implement it on Dreamwidth in Perl -- you can of course use modules distributed on CPAN.
+
'''Skills needed''': In addition to our general requirements, this project requires you to read and understand OAuth and be able to implement it on Dreamwidth in Perl -- you can of course use modules distributed on CPAN.
  
<b>Spec available</b>: No spec on the Dreamwidth side, but the [http://tools.ietf.org/html/draft-hammer-oauth-10 OAuth spec] is available.
+
'''Spec available''': No spec on the Dreamwidth side, but the [http://tools.ietf.org/html/draft-hammer-oauth-10 OAuth spec] is available.
  
<b>Mentor help needed</b>: Your mentor will explain and walk you through the existing crossposting functionality and be available to answer questions about the details of OAuth implementation.
+
'''Mentor help needed''': Your mentor will explain and walk you through the existing crossposting functionality and be available to answer questions about the details of OAuth implementation.
  
 
==== Wordpress/TypePad/Movable Type/etc ====
 
==== Wordpress/TypePad/Movable Type/etc ====
  
<b>Project</b>: Wordpress, TypePad, Movable Type, or other import/crosspost
+
'''Project''': Wordpress, TypePad, Movable Type, or other import/crosspost
  
<b>Description</b>: Dreamwidth allows importing archives from, and crossposting entries to, LiveJournal-based platforms already. We would like to add support for Wordpress and Movable Type so people don't need to rely on third-party plugins/extensions/scripts, and so people can post from Dreamwidth if they choose.
+
'''Description''': Dreamwidth allows importing archives from, and crossposting entries to, LiveJournal-based platforms already. We would like to add support for Wordpress and Movable Type so people don't need to rely on third-party plugins/extensions/scripts, and so people can post from Dreamwidth if they choose.
  
<b>Code area to look at</b>: The crossposting system that we've developed (in which Dreamwidth acts as a native client for other blogging platforms) is in [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ cgi-bin/DW/External]. Currently, the system only speaks to LJ-based sites, but Wordpress support would go there. Code for the importer is in a few different places, but primarily [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/Worker/ cgi-bin/DW/Worker].  
+
'''Code area to look at''': The crossposting system that we've developed (in which Dreamwidth acts as a native client for other blogging platforms) is in [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ cgi-bin/DW/External]. Currently, the system only speaks to LJ-based sites, but Wordpress support would go there. Code for the importer is in a few different places, but primarily [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/Worker/ cgi-bin/DW/Worker].  
  
<b>Difficulty level</b>: Low-Medium, depending on how much detail you want to get into. Both the crossposting system framework and the importing system framework have had a lot of bugs worked out of them over the past year. Adding WP or MT support would plug into this existing framework and expand it.
+
'''Difficulty level''': Low-Medium, depending on how much detail you want to get into. Both the crossposting system framework and the importing system framework have had a lot of bugs worked out of them over the past year. Adding WP or MT support would plug into this existing framework and expand it.
  
<b>Skills needed</b>: Our basic requirements, plus familiarity with (or desire to learn) the other platform.  
+
'''Skills needed''': Our basic requirements, plus familiarity with (or desire to learn) the other platform.  
  
<b>Spec available</b>: Not currently
+
'''Spec available''': Not currently
  
<b>Mentor help needed</b>: Your mentor will explain and walk you through the existing crossposting and importing functionality and be available to answer questions about the details of WP/MT integration.
+
'''Mentor help needed''': Your mentor will explain and walk you through the existing crossposting and importing functionality and be available to answer questions about the details of WP/MT integration.
  
 
==== Facebook Connect ====
 
==== Facebook Connect ====
  
<strong>Project</strong>: Implement support for Facebook functionality.
+
'''Project''': Implement support for Facebook functionality.
  
<strong>Description</strong>: We would like the ability to support some of the Facebook Connect functionality.  For example, allow our users to opt-in to sharing content they post on Facebook, or giving people the ability to post something interesting they see on Dreamwidth to Facebook (Share This type functionality), or even live chat functionality.
+
'''Description''': We would like the ability to support some of the Facebook Connect functionality.  For example, allow our users to opt-in to sharing content they post on Facebook, or giving people the ability to post something interesting they see on Dreamwidth to Facebook (Share This type functionality), or even live chat functionality.
  
 
There are a lot of potential modes of integration.  This project will require some independent research and thought into what makes the most sense for Dreamwidth's particular userbase and use cases, so it would be a good choice for someone who's particularly interested in working with end-users to create and implement a spec.
 
There are a lot of potential modes of integration.  This project will require some independent research and thought into what makes the most sense for Dreamwidth's particular userbase and use cases, so it would be a good choice for someone who's particularly interested in working with end-users to create and implement a spec.
  
<strong>Code area to look at</strong>: Depends on the particular implementation you choose, it's likely you might wind up touching everything. The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ crossposting system] might be a good place to start looking, though.
+
'''Code area to look at''': Depends on the particular implementation you choose, it's likely you might wind up touching everything. The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ crossposting system] might be a good place to start looking, though.
  
<strong>Difficulty level</strong>: Medium to High
+
'''Difficulty level''': Medium to High
  
<strong>Skills needed</strong>: Knowledge of Facebook and an interest in connecting it with Dreamwidth.  Given the breadth of this project it would help to have experience with Perl and MySQL already.
+
'''Skills needed''': Knowledge of Facebook and an interest in connecting it with Dreamwidth.  Given the breadth of this project it would help to have experience with Perl and MySQL already.
  
<strong>Spec available</strong>: No; there has been some some discussion in the <dwcomm>dw_suggestions</dwcomm> ([http://dw-suggestions.dreamwidth.org/209234.html Crossposting of non-public items to Facebook], [http://dw-suggestions.dreamwidth.org/138684.html Tool to post links to DW entries on Facebook]), so there's some initial user feedback, but this would require a lot of careful thought.
+
'''Spec available''': No; there has been some some discussion in the <dwcomm>dw_suggestions</dwcomm> ([http://dw-suggestions.dreamwidth.org/209234.html Crossposting of non-public items to Facebook], [http://dw-suggestions.dreamwidth.org/138684.html Tool to post links to DW entries on Facebook]), so there's some initial user feedback, but this would require a lot of careful thought.
  
<strong>Mentor help needed</strong>: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.
+
'''Mentor help needed''': Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.
  
 
==== Twitter @anywhere ====
 
==== Twitter @anywhere ====
  
<strong>Project</strong>: Implement support for Twitter @anywhere
+
'''Project''': Implement support for Twitter @anywhere
  
<strong>Description</strong>: Twitter has just announced a new @anywhere feature at the SXSW conference.  This functionality looks interesting and would be of particular note for Dreamwidth, something we would like to see implemented as an opt-in for users to access.
+
'''Description''': Twitter has just announced a new @anywhere feature at the SXSW conference.  This functionality looks interesting and would be of particular note for Dreamwidth, something we would like to see implemented as an opt-in for users to access.
  
 
There is some more research that would have to be done to determine the exact method of integration and how it would appear on the site, so this project is most suitable for someone who is not afraid of doing a little thinking and design and not necessarily just diving in and coding to a spec.
 
There is some more research that would have to be done to determine the exact method of integration and how it would appear on the site, so this project is most suitable for someone who is not afraid of doing a little thinking and design and not necessarily just diving in and coding to a spec.
  
<strong>Code area to look at</strong>: Depends on the particular implementation chosen, it's likely you might wind up touching large parts of the codebase. The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ crossposting system] might be a good place to start looking, though.
+
'''Code area to look at''': Depends on the particular implementation chosen, it's likely you might wind up touching large parts of the codebase. The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/External/ crossposting system] might be a good place to start looking, though.
  
<strong>Difficulty level</strong>: Medium to High
+
'''Difficulty level''': Medium to High
  
<strong>Skills needed</strong>: Knowledge of Twitter and an interest in connecting it with Dreamwidth.  This project might be larger or smaller depending on how difficult integration with Twitter turns out to be.
+
'''Skills needed''': Knowledge of Twitter and an interest in connecting it with Dreamwidth.  This project might be larger or smaller depending on how difficult integration with Twitter turns out to be.
  
<strong>Spec available</strong>: No; this is a brand new feature on Twitter's end, so we haven't yet written anything about it.
+
'''Spec available''': No; this is a brand new feature on Twitter's end, so we haven't yet written anything about it.
  
<strong>Mentor help needed</strong>: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.
+
'''Mentor help needed''': Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.
  
 
==== ping.fm support ====
 
==== ping.fm support ====
  
<b>Project</b>: Implement [http://ping.fm/ ping.fm] support for Dreamwidth.
+
'''Project''': Implement [http://ping.fm/ ping.fm] support for Dreamwidth.
  
<b>Description</b>: To make it easier for our users to post, we'd like to support the ping.fm API. Whether it's just ping.fm API support or a more tight integration with ping.fm's services is up to you.  
+
'''Description''': To make it easier for our users to post, we'd like to support the ping.fm API. Whether it's just ping.fm API support or a more tight integration with ping.fm's services is up to you.  
  
<b>Code area to look at</b>: The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal protocol] is where the existing protocol lives -- all transactions with the site go through the protocol, even web-based transactions. Additional APIs would need to be implemented in a way that would tie in to the existing protocol.
+
'''Code area to look at''': The [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/ljprotocol.pl LiveJournal protocol] is where the existing protocol lives -- all transactions with the site go through the protocol, even web-based transactions. Additional APIs would need to be implemented in a way that would tie in to the existing protocol.
  
<b>Difficulty</b>: Medium-high, depending on how detailed you get with your implementation.
+
'''Difficulty''': Medium-high, depending on how detailed you get with your implementation.
  
<b>Skills needed</b>: Our basic requirements, plus a good grasp of how ping.fm works (or should work). You'll be making a lot of the integration choices yourself, since we're less familiar with the ping.fm service, so you should be comfortable with working without specs.
+
'''Skills needed''': Our basic requirements, plus a good grasp of how ping.fm works (or should work). You'll be making a lot of the integration choices yourself, since we're less familiar with the ping.fm service, so you should be comfortable with working without specs.
  
<b>Spec available</b>: Not yet, although this is [http://bugs.dwscoalition.org/show_bug.cgi?id=1675 bug 1675] in our Bugzilla.
+
'''Spec available''': Not yet, although this is [http://bugs.dwscoalition.org/show_bug.cgi?id=1675 bug 1675] in our Bugzilla.
  
<b>Mentor help needed</b>: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.
+
'''Mentor help needed''': Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.
  
 
=== Large Projects/Features ===
 
=== Large Projects/Features ===
Line 205: Line 205:
 
==== Media Hosting ====
 
==== Media Hosting ====
  
<strong>Project</strong>: Implement a system for storing and displaying user submitted media (photos, video, audio, etc).
+
'''Project''': Implement a system for storing and displaying user submitted media (photos, video, audio, etc).
  
<strong>Description</strong>: Dreamwidth has a lot of functionality for manipulating, storing, and displaying text.  One of our serious downsides right now is not having the ability for users to store other media on the site and share it with the people that subscribe to them.  This is something that we consider a high priority project for us, and we'll provide a lot of support to make this happen.
+
'''Description''': Dreamwidth has a lot of functionality for manipulating, storing, and displaying text.  One of our serious downsides right now is not having the ability for users to store other media on the site and share it with the people that subscribe to them.  This is something that we consider a high priority project for us, and we'll provide a lot of support to make this happen.
  
 
This project will be considered successful if, at the end, users are able to upload images to the site, post those images in their journals, and other users can view them.  Other types of media (audio, video, etc) and other functionality (automatic rotation, resizing, transcoding, etc) will be considered as bonus objectives that we will plan but may not implement.
 
This project will be considered successful if, at the end, users are able to upload images to the site, post those images in their journals, and other users can view them.  Other types of media (audio, video, etc) and other functionality (automatic rotation, resizing, transcoding, etc) will be considered as bonus objectives that we will plan but may not implement.
  
<b>Code area to look at</b>: We don't currently have any media hosting, so all of this would be written from scratch.
+
'''Code area to look at''': We don't currently have any media hosting, so all of this would be written from scratch.
  
<strong>Difficulty level</strong>: High, you're implementing an entirely new feature on the site and will have to touch many parts of our codebase.
+
'''Difficulty level''': High, you're implementing an entirely new feature on the site and will have to touch many parts of our codebase.
  
<strong>Skills needed</strong>: For this project you should already be familiar with Perl, SQL, and have an interest in media.  You will be working with us to implement everything from backend storage (using the MogileFS system) to image manipulation (using distributed tasks in Gearman) to front-end management pages.
+
'''Skills needed''': For this project you should already be familiar with Perl, SQL, and have an interest in media.  You will be working with us to implement everything from backend storage (using the MogileFS system) to image manipulation (using distributed tasks in Gearman) to front-end management pages.
  
 
Another option might be to take an existing free-software image hosting/gallery system and integrate it with our code. This variation of the project would involve more backend work (MogileFS storage, Gearman distributed tasks, etc) and less front-end management.
 
Another option might be to take an existing free-software image hosting/gallery system and integrate it with our code. This variation of the project would involve more backend work (MogileFS storage, Gearman distributed tasks, etc) and less front-end management.
  
<b>Spec available</b>: Partial; we've solicited [http://dw-biz.dreamwidth.org/2794.html user feedback] on the project, but haven't written a formal spec yet.
+
'''Spec available''': Partial; we've solicited [http://dw-biz.dreamwidth.org/2794.html user feedback] on the project, but haven't written a formal spec yet.
  
<b>Mentor help needed</b>: Your mentor will help guide you through the design stages of the feature, as well as teaching you about how to design for high availability and maximizing database/webserver performance for production code.
+
'''Mentor help needed''': Your mentor will help guide you through the design stages of the feature, as well as teaching you about how to design for high availability and maximizing database/webserver performance for production code.
  
 
==== Calendar Functionality ====
 
==== Calendar Functionality ====
  
<strong>Project</strong>: Implement calendar/event support.
+
'''Project''': Implement calendar/event support.
  
<strong>Description</strong>: Our users want the ability to maintain a calendar of events on Dreamwidth.  These events can be located in the real world (groups of people who want to schedule a party, f.ex) or they could be entirely online (a fiction challenge).  The basic idea of a calendaring system is well understood, but Dreamwidth has some special requirements around security, support for online only events, etc.
+
'''Description''': Our users want the ability to maintain a calendar of events on Dreamwidth.  These events can be located in the real world (groups of people who want to schedule a party, f.ex) or they could be entirely online (a fiction challenge).  The basic idea of a calendaring system is well understood, but Dreamwidth has some special requirements around security, support for online only events, etc.
  
 
We also want the ability for people to integrate their local calendaring application (iCal, Google Calendar, whatever) with their Dreamwidth account.  Bonus points if the user can schedule events through their application of choice and have those events show up on the web site.
 
We also want the ability for people to integrate their local calendaring application (iCal, Google Calendar, whatever) with their Dreamwidth account.  Bonus points if the user can schedule events through their application of choice and have those events show up on the web site.
  
<b>Code area to look at</b>: We don't currently have any calendaring support, so this would be written from scratch.
+
'''Code area to look at''': We don't currently have any calendaring support, so this would be written from scratch.
  
<strong>Difficulty level</strong>: High; you will be working with Dreamwidth at its most basic level.
+
'''Difficulty level''': High; you will be working with Dreamwidth at its most basic level.
  
<strong>Skills needed</strong>: It would help if you are already familiar with calendaring, but that is certainly not required.  It would also be useful given the breadth of the project that you are already familiar with Perl, MySQL, and have some web development experience.
+
'''Skills needed''': It would help if you are already familiar with calendaring, but that is certainly not required.  It would also be useful given the breadth of the project that you are already familiar with Perl, MySQL, and have some web development experience.
  
<b>Spec available</b>: Not currently
+
'''Spec available''': Not currently
  
<b>Mentor help needed</b>: Your mentor will help guide you through the design stages of the feature, as well as teaching you about how to design for high availability and maximizing database/webserver performance for production code.
+
'''Mentor help needed''': Your mentor will help guide you through the design stages of the feature, as well as teaching you about how to design for high availability and maximizing database/webserver performance for production code.
  
 
==== Embedding Dreamwidth ====
 
==== Embedding Dreamwidth ====
  
<b>Project</b>: Drastically improve the possibilities and options for embedding your DW journal into your external website.
+
'''Project''': Drastically improve the possibilities and options for embedding your DW journal into your external website.
  
<b>Description</B>: As it stands, there's limited support for embedding your DW journal into your external website, but when we say limited, we mean "limited" -- it's possible, for instance, to 'forward' your domain to your DW account through the use of DNS manipulation, but once you get past the first page of the embedded journal, the URLs revert to the Dreamwidth version. (So, comment pages, entry pages, etc, etc, all reflect the dreamwidth.org URL.)
+
'''Description''': As it stands, there's limited support for embedding your DW journal into your external website, but when we say limited, we mean "limited" -- it's possible, for instance, to 'forward' your domain to your DW account through the use of DNS manipulation, but once you get past the first page of the embedded journal, the URLs revert to the Dreamwidth version. (So, comment pages, entry pages, etc, etc, all reflect the dreamwidth.org URL.)
  
 
We want people to be able to embed their DW account into their website seamlessly, so the journal is hosted on DW (and has access to all the community-based features such as access and privacy controls), but appears to be hosted on the user's website. This project will involve taking the existing skeletal support and significantly expanding it.
 
We want people to be able to embed their DW account into their website seamlessly, so the journal is hosted on DW (and has access to all the community-based features such as access and privacy controls), but appears to be hosted on the user's website. This project will involve taking the existing skeletal support and significantly expanding it.
  
<b>Code area to look at</B>: [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Setting/DomainMapping.pm cgi-bin/LJ/Setting/DomainMapping.pm], [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/manage/domain.bml htdocs/manage/domain.bml], [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Session.pm cgi-bin/LJ/Session.pm], and [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/Apache/ cgi-bin/Apache]. (Limited support for this is scattered throughout all of the codebase to an extent, and the project will certainly touch on a lot of it, but that's a good place to start.)
+
'''Code area to look at''': [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Setting/DomainMapping.pm cgi-bin/LJ/Setting/DomainMapping.pm], [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/manage/domain.bml htdocs/manage/domain.bml], [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Session.pm cgi-bin/LJ/Session.pm], and [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/Apache/ cgi-bin/Apache]. (Limited support for this is scattered throughout all of the codebase to an extent, and the project will certainly touch on a lot of it, but that's a good place to start.)
  
<b>Difficulty level</B>: High. This project will touch on a lot of areas throughout the site, so it's best suited for someone who already has strong Perl and backend skills -- it's not a beginner project.
+
'''Difficulty level''': High. This project will touch on a lot of areas throughout the site, so it's best suited for someone who already has strong Perl and backend skills -- it's not a beginner project.
  
<b>Skills needed</b>: Because this touches on authentication issues, cookie use, etc, this should be a project for someone who already has very strong skills with internet security and desigining code that's well-hardened against scripting attacks.
+
'''Skills needed''': Because this touches on authentication issues, cookie use, etc, this should be a project for someone who already has very strong skills with internet security and desigining code that's well-hardened against scripting attacks.
  
<b>Spec available</b>: Not as yet; if you're interested in this project, we'll help you build one.
+
'''Spec available''': Not as yet; if you're interested in this project, we'll help you build one.
  
<b>Mentor help needed</B>: Your mentor will concentrate with you on security issues, since this is a high-risk feature.
+
'''Mentor help needed''': Your mentor will concentrate with you on security issues, since this is a high-risk feature.
  
 
==== Pingback support ====
 
==== Pingback support ====
  
<b>Project</b>: Add and integrate pingback.
+
'''Project''': Add and integrate pingback.
  
<b>Description</b>: Everybody likes to know when people are talking about them, so we'd like to add pingback support when someone links to a user's Dreamwidth entry, both natively on Dreamwidth and elsewhere on the internet.
+
'''Description''': Everybody likes to know when people are talking about them, so we'd like to add pingback support when someone links to a user's Dreamwidth entry, both natively on Dreamwidth and elsewhere on the internet.
  
 
The full pingback system will ideally involve a pingback publishing/moderation queue, treatment of pingbacks as separate from comments, and integration of pingback display into S2, our custom journal styling system. If frontend isn't your thing, we'd also be happy with just the backend framework, but we'd prefer the full package.
 
The full pingback system will ideally involve a pingback publishing/moderation queue, treatment of pingbacks as separate from comments, and integration of pingback display into S2, our custom journal styling system. If frontend isn't your thing, we'd also be happy with just the backend framework, but we'd prefer the full package.
  
<b>Code area to look at</b>: We don't have any pingback support in the code, so this will be working from scratch. You'll likely be adding a new worker to [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/Worker/ cgi-bin/DW/Worker], and display views into our custom journal-styling system, [http://hg.dwscoalition.org/dw-free/file/tip/bin/upgrading/s2layers/ S2], specifically [http://hg.dwscoalition.org/dw-free/file/tip/bin/upgrading/s2layers/core2.s2 core2.s2]. (Don't worry, we'll teach you S2.) LiveJournal did a pingback implementation, but we want to do ours in a different way -- still, their code is there to examine as a starting point, since it was released in their open source branch.
+
'''Code area to look at''': We don't have any pingback support in the code, so this will be working from scratch. You'll likely be adding a new worker to [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/DW/Worker/ cgi-bin/DW/Worker], and display views into our custom journal-styling system, [http://hg.dwscoalition.org/dw-free/file/tip/bin/upgrading/s2layers/ S2], specifically [http://hg.dwscoalition.org/dw-free/file/tip/bin/upgrading/s2layers/core2.s2 core2.s2]. (Don't worry, we'll teach you S2.) LiveJournal did a pingback implementation, but we want to do ours in a different way -- still, their code is there to examine as a starting point, since it was released in their open source branch.
  
<b>Difficulty level</b>: Medium-high to high. S2 is fairly easy to learn, but does take a bit of time and effort, while this will also involve building a user-facing admin frontend for managing and moderating their pingback queue.  
+
'''Difficulty level''': Medium-high to high. S2 is fairly easy to learn, but does take a bit of time and effort, while this will also involve building a user-facing admin frontend for managing and moderating their pingback queue.  
  
<b>Skills needed</b>: The usual, plus frontend/presentational skills if you want to take on the display and user-facing end of things.
+
'''Skills needed''': The usual, plus frontend/presentational skills if you want to take on the display and user-facing end of things.
  
<b>Spec available</b>: No, but we have [http://bugs.dwscoalition.org/show_bug.cgi?id=270 bug 270] for it, plus the [http://www.hixie.ch/specs/pingback/pingback pingback specs]. If you're interested in this project, we'll help you gather and process user feedback about the best way to implement things in order to combine the basic functionality with the site's commitment to protecting users' privacy and upholding privacy concerns.
+
'''Spec available''': No, but we have [http://bugs.dwscoalition.org/show_bug.cgi?id=270 bug 270] for it, plus the [http://www.hixie.ch/specs/pingback/pingback pingback specs]. If you're interested in this project, we'll help you gather and process user feedback about the best way to implement things in order to combine the basic functionality with the site's commitment to protecting users' privacy and upholding privacy concerns.
  
<b>Mentor help needed</b>: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you make decisions about the best way to implement the pingback spec to take into account the site culture.
+
'''Mentor help needed''': Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you make decisions about the best way to implement the pingback spec to take into account the site culture.
  
 
=== Medium Difficulty Improvements ===
 
=== Medium Difficulty Improvements ===
Line 281: Line 281:
 
==== WAI-ARIA Improvements ====
 
==== WAI-ARIA Improvements ====
  
<strong>Project</strong>: Implement support for WAI-ARIA to improve site accessibility.
+
'''Project''': Implement support for WAI-ARIA to improve site accessibility.
  
<strong>Description</strong>: Dreamwidth has a strongly stated goal of supporting accessibility whenever it can.  We would love if someone with a passion for this area would be interested in helping us to achieve a better level of accessibility for all of our site's functionality.  In particular, we will determine what the most popular and hardest to use pages are and then you will work to modernize and make those pages functional for more people.
+
'''Description''': Dreamwidth has a strongly stated goal of supporting accessibility whenever it can.  We would love if someone with a passion for this area would be interested in helping us to achieve a better level of accessibility for all of our site's functionality.  In particular, we will determine what the most popular and hardest to use pages are and then you will work to modernize and make those pages functional for more people.
  
<b>Code area to look at</b>: We've been working on adding basic WAI-ARIA landmark roles to many of our [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/ site pages] in [http://bugs.dwscoalition.org/show_bug.cgi?id=820 bug 820], as well as a discussion here in [[WAI-ARIA]], but there's a lot more work to be done.
+
'''Code area to look at''': We've been working on adding basic WAI-ARIA landmark roles to many of our [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/ site pages] in [http://bugs.dwscoalition.org/show_bug.cgi?id=820 bug 820], as well as a discussion here in [[WAI-ARIA]], but there's a lot more work to be done.
  
<strong>Difficulty level</strong>: Medium
+
'''Difficulty level''': Medium
  
<strong>Skills needed</strong>: Interest in what makes a site accessible or not and how to get it there.  Understanding accessibility is an ongoing process but the skills you learn will help make you a better web developer for the rest of your career.
+
'''Skills needed''': Interest in what makes a site accessible or not and how to get it there.  Understanding accessibility is an ongoing process but the skills you learn will help make you a better web developer for the rest of your career.
  
<b>Spec available</b>: The WAI-ARIA specs are available, but how to implement them on Dreamwidth is something you'll get to decide, with consultation with the <dwcomm>dw-accessibility</dwcomm> project team.  
+
'''Spec available''': The WAI-ARIA specs are available, but how to implement them on Dreamwidth is something you'll get to decide, with consultation with the <dwcomm>dw-accessibility</dwcomm> project team.  
  
<b>Mentor help needed</b>: This project will likely wind up with two mentors, one helping to guide you on the code and someone from the <dwcomm>dw-accessibility</dwcomm> project team guiding you on accessibility guidelines. This is a great project for someone who's interested in learning more about web accessibility, since we have the resources in place to train you on various assistive devices and how to work with them. (We may also be able to provide some help with obtaining assistive technology devices/programs/etc for testing and design purposes, but at the very minimum we can put you in touch with users of those technologies.)
+
'''Mentor help needed''': This project will likely wind up with two mentors, one helping to guide you on the code and someone from the <dwcomm>dw-accessibility</dwcomm> project team guiding you on accessibility guidelines. This is a great project for someone who's interested in learning more about web accessibility, since we have the resources in place to train you on various assistive devices and how to work with them. (We may also be able to provide some help with obtaining assistive technology devices/programs/etc for testing and design purposes, but at the very minimum we can put you in touch with users of those technologies.)
  
 
==== Account/Usage Statistics ====
 
==== Account/Usage Statistics ====
  
<strong>Project</strong>: Implement site admin usage tracking and statistics.
+
'''Project''': Implement site admin usage tracking and statistics.
  
<strong>Description</strong>: Dreamwidth has a few site-admin tools for tracking information about account types and site usage, but we're still far behind where we need to be.  For example, we would love to know exactly how many accounts are created per day, where they were referred in from, how many accounts are purchased, account turnover, average size of posts, usage of various post features (tags, cuts, images, etc), and many more.
+
'''Description''': Dreamwidth has a few site-admin tools for tracking information about account types and site usage, but we're still far behind where we need to be.  For example, we would love to know exactly how many accounts are created per day, where they were referred in from, how many accounts are purchased, account turnover, average size of posts, usage of various post features (tags, cuts, images, etc), and many more.
  
 
There are a thousand things we can track, and most of the infrastructure for recording the data is already in place.  What we lack most is connecting new data points to the statistics system and then a visualization frontend so we can look at the data.  We want to be able to select data to view, pick a timeframe, and then view the resulting graph.
 
There are a thousand things we can track, and most of the infrastructure for recording the data is already in place.  What we lack most is connecting new data points to the statistics system and then a visualization frontend so we can look at the data.  We want to be able to select data to view, pick a timeframe, and then view the resulting graph.
Line 305: Line 305:
 
An extension to this project would be nightly/weekly/etc reports.  I.e., using the administrative interface, configure that we want to see reports with certain data at certain intervals.  (This is a bonus objective.)
 
An extension to this project would be nightly/weekly/etc reports.  I.e., using the administrative interface, configure that we want to see reports with certain data at certain intervals.  (This is a bonus objective.)
  
<b>Code area to look at</b>: the [[Stats_Design|design notes]] have links to all the relevant files.
+
'''Code area to look at''': the [[Stats_Design|design notes]] have links to all the relevant files.
  
<strong>Difficulty level</strong>: Medium to High, depends on how fancy the frontend is.
+
'''Difficulty level''': Medium to High, depends on how fancy the frontend is.
  
<strong>Skills needed</strong>: You should be interested in data, statistics, and graphing.  If you already have experience with GD or a similar graphing library, so much the better.
+
'''Skills needed''': You should be interested in data, statistics, and graphing.  If you already have experience with GD or a similar graphing library, so much the better.
  
<b>Spec available</b>: A list of "wanted" stats is in [http://bugs.dwscoalition.org/show_bug.cgi?id=124 bug 124], as the meta-bug for the stats project. Individual projects will tie in to that existing meta-project.  
+
'''Spec available''': A list of "wanted" stats is in [http://bugs.dwscoalition.org/show_bug.cgi?id=124 bug 124], as the meta-bug for the stats project. Individual projects will tie in to that existing meta-project.  
  
<b>Mentor help needed</b>: Your mentor will help coach you through the [[Stats_Design|existing stats system]], as well as providing you with feedback about what sort of stats-gathering would be most helpful from a project perspective.
+
'''Mentor help needed''': Your mentor will help coach you through the [[Stats_Design|existing stats system]], as well as providing you with feedback about what sort of stats-gathering would be most helpful from a project perspective.
  
 
==== Rich Text Editor overhaul ====
 
==== Rich Text Editor overhaul ====
  
<b>Project</b>: Replace the existing rich text editor with a more modern package and integrate it into the site posting page.
+
'''Project''': Replace the existing rich text editor with a more modern package and integrate it into the site posting page.
  
<b>Description</b>: Currently, the rich text editor we use is an older (and glitch-filled) version of FCKEditor, and we'd like to upgrade to something more fully-featured and modern. This project will involve comparing available packages, selecting one, and doing all of the work to integrate it into our codebase, including (especially) the customization needed to support our custom site-specific markup and posting formats. There's a lot of directions you could take this (such as offering a limited version of the RTE for commenting in addition to journal updates, etc), but at the very least it will involve a lot of frontend work.
+
'''Description''': Currently, the rich text editor we use is an older (and glitch-filled) version of FCKEditor, and we'd like to upgrade to something more fully-featured and modern. This project will involve comparing available packages, selecting one, and doing all of the work to integrate it into our codebase, including (especially) the customization needed to support our custom site-specific markup and posting formats. There's a lot of directions you could take this (such as offering a limited version of the RTE for commenting in addition to journal updates, etc), but at the very least it will involve a lot of frontend work.
  
<b>Code area to look at</b>: The existing FCKEditor files are in [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/rte/ htdocs/rte], with the javascript in [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/js/ htdocs/js] (richtext.js and rte.js). We'd like to replace it entirely, but that's a good place to start looking for some of the details on what was done to the original RTE to integrate and customize it.
+
'''Code area to look at''': The existing FCKEditor files are in [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/rte/ htdocs/rte], with the javascript in [http://hg.dwscoalition.org/dw-free/file/tip/htdocs/js/ htdocs/js] (richtext.js and rte.js). We'd like to replace it entirely, but that's a good place to start looking for some of the details on what was done to the original RTE to integrate and customize it.
  
<b>Difficulty level</b>: Medium, but likely to involve a lot of careful testing and cross-browser work. This would be a good project for somebody who likes frontend work, bugfixes, and investigating/reproducing trouble reports, and has the careful attention to detail necessary to perform extensive regression testing.
+
'''Difficulty level''': Medium, but likely to involve a lot of careful testing and cross-browser work. This would be a good project for somebody who likes frontend work, bugfixes, and investigating/reproducing trouble reports, and has the careful attention to detail necessary to perform extensive regression testing.
  
<b>Skills needed</b>: HTML/CSS and strong Javascript skills, along with familiarity with standards compliance. Dreamwidth supports a variety of modern browsers (see [[Design Philosophy]] for more details), so there'll be a lot of cross-browser regression testing. Basic familiarity with accessibility needs for assistive technology is also a plus, although the <dwcomm>dw-accessibility</dwcomm> project team will work with you to make sure that your work is as broadly accessible in with as many assistive devices and technologies as possible.
+
'''Skills needed''': HTML/CSS and strong Javascript skills, along with familiarity with standards compliance. Dreamwidth supports a variety of modern browsers (see [[Design Philosophy]] for more details), so there'll be a lot of cross-browser regression testing. Basic familiarity with accessibility needs for assistive technology is also a plus, although the <dwcomm>dw-accessibility</dwcomm> project team will work with you to make sure that your work is as broadly accessible in with as many assistive devices and technologies as possible.
  
<b>Spec available</B>: No, but we will provide a list of the DW-specific markup that needs to be integrated, as well as suggestions on what additional features would be useful.
+
'''Spec available''': No, but we will provide a list of the DW-specific markup that needs to be integrated, as well as suggestions on what additional features would be useful.
  
<b>Mentor help needed</b>: Your mentor will help you select an alternate rich text package and coach you through the process of integrating it with Dreamwidth.  
+
'''Mentor help needed''': Your mentor will help you select an alternate rich text package and coach you through the process of integrating it with Dreamwidth.  
  
 
==== "Named guest" commenting level ====
 
==== "Named guest" commenting level ====
  
<b>Project</b>: Add support for "input your name & URL at time of commenting" form of named-anonymous/pseudonymous commenting.
+
'''Project''': Add support for "input your name & URL at time of commenting" form of named-anonymous/pseudonymous commenting.
  
<b>Description</b>: Currently, there are only three forms of authentication supported at the time of commenting: purely anonymous, OpenID-authenticated, and DW user. We'd like to add a "guest" commenting level in between anonymous and OpenID-authenticated, for someone to provide a name/URL (without authentication) but allowing for persistence of pseudonym through the conversation.
+
'''Description''': Currently, there are only three forms of authentication supported at the time of commenting: purely anonymous, OpenID-authenticated, and DW user. We'd like to add a "guest" commenting level in between anonymous and OpenID-authenticated, for someone to provide a name/URL (without authentication) but allowing for persistence of pseudonym through the conversation.
  
<b>Code area to look at</b>: The commenting system is in [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Comment.pm cgi-bin/LJ/Comment.pm] and [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Talk.pm cgi-bin/LJ/Talk.pm].
+
'''Code area to look at''': The commenting system is in [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Comment.pm cgi-bin/LJ/Comment.pm] and [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Talk.pm cgi-bin/LJ/Talk.pm].
  
<b>Difficulty level</B>: Low to medium. This would be a good beginner project, since there's a solid spec and the code paths are fairly well commented.
+
'''Difficulty level''': Low to medium. This would be a good beginner project, since there's a solid spec and the code paths are fairly well commented.
  
<b>Skills needed</b>: Our basic skillset should serve you well here.
+
'''Skills needed''': Our basic skillset should serve you well here.
  
<b>Spec available</b>: Yes, at [http://bugs.dwscoalition.org/show_bug.cgi?id=759 bug 759].
+
'''Spec available''': Yes, at [http://bugs.dwscoalition.org/show_bug.cgi?id=759 bug 759].
  
<b>Mentor help needed</b>: Your mentor will help coach you through implementing the spec and tweaking it as necessary to suit the community needs and feedback.
+
'''Mentor help needed''': Your mentor will help coach you through implementing the spec and tweaking it as necessary to suit the community needs and feedback.
  
 
==== Polling system ====
 
==== Polling system ====
  
<b>Project</b>: Significantly improve the existing poll system.
+
'''Project''': Significantly improve the existing poll system.
  
<b>Description</b>: Posting polls is a useful and compelling paid-user enhancement we offer, and we'd like to upgrade the end-user controls/user experience, as well as providing the user tools necessary to do advanced interpretation and data analysis on their poll data. This project can include either or both: maybe you'd like to work on adding a statistical analysis/data-processing system for processing poll data, or maybe you'd like to implement more question types, views for perusing the results, etc.  
+
'''Description''': Posting polls is a useful and compelling paid-user enhancement we offer, and we'd like to upgrade the end-user controls/user experience, as well as providing the user tools necessary to do advanced interpretation and data analysis on their poll data. This project can include either or both: maybe you'd like to work on adding a statistical analysis/data-processing system for processing poll data, or maybe you'd like to implement more question types, views for perusing the results, etc.  
  
<b>Code area to look at</B>: [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Poll.pm cgi-bin/LJ/Poll.pm] is the poll framework.
+
'''Code area to look at''': [http://hg.dwscoalition.org/dw-free/file/tip/cgi-bin/LJ/Poll.pm cgi-bin/LJ/Poll.pm] is the poll framework.
  
<b>Difficulty level</b>: Low to medium-high, depending on how detailed you'd like to get.
+
'''Difficulty level''': Low to medium-high, depending on how detailed you'd like to get.
  
<b>Skills needed</b>: Depending on which direction you'd like to take this in, this could be an easy project for someone with good frontend/HTML skills, all the way to a complex project suitable for someone with a strong statistics and data analysis background.
+
'''Skills needed''': Depending on which direction you'd like to take this in, this could be an easy project for someone with good frontend/HTML skills, all the way to a complex project suitable for someone with a strong statistics and data analysis background.
  
<b>Spec available</b>: We have a number of [http://tinyurl.com/y8n8mve poll-related bugs] open, all with varying details and levels of spec available. You'll get to pick and choose which ones you'd like to include in your project, since any or all of them would be a great improvement.
+
'''Spec available''': We have a number of [http://bugs.dwscoalition.org/buglist.cgi?query_format=advanced&short_desc=poll&bug_status=NEW&short_desc_type=allwordssubstr poll-related bugs] open, all with varying details and levels of spec available. You'll get to pick and choose which ones you'd like to include in your project, since any or all of them would be a great improvement.
  
<b>Mentor help needed</b>: Your mentor will help you choose which elements to include in your project, as well as giving you help with collecting and processing user feedback.
+
'''Mentor help needed''': Your mentor will help you choose which elements to include in your project, as well as giving you help with collecting and processing user feedback.
  
 
=== Systems/Administration ===
 
=== Systems/Administration ===
Line 367: Line 367:
 
==== Production Monitoring ====
 
==== Production Monitoring ====
  
<strong>Project</strong>: Implement additional tools for monitoring of the production environment.
+
'''Project''': Implement additional tools for monitoring of the production environment.
  
<strong>Description</strong>: All sites require production monitoring: keeping an eye on what is going on inside the servers.  Disk space, CPU/memory usage, backups, RAID health status, etc etc.  Dreamwidth has need of someone with the ability to code and an interest in the production end of the stack to implement some new tools for monitoring.
+
'''Description''': All sites require production monitoring: keeping an eye on what is going on inside the servers.  Disk space, CPU/memory usage, backups, RAID health status, etc etc.  Dreamwidth has need of someone with the ability to code and an interest in the production end of the stack to implement some new tools for monitoring.
  
 
We use industry standard environments such as Nagios and Cacti, so most of the code written will be in the form of Nagios/Cacti plugins.  However, we have a few of our own tools that we use that do things such as analyzing the packets sent to the MySQL servers to look at the queries being executed, or looking at the HTTP requests being sent to our load balancers live.
 
We use industry standard environments such as Nagios and Cacti, so most of the code written will be in the form of Nagios/Cacti plugins.  However, we have a few of our own tools that we use that do things such as analyzing the packets sent to the MySQL servers to look at the queries being executed, or looking at the HTTP requests being sent to our load balancers live.
  
<b>Code area to look at</b>: The [http://hg.dwscoalition.org/dw-ops/file/tip/ dw-ops] repository has our existing monitoring plugins and configs.
+
'''Code area to look at''': The [http://hg.dwscoalition.org/dw-ops/file/tip/ dw-ops] repository has our existing monitoring plugins and configs.
  
<strong>Difficulty level</strong>: Low to Medium
+
'''Difficulty level''': Low to Medium
  
<strong>Skills needed</strong>: You must be interested in production environments.  (Future sysadmins?)  You should also have at least a rudimentary understanding of Linux servers and really strong attention to detail.  Difficulty varies by the exact tasks you work on.
+
'''Skills needed''': You must be interested in production environments.  (Future sysadmins?)  You should also have at least a rudimentary understanding of Linux servers and really strong attention to detail.  Difficulty varies by the exact tasks you work on.
  
<b>Spec available</B>: No formal spec, but we have a good sense of what additional monitoring tools we need that we're happy to talk over with you.
+
'''Spec available''': No formal spec, but we have a good sense of what additional monitoring tools we need that we're happy to talk over with you.
  
<b>Mentor help needed</b>: Your mentor will help coach you through the existing tools and the process of writing additional ones, as well as tutoring you on the basic principles of what sort of code-based support is useful for monitoring high-availability websites.
+
'''Mentor help needed''': Your mentor will help coach you through the existing tools and the process of writing additional ones, as well as tutoring you on the basic principles of what sort of code-based support is useful for monitoring high-availability websites.
 +
 
 +
[[Category: Summer of Code]]

Latest revision as of 19:39, 3 December 2010

Welcome to Dreamwidth!

An Introduction to Dreamwidth Development

If you're totally new to Dreamwidth, you can find out more about us by reading our Guiding Principles, our Diversity Statement, and our About Us guide. We're a blogging platform and social network, forked in 2008 from the code originally developed by LiveJournal.com and considerably extended. We've developed a strong mentoring program that has brought dozens of new programmers into the world of open source, and we'd love to include you as a part of that.

Orientation entry from Mark

Getting started in Dreamwidth development is documented in the 'Category:Development' category on this Wiki. We offer free hosted development environments, if you don't have to install the server code yourself, so you can get straight to hacking, or if you prefer, you can install from scratch. (Our system documentation being perpetually behind, we really do recommend that you use our hosted development environment service, but if you prefer to install to your own space, we'll give you as much of a hand as you need -- we have many available mentors who are used to doing a step-by-step install.)

As a project, we have a pretty well-developed network of mentoring, coaching, and tutoring, so if you aren't already involved in Dreamwidth development, our first step will be to introduce you to our development community. We're a close-knit team full of lots of enthusiasm! You'll be assigned an official mentor as part of the Google Summer of Code program, but everyone on the project will be available to answer questions, walk you through things, or give you a few tips and hints.

You can browse or download our code at our Mercurial repositories: the dw-free branch is the branch where main development happens, while the other branches are backend utilities or site-specific branding. Technical and development discussion takes place on Dreamwidth itself: [info]dw_dev for general development discussion, [info]dw_dev_training for questions, tips, and useful tricks, and [info]changelog for our project changelog. (There's also [info]dw_news for general site announcements.)

If you'd like an account creation code for Dreamwidth, so you can explore the site, just email Denise (denise@dreamwidth.org) or Mark (mark@dreamwidth.org), the project owners.

Dreamwidth's Google Summer of Code project contact address is summerofcode@dreamwidth.org

2010's acceptance list

General Skill Requirements

Most of the projects outlined here are going to be user-facing improvements to the web site. Unless otherwise stated, you will want to have some knowledge of modern HTML and CSS in order to create the pages that the users of the site will be interacting with. We're in the process of converting our entire site to use the Template Toolkit templating system, but many of our existing pages use a custom templating system with HTML/CSS resting on top of it.

Perl knowledge is also very helpful given that nearly all of the code you write will be in this language. You aren't expected to be a master, and we certainly hope that you learn a few tricks in your time working with us. Similarly, if you've never coded in Perl in your life, you'll probably do just fine if you have experience with Python or a similar language and a desire to learn -- we regularly provide Perl coaching and training for people who want to get started with us.

Other than that, we don't have high requirements. There are additional skills that would be of benefit to you: MySQL, the architecture of a web site in general, Apache, Linux (Ubuntu), scalability, memcached, Gearman, etc etc. None of these are required, however, but you can expect to learn about them when you work on projects with us.

Summer of Code Project Ideas

This page serves as a beginning ideas list for the Google Summer of Code project -- it isn't the sole list of projects that might interest a new developer who's looking for a summer-long project, but it's a list of things that we think are fairly standalone and would work well as modular projects. If you don't see something here to strike your fancy, you might also want to look over our unassigned 'effort-major' bugs, or our list of unassigned user suggestions. (Or, if you're already a Dreamwidth user and have an idea for something in particular you want to work on, we'd love to hear about it.)

Most of these ideas are flexible -- so you'll have lots of leeway no matter what you choose. Still, if you're interested in a more self-guided experience, you might want to choose something that's less specified, while if you're the type who prefers to work to a spec, you should pick a project that has a functional spec written. (Or, if you're really interested in a project that doesn't have a functional spec yet, but you work better with one, just let us know. We'll get you one.)

Likewise, if you want to work on a project that has both backend and frontend elements, but you're only interested in the backend bits, come talk to us before you write your proposal, and we'll see what we can work out. We may be able to find you a partner who can work with you on frontend presentation.

Some of these projects are more standalone than others -- we've marked the ones that are more tied in to how the site's culture works, or things we think might require significant user input. Those projects would be a good choice for someone who's interested in getting experience gathering, working with, and incorporating end-user feedback. (We'll do as much of the end-user communication for you as you'd like, or we'll coach and guide you through the process if you'd like to get experience doing it yourself. You can check the [info]dw_biz and [info]dw_suggestions communities for some examples of our user feedback.)

Project:

Description:

Code area to look at:

Difficulty level:

Skills needed:

Spec available:

Mentor help needed:

Client Projects

LiveJournal has always had, and Dreamwidth would like to have as well, desktop or mobile applications that connect to the web site and allow you to write posts or do other actions that normally you need the site to do. One of our most requested features is for the ability to use the site without having to access it via a web browser.

This is a fairly broad category. It would be a valid project to do a mobile client (iPhone, Android, etc), or similarly, one for the desktop (Mac, Windows, Linux). We've made several changes to the LiveJournal client protocol in order to update it, as we've proceeded along our fork, so many of the existing LiveJournal clients work imperfectly for Dreamwidth, or not at all. We'd love to have a set of DW-native clients.

Likewise, we'd love to implement some more of the more widely popular standard blogging APIs: Blogger, MetaWeblog, Atom, etc, as part of our drive towards interoperability. We'd love to hear your ideas on any of these.

Here are some sample clients and protocols projects:

Desktop clients

Project: Desktop client

Description: Program a downloadable client (for the platform of your choice) that will allow users to interact with their journal remotely, without needing a web browser. Ideally, a client program will allow users to post entries to their journal, read their "reading page", and manage the settings of their account (to the extent available through the protocol), but at a bare minimum, the client program should allow the user to post entries to their journal.

Code area to look at: The LiveJournal client protocol contains all of the functions you'd need to implement.

Difficulty level: Medium

Skills needed: Desktop software development, proficiency in application language of your choice

Spec available: No formal spec, but the LiveJournal download page contains examples of client programs written for LiveJournal. Clients written for Dreamwidth should function in roughly the same way.

Mentor help needed: Your mentor will help guide you through the client protocol -- specifically, the changes Dreamwidth has made to the LiveJournal client protocol -- and help you to determine what further changes need to be made to the client protocol to best serve client authors. (There are also several LiveJournal client authors who have expressed interest in adapting their clients to work with Dreamwidth.)

Mobile clients

Project: Mobile client

Description: Program a mobile/handheld client (for the platform of your choice -- we're particularly interested in an iPhone application, but any mobile platform would be awesome) that will allow users to interact with their journal through their mobile device. Ideally, a client program will allow users to post entries to their journal, read their "reading page", and manage the settings of their account (to the extent available through the protocol), but at a bare minimum, the client program should allow the user to post entries to their journal.

Code area to look at: The LiveJournal client protocol contains all of the functions you'd need to implement.

Difficulty level: Medium

Skills needed: Mobile platform software development, proficiency in the mobile programming language of your choice

Spec available: No formal spec, but the LiveJournal download page contains examples of client programs written for LiveJournal. Clients written for Dreamwidth should function in roughly the same way.

Mentor help needed: Your mentor will help guide you through the client protocol -- specifically, the changes Dreamwidth has made to the LiveJournal client protocol -- and help you to determine what further changes need to be made to the client protocol to best serve client authors.

Atom Modernization

Project: API Extensions

Description: In addition to the existing LiveJournal protocol, Dreamwidth supports the Atom specification from back when it was originally proposed. Our implementation is out of date and does not work well with modern Atom based clients. Similarly, we don't implement all of the functionality available to the standard today.

This project would be to modernize our Atom infrastructure to make it compliant with the standard and work with modern clients. You will be expected to look at our existing Atom support and determine the best way to bring it up to compliance.

Code area to look at: The LiveJournal protocol is where the existing protocol lives -- all transactions with the site go through the protocol, even web-based transactions. Additional APIs would need to be implemented in a way that would tie in to the existing protocol. We have existing bare-bones implementations of the Blogger and Atom APIs to look at, too. Additionally, see the Atom RFC.

Difficulty level: Medium

Skills needed: Backend programming knowledge, Perl, and it wouldn't hurt to be familiar with Atom.

Spec available: No Dreamwidth-specific spec, but the specs for various APIs are widely available.

Mentor help needed: Your mentor will answer questions about the existing client protocol and help you make decisions about how to translate other APIs' features to Dreamwidth's feature set.

External Integration

The concept of the 'walled garden' is one that tells us we should try to be good citizens of the Internet and allow our data to move in and out openly. Don't lock users in, and give them a choice of where to go and how to do things. This brings up a lot of interesting projects that would help with integrating Dreamwidth with the rest of the Internet.

OAuth

Project: Implement OAuth Support

Description: Right now the various APIs that Dreamwidth supports require users to provide their password to third party tools and web sites. This is not up to date with modern best practices, so we'd like to add support for OAuth.

Presently we do have one of our core contributors already looking at and working on OAuth functionality, so if you take on this project you will be working with her to fully integrate OAuth with Dreamwidth. This would include developing the frontend/administration pages, logging/tracking functionality, and other tasks.

Code area to look at: The crossposting system that we've developed (in which Dreamwidth acts as a native client for other blogging platforms) is in cgi-bin/DW/External.

Difficulty level: Medium

Skills needed: In addition to our general requirements, this project requires you to read and understand OAuth and be able to implement it on Dreamwidth in Perl -- you can of course use modules distributed on CPAN.

Spec available: No spec on the Dreamwidth side, but the OAuth spec is available.

Mentor help needed: Your mentor will explain and walk you through the existing crossposting functionality and be available to answer questions about the details of OAuth implementation.

Wordpress/TypePad/Movable Type/etc

Project: Wordpress, TypePad, Movable Type, or other import/crosspost

Description: Dreamwidth allows importing archives from, and crossposting entries to, LiveJournal-based platforms already. We would like to add support for Wordpress and Movable Type so people don't need to rely on third-party plugins/extensions/scripts, and so people can post from Dreamwidth if they choose.

Code area to look at: The crossposting system that we've developed (in which Dreamwidth acts as a native client for other blogging platforms) is in cgi-bin/DW/External. Currently, the system only speaks to LJ-based sites, but Wordpress support would go there. Code for the importer is in a few different places, but primarily cgi-bin/DW/Worker.

Difficulty level: Low-Medium, depending on how much detail you want to get into. Both the crossposting system framework and the importing system framework have had a lot of bugs worked out of them over the past year. Adding WP or MT support would plug into this existing framework and expand it.

Skills needed: Our basic requirements, plus familiarity with (or desire to learn) the other platform.

Spec available: Not currently

Mentor help needed: Your mentor will explain and walk you through the existing crossposting and importing functionality and be available to answer questions about the details of WP/MT integration.

Facebook Connect

Project: Implement support for Facebook functionality.

Description: We would like the ability to support some of the Facebook Connect functionality. For example, allow our users to opt-in to sharing content they post on Facebook, or giving people the ability to post something interesting they see on Dreamwidth to Facebook (Share This type functionality), or even live chat functionality.

There are a lot of potential modes of integration. This project will require some independent research and thought into what makes the most sense for Dreamwidth's particular userbase and use cases, so it would be a good choice for someone who's particularly interested in working with end-users to create and implement a spec.

Code area to look at: Depends on the particular implementation you choose, it's likely you might wind up touching everything. The crossposting system might be a good place to start looking, though.

Difficulty level: Medium to High

Skills needed: Knowledge of Facebook and an interest in connecting it with Dreamwidth. Given the breadth of this project it would help to have experience with Perl and MySQL already.

Spec available: No; there has been some some discussion in the [info]dw_suggestions (Crossposting of non-public items to Facebook, Tool to post links to DW entries on Facebook), so there's some initial user feedback, but this would require a lot of careful thought.

Mentor help needed: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.

Twitter @anywhere

Project: Implement support for Twitter @anywhere

Description: Twitter has just announced a new @anywhere feature at the SXSW conference. This functionality looks interesting and would be of particular note for Dreamwidth, something we would like to see implemented as an opt-in for users to access.

There is some more research that would have to be done to determine the exact method of integration and how it would appear on the site, so this project is most suitable for someone who is not afraid of doing a little thinking and design and not necessarily just diving in and coding to a spec.

Code area to look at: Depends on the particular implementation chosen, it's likely you might wind up touching large parts of the codebase. The crossposting system might be a good place to start looking, though.

Difficulty level: Medium to High

Skills needed: Knowledge of Twitter and an interest in connecting it with Dreamwidth. This project might be larger or smaller depending on how difficult integration with Twitter turns out to be.

Spec available: No; this is a brand new feature on Twitter's end, so we haven't yet written anything about it.

Mentor help needed: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.

ping.fm support

Project: Implement ping.fm support for Dreamwidth.

Description: To make it easier for our users to post, we'd like to support the ping.fm API. Whether it's just ping.fm API support or a more tight integration with ping.fm's services is up to you.

Code area to look at: The LiveJournal protocol is where the existing protocol lives -- all transactions with the site go through the protocol, even web-based transactions. Additional APIs would need to be implemented in a way that would tie in to the existing protocol.

Difficulty: Medium-high, depending on how detailed you get with your implementation.

Skills needed: Our basic requirements, plus a good grasp of how ping.fm works (or should work). You'll be making a lot of the integration choices yourself, since we're less familiar with the ping.fm service, so you should be comfortable with working without specs.

Spec available: Not yet, although this is bug 1675 in our Bugzilla.

Mentor help needed: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you form a spec that takes site culture into consideration.

Large Projects/Features

Media Hosting

Project: Implement a system for storing and displaying user submitted media (photos, video, audio, etc).

Description: Dreamwidth has a lot of functionality for manipulating, storing, and displaying text. One of our serious downsides right now is not having the ability for users to store other media on the site and share it with the people that subscribe to them. This is something that we consider a high priority project for us, and we'll provide a lot of support to make this happen.

This project will be considered successful if, at the end, users are able to upload images to the site, post those images in their journals, and other users can view them. Other types of media (audio, video, etc) and other functionality (automatic rotation, resizing, transcoding, etc) will be considered as bonus objectives that we will plan but may not implement.

Code area to look at: We don't currently have any media hosting, so all of this would be written from scratch.

Difficulty level: High, you're implementing an entirely new feature on the site and will have to touch many parts of our codebase.

Skills needed: For this project you should already be familiar with Perl, SQL, and have an interest in media. You will be working with us to implement everything from backend storage (using the MogileFS system) to image manipulation (using distributed tasks in Gearman) to front-end management pages.

Another option might be to take an existing free-software image hosting/gallery system and integrate it with our code. This variation of the project would involve more backend work (MogileFS storage, Gearman distributed tasks, etc) and less front-end management.

Spec available: Partial; we've solicited user feedback on the project, but haven't written a formal spec yet.

Mentor help needed: Your mentor will help guide you through the design stages of the feature, as well as teaching you about how to design for high availability and maximizing database/webserver performance for production code.

Calendar Functionality

Project: Implement calendar/event support.

Description: Our users want the ability to maintain a calendar of events on Dreamwidth. These events can be located in the real world (groups of people who want to schedule a party, f.ex) or they could be entirely online (a fiction challenge). The basic idea of a calendaring system is well understood, but Dreamwidth has some special requirements around security, support for online only events, etc.

We also want the ability for people to integrate their local calendaring application (iCal, Google Calendar, whatever) with their Dreamwidth account. Bonus points if the user can schedule events through their application of choice and have those events show up on the web site.

Code area to look at: We don't currently have any calendaring support, so this would be written from scratch.

Difficulty level: High; you will be working with Dreamwidth at its most basic level.

Skills needed: It would help if you are already familiar with calendaring, but that is certainly not required. It would also be useful given the breadth of the project that you are already familiar with Perl, MySQL, and have some web development experience.

Spec available: Not currently

Mentor help needed: Your mentor will help guide you through the design stages of the feature, as well as teaching you about how to design for high availability and maximizing database/webserver performance for production code.

Embedding Dreamwidth

Project: Drastically improve the possibilities and options for embedding your DW journal into your external website.

Description: As it stands, there's limited support for embedding your DW journal into your external website, but when we say limited, we mean "limited" -- it's possible, for instance, to 'forward' your domain to your DW account through the use of DNS manipulation, but once you get past the first page of the embedded journal, the URLs revert to the Dreamwidth version. (So, comment pages, entry pages, etc, etc, all reflect the dreamwidth.org URL.)

We want people to be able to embed their DW account into their website seamlessly, so the journal is hosted on DW (and has access to all the community-based features such as access and privacy controls), but appears to be hosted on the user's website. This project will involve taking the existing skeletal support and significantly expanding it.

Code area to look at: cgi-bin/LJ/Setting/DomainMapping.pm, htdocs/manage/domain.bml, cgi-bin/LJ/Session.pm, and cgi-bin/Apache. (Limited support for this is scattered throughout all of the codebase to an extent, and the project will certainly touch on a lot of it, but that's a good place to start.)

Difficulty level: High. This project will touch on a lot of areas throughout the site, so it's best suited for someone who already has strong Perl and backend skills -- it's not a beginner project.

Skills needed: Because this touches on authentication issues, cookie use, etc, this should be a project for someone who already has very strong skills with internet security and desigining code that's well-hardened against scripting attacks.

Spec available: Not as yet; if you're interested in this project, we'll help you build one.

Mentor help needed: Your mentor will concentrate with you on security issues, since this is a high-risk feature.

Pingback support

Project: Add and integrate pingback.

Description: Everybody likes to know when people are talking about them, so we'd like to add pingback support when someone links to a user's Dreamwidth entry, both natively on Dreamwidth and elsewhere on the internet.

The full pingback system will ideally involve a pingback publishing/moderation queue, treatment of pingbacks as separate from comments, and integration of pingback display into S2, our custom journal styling system. If frontend isn't your thing, we'd also be happy with just the backend framework, but we'd prefer the full package.

Code area to look at: We don't have any pingback support in the code, so this will be working from scratch. You'll likely be adding a new worker to cgi-bin/DW/Worker, and display views into our custom journal-styling system, S2, specifically core2.s2. (Don't worry, we'll teach you S2.) LiveJournal did a pingback implementation, but we want to do ours in a different way -- still, their code is there to examine as a starting point, since it was released in their open source branch.

Difficulty level: Medium-high to high. S2 is fairly easy to learn, but does take a bit of time and effort, while this will also involve building a user-facing admin frontend for managing and moderating their pingback queue.

Skills needed: The usual, plus frontend/presentational skills if you want to take on the display and user-facing end of things.

Spec available: No, but we have bug 270 for it, plus the pingback specs. If you're interested in this project, we'll help you gather and process user feedback about the best way to implement things in order to combine the basic functionality with the site's commitment to protecting users' privacy and upholding privacy concerns.

Mentor help needed: Your mentor will help walk you through the process of gathering and processing user feedback (or take point, if you're less comfortable), as well as helping you make decisions about the best way to implement the pingback spec to take into account the site culture.

Medium Difficulty Improvements

WAI-ARIA Improvements

Project: Implement support for WAI-ARIA to improve site accessibility.

Description: Dreamwidth has a strongly stated goal of supporting accessibility whenever it can. We would love if someone with a passion for this area would be interested in helping us to achieve a better level of accessibility for all of our site's functionality. In particular, we will determine what the most popular and hardest to use pages are and then you will work to modernize and make those pages functional for more people.

Code area to look at: We've been working on adding basic WAI-ARIA landmark roles to many of our site pages in bug 820, as well as a discussion here in WAI-ARIA, but there's a lot more work to be done.

Difficulty level: Medium

Skills needed: Interest in what makes a site accessible or not and how to get it there. Understanding accessibility is an ongoing process but the skills you learn will help make you a better web developer for the rest of your career.

Spec available: The WAI-ARIA specs are available, but how to implement them on Dreamwidth is something you'll get to decide, with consultation with the [info]dw-accessibility project team.

Mentor help needed: This project will likely wind up with two mentors, one helping to guide you on the code and someone from the [info]dw-accessibility project team guiding you on accessibility guidelines. This is a great project for someone who's interested in learning more about web accessibility, since we have the resources in place to train you on various assistive devices and how to work with them. (We may also be able to provide some help with obtaining assistive technology devices/programs/etc for testing and design purposes, but at the very minimum we can put you in touch with users of those technologies.)

Account/Usage Statistics

Project: Implement site admin usage tracking and statistics.

Description: Dreamwidth has a few site-admin tools for tracking information about account types and site usage, but we're still far behind where we need to be. For example, we would love to know exactly how many accounts are created per day, where they were referred in from, how many accounts are purchased, account turnover, average size of posts, usage of various post features (tags, cuts, images, etc), and many more.

There are a thousand things we can track, and most of the infrastructure for recording the data is already in place. What we lack most is connecting new data points to the statistics system and then a visualization frontend so we can look at the data. We want to be able to select data to view, pick a timeframe, and then view the resulting graph.

An extension to this project would be nightly/weekly/etc reports. I.e., using the administrative interface, configure that we want to see reports with certain data at certain intervals. (This is a bonus objective.)

Code area to look at: the design notes have links to all the relevant files.

Difficulty level: Medium to High, depends on how fancy the frontend is.

Skills needed: You should be interested in data, statistics, and graphing. If you already have experience with GD or a similar graphing library, so much the better.

Spec available: A list of "wanted" stats is in bug 124, as the meta-bug for the stats project. Individual projects will tie in to that existing meta-project.

Mentor help needed: Your mentor will help coach you through the existing stats system, as well as providing you with feedback about what sort of stats-gathering would be most helpful from a project perspective.

Rich Text Editor overhaul

Project: Replace the existing rich text editor with a more modern package and integrate it into the site posting page.

Description: Currently, the rich text editor we use is an older (and glitch-filled) version of FCKEditor, and we'd like to upgrade to something more fully-featured and modern. This project will involve comparing available packages, selecting one, and doing all of the work to integrate it into our codebase, including (especially) the customization needed to support our custom site-specific markup and posting formats. There's a lot of directions you could take this (such as offering a limited version of the RTE for commenting in addition to journal updates, etc), but at the very least it will involve a lot of frontend work.

Code area to look at: The existing FCKEditor files are in htdocs/rte, with the javascript in htdocs/js (richtext.js and rte.js). We'd like to replace it entirely, but that's a good place to start looking for some of the details on what was done to the original RTE to integrate and customize it.

Difficulty level: Medium, but likely to involve a lot of careful testing and cross-browser work. This would be a good project for somebody who likes frontend work, bugfixes, and investigating/reproducing trouble reports, and has the careful attention to detail necessary to perform extensive regression testing.

Skills needed: HTML/CSS and strong Javascript skills, along with familiarity with standards compliance. Dreamwidth supports a variety of modern browsers (see Design Philosophy for more details), so there'll be a lot of cross-browser regression testing. Basic familiarity with accessibility needs for assistive technology is also a plus, although the [info]dw-accessibility project team will work with you to make sure that your work is as broadly accessible in with as many assistive devices and technologies as possible.

Spec available: No, but we will provide a list of the DW-specific markup that needs to be integrated, as well as suggestions on what additional features would be useful.

Mentor help needed: Your mentor will help you select an alternate rich text package and coach you through the process of integrating it with Dreamwidth.

"Named guest" commenting level

Project: Add support for "input your name & URL at time of commenting" form of named-anonymous/pseudonymous commenting.

Description: Currently, there are only three forms of authentication supported at the time of commenting: purely anonymous, OpenID-authenticated, and DW user. We'd like to add a "guest" commenting level in between anonymous and OpenID-authenticated, for someone to provide a name/URL (without authentication) but allowing for persistence of pseudonym through the conversation.

Code area to look at: The commenting system is in cgi-bin/LJ/Comment.pm and cgi-bin/LJ/Talk.pm.

Difficulty level: Low to medium. This would be a good beginner project, since there's a solid spec and the code paths are fairly well commented.

Skills needed: Our basic skillset should serve you well here.

Spec available: Yes, at bug 759.

Mentor help needed: Your mentor will help coach you through implementing the spec and tweaking it as necessary to suit the community needs and feedback.

Polling system

Project: Significantly improve the existing poll system.

Description: Posting polls is a useful and compelling paid-user enhancement we offer, and we'd like to upgrade the end-user controls/user experience, as well as providing the user tools necessary to do advanced interpretation and data analysis on their poll data. This project can include either or both: maybe you'd like to work on adding a statistical analysis/data-processing system for processing poll data, or maybe you'd like to implement more question types, views for perusing the results, etc.

Code area to look at: cgi-bin/LJ/Poll.pm is the poll framework.

Difficulty level: Low to medium-high, depending on how detailed you'd like to get.

Skills needed: Depending on which direction you'd like to take this in, this could be an easy project for someone with good frontend/HTML skills, all the way to a complex project suitable for someone with a strong statistics and data analysis background.

Spec available: We have a number of poll-related bugs open, all with varying details and levels of spec available. You'll get to pick and choose which ones you'd like to include in your project, since any or all of them would be a great improvement.

Mentor help needed: Your mentor will help you choose which elements to include in your project, as well as giving you help with collecting and processing user feedback.

Systems/Administration

Production Monitoring

Project: Implement additional tools for monitoring of the production environment.

Description: All sites require production monitoring: keeping an eye on what is going on inside the servers. Disk space, CPU/memory usage, backups, RAID health status, etc etc. Dreamwidth has need of someone with the ability to code and an interest in the production end of the stack to implement some new tools for monitoring.

We use industry standard environments such as Nagios and Cacti, so most of the code written will be in the form of Nagios/Cacti plugins. However, we have a few of our own tools that we use that do things such as analyzing the packets sent to the MySQL servers to look at the queries being executed, or looking at the HTTP requests being sent to our load balancers live.

Code area to look at: The dw-ops repository has our existing monitoring plugins and configs.

Difficulty level: Low to Medium

Skills needed: You must be interested in production environments. (Future sysadmins?) You should also have at least a rudimentary understanding of Linux servers and really strong attention to detail. Difficulty varies by the exact tasks you work on.

Spec available: No formal spec, but we have a good sense of what additional monitoring tools we need that we're happy to talk over with you.

Mentor help needed: Your mentor will help coach you through the existing tools and the process of writing additional ones, as well as tutoring you on the basic principles of what sort of code-based support is useful for monitoring high-availability websites.