॥ स्वक्ष ॥

To content | To menu | To search

2010 September 24 [Friday]

CFP - PyCon 2011

Call for proposals -- PyCon 2011 -- http://us.pycon.org/2011/

Proposal Due date: November 1st, 2010

PyCon is back! With a rocking new website, a great location and more Python hackers and luminaries under one roof than you could possibly shake a stick at. We've also added an "Extreme" talk track this year - no introduction, no fluff - only the pure technical meat!

PyCon 2011 will be held March 9th through the 17th, 2011 in Atlanta, Georgia. (Home of some of the best southern food you can possibly find on Earth!) The PyCon conference days will be March 11-13, preceded by two tutorial days (March 9-10), and followed by four days of development sprints (March 14-17).

PyCon 2011 is looking for proposals for the formal presentation tracks (this includes "extreme talks"). A request for proposals for poster sessions and tutorials will come separately.

Want to showcase your skills as a Python Hacker? Want to have hundreds of people see your talk on the subject of your choice? Have some hot button issue you think the community needs to address, or have some package, code or project you simply love talking about? Want to launch your master plan to take over the world with Python?

PyCon is your platform for getting the word out and teaching something new to hundreds of people, face to face.

In the past, PyCon has had a broad range of presentations, from reports on academic and commercial projects, tutorials on a broad range of subjects, and case studies. All conference speakers are volunteers and come from a myriad of backgrounds: some are new speakers, some have been speaking for years. Everyone is welcome, so bring your passion and your code! We've had some incredible past PyCons, and we're looking to you to help us top them!

Online proposal submission is open now! Proposals  will be accepted through November 10th, with acceptance notifications coming out by January 20th. To get started, please see:    <http://us.pycon.org/2011/speaker/>

For videos of talks from previous years - check out:   <http://python.mirocommunity.org/category/conferences>

For more information on "Extreme Talks" see:   <http://us.pycon.org/2011/speaker/extreme/>

We look forward to seeing you in Atlanta!

Please also note - registration for PyCon 2011 will also be capped at a maximum of 1,500 delegates, including speakers. When registration opens (soon), you're going to want to make sure you register early! Speakers with accepted talks will have a guaranteed slot.

Important Dates:
  * November 1st, 2010: Talk proposals due.
  * December 15th, 2010: Acceptance emails sent.
  * January 19th, 2010: Early bird registration closes.
  * March 9-10th, 2011: Tutorial days at PyCon.
  * March 11-13th, 2011: PyCon main conference.
  * March 14-17th, 2011: PyCon sprints days.

Contact Emails:
  Van Lindberg (Conference Chair) - van@python.org
  Jesse Noller (Co-Chair) - jnoller@python.org
  PyCon Organizers list: pycon-organizers@python.org

2010 September 18 [Saturday]

Gnome outreach program for women - 2010 internships

The application process for the first round of internships sponsored by the GNOME Foundation are now officially open. The dates for these internships are 2010Dec15 to 2011Mar15.


Any woman who has relevant experience and is available for a full-time internship is welcome to apply. The application deadline is 2010Oct25. As part of the application process, they are asking women to take the time to learn about the participating projects and make a contribution to the one they are interested in. These projects include ones in programming, graphic design, documentation, and marketing. For more program details, visit: http://live.gnome.org/GnomeWomen/OutreachProgram2010


Do consider applying for the internship, signing up as a mentor, or helping spread the word by encouraging woman to apply - Blog, email, dent/tweet or download this flyer (designed by Máirín Duffy) to send the information about this internship program to your local school/college/university or hand it out at conferences. All the materials for spreading the word are here: http://live.gnome.org/GnomeWomen/OutreachProgram2010/SpreadTheWord

ILUG-Bangalore meetup today

Announcing the ILUG-Bengaluru Meetup on Saturday 2010Sep18

Time:  1800 - 1930 hrs

Venue:  Jaaga,  Rhenius Street (Off. Richmond Road) , Opposite Hockey Stadium, Shantinagar, Bangalore

Directions: http://jaaga.in/contact

Agenda:

Open house:        Anything goes barcamp-ish session.

Regular Activities:         GPG keysigning - http://www.debian.org/events/keysigning


Note:  This is a back-to-back meetup with Ubuntu-IN . The Ubuntu-IN meetup is from 1630 to 1800hrs and is about Indian Language Localisation and all other things Ubuntu.

2010 September 8 [Wednesday]

Postgresql packaging bug in Lucid

Postgresql-8.4 is the packaged version for Ubuntu 10.04 (aka lucid) but earlier today I purged and reinstalled it and found a packaging bug -- sudo aptitude purge postgresql does not cleanly remove the conf files from the filesystem if they had been edited. All the older edits I had made to /etc/postgresql/8.4/main/pg_hba.conf and /etc/postgresql/8.4/main/pg_ident.conf files were intact after the reinstallation. So the new re-installation would throw weird errors.

