insserv: warning: script ‘K01vmware’ missing LSB tags and overrides

May 13, 2012 | Filed Under Uncategorized | Leave a Comment 

Note to self: if apt-get dist-upgrade explodes on Debian Squeeze with the error

Setting up initscripts (2.88dsf-13.1+squeeze1) ...
insserv: warning: script 'K01vmware' missing LSB tags and overrides
insserv: warning: script 'S50vmware-USBArbitrator' missing LSB tags and overrides
insserv: warning: script 'vmware-USBArbitrator' missing LSB tags and overrides
insserv: warning: script 'vmware' missing LSB tags and overrides
insserv: There is a loop between service rmnologin and mountnfs if started
insserv:  loop involving service mountnfs at depth 8

(more output snipped)

Then follow the instructions of post rldleblanc at http://communities.vmware.com/thread/337769:

rldleblanc
35 posts since
05-Aug-2005

7. 05-Dec-2011 11:14   in response to: SamSpade
Re: Vmware Player Prevents Aptitude from Installing Debian Packages
Probably a cleaner way to approach this is to use /etc/insserv/overrides.
Do the following:

Create /etc/insserv/overrides/vmware with the following:

### BEGIN INIT INFO
# Provides:          vmware
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 5
# Default-Stop:      2 3 5
# Short-Description: VMware VMX service for virtual machines
# Description:       Allows running of VMware virtual machines.
### END INIT INFO

Create /etc/insserv/overrides/vmware-USBArbitrator with the following:

### BEGIN INIT INFO
# Provides:          vmware-USBArbitrator
# Required-Start:    $remote_fs $syslog vmware
# Required-Stop:     $remote_fs $syslog vmware
# Default-Start:     2 3 5
# Default-Stop:      2 3 5
# Short-Description: Start daemon when vmware starts
# Description:       Enable service provided by daemon.
### END INIT INFO

Then run 'chmod +x /etc/insserv/overrides/vmware*

This prevents the fix from being broken with an update to the shipped init.d
script and my fix your USB problem. Since I don't use USB in a VM, I can't
test it.

Robert


R, MAKEFLAGS, rpath, and building packages

May 11, 2012 | Filed Under Uncategorized | Leave a Comment 

On our HPC at work we need to build various libraries and packages from source, and install them to custom locations. Putting everything in /usr/local is not an option because of dependencies on particular versions of various libraries (and many of these packages are not available through the distro’s package manager). While building RODBC for a colleague I encountered a problem with library paths:

library(RODBC)
Error in dyn.load(file, DLLpath = DLLpath, ...) :
   unable to load shared object
'/opt/RODBC/RODBC_1.3-5/RODBC/libs/RODBC.so':
   libodbc.so.1: cannot open shared object file: No such file or directory
Error: package/namespace load failed for ‘RODBC’

The author of the package claimed that the solution is in the documentation, but I disagree. For the benefit of anyone who comes across this problem, here’s a log of how I debugged the problem.

First try to build with no options at all. Fails because it can’t find sql.h, as expected:

carlo@r500:/opt/src/RODBC> R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz
* installing *source* package ‘RODBC’ ...
** package ‘RODBC’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -std=gnu99 accepts -g... yes
checking for gcc -std=gnu99 option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sql.h usability... no
checking sql.h presence... no
checking for sql.h... no
checking sqlext.h usability... no
checking sqlext.h presence... no
checking for sqlext.h... no
configure: error: "ODBC headers sql.h and sqlext.h not found"
ERROR: configuration failed for package ‘RODBC’
* removing ‘/opt/RODBC/RODBC_1.3-5/RODBC’
* restoring previous ‘/opt/RODBC/RODBC_1.3-5/RODBC’

Now set location for ODBC library, using environment variables, as per the documentation:

export ODBC_INCLUDE=$ODBC_ROOT/include
export ODBC_LIBS=$ODBC_ROOT/lib

