Home
Tutorials
Code Snippets
Code Samples
Downloads
Links

The Blog
Our Projects
About
Contact

::Add RageStorm to Favorites!::

The Blog | Our Projects | Guest Book | About | Contact

 
Tutorial - Embedded Python
Author:Arkon
Category:Miscellaneous
Uploaded at:29-May-03
Views:106602

Instead of writing your own l33t scripting engine, you could simply embed Python into your application. Python becomes a popular scripting language with time and I think it's a great language anyways. It's really easy to program in Python, your code is very readable and flexible. The Python's moto is "Batteries Included", which means that everything comes bundled already. Rarely will you have to download modules from the Internet and install them. I chose this subject, Embedded Python, as a solution to solve this mess that you have with huge application that let the end user write some scripts. Developers' efforts should be on their own application's concept mainly and not on that (small) scripting engine. (Unless your target is to write a scripting engine yourself, goodluck anyways!). Python is there, and is waiting for you, so why not using it?

In this tutorial I'm going to teach you how to use the Python C API. I'm writing this tutorial as I saw that there are merely a few resources on the Internet which will show you how this thing goes on. Unfortunately, the Python's C API documentation could be written much better. After I smashed my head into the wall and learned some stuff that could aid you, I decided to come up with a tutorial which will show how to use it in the right way, and tell you some tips and tricks.

The main topics I am going to cover:

And finally, setting up your own scripting console.

Well, I hope it's not too late to say that this tutorial assumes you know how to program in Python. Another thing, this is not a Python Reference, you'll still need the Python Documentation like hell!


It's everything about Objects:

Every object has its own reference counter. This means that if you define an int:

x = 5

The int object "X" will have 1 reference(s), so its reference counter will be 1. Now, when you define another int that will be assigned to "x":

y = x

What happens is that we created another int object, "y", but now it will point(!) to the "x" int object, thus making the "x" object's reference counter being increased by 1, so it would be 2 ("X" itself and "y").

One of the advantages of using this reference counting mechanism is for saving memory space. To be honest when using integers it doesn't really matter, but when it comes to strings and other blocks of data it's important.

Reference counting helps Python to "know" when to free objects (When an object has no references), so the used memory is available again. This will make us a big headache later, but don't worry.

Now let's say we delete "y":

del y

What happens behind the scenes is that the reference counter of int ojbect "x" is being decreased by 1. And still the int object "x" is alive. If we delete "x":

del x

Then the reference counter of "x" will become zero(0) and "x" is freed, because none needs it. When we'll mess with Python objects in C it will be all about reference counting (almost), so pay attention to it.

Let's define a Python integer object in C:

PyObject* pyIntObject = NULL;
pyIntObject = PyInt_FromLong(5);

Note: Almost all Python types/objects are interpreted in C as PyObject structure, and this is the only one we are going to use in here. This is equivalent to: x = 5 in Python. Which means the function PyInt_FromLong increased the object's count reference to 1 upon creating it. So when we want to get rid off pyIntOjbect we will have to decrease its count reference by using Py_DECREF(pyIntObject);


Py_INCREF and Py_DECREF to Our Call:

In the documentation of Python C API you'll see that every function says if it returns a NEW REFERENCE or a BORROWED REFERENCE. You should follow it correctly or otherwise memory leaks will occur and other big no-no things.

When you create an object, say with PyInt_FromLong, this function will return a new reference, means we have to delete it on OUR OWN! On the contrast when you GET(borrow) an object, usually, it means you must not delete it by all means!

So after calling no matter what Python C API function (which returns an object) make sure if you need to use Py_DECREF on it or not. When to use Py_INCREF, say you got(again - borrowed) an object (doesn't matter of which type now) from the user and you want to use it then you'll have to increase its reference count. Of course not forgetting to Py_DECREF it laters on. We'll see an example later.

It's really important to understand the organization of Python objects, otherwise you will use it the wrong way and you really don't want to, so take your time. :)


My first Embedded Python application:

If you didn't download Python yet, this is the time to visit their site: Python.org. Now, after you've installed it, make sure you know where the "Python.h" and "pythonXX.lib"(XX - version of installed Python) files are! Alright, let's start, all we have to do is to initialize the Python interpreter which will execute our Python commands for us:

// Don't forget to import "pythonXX.lib"!
#include <Python.h>
int main()
{
 Py_Initialize();

 // TODO: Add your Python code here.
 PyObject* pyIntObject = PyInt_FromLong(5);
 if (pyIntObject == NULL) ; // Error

 Py_DECREF(pyIntObject);

 Py_Finalize();
 return 0;
}

That was it, but, hey, it's a full embedded Python application, which does nothing special yet.


Running some strings:

How we make things alive here?
You feel you still don't see what the whole magic is about?
There are a few functions which let you run strings as if they were the input of the end user. We'll use one of them to simulate some function calls: create a directory named "tmp" and immediately deleting it. Duh.
Let's dance:

// Don't forget to import "pythonXX.lib"!
#include <Python.h>
int main()
{
 Py_Initialize();

 PyRun_SimpleString("import os\n"
			"from os import mkdir, rmdir\n"
			"mkdir(\"tmp\")\n"
			"rmdir(\"tmp\")\n"
			"print \"We create dirs-we delete dirs\"\n");
 
 Py_Finalize();
 return 0;
}

Notice we suffix every single Python command with "\n" (LF) character, otherwise Python won't execute it. After executing this program, you'll see, if you are quick enough, that a directory named "tmp" was created and then just deleted.


Extension Modules:

As you know those .py or .pyd files, which are usually modules or classes, you name it, which supply a set of functions or/and objects. You can do the same but dynamically, without the need of an external imported .py or .pyd files. "Dynamically" means that all the functions and objects you supply will be written in C (Yes, you can use PyRun functions as well). So let's say we want to have a module named "MyFirstModule" and will supply two functions named: "Foo" and "Bar" of course. It will look like this:

PyObject* MyFirstModule_Foo(PyObject* pSelf, PyObject* pArgs)
{
 // You can run any C code in here.
 MessageBox(NULL, "Foo was called!", "MyFirstModule", MB_OK);
}

As you see a C function which can be called from Python has to return a PyObject*, get 2 arguments(which you can ignore), but usually you'll ignore the first one (It should point to the class object if the function is in a class, just like a method in C++). The second value is a pointer to a Tuple object of the arguments the function should process somehow.

PyObject* MyFirstModule_Bar(PyObject* pSelf, PyObject* pArgs)
{
}

static PyMethodDef MyFirstModulebMethods[] = {

    // "Python name", C Ffunction Code, Argument Flags, __doc__ description
    {"Foo", MyFirstModule_Foo, METH_NOARGS, "A dummy function."},
    {"Bar", MyFirstModule_Bar, METH_VARARGS, "An advanced dummy function which prints its argument."},
    {NULL, NULL, 0, NULL}
};

So we defined two functions named: "Foo" (which doesn't get any arguments) and "Bar (which gets arguments), and both contain some description.

First argument is the name of our module to Python code itself. The second argument is the array of functions we "export" to Python.

// Ending up with calling, so users can use it and import MyFirstModule.
Py_InitModule("MyFirstModule", MyFirstModulebMethods);

The Py_InitModule function makes our C functions available to Python code. We could run now something like:

import MyFirstModule
from MyFirstModule import *
Foo()
And we'll get the MessageBox popped up on our window. But what about the other function, "Bar"? Read on.

Building and Parsing Arguments:

There are two functions which will really help you when you get arguments(parameters) when your function is called in C from Python. When a C function is called, you will have to parse the arguments and CONVERT them into C variables. There is a simple function which does the work, almost automatically, for us, "PyArg_ParseTuple". As you know Python functions' arguments list is actually a Tuple object.

So in "MyFirstModule_Bar" we defined "pArgs" which is a Python generic object, in our case it would be a Tuple containing all parameters from whom called us. Let's say we want to get two parameters from the caller, a string and an integer, the "PyArg_ParseTuple" works much like "printf" but instead of printing the variables it converts them into C type variables, thus we can use them in our functions as it were called directly from another C function.

In our case to convert the Tuple arguments into a string and an integer we would do:

char* str = NULL;
int num = NULL;
PyArg_ParseTuple(pArgs, "si", &str, &num);

Reminds scanf isn't it?
Now we have a read-only string pointed by str and an integer number. Make sure you never Py_DECREF/free/delete/write to the objects you get from "PyArg_ParseTuple" and the other parsers! Except that, with the C variables(which are a copy, like the integer), you can do whatever you are up to.

What about returning value(s) when my function is finished? Therefore there is a function, the inverse(take or give...) of "PyArg_ParseTuple", "Py_BuildValue". Noticed we didn't return anything in "MyFirstModule_Foo", I guess your compiler was yelling at you already about that...

So now we can do: return Py_BuildValue("s", "This string is returned!");

It should be reasonable to you that we just created an object, so who will free it? Of course Python will do the job when none uses it already. Read the Python Documentation about these two functions, so you see what other types are supported, how to use it further and error handling.


The None Object:

I just had to tell you that you can't just return NULL;(We'll get to this specific later in Exceptions) or any other C variable you want when you have to return a PyObject*.

