<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Willkg</id>
	<title>GNU MediaGoblin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Willkg"/>
	<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/Special:Contributions/Willkg"/>
	<updated>2026-06-07T14:55:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Campaign_Sightings/2012&amp;diff=946</id>
		<title>Campaign Sightings/2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Campaign_Sightings/2012&amp;diff=946"/>
		<updated>2012-10-17T14:09:19Z</updated>

		<summary type="html">&lt;p&gt;Willkg: Created page with &amp;quot;This page lists sightings of things that link to the campaign page at http://mediagoblin.org/pages/campaign.html .  If you dented, tweeted, blogged about, or otherwise got a l...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists sightings of things that link to the campaign page at http://mediagoblin.org/pages/campaign.html .&lt;br /&gt;
&lt;br /&gt;
If you dented, tweeted, blogged about, or otherwise got a link to the campaign page, add a link to it on this page!&lt;br /&gt;
&lt;br /&gt;
If you see something that&#039;s not listed on this page, add a link to it on this page!&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;On the MediaGoblin fundraising campaign part 1: FSF vs Kickstarter&amp;quot; http://dustycloud.org/blog/mediagoblin-campaign (Chris Webber blog)&lt;br /&gt;
* &amp;quot;Donate to GNU MediaGoblin! Help us cross the chasm!&amp;quot; http://bluesock.org/~willg/blog/gmg/fundraising_2012.html (Will Kahn-Greene blog)&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=904</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=904"/>
		<updated>2012-09-10T19:53:56Z</updated>

		<summary type="html">&lt;p&gt;Willkg: /* Past Meetings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MediaGoblin Monthly Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When:&#039;&#039;&#039; 9:00 am Pacific Time first Saturday of the month. [http://www.timeanddate.com/worldclock/converter.html Convert time to your timezone].  Print current UTC time: &amp;lt;code&amp;gt;date -u +&amp;quot;It&#039;s %F %T UTC&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where:&#039;&#039;&#039; IRC #mediagoblin on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Always announced several days in advance on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list] as is date adjustments, agenda discussion and other meeting preparation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Purpose:&#039;&#039;&#039; The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
Typical Agenda topics:&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
&lt;br /&gt;
Meetings are logged. [http://mediagoblin.org/irclogs/ Logs for past meetings.]&lt;br /&gt;
&lt;br /&gt;
== Next Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Nothing here yet&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Past Meetings ==&lt;br /&gt;
&lt;br /&gt;
=== September 1st, 2012, 9:00 am Pacific Time (2012-09-01 16:00 UTC) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-09-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* FIXME - can someone type in summary here?&lt;br /&gt;
&lt;br /&gt;
=== August 4th, 2012, 9:00 am Pacific Time (2012-08-04 16:00 UTC) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-08-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Release schedule&lt;br /&gt;
* Plugins and themes! Who&#039;s working on one? What problems are you having? -- Please write up issues for problems so they can get fixed!&lt;br /&gt;
* Should we namespace plugins? If so, how should we namespace plugins?&lt;br /&gt;
** Python 3.3 will have support for namespace plugins. [http://www.python.org/dev/peps/pep-0420/#namespace-packages-today]&lt;br /&gt;
** In Python &amp;gt;=2.3, &amp;lt;3.3 it&#039;s a hack [http://www.python.org/dev/peps/pep-0402/#the-problem][http://www.python.org/dev/peps/pep-0420/#namespace-packages-today]&lt;br /&gt;
** Flask has a workaround[https://github.com/mitsuhiko/flask/blob/master/flask/ext/__init__.py]&lt;br /&gt;
&lt;br /&gt;
=== July 7th, 2012, 9:00 am Pacific Time (2012-07-07 16:00 UTC) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-07-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
Announcements:&lt;br /&gt;
&lt;br /&gt;
* Anyone who wants to edit the wiki needs to be in the goblin army group. Ask Will or Chris to get added.&lt;br /&gt;
* Plugin infrastructure landed. If you&#039;re interested in writing plugins, talk to Will. Some documentation at http://docs.mediagoblin.org/#part-2-plugin-writer-s-guide&lt;br /&gt;
&lt;br /&gt;
Agenda:&lt;br /&gt;
&lt;br /&gt;
* Keyboard shortcuts ([http://issues.mediagoblin.org/ticket/346 #346])&lt;br /&gt;
* Ticket triaging?&lt;br /&gt;
* Base plugin stuff!&lt;br /&gt;
* Theming&lt;br /&gt;
* Conference: OSCON&lt;br /&gt;
* Chris Webber&#039;s new &amp;quot;office hours&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== June 2nd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-06-02.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* docs changes&lt;br /&gt;
** Will split the docs/ guide into a Site Administrator&#039;s Guide and a Plugin Writer&#039;s Guide&lt;br /&gt;
** Has anyone looked at the Plugin Writer&#039;s Guide, yet?&lt;br /&gt;
** Will wants to add a &amp;quot;Contributor&#039;s Guide&amp;quot; to docs/ which he&#039;d update from the wiki before every release&lt;br /&gt;
* Is there a way to improve our unit tests and motivation to write them?&lt;br /&gt;
** Simulating a browser by the way of [http://phantomjs.org/ PhantomJS], [http://seleniumhq.org/ Selenium] instead of having code simulating other code against itself might be more natural to write and even more testing the actual application. I have a good feeling about this, please prove me wrong if I&#039;d be. --[[User:Joar|Joar]] 08:53, 28 May 2012 (EDT)&lt;br /&gt;
* Administrative panel/tools and user uploads panel&lt;br /&gt;
* Git and tickets &lt;br /&gt;
* Plugins&lt;br /&gt;
** What&#039;s the state of things?&lt;br /&gt;
** Documentation&lt;br /&gt;
** What plugins might we want to build for this upcoming release?&lt;br /&gt;
** What things do we currently have that we might want to pluginify?&lt;br /&gt;
* State of kuneco/federation mini-update (Chris)&lt;br /&gt;
&lt;br /&gt;
=== May 5th, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-05-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-release reflections&lt;br /&gt;
** Woohoo, release!&lt;br /&gt;
** How did this release process go?&lt;br /&gt;
*** We should talk about that conference.&lt;br /&gt;
** What&#039;s left to clean up?&lt;br /&gt;
*** Mongokit-&amp;gt;SQL &amp;quot;style&amp;quot; query conversion?&lt;br /&gt;
*** Other cruft code?&lt;br /&gt;
* What are our next goals?&lt;br /&gt;
** Plugins&lt;br /&gt;
** Federation&lt;br /&gt;
** Favoriting&lt;br /&gt;
*** Take that, Pinterest! ;)&lt;br /&gt;
** Galleries&lt;br /&gt;
** Theming&lt;br /&gt;
*** Using sass would be neat&lt;br /&gt;
** Access restrictions&lt;br /&gt;
*** User management, or having a &amp;quot;secret url&amp;quot; that is not in the photo index that you can share with friends and generate as needed for any media type&lt;br /&gt;
** What about traffic? Some of us will host GMG on limited plans.&lt;br /&gt;
** Some kind of coding guidelines? Do we have a philosophy like &amp;quot;Keep it Simple, Stupid&amp;quot;&lt;br /&gt;
*** This concerns things like: Should plugins land in core eventually, do we want to support ALL THE MEDIA TYPES, ...&lt;br /&gt;
** Podcasting support?&lt;br /&gt;
** Things that have been hanging???&lt;br /&gt;
** Bugtrackers and milestone?&lt;br /&gt;
** More??? We should organize things!&lt;br /&gt;
* jancborchardt and his team of UX wizard-students&lt;br /&gt;
* Website redesign&lt;br /&gt;
* OpenShift?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== April 7th, 2012, 4:00 pm UTC ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-04-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-SQL stuff&lt;br /&gt;
* Pending 0.0.3 release!&lt;br /&gt;
* Are there stray patches/branches to be merged?&lt;br /&gt;
* Our glorious upcoming plugin future! (Update from Will)&lt;br /&gt;
&lt;br /&gt;
=== March 3rd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-03-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* [[GSOC 2012]]&lt;br /&gt;
* State of the SQL transition (preview: it&#039;s super close, but we need help!)&lt;br /&gt;
* Plugin discussion (Will can&#039;t make this, but we should talk about use cases)&lt;br /&gt;
* MediaGoblin at upcoming conferences&lt;br /&gt;
* PageKite accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2012-02 (held on 2012-02-04) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-02-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Code style guide?  See also: http://issues.mediagoblin.org/ticket/197&lt;br /&gt;
* Kuneco/federation&lt;br /&gt;
* API&lt;br /&gt;
* More testing discussion?&lt;br /&gt;
* Theming?&lt;br /&gt;
* Preliminary plugin discussion&lt;br /&gt;
* Status update from the &amp;quot;SQL Team&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some of the decisions:&lt;br /&gt;
&lt;br /&gt;
* file an issue about proper &amp;amp;lt;audio&amp;amp;gt; support.&lt;br /&gt;
* some TODOs recorded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-12 (held on 2011-12-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-12-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
* [[Feature Ideas]]: What should we do about the wiki page? Keep it and have it as a monthly topic for &amp;quot;what next&amp;quot;? Convert everything to long waiting bugs?&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
*: &#039;executive summary&#039; (well, you should read the long docs): &amp;quot;We could move to sql. It&#039;s probably replacing one type of pain by another type of pain, but those are somewhat comparable. Leaving the main question: Do we want to occupy our main devs for some long time with this task and loose momentum?&amp;quot;&lt;br /&gt;
* Schendje&#039;s [http://wiki.mediagoblin.org/Feature_Ideas/Activities activities proposal]&lt;br /&gt;
* &amp;quot;Coming up next&amp;quot; blogpost draft by Deb Nicholson&lt;br /&gt;
* Jef&#039;s requests:&lt;br /&gt;
** Ticket #466 &amp;quot;Use of &amp;quot;Submit&amp;quot; in site copy is sterile and not as friendly and welcoming as it could be&amp;quot;. I&#039;d really like to change this soon to something more suitable. How can we improve the wording here? Some alternatives have been mentioned in the bug report, but which one should we pick? Link: http://bugs.foocorp.net/issues/466&lt;br /&gt;
** The concept and naming of &amp;quot;favourites&amp;quot;. We&#039;ll (hopefully) be able to &amp;quot;favourite&amp;quot; media soon, which I *think* means that 1) it&#039;ll work like a &amp;quot;I like this&amp;quot; comment, a quick token of appreciation, 2) it&#039;ll be added to your list of favourites so you can save and promote it, and 3) we could maybe use the number of favourites as a ranking. What I&#039;d like to know is: is that the intended purpose? If so, should we name them favo(u)rites or something else? &amp;quot;Like&amp;quot;, &amp;quot;love&amp;quot;, &amp;quot;save&amp;quot;, &amp;quot;appreciate&amp;quot;, &amp;quot;heart&amp;quot;, &amp;quot;high five&amp;quot; and many more could all be contenders. And the name should be consistent with the action and purpose, of course. So I&#039;d like to clear up how and why we will use favourites and what we should call them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-11 (held on 2011-11-05) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-10 (held on 2011-10-01) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-09 (held on 2011-09-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-08 (held on 2011-08-06) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=901</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=901"/>
		<updated>2012-08-27T14:30:16Z</updated>

		<summary type="html">&lt;p&gt;Willkg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Want to Join the MediaGoblin Community? =&lt;br /&gt;
&lt;br /&gt;
We’re really glad that you want to join the MediaGoblin community!&lt;br /&gt;
&lt;br /&gt;
There are a variety of ways to help and support MediaGoblin and to join the team.  If you want to code, great, if not, even better!  MediaGoblin interested contributors in many different roles: users, system administrators, technical writers, testers, evangelists, UI/UX and graphics designers, cheerleaders, and dreamers.&lt;br /&gt;
&lt;br /&gt;
This wiki covers a variety of ways that you can get involved with MediaGoblin as well as instructions on how to get started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hang out with the MediaGoblin folk ==&lt;br /&gt;
&lt;br /&gt;
MediaGoblin has a mailing list and an IRC channel where we hang out.  See [http://mediagoblin.org/pages/join.html our join page] for links.&lt;br /&gt;
&lt;br /&gt;
Please drop by and say “Hi!”  And, if you’re looking for something to do, just ask---there’s always work to be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Take Part in the Monthly Meetings ==&lt;br /&gt;
&lt;br /&gt;
Each month is a [[Meeting]]. You can take part and help decide on the future of MediaGoblin. Or just be around and see what&#039;s happening live!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Bugs / Triage Bugs ==&lt;br /&gt;
&lt;br /&gt;
Issue reports are critical for all projects.  Identified bugs give developers a basis for beginning work, and providing an idea of what features and issues are most important to users and the overall usability of the software.  If you identify errors, flaws, unexpected behaviors, or deficits that impede use, file a bug.&lt;br /&gt;
&lt;br /&gt;
* [[File Bugs]] -- notes on filing new bugs/issues/feature requests&lt;br /&gt;
* [[Feature Ideas]] -- notes on possible features&lt;br /&gt;
* [[Triage Bugs]] -- notes on triaging&lt;br /&gt;
* [[BugTriageDay]] -- every other Thursday is bug triage day where anyone can help out triaging bugs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Code / Fix Code ==&lt;br /&gt;
&lt;br /&gt;
If you are a coder and you would like to write code, the repository is hosted on gitorious. Clone or fork the repository and start poking around. Become familiar with this manual for an overview of how the software works and is used. Consider the contributor wiki for more information about the project, our preferred methods, and guides for developing MediaGoblin. We even have tips on becoming a coder and we’re willing to help!&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto|Hacking]] - notes on making and sending in code contributions&lt;br /&gt;
** [[BeginnersCorner|Beginner&#039;s Corner]] - resources for those who are new to Python or Git.&lt;br /&gt;
** &#039;&#039;Started from an older version of the Hacking Howto?  We switched from buildout-&amp;gt;virtualenv, so look at [[Moving from buildout to virtualenv]] for information on how to move over.&#039;&#039;&lt;br /&gt;
* [[Git workflow]] - How to go about submitting patches via git.&lt;br /&gt;
* [[Templating]] - How our templating structure is set up&lt;br /&gt;
* [[Code overview]] - Overview of the structure of the codebase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Send Encouragement / Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, a nice word, simple encouragement, and interest in the work we’re doing is enough to inspire a tizzy of productive work.  Just a bit more interest and encouragement can even make the difference between a complete feature and limited functionality; between a completed milestone and lost momentum.&lt;br /&gt;
&lt;br /&gt;
Similarly, MediaGoblin, and the movement for free network services, is always in need of encouragement.  Use free network services, understand the principals behind the movement, be able to articulate the benefits of free network services and the problems with psudo-free applications that don’t respect the users’ freedom.&lt;br /&gt;
&lt;br /&gt;
Write a blog post, post a status update, drop by the listserv or join #mediagoblin on freenode.net and let us know.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Documentation / Edit Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation quick start]] - How to contribute to the documentation effort.&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual (forthcoming.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
Do you have access to the web? Do you like sharing your opinions? If so, we need your help to test MediaGoblin! Testers play around with the current test instance, note what operating system and browser they use (notes on multiple set-ups are also helpful) and take some notes. That&#039;s it! It&#039;s a very important task that doesn&#039;t require any special knowledge and you&#039;re done in under an hour. Ready to help?  &lt;br /&gt;
&lt;br /&gt;
* [[User Experience]] - user experience testing.  Includes link to an instance you can try!&lt;br /&gt;
* [[UnitTests|Unit Tests]] - all about the unit tests&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Translate MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
If you know English and another language and feel comfortable translating elements of the interface or even the documentation, we’d love to have help translating the software and resources.&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Become a User ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
We’re building MediaGoblin for us and for you but really you’re one of us and I am you and we are we and MediaGoblin is the walrus.&lt;br /&gt;
&lt;br /&gt;
We&#039;re planning to launch our own public instance of MediaGoblin in the near future--probably in the September/October 2011 time frame.  When we do, sign up for an account, use the service and relish in the thought that this service comes with a heaping side of Freedom and you can salt and pepper it to your liking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Help Others ==&lt;br /&gt;
&lt;br /&gt;
Have you spent time with MediaGoblin?  If so, your experience and wisdom are invaluable and you’re the best person we can think of to help other users with their questions.&lt;br /&gt;
&lt;br /&gt;
Hang out on the IRC channel and help answer new peoples&#039; questions.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Run your own MediaGoblin Instance ==&lt;br /&gt;
&lt;br /&gt;
Are there things about our instance you want to change?  Are there things about other instances you wish were different?  Want to test upcoming changes?  Want to create patches to implement things you need?  That’s great—you can run your own instance!&lt;br /&gt;
&lt;br /&gt;
* [[Configure_MediaGoblin|Configuration]] - Learn about MediaGoblin configuration files and file options.&lt;br /&gt;
* [[Deployment]] - General deployment advice&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* [[Virtual Machine Hosting]] - Deploy your own publicly available MediaGoblin server using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 Amazon&#039;s free EC2 tier].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a Theme ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
MedaGoblin development is premised on the idea that the entire interface for the platform be completely theme-able.  If you have a design or theming background, consider developing themes for MediaGoblin.  New themes help test the theming system, provide attractive and appealing interfaces for prospective users.  If you want to start a new theme but don’t know where to start, touch base with the development community on the list or in the IRC channel for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical project documentation =&lt;br /&gt;
&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[Storage]] - How MediaGoblin&#039;s internal storage system works.&lt;br /&gt;
* [[Processing]] - What happens after you submit your image/video/etc?  Processing!  More about that.&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;br /&gt;
* [[Multiple media support]] - Design plan for multiple media support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inner workings of the secret sanctum =&lt;br /&gt;
&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess|Release Process]] - covers the release process&lt;br /&gt;
* [[Update the website]] - Learn how to update mediagoblin.org!&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=899</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=899"/>
		<updated>2012-08-27T14:11:29Z</updated>

		<summary type="html">&lt;p&gt;Willkg: /* File Bugs / Triage Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Want to Join the MediaGoblin Community? =&lt;br /&gt;
&lt;br /&gt;
We’re really glad that you want to join the MediaGoblin community!&lt;br /&gt;
&lt;br /&gt;
There are a variety of ways to help and support MediaGoblin and to join the team.  If you want to code, great, if not, even better!  MediaGoblin interested contributors in many different roles: users, system administrators, technical writers, testers, evangelists, UI/UX and graphics designers, cheerleaders, and dreamers.&lt;br /&gt;
&lt;br /&gt;
This wiki covers a variety of ways that you can get involved with MediaGoblin as well as instructions on how to get started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hang out with the MediaGoblin folk ==&lt;br /&gt;
&lt;br /&gt;
MediaGoblin has a mailing list and an IRC channel where we hang out.  See [http://mediagoblin.org/pages/join.html our join page] for links.&lt;br /&gt;
&lt;br /&gt;
Please drop by and say “Hi!”  And, if you’re looking for something to do, just ask---there’s always work to be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Take Part in the Monthly Meetings ==&lt;br /&gt;
&lt;br /&gt;
Each month is a [[Meeting]]. You can take part and help decide on the future of MediaGoblin. Or just be around and see what&#039;s happening live!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Bugs / Triage Bugs ==&lt;br /&gt;
&lt;br /&gt;
Issue reports are critical for all projects.  Identified bugs give developers a basis for beginning work, and providing an idea of what features and issues are most important to users and the overall usability of the software.  If you identify errors, flaws, unexpected behaviors, or deficits that impede use, file a bug.&lt;br /&gt;
&lt;br /&gt;
* [[File Bugs]] -- notes on filing new bugs/issues/feature requests&lt;br /&gt;
* [[Feature Ideas]] -- notes on possible features&lt;br /&gt;
* [[Triage Bugs]] -- notes on triaging&lt;br /&gt;
* [[BugTriageDay]] -- every other Thursday is bug triage day where anyone can help out triaging bugs&lt;br /&gt;
&lt;br /&gt;
== Write Code / Fix Code ==&lt;br /&gt;
&lt;br /&gt;
If you are a coder and you would like to write code, the repository is hosted on gitorious. Clone or fork the repository and start poking around. Become familiar with this manual for an overview of how the software works and is used. Consider the contributor wiki for more information about the project, our preferred methods, and guides for developing MediaGoblin. We even have tips on becoming a coder and we’re willing to help!&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto|Hacking]] - notes on making and sending in code contributions&lt;br /&gt;
** [[BeginnersCorner|Beginner&#039;s Corner]] - resources for those who are new to Python or Git.&lt;br /&gt;
** &#039;&#039;Started from an older version of the Hacking Howto?  We switched from buildout-&amp;gt;virtualenv, so look at [[Moving from buildout to virtualenv]] for information on how to move over.&#039;&#039;&lt;br /&gt;
* [[Git workflow]] - How to go about submitting patches via git.&lt;br /&gt;
* [[Templating]] - How our templating structure is set up&lt;br /&gt;
* [[Code overview]] - Overview of the structure of the codebase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Send Encouragement / Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, a nice word, simple encouragement, and interest in the work we’re doing is enough to inspire a tizzy of productive work.  Just a bit more interest and encouragement can even make the difference between a complete feature and limited functionality; between a completed milestone and lost momentum.&lt;br /&gt;
&lt;br /&gt;
Similarly, MediaGoblin, and the movement for free network services, is always in need of encouragement.  Use free network services, understand the principals behind the movement, be able to articulate the benefits of free network services and the problems with psudo-free applications that don’t respect the users’ freedom.&lt;br /&gt;
&lt;br /&gt;
Write a blog post, post a status update, drop by the listserv or join #mediagoblin on freenode.net and let us know.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Documentation / Edit Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation quick start]] - How to contribute to the documentation effort.&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual (forthcoming.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
Do you have access to the web? Do you like sharing your opinions? If so, we need your help to test MediaGoblin! Testers play around with the current test instance, note what operating system and browser they use (notes on multiple set-ups are also helpful) and take some notes. That&#039;s it! It&#039;s a very important task that doesn&#039;t require any special knowledge and you&#039;re done in under an hour. Ready to help?  &lt;br /&gt;
&lt;br /&gt;
* [[User Experience]] - user experience testing.  Includes link to an instance you can try!&lt;br /&gt;
* [[UnitTests|Unit Tests]] - all about the unit tests&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Translate MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
If you know English and another language and feel comfortable translating elements of the interface or even the documentation, we’d love to have help translating the software and resources.&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Become a User ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
We’re building MediaGoblin for us and for you but really you’re one of us and I am you and we are we and MediaGoblin is the walrus.&lt;br /&gt;
&lt;br /&gt;
We&#039;re planning to launch our own public instance of MediaGoblin in the near future--probably in the September/October 2011 time frame.  When we do, sign up for an account, use the service and relish in the thought that this service comes with a heaping side of Freedom and you can salt and pepper it to your liking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Help Others ==&lt;br /&gt;
&lt;br /&gt;
Have you spent time with MediaGoblin?  If so, your experience and wisdom are invaluable and you’re the best person we can think of to help other users with their questions.&lt;br /&gt;
&lt;br /&gt;
Hang out on the IRC channel and help answer new peoples&#039; questions.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Run your own MediaGoblin Instance ==&lt;br /&gt;
&lt;br /&gt;
Are there things about our instance you want to change?  Are there things about other instances you wish were different?  Want to test upcoming changes?  Want to create patches to implement things you need?  That’s great—you can run your own instance!&lt;br /&gt;
&lt;br /&gt;
* [[Configure_MediaGoblin|Configuration]] - Learn about MediaGoblin configuration files and file options.&lt;br /&gt;
* [[Deployment]] - General deployment advice&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* [[Virtual Machine Hosting]] - Deploy your own publicly available MediaGoblin server using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 Amazon&#039;s free EC2 tier].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a Theme ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
MedaGoblin development is premised on the idea that the entire interface for the platform be completely theme-able.  If you have a design or theming background, consider developing themes for MediaGoblin.  New themes help test the theming system, provide attractive and appealing interfaces for prospective users.  If you want to start a new theme but don’t know where to start, touch base with the development community on the list or in the IRC channel for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical project documentation =&lt;br /&gt;
&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[Storage]] - How MediaGoblin&#039;s internal storage system works.&lt;br /&gt;
* [[Processing]] - What happens after you submit your image/video/etc?  Processing!  More about that.&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;br /&gt;
* [[Multiple media support]] - Design plan for multiple media support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inner workings of the secret sanctum =&lt;br /&gt;
&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess|Release Process]] - covers the release process&lt;br /&gt;
* [[Update the website]] - Learn how to update mediagoblin.org!&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=898</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=898"/>
		<updated>2012-08-27T13:52:29Z</updated>

		<summary type="html">&lt;p&gt;Willkg: /* File Bugs / Triage Bugs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Want to Join the MediaGoblin Community? =&lt;br /&gt;
&lt;br /&gt;
We’re really glad that you want to join the MediaGoblin community!&lt;br /&gt;
&lt;br /&gt;
There are a variety of ways to help and support MediaGoblin and to join the team.  If you want to code, great, if not, even better!  MediaGoblin interested contributors in many different roles: users, system administrators, technical writers, testers, evangelists, UI/UX and graphics designers, cheerleaders, and dreamers.&lt;br /&gt;
&lt;br /&gt;
This wiki covers a variety of ways that you can get involved with MediaGoblin as well as instructions on how to get started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hang out with the MediaGoblin folk ==&lt;br /&gt;
&lt;br /&gt;
MediaGoblin has a mailing list and an IRC channel where we hang out.  See [http://mediagoblin.org/pages/join.html our join page] for links.&lt;br /&gt;
&lt;br /&gt;
Please drop by and say “Hi!”  And, if you’re looking for something to do, just ask---there’s always work to be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Take Part in the Monthly Meetings ==&lt;br /&gt;
&lt;br /&gt;
Each month is a [[Meeting]]. You can take part and help decide on the future of MediaGoblin. Or just be around and see what&#039;s happening live!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Bugs / Triage Bugs ==&lt;br /&gt;
&lt;br /&gt;
Issue reports are critical for all projects.  Identified bugs give developers a basis for beginning work, and providing an idea of what features and issues are most important to users and the overall usability of the software.  If you identify errors, flaws, unexpected behaviors, or deficits that impede use, file a bug.&lt;br /&gt;
&lt;br /&gt;
* [[File Bugs]] -- notes on filing new bugs/issues/feature requests&lt;br /&gt;
* [[Feature Ideas]] -- notes on possible features&lt;br /&gt;
* [[Triage Bugs]] -- notes on triaging&lt;br /&gt;
&lt;br /&gt;
We triage bugs every other Thursday all day long. Next handful of triage days:&lt;br /&gt;
&lt;br /&gt;
* Thu August 30, 2012&lt;br /&gt;
* Thu September 13, 2012&lt;br /&gt;
* Thu September 27, 2012&lt;br /&gt;
* Thu October 11, 2012&lt;br /&gt;
* Thu October 25, 2012&lt;br /&gt;
* Thu November 8, 2012&lt;br /&gt;
&lt;br /&gt;
== Write Code / Fix Code ==&lt;br /&gt;
&lt;br /&gt;
If you are a coder and you would like to write code, the repository is hosted on gitorious. Clone or fork the repository and start poking around. Become familiar with this manual for an overview of how the software works and is used. Consider the contributor wiki for more information about the project, our preferred methods, and guides for developing MediaGoblin. We even have tips on becoming a coder and we’re willing to help!&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto|Hacking]] - notes on making and sending in code contributions&lt;br /&gt;
** [[BeginnersCorner|Beginner&#039;s Corner]] - resources for those who are new to Python or Git.&lt;br /&gt;
** &#039;&#039;Started from an older version of the Hacking Howto?  We switched from buildout-&amp;gt;virtualenv, so look at [[Moving from buildout to virtualenv]] for information on how to move over.&#039;&#039;&lt;br /&gt;
* [[Git workflow]] - How to go about submitting patches via git.&lt;br /&gt;
* [[Templating]] - How our templating structure is set up&lt;br /&gt;
* [[Code overview]] - Overview of the structure of the codebase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Send Encouragement / Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, a nice word, simple encouragement, and interest in the work we’re doing is enough to inspire a tizzy of productive work.  Just a bit more interest and encouragement can even make the difference between a complete feature and limited functionality; between a completed milestone and lost momentum.&lt;br /&gt;
&lt;br /&gt;
Similarly, MediaGoblin, and the movement for free network services, is always in need of encouragement.  Use free network services, understand the principals behind the movement, be able to articulate the benefits of free network services and the problems with psudo-free applications that don’t respect the users’ freedom.&lt;br /&gt;
&lt;br /&gt;
Write a blog post, post a status update, drop by the listserv or join #mediagoblin on freenode.net and let us know.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Documentation / Edit Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation quick start]] - How to contribute to the documentation effort.&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual (forthcoming.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
Do you have access to the web? Do you like sharing your opinions? If so, we need your help to test MediaGoblin! Testers play around with the current test instance, note what operating system and browser they use (notes on multiple set-ups are also helpful) and take some notes. That&#039;s it! It&#039;s a very important task that doesn&#039;t require any special knowledge and you&#039;re done in under an hour. Ready to help?  &lt;br /&gt;
&lt;br /&gt;
* [[User Experience]] - user experience testing.  Includes link to an instance you can try!&lt;br /&gt;
* [[UnitTests|Unit Tests]] - all about the unit tests&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Translate MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
If you know English and another language and feel comfortable translating elements of the interface or even the documentation, we’d love to have help translating the software and resources.&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Become a User ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
We’re building MediaGoblin for us and for you but really you’re one of us and I am you and we are we and MediaGoblin is the walrus.&lt;br /&gt;
&lt;br /&gt;
We&#039;re planning to launch our own public instance of MediaGoblin in the near future--probably in the September/October 2011 time frame.  When we do, sign up for an account, use the service and relish in the thought that this service comes with a heaping side of Freedom and you can salt and pepper it to your liking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Help Others ==&lt;br /&gt;
&lt;br /&gt;
Have you spent time with MediaGoblin?  If so, your experience and wisdom are invaluable and you’re the best person we can think of to help other users with their questions.&lt;br /&gt;
&lt;br /&gt;
Hang out on the IRC channel and help answer new peoples&#039; questions.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Run your own MediaGoblin Instance ==&lt;br /&gt;
&lt;br /&gt;
Are there things about our instance you want to change?  Are there things about other instances you wish were different?  Want to test upcoming changes?  Want to create patches to implement things you need?  That’s great—you can run your own instance!&lt;br /&gt;
&lt;br /&gt;
* [[Configure_MediaGoblin|Configuration]] - Learn about MediaGoblin configuration files and file options.&lt;br /&gt;
* [[Deployment]] - General deployment advice&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* [[Virtual Machine Hosting]] - Deploy your own publicly available MediaGoblin server using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 Amazon&#039;s free EC2 tier].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a Theme ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
MedaGoblin development is premised on the idea that the entire interface for the platform be completely theme-able.  If you have a design or theming background, consider developing themes for MediaGoblin.  New themes help test the theming system, provide attractive and appealing interfaces for prospective users.  If you want to start a new theme but don’t know where to start, touch base with the development community on the list or in the IRC channel for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical project documentation =&lt;br /&gt;
&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[Storage]] - How MediaGoblin&#039;s internal storage system works.&lt;br /&gt;
* [[Processing]] - What happens after you submit your image/video/etc?  Processing!  More about that.&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;br /&gt;
* [[Multiple media support]] - Design plan for multiple media support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inner workings of the secret sanctum =&lt;br /&gt;
&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess|Release Process]] - covers the release process&lt;br /&gt;
* [[Update the website]] - Learn how to update mediagoblin.org!&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=BeginnersCorner&amp;diff=895</id>
		<title>BeginnersCorner</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=BeginnersCorner&amp;diff=895"/>
		<updated>2012-08-20T15:17:27Z</updated>

		<summary type="html">&lt;p&gt;Willkg: /* Learning Libraries GNU MediaGoblin uses */ nix pmc references&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MediaGoblin project is welcoming of new contributors, even those who are new to programming. The following resources can help you learn enough to start hacking on MediaGoblin.&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://pyvideo.org/ pyvideo.org] -- This is a shameless plug; Will Kahn-Greene runs pyvideo.org&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=894</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=894"/>
		<updated>2012-08-20T15:16:35Z</updated>

		<summary type="html">&lt;p&gt;Willkg: nix mongodb reference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Want to Join the MediaGoblin Community? =&lt;br /&gt;
