<?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=Kardan</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=Kardan"/>
	<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/Special:Contributions/Kardan"/>
	<updated>2026-05-04T19:56:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=1884</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=1884"/>
		<updated>2017-02-09T22:34:58Z</updated>

		<summary type="html">&lt;p&gt;Kardan: /* Troubleshooting */ fill missing section&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/devel/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;
== Python 2 vs Python 3 ==&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin was originally written for Python 2, and much of the documentation on the wiki reflects that. However, since release v0.9.0, GNU MediaGoblin has attempted to provide support for Python 3. Unfortunately, not everything is working for Python 3 environments yet. Below is a non-exhaustive list of things that might not work if you set up GNU MediaGoblin a Python 3 environment.&lt;br /&gt;
&lt;br /&gt;
=== Python 3 Issues ===&lt;br /&gt;
&lt;br /&gt;
* fcgi - none of the flup packages ([https://pypi.python.org/pypi/flup flup], [https://pypi.python.org/pypi/flup-py3 flup-py3], [https://pypi.python.org/pypi/flup6 flup6]) appear to have proper support for Python 3.5.&lt;br /&gt;
* audio file spectrographs - [https://pypi.python.org/pypi/scikits.audiolab scikits.audiolab] [https://issues.mediagoblin.org/ticket/5467 appears to not work] in Python 3.&lt;br /&gt;
* Rackspace storage - the [https://pypi.python.org/pypi/python-cloudfiles cloudfiles] plugin may not work with Python 3.&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.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 0.7.0 or higher   - http://www.sqlalchemy.org/&lt;br /&gt;
* Pillow - http://python-pillow.org/&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;
* Node.js&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-gst-1.0 libjpeg8-dev autoconf nodejs npm nodejs-legacy}}&lt;br /&gt;
&lt;br /&gt;
==== Debian GNU/Linux jessie ====&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo apt-get install -y git-core python python-dev python-lxml python-imaging python-virtualenv libjpeg-dev autoconf nodejs npm nodejs-legacy python-gst-1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-libav python-numpy python-scipy libsndfile1-dev libasound2-dev libgstreamer-plugins-base1.0-dev}}&lt;br /&gt;
&lt;br /&gt;
==== Fedora / RedHat(?) / CentOS ====&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 nodejs}}&lt;br /&gt;
&lt;br /&gt;
===== On CentOS7: =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;epel-release&#039;&#039;&#039; is the prerequisite for most of the below listed packages&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum install epel-release}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum update}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum install python-paste-deploy python-paste-script \ git-core python python-devel python-lxml python-imaging \ python-virtualenv npm automake nginx gcc}}&lt;br /&gt;
&lt;br /&gt;
for video to work correctly (as per [https://mediagoblin.readthedocs.io/en/stable/siteadmin/media-types.html?highlight=video#video Enabling Media-Types Video]) you may choose to install AWEL 3rd party repo which provides with the latest gstreamer bindings and more:&lt;br /&gt;
&lt;br /&gt;
* [http://awel.domblogger.net/7/media/x86_64/repoview/awel-media-release.html AWEL Repo],[https://media.librelamp.com/gst AWEL Gstreamer]&lt;br /&gt;
&lt;br /&gt;
once installed:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum install gstreamer1 gstreamer1-libav gstreamer1-plugins-base gstreamer1-plugins-base-tools gstreamer1-plugins-good gstreamer1-plugins-ugly gstreamer1-plugins-bad gstreamer1-python ffmpeg }}&lt;br /&gt;
&lt;br /&gt;
==== openSUSE ====&lt;br /&gt;
&lt;br /&gt;
This instructions might be incomplete.&lt;br /&gt;
Try on openSUSE 13.2 or 13.1:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|zypper install python-devel python-gstreamer-0_10 git-core python python-lxml python-Pillow python-virtualenv npm}}&lt;br /&gt;
&lt;br /&gt;
==== ArchLinux / Parabola ====&lt;br /&gt;
&lt;br /&gt;
The following command should work (&amp;lt;del&amp;gt;not tested on a new ArchLinux / Parabola install&amp;lt;/del&amp;gt;. tested, it works):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|pacman -S git python2 python2-lxml python2-pillow python2-virtualenv gstreamer0.10-python}}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
==== 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;
* Note for Pillow and lxml, you can: pip install Pillow lxml&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;
Pillow: http://pillow.readthedocs.org/en/3.0.x/installation.html#os-x-installation&lt;br /&gt;
&lt;br /&gt;
Libjpeg &amp;amp; Libpng: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html Combo Installer&lt;br /&gt;
&lt;br /&gt;
==== Mac OS X Snow Leopard ====&lt;br /&gt;
&lt;br /&gt;
# You will probably want to install MacPorts this will give you access to many free software packages in the same manner to apt-get and yum: https://www.macports.org/install.php&lt;br /&gt;
# Ensure you install Git and the command line tools: https://help.github.com/articles/set-up-git#platform-mac&lt;br /&gt;
# Once both of those are installed type this in your terminal and enter your password when prompted for it {{Cmd|sudo port install python27 py27-lxml py27-sqlalchemy py27-Pillow py27-virtualenv py27-gst-python py27-pastescript}}&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Windows ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Thanks wctype!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Getting requirements ====&lt;br /&gt;
&lt;br /&gt;
* Python 2.7  -  [http://www.python.org/download/ Download] &amp;lt;!-- http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi --&amp;gt;&lt;br /&gt;
* git - [https://github.com/msysgit/git/downloads Download] &amp;lt;!-- https://github.com/downloads/msysgit/git/Git-1.7.11-preview20120620.exe --&amp;gt;&lt;br /&gt;
* python-lxml - [http://pypi.python.org/pypi/lxml/2.3.5#downloads Tarball] [http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil Binaries] &amp;lt;!-- http://pypi.python.org/packages/source/l/lxml/lxml-2.3.5.tar.gz, http://www.lfd.uci.edu/~gohlke/pythonlibs/z8sp4uqu/lxml-2.3.5.win32-py2.7.exe --&amp;gt;&lt;br /&gt;
* Pillow - [http://pillow.readthedocs.org/en/3.0.x/installation.html#windows-installation Download] &amp;lt;!-- http://effbot.org/downloads/PIL-1.1.7.win32-py2.7.exe] --&amp;gt;&lt;br /&gt;
* virtualenv - [http://pypi.python.org/pypi/virtualenvwrapper-win/1.0.8#downloads Download] &amp;lt;!-- http://pypi.python.org/packages/source/v/virtualenvwrapper-win/virtualenvwrapper-win-1.0.8.zip --&amp;gt;&lt;br /&gt;
* OSSBuild project provides reasonably up-to-date binaries of GStreamer - [https://code.google.com/p/ossbuild/downloads/list Download] &amp;lt;!-- http://ossbuild.googlecode.com/files/GStreamer-WinBuilds-GPL-x86.msi --&amp;gt;&lt;br /&gt;
* py-bcrypt - [https://bitbucket.org/alexandrul/py-bcrypt/downloads/ Download] &amp;lt;!-- https://bitbucket.org/alexandrul/py-bcrypt/downloads/py-bcrypt-0.2.post1.win32-py2.7.exe --&amp;gt;&lt;br /&gt;
* Node JS&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, [http://mediagoblin.org/join/ 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;
&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://git.savannah.gnu.org/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* Make the environment: {{Cmd|./bootstrap.sh &amp;amp;&amp;amp; ./configure &amp;amp;&amp;amp; make}}&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 want to make sure things are working, consider running the test suite:&lt;br /&gt;
  {{Cmd|./runtests.sh}}&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;
== 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;
{{Cmd|git submodule update}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; MediaGoblin used to be hosted on gitorious.org, but that is moving to read-only mode, so we&#039;re now on Savannah.  If you have an old checkout, please update it by running the following:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git remote set-url origin git://git.savannah.gnu.org/mediagoblin.git}}&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;
See also [[UnitTests]] and [[Manual Functional Testing]].&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./runtests.sh}}&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;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you see a python error, search for the full line in [https://issues.mediagoblin.org/report trac] to find issues that mention the same . If it has not been fixed, you can update corresponding bug reports or open a new one.&lt;br /&gt;
&lt;br /&gt;
For developers it is a special pleasure to test and apply user submitted patches. Here is a good minimal [https://issues.mediagoblin.org/timeline?from=2016-02-28T17%3A16%3A39-05%3A00&amp;amp;precision=second git workflow] as example.&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|rm -rf mediagoblin.db kombu.db celery.db user_dev; ./bin/gmg dbupdate}}&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.&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;
== Showing off your work with PageKite ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re doing development with MediaGoblin, it&#039;s sometimes helpful to show off your work to gather feedback from other contributors.  A number of the MediaGoblin developers use something called [http://pagekite.net PageKite], which is a fellow free software web service which makes temporarily showing off work on your machine easy.  There&#039;s a [http://pagekite.net/wiki/Howto/UsePageKiteWithMediaGoblin/ tutorial on how to use PageKite and MediaGoblin together] available on the PageKite wiki.&lt;br /&gt;
&lt;br /&gt;
If you are doing a lot of MediaGoblin development, the PageKite people have graciously offered us a good amount of bandwidth at no cost in an effort to help out fellow free software projects.  If you&#039;ve been making significant contributions, PM Chris Webber on freenode (who is paroneayea there) and ask if you can be added to our group plan.&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>Kardan</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=User_Experience_Past_Notes&amp;diff=1883</id>
		<title>User Experience Past Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=User_Experience_Past_Notes&amp;diff=1883"/>
		<updated>2017-02-09T21:33:12Z</updated>

		<summary type="html">&lt;p&gt;Kardan: &amp;#039;&amp;#039;back to User Experience&amp;#039;&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;back to [[User Experience]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Notes for 0.0.4 =&lt;br /&gt;
&lt;br /&gt;
=== From Justin, on Mac OS X 10.6.8 with Google Chrome on 8.16.2011 ===&lt;br /&gt;
&lt;br /&gt;
* username incorporated hyper-link &amp;quot;sk00&#039;s media&amp;quot; looks cheesy if username is underlined/a different color in order to signify a link: i have a hunch hundreds of users will click their own user name/other user&#039;s user names expecting to be returned to the respective profile. this is strictly personal preference and entirely aesthetic.&lt;br /&gt;
&lt;br /&gt;
* is it possible to allow a user&#039;s profile website link to display tag other than &amp;quot;www.example.com/92921398/#/&amp;quot;? like using ahref code, but automatic? i know i&#039;m reluctant to click on and/or care about a link which appears like the example i&#039;ve provided.&lt;br /&gt;
&lt;br /&gt;
* CAPCHA! without this it is much more likely to become an image dumping plant like imageshack and the like.&lt;br /&gt;
&lt;br /&gt;
* UPDATE: my delete button is not linked/clickable/functioning.&lt;br /&gt;
&lt;br /&gt;
=== From Justin on XP with IE and Chrome on 8.17.2011 ===&lt;br /&gt;
&lt;br /&gt;
* OBSERVATION:My first account &amp;quot;sk00&amp;quot; was registered with a gmail address and your notification email went to the inbox, whereas my second account &amp;quot;sk00z&amp;quot; was registered with an old aol address and your notification email went into spam. I&#039;m almost certain it had to do with aol sorting for emails from senders named “notice&amp;quot; and gmail not caring so much.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
    This is probably caused by a difference in AOL and Gmail&#039;s spam detection systems. My best guess is that the MediaGoblin sender address does not pass in [http://en.wikipedia.org/wiki/Sender_Policy_Framework SPF] tests. Gmail&#039;s seems to care less about that than AOL.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
    I know from personal experience that Gmail does not always kick non-SPF-valid emails to the spambox.&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
    --[[User:Joar|Joar]] 14:35, 2 September 2011 (EDT)&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SUGGESTION:Are you thinking of including any sort of friend system? Not nearly as intrusive as facebook or myspace, but some way to follow another user as you would on tumblr and the like? If you were posting all sorts of bitchin&#039; images from the time your family went toad licking in Arkansas, then I know I&#039;d want to subscribe to your media channel for unrestrained access to future antics.&lt;br /&gt;
&lt;br /&gt;
=== From Deb, UX notes on 8.16.2011 === &lt;br /&gt;
I&#039;m running Ubuntu 10.04, Lucid Lynx. It&#039;s the Netbook remix version on an Aspire One, with Firefox version 3.6.18 for Ubuntu &lt;br /&gt;
&lt;br /&gt;
* Login page did not prompt for the possibility of forgotten password&lt;br /&gt;
&lt;br /&gt;
* login is really big on netbook, so that not all felds are visible on the screen at once, not ideal for just four fields&lt;br /&gt;
&lt;br /&gt;
* Not clear how you get to a page for adding media from the email verification page. &lt;br /&gt;
&lt;br /&gt;
* The submit box is really large on a netbook, the whole box should be visible on one screen&lt;br /&gt;
&lt;br /&gt;
* The tagging field should have small text underneath it about what format tags should use&lt;br /&gt;
&lt;br /&gt;
* Thumbnails on the little nav buttons from one pic to the other would be nice&lt;br /&gt;
&lt;br /&gt;
* The media submission page could also be scaled for the netbook screen&lt;br /&gt;
&lt;br /&gt;
* people will want to submit multiple images which it seems you can&#039;t yet do&lt;br /&gt;
&lt;br /&gt;
* Animated gifs work! Awesome.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;&lt;br /&gt;
  Only if the uploaded gif fits in a 640x640px square -- That is because we only produce medium.jpg files when it&#039;s necessary (if the original file is more than 640px in height/width) and if we don&#039;t create a medium.jpg we&#039;ll show the original file on the media page.&amp;lt;br /&amp;gt;&lt;br /&gt;
  --[[User:Joar|Joar]] 06:33, 3 September 2011 (EDT)&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Tags seem to be not case sensitive and strip punctuation. Also awesome.&lt;br /&gt;
&lt;br /&gt;
=== Nelson&#039;s notes on 8.13.2011 (paraphrased) === &lt;br /&gt;
&lt;br /&gt;
* hey, where&#039;s my notification?&lt;br /&gt;
* everything is working alright&lt;br /&gt;
* successfully uploaded stuff ...&lt;br /&gt;
* commenting works&lt;br /&gt;
* profile works ...&lt;br /&gt;
* is that all I can do?&lt;br /&gt;
&#039;&#039;&#039;I&#039;d like to be able to&#039;&#039;&#039;&lt;br /&gt;
* find other users&lt;br /&gt;
* friend them ... or something&lt;br /&gt;
* go somewhere else besides my profile page&lt;br /&gt;
* download original image&lt;br /&gt;
* see full-size image&lt;br /&gt;
* use a public server&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other Comments&#039;&#039;&#039;&lt;br /&gt;
* go to a real domain and make it public&lt;br /&gt;
&lt;br /&gt;
===I played around on 2011-09-02 (Iceweasel on Debian)===&lt;br /&gt;
&lt;br /&gt;
* A user icon/avatar on the profile and for use when commenting would be cool.&lt;br /&gt;
&lt;br /&gt;
* On the first page after email verification there is both a &amp;quot;submit media&amp;quot; and an &amp;quot;add media&amp;quot; option/button which might be confusing as it&#039;s likely to be the first time someone is visiting and they can&#039;t know that the &amp;quot;submit media&amp;quot; button is always there.&lt;br /&gt;
&lt;br /&gt;
* Maybe have an instruction on the profile page under the images (or on hover) to click on the image to enlarge and/or edit it as it&#039;s not obvious.&lt;br /&gt;
&lt;br /&gt;
* Noted that the profile page would not display added images unless they were tagged &lt;br /&gt;
&lt;br /&gt;
* Noted the profile information (even though the &amp;quot;profile edited!&amp;quot; message was received) would not display unless a website was entered as well. Also noted that the website field required properly formatted urls, most people are probably just going to plug in &amp;quot;www...&amp;quot;, if they have a web page at all.&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;X&amp;quot; for the navigation between pictures is confusing (I think most people associate it with &amp;quot;delete&amp;quot;). Maybe have it say something like &amp;quot;Nothing more here&amp;quot; or have a picture of a sad goblin, etc. instead.&lt;br /&gt;
&lt;br /&gt;
* Get a &amp;quot;the file doesn&#039;t seem to be an image!&amp;quot; message when I try to upload an .xcf file. Maybe consider allowing .xcf as it may be useful for people working on collaborations, etc.&lt;br /&gt;
&lt;br /&gt;
* Images tagged &amp;quot;NSFW&amp;quot; show up on the &amp;quot;Explore&amp;quot; page, maybe an image holder (for those who will voluntarily tag their images) could be useful.&lt;br /&gt;
&lt;br /&gt;
* Animated .gif s aren&#039;t animated on the &amp;quot;Explore&amp;quot; page, maybe allow that or display the file name of .gif files as &amp;quot;whatever.gif&amp;quot; to indicate they may be animated.&lt;br /&gt;
&lt;br /&gt;
* I really like the use of coloured bars/text boxes as a recurrent design element :)&lt;/div&gt;</summary>
		<author><name>Kardan</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=1882</id>
		<title>HackingHowto</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=HackingHowto&amp;diff=1882"/>
		<updated>2017-02-09T21:29:44Z</updated>

		<summary type="html">&lt;p&gt;Kardan: /* Running the test suite */ See also UnitTests and Manual Functional Testing.&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/devel/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;
== Python 2 vs Python 3 ==&lt;br /&gt;
&lt;br /&gt;
GNU MediaGoblin was originally written for Python 2, and much of the documentation on the wiki reflects that. However, since release v0.9.0, GNU MediaGoblin has attempted to provide support for Python 3. Unfortunately, not everything is working for Python 3 environments yet. Below is a non-exhaustive list of things that might not work if you set up GNU MediaGoblin a Python 3 environment.&lt;br /&gt;
&lt;br /&gt;
=== Python 3 Issues ===&lt;br /&gt;
&lt;br /&gt;
* fcgi - none of the flup packages ([https://pypi.python.org/pypi/flup flup], [https://pypi.python.org/pypi/flup-py3 flup-py3], [https://pypi.python.org/pypi/flup6 flup6]) appear to have proper support for Python 3.5.&lt;br /&gt;
* audio file spectrographs - [https://pypi.python.org/pypi/scikits.audiolab scikits.audiolab] [https://issues.mediagoblin.org/ticket/5467 appears to not work] in Python 3.&lt;br /&gt;
* Rackspace storage - the [https://pypi.python.org/pypi/python-cloudfiles cloudfiles] plugin may not work with Python 3.&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.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 0.7.0 or higher   - http://www.sqlalchemy.org/&lt;br /&gt;
* Pillow - http://python-pillow.org/&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;
* Node.js&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-gst-1.0 libjpeg8-dev autoconf nodejs npm nodejs-legacy}}&lt;br /&gt;
&lt;br /&gt;
==== Debian GNU/Linux jessie ====&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo apt-get install -y git-core python python-dev python-lxml python-imaging python-virtualenv libjpeg-dev autoconf nodejs npm nodejs-legacy python-gst-1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-libav python-numpy python-scipy libsndfile1-dev libasound2-dev libgstreamer-plugins-base1.0-dev}}&lt;br /&gt;
&lt;br /&gt;
==== Fedora / RedHat(?) / CentOS ====&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 nodejs}}&lt;br /&gt;
&lt;br /&gt;
===== On CentOS7: =====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;epel-release&#039;&#039;&#039; is the prerequisite for most of the below listed packages&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum install epel-release}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum update}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum install python-paste-deploy python-paste-script \ git-core python python-devel python-lxml python-imaging \ python-virtualenv npm automake nginx gcc}}&lt;br /&gt;
&lt;br /&gt;
for video to work correctly (as per [https://mediagoblin.readthedocs.io/en/stable/siteadmin/media-types.html?highlight=video#video Enabling Media-Types Video]) you may choose to install AWEL 3rd party repo which provides with the latest gstreamer bindings and more:&lt;br /&gt;
&lt;br /&gt;
* [http://awel.domblogger.net/7/media/x86_64/repoview/awel-media-release.html AWEL Repo],[https://media.librelamp.com/gst AWEL Gstreamer]&lt;br /&gt;
&lt;br /&gt;
once installed:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo yum install gstreamer1 gstreamer1-libav gstreamer1-plugins-base gstreamer1-plugins-base-tools gstreamer1-plugins-good gstreamer1-plugins-ugly gstreamer1-plugins-bad gstreamer1-python ffmpeg }}&lt;br /&gt;
&lt;br /&gt;
==== openSUSE ====&lt;br /&gt;
&lt;br /&gt;
This instructions might be incomplete.&lt;br /&gt;
Try on openSUSE 13.2 or 13.1:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|zypper install python-devel python-gstreamer-0_10 git-core python python-lxml python-Pillow python-virtualenv npm}}&lt;br /&gt;
&lt;br /&gt;
==== ArchLinux / Parabola ====&lt;br /&gt;
&lt;br /&gt;
The following command should work (&amp;lt;del&amp;gt;not tested on a new ArchLinux / Parabola install&amp;lt;/del&amp;gt;. tested, it works):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|pacman -S git python2 python2-lxml python2-pillow python2-virtualenv gstreamer0.10-python}}&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
==== 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;
* Note for Pillow and lxml, you can: pip install Pillow lxml&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;
Pillow: http://pillow.readthedocs.org/en/3.0.x/installation.html#os-x-installation&lt;br /&gt;
&lt;br /&gt;
Libjpeg &amp;amp; Libpng: http://ethan.tira-thompson.com/Mac_OS_X_Ports.html Combo Installer&lt;br /&gt;
&lt;br /&gt;
==== Mac OS X Snow Leopard ====&lt;br /&gt;
&lt;br /&gt;
# You will probably want to install MacPorts this will give you access to many free software packages in the same manner to apt-get and yum: https://www.macports.org/install.php&lt;br /&gt;
# Ensure you install Git and the command line tools: https://help.github.com/articles/set-up-git#platform-mac&lt;br /&gt;
# Once both of those are installed type this in your terminal and enter your password when prompted for it {{Cmd|sudo port install python27 py27-lxml py27-sqlalchemy py27-Pillow py27-virtualenv py27-gst-python py27-pastescript}}&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Windows ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Thanks wctype!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Getting requirements ====&lt;br /&gt;
&lt;br /&gt;
* Python 2.7  -  [http://www.python.org/download/ Download] &amp;lt;!-- http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi --&amp;gt;&lt;br /&gt;
* git - [https://github.com/msysgit/git/downloads Download] &amp;lt;!-- https://github.com/downloads/msysgit/git/Git-1.7.11-preview20120620.exe --&amp;gt;&lt;br /&gt;
* python-lxml - [http://pypi.python.org/pypi/lxml/2.3.5#downloads Tarball] [http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil Binaries] &amp;lt;!-- http://pypi.python.org/packages/source/l/lxml/lxml-2.3.5.tar.gz, http://www.lfd.uci.edu/~gohlke/pythonlibs/z8sp4uqu/lxml-2.3.5.win32-py2.7.exe --&amp;gt;&lt;br /&gt;
* Pillow - [http://pillow.readthedocs.org/en/3.0.x/installation.html#windows-installation Download] &amp;lt;!-- http://effbot.org/downloads/PIL-1.1.7.win32-py2.7.exe] --&amp;gt;&lt;br /&gt;
* virtualenv - [http://pypi.python.org/pypi/virtualenvwrapper-win/1.0.8#downloads Download] &amp;lt;!-- http://pypi.python.org/packages/source/v/virtualenvwrapper-win/virtualenvwrapper-win-1.0.8.zip --&amp;gt;&lt;br /&gt;
* OSSBuild project provides reasonably up-to-date binaries of GStreamer - [https://code.google.com/p/ossbuild/downloads/list Download] &amp;lt;!-- http://ossbuild.googlecode.com/files/GStreamer-WinBuilds-GPL-x86.msi --&amp;gt;&lt;br /&gt;
* py-bcrypt - [https://bitbucket.org/alexandrul/py-bcrypt/downloads/ Download] &amp;lt;!-- https://bitbucket.org/alexandrul/py-bcrypt/downloads/py-bcrypt-0.2.post1.win32-py2.7.exe --&amp;gt;&lt;br /&gt;
* Node JS&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, [http://mediagoblin.org/join/ 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;
&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://git.savannah.gnu.org/mediagoblin.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* Make the environment: {{Cmd|./bootstrap.sh &amp;amp;&amp;amp; ./configure &amp;amp;&amp;amp; make}}&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 want to make sure things are working, consider running the test suite:&lt;br /&gt;
  {{Cmd|./runtests.sh}}&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;
== 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;
{{Cmd|git submodule update}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; MediaGoblin used to be hosted on gitorious.org, but that is moving to read-only mode, so we&#039;re now on Savannah.  If you have an old checkout, please update it by running the following:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git remote set-url origin git://git.savannah.gnu.org/mediagoblin.git}}&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;
See also [[UnitTests]] and [[Manual Functional Testing]].&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|./runtests.sh}}&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;
== Troubleshooting ==&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|rm -rf mediagoblin.db kombu.db celery.db user_dev; ./bin/gmg dbupdate}}&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.&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;
== Showing off your work with PageKite ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re doing development with MediaGoblin, it&#039;s sometimes helpful to show off your work to gather feedback from other contributors.  A number of the MediaGoblin developers use something called [http://pagekite.net PageKite], which is a fellow free software web service which makes temporarily showing off work on your machine easy.  There&#039;s a [http://pagekite.net/wiki/Howto/UsePageKiteWithMediaGoblin/ tutorial on how to use PageKite and MediaGoblin together] available on the PageKite wiki.&lt;br /&gt;
&lt;br /&gt;
If you are doing a lot of MediaGoblin development, the PageKite people have graciously offered us a good amount of bandwidth at no cost in an effort to help out fellow free software projects.  If you&#039;ve been making significant contributions, PM Chris Webber on freenode (who is paroneayea there) and ask if you can be added to our group plan.&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>Kardan</name></author>
	</entry>
</feed>