Monday, December 21, 2009

Debugging Java

On the JVM, start with options:

'-Xdebug -Xrunjdwp:transport=dt_socket,address=41422,server=y,suspend=n'

and then use jdb to connect to the port 41422.

Installing JDK 1.5 on Ubuntu

First download JDK from Sun site (also requires filling up a form). Then follow the steps at:

http://www.debian-administration.org/article/Installing_Sun%27s_Java_environment_on_Debian_systems

In particular one important step is running:

fakeroot make-jpkg jre-1_5_0_03-linux-i586.bin

Tuesday, December 15, 2009

Using Multiple Java versions

For building Katta, I needed to use Java 6 (compilation did not work with Java 1.5). Now I have two java versions installed on my dev laptop. To make use of Java 6, I just needed to set JAVA_HOME and PATH appropriately (export PATH=$JAVA_HOME/bin:$PATH) and then the compilation worked fine.

Thursday, November 26, 2009

My gdbinit file

GDB config file, includes STL Support (works with gdb 7.0):

set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3

python
import sys
sys.path.insert(0, '/home/amit/downloads/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

Monday, November 16, 2009

Date output for a distinct filename

On unix,

> date +%Y-%m-%d-%H-%M-%S
2009-11-16-16-33-48

outputfile=/tmp/my-application-output-`date +%Y-%m-%d-%H-%M-%S`.txt

Friday, November 6, 2009

Ubuntu: Upgrade from 9.04 to 9.10

Overall the upgrade was okay. Was not entirely smooth, as 1-2 applications automatically got uninstalled and I had to install them again. Seems Canonical, the company behind Ubuntu, supports not everything I installed. In particular, openerp-server which was difficult to install in the first place, caused some issues with the upgrade and I have to uninstall it. Will install it again later.

Update : I dont know if it is just me or the new Ubuntu has better music drivers. I am using Rhythmbox, and I think the quality of music is better after the upgrade.

Its like falling in love with Ubuntu all over again.

Epiphany: The Fastest Browser on Ubuntu

I accidently landed upon Epiphany recently and I am loving its speed.

Ubuntu: Missing Skype from Panel?

I accidently made some change in my panel, and after that there was no way left to access skype after O minimized it. To correct this, I proceeded as per http://ubuntuforums.org/showthread.php?t=194980 . Just add "Notification Area" in your panel.

The same would work for dropbox and other application that might have recently disappeared from the panel. 

Wednesday, November 4, 2009

Starting an EC2 Instance for Company-wide Development Tasks

I spent quite a bit of time today setting up an EC2 instance that will soon host a private svn and trac. First, I installed "Elasticfox" firefox extension and ec2 tools from Synaptic Package Manager.

Created a generic account (amazon does not allow EC2 instances to be transferred from an account to another, so don't use your personal account to set up an instance for your company) using a generic email, say sales@mycompany.com.

Then go through the process of setting up your AWS account and starting using EC2 (you'll need credit card for this). This process is quite straightforward thanks to the amazon ui (at a few places there are ambiguities though). 

Now next I have to set up svn and trac on the EC2 instance. For the company-wide password management, probably LDAP would also be needed. Seems like an onerous task. Lets see tomorrow.

Tuesday, October 27, 2009

Turning Off the Annoying Windows Beep (on Server 2003)

I followed http://www.howtogeek.com/howto/windows/turn-off-the-annoying-windows-xp-system-beeps/ and yes, while doing it, I had to restart the server!

Monday, October 26, 2009

Installing Hudson as a Service on Vista

Keep in mind the issue discussed at
http://www.mikebosch.com/?p=137

Doxygen Doxyfile Changes I Usually Do (To the Default Generated File)

RECURSIVE = YES
EXTRACT_ALL = YES
REFERENCES_RELATION    = YES
REFERENCED_BY_RELATION = YES

the following for browsing through sources:
SOURCE_BROWSER = YES
INLINE_SOURCES = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES

for collaboration diagrams:
HAVE_DOT =YES

Sunday, October 25, 2009

Mediawiki SMTP Setup On Windows

Mediawiki is surely not fun to work with. There are thousands of configurations needed to set up the basic/essential functionalities like SMTP. To use secure SMTP with gmail SMTP server, I had to install PEAR as per http://articles.sitepoint.com/article/getting-started-with-pear/2 and then run "pear install --alldeps Mail-1.1.14". After this I restarted my web server (apache in my case). So much for SMTP.

Windows sleep command

Poor man's sleep command in windows:

PING 1.0.0.0 /n 1 /w 5000 #sleep 5 sec

Tuesday, October 20, 2009

Installing Secure SVN Server on Windows

I set out to set up a SVN server on Windows with secure authentication.

I started out with setting svn server as per http://www.codinghorror.com/blog/archives/001093.html. Then I followed http://turnleft.inetsolution.com/2007/07/how_to_setup_subversion_apache_1.html.

In the middle I got stuck with htpasswd command as it would not execute, saying "Illegal character :". Something to do with the file path. So I installed cygwin, including openssl (followed http://daveonsoftware.blogspot.com/2007/06/installing-cygwin-with-openssl-package.html). After this the htpasswd command worked fine.

Then, as per http://raibledesigns.com/wiki/Wiki.jsp?page=ApacheSSL I set up apache with ssl.

I tried to start Apache, but won't. In Event Viewer I saw it returned error code 1. As per http://www.issociate.de/board/post/474531/2.2.6_won%27t_start_-_The_Apache2.2_service_terminated_with_service-specific_error_1_%280x1%29..html I debugged httpd.exe using command line. It said "DAV is not allowed here". The following configuration (amendment over the "turnleft" solution above) worked (I have replaced SVNParentPath by SVNPath too):

<location /svn>
DAV svn
SVNPath C:/svn/repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile conf/svn-passwd.pass
AuthzSVNAccessFile conf/svn-authz.conf
Require valid-user
</location>

Creating a service under windows

http://www.codinghorror.com/blog/archives/001093.html describes how to create a service under windows:

sc create svnserver binpath= "c:\svn\bin\svnserve.exe --service -r c:\svn\repository" displayname= "Subversion" depend= Tcpip start= auto

sc config binpath = ...

Thursday, October 15, 2009

Latex Figure Numbering Incorrect

As per http://www.terminally-incoherent.com/blog/2007/04/14/latex-fixing-wrong-figure-numbers/, latex figure caption should be put before label, otherwise you will probably get the figure numbers incorrect, as I did.

Tuesday, October 13, 2009

Useful Synchronized Notes

Tomboy Notes is a simple note-taking utility, I first discovered while using Ubuntu Linux. The good thing is, tomboy can also be used together with Dropbox to synchronize notes between computers -- this is quite simple, just set the preferences of Tomboy Notes to sync to a local folder within the local Dropbox directory.

Dropbox

Dropbox is a nifty tool to share files between computers. In a nutshell, anything within a folder is synchronized on to the Dropbox server. The content on the Dropbox server is also available on other computers in which you install Dropbox. By default, it gives 2GB of free space.

Thursday, October 8, 2009

Using Xterm on Ubuntu

gnome-terminal does not have much configurable font size. I started using my old love among terminals called xterm. http://dnh500.blogspot.com/2007/05/use-xterm-in-ubuntu.html is good about how to edit your menu to make xterm readily usable. http://ubuntuforums.org/showthread.php?t=702664 is about configuring xterm.

My simple .Xdefaults file:

! you should run> xrdb < ~/.Xdefaults
xterm*font: -*-lucidatypewriter-medium-r-*-*-12-*-*-*-*-71-iso8859-*
xterm.vt100.background:black
xterm.vt100.foreground:grey

Wednesday, October 7, 2009

VMWare Player with Ubuntu on Windows Vista

Just a short note. This is quite easy: just follow the instructions at http://johnbokma.com/mexit/2005/11/07/vmware-player-ubuntu-installation.html

Probably a more straightforward way is to download from http://www.vmware.com/appliances/

Saturday, October 3, 2009

Trying out Medical on Ubuntu 9.04

Checking out Medical (sourceforge project of the month). Depends on OpenERP. Trying to install OpenERP. But seems to be non-trivial task. OpenERP has problems and can't install with Ubuntu 9.04. Will forget about using Ubuntu for Medical, and try Windows later.

Wednesday, September 30, 2009

Hudson: Memory Leaks and Other Issues

Continuation of earlier post at http://triviaatwork.blogspot.com/2009/09/hudson-too-has-problems-subversion.html


Out of Memory
The memory usage of Hudson build system rose to 800MB or so after I left it to run for a couple of weeks. Some component seems to be causing leaks. There have been earlier complaints about memory leaks in Hudson, for example, http://www.nabble.com/hudson-memory-leak-td23221034.html but not sure whether these issues were confirmed and/or solved. As per Hudson "Memory Leak Document" at http://wiki.hudson-ci.org/display/HUDSON/I%27m+getting+OutOfMemoryError, I have restarted JVM with the suggested option of "-XX:+HeapDumpOnOutOfMemoryError". I am not running Hudson under distributed build. It is possible that some plugin is eating the memory.

Doxygen Plugin
With doxygen plugin I get:

FATAL: error

hudson.AbortException: The directory 'C:\Users\g0700201\.hudson\jobs\\workspace\docs\doxygen_html' doesn't exist.

        at hudson.plugins.doxygen.DoxygenDirectoryParser.retrieveDoxygenDirectoryFromDoxyfile(DoxygenDirectoryParser.java:278)

CCCC Plugin


I dont know how anybody ever got this plugin to work. Will cccc I get:

Parsing cccc results

hudson.AbortException: Parsing file error

        at com.thalesgroup.hudson.plugins.cccc.CccccParser.invoke(CccccParser.java:76)

        at com.thalesgroup.hudson.plugins.cccc.CccccParser.invoke(CccccParser.java:50)

Saturday, September 19, 2009

Using Thunderbird within NUS / Setting up LDAP

One of the difficult-to-use functionalities of Thunderbird (popular with Linux/Ubuntu users) seems to be the LDAP address book. The reasons for this unfriendliness may be diverse (one of them usually is MS likes to define its own standards). I tried setting up the LDAP using several combinations like the below copied from NUS Computer Center site:
  • Choose Add Dir.
  • For ldap-server, enter ldapstf.nus.edu.sg (for staff address book) or ldapstu.nus.edu.sg (for student address book)
  • For search-base, enter DC=stf,DC=nus,DC=edu,Dc=sg (for staff address book) or DC=stf,DC=nus,DC=edu,Dc=sg (for student address book) Set use-implicitly-from-compose and Pine will lookup names you type in the To: line while composing messages in the directory. If there are multiple names that match you will be prompted to select from a list of matching entries.
Believe me I tried a lot of different combinations but I could not succeed (at the time of writing). Finally the following getaround satisfactorily worked for me:

I had setup thunderbird with IMAP. I installed the add-on "Email Address Crawler" https://addons.mozilla.org/en-US/thunderbird/addon/9995 which crawls all mails and reads addresses into the address book. Then I ran the crawler on my Inbox and Sent Mail. This was enough for all the email addresses I usually use.

I also checked the option: "Preferences > Composition > Addressing >  Automatically Add Outgoing Email Addresses to My: ".

Monday, September 14, 2009

Hudson Too Has Problems (Subversion Update Mode)

Check out the updates below as well.

I was wishing that hudson would not have many bugs, as its GUI is quite sleek. But turns out it is not so. I'm facing a curious problem: although I've set to "svn update", hudson always tries to delete the workspace at the end of the build, and always fails. This problem has been reported before here: https://hudson.dev.java.net/issues/show_bug.cgi?id=86&historysort=new.

The bug report says the issue is already fixed, but I am facing the same problem even now. It may be triggered because I am using "local directory" option to check out svn code into a particular subdirectory in the workspace (then it is an another bug).

On a side note: The fix of the above bug report is scary -- just a "/" can cause such a mess -- this probably means the code is not too well written; that's why I'm facing a similar bug.

Update:  Sept 22, 2009
I am quite happy with hudson so far, although I had trouble here and there. In summary I face the following troubles currently:
  1. Hudson deletes the svn checked out code (using CMakebuilder), even when "use svn update" is marked. To work around, I've reverted to clean build, and reduced the frequency of checkout. Update: It turns out the problem was due to CMakebuilder plugin, which cleaned up the directory, not hudson.
  2. I'm not sure how to use Hudson CMakebuilder plugin on windows. To work around, I modified the shell script provided at http://schneide.wordpress.com/2009/04/07/cmake-builder-plugin-for-hudson/. Then Hudson complained that it can't execute sh, so I installed cygwin and appended its bin directory into my PATH environment variable. I don't have time to try cmakebuilder again after installing cygwin, but that might also work fine. I believe that the CMakebuilder plugin has created more problems for me than it solved. It needs to be rewritten. I will try to do it next week. 
  3. I can't install Hudson as a Windows Service through the dashboard. I'm getting AccessDenied error as below, even though the current user has Admin privileges.

    WMI.WmiException: AccessDenied
    at WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
       at WMI.WmiRoot.ClassHandler.Invoke(Object proxy, MethodInfo method, Object[] args)
       at WMI.Win32ServicesProxy.Create(String , String , String , ServiceType , ErrorControl , StartMode , Boolean , String[] )
       at winsw.WrapperService.Run(String[] args)
       at winsw.WrapperService.Main(String[] args)

But overall Hudson has worked for me quite well, and with almost no hassle.

Sunday, September 13, 2009

Installing CDash

The cmake guys have the CDash tool for producing test reports. It is difficult to find comprehensive information about the details of installing CDash (on the same lines, it is difficult to find information about using CMake).Here I am dealing with CDash 1.4.2. I did the following:

Warning: Read Conclusion at the end of this post now.


* download Apache and PHP  as described at http://public.kitware.com/Wiki/CDash:Installation. Make sure you enable the PHP modules as listed on the Kitware link.
* configure PHP and Apache as described at "Configuring PHP" and
"Running PHP 5 as an Apache Module" respectively on this page: http://www.thesitewizard.com/php/install-php-5-apache-windows.shtml
* Download CDash and copy to apache htdocs directory (remove the CDash version number if any)
*Create cdash/config.local.php as on the Kitware link.
* Now I tried to open http://localhost/CDash/login.php in my web browser. This returned "Fatal error: Allowed memory size of 134217728 bytes exhausted" at line 180 of config.local.php. Reading this file revealed that the file recursively included itself. So I commented out the lines as follows:

//$localConfig = dirname(__FILE__).'/config.local.php';
//if ( file_exists($localConfig) )
//  {
//  include($localConfig);
//  }

After this change, the url opened file. The only remaining thing now is to set up the database.
* I installed MySQL as at Kitware link. During installation I set an administrator account called 'root'. I use this account to login into MySQL. Then I run:

mysql> create database cdash;
mysql> create user 'cdash'@'localhost' identified by 'passwd';
mysql> grant all privileges on cdash.* to 'cdash'@'localhost' with grant option;

I make the corresponding changes in cdash/config.local.php to set the:

// Hostname of the database server
$CDASH_DB_HOST = 'localhost';
// Login for database access
$CDASH_DB_LOGIN = 'cdash';
// Password for database access
$CDASH_DB_PASS = 'passwd';
// Name of the database
$CDASH_DB_NAME = 'cdash';
// Database type (empty means mysql)
$CDASH_DB_TYPE = 'mysql';

There were errors even now, as I tried to register a new user. Then I tried to open http://localhost/CDash/install.php -- this indicated:

Database Type:mysql
Database Hostname:mysql
Database Login:cdash
Database Name:cdash

Admin Email: __________
Admin Password: ______

This is different from what I wanted -- I wanted the Database hostname to be "localhost". I could not figure out how CDash set it to mysql (I think this is a bug; which does not augur well for CDash. Probably it has a lot of bugs). Anyway, I proceeded with creating an Admin by filling Email and Password. This worked.

There is still some problem with opening http://localhost/CDash/index.php. This just shows some php script -- so the PHP script is probably malformed.

Conclusion: I think it would be too much effort to work with CDash as even installation is so tedious. I'll move to using Hudson for now, which from my limited previous experience was rather user-friendly.

Friday, August 28, 2009

Second Interaction with Tesseract OCR

I had quite some fun during the first interaction with Tesseract. While some of the outputs of the recognizer was good, others were not reasonable at all. I want to debug it -- but the best possible way seems to be their new viewer in java. To make it run, I followed the instructions as given on the above link (the only problem was that they call piccolo-1.2.jar/piccolox-1.2.jar while the downloaded file was named piccolo.jar/piccolox.jar).

After this I tried running
tesseract phototest.tif test1 segdemo inter
as per their instructions, but it would not work. I realized this is because of missing file at /usr/local/share/tessdata. Therefore, I did:

sudo cp -R /tessdata/* /usr/local/share/tessdata/

But this undid the change done previously (in the first installment) for english recognition. Therefore I had to copy the eng data files again:

sudo cp -R /tessdata/eng.* /usr/local/share/tessdata/

After this I ran the viewer on my own image. It worked but it kept on saying

ScrollView: Waiting for server...
ScrollView: Waiting for server...
ScrollView: Waiting for server...
ScrollView: Waiting for server...

Some problem with starting the server. I retried with the image they provide in as instructed on their page and it worked. If it does not work for you (it did fail for me once or twice), make the change as described under "Java problems" on the link above and make, copy the new tesseract binary to /usr/local/bin.

Sometimes I had to manually kill the previous java GUI as it would not allow the GUI to start the next time.

I still have not not been able to run the viewer with my own images. Some catch there.

Thursday, August 27, 2009

Rdesktop woes: Connecting from Linux to Windows Vista

I use rdesktop on Ubuntu to connect to Windows Vista on univ lan. Some time after I connect, the connection hangs. A little search on Ubuntu forums revealed that setting Control Panel > Mouse > styles to (none) can reduce/eliminate the hanging. Even now the connection intermittently freezes, but the frequency is much lesser and the duration of freeze is lesser too.

I also installed "GRDC" Gnome RDC client, which works quite well (as well as windows rdesktop client).

Still in lookout for a better solution to connect to Vista, without the freezes.

Excluding Multiple Directories using Doxygen EXCLUDE tag

After a lot of search I found at http://developer.kde.org/documentation/library/howto.php how one can specify multiple excluded sub-directories in the following format:

EXCLUDE = {directory 1} {directory 2} ...

Doxygen is such a nifty tool. The pleasure would have been additional if the config files contained very simple format examples.

Default Doxyfile for Code Understanding

The most often use-case of doxygen for me is to quickly understand the source code. Several of the configurations within the default-generated doxyfile are different from the way you would like it to be to generate detailed information for understanding the code. Below I paste the diff that can be used to patch the default generated doxyfile to configure it for code understanding. The config below assumes we have installed the "dot" tool (installing dot is a good idea anyway as it is a nifty graph display tool).

28c28
< project_name =" ---"> PROJECT_NAME = project_name
300c300
< extract_all =" NO"> EXTRACT_ALL = YES
305c305
< extract_private =" NO"> EXTRACT_PRIVATE = YES
310c310
< extract_static =" NO"> EXTRACT_STATIC = YES
473c473
< show_directories =" NO"> SHOW_DIRECTORIES = YES
590c590
< recursive =" NO"> RECURSIVE = YES
683c683
< source_browser =" NO"> SOURCE_BROWSER = YES
688c688
< inline_sources =" NO"> INLINE_SOURCES = YES
700c700
< referenced_by_relation =" NO"> REFERENCED_BY_RELATION = YES
706c706
< references_relation =" NO"> REFERENCES_RELATION = YES
738c738
< alphabetical_index =" NO"> ALPHABETICAL_INDEX = YES
977c977
< generate_latex =" YES"> GENERATE_LATEX = NO
1342c1342
< have_dot =" NO"> HAVE_DOT = YES
1390c1390
< uml_look =" NO"> UML_LOOK = YES
1482c1482
< dot_transparent =" NO"> DOT_TRANSPARENT = YES

First Interactions with Tesseract OCR on Ubuntu Linux

I am on Ubuntu 9.04. My primarily goal here is to informally evaluate how Tesseract performs on some documents, including handwritten samples. After downloading, building and installing tesseract as at http://code.google.com/p/tesseract-ocr/w/list I ran tesseract over a jpg file containing the sample text.

$> tesseract text_image.jpg result
Unable to load unicharset file /usr/local/share/tessdata/eng.unicharset

I made the changes as per comment by caitifty on Feb 28, 2009 (sigh, there is no permalink) at http://code.google.com/p/tesseract-ocr/wiki/ReadMe . The change is to replace/add the tessdata directory at /usr/local/share/tessdata . After this, I get

$> tesseract text_image.jpg result
Tesseract Open Source OCR Engine
name_to_image_type:Error:Unrecognized image type:text_image.jpg
IMAGE::read_header:Error:Can't read this image type:text_image.jpg
tesseract:Error:Read of file failed:text_image.jpg
Segmentation fault

It appears that it does not recognize jpg file input. So I use imagemagick's "convert" tool to convert to tif format that tesseract seems to recognize.

$> convert text_image.jpg text_image.tif

and then

$> tesseract text_image.tif result
Tesseract Open Source OCR Engine
Image has 8 * 3 bits per pixel, and size (1000,171)
Resolution=200

$> cat result.txt

The last command produced the recognized text. The results were quite good.

Wednesday, August 19, 2009

Sourceforge: Recovering Wikispaces Dump after Migration to Mediawiki

Are you confused with what they at sourceforge say about the process to recover wikispaces dump? https://sourceforge.net/apps/wordpress/sourceforge/2009/07/29/wikispaces-being-removed-from-sourceforge-net-2009-07-30/

Don't be. It is easy. I did this (as described at https://sourceforge.net/apps/trac/sourceforge/wiki/SFTP):

:~$ sftp {user name},{project name}@frs.sourceforge.net
Connecting to frs.sourceforge.net...
The authenticity of host 'frs.sourceforge.net (216.34.181.57)' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'frs.sourceforge.net,216.34.181.57' (RSA) to the list of known hosts.
{user name},{project name}@frs.sourceforge.net's password:
sftp> help
sftp> cd /home/groups/c/cr/crackpot
sftp> ls
cgi-bin htdocs persistent wikispaces-dump.zip
sftp> get wikispaces-dump.zip
Fetching /home/groups/c/cr/crackpot/wikispaces-dump.zip to wikispaces-dump.zip
/home/groups/c/cr/crackpot/wikispaces-dump.zip 100% 648KB 49.8KB/s 00:13
sftp> quit

Monday, August 10, 2009

Flickr with Linux (Aug 10, 2009)

I am trying to upload a large number of photos onto my pro flickr account. I tried the following tools:
* Postr
* Fireuploader (firefox plugin)
* jUploader

Postr and Fireuploader appear buggy and have a somewhat unintuitive interface. I struggled with them a lot. Finally I read somewhere on the net about jUploader.

I downloaded jUploader (not present in Synaptic Package Manager on my ubuntu). After authentication, the first problem I faced is that it does not recognize "JPG" (uppercase) extension. So I had to change all my filenames to lowercase using

rename 'y/A-Z/a-z/' *

I also changed the default permission on upload from public to private from its menu. Then I just dragged and dropped my photos onto jUploader, selected all photos, added to photoset and clicked on upload. It worked just fine after this. Although not perfect, jUploader was close.

Note: I faced the problem of "I don't recognize this file format" because there was no privilege to read the image file as my current user.

I installed the flock browser, which also worked just fine (or should I say marvellously fine).

Friday, July 31, 2009

Rotating Wallpaper/Desktop Background in Ubuntu

Drapes is a cool tool to automatically periodically rotate ubuntu wallpaper. Just install it and then configure by System > Preferences > Desktop Drapes

Thursday, June 18, 2009

Some Refactoring Notes

Used to indent code:

find . \( -name "*.hpp" -or -name "*.cpp" \) | xargs astyle --indent=spaces=4 --brackets=block --indent-labels --pad=oper --one-line=keep-statements --convert-tabs --indent-preprocessor

Generating Code::Blocks Project using Cmake:

cmake -G "CodeBlocks - Unix Makefiles" ..

Regular Expressions used during refactoring using Code::Blocks:

search replace

utility::shared_ptr<([\w ]*)> \1\&

What Sucked

There is no machine learning in the editors. Therefore, every task has become repetitive.

Wednesday, June 17, 2009

Understanding boost::ptr_container

Pointer containers are exception-safe container of pointers. Using them can be slightly frustrating for the users of the standard library containers, because the interface of ptr_containers are slightly different from that of standard library containers.

For example, you would probably expect from a vector of pointers to return a pointer when you perform indirection:

std::vector v;
int* p = v[i]; // ok

But ptr_vector returns a reference:

std::vector v;
int* p = v[i] ; // error: does not compile
int& p = v[i]; // ok

But the interface of ptr_vector is suited to work with algorithms:

find(v.begin(), v.end(), 3); // works only with ptr_vector

Transform Iterators

The transform_iterator can used with maps to traverse over just the keys or just the values contained in the map. An adaptor can be written to convert a usual iterator of a map into an iterator that traverses only over the value. This adaptor would have to be rewritten for ptr_map and its relatives because of its different interface.

Erasing An Element Using auto_type

typedef boost::ptr_set S;
S s;
int* j = new int(3);
s.insert(j);
s.insert(new int(5));
s.insert(new int(7));
S::iterator it = s.find(3);
s.release(it);
std::cout << *j << std::endl; // produces 0xfeeefeee using VS

If the second last line is changed to

S::auto_type r =s.release(it);

the correct value 3 is printed. r acts just like auto_ptr: it holds a reference to the object and thus prevents it from destruction. The user has the responsibility to destroy r when the object is no longer needed. r can also be dereferenced:

std::cout << *r << std::endl; // prints 3

and the pointer can be released using r.release().

Known Issues

Currently, you also cannot store a pointer to a const inside the ptr_container.

Comparison with std container of pointers

TODO

Comparison with std container of shared pointers

TODO

Conclusion

The different interface of ptr_containers can be frustrating for new users but hopefully not so much after reading this article. The newer interface makes clear that the ptr_container has exclusive ownership and thus reduces bugs when compared to using a standard container of pointers.

Wednesday, June 10, 2009

Latex Image

Useful converter of jpeg to eps (the converted eps can be used with graphicx package):

jpeg2ps -h -r 600 image.jpg > image.eps

Thursday, May 28, 2009

Connecting to Wired Connection on Linux, Else to Wireless

This did not seem to work on my linux system. It would always first try to connect to wireless and when that failed, it would just sit there. I had to manual do ifdown and ifup on the wired interface. I asked about this question on the ubuntu mailing list, and they recommended wicd.

Wicd connects to a wired connection if there is any, else allows you to connect to a wireless. It works just fine, but does not connect to the wireless automatically (not sure though, probably only sometimes). But I what I needed works just fine with wicd and I am totally satisfied.

Thursday, May 7, 2009

Upgrading to Jackalope

The new version 9.04 of Ubuntu is out. I followed http://www.shivaranjan.com/2009/05/01/ubuntu-linux-how-to-upgrade-to-ubuntu-904-jaunty-jackalope-from-ubuntu-810-intrepid-ibex/ to upgrade. Now this was some time back, and now I vaguely remember initially I had some sound problems. Other than that, it has been running just fine without any problems whatsoever.

Wednesday, May 6, 2009

Back to Wired Connection

I am on Intrepid Ibex. After a long time, I decided to use wired connection instead of wireless. But nothing would happen when I would connect the wire. I tried "sudo /etc/init.d/networking restart" but does not work. Finally I did "sudo ifup eth0" a couple of times. It is then that wired network started working.

Friday, April 17, 2009

Beamer Font Problem

I installed the latex-beamer package on my ubuntu, and the example at http://latex-beamer.sourceforge.net/ compiled with warnings like

LaTeX Font Warning: Font shape `OT1/cmss/m/n' in size <4> not available
(Font) size <5> substituted on input line 87.

Further, in the dvi output the headings did not appear well. Compiling with another example from http://www.math.utah.edu/~smith/Beamer showed the same problem.

This was a RED HERRING. Finally, when I built the ps from the dvi, all worked just fine.

Thursday, March 26, 2009

Python

I am trying to run matplotlib but seems it is not installed on my windows (ActivePython 2.6) package. Therefore I was looking for a good way to install it. Now, it is a part of several scientific libraries and these libraries have different installers.

One good way to install is using easy_install, but it looks not possible for python 2.6. Finally I gave up on easy_install. I downloaded the matplotlib library (for python 2.5 as there is none corresponding to 2.6).

Finally I concluded that there is little support for python 2.6 and I uninstalled the 2.6 version and installed the 2.5 version.

Wednesday, March 25, 2009

Installing Mingw

I tried installing Mingw for ease of writing scripts (an alternative is Powershell, but I am not quite familiar with it). Mingw installer is quite fragile.

First, you have to make sure the directory where you are installing has no space character in its name. Next, they "recommend" installing in C:\Mingw.

Third, when I tried a custom install with g++ and mingw-make included, there was a problem: the link connection to mingw-make download site never worked. This lead to problems during installation. I retried the installation (giving the same installation path), but the same problem occurred again and again. Finally I did a standard installation, which worked just fine.

I will retry installing the mingw-make by updating mingw later on (right now the connection breaks).

Saturday, February 7, 2009

Skype with Ubuntu Woes

I spent a long time trying to fix this issue of skype with ubuntu ibex. Seems to have been fixed now after following the steps described in a comment at the following link (the comment is posted below):

http://tips4nongeeks.blogspot.com/2009/01/skype-sound-problem-in-ubuntu.html#comment-form

I'd encourage you to "try" this - I don't have much technical insight into why this works, so it might not work for your case. For mine it did. I am using Acer Aspire laptop.

Hello friends,

after messing with commands and stuff around to try to
solve the famous skype echo, I finally solved this pain in the ass!!
for intrepid ibex ubuntu.

If you follow this step by step your skype should work, at least I garantee that you will learn something.

so first of all don’t use the commands to remove any package
from your ubuntu specially pulseaudio, is useless and you will have an other pain in the ass trying to find what package to install:

1) for the audio playback echo (when trying to make a call),

-go to the small skype logo located in the bottom left corner
when you are loged in skype-> go to options-> sound devices

- change all default options to “pulse”.

Now you should be able to make a call test without the message
‘audio playback problem’ or stuff like that.

And you will have the next typical echo that your microphone
will not be working.

2) for the microphone echo (im using a headset):

-go to the upper panel in your window where is all the application-places-system options, in the right upper corner you will find a small speaker icon-> right click with the mouse-> open volume control-> preferences-> select all options specially those like headset- capture-capture1-capture2- input source- etc. those are not working !!!!

-now in the volume control ->label “options”-> change default options for “Mic” and “Digital Mic1″.

-in the next label “recording”-> maximum volume for all the stuff.

- The device should be “HDA alsa mixer”

-finally confirm in ->system-> preferences-> sound preferences, that the sound capture is set to “HDA analog (ALSA)” similar to the previous point.

Now you can try to record something with the ’sound recorder program’
it should work.

And the best Skype should work, no shity messages no shity problems (although when I use the inbuild mic instead of my headset the sound is so so).

I hope my suggestions are useful.

best of luck,

bye.

Friday, January 9, 2009

Refactoring my c++ code using bash

Renaming variable names within code
find . \( -name "*.h" -or -name "*.cpp" \) | xargs grep -i ActionResource -l | sort | uniq | xargs sed -i 's/ActionResource/Actuator/g'

and similarly for actionResource, ACTIONRESOURCE, ACTION_RESOURCE

find . | grep -v ".svn" | xargs grep -l TemporalInterval | xargs sed -i 's/TemporalInterval/TimeInterval/g' <-- this is for CMakeLists.

Renaming files
find . \( -name "*.h" -or -name "*.cpp" \) | sed 's/\(.*\)ActionResource\(.*\)$/mv "&" "\1Actuator\2"/'| grep ^mv | sh

Deleting ! files from svn
svn stat | grep ! | cut -f 3- -d " " | xargs svn del