Sunday, August 4, 2013

R - commands cheat sheet

To read a text file
> data <- read.csv('R - anon answers to total answers.txt',sep=",",header=TRUE)

To convert cells (row-column pairs) satisfying a certain condition to NA.
> data$Column[data$Column == 0] <- NA
> data$Column[data$Column == -Inf] <- NA

To generate a linear model from the data
> linear=lm(data[,2]~data[,1])
> polynomial=lm(data[,2]~data[,1]+I(data[,1]^2))
> loglinear=lm(logdata[,2]~logdata[,1])

To get a summary of the generated models
> summary(linear)
> summary(polynomial)

To plot data
> plot(data[,1],data[,2])
> plot(data[,2]~data[,1])
> plot(log(data[,1]),log(data[,2])) 

Adding text to plot
> text(c(300,300),c(0.8,0.82),labels=c("R^2 = 0.0001","y = 0.00072 * x - 0.163"))

To draw the linear model generated using "lm" command
> abline(linear)

We can draw polynomial curve generated using lm/glm using
> lines(sort(x), linear$fitted.values[order(x)])

To generate log-linear models using the glm package
> glm_test2=glm(data[,2]~data[,1],family=poisson())
> glm_test2=update(glm_test,.~.+I(data[,1]^3),family=poisson())

We can compare different linear models generated using lm or glm commands through anova tests. When there are more than 2 models, model-1 is compared to null hypothesis, model-2 with model-1, model-3 with model-2 and so on.
> anova(glm_test,glm_test2,glm_test3,glm_test4,glm_test5,glm_test6,glm_test7,glm_test8,glm_test9,glm_test10,test = "Chisq")


vmware tools copy-paste feature in Ubuntu

You will need the vmware tools for having the feature to copy-paste feature between the VM and the host machine. Installing vmware tools on an Ubuntu machine was a little tricky.

You can find the instructions at: Installing VMware Tools in an Ubuntu virtual machine (1022525)

References:
1. http://communities.vmware.com/thread/395491?start=0&tstart=0
2. http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&docType=kc&docTypeID=DT_KB_1_1&externalId=1014294
3. http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&docType=kc&docTypeID=DT_KB_1_1&externalId=1022525

Saturday, August 3, 2013

Extract range of lines from text file in unix

It is possible to use command line sed to easily extract a range of lines from a text file. The command to be used is:
sed -n 16224,16482p filename > newfile


Where 16224,16482 are the start line number and end line number, inclusive. This is 1-indexed. 
-nsuppresses echoing the input as output, which you clearly don't want; 
the numbers indicate the range of lines to make the following command operate on; 
the command p prints out the relevant lines.

References:
http://stackoverflow.com/questions/83329/how-can-i-extract-a-range-of-lines-from-a-text-file-on-unix

Motorola Atrix - Unlocking bootloader and reflashing ICS