We have two options: To return an object we built.
Or to return None.
The C equivalent to Python's None is Py_None. It's a "pre-defined" object which does nothing special, heh.

If you plainly return Py_None, and none will reference to it, you are letting it free, which is a wrong move. What you have to do a second before you return it, is increasing its reference counter, by using:

Py_INCREF(Py_None); // And just then:
return Py_None;

Now, after we know pretty good, what's going on, our functions will look as such:

PyObject* MyFirstModule_Foo(PyObject* pSelf, PyObject* pArgs)
{
 // You can run any C code in here.
 MessageBox(NULL, "Foo was called!", "MyFirstModule", MB_OK);

 Py_INCREF(Py_None);
 return Py_None;

}

PyObject* MyFirstModule_Bar(PyObject* pSelf, PyObject* pArgs)
{
 char* str = NULL;
 int num = NULL;
 PyArg_ParseTuple(pArgs, "si", &str, &num);
 
 // Do anything you wish with the integer and the string...

 // Return a string:
 return Py_BuildValue("s", "This string is returned!");
}

Voilà! We have some fresh meat, and can start working with Python embedded in our application! But let's rule the world! So keep on reading...


Exceptions:

One of the problems with returning NULL is that Python interprets this as an indication that an exception was raised. That's why we were returning Py_None. Let's get back for a minute to the "PyArg_ParseTuple" function. We "tell" it to parse a string and an integer(yeah, the old example is still valid). Now what if the user has called our function supplying only an integer, or supplying only a string, or not supplying any arguments at all, or everything but what we want. Then "PyArg_ParseTuple" will return 0 and raise an exception. Returning NULL will let the user know what was wrong... Check it out yourself, if you don't believe me.

