Tuesday, October 26, 2010

Learning Python - Collection of Resources and Links



Beginner:
BeginnersGuide
BeginnersGuide/Download
BeginnersGuide/Overview
HowToEditPythonCode
BeginnersGuide/NonProgrammers
BeginnersGuide/Programmers
How do I Run a Program Under Windows
PythonEditors
BeginnersGuide/Programmers (Cpp2Python.pdf)
Good Presentation by a C guy on Python features


Blogs:
Dorai's blog post on Learning Python

CookBooks:


BeginnersGuide/Programmers/SimpleExamples
Python Snippets and Recipes
Python by Example
Common programming tasks in Python
Pythonic File Searches


Using Pythonic Idioms and Style:
Definition of "Pythonic" here
Presentations:
How to Write Pythonic" code by Christopher Arndt
Presentation on "Code Like a Pythonista: Idiomatic Python" by David Goodger
Presentation on "Code Like a Pythonista: Idiomatic Python" (Crunchy Remix) by Jeff Hinrich 
How to produce slides like above using Python tools

Style Guide for Python Code

My blog on Exploring the Python standard library source code

Books:
IntroductoryBooks
Python books
How to think like a computer scientist with Python
Bruce Eckel's community contributed book: Python 3 - Patterns & Idioms

Version Issues:
Python2orPython3
What's New in Python 3.0
What's New in Python 2.6
What's New in Python 2.7
Moving from Python 2 to Python3 (PDF)
Porting Code to Python 3 with 2to3
Case Study: Porting chardet to Python 3

Learning Resources:
Installing Python

MultiMedia:
Video on "Head First into Python 3"
5-minute videos on Python Capability
ShowMeDo Screencast of Python 2.5 Development on XP
Audio/Visual Talks on Python
Introduction to Computer Science and Programming (videos from MIT course)
Podcast Python411

Python3:
"What an IronPython user should know about Python 3"

Python 3 focused version of Dive Into Python
Teaching programming with Python 3

Python 3.1:
Setup
Documentation

Python2.x:

Python Tutorial
Dive Into Python
A Byte of Python
Instant Python
Download Thinking in Python (Old) by Bruce Eckel here
Python for Java programmers


Moving to Python From Other Languages
Python is not Java


MovingToPythonFromPerl
Practice Problems for Python


Reference:
Official Python website
Python Wiki
Python 2.7 FAQ
Python 2.7 Windows FAQ
Python Quick Reference
Python Language Reference manual 
Python's Standard Library Reference manual
Module Index of the Python docs
Python's reply to Perl's CPAN: Python Package Index (PYPI)
Extending and Embedding the Python Interpreter
Python/C API Reference Manual

See Also:
Eric S. Raymond article on moving to Python: 'Why Python?"

MediaPacker - Utility to help pack your DVDs and CDs to the brim

Media Packer is meant to solve the following problems.
1) Allow good-fit packing of DVDs, CDs with given set of directories/files.
2) Intention is to semi-automate (i.e. provide suggestions to users) or fully automate the process of packing backup media such as DVD, CDs.
3) To be developed in Python for portability and ease-of-extension

InProgress:
1) Display media space occupied by a folder structure (files and directories).
File Size code snippet,
>>> import os
>>> b= os.path.getsize("/path/isa_005.mp3")
>>> b

File I/O tutorial
>>> f = open( 'test.txt', 'at')
>>> f.writelines( str(b))
>>> f.close()
>>> f = open( 'test.txt', 'rt' )
>>> s = f.readlines()
>>> s
Directory Size Lister (Check out the comments at end of blog to get info on )
Pydirstat. pydirstat is a really handy cross-platform, command-line way to generate information about disk usage. http://developer.berlios.de/projects/pydirstat/

Future features:
1) Add catalog and search facility to uniquely identify each media, add tags for folders/files and user comments.
2) Allow collaboration and sharing of catalogs among friends to share useful files.
3) Possibly use bit-torrent protocol for the sharing??

To be released under GPL.

See Also:
MediaPacker sourceforge account