&lt;br /&gt;
We’re really glad that you want to join the MediaGoblin community!&lt;br /&gt;
&lt;br /&gt;
There are a variety of ways to help and support MediaGoblin and to join the team.  If you want to code, great, if not, even better!  MediaGoblin interested contributors in many different roles: users, system administrators, technical writers, testers, evangelists, UI/UX and graphics designers, cheerleaders, and dreamers.&lt;br /&gt;
&lt;br /&gt;
This wiki covers a variety of ways that you can get involved with MediaGoblin as well as instructions on how to get started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hang out with the MediaGoblin folk ==&lt;br /&gt;
&lt;br /&gt;
MediaGoblin has a mailing list and an IRC channel where we hang out.  See [http://mediagoblin.org/pages/join.html our join page] for links.&lt;br /&gt;
&lt;br /&gt;
Please drop by and say “Hi!”  And, if you’re looking for something to do, just ask---there’s always work to be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Take Part in the Monthly Meetings ==&lt;br /&gt;
&lt;br /&gt;
Each month is a [[Meeting]]. You can take part and help decide on the future of MediaGoblin. Or just be around and see what&#039;s happening live!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Bugs / Triage Bugs ==&lt;br /&gt;
&lt;br /&gt;
Issue reports are critical for all projects.  Identified bugs give developers a basis for beginning work, and providing an idea of what features and issues are most important to users and the overall usability of the software.  If you identify errors, flaws, unexpected behaviors, or deficits that impede use, file a bug.&lt;br /&gt;
&lt;br /&gt;
* [[File Bugs]] -- notes on filing new bugs/issues/feature requests&lt;br /&gt;
* [[Feature Ideas]] -- notes on possible features&lt;br /&gt;
* [[Triage Bugs]] -- notes on triaging&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Code / Fix Code ==&lt;br /&gt;
&lt;br /&gt;
If you are a coder and you would like to write code, the repository is hosted on gitorious. Clone or fork the repository and start poking around. Become familiar with this manual for an overview of how the software works and is used. Consider the contributor wiki for more information about the project, our preferred methods, and guides for developing MediaGoblin. We even have tips on becoming a coder and we’re willing to help!&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto|Hacking]] - notes on making and sending in code contributions&lt;br /&gt;
** [[BeginnersCorner|Beginner&#039;s Corner]] - resources for those who are new to Python or Git.&lt;br /&gt;
** &#039;&#039;Started from an older version of the Hacking Howto?  We switched from buildout-&amp;gt;virtualenv, so look at [[Moving from buildout to virtualenv]] for information on how to move over.&#039;&#039;&lt;br /&gt;
* [[Git workflow]] - How to go about submitting patches via git.&lt;br /&gt;
* [[Templating]] - How our templating structure is set up&lt;br /&gt;
* [[Code overview]] - Overview of the structure of the codebase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Send Encouragement / Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, a nice word, simple encouragement, and interest in the work we’re doing is enough to inspire a tizzy of productive work.  Just a bit more interest and encouragement can even make the difference between a complete feature and limited functionality; between a completed milestone and lost momentum.&lt;br /&gt;
&lt;br /&gt;
Similarly, MediaGoblin, and the movement for free network services, is always in need of encouragement.  Use free network services, understand the principals behind the movement, be able to articulate the benefits of free network services and the problems with psudo-free applications that don’t respect the users’ freedom.&lt;br /&gt;
&lt;br /&gt;
Write a blog post, post a status update, drop by the listserv or join #mediagoblin on freenode.net and let us know.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Documentation / Edit Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation quick start]] - How to contribute to the documentation effort.&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual (forthcoming.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
Do you have access to the web? Do you like sharing your opinions? If so, we need your help to test MediaGoblin! Testers play around with the current test instance, note what operating system and browser they use (notes on multiple set-ups are also helpful) and take some notes. That&#039;s it! It&#039;s a very important task that doesn&#039;t require any special knowledge and you&#039;re done in under an hour. Ready to help?  &lt;br /&gt;
&lt;br /&gt;
* [[User Experience]] - user experience testing.  Includes link to an instance you can try!&lt;br /&gt;
* [[UnitTests|Unit Tests]] - all about the unit tests&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Translate MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
If you know English and another language and feel comfortable translating elements of the interface or even the documentation, we’d love to have help translating the software and resources.&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Become a User ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
We’re building MediaGoblin for us and for you but really you’re one of us and I am you and we are we and MediaGoblin is the walrus.&lt;br /&gt;
&lt;br /&gt;
We&#039;re planning to launch our own public instance of MediaGoblin in the near future--probably in the September/October 2011 time frame.  When we do, sign up for an account, use the service and relish in the thought that this service comes with a heaping side of Freedom and you can salt and pepper it to your liking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Help Others ==&lt;br /&gt;
&lt;br /&gt;
Have you spent time with MediaGoblin?  If so, your experience and wisdom are invaluable and you’re the best person we can think of to help other users with their questions.&lt;br /&gt;
&lt;br /&gt;
Hang out on the IRC channel and help answer new peoples&#039; questions.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Run your own MediaGoblin Instance ==&lt;br /&gt;
&lt;br /&gt;
Are there things about our instance you want to change?  Are there things about other instances you wish were different?  Want to test upcoming changes?  Want to create patches to implement things you need?  That’s great—you can run your own instance!&lt;br /&gt;
&lt;br /&gt;
* [[Configure_MediaGoblin|Configuration]] - Learn about MediaGoblin configuration files and file options.&lt;br /&gt;
* [[Deployment]] - General deployment advice&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* [[Virtual Machine Hosting]] - Deploy your own publicly available MediaGoblin server using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 Amazon&#039;s free EC2 tier].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a Theme ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
MedaGoblin development is premised on the idea that the entire interface for the platform be completely theme-able.  If you have a design or theming background, consider developing themes for MediaGoblin.  New themes help test the theming system, provide attractive and appealing interfaces for prospective users.  If you want to start a new theme but don’t know where to start, touch base with the development community on the list or in the IRC channel for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical project documentation =&lt;br /&gt;
&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[Storage]] - How MediaGoblin&#039;s internal storage system works.&lt;br /&gt;
* [[Processing]] - What happens after you submit your image/video/etc?  Processing!  More about that.&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;br /&gt;
* [[Multiple media support]] - Design plan for multiple media support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inner workings of the secret sanctum =&lt;br /&gt;
&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess|Release Process]] - covers the release process&lt;br /&gt;
* [[Update the website]] - Learn how to update mediagoblin.org!&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=883</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=883"/>
		<updated>2012-08-04T13:11:32Z</updated>

		<summary type="html">&lt;p&gt;Willkg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MediaGoblin Monthly Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When:&#039;&#039;&#039; 9:00 am Pacific Time first Saturday of the month. [http://www.timeanddate.com/worldclock/converter.html Convert time to your timezone].  Print current UTC time: &amp;lt;code&amp;gt;date -u +&amp;quot;It&#039;s %F %T UTC&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where:&#039;&#039;&#039; IRC #mediagoblin on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Always announced several days in advance on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list] as is date adjustments, agenda discussion and other meeting preparation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Purpose:&#039;&#039;&#039; The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