My code looks like this: if (!PyArg_ParseTuple("...)) return NULL; And the rest will happen automatically by Python.

Or you can do it on your own with setting the Standard Exception:

if (!PyArg_ParseTuple("...)) {
 PyErr_SetString(PyExc_StandardError, "Your own error message!");
 return NULL;
}

Logging Stdout:

It's time to SEE something on the screen, don't you think so? In Win32 Console application the output is alright by default. However, what we were missing is a way to tell the Python interpreter to print the stuff on our window. This could be a GUI window, console window(, files, logs) or whatever. Python was programmed so the "print" expression calls to "sys.stdout.write" - This means we have to "take over" this function in order to print on the screen and write our own "plotter".

Follow the code, it's pretty self explanatory:

PyObject* log_CaptureStdout(PyObject* self, PyObject* pArgs)
{
 char* LogStr = NULL;
 if (!PyArg_ParseTuple(pArgs, "s", &LogStr)) return NULL;

 printf("%s", LogStr); 
 // Simply using printf to do the real work. 
 // You could also write it to a .log file or whatever...
 // MessageBox(NULL, LogStr...
 // WriteFile(hFile, LogStr...

 Py_INCREF(Py_None);
 return Py_None;
}

// Notice we have STDERR too.
PyObject* log_CaptureStderr(PyObject* self, PyObject* pArgs)
{
 char* LogStr = NULL;
 if (!PyArg_ParseTuple(pArgs, "s", &LogStr)) return NULL;

 printf("%s", LogStr);

 Py_INCREF(Py_None);
 return Py_None;
}

static PyMethodDef logMethods[] = {
 {"CaptureStdout", log_CaptureStdout, METH_VARARGS, "Logs stdout"},
 {"CaptureStderr", log_CaptureStderr, METH_VARARGS, "Logs stderr"},
 {NULL, NULL, 0, NULL}
};

 Py_InitModule("log", logMethods);
 PyRun_SimpleString(
"import log\n"
"import sys\n"
"class StdoutCatcher:\n"
"\tdef write(self, str):\n"
"\t\tlog.CaptureStdout(str)\n"
"class StderrCatcher:\n"
"\tdef write(self, str):\n"
"\t\tlog.CaptureStderr(str)\n"
"sys.stdout = StdoutCatcher()\n"
"sys.stderr = StderrCatcher()\n"
);

Now everything that should be written to stdout will be written on the console(in our case) window. The Python code we actually running is simply to change the class of stdoud:

import log
import sys
class StdoutCatcher:
	def write(self, str):
		tlog.CaptureStdout(str)

class StderrCatcher:
	def write(self, str):
		log.CaptureStderr(str)

sys.stdout = StdoutCatcher() // Create a class object
sys.stderr = StderrCatcher() // Ditto

Hope you get the idea of what's going on.

Now you are pretty much on your on with Python. You can do whatever you are up to. Getting crazy with C functions and Python objects...


Files:

There is a small Python C API module regarding files. I want to show an example of how to use these functions. I was wondering how come that those API's asks for a FILE* where Python can be compiled with many different compilers (or supposes to). So what's wrong with it???

#include <Python.h>
#include <stdio.h>

void main()
{
 Py_Initialize();

 // Init logger...!

 // Open file for reading.
 PyObject* PyFileObject = PyFile_FromString("c:\\tempfile.txt", "r");
 if (PyFileObject == NULL) {
  // The file doesn't exist? An exception was thrown, 
  // we can ignore it and keep working, or we can return.
  // Let's ignore it for the sake of example, so the stderr won't "hear" of it.
  PyErr_Clear();
  return FALSE;
 }

 // Read the first line from the file.

 PyObject* PyLineObject = PyFile_GetLine(PyFileObject, 0);
 if (PyLineObject == NULL) {
  PyErr_Print(); // Print the exception if we couldn't read from the file.
 }

 // Now print the string:
 printf("%s", PyString_AsString(PyLineObject));

 // Free the string:
 Py_DECREF(PyLineObject);

 // Closing the file.
 Py_DECREF(PyFileObject);

 Py_Finalize();
 retrun TRUE;
}

Now what about opening the file for execution? Like the Python's "execfile" ? Let's do it:

PyObject* ExecFile(PyObject* pSelf, PyObject* pArgs)
{
 char* FileName = NULL;
 if (!PyArg_ParseTuple(pArgs, "s", &FileName)) return NULL;

 PyObject* PyFileObject = PyFile_FromString(FileName, "r");
 if (PyFileObject == NULL) return NULL; // Let the user know the error.

 // Function Declration is: int PyRun_SimpleFile(FILE *fp, char *filename);
 // So where the hack should we get it a FILE* ? Therefore we have "PyFile_AsFile".
 PyRun_SimpleFile(PyFile_AsFile(PyFileObject), FileName);

 Py_DECREF(PyFileObject);

 // Return TRUE.
 return Py_BuildValue("i", 1);
}

As I was searching for help, I didn't find anything on groups.google.com. And worse, many people were asking what to do in such a case... Hope I solved it for you!


Lists/Tuples:

Why would I want to use lists and Tuples? Leave me alone!
When you want to call a Python function from C(!) you'll have to give it a PyObject (speaking of "pArgs") variable which will point to a Tuple with all arguments required by the function.

And why a list?
Well let's say you want to get an endless number of arguments from the user, you can't use the "PyArg_ParseTuple" for that, what you have to do is to ask for an object which will be a list type object, and then you can read the parameters in it as you wish.

Let's begin with the Tuple object, we have to create a Tuple and set some of its arguments, and remember all in Python C API.

// We create a Tuple with two objects in it.
PyObject* MyTuple = PyTuple_New(2);
if (MyTuple == NULL) ; // Error

PyObject* MyInt = PyInt_FromLong(100);
if (MyInt == NULL) {
 // Don't forget to clean up
 Py_DECREF(MyTuple);
 // Error
}
PyTuple_SetItem(MyTuple, 0, MyInt);

PyObject* MyStr = PyString_FromString("Arkon");
if (MyStr == NULL) {
 // Don't forget to clean up
 Py_DECREF(MyTuple);
 // We don't need to free the int object, because the Tuple will take care of it.
 // Error
}
PyTuple_SetItem(MyTuple, 1, MyStr);


// Now we can call a function and give it the (int, string) parameters.
// Or do whatever we wish with it.


// This will also free the objects inside the Tuple itself, great isn't it?
Py_DECREF(MyTuple);

The Python equivalent is:

MyTuple = (100, "Arkon")

Error handling sucks, I leave it for you, to handle it in an elegant way. Besides, I'm not sure you'll have to to check for every API calling, but if it's safer, why not? For the cost of a few additional lines. After all, it's your code. :)

Back to lists now, the code should be really similar:

PyObject* MyList = PyList_New(2);
if (MyList ... // Error
PyList_SetItem(MyList, 0, PyInt_FromLong(2003));
PyList_SetItem(MyList, 1, PyString_FromString("RageStorm"));
Py_DECREF(MyList);

In Python:

MyList = [2003, "RageStorm"]

OK, so I know to create lists and Tuples, now what? Let's go futher, by now you should know the mechanism basics of the Python objects... And let's say we want to get a varying number of int object parameters. Just like "printf" can get using the Elipsis(... operator).

PyObject* Foo(PyObject* pSelf, PyObject* pArgs)
{
 PyObject* ArgsList = NULL;
 if (!PyArg_ParseTuple(pArgs, "O", &ArgsList)) return NULL; // We want to get one list object.

 // Making sure its type is a list.
 if (!PyList_Check(ArgsList)) {
  // Raise an exception in case it's not.
  PyErr_SetString(PyExc_StandardError, "The only parameter \"Foo\" gets, should be a list!");
  return NULL;
 }

 // Scan all elements on that list, make sure they are int objects and print them:
 for (int i = 0; i < PyList_Size(ArgsList); i++) {
  // This is a BORROWED REFERENCE!!! Don't DECREF it later!
  PyObject* TmpInt = PyList_GetItem(ArgsList, i);
  if (!PyInt_Check(TmpInt)) {
   // Oh Uh, it's not an integer!
   char TmpStr[1024] = {0};
   sprintf(TmpStr, "Element #%d isn't an integer!", i);
   PyErr_SetString(PyExc_StandardError, TmpStr);
   return NULL;
  }

  // Now that we know that we got an integer, let's print it.
  printf("%d ", PyInt_AsLong(TmpInt));
 }

 // We are finished using the ArgsList, but we mustn't touch it, 
 // because we "told" PyArg_ParseTuple that we want to BORROW it!
 // So that's all folks. . .

 Py_INCREF(Py_None);
 return Py_None;
}

Calling this function from Python could be as such:

// Valid:
Foo([1, 2, 3, 4])
Foo([1, 2])
Foo([])

// Invalid:
Foo(["1", 2, 3])
>>> StandardError: Element #0 isn't an integer!

Foo([1, 2], 3)
>>> TypeError: function takes exactly 1 argument (2 given)

Foo(1)
>>> StandardError: The only parameter "Foo" gets, should be a list!

Callbacks:

I didn't show you how to use Tuples for nothing, there is a reason, imagine we have an abstract Tank object in C++:

class Tank{
public:
 Point pos;

 virtual void move()=0;
 virtual void draw()=0;
};

You get the idea... In this game we let our pre-defined script (the one which comes with the game) move the objects.

So it's up to the script to move the objects, but what we have to do everytime the move() C++ method is being called is calling the Python code of the Tank Move object.

If you have no idea what I'm talking about, let's make it simpler, you want to use hotkeys in your application, everytime a registered key combination is pressed you want to execute some Python code that the user supplied, which will do something in the application itself. Hope you get this one.

From both examples you have to call a Python function from C and use its result (if you want to), but how? For god sake! Now you say, "Ahh, that's why I need those Tuples", and, damn, you're right!

Let's do it:

// Say we have to supply two integers to the function:
PyObject* ArgsTuple = PyTuple_New(2);
PyTuple_SetItem(ArgsTuple, 0, PyInt_FromLong(1));
PyTuple_SetItem(ArgsTuple, 1, PyInt_FromLong(2));
PyObject* RetVal = PyEval_CallObject(CallbackFunction, ArgsTuple);

// You can do whatever you want with retval...Converting it to whatever C type variable.
// Don't forget to free it:
Py_DECREF(RetVal);

// And the tuple also:
Py_DECREF(ArgsTuple);

Pretty easy, but what's about the "CallbackFunction" pointer, it's still missing...
Let's advance with "Foo", it will now ask for a callable Object, and save a reference to it in global
"CallbackFunction" pointer.

PyObject* CallbackFunction = NULL;
PyObject* Foo(PyObject* pSelf, PyObject* pArgs)
{
 if (!PyArg_ParseTuple(pArgs, "O", &CallbackFunction)) return NULL; // We want to get one callable object.

 if (!PyCallable_Check(CallbackFunction)) {
  // Error
  PyErr_SetString(PyExc_StandardError, "The object should be callable!");
  return NULL;
 }

 // Finally, we are using the Py_INCREF. If we save a pointer to this function
 // and the user overrides it or deletes it, the pointer is lost (Pointing somewhere useless for us).
 // This is the reason why we increase the object's(function's) reference counter,
 // so it will be valid 'till the user tells us to unregister this function later.
 Py_INCREF(CallbackFunction);

 // Return TRUE
 return Py_BuildValue("i", 1);
}

Using our code in Python:

def x(Int1, Int2):
	print Int1, Int2

#Register the function
Foo(x)

// Now call it in C with the above code snippet.

In this example we used a global PyObject pointer, but you should use it in an organized data structure
with the key combination to be pressed for example:

struct PyHotkey {
 char KeyCombination[32]; // Will hold something like "ctrl+alt+a".
 PyObject* Callback; // Will point to the function - when the key combination is pressed it will be called.
};

And finally, setting up your own scripting console. If you read through here, you should be mastering Python C API. So you don't really need me anymore... But if you want to see everything I just covered here (AND MORE!) in a decent application, check this out: Embedded Python!

After reading all this, you have to know that you have 3 new friends:

  1. This tutorial, nah, just kidding! :)
  2. groups.google.com - newsgroups
  3. And of course python.org

Goodluck...
Oh part 2 is out, there you go: Embedded Python (Part 2)

User Contributed Comments(186)
 [1] arkon | 2005-11-16 12:59:33

About the exceptions, there are more types, of course, naming a few:
PyExc_MemoryError
PyExc_EOFError
PyExc_ValueError
PyExc_IndexError
So you should use what fits you best.
 [2] arkon | 2005-11-17 17:11:10

Getting the line number of an exception could be done in Python like this:
import sys
try:
blabla
except:
print sys.exc_traceback.tb_lineno

The same code is appliable for Python's C API:
if (PyErr_Occurred()) {
printf("exception!!");
PyObject* ptype;
PyObject* pvalue;
PyObject* ptraceback;
PyErr_Fetch(&ptype, &pvalue, &ptraceback);
printf("Error occurred on line: %d", ((PyTracebackObject*)ptraceback)->tb_lineno);
// Now you have two options, restoring the exception or disposing it.
PyErr_Restore(ptype, pvalue, ptraceback);
PyErr_Print();

//---->

Py_XDECREF(ptype);
Py_XDECREF(pvalue);
Py_XDECREF(ptraceback);
}
 [3] HazyNRG | 2006-12-10 05:18:33

In the first function of "Logging Stdout", you write:
 char* LogStr = NULL;
 if (!PyArg_ParseTuple(pArgs, "s", &LogStr)) return NULL;

 printf("%s", LogStr);

shouldn't it be:
 char* LogStr = NULL;
 if (!PyArg_ParseTuple(pArgs, "s", LogStr)) return NULL;

 printf("%s", *LogStr);
? because, you'd pass a pointer to a pointer to a char to PyArg_ParseTuple and a pointer to printf. correct me if i'm wrong, i'm new to C :P
 [4] HazyNRG | 2006-12-10 14:18:49

ok, i've just realized that i'm wrong. sorry
nice tutorial :)
 [5] Melih | 2007-11-05 10:36:58

Very helpful even more than python tutorial in reference count. I am glad to know that removing list would actually remove all the references inside.
 [6] codebreaker | 2008-01-14 00:33:43

HI,can i translate this into chinese and put it in my blog?
 [7] arkon | 2008-01-15 16:54:12

As long as you credit me and put a link to the original copy.
Good luck :)
 [8] codebreaker | 2008-01-25 02:43:38