StarUml is dead (NOT)!! Long Live the Stars!!

Star UML a very nice stable open-source design tool was suspected to be dead.
The tool is downloaded quite heavily, but development seems to have been abandoned as of 2005 with a stable release version 5.0.

But hey!! Just-a-minute, StarUML seems to have been rebooted as of (2010-July-19).
Originally written in Delphi, looks like its being converted to an eclipse plug-in in java.
Don't know how long it'll take to do the conversion though.
Seems like there are two(?) developers working on it right now.
Best of Luck to you.
Anybody with experience in Eclipse plugins and Java wanna help?!!!

Refer the project news and an announcement below:

Kick-off with Java-based StarUML Project

http://sourceforge.net/news/?group_id=152825

Monday, October 25, 2010

Delta Debugging

References:
Download Delta from delta.tigris.org
Why Programs Fail has won a Software Development Jolt Productivity Award!
Eclipse Plug-Ins - Software Engineering Chair (Prof. Zeller) - Saarland University
DDchange - DDchangeWiki
Delta Debugging article on Wikipedia
Delta Debugging articles by Andreas Zeller



See Also:
Episode 101: Podcast with Andreas Zeller on Debugging | Software Engineering Radio

Video by Andreas Zeller on Debugging the Debugging activities
Video YouTube - Learning from Code History
Mining Software Archives by Andreas Zeller
About Andreas Zeller - S/W Engg. Chair at Saarland University


Publications by Prof. Andreas Zeller

Adv Debugging - My Program Worked Yesterday, but Not Today (WYNOT) by Andreas Zellar

Brief Notes of my understanding of on Delta Debugging as discussed in “Worked Yesterday, NOt Today" by Andreas Zeller 
Note:  To understand the basic premise and constraints/approaches of Delta-Debugging referred to the pdf link to:
  1. Analyse the tables/graphs carefully. (80% of the understanding comes from the example tables/graphs)
  2. Connect the WYNOT talk with Andreas Zellar's podcast on Software Engineering Radio.
Problem: Yesterday's code works but Today's code doesn't. How do we find the change(s) which induces the test-case failure.
Context: Looking through the CVS history we find that N changes have been added since Yesterday.

Alternative: Normally we would need run the debugger to reproduce the failure and then try to collect information which induces it.  But this requires a programmer to interactively query the program state using a debugger.
Can the debugging be automated without needing the programmer?

Strategy: Delta Debugging using a test-case to reproduce the failure.
Data Method:
Using the Scientific Method we can first try to reduce the Input Data in a binary search mechanism to isolate the minimum data which causes the failure.
Code Method:
  1. Simple Method: When failure is caused by a single change. We can try to isolate the change which causes the failure by doing a binary search through the change history. If there are N changes between Y(esterday) and T(oday) we test 'k/2'th change where 1 <= k <= N. We go on partitioning until we find a failure-free change. The latest failing change is the culprit. Complexity of this binary search is O (log N)
  2. Complex Method: When failure is caused by a combination of changes. Unfortunately it's Not always possible to use the Simple Method in the case when combination of changes cause the failure. In such a situation we need to identify at least 2 (or more) changes which together cause the failure. 
  • Divide the change history into N changes
  • Group N changes into say 4 units i.e. N = N/4 * 4
  • Generate combinations with different units.
  • Test combinations for the failure. 
  • Prune any units which don't participate in the failure at all.
  • Recursive above steps by sub-dividing the units above (quarters into octets and so on) until we finally we end up with minimal changes that reproduce the failure.
Proposed Plans to Reduce to Reduce Computation and Avoid Inconsistent Configurations :
a) Group related changes - changes on common date/file/variable are more likely to be related. Group them into a single unit to avoid dependency across units.
b) Prune configurations when they're obvious dead-ends e.g. Where change dependency is chained all the way (Today) 10->9->8->7->6->5->4->3->2->1 (Yesterday)
c) Exclude changed code which is never executed.

See Also:
Pdf: "WYNOT - Worked Yesterday, NOt Today"
Andreas Zeller
Podcast on Software Engineering Radio
Delta Debugging