##// END OF EJS Templates
Checkpoint for feedback from Thomas.
Fernando Perez -
Show More
@@ -1,561 +1,606 b''
1 =============
1 =============
2 0.11 Series
2 0.11 Series
3 =============
3 =============
4
4
5 Release 0.11
5 Release 0.11
6 ============
6 ============
7
7
8 IPython 0.11 is a *major* overhaul of IPython, two years in the making. Most
8 IPython 0.11 is a *major* overhaul of IPython, two years in the making. Most
9 of the code base has been rewritten or at least reorganized, breaking backward
9 of the code base has been rewritten or at least reorganized, breaking backward
10 compatibility with several APIs in previous versions. It is the first major
10 compatibility with several APIs in previous versions. It is the first major
11 release in two years, and probably the most significant change to IPython since
11 release in two years, and probably the most significant change to IPython since
12 its inception. We plan to have a relatively quick succession of releases, as
12 its inception. We plan to have a relatively quick succession of releases, as
13 people discover new bugs and regressions. Once we iron out any significant
13 people discover new bugs and regressions. Once we iron out any significant
14 bugs in this process and settle down the new APIs, this series will become
14 bugs in this process and settle down the new APIs, this series will become
15 IPython 1.0. We encourage feedback now on the core APIs, which we hope to
15 IPython 1.0. We encourage feedback now on the core APIs, which we hope to
16 maintain stable during the 1.0 series.
16 maintain stable during the 1.0 series.
17
17
18 Chris Fonnesbeck recently wrote an `excellent post`_ that highlights some of
18 Since the internal APIs have changed so much, projects using IPython as a
19 the core new features, with examples and screenshots. We encourage you
19 library (as opposed to end-users of the application) are the most likely to
20 to read it as it provides a great high-level overview that complements the
20 encounter regressions or changes that break their existing use patterns. We
21 will make every effort to provide updated versions of the APIs to facilitate
22 the transition, and we encourage you to contact us on the `development mailing
23 list`__ with questions and feedback.
24
25 .. __: http://mail.scipy.org/mailman/listinfo/ipython-dev
26
27 Chris Fonnesbeck recently wrote an `excellent post`__ that highlights some of
28 our major new features, with examples and screenshots. We encourage you to
29 read it as it provides an illustrated, high-level overview complementing the
21 detailed feature breakdown in this document.
30 detailed feature breakdown in this document.
22
31
23 .. _excellent post: http://stronginference.com/weblog/2011/7/15/innovations-in-ipython.html
32 .. __: http://stronginference.com/weblog/2011/7/15/innovations-in-ipython.html
24
33
25 A quick summary of the major changes (see below for details):
34 A quick summary of the major changes (see below for details):
26
35
27 * **Standalone Qt console**: a new rich console has been added to IPython,
36 * **Standalone Qt console**: a new rich console has been added to IPython,
28 started with `ipython qtconsole`. In this application we have tried to
37 started with `ipython qtconsole`. In this application we have tried to
29 retain the feel of a terminal for fast and efficient workflows, while adding
38 retain the feel of a terminal for fast and efficient workflows, while adding
30 many features that a plain text terminal simply can not support, such as
39 many features that a plain text terminal simply can not support, such as
31 inline figures, full multiline editing with syntax highlighting, tooltips for
40 inline figures, full multiline editing with syntax highlighting, tooltips for
32 function calls and much more.
41 function calls and much more. This development was sponsored by `Enthought
42 Inc.`__. See :ref:`below <qtconsole_011>` for details.
43
44 .. __: http://enthought.com
33
45
34 * **High-level parallel computing with ZeroMQ**. Using the same architecture
46 * **High-level parallel computing with ZeroMQ**. Using the same architecture
35 that our Qt console is based on, we have completely rewritten our high-level
47 that our Qt console is based on, we have completely rewritten our high-level
36 parallel computing machinery that in prior versions used the Twisted
48 parallel computing machinery that in prior versions used the Twisted
37 networking framework. While this change will require users to update their
49 networking framework. While this change will require users to update their
38 codes, the improvements in performance, memory control and internal
50 codes, the improvements in performance, memory control and internal
39 consistency across our codebase convinced us it was a price worth paying. We
51 consistency across our codebase convinced us it was a price worth paying. We
40 have tried to explain how to best proceed with this update, and will be happy
52 have tried to explain how to best proceed with this update, and will be happy
41 to answer questions that may arise.
53 to answer questions that may arise. A full tutorial describing these
54 features `was presented at SciPy'11`__.
55
56 .. __: http://minrk.github.com/scipy-tutorial-2011
42
57
43 * **New model for GUI/plotting support in the terminal**. Now instead of the
58 * **New model for GUI/plotting support in the terminal**. Now instead of the
44 various `-Xthread` flags we had before, GUI support is provided without the
59 various `-Xthread` flags we had before, GUI support is provided without the
45 use of any threads, by directly integrating GUI event loops with Python's
60 use of any threads, by directly integrating GUI event loops with Python's
46 `PyOS_InputHook` API. A new command-line flag `--gui` controls GUI support,
61 `PyOS_InputHook` API. A new command-line flag `--gui` controls GUI support,
47 and it can also be enabled after IPython startup via the new `%gui` magic.
62 and it can also be enabled after IPython startup via the new `%gui` magic.
63 This requires some changes if you want to execute GUI-using scripts inside
64 IPython, see :ref:`below <gui_support>` for more details.
65
66 * **Integration into Microsoft Visual Studio**. Thanks to the work of the
67 Microsoft `Python Tools for Visual Studio`__ team, this version of IPython
68 has been integrated into Microsoft Visual Studio's Python tools open source
69 plug-in. They currently have a relesae candidate out using IPython 0.11,
70 and we will continue to collaborate with them to ensure that as they
71 approach full release time, the integration with IPython is as smooth as
72 possible.
73
74 .. __: http://pytools.codeplex.com/
48
75
49 * **A two-process architecture.** The Qt console is the first example of using
76 * **A two-process architecture.** The Qt console is the first example of using
50 a new model that splits IPython between a kernel process where code is
77 a new model that splits IPython between a kernel process where code is
51 executed and a client that handles user interaction. We plan on also
78 executed and a client that handles user interaction. We plan on also
52 providing terminal and web-browser based clients using this infrastructure in
79 providing terminal and web-browser based clients using this infrastructure in
53 future releases. This model allows multiple clients to interact with an
80 future releases. This model allows multiple clients to interact with an
54 IPython process through a well-documented protocol using the ZeroMQ
81 IPython process through a well-documented protocol using the ZeroMQ
55 networking library.
82 networking library.
56
83
57 * **Refactoring.** the entire codebase has been refactored, in order to make it
84 * **Refactoring.** the entire codebase has been refactored, in order to make it
58 more modular and easier to contribute to. IPython has traditionally been a
85 more modular and easier to contribute to. IPython has traditionally been a
59 hard project to participate because the old codebase was very monolithic. We
86 hard project to participate because the old codebase was very monolithic. We
60 hope this (ongoing) restructuring will make it easier for new developers to
87 hope this (ongoing) restructuring will make it easier for new developers to
61 join us.
88 join us.
62
89
63 * **Improved unicode support**. We closed many bugs related to unicode input.
90 * **Improved unicode support**. We closed many bugs related to unicode input.
64
91
65 * **Python 3**. IPython now runs on Python 3.x.
92 * **Python 3**. IPython now runs on Python 3.x. See :ref:`python3_011` for
93 details.
66
94
67 * **New profile model**. Profiles are now directories that contain all relevant
95 * **New profile model**. Profiles are now directories that contain all relevant
68 infromation for that session, and thus better isolate IPython use-cases.
96 infromation for that session, and thus better isolate IPython use-cases.
69
97
70 * **SQLite storage for history**. All history is now stored in a SQLite
98 * **SQLite storage for history**. All history is now stored in a SQLite
71 database, providing support for multiple simultaneous sessions that won't
99 database, providing support for multiple simultaneous sessions that won't
72 clobber each other as well as the ability to perform queries on all stored
100 clobber each other as well as the ability to perform queries on all stored
73 data.
101 data.
74
102
75 * **New configuration system**. All parts of IPython are now configured via a
103 * **New configuration system**. All parts of IPython are now configured via a
76 mechanism inspired by the Enthought Traits library. Any configurable
104 mechanism inspired by the Enthought Traits library. Any configurable
77 element can have its attributes set either via files that now use real
105 element can have its attributes set either via files that now use real
78 Python syntax or from the command-line.
106 Python syntax or from the command-line.
79
107
80
81 Over 60 separate authors have contributed to this release, see :ref:`below
108 Over 60 separate authors have contributed to this release, see :ref:`below
82 <credits>` for a full list.
109 <credits>` for a full list.
83
110
84
111
85 Don't forget
112 Don't forget
86 ------------
113 ------------
87
114
88 - thank enthought, MS, NIH, NSF, Google. Missing anyone?
115 - thank enthought, MS, NIH, NSF, Google. Missing anyone?
89 - ms visual studio integration
116 - ms visual studio integration
90
117
118 .. _gui_support:
91
119
92 Plotting and GUI support in the terminal
120 GUI and plotting support in the terminal
93 ----------------------------------------
121 ----------------------------------------
94
122
95 Todo...
123 Todo...
96
124
97
125
126 .. _qtconsole_011:
127
98 Qt Console
128 Qt Console
99 ----------
129 ----------
100
130
101 Todo...
131 Todo...
102
132
133 .. figure:: ../_static/qtconsole.png
134 :width: 400px
135 :alt: IPython Qt console with embedded plots
136 :align: center
137 :target: ../_static/qtconsole.png
138
139 The Qt console for IPython, using inline matplotlib plots.
140
141
103
142
104 High-level parallel computing with ZeroMQ
143 High-level parallel computing with ZeroMQ
105 -----------------------------------------
144 -----------------------------------------
106
145
107 Todo...
146 Todo...
108
147
109 - min's scipy tutorials online?
148 http://minrk.github.com/scipy-tutorial-2011
110
149
111
150
112 Refactoring
151 Refactoring
113 -----------
152 -----------
114
153
115 As of the 0.11 version of IPython, a signifiant portion of the core has been
154 As of the 0.11 version of IPython, a signifiant portion of the core has been
116 refactored. This refactoring is founded on a number of new abstractions.
155 refactored. This refactoring is founded on a number of new abstractions.
117 The main new classes that implement these abstractions are:
156 The main new classes that implement these abstractions are:
118
157
119 * :class:`IPython.utils.traitlets.HasTraits`.
158 * :class:`IPython.utils.traitlets.HasTraits`.
120 * :class:`IPython.config.configurable.Configurable`.
159 * :class:`IPython.config.configurable.Configurable`.
121 * :class:`IPython.config.application.Application`.
160 * :class:`IPython.config.application.Application`.
122 * :class:`IPython.config.loader.ConfigLoader`.
161 * :class:`IPython.config.loader.ConfigLoader`.
123 * :class:`IPython.config.loader.Config`
162 * :class:`IPython.config.loader.Config`
124
163
125 We are still in the process of writing developer focused documentation about
164 We are still in the process of writing developer focused documentation about
126 these classes, but for now our :ref:`configuration documentation
165 these classes, but for now our :ref:`configuration documentation
127 <config_overview>` contains a high level overview of the concepts that these
166 <config_overview>` contains a high level overview of the concepts that these
128 classes express.
167 classes express.
129
168
130 The biggest user-visible change is likely the move to using the config system to
169 The biggest user-visible change is likely the move to using the config system to
131 determine the command-line arguments for IPython applications. The benefit of
170 determine the command-line arguments for IPython applications. The benefit of
132 this is that *all* configurable values in IPython are exposed on the
171 this is that *all* configurable values in IPython are exposed on the
133 command-line, but the syntax for specifying values has changed. The gist is that
172 command-line, but the syntax for specifying values has changed. The gist is that
134 assigning values is pure Python assignment, so there is always an '=', and never
173 assigning values is pure Python assignment, so there is always an '=', and never
135 a leading '-', nor a space separating key from value. Flags exist, to set
174 a leading '-', nor a space separating key from value. Flags exist, to set
136 multiple values or boolean flags, and these are always prefixed with '--', and
175 multiple values or boolean flags, and these are always prefixed with '--', and
137 never take arguments.
176 never take arguments.
138
177
139 ZMQ architecture
178 ZMQ architecture
140 ----------------
179 ----------------
141
180
142 There is a new GUI framework for IPython, based on a client-server model in
181 There is a new GUI framework for IPython, based on a client-server model in
143 which multiple clients can communicate with one IPython kernel, using the
182 which multiple clients can communicate with one IPython kernel, using the
144 ZeroMQ messaging framework. There is already a Qt console client, which can
183 ZeroMQ messaging framework. There is already a Qt console client, which can
145 be started by calling ``ipython qtconsole``. The protocol is :ref:`documented
184 be started by calling ``ipython qtconsole``. The protocol is :ref:`documented
146 <messaging>`.
185 <messaging>`.
147
186
148 The parallel computing framework has also been rewritten using ZMQ. The
187 The parallel computing framework has also been rewritten using ZMQ. The
149 protocol is described :ref:`here <parallel_messages>`, and the code is in the
188 protocol is described :ref:`here <parallel_messages>`, and the code is in the
150 new :mod:`IPython.parallel` module.
189 new :mod:`IPython.parallel` module.
151
190
191 .. _python3_011:
192
152 Python 3 support
193 Python 3 support
153 ----------------
194 ----------------
154
195
155 A Python 3 version of IPython has been prepared. For the time being, this is
196 A Python 3 version of IPython has been prepared. For the time being, this is
156 maintained separately and updated from the main codebase. Its code can be found
197 maintained separately and updated from the main codebase. Its code can be found
157 `here <https://github.com/ipython/ipython-py3k>`_. The parallel computing
198 `here <https://github.com/ipython/ipython-py3k>`_. The parallel computing
158 components are not perfect on Python3, but most functionality appears to be
199 components are not perfect on Python3, but most functionality appears to be
159 working.
200 working. As this work is evolving quickly, the best place to find updated
201 information about it is our `Python 3 wiki page`__.
202
203 .. __: http://wiki.ipython.org/index.php?title=Python_3
204
160
205
161 Unicode
206 Unicode
162 -------
207 -------
163
208
164 Entering non-ascii characters in unicode literals (``u"€ø"``) now works
209 Entering non-ascii characters in unicode literals (``u"€ø"``) now works
165 properly on all platforms. However, entering these in byte/string literals
210 properly on all platforms. However, entering these in byte/string literals
166 (``"€ø"``) will not work as expected on Windows (or any platform where the
211 (``"€ø"``) will not work as expected on Windows (or any platform where the
167 terminal encoding is not UTF-8, as it typically is for Linux & Mac OS X). You
212 terminal encoding is not UTF-8, as it typically is for Linux & Mac OS X). You
168 can use escape sequences (``"\xe9\x82"``) to get bytes above 128, or use
213 can use escape sequences (``"\xe9\x82"``) to get bytes above 128, or use
169 unicode literals and encode them. This is a limitation of Python 2 which we
214 unicode literals and encode them. This is a limitation of Python 2 which we
170 cannot easily work around.
215 cannot easily work around.
171
216
172 Additional new features
217 Additional new features
173 -----------------------
218 -----------------------
174
219
175 * Added ``Bytes`` traitlet, removing ``Str``. All 'string' traitlets should
220 * Added ``Bytes`` traitlet, removing ``Str``. All 'string' traitlets should
176 either be ``Unicode`` if a real string, or ``Bytes`` if a C-string. This
221 either be ``Unicode`` if a real string, or ``Bytes`` if a C-string. This
177 removes ambiguity and helps the Python 3 transition.
222 removes ambiguity and helps the Python 3 transition.
178
223
179 * New magic ``%loadpy`` loads a python file from disk or web URL into
224 * New magic ``%loadpy`` loads a python file from disk or web URL into
180 the current input buffer.
225 the current input buffer.
181
226
182 * New magic ``%pastebin`` for sharing code via the 'Lodge it' pastebin.
227 * New magic ``%pastebin`` for sharing code via the 'Lodge it' pastebin.
183
228
184 * New magic ``%precision`` for controlling float and numpy pretty printing.
229 * New magic ``%precision`` for controlling float and numpy pretty printing.
185
230
186 * IPython applications initiate logging, so any object can gain access to
231 * IPython applications initiate logging, so any object can gain access to
187 a the logger of the currently running Application with:
232 a the logger of the currently running Application with:
188
233
189 .. sourcecode:: python
234 .. sourcecode:: python
190
235
191 from IPython.config.application import Application
236 from IPython.config.application import Application
192 logger = Application.instance().log
237 logger = Application.instance().log
193
238
194 * You can now get help on an object halfway through typing a command. For
239 * You can now get help on an object halfway through typing a command. For
195 instance, typing ``a = zip?`` shows the details of :func:`zip`. It also
240 instance, typing ``a = zip?`` shows the details of :func:`zip`. It also
196 leaves the command at the next prompt so you can carry on with it.
241 leaves the command at the next prompt so you can carry on with it.
197
242
198 * The input history is now written to an SQLite database. The API for
243 * The input history is now written to an SQLite database. The API for
199 retrieving items from the history has also been redesigned.
244 retrieving items from the history has also been redesigned.
200
245
201 * The :mod:`IPython.extensions.pretty` extension has been moved out of
246 * The :mod:`IPython.extensions.pretty` extension has been moved out of
202 quarantine and fully updated to the new extension API.
247 quarantine and fully updated to the new extension API.
203
248
204 * New magics for loading/unloading/reloading extensions have been added:
249 * New magics for loading/unloading/reloading extensions have been added:
205 ``%load_ext``, ``%unload_ext`` and ``%reload_ext``.
250 ``%load_ext``, ``%unload_ext`` and ``%reload_ext``.
206
251
207 * The configuration system and configuration files are brand new. See the
252 * The configuration system and configuration files are brand new. See the
208 configuration system :ref:`documentation <config_index>` for more details.
253 configuration system :ref:`documentation <config_index>` for more details.
209
254
210 * The :class:`~IPython.core.interactiveshell.InteractiveShell` class is now a
255 * The :class:`~IPython.core.interactiveshell.InteractiveShell` class is now a
211 :class:`~IPython.config.configurable.Configurable` subclass and has traitlets
256 :class:`~IPython.config.configurable.Configurable` subclass and has traitlets
212 that determine the defaults and runtime environment. The ``__init__`` method
257 that determine the defaults and runtime environment. The ``__init__`` method
213 has also been refactored so this class can be instantiated and run without
258 has also been refactored so this class can be instantiated and run without
214 the old :mod:`ipmaker` module.
259 the old :mod:`ipmaker` module.
215
260
216 * The methods of :class:`~IPython.core.interactiveshell.InteractiveShell` have
261 * The methods of :class:`~IPython.core.interactiveshell.InteractiveShell` have
217 been organized into sections to make it easier to turn more sections
262 been organized into sections to make it easier to turn more sections
218 of functionality into components.
263 of functionality into components.
219
264
220 * The embedded shell has been refactored into a truly standalone subclass of
265 * The embedded shell has been refactored into a truly standalone subclass of
221 :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All
266 :class:`InteractiveShell` called :class:`InteractiveShellEmbed`. All
222 embedding logic has been taken out of the base class and put into the
267 embedding logic has been taken out of the base class and put into the
223 embedded subclass.
268 embedded subclass.
224
269
225 * Added methods of :class:`~IPython.core.interactiveshell.InteractiveShell` to
270 * Added methods of :class:`~IPython.core.interactiveshell.InteractiveShell` to
226 help it cleanup after itself. The :meth:`cleanup` method controls this. We
271 help it cleanup after itself. The :meth:`cleanup` method controls this. We
227 couldn't do this in :meth:`__del__` because we have cycles in our object
272 couldn't do this in :meth:`__del__` because we have cycles in our object
228 graph that prevent it from being called.
273 graph that prevent it from being called.
229
274
230 * Created a new module :mod:`IPython.utils.importstring` for resolving
275 * Created a new module :mod:`IPython.utils.importstring` for resolving
231 strings like ``foo.bar.Bar`` to the actual class.
276 strings like ``foo.bar.Bar`` to the actual class.
232
277
233 * Completely refactored the :mod:`IPython.core.prefilter` module into
278 * Completely refactored the :mod:`IPython.core.prefilter` module into
234 :class:`~IPython.config.configurable.Configurable` subclasses. Added a new
279 :class:`~IPython.config.configurable.Configurable` subclasses. Added a new
235 layer into the prefilter system, called "transformations" that all new
280 layer into the prefilter system, called "transformations" that all new
236 prefilter logic should use (rather than the older "checker/handler"
281 prefilter logic should use (rather than the older "checker/handler"
237 approach).
282 approach).
238
283
239 * Aliases are now components (:mod:`IPython.core.alias`).
284 * Aliases are now components (:mod:`IPython.core.alias`).
240
285
241 * New top level :func:`~IPython.frontend.terminal.embed.embed` function that can
286 * New top level :func:`~IPython.frontend.terminal.embed.embed` function that can
242 be called to embed IPython at any place in user's code. On the first call it
287 be called to embed IPython at any place in user's code. On the first call it
243 will create an :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`
288 will create an :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`
244 instance and call it. In later calls, it just calls the previously created
289 instance and call it. In later calls, it just calls the previously created
245 :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`.
290 :class:`~IPython.frontend.terminal.embed.InteractiveShellEmbed`.
246
291
247 * Created a configuration system (:mod:`IPython.config.configurable`) that is
292 * Created a configuration system (:mod:`IPython.config.configurable`) that is
248 based on :mod:`IPython.utils.traitlets`. Configurables are arranged into a
293 based on :mod:`IPython.utils.traitlets`. Configurables are arranged into a
249 runtime containment tree (not inheritance) that i) automatically propagates
294 runtime containment tree (not inheritance) that i) automatically propagates
250 configuration information and ii) allows singletons to discover each other in
295 configuration information and ii) allows singletons to discover each other in
251 a loosely coupled manner. In the future all parts of IPython will be
296 a loosely coupled manner. In the future all parts of IPython will be
252 subclasses of :class:`~IPython.config.configurable.Configurable`. All IPython
297 subclasses of :class:`~IPython.config.configurable.Configurable`. All IPython
253 developers should become familiar with the config system.
298 developers should become familiar with the config system.
254
299
255 * Created a new :class:`~IPython.config.loader.Config` for holding
300 * Created a new :class:`~IPython.config.loader.Config` for holding
256 configuration information. This is a dict like class with a few extras: i)
301 configuration information. This is a dict like class with a few extras: i)
257 it supports attribute style access, ii) it has a merge function that merges
302 it supports attribute style access, ii) it has a merge function that merges
258 two :class:`~IPython.config.loader.Config` instances recursively and iii) it
303 two :class:`~IPython.config.loader.Config` instances recursively and iii) it
259 will automatically create sub-:class:`~IPython.config.loader.Config`
304 will automatically create sub-:class:`~IPython.config.loader.Config`
260 instances for attributes that start with an uppercase character.
305 instances for attributes that start with an uppercase character.
261
306
262 * Created new configuration loaders in :mod:`IPython.config.loader`. These
307 * Created new configuration loaders in :mod:`IPython.config.loader`. These
263 loaders provide a unified loading interface for all configuration
308 loaders provide a unified loading interface for all configuration
264 information including command line arguments and configuration files. We
309 information including command line arguments and configuration files. We
265 have two default implementations based on :mod:`argparse` and plain python
310 have two default implementations based on :mod:`argparse` and plain python
266 files. These are used to implement the new configuration system.
311 files. These are used to implement the new configuration system.
267
312
268 * Created a top-level :class:`Application` class in
313 * Created a top-level :class:`Application` class in
269 :mod:`IPython.core.application` that is designed to encapsulate the starting
314 :mod:`IPython.core.application` that is designed to encapsulate the starting
270 of any basic Python program. An application loads and merges all the
315 of any basic Python program. An application loads and merges all the
271 configuration objects, constructs the main application, configures and
316 configuration objects, constructs the main application, configures and
272 initiates logging, and creates and configures any :class:`Configurable`
317 initiates logging, and creates and configures any :class:`Configurable`
273 instances and then starts the application running. An extended
318 instances and then starts the application running. An extended
274 :class:`BaseIPythonApplication` class adds logic for handling the
319 :class:`BaseIPythonApplication` class adds logic for handling the
275 IPython directory as well as profiles, and all IPython entry points
320 IPython directory as well as profiles, and all IPython entry points
276 extend it.
321 extend it.
277
322
278 * The :class:`Type` and :class:`Instance` traitlets now handle classes given
323 * The :class:`Type` and :class:`Instance` traitlets now handle classes given
279 as strings, like ``foo.bar.Bar``. This is needed for forward declarations.
324 as strings, like ``foo.bar.Bar``. This is needed for forward declarations.
280 But, this was implemented in a careful way so that string to class
325 But, this was implemented in a careful way so that string to class
281 resolution is done at a single point, when the parent
326 resolution is done at a single point, when the parent
282 :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated.
327 :class:`~IPython.utils.traitlets.HasTraitlets` is instantiated.
283
328
284 * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of
329 * :mod:`IPython.utils.ipstruct` has been refactored to be a subclass of
285 dict. It also now has full docstrings and doctests.
330 dict. It also now has full docstrings and doctests.
286
331
287 * Created a Traits like implementation in :mod:`IPython.utils.traitlets`. This
332 * Created a Traits like implementation in :mod:`IPython.utils.traitlets`. This
288 is a pure Python, lightweight version of a library that is similar to
333 is a pure Python, lightweight version of a library that is similar to
289 Enthought's Traits project, but has no dependencies on Enthought's code. We
334 Enthought's Traits project, but has no dependencies on Enthought's code. We
290 are using this for validation, defaults and notification in our new component
335 are using this for validation, defaults and notification in our new component
291 system. Although it is not 100% API compatible with Enthought's Traits, we
336 system. Although it is not 100% API compatible with Enthought's Traits, we
292 plan on moving in this direction so that eventually our implementation could
337 plan on moving in this direction so that eventually our implementation could
293 be replaced by a (yet to exist) pure Python version of Enthought Traits.
338 be replaced by a (yet to exist) pure Python version of Enthought Traits.
294
339
295 * Added a new module :mod:`IPython.lib.inputhook` to manage the integration
340 * Added a new module :mod:`IPython.lib.inputhook` to manage the integration
296 with GUI event loops using `PyOS_InputHook`. See the docstrings in this
341 with GUI event loops using `PyOS_InputHook`. See the docstrings in this
297 module or the main IPython docs for details.
342 module or the main IPython docs for details.
298
343
299 * For users, GUI event loop integration is now handled through the new
344 * For users, GUI event loop integration is now handled through the new
300 :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for
345 :command:`%gui` magic command. Type ``%gui?`` at an IPython prompt for
301 documentation.
346 documentation.
302
347
303 * For developers :mod:`IPython.lib.inputhook` provides a simple interface
348 * For developers :mod:`IPython.lib.inputhook` provides a simple interface
304 for managing the event loops in their interactive GUI applications.
349 for managing the event loops in their interactive GUI applications.
305 Examples can be found in our :file:`docs/examples/lib` directory.
350 Examples can be found in our :file:`docs/examples/lib` directory.
306
351
307 Backwards incompatible changes
352 Backwards incompatible changes
308 ------------------------------
353 ------------------------------
309
354
310 * The Twisted-based :mod:`IPython.kernel` has been removed, and completely
355 * The Twisted-based :mod:`IPython.kernel` has been removed, and completely
311 rewritten as :mod:`IPython.parallel`, using ZeroMQ.
356 rewritten as :mod:`IPython.parallel`, using ZeroMQ.
312
357
313 * Profiles are now directories. Instead of a profile being a single config file,
358 * Profiles are now directories. Instead of a profile being a single config file,
314 profiles are now self-contained directories. By default, profiles get their
359 profiles are now self-contained directories. By default, profiles get their
315 own IPython history, log files, and everything. To create a new profile, do
360 own IPython history, log files, and everything. To create a new profile, do
316 ``ipython profile create <name>``.
361 ``ipython profile create <name>``.
317
362
318 * All IPython applications have been rewritten to use
363 * All IPython applications have been rewritten to use
319 :class:`~IPython.config.loader.KeyValueConfigLoader`. This means that
364 :class:`~IPython.config.loader.KeyValueConfigLoader`. This means that
320 command-line options have changed. Now, all configurable values are accessible
365 command-line options have changed. Now, all configurable values are accessible
321 from the command-line with the same syntax as in a configuration file.
366 from the command-line with the same syntax as in a configuration file.
322
367
323 * The command line options ``-wthread``, ``-qthread`` and
368 * The command line options ``-wthread``, ``-qthread`` and
324 ``-gthread`` have been removed. Use ``--gui=wx``, ``--gui=qt``, ``--gui=gtk``
369 ``-gthread`` have been removed. Use ``--gui=wx``, ``--gui=qt``, ``--gui=gtk``
325 instead.
370 instead.
326
371
327 * The extension loading functions have been renamed to
372 * The extension loading functions have been renamed to
328 :func:`load_ipython_extension` and :func:`unload_ipython_extension`.
373 :func:`load_ipython_extension` and :func:`unload_ipython_extension`.
329
374
330 * :class:`~IPython.core.interactiveshell.InteractiveShell` no longer takes an
375 * :class:`~IPython.core.interactiveshell.InteractiveShell` no longer takes an
331 ``embedded`` argument. Instead just use the
376 ``embedded`` argument. Instead just use the
332 :class:`~IPython.core.interactiveshell.InteractiveShellEmbed` class.
377 :class:`~IPython.core.interactiveshell.InteractiveShellEmbed` class.
333
378
334 * ``__IPYTHON__`` is no longer injected into ``__builtin__``.
379 * ``__IPYTHON__`` is no longer injected into ``__builtin__``.
335
380
336 * :meth:`Struct.__init__` no longer takes `None` as its first argument. It
381 * :meth:`Struct.__init__` no longer takes `None` as its first argument. It
337 must be a :class:`dict` or :class:`Struct`.
382 must be a :class:`dict` or :class:`Struct`.
338
383
339 * :meth:`~IPython.core.interactiveshell.InteractiveShell.ipmagic` has been
384 * :meth:`~IPython.core.interactiveshell.InteractiveShell.ipmagic` has been
340 renamed :meth:`~IPython.core.interactiveshell.InteractiveShell.magic.`
385 renamed :meth:`~IPython.core.interactiveshell.InteractiveShell.magic.`
341
386
342 * The functions :func:`ipmagic` and :func:`ipalias` have been removed from
387 * The functions :func:`ipmagic` and :func:`ipalias` have been removed from
343 :mod:`__builtins__`.
388 :mod:`__builtins__`.
344
389
345 * The references to the global
390 * The references to the global
346 :class:`~IPython.core.interactivehell.InteractiveShell` instance (``_ip``, and
391 :class:`~IPython.core.interactivehell.InteractiveShell` instance (``_ip``, and
347 ``__IP``) have been removed from the user's namespace. They are replaced by a
392 ``__IP``) have been removed from the user's namespace. They are replaced by a
348 new function called :func:`get_ipython` that returns the current
393 new function called :func:`get_ipython` that returns the current
349 :class:`~IPython.core.interactiveshell.InteractiveShell` instance. This
394 :class:`~IPython.core.interactiveshell.InteractiveShell` instance. This
350 function is injected into the user's namespace and is now the main way of
395 function is injected into the user's namespace and is now the main way of
351 accessing the running IPython.
396 accessing the running IPython.
352
397
353 * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py`
398 * Old style configuration files :file:`ipythonrc` and :file:`ipy_user_conf.py`
354 are no longer supported. Users should migrate there configuration files to
399 are no longer supported. Users should migrate there configuration files to
355 the new format described :ref:`here <config_overview>` and :ref:`here
400 the new format described :ref:`here <config_overview>` and :ref:`here
356 <configuring_ipython>`.
401 <configuring_ipython>`.
357
402
358 * The old IPython extension API that relied on :func:`ipapi` has been
403 * The old IPython extension API that relied on :func:`ipapi` has been
359 completely removed. The new extension API is described :ref:`here
404 completely removed. The new extension API is described :ref:`here
360 <configuring_ipython>`.
405 <configuring_ipython>`.
361
406
362 * Support for ``qt3`` has been dropped. Users who need this should use
407 * Support for ``qt3`` has been dropped. Users who need this should use
363 previous versions of IPython.
408 previous versions of IPython.
364
409
365 * Removed :mod:`shellglobals` as it was obsolete.
410 * Removed :mod:`shellglobals` as it was obsolete.
366
411
367 * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no
412 * Removed all the threaded shells in :mod:`IPython.core.shell`. These are no
368 longer needed because of the new capabilities in
413 longer needed because of the new capabilities in
369 :mod:`IPython.lib.inputhook`.
414 :mod:`IPython.lib.inputhook`.
370
415
371 * New top-level sub-packages have been created: :mod:`IPython.core`,
416 * New top-level sub-packages have been created: :mod:`IPython.core`,
372 :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`,
417 :mod:`IPython.lib`, :mod:`IPython.utils`, :mod:`IPython.deathrow`,
373 :mod:`IPython.quarantine`. All existing top-level modules have been
418 :mod:`IPython.quarantine`. All existing top-level modules have been
374 moved to appropriate sub-packages. All internal import statements
419 moved to appropriate sub-packages. All internal import statements
375 have been updated and tests have been added. The build system (setup.py
420 have been updated and tests have been added. The build system (setup.py
376 and friends) have been updated. See :ref:`this section <module_reorg>` of the
421 and friends) have been updated. See :ref:`this section <module_reorg>` of the
377 documentation for descriptions of these new sub-packages.
422 documentation for descriptions of these new sub-packages.
378
423
379 * :mod:`IPython.ipapi` has been moved to :mod:`IPython.core.ipapi`.
424 * :mod:`IPython.ipapi` has been moved to :mod:`IPython.core.ipapi`.
380 :mod:`IPython.Shell` and :mod:`IPython.iplib` have been split and removed as
425 :mod:`IPython.Shell` and :mod:`IPython.iplib` have been split and removed as
381 part of the refactor.
426 part of the refactor.
382
427
383 * :mod:`Extensions` has been moved to :mod:`extensions` and all existing
428 * :mod:`Extensions` has been moved to :mod:`extensions` and all existing
384 extensions have been moved to either :mod:`IPython.quarantine` or
429 extensions have been moved to either :mod:`IPython.quarantine` or
385 :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we
430 :mod:`IPython.deathrow`. :mod:`IPython.quarantine` contains modules that we
386 plan on keeping but that need to be updated. :mod:`IPython.deathrow` contains
431 plan on keeping but that need to be updated. :mod:`IPython.deathrow` contains
387 modules that are either dead or that should be maintained as third party
432 modules that are either dead or that should be maintained as third party
388 libraries. More details about this can be found :ref:`here <module_reorg>`.
433 libraries. More details about this can be found :ref:`here <module_reorg>`.
389
434
390 * Previous IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are
435 * Previous IPython GUIs in :mod:`IPython.frontend` and :mod:`IPython.gui` are
391 likely broken, and have been removed to :mod:`IPython.deathrow` because of the
436 likely broken, and have been removed to :mod:`IPython.deathrow` because of the
392 refactoring in the core. With proper updates, these should still work.
437 refactoring in the core. With proper updates, these should still work.
393
438
394
439
395 Known Regressions
440 Known Regressions
396 -----------------
441 -----------------
397
442
398 We do our best to improve IPython, but there are some known regressions in 0.11
443 We do our best to improve IPython, but there are some known regressions in 0.11
399 relative to 0.10.2. First of all, there are features that have yet to be
444 relative to 0.10.2. First of all, there are features that have yet to be
400 ported to the new APIs, and in order to ensure that all of the installed code
445 ported to the new APIs, and in order to ensure that all of the installed code
401 runs for our users, we have moved them to two separate directories in the
446 runs for our users, we have moved them to two separate directories in the
402 source distribution, `quarantine` and `deathrow`. Finally, we have some other
447 source distribution, `quarantine` and `deathrow`. Finally, we have some other
403 miscellaneous regressions that we hope to fix as soon as possible. We now
448 miscellaneous regressions that we hope to fix as soon as possible. We now
404 describe all of these in more detail.
449 describe all of these in more detail.
405
450
406 Quarantine
451 Quarantine
407 ~~~~~~~~~~
452 ~~~~~~~~~~
408
453
409 These are tools and extensions that we consider relatively easy to update to
454 These are tools and extensions that we consider relatively easy to update to
410 the new classes and APIs, but that we simply haven't had time for. Any user
455 the new classes and APIs, but that we simply haven't had time for. Any user
411 who is interested in one of these is encouraged to help us by porting it and
456 who is interested in one of these is encouraged to help us by porting it and
412 submitting a pull request on our `development site`_.
457 submitting a pull request on our `development site`_.
413
458
414 .. _development site:: http://github.com/ipython/ipython
459 .. _development site:: http://github.com/ipython/ipython
415
460
416 Currently, the quarantine directory contains::
461 Currently, the quarantine directory contains::
417
462
418 clearcmd.py ipy_fsops.py ipy_signals.py
463 clearcmd.py ipy_fsops.py ipy_signals.py
419 envpersist.py ipy_gnuglobal.py ipy_synchronize_with.py
464 envpersist.py ipy_gnuglobal.py ipy_synchronize_with.py
420 ext_rescapture.py ipy_greedycompleter.py ipy_system_conf.py
465 ext_rescapture.py ipy_greedycompleter.py ipy_system_conf.py
421 InterpreterExec.py ipy_jot.py ipy_which.py
466 InterpreterExec.py ipy_jot.py ipy_which.py
422 ipy_app_completers.py ipy_lookfor.py ipy_winpdb.py
467 ipy_app_completers.py ipy_lookfor.py ipy_winpdb.py
423 ipy_autoreload.py ipy_profile_doctest.py ipy_workdir.py
468 ipy_autoreload.py ipy_profile_doctest.py ipy_workdir.py
424 ipy_completers.py ipy_pydb.py jobctrl.py
469 ipy_completers.py ipy_pydb.py jobctrl.py
425 ipy_editors.py ipy_rehashdir.py ledit.py
470 ipy_editors.py ipy_rehashdir.py ledit.py
426 ipy_exportdb.py ipy_render.py pspersistence.py
471 ipy_exportdb.py ipy_render.py pspersistence.py
427 ipy_extutil.py ipy_server.py win32clip.py
472 ipy_extutil.py ipy_server.py win32clip.py
428
473
429 Deathrow
474 Deathrow
430 ~~~~~~~~
475 ~~~~~~~~
431
476
432 These packages may be harder to update or make most sense as third-party
477 These packages may be harder to update or make most sense as third-party
433 libraries. Some of them are completely obsolete and have been already replaced
478 libraries. Some of them are completely obsolete and have been already replaced
434 by better functionality (we simply haven't had the time to carefully weed them
479 by better functionality (we simply haven't had the time to carefully weed them
435 out so they are kept here for now). Others simply require fixes to code that
480 out so they are kept here for now). Others simply require fixes to code that
436 the current core team may not be familiar with. If a tool you were used to is
481 the current core team may not be familiar with. If a tool you were used to is
437 included here, we encourage you to contact the dev list and we can discuss
482 included here, we encourage you to contact the dev list and we can discuss
438 whether it makes sense to keep it in IPython (if it can be maintained).
483 whether it makes sense to keep it in IPython (if it can be maintained).
439
484
440 Currently, the deathrow directory contains::
485 Currently, the deathrow directory contains::
441
486
442 astyle.py ipy_defaults.py ipy_vimserver.py
487 astyle.py ipy_defaults.py ipy_vimserver.py
443 dtutils.py ipy_kitcfg.py numeric_formats.py
488 dtutils.py ipy_kitcfg.py numeric_formats.py
444 Gnuplot2.py ipy_legacy.py numutils.py
489 Gnuplot2.py ipy_legacy.py numutils.py
445 GnuplotInteractive.py ipy_p4.py outputtrap.py
490 GnuplotInteractive.py ipy_p4.py outputtrap.py
446 GnuplotRuntime.py ipy_profile_none.py PhysicalQInput.py
491 GnuplotRuntime.py ipy_profile_none.py PhysicalQInput.py
447 ibrowse.py ipy_profile_numpy.py PhysicalQInteractive.py
492 ibrowse.py ipy_profile_numpy.py PhysicalQInteractive.py
448 igrid.py ipy_profile_scipy.py quitter.py*
493 igrid.py ipy_profile_scipy.py quitter.py*
449 ipipe.py ipy_profile_sh.py scitedirector.py
494 ipipe.py ipy_profile_sh.py scitedirector.py
450 iplib.py ipy_profile_zope.py Shell.py
495 iplib.py ipy_profile_zope.py Shell.py
451 ipy_constants.py ipy_traits_completer.py twshell.py
496 ipy_constants.py ipy_traits_completer.py twshell.py
452
497
453
498
454 Other
499 Other
455 ~~~~~
500 ~~~~~
456
501
457 * The machinery that adds functionality to the 'sh' profile for using IPython
502 * The machinery that adds functionality to the 'sh' profile for using IPython
458 as your system shell has not been updated to use the new APIs. As a result,
503 as your system shell has not been updated to use the new APIs. As a result,
459 only the aesthetic (prompt) changes are still implemented. We intend to fix
504 only the aesthetic (prompt) changes are still implemented. We intend to fix
460 this by 0.12.
505 this by 0.12.
461
506
462 * The installation of scripts on Windows was broken without setuptools, so we
507 * The installation of scripts on Windows was broken without setuptools, so we
463 now depend on setuptools on Windows. We hope to fix setuptools-less
508 now depend on setuptools on Windows. We hope to fix setuptools-less
464 installation, and then remove the setuptools dependency.
509 installation, and then remove the setuptools dependency.
465
510
466
511
467 Removed Features
512 Removed Features
468 ----------------
513 ----------------
469
514
470 As part of the updating of IPython, we have removed a few features for the
515 As part of the updating of IPython, we have removed a few features for the
471 purpsoes of cleaning up the codebase and interfaces. These removals are
516 purpsoes of cleaning up the codebase and interfaces. These removals are
472 permanent, but for any item listed below, equivalent functionality is
517 permanent, but for any item listed below, equivalent functionality is
473 available.
518 available.
474
519
475 * The magics Exit and Quit have been dropped as ways to exit IPython. Instead,
520 * The magics Exit and Quit have been dropped as ways to exit IPython. Instead,
476 the lowercase forms of both work either as a bare name (``exit``) or a
521 the lowercase forms of both work either as a bare name (``exit``) or a
477 function call (``exit()``). You can assign these to other names using
522 function call (``exit()``). You can assign these to other names using
478 exec_lines in the config file.
523 exec_lines in the config file.
479
524
480
525
481 .. credits_::
526 .. credits_::
482
527
483 Credits
528 Credits
484 -------
529 -------
485
530
486 Many users and developers contributed code, features, bug reports and ideas to
531 Many users and developers contributed code, features, bug reports and ideas to
487 this release. Please do not hesitate in contacting us if we've failed to
532 this release. Please do not hesitate in contacting us if we've failed to
488 acknowledge your contribution here. In particular, for this release we have
533 acknowledge your contribution here. In particular, for this release we have
489 contribution from the following people, a mix of new and regular names (in
534 contribution from the following people, a mix of new and regular names (in
490 alphabetical order by first name):
535 alphabetical order by first name):
491
536
492 * Aenugu Sai Kiran Reddy <saikrn08-at-gmail.com>
537 * Aenugu Sai Kiran Reddy <saikrn08-at-gmail.com>
493 * andy wilson <wilson.andrew.j+github-at-gmail.com>
538 * andy wilson <wilson.andrew.j+github-at-gmail.com>
494 * Antonio Cuni <antocuni>
539 * Antonio Cuni <antocuni>
495 * Barry Wark <barrywark-at-gmail.com>
540 * Barry Wark <barrywark-at-gmail.com>
496 * Beetoju Anuradha <anu.beethoju-at-gmail.com>
541 * Beetoju Anuradha <anu.beethoju-at-gmail.com>
497 * Benjamin Ragan-Kelley <minrk-at-Mercury.local>
542 * Benjamin Ragan-Kelley <minrk-at-Mercury.local>
498 * Brad Reisfeld
543 * Brad Reisfeld
499 * Brian E. Granger <ellisonbg-at-gmail.com>
544 * Brian E. Granger <ellisonbg-at-gmail.com>
500 * Christoph Gohlke <cgohlke-at-uci.edu>
545 * Christoph Gohlke <cgohlke-at-uci.edu>
501 * Cody Precord
546 * Cody Precord
502 * dan.milstein
547 * dan.milstein
503 * Darren Dale <dsdale24-at-gmail.com>
548 * Darren Dale <dsdale24-at-gmail.com>
504 * Dav Clark <davclark-at-berkeley.edu>
549 * Dav Clark <davclark-at-berkeley.edu>
505 * David Warde-Farley <wardefar-at-iro.umontreal.ca>
550 * David Warde-Farley <wardefar-at-iro.umontreal.ca>
506 * epatters <ejpatters-at-gmail.com>
551 * epatters <ejpatters-at-gmail.com>
507 * epatters <epatters-at-caltech.edu>
552 * epatters <epatters-at-caltech.edu>
508 * epatters <epatters-at-enthought.com>
553 * epatters <epatters-at-enthought.com>
509 * Eric Firing <efiring-at-hawaii.edu>
554 * Eric Firing <efiring-at-hawaii.edu>
510 * Erik Tollerud <erik.tollerud-at-gmail.com>
555 * Erik Tollerud <erik.tollerud-at-gmail.com>
511 * Evan Patterson <epatters-at-enthought.com>
556 * Evan Patterson <epatters-at-enthought.com>
512 * Fernando Perez <Fernando.Perez-at-berkeley.edu>
557 * Fernando Perez <Fernando.Perez-at-berkeley.edu>
513 * Gael Varoquaux <gael.varoquaux-at-normalesup.org>
558 * Gael Varoquaux <gael.varoquaux-at-normalesup.org>
514 * Gerardo <muzgash-at-Muzpelheim>
559 * Gerardo <muzgash-at-Muzpelheim>
515 * Jason Grout <jason.grout-at-drake.edu>
560 * Jason Grout <jason.grout-at-drake.edu>
516 * John Hunter <jdh2358-at-gmail.com>
561 * John Hunter <jdh2358-at-gmail.com>
517 * Jens Hedegaard Nielsen <jenshnielsen-at-gmail.com>
562 * Jens Hedegaard Nielsen <jenshnielsen-at-gmail.com>
518 * Johann Cohen-Tanugi <johann.cohentanugi-at-gmail.com>
563 * Johann Cohen-Tanugi <johann.cohentanugi-at-gmail.com>
519 * JΓΆrgen Stenarson <jorgen.stenarson-at-bostream.nu>
564 * JΓΆrgen Stenarson <jorgen.stenarson-at-bostream.nu>
520 * Justin Riley <justin.t.riley-at-gmail.com>
565 * Justin Riley <justin.t.riley-at-gmail.com>
521 * Kiorky
566 * Kiorky
522 * Laurent Dufrechou <laurent.dufrechou-at-gmail.com>
567 * Laurent Dufrechou <laurent.dufrechou-at-gmail.com>
523 * Luis Pedro Coelho <lpc-at-cmu.edu>
568 * Luis Pedro Coelho <lpc-at-cmu.edu>
524 * Mani chandra <mchandra-at-iitk.ac.in>
569 * Mani chandra <mchandra-at-iitk.ac.in>
525 * Mark E. Smith
570 * Mark E. Smith
526 * Mark Voorhies <mark.voorhies-at-ucsf.edu>
571 * Mark Voorhies <mark.voorhies-at-ucsf.edu>
527 * Martin Spacek <git-at-mspacek.mm.st>
572 * Martin Spacek <git-at-mspacek.mm.st>
528 * Michael Droettboom <mdroe-at-stsci.edu>
573 * Michael Droettboom <mdroe-at-stsci.edu>
529 * MinRK <benjaminrk-at-gmail.com>
574 * MinRK <benjaminrk-at-gmail.com>
530 * muzuiget <muzuiget-at-gmail.com>
575 * muzuiget <muzuiget-at-gmail.com>
531 * Nick Tarleton <nick-at-quixey.com>
576 * Nick Tarleton <nick-at-quixey.com>
532 * Nicolas Rougier <Nicolas.rougier-at-inria.fr>
577 * Nicolas Rougier <Nicolas.rougier-at-inria.fr>
533 * Omar Andres Zapata Mesa <andresete.chaos-at-gmail.com>
578 * Omar Andres Zapata Mesa <andresete.chaos-at-gmail.com>
534 * Paul Ivanov <pivanov314-at-gmail.com>
579 * Paul Ivanov <pivanov314-at-gmail.com>
535 * Pauli Virtanen <pauli.virtanen-at-iki.fi>
580 * Pauli Virtanen <pauli.virtanen-at-iki.fi>
536 * Prabhu Ramachandran
581 * Prabhu Ramachandran
537 * Ramana <sramana9-at-gmail.com>
582 * Ramana <sramana9-at-gmail.com>
538 * Robert Kern <robert.kern-at-gmail.com>
583 * Robert Kern <robert.kern-at-gmail.com>
539 * Sathesh Chandra <satheshchandra88-at-gmail.com>
584 * Sathesh Chandra <satheshchandra88-at-gmail.com>
540 * Satrajit Ghosh <satra-at-mit.edu>
585 * Satrajit Ghosh <satra-at-mit.edu>
541 * Sebastian Busch
586 * Sebastian Busch
542 * Stefan van der Walt <bzr-at-mentat.za.net>
587 * Stefan van der Walt <bzr-at-mentat.za.net>
543 * Stephan Peijnik <debian-at-sp.or.at>
588 * Stephan Peijnik <debian-at-sp.or.at>
544 * Steven Bethard
589 * Steven Bethard
545 * Thomas Kluyver <takowl-at-gmail.com>
590 * Thomas Kluyver <takowl-at-gmail.com>
546 * Thomas Spura <tomspur-at-fedoraproject.org>
591 * Thomas Spura <tomspur-at-fedoraproject.org>
547 * Tom Fetherston <tfetherston-at-aol.com>
592 * Tom Fetherston <tfetherston-at-aol.com>
548 * Tom MacWright
593 * Tom MacWright
549 * tzanko
594 * tzanko
550 * vankayala sowjanya <hai.sowjanya-at-gmail.com>
595 * vankayala sowjanya <hai.sowjanya-at-gmail.com>
551 * Vivian De Smedt <vds2212-at-VIVIAN>
596 * Vivian De Smedt <vds2212-at-VIVIAN>
552 * Ville M. Vainio <vivainio-at-gmail.com>
597 * Ville M. Vainio <vivainio-at-gmail.com>
553 * Vishal Vatsa <vishal.vatsa-at-gmail.com>
598 * Vishal Vatsa <vishal.vatsa-at-gmail.com>
554 * Vishnu S G <sgvishnu777-at-gmail.com>
599 * Vishnu S G <sgvishnu777-at-gmail.com>
555 * Walter Doerwald <walter-at-livinglogic.de>
600 * Walter Doerwald <walter-at-livinglogic.de>
556
601
557 .. note::
602 .. note::
558
603
559 This list was generated with the output of
604 This list was generated with the output of
560 ``git log dev-0.11 HEAD --format='* %aN <%aE>' | sed 's/@/\-at\-/' | sed 's/<>//' | sort -u``
605 ``git log dev-0.11 HEAD --format='* %aN <%aE>' | sed 's/@/\-at\-/' | sed 's/<>//' | sort -u``
561 after some cleanup. If you should be on this list, please add yourself.
606 after some cleanup. If you should be on this list, please add yourself.
General Comments 0
You need to be logged in to leave comments. Login now