In the documentation of Python C API you'll see that every function says if it returns a NEW REFERENCE or a BORROWED REFERENCE. You should follow it correctly or otherwise memory leaks will occur and other big no-no things.
sorry, i can't get it.
says ?no-no?others...
can you explain it for me?
 [9] arkon | 2008-01-25 11:01:35

a new reference means you have to free it on your own. thus an object was created and you're the owner, so you have to free it at the end. a borrowed reference means that you pass a pointer to the object you go, and you are the one who is still responsible for it.
 [10] BlackAnt | 2008-03-12 13:29:43

Came across your tutorial, its helped me to understand embedding and extending.
I've have one question:

  After compiling the your first tutorial via:-

  python setup.py build_ext -cmingw32

This compiles and produce the module as expected, but, when import the module
in python an error is generated saying:

  SystemError: dynamic module not initialized properly.

Have you ever come across this message and what could cause it?
 
 [11] Mike | 2008-04-15 07:01:17

Waaaw! This tutorial is so much better than the official documentation. I got stuff working in less than an hour. That is after messing around for two days with the official documentation. You might want to consider submitting this tutorial for integration into the official documentation.
 [12] jeff | 2009-05-29 16:16:36

Thanks a lot for this! I was in very much the same boat as Mike; without this rare tutorial I've got things off the ground finally!
 [13] Ryan | 2010-01-21 20:09:48

The best tutorial I've found so far. I've been struggling for 3 days and finally get some idea of how to solve the problem. Thanks for your great tutorial and code sample. I've learned a lot!! It's much much better than the official doc ^_^
 [14] verysimplenick | 2010-06-11 13:30:59

thx 4 tutorial!
 [15] serch | 2011-09-27 09:22:41

GREAT post, congratulations and thanks!
 [16] AntoniaCARSON | 2011-11-27 08:43:19

Every one knows that today's life seems to be not cheap, however people require money for different issues and not every one earns big sums money. Thus to receive fast <a href="http://goodfinance-blog.com/topics/mortgage-loans">mortgage loans</a> and collateral loan will be a proper solution.
 [17] loans | 2011-12-22 21:51:54

Following my exploration, millions of persons in the world receive the personal loans at different banks. Thence, there is great possibilities to receive a commercial loan in all countries.
 [18] sadhana zalake | 2012-05-13 21:22:14

thank u very much its more helpful me
 [19] leading social bookmarking ser | 2012-10-23 22:10:37

Are there some top social bookmarking specialists who are ready to help me to increase my traffic? Or possibly, any one can recommend some good leading social bookmarking service linksexperts.com with bookmarks submission tools of high standards!
 [20] essay papers | 2012-10-24 01:04:36

Do you have problems with writing papers? The only way for you is to visit this website if you desire to get essay online from excellent essay writing agentcy. You will get excellent writing service. When you have issues with essay writing surf the Primeessays company to buy term papers.
 [21] Admission essay | 2012-10-24 03:37:29

 Stop browsing Internet and searching. Simply visit this website to buy essays online and You will be gratefull for excellent writing services we offer.
 [22] writing job onlne | 2012-10-24 04:46:23

I want to thank you a lot for a useful thought and besides, want to share with you the advice: if you trying to find writing jobs online, this service will helpful.
 [23] link building service | 2012-10-26 07:50:51

Do not know how to do seo stuff correctly? Do not want to waste your time? Do not worry just because forum profile service cheap-link-building.com will be great stuff for you!
 [24] social bookmarking submissions | 2012-10-26 07:59:34

Do you think that is very hard to optimize your site? I do not consent that, because the feeds submission directory 4submission.com service would make it easily.
 [25] do my paper | 2012-10-27 00:16:58

Correctly composed papers for money would give students a possibility to have A+. Nonetheless, custom research papers writing will take your free time. So it will be practicable to buy essay editing service "exclusivepapers.com" to foreclose it.
 [26] write my essay uk | 2012-10-27 00:22:26

Donít look for the really hot data connected with this good post in the supermarkets! Buy an essay and buy research paper in the custom essays writing firm.
 [27] speeches essay | 2012-10-27 01:51:49

The Shakespeare essays paper "essaysbank.com" offered by expert custom writing services could be noticed by students in internet. So, it's possible to get essay almost costless.
 [28] online essays | 2012-10-27 02:29:18

 Then if you are a graduate who is hunting for essays writing help check this Internet site "essayswriters.com". Buy an essay online from the reputable agency and you will never regret.
 [29] write my essay online | 2012-10-27 03:08:54

You will be not able to avoid the research papers writing tasks. However, the online essay writing company can assist you resolve your academic writing issues.
 [30] article submission directories | 2012-10-27 03:18:29

No matter what kind of web business you have got, little or big, you will require your site to have a good publicity. You can gain it utilizing the manual directory submission service with link building issues.
 [31] humanities essay paper | 2012-10-30 23:04:57

A lot of people donít know the correct way to complete the america essays. Therefore, now they have a possibility to come along your smashing outcome & perform the most perfect research papers ever.
 [32] writer job | 2012-10-30 23:43:54

Itís surely nice that you are sharing the useful information just about this good post, thence, I propose to take the help at the writer job 4writers.net service.
 [33] web site submission service | 2012-10-31 00:04:45

Millions of website owners are looking for quality submit article company that can offer link building of high standards!
 [34] United States essay | 2012-10-31 00:24:03

Do you require particular issue like america essay? I can't see any problem with that. You just will be able to utilize professional essays writing service to purchase research paper.
 [35] history essays | 2012-11-04 11:24:11

Itís very important to create the correctly done europe essay manyessays.com or free essays to have the academic success at the high school.
 [36] link building company | 2012-11-04 12:20:29

My business is getting well and page rank of my website is high. All this is just because I choose the professionals to cooperate with. I use premium search engine optimization issues at blog commenting service of reputation of trustworthiness. Thnx those experts very much!
 [37] seo service | 2012-11-04 12:20:33

Bookmarks submission is becomingis getting substitute thing for Google. The social bookmarking sites became popular because of it!
 [38] cheap directory submission ser | 2012-11-04 12:47:20

Previously I didn't get know that backlinks building played great role for sites. However, my dude who was hired at link popularity services, explained me all just about link building prices. Therefore, at this moment I realize what my internetsite requires for better PR.
 [39] professional writing service | 2012-11-05 03:44:08

Me tell find out all information of discounts just before you order custom essay in the writing organization. And guys would also find the useful outcome connecting with this good post in the web.
 [40] best online papers | 2012-11-05 05:01:32

 Come to this site if you wish to buy professional essays in order to receive essay help or purchase term paper of top quality. You will never be sorry to have bought essyas from this agency. The assurance of this firm is delivery of brilliant essay custom writing.If you have got problems with essay writing go to Primewritings company in order to gain help with research paper.
 [41] buy essays for cheap | 2012-11-05 07:43:51

Do not be scared when tell: "I need custom term paper (essaysexperts.com) ", just because custom essays writing services are not allowed to use any kind of plagiarism. Thence, you can be completely sure that your research paper will be written of supreme quality.
 [42] custom writing | 2012-11-05 07:55:54

 Highest quality research paper service is probable to receive, if you select this site to order excellently written essay from the recommended company.
 [43] Write Essays | 2012-11-05 07:57:56

We have to love our tutors for their academic requirements. They require us to become good academic writers. We have a chance to buy Essays Online, nevertheless, we cannot get something new doing that.
 [44] Visit this website | 2012-11-05 08:23:50

 School assignments wonítbe complicated as now all students can get any sort of customized papers at professional writing services. Accept research paper help and let talented writers to compose the first-rate work for you.
 [45] Buying Essay Online | 2012-11-05 17:02:33

It's a big pleasure to remember your academic career is getting very well. Thus I always buy the term papers for sale from the essay example service to do my future career better.
 [46] custom essay websites | 2012-11-05 17:02:35

Are you embarrassed just because of essays writing? Do not surrender! You will manage with types of problems if buy custom written essays (primewritings.com). That's true. Moreover, I have been done that within several years.
 [47] cheap term papers | 2012-11-05 17:07:57

Now, there are numerous custom paper writing firms which propose custom written essay, but I advise you to use the following Web site (essaysexperts.com) and purchase customized essay from the most respectable company.
 [48] writing paper | 2012-11-06 17:34:25

 That wasnít very hard for me to find the trustworthy organization that offered to write paper for me.
 [49] buy college term papers | 2012-11-06 17:53:39

