## Introduction

This page is a collection of helpful hints, tips, and links
to useful articles about setting up the development
environment to work on Melange.

## Using Eclipse with Google App Engine

[Google App Engine & eclipse (PyDev)](http://daily.profeth.de/2008/04/google-app-engine-eclipse-pydev.html)

To use the copy of `dev_appserver.py` that is checked into the
[SoC svn repository](http://code.google.com/p/soc/source/browse/#svn/trunk/thirdparty/google_appengine)
change the **Main Module** to something like:

`${workspace_loc:soc/thirdparty/google_appengine/dev_appserver.py}`

This example assumes that `trunk/` was checked out and placed in
an Eclipse project named `soc`, so adjust it as needed to point
to the `dev_appserver.py` in your `svn` working copy and Eclipse
project hierarchy.

You will also want to replace the `"${project_loc}/src"` in the
**Arguments** tab with `"${project_loc}/app"`.

[Creating mashups on the Google App Engine using Eclipse, Part 1](http://www.ibm.com/developerworks/opensource/library/os-eclipse-mashup-google-pt1/#N100B0)

## Debugging

[Python: Debugging Google App Engine Apps Locally](http://jjinux.blogspot.com/2008/05/python-debugging-google-app-engine-apps.html)

### Debugging in Eclipse

[Debugging Google AppEngine with PyDev in Eclipse](http://blog.smashedapples.com/2008/04/debugging-googl.html)