carlo@r500:/opt/src/RODBC> R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz
* installing *source* package ‘RODBC’ ...
** package ‘RODBC’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -std=gnu99 accepts -g... yes
checking for gcc -std=gnu99 option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sql.h usability... yes
checking sql.h presence... yes
checking for sql.h... yes
checking sqlext.h usability... yes
checking sqlext.h presence... yes
checking for sqlext.h... yes
checking for library containing SQLTables... -lodbc
checking for SQLLEN... yes
checking for SQLULEN... yes
checking for long... yes
checking size of long... configure: error: cannot compute sizeof (long), 77
See `config.log' for more details.
ERROR: configuration failed for package ‘RODBC’
* removing ‘/opt/RODBC/RODBC_1.3-5/RODBC’
* restoring previous ‘/opt/RODBC/RODBC_1.3-5/RODBC’

This error is an error itself; the problem is actually with linking against libodbc. The usual Unix way is to set LDFLAGS, so let’s try that:

export LDFLAGS="-L/opt/odbc/odbc-2.3.0/lib\ -Wl,-rpath\ /opt/odbc/odbc-2.3.0/lib"
R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz

* installing *source* package ‘RODBC’ ...
** package ‘RODBC’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.
ERROR: configuration failed for package ‘RODBC’
* removing ‘/opt/RODBC/RODBC_1.3-5/RODBC’
* restoring previous ‘/opt/RODBC/RODBC_1.3-5/RODBC’

Perhaps not. After reading more, I found that “R CMD INSTALL” can make use of the MAKEFLAGS environment variable, in which whitespaces have to be escaped (how odd). So let’s turn off LDFLAGS and try with that:

unset LDFLAGS
MAKEFLAGS='LDFLAGS=-L/opt/odbc/odbc-2.3.0/lib\ -Wl,-rpath\ /opt/odbc/odbc-2.3.0/lib' R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz

carlo@r500:/opt/src/RODBC> MAKEFLAGS='LDFLAGS=-L/opt/odbc/odbc-2.3.0/lib\ -Wl,-rpath\ /opt/odbc/odbc-2.3.0/lib' R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz
* installing *source* package ‘RODBC’ ...
** package ‘RODBC’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -std=gnu99 accepts -g... yes
checking for gcc -std=gnu99 option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sql.h usability... yes
checking sql.h presence... yes
checking for sql.h... yes
checking sqlext.h usability... yes
checking sqlext.h presence... yes
checking for sqlext.h... yes
checking for library containing SQLTables... -lodbc
checking for SQLLEN... yes
checking for SQLULEN... yes
checking for long... yes
checking size of long... configure: error: cannot compute sizeof (long), 77
See `config.log' for more details.
ERROR: configuration failed for package ‘RODBC’
* removing ‘/opt/RODBC/RODBC_1.3-5/RODBC’
* restoring previous ‘/opt/RODBC/RODBC_1.3-5/RODBC’

This still fails, so maybe we can try the LD_LIBRARY_PATH?

MAKEFLAGS='LD_LIBRARY_PATH=/opt/gcc/4.4.2/lib64:/opt/gcc/4.4.2/lib:/opt/odbc/odbc-2.3.0/lib\ LDFLAGS=-L/opt/odbc/odbc-2.3.0/lib\ -Wl,-rpath\ /opt/odbc/odbc-2.3.0/lib' R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz

