Tuesday, December 15, 2009

Configuring grappelli in dev environment (django admin ui replacement)

Grappelli is a well polished admin interface for django. The project is hosted at http://code.google.com/p/django-grappelli/ and at github http://github.com/revyver/django-grappelli for forking. I followed the documentation at http://code.google.com/p/django-grappelli/wiki/Installation but couldn't get it to working. Here is what worked for me and could be used for development environment. It is not recommended to be used in the production environment (for that use the front end high performance http server for serving static content css, images and js)

  • django-admin.py startproject bar
  • cd to bar
  • svn checkout http://django-grappelli.googlecode.com/svn/trunk/grappelli/ django-grappelli-read-only
  • mv django-grappelli-read-only grappelli
  • modify settings.py and url.py such that settings.py would look like
  • # Django settings for bar project.

    DEBUG = True
    TEMPLATE_DEBUG = DEBUG

    ADMINS = (
    # ('Your Name', 'your_email@domain.com'),
    )

    MANAGERS = ADMINS

    DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    DATABASE_NAME = 'bar.db' # Or path to database file if using sqlite3.
    DATABASE_USER = '' # Not used with sqlite3.
    DATABASE_PASSWORD = '' # Not used with sqlite3.
    DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
    DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.

    # Local time zone for this installation. Choices can be found here:
    # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
    # although not all choices may be available on all operating systems.
    # If running in a Windows environment this must be set to the same as your
    # system time zone.
    TIME_ZONE = 'UTC'

    # Language code for this installation. All choices can be found here:
    # http://www.i18nguy.com/unicode/language-identifiers.html
    LANGUAGE_CODE = 'en-us'

    SITE_ID = 1

    # If you set this to False, Django will make some optimizations so as not
    # to load the internationalization machinery.
    USE_I18N = True

    # Absolute path to the directory that holds media.
    # Example: "/home/media/media.lawrence.com/"
    MEDIA_ROOT = ''

    # URL that handles the media served from MEDIA_ROOT. Make sure to use a
    # trailing slash if there is a path component (optional in other cases).
    # Examples: "http://media.lawrence.com", "http://example.com/media/"
    MEDIA_URL = ''

    # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
    # trailing slash.
    # Examples: "http://foo.com/media/", "/media/".
    ADMIN_MEDIA_PREFIX = 'http://localhost:8000/admin_media/'

    # Make this unique, and don't share it with anybody.
    SECRET_KEY = '9#-m5-dy581c(wq@gy!70e^_!6j@15m8@)+atng0cjb31a3&6r'

    TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.request",
    )
    # List of callables that know how to import templates from various sources.
    TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
    # 'django.template.loaders.eggs.load_template_source',
    )

    MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    )

    ROOT_URLCONF = 'bar.urls'

    TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/code/bar/grappelli/templates',
    )

    INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'grappelli',
    )
  • and urls.py would look like
  • from django.conf.urls.defaults import *

    from django.contrib import admin
    admin.autodiscover()

    urlpatterns = patterns('',
    # Example:
    # (r'^bar/', include('bar.foo.urls')),

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
    # to INSTALLED_APPS to enable admin documentation:
    (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    (r'^admin/', include(admin.site.urls)),
    (r'^admin_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/code/bar/grappelli/media/'}),
    (r'^grappelli/', include('grappelli.urls')),
    )
  • then do python manage.py syncdb
  • and then run the webserver with python runserver 0.0.0.0:8000 and open the browser to http://localhost:8000/admin

Friday, March 6, 2009

AJAX crawler and indexer

It is hard to create good SEO for pure AJAX based websites specially those written in GWT. Is this problem solved? I am expecting that google crawler would be come sophisticated so that it would start showing relevent search results for such sites. 

As we are pushing the limits of the intenet, expectations and incentive to write usable apps should be made high. Today it is a challenge to have good SEO for pure AJAX sites.


One of the idea is to use jquery to write crawlers on the server side. I.e exploit the technique mentioned in http://ejohn.org/projects/bringing-the-browser-to-the-server/.

This could be used to crawl AJAX content, specially sites which creates dynamic content and serve to users via ajax. A search engine can be created which is specialized for searching within ajax content. I would love to see next generation web crawlers to have such capabilites (or it could already be there)

