Set Debian to gksudo / sudo mode instead of su-to-root
By admin | May 30, 2012
gconftool --type bool --set /apps/gksu/sudo-mode true
Or open gconf-editor and set /apps/gksu/sudo-mode to true. This way, you don’t have to set an insecure root password.
Topics: Linux | No Comments »
Creating Debian packages (properly) using debhelper
By admin | April 28, 2012
# change these to fit your name/e-mail address export DEBEMAIL="john.smith@fanboys.example.com" export DEBFULLNAME="John Smith" wget http://www.example.com/pub/example-2.0.1.tar.gz tar zxvf example-2.0.1.tar.gz cd example-2.0.1 dh_make -f ../example-2.0.1.tar.gz
Now, open up debian/control and modify the section field to fit one of the valid Debian sections. Then, the Build-Depends field should have whatever packages you need – minimally it should have debhelper (>= 7.0.50~), dh-buildinfo, dh-autoreconf (if you need it), along with any libraries your application will need. Set the Homepage field to be the URL of your software’s homepage on the Internet.
Once you are happy with that you can modify your package’s fields, right below the source section. Set the Architechture (i386, amd64, or etc), add Depends (Depends: ${shlibs:Depends}, ${misc:Depends} should work in most cases, because dh_shlibdeps is called). Finally, modify the package description.
A sample debian/control file:
Source: example Section: misc Priority: optional Maintainer: John Smith Build-Depends: debhelper (>= 7.0.50~), dh-buildinfo, dh-autoreconf, libogg-dev Standards-Version: 3.8.4 Homepage: http://www.example.org/ Vcs-Git: git://git.example.org/example.git Vcs-Browser: http://git.example.org/?p=example.git;a=summary Package: example Architecture: i386 Depends: ${shlibs:Depends}, ${misc:Depends} Description: Awesome example application Example is an awesome example application. It provides examples to do many things. . Example can also be used as an excuse to not learn how to make examples.
A sample debian/rules file:
#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 build: ./configure --prefix=/usr --sysconfdir=/etc --enable-ogg --enable-the-force --disable-stuff --blah-blah=blah make binary: dh_testroot dh_auto_install dh_shlibdeps dh_installdeb dh_gencontrol dh_md5sums dh_builddeb %: dh $@
To build the package (assuming everything compiles correctly):
dpkg-buildpackage -nc -us -uc -ivolatile_build_folder/
Explanation:
-nc means don’t clean (saves you time in case an error occurs)
-us and -uc mean unsigned source and unsigned changes recently, not useful if you are not official maintainer
-i means don’t consider this folder when making diff archive (to avoid dpkg-source: error: unrepresentable changes to source)
After this process is complete, the built .deb file can be found in the folder above the source folder.
Useful links:
- Debian New Maintainers’ Guide
- dpkg-shlibdeps – calculates shared library dependencies
- Unable to setup dpkg build environment
- dpkg-buildpackage
- HOWTO debian, cheat sheet
Topics: Linux | 1 Comment »
Android native AudioTrack vs amem performance
By admin | March 11, 2012
VLC for Android pre-alpha benchmarks (March 11, 2012) for two audio outputs. Specs and method are the same as in the audio benchmarks.
Sample
First 30 seconds of testfile.mp3
Results
amem Mean: 13.24% Median: 11.30% Mode: 10.7% |
Native AudioTrack Mean: 11.87% Median: 10.40% Mode: 10.7% |
amem
PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND Pass 1: D/vlc ( 3253): using audio output module "amem" 3253 957 10076 S 163m 88.3 0 22.7 org.videolan.vlc 3253 957 10076 S 161m 87.2 0 11.5 org.videolan.vlc 3253 957 10076 S 161m 87.2 0 10.7 org.videolan.vlc 3253 957 10076 S 161m 87.2 0 11.9 org.videolan.vlc 3253 957 10076 S 161m 87.2 0 11.3 org.videolan.vlc 3253 957 10076 S 161m 87.2 0 10.2 org.videolan.vlc Pass 2: D/vlc ( 3366): using audio output module "amem" 3366 957 10076 R 164m 88.7 0 23.7 org.videolan.vlc 3366 957 10076 S 161m 87.5 0 11.7 org.videolan.vlc 3366 957 10076 S 161m 87.5 0 11.7 org.videolan.vlc 3366 957 10076 S 161m 87.5 0 10.5 org.videolan.vlc 3366 957 10076 S 161m 87.5 0 11.1 org.videolan.vlc 3366 957 10076 S 161m 87.5 0 10.9 org.videolan.vlc Pass 3: D/vlc ( 3590): using audio output module "amem" 3590 957 10076 S 164m 89.1 0 25.6 org.videolan.vlc 3590 957 10076 S 164m 89.1 0 12.3 org.videolan.vlc 3590 957 10076 S 164m 89.1 0 11.3 org.videolan.vlc 3590 957 10076 S 164m 89.1 0 10.5 org.videolan.vlc 3590 957 10076 S 164m 89.1 0 10.1 org.videolan.vlc 3590 957 10076 S 164m 89.1 0 10.7 org.videolan.vlc
AudioTrack
PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND Pass 1: D/vlc ( 2835): using audio output module "android_audiotrack" 2835 957 10076 S 159m 86.0 0 10.1 org.videolan.vlc 2835 957 10076 S 159m 86.0 0 10.4 org.videolan.vlc 2835 957 10076 S 159m 86.0 0 9.5 org.videolan.vlc 2835 957 10076 S 159m 86.0 0 9.4 org.videolan.vlc 2835 957 10076 S 159m 86.0 0 9.8 org.videolan.vlc 2835 957 10076 S 159m 86.0 0 9.2 org.videolan.vlc Pass 2: D/vlc ( 2948): using audio output module "android_audiotrack" 2948 957 10076 S 165m 89.5 0 23.5 org.videolan.vlc 2948 957 10076 S 164m 88.7 0 11.1 org.videolan.vlc 2948 957 10076 S 164m 88.7 0 10.4 org.videolan.vlc 2948 957 10076 S 164m 88.7 0 10.7 org.videolan.vlc 2948 957 10076 S 164m 88.7 0 9.6 org.videolan.vlc 2948 957 10076 S 164m 88.7 0 10.7 org.videolan.vlc Pass 3: D/vlc ( 3120): using audio output module "android_audiotrack" 3120 957 10076 S 163m 88.4 0 25.8 org.videolan.vlc 3120 957 10076 S 160m 86.8 0 10.7 org.videolan.vlc 3120 957 10076 S 160m 86.8 0 10.3 org.videolan.vlc 3120 957 10076 S 160m 86.8 0 10.7 org.videolan.vlc 3120 957 10076 S 160m 86.8 0 10.2 org.videolan.vlc 3120 957 10076 S 160m 86.8 0 11.5 org.videolan.vlc
Conclusion
Although there is not much of a significant gain in either audio output, the AudioTrack output feels a bit more stable to the end-user with less glitchiness or stuttering. In addition, AudioTrack supports some formats not supported by amem output (such as mono audio).
Topics: Mobile | 2 Comments »
Android video codec benchmark
By admin | February 19, 2012
VLC for Android pre-alpha benchmarks (Feb 19, 2012) for various video codecs. Specs and method are the same as in the audio benchmarks.
OGV Theora sample
First 40 seconds of ogv_theora_codec_sample.ogv
Results – libtheora
libtheora Mean: 57.02% Median: 57.35% Mode: 56.3% |
libavcodec Mean: 63.13% Median: 64.75% Mode: N/A |
ogv with libtheora
PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND -A dummy --codec theora Pass 1: D/vlc (22597): using decoder module "theora" 22597 5375 10072 S 164m 89.1 0 75.0 org.videolan.vlc.android 22597 5375 10072 S 165m 89.6 0 56.3 org.videolan.vlc.android 22597 5375 10072 S 165m 89.6 0 59.7 org.videolan.vlc.android 22597 5375 10072 S 165m 89.6 0 60.0 org.videolan.vlc.android 22597 5375 10072 S 166m 89.9 0 58.0 org.videolan.vlc.android 22597 5375 10072 S 167m 90.5 0 56.8 org.videolan.vlc.android 22597 5375 10072 S 168m 91.0 0 57.9 org.videolan.vlc.android 22597 5375 10072 S 169m 91.7 0 56.3 org.videolan.vlc.android Pass 2: D/vlc (22670): using decoder module "theora" 22670 5375 10072 S 161m 87.5 0 31.5 org.videolan.vlc.android 22670 5375 10072 S 165m 89.5 0 56.7 org.videolan.vlc.android 22670 5375 10072 S 166m 90.0 0 57.4 org.videolan.vlc.android 22670 5375 10072 S 167m 90.6 0 56.6 org.videolan.vlc.android 22670 5375 10072 S 168m 91.1 0 58.3 org.videolan.vlc.android 22670 5375 10072 S 169m 91.7 0 57.7 org.videolan.vlc.android 22670 5375 10072 S 170m 92.3 0 57.3 org.videolan.vlc.android 22670 5375 10072 S 171m 92.9 0 56.9 org.videolan.vlc.android
ogv with libavcodec
-A dummy --codec avcodec PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND Pass 1: D/vlc (22763): using decoder module "avcodec" 22763 5375 10072 S 159m 86.2 0 23.5 org.videolan.vlc.android 22763 5375 10072 S 165m 89.3 0 62.4 org.videolan.vlc.android 22763 5375 10072 S 165m 89.3 0 65.0 org.videolan.vlc.android 22763 5375 10072 S 165m 89.3 0 62.2 org.videolan.vlc.android 22763 5375 10072 S 165m 89.3 0 71.6 org.videolan.vlc.android 22763 5375 10072 S 165m 89.3 0 63.1 org.videolan.vlc.android 22763 5375 10072 S 165m 89.3 0 74.5 org.videolan.vlc.android 22763 5375 10072 S 165m 89.3 0 64.5 org.videolan.vlc.android Pass 2: D/vlc (22797): using decoder module "avcodec" 22797 5375 10072 S 162m 87.9 0 54.5 org.videolan.vlc.android 22797 5375 10072 S 165m 89.3 0 62.3 org.videolan.vlc.android 22797 5375 10072 S 165m 89.4 0 62.6 org.videolan.vlc.android 22797 5375 10072 S 165m 89.4 0 65.3 org.videolan.vlc.android 22797 5375 10072 S 165m 89.4 0 70.4 org.videolan.vlc.android 22797 5375 10072 S 165m 89.4 0 70.8 org.videolan.vlc.android 22797 5375 10072 S 165m 89.4 0 70.6 org.videolan.vlc.android 22797 5375 10072 S 165m 89.4 0 66.8 org.videolan.vlc.android
Topics: Mobile | 7 Comments »
Updated tktreecontrol deb package for Ubuntu/Debian
By admin | February 8, 2012
The version of tktreectrl in the Ubuntu repositories is, once again, a bit out of date (2.2.8). As a result, we have compiled the latest 2.4.1 version of TkTreeControl for your pleasure.
Download
Procedure
wget http://downloads.sourceforge.net/project/tktreectrl/tktreectrl/tktreectrl-2.4.1/tktreectrl-2.4.1.tar.gz -O- |tar zxvf - cd tktreectrl-2.4.1/ ./configure --with-x --enable-shellicon --enable-gtk --enable-threads --prefix=/usr make sudo make install #or checkinstall
Topics: Linux | No Comments »
Solving “Only Content controls are allowed directly in a content page that contains Content controls”
By admin | February 3, 2012
While debugging and creating a new ASP.NET User Control, I stumbled across the following error, “Only Content controls are allowed directly in a content page that contains Content controls” that I did not encounter before. The culprit: an invalid assembly in the custom ASP.NET User Control registration section of “web.config“:
The first thing I tried, is, of course, to follow the advice on the can and remove any tag or text other than “<asp:Content>” tags from the page. But as, you can see, there are no other characters or tags on the page, and I had tried many times to regenerate the page or force VS to “re-parse” the page without success.
After some more debugging for a while, I found this error, which was related to an invalid assembly in the registering custom ASP.NET User Controls section of the web.config document:
And the answer? It turns out it was easy enough to fix after all, just fix the offending assembly reference!
And voila, fixed:
Topics: Windows | 2 Comments »
Android codec benchmarks
By admin | February 1, 2012
VLC for Android pre-alpha benchmarks (Feb 1, 2012) for various audio codecs.
Skip to
Specs
Motorola XT300 – Android 2.1, 500 Mhz, 256 MB, rooted with busybox, Qualcomm MSM7225 (ARM1136EJ-S core, ARMv6TEJ architecture, no NEON extensions)
/proc/cpuinfo output
Processor : ARMv6-compatible processor rev 2 (v6l) BogoMIPS : 525.92 Features : swp half thumb fastmult edsp java CPU implementer : 0x41 CPU architecture: 6TEJ CPU variant : 0x1 CPU part : 0xb36 CPU revision : 2 Hardware : QCT MSM7x25 SURF Revision : 0000 Serial : 0000000000000000
Method
adb shell "/system/xbin/busybox ps aux | grep vlc" adb shell "/system/xbin/busybox top -b | grep <pid of VLC as above>"
Ogg files
Comparing three popular codecs for decoding OGG vorbis files, libavcodec from libav, vorbis and tremor.
Results
PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND avcodec: 5266 956 10072 S 163m 88.4 0 25.0 org.videolan.vlc.android vorbis: 5331 956 10072 R 166m 89.8 0 41.0 org.videolan.vlc.android tremor: 5174 956 10072 S 156m 84.5 0 32.4 org.videolan.vlc.android
So, it seems avcodec is the clear winner, followed by tremor and lagging in last place libvorbis.
AC3 files
Test sample
First 30 seconds of http://people.videolan.org/~jb/ac3_the_other_side_44khz.wav
Results – Inconclusive?
liba52 Mean: 31.51667% Median: 27.15% |
libavcodec Mean: 28.86667% Median: 29.25% |
ac3 with liba52
-A dummy --codec=a52tofloat32 D/vlc ( 6768): using decoder module "a52" Over 30 seconds PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 6768 956 10072 R 160m 86.7 0 52.6 org.videolan.vlc.android 6768 956 10072 S 159m 86.1 0 30.5 org.videolan.vlc.android 6768 956 10072 R 156m 84.5 0 25.6 org.videolan.vlc.android 6768 956 10072 S 156m 84.5 0 27.4 org.videolan.vlc.android 6768 956 10072 S 156m 84.5 0 26.9 org.videolan.vlc.android 6768 956 10072 S 156m 84.5 0 26.1 org.videolan.vlc.android Mean: 31.51667 Median: 27.15 Mode: N/A
ac3 with libavcodec
-A dummy --codec=avcodec D/vlc ( 6829): using decoder module "avcodec" Over 30 seconds PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 6829 956 10072 S 158m 85.5 0 32.3 org.videolan.vlc.android 6829 956 10072 R 155m 83.8 0 30.0 org.videolan.vlc.android 6829 956 10072 S 155m 83.8 0 26.3 org.videolan.vlc.android 6829 956 10072 S 155m 83.8 0 30.0 org.videolan.vlc.android 6829 956 10072 S 155m 83.8 0 28.5 org.videolan.vlc.android 6829 956 10072 S 155m 83.8 0 26.1 org.videolan.vlc.android Mean: 28.86667 Median: 29.25 Mode: 30.0
DTS files
Test sample
First 35 seconds of http://people.videolan.org/~jb/dts_the_other_side_44khz.wav
Results – Also inconclusive?
libdca Mean: 19.66% Median: 18.85% Mode: 22.60%, 16.80% |
libavcodec Mean: 19.13% Median: 18.25% Mode: 19.3%, 20.3%, 17.6% |
dts with libdca
-A dummy --codec dts Mean: 19.66 Median: 18.85 Mode: 22.60,16.80 Pass 1: D/vlc ( 2461): using decoder module "dts" PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 2461 951 10072 S 159m 86.3 0 21.7 org.videolan.vlc.android 2461 951 10072 S 159m 86.3 0 22.6 org.videolan.vlc.android 2461 951 10072 R 159m 86.3 0 21.3 org.videolan.vlc.android 2461 951 10072 S 159m 86.3 0 24.4 org.videolan.vlc.android 2461 951 10072 S 159m 86.3 0 20.4 org.videolan.vlc.android 2461 951 10072 S 159m 86.3 0 25.6 org.videolan.vlc.android Pass 2: D/vlc ( 2510): using decoder module "dts" PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 2510 951 10072 S 158m 85.6 0 18.0 org.videolan.vlc.android 2510 951 10072 S 158m 85.6 0 22.6 org.videolan.vlc.android 2510 951 10072 S 158m 85.5 0 16.5 org.videolan.vlc.android 2510 951 10072 S 158m 85.5 0 16.8 org.videolan.vlc.android 2510 951 10072 S 158m 85.6 0 16.8 org.videolan.vlc.android 2510 951 10072 S 158m 85.6 0 18.7 org.videolan.vlc.android Pass 3: D/vlc ( 2536): using decoder module "dts" PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 2536 951 10072 S 159m 86.3 0 19.0 org.videolan.vlc.android 2536 951 10072 S 159m 86.3 0 21.5 org.videolan.vlc.android 2536 951 10072 S 159m 86.3 0 16.0 org.videolan.vlc.android 2536 951 10072 R 159m 86.3 0 16.2 org.videolan.vlc.android 2536 951 10072 S 159m 86.3 0 17.3 org.videolan.vlc.android 2536 951 10072 S 159m 86.3 0 18.6 org.videolan.vlc.android
dts with libavcodec
-A dummy --codec avcodec Mean: 19.13 Median: 18.25 Mode: 19.3, 20.3, 17.6 Pass 1: D/vlc ( 2583): using decoder module "avcodec" PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 2583 951 10072 S 162m 87.5 0 34.6 org.videolan.vlc.android 2583 951 10072 S 157m 85.4 0 20.0 org.videolan.vlc.android 2583 951 10072 S 158m 85.4 0 14.6 org.videolan.vlc.android 2583 951 10072 R 158m 85.4 0 15.8 org.videolan.vlc.android 2583 951 10072 S 158m 85.4 0 19.3 org.videolan.vlc.android 2583 951 10072 S 157m 85.4 0 20.3 org.videolan.vlc.android Pass 2: D/vlc ( 2607): using decoder module "avcodec" PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 2607 951 10072 S 159m 86.4 0 25.5 org.videolan.vlc.android 2607 951 10072 S 156m 84.8 0 16.6 org.videolan.vlc.android 2607 951 10072 S 156m 84.8 0 12.8 org.videolan.vlc.android 2607 951 10072 S 156m 84.8 0 14.2 org.videolan.vlc.android 2607 951 10072 S 156m 84.8 0 16.9 org.videolan.vlc.android 2607 951 10072 R 157m 84.8 0 13.4 org.videolan.vlc.android Pass 3: D/vlc ( 2633): using decoder module "avcodec" PID PPID USER STAT VSZ %MEM CPU %CPU COMMAND 2633 951 10072 S 158m 85.8 0 26.8 org.videolan.vlc.android 2633 951 10072 S 158m 85.8 0 20.3 org.videolan.vlc.android 2633 951 10072 R 158m 85.8 0 17.6 org.videolan.vlc.android 2633 951 10072 S 158m 85.8 0 18.9 org.videolan.vlc.android 2633 951 10072 S 158m 85.8 0 17.6 org.videolan.vlc.android 2633 951 10072 S 158m 85.8 0 19.3 org.videolan.vlc.android
Topics: Mobile | 9 Comments »
Deepen an existing shallow clone with git
By admin | January 31, 2012
In git, the new revolutionary DVCS system, to shallow clone a repository means to check out only the latest snapshot of a git repository, unlike a normal clone which pulls the entire repository. A shallow git repository can save bandwidth and take up less space.
git clone --depth=1 git://repo.example.com/mycoolapp
However, let’s say that once you checkout the project, compile it and decide that you want to contribute to it, then a shallow clone would probably not suffice. In this case, one can deepen the repository by using the following command inside the git repository, where n = number of revisions to deepen to:
git fetch --depth=n origin master
Saves more than having to re-clone everything from scratch and lose your working tree.
Topics: Linux | 3 Comments »
VLC pre-alpha for Android 2.1 – Jan 2, 2012
By admin | January 2, 2012
Will post a how-to compile guide later, just wanted to upload the binaries that I am working on through GCI for purpose of testing, along with screenshots. If in doubt, download the first one (VLC-debug.apk).
- VLC-debug.apk (7.4MB, alternate download)
- VLC-debug-unaligned.apk (7.4MB, alternate download)
Screenshots
Topics: Mobile | 5 Comments »
Operating systems and car dealerships
By admin | November 4, 2011
An excerpt from the essay In the Beginning was the Command Line (CC BY-SA 2.0) by Michael Foord.
The analogy between cars and operating systems is not half bad, and so let me run with it for a moment, as a way of giving an executive summary of our situation today.
Imagine a crossroads where four competing auto dealerships are situated. One of them (Microsoft) is much, much bigger than the others. It started out years ago selling three-speed bicycles (MS-DOS); these were not perfect, but they worked, and when they broke you could easily fix them.
There was a competing bicycle dealership next door (Apple) that one day began selling motorized vehicles–expensive but attractively styled cars with their innards hermetically sealed, so that how they worked was something of a mystery.
The big dealership responded by rushing a moped upgrade kit (the original Windows) onto the market. This was a Rube Goldberg contraption that, when bolted onto a three-speed bicycle, enabled it to keep up, just barely, with Apple-cars. The users had to wear goggles and were always picking bugs out of their teeth while Apple owners sped along in hermetically sealed comfort, sneering out the windows. But the Micro-mopeds were cheap, and easy to fix compared with the Apple-cars, and their market share waxed.
Eventually the big dealership came out with a full-fledged car: a colossal station wagon (Windows 95). It had all the aesthetic appeal of a Soviet worker housing block, it leaked oil and blew gaskets, and it was an enormous success. A little later, they also came out with a hulking off-road vehicle intended for industrial users (Windows NT) which was no more beautiful than the station wagon, and only a little more reliable.
Since then there has been a lot of noise and shouting, but little has changed. The smaller dealership continues to sell sleek Euro-styled sedans and to spend a lot of money on advertising campaigns. They have had GOING OUT OF BUSINESS! signs taped up in their windows for so long that they have gotten all yellow and curly. The big one keeps making bigger and bigger station wagons and ORVs.
On the other side of the road are two competitors that have come along more recently.
One of them (Be, Inc.) is selling fully operational Batmobiles (the BeOS). They are more beautiful and stylish even than the Euro-sedans, better designed, more technologically advanced, and at least as reliable as anything else on the market–and yet cheaper than the others.
With one exception, that is: Linux, which is right next door, and which is not a business at all. It’s a bunch of RVs, yurts, tepees, and geodesic domes set up in a field and organized by consensus. The people who live there are making tanks. These are not old-fashioned, cast-iron Soviet tanks; these are more like the M1 tanks of the U.S. Army, made of space-age materials and jammed with sophisticated technology from one end to the other. But they are better than Army tanks. They’ve been modified in such a way that they never, ever break down, are light and manoeuvrable enough to use on ordinary streets, and use no more fuel than a subcompact car. These tanks are being cranked out, on the spot, at a terrific pace, and a vast number of them are lined up along the edge of the road with keys in the ignition. Anyone who wants [one] can simply climb into one and drive it away for free.
Customers come to this crossroads in throngs, day and night. Ninety percent of them go straight to the biggest dealership and buy station wagons or off-road vehicles. They do not even look at the other dealerships.
Of the remaining ten percent, most go and buy a sleek Euro-sedan, pausing only to turn up their noses at the philistines going to buy the station wagons and ORVs. If they even notice the people on the opposite side of the road, selling the cheaper, technically superior vehicles, these customers deride them cranks and half-wits.
The Batmobile outlet sells a few vehicles to the occasional car nut who wants a second vehicle to go with his station wagon, but seems to accept, at least for now, that it’s a fringe player.
The group giving away the free tanks only stays alive because it is staffed by volunteers, who are lined up at the edge of the street with bullhorns, trying to draw customers’ attention to this incredible situation. A typical conversation goes something like this:
Hacker with bullhorn: “Save your money! Accept one of our free tanks! It is invulnerable, and can drive across rocks and swamps at ninety miles an hour while getting a hundred miles to the gallon!”
Prospective station wagon buyer: “I know what you say is true…but…er…I don’t know how to maintain a tank!”
Bullhorn: “You don’t know how to maintain a station wagon either!”
Buyer: “But this dealership has mechanics on staff. If something goes wrong with my station wagon, I can take a day off work, bring it here, and pay them to work on it while I sit in the waiting room for hours, listening to elevator music.”
Bullhorn: “But if you accept one of our free tanks we will send volunteers to your house to fix it for free while you sleep!”
Buyer: “Stay away from my house, you freak!”
Bullhorn: “But…”
Buyer: “Can’t you see that everyone is buying station wagons?”
Topics: Linux | 6 Comments »