* installing *source* package ‘RODBC’ ...
** package ‘RODBC’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -std=gnu99 accepts -g... yes
checking for gcc -std=gnu99 option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sql.h usability... yes
checking sql.h presence... yes
checking for sql.h... yes
checking sqlext.h usability... yes
checking sqlext.h presence... yes
checking for sqlext.h... yes
checking for library containing SQLTables... -lodbc
checking for SQLLEN... yes
checking for SQLULEN... yes
checking for long... yes
checking size of long... configure: error: cannot compute sizeof (long), 77
See `config.log' for more details.
ERROR: configuration failed for package ‘RODBC’
* removing ‘/opt/RODBC/RODBC_1.3-5/RODBC’
* restoring previous ‘/opt/RODBC/RODBC_1.3-5/RODBC’

Nope, LD_LIBRARY_PATH is ignored when it’s inside MAKEFLAGS. Let’s be psychic and set it as a shell environment variable instead:

export LD_LIBRARY_PATH=/opt/gcc/4.4.2/lib64:/opt/gcc/4.4.2/lib:/opt/odbc/odbc-2.3.0/lib
MAKEFLAGS='LDFLAGS=-L/opt/odbc/odbc-2.3.0/lib\ -Wl,-rpath\ /opt/odbc/odbc-2.3.0/lib' R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz
* installing *source* package ‘RODBC’ ...
** package ‘RODBC’ successfully unpacked and MD5 sums checked
checking for gcc... gcc -std=gnu99
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc -std=gnu99 accepts -g... yes
checking for gcc -std=gnu99 option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking sql.h usability... yes
checking sql.h presence... yes
checking for sql.h... yes
checking sqlext.h usability... yes
checking sqlext.h presence... yes
checking for sqlext.h... yes
checking for library containing SQLTables... -lodbc
checking for SQLLEN... yes
checking for SQLULEN... yes
checking for long... yes
checking size of long... 8
configure: creating ./config.status
config.status: creating src/Makevars
config.status: creating src/config.h
** libs
gcc -std=gnu99 -I/opt/R/2.14.0/lib64/R/include -I. -I/opt/odbc/odbc-2.3.0/include -I/usr/local/include    -fpic  -g -O2 -c RODBC.c -o RODBC.o
gcc -std=gnu99 -shared -L/opt/odbc/odbc-2.3.0/lib -Wl,-rpath /opt/odbc/odbc-2.3.0/lib -o RODBC.so RODBC.o -lodbc -L/opt/odbc/odbc-2.3.0/lib -L/opt/R/2.14.0/lib64/R/lib -lR
installing to /opt/RODBC/RODBC_1.3-5/RODBC/libs
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices ...
*** tangling vignette sources ...
   ‘RODBC.Rnw’
** testing if installed package can be loaded

* DONE (RODBC)

Success. Note the “-Wl,-rpath” option which lets RODBC.so know where libodbc.so is, so that the end user running R doesn’t need to set any environment variables before loading RODBC.

In summary:

export ODBC_INCLUDE=$ODBC_ROOT/include
export ODBC_LIBS=$ODBC_ROOT/lib
export LD_LIBRARY_PATH=/opt/gcc/4.4.2/lib64:/opt/gcc/4.4.2/lib:/opt/odbc/odbc-2.3.0/lib
MAKEFLAGS='LDFLAGS=-L/opt/odbc/odbc-2.3.0/lib\ -Wl,-rpath\ /opt/odbc/odbc-2.3.0/lib' R CMD INSTALL -l /opt/RODBC/RODBC_1.3-5 RODBC_1.3-5.tar.gz

Further reading: http://www.eyrie.org/~eagle/notes/rpath.html



1975 VW Beetle

April 27, 2012 | Filed Under Uncategorized | Leave a Comment 

My friend Karen just got her fully restored 1975 VW Beetle back from her father. He did an amazing job.

[photo]

Karen’s dad writes:

This is a brief account of the complete restoration of a 1975 VW Beetle affectionately known as TOOT TOOT. It was bought new in Canberra by a Mrs Ngbyet of 39 National Crt, Forrest (most probably a diplomat’s wife as this is a diplomatic area of Canberra). My daughter, Karen, bought the car in 1998 (rego YFJ645) from a lady in Kambah (another suburb in Canberra) and I drove to Brisbane where she used it as her car until she departed from Brisbane to work in Bonn, Germany in 2007. It was not used then for some 6 months and as I could not bear to see the car deteriorate I agreed to restore the car since it had given Karen such a wonderful reliable service.

Restoration was started in Canberra in 2008 and completed in 2012. Engine and transmission were removed and complete reconditioned and a new carburettor and distributor fitted. The engine cylinders were upgraded from a 1300 to 1600. The engine bay was restored with new sound proofing and seals. The front axle and suspension was then removed and completely reconditioned as were the brakes both front and rear. The interior was stripped and rusted floor panels cut out and replaced with new panels. At the same time the under bonnet was restored, followed by a bare metal restoration of the body then ducoed in 2 Pak white duco, the underbody being treated with underbody sound sealant and new German running boards fitted. A new headline, as per original, was fitted and the windows replaced with all new rubber seals. The interior was reupholstered with new door trim panels and floor carpet. Lights and external trim all replated or replaced with new S/S trim. Wheels were powder coated and new tyres fitted.

Every nut and bolt has been cleaned and restored. A difficult part of the restoration was removing and replacing the door hinge pins. This is very important as badly fitting doors can ruin a good restoration. A plus has been the relative availability of most parts via the internet at this time.

Karen adds:

She did many a journey with my daughter Isabelle, a beautiful black furry companion named “Boo”, and a cattle dog named Neal. She never ever let me down! She has, is and hopefully will always remain by my side. She will forever embody the passion, love and skill of my father for restoring cars. He did a wonderful job, and I will always be grateful.

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]

[photo]



Home brew fridge thermostat

April 5, 2012 | Filed Under Uncategorized | 1 Comment 

I picked up a cheap thermostat on eBay for controlling the temperature in my brewing fridge. The model number is BY-LOX 15A.

You can run the thermostat wire inside the door on the hinged side so there is no need to modify the fridge at all. I set the thermostat to 23C and the temperature sticker on the side of the tub stayed at about 24C throughout the brewing process. (By default it shows the current temp.)

[photo]

[photo]

The thermostat turns the fridge on when the temperature goes above the preset value. It doesn’t get very cold at night in Brisbane so I haven’t bothered with a dual control thermostat that can turn on a cooling and heating source.

Brewing at a constant 23-24C temperature has made a huge difference to the quality of my home brew.

I usually get my home brew gear from Annerley Home Brew, a fantastic store on the south side of Brisbane.



Kool stop salmon pads

March 29, 2012 | Filed Under Uncategorized | Leave a Comment 

Top: original (from 2007!) rear brake pads on my Avanti Blade flatbar road bike.

Bottom: new Kool Stop salmon pads. They’re huge!

[photo]



Bike Week brekkie

March 29, 2012 | Filed Under Uncategorized | Leave a Comment 

I went to the Bicycle Queensland / Scody Ride to Work event in King George Square earlier this month.

It was drizzling but I didn’t mind…

[photo]

[photo]

[photo]

Heaps of people turned up. My mate Tony won a bike light in the raffle. I was pleased with the free (healthy!) breakfast.

[photo]

Naturally there were some interesting bikes around. One guy had a compass on his handlebars:

[photo]

Must be fun to ride in a headwind. Or side-wind.

[photo]

[photo]

Friday night was Film Night:

Where Are You Go:

And the last one was The Blue Bike (sorry, no embeddable trailer).

I won the tshirt for Tokyo to Osaka :-)



A few dissections of order 18

March 17, 2012 | Filed Under Uncategorized | Leave a Comment 

A triangle dissection of an equilateral triangle is a way of dividing up a original triangle into smaller equilateral triangles, such that none of the smaller triangles overlap (for a few examples, scroll down in this post). Due to a known link between spherical latin bitrades and triangle dissections, we are able to enumerate triangle dissections exhaustively up to a certain size.

One way to calculate a canonical signature for each dissection is to take the list of triangles, the vertices of which live in \mathbb{Q}(\sqrt{3}) \times \mathbb{Q}(\sqrt{3}), and take the sorted minimum sequence of sorted triples. We can write down a convenient representation (avoiding irrational numbers) by noting that elements of \mathbb{Q}(\sqrt{3}) have the form a + b\mathbb{Q}(\sqrt{3}) where a,\,b \in \mathbb{Q}. For example, the first dissection shown below has the following signature:

0 0 0 0 1/1 2 0 0 1/12 1/6 0 0 0 1/12 0 0 1/12 1/6 0 0 0 1/4 0 0 1/12 1/12 0 0 1/12
1/6 0 0 1/6 1/4 0 0 1/12 1/6 0 0 0 1/4 0 0 1/12 1/3 0 0 0 1/6 0 0 1/6 1/4 0 0 1/12
1/3 0 0 1/6 1/6 0 0 1/6 1/4 0 0 1/4 1/3 0 0 1/6 1/4 0 0 1/12 1/3 0 0 0 5/12 0 0 1/12
1/4 0 0 1/12 5/12 0 0 1/4 7/12 0 0 1/12 1/4 0 0 1/4 1/3 0 0 1/6 5/12 0 0 1/4 1/4 0
0 1/4 1/3 0 0 1/3 5/12 0 0 1/4 1/3 0 0 0 5/12 0 0 1/12 1/2 0 0 0 1/3 0 0 1/3 1/2 0
0 1/6 2/3 0 0 1/3 1/3 0 0 1/3 1/2 0 0 1/2 2/3 0 0 1/3 5/12 0 0 1/12 1/2 0 0 0 7/12 0
0 1/12 1/2 0 0 0 7/12 0 0 1/12 2/3 0 0 0 1/2 0 0 1/6 2/3 0 0 0 5/6 0 0 1/6 1/2 0 0
1/6 2/3 0 0 1/3 5/6 0 0 1/6 2/3 0 0 0 5/6 0 0 1/6 1 0 0 0

(This signature can be converted to a PDF by echoing it as a single line to the Python script draw_dissection.py)

While double-checking my C++ implementation I found that my old Python code was finding 5 fewer dissections of order 18, when counting both separated and nonseparated dissections (separated dissections have interior vertices of degree 4, while nonseparated dissections have interior vertices of degree 4 or 6). It turned out to be the way that I was calculating a canonical signature. In the interest of saving space, my old Python code just stored a list of vertices, so naturally it lost information about whether a vertex was of degree 4 or 6. Surprisingly this caused no problems until order 18. The 5 pairs of vertex-equivalent dissections are shown below:

    

    

    

    

    



SciPy, _ZNSt8ios_base4InitD1Ev, and link flags

March 14, 2012 | Filed Under Uncategorized | Leave a Comment 

I recently tried to build SciPy 0.10.1 on a system with both the GNU and Intel compilers. Everything went find except that import scipy bombed out with:

ImportError: /opt/scipy/0.10.1/lib/python2.7/site-packages/scipy/
sparse/sparsetools/_csr.so: undefined symbol: _ZNSt8ios_base4InitD1Ev

The fix is to add “-lstdc++” to the link flags. I found a post on the SciPy mailing list where someone had the same problem and asked “Could someone please advise me how to ensure that the “-lstdc++” is successfully passed to the linker as and when I build scipy.”

The answer is to use the build_ext target to enable the link flag:

python setup.py config --compiler=intel --cc=icc --fcompiler=intelem build_ext -lstdc++
python setup.py config --compiler=intel --fcompiler=intelem install --prefix=/opt/scipy/0.10.1


Myths and debunking

December 9, 2011 | Filed Under Uncategorized | Leave a Comment 

Quoting Skeptical Science on debunking myths:

Common wisdom is that the more counter-arguments you provide, the more successful you’ll be in debunking a myth. It turns out that the opposite can be true. When it comes to refuting misinformation, less can be more. Debunks that offered three arguments, for example, are more successful in reducing the influence of misinformation, compared to debunks that offered twelve arguments which ended up reinforcing the myth.

For more information, read Schwarz, Sanna, Skurnik, Yoon: Metacognitive experiences and the intricacies of setting people straight: implications for debiasing and public information campaigns.

For commentary on how scientists should respond to denialists, read Diethelm and McKee: Denialism: what is it and how should scientists respond?

Another interesting paper: Reber and Schwarz: Effects of Perceptual Fluency on Judgments of Truth

See also:

http://rationalwiki.org/wiki/Denialism

Debunking Handbook Part 3: The Overkill Backfire Effect



Crabgrass Frontier vs Regurgitator’s Superstraight

October 7, 2011 | Filed Under Uncategorized | Leave a Comment 

If you could put a video clip to the book Crabgrass frontier: the suburbanization of the United States, it would have to be Regurgitator’s Superstraight:

Lyrics:

gimme love gimme good good times
here in suburbia the best you can buy
this is my home i keep my family inside
i’m late for work now honey i got to fly
he’s superstraight yeah he’s superstraight
i push my big sedan through the traffic jam
like salmon spawning to get into a can
i sing along to the pop radio
it’s propaganda but i know how it goes
you know i work all day and im out of my mind
i go man, im only human man i gotta unwind
i love my baby yeah shes number one
work girl means nothin i just bang her for fun
and when the weekend comes it’s time for my drugs
i suck em down count it two by one
help me remember to forget who i am
and when it’s over babe
that’s when it starts up again



Next Page →