I recently tried unlocking the boot loader to load Ice Cream Sandwich onto my Atrix MB860 phone. During the process, I had some difficulties, and wanted to document the steps for future reference (and for other's benefit).

Unlocking bootloader

This webpage(Installing Atrix-MROM on an Atrix 4G with 4.5.145 update) mentioned it is possible to unlock Atrix4G with 2.3.6 Gingerbread and 4.5.145 update using the unlock instructions given here: Automatic bootloader UNLOCK/ROOT for AT&T 1.26/1.57/1.83/4.5.91 [UPDATE 07/31/11]

I followed the instructions in Automatic bootloader UNLOCK/ROOT for AT&T 1.26/1.57/1.83/4.5.91 [UPDATE 07/31/11]. To unlock I used option-1 (Automatic Bootloader Unlock for ATT ATRIX 4G Only), and then selected the option 3 (4.5.91). It threw a "unable to boot" screen, and gave around 10 options (first option was RSD and second was fastboot, and some others followed) and automatically started the fastboot mode - but windows was not able to recognize the device. Since the instructions on the terminal were asking us to select the fastboot mode by pressing  "volume down+power" combo, I removed the battery for 30 seconds and tried it multiple times but the phone was not booting. At last after few trials it booted to fastboot mode. the terminal instructions showed an unlock code and asked me to enter it (probably option3 - Apply FIX for "Failed to boot 0x1000"/ NO OS Users (fastboot) must have been initiated). Later the phone restarted automatically and I reached the "Welcome to MOTOBLUR" screen. During the motorola boot screen, I saw "unlocked" on the top left corner.

This video should help out too: http://www.youtube.com/watch?v=S6a0BWquqAc

Flashing ROM

I then selected "Automatic ROOT/CWM for Unlocked ATT ATRIX 4G Only (Tenfar CWM)" for backing up my old ROM.

It is to be noted that the cell battery does not get charged while in the boot menu and connected to a power source (either a computer or the power port on the wall). While trying to flash ROM, I received a "Low battery to flash error". For the battery to charge, I need to flash a ROM and flashing was not possible at the moment.

I purchased an external battery charger like the enercell universal external battery charger and charged the battery completely. Now I was able to flash a new ROM.

I followed the instructions at this XDA forum webpage to solve the soft brick issue during the flash process.

After launching ICS, I was unable to download apps from playstore. So removed the gmail account and re-added it without sync as per this forum .

References:
1. http://forum.xda-developers.com/showthread.php?t=1182871
2. http://forum.xda-developers.com/showthread.php?t=2230432&highlight=unlock+bootloader
3. http://forum.xda-developers.com/showthread.php?t=2262869&highlight=soft+brick
4. http://forums.androidcentral.com/google-nexus-7-tablet/224884-google-play-error-solution-rpc-s-5-aec-0-a.html

Saturday, May 11, 2013

Migrate VM from VMware Player to VirtualBox

I had to migrate a VM from VMware player to VirtualBox once. VMware player does not provide any "Export" option from the GUI, but there is a conversion tool called OVF tool in the C:\Program Files (x86)\VMware\VMware Player\OVFTool location.

Open the command prompt and go to the location of the OVFTool. This tool takes two arguments - the source VM (its .vmx file) and the destination VM (a .ovf file). Type in the source .vmx file (the VMware VM's) file location as source and provide the destination path where the .ovf file should be created.
ovftool "C:\VMWare VMs\Ubuntu.vmx" "C:\VirtualBox VMs\Ubuntu.ovf"

Its takes a long time to create the OVF file. Once done you should be able to load the VM in VirtualBox using "Import Appliance" feature.

While importing I encountered an error:


....unknown element "Config" under Item element, line 47.
Result Code: VBOX_E_FILE_ERROR (0x80BB0004)
Component: Appliance
Interface: IAppliance {3059cf9e-25c7-4f0b-9fa5-3c42e441670b}


This happens because there are some additional configurations embedded in the created OVF file which VirtualBox does not recognise. To solve this error, just open the .ovf file using a text editor (its a simple xml file) and delete the lines containing the "Config" tag. Now you should be able to import the VM to VirtualBox.

References:
1. http://www.howtogeek.com/125640/how-to-convert-virtual-machines-between-virtualbox-and-vmware/
2. http://sharepointtherapy.blogspot.com/2012/12/converting-vmware-workstation-machines.html

Monday, April 15, 2013

Installing latest Python and Scrapy on Planetlab

This post handles multiple issues, which need to be applicable to PlanetLab alone. I was following many instruction references from CentOS, so I believe the instructions are applicable there too.

Running Latest version of Python(>=2.7) on PlanetLab:
PlanetLab uses fedora 8, and yum update installs Python 2.5. So we need to install Python from source. Initially install the dependancies.
sudo yum groupinstall "Development tools"
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

Create a directory for installing Python in your home directory. Then download and extract the Python source.
mkdir ~/python
wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar zxfv Python-2.7.2.tgz
find ~/python -type d | xargs chmod 0755

Install from the source code.
cd Python-2.7.2
./configure --prefix=/home/user/python
make
sudo make install

Then edit the PATH environment variable, so Python always refers to the one installed in the home directory. Make sure the addition is before, the default /usr/bin (containing the old Python) should have lesser preference than the one in our home directory.
vi ~/.bashrc
export PATH=/home/user/python/bin/:$PATH
source ~/.bashrc

NOTE: Sometimes you might need to logout and login to observe the change in PATH variable.

Installing easy_install for the version in local home directory:
The easiest way to install "easy_install" is using the egg script. Download the egg script and run it using "sh".


su
wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
sh setuptools-0.6c11-py2.7.egg

Now when you type "which python" and "which easy_install" you should be able to see they point to the versions in the home directory.

Installing Scrapy on PlanetLab:
Scrapy depends on many packages (installation using yum) which makes it hard to run using latest Python2.7 that we installed locally. The trick is to setup a "virtualenv" - python virtual environment, which enables us to have multiple Python installations run parallelly and let us use different installations for different projects.

Install virtualenv, and create a project space.
easy_install virtualenv
virtualenv --distribute project_name
source project_name/bin/activate

After the last instruction, your shell prompt will look like "(project_name) user@server$", indicating you are now in the virtual environment. Also, there should be a local folder titled "project_name".

Now install the Scrapy dependencies. We cannot simply use "easy_install Scrapy", because easy_install would then install latest versions of dependencies (like pyOpenSSL) which do not work on PlanetLab. When I say they do not work, I meant I couldn't make them work. Installing latest version of pyOpenSSL gave a gcc error saying some symbols are missing like in [2]. So we use a hack - install earlier version. These are sufficient for using Scrapy, so we dont break any functionality (atleast I did not come across any case so far).

Install pyOpenSSL 0.12 (latest is 0.13) from egg file.
wget https://pypi.python.org/packages/2.7/p/pyOpenSSL/pyOpenSSL-0.12-py2.7-win32.egg#md5=c343e3833b725e060c094bbf33349349
easy_install pyOpenSSL-0.12-py2.7-win32.egg

Install other dependencies. I guess now yum uses Python 2.7.2 since we are in the virtualenv. Because of that libxml2 being installed was for Python 2.7.
sudo yum install libxml2-devel
sudo yum install libxslt-devel

Now install Scrapy.
easy_install Scrapy

Now to test if it is properly installed, type "python" on the shell prompt, and when you launch Python type "import scrapy" after the python prompt ">>>" to test the import the successful.

References:
1. http://toomuchdata.com/2012/06/25/how-to-install-python-2-7-3-on-centos-6-2/
2. http://stackoverflow.com/questions/11084863/istalling-scrapy-openssl
3. https://pypi.python.org/pypi/pyOpenSSL/0.12
4. https://pypi.python.org/pypi/setuptools#rpm-based-systems
5. http://stackoverflow.com/questions/10927492/getting-gcc-failed-error-while-installing-scrapy

Saturday, April 6, 2013

Installing Python SetupTools on 64-bit Windows


I already installed Python 2.7 on Windows 7 64-bit. When I try to run the installer for setuptools it tells me that Python 2.7 is not installed. The specific error message is:

"Python Version 2.7 required which was not found in the registry"

This seems to be a known error. As indicated in reference [2].
"Apparently (having faced related 64- and 32-bit issues on OS X) there is a bug in the Windows installer. I stumbled across this workaround, which might help - basically, you create your own registry value HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.6\InstallPath and copy over the InstallPath value from HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.6\InstallPath. See the answer below for more details.


If you do this, beware that setuptools may only install 32-bit libraries."

I followed instructions in reference [1].
"Apparently, the setuptools msi is looking for the Python installation registry value InstallPath in HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.6\InstallPath. Notice the Wow6432Node, which is a registry compatibility layer used for 32-bit apps in Windows 7 64-bit.

As far as I can tell, InstallPath is the only value that this installer looks for. Therefore, using regedit, you can create your own registry value HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.6\InstallPath, and copy over the InstallPath value from HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.6\InstallPath. To be paranoid, you can try replicating the entire cluster, not just InstallPath.

After this, installation for setuptools seems to proceed correctly. Note that this may only install 32-bit libraries -- WoW6432 is a compatibility layer. Check the other documented solution to this problem if this is not sufficient."



Following the instructions seems to solve the issue, and setuptools installation succeeded.

References:
1. http://selfsolved.com/problems/setuptools-06c11-fails-to-instal/s/63
2. http://stackoverflow.com/questions/3652625/installing-setuptools-on-64-bit-windows