Sunday, October 19, 2008

Research on new non XMLish RPCs

I was searching for a better RPC (other than SOAP, CORBA, RMI, DCE etc) and found some new kids on the block
  1. Cisco: Etch - Limited language binding
  2. Google: Protocol_Buffers - Just message wire format. Doesn't talk about RPC. Do see this post
  3. Facebook: Thrift- Very new and more like IDL CORBA, DCE family
And then I came across REST paradigm. I then researched its advantages with respect to RPC and found steve vinoski's blog post titled "The Technology Adoption Side of RPC and REST" which puts REST in the dissruptive technology bucket and RPC in the sustaining technology bucket. Very interesting read indeed

Friday, September 26, 2008

Enterprise Web UI analytics

While reading Martin Fowler's bliki titled ObservedRequirment, I was surprised by the fact that there is not much available for doing Enterprise grade web ui analytics. As pointed by Martin, these tools could mean a huge value to the software vendors selling web based enterprise solutions as they can then refine existing product and beat competition. Some questions which come to my mind:

  1. Can't enterprise customers deploy Google Analytics or other tools capabilities for finding user behaviours in enterprise scale applications too?
  2. Can't software vendors integrate these tools in their solutions to their advantage for finding how there applications are been used?
Privay could be one such force which could be playing against deploying tools provided by typical web ui analytics companies, or it could well be lack of insight on the part of software vendors developing such solutions/application?
Another force is that these tools may not provide direct ROI to the end customers but has great value to the software vendors
I certainly see a market potential in providing answers to question (2) but don't know if it could surpass the barrier of low or no ROI to the end customers. 
Is there any direct benefit to the end customers? That remains to be answered

Saturday, May 24, 2008

MVC in the browser

MVC in sever side is awesome and is provided by default in Rails but having an MVC at the client side (browser) is something I was looking for some time. It seems that GWT takes the pain out of client side software development and provides mechanims to do MVC for rich user interfaces.
There is a chapter on MVC in GWT in chapter 2 (). I was able to host the calculator app on my google app engine site at Max. I copied the code examples from http://www.manning-source.com/books/cooper/gwtip_code.zip and then fired/built/tested on eclipse with pure Java development cycle and copied over the generated javascript/html/gis/css on to google app engine. The product was instant hit to me

Sunday, May 11, 2008

GWT + GAE

Web applications are generally modeled through client-server software architecture and consists of two components

  • Server side: This is were all the business layer resides and infrastructure code resides
  • Client side: This is where all the client user interface resides
There has been lots of frameworks available for the server side but when it comes to client side you are left with javascript and html. Working with javascript and html is like coding in assembly language for the browser and is generally considered as black art (considering that you need to make them work on different browser flavors). Google web toolkit (aka gwit) comes to rescue here with all the best practices of large scale software development cylce.

Of course it demands that you have some basic understanding of java language and some knowledge of writing GUI code, but the payoffs are tremendous for large web applications. And with the power tools like eclipse and netbeans with which you can develop/test/debug your user interface code just like typical GUI development process. There are plugins (cypal-studio and gwt4nb) available for both these IDEs which automates most of the gwit work for you. Another benefit of gwit is that you would get all most all the google api (like google maps, google search) binding available for gwit

Lets see what Google App Engine (a.k.a gae) has to offer. It is google infrastructure similar to what is provided by Amazone EC2 (a.k.a ec2) but for free (with some limitations since it is early days). As with gwit, with gae you need to know python to some extent. Learning new languages is always a fascinating experience and ones understanding of things become better and in an heterogeneous environment its is definitely a plus. With gae (once you have your account alloted), you can write web applications without worry about scalability and data infrastructure layer. Google answer to database is found in Bigtable. The same infrastructure is now available for you. Some of the limitations of gae are as follows:
  • No persistent server side processes (i.e. no crob facility yet)
  • SQL like but not SQL (could be a "blessing in disguise")

Google web toolkit and Google App Engine combination is a killer. Till now there wasn't any library which could make both of them talk to each other natively. The work done by python-gwt-rpc is of great value here. With this combination one can start writing great web applications for free. All this would require is knowledge of python and java.

I would personally like to use ruby on the server side since it has better code aesthetics which suits my taste