Typical Agenda topics:&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
&lt;br /&gt;
Meetings are logged. [http://mediagoblin.org/irclogs/ Logs for past meetings.]&lt;br /&gt;
&lt;br /&gt;
== Next Meeting ==&lt;br /&gt;
&lt;br /&gt;
August 4th, 2012, 9:00 am Pacific Time (2012-08-04 16:00 UTC)&lt;br /&gt;
&lt;br /&gt;
* Release schedule&lt;br /&gt;
* Plugins and themes! Who&#039;s working on one? What problems are you having? -- Please write up issues for problems so they can get fixed!&lt;br /&gt;
* Should we namespace plugins? If so, how should we namespace plugins?&lt;br /&gt;
** Python 3.3 will have support for namespace plugins. [http://www.python.org/dev/peps/pep-0420/#namespace-packages-today]&lt;br /&gt;
** In Python &amp;gt;=2.3, &amp;lt;3.3 it&#039;s a hack [http://www.python.org/dev/peps/pep-0402/#the-problem][http://www.python.org/dev/peps/pep-0420/#namespace-packages-today]&lt;br /&gt;
** Flask has a workaround[https://github.com/mitsuhiko/flask/blob/master/flask/ext/__init__.py]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Meetings ==&lt;br /&gt;
&lt;br /&gt;
== July 7th, 2012, 9:00 am Pacific Time (2012-07-07 16:00 UTC) ==&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-07-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
Announcements:&lt;br /&gt;
&lt;br /&gt;
* Anyone who wants to edit the wiki needs to be in the goblin army group. Ask Will or Chris to get added.&lt;br /&gt;
* Plugin infrastructure landed. If you&#039;re interested in writing plugins, talk to Will. Some documentation at http://docs.mediagoblin.org/#part-2-plugin-writer-s-guide&lt;br /&gt;
&lt;br /&gt;
Agenda:&lt;br /&gt;
&lt;br /&gt;
* Keyboard shortcuts ([http://issues.mediagoblin.org/ticket/346 #346])&lt;br /&gt;
* Ticket triaging?&lt;br /&gt;
* Base plugin stuff!&lt;br /&gt;
* Theming&lt;br /&gt;
* Conference: OSCON&lt;br /&gt;
* Chris Webber&#039;s new &amp;quot;office hours&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== June 2nd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-06-02.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* docs changes&lt;br /&gt;
** Will split the docs/ guide into a Site Administrator&#039;s Guide and a Plugin Writer&#039;s Guide&lt;br /&gt;
** Has anyone looked at the Plugin Writer&#039;s Guide, yet?&lt;br /&gt;
** Will wants to add a &amp;quot;Contributor&#039;s Guide&amp;quot; to docs/ which he&#039;d update from the wiki before every release&lt;br /&gt;
* Is there a way to improve our unit tests and motivation to write them?&lt;br /&gt;
** Simulating a browser by the way of [http://phantomjs.org/ PhantomJS], [http://seleniumhq.org/ Selenium] instead of having code simulating other code against itself might be more natural to write and even more testing the actual application. I have a good feeling about this, please prove me wrong if I&#039;d be. --[[User:Joar|Joar]] 08:53, 28 May 2012 (EDT)&lt;br /&gt;
* Administrative panel/tools and user uploads panel&lt;br /&gt;
* Git and tickets &lt;br /&gt;
* Plugins&lt;br /&gt;
** What&#039;s the state of things?&lt;br /&gt;
** Documentation&lt;br /&gt;
** What plugins might we want to build for this upcoming release?&lt;br /&gt;
** What things do we currently have that we might want to pluginify?&lt;br /&gt;
* State of kuneco/federation mini-update (Chris)&lt;br /&gt;
&lt;br /&gt;
=== May 5th, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-05-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-release reflections&lt;br /&gt;
** Woohoo, release!&lt;br /&gt;
** How did this release process go?&lt;br /&gt;
*** We should talk about that conference.&lt;br /&gt;
** What&#039;s left to clean up?&lt;br /&gt;
*** Mongokit-&amp;gt;SQL &amp;quot;style&amp;quot; query conversion?&lt;br /&gt;
*** Other cruft code?&lt;br /&gt;
* What are our next goals?&lt;br /&gt;
** Plugins&lt;br /&gt;
** Federation&lt;br /&gt;
** Favoriting&lt;br /&gt;
*** Take that, Pinterest! ;)&lt;br /&gt;
** Galleries&lt;br /&gt;
** Theming&lt;br /&gt;
*** Using sass would be neat&lt;br /&gt;
** Access restrictions&lt;br /&gt;
*** User management, or having a &amp;quot;secret url&amp;quot; that is not in the photo index that you can share with friends and generate as needed for any media type&lt;br /&gt;
** What about traffic? Some of us will host GMG on limited plans.&lt;br /&gt;
** Some kind of coding guidelines? Do we have a philosophy like &amp;quot;Keep it Simple, Stupid&amp;quot;&lt;br /&gt;
*** This concerns things like: Should plugins land in core eventually, do we want to support ALL THE MEDIA TYPES, ...&lt;br /&gt;
** Podcasting support?&lt;br /&gt;
** Things that have been hanging???&lt;br /&gt;
** Bugtrackers and milestone?&lt;br /&gt;
** More??? We should organize things!&lt;br /&gt;
* jancborchardt and his team of UX wizard-students&lt;br /&gt;
* Website redesign&lt;br /&gt;
* OpenShift?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== April 7th, 2012, 4:00 am UTC ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-04-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-SQL stuff&lt;br /&gt;
* Pending 0.0.3 release!&lt;br /&gt;
* Are there stray patches/branches to be merged?&lt;br /&gt;
* Our glorious upcoming plugin future! (Update from Will)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== March 3rd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-03-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* [[GSOC 2012]]&lt;br /&gt;
* State of the SQL transition (preview: it&#039;s super close, but we need help!)&lt;br /&gt;
* Plugin discussion (Will can&#039;t make this, but we should talk about use cases)&lt;br /&gt;
* MediaGoblin at upcoming conferences&lt;br /&gt;
* PageKite accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2012-02 (held on 2012-02-04) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-02-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Code style guide?  See also: http://issues.mediagoblin.org/ticket/197&lt;br /&gt;
* Kuneco/federation&lt;br /&gt;
* API&lt;br /&gt;
* More testing discussion?&lt;br /&gt;
* Theming?&lt;br /&gt;
* Preliminary plugin discussion&lt;br /&gt;
* Status update from the &amp;quot;SQL Team&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some of the decisions:&lt;br /&gt;
&lt;br /&gt;
* file an issue about proper &amp;amp;lt;audio&amp;amp;gt; support.&lt;br /&gt;
* some TODOs recorded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-12 (held on 2011-12-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-12-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
* [[Feature Ideas]]: What should we do about the wiki page? Keep it and have it as a monthly topic for &amp;quot;what next&amp;quot;? Convert everything to long waiting bugs?&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
*: &#039;executive summary&#039; (well, you should read the long docs): &amp;quot;We could move to sql. It&#039;s probably replacing one type of pain by another type of pain, but those are somewhat comparable. Leaving the main question: Do we want to occupy our main devs for some long time with this task and loose momentum?&amp;quot;&lt;br /&gt;
* Schendje&#039;s [http://wiki.mediagoblin.org/Feature_Ideas/Activities activities proposal]&lt;br /&gt;
* &amp;quot;Coming up next&amp;quot; blogpost draft by Deb Nicholson&lt;br /&gt;
* Jef&#039;s requests:&lt;br /&gt;
** Ticket #466 &amp;quot;Use of &amp;quot;Submit&amp;quot; in site copy is sterile and not as friendly and welcoming as it could be&amp;quot;. I&#039;d really like to change this soon to something more suitable. How can we improve the wording here? Some alternatives have been mentioned in the bug report, but which one should we pick? Link: http://bugs.foocorp.net/issues/466&lt;br /&gt;
** The concept and naming of &amp;quot;favourites&amp;quot;. We&#039;ll (hopefully) be able to &amp;quot;favourite&amp;quot; media soon, which I *think* means that 1) it&#039;ll work like a &amp;quot;I like this&amp;quot; comment, a quick token of appreciation, 2) it&#039;ll be added to your list of favourites so you can save and promote it, and 3) we could maybe use the number of favourites as a ranking. What I&#039;d like to know is: is that the intended purpose? If so, should we name them favo(u)rites or something else? &amp;quot;Like&amp;quot;, &amp;quot;love&amp;quot;, &amp;quot;save&amp;quot;, &amp;quot;appreciate&amp;quot;, &amp;quot;heart&amp;quot;, &amp;quot;high five&amp;quot; and many more could all be contenders. And the name should be consistent with the action and purpose, of course. So I&#039;d like to clear up how and why we will use favourites and what we should call them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-11 (held on 2011-11-05) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-10 (held on 2011-10-01) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-09 (held on 2011-09-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-08 (held on 2011-08-06) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=882</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=882"/>
		<updated>2012-08-01T13:55:33Z</updated>

		<summary type="html">&lt;p&gt;Willkg: fixing the tag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needswork}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an [http://aws.amazon.com/ec2/ EC2] instance from an [http://aws.amazon.com/amis AMI] pre-loaded with MediaGoblin. The following [http://aws.amazon.com/articles/0155828273219400 recipe] should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-61be7908 ami-61be7908]. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not log in to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=881</id>
		<title>Virtual Machine Hosting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Virtual_Machine_Hosting&amp;diff=881"/>
		<updated>2012-08-01T13:55:10Z</updated>

		<summary type="html">&lt;p&gt;Willkg: this page is sooooo old. tagging it with needs work because it needs serious updating.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{{Needswork}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Motivation =&lt;br /&gt;
&lt;br /&gt;
If you want to give MediaGoblin a try, but would prefer to run it on someone else&#039;s machine for a while, then you may be interested in spinning up an [http://aws.amazon.com/ec2/ EC2] instance from an [http://aws.amazon.com/amis AMI] pre-loaded with MediaGoblin. The following [http://aws.amazon.com/articles/0155828273219400 recipe] should make a public MediaGoblin AMI. Make your own or skip ahead Martha Stewart style to [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3bf33252 ami-3bf33252]&lt;br /&gt;
&lt;br /&gt;
== Get your favorite distribution to fit in less than 10 Gb volume size ==&lt;br /&gt;
&lt;br /&gt;
Ubuntu makes this easy. Start with an official EC2 Ubuntu instance in us-east: [https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-61be7908 ami-61be7908]. Other [http://ubuntutym2.u-toyama.ac.jp/uec-images/lucid/20110719/ official Ubuntu AMIs] are also available&lt;br /&gt;
&lt;br /&gt;
Login to this fresh instance using [http://aws.amazon.com/archives/Amazon-EC2/5673744618146887 EC2 tools]&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once logged in, update the links to package updating materials&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run the package manager to download and install the latest patches&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot from the EC2 instance manager. Then log in and install any remaining upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get -u upgrade&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit remote access to improve security ==&lt;br /&gt;
&lt;br /&gt;
Disable password-based login by editing /etc/ssh/sshd_config to explicitly disallow it.&lt;br /&gt;
&amp;lt;pre&amp;gt;+# Disable password-based login&lt;br /&gt;
+PasswordAuthentication no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also remove this moot parameter&lt;br /&gt;
&amp;lt;pre&amp;gt;-# To enable empty passwords, change to yes (NOT RECOMMENDED)&lt;br /&gt;
-PermitEmptyPasswords no&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Disable root login, and specify login by ubuntu only by editing /etc/ssh/sshd_config&lt;br /&gt;
&amp;lt;pre&amp;gt;-PermitRootLogin yes&lt;br /&gt;
+PermitRootLogin no&lt;br /&gt;
+AllowUsers ubuntu&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reboot the ssh server&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo restart ssh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MediaGoblin Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Setup directory for mediagoblin source code&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir src&lt;br /&gt;
cd src&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following matches the [[HackingHowto]] except for how mongodb is installed. MongoDB is only at version 1.2.2 in Lucid 10.04, which the original AMI is based on, but MediaGoblin requires v1.3+&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install git-core python python-dev python-lxml&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages Get the latest mongodb]&lt;br /&gt;
&lt;br /&gt;
First get the gpg key for the 10gen repository&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the 10gen repository to the list of apt sources by editing /etc/apt/sources.list&lt;br /&gt;
&amp;lt;pre&amp;gt;+deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install mongodb&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get update&lt;br /&gt;
sudo apt-get install mongodb-10gen&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the mediagoblin code from the git repository, buildout, and test&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
cd mediagoblin&lt;br /&gt;
python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&lt;br /&gt;
./runtests.sh&lt;br /&gt;
###Ran 45 tests in 12.160s ... OK!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install sendmail&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sendmail&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Configure MediaGoblin]]&lt;br /&gt;
&amp;lt;pre&amp;gt;cp paste.ini paste_local.ini&lt;br /&gt;
cp mediagoblin.ini mediagoblin_local.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit paste_local.ini to point to mediagoblin_local.ini and allow remote connections&lt;br /&gt;
&amp;lt;pre&amp;gt;-config = %(here)s/mediagoblin.ini&lt;br /&gt;
+config = %(here)s/mediagoblin_local.ini&lt;br /&gt;
-host = 127.0.0.1&lt;br /&gt;
+host = 0.0.0.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prepare instance for bundling into a public AMI ==&lt;br /&gt;
&lt;br /&gt;
The instance you&#039;ve built so far is currently configured to accept your private key as a login. Lock yourself out now...or don&#039;t, and see if anyone notices. It&#039;s your call. &lt;br /&gt;
&lt;br /&gt;
Find and remove your public key&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo find / -name &amp;quot;authorized_keys&amp;quot; -print -exec rm {} \;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify you can not log in to the instance anymore&lt;br /&gt;
&amp;lt;pre&amp;gt;me@myhomemachine:~$ ssh -i $(KEY_PATH) ubuntu@ec2-##-##-##-##.compute-1.amazonaws.com&lt;br /&gt;
##Permission denied (publickey).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take a snapshot, convert the snapshot to an AMI, then set the AMI permissions to public.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=874</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=874"/>
		<updated>2012-07-07T15:12:05Z</updated>

		<summary type="html">&lt;p&gt;Willkg: /* Next Meeting */ adding announcements&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MediaGoblin Monthly Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When:&#039;&#039;&#039; 9:00 am Pacific Time first Saturday of the month. [http://www.timeanddate.com/worldclock/converter.html Convert time to your timezone].  Print current UTC time: &amp;lt;code&amp;gt;date -u +&amp;quot;It&#039;s %F %T UTC&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where:&#039;&#039;&#039; IRC #mediagoblin on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Always announced several days in advance on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list] as is date adjustments, agenda discussion and other meeting preparation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Purpose:&#039;&#039;&#039; The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
Typical Agenda topics:&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
&lt;br /&gt;
Meetings are logged. [http://mediagoblin.org/irclogs/ Logs for past meetings.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Meeting ==&lt;br /&gt;
&lt;br /&gt;
July 7th, 2012, 9:00 am Pacific Time (2012-07-07 16:00 UTC)&lt;br /&gt;
&lt;br /&gt;
Announcements:&lt;br /&gt;
&lt;br /&gt;
* Anyone who wants to edit the wiki needs to be in the goblin army group. Ask Will or Chris to get added.&lt;br /&gt;
* Plugin infrastructure landed. If you&#039;re interested in writing plugins, talk to Will. Some documentation at http://docs.mediagoblin.org/#part-2-plugin-writer-s-guide&lt;br /&gt;
&lt;br /&gt;
Agenda:&lt;br /&gt;
&lt;br /&gt;
* Keyboard shortcuts ([http://issues.mediagoblin.org/ticket/346 #346])&lt;br /&gt;
* Ticket triaging?&lt;br /&gt;
* Theming&lt;br /&gt;
* Conference: OSCON&lt;br /&gt;
* Chris Webber&#039;s new &amp;quot;office hours&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Past Meetings ==&lt;br /&gt;
&lt;br /&gt;
=== June 2nd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-06-02.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* docs changes&lt;br /&gt;
** Will split the docs/ guide into a Site Administrator&#039;s Guide and a Plugin Writer&#039;s Guide&lt;br /&gt;
** Has anyone looked at the Plugin Writer&#039;s Guide, yet?&lt;br /&gt;
** Will wants to add a &amp;quot;Contributor&#039;s Guide&amp;quot; to docs/ which he&#039;d update from the wiki before every release&lt;br /&gt;
* Is there a way to improve our unit tests and motivation to write them?&lt;br /&gt;
** Simulating a browser by the way of [http://phantomjs.org/ PhantomJS], [http://seleniumhq.org/ Selenium] instead of having code simulating other code against itself might be more natural to write and even more testing the actual application. I have a good feeling about this, please prove me wrong if I&#039;d be. --[[User:Joar|Joar]] 08:53, 28 May 2012 (EDT)&lt;br /&gt;
* Administrative panel/tools and user uploads panel&lt;br /&gt;
* Git and tickets &lt;br /&gt;
* Plugins&lt;br /&gt;
** What&#039;s the state of things?&lt;br /&gt;
** Documentation&lt;br /&gt;
** What plugins might we want to build for this upcoming release?&lt;br /&gt;
** What things do we currently have that we might want to pluginify?&lt;br /&gt;
* State of kuneco/federation mini-update (Chris)&lt;br /&gt;
&lt;br /&gt;
=== May 5th, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-05-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-release reflections&lt;br /&gt;
** Woohoo, release!&lt;br /&gt;
** How did this release process go?&lt;br /&gt;
*** We should talk about that conference.&lt;br /&gt;
** What&#039;s left to clean up?&lt;br /&gt;
*** Mongokit-&amp;gt;SQL &amp;quot;style&amp;quot; query conversion?&lt;br /&gt;
*** Other cruft code?&lt;br /&gt;
* What are our next goals?&lt;br /&gt;
** Plugins&lt;br /&gt;
** Federation&lt;br /&gt;
** Favoriting&lt;br /&gt;
*** Take that, Pinterest! ;)&lt;br /&gt;
** Galleries&lt;br /&gt;
** Theming&lt;br /&gt;
*** Using sass would be neat&lt;br /&gt;
** Access restrictions&lt;br /&gt;
*** User management, or having a &amp;quot;secret url&amp;quot; that is not in the photo index that you can share with friends and generate as needed for any media type&lt;br /&gt;
** What about traffic? Some of us will host GMG on limited plans.&lt;br /&gt;
** Some kind of coding guidelines? Do we have a philosophy like &amp;quot;Keep it Simple, Stupid&amp;quot;&lt;br /&gt;
*** This concerns things like: Should plugins land in core eventually, do we want to support ALL THE MEDIA TYPES, ...&lt;br /&gt;
** Podcasting support?&lt;br /&gt;
** Things that have been hanging???&lt;br /&gt;
** Bugtrackers and milestone?&lt;br /&gt;
** More??? We should organize things!&lt;br /&gt;
* jancborchardt and his team of UX wizard-students&lt;br /&gt;
* Website redesign&lt;br /&gt;
* OpenShift?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== April 7th, 2012, 4:00 am UTC ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-04-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-SQL stuff&lt;br /&gt;
* Pending 0.0.3 release!&lt;br /&gt;
* Are there stray patches/branches to be merged?&lt;br /&gt;
* Our glorious upcoming plugin future! (Update from Will)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== March 3rd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-03-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* [[GSOC 2012]]&lt;br /&gt;
* State of the SQL transition (preview: it&#039;s super close, but we need help!)&lt;br /&gt;
* Plugin discussion (Will can&#039;t make this, but we should talk about use cases)&lt;br /&gt;
* MediaGoblin at upcoming conferences&lt;br /&gt;
* PageKite accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2012-02 (held on 2012-02-04) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-02-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Code style guide?  See also: http://issues.mediagoblin.org/ticket/197&lt;br /&gt;
* Kuneco/federation&lt;br /&gt;
* API&lt;br /&gt;
* More testing discussion?&lt;br /&gt;
* Theming?&lt;br /&gt;
* Preliminary plugin discussion&lt;br /&gt;
* Status update from the &amp;quot;SQL Team&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some of the decisions:&lt;br /&gt;
&lt;br /&gt;
* file an issue about proper &amp;amp;lt;audio&amp;amp;gt; support.&lt;br /&gt;
* some TODOs recorded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-12 (held on 2011-12-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-12-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
* [[Feature Ideas]]: What should we do about the wiki page? Keep it and have it as a monthly topic for &amp;quot;what next&amp;quot;? Convert everything to long waiting bugs?&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
*: &#039;executive summary&#039; (well, you should read the long docs): &amp;quot;We could move to sql. It&#039;s probably replacing one type of pain by another type of pain, but those are somewhat comparable. Leaving the main question: Do we want to occupy our main devs for some long time with this task and loose momentum?&amp;quot;&lt;br /&gt;
* Schendje&#039;s [http://wiki.mediagoblin.org/Feature_Ideas/Activities activities proposal]&lt;br /&gt;
* &amp;quot;Coming up next&amp;quot; blogpost draft by Deb Nicholson&lt;br /&gt;
* Jef&#039;s requests:&lt;br /&gt;
** Ticket #466 &amp;quot;Use of &amp;quot;Submit&amp;quot; in site copy is sterile and not as friendly and welcoming as it could be&amp;quot;. I&#039;d really like to change this soon to something more suitable. How can we improve the wording here? Some alternatives have been mentioned in the bug report, but which one should we pick? Link: http://bugs.foocorp.net/issues/466&lt;br /&gt;
** The concept and naming of &amp;quot;favourites&amp;quot;. We&#039;ll (hopefully) be able to &amp;quot;favourite&amp;quot; media soon, which I *think* means that 1) it&#039;ll work like a &amp;quot;I like this&amp;quot; comment, a quick token of appreciation, 2) it&#039;ll be added to your list of favourites so you can save and promote it, and 3) we could maybe use the number of favourites as a ranking. What I&#039;d like to know is: is that the intended purpose? If so, should we name them favo(u)rites or something else? &amp;quot;Like&amp;quot;, &amp;quot;love&amp;quot;, &amp;quot;save&amp;quot;, &amp;quot;appreciate&amp;quot;, &amp;quot;heart&amp;quot;, &amp;quot;high five&amp;quot; and many more could all be contenders. And the name should be consistent with the action and purpose, of course. So I&#039;d like to clear up how and why we will use favourites and what we should call them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-11 (held on 2011-11-05) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-10 (held on 2011-10-01) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-09 (held on 2011-09-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-08 (held on 2011-08-06) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Template:Trac&amp;diff=873</id>
		<title>Template:Trac</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Template:Trac&amp;diff=873"/>
		<updated>2012-07-06T15:26:59Z</updated>

		<summary type="html">&lt;p&gt;Willkg: fix trac macro docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://issues.mediagoblin.org/ticket/{{{1}}} {{{2|Issue {{{1}}}}}}]&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Usage ==&lt;br /&gt;
This allows creating easy-to-build links to Trac issues.&lt;br /&gt;
&lt;br /&gt;
Copy and paste this in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Trac|issue-number[|optional-issue-text]}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Trac|387}}&lt;br /&gt;
{{Trac|387|issue for writing a trac macro}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=872</id>
		<title>PluginSystemDesignDocument</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=872"/>
		<updated>2012-07-06T15:26:23Z</updated>

		<summary type="html">&lt;p&gt;Willkg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status ==&lt;br /&gt;
&lt;br /&gt;
February 25th, 2012: Initial writing. Needs work.&lt;br /&gt;
&lt;br /&gt;
Discussion on this document happens on IRC in #mediagoblin, on the dev mailing list and on the discussion page.&lt;br /&gt;
&lt;br /&gt;
Covered in {{Trac|401}}&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
This is a set of use cases we&#039;re thinking about. It is not exhaustive.&lt;br /&gt;
&lt;br /&gt;
* site flat pages (about this site, donations page, how to contribute, how to get an account, terms of service, ...)&lt;br /&gt;
* add restrictions to uploaded content&lt;br /&gt;
** restrict by file size&lt;br /&gt;
** restrict by type&lt;br /&gt;
** restrict by dimensions (height x width)&lt;br /&gt;
* quotas (user can only have x images on site, user can only use total of 50mb, ...)&lt;br /&gt;
* comment spam detection&lt;br /&gt;
* authentication&lt;br /&gt;
* additional admin web pages&lt;br /&gt;
* extending existing media types (Add new formats for video encoding or flash display, etc?)&lt;br /&gt;
* things MediaGoblin already kind of does&lt;br /&gt;
** Storage system extensibility&lt;br /&gt;
** Media type extensibility&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What makes a good plugin system? ==&lt;br /&gt;
&lt;br /&gt;
# plugin management system - The following should be optimized for ease-of-use:&lt;br /&gt;
#* installing plugins&lt;br /&gt;
#* configuring plugins&lt;br /&gt;
#* removing plugins&lt;br /&gt;
#* getting status on plugins&lt;br /&gt;
#* getting errors from plugins&lt;br /&gt;
# plugin API - In order to augment MediaGoblin&#039;s behavior, the plugin needs to be able to assert itself into MediaGoblin&#039;s various pipelines. This can be done with hook, signals, registration, ...&lt;br /&gt;
# documentation - how to build, test, install, uninstall, and share plugins&lt;br /&gt;
# a place where site admin can find and download plugins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High-level plan ==&lt;br /&gt;
&lt;br /&gt;
I think the plan should be something along these lines:&lt;br /&gt;
&lt;br /&gt;
# Install and uninstall the plugin with pip. Then site admins add the plugin to the INSTALLED_APPS configuration. This way it&#039;s easy to put the plugin in and out, install, uninstall, etc. Plugins will have additional configuration/setup steps that will be plugin specific such as running {{Cmd|./bin/gmg updatedb}} for setting up db tables.&lt;br /&gt;
# Expose our testing framework. Plugins should be testable and it&#039;d be nice to test everything in a GMG install with a single {{Cmd|./runtests.sh}}.&lt;br /&gt;
# Expose routing to applications. Maybe even make routing part of the configuration and allow the site admin to specify &amp;quot;mount points&amp;quot; for the various applications. MediaGoblin could either query the application for routes or just pass anything pointed towards a specific mount point to the application and let it deal with routing. I think I prefer the former.&lt;br /&gt;
# Database storage. Migrations, adding new tables.&lt;br /&gt;
# Templates. Adding new templates, template blocks, ...&lt;br /&gt;
# Version checking: plugins should be able to check the gmg version and throw an exception if the plugin doesn&#039;t work with that gmg version.&lt;br /&gt;
# Serve static files. Additional CSS, JS, images, ... Symlinks? Static assets directory that gets copied over? Should be an extensions_static directory or etc of both url and filesystem paths, some command like {{Cmd|./bin/gmg copy_static_assets}} or something less crappy that gets filled based on config file settings&lt;br /&gt;
# Need to be able to do three different things:&lt;br /&gt;
#* notification: plugin gets notified of some happenstance (maybe like Django signals). Examples: post_save, post_update, ...&lt;br /&gt;
#* transform: plugin gets to modify some thing as it&#039;s getting processed. Examples: context processors, adding additional template tags, ...&lt;br /&gt;
#* handler: plugin handles some thing and if the plugin handles it, then processing ends. Examples: authentication, ...&lt;br /&gt;
# Implement a MediaGoblin plugin API. Expose things that need exposing, implement stuff in the core, ...&lt;br /&gt;
# We can do a PyPI-like thing for plugins. Needs to allow for comments, ratings, blah blah blah.&lt;br /&gt;
# Build a plugin writers documentation guide.&lt;br /&gt;
# GMG would/could come with a set of core plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install/uninstall ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Database storage ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Version checking ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Notification, transform and handler ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
== Execution on the plan ==&lt;br /&gt;
&lt;br /&gt;
# Flesh out the plan into a better design document and get a consensus on it.&lt;br /&gt;
# Flesh out the design details.&lt;br /&gt;
# Implement initial bits and write documentation.&lt;br /&gt;
# Write some plugins.&lt;br /&gt;
# Iterate going forward: Take stock of where we&#039;re at and what we&#039;re missing, implement a new piece, ...&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=871</id>
		<title>PluginSystemDesignDocument</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=871"/>
		<updated>2012-07-06T15:24:56Z</updated>

		<summary type="html">&lt;p&gt;Willkg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status ==&lt;br /&gt;
&lt;br /&gt;
February 25th, 2012: Initial writing. Needs work.&lt;br /&gt;
&lt;br /&gt;
Discussion on this document happens on IRC in #mediagoblin, on the dev mailing list and on the discussion page.&lt;br /&gt;
&lt;br /&gt;
Covered in {{{Trac|401}}}&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
This is a set of use cases we&#039;re thinking about. It is not exhaustive.&lt;br /&gt;
&lt;br /&gt;
* site flat pages (about this site, donations page, how to contribute, how to get an account, terms of service, ...)&lt;br /&gt;
* add restrictions to uploaded content&lt;br /&gt;
** restrict by file size&lt;br /&gt;
** restrict by type&lt;br /&gt;
** restrict by dimensions (height x width)&lt;br /&gt;
* quotas (user can only have x images on site, user can only use total of 50mb, ...)&lt;br /&gt;
* comment spam detection&lt;br /&gt;
* authentication&lt;br /&gt;
* additional admin web pages&lt;br /&gt;
* extending existing media types (Add new formats for video encoding or flash display, etc?)&lt;br /&gt;
* things MediaGoblin already kind of does&lt;br /&gt;
** Storage system extensibility&lt;br /&gt;
** Media type extensibility&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What makes a good plugin system? ==&lt;br /&gt;
&lt;br /&gt;
# plugin management system - The following should be optimized for ease-of-use:&lt;br /&gt;
#* installing plugins&lt;br /&gt;
#* configuring plugins&lt;br /&gt;
#* removing plugins&lt;br /&gt;
#* getting status on plugins&lt;br /&gt;
#* getting errors from plugins&lt;br /&gt;
# plugin API - In order to augment MediaGoblin&#039;s behavior, the plugin needs to be able to assert itself into MediaGoblin&#039;s various pipelines. This can be done with hook, signals, registration, ...&lt;br /&gt;
# documentation - how to build, test, install, uninstall, and share plugins&lt;br /&gt;
# a place where site admin can find and download plugins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High-level plan ==&lt;br /&gt;
&lt;br /&gt;
I think the plan should be something along these lines:&lt;br /&gt;
&lt;br /&gt;
# Install and uninstall the plugin with pip. Then site admins add the plugin to the INSTALLED_APPS configuration. This way it&#039;s easy to put the plugin in and out, install, uninstall, etc. Plugins will have additional configuration/setup steps that will be plugin specific such as running {{Cmd|./bin/gmg updatedb}} for setting up db tables.&lt;br /&gt;
# Expose our testing framework. Plugins should be testable and it&#039;d be nice to test everything in a GMG install with a single {{Cmd|./runtests.sh}}.&lt;br /&gt;
# Expose routing to applications. Maybe even make routing part of the configuration and allow the site admin to specify &amp;quot;mount points&amp;quot; for the various applications. MediaGoblin could either query the application for routes or just pass anything pointed towards a specific mount point to the application and let it deal with routing. I think I prefer the former.&lt;br /&gt;
# Database storage. Migrations, adding new tables.&lt;br /&gt;
# Templates. Adding new templates, template blocks, ...&lt;br /&gt;
# Version checking: plugins should be able to check the gmg version and throw an exception if the plugin doesn&#039;t work with that gmg version.&lt;br /&gt;
# Serve static files. Additional CSS, JS, images, ... Symlinks? Static assets directory that gets copied over? Should be an extensions_static directory or etc of both url and filesystem paths, some command like {{Cmd|./bin/gmg copy_static_assets}} or something less crappy that gets filled based on config file settings&lt;br /&gt;
# Need to be able to do three different things:&lt;br /&gt;
#* notification: plugin gets notified of some happenstance (maybe like Django signals). Examples: post_save, post_update, ...&lt;br /&gt;
#* transform: plugin gets to modify some thing as it&#039;s getting processed. Examples: context processors, adding additional template tags, ...&lt;br /&gt;
#* handler: plugin handles some thing and if the plugin handles it, then processing ends. Examples: authentication, ...&lt;br /&gt;
# Implement a MediaGoblin plugin API. Expose things that need exposing, implement stuff in the core, ...&lt;br /&gt;
# We can do a PyPI-like thing for plugins. Needs to allow for comments, ratings, blah blah blah.&lt;br /&gt;
# Build a plugin writers documentation guide.&lt;br /&gt;
# GMG would/could come with a set of core plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install/uninstall ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Database storage ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Version checking ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Notification, transform and handler ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
== Execution on the plan ==&lt;br /&gt;
&lt;br /&gt;
# Flesh out the plan into a better design document and get a consensus on it.&lt;br /&gt;
# Flesh out the design details.&lt;br /&gt;
# Implement initial bits and write documentation.&lt;br /&gt;
# Write some plugins.&lt;br /&gt;
# Iterate going forward: Take stock of where we&#039;re at and what we&#039;re missing, implement a new piece, ...&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Template:Trac&amp;diff=870</id>
		<title>Template:Trac</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Template:Trac&amp;diff=870"/>
		<updated>2012-07-06T15:22:30Z</updated>

		<summary type="html">&lt;p&gt;Willkg: Created page with &amp;quot;[http://issues.mediagoblin.org/ticket/{{{1}}} {{{2|Issue {{{1}}}}}}]&amp;lt;noinclude&amp;gt; == Usage == This allows creating easy-to-build links to Trac issues.  Copy and paste this in:  &amp;lt;pr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://issues.mediagoblin.org/ticket/{{{1}}} {{{2|Issue {{{1}}}}}}]&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Usage ==&lt;br /&gt;
This allows creating easy-to-build links to Trac issues.&lt;br /&gt;
&lt;br /&gt;
Copy and paste this in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{Trac|issue-number[|optional-issue-text]}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{Trac|387}}}&lt;br /&gt;
{{{Trac|387|issue for writing a trac macro}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Git_workflow&amp;diff=776</id>
		<title>Git workflow</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Git_workflow&amp;diff=776"/>
		<updated>2012-06-03T20:01:30Z</updated>

		<summary type="html">&lt;p&gt;Willkg: /* Tie your changes to issues in the issue tracker */ update issue tracker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GNU MediaGoblin uses git for all our version control and we have the&lt;br /&gt;
repositories hosted on [http://gitorious.org/ Gitorious].  We have&lt;br /&gt;
two repositories:&lt;br /&gt;
&lt;br /&gt;
* MediaGoblin software: http://gitorious.org/mediagoblin/mediagoblin&lt;br /&gt;
* MediaGoblin website: http://gitorious.org/mediagoblin/mediagoblin-website&lt;br /&gt;
&lt;br /&gt;
It&#039;s most likely you want to look at the software repository -- not the&lt;br /&gt;
website one.&lt;br /&gt;
&lt;br /&gt;
The rest of this chapter talks about using the software repository.&lt;br /&gt;
&lt;br /&gt;
= How to clone the project =&lt;br /&gt;
&lt;br /&gt;
Do::&lt;br /&gt;
&lt;br /&gt;
    git clone git://gitorious.org/mediagoblin/mediagoblin.git&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to contribute changes =&lt;br /&gt;
&lt;br /&gt;
== Tie your changes to issues in the issue tracker ==&lt;br /&gt;
&lt;br /&gt;
All patches should be tied to issues in the&lt;br /&gt;
[http://issues.mediagoblin.org/ issue tracker].&lt;br /&gt;
That makes it a lot easier for everyone to track proposed changes and&lt;br /&gt;
make sure your hard work doesn&#039;t get dropped on the floor!  If there&lt;br /&gt;
isn&#039;t an issue for what you&#039;re working on, please create one.  The&lt;br /&gt;
better the description of what it is you&#039;re trying to fix/implement,&lt;br /&gt;
the better everyone else is able to understand why you&#039;re doing what&lt;br /&gt;
you&#039;re doing.&lt;br /&gt;
&lt;br /&gt;
== Use bugfix branches to make changes ==&lt;br /&gt;
&lt;br /&gt;
The best way to isolate your changes is to create a branch based off&lt;br /&gt;
of the MediaGoblin repository master branch, do the changes related to&lt;br /&gt;
that one issue there, and then let us know how to get it.&lt;br /&gt;
&lt;br /&gt;
It&#039;s much easier on us if you isolate your changes to a branch focused&lt;br /&gt;
on the issue.  Then we don&#039;t have to sift through things.&lt;br /&gt;
&lt;br /&gt;
It&#039;s much easier on you if you isolate your changes to a branch&lt;br /&gt;
focused on the issue.  Then when we merge your changes in, you just&lt;br /&gt;
have to do a {{Cmd|git fetch}} and that&#039;s it.  This is especially true if&lt;br /&gt;
we reject some of your changes, but accept others or otherwise tweak&lt;br /&gt;
your changes.&lt;br /&gt;
&lt;br /&gt;
Further, if you isolate your changes to a branch, then you can work on&lt;br /&gt;
multiple issues at the same time and they don&#039;t conflict with one&lt;br /&gt;
another.&lt;br /&gt;
&lt;br /&gt;
Name your branches using the isue number and something that makes it clear&lt;br /&gt;
what it&#039;s about.  For example, if you were working on tagging, you&lt;br /&gt;
might name your branch &amp;quot;360_tagging&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Properly document your changes ==&lt;br /&gt;
&lt;br /&gt;
Include comments in the code.&lt;br /&gt;
&lt;br /&gt;
Write comprehensive commit messages.  The better your commit message&lt;br /&gt;
is at describing what you did and why, the easier it is for us to&lt;br /&gt;
quickly accept your patch.&lt;br /&gt;
&lt;br /&gt;
Write comprehensive comments in the issue tracker about what you&#039;re&lt;br /&gt;
doing and why.&lt;br /&gt;
&lt;br /&gt;
== How to send us your changes ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to let us know how to get it:&lt;br /&gt;
&lt;br /&gt;
=== push changes to publicly available git clone and let us know where to find it ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the preferred method of sending changes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Push your feature/bugfix/issue branch to your publicly available&lt;br /&gt;
git clone and add a comment to the issue with the url for your&lt;br /&gt;
clone and the branch to look at.&lt;br /&gt;
&lt;br /&gt;
=== attaching the patch files to the issue ===&lt;br /&gt;
&lt;br /&gt;
Run&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git format-patch --stdout &amp;lt;remote&amp;gt;/master &amp;gt; issue_&amp;lt;number&amp;gt;.patch}}&lt;br /&gt;
       &lt;br /&gt;
&amp;lt;tt&amp;gt;format-patch&amp;lt;/tt&amp;gt; creates a patch of all the commits that are in&lt;br /&gt;
your branch that aren&#039;t in &amp;lt;tt&amp;gt;&amp;lt;remote&amp;gt;/master&amp;lt;/tt&amp;gt;.  The &amp;lt;tt&amp;gt;--stdout&amp;lt;/tt&amp;gt;&lt;br /&gt;
flag causes all this output to go to stdout where it&#039;s redirected&lt;br /&gt;
to a file named &amp;lt;tt&amp;gt;issue_&amp;lt;number&amp;gt;.patch&amp;lt;/tt&amp;gt;.  That file should be&lt;br /&gt;
based on the issue you&#039;re working with.  For example,&lt;br /&gt;
&amp;lt;tt&amp;gt;issue_42.patch&amp;lt;/tt&amp;gt; is a good filename and &amp;lt;tt&amp;gt;issue_42_rev2.patch&amp;lt;/tt&amp;gt;&lt;br /&gt;
is good if you did a revision of it.&lt;br /&gt;
&lt;br /&gt;
Having said all that, the filename isn&#039;t wildly important.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Example workflow =&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example workflow.&lt;br /&gt;
&lt;br /&gt;
== Contributing changes ==&lt;br /&gt;
&lt;br /&gt;
Slartibartfast from the planet Magrathea far off in the universe has&lt;br /&gt;
decided that he is bored with fjords and wants to fix issue 42 (the&lt;br /&gt;
meaning of life bug) and send us the changes.&lt;br /&gt;
&lt;br /&gt;
Slartibartfast has cloned the MediaGoblin repository and his clone&lt;br /&gt;
lives on gitorious.&lt;br /&gt;
&lt;br /&gt;
Slartibartfast works locally.  The remote named ``origin`` points to&lt;br /&gt;
his clone on gitorious.  The remote named ``gmg`` points to the&lt;br /&gt;
MediaGoblin repository.&lt;br /&gt;
&lt;br /&gt;
Slartibartfast does the following:&lt;br /&gt;
&lt;br /&gt;
1. Fetches the latest from the MediaGoblin repository::&lt;br /&gt;
&lt;br /&gt;
 git fetch --all -p&lt;br /&gt;
&lt;br /&gt;
This tells &amp;lt;tt&amp;gt;git fetch&amp;lt;/tt&amp;gt; to fetch all the recent data from all of&lt;br /&gt;
the remotes (&amp;lt;tt&amp;gt;--all&amp;lt;/tt&amp;gt;) and prune any branches that have been&lt;br /&gt;
deleted in the remotes (&amp;lt;tt&amp;gt;-p&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
2. Creates a branch from the tip of the MediaGoblin repository (the remote is named &amp;lt;tt&amp;gt;gmg&amp;lt;/tt&amp;gt;) master branch called &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 git checkout -b bug42_meaning_of_life gmg/master&lt;br /&gt;
&lt;br /&gt;
This creates a new branch (&amp;lt;tt&amp;gt;-b&amp;lt;/tt&amp;gt;) named &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; based&lt;br /&gt;
on the tip of the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of the remote named &amp;lt;tt&amp;gt;gmg&amp;lt;/tt&amp;gt; and checks&lt;br /&gt;
it out.&lt;br /&gt;
&lt;br /&gt;
3. Slartibartfast works hard on his changes in the &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; branch.  When done, he wants to notify us that he has made changes he wants us to see.&lt;br /&gt;
&lt;br /&gt;
4. Slartibartfast pushes his changes to his clone::&lt;br /&gt;
&lt;br /&gt;
 git push origin bug42_meaning_of_life --set-upstream&lt;br /&gt;
&lt;br /&gt;
This pushes the changes in the &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; branch to the remote named &amp;lt;tt&amp;gt;origin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
5. Slartibartfast adds a comment to issue 42 with the url for his repository and the name of the branch he put the code in.  He also explains what he did and why it addresses the issue.&lt;br /&gt;
&lt;br /&gt;
== Updating a contribution ==&lt;br /&gt;
&lt;br /&gt;
Slartibartfast brushes his hands off with the sense of accomplishment&lt;br /&gt;
that comes with the knowledge of a job well done.  He stands, wanders&lt;br /&gt;
over to get a cup of water, then realizes that he forgot to run the&lt;br /&gt;
unit tests!&lt;br /&gt;
&lt;br /&gt;
He runs the unit tests and discovers there&#039;s a bug in the code!&lt;br /&gt;
&lt;br /&gt;
Then he does this:&lt;br /&gt;
&lt;br /&gt;
1. He checks out the &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; branch::&lt;br /&gt;
&lt;br /&gt;
 git checkout bug42_meaning_of_life&lt;br /&gt;
&lt;br /&gt;
2. He fixes the bug and checks it into the &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; branch.&lt;br /&gt;
&lt;br /&gt;
3. He pushes his changes to his clone (the remote is named &amp;lt;tt&amp;gt;origin&amp;lt;/tt&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
 git push origin bug42_meaning_of_life&lt;br /&gt;
&lt;br /&gt;
4. He adds another comment to issue 42 explaining about the mistake and how he fixed it and that he&#039;s pushed the new change to the &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; branch of his publicly available clone.&lt;br /&gt;
&lt;br /&gt;
== What happens next ==&lt;br /&gt;
&lt;br /&gt;
Slartibartfast is once again happy with his work.  He finds issue 42&lt;br /&gt;
in the issue tracker and adds a comment saying he submitted a merge&lt;br /&gt;
request with his changes and explains what they are.&lt;br /&gt;
&lt;br /&gt;
Later, someone checks out his code and finds a problem with it.  He&lt;br /&gt;
adds a comment to the issue tracker specifying the problem and asks&lt;br /&gt;
Slartibartfast to fix it.  Slartibartfst goes through the above steps&lt;br /&gt;
again, fixes the issue, pushes it to his&lt;br /&gt;
&amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; branch and adds another comment to the&lt;br /&gt;
issue tracker about how he fixed it.&lt;br /&gt;
&lt;br /&gt;
Later, someone checks out his code and is happy with it.  Someone&lt;br /&gt;
pulls it into the master branch of the MediaGoblin repository and adds&lt;br /&gt;
another comment to the issue and probably closes the issue out.&lt;br /&gt;
&lt;br /&gt;
Slartibartfast is notified of this.  Slartibartfast does a:&lt;br /&gt;
&lt;br /&gt;
 git fetch --all&lt;br /&gt;
&lt;br /&gt;
The changes show up in the &amp;lt;tt&amp;gt;master&amp;lt;/tt&amp;gt; branch of the &amp;lt;tt&amp;gt;gmg&amp;lt;/tt&amp;gt; remote.&lt;br /&gt;
Slartibartfast now deletes his &amp;lt;tt&amp;gt;bug42_meaning_of_life&amp;lt;/tt&amp;gt; branch&lt;br /&gt;
because he doesn&#039;t need it anymore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to learn git =&lt;br /&gt;
&lt;br /&gt;
[[BeginnersCorner#Learning_git]]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=772</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=772"/>
		<updated>2012-06-02T18:24:25Z</updated>

		<summary type="html">&lt;p&gt;Willkg: updated after the june 2nd 2012 meeting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MediaGoblin Monthly Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When:&#039;&#039;&#039; 9:00 am Pacific Time first Saturday of the month. [http://www.timeanddate.com/worldclock/converter.html Convert time to your timezone].  Print current UTC time: &amp;lt;code&amp;gt;date -u +&amp;quot;It&#039;s %F %T UTC&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where:&#039;&#039;&#039; IRC #mediagoblin on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Always announced several days in advance on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list] as is date adjustments, agenda discussion and other meeting preparation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Purpose:&#039;&#039;&#039; The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
Typical Agenda topics:&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
&lt;br /&gt;
Meetings are logged. [http://mediagoblin.org/irclogs/ Logs for past meetings.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Meeting ==&lt;br /&gt;
&lt;br /&gt;
July 7th, 2012, 9:00 am Pacific Time (2012-07-07 16:00 UTC)&lt;br /&gt;
&lt;br /&gt;
No agenda, yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Meetings ==&lt;br /&gt;
&lt;br /&gt;
=== June 2nd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-06-02 IRC log]&lt;br /&gt;
&lt;br /&gt;
* docs changes&lt;br /&gt;
** Will split the docs/ guide into a Site Administrator&#039;s Guide and a Plugin Writer&#039;s Guide&lt;br /&gt;
** Has anyone looked at the Plugin Writer&#039;s Guide, yet?&lt;br /&gt;
** Will wants to add a &amp;quot;Contributor&#039;s Guide&amp;quot; to docs/ which he&#039;d update from the wiki before every release&lt;br /&gt;
* Is there a way to improve our unit tests and motivation to write them?&lt;br /&gt;
** Simulating a browser by the way of [http://phantomjs.org/ PhantomJS], [http://seleniumhq.org/ Selenium] instead of having code simulating other code against itself might be more natural to write and even more testing the actual application. I have a good feeling about this, please prove me wrong if I&#039;d be. --[[User:Joar|Joar]] 08:53, 28 May 2012 (EDT)&lt;br /&gt;
* Administrative panel/tools and user uploads panel&lt;br /&gt;
* Git and tickets &lt;br /&gt;
* Plugins&lt;br /&gt;
** What&#039;s the state of things?&lt;br /&gt;
** Documentation&lt;br /&gt;
** What plugins might we want to build for this upcoming release?&lt;br /&gt;
** What things do we currently have that we might want to pluginify?&lt;br /&gt;
* State of kuneco/federation mini-update (Chris)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== May 5th, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-05-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-release reflections&lt;br /&gt;
** Woohoo, release!&lt;br /&gt;
** How did this release process go?&lt;br /&gt;
*** We should talk about that conference.&lt;br /&gt;
** What&#039;s left to clean up?&lt;br /&gt;
*** Mongokit-&amp;gt;SQL &amp;quot;style&amp;quot; query conversion?&lt;br /&gt;
*** Other cruft code?&lt;br /&gt;
* What are our next goals?&lt;br /&gt;
** Plugins&lt;br /&gt;
** Federation&lt;br /&gt;
** Favoriting&lt;br /&gt;
*** Take that, Pinterest! ;)&lt;br /&gt;
** Galleries&lt;br /&gt;
** Theming&lt;br /&gt;
*** Using sass would be neat&lt;br /&gt;
** Access restrictions&lt;br /&gt;
*** User management, or having a &amp;quot;secret url&amp;quot; that is not in the photo index that you can share with friends and generate as needed for any media type&lt;br /&gt;
** What about traffic? Some of us will host GMG on limited plans.&lt;br /&gt;
** Some kind of coding guidelines? Do we have a philosophy like &amp;quot;Keep it Simple, Stupid&amp;quot;&lt;br /&gt;
*** This concerns things like: Should plugins land in core eventually, do we want to support ALL THE MEDIA TYPES, ...&lt;br /&gt;
** Podcasting support?&lt;br /&gt;
** Things that have been hanging???&lt;br /&gt;
** Bugtrackers and milestone?&lt;br /&gt;
** More??? We should organize things!&lt;br /&gt;
* jancborchardt and his team of UX wizard-students&lt;br /&gt;
* Website redesign&lt;br /&gt;
* OpenShift?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== April 7th, 2012, 4:00 am UTC ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-04-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-SQL stuff&lt;br /&gt;
* Pending 0.0.3 release!&lt;br /&gt;
* Are there stray patches/branches to be merged?&lt;br /&gt;
* Our glorious upcoming plugin future! (Update from Will)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== March 3rd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-03-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* [[GSOC 2012]]&lt;br /&gt;
* State of the SQL transition (preview: it&#039;s super close, but we need help!)&lt;br /&gt;
* Plugin discussion (Will can&#039;t make this, but we should talk about use cases)&lt;br /&gt;
* MediaGoblin at upcoming conferences&lt;br /&gt;
* PageKite accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2012-02 (held on 2012-02-04) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-02-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Code style guide?  See also: http://issues.mediagoblin.org/ticket/197&lt;br /&gt;
* Kuneco/federation&lt;br /&gt;
* API&lt;br /&gt;
* More testing discussion?&lt;br /&gt;
* Theming?&lt;br /&gt;
* Preliminary plugin discussion&lt;br /&gt;
* Status update from the &amp;quot;SQL Team&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some of the decisions:&lt;br /&gt;
&lt;br /&gt;
* file an issue about proper &amp;amp;lt;audio&amp;amp;gt; support.&lt;br /&gt;
* some TODOs recorded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-12 (held on 2011-12-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-12-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
* [[Feature Ideas]]: What should we do about the wiki page? Keep it and have it as a monthly topic for &amp;quot;what next&amp;quot;? Convert everything to long waiting bugs?&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
*: &#039;executive summary&#039; (well, you should read the long docs): &amp;quot;We could move to sql. It&#039;s probably replacing one type of pain by another type of pain, but those are somewhat comparable. Leaving the main question: Do we want to occupy our main devs for some long time with this task and loose momentum?&amp;quot;&lt;br /&gt;
* Schendje&#039;s [http://wiki.mediagoblin.org/Feature_Ideas/Activities activities proposal]&lt;br /&gt;
* &amp;quot;Coming up next&amp;quot; blogpost draft by Deb Nicholson&lt;br /&gt;
* Jef&#039;s requests:&lt;br /&gt;
** Ticket #466 &amp;quot;Use of &amp;quot;Submit&amp;quot; in site copy is sterile and not as friendly and welcoming as it could be&amp;quot;. I&#039;d really like to change this soon to something more suitable. How can we improve the wording here? Some alternatives have been mentioned in the bug report, but which one should we pick? Link: http://bugs.foocorp.net/issues/466&lt;br /&gt;
** The concept and naming of &amp;quot;favourites&amp;quot;. We&#039;ll (hopefully) be able to &amp;quot;favourite&amp;quot; media soon, which I *think* means that 1) it&#039;ll work like a &amp;quot;I like this&amp;quot; comment, a quick token of appreciation, 2) it&#039;ll be added to your list of favourites so you can save and promote it, and 3) we could maybe use the number of favourites as a ranking. What I&#039;d like to know is: is that the intended purpose? If so, should we name them favo(u)rites or something else? &amp;quot;Like&amp;quot;, &amp;quot;love&amp;quot;, &amp;quot;save&amp;quot;, &amp;quot;appreciate&amp;quot;, &amp;quot;heart&amp;quot;, &amp;quot;high five&amp;quot; and many more could all be contenders. And the name should be consistent with the action and purpose, of course. So I&#039;d like to clear up how and why we will use favourites and what we should call them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-11 (held on 2011-11-05) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-10 (held on 2011-10-01) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-09 (held on 2011-09-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-08 (held on 2011-08-06) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=769</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=769"/>
		<updated>2012-06-02T15:11:47Z</updated>

		<summary type="html">&lt;p&gt;Willkg: /* Next Meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MediaGoblin Monthly Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When:&#039;&#039;&#039; 9:00 am Pacific Time first Saturday of the month. [http://www.timeanddate.com/worldclock/converter.html Convert time to your timezone].  Print current UTC time: &amp;lt;code&amp;gt;date -u +&amp;quot;It&#039;s %F %T UTC&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where:&#039;&#039;&#039; IRC #mediagoblin on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Always announced several days in advance on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list] as is date adjustments, agenda discussion and other meeting preparation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Purpose:&#039;&#039;&#039; The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
Typical Agenda topics:&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
&lt;br /&gt;
Meetings are logged. [http://mediagoblin.org/irclogs/ Logs for past meetings.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Meeting ==&lt;br /&gt;
&lt;br /&gt;
June 2nd, 2012, 9:00 am Pacific Time (2012-06-02 16:00 UTC)&lt;br /&gt;
&lt;br /&gt;
* docs changes&lt;br /&gt;
** Will split the docs/ guide into a Site Administrator&#039;s Guide and a Plugin Writer&#039;s Guide&lt;br /&gt;
** Has anyone looked at the Plugin Writer&#039;s Guide, yet?&lt;br /&gt;
** Will wants to add a &amp;quot;Contributor&#039;s Guide&amp;quot; to docs/ which he&#039;d update from the wiki before every release&lt;br /&gt;
* Is there a way to improve our unit tests and motivation to write them?&lt;br /&gt;
** Simulating a browser by the way of [http://phantomjs.org/ PhantomJS], [http://seleniumhq.org/ Selenium] instead of having code simulating other code against itself might be more natural to write and even more testing the actual application. I have a good feeling about this, please prove me wrong if I&#039;d be. --[[User:Joar|Joar]] 08:53, 28 May 2012 (EDT)&lt;br /&gt;
* Administrative panel/tools and user uploads panel&lt;br /&gt;
* Git workflow discussion&lt;br /&gt;
* Plugins&lt;br /&gt;
* Kuneco update&lt;br /&gt;
&lt;br /&gt;
== Past Meetings ==&lt;br /&gt;
&lt;br /&gt;
=== May 5th, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-05-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-release reflections&lt;br /&gt;
** Woohoo, release!&lt;br /&gt;
** How did this release process go?&lt;br /&gt;
*** We should talk about that conference.&lt;br /&gt;
** What&#039;s left to clean up?&lt;br /&gt;
*** Mongokit-&amp;gt;SQL &amp;quot;style&amp;quot; query conversion?&lt;br /&gt;
*** Other cruft code?&lt;br /&gt;
* What are our next goals?&lt;br /&gt;
** Plugins&lt;br /&gt;
** Federation&lt;br /&gt;
** Favoriting&lt;br /&gt;
*** Take that, Pinterest! ;)&lt;br /&gt;
** Galleries&lt;br /&gt;
** Theming&lt;br /&gt;
*** Using sass would be neat&lt;br /&gt;
** Access restrictions&lt;br /&gt;
*** User management, or having a &amp;quot;secret url&amp;quot; that is not in the photo index that you can share with friends and generate as needed for any media type&lt;br /&gt;
** What about traffic? Some of us will host GMG on limited plans.&lt;br /&gt;
** Some kind of coding guidelines? Do we have a philosophy like &amp;quot;Keep it Simple, Stupid&amp;quot;&lt;br /&gt;
*** This concerns things like: Should plugins land in core eventually, do we want to support ALL THE MEDIA TYPES, ...&lt;br /&gt;
** Podcasting support?&lt;br /&gt;
** Things that have been hanging???&lt;br /&gt;
** Bugtrackers and milestone?&lt;br /&gt;
** More??? We should organize things!&lt;br /&gt;
* jancborchardt and his team of UX wizard-students&lt;br /&gt;
* Website redesign&lt;br /&gt;
* OpenShift?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== April 7th, 2012, 4:00 am UTC ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-04-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-SQL stuff&lt;br /&gt;
* Pending 0.0.3 release!&lt;br /&gt;
* Are there stray patches/branches to be merged?&lt;br /&gt;
* Our glorious upcoming plugin future! (Update from Will)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== March 3rd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-03-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* [[GSOC 2012]]&lt;br /&gt;
* State of the SQL transition (preview: it&#039;s super close, but we need help!)&lt;br /&gt;
* Plugin discussion (Will can&#039;t make this, but we should talk about use cases)&lt;br /&gt;
* MediaGoblin at upcoming conferences&lt;br /&gt;
* PageKite accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2012-02 (held on 2012-02-04) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-02-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Code style guide?  See also: http://issues.mediagoblin.org/ticket/197&lt;br /&gt;
* Kuneco/federation&lt;br /&gt;
* API&lt;br /&gt;
* More testing discussion?&lt;br /&gt;
* Theming?&lt;br /&gt;
* Preliminary plugin discussion&lt;br /&gt;
* Status update from the &amp;quot;SQL Team&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some of the decisions:&lt;br /&gt;
&lt;br /&gt;
* file an issue about proper &amp;amp;lt;audio&amp;amp;gt; support.&lt;br /&gt;
* some TODOs recorded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-12 (held on 2011-12-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-12-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
* [[Feature Ideas]]: What should we do about the wiki page? Keep it and have it as a monthly topic for &amp;quot;what next&amp;quot;? Convert everything to long waiting bugs?&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
*: &#039;executive summary&#039; (well, you should read the long docs): &amp;quot;We could move to sql. It&#039;s probably replacing one type of pain by another type of pain, but those are somewhat comparable. Leaving the main question: Do we want to occupy our main devs for some long time with this task and loose momentum?&amp;quot;&lt;br /&gt;
* Schendje&#039;s [http://wiki.mediagoblin.org/Feature_Ideas/Activities activities proposal]&lt;br /&gt;
* &amp;quot;Coming up next&amp;quot; blogpost draft by Deb Nicholson&lt;br /&gt;
* Jef&#039;s requests:&lt;br /&gt;
** Ticket #466 &amp;quot;Use of &amp;quot;Submit&amp;quot; in site copy is sterile and not as friendly and welcoming as it could be&amp;quot;. I&#039;d really like to change this soon to something more suitable. How can we improve the wording here? Some alternatives have been mentioned in the bug report, but which one should we pick? Link: http://bugs.foocorp.net/issues/466&lt;br /&gt;
** The concept and naming of &amp;quot;favourites&amp;quot;. We&#039;ll (hopefully) be able to &amp;quot;favourite&amp;quot; media soon, which I *think* means that 1) it&#039;ll work like a &amp;quot;I like this&amp;quot; comment, a quick token of appreciation, 2) it&#039;ll be added to your list of favourites so you can save and promote it, and 3) we could maybe use the number of favourites as a ranking. What I&#039;d like to know is: is that the intended purpose? If so, should we name them favo(u)rites or something else? &amp;quot;Like&amp;quot;, &amp;quot;love&amp;quot;, &amp;quot;save&amp;quot;, &amp;quot;appreciate&amp;quot;, &amp;quot;heart&amp;quot;, &amp;quot;high five&amp;quot; and many more could all be contenders. And the name should be consistent with the action and purpose, of course. So I&#039;d like to clear up how and why we will use favourites and what we should call them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-11 (held on 2011-11-05) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-10 (held on 2011-10-01) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-09 (held on 2011-09-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-08 (held on 2011-08-06) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=744</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=744"/>
		<updated>2012-05-21T12:49:33Z</updated>

		<summary type="html">&lt;p&gt;Willkg: add docs suggestions to next meeting agenda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MediaGoblin Monthly Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When:&#039;&#039;&#039; 9:00 am Pacific Time first Saturday of the month. [http://www.timeanddate.com/worldclock/converter.html Convert time to your timezone].  Print current UTC time: &amp;lt;code&amp;gt;date -u +&amp;quot;It&#039;s %F %T UTC&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where:&#039;&#039;&#039; IRC #mediagoblin on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Always announced several days in advance on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list] as is date adjustments, agenda discussion and other meeting preparation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Purpose:&#039;&#039;&#039; The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
Typical Agenda topics:&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
&lt;br /&gt;
Meetings are logged. [http://mediagoblin.org/irclogs/ Logs for past meetings.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Meeting ==&lt;br /&gt;
&lt;br /&gt;
June 2nd, 2012, 9:00 am Pacific Time (2012-06-02 16:00 UTC)&lt;br /&gt;
&lt;br /&gt;
* docs changes&lt;br /&gt;
** Will wants to add a &amp;quot;plugin writer&#039;s guide&amp;quot; to docs/&lt;br /&gt;
** Will wants to add a &amp;quot;contributor&#039;s guide&amp;quot; to docs/&lt;br /&gt;
** this is similar to how he structured richard&#039;s documentation: http://richard.readthedocs.org/en/latest/index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Meetings ==&lt;br /&gt;
&lt;br /&gt;
=== May 5th, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-05-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-release reflections&lt;br /&gt;
** Woohoo, release!&lt;br /&gt;
** How did this release process go?&lt;br /&gt;
*** We should talk about that conference.&lt;br /&gt;
** What&#039;s left to clean up?&lt;br /&gt;
*** Mongokit-&amp;gt;SQL &amp;quot;style&amp;quot; query conversion?&lt;br /&gt;
*** Other cruft code?&lt;br /&gt;
* What are our next goals?&lt;br /&gt;
** Plugins&lt;br /&gt;
** Federation&lt;br /&gt;
** Favoriting&lt;br /&gt;
*** Take that, Pinterest! ;)&lt;br /&gt;
** Galleries&lt;br /&gt;
** Theming&lt;br /&gt;
*** Using sass would be neat&lt;br /&gt;
** Access restrictions&lt;br /&gt;
*** User management, or having a &amp;quot;secret url&amp;quot; that is not in the photo index that you can share with friends and generate as needed for any media type&lt;br /&gt;
** What about traffic? Some of us will host GMG on limited plans.&lt;br /&gt;
** Some kind of coding guidelines? Do we have a philosophy like &amp;quot;Keep it Simple, Stupid&amp;quot;&lt;br /&gt;
*** This concerns things like: Should plugins land in core eventually, do we want to support ALL THE MEDIA TYPES, ...&lt;br /&gt;
** Podcasting support?&lt;br /&gt;
** Things that have been hanging???&lt;br /&gt;
** Bugtrackers and milestone?&lt;br /&gt;
** More??? We should organize things!&lt;br /&gt;
* jancborchardt and his team of UX wizard-students&lt;br /&gt;
* Website redesign&lt;br /&gt;
* OpenShift?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== April 7th, 2012, 4:00 am UTC ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-04-07.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Post-SQL stuff&lt;br /&gt;
* Pending 0.0.3 release!&lt;br /&gt;
* Are there stray patches/branches to be merged?&lt;br /&gt;
* Our glorious upcoming plugin future! (Update from Will)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== March 3rd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-03-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* [[GSOC 2012]]&lt;br /&gt;
* State of the SQL transition (preview: it&#039;s super close, but we need help!)&lt;br /&gt;
* Plugin discussion (Will can&#039;t make this, but we should talk about use cases)&lt;br /&gt;
* MediaGoblin at upcoming conferences&lt;br /&gt;
* PageKite accounts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2012-02 (held on 2012-02-04) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-02-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Code style guide?  See also: http://issues.mediagoblin.org/ticket/197&lt;br /&gt;
* Kuneco/federation&lt;br /&gt;
* API&lt;br /&gt;
* More testing discussion?&lt;br /&gt;
* Theming?&lt;br /&gt;
* Preliminary plugin discussion&lt;br /&gt;
* Status update from the &amp;quot;SQL Team&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some of the decisions:&lt;br /&gt;
&lt;br /&gt;
* file an issue about proper &amp;amp;lt;audio&amp;amp;gt; support.&lt;br /&gt;
* some TODOs recorded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-12 (held on 2011-12-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-12-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
* [[Feature Ideas]]: What should we do about the wiki page? Keep it and have it as a monthly topic for &amp;quot;what next&amp;quot;? Convert everything to long waiting bugs?&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
*: &#039;executive summary&#039; (well, you should read the long docs): &amp;quot;We could move to sql. It&#039;s probably replacing one type of pain by another type of pain, but those are somewhat comparable. Leaving the main question: Do we want to occupy our main devs for some long time with this task and loose momentum?&amp;quot;&lt;br /&gt;
* Schendje&#039;s [http://wiki.mediagoblin.org/Feature_Ideas/Activities activities proposal]&lt;br /&gt;
* &amp;quot;Coming up next&amp;quot; blogpost draft by Deb Nicholson&lt;br /&gt;
* Jef&#039;s requests:&lt;br /&gt;
** Ticket #466 &amp;quot;Use of &amp;quot;Submit&amp;quot; in site copy is sterile and not as friendly and welcoming as it could be&amp;quot;. I&#039;d really like to change this soon to something more suitable. How can we improve the wording here? Some alternatives have been mentioned in the bug report, but which one should we pick? Link: http://bugs.foocorp.net/issues/466&lt;br /&gt;
** The concept and naming of &amp;quot;favourites&amp;quot;. We&#039;ll (hopefully) be able to &amp;quot;favourite&amp;quot; media soon, which I *think* means that 1) it&#039;ll work like a &amp;quot;I like this&amp;quot; comment, a quick token of appreciation, 2) it&#039;ll be added to your list of favourites so you can save and promote it, and 3) we could maybe use the number of favourites as a ranking. What I&#039;d like to know is: is that the intended purpose? If so, should we name them favo(u)rites or something else? &amp;quot;Like&amp;quot;, &amp;quot;love&amp;quot;, &amp;quot;save&amp;quot;, &amp;quot;appreciate&amp;quot;, &amp;quot;heart&amp;quot;, &amp;quot;high five&amp;quot; and many more could all be contenders. And the name should be consistent with the action and purpose, of course. So I&#039;d like to clear up how and why we will use favourites and what we should call them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-11 (held on 2011-11-05) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-10 (held on 2011-10-01) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-09 (held on 2011-09-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-08 (held on 2011-08-06) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=ArticlesAboutDeadServices&amp;diff=735</id>
		<title>ArticlesAboutDeadServices</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=ArticlesAboutDeadServices&amp;diff=735"/>
		<updated>2012-05-15T18:01:32Z</updated>

		<summary type="html">&lt;p&gt;Willkg: Created page with &amp;quot;This is a list of articles found on the Internet about services ending.   May 15th, 2012  http://blog.lightbox.com/post/23107101360/lightbox-is-joining-facebook  : Covers Lightbo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of articles found on the Internet about services ending.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
May 15th, 2012&lt;br /&gt;
&lt;br /&gt;
http://blog.lightbox.com/post/23107101360/lightbox-is-joining-facebook&lt;br /&gt;
&lt;br /&gt;
: Covers Lightbox (which was sort of like Instagram) ending their service because the developers are joining Facebook.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://gizmodo.com/5910223/how-yahoo-killed-flickr-and-lost-the-internet&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User:Willkg&amp;diff=682</id>
		<title>User:Willkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User:Willkg&amp;diff=682"/>
		<updated>2012-04-22T17:19:47Z</updated>

		<summary type="html">&lt;p&gt;Willkg: Created page with &amp;quot;= Me =  I&amp;#039;m Will Kahn-Greene.  {| |- | &amp;#039;&amp;#039;&amp;#039;irc&amp;#039;&amp;#039;&amp;#039; || willg on freenode |- | &amp;#039;&amp;#039;&amp;#039;blog&amp;#039;&amp;#039;&amp;#039; || http://bluesock.org/~willg/ |- | &amp;#039;&amp;#039;&amp;#039;mediagoblin account&amp;#039;&amp;#039;&amp;#039; || http://mediagoblin.com/u/wi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Me =&lt;br /&gt;
&lt;br /&gt;
I&#039;m Will Kahn-Greene.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;irc&#039;&#039;&#039; || willg on freenode&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;blog&#039;&#039;&#039; || http://bluesock.org/~willg/&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;mediagoblin account&#039;&#039;&#039; || http://mediagoblin.com/u/willkg/&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= My involvement =&lt;br /&gt;
&lt;br /&gt;
I&#039;m currently involved with the following in order of activity level:&lt;br /&gt;
&lt;br /&gt;
* release manager&lt;br /&gt;
* infrastructure admin&lt;br /&gt;
** mediagoblin.org maintenance&lt;br /&gt;
** wiki.mediagoblin.org maintenance (MediaWiki)&lt;br /&gt;
** issues.mediagoblin.org maintenance (Trac)&lt;br /&gt;
** gmgbot irc bot maintenance (supybot)&lt;br /&gt;
* documentation writer/manager&lt;br /&gt;
* developer (I tend to do coding in spurts)&lt;br /&gt;
&lt;br /&gt;
I share most of these activities with other people.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Past activities =&lt;br /&gt;
&lt;br /&gt;
* I migrated us from Redmine to Trac&lt;br /&gt;
* I set up most of the project infrastructure&lt;br /&gt;
* I set up the original documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Caveat =&lt;br /&gt;
&lt;br /&gt;
I&#039;m involved in too many projects. Because of that, I work on MediaGoblin in spurts/sprints. I&#039;m usually on irc, though.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=680</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=680"/>
		<updated>2012-04-21T01:34:26Z</updated>

		<summary type="html">&lt;p&gt;Willkg: tweaking vertical white space&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at [http://docs.mediagoblin.org/codebase.html codebase chapter] where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.  If you&#039;re planning on contributing in python, you should be aware&lt;br /&gt;
of [http://www.python.org/dev/peps/pep-0008/ PEP-8], the official Python style guide,&lt;br /&gt;
which we follow.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use an&lt;br /&gt;
in-package checkout of virtualenv.  This isn&#039;t the convenional way to&lt;br /&gt;
install virtualenv (normally you don&#039;t install virtualenv inside the&lt;br /&gt;
package itself) but we&#039;ve found that it&#039;s significantly easier for&lt;br /&gt;
newcomers who aren&#039;t already familiar with virtualenv.  If you *are*&lt;br /&gt;
already familiar with virtualenv, feel free to just install&lt;br /&gt;
mediagoblin in your own virtualenv setup... the necessary adjustments&lt;br /&gt;
should be obvious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* SQLAlchemy         - http://www.sqlalchemy.org/&lt;br /&gt;
* Python Imaging Library (PIL) - http://www.pythonware.com/products/pil/&lt;br /&gt;
* virtualenv         - http://www.virtualenv.org/&lt;br /&gt;
* Python GStreamer Bindings - http://gstreamer.freedesktop.org/modules/gst-python.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GNU/Linux ===&lt;br /&gt;
&lt;br /&gt;
==== Debian and derivatives ====&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Debian, Mint, or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo apt-get install git-core python python-dev python-lxml python-imaging python-virtualenv python-gst0.10 libjpeg8-dev}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Fedora / RedHat(?) ====&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|yum install python-paste-deploy python-paste-script git-core python python-devel python-lxml python-imaging python-virtualenv gstreamer-python}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
On Mac OS X Lion:&lt;br /&gt;
&lt;br /&gt;
Download the Newest Python.&lt;br /&gt;
&lt;br /&gt;
Git is already installed.&lt;br /&gt;
&lt;br /&gt;
Python-lxml: http://muffinresearch.co.uk/archives/2009/03/05/install-lxml-on-osx/ with sudo&lt;br /&gt;
&lt;br /&gt;
Python Imaging Library (PIL): http://code.google.com/appengine/docs/python/images/installingPIL.html#mac&lt;br /&gt;
&lt;br /&gt;
Libjpeg &amp;amp; Libpng: http://ethan.tira-thompson.org/Mac_OS_X_Ports.html Combo Installer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions, Windows, or Mac OS X to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with virtualenv ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
* Clone the repository: {{Cmd|git clone &amp;lt;nowiki&amp;gt;git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* Change directories to your new checkout: {{Cmd|cd mediagoblin}}&lt;br /&gt;
* Set up the in-package virtualenv:&lt;br /&gt;
  (virtualenv --system-site-packages . || virtualenv .) &amp;amp;&amp;amp; ./bin/python setup.py develop&lt;br /&gt;
* Init the database:&lt;br /&gt;
  {{Cmd|./bin/gmg dbupdate}}&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
(If you have troubles in the remaining steps, consider try installing&lt;br /&gt;
virtualenv with one of the flags --setuptools, --distribute or possibly --no-site-packages.  Additionally, if your system has python3.X as the default, you might need to do virtualenv --python=python2.7 or --python=python2.6)&lt;br /&gt;
&lt;br /&gt;
If you have problems, please [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Updating an existing environment ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.&lt;br /&gt;
&lt;br /&gt;
To do that, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/python setup.py develop --upgrade &amp;amp;&amp;amp; ./bin/gmg dbupdate}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git pull -u}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./lazyserver.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin, listening on 127.0.0.1:6543.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
By default, the instance is not sending out confirmation mails. Instead they are redirected to the standard output (the console) of lazyserver.sh.&lt;br /&gt;
&lt;br /&gt;
You can change this behavior setting &amp;lt;code&amp;gt;email_debug_mode&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; in mediagoblin.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/paster serve paste.ini --reload}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./runtests.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/gmg shell}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Problems with PIL ===&lt;br /&gt;
&lt;br /&gt;
Some users have claimed they&#039;ve had trouble with PIL working nicely on their system.  You could try installing Pillow:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/pip install pillow}}&lt;br /&gt;
&lt;br /&gt;
... note that we don&#039;t &amp;quot;officially&amp;quot; support pillow at this time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|gmg wipealldata}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has SQLAlchemy ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using SQLAlchemy, which is semi-similar to the Django ORM, but&lt;br /&gt;
not really because you can get a lot more fine-grained.  The&lt;br /&gt;
[http://docs.sqlalchemy.org/en/latest/orm/tutorial.html SQLAlchemy ORM tutorial] is a great place to start.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
Now you should visit our latest list of [http://issues.mediagoblin.org/query?status=!closed&amp;amp;keywords=~bitesized bite-sized issues] because squishing bugs is messy fun. If you&#039;re interested in other things to work on, or need help getting started on a bug, let us know on [http://mediagoblin.org/join/ the mailing list] or on the [http://mediagoblin.org/join/ IRC channel].&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=679</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=679"/>
		<updated>2012-04-21T01:24:43Z</updated>

		<summary type="html">&lt;p&gt;Willkg: normalizing vertical whitespace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Want to Join the MediaGoblin Community? =&lt;br /&gt;
&lt;br /&gt;
We’re really glad that you want to join the MediaGoblin community!&lt;br /&gt;
&lt;br /&gt;
There are a variety of ways to help and support MediaGoblin and to join the team.  If you want to code, great, if not, even better!  MediaGoblin interested contributors in many different roles: users, system administrators, technical writers, testers, evangelists, UI/UX and graphics designers, cheerleaders, and dreamers.&lt;br /&gt;
&lt;br /&gt;
This wiki covers a variety of ways that you can get involved with MediaGoblin as well as instructions on how to get started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hang out with the MediaGoblin folk ==&lt;br /&gt;
&lt;br /&gt;
MediaGoblin has a mailing list and an IRC channel where we hang out.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
Please drop by and say “Hi!”  And, if you’re looking for something to do, just ask---there’s always work to be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Take Part in the Monthly Meetings ==&lt;br /&gt;
&lt;br /&gt;
Each month is a [[Meeting]]. You can take part and help decide on the future of MediaGoblin. Or just be around and see what&#039;s happening live!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Bugs / Triage Bugs ==&lt;br /&gt;
&lt;br /&gt;
Issue reports are critical for all projects.  Identified bugs give developers a basis for beginning work, and providing an idea of what features and issues are most important to users and the overall usability of the software.  If you identify errors, flaws, unexpected behaviors, or deficits that impede use, file a bug.&lt;br /&gt;
&lt;br /&gt;
* [[File Bugs]] -- notes on filing new bugs/issues/feature requests&lt;br /&gt;
* [[Feature Ideas]] -- notes on possible features&lt;br /&gt;
* [[Triage Bugs]] -- notes on triaging&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Code / Fix Code ==&lt;br /&gt;
&lt;br /&gt;
If you are a coder and you would like to write code, the repository is hosted on gitorious. Clone or fork the repository and start poking around. Become familiar with this manual for an overview of how the software works and is used. Consider the contributor wiki for more information about the project, our preferred methods, and guides for developing MediaGoblin. We even have tips on becoming a coder and we’re willing to help!&lt;br /&gt;
&lt;br /&gt;
* [[HackingHowto|Hacking]] - notes on making and sending in code contributions&lt;br /&gt;
** [[BeginnersCorner|Beginner&#039;s Corner]] - resources for those who are new to Python, MongoDB, or Git.&lt;br /&gt;
** &#039;&#039;Started from an older version of the Hacking Howto?  We switched from buildout-&amp;gt;virtualenv, so look at [[Moving from buildout to virtualenv]] for information on how to move over.&#039;&#039;&lt;br /&gt;
* [[Git workflow]] - How to go about submitting patches via git.&lt;br /&gt;
* [[Templating]] - How our templating structure is set up&lt;br /&gt;
* [[Code overview]] - Overview of the structure of the codebase&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Send Encouragement / Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, a nice word, simple encouragement, and interest in the work we’re doing is enough to inspire a tizzy of productive work.  Just a bit more interest and encouragement can even make the difference between a complete feature and limited functionality; between a completed milestone and lost momentum.&lt;br /&gt;
&lt;br /&gt;
Similarly, MediaGoblin, and the movement for free network services, is always in need of encouragement.  Use free network services, understand the principals behind the movement, be able to articulate the benefits of free network services and the problems with psudo-free applications that don’t respect the users’ freedom.&lt;br /&gt;
&lt;br /&gt;
Write a blog post, post a status update, drop by the listserv or join #mediagoblin on freenode.net and let us know.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Documentation / Edit Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation quick start]] - How to contribute to the documentation effort.&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual (forthcoming.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
Do you have access to the web? Do you like sharing your opinions? If so, we need your help to test MediaGoblin! Testers play around with the current test instance, note what operating system and browser they use (notes on multiple set-ups are also helpful) and take some notes. That&#039;s it! It&#039;s a very important task that doesn&#039;t require any special knowledge and you&#039;re done in under an hour. Ready to help?  &lt;br /&gt;
&lt;br /&gt;
* [[User Experience]] - user experience testing.  Includes link to an instance you can try!&lt;br /&gt;
* [[UnitTests|Unit Tests]] - all about the unit tests&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Translate MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
If you know English and another language and feel comfortable translating elements of the interface or even the documentation, we’d love to have help translating the software and resources.&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Become a User ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
We’re building MediaGoblin for us and for you but really you’re one of us and I am you and we are we and MediaGoblin is the walrus.&lt;br /&gt;
&lt;br /&gt;
We&#039;re planning to launch our own public instance of MediaGoblin in the near future--probably in the September/October 2011 time frame.  When we do, sign up for an account, use the service and relish in the thought that this service comes with a heaping side of Freedom and you can salt and pepper it to your liking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Help Others ==&lt;br /&gt;
&lt;br /&gt;
Have you spent time with MediaGoblin?  If so, your experience and wisdom are invaluable and you’re the best person we can think of to help other users with their questions.&lt;br /&gt;
&lt;br /&gt;
Hang out on the IRC channel and help answer new peoples&#039; questions.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Run your own MediaGoblin Instance ==&lt;br /&gt;
&lt;br /&gt;
Are there things about our instance you want to change?  Are there things about other instances you wish were different?  Want to test upcoming changes?  Want to create patches to implement things you need?  That’s great—you can run your own instance!&lt;br /&gt;
&lt;br /&gt;
* [[Configure_MediaGoblin|Configuration]] - Learn about MediaGoblin configuration files and file options.&lt;br /&gt;
* [[Deployment]] - General deployment advice&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* [[Virtual Machine Hosting]] - Deploy your own publicly available MediaGoblin server using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 Amazon&#039;s free EC2 tier].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a Theme ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
MedaGoblin development is premised on the idea that the entire interface for the platform be completely theme-able.  If you have a design or theming background, consider developing themes for MediaGoblin.  New themes help test the theming system, provide attractive and appealing interfaces for prospective users.  If you want to start a new theme but don’t know where to start, touch base with the development community on the list or in the IRC channel for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical project documentation =&lt;br /&gt;
&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[Storage]] - How MediaGoblin&#039;s internal storage system works.&lt;br /&gt;
* [[Processing]] - What happens after you submit your image/video/etc?  Processing!  More about that.&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;br /&gt;
* [[Multiple media support]] - Design plan for multiple media support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inner workings of the secret sanctum =&lt;br /&gt;
&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess|Release Process]] - covers the release process&lt;br /&gt;
* [[Update the website]] - Learn how to update mediagoblin.org!&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=574</id>
		<title>PluginSystemDesignDocument</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=574"/>
		<updated>2012-02-26T13:53:11Z</updated>

		<summary type="html">&lt;p&gt;Willkg: add tests section; fixed commands formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status ==&lt;br /&gt;
&lt;br /&gt;
February 25th, 2012: Initial writing. Needs work.&lt;br /&gt;
&lt;br /&gt;
Discussion on this document happens on IRC in #mediagoblin, on the dev mailing list and on the discussion page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
This is a set of use cases we&#039;re thinking about. It is not exhaustive.&lt;br /&gt;
&lt;br /&gt;
* site flat pages (about this site, donations page, how to contribute, how to get an account, terms of service, ...)&lt;br /&gt;
* add restrictions to uploaded content&lt;br /&gt;
** restrict by file size&lt;br /&gt;
** restrict by type&lt;br /&gt;
** restrict by dimensions (height x width)&lt;br /&gt;
* quotas (user can only have x images on site, user can only use total of 50mb, ...)&lt;br /&gt;
* comment spam detection&lt;br /&gt;
* authentication&lt;br /&gt;
* additional admin web pages&lt;br /&gt;
* extending existing media types (Add new formats for video encoding or flash display, etc?)&lt;br /&gt;
* things MediaGoblin already kind of does&lt;br /&gt;
** Storage system extensibility&lt;br /&gt;
** Media type extensibility&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What makes a good plugin system? ==&lt;br /&gt;
&lt;br /&gt;
# plugin management system - The following should be optimized for ease-of-use:&lt;br /&gt;
#* installing plugins&lt;br /&gt;
#* configuring plugins&lt;br /&gt;
#* removing plugins&lt;br /&gt;
#* getting status on plugins&lt;br /&gt;
#* getting errors from plugins&lt;br /&gt;
# plugin API - In order to augment MediaGoblin&#039;s behavior, the plugin needs to be able to assert itself into MediaGoblin&#039;s various pipelines. This can be done with hook, signals, registration, ...&lt;br /&gt;
# documentation - how to build, test, install, uninstall, and share plugins&lt;br /&gt;
# a place where site admin can find and download plugins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High-level plan ==&lt;br /&gt;
&lt;br /&gt;
I think the plan should be something along these lines:&lt;br /&gt;
&lt;br /&gt;
# Install and uninstall the plugin with pip. Then site admins add the plugin to the INSTALLED_APPS configuration. This way it&#039;s easy to put the plugin in and out, install, uninstall, etc. Plugins will have additional configuration/setup steps that will be plugin specific such as running {{Cmd|./bin/gmg updatedb}} for setting up db tables.&lt;br /&gt;
# Expose our testing framework. Plugins should be testable and it&#039;d be nice to test everything in a GMG install with a single {{Cmd|./runtests.sh}}.&lt;br /&gt;
# Expose routing to applications. Maybe even make routing part of the configuration and allow the site admin to specify &amp;quot;mount points&amp;quot; for the various applications. MediaGoblin could either query the application for routes or just pass anything pointed towards a specific mount point to the application and let it deal with routing. I think I prefer the former.&lt;br /&gt;
# Database storage. Migrations, adding new tables.&lt;br /&gt;
# Templates. Adding new templates, template blocks, ...&lt;br /&gt;
# Version checking: plugins should be able to check the gmg version and throw an exception if the plugin doesn&#039;t work with that gmg version.&lt;br /&gt;
# Serve static files. Additional CSS, JS, images, ... Symlinks? Static assets directory that gets copied over? Should be an extensions_static directory or etc of both url and filesystem paths, some command like {{Cmd|./bin/gmg copy_static_assets}} or something less crappy that gets filled based on config file settings&lt;br /&gt;
# Need to be able to do three different things:&lt;br /&gt;
#* notification: plugin gets notified of some happenstance (maybe like Django signals). Examples: post_save, post_update, ...&lt;br /&gt;
#* transform: plugin gets to modify some thing as it&#039;s getting processed. Examples: context processors, adding additional template tags, ...&lt;br /&gt;
#* handler: plugin handles some thing and if the plugin handles it, then processing ends. Examples: authentication, ...&lt;br /&gt;
# Implement a MediaGoblin plugin API. Expose things that need exposing, implement stuff in the core, ...&lt;br /&gt;
# We can do a PyPI-like thing for plugins. Needs to allow for comments, ratings, blah blah blah.&lt;br /&gt;
# Build a plugin writers documentation guide.&lt;br /&gt;
# GMG would/could come with a set of core plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install/uninstall ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Database storage ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Version checking ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Notification, transform and handler ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
== Execution on the plan ==&lt;br /&gt;
&lt;br /&gt;
# Flesh out the plan into a better design document and get a consensus on it.&lt;br /&gt;
# Flesh out the design details.&lt;br /&gt;
# Implement initial bits and write documentation.&lt;br /&gt;
# Write some plugins.&lt;br /&gt;
# Iterate going forward: Take stock of where we&#039;re at and what we&#039;re missing, implement a new piece, ...&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=571</id>
		<title>PluginSystemDesignDocument</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=PluginSystemDesignDocument&amp;diff=571"/>
		<updated>2012-02-25T18:24:18Z</updated>

		<summary type="html">&lt;p&gt;Willkg: the beginning of a plugins system design document&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status ==&lt;br /&gt;
&lt;br /&gt;
February 25th, 2012: Initial writing. Needs work.&lt;br /&gt;
&lt;br /&gt;
Discussion on this document happens on IRC in #mediagoblin, on the dev mailing list and on the discussion page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
This is a set of use cases we&#039;re thinking about. It is not exhaustive.&lt;br /&gt;
&lt;br /&gt;
* site flat pages (about this site, donations page, how to contribute, how to get an account, terms of service, ...)&lt;br /&gt;
* add restrictions to uploaded content&lt;br /&gt;
** restrict by file size&lt;br /&gt;
** restrict by type&lt;br /&gt;
** restrict by dimensions (height x width)&lt;br /&gt;
* quotas (user can only have x images on site, user can only use total of 50mb, ...)&lt;br /&gt;
* comment spam detection&lt;br /&gt;
* authentication&lt;br /&gt;
* additional admin web pages&lt;br /&gt;
* extending existing media types (Add new formats for video encoding or flash display, etc?)&lt;br /&gt;
* things MediaGoblin already kind of does&lt;br /&gt;
** Storage system extensibility&lt;br /&gt;
** Media type extensibility&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What makes a good plugin system? ==&lt;br /&gt;
&lt;br /&gt;
# plugin management system - The following should be optimized for ease-of-use:&lt;br /&gt;
#* installing plugins&lt;br /&gt;
#* configuring plugins&lt;br /&gt;
#* removing plugins&lt;br /&gt;
#* getting status on plugins&lt;br /&gt;
#* getting errors from plugins&lt;br /&gt;
# plugin API - In order to augment MediaGoblin&#039;s behavior, the plugin needs to be able to assert itself into MediaGoblin&#039;s various pipelines. This can be done with hook, signals, registration, ...&lt;br /&gt;
# documentation - how to build, test, install, uninstall, and share plugins&lt;br /&gt;
# a place where site admin can find and download plugins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== High-level plan ==&lt;br /&gt;
&lt;br /&gt;
I think the plan should be something along these lines:&lt;br /&gt;
&lt;br /&gt;
# Install and uninstall the plugin with pip. Then site admins add the plugin to the INSTALLED_APPS configuration. This way it&#039;s easy to put the plugin in and out, install, uninstall, etc. Plugins will have additional configuration/setup steps that will be plugin specific such as running ``./bin/gmg updatedb`` for setting up db tables.&lt;br /&gt;
# Expose routing to applications. Maybe even make routing part of the configuration and allow the site admin to specify &amp;quot;mount points&amp;quot; for the various applications. MediaGoblin could either query the application for routes or just pass anything pointed towards a specific mount point to the application and let it deal with routing. I think I prefer the former.&lt;br /&gt;
# Database storage. Migrations, adding new tables.&lt;br /&gt;
# Templates. Adding new templates, template blocks, ...&lt;br /&gt;
# Version checking: plugins should be able to check the gmg version and throw an exception if the plugin doesn&#039;t work with that gmg version.&lt;br /&gt;
# Serve static files. Additional CSS, JS, images, ... Symlinks? Static assets directory that gets copied over? Should be an extensions_static directory or etc of both url and filesystem paths, some command like ./bin/gmg copy_static_assets or something less crappy that gets filled based on config file settings&lt;br /&gt;
# Need to be able to do three different things:&lt;br /&gt;
#* notification: plugin gets notified of some happenstance (maybe like Django signals). Examples: post_save, post_update, ...&lt;br /&gt;
#* transform: plugin gets to modify some thing as it&#039;s getting processed. Examples: context processors, adding additional template tags, ...&lt;br /&gt;
#* handler: plugin handles some thing and if the plugin handles it, then processing ends. Examples: authentication, ...&lt;br /&gt;
# Implement a MediaGoblin plugin API. Expose things that need exposing, implement stuff in the core, ...&lt;br /&gt;
# We can do a PyPI-like thing for plugins. Needs to allow for comments, ratings, blah blah blah.&lt;br /&gt;
# Build a plugin writers documentation guide.&lt;br /&gt;
# GMG would/could come with a set of core plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Install/uninstall ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Routing ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Database storage ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Templates ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Version checking ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
=== Notification, transform and handler ===&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
== Execution on the plan ==&lt;br /&gt;
&lt;br /&gt;
# Flesh out the plan into a better design document and get a consensus on it.&lt;br /&gt;
# Flesh out the design details.&lt;br /&gt;
# Implement initial bits and write documentation.&lt;br /&gt;
# Write some plugins.&lt;br /&gt;
# Iterate going forward: Take stock of where we&#039;re at and what we&#039;re missing, implement a new piece, ...&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=540</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=540"/>
		<updated>2012-02-05T23:57:17Z</updated>

		<summary type="html">&lt;p&gt;Willkg: update meeting page, add notes, clean up summary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MediaGoblin Monthly Meeting ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When:&#039;&#039;&#039; 9:00 am Pacific Time first Saturday of the month. [http://www.timeanddate.com/worldclock/converter.html Convert time to your timezone]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Where:&#039;&#039;&#039; IRC #mediagoblin on irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Always announced several days in advance on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list] as is date adjustments, agenda discussion and other meeting preparation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Purpose:&#039;&#039;&#039; The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
Typical Agenda topics:&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
&lt;br /&gt;
Meetings are logged. [http://mediagoblin.org/irclogs/ Logs for past meetings.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Next Meeting ==&lt;br /&gt;
&lt;br /&gt;
=== March 3rd, 2012, 9:00 am Pacific Time ===&lt;br /&gt;
&lt;br /&gt;
No agenda, yet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Past Meetings ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2012-02 (held on 2012-02-04) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2012-02-04.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* Code style guide?  See also: http://issues.mediagoblin.org/ticket/197&lt;br /&gt;
* Kuneco/federation&lt;br /&gt;
* API&lt;br /&gt;
* More testing discussion?&lt;br /&gt;
* Theming?&lt;br /&gt;
* Preliminary plugin discussion&lt;br /&gt;
* Status update from the &amp;quot;SQL Team&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Some of the decisions:&lt;br /&gt;
&lt;br /&gt;
* file an issue about proper &amp;amp;lt;audio&amp;amp;gt; support.&lt;br /&gt;
* some TODOs recorded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-12 (held on 2011-12-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-12-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
* [[Feature Ideas]]: What should we do about the wiki page? Keep it and have it as a monthly topic for &amp;quot;what next&amp;quot;? Convert everything to long waiting bugs?&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
*: &#039;executive summary&#039; (well, you should read the long docs): &amp;quot;We could move to sql. It&#039;s probably replacing one type of pain by another type of pain, but those are somewhat comparable. Leaving the main question: Do we want to occupy our main devs for some long time with this task and loose momentum?&amp;quot;&lt;br /&gt;
* Schendje&#039;s [http://wiki.mediagoblin.org/Feature_Ideas/Activities activities proposal]&lt;br /&gt;
* &amp;quot;Coming up next&amp;quot; blogpost draft by Deb Nicholson&lt;br /&gt;
* Jef&#039;s requests:&lt;br /&gt;
** Ticket #466 &amp;quot;Use of &amp;quot;Submit&amp;quot; in site copy is sterile and not as friendly and welcoming as it could be&amp;quot;. I&#039;d really like to change this soon to something more suitable. How can we improve the wording here? Some alternatives have been mentioned in the bug report, but which one should we pick? Link: http://bugs.foocorp.net/issues/466&lt;br /&gt;
** The concept and naming of &amp;quot;favourites&amp;quot;. We&#039;ll (hopefully) be able to &amp;quot;favourite&amp;quot; media soon, which I *think* means that 1) it&#039;ll work like a &amp;quot;I like this&amp;quot; comment, a quick token of appreciation, 2) it&#039;ll be added to your list of favourites so you can save and promote it, and 3) we could maybe use the number of favourites as a ranking. What I&#039;d like to know is: is that the intended purpose? If so, should we name them favo(u)rites or something else? &amp;quot;Like&amp;quot;, &amp;quot;love&amp;quot;, &amp;quot;save&amp;quot;, &amp;quot;appreciate&amp;quot;, &amp;quot;heart&amp;quot;, &amp;quot;high five&amp;quot; and many more could all be contenders. And the name should be consistent with the action and purpose, of course. So I&#039;d like to clear up how and why we will use favourites and what we should call them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-11 (held on 2011-11-05) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-10 (held on 2011-10-01) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-09 (held on 2011-09-03) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 2011-08 (held on 2011-08-06) ===&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=File_Bugs&amp;diff=524</id>
		<title>File Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=File_Bugs&amp;diff=524"/>
		<updated>2012-01-31T02:51:04Z</updated>

		<summary type="html">&lt;p&gt;Willkg: updating issue tracker url&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MediaGoblin uses a bug tracker called Trac.&lt;br /&gt;
&lt;br /&gt;
Our instance is located at http://issues.mediagoblin.org&lt;br /&gt;
&lt;br /&gt;
The most useful bug reports have the following components:&lt;br /&gt;
&lt;br /&gt;
* A short summary that’s 60 characters or less.&lt;br /&gt;
* A description that describes the issue (bug, feature request, ...) as well as the context. Consider:&lt;br /&gt;
** If you think you’ve found a bug, can you reproduce it in a controlled environment? Is the issue specific to a browser, computer, image, media type, or other dimension? All data helps.&lt;br /&gt;
** If you’re intending to submit a feature request, please take a look at [[Feature Ideas]] first. After that: Are there related links on the Internet for more information? Would you be willing to help implement or test the feature?&lt;br /&gt;
&lt;br /&gt;
That’s it!&lt;br /&gt;
&lt;br /&gt;
The better the issue report, the easier it is to address the bug, and the more likely that the developers will be able to resolve the issue. If someone has questions about the bug report, they may reach out to the reporter directly.&lt;br /&gt;
&lt;br /&gt;
If you get a response after a couple of weeks, find someone on IRC.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=523</id>
		<title>Redmine migration</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=523"/>
		<updated>2012-01-31T02:50:00Z</updated>

		<summary type="html">&lt;p&gt;Willkg: update redmine migration -- migration complete!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Redmine Migration =&lt;br /&gt;
&lt;br /&gt;
This page covers the impending migration of all our issue data from the Redmine instance at Foocorp to a Trac instance we manage.&lt;br /&gt;
&lt;br /&gt;
This page is a work in progress. I started it so that it can be a one-stop-place for FAQ, schedule, and outstanding issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
January 30th, 2012: The migration is complete! Our new ticket tracker is at http://issues.mediagoblin.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Outstanding issues =&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Solved issues =&lt;br /&gt;
&lt;br /&gt;
== everything is comment 1 ==&lt;br /&gt;
&lt;br /&gt;
Seems like all the comments are &amp;quot;comment 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/162   &lt;br /&gt;
* http://issues.mediagoblin.org/ticket/138&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/96&lt;br /&gt;
&lt;br /&gt;
Could be a problem with the code that&#039;s inserting into ticket_change.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; Turns out in the ticket_change table, the oldvalue column for comments is the comment id number. Fixing the migration code fixed this issue, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== named links in comments are broken ==&lt;br /&gt;
&lt;br /&gt;
Examples of broken named links:&lt;br /&gt;
&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/375#comment:1&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/162   &lt;br /&gt;
* http://issues.mediagoblin.org/ticket/138&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/96&lt;br /&gt;
&lt;br /&gt;
Looks like there&#039;s an extra space in the link. If the data from redminelib is bad, then that&#039;d cause the problem.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; I had to shut off wordwrapping in html2text. Doing that prevents it from putting incorrect \n everywhere--sometimes in the middle of links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== cc vs watching ==&lt;br /&gt;
&lt;br /&gt;
Trac has cc section in tickets, but it takes email addresses. Redmine issues have user accounts. Thus in order to connect the two, I need people to create accounts and such.&lt;br /&gt;
&lt;br /&gt;
However, this is a huge pain in the ass to populate after the fact. Is it ok if people re-cc: themselves to bugs they&#039;re interested in? If not, I&#039;ll spend the time to back-populate the data after the fact, but it&#039;ll probably take me a couple of weeks to get to. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wontfix:&#039;&#039;&#039; People can re-cc themselves to tickets they need to be cc&#039;d on. This is a one-time thing and there are only 100 or so tickets that are currently open. So while it&#039;s a pain in the ass, it&#039;s pretty limited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== text formatting ==&lt;br /&gt;
&lt;br /&gt;
Redmine data is in Markdown, but Trac uses its own wiki format. Currently, I&#039;m just passing the text in which makes it look stupid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Convert Redmine text data to reST and mark the text with the reST processor. http://trac.edgewall.org/wiki/WikiFormatting#Processors&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented--works super.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== relations ==&lt;br /&gt;
&lt;br /&gt;
Trac doesn&#039;t manage relationships between tickets: relates to, blocks, depends, duplicates, ... Trac allows you to resolve a ticket as a duplicate, but doesn&#039;t let you specify the ticket that it duplicates. In Trac you do that in the comments when you mark the ticket as a duplicate. My migration script doesn&#039;t do anything with the relations information at the moment. I&#039;m open to ideas on what to do here.&lt;br /&gt;
&lt;br /&gt;
Nathan suggested just marking it in a comment on the Trac ticket. Is that good enough?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented. It links to the appropriate Trac tickets which is nice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== accounts ==&lt;br /&gt;
&lt;br /&gt;
I can&#039;t build accounts for people easily, so I think I&#039;ll need to create accounts in Trac and then associate the accounts with the data post-migration. I need to write a script to do the association, but this means there will be a period of time where things will be a little disrupted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I wrote a script that trivially allows me to connect new user accounts people create with all their existing bug data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== issue numbers ==&lt;br /&gt;
&lt;br /&gt;
Redmine issue numbers don&#039;t start with 1 because we&#039;re in a Redmine instance with other projects. However, when we move to Trac, tickets will start with 1. So there will be a mismatch between Redmine issue numbers and Trac tickets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I&#039;m adding a comment to each Trac ticket that has a link to the original Redmine issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Things to do after migration =&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the list of things we&#039;re thinking about doing after we finish the migration and we&#039;re using the new system:&lt;br /&gt;
&lt;br /&gt;
* create backup scripts for data&lt;br /&gt;
* update the Trac front page to reflect MG stuff&lt;br /&gt;
* fix workflow to match MG workflow&lt;br /&gt;
* modify the reports&lt;br /&gt;
* change the style to match other sites we have&lt;br /&gt;
&lt;br /&gt;
Anything else?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Why migrate? ==&lt;br /&gt;
&lt;br /&gt;
Back in July 2011, we created http://bugs.foocorp.net/issues/418 we decided that we needed to manage our own issue tracker rather than use a hosted one. There are various reasons for this, but the biggest one is that we want to be in control of our infrastructure so that we can adapt it to our needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why Trac? ==&lt;br /&gt;
&lt;br /&gt;
Redmine lacks a tagging system, though I think there are plugins that you can install that handle tagging.&lt;br /&gt;
&lt;br /&gt;
Further, mediagoblin.org has infrastructure for Python web apps. I didn&#039;t feel like dealing with Python and Ruby web apps.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more familiar with Trac and can augment it with Trac plugins going forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why 6 months to get this done? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve spent the 6 months:&lt;br /&gt;
&lt;br /&gt;
* trying to get Redmine installed and running&lt;br /&gt;
* giving up on that and looking at issue tracking systems&lt;br /&gt;
* fixing bugs in the TracAccountManager plugin&lt;br /&gt;
* figuring out how to set up Trac from source rather than the Debian Stable packages which are Trac 0.11&lt;br /&gt;
* figuring out how to map Redmine to Trac&lt;br /&gt;
* writing a bunch of software to do this:&lt;br /&gt;
** https://github.com/willkg/redminelib - redminelib is a scraping library for Redmine sites&lt;br /&gt;
** redminetodata - script that uses redminelib to download issue data and store it in JSON format&lt;br /&gt;
** datatotrac - script that loads data in JSON format, downloads attachments, converts it all to Trac tickets, and stores it in the db&lt;br /&gt;
** buildtrac.sh - script that sets up a Trac instance with TracAccountManager plugin on a Debian Stable system&lt;br /&gt;
** connectuser.py - script to connect new accounts with existing data because i couldn&#039;t do it initially&lt;br /&gt;
&lt;br /&gt;
There were more obstacles than I expected and it just took a long time.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=520</id>
		<title>Redmine migration</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=520"/>
		<updated>2012-01-28T22:57:52Z</updated>

		<summary type="html">&lt;p&gt;Willkg: updated outstanding issues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Redmine Migration =&lt;br /&gt;
&lt;br /&gt;
This page covers the impending migration of all our issue data from the Redmine instance at Foocorp to a Trac instance we manage.&lt;br /&gt;
&lt;br /&gt;
This page is a work in progress. I started it so that it can be a one-stop-place for FAQ, schedule, and outstanding issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
January, 24th 2012: I&#039;ve gotten the software working. I have Trac installed on http://issues.mediagoblin.org/ with a test migration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please test it out and let me know if you have any issues.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Currently working through outstanding issues on the devel mailing list. Once we&#039;re done with that, I&#039;ll:&lt;br /&gt;
&lt;br /&gt;
# remove access to Redmine&lt;br /&gt;
# do a final migration&lt;br /&gt;
# update documentation and tell people about our new ticket system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Outstanding issues =&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Solved issues =&lt;br /&gt;
&lt;br /&gt;
== everything is comment 1 ==&lt;br /&gt;
&lt;br /&gt;
Seems like all the comments are &amp;quot;comment 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/162   &lt;br /&gt;
* http://issues.mediagoblin.org/ticket/138&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/96&lt;br /&gt;
&lt;br /&gt;
Could be a problem with the code that&#039;s inserting into ticket_change.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; Turns out in the ticket_change table, the oldvalue column for comments is the comment id number. Fixing the migration code fixed this issue, too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== named links in comments are broken ==&lt;br /&gt;
&lt;br /&gt;
Examples of broken named links:&lt;br /&gt;
&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/375#comment:1&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/162   &lt;br /&gt;
* http://issues.mediagoblin.org/ticket/138&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/96&lt;br /&gt;
&lt;br /&gt;
Looks like there&#039;s an extra space in the link. If the data from redminelib is bad, then that&#039;d cause the problem.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; I had to shut off wordwrapping in html2text. Doing that prevents it from putting incorrect \n everywhere--sometimes in the middle of links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== cc vs watching ==&lt;br /&gt;
&lt;br /&gt;
Trac has cc section in tickets, but it takes email addresses. Redmine issues have user accounts. Thus in order to connect the two, I need people to create accounts and such.&lt;br /&gt;
&lt;br /&gt;
However, this is a huge pain in the ass to populate after the fact. Is it ok if people re-cc: themselves to bugs they&#039;re interested in? If not, I&#039;ll spend the time to back-populate the data after the fact, but it&#039;ll probably take me a couple of weeks to get to. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wontfix:&#039;&#039;&#039; People can re-cc themselves to tickets they need to be cc&#039;d on. This is a one-time thing and there are only 100 or so tickets that are currently open. So while it&#039;s a pain in the ass, it&#039;s pretty limited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== text formatting ==&lt;br /&gt;
&lt;br /&gt;
Redmine data is in Markdown, but Trac uses its own wiki format. Currently, I&#039;m just passing the text in which makes it look stupid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Convert Redmine text data to reST and mark the text with the reST processor. http://trac.edgewall.org/wiki/WikiFormatting#Processors&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented--works super.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== relations ==&lt;br /&gt;
&lt;br /&gt;
Trac doesn&#039;t manage relationships between tickets: relates to, blocks, depends, duplicates, ... Trac allows you to resolve a ticket as a duplicate, but doesn&#039;t let you specify the ticket that it duplicates. In Trac you do that in the comments when you mark the ticket as a duplicate. My migration script doesn&#039;t do anything with the relations information at the moment. I&#039;m open to ideas on what to do here.&lt;br /&gt;
&lt;br /&gt;
Nathan suggested just marking it in a comment on the Trac ticket. Is that good enough?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented. It links to the appropriate Trac tickets which is nice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== accounts ==&lt;br /&gt;
&lt;br /&gt;
I can&#039;t build accounts for people easily, so I think I&#039;ll need to create accounts in Trac and then associate the accounts with the data post-migration. I need to write a script to do the association, but this means there will be a period of time where things will be a little disrupted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I wrote a script that trivially allows me to connect new user accounts people create with all their existing bug data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== issue numbers ==&lt;br /&gt;
&lt;br /&gt;
Redmine issue numbers don&#039;t start with 1 because we&#039;re in a Redmine instance with other projects. However, when we move to Trac, tickets will start with 1. So there will be a mismatch between Redmine issue numbers and Trac tickets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I&#039;m adding a comment to each Trac ticket that has a link to the original Redmine issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Things to do after migration =&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the list of things we&#039;re thinking about doing after we finish the migration and we&#039;re using the new system:&lt;br /&gt;
&lt;br /&gt;
* create backup scripts for data&lt;br /&gt;
* update the Trac front page to reflect MG stuff&lt;br /&gt;
* fix workflow to match MG workflow&lt;br /&gt;
* modify the reports&lt;br /&gt;
* change the style to match other sites we have&lt;br /&gt;
&lt;br /&gt;
Anything else?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Why migrate? ==&lt;br /&gt;
&lt;br /&gt;
Back in July 2011, we created http://bugs.foocorp.net/issues/418 we decided that we needed to manage our own issue tracker rather than use a hosted one. There are various reasons for this, but the biggest one is that we want to be in control of our infrastructure so that we can adapt it to our needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why Trac? ==&lt;br /&gt;
&lt;br /&gt;
Redmine lacks a tagging system, though I think there are plugins that you can install that handle tagging.&lt;br /&gt;
&lt;br /&gt;
Further, mediagoblin.org has infrastructure for Python web apps. I didn&#039;t feel like dealing with Python and Ruby web apps.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more familiar with Trac and can augment it with Trac plugins going forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why 6 months to get this done? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve spent the 6 months:&lt;br /&gt;
&lt;br /&gt;
* trying to get Redmine installed and running&lt;br /&gt;
* giving up on that and looking at issue tracking systems&lt;br /&gt;
* fixing bugs in the TracAccountManager plugin&lt;br /&gt;
* figuring out how to set up Trac from source rather than the Debian Stable packages which are Trac 0.11&lt;br /&gt;
* figuring out how to map Redmine to Trac&lt;br /&gt;
* writing a bunch of software to do this:&lt;br /&gt;
** https://github.com/willkg/redminelib - redminelib is a scraping library for Redmine sites&lt;br /&gt;
** redminetodata - script that uses redminelib to download issue data and store it in JSON format&lt;br /&gt;
** datatotrac - script that loads data in JSON format, downloads attachments, converts it all to Trac tickets, and stores it in the db&lt;br /&gt;
** buildtrac.sh - script that sets up a Trac instance with TracAccountManager plugin on a Debian Stable system&lt;br /&gt;
** connectuser.py - script to connect new accounts with existing data because i couldn&#039;t do it initially&lt;br /&gt;
&lt;br /&gt;
There were more obstacles than I expected and it just took a long time.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=519</id>
		<title>Redmine migration</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=519"/>
		<updated>2012-01-28T17:10:19Z</updated>

		<summary type="html">&lt;p&gt;Willkg: adding problems chris found&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Redmine Migration =&lt;br /&gt;
&lt;br /&gt;
This page covers the impending migration of all our issue data from the Redmine instance at Foocorp to a Trac instance we manage.&lt;br /&gt;
&lt;br /&gt;
This page is a work in progress. I started it so that it can be a one-stop-place for FAQ, schedule, and outstanding issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
January, 24th 2012: I&#039;ve gotten the software working. I have Trac installed on http://issues.mediagoblin.org/ with a test migration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please test it out and let me know if you have any issues.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Currently working through outstanding issues on the devel mailing list. Once we&#039;re done with that, I&#039;ll:&lt;br /&gt;
&lt;br /&gt;
# remove access to Redmine&lt;br /&gt;
# do a final migration&lt;br /&gt;
# update documentation and tell people about our new ticket system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Outstanding issues =&lt;br /&gt;
&lt;br /&gt;
== named links in comments are broken ==&lt;br /&gt;
&lt;br /&gt;
Examples of broken named links:&lt;br /&gt;
&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/375#comment:1&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/162   &lt;br /&gt;
* http://issues.mediagoblin.org/ticket/138&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/96&lt;br /&gt;
&lt;br /&gt;
Looks like there&#039;s an extra space in the link. If the data from redminelib is bad, then that&#039;d cause the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== everything is comment 1 ==&lt;br /&gt;
&lt;br /&gt;
Seems like all the comments are &amp;quot;comment 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/162   &lt;br /&gt;
* http://issues.mediagoblin.org/ticket/138&lt;br /&gt;
* http://issues.mediagoblin.org/ticket/96&lt;br /&gt;
&lt;br /&gt;
Could be a problem with the code that&#039;s inserting into ticket_change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Solved issues =&lt;br /&gt;
&lt;br /&gt;
== cc vs watching ==&lt;br /&gt;
&lt;br /&gt;
Trac has cc section in tickets, but it takes email addresses. Redmine issues have user accounts. Thus in order to connect the two, I need people to create accounts and such.&lt;br /&gt;
&lt;br /&gt;
However, this is a huge pain in the ass to populate after the fact. Is it ok if people re-cc: themselves to bugs they&#039;re interested in? If not, I&#039;ll spend the time to back-populate the data after the fact, but it&#039;ll probably take me a couple of weeks to get to. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wontfix:&#039;&#039;&#039; People can re-cc themselves to tickets they need to be cc&#039;d on. This is a one-time thing and there are only 100 or so tickets that are currently open. So while it&#039;s a pain in the ass, it&#039;s pretty limited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== text formatting ==&lt;br /&gt;
&lt;br /&gt;
Redmine data is in Markdown, but Trac uses its own wiki format. Currently, I&#039;m just passing the text in which makes it look stupid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Convert Redmine text data to reST and mark the text with the reST processor. http://trac.edgewall.org/wiki/WikiFormatting#Processors&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented--works super.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== relations ==&lt;br /&gt;
&lt;br /&gt;
Trac doesn&#039;t manage relationships between tickets: relates to, blocks, depends, duplicates, ... Trac allows you to resolve a ticket as a duplicate, but doesn&#039;t let you specify the ticket that it duplicates. In Trac you do that in the comments when you mark the ticket as a duplicate. My migration script doesn&#039;t do anything with the relations information at the moment. I&#039;m open to ideas on what to do here.&lt;br /&gt;
&lt;br /&gt;
Nathan suggested just marking it in a comment on the Trac ticket. Is that good enough?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented. It links to the appropriate Trac tickets which is nice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== accounts ==&lt;br /&gt;
&lt;br /&gt;
I can&#039;t build accounts for people easily, so I think I&#039;ll need to create accounts in Trac and then associate the accounts with the data post-migration. I need to write a script to do the association, but this means there will be a period of time where things will be a little disrupted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I wrote a script that trivially allows me to connect new user accounts people create with all their existing bug data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== issue numbers ==&lt;br /&gt;
&lt;br /&gt;
Redmine issue numbers don&#039;t start with 1 because we&#039;re in a Redmine instance with other projects. However, when we move to Trac, tickets will start with 1. So there will be a mismatch between Redmine issue numbers and Trac tickets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I&#039;m adding a comment to each Trac ticket that has a link to the original Redmine issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Things to do after migration =&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the list of things we&#039;re thinking about doing after we finish the migration and we&#039;re using the new system:&lt;br /&gt;
&lt;br /&gt;
* create backup scripts for data&lt;br /&gt;
* update the Trac front page to reflect MG stuff&lt;br /&gt;
* fix workflow to match MG workflow&lt;br /&gt;
* modify the reports&lt;br /&gt;
* change the style to match other sites we have&lt;br /&gt;
&lt;br /&gt;
Anything else?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Why migrate? ==&lt;br /&gt;
&lt;br /&gt;
Back in July 2011, we created http://bugs.foocorp.net/issues/418 we decided that we needed to manage our own issue tracker rather than use a hosted one. There are various reasons for this, but the biggest one is that we want to be in control of our infrastructure so that we can adapt it to our needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why Trac? ==&lt;br /&gt;
&lt;br /&gt;
Redmine lacks a tagging system, though I think there are plugins that you can install that handle tagging.&lt;br /&gt;
&lt;br /&gt;
Further, mediagoblin.org has infrastructure for Python web apps. I didn&#039;t feel like dealing with Python and Ruby web apps.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more familiar with Trac and can augment it with Trac plugins going forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why 6 months to get this done? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve spent the 6 months:&lt;br /&gt;
&lt;br /&gt;
* trying to get Redmine installed and running&lt;br /&gt;
* giving up on that and looking at issue tracking systems&lt;br /&gt;
* fixing bugs in the TracAccountManager plugin&lt;br /&gt;
* figuring out how to set up Trac from source rather than the Debian Stable packages which are Trac 0.11&lt;br /&gt;
* figuring out how to map Redmine to Trac&lt;br /&gt;
* writing a bunch of software to do this:&lt;br /&gt;
** https://github.com/willkg/redminelib - redminelib is a scraping library for Redmine sites&lt;br /&gt;
** redminetodata - script that uses redminelib to download issue data and store it in JSON format&lt;br /&gt;
** datatotrac - script that loads data in JSON format, downloads attachments, converts it all to Trac tickets, and stores it in the db&lt;br /&gt;
** buildtrac.sh - script that sets up a Trac instance with TracAccountManager plugin on a Debian Stable system&lt;br /&gt;
** connectuser.py - script to connect new accounts with existing data because i couldn&#039;t do it initially&lt;br /&gt;
&lt;br /&gt;
There were more obstacles than I expected and it just took a long time.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=518</id>
		<title>Redmine migration</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=518"/>
		<updated>2012-01-28T01:17:26Z</updated>

		<summary type="html">&lt;p&gt;Willkg: updated migration plan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Redmine Migration =&lt;br /&gt;
&lt;br /&gt;
This page covers the impending migration of all our issue data from the Redmine instance at Foocorp to a Trac instance we manage.&lt;br /&gt;
&lt;br /&gt;
This page is a work in progress. I started it so that it can be a one-stop-place for FAQ, schedule, and outstanding issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
January, 24th 2012: I&#039;ve gotten the software working. I have Trac installed on http://issues.mediagoblin.org/ with a test migration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please test it out and let me know if you have any issues.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Currently working through outstanding issues on the devel mailing list. Once we&#039;re done with that, I&#039;ll:&lt;br /&gt;
&lt;br /&gt;
# remove access to Redmine&lt;br /&gt;
# do a final migration&lt;br /&gt;
# update documentation and tell people about our new ticket system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Outstanding issues =&lt;br /&gt;
&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Solved issues =&lt;br /&gt;
&lt;br /&gt;
== cc vs watching ==&lt;br /&gt;
&lt;br /&gt;
Trac has cc section in tickets, but it takes email addresses. Redmine issues have user accounts. Thus in order to connect the two, I need people to create accounts and such.&lt;br /&gt;
&lt;br /&gt;
However, this is a huge pain in the ass to populate after the fact. Is it ok if people re-cc: themselves to bugs they&#039;re interested in? If not, I&#039;ll spend the time to back-populate the data after the fact, but it&#039;ll probably take me a couple of weeks to get to. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wontfix:&#039;&#039;&#039; People can re-cc themselves to tickets they need to be cc&#039;d on. This is a one-time thing and there are only 100 or so tickets that are currently open. So while it&#039;s a pain in the ass, it&#039;s pretty limited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== text formatting ==&lt;br /&gt;
&lt;br /&gt;
Redmine data is in Markdown, but Trac uses its own wiki format. Currently, I&#039;m just passing the text in which makes it look stupid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Convert Redmine text data to reST and mark the text with the reST processor. http://trac.edgewall.org/wiki/WikiFormatting#Processors&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented--works super.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== relations ==&lt;br /&gt;
&lt;br /&gt;
Trac doesn&#039;t manage relationships between tickets: relates to, blocks, depends, duplicates, ... Trac allows you to resolve a ticket as a duplicate, but doesn&#039;t let you specify the ticket that it duplicates. In Trac you do that in the comments when you mark the ticket as a duplicate. My migration script doesn&#039;t do anything with the relations information at the moment. I&#039;m open to ideas on what to do here.&lt;br /&gt;
&lt;br /&gt;
Nathan suggested just marking it in a comment on the Trac ticket. Is that good enough?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; That&#039;s what I implemented. It links to the appropriate Trac tickets which is nice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== accounts ==&lt;br /&gt;
&lt;br /&gt;
I can&#039;t build accounts for people easily, so I think I&#039;ll need to create accounts in Trac and then associate the accounts with the data post-migration. I need to write a script to do the association, but this means there will be a period of time where things will be a little disrupted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I wrote a script that trivially allows me to connect new user accounts people create with all their existing bug data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== issue numbers ==&lt;br /&gt;
&lt;br /&gt;
Redmine issue numbers don&#039;t start with 1 because we&#039;re in a Redmine instance with other projects. However, when we move to Trac, tickets will start with 1. So there will be a mismatch between Redmine issue numbers and Trac tickets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I&#039;m adding a comment to each Trac ticket that has a link to the original Redmine issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Things to do after migration =&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the list of things we&#039;re thinking about doing after we finish the migration and we&#039;re using the new system:&lt;br /&gt;
&lt;br /&gt;
* create backup scripts for data&lt;br /&gt;
* update the Trac front page to reflect MG stuff&lt;br /&gt;
* fix workflow to match MG workflow&lt;br /&gt;
* modify the reports&lt;br /&gt;
* change the style to match other sites we have&lt;br /&gt;
&lt;br /&gt;
Anything else?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Why migrate? ==&lt;br /&gt;
&lt;br /&gt;
Back in July 2011, we created http://bugs.foocorp.net/issues/418 we decided that we needed to manage our own issue tracker rather than use a hosted one. There are various reasons for this, but the biggest one is that we want to be in control of our infrastructure so that we can adapt it to our needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why Trac? ==&lt;br /&gt;
&lt;br /&gt;
Redmine lacks a tagging system, though I think there are plugins that you can install that handle tagging.&lt;br /&gt;
&lt;br /&gt;
Further, mediagoblin.org has infrastructure for Python web apps. I didn&#039;t feel like dealing with Python and Ruby web apps.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more familiar with Trac and can augment it with Trac plugins going forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why 6 months to get this done? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve spent the 6 months:&lt;br /&gt;
&lt;br /&gt;
* trying to get Redmine installed and running&lt;br /&gt;
* giving up on that and looking at issue tracking systems&lt;br /&gt;
* fixing bugs in the TracAccountManager plugin&lt;br /&gt;
* figuring out how to set up Trac from source rather than the Debian Stable packages which are Trac 0.11&lt;br /&gt;
* figuring out how to map Redmine to Trac&lt;br /&gt;
* writing a bunch of software to do this:&lt;br /&gt;
** https://github.com/willkg/redminelib - redminelib is a scraping library for Redmine sites&lt;br /&gt;
** redminetodata - script that uses redminelib to download issue data and store it in JSON format&lt;br /&gt;
** datatotrac - script that loads data in JSON format, downloads attachments, converts it all to Trac tickets, and stores it in the db&lt;br /&gt;
** buildtrac.sh - script that sets up a Trac instance with TracAccountManager plugin on a Debian Stable system&lt;br /&gt;
** connectuser.py - script to connect new accounts with existing data because i couldn&#039;t do it initially&lt;br /&gt;
&lt;br /&gt;
There were more obstacles than I expected and it just took a long time.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=512</id>
		<title>Redmine migration</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=512"/>
		<updated>2012-01-27T01:50:51Z</updated>

		<summary type="html">&lt;p&gt;Willkg: updated migration plan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Redmine Migration =&lt;br /&gt;
&lt;br /&gt;
This page covers the impending migration of all our issue data from the Redmine instance at Foocorp to a Trac instance we manage.&lt;br /&gt;
&lt;br /&gt;
This page is a work in progress. I started it so that it can be a one-stop-place for FAQ, schedule, and outstanding issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
January, 24th 2012: I&#039;ve gotten the software working. I have Trac installed on http://issues.mediagoblin.org/ with a test migration. Please look around and let me know if you have issues.&lt;br /&gt;
&lt;br /&gt;
Currently working through outstanding issues on the devel mailing list. Once we&#039;re done with that, I&#039;ll:&lt;br /&gt;
&lt;br /&gt;
# remove access to Redmine&lt;br /&gt;
# do a final migration&lt;br /&gt;
# update documentation and tell people about our new ticket system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Outstanding issues =&lt;br /&gt;
&lt;br /&gt;
== relations ==&lt;br /&gt;
&lt;br /&gt;
Trac doesn&#039;t manage relationships between tickets: relates to, blocks, depends, duplicates, ... Trac allows you to resolve a ticket as a duplicate, but doesn&#039;t let you specify the ticket that it duplicates. In Trac you do that in the comments when you mark the ticket as a duplicate. My migration script doesn&#039;t do anything with the relations information at the moment. I&#039;m open to ideas on what to do here.&lt;br /&gt;
&lt;br /&gt;
Nathan suggested just marking it in a comment on the Trac ticket. Is that good enough?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== cc vs watching ==&lt;br /&gt;
&lt;br /&gt;
Trac has cc section in tickets, but it takes email addresses. Redmine issues have user accounts. Thus in order to connect the two, I need people to create accounts and such.&lt;br /&gt;
&lt;br /&gt;
However, this is a huge pain in the ass to populate after the fact. Is it ok if people re-cc: themselves to bugs they&#039;re interested in? If not, I&#039;ll spend the time to back-populate the data after the fact, but it&#039;ll probably take me a couple of weeks to get to. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== text formatting ==&lt;br /&gt;
&lt;br /&gt;
Redmine data is in Markdown, but Trac uses its own wiki format. Currently, I&#039;m just passing the text in which makes it look stupid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Convert Redmine text data to reST and mark the text with the reST processor. http://trac.edgewall.org/wiki/WikiFormatting#Processors&lt;br /&gt;
&lt;br /&gt;
Code changes need to be made here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Solved issues =&lt;br /&gt;
&lt;br /&gt;
== accounts ==&lt;br /&gt;
&lt;br /&gt;
I can&#039;t build accounts for people easily, so I think I&#039;ll need to create accounts in Trac and then associate the accounts with the data post-migration. I need to write a script to do the association, but this means there will be a period of time where things will be a little disrupted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I wrote a script that trivially allows me to connect new user accounts people create with all their existing bug data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== issue numbers ==&lt;br /&gt;
&lt;br /&gt;
Redmine issue numbers don&#039;t start with 1 because we&#039;re in a Redmine instance with other projects. However, when we move to Trac, tickets will start with 1. So there will be a mismatch between Redmine issue numbers and Trac tickets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fixed:&#039;&#039;&#039; I&#039;m adding a comment to each Trac ticket that has a link to the original Redmine issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Things to do after migration =&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the list of things we&#039;re thinking about doing after we finish the migration and we&#039;re using the new system:&lt;br /&gt;
&lt;br /&gt;
* create backup scripts for data&lt;br /&gt;
* update the Trac front page to reflect MG stuff&lt;br /&gt;
* fix workflow to match MG workflow&lt;br /&gt;
* modify the reports&lt;br /&gt;
* change the style to match other sites we have&lt;br /&gt;
&lt;br /&gt;
Anything else?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Why migrate? ==&lt;br /&gt;
&lt;br /&gt;
Back in July 2011, we created http://bugs.foocorp.net/issues/418 we decided that we needed to manage our own issue tracker rather than use a hosted one. There are various reasons for this, but the biggest one is that we want to be in control of our infrastructure so that we can adapt it to our needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why Trac? ==&lt;br /&gt;
&lt;br /&gt;
Redmine lacks a tagging system, though I think there are plugins that you can install that handle tagging.&lt;br /&gt;
&lt;br /&gt;
Further, mediagoblin.org has infrastructure for Python web apps. I didn&#039;t feel like dealing with Python and Ruby web apps.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more familiar with Trac and can augment it with Trac plugins going forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why 6 months to get this done? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve spent the 6 months:&lt;br /&gt;
&lt;br /&gt;
* trying to get Redmine installed and running&lt;br /&gt;
* giving up on that and looking at issue tracking systems&lt;br /&gt;
* fixing bugs in the TracAccountManager plugin&lt;br /&gt;
* figuring out how to set up Trac from source rather than the Debian Stable packages which are Trac 0.11&lt;br /&gt;
* figuring out how to map Redmine to Trac&lt;br /&gt;
* writing a bunch of software to do this:&lt;br /&gt;
** https://github.com/willkg/redminelib - redminelib is a scraping library for Redmine sites&lt;br /&gt;
** redminetodata - script that uses redminelib to download issue data and store it in JSON format&lt;br /&gt;
** datatotrac - script that loads data in JSON format, downloads attachments, converts it all to Trac tickets, and stores it in the db&lt;br /&gt;
** buildtrac.sh - script that sets up a Trac instance with TracAccountManager plugin on a Debian Stable system&lt;br /&gt;
** connectuser.py - script to connect new accounts with existing data because i couldn&#039;t do it initially&lt;br /&gt;
&lt;br /&gt;
There were more obstacles than I expected and it just took a long time.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=503</id>
		<title>Redmine migration</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Redmine_migration&amp;diff=503"/>
		<updated>2012-01-24T16:46:24Z</updated>

		<summary type="html">&lt;p&gt;Willkg: initial writeup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Redmine Migration =&lt;br /&gt;
&lt;br /&gt;
This page covers the impending migration of all our issue data from the Redmine instance at Foocorp to a Trac instance we manage.&lt;br /&gt;
&lt;br /&gt;
This page is a work in progress. I started it so that it can be a one-stop-place for FAQ, schedule, and outstanding issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Status =&lt;br /&gt;
&lt;br /&gt;
January, 24th 2012: I&#039;ve gotten the software working. I have Trac installed on http://issues.mediagoblin.org/ with a test migration. Please look around and let me know if you have issues.&lt;br /&gt;
&lt;br /&gt;
Currently working through outstanding issues on the devel mailing list. Once we&#039;re done with that, I&#039;ll:&lt;br /&gt;
&lt;br /&gt;
# remove access to Redmine&lt;br /&gt;
# do a final migration&lt;br /&gt;
# update documentation and tell people about our new ticket system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Outstanding issues =&lt;br /&gt;
&lt;br /&gt;
== accounts ==&lt;br /&gt;
&lt;br /&gt;
I can&#039;t build accounts for people easily, so I think I&#039;ll need to create accounts in Trac and then associate the accounts with the data post-migration. I need to write a script to do the association, but this means there will be a period of time where things will be a little disrupted.&lt;br /&gt;
&lt;br /&gt;
Is that good enough?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== relations ==&lt;br /&gt;
&lt;br /&gt;
Trac doesn&#039;t manage relationships between tickets: relates to, blocks, depends, duplicates, ... Trac allows you to resolve a ticket as a duplicate, but doesn&#039;t let you specify the ticket that it duplicates. In Trac you do that in the comments when you mark the ticket as a duplicate. My migration script doesn&#039;t do anything with the relations information at the moment. I&#039;m open to ideas on what to do here.&lt;br /&gt;
&lt;br /&gt;
Nathan suggested just marking it in a comment on the Trac ticket. Is that good enough?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== cc vs watching ==&lt;br /&gt;
&lt;br /&gt;
Trac has cc section in tickets, but it takes email addresses. Redmine issues have user accounts. Thus in order to connect the two, I need people to create accounts and such.&lt;br /&gt;
&lt;br /&gt;
However, this is a huge pain in the ass to populate after the fact. Is it ok if people re-cc: themselves to bugs they&#039;re interested in? If not, I&#039;ll spend the time to back-populate the data after the fact, but it&#039;ll probably take me a couple of weeks to get to. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Solved issues =&lt;br /&gt;
&lt;br /&gt;
== issue numbers ==&lt;br /&gt;
&lt;br /&gt;
Redmine issue numbers don&#039;t start with 1 because we&#039;re in a Redmine instance with other projects. However, when we move to Trac, tickets will start with 1. So there will be a mismatch between Redmine issue numbers and Trac tickets.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; I&#039;m adding a comment to each Trac ticket that has a link to the original Redmine issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== text formatting ==&lt;br /&gt;
&lt;br /&gt;
Redmine data is in Markdown, but Trac uses its own wiki format. Currently, I&#039;m just passing the text in which makes it look stupid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fix:&#039;&#039;&#039; Convert Redmine text data to reST and mark the text with the reST processor. http://trac.edgewall.org/wiki/WikiFormatting#Processors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
== Why migrate? ==&lt;br /&gt;
&lt;br /&gt;
Back in July 2011, we created http://bugs.foocorp.net/issues/418 we decided that we needed to manage our own issue tracker rather than use a hosted one. There are various reasons for this, but the biggest one is that we want to be in control of our infrastructure so that we can adapt it to our needs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why Trac? ==&lt;br /&gt;
&lt;br /&gt;
Redmine lacks a tagging system, though I think there are plugins that you can install that handle tagging.&lt;br /&gt;
&lt;br /&gt;
Further, mediagoblin.org has infrastructure for Python web apps. I didn&#039;t feel like dealing with Python and Ruby web apps.&lt;br /&gt;
&lt;br /&gt;
I&#039;m more familiar with Trac and can augment it with Trac plugins going forward.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Why 6 months to get this done? ==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve spent the 6 months:&lt;br /&gt;
&lt;br /&gt;
* trying to get Redmine installed and running&lt;br /&gt;
* giving up on that and looking at issue tracking systems&lt;br /&gt;
* fixing bugs in the TracAccountManager plugin&lt;br /&gt;
* figuring out how to set up Trac from source rather than the Debian Stable packages which are Trac 0.11&lt;br /&gt;
* figuring out how to map Redmine to Trac&lt;br /&gt;
* writing a bunch of software to do this:&lt;br /&gt;
** https://github.com/willkg/redminelib - redminelib is a scraping library for Redmine sites&lt;br /&gt;
** redminetodata - script that uses redminelib to download issue data and store it in JSON format&lt;br /&gt;
** datatotrac - script that loads data in JSON format, downloads attachments, converts it all to Trac tickets, and stores it in the db&lt;br /&gt;
** buildtrac.sh - script that sets up a Trac instance with TracAccountManager plugin on a Debian Stable system&lt;br /&gt;
&lt;br /&gt;
There were more obstacles than I expected and it just took a long time.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User:Aleksejrs/ideas/federation&amp;diff=475</id>
		<title>User:Aleksejrs/ideas/federation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User:Aleksejrs/ideas/federation&amp;diff=475"/>
		<updated>2012-01-03T15:01:33Z</updated>

		<summary type="html">&lt;p&gt;Willkg: Reverted edits by KaitlinDudley (talk) to last revision by Aleksejrs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It may be that things described here are described, and better described, at [[API]]. --[[User:Aleksejrs|Aleksejrs]] 15:44, 8 November 2011 (EST)&lt;br /&gt;
&lt;br /&gt;
== Selective media copying ==&lt;br /&gt;
&lt;br /&gt;
# UserA owns GMG ServerA.&lt;br /&gt;
# UserA goes to GMG ServerB and sees an image.&lt;br /&gt;
# UserA puts URL of the image into his ServerA.&lt;br /&gt;
# ServerA fetches the image from ServerB with all metadata, so it becomes available at ServerA.&lt;br /&gt;
&lt;br /&gt;
* Access (both viewing and copying) to the image might require view/access rights.&lt;br /&gt;
* The result should (must at least if the source is non-public) be marked private by default.&lt;br /&gt;
* It should be possible for the result to have a visible reference to its source.&lt;br /&gt;
* ServerB may be notified of the copying, so that it can link to the result, if it chooses to (http://bugs.foocorp.net/issues/604).&lt;br /&gt;
&lt;br /&gt;
=== Another use-case ===&lt;br /&gt;
&lt;br /&gt;
# UserA has private ServerA at home (possibly not accessible from outside), and an account at remote ServerB.&lt;br /&gt;
# UserA stores media in ServerA (possibly uploading by copying to a directory), and has the option of uploading all or parts of it to his ServerB account.&lt;br /&gt;
&lt;br /&gt;
== FidoNet-inspired group mirroring ==&lt;br /&gt;
&lt;br /&gt;
Here is a StatusNet feature request that came to be after the discussion: http://status.net/open-source/issues/3407&lt;br /&gt;
&lt;br /&gt;
# GMG has a concept of something like “groups” (as of this writing it probably does not yet). Imagine groups like in Identi.ca — see the link above.&lt;br /&gt;
# A group originates at ServerA, and is also at ServerB.&lt;br /&gt;
# When somebody at ServerA or ServerB posts a media into the group (or marks it as being in that group), it appears in the group at both ServerA and ServerB.&lt;br /&gt;
&lt;br /&gt;
* A group may have a moderator.&lt;br /&gt;
* A server admin may refuse a media to be on his server (including: pre-moderation).&lt;br /&gt;
* ServerC may receive this group even from a server other than the one from where the group originates, or from where the file originates.&lt;br /&gt;
** Bad: that might create a moderatorless version of the group at a group of servers, or similar MITM attacks on the group, but that’s its decentralization, and it is optional.&lt;br /&gt;
** Bad: a complex network of servers can have broken links (or worse, recreate FidoNet politics!).&lt;br /&gt;
* To protect the group against broken links, servers may connect to each other as a ring, downloading only the files they don’t have (keeping information about where the file comes from, to be able to remove files/versions coming from a particular server?).&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Processing&amp;diff=470</id>
		<title>Processing</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Processing&amp;diff=470"/>
		<updated>2011-12-19T15:30:09Z</updated>

		<summary type="html">&lt;p&gt;Willkg: Reverted edits by LynnConrad (talk) to last revision by Cwebber&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When you submit an image (or in the future, other media type), it might not be immediately processed, it might be passed somewhere else, get processed, then get moved up.  Certainly though several things will happen after this point: a more thorough checking for whether the media submitted is of a valid type, thumbnail generation, possibly scaling down, conversion, or transcoding of your media, etc.  The process in which all this happens is called &amp;quot;processing&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-------,&lt;br /&gt;
  |       |                                                &lt;br /&gt;
  | MEDIA |                                                &lt;br /&gt;
  |       |                                                 ,--------,&lt;br /&gt;
  &#039;-------&#039;                                    _converted_\ | PUBLIC |&lt;br /&gt;
      |                                       /   media   / | STORE  |&lt;br /&gt;
    submit                                    :             &#039;--------&#039;&lt;br /&gt;
      |                                       :                 :&lt;br /&gt;
      V                                       :                 :&lt;br /&gt;
  .------------.                      ,------------,            :&lt;br /&gt;
  |            |                      |            |            V&lt;br /&gt;
  | submission |------queues--------&amp;gt; | processing |       ,-----------,&lt;br /&gt;
  |    view    |   for processing     |            |       |           |&lt;br /&gt;
  &#039;------------&#039;                      &#039;------------&#039;       |  Gallery  |&lt;br /&gt;
        :                                   ^              |           |&lt;br /&gt;
        :                                   :              &#039;-----------&#039;&lt;br /&gt;
        &#039;           ,---------,             &#039;&lt;br /&gt;
         \_save __\ |  QUEUE  |  __ fetch _/&lt;br /&gt;
           media  / |  STORE  |     media&lt;br /&gt;
                    &#039;---------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Celery =&lt;br /&gt;
&lt;br /&gt;
Processing is set up so that it can possibly be handed over to another process and not happen immediately.  Resizing an image might not seem like it would take too long, and perhaps it wouldn&#039;t, but keep in mind that MediaGoblin is being designed to in the future handle all sorts of media types, including video, audio, etc.  If we waited for a video to finish transcoding before we submitted it, we might time out before the process finishes!&lt;br /&gt;
&lt;br /&gt;
If you are using ./lazyserver.sh (which most developers are) this won&#039;t be the case; Celery is run in [http://ask.github.com/celery/configuration.html#celery-always-eager always eager mode], which means that the task will be run by the same task that started it.&lt;br /&gt;
&lt;br /&gt;
However if you want to split off processing into a separate process, that option is available.  See [[Celery]] and the [[HackingHowto]] for details.&lt;br /&gt;
&lt;br /&gt;
= The general process =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: some of the description of what&#039;s happening here comes from the processing branch, which is not yet merged but should be merged in shortly.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First of all, your process will be passed off to the function in mediagoblin.process_media.process_media().  That function will receive the id of your MediaEntry for retreival, and will use that information to find out what media type this is and dispatch it further to the appropriate function (or rather, that&#039;s the future plan, for now it just passes it over to the image processor since we only support images ;)).&lt;br /&gt;
&lt;br /&gt;
The file you submitted will be referenced in the MediaEntry[&#039;queued_media_file&#039;] key in the usual filepath &amp;quot;list&amp;quot; type format.  This file path is then passed to the queue_store system to retrieve the file.  See [[Storage]] for more details on how the storage systems work.&lt;br /&gt;
&lt;br /&gt;
While the file is being worked on... say converted to a smaller image files or transcoded to webm... we need a way to access that file locally.  What if it&#039;s already on a local file store?  There&#039;s no reason for us to create a new file for it then.  But what if it&#039;s on a remote filestore?  We should *conditionally* copy the file locally, but make it really easy for the processing code to not have to know what we did.  The [[Storage#The_workbench|workbench]] helps here.  It also gives a temporary place to save other files during conversion.  A fresh workbench is made for every processing job by the Workbench Manager (see workbench.py), and when all is done here, the workbench is destroyed.&lt;br /&gt;
&lt;br /&gt;
Anyway, at this point the media&#039;s processing code does whatever conversions it needs, saving temporary files to the workbench.&lt;br /&gt;
&lt;br /&gt;
When files are converted over (including the thumbnail) they are saved into the public_store and recorded in the MediaEntry[&#039;media_files&#039;] dictionary.  The state of the MediaEntry is moved to &#039;processed&#039; and everyone rejoices.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TL;DR:&#039;&#039;&#039; &#039;&#039;After you submit your media it gets stored in the queue_store, gets passed to processing (which may or may not run in a separate process via celery), gets passed to the appropriate processing function, and the processed media gets saved in the public_store.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
&lt;br /&gt;
== Handled failures ==&lt;br /&gt;
&lt;br /&gt;
Certain kinds of errors we want to expect and handle.  For example, if a user managed to submit something they claimed was an image but it had a .txt extension, it would never hit processing, but if it was a text file named as .jpg, we wouldn&#039;t know until we tried opening it (and we don&#039;t bother until the processing stage.)  This is an error, but a *handled* error.  There might be other kinds of handled errors too... we might not support transcoding a certain kind of file, or we might not have the libraries installed to know how convert these.&lt;br /&gt;
&lt;br /&gt;
These are handled errors, and it&#039;s good if we can raise and report them in a useful way.  Because of this, we allow for raising errors during media processing methods that are derived from mediagoblin.process_media.errors.BaseProcessingFail.  You shouldn&#039;t raise BaseProcessingFail directly, but instead a subclass of it.  For example, if your user submitted a bad piece of media, you can:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  raise BadMediaFail()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then the processing will be aborted, the MediaEntry[&#039;state&#039;] will be saved as &#039;failed&#039;.  In addition, since this is a special inherited-from-BaseProcessingFail type error, the python path to this error will be saved in MediaEntry[&#039;fail_error&#039;].  (We can then later recall the exception class that was raised previously via MediaEntry.get_fail_exception()).  In addition, if you pass in any keyword arguments to the exception these will be stored in MediaEntry[&#039;fail_metadata&#039;] so that later on we might be able to construct some extra information about what happened.&lt;br /&gt;
&lt;br /&gt;
Lastly, failure exceptions inherited from BaseProcessingFail should provide a general_message class-level attribute.  This should be a &amp;quot;lazy_pass_to_ugettext&amp;quot; wrapped string that explains the error in a way that users of a MediaGoblin site might understand.&lt;br /&gt;
&lt;br /&gt;
There is actually some experimental and not-ideal-but-working support for this under the path /u/username/panel/ ... assuming you are the relevant user or are an admin, you&#039;ll be able to see what recent media entry submissions failed here and why.&lt;br /&gt;
&lt;br /&gt;
== Unhandled failures ==&lt;br /&gt;
&lt;br /&gt;
Exceptions that are raised that *don&#039;t* inherit from BaseProcessingFail are considered &amp;quot;unhandled&amp;quot;.  Your MediaEntry should still be correctly marked as &#039;failed&#039;, but the &#039;fail_error&#039; field of the model won&#039;t be filled in, and neither can any fail_metadata be saved.  Furthermore we can&#039;t provide a useful error to a user.&lt;br /&gt;
&lt;br /&gt;
Nonetheless, unexpected errors do occur... some sort of IOError might happen that we don&#039;t anticipate or handle.  Assuming you aren&#039;t running lazyserver (or otherwise with CELERY_ALWAYS_EAGER set to true and CELERY_PROPAGATE_ERRORS set to True) where unhandled failures will be propagated to your console, you may want to debug what went wrong at a later time.  How to do this?&lt;br /&gt;
&lt;br /&gt;
Fortunately here Celery helps us out.  Your processing results will be recorded in &amp;quot;celery_taskmeta&amp;quot; and you can find the &#039;_id&#039; of your result by looking at MediaEntry[&#039;queued_task_id&#039;].  The exception that was raised should be stored here, so you should be able to use this for debugging purposes.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=414</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=414"/>
		<updated>2011-11-18T18:46:03Z</updated>

		<summary type="html">&lt;p&gt;Willkg: fixed codebase-chapter ref&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at [http://docs.mediagoblin.org/codebase.html codebase chapter] where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use an&lt;br /&gt;
in-package checkout of virtualenv.  This isn&#039;t the convenional way to&lt;br /&gt;
install virtualenv (normally you don&#039;t install virtualenv inside the&lt;br /&gt;
package itself) but we&#039;ve found that it&#039;s significantly easier for&lt;br /&gt;
newcomers who aren&#039;t already familiar with virtualenv.  If you *are*&lt;br /&gt;
already familiar with virtualenv, feel free to just install&lt;br /&gt;
mediagoblin in your own virtualenv setup... the necessary adjustments&lt;br /&gt;
should be obvious.&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
* Python Imaging Library (PIL) - http://www.pythonware.com/products/pil/&lt;br /&gt;
* virtualenv         - http://www.virtualenv.org/&lt;br /&gt;
&lt;br /&gt;
Note, MongoDB can get to be pretty huge.  You might want to consider&lt;br /&gt;
looking at [[Scaling Down]] if you are installing this on a smallish&lt;br /&gt;
instance.&lt;br /&gt;
&lt;br /&gt;
=== GNU/Linux ===&lt;br /&gt;
&lt;br /&gt;
==== Debian and derivatives ====&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Debian, Mint, or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo apt-get install mongodb git-core python python-dev python-lxml python-imaging python-virtualenv}}&lt;br /&gt;
&lt;br /&gt;
==== Fedora / RedHat(?) ====&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|yum install mongodb-server python-paste-deploy python-paste-script git-core python python-devel python-lxml python-imaging python-virtualenv}}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
On Mac OS X Lion:&lt;br /&gt;
&lt;br /&gt;
Download the Newest Python.&lt;br /&gt;
&lt;br /&gt;
Git is already installed.&lt;br /&gt;
&lt;br /&gt;
Install MongoDB from these instructions: http://www.mongodb.org/display/DOCS/Quickstart+OS+X&lt;br /&gt;
&lt;br /&gt;
Python-lxml: http://muffinresearch.co.uk/archives/2009/03/05/install-lxml-on-osx/ with sudo&lt;br /&gt;
&lt;br /&gt;
Python Imaging Library (PIL): http://code.google.com/appengine/docs/python/images/installingPIL.html#mac&lt;br /&gt;
&lt;br /&gt;
Libjpeg &amp;amp; Libpng: http://ethan.tira-thompson.org/Mac_OS_X_Ports.html Combo Installer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions, Windows, or Mac OS X to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with virtualenv ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: {{Cmd|git clone &amp;lt;nowiki&amp;gt;git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# Set up the in-package virtualenv: {{Cmd|virtualenv . &amp;amp;&amp;amp; ./bin/python setup.py develop}}&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
(If you have troubles in the remaining steps, consider try installing&lt;br /&gt;
virtualenv with one of the flags --setuptools, --distribute or possibly --no-site-packages.  Additionally, if your system has python3.X as the default, you might need to do virtualenv --python=python2.7 or --python=python2.6)&lt;br /&gt;
&lt;br /&gt;
If you have problems, please [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.&lt;br /&gt;
&lt;br /&gt;
To do that, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/python setup.py develop --upgrade &amp;amp;&amp;amp; ./bin/gmg migrate}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically&lt;br /&gt;
available as long as you&#039;re doing a git pull or etc.&lt;br /&gt;
&lt;br /&gt;
== Running Mongo Database ==&lt;br /&gt;
&lt;br /&gt;
Startup the Database if you haven&#039;t already.  On most systems, this&lt;br /&gt;
should be started automatically.  If not, consult the documentation&lt;br /&gt;
for your distribution or the MongoDB docs themselves.&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./lazyserver.sh}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
By default, the instance is not sending out confirmation mails. Instead they are redirected to the standard output (the console) of lazyserver.sh.&lt;br /&gt;
&lt;br /&gt;
You can change this behavior setting &amp;lt;code&amp;gt;email_debug_mode&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; in mediagoblin.ini&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/paster serve paste.ini --reload}}&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./runtests.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/gmg shell}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo mongod --repair}}&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|gmg wipealldata}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
Now you should visit our latest list of [http://bugs.foocorp.net/projects/mediagoblin/issues?query_id=3 bite-sized issues] because squishing bugs is messy fun. If you&#039;re interested in other things to work on, or need help getting started on a bug, let us know on [http://mediagoblin.org/join/ the mailing list] or on the [http://mediagoblin.org/join/ IRC channel].&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=376</id>
		<title>Meeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Meeting&amp;diff=376"/>
		<updated>2011-11-10T13:54:04Z</updated>

		<summary type="html">&lt;p&gt;Willkg: adding section for next meeting; adding plugin system topic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MediaGoblin Monthly Meeting =&lt;br /&gt;
&lt;br /&gt;
At 16:00 UTC the first saturday of each month, unless otherwise announced on the [http://lists.mediagoblin.org/pipermail/devel/ mailing list], there is an IRC meeting. The idea is to discuss the past month, what happened, what was good, what should be done better. And to create roadmap for the upcoming month and assign tasks to people willing to handle them.&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/ IRC meeting logs]&lt;br /&gt;
&lt;br /&gt;
= Upcoming and Recent Meetings =&lt;br /&gt;
&lt;br /&gt;
== 2011-12 (upcoming 2011-12-03) ==&lt;br /&gt;
&lt;br /&gt;
Preliminary Agenda (in progress):&lt;br /&gt;
&lt;br /&gt;
* We plan to create a plugin system.  Do we want to create that soon or push it off until things settle a bit more?  ([[User:Willkg|Willkg]] 08:54, 10 November 2011 (EST))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 2011-11 (held on 2011-11-05) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary Agenda and preliminary results (in progress):&lt;br /&gt;
* What happened in the last month, what was good, what could be better next time?&lt;br /&gt;
** Release:&lt;br /&gt;
*** Good: 0.1.0 released!&lt;br /&gt;
*** Bad: postponing vs not postponing&lt;br /&gt;
** Sites and deployment documentation:&lt;br /&gt;
*** Good: new mediagoblin.org&lt;br /&gt;
*** Good: deployment documentation&lt;br /&gt;
*** Bad: py-bcrypt’s site was down just after the release, so the virtualenv deployment didn’t work, and it wasn’t clear how to fix it.&lt;br /&gt;
** Live instances:&lt;br /&gt;
*** Joar has a live instance!&lt;br /&gt;
*** But what does it mean? Should ordinary users start using it?&lt;br /&gt;
**** Details at [[User:Joar/mg.wandborg.se]] -- [[User:Joar|Joar]] 17:01, 6 November 2011 (EST)&lt;br /&gt;
*** nyergler added a note about &amp;quot;heartbeat&amp;quot;/status to API notes&lt;br /&gt;
* What should be done next month?&lt;br /&gt;
* Starting real work on federation (via OStatus)... and do we split any of this work out into its own library?&lt;br /&gt;
* An API&lt;br /&gt;
* Creative Commons licensing tools&lt;br /&gt;
* Merging in the multimedia/video branch&lt;br /&gt;
*: (this is *very close* already actually thanks to the hard work of Joar Wandborg!  But we need some help on the gstreamer front to fix a few issues... if you or someone you know is an expert in this area we could really use their help to make the videos that come out smoother!)&lt;br /&gt;
* Rollover items from 0.1.0&lt;br /&gt;
* Possibility of an [[SQL Database Backend]]?&lt;br /&gt;
* Multiple file upload interface&lt;br /&gt;
* Drag and drop uploads interface (probably related!)&lt;br /&gt;
&lt;br /&gt;
[http://mediagoblin.org/irclogs/irc_meeting_2011-11-05.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
== 2011-10 (held on 2011-10-01) ==&lt;br /&gt;
This month&#039;s meeting was a quickly announced short meeting. The project is getting back on track and next month&#039;s meeting will be scheduled more properly. A bunch of people were around.&lt;br /&gt;
&lt;br /&gt;
The most important decisions:&lt;br /&gt;
* The project will keep monthly releases. They&#039;re the heartbeat of the project.&lt;br /&gt;
* Release 0.1.0 this sunday/monday.&lt;br /&gt;
* New website will hopefully be deployed in the next few days.&lt;br /&gt;
* And the following things are planned to happen during this month: Most importantly federation. The developers have decided to make up their minds on what federation aactually should mean for MediaGoblin. Concerning code, probably &amp;quot;activity streams&amp;quot; are the first goal. If there is no (good) python library for this, a new stand alone library may be created. If so, a name for it has to be found. It should have something about communication in it. And the other thing to happen during this month is an ongoing discussion about &amp;quot;bus factor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/irc_meeting_2011-10-01.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
== 2011-09 (held on 2011-09-03) ==&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/irc_meeting_2011-09-03.txt IRC log]&lt;br /&gt;
&lt;br /&gt;
== 2011-08 (held on 2011-08-06) ==&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/irc_meeting_2011-08-06.txt IRC log]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=241</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Main_Page&amp;diff=241"/>
		<updated>2011-09-04T13:31:31Z</updated>

		<summary type="html">&lt;p&gt;Willkg: overhaul of the front page to be more contributor-oriented per previous conversations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Want to Join the MediaGoblin Community? =&lt;br /&gt;
&lt;br /&gt;
We’re really glad that you want to join the MediaGoblin community!&lt;br /&gt;
&lt;br /&gt;
There are a variety of ways to help and support MediaGoblin and to join the team.  If you want to code, great, if not, even better!  MediaGoblin interested contributors in many different roles: users, system administrators, technical writers, testers, evangelists, UI/UX and graphics designers, cheerleaders, and dreamers.&lt;br /&gt;
&lt;br /&gt;
This wiki covers a variety of ways that you can get involved with MediaGoblin as well as instructions on how to get started.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hang out with the MediaGoblin folk ==&lt;br /&gt;
&lt;br /&gt;
MediaGoblin has a mailing list and an IRC channel where we hang out.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
Please drop by and say “Hi!”  And, if you’re looking for something to do, just ask---there’s always work to be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Bugs / Triage Bugs ==&lt;br /&gt;
&lt;br /&gt;
Issue reports are critical for all projects.  Identified bugs give developers a basis for beginning work, and providing an idea of what features and issues are most important to users and the overall usability of the software.  If you identify errors, flaws, unexpected behaviors, or deficits that impede use, file a bug.&lt;br /&gt;
&lt;br /&gt;
* [[File Bugs]] -- notes on filing new bugs/issues/feature requests&lt;br /&gt;
* [[Triage Bugs]] -- notes on triaging&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Code / Fix Code ==&lt;br /&gt;
&lt;br /&gt;
If you are a coder and you would like to write code, the repository is hosted on gitorious. Clone or fork the repository and start poking around. Become familiar with this manual for an overview of how the software works and is used. Consider the contributor wiki for more information about the project, our preferred methods, and guides for developing MediaGoblin. We even have tips on becoming a coder and we’re willing to help!&lt;br /&gt;
&lt;br /&gt;
* [[Development quick start]] - get MediaGoblin running on your own machine so you can hack on it&lt;br /&gt;
* [[HackingHowto|Hacking]] - notes on making and sending in code contributions&lt;br /&gt;
** [[BeginnersCorner|Beginner&#039;s Corner]] - resources for those who are new to Python, MongoDB, or Git.&lt;br /&gt;
** We&#039;ll be adding some distribution/OS specific hacking guides as separate pages soon.&lt;br /&gt;
* [[Git workflow]] - How to go about submitting patches via git.&lt;br /&gt;
* [[Templating]] - How our templating structure is set up&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Send Encouragement / Spread the Word ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, a nice word, simple encouragement, and interest in the work we’re doing is enough to inspire a tizzy of productive work.  Just a bit more interest and encouragement can even make the difference between a complete feature and limited functionality; between a completed milestone and lost momentum.&lt;br /&gt;
&lt;br /&gt;
Similarly, MediaGoblin, and the movement for free network services, is always in need of encouragement.  Use free network services, understand the principals behind the movement, be able to articulate the benefits of free network services and the problems with psudo-free applications that don’t respect the users’ freedom.&lt;br /&gt;
&lt;br /&gt;
Write a blog post, post a status update, drop by the listserv or join #mediagoblin on freenode.net and let us know.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Write Documentation / Edit Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation quick start]] - How to contribute to the documentation effort.&lt;br /&gt;
* [[ManualStandards]] - covers the standards for writing the user manual (forthcoming.) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTests|Unit Tests]] - all about the unit tests&lt;br /&gt;
* [[User Experience]] - user experience testing.  Includes link to an instance you can try!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Translate MediaGoblin ==&lt;br /&gt;
&lt;br /&gt;
If you know English and another language and feel comfortable translating elements of the interface or even the documentation, we’d love to have help translating the software and resources.&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] - How to translate stuff or update the translations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Become a User ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
We’re building MediaGoblin for us and for you but really you’re one of us and I am you and we are we and MediaGoblin is the walrus.&lt;br /&gt;
&lt;br /&gt;
We&#039;re planning to launch our own public instance of MediaGoblin in the near future--probably in the September/October 2011 time frame.  When we do, sign up for an account, use the service and relish in the thought that this service comes with a heaping side of Freedom and you can salt and pepper it to your liking.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Help Others ==&lt;br /&gt;
&lt;br /&gt;
Have you spent time with MediaGoblin?  If so, your experience and wisdom are invaluable and you’re the best person we can think of to help other users with their questions.&lt;br /&gt;
&lt;br /&gt;
Hang out on the IRC channel and help answer new peoples&#039; questions.  See [http://mediagoblin.org/join/ our join page] for links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Run your own MediaGoblin Instance ==&lt;br /&gt;
&lt;br /&gt;
Are there things about our instance you want to change?  Are there things about other instances you wish were different?  Want to test upcoming changes?  Want to create patches to implement things you need?  That’s great—you can run your own instance!&lt;br /&gt;
&lt;br /&gt;
* [[Configure_MediaGoblin|Configuration]] - Learn about MediaGoblin configuration files and file options.&lt;br /&gt;
* [[Deployment]] - General deployment advice&lt;br /&gt;
* [[Scaling Down]] - Minimizing MediaGoblin&#039;s resource requirements&lt;br /&gt;
* [[Virtual Machine Hosting]] - Deploy your own publicly available MediaGoblin server using [http://aws.amazon.com/free/?utm_source=adwords&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=CPC_Google_AWS_ec2&amp;amp;utm_content=TextV01_PP_V01_EC2&amp;amp;trk=CPC_Google_AWS_ec2 Amazon&#039;s free EC2 tier].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a Theme ==&lt;br /&gt;
&lt;br /&gt;
Coming soon!&lt;br /&gt;
&lt;br /&gt;
MedaGoblin development is premised on the idea that the entire interface for the platform be completely theme-able.  If you have a design or theming background, consider developing themes for MediaGoblin.  New themes help test the theming system, provide attractive and appealing interfaces for prospective users.  If you want to start a new theme but don’t know where to start, touch base with the development community on the list or in the IRC channel for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical project documentation =&lt;br /&gt;
&lt;br /&gt;
* [[DesignDecisions]] - covers design decisions (FIXME - this needs to be split up)&lt;br /&gt;
* [[Storage]] - How MediaGoblin&#039;s internal storage system works.&lt;br /&gt;
* [[Processing]] - What happens after you submit your image/video/etc?  Processing!  More about that.&lt;br /&gt;
* [https://gitorious.org/mediagoblin/mediagoblin/blobs/master/extlib/README External Library Policy] - covers use of external libraries&lt;br /&gt;
* [[User:Cwebber/braindumps]] - Chris Webber&#039;s braindumps (you can help refactoring these into real sections of the site!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Inner workings of the secret sanctum =&lt;br /&gt;
&lt;br /&gt;
* [http://mediagoblin.org/irclogs/ IRC meeting logs]&lt;br /&gt;
* [[IRCBot]] - covers our irc bot&lt;br /&gt;
* [[ReleaseProcess|Release Process]] - covers the release process&lt;br /&gt;
* [[Update the website]] - Learn how to update mediagoblin.org!&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Triage_Bugs&amp;diff=240</id>
		<title>Triage Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Triage_Bugs&amp;diff=240"/>
		<updated>2011-09-04T13:19:27Z</updated>

		<summary type="html">&lt;p&gt;Willkg: initial triage bugs page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The triage process involves reviewing bugs, removing duplicates, validating that the issues described are reproducible, ensuring that the exact behavior is properly documented, diagnosing the cause of each issue, and working with developers to ensure that critical bugs get addressed. In many cases, developers do this kind of work as a matter of course, but one need not be able to code in order to help working with bugs.&lt;br /&gt;
&lt;br /&gt;
To triage bugs, go to the bug tracker and begin reviewing the open issues. If you are able, attempt to:&lt;br /&gt;
&lt;br /&gt;
* ensure that one or two people in addition to the initial reporter have been able to reproduce the issue.&lt;br /&gt;
* document the issue more clearly. If you had any trouble reproducing the issue, provide any elucidating information that you can to help others solve the problem more effectively.&lt;br /&gt;
* find a way to resolve the problem or provide a workaround.&lt;br /&gt;
&lt;br /&gt;
For help, instructions, and suggestions be in touch with the development community on the list or in the IRC channel for more information. With many eyes, all bugs are shallow.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Filing_Bugs&amp;diff=239</id>
		<title>Filing Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Filing_Bugs&amp;diff=239"/>
		<updated>2011-09-04T13:18:28Z</updated>

		<summary type="html">&lt;p&gt;Willkg: moved Filing Bugs to File Bugs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[File Bugs]]&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=File_Bugs&amp;diff=238</id>
		<title>File Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=File_Bugs&amp;diff=238"/>
		<updated>2011-09-04T13:18:28Z</updated>

		<summary type="html">&lt;p&gt;Willkg: moved Filing Bugs to File Bugs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MediaGoblin uses a bug tracker called Redmine.&lt;br /&gt;
&lt;br /&gt;
Our instance is located at http://bugs.foocorp.net/projects/mediagoblin&lt;br /&gt;
&lt;br /&gt;
The most useful bug reports have the following components:&lt;br /&gt;
&lt;br /&gt;
* A short summary that’s 60 characters or less.&lt;br /&gt;
* A description that describes the issue (bug, feature request, ...) as well as the context. Consider:&lt;br /&gt;
** If you think you’ve found a bug, can you reproduce it in a controlled environment? Is the issue specific to a browser, computer, image, media type, or other dimension? All data helps.&lt;br /&gt;
** If you’re submitting a feature request, are there related links on the Internet for more information? Would you be willing to help implement or test the feature?&lt;br /&gt;
&lt;br /&gt;
That’s it!&lt;br /&gt;
&lt;br /&gt;
The better the issue report, the easier it is to address the bug, and the more likely that the developers will be able to resolve the issue. If someone has questions about the bug report, they may reach out to the reporter directly.&lt;br /&gt;
&lt;br /&gt;
If you get a response after a couple of weeks, find someone on IRC.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=File_Bugs&amp;diff=237</id>
		<title>File Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=File_Bugs&amp;diff=237"/>
		<updated>2011-09-04T13:17:52Z</updated>

		<summary type="html">&lt;p&gt;Willkg: moving bug filing material to a separate page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MediaGoblin uses a bug tracker called Redmine.&lt;br /&gt;
&lt;br /&gt;
Our instance is located at http://bugs.foocorp.net/projects/mediagoblin&lt;br /&gt;
&lt;br /&gt;
The most useful bug reports have the following components:&lt;br /&gt;
&lt;br /&gt;
* A short summary that’s 60 characters or less.&lt;br /&gt;
* A description that describes the issue (bug, feature request, ...) as well as the context. Consider:&lt;br /&gt;
** If you think you’ve found a bug, can you reproduce it in a controlled environment? Is the issue specific to a browser, computer, image, media type, or other dimension? All data helps.&lt;br /&gt;
** If you’re submitting a feature request, are there related links on the Internet for more information? Would you be willing to help implement or test the feature?&lt;br /&gt;
&lt;br /&gt;
That’s it!&lt;br /&gt;
&lt;br /&gt;
The better the issue report, the easier it is to address the bug, and the more likely that the developers will be able to resolve the issue. If someone has questions about the bug report, they may reach out to the reporter directly.&lt;br /&gt;
&lt;br /&gt;
If you get a response after a couple of weeks, find someone on IRC.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Template:Needswork&amp;diff=167</id>
		<title>Template:Needswork</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Template:Needswork&amp;diff=167"/>
		<updated>2011-08-19T19:30:18Z</updated>

		<summary type="html">&lt;p&gt;Willkg: fixing a missing noinclude&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: thin solid black; background: yellow; margin: 2em; padding: 1em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This page is marked for rewriting.  We know it could be better!  If you get confused, please ask for help on [http://mediagoblin.org/join/ IRC].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Usage ==&lt;br /&gt;
Put this template at the top of the page for pages that need to be overhauled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{Needswork}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=166</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=166"/>
		<updated>2011-08-19T19:03:00Z</updated>

		<summary type="html">&lt;p&gt;Willkg: marking this page as needing work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Needswork}}&lt;br /&gt;
&lt;br /&gt;
= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
* Python Imaging Library (PIL) - http://www.pythonware.com/products/pil/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Debian, Mint, or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo apt-get install mongodb git-core python python-dev python-lxml python-imaging}}&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|yum install mongodb-server python-paste-deploy python-paste-script git-core python python-devel python-lxml python-imaging}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
On Mac OS X Lion:&lt;br /&gt;
&lt;br /&gt;
Download the Newest Python.&lt;br /&gt;
&lt;br /&gt;
Git is already installed.&lt;br /&gt;
&lt;br /&gt;
Install MongoDB from these instructions: http://www.mongodb.org/display/DOCS/Quickstart+OS+X&lt;br /&gt;
&lt;br /&gt;
Python-lxml: http://muffinresearch.co.uk/archives/2009/03/05/install-lxml-on-osx/ with sudo&lt;br /&gt;
&lt;br /&gt;
Python Imaging Library (PIL): http://code.google.com/appengine/docs/python/images/installingPIL.html#mac&lt;br /&gt;
&lt;br /&gt;
Libjpeg &amp;amp; Libpng: http://ethan.tira-thompson.org/Mac_OS_X_Ports.html Combo Installer&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions or Mac OS X to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: {{Cmd|git clone &amp;lt;nowiki&amp;gt;git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# Bootstrap and run buildout: {{Cmd|cd mediagoblin}} and then one of the following:&lt;br /&gt;
#* {{Cmd|python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout}}, &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
#* {{Cmd|python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why would you want one over the other?  If the first doesn&#039;t work, then try the second.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
If you have problems, please [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.&lt;br /&gt;
&lt;br /&gt;
To do that, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running Mongo Database ==&lt;br /&gt;
&lt;br /&gt;
Startup the Database: {{Cmd|./mongodb-xxxxxxx/bin/mongod}}.&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./lazyserver.sh}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/paster serve paste.ini --reload}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&amp;lt;/nowiki&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./runtests.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/gmg shell}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo mongod --repair}}&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|gmg wipealldata}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Template:Needswork&amp;diff=165</id>
		<title>Template:Needswork</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Template:Needswork&amp;diff=165"/>
		<updated>2011-08-19T19:01:50Z</updated>

		<summary type="html">&lt;p&gt;Willkg: creating needswork template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: thin solid black; background: yellow; margin: 2em; padding: 1em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This page is marked for rewriting.  We know it could be better!  If you get confused, please ask for help on [http://mediagoblin.org/join/ IRC].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
== Usage ==&lt;br /&gt;
Put this template at the top of the page for pages that need to be overhauled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{Needswork}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=126</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=126"/>
		<updated>2011-08-14T00:21:13Z</updated>

		<summary type="html">&lt;p&gt;Willkg: redid all commands to use cmd template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Debian, Mint, or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo apt-get install mongodb git-core python python-dev python-lxml python-imaging}}&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|yum install mongodb-server python-paste-deploy python-paste-script git-core python python-devel python-lxml}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: {{Cmd|git clone &amp;lt;nowiki&amp;gt;git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# Bootstrap and run buildout: {{Cmd|cd mediagoblin}} and then one of the following:&lt;br /&gt;
#* {{Cmd|python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout}}, &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
#* {{Cmd|python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why would you want one over the other?  If the first doesn&#039;t work, then try the second.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
If you have problems, please [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.&lt;br /&gt;
&lt;br /&gt;
To do that, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./lazyserver.sh}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/paster serve paste.ini --reload}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&amp;lt;/nowiki&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./runtests.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./bin/gmg shell}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo mongod --repair}}&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|gmg wipealldata}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=125</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=125"/>
		<updated>2011-08-14T00:07:29Z</updated>

		<summary type="html">&lt;p&gt;Willkg: fixing the git:// link so it&amp;#039;s not a link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Debian, Mint, or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install mongodb git-core python python-dev \&lt;br /&gt;
         python-lxml python-imaging&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
    yum install mongodb-server python-paste-deploy python-paste-script \&lt;br /&gt;
         git-core python python-devel python-lxml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: {{Cmd|git clone &amp;lt;nowiki&amp;gt;git://gitorious.org/mediagoblin/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# Bootstrap and run buildout: &amp;lt;tt&amp;gt;cd mediagoblin&amp;lt;/tt&amp;gt; and then one of the following:&lt;br /&gt;
#* &amp;lt;tt&amp;gt;python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;, &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
#* &amp;lt;tt&amp;gt;python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why would you want one over the other?  If the first doesn&#039;t work, then try the second.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
If you have problems, please [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.  To do that, run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, do:&lt;br /&gt;
&lt;br /&gt;
    rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
    ./lazyserver.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
    ./bin/paster serve paste.ini --reload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./runtests.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/gmg shell&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
    sudo mongod --repair&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
    gmg wipealldata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Template:Cmd&amp;diff=124</id>
		<title>Template:Cmd</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Template:Cmd&amp;diff=124"/>
		<updated>2011-08-14T00:00:44Z</updated>

		<summary type="html">&lt;p&gt;Willkg: switching span to tt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tt style=&amp;quot;border: thin solid #bbb; background: #ffffdd; padding-left: 5px; padding-right: 5px;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/tt&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Usage ==&lt;br /&gt;
This allows you to more easily specify command line text that sticks out.&lt;br /&gt;
&lt;br /&gt;
Copy and paste this in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{CMD|some command line here}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=123</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=123"/>
		<updated>2011-08-13T23:59:56Z</updated>

		<summary type="html">&lt;p&gt;Willkg: switching a command to cmd&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Hacking HOWTO =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== So you want to hack on GNU MediaGoblin? ==&lt;br /&gt;
&lt;br /&gt;
First thing to do is check out the [http://mediagoblin.org/join/ web site] where we list all the project&lt;br /&gt;
infrastructure including:&lt;br /&gt;
&lt;br /&gt;
* the IRC channel&lt;br /&gt;
* the mailing list&lt;br /&gt;
* the issue tracker&lt;br /&gt;
&lt;br /&gt;
Additionally, we have information on how to get involved, who to talk&lt;br /&gt;
to, what needs to be worked on, and other things besides!&lt;br /&gt;
&lt;br /&gt;
Second thing to do is take a look at :ref:`codebase-chapter` where&lt;br /&gt;
we&#039;ve started documenting how GNU MediaGoblin is built and how to add&lt;br /&gt;
new things.&lt;br /&gt;
&lt;br /&gt;
Third you&#039;ll need to get the requirements.&lt;br /&gt;
&lt;br /&gt;
Fourth, you&#039;ll need to build a development environment.  We use buildout,&lt;br /&gt;
but if you want to use virtualenv, there&#039;s a set of mediocre not-very-supported&lt;br /&gt;
steps in the [https://gitorious.org/mediagoblin/pages/Home evil wiki].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting requirements ==&lt;br /&gt;
&lt;br /&gt;
First, you need to have the following installed before you can build&lt;br /&gt;
an environment for hacking on GNU MediaGoblin:&lt;br /&gt;
&lt;br /&gt;
* Python 2.6 or 2.7  - http://www.python.org/ (You&#039;ll need Python as well as the dev files for building modules.)&lt;br /&gt;
* python-lxml        - http://lxml.de/&lt;br /&gt;
* git                - http://git-scm.com/&lt;br /&gt;
* MongoDB            - http://www.mongodb.org/&lt;br /&gt;
&lt;br /&gt;
If you&#039;re running Debian GNU/Linux or a Debian-derived distribution&lt;br /&gt;
such as Debian, Mint, or [http://bugs.foocorp.net/issues/478 Ubuntu 10.10+], running the following should install these&lt;br /&gt;
requirements:&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install mongodb git-core python python-dev \&lt;br /&gt;
         python-lxml python-imaging&lt;br /&gt;
&lt;br /&gt;
On Fedora:&lt;br /&gt;
&lt;br /&gt;
    yum install mongodb-server python-paste-deploy python-paste-script \&lt;br /&gt;
         git-core python python-devel python-lxml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You can help:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have instructions for other GNU/Linux distributions to set&lt;br /&gt;
up requirements, let us know!&lt;br /&gt;
&lt;br /&gt;
== How to set up and maintain an environment for hacking with buildout ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
No additional requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create a development environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the requirements, follow these steps:&lt;br /&gt;
&lt;br /&gt;
# Clone the repository: {{Cmd|git clone git://gitorious.org/mediagoblin/mediagoblin.git}}&lt;br /&gt;
# Bootstrap and run buildout: &amp;lt;tt&amp;gt;cd mediagoblin&amp;lt;/tt&amp;gt; and then one of the following:&lt;br /&gt;
#* &amp;lt;tt&amp;gt;python bootstrap.py &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;, &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
#* &amp;lt;tt&amp;gt;python bootstrap.py --distribute &amp;amp;&amp;amp; ./bin/buildout&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why would you want one over the other?  If the first doesn&#039;t work, then try the second.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!  Using this method, buildout should create a &amp;lt;tt&amp;gt;user_dev&amp;lt;/tt&amp;gt;&lt;br /&gt;
directory, in which certain things will be stored (media, beaker&lt;br /&gt;
session stuff, etc).  You can change this, but for development&lt;br /&gt;
purposes this default should be fine.&lt;br /&gt;
&lt;br /&gt;
If you have problems, please [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for dependency changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
While hacking on GNU MediaGoblin over time, you&#039;ll eventually have to&lt;br /&gt;
update your development environment because the dependencies have&lt;br /&gt;
changed.  To do that, run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/buildout &amp;amp;&amp;amp; ./bin/gmg migrate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Updating for code changes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You don&#039;t need to do anything---code changes are automatically available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deleting your buildout&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At some point, you may want to delete your buildout.  Perhaps it&#039;s to&lt;br /&gt;
start over.  Perhaps it&#039;s to test building development environments&lt;br /&gt;
with buildout.&lt;br /&gt;
&lt;br /&gt;
To do this, do:&lt;br /&gt;
&lt;br /&gt;
    rm -rf bin develop-eggs eggs mediagoblin.egg-info parts user_dev&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the server ==&lt;br /&gt;
&lt;br /&gt;
If you want to get things running quickly and without hassle, just&lt;br /&gt;
run:&lt;br /&gt;
&lt;br /&gt;
    ./lazyserver.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will start up a python server where you can begin playing with&lt;br /&gt;
mediagoblin.  It will also run celery in &amp;quot;always eager&amp;quot; mode so you&lt;br /&gt;
don&#039;t have to start a separate process for it.&lt;br /&gt;
&lt;br /&gt;
This is fine in development, but if you want to actually run celery&lt;br /&gt;
separately for testing (or deployment purposes), you&#039;ll want to run&lt;br /&gt;
the server independently:&lt;br /&gt;
&lt;br /&gt;
    ./bin/paster serve paste.ini --reload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running celeryd ==&lt;br /&gt;
&lt;br /&gt;
If you aren&#039;t using &amp;lt;tt&amp;gt;./lazyserver.sh&amp;lt;/tt&amp;gt; or otherwise aren&#039;t running celery&lt;br /&gt;
in always eager mode, you&#039;ll need to do this if you want your media to&lt;br /&gt;
process and actually show up.  It&#039;s probably a good idea in&lt;br /&gt;
development to have the web server (above) running in one terminal and&lt;br /&gt;
celeryd in another window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running the test suite ==&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./runtests.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running a shell ==&lt;br /&gt;
&lt;br /&gt;
If you want a shell with your database pre-setup and an instantiated&lt;br /&gt;
application ready and at your fingertips....&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
    ./bin/gmg shell&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== pymongo.errors.AutoReconnect: could not find master/primary ===&lt;br /&gt;
&lt;br /&gt;
If you see this:&lt;br /&gt;
&lt;br /&gt;
    pymongo.errors.AutoReconnect: could not find master/primary&lt;br /&gt;
&lt;br /&gt;
then make sure mongodb is installed and running.&lt;br /&gt;
&lt;br /&gt;
If it&#039;s installed, check the mongodb log.  On my machine, that&#039;s &lt;br /&gt;
&amp;lt;tt&amp;gt;/var/log/mongodb/mongodb.log&amp;lt;/tt&amp;gt;.  If you see something like:&lt;br /&gt;
&lt;br /&gt;
    old lock file: /var/lib/mongodb/mongod.lock.  probably means...&lt;br /&gt;
&lt;br /&gt;
in that case you might have had an unclean shutdown.  Try:&lt;br /&gt;
&lt;br /&gt;
    sudo mongod --repair&lt;br /&gt;
&lt;br /&gt;
If that didn&#039;t work, just delete the lock file and relaunch mongodb.&lt;br /&gt;
&lt;br /&gt;
Anyway, then start the mongodb server in whatever way is appropriate&lt;br /&gt;
for your distro / OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Wiping your user data ==&lt;br /&gt;
&lt;br /&gt;
You can completely wipe all data from the instance by doing:&lt;br /&gt;
&lt;br /&gt;
    gmg wipealldata&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unless you&#039;re doing development and working on and testing creating&lt;br /&gt;
a new instance, you will probably never have to do this.  Will&lt;br /&gt;
plans to do this work and thus he documented it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Django programmers ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re not using Django, but the codebase is very Django-like in its&lt;br /&gt;
structure.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;routing.py&amp;lt;/tt&amp;gt; is like &amp;lt;tt&amp;gt;urls.py&amp;lt;/tt&amp;gt; in Django&lt;br /&gt;
* &amp;lt;tt&amp;gt;models.py&amp;lt;/tt&amp;gt; has mongokit ORM definitions&lt;br /&gt;
* &amp;lt;tt&amp;gt;views.py&amp;lt;/tt&amp;gt; is where the views go&lt;br /&gt;
&lt;br /&gt;
We&#039;re using MongoDB.  Basically, instead of a relational database with&lt;br /&gt;
tables, you have a big JSON structure which acts a lot like a Python&lt;br /&gt;
dict.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YouCanHelp&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there are other things that you think would help orient someone&lt;br /&gt;
new to GNU MediaGoblin but coming from Django, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bite-sized bugs to start with ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;May 3rd, 2011&#039;&#039;&#039;:  We don&#039;t have a list of bite-sized bugs, yet, but&lt;br /&gt;
this is important to us.  If you&#039;re interested in things to work on,&lt;br /&gt;
let us know on [http://mediagoblin.org/join/ the mailing list] or&lt;br /&gt;
on the [http://mediagoblin.org/join/ IRC channel].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tips for people new to coding ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Python ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin is written using a programming language called [http://python.org/ Python].&lt;br /&gt;
&lt;br /&gt;
There are two different incompatible iterations of Python which I&#039;ll&lt;br /&gt;
refer to as Python 2 and Python 3.  GNU MediaGoblin is written in&lt;br /&gt;
Python 2 and requires Python 2.6 or 2.7.  At some point, we might&lt;br /&gt;
switch to Python 3, but that&#039;s a future thing.&lt;br /&gt;
&lt;br /&gt;
You can learn how to code in Python 2 from several excellent books&lt;br /&gt;
that are freely available on the Internet:&lt;br /&gt;
&lt;br /&gt;
* [http://learnpythonthehardway.org/ Learn Python the Hard Way]&lt;br /&gt;
* [http://diveintopython.org/ Dive Into Python]&lt;br /&gt;
* [http://www.greenteapress.com/thinkpython/ Python for Software Design]&lt;br /&gt;
* [http://www.swaroopch.com/notes/Python A Byte of Python]&lt;br /&gt;
&lt;br /&gt;
These are all excellent texts.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You Can Help&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you know of other good quality Python tutorials and Python&lt;br /&gt;
tutorial videos, let us know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning Libraries GNU MediaGoblin uses ===&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin uses a variety of libraries in order to do what it&lt;br /&gt;
does.  These libraries are listed in the :ref:`codebase-chapter`&lt;br /&gt;
along with links to the project Web sites and documentation for the&lt;br /&gt;
libraries.&lt;br /&gt;
&lt;br /&gt;
There are a variety of Python-related conferences every year that have&lt;br /&gt;
sessions covering many aspects of these libraries.  You can find them&lt;br /&gt;
at [http://python.mirocommunity.org Python Miro Community] -- This is a shameless plug; Will Kahn-Greene runs Python Miro Community.&lt;br /&gt;
&lt;br /&gt;
If you have questions or need help, [http://mediagoblin.org/join/ let us know]!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning git ===&lt;br /&gt;
&lt;br /&gt;
git is an interesting and very powerful tool.  Like all powerful&lt;br /&gt;
tools, it has a learning curve.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to git, we highly recommend the following resources for&lt;br /&gt;
getting the hang of it:&lt;br /&gt;
&lt;br /&gt;
* [http://learn.github.com/p/intro.html Learn Git] --- the GitHub intro to git&lt;br /&gt;
* [http://progit.org/book/ Pro Git] --- fantastic book&lt;br /&gt;
* [http://gitcasts.com/ Git casts] --- screencast covering git usage&lt;br /&gt;
* [http://gitref.org/ Git Reference] --- Git reference that makes it easier to get the hang of git if you&#039;re coming from other version control systems&lt;br /&gt;
&lt;br /&gt;
There&#039;s also a git mission at [http://openhatch.org/ OpenHatch].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Learning other utilities ===&lt;br /&gt;
&lt;br /&gt;
The [http://openhatch.org/ OpenHatch] site has a series of&lt;br /&gt;
[http://openhatch.org/missions/ training missions] which are&lt;br /&gt;
designed to help you learn how to use these tools.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to tar, diff, patch and git, we highly recommend you sign&lt;br /&gt;
up with OpenHatch and do the missions.&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=Template:Cmd&amp;diff=122</id>
		<title>Template:Cmd</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=Template:Cmd&amp;diff=122"/>
		<updated>2011-08-13T23:59:15Z</updated>

		<summary type="html">&lt;p&gt;Willkg: Created page with &amp;quot;&amp;lt;span style=&amp;quot;border: thin solid #bbb; background: #ffffdd; padding-left: 5px; padding-right: 5px;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt; == Usage == This allows you to more easily specify co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;border: thin solid #bbb; background: #ffffdd; padding-left: 5px; padding-right: 5px;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Usage ==&lt;br /&gt;
This allows you to more easily specify command line text that sticks out.&lt;br /&gt;
&lt;br /&gt;
Copy and paste this in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{{CMD|some command line here}}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Willkg</name></author>
	</entry>
</feed>