Consequently, you have to do some essential decisions. For example, you may select to get term papers for sale topwritingservice.com or not to buy. You only decide what to do.
 [50] writing services | 2012-11-06 18:10:09

 I agree with this review more than any I have seen until today on the internet. I like that it isn't written in cheeky language. Thank you so much. I will certainly keep in touch, because I need custom research papers gogetessays.com to solve all my problems.
 [51] forum posting service | 2012-11-13 04:19:40

My internet site is really important for me. Thus, it ought to be ranked high. I ought to determine if it is worth to use blog posting tools at blog posting service topqualitybacklinks.com. I don't get if that can help my internet site. Can someone give some information just about website submission corporations? Thanx!
 [52] essay service uk | 2012-11-21 05:30:09

Very oft, students don't recognize that research papers creating is very important issue. Nonetheless, I know that a prominent Custom UK Essay writing "primeessays.co.uk" service would to aid everybody.
 [53] essay writing | 2012-11-21 05:30:34

Go up here in order to order originally written cheap papers and receive perfect custom writing help.
 [54] A level coursework | 2012-11-21 05:48:36

Visit Quality Essay company "qualityessay.com" if you are interested in getting high quality term paper help from the reliable firm. You can be certain that you will get quality custom essay service.
 [55] Write my paper | 2012-11-21 06:54:03

 High school students who donít know how to prepare their writing assignments should go to Internet site. This organization offers flawless online writing services. Purchase essays for a good price.
 [56] dissertation writing | 2012-11-21 07:19:05

A PhD level has to be very serious thing for all students. Who should help scholars in thesis abstract just about this topic composing? I have to suggest to order the thesis writing in the dissertation writing service. We hope that the proposition could aid you!
 [57] college papers | 2012-11-21 08:26:59

 At whatever time you don't have any idea how to produce your college papers, check this link. Everyone who wants to buy essays from this agency will receive essay help .
 [58] college paper writing | 2012-11-21 08:50:50

 Browse the Web page (essayslab.com) and experienced writers will provide you best assistance with essay custom writing. Approach the reliable bureau and buy essay online.
 [59] writing an essay | 2012-11-21 08:56:01

 Buy essays because the expert crew of this paper store is famous for proposing excellently done write-ups to the undegraduates all over the globe. Look at this site essayslab.com and you will be surprised by the quality of professional writing services.
 [60] custom writing | 2012-11-21 09:00:05

Go to our Web site and order excellent online essay from the best company to receive perfect research writing.
 [61] loans | 2012-11-21 22:58:38

It is known that cash can make people independent. But how to act when someone does not have cash? The one way only is to receive the mortgage loans and just short term loan.
 [62] Write my paper | 2012-11-22 01:33:46

Are you prepared to be an expert in term papers writing. Thus, you must write on very high level. You do not have to Buy term papers (superbessay.com), if you want to show your actual essay papers writing skills.
 [63] custom research paper | 2012-11-22 01:34:23

 This organization gives best help with research paper. Check here to buy essay.
 [64] essay service | 2012-11-22 01:41:14

 Working with this trustworthy firm you will receive reliable term paper writing services. All you have to do is click up here, buy essay writing and I assure that you will turn back to this firm once again.
 [65] thesis | 2012-11-22 01:41:58

That topic is truly profitable! Once, thesis writing company facilitate me with writing dissertation, which I was incompetent to polish off due to private reasons. I consult you dissertation "dissertationmasters.com" that will support you in your university life. Cheer!
 [66] thesis writing service | 2012-11-22 01:43:33

People have to handle history dissertation just about this topic in a right way, because they will need this a dissertation in future.
 [67] goldessays company | 2012-11-22 01:49:26

In recent times, graduates are very busy to write papers, they can contact Gold Essays firm (goldessays.com), and buy essay writing. Turning to this superior paper writing firm sophomores will receive persuasive essay writing help.
 [68] seo packages | 2012-11-22 03:51:38

You will find visual changes of your site's ranking if you try to utilize submit article directory "topqualitybacklinks.com" company and website submission options. Your internet site will get you much more traffic!
 [69] custom term papers | 2012-11-22 04:26:25

I cannot dedicate my whole life to an academic papers writing. I am very young and I want to hang over. I Buy an essays paper (bestcustompapers.com) in order to use my free time.
 [70] custom term paper | 2012-11-22 05:10:21

Iwas provided with an task to be fulfilled, but scared to use an online essay writing services. However, I made up my mind to buy review essays essaysleader.com at online essay writing company, as my class-mates purchased a great number of various essays from those online essay writing company and were satisfied with the quality of the essays produced .
 [71] business loans | 2012-11-22 22:59:32

Don't you know that it's correct time to get the mortgage loans "goodfinance-blog.com", which can help you.
 [72] Check here | 2012-12-04 21:51:17

 Are you in need of resume writing tips? Still have no clue which company to choose for buying resume? Contact Prime-Resume company "prime-resume.com". Here you may read CV templates or buy resume from expert resume writers.
 [73] buy a essay | 2012-12-07 04:42:34

 Itís important to pass all the ezaminations during the study at school. If graduates donít have enough time for that, the can simply receive online essay written by proficient writers.Look through this site. The best solution for getting high grades is to use the prime-writing.companyís brilliant essay service.
 [74] home loans | 2012-12-08 02:07:44

If you are willing to buy real estate, you would have to receive the loans (goodfinance-blog.com). Furthermore, my mother always takes a college loan, which occurs to be really rapid.
 [75] custom research paper writing  | 2012-12-08 08:59:54

Actually, that's not hard to buy online papers when high school students do not have time to write custom paper. Therefore, that is a common thing to look for custom writing firm.
 [76] business loans | 2012-12-09 07:03:08

Specialists state that personal loans (goodfinance-blog.com) aid people to live their own way, because they are able to feel free to buy needed things. Furthermore, various banks offer collateral loan for young and old people.
 [77] home loans | 2012-12-09 07:10:39

It is good that we can get the loan goodfinance-blog.com and that opens up new possibilities.
 [78] Web page | 2012-12-09 22:21:14

Whenever you have no idea which company to choose for buying resume and long for professional CV writing services, check out site prime-resume.com. You can glance over samples of resume writing or buy CV from best resume writers.
 [79] Online Essay | 2012-12-10 01:26:36

Supreme feelings fill me when I work on academic essay assignments. I do not understand people who turn to Custom Write services. It is such a joyousness to work on academic assignments yourself.
 [80] dissertation writing | 2012-12-10 01:37:24

You seem to be very master and your information just about this topic supposes to be superior. Would you continue your story? I would like order some the dissertation or just thesis "exclusivethesis.com" from you.
 [81] plagiarism checker | 2012-12-10 06:50:39

Whether we admire it or not, quondam in our lives, we would need to carry out term papers and other written adventure. It is doubtlessly not clear but very elegant to produce a research about this good topic. To do that, you need to read a lot of articles and books, or you can just order some kind of work and then use online plagiarism plagiarismsearch.com made by http://www.plagiarismsearch.com and save your time like some quick help with the American Dream.
 [82] custom essays cheap | 2012-12-10 22:45:42

 Original academic writing help is guaranteed, in case you check this link "topwritingservice.com" and order the best essay online from the trustworthy firm.
 [83] term papers to buy | 2012-12-10 23:02:32

 However, it isnít very easy to find the top-notch firm that proposes to utilize university writing "writingscentre.com" services of the superb quality for pretty good sum of cash.
 [84] thesis writing service | 2012-12-13 01:08:50

You have to be very inventive guy to write the good enough dissertation as this good post . I like to buy essays or thesis writing topdissertations.com about it. Thank you a lot!
 [85] thesis | 2012-12-13 01:10:25

That would be really hard to complete good enough thesis examples connecting with this good post by your own! My suggestion is to detect the professional dissertation service and other way, you can to buy theses from thesis writing "primethesis.com" services.
 [86] buy non-plagiarized research p | 2012-12-13 22:09:07

Consequently, you try to be the best. Nonetheless, it is complicated to to do if you do not have somebody such as essay writing service "supremeessays.com" company to aid you with term papers creating. Therefore, do not spread your valuable time and begin looking for respected experts online!
 [87] plagiarism checker | 2012-12-14 00:00:04

I constantly submit only unique academic papers and I do know it firmly because I use plagiarism detect.
 [88] best custom papers | 2012-12-14 01:21:50

