Monday, April 5, 2010

What is Spring Python?

Spring Python takes the concept of the Spring Framework and applies them to Python. This means that we can take advantage of the features of Spring Framework such as Dependency Injection (Inversion of Control), aspect oriented programming (AOP), remoting, data access, transactions, and security, all with the same non-invasiveness style.

This means that:

  • it will be easier to unit test software components (Python objects with standardized dependency injection)
  • we can move cluttering code outside the object and have cross-cutting functionalities (aspect oriented programming)
  • scalability of business objects by adding remoting
  • transaction (ACID)
  • security (interceptor based which won't allow outside world to touch your application unless they are really authenticated an authorized)
  • you don't have to extends certain class in order to get all those features (non-invasiveness)

The project was started independently by Greg L. Turnquist, which later joined the SpringSource team as Project Lead for Spring Python project. He also authored "Spring Python" book from Packt.

Spring Python is now approaching version 1.1 with its second milestone before release 1.1.0.M2. Current stable release version is 1.0.0.

All about SpringPython can be found on its web site http://springpython.webfactional.com/

Saturday, April 3, 2010

PyDev 1.5.6 has been released

PyDev is a plugin that enables users to use Eclipse for Python, Jython and IronPython development -- making Eclipse a first class Python IDE -- It comes with many goodies such as code completion, syntax highlighting, syntax analysis, refactor, debug and many others.

Fabio Zadrozny from Aptana, the author of PyDev plugin,  passed this information through mailing list:

This Release Highlights:

  • Django integration:





    • New Django project can be created through twizard

    • Can set an existing porject as a Django project (right-click project > pydev > set as django project) I think this is a kind of Eclipse's personality, like those of Maven2 plugins where you can declare that this project is a  Maven project

    • New Django project can be created throughtwizard

    • Can remove Django project config (righ-click project > django > remove django project config)

    • Custom actions can be passed to the configured manage.py through ctrl + 2 + dj django action -- if not action is passed, will open to choose from a list of previously used command

    • Predefined/custom actions can be used through right-clicking the project > django > select custom action

    • manage.py and settings module configured

    • Django shell (with code-completion, history, etc) available

    • Run/Debug as Django available

    • See: http://pydev.org/manual_adv_django.html for more details





  • Find/Replace:

    • The search in open files is no longer added in the find/replace dialog and now works through Ctrl  + 2+  s word_to_find (in the PyDev editor) and if no word is passed, the editor selection is used





  • Go to definition:

    • Properly works with unsaved files (so, it will work when searching for a definition on an unsaved file)

    • Properly working with Eclipse 3.6 (having FileStoreEditorInput as the editor input)





  • Editor:

    • Automatically closing literals

    • Removing closing pair on backspace on literal

    • Improved heuristics for automatically closing (, [ and {

    • Removing closing pair on backspace on (, [ and {

    • Ctrl + 2 + sl (sl comes from 'split lines' -- can be used to add a new line after each comma in the selection

    • Ctrl + 2 + is (is comes from 'import string' -- can be used to transform the selected import into a string with dots



  • General:

    • Code-completion properly working on relative import with an alias

    • Fixed racing issue that could deadlock pydev (under really hard to reproduce circumstances)

    • Removing reloading code while debugging until (if) it becomes more mature in the python side

    • Fixed issue where a new project created didn't have the source folder correctly set

    • Text selection in double click no longer has weird behavior

    • Local refactoring working on files not in the PYTHONPATH

    • Edit properly working on string substitution variables

    • Using with statement on python 2.5 no longer makes lines wrong in the AST



Tuesday, March 23, 2010

Playing around with Ordered Dictionary (collections.OrderedDict)

The new and cool feature added to Python 3.1.x family is the Ordered Dictionary. Some implementations have been lying around for sometime, it's good to see one made it into  the Python standard library.

Dictionaries are general purpose container data structure that are accessed through keys. It uses a hashing mechanism to achieve fast retrieval of information by key on typical cases. The annoying thing about standard dictionary dict object is that, whenever we retrieve the keys, it is not guaranteed to be sorted.
In Java platform, usually this dictionary is called map. java.util.Map provides interface to implementations of map such as java.util.HashMap, java.util.TreeMap.

Every value is associated with value, written in : pair.

Try to paste this code to your Python 3.1 interpreter:

[sourcecode lang="python"]<br />ud = dict()<br />ud['c']='1'<br />ud['b']='2'<br />ud['a']='3'<br />[/sourcecode]


This interactive session below highlight the thing:

[sourcecode lang="shell"]<br />>>> ud = dict()<br />>>> ud['c']='1'<br />>>> ud['b']='2'<br />>>> ud['a']='3'<br />>>> ud<br />{'a': '3', 'c': '1', 'b': '2'}<br />[/sourcecode]


Nice general purpose container for all of our applications. The dictionary keys doesn't display in sorted order.

Instead when we paste this code into Python interpreter:

[sourcecode lang="python"]<br />import collections as coll<br />od = coll.OrderedDict()<br />od['c']='1'<br />od['b']='2'<br />od['a']='3'<br />[/sourcecode]


We will get this result:

[sourcecode lang="shell"]<br />>>> import collections as coll<br />>>> od = coll.OrderedDict()<br />>>> od['c']='1'<br />>>> od['b']='2'<br />>>> od['a']='3'<br />>>> od<br />OrderedDict([('c', '1'), ('b', '2'), ('a', '3')])<br />[/sourcecode]


As we can see in the result above, the collections.OrderedDict objects displayed the keys according to the sequence that they were inserted. When an insertion done on an already existing key, the new insertion will overwrite the value but the sequence is left untouched. A deletion followed by addition will move the key to the end of the list, as show in the session below (continuation of the previous one).

[sourcecode lang="shell"]<br />>>> od['d']='4'<br />>>> od<br />OrderedDict([('c', '1'), ('b', '2'), ('a', '3'), ('d', '4')])<br />>>> od['b']='5'<br />>>> od<br />OrderedDict([('c', '1'), ('b', '5'), ('a', '3'), ('d', '4')])<br />>>> od.pop('a')<br />'3'<br />>>> od<br />OrderedDict([('c', '1'), ('b', '5'), ('d', '4')])<br />>>> od['a']='6'<br />>>> od<br />OrderedDict([('c', '1'), ('b', '5'), ('d', '4'), ('a', '6')])<br />>>><br />[/sourcecode]


I guess "battery included" still holds, or probably, "more organised battery included...".
Hooray for Python.

Python 3.1.2 Released (bug fix released)

Python 3.1.2 (bugfix release) is out now! We can download from this site: http://www.python.org/download/

Monday, February 1, 2010

Spring Python 1.1.0.M1 Released

SpringSource has has just announced last  week of a milestone release of SpringPython 1.1.0.M1. This announcement made aware about this project. There is a project that has nearly reached its 1.1 version that tries to develop Spring-like framework in Python. I would like to look into this project.

It is different from invoking Spring Java from Jython in  that, this project brings the concept of Spring framework into the CPython platform in general. Some of the configuration are really Pythonic!

I think I will explore more on this project.

Monday, November 2, 2009

Setting Up Your Own Jython 2.5.1 Environment

In this post I'll show you how to setup your own Jython environment.

Prerequisite to this, you must have a Java Runtime Environment (JRE) installed in your system. Chances are when you already have browser running some Java applet or Java Web Start application, you already have JRE installed on your system.
Get the latest JRE from http://java.com/en/download/manual.jsp.

First you need to download a Jython binaries installer, currently the latest one is version 2.5.1, which you could download from this link.

After download completion you should have a file named jython_installer-2.5.1.jar, click on the file, or run from command line:

[sourcecode lang="shell"]<br />$ java -jar jython_installer-2.5.1.jar<br />[/sourcecode]


Or in some other platform:

[sourcecode lang="shell"]<br />c:\&gt; java -jar jython_installer-2.5.1.jar<br />[/sourcecode]


Now you need to add you Jython path to your OS Path variable, so that the shell or command line interpreter is able to find Jython. In my sample Windows installation case:

[sourcecode lang="shell"]<br />C:\&gt; set PATH=%PATH%;c:\opt\env\jython2.5.1<br />[/sourcecode]


Alternatively, if you are running bash shell (assuming you installed Jython to /opt/env/jython2.5.1 folder):

[sourcecode lang="shell"]<br />$ export PATH=$PATH:/opt/env/jython2.5.1<br />[/sourcecode]


Now you may proceed with the first invocation of Jython.

[sourcecode lang="shell"]<br />C:\&gt; jython<br />*sys-package-mgr*: processing new jar, 'C:\opt\env\jython2.5.1\jython.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\resources.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\rt.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\jsse.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\jce.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\charsets.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\ext\dnsns.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\ext\localedata.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\ext\QTJava.zip'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\ext\sunjce_provider.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\ext\sunmscapi.jar'<br />*sys-package-mgr*: processing new jar, 'C:\Program Files\Java\jre6\lib\ext\sunpkcs11.jar'<br />Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)<br />[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_16<br />Type "help", "copyright", "credits" or "license" for more information.<br />&gt;&gt;&gt;<br />[/sourcecode]



The jython command line actually invoked a Windows batch file jython.bat, which
When first time invoked, Jython interpreter will activate sys-package-mgr to add standard Java library classes as Python package.

 

After the installation, just play around with simple thing such as:

[sourcecode lang="shell"]<br />Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)<br />[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_16<br />Type "help", "copyright", "credits" or "license" for more information.<br />&gt;&gt;&gt; from java.lang import System<br />&gt;&gt;&gt; System.out.println(&amp;quot;Hello, world!&amp;quot;)<br />Hello, world!<br />&gt;&gt;&gt; System.out.println('Hello, world!')<br />Hello, world!<br />&gt;&gt;&gt; System.currentTimeMillis()<br />1257145977410L<br />&gt;&gt;&gt; from java.lang import String<br />&gt;&gt;&gt; s = String(&amp;quot;abc&amp;quot;)<br />&gt;&gt;&gt; s.toString()<br />u'abc'<br />[/sourcecode]


Look at how System.out.println is able to receive both single quote and double quote Python string, and also the java.lang.String type by a Java class method is a Unicode string (u'abc').

Wednesday, October 21, 2009

PyDev 1.5 on Eclipse Galileo 3.5 SR1

I begin to have more time to explore the Eclipse Galileo Service Release 1 (Eclipse 3.5.1). This time I want to set it up for my Python development, using the PyDev plugin.

PyDev is an Eclipse plugin for Python language application development. It supports CPython, Jython and IronPython runtimes. It supports the interactive as well as non-interactive Python development on Eclipse IDE.

Eclipse IDE (and platform) has become the de facto industry standard IDE. More and more free software, open source software, and proprietary software makers build their systems on Eclipse platform. Galileo is the codename for 3.5 release, and now the latest one is the SR1 (Service Release 1).

There has been interesting development on PyDev since its last 1.4.7 version. PyDev has moved to be sheltered under the umbrella of Aptana. PyDev and PyDev Extension now has been merged and both now open source (previously the PyDev Extension, the advanced version of PyDev was not an open source).

The update site has been moved from domain www.fabioz.com (http://www.fabioz.com/pydev) to domain pydev.org (http://pydev.org/updates) . Aptana  This development looks good for me, means that PyDev now being maintained by its own organization, and hopefully in more serious efforts.

In Eclipse Galileo, you need to go to the menu and choose: Help > Install New Software...

eclipse-pydev-update-01

It will show the Install dialog.

eclipse-pydev-update-02

Click the [Add] button on the upper of menu dialog. You will get the "Add Site" dialog.

Type name and location.
Name: "PyDev Update  Site" (you can feel with any arbitrary name though)
Location: http://pydev.org/updates

eclipse-pydev-update-03

Back to the "Install" dialog, the previous "Add Site" will fill up the "Work with" field for you.

eclipse-pydev-update-04

Now tick the Checkbox "PyDev for Eclipse" under "PyDev". You may also optionally tick the "Pydev Mylyn Integration". In this example we don't tick.

Click the [Next >] button. It will show you the Install Details:

eclipse-pydev-update-05

Proceed by clicking [Next >] button. Review Licenses dialog will be displayed.

eclipse-pydev-update-06

Click the radio button "I accept the terms of the license  agreement" when you are agree with the licenses. Proceed by clicking [Finish] button.

eclipse-pydev-update-08

You will see the progress bar. Somewhere around the progress, you will be asked whether to install software that contains unsigned content.
eclipse-pydev-update-09

Click [OK] to proceed (we have no choice as long as the provider of this plugin hasn't signed the content).

eclipse-pydev-update-10

Click the [Yes] button to restart your Eclipse IDE.