<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DU4BQXszcCp7ImA9WhRVE0U.&quot;"><id>tag:blogger.com,1999:blog-8550962</id><updated>2012-01-12T09:05:50.588-08:00</updated><category term="pydev" /><category term="google app engine" /><category term="templates" /><category term="update site" /><category term="pydev 1.2.7 eclipse debugger pylint" /><category term="1.4.4" /><category term="python 2.6" /><category term="unittest" /><category term="debugger" /><category term="Pydev 1.2.6 eclipse release refactoring" /><category term="iron python" /><category term="Pydev 1.5.2" /><category term="import" /><category term="pydev 1.4.6" /><category term="pydev 1.5.7" /><category term="preferences" /><category term="pydev 1.4.3" /><category term="export" /><category term="extended vs presentation" /><category term="appcelerator" /><category term="Pydev 1.5.5" /><category term="pydev debugger psyco" /><category term="python 3.0" /><category term="tvtk" /><category term="pydev 1.3.14 release" /><category term="TDD" /><category term="jython scripting" /><category term="per-project interpreters" /><category term="winmerge" /><category term="code coverage" /><category term="git" /><category term="PyCon" /><category term="reindex" /><category term="environment variables" /><category term="pydev 1.4" /><category term="pydev homepage" /><category term="performance" /><category term="PyQt4 crashing on pydev" /><category term="eclipse" /><category term="virtualenv" /><category term="usability" /><category term="pydev 1.4.7" /><category term="debug eclipse" /><category term="run as unit-test" /><category term="mirrors" /><category term="pydev 1.4.1" /><category term="Pydev Extensions open sourced" /><category term="eclipse 3.3" /><category term="code formatter" /><category term="nightly build" /><category term="IPython" /><category term="large files performance" /><category term="live coding" /><category term="refactoring" /><category term="pydev 2.0" /><category term="pyunit" /><category term="Pydev 1.5.0" /><category term="error handling" /><category term="pydev 1.4.5" /><category term="pydev 1.3.18 spaces in install" /><category term="pydev 1.6.4" /><category term="pydev 1.4.8" /><category term="mercurial pydev distributed scm" /><category term="memory" /><category term="django" /><category term="python 2toAny" /><category term="ast rewriter" /><category term="analyze open editors" /><category term="Pydev 1.5.3" /><category term="jump" /><category term="pydev extensions zope remote debugging" /><category term="dark theme" /><category term="django templates" /><category term="testers" /><category term="pydev 1.3.4" /><category term="eclipse skin" /><category term="twitter" /><category term="eclipse awards" /><category term="python 3k" /><category term="pydev jdt eclipse platform dependency" /><category term="pydev bug builtins release 1.3.6" /><category term="pydev interactive console" /><category term="forced builtins" /><category term="release" /><category term="pydev 1.3.22" /><category term="pydev 1.4.2" /><category term="debugger pydev 1.3.3" /><category term="aptana" /><category term="pydev nightly build" /><category term="subversion" /><category term="python 2to3" /><category term="pydev 1.6.5" /><title>PyDev adventures</title><subtitle type="html">Posting about venturing (and creating) PyDev.&lt;br&gt;
&lt;p&gt;&lt;strong&gt;LINKS:    &lt;a href="http://pydev.org"&gt;PyDev.org&lt;/a&gt;       &lt;a href="http://pydev.blogspot.com/atom.xml"&gt;Blog RSS&lt;/a&gt;       &lt;a href="http://twitter.com/statuses/user_timeline/57455092.rss"&gt;Twitter RSS&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://pydev.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>223</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/pydev" /><feedburner:info uri="blogspot/pydev" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CE8DR3YyfSp7ImA9WhRWF0U.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-9033309119757211044</id><published>2012-01-05T08:01:00.000-08:00</published><updated>2012-01-05T09:01:16.895-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-05T09:01:16.895-08:00</app:edited><title>Code-completion strategies in PyDev</title><content type="html">I believe one of the strong points in PyDev is its code-completion, so, I thought a bit about giving some details on it :)&lt;br /&gt;&lt;br /&gt;The main preference page for code completion is: Window &amp;gt; Preferences &amp;gt; PyDev &amp;gt; Editor &amp;gt; Code Completion (my preferred configuration is setting the 'Request completions on all letter chars and '_'', so that completions appear automatically when typing, otherwise Ctrl+Space would need to be used to request the completions -- I was actually thinking about making that the default and decided against it to conform to other editors in Eclipse).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Word completion &lt;/span&gt;(also called Hippie Completion):&lt;br /&gt;&lt;br /&gt;This is probably the simplest one and is provided by Eclipse itself (through Alt+/). It provides a simple word-based completion which uses all the currently opened editors in Eclipse.&lt;br /&gt;&lt;br /&gt;I've actually provided a patch for Eclipse to improve the speed of this completion (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=270385"&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=270385&lt;/a&gt;), which was added in Eclipse 3.6.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Templates completion:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These are user-defined templates that may be configured at PyDev &amp;gt; Editor &amp;gt; Templates (most of the base for this completion is provided by Eclipse... PyDev uses a subclass: PyTemplateCompletionProcessor and some of the available variables may be defined in Jython code -- see: pytemplate_defaults.py for details).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Common tokens completion:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you start typing in PyDev, some common tokens (i.e.: keywords, self, etc) start appearing directly. Those can be configured in PyDev &amp;gt; Editor &amp;gt; Code Completion (ctx insensitive and common tokens).&lt;br /&gt;&lt;br /&gt;It's implementation is pretty simple (may be seen at: KeywordsSimpleAssist)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Context insensitive completion:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This completion goes through all the tokens available for a given project (which may need to consider project dependencies and which interpreter is being used) and shows those tokens as a completion (i.e.: top-level tokens such as classes or methods and the modules themselves).&lt;br /&gt;&lt;br /&gt;If one of those is selected, the token will be completed and an import will be added for it too (if the preference in PyDev &amp;gt; Editor &amp;gt; Auto Imports &amp;gt; "Do auto import?" is marked as true -- in that same preferences page, the number of chars that need to be available in a word so that these completions start appearing may be specified).&lt;br /&gt;&lt;br /&gt;Note that if the option was set not to do the auto-import, one could just add the token, let it be marked as an unrecognized variable by PyDev and later do an Organize Imports (Ctrl+O), or a Quick Fix in that line (Ctrl+1), to add the import.&lt;br /&gt;&lt;br /&gt;The major issue in this completion isn't actually the completion per-se (implemented in ImportsCompletionParticipant and CtxParticipant), but the structure which needs to be kept to have it as a fast and efficient completion.&lt;br /&gt;&lt;br /&gt;Mainly, PyDev has a concept called 'AdditionalInfo' (this was done when PyDev Extensions was separated from the PyDev Open Source, so, the name is a bit strange now, but the general idea is that it was additional information related to a given project or interpreter), which keeps the following information:&lt;br /&gt;&lt;br /&gt;- Two TreeMaps (AbstractAdditionalTokensInfo.topLevelInitialsToInfo and AbstractAdditionalTokensInfo.innerInitialsToInfo) which map token names to information of the places where the token may be found (i.e.: module and structure inside that module). Those are all kept in memory and are pretty fast to access (AbstractAdditionalTokensInfo.getTokensStartingWith is what's interesting for a code-completion and AbstractAdditionalTokensInfo.getTokensEqualTo is interesting when doing a quick fix or organize imports). This structure is also used in the global tokens browser (Ctrl+Shift+T).&lt;br /&gt;&lt;br /&gt;- Note that it also has a structure (AbstractAdditionalDependencyInfo.completeIndex) which maps a module to all the available tokens in it. This structure is kept in memory only as a SoftHashMap (so, it's only kept in memory while there's enough space for it) and persisted to the disk. It's also only lazily created on operations that need it (currently only a project-wide rename refactoring or a find references (Ctrl+Shift+G) would use it as it's basically a structure which is a bit faster for doing exact match searches than actually doing a search in Eclipse -- especially if the SoftHashMap is still in memory, so, if many find references are done in succession, if there's enough memory, from the 2nd attempt onwards, things should be fast).&lt;br /&gt;&lt;br /&gt;On a project build, the tokens of the completeIndex are simply all removed (to be recalculated when some action that needs it is called). As for the maps, those are always kept up to date when a file is changed. The strategy for having it build fast is that the in-memory cache is directly updated (which is reasonably fast) and instead of saving the whole map it just saves the delta information and when restoring the info, those deltas are applied to have it in the last state (and from time to time it does dump the whole structure and removes the deltas). Also, it runs in a separate thread (not actually in the thread that's doing the build, and a singleton: RunnableAsJobsPoolThread, makes sure than only some of those, depending on the number of processors in your machine, are running at the same time, so, if you change 200 files at once, your computer won't come to a halt).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Context sensitive completion:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is by far the most complex completion available as it analyzes the context where you're requesting a completion and provides tokens based on it. Basically, PyDev has an internal type-inference engine to do that (which is also used by actions such as find definition or TDD actions such as create method).&lt;br /&gt;&lt;br /&gt;Internally it uses an LRU structure which maps module names to the module AST (Abstract Syntax Tree) and in a pretty recursive algorithm finds out about the available tokens needed for a given context and provides completions based on that (thankfully it has a huge amount of unit tests holding it all together). That process starts in PyCodeCompletion.getCodeCompletionProposals(ITextViewer, CompletionRequest) and the type inference engine main classes are: ASTManager and ProjectModulesManager.&lt;br /&gt;&lt;br /&gt;On some occasions some modules may be pretty hard to analyze, in which case PyDev resorts to launching a shell and querying it for the needed tokens (those are pre-specified as in window &amp;gt; preferences &amp;gt; PyDev &amp;gt; Interpreter &amp;gt; Forced Builtins, and the communication happens in the java side through the AbstractShell class) -- it's also probably one of the main reasons of problems when configuring PyDev, as it's common to have a firewall blocking that communication (in which case PyDev wouldn't even be able to get common builtins such as len, object, etc).&lt;br /&gt;&lt;br /&gt;On the good side, this also makes it possible for PyDev to analyze .pyd modules (although if you're developing such a module as a part of your project, you have to remember to call &lt;span style="font-weight: bold;"&gt;Ctrl+2, kill&lt;/span&gt; so that PyDev will kill those shells before you actually build it, otherwise that module will be locked and you won't be able to link it -- and tokens wouldn't be updated).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-9033309119757211044?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YChObM3tW_aZhAqgHN08Tab-P24/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YChObM3tW_aZhAqgHN08Tab-P24/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YChObM3tW_aZhAqgHN08Tab-P24/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YChObM3tW_aZhAqgHN08Tab-P24/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/CMYvSMYgltc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/9033309119757211044/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=9033309119757211044" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/9033309119757211044?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/9033309119757211044?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/CMYvSMYgltc/code-completion-strategies-in-pydev.html" title="Code-completion strategies in PyDev" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://pydev.blogspot.com/2012/01/code-completion-strategies-in-pydev.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4HRnk5eyp7ImA9WhRQGUU.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-2538356501225953762</id><published>2011-12-15T12:24:00.000-08:00</published><updated>2011-12-15T12:28:57.723-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-15T12:28:57.723-08:00</app:edited><title>PyDev 2.3.0 released</title><content type="html">PyDev 2.3.0 is out now.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://pydev.org"&gt;http://pydev.org&lt;/a&gt; for details :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-2538356501225953762?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PN0NYaP3tv95Lm5HOL9ZPiUyjqc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PN0NYaP3tv95Lm5HOL9ZPiUyjqc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PN0NYaP3tv95Lm5HOL9ZPiUyjqc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PN0NYaP3tv95Lm5HOL9ZPiUyjqc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/EZpz0_gaZP4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/2538356501225953762/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=2538356501225953762" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/2538356501225953762?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/2538356501225953762?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/EZpz0_gaZP4/pydev-230-released.html" title="PyDev 2.3.0 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/12/pydev-230-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cERXY7fSp7ImA9WhRQGE8.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-1984496517990088505</id><published>2011-12-13T17:54:00.001-08:00</published><updated>2011-12-13T18:16:44.805-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-13T18:16:44.805-08:00</app:edited><title>Preparing for PyDev 2.3.0</title><content type="html">The major changes in this version will be the introduction of a pep8 analysis (it must be enabled in window &amp;gt; preferences &amp;gt; PyDev &amp;gt; Editor &amp;gt; Code Analysis &amp;gt; pep8) and scope selection/deselection (Shift+Alt+Up/Down).&lt;br /&gt;&lt;br /&gt;The internal Jython version that PyDev uses was bumped from 2.1 to 2.2.1 to support pep8.py -- Jython 2.5 was discarded as an option because it became too big for PyDev (the PyDev distribution with Jython 2.2.1 has 7MB, if it went to Jython 2.5, it'd be around 14MB, so, I think it's not worth making the download twice as big just for this upgrade).&lt;br /&gt;&lt;br /&gt;Also, as a plus, as Jython 2.2.1 is still based on the same grammar structure (JavaCC) that PyDev uses, so, I was able to give it a boost and provide some performance improvements that had been done to the PyDev grammar (Jython 2.5 uses Antlr, which seems to be one of the main reasons it became so big).&lt;br /&gt;&lt;br /&gt;As a nice side-effect of this change, the PyDev startup seems to have improved somewhat (Jython 2.2.1 seems to start up faster than Jython 2.1), and now the Jython sources are included in the PyDev project (and not only a jython.jar), so, I can fine tune Jython itself for some PyDev use-cases (as it seems PyDev won't go for Jython 2.5 anyways).&lt;br /&gt;&lt;br /&gt;There are also some critical bug-fixes in this release (an out of memory error when dealing with PyOpenGL, one cache issue which could make the pythonpath become wrong in memory and one deadlock were fixed).&lt;br /&gt;&lt;br /&gt;So, anyone interested should get the current nightly build to see if all is working properly as an official release should be issued later this week (the current version should be the one released unless some critical issue is found in the meanwhile).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-1984496517990088505?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2HYVqo9ch7NGkDTRlyqbxpKvsMg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2HYVqo9ch7NGkDTRlyqbxpKvsMg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2HYVqo9ch7NGkDTRlyqbxpKvsMg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2HYVqo9ch7NGkDTRlyqbxpKvsMg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/WOnWkYJlRKg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/1984496517990088505/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=1984496517990088505" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/1984496517990088505?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/1984496517990088505?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/WOnWkYJlRKg/preparing-for-pydev-230.html" title="Preparing for PyDev 2.3.0" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/12/preparing-for-pydev-230.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YHQHkyfSp7ImA9WhRRFk0.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-7991827865242274367</id><published>2011-11-29T05:07:00.000-08:00</published><updated>2011-11-29T15:25:31.795-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T15:25:31.795-08:00</app:edited><title>Making Eclipse look better on Ubuntu</title><content type="html">The steps below are things to remember when I do a new Ubuntu install (so, I may revisit this when/if I reinstall Ubuntu again).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;. Tab bars in Eclipse are too big when run in Ubuntu:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are 2 things for this:&lt;br /&gt;&lt;br /&gt;1.1: Install Extended VS Presentation (update site: &lt;a href="http://andrei.gmxhome.de/eclipse/"&gt;http://andrei.gmxhome.de/eclipse/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;1.2: Make menu bar smaller&lt;br /&gt;&lt;br /&gt;Short version&lt;br /&gt;&lt;br /&gt;gedit ~/.gtkrc-2.0&lt;br /&gt;&lt;br /&gt;paste:&lt;br /&gt;&lt;br /&gt;style "gtkcompact" {&lt;br /&gt;GtkButton::default_border={0,0,0,0}&lt;br /&gt;GtkButton::default_outside_border={0,0,0,0}&lt;br /&gt;GtkButtonBox::child_min_width=0&lt;br /&gt;GtkButtonBox::child_min_heigth=0&lt;br /&gt;GtkButtonBox::child_internal_pad_x=0&lt;br /&gt;GtkButtonBox::child_internal_pad_y=0&lt;br /&gt;GtkMenu::vertical-padding=1&lt;br /&gt;GtkMenuBar::internal_padding=0&lt;br /&gt;GtkMenuItem::horizontal_padding=4&lt;br /&gt;GtkToolbar::internal-padding=0&lt;br /&gt;GtkToolbar::space-size=0&lt;br /&gt;GtkOptionMenu::indicator_size=0&lt;br /&gt;GtkOptionMenu::indicator_spacing=0&lt;br /&gt;GtkPaned::handle_size=4&lt;br /&gt;GtkRange::trough_border=0&lt;br /&gt;GtkRange::stepper_spacing=0&lt;br /&gt;GtkScale::value_spacing=0&lt;br /&gt;GtkScrolledWindow::scrollbar_spacing=0&lt;br /&gt;GtkTreeView::vertical-separator=0&lt;br /&gt;GtkTreeView::horizontal-separator=0&lt;br /&gt;GtkTreeView::fixed-height-mode=TRUE&lt;br /&gt;GtkWidget::focus_padding=0&lt;br /&gt;}&lt;br /&gt;class "GtkWidget" style "gtkcompact"&lt;br /&gt;&lt;br /&gt;Full explanation in &lt;a href="http://ubuntuforums.org/showthread.php?t=1465712"&gt;http://ubuntuforums.org/showthread.php?t=1465712&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Window buttons are not in the right:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Short version:&lt;br /&gt;Alt+F2, gconf-editor, apps/metacity/general, button_layout, menu:minimize,maximize,close&lt;br /&gt;&lt;br /&gt;Full version: &lt;a href="http://www.howtogeek.com/howto/13535/move-window-buttons-back-to-the-right-in-ubuntu-10.04/"&gt;http://www.howtogeek.com/howto/13535/move-window-buttons-back-to-the-right-in-ubuntu-10.04/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Set proper theme:   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;System &amp;gt; preferences &amp;gt; appearance (get online theme): Clearlooks Compact (customize colors: selected items: #969696 (150,150,150))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Set fonts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Copy Windows fonts from C:\Windows\Fonts to ~/.fonts (tahoma and consolas) -- yes, I really like those fonts :)&lt;br /&gt;&lt;br /&gt;System &amp;gt; preferences &amp;gt; appearance: use tahoma 8 for app/doc/desktop, sans bold 8 for window and consolas 9 for monofont (in windows I use consolas 10, but it seems Linux will render the fonts a bit bigger, so, a smaller size is needed).&lt;br /&gt;&lt;br /&gt;Rendering: subpixel smoothing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By request, a picture of how it looks (click to see it full):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-mQyG9UKVWIw/TtVprlnMQ1I/AAAAAAAAAug/mHS9sv0gKU8/s1600/ubuntu.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 301px;" src="http://2.bp.blogspot.com/-mQyG9UKVWIw/TtVprlnMQ1I/AAAAAAAAAug/mHS9sv0gKU8/s400/ubuntu.png" alt="" id="BLOGGER_PHOTO_ID_5680562702549533522" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-7991827865242274367?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yIR9LGd3W6L0vN1YAsrFlM1jIF8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yIR9LGd3W6L0vN1YAsrFlM1jIF8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yIR9LGd3W6L0vN1YAsrFlM1jIF8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yIR9LGd3W6L0vN1YAsrFlM1jIF8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/AR7rWOwxEIA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/7991827865242274367/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=7991827865242274367" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/7991827865242274367?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/7991827865242274367?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/AR7rWOwxEIA/making-eclipse-look-better-on-ubuntu.html" title="Making Eclipse look better on Ubuntu" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-mQyG9UKVWIw/TtVprlnMQ1I/AAAAAAAAAug/mHS9sv0gKU8/s72-c/ubuntu.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/11/making-eclipse-look-better-on-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4EQns6eyp7ImA9WhRTEko.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-6815294365576883560</id><published>2011-11-02T17:02:00.000-07:00</published><updated>2011-11-02T17:08:23.513-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T17:08:23.513-07:00</app:edited><title>PyDev 2.2.4 released</title><content type="html">PyDev 2.2.4 is now out.&lt;br /&gt;&lt;br /&gt;Major changes include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cython support&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Better handling for external files (especially the ones under a folder/zip file in the PYTHONPATH)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Modules/packages appear in the globals browser (Ctrl+Shift+T)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Some improvements in the debugger&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Along with a bunch of other things (more details on the release may be gotten on &lt;a href="http://pydev.org"&gt;http://pydev.org&lt;/a&gt; )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-6815294365576883560?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/W_fB6VlQCG1g76laVJMKS404cuE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_fB6VlQCG1g76laVJMKS404cuE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/W_fB6VlQCG1g76laVJMKS404cuE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_fB6VlQCG1g76laVJMKS404cuE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/i1IG1LJrztI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/6815294365576883560/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=6815294365576883560" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/6815294365576883560?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/6815294365576883560?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/i1IG1LJrztI/pydev-224-released.html" title="PyDev 2.2.4 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/11/pydev-224-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEBQ308fyp7ImA9WhdaF0s.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-4374818821579448986</id><published>2011-10-27T17:44:00.000-07:00</published><updated>2011-10-27T17:44:12.377-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-27T17:44:12.377-07:00</app:edited><title>PyDev &amp; Cython</title><content type="html">The current PyDev nightly build has integrated &lt;a href="http://cython.org/"&gt;Cython&lt;/a&gt; support :)&lt;br /&gt;&lt;br /&gt;Instructions to get the nightly are available at: &lt;a href="http://pydev.org/download.html"&gt;http://pydev.org/download.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is something I wanted to do quite some time already but hadn't found a good way to support Cython (mostly because the grammar support seems to be &lt;a href="http://www.blogger.com/%22http://groups.google.com/group/cython-users/browse_thread/thread/517bd7542923c1e9?pli=1"&gt;undocumented and all manually done&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;So, I gave up for now on a full blown Cython parser and settled on parsing what needs to shown in the outline: classes, functions and Cython specifics: cdefs and ctypedefs -- without actually trying to do anything fancy with it (mostly showing things in the outline). It's still missing the actual scoping of things, so, items will appear flat in the outline -- but that should be fixed soon.&lt;br /&gt;&lt;br /&gt;So, this means that code-analysis will gather much less things (right now I think it'll only gather mixed indentation analysis and duplication of function/classes).&lt;br /&gt;&lt;br /&gt;As for the code-completion, it should be working for things that are context insensitive (i.e.: builtins, templates and global tokens for the auto-import). Some more testing needs to be done for the context-sensitive code-completion (not sure how much more can be done without a full blown parser behind it).&lt;br /&gt;&lt;br /&gt;Aside from those shortcomings, most editor features should be working (anyone interested, please test it and let me know if there's something missing -- although I've used Cython on a few occasions, I'm hardly an expert in the area, so, feedback is much appreciated -- this should appear in a final release in a short time).&lt;br /&gt;
&lt;br /&gt;
Note that to use the Cython editor, just open any .pyx file with the regular PyDev editor and things should work properly (it uses the regular PyDev editor, just customizing the parsing process).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-4374818821579448986?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BA86duNFlaZZX4xnKs2EDQbuasg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BA86duNFlaZZX4xnKs2EDQbuasg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BA86duNFlaZZX4xnKs2EDQbuasg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BA86duNFlaZZX4xnKs2EDQbuasg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/UJdLvWNtkqo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/4374818821579448986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=4374818821579448986" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4374818821579448986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4374818821579448986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/UJdLvWNtkqo/pydev-cython.html" title="PyDev &amp; Cython" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/10/pydev-cython.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEBSXY5fip7ImA9WhdUGU8.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-577294568413234498</id><published>2011-10-06T11:04:00.000-07:00</published><updated>2011-10-06T11:10:58.826-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T11:10:58.826-07:00</app:edited><title>PyDev 2.2.3 released</title><content type="html">The new version is out already.&lt;br /&gt;&lt;br /&gt;Major in this release were: a bugfix related to zip files (in short, the PyDev indexes related to zips got corrupted, so, any attempt to use a zip file in the PYTHONPATH wouldn't work properly), some performance improvements and a bunch of bug-fixes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-577294568413234498?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SI-KQt1RLEdFukEsM_qdw3BLwjM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SI-KQt1RLEdFukEsM_qdw3BLwjM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SI-KQt1RLEdFukEsM_qdw3BLwjM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SI-KQt1RLEdFukEsM_qdw3BLwjM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/KvtdEn-OeO8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/577294568413234498/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=577294568413234498" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/577294568413234498?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/577294568413234498?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/KvtdEn-OeO8/pydev-223-released.html" title="PyDev 2.2.3 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/10/pydev-223-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04MRn09eCp7ImA9WhdREkU.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-8552482294843565517</id><published>2011-08-02T05:44:00.000-07:00</published><updated>2011-08-02T05:59:47.360-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-02T05:59:47.360-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IPython" /><category scheme="http://www.blogger.com/atom/ns#" term="pydev interactive console" /><title>IPython &amp; PyDev</title><content type="html">In the current nightly build (see: &lt;a href="http://pydev.org/download.html"&gt;http://pydev.org/download.html&lt;/a&gt; to get it), IPython can be used as the backend for the PyDev interactive console. &lt;br /&gt;&lt;br /&gt;IPython is a Python shell that provides many improvements over the standard Python shell (more details may be found at &lt;a href="http://ipython.org/"&gt;http://ipython.org/&lt;/a&gt; ).&lt;br /&gt;&lt;br /&gt;To use it, install IPython (0.10.x or 0.11) in your Python interpreter (if you use easy-install, just do easy_install ipython), make sure that the IPython paths are properly added in your interpreter configuration inside of PyDev ( &lt;a href="http://pydev.org/manual_101_interpreter.html"&gt;http://pydev.org/manual_101_interpreter.html&lt;/a&gt; ) and start up the interactive console in PyDev ( &lt;a href="http://pydev.org/manual_adv_interactive_console.html"&gt;http://pydev.org/manual_adv_interactive_console.html&lt;/a&gt; ). If all is properly configured, the interactive shell should use IPython as the backend (if it's not found, it'll fallback to the standard PyDev shell and warn that IPython could not be found).&lt;br /&gt;&lt;br /&gt;Another improvement in the shell is that the output for a long running command will now be printed while it's executing, and not only after it returns.&lt;br /&gt;&lt;br /&gt;I'm waiting for feedback to know if there's something missing in the integration before a final release is provided with the integration...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-8552482294843565517?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pf3a_HTck9-k5whuyfdxyMOddRg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pf3a_HTck9-k5whuyfdxyMOddRg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pf3a_HTck9-k5whuyfdxyMOddRg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pf3a_HTck9-k5whuyfdxyMOddRg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/0K3DdT7jZxA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/8552482294843565517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=8552482294843565517" title="22 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/8552482294843565517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/8552482294843565517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/0K3DdT7jZxA/ipython-pydev.html" title="IPython &amp; PyDev" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>22</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/08/ipython-pydev.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIBQH09eSp7ImA9WhdTFkg.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-5079037810224429506</id><published>2011-07-14T07:39:00.000-07:00</published><updated>2011-07-14T07:42:31.361-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T07:42:31.361-07:00</app:edited><title>Pydev 2.2.1 released</title><content type="html">This was mainly a bug-fix release, but there were a couple of niceties added there:&lt;br /&gt;&lt;br /&gt;1. The Quick Outline (Ctrl+O on editor) can now show the information from parents in the hierarchy (press Ctrl+O to toggle).&lt;br /&gt;&lt;br /&gt;2. The extract local refactoring has an option to replace duplicates.&lt;br /&gt;&lt;br /&gt;The full details may be seen at &lt;a href="http://pydev.org"&gt;http://pydev.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-5079037810224429506?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KawHXXMzCx4g04KcuexYL5uAK8E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KawHXXMzCx4g04KcuexYL5uAK8E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KawHXXMzCx4g04KcuexYL5uAK8E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KawHXXMzCx4g04KcuexYL5uAK8E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/hqAxar7se_o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/5079037810224429506/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=5079037810224429506" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/5079037810224429506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/5079037810224429506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/hqAxar7se_o/pydev-221-released.html" title="Pydev 2.2.1 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/07/pydev-221-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4GRXs7eip7ImA9WhZaEUo.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-3847401465180449037</id><published>2011-06-27T05:15:00.000-07:00</published><updated>2011-06-27T05:32:04.502-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-27T05:32:04.502-07:00</app:edited><title>PyDev 2.2.0 released</title><content type="html">It's out already.&lt;br /&gt;&lt;br /&gt;This release is the first to add support for Eclipse 3.7 (which has just been released too).&lt;br /&gt;&lt;br /&gt;The major feature added was the exception breakpoints handling (so, it's now possible to stop the debugger on caught or uncaught exceptions -- the UI for it may be accessed at the menu Run &gt; Manage Python Exception Breakpoints).&lt;br /&gt;&lt;br /&gt;The debugger should also be a bit faster (and some bugs related to multithreaded debugging were fixed).&lt;br /&gt;&lt;br /&gt;For those using Django, some utilities were added so that it's possible to easily do a (remote) debug session with auto-reload enabled (see details at: &lt;a href="http://pydev.org/manual_adv_remote_debugger.html#django-remote-debugging-with-auto-reload"&gt;http://pydev.org/manual_adv_remote_debugger.html#django-remote-debugging-with-auto-reload&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;And as usual, a bunch of minor bugs were also fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-3847401465180449037?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ISm88kR2p9IiboK7dqKu7gP0ptU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ISm88kR2p9IiboK7dqKu7gP0ptU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ISm88kR2p9IiboK7dqKu7gP0ptU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ISm88kR2p9IiboK7dqKu7gP0ptU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/QvX6Rkfi1R8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/3847401465180449037/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=3847401465180449037" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/3847401465180449037?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/3847401465180449037?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/QvX6Rkfi1R8/pydev-220-released.html" title="PyDev 2.2.0 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/06/pydev-220-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcDQn4-cSp7ImA9WhZbFUQ.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-6510019197769822631</id><published>2011-06-20T09:55:00.000-07:00</published><updated>2011-06-20T10:14:33.059-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-20T10:14:33.059-07:00</app:edited><title>Override/implements templates on PyDev</title><content type="html">One thing I miss when working on Python is a way to let people know when some method is overridden (and having it raise an error if it's not)... I'm thinking about adding a decoration for that in PyDev (and probably a way to navigate to the super with that implementation), so, that'll work when using PyDev, but still, many times I look to the source code outside of PyDev (i.e.: review board, github, etc), and to sort that out, what I'm currently using is the following:&lt;br /&gt;&lt;br /&gt;1. Create overrides (for when a method is overridden from a subclass) and implements (to indicate that some method conforms to an interface, even if not actually overriding a method) decorators as follows:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1036001.js?file=decorators.py"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;2. Create templates (in PyDev) as follows:&lt;br /&gt;&lt;br /&gt;Name: overrides&lt;br /&gt;Description: @overrides&lt;br /&gt;Pattern: @overrides(${superclass}.${next_class_or_method})&lt;br /&gt;&lt;br /&gt;Name: implements&lt;br /&gt;Description: @implements&lt;br /&gt;@implements(${interface_class}.${next_class_or_method})&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Use it in your code:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1036001.js?file=using_decorator_example.py"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;To use it, just start typing 'overrides' before a 'def method' and apply the completion (and it should complete the class/method properly on overrides -- for the implements, the name of the implementing class will still be needed later on).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-6510019197769822631?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4mQWb_Pm2bN-nOKyVNQ6NN_Y4-s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4mQWb_Pm2bN-nOKyVNQ6NN_Y4-s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4mQWb_Pm2bN-nOKyVNQ6NN_Y4-s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4mQWb_Pm2bN-nOKyVNQ6NN_Y4-s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/xIm_emrcFTg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/6510019197769822631/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=6510019197769822631" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/6510019197769822631?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/6510019197769822631?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/xIm_emrcFTg/overrideimplements-templates-on-pydev.html" title="Override/implements templates on PyDev" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/06/overrideimplements-templates-on-pydev.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4FSXczfCp7ImA9WhZVF0Q.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-8155329486569532580</id><published>2011-05-30T15:42:00.000-07:00</published><updated>2011-05-30T16:08:38.984-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-30T16:08:38.984-07:00</app:edited><title>PyDev 2.1.0 released</title><content type="html">PyDev 2.1.0 has just been released, with a few noteworthy changes: &lt;br /&gt;&lt;br /&gt;The first change that's noteworthy is that only files opened in an editor will be code-analyzed... Until now, any file changed in the workspace would be analyzed for coding errors, which is a process that is usually fast, but there are 2 problems there: &lt;br /&gt;&lt;br /&gt;1. if lots of files changed at once, it could still be costly to make that analysis (and on really big files, that could be a problem too)&lt;br /&gt;&lt;br /&gt;2. there's no dependency analysis to know if a file should be re-analyzed when a given file changes, so, the actual state of warnings/errors could be misleading&lt;br /&gt;&lt;br /&gt;Still, as sometimes it's useful to do the analysis of many files at once, it's now possible to right-click a folder in the PyDev package explorer and ask for a full code-analysis to be done (note that the re-indexing of internal information still must be done for any file changed, but this process is pretty fast).&lt;br /&gt;&lt;br /&gt;Another nice feature added is a code-completion to override methods, so, after typing "def ", a code-completion may be requested to override a given method.&lt;br /&gt;&lt;br /&gt;And for TDD lovers, there's now an option to relaunch the last launch in the PyUnit view whenever a file changes :)&lt;br /&gt;&lt;br /&gt;The full details on the release may be seen at: &lt;a href="http://pydev.org/"&gt;http://pydev.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-8155329486569532580?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r6vreCi3NbyBW8tIEhP47mMon9A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r6vreCi3NbyBW8tIEhP47mMon9A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r6vreCi3NbyBW8tIEhP47mMon9A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r6vreCi3NbyBW8tIEhP47mMon9A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/icCJ-vu4ADk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/8155329486569532580/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=8155329486569532580" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/8155329486569532580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/8155329486569532580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/icCJ-vu4ADk/pydev-210-released.html" title="PyDev 2.1.0 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/05/pydev-210-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QCR3kycSp7ImA9WhZVF0Q.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-4169920060322488527</id><published>2011-05-18T16:43:00.000-07:00</published><updated>2011-05-30T15:42:46.799-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-30T15:42:46.799-07:00</app:edited><title>PyDev: Paying down technical debt...</title><content type="html">Yeap, pay time :)&lt;br /&gt;&lt;br /&gt;The next release is taking a bit more than usual because I'm taking time to &lt;a href="http://www.codinghorror.com/blog/2009/02/paying-down-your-technical-debt.html"&gt;pay some of the technical debt&lt;/a&gt; that PyDev accumulated over the years...&lt;br /&gt;&lt;br /&gt;Not that this will also reflect in a bunch of things that will be noticed externally (e.g.: faster build times) and there are some features added too, such as an override methods code-completion... &lt;br /&gt;&lt;br /&gt;The current nightly is already stable (although there are some more changes that are still planned), so, anyone curious is welcome to &lt;a href="http://pydev.org/download.html"&gt;grab the latest nightly&lt;/a&gt; and take it for a spin...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-4169920060322488527?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8Y3M2wdx6gMV9P1bI8SuTF1RE94/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Y3M2wdx6gMV9P1bI8SuTF1RE94/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8Y3M2wdx6gMV9P1bI8SuTF1RE94/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8Y3M2wdx6gMV9P1bI8SuTF1RE94/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/9zKpl-m6R_c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/4169920060322488527/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=4169920060322488527" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4169920060322488527?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4169920060322488527?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/9zKpl-m6R_c/pydev-paying-down-technical-debt.html" title="PyDev: Paying down technical debt..." /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/05/pydev-paying-down-technical-debt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIHRH84cSp7ImA9WhZXFkk.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-6783105073865881205</id><published>2011-05-05T16:19:00.000-07:00</published><updated>2011-05-05T17:42:15.139-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-05T17:42:15.139-07:00</app:edited><title>Profiling slow downs on Eclipse</title><content type="html">Java has this very nice utility that ships with the JDK called Java VisualVM which can provide many insights about what may be happening inside a java vm.&lt;br /&gt;&lt;br /&gt;The steps for verifying are:&lt;br /&gt;&lt;br /&gt;1. Have the actual java JDK installed (not only the jre) -- preferably the latest java 6.&lt;br /&gt;&lt;br /&gt;2. Start Eclipse with -Dcom.sun.management.jmxremote vmarg (edit the eclipse.ini file and add a line -Dcom.sun.management.jmxremote after the line -vmargs -- at least for Eclipse 3.6.x -- and restart it)&lt;br /&gt;&lt;br /&gt;3. Go on with your life until you get to something that's slow.&lt;br /&gt;&lt;br /&gt;4. When you get up to that point, start up the Java VisualVM: it's an executable usually located at: JAVA_HOME\bin\jvisualvm.exe&lt;br /&gt;&lt;br /&gt;5. Double click the java process running Eclipse (may appear as &amp;lt;Unknown Application&amp;gt;)&lt;br /&gt;&lt;br /&gt;6. Go to the 'monitor' tab and check if the Heap/PermGen is too close to the max size (if it is, probably the -Xmx argument must be raised in eclipse.ini -- if you feel it shouldn't be taking up so much memory -- i.e.: there's a memory leak, click the 'heap dump', which may be a big file, zip it, upload it somewhere and point to it in a bug report).&lt;br /&gt;&lt;br /&gt;7. If the memory seems fine, the next step is seeing up the threads running and creating a thread dump and right after it, go to the sampler, click on cpu to get sample data and add that data to a bug report (and attach both the thread dump and the sampler info to a bug report).&lt;br /&gt;&lt;br /&gt;And hopefully, that's enough information to know what may be wrong :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-6783105073865881205?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vu-38ezCYTqIrcDMDrMh9vCQNs0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu-38ezCYTqIrcDMDrMh9vCQNs0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vu-38ezCYTqIrcDMDrMh9vCQNs0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vu-38ezCYTqIrcDMDrMh9vCQNs0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/zAA5TPtfEnM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/6783105073865881205/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=6783105073865881205" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/6783105073865881205?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/6783105073865881205?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/zAA5TPtfEnM/profiling-slow-downs-on-eclipse.html" title="Profiling slow downs on Eclipse" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/05/profiling-slow-downs-on-eclipse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YARnY4eSp7ImA9WhZSGU4.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-2878385903390787326</id><published>2011-03-27T15:52:00.000-07:00</published><updated>2011-04-04T08:32:27.831-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T08:32:27.831-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pydev 2.0" /><category scheme="http://www.blogger.com/atom/ns#" term="PyCon" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse awards" /><category scheme="http://www.blogger.com/atom/ns#" term="code coverage" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>PyDev 2.0</title><content type="html">First the latest news: PyDev 2.0 is released.&lt;br /&gt;&lt;br /&gt;The main features introduced are:&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;TDD actions&lt;/span&gt; similar to those available in the Eclipse Java Development Tools (i.e.: create class, method, field, module with &lt;span style="font-weight:bold;"&gt;Ctrl+1&lt;/span&gt; quick fixes);&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;Code-coverage&lt;/span&gt; support has improved a lot (note that it relies on having the coverage module from &lt;a href="http://nedbatchelder.com/code/coverage/"&gt;http://nedbatchelder.com/code/coverage/&lt;/a&gt; installed).&lt;br /&gt;&lt;br /&gt;The full release notes may be found at: &lt;a href="http://pydev.org"&gt;http://pydev.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click the image below to see a short &lt;span style="font-weight:bold;"&gt;video &lt;/span&gt;showing these additions -- among a few other things that can be handy for those aiming to be productive using PyDev...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pydev.org/video_pydev_20.html"&gt;&lt;img src="http://pydev.org/images/video/snap0.png" alt="PyDev 2.0" title="Click to see PyDev 2.0 video"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately I couldn't be at PyCon to represent PyDev this year -- where there was a panel on Python IDEs -- so, at least I got to do a video with the presentation I'd do there :)&lt;br /&gt;&lt;br /&gt;Another nice thing is that PyDev won the “Best Developer Tool” award from the Eclipse Foundation!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-2878385903390787326?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/a53KYZ0KksoeQqAzSRwEAo_rolA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a53KYZ0KksoeQqAzSRwEAo_rolA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/a53KYZ0KksoeQqAzSRwEAo_rolA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a53KYZ0KksoeQqAzSRwEAo_rolA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/BoRYwRF8hhQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/2878385903390787326/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=2878385903390787326" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/2878385903390787326?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/2878385903390787326?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/BoRYwRF8hhQ/pydev-20.html" title="PyDev 2.0" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>10</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/03/pydev-20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEERn8-cSp7ImA9WhZTEEg.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-83067131280936601</id><published>2011-03-04T06:08:00.000-08:00</published><updated>2011-03-13T16:23:27.159-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-13T16:23:27.159-07:00</app:edited><title>PyDev is a finalist in the Eclipse Community Awards</title><content type="html">Actually, this is something that's already old news (announced more than a week ago) but I couldn't manage to get time to post about it sooner, as I'm pretty busy coding for the next PyDev release ;)&lt;br /&gt;&lt;br /&gt;PyDev has been named one of the finalists for the &lt;a href="http://www.eclipse.org/org/press-release/20110301_awardfinalists.php"&gt;Best Developer Tool in the Eclipse Community Awards&lt;/a&gt; (the other finalist in this category is &lt;a href="http://diver.sourceforge.net/"&gt;Diver&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;So, just wanted to share the good news for PyDev :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-83067131280936601?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KEwpeoOozxw0zYEU9RI6M6IUNDk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KEwpeoOozxw0zYEU9RI6M6IUNDk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KEwpeoOozxw0zYEU9RI6M6IUNDk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KEwpeoOozxw0zYEU9RI6M6IUNDk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/QZv1_kdYeu0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/83067131280936601/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=83067131280936601" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/83067131280936601?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/83067131280936601?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/QZv1_kdYeu0/pydev-is-finalist-in-eclipse-community.html" title="PyDev is a finalist in the Eclipse Community Awards" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/03/pydev-is-finalist-in-eclipse-community.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4GSHo4fSp7ImA9WhRXE00.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-5337379066785539095</id><published>2011-02-09T02:16:00.000-08:00</published><updated>2011-12-19T07:02:09.435-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-19T07:02:09.435-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Git on the command line</title><content type="html">Yes, sometimes I still use the command line for git (even with EGit getting better and an integration on Aptana Studio 3).&lt;br /&gt;&lt;br /&gt;This is an update to a &lt;a href="http://pydev.blogspot.com/2009/09/git-and-folder-compare-with-git-with.html"&gt;previous post about git&lt;/a&gt; (with msysgit).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[Update]&lt;/span&gt; October 31st, 2011:  Improved gitdd command a bit&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Configure running shell&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Usually I use &lt;a href="http://www.jpsoft.com/tccledes.htm"&gt;TCC/LE&lt;/a&gt; as a shell, so, there's an alias to start the git bash shell from it (tcc allows editing the a 4START.BAT which will run when it's started, so, the configuration may be added there):&lt;br /&gt;&lt;br /&gt;alias gitshell=path_to_git/bin/sh.exe --login -i&lt;br /&gt;&lt;br /&gt;Other aliases:&lt;br /&gt;&lt;br /&gt;alias git1=git log --graph --oneline --decorate&lt;br /&gt;&lt;br /&gt;Shows the log with nice graph.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1a Use pageant/plink so that the password does not need to be entered all the time&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download pageant/plink, set environment variable GIT_SSH to the plink location, start pageant and load the private ssh key with pageant.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1b Global git configurations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;git config --global core.autocrlf false&lt;br /&gt;git config --global user.name "fabioz"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Fix history behavior&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I find it annoying that the default history completion behavior (when up/down is used) is always getting the previous command instead of completing based on what's already there. To fix that, create a .inputrc file in your user home directory and set the following contents to it:&lt;br /&gt;&lt;br /&gt;## By default up/down are bound to previous-history&lt;br /&gt;## and next-history respectively. The following does the&lt;br /&gt;## same but gives the extra functionality where if you&lt;br /&gt;## type any text (or more accurately, if there is any text&lt;br /&gt;## between the start of the line and the cursor),&lt;br /&gt;## the subset of the history starting with that text&lt;br /&gt;## is searched (like 4dos for e.g.).&lt;br /&gt;## Note to get rid of a line just Ctrl-C&lt;br /&gt;"\e[B": history-search-forward&lt;br /&gt;"\e[A": history-search-backward&lt;br /&gt;&lt;br /&gt;$if Bash&lt;br /&gt;  ## F10 toggles mc on and off&lt;br /&gt;  ## Note Ctrl-o toggles panes on and off in mc&lt;br /&gt;  "\e[21~": "mc\C-M"&lt;br /&gt;&lt;br /&gt;  ##do history expansion when space entered&lt;br /&gt;  Space: magic-space&lt;br /&gt;$endif&lt;br /&gt;&lt;br /&gt;## Include system wide settings which are ignored&lt;br /&gt;## by default if one has their own .inputrc&lt;br /&gt;$include /etc/inputrc&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Diff changes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For diffing the current changes with WinMerge, there's a file called gitdd (added to the git bin dir) with the contents below:&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# usage: gitdd&lt;br /&gt;# Compares the current differences in winmerge with links to original files.&lt;br /&gt;# Note that it must be executed at the root of the git repository.&lt;br /&gt;&lt;br /&gt;SUBDIRECTORY_OK=1&lt;br /&gt;&lt;br /&gt;O=".git-winmerge-tmp-$$"&lt;br /&gt;V=HEAD&lt;br /&gt;list="$O/list"&lt;br /&gt;list_exist="$O/list_exist"&lt;br /&gt;# Delete everything created here on exit&lt;br /&gt;trap "rm -rf $O" 0&lt;br /&gt;mkdir $O&lt;br /&gt;mkdir $O/WORKINGCOPY&lt;br /&gt;# Dump&lt;br /&gt;git diff $V --name-only -z $1 &amp;gt; $list&lt;br /&gt;# Create links to changed files inside temp folder&lt;br /&gt;# (changes made to these links will be made to originals)&lt;br /&gt;for i in `cat $list | xargs -0`; do&lt;br /&gt;PPATH=`dirname $i`&lt;br /&gt;mkdir -p $O/WORKINGCOPY/$PPATH&lt;br /&gt;mkdir -p $O/HEAD/$PPATH&lt;br /&gt;ln $(pwd)/$i $(pwd)/$O/WORKINGCOPY/$i&lt;br /&gt;git show HEAD:$i &amp;gt; $O/HEAD/$i&lt;br /&gt;done&lt;br /&gt;# Copy HEAD versions of changed files to temp folder&lt;br /&gt;# cat $list | xargs -0 git archive --prefix=HEAD/ $V | tar xf - -C $O&lt;br /&gt;# Execute winmerge which must be on the system path&lt;br /&gt;WinMergeU.exe //r //u //wr //dl WORKINGCOPY //dr HEAD $O/WORKINGCOPY $O/HEAD&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3a. WinMerge tree view&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I also always like to see things as a tree in WinMerge (Menu view &amp;gt; Mode: Alt+V M) and also expanded (Menu view &amp;gt; Expand All Subfolders: Alt+V X). It'll store the configuration to show as tree, but unfortunately it needs to be expanded all the times when doing a compare (i.e.: no auto-expand).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Show things in a compact way&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;git config format.pretty "%h %ct %ad %Cgreen%aN%Creset %s"&lt;br /&gt;git config log.date short&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. The commands used to get the contents of a pull request (create local branch, merge, get dev, merge with dev):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;git checkout -b PullFromBranch-dev development&lt;br /&gt;git pull https://github.com/pull_from_user/Pydev.git PullFromBranch&lt;br /&gt;git checkout development&lt;br /&gt;git merge PullFromBranch-dev --no-commit --no-ff&lt;br /&gt;&lt;br /&gt;Then, to accept the merge do a commit or to reject it do:&lt;br /&gt;git merge --abort&lt;br /&gt;or&lt;br /&gt;git merge --reset&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6. When creating a feature in a branch:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;git checkout -b FeatureBranch-dev development&lt;br /&gt;git checkout development&lt;br /&gt;git pull FeatureBranch-dev --no-ff&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And the commands I use most:&lt;br /&gt;&lt;br /&gt;git status&lt;br /&gt;git commit -a -m "Message"&lt;br /&gt;git push origin master&lt;br /&gt;git checkout&lt;br /&gt;git log -n 6&lt;br /&gt;git log -n 3 --format=full&lt;br /&gt;git commit --amend (change last commit message)&lt;br /&gt;git show   (see what happened on a commit)&lt;br /&gt;&lt;br /&gt;And some of the commands I had to discover how to use in the msysgit bash are:&lt;br /&gt;&lt;br /&gt;Alt+Space+E+K: mark contents for copy&lt;br /&gt;Insert: paste contents&lt;br /&gt;Alt+Backspace: erase until whitespace&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Doing a merge:&lt;br /&gt;&lt;br /&gt;Steps: create a new branch based on the current development, pull the merge request into that branch, then checkout the development branch, merge it there without commiting (to do a proper review) and then accept or reject the merge.&lt;br /&gt;&lt;br /&gt;git checkout -b branch_to_do_merge_dev development&lt;br /&gt;git pull https://github.com/user/Pydev.git jonahkichwacoders:branch_to_do_merge&lt;br /&gt;git checkout development&lt;br /&gt;git merge branch_to_do_merge_dev --no-commit --no-ff&lt;br /&gt;&lt;br /&gt;Then, to accept the merge do a commit to reject it do:&lt;br /&gt;git merge --abort&lt;br /&gt;or&lt;br /&gt;git merge --reset&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-5337379066785539095?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5pLfZbj7BduCceHXjzQSzb04bII/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5pLfZbj7BduCceHXjzQSzb04bII/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5pLfZbj7BduCceHXjzQSzb04bII/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5pLfZbj7BduCceHXjzQSzb04bII/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/Zr2EDAcstE0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/5337379066785539095/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=5337379066785539095" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/5337379066785539095?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/5337379066785539095?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/Zr2EDAcstE0/git-on-command-line.html" title="Git on the command line" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/02/git-on-command-line.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUNRno6fip7ImA9Wx9VF0g.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-589309934355425041</id><published>2011-02-03T10:20:00.000-08:00</published><updated>2011-02-03T10:38:17.416-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-03T10:38:17.416-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pydev 1.6.5" /><title>Pydev 1.6.5 released</title><content type="html">Pydev 1.6.5 is already available for download.&lt;br /&gt;&lt;br /&gt;The major features added in this released where:&lt;br /&gt;&lt;br /&gt;1. Code generation for classes and methods&lt;br /&gt;&lt;br /&gt;  * It's now possible to select a given token and press Shift+Alt+S C to create a class for it or Shift+Alt+S M to create a method&lt;br /&gt;&lt;br /&gt;  * In some undefined variable, do Ctrl+1 and select create method or create class.&lt;br /&gt;&lt;br /&gt;Note that this is an initial implementation of the idea, aimed as those that use a TDD (Test Driven Development) approach, so, one can create the test first and generate the classes/methods later on from using shortcuts or quick-fixes (which is &lt;br /&gt;something that those using JDT -- Java Development Tools -- in Eclipse should be already familiar with). This feature should be already usable on a number of situations but it's still far from being 100% complete.&lt;br /&gt;&lt;br /&gt;2. Syntax highlighting is now available for (), [], {} and operators.&lt;br /&gt;&lt;br /&gt;Aside from those, a number of bug-fixes were also made available (particularly nasty was a bug that prevented the interactive console from working with some of the Python 3.x versions).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-589309934355425041?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/knNxYMBGKlORx20vp2DVAEaimEo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/knNxYMBGKlORx20vp2DVAEaimEo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/knNxYMBGKlORx20vp2DVAEaimEo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/knNxYMBGKlORx20vp2DVAEaimEo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/R3SPmywQtZQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/589309934355425041/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=589309934355425041" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/589309934355425041?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/589309934355425041?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/R3SPmywQtZQ/pydev-165-released.html" title="Pydev 1.6.5 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/02/pydev-165-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUAQnozeSp7ImA9Wx9WFUk.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-4283429253159968068</id><published>2011-01-18T14:21:00.000-08:00</published><updated>2011-01-20T09:07:23.481-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-20T09:07:23.481-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="aptana" /><category scheme="http://www.blogger.com/atom/ns#" term="pydev" /><category scheme="http://www.blogger.com/atom/ns#" term="appcelerator" /><title>Appcelerator, Aptana &amp; Pydev</title><content type="html">Well, as publicized already, &lt;a href="http://aptana.com/"&gt;Aptana&lt;/a&gt; was acquired by &lt;a href="http://www.appcelerator.com/"&gt;Appcelerator&lt;/a&gt; (&lt;a href="http://www.appcelerator.com/appcelerator-acquires-aptana/"&gt;http://www.appcelerator.com/appcelerator-acquires-aptana/&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;So, I thought I'd write a bit about it...&lt;br /&gt;&lt;br /&gt;First thing to note is that (as the rest of the team) I've joined Appcelerator, and the plan is to keep Pydev going forward (as it has been going since I had joined Aptana). However, unlike the rest of the team, I'm still based on Brazil :)&lt;br /&gt;&lt;br /&gt;I think that the only difference in focus is that now, aside from the support for Django and Google App Engine, &lt;a href="http://www.appcelerator.com/products/"&gt;Titanium&lt;/a&gt; (which is Appcelerator's platform for developing desktop and mobile applications) will also have some special attention, although I still don't have more details on what exactly this means...&lt;br /&gt;&lt;br /&gt;All in all, I think this was a good thing, as one of the things that Aptana was looking for was something to support (as the plans were always about giving Aptana Studio for free and making money on something else), and Appcelerator will have a nice improvement in terms of a better coding environment :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-4283429253159968068?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kIDQWg7cSM0xLxyZHyWfBa7vRSE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kIDQWg7cSM0xLxyZHyWfBa7vRSE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kIDQWg7cSM0xLxyZHyWfBa7vRSE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kIDQWg7cSM0xLxyZHyWfBa7vRSE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/uEnsTzGZtwg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/4283429253159968068/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=4283429253159968068" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4283429253159968068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4283429253159968068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/uEnsTzGZtwg/appcelerator-aptana-pydev.html" title="Appcelerator, Aptana &amp; Pydev" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/01/appcelerator-aptana-pydev.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UER346cSp7ImA9Wx9XEEs.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-7825043444449770559</id><published>2011-01-03T06:04:00.000-08:00</published><updated>2011-01-03T06:33:26.019-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-03T06:33:26.019-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unittest" /><category scheme="http://www.blogger.com/atom/ns#" term="pydev 1.6.4" /><title>Pydev 1.6.4 released</title><content type="html">Pydev 1.6.4 is now available. &lt;br /&gt;&lt;br /&gt;The major change is the new unittest support, which was previously commented at: &lt;a href="http://pydev.blogspot.com/2010/12/improved-unittest-support-in-pydev.html"&gt;http://pydev.blogspot.com/2010/12/improved-unittest-support-in-pydev.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, there were some other changes since that post that are worth mentioning too:&lt;br /&gt;&lt;br /&gt;The default Pydev test runner can now distribute tests among multiple processes, which can make testing much faster (if you have multiple CPUs available). Although note that if the tests weren't properly designed they may break. One example would be the case when 2 tests end up writing/reading to the same file. &lt;br /&gt;&lt;br /&gt;Note that there's also an option to run all the tests from a given module in the same process (instead of separating them 'randomly' among processes).&lt;br /&gt;&lt;br /&gt;See: &lt;a href="http://pydev.org/manual_adv_pyunit.html"&gt;http://pydev.org/manual_adv_pyunit.html&lt;/a&gt; for details on the flags to be passed to enable running in multiple processes and basic instructions on how to use the new unittest integration.&lt;br /&gt;&lt;br /&gt;Also important is that a major bug was fixed -- in this bug, existing interpreters could end up being corrupted when a new interpreter was added (so, if you are using multiple interpreters you're strongly advised to upgrade) -- note: if there seems to be some issue with corruption of the internal pydev indexes, &lt;span style="font-weight:bold;"&gt;ctrl+2 --reindex&lt;/span&gt; can be used (while in the pydev editor) to ask for the pydev indexes to be rebuilt (which would be the case if the globals browser is not working properly or the pydev code analysis was manually stopped for some reason) it shouldn't be needed, but, if the need arises, it's there :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-7825043444449770559?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7acgI4WvktT6H4UAMJHRKBT2spU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7acgI4WvktT6H4UAMJHRKBT2spU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7acgI4WvktT6H4UAMJHRKBT2spU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7acgI4WvktT6H4UAMJHRKBT2spU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/waKd22xdSrQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/7825043444449770559/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=7825043444449770559" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/7825043444449770559?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/7825043444449770559?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/waKd22xdSrQ/pydev-164-released.html" title="Pydev 1.6.4 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>6</thr:total><feedburner:origLink>http://pydev.blogspot.com/2011/01/pydev-164-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIEQHk_eip7ImA9Wx9REE8.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-4210503508034849041</id><published>2010-12-10T14:26:00.000-08:00</published><updated>2010-12-10T15:08:21.742-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-10T15:08:21.742-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pyunit" /><category scheme="http://www.blogger.com/atom/ns#" term="unittest" /><title>Improved unittest support in Pydev</title><content type="html">Pydev 1.6.4 is still not released, but the first nightly with the new support for unittest is now available (see &lt;a href="http://pydev.org/download.html"&gt;http://pydev.org/download.html&lt;/a&gt; on instructions for getting the nightly).&lt;br /&gt;&lt;br /&gt;The major features added are:&lt;br /&gt;&lt;br /&gt;1. A PyUnit view is now available to show the results of unittests&lt;br /&gt;2. The nose and Py.test test runners are now also supported&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EFaA1IqAbHY/TQKvgSHejII/AAAAAAAAAsQ/8crckSIFmLo/s1600/py_unit_view.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 640px; height: 700px;" src="http://4.bp.blogspot.com/_EFaA1IqAbHY/TQKvgSHejII/AAAAAAAAAsQ/8crckSIFmLo/s1600/py_unit_view.png" border="1" alt=""id="BLOGGER_PHOTO_ID_5549190660027747458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The interesting features related to seeing the tests are:&lt;br /&gt;&lt;br /&gt;- The results of tests are shown, along with a green/red bar (or if you're with Aptana Studio, following the color theme)&lt;br /&gt;- The time a test took to run is shown (and may be used to sort the tree)&lt;br /&gt;- The errors/output are shown by selecting the test run or just hovering over the items&lt;br /&gt;- A filter to show only errors is available&lt;br /&gt;&lt;br /&gt;And there are some interesting actions in that view too:&lt;br /&gt;&lt;br /&gt;- A test session can be rerun&lt;br /&gt;- A new test session can be created to rerun only the errors of the current run&lt;br /&gt;- The test session can be stopped&lt;br /&gt;- The results of a previously run test session can be seen again&lt;br /&gt;&lt;br /&gt;And at last (but not least), the test runner can now be configured, so, one can use the test runner bundled in Pydev, Nose or Py.Test. &lt;br /&gt;&lt;br /&gt;The preferences page to configure it can be accessed in the 'Configure test runner preferences' in the PyUnit view.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_EFaA1IqAbHY/TQKvp49rE8I/AAAAAAAAAsY/9DWIs2DLqb8/s1600/py_unit_preferences.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 367px;" src="http://3.bp.blogspot.com/_EFaA1IqAbHY/TQKvp49rE8I/AAAAAAAAAsY/9DWIs2DLqb8/s400/py_unit_preferences.png" border="1" alt=""id="BLOGGER_PHOTO_ID_5549190825074430914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-4210503508034849041?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bsMu1KFPvpNchQJMC1rt-435sxY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bsMu1KFPvpNchQJMC1rt-435sxY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bsMu1KFPvpNchQJMC1rt-435sxY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bsMu1KFPvpNchQJMC1rt-435sxY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/ZWsJCImyTCo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/4210503508034849041/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=4210503508034849041" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4210503508034849041?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/4210503508034849041?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/ZWsJCImyTCo/improved-unittest-support-in-pydev.html" title="Improved unittest support in Pydev" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_EFaA1IqAbHY/TQKvgSHejII/AAAAAAAAAsQ/8crckSIFmLo/s72-c/py_unit_view.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://pydev.blogspot.com/2010/12/improved-unittest-support-in-pydev.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYHSXszcSp7ImA9Wx9TFEg.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-1010626662915229332</id><published>2010-11-21T10:49:00.000-08:00</published><updated>2010-11-22T10:22:18.589-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-22T10:22:18.589-08:00</app:edited><title>What's next in pydev?</title><content type="html">Ok, this release is taking more time than usual. What happened is that the main target of the release changed after I started working on it (due to popular demand).&lt;br /&gt;&lt;br /&gt;So, the next 2 releases will be targeted at those that use unit-tests a lot -- such as myself :)&lt;br /&gt;&lt;br /&gt;I won't put on more details right now, but as soon as things are ready for testing  (probably at mid-end December) I'll post again about it.&lt;br /&gt;&lt;br /&gt;In the meanwhile, critical bugfixes are being fixed and nightly builds are being issued with those fixes if anyone needs those. So, the current nightly is actually the last stable version + bugfixes -- new things are in a branch called 'nose' -- which should give a hint on what's being worked on from its name :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-1010626662915229332?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/liGnSaPXa_mfTgquN4leEW3Vf4U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/liGnSaPXa_mfTgquN4leEW3Vf4U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/liGnSaPXa_mfTgquN4leEW3Vf4U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/liGnSaPXa_mfTgquN4leEW3Vf4U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/57PM0UBVXak" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/1010626662915229332/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=1010626662915229332" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/1010626662915229332?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/1010626662915229332?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/57PM0UBVXak/whats-next-in-pydev.html" title="What's next in pydev?" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://pydev.blogspot.com/2010/11/whats-next-in-pydev.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYASXc4fip7ImA9Wx5VE08.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-2376922587653418412</id><published>2010-10-05T16:54:00.000-07:00</published><updated>2010-10-05T16:59:08.936-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-05T16:59:08.936-07:00</app:edited><title>Pydev 1.6.3 released</title><content type="html">Yes, Pydev 1.6.3 is out.&lt;br /&gt;&lt;br /&gt;This is mostly a bug fix release, but there are still some noteworthy things, such as new icons, a better editor preferences explaining how to properly configure the themes when using Aptana themes and an improved code-completion for keywords.&lt;br /&gt;&lt;br /&gt;See the full details at &lt;a href="http://pydev.org/"&gt;http://pydev.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-2376922587653418412?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GtspIPQepDTt_yk0HlIMZVOEy4Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GtspIPQepDTt_yk0HlIMZVOEy4Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GtspIPQepDTt_yk0HlIMZVOEy4Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GtspIPQepDTt_yk0HlIMZVOEy4Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/GxdGlOCviZ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/2376922587653418412/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=2376922587653418412" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/2376922587653418412?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/2376922587653418412?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/GxdGlOCviZ4/pydev-163-released.html" title="Pydev 1.6.3 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://pydev.blogspot.com/2010/10/pydev-163-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGQ3s5eCp7ImA9Wx5QGEs.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-1969287856941510815</id><published>2010-09-07T05:19:00.000-07:00</published><updated>2010-09-07T05:28:42.520-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-07T05:28:42.520-07:00</app:edited><title>Pydev 1.6.2 released</title><content type="html">The latest Pydev version is out.&lt;br /&gt;&lt;br /&gt;The Django Templates Editor is the major thing in this release, supporting html files with html, css and javascript.&lt;br /&gt;&lt;br /&gt;The current Pydev is now also integrated in Aptana Studio 3, so, a full download where Pydev (with the Django templates editor) is already pre-installed is available at: &lt;a href="http://aptana.com/products/studio3/download"&gt;http://aptana.com/products/studio3/download&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also noteworthy is that the Python 2.7 grammar is fully supported (and a bunch of bug fixes have been made available).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-1969287856941510815?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t7hVYnFoJgXHsgJAiAUR_h5ww7U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t7hVYnFoJgXHsgJAiAUR_h5ww7U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t7hVYnFoJgXHsgJAiAUR_h5ww7U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t7hVYnFoJgXHsgJAiAUR_h5ww7U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/3MHHUG8Rlv8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/1969287856941510815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=1969287856941510815" title="16 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/1969287856941510815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/1969287856941510815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/3MHHUG8Rlv8/pydev-162-released.html" title="Pydev 1.6.2 released" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>16</thr:total><feedburner:origLink>http://pydev.blogspot.com/2010/09/pydev-162-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEHRHwyeyp7ImA9Wx5REkg.&quot;"><id>tag:blogger.com,1999:blog-8550962.post-8123610509836734620</id><published>2010-08-19T13:47:00.001-07:00</published><updated>2010-08-19T14:17:15.293-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-19T14:17:15.293-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django templates" /><title>Django Templates Editor</title><content type="html">The new Django templates editor is now available in the nightly build (see &lt;a href="http://pydev.org/download.html"&gt;http://pydev.org/download.html&lt;/a&gt; on how to get it).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's important to note that it's built as a separate plugin that &lt;span style="font-weight:bold;"&gt;requires the Aptana Studio &lt;/span&gt;3 from &lt;span style="font-weight:bold;"&gt;2010-08-18&lt;/span&gt; to work properly. Aptana Studio 3 can be grabbed at: &lt;a href="http://aptana.com/products/studio3/download"&gt;http://aptana.com/products/studio3/download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This version provides syntax highlight (using the Aptana Themes)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_EFaA1IqAbHY/TG2bnQSQYPI/AAAAAAAAArw/oR7qTrBwhyM/s1600/django_syntax.png"&gt;&lt;img style="cursor: pointer; width: 640px; height: 480px;" src="http://1.bp.blogspot.com/_EFaA1IqAbHY/TG2bnQSQYPI/AAAAAAAAArw/oR7qTrBwhyM/s1600/django_syntax.png" alt="" id="BLOGGER_PHOTO_ID_5507229018032726258" border="1" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The highlighted tokens are the ones defined in the templates in the "Django tags" context (so, tags to be highlighted can be added or removed).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_EFaA1IqAbHY/TG2cQrBxFLI/AAAAAAAAAr4/-5ddc_bWck4/s1600/django_templates.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 623px; height: 431px;" src="http://3.bp.blogspot.com/_EFaA1IqAbHY/TG2cQrBxFLI/AAAAAAAAAr4/-5ddc_bWck4/s1600/django_templates.png" border="1" alt=""id="BLOGGER_PHOTO_ID_5507229729585960114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also, there's code completion based on templates for the django-templates related stuff and pretty nice html completions inherited from the Aptana html editor.&lt;br /&gt;&lt;br /&gt;The image below shows the html completions, a django-templates template completion and its result and a django-templates template completion for the filters.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EFaA1IqAbHY/TG2cnfH1_zI/AAAAAAAAAsA/XdJvAXvhOsg/s1600/django_completions.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 640px; height: 598px;" src="http://2.bp.blogspot.com/_EFaA1IqAbHY/TG2cnfH1_zI/AAAAAAAAAsA/XdJvAXvhOsg/s1600/django_completions.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5507230121527213874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's it for now. Please grab it and let me know if it's working or if there's a bug lying around there so that it can be fixed before the official release :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8550962-8123610509836734620?l=pydev.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SGnLmK0DtkF4NXTt1xjfUYv6dyw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SGnLmK0DtkF4NXTt1xjfUYv6dyw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SGnLmK0DtkF4NXTt1xjfUYv6dyw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SGnLmK0DtkF4NXTt1xjfUYv6dyw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/pydev/~4/TCbaGUvxYVk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://pydev.blogspot.com/feeds/8123610509836734620/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8550962&amp;postID=8123610509836734620" title="28 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/8123610509836734620?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8550962/posts/default/8123610509836734620?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/pydev/~3/TCbaGUvxYVk/django-templates-editor.html" title="Django Templates Editor" /><author><name>Fabio Zadrozny</name><uri>http://www.blogger.com/profile/04202246218394712738</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_EFaA1IqAbHY/TG2bnQSQYPI/AAAAAAAAArw/oR7qTrBwhyM/s72-c/django_syntax.png" height="72" width="72" /><thr:total>28</thr:total><feedburner:origLink>http://pydev.blogspot.com/2010/08/django-templates-editor.html</feedburner:origLink></entry></feed>