University students look for a good way to resolve their academic difficulties. Nonetheless, some of students state that the most effective way is to use research papers buy (essayslab.com) options at reliable custom academic papers writing corporation.
 [89] link | 2012-12-16 00:46:49

 Now you don't need to go all out so as to create fabulous research papers as online writing services are willing to provide you with real help with academic papers. Ask for essays help essaysservice.com and get rid of complex writing assignments.
 [90] affordable research paper | 2012-12-16 01:02:53

Click on this Web page (marvelousessays.com) to buy custom college essays and Youíll surely obtain best paper writing service.
 [91] Look here | 2012-12-16 17:42:51

People are applying our HTML5 & CSS3 Development in the most little part-time operations to the biggest organizations.
 [92] expert resume writers | 2012-12-16 22:10:35

 When you are in a hurry and donít know how to make the time in order to produce an outstanding curriculum vitae, get to the organizations which propose to get resume templates.
 [93] buy dissertation | 2012-12-16 22:20:22

Some hard working students will read your story about this post and just buy the dissertation thesis in the thesis writing service (master-dissertations.com).
 [94] custom dissertation | 2012-12-16 22:23:21

Some people should choose between dissertation service and custom thesis primethesis.com writing services to buy thesis summary connecting with this good topic.
 [95] plagiarism checker | 2012-12-18 15:41:19

Lots students pass the responsibility to qualified writers because they don't have the skill to compose a respectable paper about this post in that the argument why students need to use plagiarism detect, but such people like writer don't do that. Thanks for the knowledge
 [96] best essay sites company | 2012-12-18 22:40:32

 Donít have the faintest idea which organization to pick to receive aid from? Look over PrimeEssays testimonials best-essay-sites.com, and make a judicious decision.
 [97] marvelousresume.com | 2012-12-18 22:55:35

 Would you like to get professional resume service (marvelousresume.com), which conform the field of science you wish?. You can count on our resume writers, as you count on yourself. Thanks because itís the good way
 [98] buy non-plagiarized term paper | 2012-12-19 00:30:00

You should simply buy custom essays just because lots of essays writing firms suppose to be completely committed to your successful degree program completing!
 [99] check here | 2012-12-19 19:59:43

 Dealing with this trustworthy company you will acquire excellent academic writing help. All you need to do is check here "specialessays.com", buy papers online and I give guarantee that you will get back to this writing service in the future.
 [100] thesis | 2012-12-19 22:35:23

Some people get know that this is comfortable to order the thesis examples and thesis topthesis.com related to this topic, than to complete by personal efforts.
 [101] buy thesis | 2012-12-19 22:38:18

If some students are willing to have master degree at every field of science you should purchase dissertation expert and buy thesis. I have done this several times. I meant about buy dissertation from thesis writers.
 [102] plagiarism check | 2012-12-25 15:33:41

We are not criminals! Plagiarized content suppose to be a crime. We always attempt to illuminate plagiarism. Hence, plagiarism detector aids very much.
 [103] offshore software development  | 2012-12-30 17:12:40

 Look at this site "soft-group.com" and you will come across highly educated workers who are always at your control on your PHP MySQL Development projects.
 [104] this Web site | 2012-12-30 17:15:17

 Get in contact with our offshore software development Ukraine company and find broad range of advanced IT services.
 [105] up here | 2013-01-02 02:56:52

Lots students pass the responsibility to expert resume writers because they miss the talent to compose a satisfactory resume in order that the reason why you need to resume company, but such customers like creator don't do that. Thanks a lot for the article. Very important knowledge about this topic.
 [106] StandoutEssay.com testimonials | 2013-01-02 03:35:35

 Paper writing service reviews may easily assist you to find out the required service, just visit Best-Writing-Services company.
 [107] writing services | 2013-01-08 19:38:18

I prefer buying term papers as long as I desire to spend time with my mates than try to search word of advice on how to generate good quality writing assignments.
 [108] business loans | 2013-01-08 20:34:25

The mortgage loans (goodfinance-blog.com) suppose to be important for people, which would like to organize their company. In fact, it is not really hard to receive a commercial loan.
 [109] thesis | 2013-01-08 23:18:57

If you go on with your investigation associated with this post, we will surely purchase phd thesis in the buy thesis (master-dissertations.com) service in web.
 [110] custom essay writing | 2013-01-11 01:21:34

Consider our home page (qualityessay.com) in order to buy an essay and receive first-class essays and paper writing help.
 [111] custom thesis | 2013-01-11 10:54:31

Professional history dissertation referring to this topic made by thesis service or custom dissertation service should be a proper step to the academic success.
 [112] essay samples uk | 2013-01-12 00:41:48

 There is no need to proceed with a search, visit home page "primewritings.co.uk" in case you want to buy term paper uk from experts.
 [113] custom essays uk | 2013-01-12 03:00:13

If you are a scholar and hunting for reliable essay writing service contact qualityessays.co.uk and buy a research paper.
 [114] custom papers uk | 2013-01-14 09:12:41

I cannot sleep at night. That is just because I need to write essay papers soon. I even guess about a chance to use research paper services uk "qualityessays.co.uk". I opine that can help a lot!
 [115] term papers online | 2013-01-14 23:49:30

Do you grudge students because they submit superior essay essay papers? Did you think they could ask term paper services aid them? Actually, you have a chance to do the same.
 [116] essay papers uk | 2013-01-15 04:33:39

Academic papers writing is not my piece of cake. But, I always get the best marks. That is just because I buy custom papers uk. Thus, I recommend people to do so also!
 [117] essays help uk | 2013-01-15 09:38:10

Go here to receive help with your custom research paper uk.
 [118] custom research papers for sal | 2013-02-18 06:44:45

Academic writers can accomplish the best research papers for you. Hence, it can be worth to buy term papers at the buy term paper service "bestwritingservice.com" where such great experts are hired.
 [119] custom essay writing services | 2013-02-18 19:52:31

 Thank you for all the exacting efforts over the years. It was constantly a relevant creation having you blog. It is lovely to transport one's self into the sense of the back when, to see how a discreet gentleman has thought before us, and to what dignified apex we have at last hit town. Best of luck in your new venture if youíll have a short of of conception, always aim custom research papers writing. Keep the articles arriving!
 [120] writing service | 2013-02-22 00:15:35

 Every student looking for best persuasive essay writing and ready to purchase order essays online is encouraged to simply follow to this site (exclusivepapers.com).
 [121] paper writing services | 2013-02-23 10:46:01

No more spoiled grades! At this time people have a chance to buy college term paper writingscentre.com and get higher results.
 [122] check this link | 2013-02-25 18:53:37

Great research papers contain no faults. Ask custom buy research paper services make your resesrch papers grades winning.
 [123] over here | 2013-02-26 00:56:30

 Oh my gosh! That is the pretty object I've ever seen !!!! From time to time to reach your PhD degree you have to purchase essay writing gogetessays.com .
 [124] dissertation | 2013-02-27 16:50:26

This article is really useful! Once, thesis writing company assist me with writing term paper, which I was incompetent to polish off due to individual causes. I consult you dissertation writing (dissertationmasters.com) that will help you in your students life. All the best!
 [125] miscellaneous essays paper | 2013-03-30 23:59:06

Need special issue such as speeches essay essaysbank.com? I can not see problems with that. You just would be able to utilize expert essays writing service to order essay.
 [126] history essays paper | 2013-04-01 00:56:26

When people are not sure what to select, free essays or just humanities essays "manyessays.com", they could ask you, just because you do know the correct way to do the superb theme.
 [127] business loans | 2013-04-04 15:08:18

I propose not to hold back until you get enough cash to buy different goods! You can take the home loans "goodfinance-blog.com" or just short term loan and feel free
 [128] thesis writing | 2013-04-05 21:45:52

Thanks a lot for a kind of the hottest idea just about this post ! You should set up your own dissertation, I guess. Just because different buy thesis services make such things and you are able write very example thesis too.
 [129] Research Paper Introduction | 2013-04-05 22:05:49

I opine that you do know how complicated can the customized research paper performing be. Nevertheless, you must not be confused, simply because the essays writers present the essay writing services essays and thereís not a big problem to order essays and be satisfied.
 [130] professional custom essays | 2013-04-06 18:26:08

 Check this Internet site marvelousessays.com if You are looking for a chance to get a term paper and our company will provide You with wonderfull essay writing service.
 [131] research paper examples | 2013-04-06 18:35:48