Ideally aptitude/apt-get 'purge' is the cleanest way to uninstall software but if you have customized the configuration settings in a DB you would not like to lose those changes (especially because you may have installed the database a long time ago and may not remember each change for different apps that use the DB.

Sounds good but in theory a 'purge' littering your filesystem with edited files makes it hard for folks to hunt out which file was leftover and whether re-editing "foo.conf" would get "foo-application" running smoothly.  For smaller single packages its probably easy to script a list of files from the original package and check the filesystem against that list but what if you had an installation that had 80+ odd installation steps for multiple packages that depend on each other ...that is a lot of retracing -- the installation and purging of 80+ installation steps is scriptable but a clean reinstallation of your OS is far less time-consuming, not to mention the resource savings.

2010 September 7 [Tuesday]

KDE-Koffice seeks code contributors

This post makes it after a long latency period that I'm not proud of. Apologies Boudewijn!

Boudewijn Rempt, CTO of KO GmbH, a company that works on open source projects around KOffice, OpenDocument and Qt is looking for Indian university contacts for establishing project channels to increase volunteer contribution to Free/Libre software.

In Europe, he has been a mentor of a student who did his MA Thesis on writing brush engines and algorithms for Krita and had visited India in May to give a training to some university students who were going to do an internship with Nokia, working on KOffice. A large part of that training was about getting involved with a free software project and he would like the opportunity to do the same for other groups of students and would love to work together with people to set up similar projects at Indian colleges, universities and with companies because when students do their internship or thesis in cooperation with a free software project, they will learn a lot that is really valuable: working together with teams, producing software that has end users, working with large, real-life code bases and the projects might gain long term contributors.

According to Boudewijn, KOffice is C++ based, very few applications can be scripted in Python and they use some Python scripts for things like quality control, but the core apps and libraries are C++. You can read the detailed build instructions and if it interests you then directly contact Boudewijn Rempt at boud@valdyas.org (private) OR boud@kogmbh.com (company address).

PS: Feel free to circulate this widely to all Indian universities and colleges as Libre Software is meant for everyone/anyone interested in learning something new.

2010 July 26 [Monday]

Patches and the Packaging toolchain

Background assumptions::
o. A clean ubuntu hardy installation.
o. Some familiarity with command-line basics.
o. Have installed pbuilder.

That done, we can continue...

What is PACKAGING?

If you have ever used the apt-get or aptitude {Aaron has a nice writeup on aptitude Vs. apt-get} command : "sudo aptitude install <packagenames>"  on your Debian/Ubuntu system you used a tool that automatically installs a packaged software on your system. This would automatically pull all the dependencies for your Linux system to run smoothly. It saves you the pain of having to install software manually by pulling code in a tar.gz folder, extracting, etc...

Secondly, when you download a source package from a Debian/Ubuntu "deb-src" repo, its already a debian package.i.e the source files have been placed in a suitable directory tree, appropriate configuration files have been added, and the package contains scripts to help with the building and installation of the package. This is what allows you to just install from source with "apt-get -b source some-package-name" as mentioned before.

This post is different. As in, its not a path of least resistance (packaging an existing debianized package for Ubuntu). This is about creating a binary package from a source package, with customization, modification, or other tedious trouble. To do so, you do the following :

Wikipedia says,

The Debian build toolchain is a collection of software utilities used to create Debian source packages (.dsc) and Debian binary packages (.deb files) from upstream source tarballs.

These tools are used in the Debian project and also in Debian-based distributions such as Ubuntu.

One of the first steps was creating a .dsc as outlined at  https://wiki.ubuntu.com/PackagingGuide/Python

I had already pulled the stable source from LP [bzr branch lp:systers] but noticed that none of the files had copyright or license notices. I also had a number of questions on patching the current systers stable branch for releases and another part of the project as mentioned on the wiki was to work with the MM 3.0 port team. So I requested an upstream MM core-dev to comment on the following:

  • Q0. Currently systers runs only on Ubuntu-Hardy with python2.5 and systers has the habit of working only with ubuntu- LTS releases, hence Lucid could be the porting target.  I feel the tasks involved are -- convert  all .py programs compatible to python  2.6 or 2.7;  carry out code changes if any on the 2.6 or 2.7 .py files to make them work on lucid or Hardy , make package and test the package.
  • Q1. Currently systers code uses python2.5 and I'd like to know if it has to run/port compatibly on Lucid would that involve converting code to python2.7 (or python2.6)? That seems like a large task so I'd like to hear your comments. 
  • Q2. Would it involve making these python programs of systers which is currently compatible with 2.1.10 to be made compatible to mailman 3.0-- I'm not sure how different MM-2.1.10 is from MM-3.0 and assume this involves changes in code.  So what does working with the MM 3.0 port team entail?
  • Q3. According to the debian manuals the existing stable branch should contain licences for all files, to be packaged since GNU-Mailman would require this. Currently none of the stable branches or code fixes pulled from the systers repo have any license files. Am I supposed to contact the individual authors (I dont know them all) or should I just ask Jennifer/Robin ?

The reply I got was lucid (could not resist a pun) and in sum, I'd heard some of the packaging stuff before (in Debian? or was it in Ubuntu?):

  • o. Core-devs dont usually work on maintaining non-mainline stuff unless it's their own. So if you want your "feature-changes-patch" included in upstream, you'd have to be willing to maintain them long-term and that would involve a large commitment. If its not in mainline upstream, there is nobody to coordinate packaging or patches. As the developer of your "feature-changes-patch", its your baby which you should be willing to test and maintain each time mainline changes.
  • o. Ubuntu packaging of Mailman 2.1 introduces some bugs -- best compiled from source. Bringing another package (mailman-systers?) for an existing upstream package within Ubuntu could be an issue.
  • o. Mailman 2.1 and Mailman 3.0 are *entirely* different code bases. That means these wonderful systers feature changes would have to be re-implemented, not ported. Porting (as I asked above in Q0, Q1,Q2) would involve moving between python versions and this changes so many things when you are moving between two OS releases (in this case, Ubuntu hardy and lucid). Besides MM3.0 (in alpha stage) was an entirely different code base compared to 2.1 which is in feature freeze.
  • o. While it would be better to contribute code directly to MM3.0 ...BUT... using the existing code raises the license issues in Q3 above. This is something I cant answer as "legalese" is beyond me. Technically, all GPL code (for a FLOSS project) requires authors be willing to assign their work to the free software foundation, as explained in the gnu-licenses page: http://www.gnu.org/licenses/why-assign.html. IIRC, Ubuntu and Debian would require the license.txt file for packaging too. There is a list of FSF approved software licenses.

2010 July 25 [Sunday]

Selenium RC and Python client

Selenium is quite a famous testing tool and has a lot of documentation so I wont bother to repeat stuff from there, rather just focus on the bits where I feel the documentation could improve.

STEP#0.  After downloading selenium remote-control change to the directory where you extracted it. {Btw, to install selenium on your local machine, download selenium from here.}

~$ cd selenium-remote-control-1.0.3/
~/selenium-remote-control-1.0.3/selenium-server-1.0.3$ sudo java -jar selenium-server.jar
09:03:05.618 INFO - Java: Sun Microsystems Inc. 1.6.0_0-b11
09:03:05.638 INFO - OS: Linux 2.6.24-28-generic i386
09:03:05.722 INFO - v2.0 [a2], with Core v2.0 [a2]
09:03:06.304 INFO - RemoteWebDriver instances should connect to: http://192.168.1.5:4444/wd/hub
09:03:06.307 INFO - Version Jetty/5.1.x
09:03:06.311 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
09:03:06.324 INFO - Started HttpContext[/selenium-server,/selenium-server]
09:03:06.324 INFO - Started HttpContext[/,/]
09:03:06.381 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@12d15a9
09:03:06.382 INFO - Started HttpContext[/wd,/wd]
09:03:06.399 INFO - Started SocketListener on 0.0.0.0:4444
09:03:06.400 INFO - Started org.openqa.jetty.jetty.Server@228a02

I wanted to run the python script from the console and each time it would stop here and I'd be waiting and nothing would happen.....How do I run the script without a command prompt. So then, I'd interrupt it with 'ctrl C' to get a  "09:03:17.439 INFO - Shutting down...12:39:08.573 INFO - Stopping Acceptor ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=4444]

That "shutting down" message was odd -- how would you run a process if it was shutting down? What the logs above dont say is "The selenium server must be running so keep that process open. Open ANOTHER terminal window and run your python script there". The documentation didnt explicitly mention that localhost must keep the server running in the background-- Its one of the most basic client-server concepts but when you are running stuff on localhost, your client and server are one and the same. Being explicit with this trivia in the documentation would have helped me not waste hundreds of hours searching the selenium website and reading irrelevant blogs which google threw up, irc, emails, etc... So, in TerminalOne,


:~/selenium-remote-control-1.0.3/selenium-server-1.0.3$ sudo java -jar selenium-server.jar
09:03:05.618 INFO - Java: Sun Microsystems Inc. 1.6.0_0-b11
09:03:05.638 INFO - OS: Linux 2.6.24-28-generic i386
09:03:05.722 INFO - v2.0 [a2], with Core v2.0 [a2]
09:03:06.304 INFO - RemoteWebDriver instances should connect to: http://192.168.1.5:4444/wd/hub
09:03:06.307 INFO - Version Jetty/5.1.x
09:03:06.311 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
09:03:06.324 INFO - Started HttpContext[/selenium-server,/selenium-server]
09:03:06.324 INFO - Started HttpContext[/,/]
09:03:06.381 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@12d15a9
09:03:06.382 INFO - Started HttpContext[/wd,/wd]
09:03:06.399 INFO - Started SocketListener on 0.0.0.0:4444
09:03:06.400 INFO - Started org.openqa.jetty.jetty.Server@228a02
09:03:17.439 INFO - Shutting down...
mom@drga:~/selenium-remote-control-1.0.3/selenium-server-1.0.3$ sudo java -jar selenium-server.jar
09:03:36.248 INFO - Java: Sun Microsystems Inc. 1.6.0_0-b11
09:03:36.252 INFO - OS: Linux 2.6.24-28-generic i386
09:03:36.270 INFO - v2.0 [a2], with Core v2.0 [a2]
09:03:36.486 INFO - RemoteWebDriver instances should connect to: http://192.168.1.5:4444/wd/hub
09:03:36.489 INFO - Version Jetty/5.1.x
09:03:36.491 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
09:03:36.493 INFO - Started HttpContext[/selenium-server,/selenium-server]
09:03:36.493 INFO - Started HttpContext[/,/]
09:03:36.523 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@12d15a9
09:03:36.523 INFO - Started HttpContext[/wd,/wd]
09:03:36.533 INFO - Started SocketListener on 0.0.0.0:4444
09:03:36.533 INFO - Started org.openqa.jetty.jetty.Server@228a02
09:04:30.236 INFO - Checking Resource aliases
09:04:30.260 INFO - Command request: getNewBrowserSession[*firefox, http://localhost:4444, ] on session null
09:04:30.283 INFO - creating new remote session
09:04:30.614 INFO - Allocated session 7cba6a7dadb243618c046ee7fb6c6bc9 for http://localhost:4444, launching...
09:04:30.778 INFO - Preparing Firefox profile...
09:04:34.676 INFO - Launching Firefox...
09:04:38.697 INFO - Got result: OK,7cba6a7dadb243618c046ee7fb6c6bc9 on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.715 INFO - Command request: open[/selenium-server/tests/html/test_click_page1.html, ] on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.854 INFO - Got result: XHR ERROR: URL = http://localhost:4444/selenium-server/tests/html/test_click_page1.html Response_Code = 404 Error_Message = Not+found on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.863 INFO - Command request: testComplete[, ] on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.863 INFO - Killing Firefox...
09:04:38.933 INFO - Got result: OK on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:09:28.085 INFO - Command request: getNewBrowserSession[*firefox, http://www.irian.at, ] on session null
09:09:28.086 INFO - creating new remote session
09:09:28.088 INFO - Allocated session 97dec9f0b53545acbc9ca3624fc6cbd4 for http://www.irian.at, launching...
09:09:28.165 INFO - Preparing Firefox profile...
09:09:31.873 INFO - Launching Firefox...
09:09:35.599 INFO - Got result: OK,97dec9f0b53545acbc9ca3624fc6cbd4 on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:35.604 INFO - Command request: open[http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html, ] on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:41.698 INFO - Got result: XHR ERROR: URL = http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html Response_Code = 404 Error_Message = Not Found on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:41.707 INFO - Command request: testComplete[, ] on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:41.707 INFO - Killing Firefox...
09:09:41.740 INFO - Got result: OK on session 97dec9f0b53545acbc9ca3624fc6cbd4
10:18:38.252 INFO - Command request: getNewBrowserSession[*firefox, http://www.google.com/, ] on session null
10:18:38.253 INFO - creating new remote session
10:18:38.254 INFO - Allocated session c4b9c7f35ea34d428b50f2f31a6181c2 for http://www.google.com/, launching...
10:18:38.322 INFO - Preparing Firefox profile...
10:18:41.921 INFO - Launching Firefox...
10:18:45.741 INFO - Got result: OK,c4b9c7f35ea34d428b50f2f31a6181c2 on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:45.800 INFO - Command request: open[http://www.google.com/, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.204 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.211 INFO - Command request: type[q, hello world] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.277 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.282 INFO - Command request: click[btnG, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.334 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.340 INFO - Command request: waitForPageToLoad[5000, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.359 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.365 INFO - Command request: getTitle[, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.411 INFO - Got result: OK,hello world - Google Search on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.416 INFO - Command request: testComplete[, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.417 INFO - Killing Firefox...
10:18:48.434 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2


ALL this happens on TerminalOne, so keep that window open to check for the above while you are doing steps below.

STEP#1. In TerminalTwo, Change directory to the 'python-client' to run your scripts. Lets test the selenium.py script first. Btw, note that your bash file must contain the PYTHONPATH for all the directories that you run .py scripts from.

:~/selenium-remote-control-1.0.3$ ls
README.txt  selenium-php-client-driver-1.0.1  selenium-dotnet-client-driver-1.0.1  selenium-python-client-driver-1.0.1
selenium-java-client-driver-1.0.1  selenium-ruby-client-driver-1.0.1  selenium-perl-client-driver-1.0.1    selenium-server-1.0.3

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python selenium.py

If it returns silently (read, No errors), it means your selenium server is working.

STEP#2
. Try testing another script, test_google.py or test_default_server.py

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ ls
doc    test_ajax_jsf.py  test_google.py~    selenium.py  test_ajax_jsf.pyc  test_google.pyc selenium.pyc                     test_default_server.py   test_i18n.py  selenium_test_suite_headless.py  test_default_server.pyc  test_i18n.pyc
selenium_test_suite.py  test_google.py

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python test_default_server.py
Using selenium server at localhost:4444
E
======================================================================
ERROR: testLinks (__main__.TestDefaultServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_default_server.py", line 36, in testLinks
    selenium.open("/selenium-server/tests/html/test_click_page1.html")
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 764, in open
    self.do_command("open", [url,])
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 215, in do_command
    raise Exception, data
Exception: XHR ERROR: URL = http://localhost:4444/selenium-server/tests/html/test_click_page1.html Response_Code = 404 Error_Message = Not+found

----------------------------------------------------------------------
Ran 1 test in 8.852s

FAILED (errors=1)

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python test_ajax_jsf.py
Using selenium server at localhost:4444
E
======================================================================
ERROR: testKeyPress (__main__.TestAjaxJSF)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_ajax_jsf.py", line 39, in testKeyPress
    selenium.open("http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html")
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 764, in open
    self.do_command("open", [url,])
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 215, in do_command
    raise Exception, data
Exception: XHR ERROR: URL = http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html Response_Code = 404 Error_Message = Not Found

----------------------------------------------------------------------
Ran 1 test in 13.663s

FAILED (errors=1)

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python test_google.py
.
----------------------------------------------------------------------
Ran 1 test in 10.190s

OK

When you are running the above scripts you would see Selenium throw a browser with messages but this is too fast and disappears. In the second terminal,   run your scripts from the directory you've stored them in.

 

2010 July 18 [Sunday]

Installing Sahi on Ubuntu 8.04 hardy

I was referred to sahi by ex-selenium users, so I decided to try it out.

To install sahi on ubuntu 8.04 hardy::

STEP#0.

I downloaded sahi from http://sourceforge.net/projects/sahi/files/

STEP#1.

Extracted the zip folder and changed directory. Ran the start_sahi shell script.

:~/sahi/userdata/bin$ sudo ./start_sahi.sh (The ./ is necessary because its not in the PATH as yet)
--------
SAHI_HOME: ../..
SAHI_USERDATA_DIR: ../../userdata
SAHI_EXT_CLASS_PATH:
--------
../../bin/sahi.sh: line 19: java: command not found

Since Sahi requires java installed on your ubuntu system, do "sudo apt-get install sun-java6-jd" and run the shell script again.

~/sahi/userdata/bin$ sudo ./start_sahi.sh
[sudo] password for mom:
--------
SAHI_HOME: ../..
SAHI_USERDATA_DIR: ../../userdata
SAHI_EXT_CLASS_PATH:
--------
Sahi properties file = /home/moi/sahi/config/sahi.properties
Sahi user properties file = /home/moi/sahi/userdata/config/userdata.properties
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi0
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi1
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi2
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi3
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi4
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi5
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi6
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi7
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi8
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi9
>>>> Sahi started. Listening on port: 9999
>>>> Configure your browser to use this server and port as its proxy
>>>> Browse any page and CTRL-ALT-DblClick on the page to bring up the Sahi Controller

STEP2:
Now visit http://sahi.co.in/w/using-sahi for the "Configure the browser" section and follow those instructions.
For FF, its "Edit > Preferences > Advanced > Network > Settings" and then you can continue with the remaining instructions for Manual Proxy Configuration.

Since “No Proxy for..” should not have localhost in it I removed it but sahi controller was not being activated. I would get the message "the proxy server is refusing connections" which results in FF browsing failing completely. Not nice.

Apparently the installation is fine and proxy has started on 9999 -- this port number is not used for any other process so technically Sahi should run. It doesnt. The second reason I didnt venture further with this is because it lacks a python client driver. Even if ruby is easy to learn, selenium scores when it provides a language driver for all the scripting languages.

2010 July 17 [Saturday]

SoftwareHardware fails

Ever been in a situation where you are trying to solve one problem but have more hoops to jump than necessary!?
This rant has been building up this past week and it all started with bzr: ERROR: Unknown branch format: 'Bazaar Branch Format 7 (needs bzr 1.6)\n'

Seems that bzr has to be upgraded on hardy {--And now this? --after I had purged and re-installed bzr because the earlier installation was giving weird errors and I didnt want to waste time going off on a tangent. argh, I was wrong about wasting time with bugs!

I was suggested a PPA but for that was not an optimal path for me. Besides, here I was trying to pull a MM revision from LP, but instead have to build bzr and then work on MM..... ~fun.

Alan (thanks :)) suggested I edit the sources.list and add "deb http://ppa.launchpad.net/bzr/ppa/ubuntu hardy main" and then do an apt-get update, then apt-get upgrade which would upgrade bzr to the version in the ppa without all the compiling and building hoop jumping.

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
bzr
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

What a killjoy !!

$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
python-configobj
The following packages will be upgraded:
bzr
[.....................]
Setting up bzr (2.1.2-1~bazaar2~hardy1) ...
removing incorrectly installed bash example /etc/bash_completion.d/bzr

Finally.... I upgraded bzr which allowed me to pull the branch: $ sudo bzr branch lp:mailman/2.1. An hour later.......gee, where was I now? The download was still 'in progress' and was'nt all this supposed to be incidental to testing Mailman...!? That was the night before. The next morning after yet-another-regular-unscheduled-power-outage, it was LaunchPad going down for an hour or so --some twit was DDOSing their server. What an incredibly productive activity!

LP returns and the development machine decides to die with a "/dev/sda1 error : fsck died with exit status 4". Now I knew this was my lucky day!!

Dug out a liveCD and ran 'fsck -f /dev/sda1' manually, where:

-f = force fsck even if filesystem seems clean
-cc = run badblocks check with a non-destructive test
-k = write new list of badblocks to current list
-p = automatically repair errors if possible without requiring human input
-v = verbose output

It found 5 inodes containing multiply claimed blocks and repaired it but for a while everything was in slow-motion --  I panicked about it taking ages to check a mere 40 gb of inodes and blocks. Colourless did the math on why it will take ages "just consider the sustained transfer rate of the drive which will probably be in the low 10s of mb/s. lets say you are getting 20mb/s second transfer, that is still going to be 2000 seconds to scan the disk, or 33 minutes".

Ah, talk of collective agida!

Earlier today fsck.ext1: No such file or directory while trying to open /dev/hda1. The superblock could not be read or does not describe a correct ext2 filesystem -- the hdd would not be detected and system refused to boot, refused to detect partitions. I spoke too soon earlier. It was super lucky saturday, not lucky friday!! This time the LiveCD was an arm's length away after last night's use and I checked out "fsck", "e2fsck" ...zilch, No response.

There is a good utility called TestDisk, which is available as a package for both debian and ubuntu -- sudo apt-get install testdisk, and you can run it from liveCD if your disk ever fails. It goes without saying that TestDisk will be useful only if your disk is detected by BIOS and hence alive.

Now, the worst I could think was "bad sectors==dead disk" but before that I had to check for loose wiring and then see if the BIOS detected the drive. The disk was spinning as I could hear the 'whrr' sound. Unplugged and re-plugged the wires a few times ...Nada...Bios would not detect the hdd. Convinced that it was the worst "bad sectors==dead disk", I shut everything down. A few hours later I switch it it on and voila the disk was detected and grub was soon asking which OS I wanted to boot into. That means it was just a loose connection (HOPEFULLY :)).

A BIG 'thanks' to ALL the folks who helped out with suggestions and listened to my kvetch. Much appreciated :)  If I'd ever have to calculate "productive time" sans all the idiocy around then its scary to note the amount of time that is wasted scheduling my day around a power outage, hardware issues and software bugs, and then there is this mundane thing called 'life'. I wish I had 10-days of silence instead.


2010 July 14 [Wednesday]

meld it


All *nix machines have the feature allowing you to compare two files --often useful to do a quick 'cmp' or 'diff' on the cli for a file comparision --a good feature for a small script file or documents. However, if you want to compare chunks of code, between two versions, then the readability isnt optimal.

Meld to the rescue!

Meld is a visual diff and merge tool which allows you to compare two or three files located in different directory paths on your local machine and edit them. It allows comparison of upto three folders.

I love useful software written in Python using the PyGTK toolkit. Meld has been packaged for Ubuntu and "sudo apt-get-install meld" would install this small utility which can be accessed via: Application >Programming >Meld Diff Viewer.

Its that simple.

2010 July 1 [Thursday]

Trolling101

UPDATE :: It was pointed out to me that the person impersonating "lut4rp" to leave the "die bitch" comment on my blog does not deserve his privacy as he tried to get an innocent person (lut4rp) into trouble. This is to clarify that Ajay Kumar (ajuonline), left the "die bitch" comment on my blog. [End UPDATE]


Its incredibly funny when some Indians suffering with illusions of "internet == anonymity" think that they can get away with online harassment. Trolling is an art so if a troll does a bad job of using the technology properly, its difficult to write this post with a straight face.

IP Information - 59.94.134.50
IP address: 59.94.134.50
Reverse DNS: [No reverse DNS entry per ns11.bsnl.in.]
Reverse DNS authenticity: [Unknown]
ASN: 9829
ASN Name: BSNL-NIB (National Internet Backbone)
IP range connectivity: 1
Registrar (per ASN): APNIC
Country (per IP registrar): IN [India]
Country Currency: INR [India Rupees]
Country IP Range: 59.88.0.0 to 59.95.255.255
Country fraud profile: Normal
City (per outside source): Lucknow, Uttar Pradesh
Country (per outside source): IN [India]
Private (internal) IP? No
IP address registrar: whois.apnic.net
Known Proxy? No


Ajuonline, impersonating another person while revealing your identity is hardly 'chatur' online.

from Troll101 import CommonSense

2010 June 21 [Monday]

Raga-Kalyani

UPDATE-20100913 :: It was pointed out to me that the person impersonating "lut4rp" to leave the "die bitch" comment on my blog does not deserve his privacy as he tried to get an innocent person (lut4rp) into trouble. As mentioned in my next blog entry (http://svaksha.com/post/2010/Trolling101),  (ajuonline) (blog, http://ajuonline.net and http://mindtakers.net), left the "die bitch" comment on my blog.

UPDATE-20101230
:: "piLLangOviya" is set to the Raga "MohanakalyAni" and not "kalyAni". (Thanks Ajit). It is a janya raga from the 65th melakarta scale due to the lack of all the seven svaras.

Kalyani, meaning "auspicious one" in Sanskrit, belongs to the 65th melakarta raga, is a very prominently played raga at concerts (and weddings?). At a concert very few artists will pass over this raga.

It is the 65th melakarta rāga under the Katapayadi sankhya, also called Mechakalyani. The notes for Kalyani are S R2 G3 M2 P D2 N3. A sawf article has a rather long and intricate analysis of this raga for each singer with audio samples in .ram format, which inspires me to rant about having had to install non-free codecs for gstreamer from the ugly set. Damn, why cant people use free formats on websites which wont force me to install restricted codecs...arghh, i digress.

Shri Purandara Dasa composed piLLangOviya cheluva in kalyANi raga (see Edit and comments below) and one of my favorite singers, Sri.Aruna Sairam renders Pillangoviya in kalyani, set to triputa tala.

Composer: Shri Purandara Dasa || Tala: Triputa || Language: Kannada

Arohanam : S R1 M1 P N2 S  || Avarohan  : S N2 P M1 R1 S

P : piLLangOviya celuva krSNana elli nODidiri || rangana elli nODidiri ||
A: elli nODidaralli tAnilla dillavendu balla jANare ||
C1: nandagOpana mandiragaLa sandugondinali || canda candada gOpa bAlara vrndA vrunadadali ||
sundarAngada sundariyara hindu mundinali || andadAkaLa kanda karugaLa manda mandeyali ||
C2: shrI gurUkta sadA sumangaLa yOga yOgadali || AgamArtadoLage mADuva yAga yAgadali ||
shrIge bhagyanAgi vartipa bhOga bhOgadali || bhAgavataru sadA bAgi pADuva rAga rAgadali ||
C3: I caracaradoLage janangaLa Ace Iceyali || kEcarendrana sutana rathada cauka pIThadali ||
nachade madhava keshava emba vacha kangalali l| pichukondada purandara vittalana lochanagradali ll



2010 June 20 [Sunday]

funkload builder load testing

After installing funkload on hardy, it was time for testing a few web-sites with it. I downloaded the build script and tested it. It worked like a charm but would only store results for google.com. All other sites, including blogs drew a blank which is strange. You can see the errors in the steps3 and 4, listed below:

Step0:

Test your funkload installation as below. It should run and give an OK result.
i@ubu804:~/funkload-demo/simple$ fl-run-test -v test_Simple.py
test_simple (test_Simple.Simple) ... Ok

----------------------------------------------------------------------
Ran 1 test in 36.425s

OK

Step0.1: Test the sample file.

i@ubu804:~/funkload-demo/simple$ fl-run-test -l 4 -n 100 test_Simple.py
End of loop: 100 pages rendered in 246.905s, avg of 2.469s per page, 0.405 SPPS without concurrency.
.
----------------------------------------------------------------------
Ran 1 test in 477.608s

OK

The log files for this test are located in "simple-test.log"

Step0.2: Bench it

i@ubu804:~/funkload-demo/simple$ fl-monitor-ctl monitor.conf start
Starting monitor server at http://localhost:8008/ as daemon.


Step1:

Next, download funkload Builder v0.2 - funkloadBuilder02.tar.gz.
Extract it into your home folder directory. Then just follow the installation instructions on that page which I did as below:

i@ubu804:~$ tar -xzvf funkloadBuilder02.tar.gz

funkload/
funkload/tmp/
funkload/tmp/wget/
funkload/builder/
funkload/builder/ResourceBundle.py
funkload/builder/build.py
funkload/builder/builder.conf
funkload/builder/util.py
funkload/builder/default/
funkload/builder/default/monitor.conf
funkload/builder/default/test-results/
funkload/builder/default/test_Load.py
funkload/builder/default/Load.conf

i@ubu804:~$ cd funkload/builder

i@ubu804:~/funkload/builder$ vi builder.conf


Here, you must edit the following lines in builder.conf:

wsb_root=/home/esw/funkload-results/ {hint: set your directory path correctly}
test_repository=/home/esw/funkload/ {hint: set your directory path correctly}
test_sites=[www.test1.co.uk, www.test2.co.uk] {hint: add the URI of sites you want to test}

and if required, setup parameters for wget {Ex. your /home/i/funkload/tmp/wget/www.google.co.in/index.html is the folder which will store the .html files for viewing}.

Save and exit builder.conf file.

Step2:

Next, we will run the build file.

i@ubu804:~/funkload/builder$ python build.py -b 50
{'-b': '50'}
Performing sampling of site login.launchpad.net, this may take a while!
Sampling complete
Performing sampling of site svaksha.com, this may take a while!
Sampling complete
Performing sampling of site google.com, this may take a while!
Sampling complete
find: /home/i/funkload/tmp/wget/google.com: No such file or directory

If you change directory to the funkload folder, you will see three new folders for each of the sites you ran the tests on: "login.launchpad.net", "svaksha.com", and "google.com"

Step3:

Now we are running the load tests:

i@ubu804:~/funkload/builder$ python build.py --run
{'--run': ''}
/home/i/funkload/builder/.. login.launchpad.net
Traceback (most recent call last):
File "/usr/bin/fl-run-bench", line 8, in <module>
load_entry_point('funkload==1.12.0', 'console_scripts', 'fl-run-bench')()
File "build/bdist.linux-x86_64/egg/funkload/BenchRunner.py", line 606, in main
File "build/bdist.linux-x86_64/egg/funkload/BenchRunner.py", line 220, in __init__
File "build/bdist.linux-x86_64/egg/funkload/BenchRunner.py", line 123, in load_unittest
File "/home/i/funkload/login.launchpad.net/test_Load.py", line 9, in <module>
from MembersTestCase import MembersTestCase
ImportError: No module named MembersTestCase
Traceback (most recent call last):
File "build.py", line 271, in <module>
main(sys.argv[1:])
File "build.py", line 261, in main
funkloadBuilder.runLoadTesting()
File "build.py", line 240, in runLoadTesting
shutil.copyfile("%s/%s"%(copyDir,FunkloadBuilder.LOAD_TESTING_RESULTS_FILE),"%s/%s/%s"%(copyDir,FunkloadBuilder.LOAD_TESTING_RESULTS_FOLDER,FunkloadBuilder.LOAD_TESTING_RESULTS_FILE))
File "/usr/lib/python2.5/shutil.py", line 46, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: '/home/i/funkload/login.launchpad.net/load-bench.xml'

This is where the test fails because it only stores results for google.com in the folder /home/i/funkload/tmp/wget/www.google.co.in/index.html , where I can reproduce the google.in website as is. The other two domains that were tested, login.launchpad.net and svaksha.com dont have any results. Strange. The error above shows that /usr/bin/fl-run-bench, is not being called from the funkload==1.12.0 folder  which is where the build fails.

Step4:

Next, we will have to generate HTML reports for each tested website but before giving the following command, create a funkload-results directory in your home folder, then :

i@ubu804:~/funkload/builder$ python build.py -s output-report-name
{'-s': 'output-report-name'}
load-bench.xml not found in: /home/i/funkload/login.launchpad.net/test-results/
load-bench.xml not found in: /home/i/funkload/svaksha.com/test-results/
load-bench.xml not found in: /home/i/funkload/google.com/test-results/


The above command only creates a directory "output-report-name" within the funkload-results directory but cd'ing into one of them, like /funkload-results/output-report-name/svaksha.com, shows an empty directory. Test #fail.

2010 June 17 [Thursday]

howto install funkload on ubuntu8.04 hardy

In between my earlier attempts and patchy internet for almost a week and google searches yielding this:

#0.http://nedbatchelder.com/blog/200810/funkload_ftw.html
#0.http://blog.jbglenn.net/search/label/Funkload and
#0.http://pydanny.blogspot.com/2008/02/funkload-charting-woes.html

It seemed like a challenge to get funkload working on Hardy but Ben had emailed and commented (thanks Ben :-)) that Funkload and TCPWatch package has to be installed manually for all Ubuntu releases below ver8.10 and its packaged for Debian-lenny.

On a clean Hardy/8.04 system, I tried installing funkload, yet again. So I suppose a proper listing of the steps will be useful to others.

Step0:

Installing the package dependencies.

i@ubu804:~$ sudo aptitude install python-dev python-xml python-setuptools python-docutils gnuplot

Step1:

Downloading TCPWatch, extracting and building from source.

i@ubu804:~$ wget http://hathawaymix.org/Software/TCPWatch/tcpwatch-1.3.tar.gz
--13:23:27--; http://hathawaymix.org/Software/TCPWatch/tcpwatch-1.3.tar.gz
; => `tcpwatch-1.3.tar.gz'
Resolving hathawaymix.org... 67.161.215.12
Connecting to hathawaymix.org|67.161.215.12|:80... failed: Connection timed out.
Retrying.
--13:26:37--; http://hathawaymix.org/Software/TCPWatch/tcpwatch-1.3.tar.gz
; (try: 2) => `tcpwatch-1.3.tar.gz'
Connecting to hathawaymix.org|67.161.215.12|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13,065 (13K) [application/x-tar]
100%[===================================================================] 13,065; 11.43K/s;
13:26:39 (11.42 KB/s) - `tcpwatch-1.3.tar.gz' saved [13065/13065]

i@ubu804:~$ tar xzvf tcpwatch-1.3.tar.gz
tcpwatch/
tcpwatch/tcpwatch.py
tcpwatch/setup.py
tcpwatch/CHANGES.txt

i@ubu804:~$ cd tcpwatch/

i@ubu804:~/tcpwatch$ ls
CHANGES.txt; setup.py; tcpwatch.py
i@ubu804:~/tcpwatch$ python setup.py build
running build
running build_scripts
creating build
creating build/scripts-2.5
copying and adjusting tcpwatch.py -> build/scripts-2.5
changing mode of build/scripts-2.5/tcpwatch.py from 644 to 755

i@ubu804:~/tcpwatch$ sudo python setup.py install
running install
running build
running build_scripts
running install_scripts
copying build/scripts-2.5/tcpwatch.py -> /usr/bin
changing mode of /usr/bin/tcpwatch.py to 755
running install_egg_info
Writing /usr/lib/python2.5/site-packages/tcpwatch-1.2.1.egg-info

i@ubu804:~/tcpwatch$ cd

Step2:

Installing funkload version 1.12.0.

i@ubu804:~/tcpwatch$ sudo easy_install -U funkload
Searching for funkload
Reading http://pypi.python.org/simple/funkload/
Reading http://funkload.nuxeo.org/
Best match: funkload 1.12.0
Processing funkload-1.12.0-py2.5.egg
funkload 1.12.0 is already the active version in easy-install.pth
Installing fl-credential-ctl script to /usr/bin
Installing fl-monitor-ctl script to /usr/bin
Installing fl-install-demo script to /usr/bin
Installing fl-run-test script to /usr/bin
Installing fl-record script to /usr/bin
Installing fl-build-report script to /usr/bin
Installing fl-run-bench script to /usr/bin
Installing fl-credential-ctl script to /usr/bin
Installing fl-run-test script to /usr/bin
Installing fl-record script to /usr/bin
Installing fl-run-bench script to /usr/bin
Installing fl-monitor-ctl script to /usr/bin
Installing fl-install-demo script to /usr/bin
Installing fl-build-report script to /usr/bin

Using /usr/lib/python2.5/site-packages/funkload-1.12.0-py2.5.egg
Processing dependencies for funkload
Finished processing dependencies for funkload

Step3:

Installing python-gdchart and python-gdchart2

i@ubu804:~$ sudo aptitude install python-gdchart2
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Building tag database... Done
The following NEW packages will be automatically installed:
libgdchart-gd2-noxpm
The following NEW packages will be installed:
libgdchart-gd2-noxpm python-gdchart2
0 packages upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 87.0kB of archives. After unpacking 352kB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Get:1 http://np.archive.ubuntu.com hardy/universe libgdchart-gd2-noxpm 0.11.5-4 [46.7kB]
Get:2 http://np.archive.ubuntu.com hardy/universe python-gdchart2 0.beta1-3.4 [40.3kB]
Fetched 87.0kB in 24s (3608B/s)
Selecting previously deselected package libgdchart-gd2-noxpm.
(Reading database ... 151343 files and directories currently installed.)
Unpacking libgdchart-gd2-noxpm (from .../libgdchart-gd2-noxpm_0.11.5-4_amd64.deb) ...
Selecting previously deselected package python-gdchart2.
Unpacking python-gdchart2 (from .../python-gdchart2_0.beta1-3.4_amd64.deb) ...
Setting up libgdchart-gd2-noxpm (0.11.5-4) ...

Setting up python-gdchart2 (0.beta1-3.4) ...

Processing triggers for libc6 ...
ldconfig deferred processing now taking place
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Writing extended state information... Done
Building tag database... Done

Step4:

Now follow the demo testing steps given here

i@ubu804:~$ fl-install-demo
Extract FunkLoad examples into ./funkload-demo : ...  done.
i@ubu804:~$ cd funkload-demo/xmlrpc/
i@ubu804:~/funkload-demo/xmlrpc$ make test
fl-credential-ctl cred.conf restart
Starting file_credential server at http://localhost:44401/ as daemon.
fl-run-test test_Credential.py -v
test_credential (test_Credential.Credential) ... Ok

----------------------------------------------------------------------
Ran 1 test in 0.038s

OK
fl-credential-ctl cred.conf stop
Server http://localhost:44401/ is stopped.
i@ubu804:~/funkload-demo/xmlrpc$

Step5:

Make bench

i@ubu804:~/funkload-demo/xmlrpc$ make bench
Starting file_credential server at http://localhost:44401/ as daemon.
Starting monitor server at http://localhost:44402/ as daemon.
fl-run-bench -c 1:20:40:60:80:100 -D 10 test_Credential.py Credential.test_credential
========================================================================
Benching Credential.test_credential
========================================================================
Check all credentiald methods
------------------------------------------------------------------------

Configuration
=============

* Current time: 2010-06-17T14:54:09.755672
* Configuration file: /home/i/funkload-demo/xmlrpc/Credential.conf
* Log xml: /home/i/funkload-demo/xmlrpc/credential-bench.xml
* Server: http://localhost:44401/
* Cycles: [1, 20, 40, 60, 80, 100]
* Cycle duration: 10s
* Sleeptime between request: from 0.1s to 0.2s
* Sleeptime between test case: 0.5s
* Startup delay between thread: 0.05s

Benching
========

Cycle #0 with 1 virtual users
-----------------------------

* Start monitoring localhost: ... done.
* Current time: 2010-06-17T14:54:09.773675
* Starting threads: . done.
* Logging for 10s (until 2010-06-17T14:54:19.830918): ........ done.
* Waiting end of threads: . done.
* Waiting cycle sleeptime 1s: ... done.
* Stop monitoring localhost:  done.
* End of cycle, 12.62s elapsed.
* Cycle result: **SUCCESSFUL**, 8 success, 0 failure, 0 errors.

Cycle #1 with 20 virtual users
------------------------------

* Start monitoring localhost: ... done.
* Current time: 2010-06-17T14:54:22.385506
* Starting threads: .................... done.
* Logging for 10s (until 2010-06-17T14:54:33.519986): .............................................................................................................................................................................. done.
* Waiting end of threads: .................... done.
* Waiting cycle sleeptime 1s: ... done.
* Stop monitoring localhost:  done.
* End of cycle, 14.33s elapsed.
* Cycle result: **SUCCESSFUL**, 174 success, 0 failure, 0 errors.

Cycle #2 with 40 virtual users
------------------------------

* Start monitoring localhost: ... done.
* Current time: 2010-06-17T14:54:36.716379
* Starting threads: ........................................ done.
* Logging for 10s (until 2010-06-17T14:54:49.032317): ............................................................................................................................................................................................................................................................................................................................ done.
* Waiting end of threads: ........................................ done.
* Waiting cycle sleeptime 1s: ... done.
* Stop monitoring localhost:  done.
* End of cycle, 14.59s elapsed.
* Cycle result: **SUCCESSFUL**, 316 success, 0 failure, 0 errors.

Cycle #3 with 60 virtual users
------------------------------

* Start monitoring localhost: ... done.
* Current time: 2010-06-17T14:54:51.301751
* Starting threads: ............................................................ done.
* Logging for 10s (until 2010-06-17T14:55:04.779492): ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ done.
* Waiting end of threads: ............................................................ done.
* Waiting cycle sleeptime 1s: ... done.
* Stop monitoring localhost:  done.
* End of cycle, 15.76s elapsed.
* Cycle result: **SUCCESSFUL**, 464 success, 0 failure, 0 errors.

Cycle #4 with 80 virtual users
------------------------------

* Start monitoring localhost: ... done.
* Current time: 2010-06-17T14:55:07.066691
* Starting threads: ................................................................................ done.
* Logging for 10s (until 2010-06-17T14:55:21.814678): ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ done.
* Waiting end of threads: ................................................................................ done.
* Waiting cycle sleeptime 1s: ... done.
* Stop monitoring localhost: done.
* End of cycle, 20.69s elapsed.
* Cycle result: **SUCCESSFUL**, 672 success, 0 failure, 0 errors.

Cycle #5 with 100 virtual users
-------------------------------

* Start monitoring localhost: ... done.
* Current time: 2010-06-17T14:55:27.761091
* Starting threads: .................................................................................................... done.
* Logging for 10s (until 2010-06-17T14:55:43.883081): .............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................. done.
* Waiting end of threads: .................................................................................................... done.
* Waiting cycle sleeptime 1s: ... done.
* Stop monitoring localhost: done.
* End of cycle, 20.43s elapsed.
* Cycle result: **SUCCESSFUL**, 686 success, 0 failure, 0 errors.

Result
======

* Success: 2320
* Failures: 0
* Errors: 0

Bench status: **SUCCESSFUL**
fl-build-report credential-bench.xml --html
Creating html report: ...done:
/home/i/funkload-demo/xmlrpc/test_credential-20100617T145409/index.html
Server http://localhost:44402/ is stopped.
Server http://localhost:44401/ is stopped.
i@ubu804:~/funkload-demo/xmlrpc$

Step6: Install Zope (installation instructions) and create a sandbox.

i@ubu804:~/funkload-demo/simple$ cat README.txt
====================
FunkLoad demo/simple
====================
$Id: README.txt 53544 2009-03-09 16:28:58Z tlazar $

This is a simple FunkLoadTestCase demonstration.

It requires an web test server (configuration is done for an apache2
default install)

WARNING: You should *not* run this script against a server that is not under
your responsablity as it can result a DOS in bench mode.

1/ Modify the Simple.conf file

  Set the [main] url and pages keys

2/ Test it

verbose mode::

fl-run-test -v test_Simple.py

debug mode::

fl-run-test -d test_Simple.py

view the downloaded page in real time using firefox::

fl-run-test -V test_Simple.py

check performance of a single page::

fl-run-test -l 4 -n 100 test_Simple.py

PS:

I have yet to finish testing so I'll update this entry later as its almost midnight and as usual google threw more to-read stuff for laters... yum !
0. funkload-modules
0. funkload-test-in-few-minutes
0. funkloadtests/INSTALL.txt
0. plone-collective.recipe.funkload
0. set up funkload to do functional tests on a SOAP web service
0. funkload build script
0. collective funkload tests, thread on a plone list
0. plone sprint report
0. functional load testing notes

A nice-to-have feature would be a screen key recording feature in funkload :)

2010 June 13 [Sunday]

PyCon-India-2010 CFP

After much debate on the list, it was decided some months ago to hold Pycon-India 2010 in Bangalore....Yay !!

Its scheduled to be held at MS Ramaiah Institute of Technology on the weekend of 25th and 26th of September 2010. The call for proposals has been announced on the PyCon blog site at http://pycon.blogspot.com/2010/06/pycon-india-2010-call-for-proposals.html.

You can tweet, dent and blog to spread the word around and as the event draws near there will be calls for volunteers on the mailing list, so do pitch in. Usually I keep away from some of the Indian communities which are riddled with a handful of rude jerks (whose favorite pass-time is flaming another person), or arrogant control freaks and even cyber-stalkers !

I've never understood how a silent majority can allow a loud-mouthed minority to overshadow all the good work they do. Beats comprehension!!

Well, thusfar, pycon-IN is one space I find different -- The event is community driven and run by volunteers, mailing list discussions can get hot and yet its open and transparent. The part I liked the most-- almost everything, including finances are open and available to mailing list members -- now THAT is very much unlike _some_ Indian event(s) with sekrit cabals pulling the financial strings behind a "community" veneer. Its such a welcome change that I try to pitch in when I can.

2010 June 6 [Sunday]

funkload installation on ubuntu lucid and hardy

Crediting my earlier failed installation attempt to the owl-like-shift for most of last week, yesterday, I started afresh on Ubuntu Hardy.

Ubuntu Hardy

I tried the installation on Ubuntu Hardy, which is the environment in which funkload will be installed for use. Installing tcpwatch-httpproxy removes procmail and sendmail.

Not good. Those packages are required by other parts of the system. Strangely this does not happen on Ubuntu 10.04, for which I repeated the installation to test separately. Earlier Ben had left a comment offering his help so I've emailed him the logs and am hoping to solve this problem and post another entry about that.

$sudo aptitude install tcpwatch-httpproxy --without-recommends
Reading package lists... Done
Building dependency tree      
Reading state information... Done
Reading extended state information     
Initializing package states... Done
Writing extended state information... Done
Building tag database... Done            
Couldn't find any package whose name or description matched "tcpwatch-httpproxy"
Couldn't find any package whose name or description matched "tcpwatch-httpproxy"
The following packages are unused and will be REMOVED:
  procmail sendmail-base sendmail-cf sensible-mda
0 packages upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
Need to get 0B of archives. After unpacking 3191kB will be freed.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
(Reading database ... 151156 files and directories currently installed.)
Removing sensible-mda ...
Removing procmail ...
Removing sendmail-base ...
Cleaning up the queues...find: /var/spool/mqueue: No such file or directory
done.
Removing sendmail-cf ...
Reading package lists... Done            
Building dependency tree      
Reading state information... Done
Reading extended state information     
Initializing package states... Done
Writing extended state information... Done
Building tag database... Done            


Ubuntu Lucid (10.04)

The experience of installing funkload on Lucid was a little better than Hardy, which was a small step ahead. Even if the installation failed, I tried the test-runner but the tests failed and I wanted to try it again with virtualenv. Likewise, the modules was not loading in TestRunner

(funkload)me@ubuntu10.04:~$ fl-run-test -v myFile.py
Traceback (most recent call last):
  File "/home/me/.virtualenvs/funkload/bin/fl-run-test", line 8, in <module>
    load_entry_point('funkload==1.12.0', 'console_scripts', 'fl-run-test')()
  File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/TestRunner.py", line 483, in main
    TestProgram(testLoader=test_loader)
  File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/TestRunner.py", line 342, in __init__
    self.loadTests()
  File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/TestRunner.py", line 352, in loadTests
    module_relative=False)
  File "/usr/lib/python2.6/doctest.py", line 2419, in DocFileSuite
    suite.addTest(DocFileTest(path, **kw))
  File "/usr/lib/python2.6/doctest.py", line 2338, in DocFileTest
    doc, path = _load_testfile(path, package, module_relative)
  File "/usr/lib/python2.6/doctest.py", line 219, in _load_testfile
    return open(filename).read(), filename
IOError: [Errno 2] No such file or directory: '/home/me/myFile'

Next it was 'make bench' which failed. So too with BenchRunner.

(funkload)me@ubuntu10.04:~$ fl-run-bench -u http://localhost:8080 -c 10:20 -D 30 myFile.py MyTestCase.testSomething
Traceback (most recent call last):
  File "/home/me/.virtualenvs/funkload/bin/fl-run-bench", line 8, in <module>
    load_entry_point('funkload==1.12.0', 'console_scripts', 'fl-run-bench')()
  File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/BenchRunner.py", line 606, in main
    bench = BenchRunner(args[0], klass, method, options)
  File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/BenchRunner.py", line 220, in __init__
    mmn_encode(method_name, 0, 0, 0), options)
  File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/BenchRunner.py", line 123, in load_unittest
    module = __import__(test_module)
ImportError: No module named myFile

2010 June 5 [Saturday]

Raga Darbari Kanada

"Devan ke pati Indra", composed in raga Darbari Kanada - Deshadi is a Hindustani raga composed by Svati Tirunal in HINDI language set to chowtaal. Pandit Ganapathi Bhatt, whose rendition is in two parts: Part one is around 8 minutes and part two is under 6 minutes, lends soul to one of the most beautiful Hindi bhajans that I have heard of Svati Tirunal, ala, Maharaja Svati Tirunal Rama Varma, a king from Travancore, now erstwhile Kerala.

Svati Tirunal's karnatic compositions were the first I learnt and it is not surprising that he was a prolific linguist, having composed music in 5 Indian languages. Most people can only learn multiple languages but imagine composing music in languages like Hindi,  Malayalam, Manipravalam, Sanskrit and Telugu -- they have different scripts, a different vocabulary and grammatical structure. That needs abnormally high intelligence. 

Had he been alive today, he would certainly put all the current narrow-minded egoists who play language-politics against Hindi to shame. I have never understood how politicians/people who cry hoarse against Hindi can readily accept English which is afterall a language we adopted after we were enslaved. But, i digress.

I noted the lyrics and all the scribblings (in brackets) are my notes made while listening to the song. These would not make much sense outside of a student wanting to learn this raga. I still prefer good old pen and paper as its easier to put small notations at each gamaka or niraval which is harder to do on a blog or a text file.

Pallavi:

देवन के पति इंद्रा ॥ तारा के पति चंद्रा ॥ 1 ॥  {repeat, देवन के....}
विद्या के पति गणेशा ॥ दुख भर हरी ॥ 2 ॥ {repeat pallavi: देवन के पति इंद्रा..}

Charanam ONE:

रागपति कानडा ॥ बजन के पति बिन ॥ 1 ॥|
रितुपति है बसंता (small aalap) ॥ रतिपति सुखकारी ॥ 2 ॥
{repeat pallavi: devan ke pati indra}

Charanam TWO:

मुनिजन पति व्यास (small aalap) ॥ पंछी पति हंसा (ट्वाइस, प्लस नीरावाल) ॥ 3 ॥
नर पति रामा (twice, small niraval+swaralapana) ॥ अवध विहारी ॥ 4 ॥
{repeat pallavi: devan ke pati indra}

Charanam THREE:

गिरीपती हिमाचल ॥ भूटान के पति महेशा ॥ 5 ॥
तीन लोकपति श्री (ट्वाइस, नीरावाल) ॥ पद्मनाभ गिरिधारी ॥ 6 ॥
{repeat pallavi: devan ke pati indra}

There is another wonderful Darbari bandish by Ustad Ghulam Hassan Shaggan (My guess is they are Pakistani singers as i've never seen them on the Hindustani classical circuit nor are their CD's available in any shops), and listening to him gives me goosebumps. Those aalaps at that age...wow, just wow!! This is my main grouse with karnatic music -- most karnatic music teachers dont want to teach aalaps. Their excuse being, students dont like to learn the hard stuff, or listeners dont like wasting time listening to boring aalaps. Doh! For me neither is true. I like mental challenges and certainly dont intend performing on stage. I'd hardly care if there is another listener around, rather I'd prefer to be alone with music, something that i can create and enjoy for myself. A very famous instrument artist had once said that he does not like to talk after a public performance and dislikes people asking for autographs, asking questions, smile and pose for pics, because he was lost in the trance that he just created through music and wanted to remain there, but he could not as he was a public figure. All he wants to do is sit in a corner thinking about a raga and I *totally* grok that feeling.

Well, now I want to check out the differences between a Darbari and the Darbari Kanada ragas. Some years ago I had created a webpage comparing Hindustani and Karnatic ragas and a listing of Ragas which are supposed to be sung only in the morning, evening and night ragas. I cant seem to find this page now. I'd declare it lost but plan to search all my backups before I give up searching.

2010 June 4 [Friday]

searching mailing lists

If you are a Mailman user please take a minute to help improve the Archives by answering this short survey. The survey asks you to name which list you searched and I had asked Terri why this should matter at all as I am subscribed as a user to hundreds of Linux-related mailing lists which are a mix of public archives, private archives and no archives or those that are archived via gmane, etc.... This makes it harder to answer for each list as the search mechanism is different for each. She replied that answering this survey question was not compulsary, type "I don't know.", but its kept there because it tells them if people are using a standard, default mailman setup or something different like gmane.

Yaniv has blogged about searching mailing list archives offline mode. If you are using a mobile connection in India, it would involve downloading chunks of data and then searching your directory offline using keywords. As I mentioned earlier the search mechanism varies for online mailing lists using mailman. If you use google you can specify the "site" + the keywords. But what if you dont know whether the list has that information of which month and year its archived under. What if your list has private archives? --This search is a wee bit harder than open mailing lists as you need to be subscribed to the list to be able to access the archives. If its a secure 'https' server, you cannot open multiple tab instances to search, and so on...

Searching mailing list archives is not impossible. Every one of us uses google and we all know how easy and/or hard it is to find what we are looking for -- finding relevant information which is also correct and fulfills your needs is a lot harder than we think. If I am looking for a particular "device driver" that does not allow wi-fi to work on my laptop, google might bring out a relevant page (including mailing list discussions) which may be too old, in that, they may ask me to manually doanload and install the "device driver" but the latest distro version I use may have solved the problem with a downloadable installer.

Probably the engine might search and list the pages by the Date and UTC timings but my point was that small things like these can make a big difference in the amount of time we spend looking for information. Machines or should I say the algorithms powering them can only do what we tell them to do. They are intelligent but not there yet.

2010 June 3 [Thursday]

funkload installation fail

I was analysing various tools for web-testing and tried out funkload - a functional, load web tester in Python.

$sudo easy_install -f http://funkload.nuxeo.org/snapshots/ -U funkload (and "sudo easy_install -U funkload" results are below:)
/usr/lib/python2.6/dist-packages/setuptools/package_index.py:156:
UserWarning: Unbuilt egg for setuptools [unknown version]
(/usr/lib/python2.6/dist-packages)
Environment.__init__(self,*args,**kw)/usr/lib/python2.6/dist-packages/setuptools/command/easy_install.py:216:
UserWarning: Unbuilt egg for setuptools [unknown version]
(/usr/lib/python2.6/dist-packages)
self.local_index = Environment(self.shadow_path+sys.path)
Searching for funkload
Reading http://pypi.python.org/simple/funkload/
Reading http://funkload.nuxeo.org/
Best match: funkload 1.12.0
Processing funkload-1.12.0-py2.6.egg
funkload 1.12.0 is already the active version in easy-install.pth
Installing fl-credential-ctl script to /usr/local/bin
Installing fl-monitor-ctl script to /usr/local/bin
Installing fl-build-report script to /usr/local/bin
Installing fl-run-test script to /usr/local/bin
Installing fl-record script to /usr/local/bin
Installing fl-install-demo script to /usr/local/bin
Installing fl-run-bench script to /usr/local/bin
Installing fl-credential-ctl script to /usr/local/bin
Installing fl-run-test script to /usr/local/bin
Installing fl-record script to /usr/local/bin
Installing fl-run-bench script to /usr/local/bin
Installing fl-monitor-ctl script to /usr/local/bin
Installing fl-install-demo script to /usr/local/bin
Installing fl-build-report script to /usr/local/bin
Using /usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg
Processing dependencies for funkload
Finished processing dependencies for funkload

$ fl-install-demo
Extract FunkLoad examples into ./funkload-demo : ... done.

Googling showed that Debian packages were 1.6.0 but easy_install pulls 1.12.0, hmm... continued with installing the dependencies:

$sudo apt-get install python-setuptools python-xml python-dev gnuplot (if you want the graphs)

$ cd funkload-demo/xmlrpc/
~/funkload-demo/xmlrpc$ make test

fl-credential-ctl cred.conf restart
Starting file_credential server at http://localhost:44401/ as daemon.
fl-run-test test_Credential.py -v
test_credential (test_Credential.Credential) ... FAIL
======================================================================
FAIL: test_credential (test_Credential.Credential)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/FunkLoadTestCase.py",
line 868, in __call__
testMethod()
File "/home/mom/funkload-demo/xmlrpc/test_Credential.py", line 21,
in test_credential
description="Check getStatus")
File "/usr/local/lib/python2.6/dist-packages/funkload-1.12.0-py2.6.egg/funkload/FunkLoadTestCase.py",
line 417, in xmlrpc
raise SocketError("Can't access %s." % url)
error: Can't access http://localhost:44401/.
----------------------------------------------------------------------
Ran 1 test in 0.007s
FAILED (failures=1)
make: *** [credential_test] Error 1

Apparently the version checked out via " sudo apt-get install -f http://funkload.nuxeo.org/snapshots/ -U funkloadinstall" is messed up -- the port number is weird.

Tried the same installation as blogged here and then I repeated the whole process with virtualenvwrapper for good measure. Virtualenv was a nicer place to try testing if each *.py file worked or not. Atleast some of the .py files ran and errors reduced but the one consistent error was the high port number. Strange that the Install file (or was it the Readme file?) lists localhost on port "http://localhost:33301/".

So although both installation methods failed spectacularly i wanted to document all the stuff that i tried for my reference. After an 18-hour day, blogging is the last thing on my mind but very often when I do some stuff, am tired after these marathon days, move on as i'm tired and dont document it. The next time I want to replicate the _exact_ method i followed earlier, I waste more time digging out stuff. This is especially true with eggs which break easily and i'm a vegetarian who dislikes omelette ;)


2010 June 2 [Wednesday]

Pbuilder installation on UbuntuHardy

Pbuilder, constructs a chroot system and builds a package inside the chroot. It is an ideal system to use to check that a package has correct build dependencies and to build clean packages to be tested and distributed. Debian uses pbuilder for packaging and they have lotsa manuals...

http://www.debian.org/doc/manuals/

http://www.debian.org/doc/FAQ/ch-pkgtools.en.html

http://www.debian.org/doc/manuals/maint-guide/ch-start.en.html

Pbuilder manual - Junichi Uekawa

https://help.ubuntu.com/community/BasicChroot

Ubuntu also uses Pbuilder for all their packaging work. Ubuntu has a Packaging Guide but i was following the instruction on the Ubuntu wiki page while trying to install it on hardy. Installed the dependencies and tried to create it.

$sudo pbuilder create --distribution hardy --othermirror "deb http://archive.ubuntu.com/ubuntu hardy main restricted universe multiverse"

Error!! "Command line parameter [.dsc] is not a valid .dsc file name"

The .pbuilderrc file was supposed to be created automagically but it wasnt.

Grr...stuff.

But it was nigelb and geser to the rescue and its the real-time responses that makes me addicted to IRC but I find it amusing that we use cryptic and terse mode of communication on irc as compared to complete sentences in email/forums. hmmm...not sure if this is good or bad in the long runbut switching modes suddenly makes it kinda weird.

$sudo pbuilder create

$sudo pbuilder update --override-config

Upgrading for distribution hardy
Building the build Environment
extracting base tarball [/var/cache/pbuilder/base.tgz]
creating local configuration
copying local configuration
Installing apt-lines
mounting /proc filesystem
mounting /dev/pts filesystem
policy-rc.d already exists
Refreshing the base.tgz
upgrading packages
Hit http://archive.ubuntu.com hardy Release.gpg
Hit http://archive.ubuntu.com hardy Release
Hit http://archive.ubuntu.com hardy/main Packages
Reading package lists... Done
dpkg - warning: ignoring request to remove lilo which isn't installed.
Obtaining the cached apt archive contents
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version.
dpkg-dev is already the newest version.
apt is already the newest version.
aptitude is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Copying back the cached apt archive contents
unmounting dev/pts filesystem
unmounting proc filesystem
creating base tarball [/var/cache/pbuilder/base.tgz]
cleaning the build env
removing directory /var/cache/pbuilder/build//15479 and its subdirectories

...and pbuilder was ready to be used.

$sudo apt-get update

Next it was pulling a package to build and source it via wget, apt-get, or dget for the .dsc file from packages.ubuntu.com -- only for packages in the ubuntu repo. If your code sits as a branch on your cvs, it wont be pulled from packages.ubuntu.com.

The 'Packaging from Scratch' section asks you to create a directory before using wget but its a different method when you are using a cvs. If its hosted on LP, use bzr to pull it::

$sudo bzr export -r73 /dest/dir lp:~systers/systers/stable

and make sure you dont create the "/dest/dir" by hand as bzr will protest that the file exists in the target directory but the target dir will be empty. Bzr export needs a non-existing destination as it will create the directory owned to root. Somewhere in the middle of changing the ownership it simply locked me out ...wtf? and the next steps failed quite obviously. Then I had to waste a lot of time deleteing each file and folder.

In between this, Bescom decided to be the royal pita that they usually are, conked off power for half the day-- they had some work being done at the supplying station and the engineer was even kind enough to warn the residents of our area that an electric pole was going to be replaced in the street this week so be prepared for power outages at intermittent intervals of 10-15 minutes outage all day as they would be testing. WTF? Telling him that electrical appliances dont tolerate this well got the stock reply "install an UPS". How kind of him to enlighten us. Dont I just love the way our government servants treat the tax-paying citizens.

Adding to the annoyance, nothing worked after that. dh_make, used to create a template for packaging would not be invoked and I recall reading somewhere that dh_make was supposed to be done right the first time, else it would not work. 

$dpkg-source -x *.dsc
dpkg-source: error: cannot open .dsc file ./*.dsc: No such file or directory

Oh ok, now I need to find out a solution for that as well as how to create a .dsc file for the source pulled from LP.

2010 May 17 [Monday]

zen of computerisation

Only we can introduce computers at banks and at the same time increase the paperwork by making the customer fill out one form to open an account, a second form to get a debit ATM card, a third form to get a cheque book and so on..... Sans pushing paper around it would seem the government babu's dont do any work...No can do, one has to look busy atleast!

Only we can create an online reservation system to book rail tickets whose website after 11:30 pm will show the following notice when you try to book tickets:

Booking (I-ticket and E-ticket ) is allowed from 5.00 to 23.30 Hours (Indian Standard Time) on all days including Sundays.
Greenwich Mean Time 23.30 and 18.00 Hours
Cancellation of E-ticket is allowed from 5.00 to 23.30 Hours (Indian Standard Time) on all days including Sundays (before chart preparation of the train).
Greenwich Mean Time 23.30 and 18.00 Hours

24x7? eh, what? do IT the Indian way!

2010 May 16 [Sunday]

a commercial opportunity

A visiting professor wrote about a commercial opportunity available at their college which is looking for folks who can set up a bulletin board and forum to answer questions from students. Here is a brief write up of the job:

a) Are you the one who can answer all the following questions without flipping / blowing your top off :
1) How can I use the vi editor to edit my file? What is Couchdb?
2) How can I compile my program better than typing javac myProgram.java / How can I use the Facebook OpenGraph API?


b) Are you someone who is willing to be surrounded by young minds willing to learn and open to learning new stuff? Are you willing to try new stuff that can help improve the spread of knowledge

c) Do you feel stifled by your job and are willing to try out the new technologies before settling on a steady corporate job? Have you wanted to improve the quality of learning? Have you yearned for infrastructure to try your ideas but did not find it. For example do you want to try a cluster ? Do you want to play around with Clojure and want a couple of interns / bright minds who can help you try Proof Of Concept ideas ?

d) Are you good in setting up forums / moderating online technical forums

e) Are you in Bangalore?

If all the above excites you and you want to contribute to the making of the next generation education institution this is your choice. Send a mail to nextgenerationbangalore@gmail.com with your resume and a short write up on why you fit the bill and we can start talking.

2010 May 8 [Saturday]

chaturanga

Sexual assaults involving ministers mixed with never-ending power-cuts make a heady summer mix. Its not surprising that the frequency of water cuts and power cuts has spiked the moment local Municipal elections voting got over. People have filed PIL's but KPTC/BESCOM cant seem to curb the power theft that occurs right under its nose, which is self-evident when you take a walk around any main street with shops and direct your gaze skyward to see the criss-crossing wires from each electricity pole situated on the roadside--all illegal but under the benign gaze of the officials. The shopkeeper will tell you why you could not get away with it without the connivance of the employees of inefficient BESCOM whose palms they regularly grease, lest its converted into "commercial rates" which is four times higher than the residential rates....and thus residential power theft continues. The powers that be are aware of the irregularities and yet dont care. What would it take to turn things around?

If that is the local state of affairs, the national level is no better. Nope, Sonia Gandhi, a woman at the helm has not changed things for the better. Its not uncommon for women to bear the brunt and pay the price when it comes to law-making policies. India has always had women politicians and yet the scams continue to tumble out of the closet catching the players on a sticky wicket, and we continue to live with corruption, lobbying for power while the money-making games continue, resulting in tacit compromises instead of clean governance. If anything politicians lack the will to root out corruption and a citizen has no choice when it comes to choosing a clean political party to represent them. Today, corruption and crimes are committed by politicians from just about every party and ideological frame of mind --Quid pro quo.

2010 May 6 [Thursday]

Unsubscribing from threads in Mailman

If you have ever subscribed to a mailing list that uses MM you would know about the concept of threads-- keeps ensuing replies woven in a threaded fashion making it easy to keep track of communication in a single flow. G has implemented the same concept as "conversations" for gmail users.

However, on most lists there comes a point in time when not every mail that is sent to the list is of interest. On some lists the threads run into hundreds of replies (err...flames if you must) and sometimes after the first email the ensuing "+1" and "yeah, I agree" top-posts will have you clicking the delete key.

Another alternative that many people use right now is the "digest mode", which just lumps all threads and mails it out to you each day. This is not without problems: It creates a different subject line that mucks up a reply in the archives, if you didnt take care to insert the "Re: " before the existing subject line with proper spacing. Even then it can sometimes break the thread in the archives and if you want to search the archives its yet another nightmare. Another problem is with archives which are stored in a monthly archive format but your conversation that started in January may continue into March. If its public mailing list then gmane or google comes to your rescue, else tough luck.

You dont have much choice when a default MM installation will not let you unsubscribe from a thread. Even gmail does not let you do this on google groups (that is another can of worms for another day) but currently in MM  you only have the option of deleting the uninteresting emails, digest or unsubscribing from the list alltogether if there is too much OT chatter.

But what if you had the option to mute by unsubscribing to an individual thread without leaving the mailing list alltogether? Dlist has a feature whereby the user can choose a particular thread or conversation that is interesting to participate, To continue an existing conversation you would continue with your reply by using the email "listname+SampleSubject@domain.tld" and to unsubscribe from a single thread use, "listname+SampleSubject+unsubscribe@domain.tld". To start a new conversation, you would type 'listname+new@domain.tld' as opposed to the old method of emailing the list 'listname@domain.tld'.

2010 May 5 [Wednesday]

Not so Lucid

Last weekend I upgraded to Lucid (Ubuntu 10.04) and these changes dont bother me at all, albeit the GUI changes were shocking at first-- buttons to close/maximize/minimize your application window are now on the left hand side and each new tab you open pushes the first ones to your right-- but being a forced right handed person has its advantages..... moi does adapt quickly...to the extent that 2-3 days into it, I like this quirky change.

I've always secretly wished a left-alignment over the years, especially when the gui window or browser overshot the screen visibility limits with no way to close the application. The left hand side of the frame is fixed. Its left me wondering why the UI was not developed with left-uppermost in mind --its the way we read and its just seems natural to let the left take over. Pun (un)intended. I might even be tempted to buy a left-handed mouse if the scroll buttons moved over to the left :) YMMV.

However, my personal break point from lucid was for divergent reasons. Its twofold- One, ssh. Although the server I tunnel into had issues with the ISP, the strange weirdness occurs after I tunnel in. Any key I type (even space bar or page down) after ssh'ing into the server throws gibberish :

debug3: Wrote 48 bytes for a total of 61063
debug3: Wrote 48 bytes for a total of 61111
debug3: Wrote 48 bytes for a total of 61159
debug3: Wrote 48 bytes for a total of 61207
debug3: Wrote 48 bytes for a total of 61255
debug3: Wrote 48 bytes for a total of 61303

These debug errors are not much fun when I cant see anything that I type on screen and since the screen scrolls, I am forced to copy paste from a text editor. Ssh just sucks atm.  Other server users dont have the same issue so I am wondering if this is lucid not handling ssh properly. I am not sure and dont have the time to experiment as I need stability ATM, which is tied to the second reason for not using lucid-- development takes place on 8.04 LTS, and I can safely revert  to 9.10 for personal use and not miss much.

UPDATE: No solutions came forth on IRC, except for a 'hald' suggestion which I need to read. Meanwhile, to cross check I tried logging in via another partition that runs 8.04LTS with the same -v (that is the verbose debug option) option that I used on 9.10 and on 10.04. It works like a charm everywhere except on the ubuntu 10.04 partition. On the face of it, it seems like a lucid bug but since I dont have much to go on, i cant file a bug. Arghh..

- page 2 of 12 -