Saturday, June 20, 2009

No theme index file.dpkg error

While trying to upgrade to texmacs 1:1.0.7.2-1in Sid (unstable) on a machine running Debian Lenny (Stable), I was getting the following error

$sudo apt-get install texmacs
// bunch of apt-get messages

Setting up texmacs-common (1:1.0.7.2-1) ...
gtk-update-icon-cache: No theme index file.dpkg: error processing texmacs-common (--configure):
subprocess post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of texmacs:
texmacs depends on texmacs-common (= 1:1.0.7.2-1); however:
Package texmacs-common is not configured yet.
dpkg: error processing texmacs (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
texmacs-common
texmacs
E: Sub-process /usr/bin/dpkg returned an error code (1)


Install the gnome-icon-theme package to solve this bug.
$sudo apt-get install -t stable gnome-icon-theme
//bunch of apt-get messages

Selecting previously deselected package gnome-icon-theme.
(Reading database ... 225097 files and directories currently installed.)
Unpacking gnome-icon-theme (from .../gnome-icon-theme_2.22.0-1_all.deb) ...
Setting up texmacs-common (1:1.0.7.2-1) ...
gtk-update-icon-cache: Cache file created successfully.
Setting up texmacs (1:1.0.7.2-1) ...
Setting up gnome-icon-theme (2.22.0-1) ...

Thursday, June 04, 2009

running external commands

  1. To run external commands while editing a file in vim, use the '!' in the normal mode. For example
    :!ls -al
    will list the files
    :!date
    will display the current date.

  2. To read the output of external commands into the current file, do
    :r !date
    All the commands are run in normal mode. Press ESC key to enter the normal mode in vim.

    Further reading:- :help :!

  3. To run external commands in octave, use the system command. Sample octave session looks as
    $octave -q
    octave:1> system("date")
    Thu Jun 4 23:49:23 EDT 2009
    ans = 0
    octave:2> [ret_code output] = system("date");
    octave:3> ret_code
    ret_code = 0
    octave:4> output
    output = Thu Jun 4 23:49:40 EDT 2009

    octave:5> exit
    Further reading :- "doc system" shows the relevant help pages in octave.

  4. To run external commands in Fortran 90 programs, use the system command. Sample code looks as below
    $cat system.f90
    program callsystem
    implicit none
    !to examine the behaviour of the system command
    character (len=100)::cmd
    cmd="echo Wake up Neo"
    !if u are using ifc compiler use -Vaxlib during compilation
    call system(cmd//achar(0))
    call system(cmd)
    call system("date")
    ! The next line also works.
    ! call system("ls")
    end program callsystem

    $gfortran system.f90

    $./a.out
    Wake up Neo
    Wake up Neo
    Thu Jun 4 23:55:07 EDT 2009
  5. To run the external commands in C, use the system command available in stdlib.h. Sample code will be
    $cat system.c
    #include stdio.h
    #include stdlib.h

    int main() {
    /* Fixme :- <, > in the header files are not showing up on blogspot */
    int ret_code;
    ret_code = system("date");

    printf("%d\n", ret_code);
    return 0;
    }

    $gcc -Wall system.c

    $./a.out
    Fri Jun 5 00:04:14 EDT 2009
    0

    Further reading :- man system

    All the above are tested in Debian Lenny using vim 7.1, octave 3.0.1, gfortran 4.3.1, gcc 4.3.1

Labels: , , , ,

Thursday, April 23, 2009

file test operators in bash

Often while writing shell scripts, various tests need to be performed on files. For example, we need to check if a file exists before copying it somewhere. We need to check the existence of a directory before writing files into it.

Bash comes with the following list of operators to perform these tests.

Operator Tests Whether
-e File exists
-f File is a regular file
-d File is a directory
-h File is a symbolic link
-L File is a symbolic link
-b File is a block device
-c File is a character device
-p File is a pipe
-s File is a socket
-t File is associated with a terminal

-N File was modified since last read
-O You own the file
-G Group id of the file is same as yours

-s File is not zero size

-r File has read permission
-w File has write permission
-x File has execute permission

-g sgid flag set
-u suid flag set
-k "sticky bit" set

F1 -nt F2 File F1 is newer than F2 *
F1 -ot F2 File F1 is older than F2 *
F1 -ef F2 Files F1 and F2 are hard links to the same file *


! NOT (inverts the sense of above tests)

* signifies a binary operator (requires two operands).


Reference :- Appendix B of "Advanced Bash-Scripting guide" by Mendel Cooper, Version 6.5. Debian users can get this document by installing the abs-guide package.

sudo apt-get install abs-guide

The necessary files can be found in /usr/share/doc/abs-guide . However, the abs-guide package contains only the html version of the document. A pdf version can be downloaded from http://www.tldp.org/LDP/abs/abs-guide.pdf .

Labels:

Monday, March 30, 2009

script to get the external IP address

When a machine sits behind a router, it has two IP addresses. One internal (assigned by the router), one external (assigned by the ISP). To find the external IP address of the machine, I use the following script called ip.
$cat ip
#! /bin/sh

# get the external IP address of the machine
# Author : Kamraju Kusumanchi
# Date : Mon Mar 30 00:08:11 EDT 2009

curl www.whatismyip.org
echo ""
On my machine, I have
$curl --version
curl 7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/0.6.5 libssh2/0.18
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
Execution
$which ip
/home/rajulocal/bin/ip

$ip
141.153.242.115

Labels: , ,

Saturday, February 14, 2009

IP spoofing with iceweasel

This tutorial explains how to spoof the IP addresses using iceweasel (firefox) web browser on machines running Debian Linux.

  1. Install the Iceweasel browser, tor button extension
    $sudo apt-get install iceweasel iceweasel-torbutton
  2. Install the privoxy, tor packages
    $sudo apt-get install privoxy tor
  3. Configure privoxy by adding the following line to /etc/privoxy/config
    forward-socks4a / 127.0.0.1:9050 .
    Note the '.' at the end. It is important.

  4. Restart the privoxy
    $sudo /etc/init.d/privoxy restart
    Restarting filtering proxy server: privoxy.
  5. Restart the tor daemon
    $sudo /etc/init.d/tor restart
    Stopping tor daemon: tor.
    Raising maximum number of filedescriptors (ulimit -n) to 32768.
    Starting tor daemon: tor...
    Feb 14 00:14:49.473 [notice] Tor v0.2.0.30 (r15956). This is experimental software. Do not rely on it for strong anonymity. (Running on Linux i686)
    Feb 14 00:14:49.474 [notice] Initialized libevent version 1.3e using method epoll. Good.
    Feb 14 00:14:49.474 [notice] Opening Socks listener on 127.0.0.1:9050
    done.
  6. Start the iceweasel. Use ctrl+2 to enable tor. The status of the tor button is visible in the right bottom box of the iceweasel window. The screenshots below might be helpful.





    Note: ctrl+2 acts as a toggle switch to enable/disable tor.

  7. Change the proxy. Right click on the tor button (bottom right corner of iceweasel) -> choose preferences -> select "use custom proxy settings"



  8. Click on "Test Settings" then click "ok" to test for proxy settings. If everything went successful, there will be a confirmation.



  9. Check the new spoofed "IP address" by visiting sites such as www.whatismyip.com etc., This will be the IP address seen by the websites you visit.

    Tor has its limitations. It will not give complete anonymity but something good enough for most purposes. Use at your own risk.

The above tutorial is tested in Debian Lenny, iceweasel 3.0.5, tor 0.2.0.30, privoxy 3.0.9, torbutton 1.2.0.

Back ground story :- While hopping around the internet, I came across some articles which claim to track the "identity thefters" via the IP address hits to a website. This is a good approach but we have to understand that it has its own limitations. Using this article, I just wanted to point out that it is very easy to hide one's IP address tracks. Dont be misled by the IP hits...

Labels: , , , ,

Saturday, October 25, 2008

open a new gvim window from gvim

To open a new gvim window from an existing gvim window use

:silent !gvim

If there are any errors in the original window, the screen can be refreshed by

:redraw!

or by simply pressing ctrl-l.

For more help, see :!cmd, :silent in the vim help pages.

This tip was tested in vim 7.0 on a machine running Debian Etch.

Labels:

Saturday, March 22, 2008

accessing wpa wireless networks

This article explains accessing a wireless connection with WPA TKIP encryption using a Dell Inspiron E1505 laptop running Debian Etch. The final network connection is going to look like

ISP <---> wrt54g router <---> Dell Inspiron E1505 laptop

where ISP is the Internet Service Provider such as roadrunner, comcast etc., (and in my case "clarity connect").

The main steps involved are
  1. configure the router
  2. Install the necessary software packages on the Debian machine
  3. encrypt the password (if necessary)
  4. add a network stanza in /etc/network/interfaces
  5. restart the network

The information about the wireless card can be found by using
sudo lspci --vv
In this case, we have
0b:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)
The router is configured as shown below.





The SSID stands for "Service Set Identifier". It is basically the name of the wireless network. In this example, it is set to "Raju_and_Satish". Change the SSID according to your network.

A list of available networks and their SSIDs can be obtained by using
iwlist scan

As can be seen from snapshot 2, the router is configured to use TKIP as its WPA encryption algorithm.

The "WPA Shared Key" (snapshot 2) is the place holder for setting a password to the network. Since the password is usually a bunch of ASCII characters, it is also referred as a "passphrase". In this example, the password for the network is "strongpassword". Change it according to your network.


Install the necessary software by using the apt-get command. I have installed
  • firmware-ipw3945
  • ipw3945-modules-2.6-686
  • ipw3945-modules-2.6.18-6-686
  • ipw3945d
  • wpasupplicant
I am not sure if all the above packages are needed for the network configuration, but I know that they are sufficient. If anyone knows a leaner version of the necessary packages, please let me know and I will update this list.


The next step is to generate an encrypted string known as the pre-shared key (PSK) from the ASCII password and the SSID. This can be achieved using the wpa_passphrase command.
$wpa_passphrase Raju_and_Satish strongpassword
network={
ssid="Raju_and_Satish"
#psk="strongpassword"
psk=604d8887badd597a8647f65b98c3c504ad29ba352211033adfed01cd8c3034a0
}

After this, add the following stanza to the /etc/network/interfaces.

# wireless setup
auto eth2
iface eth2 inet dhcp
wpa-conf managed
wpa-ssid Raju_and_Satish
wpa-key-mgmt WPA-PSK
wpa-psk 604d8887badd597a8647f65b98c3c504ad29ba352211033adfed01cd8c3034a0

Replace the wpa-ssid, wpa-psk with the values corresponding to your network configuration.

Then restart the network connections by doing
$sudo /etc/init.d/networking restart

Now the network should be up and running. Its status can be tested by using host, ping commands.

$host www.google.com
www.google.com CNAME www.l.google.com
www.l.google.com A 216.239.51.104
www.l.google.com A 216.239.51.99

$ping -c3 www.google.com
PING www.l.google.com (216.239.51.99) 56(84) bytes of data.
64 bytes from 216.239.51.99: icmp_seq=1 ttl=242 time=40.7 ms
64 bytes from 216.239.51.99: icmp_seq=2 ttl=242 time=40.9 ms
64 bytes from 216.239.51.99: icmp_seq=3 ttl=242 time=39.6 ms

--- www.l.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 10124ms
rtt min/avg/max/mdev = 39.616/40.437/40.985/0.635 ms

Labels: , , , ,

Tuesday, February 26, 2008

weather in ithaca

To find the weather in Ithaca using a Linux box, add the following lines to the ~/.weatherrc . Use /etc/weatherrc for site-wide configuration.
$cat /home/rajulocal/.weatherrc
[default]
City = ITHACA
Forecast = True
ID = KITH
St = NY
After that you can get the current weather conditions and forecast by using the weather command.
$weather
Current conditions at Ithaca Tompkins Regional Airport (KITH)
Last updated Feb 26, 2008 - 05:56 PM EST / 2008.02.26 2256 UTC
Wind: from the WNW (300 degrees) at 3 MPH (3 KT)
Sky conditions: obscured
Weather: light snow; mist
Precipitation last hour: A trace
Temperature: 31.1 F (-0.5 C)
Relative Humidity: 95%
City Forecast for Ithaca, NY
Issued Tuesday afternoon - Feb 26, 2008
Tuesday night... Low 21, 100% chance of precipitation.
Wednesday... Snow showers, high 22, 80% chance of precipitation.
Wednesday night... Low 9, 40% chance of precipitation.
Thursday... Very cold, high 19.
Thursday night... Low 9.
Weather uses METAR data that it fetches from the the National Oceanic and Atmospheric Administration and forecasts from the National Weather Service. The list of weather stations and their codes can be obtained from http://www.rap.ucar.edu/weather/surface/stations.txt .

Tested on Debian Etch using
$weather --version
weather 1.2
Related links :-
  1. http://debaday.debian.net/2007/10/04/weather-check-weather-conditions-and-forecasts-on-the-command-line/
  2. http://www.rap.ucar.edu/weather/surface/stations.txt
  3. http://en.wikipedia.org/wiki/METAR

Labels: , ,

Thursday, November 22, 2007

browse gcc source code

To browse the source code of gcc use http://gcc.gnu.org/viewcvs/ . For example, to look at the contents of trunk/gcc/testsuite/gcc.c-torture/execute/ directory, just go to http://gcc.gnu.org/viewcvs/trunk/gcc/testsuite/gcc.c-torture/execute/ . Similarly, to view the contents of a particular file, say pr34130.c use http://gcc.gnu.org/viewcvs/trunk/gcc/testsuite/gcc.c-torture/execute/pr34130.c?revision=130258&view=markup

Situation:
Recently, a miscompilation bug has been discovered in gcc. It affects all the gcc versions from 3.3.6 to 4.2.2. This bug is fixed in 4.3.0 and a testcase trunk/gcc/testsuite/gcc.c-torture/execute/pr34130.c has been added to the testsuite so that the same problem does not arise in the future versions. I wanted to take a quick peek at this file but was not ready to download 1.2 gigabytes of gcc's svn repository just for this. The above tip came in handy under this scenario.

Alternate solutions:
1. If you are familiar with svn, it is possible to do
svn -q co svn://gcc.gnu.org/svn/gcc/trunk/gcc/testsuite/gcc.c-torture/execute execute
and download just the trunk/gcc/testsuite/gcc.c-torture/execute directory.

Related links :-
  • http://gcc.gnu.org/svn.html
  • http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34130
  • http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=452108

Labels: , ,

Saturday, October 13, 2007

list of predefined macros

Situation:

guile-1.8_1.8.2+1 failed to build on alpha architecture. The complete build log can be found at http://buildd.debian.org/fetch.cgi?&pkg=guile-1.8&ver=1.8.2%2B1-1&arch=alpha&stamp=1188086025&file=log

The buildlog tells us that the problem is in line 96 of test-round.c . To debug the problem further, the source of guile-1.8 can be downloaded by using

$cd practice/guile/
$apt-get source --download-only guile-1.8
$dpkg-source -x guile-1.8_1.8.2+1-2.dsc
$cd guile-1.8-1.8.2+1/

To see where test-round.c is residing

$find . -iname '*test-round.c*'
./test-suite/standalone/test-round.c

Now when we look at the source code of test-round.c around line 96

$cd test-suite/standalone/
$vim +96 test-round.c

we find that there is a predefined macro called DBL_MANT_DIG . But what is its value? More generally, how can we get a list of all the predefined macros and their values?

Solution:
The answer is surprisingly simple. Just do

$g++ -E -dM - < /dev/null

#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __DEC64_DEN__ 0.000000000000001E-383DD
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __FLT_EVAL_METHOD__ 2
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __GNUC_PATCHLEVEL__ 3
#define __DEC64_MAX_EXP__ 384
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __UINTMAX_TYPE__ long long unsigned int
#define __linux 1
#define __DEC32_EPSILON__ 1E-6DF
#define __unix 1
#define __LDBL_MAX_EXP__ 16384
#define __linux__ 1
...

Since our interest is in the predefined macro DBL_MANT_DIG, the above output can be filtered by using grep.

$g++ -E -dM - < /dev/null | grep -i __DBL

#define __DBL_MIN_EXP__ (-1021)
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __DBL_MIN_10_EXP__ (-307)
#define __DBL_DIG__ 15
#define __DBL_MAX__ 1.7976931348623157e+308
#define __DBL_HAS_INFINITY__ 1
#define __DBL_MAX_EXP__ 1024
#define __DBL_MIN__ 2.2250738585072014e-308
#define __DBL_HAS_QUIET_NAN__ 1
#define __DBL_HAS_DENORM__ 1
#define __DBL_MANT_DIG__ 53
#define __DBL_EPSILON__ 2.2204460492503131e-16
#define __DBL_MAX_10_EXP__ 308

This clearly tells us that DBL_MANT_DIG is 53 on this particular machine. More information about macros like DBL_MANT_DIG can be found in files
  • /usr/share/doc/glibc-doc-reference/html/Floating-Point-Parameters.html
  • /usr/share/doc/glibc-doc-reference/html/IEEE-Floating-Point.html
  • /usr/share/doc/glibc-doc-reference/html/Library-Summary.html
etc., which are all part of glibc-doc-reference package. On a Debian machine, this package can be installed by doing

$apt-get install glibc-doc-reference

Monday, October 01, 2007

websites incompatible with iceweasel

As we all know, iceweasel is basically a renamed version of firefox in Debian. The renaming was due to licensing issues. Except for the renaming there is no difference between firefox and iceweasel.

The following are the list of websites that wont work properly with iceweasel. The tests are performed with iceweasel 2.0.0.16, Debian Etch (Stable).


It is not very difficult to design a website which works the same way on all the browsers. I wonder why these companies are so incompetent in putting up a W3C standard complaint web site and not use any proprietary software. It also makes one wonder, if it would be better to take the business to companies who have the decency/ability to set up a browser-friendly website?

Updated on : Sep 25, 2008; Oct 1, 2007

Labels: ,

Monday, September 03, 2007

initializing multi dimensional arrays in octave

In octave, multi dimensional arrays can be initialized using the reshape function. As an example, consider the following script.

$cat multidimensional_array.m
1;
a = zeros(1, 24);
for i=1:24
a(i) = i;
end
a
b = reshape(a, [4 3 2])

The output looks as follows

$octave -q
octave:1> multidimensional_array
a =

Columns 1 through 16:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Columns 17 through 24:

17 18 19 20 21 22 23 24

b =

ans(:,:,1) =

1 5 9
2 6 10
3 7 11
4 8 12

ans(:,:,2) =

13 17 21
14 18 22
15 19 23
16 20 24



octave:2>

Labels:

Wednesday, August 29, 2007

thecarpcstore website is down

$date
Wed Aug 29 13:16:35 EDT 2007

In case you do not know, the support forum for complainterator hosted at http://thecarpcstore.com/phpbb2/ is currently down due to a massive DDoS attack. This is the second time spammers have DDoSed complainterator forums. On a positive side, this shows what an enormous effect complainterator reports are having in shutting down spammer's websites. Good job complainterator! You rock!

Related Links :
  • http://complainterator.com/news.html
  • http://weblog.complainterator.com/

Labels: ,

Tuesday, August 14, 2007

gmail and orkut got hacked or what?

$ date -R
Tue, 14 Aug 2007 20:34:30 -0400

Am I seeing this correctly? Did someone really manage to hack into google's servers? Some of google's popular websites such as gmail, Orkut seem to be down. I assume it is a temporary problem (a DDOS attack?). Whatever it is, it is impressive to see some non-english garbage on these popular websites.

Oh, I almost forgot, here are the screenshots for posterity :-)


Tuesday, July 17, 2007

tabs inside krusader

Krusader is a very nice file manager with lots of features. One thing that I find useful everyday is its ability to have multiple directories in different tabs. The following screenshot shows the location of these tabs in both the panes.




Here I am using Debian Etch (Stable), Qt: 3.3.7, KDE: 3.5.5, Krusader: 1.70.1 "Round Robin" . The above screenshot is produced by ksnapshot, edited by kolourpaint.

Labels: ,