An academic career has to be the only purpose for university students. Moreover, there is no problem to order essay writing service (essaysexperts.com) to show writing skills or growth of personality.
 [132] Web site | 2013-04-07 13:43:39

 Sick and tired of swotting up on your assignments? Donít hang back and visit this website to acquire custom essays and obtain exceptional writing services.
 [133] dissertation writing | 2013-04-07 15:40:50

Thank you a lot for your very hot outcome like this good topic. Can you aid to find the thesis writing service or an experienced dissertation writing service to order the student dissertation at?
 [134] writing service | 2013-04-08 11:46:41

It is not possible to foreclose the rising of prices for essay papers. You need to pay a bit cash if you want to tell experts: " Write my essay for me superbessay.com ".
 [135] dissertation service | 2013-04-08 14:22:20

Such futuristic buy dissertation like this good topic is the stuff that all people want purchase from the paper writing services, thence every time they want to have the thesis writing service or custom written essays.
 [136] dissertation writing | 2013-04-08 14:23:29

Itís a perfect time to say that you affected me with your professional story related to this post. Therefore, I have to attempt to compose the best dissertation on the base of your research. Or credibly, thatís assertable to find some thesis writing service.
 [137] term papers for cheap | 2013-04-09 04:56:43

 Just look over here in case you lack time and need to purchase custom papers and we guarantee our customers master online essay writing.
 [138] high quality custom essays | 2013-04-09 05:10:52

Graduates that struggle with creating papers realize that it is nice to buy custom papers written by proficient writers.Check this link if you have to get perfect help with persuasive essay writing you need come to those essay writingcompany.
 [139] premium essay writing service | 2013-04-09 23:31:03

 If you need to buy perfect academic essays in no time, click here "essaysprofessors.com" and receive excellent custom essay service.
 [140] Essay Writing | 2013-04-09 23:31:16

 Are you looking about for excellent paper writing? You can get it in the nick of time! Visit Web site "essaysprofessors.com" to buy papers.
 [141] buy the essay | 2013-04-09 23:53:11

 Are you looking for the best writing service where to buy an essay online? Check this link (essaysexperts.com) and true professionals will render you excellent writing services in order to make your life easier.
 [142] fast custom papers | 2013-04-10 03:21:38

Your stuff is very engrossing. I will select the paper writing service to buy essays online supremeessays.com and already written essay, because this is the good way.
 [143] professional resume service | 2013-04-10 21:41:36

 If you try to find place where you can get resume writer prime-resume.com here is very adept place for you about this good post, which furnish examples and gives an pass to learn how make great CV resumes . But this site is more alluring, and more considerate.
 [144] essay writing | 2013-04-11 00:41:35

 If you long for flawless college essay writing service, merely click over here. Buy research papers and say hello to the fabulous life.
 [145] term paper writers | 2013-04-11 02:19:46

 Check out this link "prime-writing.com" if you wish to purchase academic papers in order to gain get a term paper or order term paper help of high quality. You will never be sorry to have purchase essyas from this firm. The guarantee of this firm is delivery of nice custom essays writing.When you have got problems with paper writing come to Primewritings company in order to purchase term paper help.
 [146] Blackberry Game Development | 2013-04-19 13:55:29

 Get in touch with our software Services and leave your problems as experts will put forth an effort to aid you. Our customers merit exxcellent quality of services, so visit this site soft-group.com.
 [147] custom essay review | 2013-04-19 19:21:09

 Through Essayontime rewiew you get crucial data about different companies which give paper writing aid on the Net.
 [148] writer job | 2013-04-19 20:10:15

Hi to all! Have a desire to notify you that great specialists of this copywriter job organization have provided assistance to me again and again with the submission of my school assignments and have made their work more than effectively.
 [149] link | 2013-04-22 10:54:38

 Our certified resume writers will be happy to provide professional CV writing services to job seekers who do not have time to write a resume. Check out ResumesExpert company and check CV templates. Now you know where to buy resume paper, so do not mull over buy resume and build your career.
 [150] resume writing services | 2013-04-22 10:55:21

 Many juniors are concerned which service to choose for buying resume, but they merely need to get in touch with Exclusive resume company exclusiveresume.com and get help with resume writing. Also if sophomores donít have the faintest idea where to read CV sample or they need to buy resumes produced by clever resume writers they are able to come for this respectful writing centre.
 [151] look here | 2013-04-22 15:58:11

 Have no idea which writing centre to select to get aid from? Look over BuyEssay testimonials, and arrive at a good choice.
 [152] plagiarism checker | 2013-04-22 17:22:16

I think it's captivating, because it emblazon a very academic-focussed attitude. Preserving the forthrightness of the academic system seems to be a order, although easily curse recompensed ads for such a service seems a frail response. When the association is known by your friends who were captivated with the results of the alliance, about this good topic . But don't foreget always to use plagiarism detect "plagiarismsearch.com" run them through this plagiarism detection system for absolute checking and make sure that your material is authentic.
 [153] check for plagiarism | 2013-04-23 00:48:55

Different people cannot stop steal someone's ideas for their own needs. However, you are able to avoid stolen papers with aim to save you good name. Thence, always utilize check for plagiarism.
 [154] resume formats | 2013-04-23 01:12:11

 Are you in need of resume writing tips? Still ignorant of which company to choose for buying resume? Visit Resumes Leader page resumesleader.com. Here you can see resume templates or order resume from highly qualified resume writers.
 [155] site | 2013-04-26 00:47:19

 If you try to find place where you can get resume writing services marvelousresume.com here is very absolute place for you about this good topic, which accommodate examples and gives an chance to learn how make great CV resumes . But this site is more elegant, and more operative.
 [156] CustomEssays rewiew | 2013-04-26 01:38:16

 As a college students I have quite tight daily schedule and would rather buy papers at online paper writing company. That is why I rate highly writing services reviews essaysreview.com which can help all customers to realize what company to rely on.
 [157] africa essay | 2013-05-25 08:16:05

That is no matter how hard you try to compose high quality technology essays paper "essaysbank.com", just because the professional custom essays writing organizations can do that better. Therefore, relax and purchase essays.
 [158] this link | 2013-05-27 10:48:51

A lot people pass the duty to professional resume writers because they miss the talent to compose a good resume so the argument why customers need to resume service, but such people like author don't do that. Thank you very much for the information. Very interesting topic about this topic.
 [159] speeches essay | 2013-05-30 13:18:12

When you do want to get a success, you should finish the great english essay paper. And the superior term paper can be a right source for custom esays performing, I do think.
 [160] DotNetNuke Development | 2013-06-04 22:00:47

 Only cooperating with our it company you will obtain maximal outcome. Visit SoftGroup "soft-group.com" and skilled workers will answer all your requirements and transactional goals.
 [161] writing jobs | 2013-06-16 04:00:37

If you are students who donít know how to handle their writing home task by their own therefore highly qualified copywriting jobs is available for you on this online soutce!
 [162] plagiarism detect | 2013-07-01 17:54:46

Don't want to be caught plagiarizing? Want to submit only original contents? Select plagiarism detector (theplagiarism.com) and be assured that your stuff are unique.
 [163] plagiarism checker | 2013-07-04 04:52:22

Whether we appreciate it or not, quondam in our lives, we would must to carry out term papers and other written activity. It is beyond any doubt not apparent but very charismatic to construct a research about this good post. To do that, you need to read a range of articles and books, or you can just order some kind of work and then use plagiarism detector plagiarismsearch.com done by http://www.plagiarismsearch.com and save your time like some quick help with the American Dream.
 [164] personal loans | 2013-07-08 23:29:16

Some time ago, I really needed to buy a good house for my firm but I did not have enough money and couldn't order anything. Thank God my colleague adviced to try to take the personal loans at creditors. Hence, I acted so and used to be happy with my collateral loan.
 [165] buy thesis | 2013-07-09 01:17:25

Itís a fantastic story related to university. Some guys want to have such high writing skills. But they should buy the finance dissertation proposed by some experienced dissertation writing "dissertationmasters.com".
 [166] writing a research paper | 2013-07-11 12:29:34

Up-to-date university students have good advantages, because they are able to buy coursework of great standards and completed by professionals.
 [167] personal loans | 2013-07-11 13:21:18

The loans suppose to be useful for people, which are willing to organize their organization. By the way, that is easy to receive a commercial loan.
 [168] Internet site | 2013-08-02 09:39:30

 Donít know which company to pick to receive aid from? Glance over Essayontime testimonials, and make a wise choice.
 [169] modaonline | 2013-08-07 08:43:51

http://modaonline.dzs.pl/
 [170] Internet site | 2013-08-10 16:26:35

 You donít need to hesitate about where to buy resume paper at all. Highly qualified resume writers are are just a click away. Contact Resumes leader company so you can check resume templates or order resume. Be certain that you will obtain quality and professional resume writers review.
 [171] resume writing | 2013-08-10 16:55:31

 Yeah decidedly very helpful for the lecturer it was pleasant to read about this post! If you need to get a great job firstofall you need resume writing "marvelousresume.com". Study and don't forget - if you have to work and study at the same time, there arehotshots who are ready to aid you with your resume when you under time encumbrance and looking for a great job.
 [172] visit this website | 2013-08-13 10:51:18

 Contact Perfect-resume company if you need professional CV writing services. Having worked with this respectful writing agency, you will be aware of how to write a resume and where to find sample of cover letter. Donít hesitate, order resume of high quality from certified resume writers.
 [173] visit this website | 2013-08-13 10:52:09

 Are you sick and tired of writing essays, research and term papers? Skim essay service reviews (essaysreview.com) and opt for the company you desire to collaborate with.
 [174] Web site | 2013-08-16 09:05:24

 Our certified resume writers will be happy to provide help with resume writing to job seekers who do not have time to write a resume. View this ResumesExpert company resumesexpert.com and check resume formats. Now you have the necessary info where to buy resume paper, so do not hesitate buy resumes and build up your career.
 [175] here | 2013-08-16 09:52:33

 Donít know which agency to pick to obtain assistance from? Go over EssaysLab testimonials, and make a sound choice.
 [176] essays help | 2013-11-22 18:55:48

Check here (essaysservice.com) in order to receive a splendid look-in to purchase excellent cheap custom essay and make a change in your studentís career due to our best writing paper.
 [177] custom research paper | 2013-11-22 19:22:28

Newly, graduates have no time to create paper writing, they may go to home page, and buy an essay paper. Turning to this superb paper writing firm pupils will obtain paper writing assistance.
 [178] essay service | 2013-11-27 09:34:51

Experienced academic writer is as a professional soldier! She cannot miss just because students's degrees depend on it! Deciding to buy term papers online goldessays.com you should be aware of frauds .
 [179] buy law essays | 2013-11-27 09:53:05

 Press to look here if you want to get a term paper online and enjoy our cheap custom writing service.
 [180] Bad Credit Personal Loans | 2014-01-23 05:00:40

Bad Credit Personal Loans Guaranteed Approval: Guarantee of Cash. Bad credit score including arrears, defaults, late payments, skip installments and bankruptcy are not impediment in your way today. You will easily get cash to solve your personal problem with guarantee.

Visit here: http://www.prlog.org/12231740-bad-credit-personal-loans-guaranteed-approval-guarantee-of-cash.html
 [181] Marina Yana | 2014-07-19 00:52:07

Thanks for your post which is truly informative for us and we will surely keep visiting this website. We are also in same field and welcome you to visit our website

 [182] hack empire | 2014-09-12 13:57:59

We are HackEmpire, an Indian based hacking team, with excellent records in our field. We render the following services at affordable price.
*University grades changing
*Bank accounts hack
*Twitters hack
*email accounts hack
*Grade Changes hack
*Website crashed hack
*server crashed hack
*Retrieval of lost file/documents
*Erase criminal records hack
*Databases hack
*Sales of Dumps cards of all kinds
*Untraceable Ip
*Individual computers hack
*Websites hack
*Facebook hack
*Control devices remotely hack
*Burner Numbers hack
*Verified Paypal Accounts hack
*Any social media account hack
*Android & iPhone Hack
*Word Press Blogs hack
*Text message interception hack
*email interception hack
*Skype hack *Credit cards hacker
*We can drop money into bank accounts (All Bank,American,Chartered Bank,Banco Popular,Bank of Albuquerque, Bank of Arizona,Bank of Arkansas,Bank of Oklahoma,Univest Bank and Trust Co.,USAA Federal Savings Bank,Fifth Third Bank,UniBank,Old Second National Bank,Fidelity Investment bank,Centennial Bank,Zions Bank,Bell State Bank & Trust,arvest bank,American Trust Bank of East Tennessee,Academy Bank,Armed Forces Bank,Simmons First Bank,Cole Taylor Bank etc.)

 Contact us at hackempire007@gmail.com
 [183] Bradonhack | 2014-11-10 19:25:18

Do you want a Professional hacker?





 Hack facebook ? Hack email? change school
grades? Hack Visichat Room ? Hack Flash Chat Room ? Hack Ftp User &
Pass ? Hack Database ? Hack Yahoo Mail ? Hack Gmail Id ? Hack
Websites ? Hack Face Book Account ? hack Vb Forum ? Hack WordPress Blog
? hack C C any country ? hack moneybooker ACCOUNT ? hack liberty
Reverse Account ? hack paypal Account ? Root server ? bypass Google
phone verification ? Install Red5 On linux server ? Hash Crack ? Hack
Bank Account ? Ddos Service ? hack twitter? erase criminal records?



  Get results in 1hrs' time for emails and other accounts.



CONTACT EMAILS..bradonhack@gmail.com
 [184] Martin passports | 2014-11-25 21:46:34

 Are you looking for a travel document? passports, Driver's license, Citzenship ids, greencard:


contact me: martinpassports@gmail.com

 
 DO YOU NEED A FAKE NEXT TO ORIGINAL PASSPORTS, DRIVER'S LICENSE, U.S GREEN CARDS, CANADA GREEN CARDS, EUROPEAN PASSPORTS TO MAIN COUNTRIES. WORK PERMITS?
GET YOURSELF FAKE NEXT TO ORIGINAL PASSPORTS, DRIVER'S LICENSE, U.S GREEN CARDS, CANADA GREEN CARDS, EUROPEAN PASSPORTS TO MAIN COUNTRIES.
WORK PERMITS
 
GET: BRITISH PASSPORT, WORK PERMIT OR DRIVER'S LICENSE.
 
GET: U.S PASSPORT, GREEN CARD. DRIVER'S LICENSE,A NEW SOCIAL SECURITY AND CITIZENSHIP DOCUMENTS.
 
GET: DUTCH PASSPORT AND WORK PERMIT, DRIVER'S LICENSE AND SSN
 
GET: FRENCH/FRANCE PASSPORT. DRIVERS LICENSE AND SSN
 
GET:BELGIUM PASSPORT, DRIVER'S LICENSE AND SSN
 
GET: GERMANY PASSPORT, DRIVER'S LICENSE OR WORK PERMIT
 
GET: A CANADIAN PASSPORT , DRIVER'S LICENSE, GREEN CARD OR SSN
 
GET: ITALIAN PASSPORT, DRIVER'S LICENSE OR WORK PERMIT.
 


 
JUST GET A NEW IDENTITY TODAY AND LIVE A BETTER LIFE.


CONTACT ME: martinpassports@gmail.com


For more inormation.
 [185] <a href="http://www.ch | 2015-06-26 09:00:19

Bad Credit Personal Loans Guaranteed Approval: Guarantee of Cash. Bad credit score including arrears, defaults, late payments, skip installments and bankruptcy are not impediment in your way today. You will easily get cash to solve your personal problem with guarantee.
 [186] tari tessier | 2016-03-09 07:58:40

Just what I was looking for. I recently had to merge some files and spent an enormous amount of time trying to find an appropriate service. Eventually I found a good one. Try AltoMerge to merge your PDF files here "http://www.altomerge.com/". It allows you to merge files in different formats.
NOTE:
Comments that will hurt anyone in any way will be deleted.
Don't ask for features, advertise or curse.
If you want to leave a message to the author use the contacts,
if you have any question in relation to your comments please use the forum.
Comments which violate any of these requests will be deleted without further
notice. Use the comment system decently.

Post your comment:
Name:
email:
Comment:
::Top 5 Tutorials::
Embedded Python[106602]
2D Rotated Rectangles Collision Detection[79756]
Keyboard Hook[68953]
UDP[52984]
HTTP Proxy[36218]

::Top 5 Samples::
2D ColDet Rotated Rectangles[10624]
PS2 Mouse Driver[6110]
Wave Format Player[4994]
Reading FAT12[4880]
CodeGuru[4570]

óóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóó
All rights reserved to RageStorm © 2009