<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6676106307470710365</id><updated>2011-11-27T19:18:13.581-05:00</updated><category term='netconsole'/><category term='proxy'/><category term='aubit4gl'/><category term='bind9'/><category term='rsync'/><category term='wintv'/><category term='hs22'/><category term='curl'/><category term='hardy'/><category term='logitech'/><category term='inotify'/><category term='firefox'/><category term='barrier'/><category term='ibm'/><category term='xquery'/><category term='PXE'/><category term='nokia'/><category term='wwn'/><category term='ext4'/><category term='performance'/><category term='empathy'/><category term='openoffice.org'/><category term='synthesis'/><category term='cx18'/><category term='linux'/><category term='virtualbox'/><category term='XSLT'/><category term='mysql'/><category term='exist'/><category term='usb'/><category term='xscreensaver'/><category term='xmlstarlet'/><category term='trixbox'/><category term='4gl'/><category term='webcam'/><category term='nagios'/><category term='bladecenter'/><category term='natty'/><category term='d-bus'/><category term='kde'/><category term='apache2'/><category term='group_concat'/><category term='syncml'/><category term='XPath'/><category term='funambol'/><category term='kernel'/><category term='palm'/><category term='snmp'/><category term='dhcp'/><category term='ubuntu'/><category term='informix'/><category term='sas'/><title type='text'>Serenade to a Cuckoo(o)</title><subtitle type='html'>Various and sundry IT blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-8442784028780209280</id><published>2011-09-17T10:24:00.000-04:00</published><updated>2011-09-17T10:24:57.284-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='wintv'/><category scheme='http://www.blogger.com/atom/ns#' term='natty'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='cx18'/><title type='text'>WinTV 1600 model 1199 and VirtualBox on linux</title><content type='html'>Had a working VirtualBox WinXP guest on an Ubuntu Natty host.&lt;br /&gt;&lt;br /&gt;Installed a WinTV 1600 video capture card, and after that, the VirtualBox WinXP guest would not boot.. got the message:&lt;br /&gt;&lt;br /&gt;Failed to load VMMR0.r0 VERR_NO_MEMORY&lt;br /&gt;&lt;br /&gt;After digging thru the logs, and noticing vmalloc errors - I decided to blacklist the cx18 modules (for capture card), and reboot.  VirtualBox worked now, but then if I removed the blacklist on the cx18 modules, and tried to load the module - I got the same vmalloc errors.&lt;br /&gt;&lt;br /&gt;Determined its a shortage of virtual memory in the linux kernel. Default is 128M.&lt;br /&gt;&lt;br /&gt;Certain device drivers (modules) - in my case, a video capture card - require chunks of this virtual memory for device mapping.&lt;br /&gt;&lt;br /&gt;Virtualbox obviously uses the same mechanism. You can have 16GB of RAM, but if you only have 128M of vm allocated, you are going to run into the same issue.&lt;br /&gt;&lt;br /&gt;Solution is to pass the "vmalloc=&amp;lt;size&amp;gt;" parameter to your kernel on boot. &amp;nbsp;Preferably in 64M chunks.&lt;br /&gt;&lt;br /&gt;In ubuntu, edit /etc/default/grub, and add "vmalloc=192M" to the GRUB_CMDLINE_LINUX_DEFAULT list.&lt;br /&gt;&lt;br /&gt;eg. GRUB_CMDLINE_LINUX_DEFAULT="vmalloc=192M quiet splash"&lt;br /&gt;&lt;br /&gt;sudo update-grub&lt;br /&gt;&lt;br /&gt;reboot&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now they play nicely together - and the overall system performance is much snappier.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-8442784028780209280?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/8442784028780209280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/09/wintv-1600-model-1199-and-virtualbox-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8442784028780209280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8442784028780209280'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/09/wintv-1600-model-1199-and-virtualbox-on.html' title='WinTV 1600 model 1199 and VirtualBox on linux'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-9034343868926653555</id><published>2011-05-09T16:34:00.000-04:00</published><updated>2011-05-09T16:34:13.093-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curl'/><category scheme='http://www.blogger.com/atom/ns#' term='xquery'/><category scheme='http://www.blogger.com/atom/ns#' term='exist'/><title type='text'>Using curl with eXist to perform XQuery</title><content type='html'>Simple trick to use HTTP POST with curl to do an XQuery - (I struggled for a bit with the Content-type)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;curl --header "Content-type: text/xml" --data "@x.xml" http://hostname:8080/exist/rest/db/&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;where x.xml is something like:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;query xmlns="http://exist.sourceforge.net/NS/exist" start="1" max="20"&amp;gt;&lt;br /&gt;&amp;lt;text&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;![CDATA[&lt;br /&gt;&amp;nbsp; some XQuery here...&lt;br /&gt;&amp;nbsp; ]]&amp;gt;&lt;br /&gt;&amp;lt;/text&amp;gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name="indent" value="yes"/&amp;gt;&lt;br /&gt;&amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;lt;/query&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-9034343868926653555?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/9034343868926653555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/05/using-curl-with-exist-to-perform-xquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/9034343868926653555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/9034343868926653555'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/05/using-curl-with-exist-to-perform-xquery.html' title='Using curl with eXist to perform XQuery'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-3495511796602475413</id><published>2011-04-11T15:07:00.000-04:00</published><updated>2011-04-11T15:07:04.414-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ext4'/><category scheme='http://www.blogger.com/atom/ns#' term='barrier'/><title type='text'>ext4 performance and the barrier option</title><content type='html'>We recently implemented a 6-disk SAS RAID 1+0 /home ext4 filesystem on our application server to improve performance, and found that we still had a disk I/O bottleneck, with processor I/O wait averaging in the 3 to 4% range.&lt;br /&gt;&lt;br /&gt;I came across this LWN article&amp;nbsp;&lt;a href="http://lwn.net/Articles/283161/"&gt;http://lwn.net/Articles/283161/&lt;/a&gt;&amp;nbsp;that talks about a 30% performance drop when the barrier option is enabled on an ext4 filesystem.&lt;br /&gt;&lt;br /&gt;As of the time of the LWN article, barrier was not enabled by default on an ext4 filesystem. &amp;nbsp;But somewhere along the kernel release line, barrier=1 (on) became the default for newly created ext4 filesystems.&lt;br /&gt;&lt;br /&gt;Doing a "cat /proc/mounts" on my ubuntu 10.04 distro, I found that my ext4 filesystems indeed had the option barrier=1. So on April 3rd, I added barrier=0 to my fstab, and rebooted. &amp;nbsp;The performance boost was quite dramatic. &lt;br /&gt;&lt;br /&gt;Using measures of "average wait time", "% utilization" and "%IO wait", here is the before and after stats, measured and averaged on a typical work week 8am to 5pm...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With barrier=1:&lt;br /&gt;&lt;br /&gt;Average wait time: &amp;nbsp; 90 ms&lt;br /&gt;Average Disk utilization %: &amp;nbsp; 40%&lt;br /&gt;Average CPU IO wait %: &amp;nbsp;3.5%&lt;br /&gt;&lt;br /&gt;With barrier=0:&lt;br /&gt;&lt;br /&gt;Average wait time: &amp;nbsp;2 ms&lt;br /&gt;Average Disk utilization %: &amp;nbsp; 2%&lt;br /&gt;Average CPU IO wait %: &amp;nbsp;0.40%&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Graphs depict the change more dramatically (comparing April 1st to April 4th):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Average Wait Time&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-L_yqM7K6oww/TaNL-GSs5DI/AAAAAAAAAAs/zqjVThwAqBI/s1600/iostat_apr01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-L_yqM7K6oww/TaNL-GSs5DI/AAAAAAAAAAs/zqjVThwAqBI/s1600/iostat_apr01.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-qy5_5CYBoRE/TaNMZY4bqKI/AAAAAAAAAA0/N6IT6qnjKv8/s1600/iostat_apr4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-qy5_5CYBoRE/TaNMZY4bqKI/AAAAAAAAAA0/N6IT6qnjKv8/s1600/iostat_apr4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Average % Utilization&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AVPR-H7tQ7A/TaNOFhDiZfI/AAAAAAAAABI/Z63pCqTua-w/s1600/iostat_apr01b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-AVPR-H7tQ7A/TaNOFhDiZfI/AAAAAAAAABI/Z63pCqTua-w/s1600/iostat_apr01b.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ziBIwtkd3tM/TaNM53EKxJI/AAAAAAAAAA4/z68SL_GUMHw/s1600/iostat_apr4b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-ziBIwtkd3tM/TaNM53EKxJI/AAAAAAAAAA4/z68SL_GUMHw/s1600/iostat_apr4b.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Load Average&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2YQY_gZs3Hg/TaNNsM2ZAsI/AAAAAAAAABE/6AQiC_fBswk/s1600/load_apr01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-2YQY_gZs3Hg/TaNNsM2ZAsI/AAAAAAAAABE/6AQiC_fBswk/s1600/load_apr01.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-e77NEkVlQ-E/TaNNsPMy7dI/AAAAAAAAABA/510ntTj_ep4/s1600/load_apr4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-e77NEkVlQ-E/TaNNsPMy7dI/AAAAAAAAABA/510ntTj_ep4/s1600/load_apr4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;NOTE: This is not a "very busy" April 1st compared to a "very light" April 4th. &amp;nbsp;Both are with a 30 user load, approx. 2300 processes. &amp;nbsp;And every other day of the week in the comparison show the same dramatic improvement.&lt;br /&gt;&lt;br /&gt;Of course one can argue that we are sacrificing data integrity for performance - but we do have a UPS backed system, and crashes are (thus far) non-existent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-3495511796602475413?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/3495511796602475413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/04/ext4-performance-and-barrier-option.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/3495511796602475413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/3495511796602475413'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/04/ext4-performance-and-barrier-option.html' title='ext4 performance and the barrier option'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-L_yqM7K6oww/TaNL-GSs5DI/AAAAAAAAAAs/zqjVThwAqBI/s72-c/iostat_apr01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-4100261386066708248</id><published>2011-03-15T11:16:00.005-04:00</published><updated>2011-03-18T15:04:19.276-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hs22'/><category scheme='http://www.blogger.com/atom/ns#' term='bladecenter'/><category scheme='http://www.blogger.com/atom/ns#' term='sas'/><category scheme='http://www.blogger.com/atom/ns#' term='ibm'/><category scheme='http://www.blogger.com/atom/ns#' term='wwn'/><title type='text'>Finding the WWN on an HS22 SAS connectivity module</title><content type='html'>Recently obtained an IBM HS22 blade server with a SAS connectivity module, and was attempting to map a RAID volume in a disk storage module to this blade.. &amp;nbsp;when I realized the AMM did not report the SAS ID (WWN) as it normally does with my HS21 blades.&lt;br /&gt;&lt;br /&gt;I figured it was a firmware issue, so I upgraded the AMM firmware - but still nothing.&lt;br /&gt;&lt;br /&gt;I found this link:&lt;a href="http://www-947.ibm.com/support/entry/portal/docdisplay?brand=5000020&amp;amp;lndocid=MIGR-5083823"&gt;http://www-947.ibm.com/support/entry/portal/docdisplay?brand=5000020&amp;amp;lndocid=MIGR-5083823&lt;/a&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #333366; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; white-space: nowrap;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;which scared me - seemed to indicate I had the wrong hardware.&lt;br /&gt;&lt;br /&gt;I poked around the LSI BIOS and noted every SAS ID I could find.. and tried using those to map the volume, all to no avail.&lt;br /&gt;&lt;br /&gt;It didn't help that the AMM reported the SAS module part number as 49Y8009, whereas I had ordered 43W4068.. thought there was a shipping error or something, but it turns out the 49Y8009 is just the internal IBM part number.&lt;br /&gt;&lt;br /&gt;Thinking it was still related to firmware.. I upgraded the uEFI and the IMM firmware on the HS22. &amp;nbsp;Again, this helped nothing.&lt;br /&gt;&lt;br /&gt;In a desperate final attempt, I decided to delve into the SAS RAID controller itself.. &amp;nbsp;accessed the web interface, selected "Monitor SAS Module", and voila! &amp;nbsp;There, next to "Blade Slot Connection 2" was a SAS ID that was never presented anywhere else. &amp;nbsp;I mapped the volume using this WWN, and now all is good.&lt;br /&gt;&lt;br /&gt;What a nightmare to find though.. &amp;nbsp; found forum posts with no answers: &amp;nbsp;&lt;a href="https://www.ibm.com/developerworks/forums/thread.jspa?messageID=14418964&amp;amp;#14418964"&gt;https://www.ibm.com/developerworks/forums/thread.jspa?messageID=14418964&amp;amp;#14418964&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Someone from IBM, please update your documentation!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-4100261386066708248?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/4100261386066708248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/03/finding-wwn-on-hs22-sas-connectivity.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/4100261386066708248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/4100261386066708248'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/03/finding-wwn-on-hs22-sas-connectivity.html' title='Finding the WWN on an HS22 SAS connectivity module'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-6071807622896149683</id><published>2011-02-25T15:44:00.001-05:00</published><updated>2011-03-15T11:22:52.812-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='informix'/><category scheme='http://www.blogger.com/atom/ns#' term='group_concat'/><title type='text'>Aggregating row data using user-defined aggregate in Informix IDS</title><content type='html'>Implementing mysql group_concat() aggregate in Informix IDS 11.5 - thanks to Jonathan Leffler.&lt;br /&gt;&lt;br /&gt;As DBA do:&lt;br /&gt;&lt;br /&gt;CREATE FUNCTION gc_init(dummy varchar(255)) RETURNING LVARCHAR;&lt;br /&gt;&amp;nbsp; &amp;nbsp; RETURN '';&lt;br /&gt;END FUNCTION;&lt;br /&gt;&lt;br /&gt;CREATE FUNCTION gc_iter(result LVARCHAR, value VARCHAR(255))&lt;br /&gt;&amp;nbsp; &amp;nbsp; RETURNING LVARCHAR;&lt;br /&gt;&amp;nbsp; &amp;nbsp; IF result = '' THEN&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RETURN TRIM(value);&lt;br /&gt;&amp;nbsp; &amp;nbsp; ELSE&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RETURN result || ',' || TRIM(value);&lt;br /&gt;&amp;nbsp; &amp;nbsp; END IF;&lt;br /&gt;END FUNCTION;&lt;br /&gt;&lt;br /&gt;CREATE FUNCTION gc_comb(partial1 LVARCHAR, partial2 LVARCHAR)&lt;br /&gt;&amp;nbsp; &amp;nbsp; RETURNING LVARCHAR;&lt;br /&gt;&amp;nbsp; &amp;nbsp; RETURN partial1 || ',' || partial2;&lt;br /&gt;END FUNCTION;&lt;br /&gt;&lt;br /&gt;CREATE FUNCTION gc_fini(final LVARCHAR) RETURNING LVARCHAR;&lt;br /&gt;&amp;nbsp; &amp;nbsp; RETURN final;&lt;br /&gt;END FUNCTION;&lt;br /&gt;&lt;br /&gt;CREATE AGGREGATE group_concat&lt;br /&gt;&amp;nbsp; &amp;nbsp; WITH (INIT = gc_init, ITER = gc_iter,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; COMBINE = gc_comb, FINAL = gc_fini);&lt;br /&gt;&lt;br /&gt;Then you need to grant access to the functions to users that need it:&lt;br /&gt;&lt;br /&gt;grant execute on function gc_init to appsql;&lt;br /&gt;grant execute on function gc_iter to appsql;&lt;br /&gt;grant execute on function gc_comb to appsql;&lt;br /&gt;grant execute on function gc_fini to appsql;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example Use:&lt;br /&gt;&lt;br /&gt;select ord_id, group_concat(product)&lt;br /&gt;from ord&lt;br /&gt;group by ord_id&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-6071807622896149683?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/6071807622896149683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/02/aggregating-row-data-using-user-defined.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6071807622896149683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6071807622896149683'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2011/02/aggregating-row-data-using-user-defined.html' title='Aggregating row data using user-defined aggregate in Informix IDS'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-6506137727768695919</id><published>2010-11-25T15:44:00.001-05:00</published><updated>2010-11-25T15:49:08.757-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='xscreensaver'/><category scheme='http://www.blogger.com/atom/ns#' term='empathy'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='d-bus'/><title type='text'>xscreensaver and empathy presence notification</title><content type='html'>xscreensaver doesn't support d-bus - and therefore when screensaver activates, empathy (IM client) doesn't change status to "Away", like it does with gnome-screensaver.&lt;br /&gt;&lt;br /&gt;The xscreensaver man page includes a nice perl script which you can use to accomplish the same thing.&amp;nbsp; So here is "watchx.pl" script:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;my $blanked = 0;&lt;br /&gt;&amp;nbsp;open (IN, "xscreensaver-command -watch |");&lt;br /&gt;&amp;nbsp;while (&lt;in&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (m/^(BLANK|LOCK)/) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!$blanked) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system "/usr/local/bin/empathy-away.sh";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $blanked = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } elsif (m/^UNBLANK/) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; system "/usr/local/bin/empathy-avail.sh";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $blanked = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;/in&gt;&lt;/blockquote&gt;Then, using dbus-send, you can set status in empathy.. I use the following scripts "empathy-away.sh":&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#!/bin/bash&lt;br /&gt;USER=`whoami`&lt;br /&gt;service=`qdbus | grep $USER | sed -e "s/ //g"`&lt;br /&gt;path=`echo $service | sed -e "s/\./\//g"`&lt;br /&gt;dbus-send --dest=$service /$path org.freedesktop.Telepathy.Connection.Interface.SimplePresence.SetPresence string:"away" string:"Away from keyboard"&lt;/blockquote&gt;and "empathy-avail.sh":&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#!/bin/bash&lt;br /&gt;USER=`whoami`&lt;br /&gt;service=`qdbus | grep $USER | sed -e "s/ //g"`&lt;br /&gt;path=`echo $service | sed -e "s/\./\//g"`&lt;br /&gt;dbus-send --dest=$service /$path org.freedesktop.Telepathy.Connection.Interface.SimplePresence.SetPresence string:"available" string:"Available"&lt;/blockquote&gt;&lt;br /&gt;NOTE:&amp;nbsp; This is designed for one empathy account.. and that account name containing the users login name.&amp;nbsp; Works on ubuntu lucid.&amp;nbsp; Also - that dbus-send command is all on one line.&lt;br /&gt;&lt;br /&gt;And to have it launch at login... create the following "watchx.desktop" file and place it in /etc/xdg/autostart:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; [Desktop Entry]&lt;br /&gt;Type=Application&lt;br /&gt;Exec=/usr/local/bin/watchx.pl&lt;br /&gt;Hidden=false&lt;br /&gt;NoDisplay=false&lt;br /&gt;X-GNOME-Autostart-enabled=true&lt;br /&gt;Name[en_US]=Watch screen saver&lt;br /&gt;Name=Watch screen saver&lt;br /&gt;Comment[en_US]=Watch screen saver&lt;br /&gt;Comment=Watch screen saver&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-6506137727768695919?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/6506137727768695919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/11/xscreensaver-and-empathy-presence.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6506137727768695919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6506137727768695919'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/11/xscreensaver-and-empathy-presence.html' title='xscreensaver and empathy presence notification'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-7499959786115612630</id><published>2010-08-03T11:51:00.001-04:00</published><updated>2011-03-15T11:22:13.794-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='netconsole'/><title type='text'>NETCONSOLE to the rescue</title><content type='html'>On a headless server, when you get a kernel panic and the system is totally locked up, and there is no sync of kernel log, its extremely frustrating trying to debug.&lt;br /&gt;&lt;br /&gt;Discovered a wonderful kernel module/feature called NETCONSOLE. &amp;nbsp;From netconsole.txt - "This module logs kernel printk messages over UDP allowing debugging of&amp;nbsp;problem where disk logging fails and serial consoles are impractical."&lt;br /&gt;&lt;br /&gt;Using this&amp;nbsp;&lt;a href="http://wiki.openvz.org/Remote_console_setup#Netconsole"&gt;usefull howto&lt;/a&gt;&amp;nbsp;as a basis I got this working on ubuntu 10.04, which already has netconsole built as a module.&lt;br /&gt;&lt;br /&gt;On the source system where you want to trap the messages:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f7f9fa; border-bottom-color: rgb(125, 174, 150); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(125, 174, 150); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(125, 174, 150); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(125, 174, 150); border-top-style: dashed; border-top-width: 1px; color: black; font-family: 'Liberation Mono', 'Andale Mono', 'Vera Sans Mono', Consolas, Courier, monospace; font-size: 11px; line-height: 1.1em; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; text-align: left; white-space: pre;"&gt;modprobe netconsole netconsole=&amp;lt;sport&amp;gt;@&amp;lt;saddr&amp;gt;/&amp;lt;dev&amp;gt;,&amp;lt;dport&amp;gt;@&amp;lt;daddr&amp;gt;/&amp;lt;dmac&amp;gt;&lt;/pre&gt;&lt;br /&gt;where &lt;i&gt;sport&lt;/i&gt; is the source port, &lt;i&gt;saddr&lt;/i&gt; is the source address, &lt;i&gt;dev&lt;/i&gt; is interface, &lt;i&gt;dport&lt;/i&gt; is destination port, &lt;i&gt;daddr&lt;/i&gt; is destination address and &lt;i&gt;dmac&lt;/i&gt; is destination mac address.&lt;br /&gt;&lt;br /&gt;On the remote end, install netcat, and do:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #f7f9fa; border-bottom-color: rgb(125, 174, 150); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(125, 174, 150); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(125, 174, 150); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(125, 174, 150); border-top-style: dashed; border-top-width: 1px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 1em; padding-left: 1em; padding-right: 1em; padding-top: 1em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Liberation Mono', 'Andale Mono', 'Vera Sans Mono', Consolas, Courier, monospace; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; line-height: 12px;"&gt;netcat -u -l -p&amp;lt;dport&amp;gt;  &amp;gt;&amp;gt; /var/log/netconsole&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So easy.. and so useful..&lt;br /&gt;&lt;br /&gt;Note: This is different than remote syslogd - which will capture kernel messages over the network - since netconsole is at the kernel level and thus more capable of capturing panics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-7499959786115612630?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/7499959786115612630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/08/netconsole-to-rescue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/7499959786115612630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/7499959786115612630'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/08/netconsole-to-rescue.html' title='NETCONSOLE to the rescue'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-842851350279421542</id><published>2010-05-07T13:50:00.000-04:00</published><updated>2010-05-07T13:50:51.154-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='syncml'/><category scheme='http://www.blogger.com/atom/ns#' term='funambol'/><category scheme='http://www.blogger.com/atom/ns#' term='synthesis'/><title type='text'>Migrating from Palm Treo 680 to Nokia E71 OTA with Funambol</title><content type='html'>Lets say you want to be able to migrate contacts, calendars, tasks and notes from your Treo to a Nokia E71 (or other newer S60 device), and you don't want to go the "Windows/Palm desktop - export/Outlook import -&amp;gt; Nokia Suite -&amp;gt; device" route. &amp;nbsp;I don't use Windows, and I wanted an OTA (over-the-air) sync solution.&lt;br /&gt;&lt;br /&gt;This turned out to be quite simple, thanks to Funambol and SyncML&lt;br /&gt;&lt;br /&gt;There are 3 parts to this - (1) funambol server setup, (2) Funambol client on E71, and (3) Synthesis SyncML client on Palm Treo&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Funambol Server&lt;/b&gt;&lt;br /&gt;https://www.forge.funambol.org/download/&lt;br /&gt;&lt;br /&gt;Simply download, install and launch&lt;br /&gt;-you must have an internet accessible interface&lt;br /&gt;&lt;br /&gt;Next, launch the Funambol Admin Tool : /opt/Funambol/admin/bin/funamboladmin &lt;br /&gt;-login.. open up server properties, and set the URL: &amp;nbsp; http://xx.xx.xx.xx:8080/funambol/ds&lt;br /&gt;&amp;nbsp;&amp;nbsp;(where xx.xx.xx.xx is your public IP)&lt;br /&gt;-click on save&lt;br /&gt;&lt;br /&gt;(you may also want to change the admin password)&lt;br /&gt;&lt;br /&gt;Done!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Funambol Client on Nokia E71&lt;/b&gt;&lt;br /&gt;-you can download from funambol.org or via www.ovi.mobi&lt;br /&gt;-install and configure 3 things&lt;br /&gt;&amp;nbsp;&amp;nbsp;-username&lt;br /&gt;&amp;nbsp;&amp;nbsp;-password&lt;br /&gt;&amp;nbsp;&amp;nbsp;-URL &amp;nbsp;(use same as established on server obviously)&lt;br /&gt;&lt;br /&gt;note: by default, the funambol server does auto-provisioning, so the username/password above is going to be "created" on the server, so choose whatever you wish.&lt;br /&gt;&lt;br /&gt;-perform initial sync&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Synthesis SyncML client&lt;/b&gt;&lt;br /&gt;You can download 30-day trial here:&lt;br /&gt;&lt;a href="http://www.synthesis.ch/dl_client.php?lang=e&amp;amp;lay=desk&amp;amp;bp=CPDA&amp;amp;pv=PALM#dlds_CPDA1"&gt;http://www.synthesis.ch/dl_client.php?lang=e&amp;amp;lay=desk&amp;amp;bp=CPDA&amp;amp;pv=PALM#dlds_CPDA1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-start client, goto Options -&amp;gt; Settings...&lt;br /&gt;-set SyncML Server URL (as per above)&lt;br /&gt;-set username/password (as per above)&lt;br /&gt;-click "options" button&lt;br /&gt;&amp;nbsp;&amp;nbsp;-Server version -&amp;gt; SyncML 1.2 /OMA&lt;br /&gt;&amp;nbsp;&amp;nbsp;-OK&lt;br /&gt;-select databases to sync - and set sync modes to "slow"&lt;br /&gt;&lt;br /&gt;NOTE: &amp;nbsp;database names are set for a specific "SyncML Server", you need to change them using "more.." buttons&lt;br /&gt;&lt;br /&gt;Contacts: &amp;nbsp;server path: &amp;nbsp;card&lt;br /&gt;Events: server path: event&lt;br /&gt;Tasks: server path: task&lt;br /&gt;Notes: server path: note&lt;br /&gt;&lt;br /&gt;-perform sync - this will push everything OTA to funambol server&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Final Step&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;-re-sync your Nokia to grab data from funambol server OTA&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-842851350279421542?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/842851350279421542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/05/migrating-from-palm-treo-680-to-nokia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/842851350279421542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/842851350279421542'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/05/migrating-from-palm-treo-680-to-nokia.html' title='Migrating from Palm Treo 680 to Nokia E71 OTA with Funambol'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-683396135746461283</id><published>2010-04-12T13:35:00.000-04:00</published><updated>2010-04-19T10:43:38.579-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trixbox'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>Trixbox 2.8 CE install via USB</title><content type='html'>Bought an &amp;nbsp;Acer Aspire R1600 for a trixbox install. &amp;nbsp;Nice small form factor, but no cdrom, so the only install options are via USB or network.&lt;br /&gt;&lt;br /&gt;I've used unetbootin for converting ISOs to make bootable USBs before.. never with a problem. &amp;nbsp;But with trixbox.. not so simple - things "seem" to install, but the system ends up being very broken, as the install scripts won't complete properly. &amp;nbsp;There is hard-coded reference to cdrom device in the install config files (anaconda/kickstart). &amp;nbsp; In 2010, its almost inconceivable that there is no install from USB option in trixbox (or asterisknow). &amp;nbsp;I've been administering linux systems (many distros) since 1996, and I've never had such a difficult time with an install.&lt;br /&gt;&lt;br /&gt;I could not find any definitive solution anywhere (even tried the trixbox 2.6 usb install howto, which didn't work - plus its ludicrous that you should need Windows in order to install linux), so I struggled through dozens of reboots until I *finally* got a working trixbox system.&lt;br /&gt;&lt;br /&gt;Unfortunately the Aspire R1600 has some proprietary nvidia NIC, which is not supported by the forcedeth 0.60 module which is supplied with trixbox. &amp;nbsp;I had to find a 0.62 version of kmod-forcedeth which installed on trixbox. &amp;nbsp;But this is no fault of trixbox, but of Acer for making such a stupid decision on NIC.&lt;br /&gt;&lt;br /&gt;Ok, so this is how I did it. &amp;nbsp;If anyone has a simpler solution, please comment.&lt;br /&gt;&lt;br /&gt;1) &amp;nbsp;Use unetbootin ( http://unetbootin.sourceforge.net/ ) with trixbox 2.8 ce ISO to create bootable USB drive&lt;br /&gt;2) &amp;nbsp;remove the trixbox directory from USB drive (its not needed, and I only had 1G, so needed room)&lt;br /&gt;3) &amp;nbsp;copy the trixbox 2.8 ce ISO to the USB drive&lt;br /&gt;4) &amp;nbsp;on USB drive, edit isolinux/ks.cfg &amp;nbsp; &amp;nbsp; comment out "cdrom" line&lt;br /&gt;&lt;br /&gt;5) place USB drive in target system, and configure BIOS to boot from USB, and boot&lt;br /&gt;6) when grub menu presents, scroll down to "default", and press [Tab] to edit command line&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;- change "ks=cdrom:/isolinux/ks.cfg" to "ks=hd:sdb1:/isolinux/ks.cfg" and press enter to boot&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;NOTE: &amp;nbsp;this should work for most.. if you have one drive as sda.. USB drive typcially becomes sdb&lt;br /&gt;&lt;br /&gt;7) installer will proceed, but may try to read from sdb1 prior to kernel detecting device.. it will prompt for kickstart file.. you can just retry.. check Alt-F4 for sdb detection.. (Alt-F1 to get back). &amp;nbsp;Next it will ask for location of ISO... select /dev/sdb1 and continue with install&lt;br /&gt;&lt;br /&gt;For me there was complaint about kmod-dahdi, but in the end.. all install scripts executed fine, and the system was completely operational.&lt;br /&gt;&lt;br /&gt;NOTE: &amp;nbsp;I tried the same type of solution with AsteriskNOW, to no avail.. there was a fatal error as it tried to re-mount a mounted filesystem, and installation aborted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-683396135746461283?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/683396135746461283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/04/trixbox-28-ce-install-via-usb.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/683396135746461283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/683396135746461283'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/04/trixbox-28-ce-install-via-usb.html' title='Trixbox 2.8 CE install via USB'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-8894370855891427552</id><published>2010-03-22T16:39:00.001-04:00</published><updated>2010-03-23T09:05:04.243-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xmlstarlet'/><category scheme='http://www.blogger.com/atom/ns#' term='XPath'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice.org'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Extracting OpenOffice.org Calc cells from the command line</title><content type='html'>In theory it  should be simple... get cell value from ODS file, sheet x, row y, column  z.&lt;br /&gt;&lt;br /&gt;With OpenDocument format, content.xml stores  spreadsheet data with the following schema:&lt;br /&gt;&lt;br /&gt;&amp;lt;table:table&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;table:table-row&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;table:table-cell&amp;gt; ....&lt;br /&gt;&lt;br /&gt;So  a simple XPath expression like  //table:table[1]/table:table-row[5]/table:table-cell[3]&amp;nbsp; should give me  "Sheet1:C5".&lt;br /&gt;&lt;br /&gt;With xmlstarlet command would be:&lt;br /&gt;&lt;br /&gt;xmlstarlet sel -N  office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" -N  table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" -t -v  "//table:table[1]/table:table-row[5]/table:table-cell[3]" content.xml&lt;br /&gt;&lt;br /&gt;BUT..  in order to save space, blank rows and columns are not stored.. instead  an attribute is used to indicate how many blank rows or columns, so you  can see something like &amp;lt;table:table-row&lt;b&gt;  table:number-rows-repeated=10&lt;/b&gt;/&amp;gt;.&lt;br /&gt;&lt;br /&gt;This breaks the  easy XPath expression above, and makes it difficult to find specific  co-ordinates.&lt;br /&gt;&lt;br /&gt;I've developed an XSLT transformation  that will take content.xml and expand it to be indexable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&lt;br /&gt;&amp;nbsp;&amp;nbsp; xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"&lt;br /&gt;&amp;nbsp;&amp;nbsp; xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"&lt;br /&gt;&amp;nbsp;&amp;nbsp; xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:output method = "xml" indent = "yes" encoding = "UTF-8" omit-xml-declaration = "no"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template match="table:table-cell"&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:when test="@table:number-columns-repeated"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="numcols" select="number(@table:number-columns-repeated)"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:when test="$numcols &amp;gt; 1000"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:call-template name="processcol"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="currentCol" select="0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="totalCols" select="1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:call-template name="processcol"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="currentCol" select="0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="totalCols" select="$numcols"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template match="table:table-row"&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:when test="@table:number-rows-repeated"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;xsl:variable name="numrows" select="number(@table:number-rows-repeated)"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:when test="$numrows &amp;gt; 3000"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:call-template name="processrow"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="currentRow" select="0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="totalRows" select="1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:when&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:call-template name="processrow"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="currentRow" select="0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="totalRows" select="$numrows"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template name="processrow"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="currentRow" select="0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="totalRows" select="1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template match="@*|*"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:copy&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:apply-templates select="@*|node()"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="processrow"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:param name="currentRow"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:param name="totalRows"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:when test="$currentRow &amp;lt; $totalRows"&amp;gt;&lt;br /&gt;&amp;lt;xsl:copy&amp;gt;&lt;br /&gt;&amp;lt;xsl:apply-templates select="table:table-cell"/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template name="processrow"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="currentRow" select="$currentRow + 1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="totalRows" select="$totalRows"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:template name="processcol"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:param name="currentCol"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:param name="totalCols"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:when test="$currentCol &amp;lt; $totalCols"&amp;gt;&lt;br /&gt;&amp;lt;xsl:copy-of select="."/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsl:call-template name="processcol"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="currentCol" select="$currentCol + 1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;xsl:with-param name="totalCols" select="$totalCols"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;br /&gt;This can be called simply using : xmlstarlet tr /usr/local/bin/expand.xslt content.xml &amp;gt; output.xml&lt;br /&gt;&lt;br /&gt;and then queried using: xmlstarlet sel -N  office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" -N  table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" -t -v  "//table:table[1]/table:table-row[5]/table:table-cell[3]" output.xml&lt;br /&gt;&lt;br /&gt;NOTE: Since this is using recursive XSLT, I put a cap on 3000 repeated rows, and 1000 repeated columns.&amp;nbsp; So this will work *unless* you have a spreadsheet with over 3000 blank rows (and you want to query row 3005), OR over 1000 blank columns (and you want to query column 1001) .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Putting this all together in a bash script we have:&lt;br /&gt;&lt;blockquote&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# $1&amp;nbsp; ods file&lt;br /&gt;# $2&amp;nbsp; sheet #&lt;br /&gt;# $3&amp;nbsp; row #&lt;br /&gt;# $4&amp;nbsp; column #&lt;br /&gt;&lt;br /&gt;tmpdir=/tmp/ods.$$&lt;br /&gt;mkdir $tmpdir&lt;br /&gt;cp "$1" $tmpdir&lt;br /&gt;cd $tmpdir&lt;br /&gt;IFS="|"&lt;br /&gt;filename=`basename "$1"`&lt;br /&gt;&lt;br /&gt;unzip -qq "$tmpdir/$filename" &lt;br /&gt;&lt;br /&gt;xmlstarlet tr /usr/local/bin/expand.xslt content.xml &amp;gt; output.xml&lt;br /&gt;&lt;br /&gt;xmlstarlet sel -N office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" -N table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" -t -v "//table:table[$2]/table:table-row[$3]/table:table-cell[$4]" output.xml &lt;br /&gt;&lt;br /&gt;cd - &amp;amp;&amp;gt;/dev/null&lt;/blockquote&gt;&lt;blockquote&gt;rm -rf $tmpdir&lt;/blockquote&gt;Invocation looks like this:&lt;br /&gt;&lt;br /&gt;oo_extract_cell.sh Test.ods 1 5 3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-8894370855891427552?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/8894370855891427552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/03/in-theory-it-should-be-simple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8894370855891427552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8894370855891427552'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/03/in-theory-it-should-be-simple.html' title='Extracting OpenOffice.org Calc cells from the command line'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-1358801581910718445</id><published>2010-02-17T16:04:00.000-05:00</published><updated>2010-03-23T09:03:16.707-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PXE'/><category scheme='http://www.blogger.com/atom/ns#' term='dhcp'/><title type='text'>PXE chaining to modernize legacy PXE NICs</title><content type='html'>Ok - so we have faulty/legacy PXE implementation in some onboard NICs, that don't support "next-server"...&amp;nbsp; Here is how to fix...&amp;nbsp;&amp;nbsp; VERY cool!&amp;nbsp; It basically replaces the faulty PXE with a modern gPXE.&lt;br /&gt;&lt;br /&gt;Following these instructions.. build &lt;b&gt;undionly.kpxe&lt;/b&gt; and place in local /tftpboot/&lt;br /&gt;&lt;br /&gt;&lt;a href="http://etherboot.org/wiki/pxechaining"&gt;http://etherboot.org/wiki/pxechaining&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then do something like the following in dhcpd.conf:&lt;br /&gt;&lt;br /&gt;group {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; allow booting;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; option root-path "192.168.202.4:/opt/ltsp/i386";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; host ws042 {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hardware ethernet 00:06:29:DF:2C:52;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fixed-address ws042.dainty.ca;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; option host-name "ws042";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if exists user-class and option user-class = "gPXE" {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next-server 192.168.202.4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filename "/ltsp/i386/pxelinux.0"; #secondary PXEclient&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filename&amp;nbsp; "/tftpboot/undionly.kpxe"; #first boot.. loads gPXE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next-server 192.168.202.4;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filename&amp;nbsp; "/ltsp/i386/nbi.img"; &amp;nbsp;#normal boot image&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-1358801581910718445?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/1358801581910718445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/02/pxe-chaining-to-modernize-legacy-pxe.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/1358801581910718445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/1358801581910718445'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2010/02/pxe-chaining-to-modernize-legacy-pxe.html' title='PXE chaining to modernize legacy PXE NICs'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-6793344000160623815</id><published>2009-10-23T08:34:00.000-04:00</published><updated>2010-03-23T09:02:16.390-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inotify'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Real time log file watcher</title><content type='html'>Have you ever wanted to be notified - in real-time - of an event in a log file?&lt;br /&gt;&lt;br /&gt;This is a very efficient and effective way to do it.. all you need is inotifywait (in inotify-tools package, and of course inotify enabled kernel which is pretty standard these days).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;LOGFILE=/var/log/smdr.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;while inotifywait -qq -e modify $LOGFILE; do&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;x=`tail -n1 $LOGFILE | grep "something"`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;if [ "$x" != "" ]; then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;echo $x | mailx -s "Something happened!" you@abc.org&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;done&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-6793344000160623815?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/6793344000160623815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/real-time-log-file-watcher.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6793344000160623815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6793344000160623815'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/real-time-log-file-watcher.html' title='Real time log file watcher'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-8640572219935759922</id><published>2009-10-21T11:17:00.000-04:00</published><updated>2010-03-23T09:07:28.501-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bind9'/><category scheme='http://www.blogger.com/atom/ns#' term='apache2'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='dhcp'/><title type='text'>Automatic Proxy Howto</title><content type='html'>For business laptops, moving from home to the office - proxy settings can be a pain. You can use browser plugins like "foxy proxy" - but the best solution - bar none - is automatic proxy configuration.&lt;br /&gt;&lt;br /&gt;To get automatic proxy configuration working (at the office where proxy is required), you need a webserver (eg. apache2), a name server (eg. bind9), and a DHCP server (eg. dhcp3).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apache2 config&lt;/b&gt;&lt;br /&gt;* Put javascript into setProxy.pac in you webserver root directory (change it for your domains/proxy)&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;function FindProxyForURL(url, host)&lt;/blockquote&gt;&lt;blockquote&gt;{&lt;/blockquote&gt;&lt;blockquote&gt;if (isPlainHostName(host) ||&lt;/blockquote&gt;&lt;blockquote&gt;dnsDomainIs(host, ".yourdomain1.ca") ||&lt;/blockquote&gt;&lt;blockquote&gt;dnsDomainIs(host, ".yourdomain2.ca"))&lt;/blockquote&gt;&lt;blockquote&gt;return "DIRECT";&lt;/blockquote&gt;&lt;blockquote&gt;else return "PROXY yourproxy.yourdomain.ca:8080; DIRECT";&lt;/blockquote&gt;&lt;blockquote&gt;}&lt;/blockquote&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;* Link wpad.dat to it (ln -s setProxy.pac wpad.dat)&lt;br /&gt;* add the following to apache mime.types file (on ubuntu just /etc/mime.types):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;application/x-ns-proxy-autoconfig       dat&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp;application/x-javascript-config pac&lt;/blockquote&gt;&lt;br /&gt;* restart apache &amp;nbsp;(/etc/init.d/apache2 restart)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bind9 config&lt;/b&gt;&lt;br /&gt;* add the following to /var/cache/bind/db.yourdomain.ca&lt;br /&gt;&lt;blockquote&gt;wpad IN CNAME apachehost.yourdomain.ca.&lt;/blockquote&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;* restart named (don't forget to change serial number) - /etc/init.d/bind9 restart&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In other words, "wpad" has to resolve to your apache server... so client can "ping wpad"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DHCP config&lt;/b&gt;&lt;br /&gt;* add the following to /etc/dhcp3/dhcpd.conf:&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;option wpad code 252 = text;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp;option wpad "http://apachehost.yourdomain.ca/setProxy.pac ";&lt;/blockquote&gt;&amp;nbsp;(last space is MANDATORY - IE strips last char) &lt;br /&gt;&lt;br /&gt;* restart dhcp &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That should do it!&lt;br /&gt;&lt;br /&gt;This works with KDE 4 - w/ Google Chrome (set in KDE network settings). &amp;nbsp;And with Firefox 3.0.14 with "Automatic proxy" option selected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-8640572219935759922?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/8640572219935759922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/automatic-proxy-howto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8640572219935759922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8640572219935759922'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/automatic-proxy-howto.html' title='Automatic Proxy Howto'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-912774185801336534</id><published>2009-10-21T09:56:00.000-04:00</published><updated>2009-10-22T10:28:07.801-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>KDE 4 - Network Manager and KDE Wallet</title><content type='html'>Quite annoyingly the KDE 4.x Network Manager *requires* the KDE Wallet to be enabled to store passwords for secure networks (WEP/WPA).&lt;br /&gt;&lt;br /&gt;If KDE Wallet is enabled - then it requires a password... so you login, and are immediately prompted for KDE Wallet password.&lt;br /&gt;&lt;br /&gt;The only way I found to get around this is to set the KDE wallet password to be blank.&lt;br /&gt;&lt;br /&gt;Click on KDE Wallet in tray, click kdewallet, goto File -&amp;gt; Change Password, and leave both blank.&lt;br /&gt;&lt;br /&gt;IF a system is set to autologin, then I can understand the whole KDE wallet idea - but for users explicitly logging in with a password, KDE Wallet should be accessed transparently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-912774185801336534?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/912774185801336534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/kde-4-network-manager-and-kde-wallet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/912774185801336534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/912774185801336534'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/kde-4-network-manager-and-kde-wallet.html' title='KDE 4 - Network Manager and KDE Wallet'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-385230689034586452</id><published>2009-10-19T16:09:00.007-04:00</published><updated>2009-10-23T12:05:08.432-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Linux performance tuning - I/O wait</title><content type='html'>Have a 64-bit ubuntu linux (hardy) system running 30 KDE desktop sessions (using nomachine's NX) on an IBM bladeserver HS21 with 2 quad-core Xeon's and 16G of RAM.&amp;nbsp; Many times a day, users would experience "freezes" within either firefox or evolution that would last up to about 15 seconds.. window completely unresponsive - then would resume execution.&amp;nbsp; This using the stock 2.6.24-24-generic ubuntu kernel with voluntary prempting.&lt;br /&gt;&lt;br /&gt;After much performance monitoring with sar, and associating the timing of the freezes to sar data, we determined that I/O wait seemed to be the culprit.&amp;nbsp; Real memory usage {used - (cached+buffered)} only ever peaked around 12G, and CPUs were largely idle.&lt;br /&gt;&lt;br /&gt;Disk is 10k rpm 300GB SAS 2.5" drive.. in RAID 1 (mirrored) using HS21 onboard LSI controller.&lt;br /&gt;&lt;br /&gt;I/O Wait is primarily disk I/O but could be network I/O as well, so we decided to tune disk and network.&lt;br /&gt;&lt;br /&gt;Filesystems is using ext3 and mounted with noatime.&lt;br /&gt;&lt;br /&gt;Finding this &lt;a href="http://blog.loxal.net/2008/01/tuning-ext3-for-performance-without.html"&gt;link&lt;/a&gt; , I tried adding the mount options: noatime&lt;b&gt;,nobh,data=writeback,commit=90&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;NOTE: &amp;nbsp;If on root filesystem, you must add "rootflags=nobh,data=writeback,commit=90" in grub.&lt;br /&gt;&lt;br /&gt;After a reboot, and once full load was back on system, I realized a substantial reduction in average IO wait time (from ~50ms to ~25ms), and overall average % disk utilization (from ~15% to ~8% - statistics from iostat).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_xKjJu-fc6uk/SuHUDM7u1cI/AAAAAAAAAAU/Xzl7jk0RnBE/s1600-h/twoweekiostat.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_xKjJu-fc6uk/SuHUDM7u1cI/AAAAAAAAAAU/Xzl7jk0RnBE/s400/twoweekiostat.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This was great improvement but there were still slight 1-2s freezing incidents at this point, so I additionally tweaked the network...&lt;br /&gt;&lt;br /&gt;For network performance tuning I ran across this &lt;a href="http://www.performancewiki.com/linux-tuning.html"&gt;link&lt;/a&gt; and added the following to /etc/sysctl.conf:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;net.ipv4.tcp_tw_reuse=1&lt;/b&gt;&lt;br /&gt;&lt;b&gt;net.ipv4.tcp_fin_timeout=30&lt;/b&gt;&lt;br /&gt;&lt;b&gt;net.ipv4.tcp_keepalive_time=1800&lt;/b&gt;&lt;br /&gt;&lt;b&gt;net.core.wmem_max=8388608&lt;/b&gt;&lt;br /&gt;&lt;b&gt;net.core.rmem_max=8388608&lt;/b&gt;&lt;br /&gt;&lt;b&gt;net.ipv4.tcp_rmem="4096 87380 8388608"&lt;/b&gt;&lt;br /&gt;&lt;b&gt;net.ipv4.tcp_wmem="4096 87380 8388608"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Together, these have stopped the "freezing" altogether.&amp;nbsp; There are still periods of slowness due to load, but now they are few and far between.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-385230689034586452?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/385230689034586452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/linux-performance-tuning-io-wait.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/385230689034586452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/385230689034586452'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/linux-performance-tuning-io-wait.html' title='Linux performance tuning - I/O wait'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_xKjJu-fc6uk/SuHUDM7u1cI/AAAAAAAAAAU/Xzl7jk0RnBE/s72-c/twoweekiostat.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-2067125925372631390</id><published>2009-10-09T14:17:00.006-04:00</published><updated>2009-10-22T10:27:26.386-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Locking Firefox 3 preferences in Ubuntu</title><content type='html'>&lt;span style="background-color: white; color: #4b4742; font-family: georgia, freeserif, serif; font-size: 13px; line-height: 14px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: white; color: #4b4742; font-family: georgia, freeserif, serif; font-size: 13px; line-height: 14px;"&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="color: black;"&gt;Based on &lt;/span&gt;&lt;a href="http://kirksblog.steffensenfamily.com/archives/24"&gt;&lt;span style="color: black;"&gt;http://kirksblog.steffensenfamily.com/archives/24&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="color: black;"&gt;1. Create a file called loadcustom.js in /usr/lib/firefox-3.0.x/defaults/preferences/, where 3.0.x will be something like 3.0.11 or 3.0.14 depending on your current version.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="color: #99ff99;"&gt;&lt;span style="color: black;"&gt;Put the following in /usr/lib/firefox-3.0.x/defaults/preferences/loadcustom.js&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="codelisting" dir="ltr" style="background-color: white; border-bottom-color: rgb(173, 172, 175); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(173, 172, 175); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(173, 172, 175); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(173, 172, 175); border-top-style: dashed; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; line-height: 13px; margin-bottom: 20px; margin-left: 4px; margin-right: 4px; margin-top: 4px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; width: 425px;"&gt;&lt;span style="color: black;"&gt;// tell firefox to load customized config file&lt;br /&gt;pref("general.config.obscure_value", 0);&lt;br /&gt;pref("general.config.filename", "firefox.cfg");&lt;/span&gt;&lt;/pre&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="color: #99ff99;"&gt;&lt;span style="color: black;"&gt;2. Create a file called firefox.cfg in /usr/lib/firefox-3.0.x/ with the following content (the first line in both files must start with a comment):&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="codelisting" dir="ltr" style="background-color: white; border-bottom-color: rgb(173, 172, 175); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(173, 172, 175); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(173, 172, 175); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(173, 172, 175); border-top-style: dashed; border-top-width: 1px; font-family: 'Courier New', Courier, monospace; line-height: 13px; margin-bottom: 20px; margin-left: 4px; margin-right: 4px; margin-top: 4px; overflow-x: auto; overflow-y: auto; padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px; width: 425px;"&gt;&lt;span style="color: black;"&gt;// Lock specific preferences in Firefox so that users cannot edit them&lt;br /&gt;lockPref("app.update.enabled", false);&lt;br /&gt;lockPref("network.proxy.http", "127.0.0.1");&lt;br /&gt;lockPref("network.proxy.http_port", 8080);&lt;br /&gt;lockPref("network.proxy.type", 1);&lt;br /&gt;lockPref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, 192.168.1.0/24");&lt;br /&gt;lockPref("network.proxy.share_proxy_settings", true);&lt;br /&gt;lockPref("browser.startup.homepage", "http://www.desiredhomepage.com/");&lt;/span&gt;&lt;/pre&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="color: black;"&gt;3. Restart Firefox, and the preferences should be locked down. You should be able to use this to lock down any setting in about:config&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-2067125925372631390?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/2067125925372631390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/locking-firefox-3-preferences-in-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/2067125925372631390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/2067125925372631390'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/locking-firefox-3-preferences-in-ubuntu.html' title='Locking Firefox 3 preferences in Ubuntu'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-5144445325831511474</id><published>2009-10-06T13:49:00.004-04:00</published><updated>2009-10-22T10:27:26.386-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>32-bit firefox on 64-bit ubuntu hardy</title><content type='html'>Problem:  External applet which requires Java 1.5 on 64-bit system.. no firefox plugin for Java 1.5 in 64-bit exists to date (Oct. 6, 2009 - and not likely to happen!)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Solution:  Run 32-bit firefox in chroot environment&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Following https://help.ubuntu.com/community/DebootstrapChroot&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;sudo apt-get install debootstrap schroot&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Edit /etc/schroot/schroot.conf  and add the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;[hardy_i386]&lt;/div&gt;&lt;div&gt;  description=Ubuntu 8.04 Hardy for i386&lt;/div&gt;&lt;div&gt;  location=/srv/chroot/hardy_i386&lt;/div&gt;&lt;div&gt;  personality=linux32&lt;/div&gt;&lt;div&gt;  root-users=bob&lt;/div&gt;&lt;div&gt;  run-setup-scripts=true&lt;/div&gt;&lt;div&gt;  run-exec-scripts=true&lt;/div&gt;&lt;div&gt;  type=directory&lt;/div&gt;&lt;div&gt;  users=alice,bob,charlie&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;$ sudo mkdir -p /srv/chroot/hardy_i386&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt; $ sudo debootstrap --variant=buildd --arch i386 hardy /srv/chroot/hardy_i386 http://archive.ubuntu.com/ubuntu/&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Will take a while.. downloads base packages&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt; $ schroot -c hardy_i386 -u root&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;apt-get install ubuntu-minimal&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Edit /etc/apt/sources.list and add "universe multiverse" to end of the line&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;apt-get update&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;apt-get install firefox sun-java5-plugin&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to get NIS working, I had to install nis package and edit /etc/nsswitch.conf accordingly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;IF you don't want your "real" /home mounted in chroot environment, then edit /etc/schroot/setup.d/10mount and comment out (#) line with /home.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You'll have to create /home/username (mkdir /home/username; chown username /home/username)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now exit.. and start again as user: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;$ schroot -c hardy_i386&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;firefox -no-remote   &lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;NOTE: -no-remote is need in case 64-bit firefox is running already&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Goto "about:plugins" to see if Java plugin is available.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-5144445325831511474?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/5144445325831511474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/32-bit-firefox-on-64-bit-ubuntu-hardy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/5144445325831511474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/5144445325831511474'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/10/32-bit-firefox-on-64-bit-ubuntu-hardy.html' title='32-bit firefox on 64-bit ubuntu hardy'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-1825709015386318391</id><published>2009-07-22T08:40:00.004-04:00</published><updated>2009-07-22T08:51:09.718-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Manually removing ubuntu or debian package</title><content type='html'>Ran into an  issue where a package was only partially removed from an ubuntu system - have no clue why..  but it was in a loop.. "apt-get -f install" would try to remove packagex and fail due to not existant post-remove script.&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.debianhelp.org/node/7498#comment-26107"&gt;this post&lt;/a&gt; you can manually remove an ubuntu/debian package doing the following:&lt;br /&gt;&lt;br /&gt;First try: &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;dpkg -P packagex&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;Likely this will still fail so do:&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;dpkg -L packagex&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;this will give you a list of files to delete when the next step is done.&lt;/p&gt; &lt;p&gt;Then go to the directory:&lt;/p&gt; &lt;p&gt;/var/lib/dpkg/info&lt;/p&gt; &lt;p&gt;and delete the file: &lt;/p&gt; &lt;p&gt;packagex.postrm&lt;/p&gt; &lt;p&gt;and do:&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;apt-get remove --purge packagex  &lt;br /&gt;OR&lt;br /&gt;apt-get -f install&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;to finish up, remove all files you found in the 'dpkg -L' step, and directories specific to packagex.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Then run apt-get update&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-1825709015386318391?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/1825709015386318391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/07/manually-removing-ubuntu-or-debian.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/1825709015386318391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/1825709015386318391'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/07/manually-removing-ubuntu-or-debian.html' title='Manually removing ubuntu or debian package'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-725441791070730020</id><published>2009-07-06T10:48:00.003-04:00</published><updated>2009-07-07T10:48:14.915-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rsync'/><title type='text'>rsync and directory renaming</title><content type='html'>rsync is an extremely useful tool - but its one shortcoming is when it comes to file and/or directory renaming.  I am using it to mirror file systems using "rsync -xHau --delete /home remotesystem:/somedir".&lt;br /&gt;&lt;br /&gt;If a file or directory gets renamed on the source host, the entire file or directory gets re-copied.&lt;br /&gt;&lt;br /&gt;For files, there is the --fuzzy option, and there is a patch for "detect-renamed" - but files are less of a problem for me.&lt;br /&gt;&lt;br /&gt;Directory renames are not addressed by any patch or option that I can find, and often results in a much higher transfer volume (especially if a high-level directory is renamed).&lt;br /&gt;&lt;br /&gt;I've developed a strategy that works great in my scenario.. essentially, after every rsync of a file system, a .rsyncname file is created in every directory (to a configurable max depth) simply holding the name of the directory itself.  Before each rsync, all the .rsyncname files are compared to the directory name - and if different, a rename is triggered on the remote system.  This requires top-down processing so I opted for a breadth-first search algorithm (cannot rename a leaf node if higher node needs renaming).&lt;br /&gt;&lt;br /&gt;There are 3 scripts involved, which I called rsyncstorename, rsyncbasename, and rsyncrename, all of which I put in /usr/local/bin on the "source" host.  (not required on the mirror host)&lt;br /&gt;&lt;br /&gt;rsyncstorename:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;dir=$*&lt;br /&gt;x=`cat "$dir/.rsyncname"`&lt;br /&gt;y=`basename "$dir"`&lt;br /&gt;if [ "$x" != "$y" ]; then&lt;br /&gt;  echo $y &gt; "$dir/.rsyncname"&lt;br /&gt;fi&lt;br /&gt;&lt;/blockquote&gt;This is used by rsyncbasename, and not called directly.  The comparison adds a little overhead, but it saves on rsync time overall.  Originally it was just creating the file every run - but each rsync sent every .rsyncname file to remote host.  With this method - its one-time cost.&lt;br /&gt;&lt;br /&gt;rsyncbasename:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#$1 = path&lt;br /&gt;#$2 = max depth&lt;br /&gt;&lt;br /&gt;find $1 -maxdepth $2 -mount -type d -exec /usr/local/bin/rsyncstorename {} \;&lt;/blockquote&gt;&lt;br /&gt;Very simple.. pass the file system path and the desired max depth (eg. "rsyncbasename /home 4"), but is called from rsyncrename script.  Doesn't cross file-system boundaries.&lt;br /&gt;&lt;br /&gt;rsyncrename:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;#$1 = path&lt;br /&gt;#$2 = max depth&lt;br /&gt;remotepath=/mnt/disk&lt;br /&gt;remotehost=somehost&lt;br /&gt;&lt;br /&gt;r ()&lt;br /&gt;{&lt;br /&gt;    let level=$3+1&lt;br /&gt;    if [ $level -gt $4 ]; then return 0; fi&lt;br /&gt;    cd "$1"&lt;br /&gt;    for d in *; do&lt;br /&gt;        if [ -d "$d" ]; then&lt;br /&gt;                if [ -L "$d" ]; then&lt;br /&gt;                        echo "skipping symbolic link"&lt;br /&gt;                else&lt;br /&gt;                        if [ -f "$d/.rsyncname" ]; then&lt;br /&gt;                                x=`cat "$d/.rsyncname"`&lt;br /&gt;                                y=`basename "$d"`&lt;br /&gt;                                if [ "$x" != "$y" ]; then&lt;br /&gt;                                        echo renaming $remotepath$2/$x to $remotepath$2/$d&lt;br /&gt;                                        ssh $remotehost mv "$remotepath$2/$x" "$remotepath$2/$d"&lt;br /&gt;                                fi&lt;br /&gt;                        fi&lt;br /&gt;                fi&lt;br /&gt;        fi;&lt;br /&gt;    done&lt;br /&gt;    for d in *; do&lt;br /&gt;        if [ -d "$d" ]; then&lt;br /&gt;            (r "$d" "$2/$d" $level $4)&lt;br /&gt;        fi;&lt;br /&gt;    done&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;r "$1" "$1" 0 "$2"&lt;br /&gt;rsync -xHau --delete $1 $remotehost:$remotepath`dirname $1`&lt;br /&gt;/usr/local/bin/rsyncbasename $1 $2&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Arguments are again path and depth (eg. "rsyncrename /home 4").  Change remotehost and remotepath to whatever is required.  NOTE:  Script expects file system mirror on remotehost:remotepath - ie. if you wish to rsync a sub-directory, eg. /home/userA, then remotehost:remotepath/home must exist.  This script combines the rsync and the renaming.  Note the sequence, renaming, rsync, then rsyncbasename.  Will only work on 2nd iteration, since first time no renaming will occur and .rsyncname files will be created.&lt;br /&gt;&lt;br /&gt;BTW.. bash based breadth-first-search algorithm grabbed from &lt;a href="http://stackoverflow.com/questions/539583/how-do-i-recursively-list-all-directories-at-a-location-breadth-first"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;NOTE:  This method does not handle if a directory branch is relocated (eg. "mv /home/userA/mail /home/userB/mail2") .. rsync will handle this, but everything in the branch will be copied.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-725441791070730020?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/725441791070730020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/07/rsync-and-directory-renaming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/725441791070730020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/725441791070730020'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/07/rsync-and-directory-renaming.html' title='rsync and directory renaming'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-5521791537830039811</id><published>2009-06-26T15:56:00.003-04:00</published><updated>2009-06-26T16:04:36.222-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='4gl'/><title type='text'>4GL comma split function</title><content type='html'>not really.. but if you want to iterate over a delimited string via 4gl, you can do the following:&lt;br /&gt;&lt;br /&gt;(parse_str function adapted from &lt;a href="http://www.tek-tips.com/faqs.cfm?fid=2364"&gt;http://www.tek-tips.com/faqs.cfm?fid=2364&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;# This function searches string for an instance of char_delim&lt;br /&gt;# starting at position cnt and returns the string ending at the next&lt;br /&gt;# char_delim or the end of string&lt;br /&gt;######################################################################&lt;br /&gt;function parse_str(char_delim, cnt, string)&lt;br /&gt;######################################################################&lt;br /&gt;define&lt;br /&gt;   char_delim CHAR(1),   # character delimiter&lt;br /&gt;   cnt SMALLINT,         # postion in string to start counting&lt;br /&gt;   string CHAR(300),     # string to search&lt;br /&gt;   ret_string CHAR(40),  # string returned&lt;br /&gt;   i,                    # index&lt;br /&gt;   x,                    # counter&lt;br /&gt;   string_len SMALLINT   # string length&lt;br /&gt;&lt;br /&gt;   LET string_len = LENGTH(string)&lt;br /&gt;&lt;br /&gt;   IF string_len = 0 # got a null string&lt;br /&gt;   THEN&lt;br /&gt;     RETURN "",0&lt;br /&gt;   END IF&lt;br /&gt;&lt;br /&gt;   IF string[cnt] = char_delim&lt;br /&gt;   THEN&lt;br /&gt;      LET cnt = cnt + 1 # get off the delimiter&lt;br /&gt;   END IF&lt;br /&gt;   IF cnt &gt; string_len&lt;br /&gt;   THEN # return when the end of the string is reached&lt;br /&gt;     RETURN "",0&lt;br /&gt;   END IF&lt;br /&gt;&lt;br /&gt;   LET x = 1&lt;br /&gt;   FOR i = cnt TO string_len&lt;br /&gt;      IF string[i] = char_delim&lt;br /&gt;      THEN&lt;br /&gt;         EXIT FOR&lt;br /&gt;      END IF&lt;br /&gt;      LET ret_string[x] = string[i]  # save a character&lt;br /&gt;      LET x = x + 1&lt;br /&gt;   END FOR&lt;br /&gt;&lt;br /&gt;   return ret_string, i # return the positon ended&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;function split(f_orig)&lt;br /&gt;define f_orig,f_str char(100), x, f_pos smallint&lt;br /&gt;  let x = length(f_orig)&lt;br /&gt;  let f_pos = 1&lt;br /&gt;  while (f_pos &gt; 0 and f_pos &lt; x)&lt;br /&gt;    call parse_str(",",f_pos,f_orig) returning f_str, f_pos&lt;br /&gt;    display f_str, f_pos&lt;br /&gt;  end while&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;main&lt;br /&gt;  call split("some,comma,delimited,string")&lt;br /&gt;end main&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-5521791537830039811?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/5521791537830039811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/4gl-comma-split-function.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/5521791537830039811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/5521791537830039811'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/4gl-comma-split-function.html' title='4GL comma split function'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-6389721657052744642</id><published>2009-06-26T08:04:00.003-04:00</published><updated>2009-06-26T16:05:10.608-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='informix'/><category scheme='http://www.blogger.com/atom/ns#' term='aubit4gl'/><title type='text'>Aubit4GL:  connecting to mysql and informix concurrently</title><content type='html'>Since database connections seems to be compile time, and you have to set A4GL_SQLTYPE in order to compile against database X - I wonder how you can open concurrent connections..  I cannot find any documentation on how to do this - but according to &lt;a href="http://aubit4gl.sourceforge.net/aubit4gldoc/manual/html/features_summary.html"&gt;http://aubit4gl.sourceforge.net/aubit4gldoc/manual/html/features_summary.html&lt;/a&gt; it maybe that you have to use ODBC connections to each instead of native??&lt;br /&gt;&lt;br /&gt;It seems that "open session" and "use session" can be used to dynamically switch at runtime.  But compile time seems to be the kicker.. especially if you use "define x like table.column" in 4gl, unless it allows "define x like db.table.column" or searches both databases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-6389721657052744642?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/6389721657052744642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/aubit4gl-connecting-to-mysql-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6389721657052744642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/6389721657052744642'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/aubit4gl-connecting-to-mysql-and.html' title='Aubit4GL:  connecting to mysql and informix concurrently'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-8886018048986661819</id><published>2009-06-25T10:46:00.003-04:00</published><updated>2009-06-26T07:59:49.365-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='aubit4gl'/><title type='text'>Aubit4GL:  mysql connection specification</title><content type='html'>Since this is not well documented on Aubit4gl site, posting here:&lt;br /&gt;&lt;br /&gt;To connect to mysql database:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make sure your mysql server is not bound to localhost - even local connections are via hostname&lt;/li&gt;&lt;li&gt;Make sure you can connect to mysql server.. grant at least select privs using "grant select on db.* to 'test'@'hostname' identified by 'test';"  NOTE:  localhost privs are not enough - connection thru hostname.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Do "export MYSQL_SERVER=hostname"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set/export the following environment variables:&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;A4GL_SQLUID=test   #whatever connection user is&lt;br /&gt;A4GL_SQLPWD=test   #whatever connection password is&lt;br /&gt;A4GL_LEXDIALECT=INFORMIX&lt;br /&gt;A4GL_LEXTYPE=C&lt;br /&gt;A4GL_SQLTYPE=mysql&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;And now take the simple.4gl program:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;database test  # of whatever your database name is&lt;br /&gt;&lt;br /&gt;main&lt;br /&gt; display "Hello World"&lt;br /&gt;end main&lt;/blockquote&gt;&lt;br /&gt;Compile with : aubit 4glpc simple.4gl -o simple.4ae&lt;br /&gt;&lt;br /&gt;If it compiles - database connection is ok!&lt;br /&gt;&lt;br /&gt;Thanks to Mike's comment below - using .aubit4gl.acl  to store database:user:pw DOES work.. just be sure to "unset A4GL_SQLUID" and "unset A4GL_SQLPWD".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-8886018048986661819?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/8886018048986661819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/aubit4gl-mysql-connection-specification.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8886018048986661819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/8886018048986661819'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/aubit4gl-mysql-connection-specification.html' title='Aubit4GL:  mysql connection specification'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-1846384711862303149</id><published>2009-06-25T07:44:00.000-04:00</published><updated>2009-06-25T08:39:32.627-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webcam'/><category scheme='http://www.blogger.com/atom/ns#' term='logitech'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='hardy'/><title type='text'>Logitech Quickcam Pro 9000 on ubuntu hardy - no go</title><content type='html'>On initial plugin:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[  102.851571] usb 3-1: new full speed USB device using uhci_hcd and address 2&lt;br /&gt;[   44.040462] usb 3-1: device descriptor read/64, error -71&lt;br /&gt;[  102.933128] usb 3-1: device descriptor read/64, error -71&lt;br /&gt;[  102.939599] usb 3-1: new full speed USB device using uhci_hcd and address 3&lt;br /&gt;[  102.945009] usb 3-1: device descriptor read/64, error -71&lt;br /&gt;[  102.970417] usb 3-1: device descriptor read/64, error -71&lt;br /&gt;[  102.983105] usb 3-1: new full speed USB device using uhci_hcd and address 4&lt;br /&gt;[  103.020497] usb 3-1: device not accepting address 4, error -71&lt;br /&gt;[  103.025529] usb 3-1: new full speed USB device using uhci_hcd and address 5&lt;br /&gt;[  103.060941] usb 3-1: device not accepting address 5, error -71&lt;br /&gt;[  116.499098] usb 5-5: new high speed USB device using ehci_hcd and address 5&lt;br /&gt;[  116.627482] usb 5-5: configuration #1 chosen from 1 choice&lt;/blockquote&gt;&lt;br /&gt;and&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;lsusb -d 046d:0990 -v | grep bcdDevice&lt;br /&gt;bcdDevice            0.08&lt;/blockquote&gt;which according to&lt;a href="http://www.quickcamteam.net/documentation/faq/how-many-versions-of-the-quickcam-pro-9000-are-there"&gt; http://www.quickcamteam.net/documentation/faq/how-many-versions-of-the-quickcam-pro-9000-are-there&lt;/a&gt; says its third generation with buggy firmware.&lt;br /&gt;&lt;br /&gt;If I launch cheese - system hangs completely.&lt;br /&gt;&lt;br /&gt;According to http://linux-uvc.berlios.de/, linux 2.6.26 includes linux uvc driver natively.. but hardy is 2.6.24.&lt;br /&gt;&lt;br /&gt;Downloaded the driver from &lt;a href="http://linuxtv.org/hg/%7Epinchartl/uvcvideo/"&gt;http://linuxtv.org/hg/~pinchartl/uvcvideo/&lt;/a&gt; (gz link) and then..&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;tar zxvf uvcvideo-bff77ec33116.tar.gz&lt;br /&gt;cd uvcvideo-bff77ec33116/&lt;br /&gt;make   # and go have a coffee&lt;br /&gt;sudo make install&lt;br /&gt;reboot&lt;/blockquote&gt;dmesg now shows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[  105.937744] usb 5-5: new high speed USB device using ehci_hcd and address 3&lt;br /&gt;[  106.197507] usb 5-5: configuration #1 chosen from 1 choice&lt;br /&gt;[  107.127908] Linux video capture interface: v2.00&lt;br /&gt;[  107.135021] usbcore: registered new interface driver snd-usb-audio&lt;br /&gt;[   45.915452] uvcvideo: Found UVC 1.00 device &lt;unnamed&gt; (046d:0990)&lt;br /&gt;[   45.932166] input: UVC Camera (046d:0990) as /devices/pci0000:00/0000:00:1d.7/usb5/5-5/5-5:1.0/input/input10&lt;br /&gt;[   45.962220] usbcore: registered new interface driver uvcvideo&lt;br /&gt;[   45.962226] USB Video Class driver (v0.1.0)&lt;/unnamed&gt;&lt;/blockquote&gt;&lt;br /&gt;cheese shows no output&lt;br /&gt;skype neither&lt;br /&gt;dmesg now shows&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[  177.592621] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;br /&gt;[  177.976920] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;br /&gt;[  178.401788] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;br /&gt;[  178.807251] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;br /&gt;[  179.193500] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;br /&gt;[  179.743456] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;br /&gt;[  180.154183] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;br /&gt;[  180.655020] uvcvideo: Failed to set UVC probe control : -110 (exp. 26).&lt;/blockquote&gt;&lt;br /&gt;skype reports&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Skype V4L2: Could not find a suitable capture format&lt;br /&gt;Skype V4L2: Could not find a suitable capture format&lt;/blockquote&gt;&lt;br /&gt;Aborting effort for now..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-1846384711862303149?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/1846384711862303149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/logitech-quickcam-pro-9000-on-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/1846384711862303149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/1846384711862303149'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/logitech-quickcam-pro-9000-on-ubuntu.html' title='Logitech Quickcam Pro 9000 on ubuntu hardy - no go'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-2439391287775603763</id><published>2009-06-23T13:01:00.000-04:00</published><updated>2009-06-24T13:00:32.459-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='informix'/><title type='text'>mysqldump to informix DS</title><content type='html'>Problem:  Need to access mysql 5.0 data from 4js BDL (I4gl)&lt;br /&gt;&lt;br /&gt;Solution attempts:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;  generate 4js dynamic VM with mysql support..  no mysql 5.0 support (only 4.x)  and not forward compatible&lt;/li&gt;&lt;li&gt; try aubit4gl with mysql support..  no go.. see &lt;a href="http://serenadetoacuckooo.blogspot.com/2009/06/aubit4gl-and-libmysqld.html"&gt;this&lt;/a&gt;&lt;/li&gt;&lt;li&gt; call script to unload mysql table and then load into informix&lt;/li&gt;&lt;/ol&gt;On solution attempt 3 - this proved more difficult than I first imagined.&lt;br /&gt;&lt;br /&gt;I've been spoiled with Informix's very easy "unload to".  Mysql simply has no equivalent.  There is the "SELECT INTO OUTFILE", but (1) you need to "grant file on *.* to 'user'@'whateverhost'" (besides select permission of course), and (2) can be run from a remote host, but the output file is local to the mysql server instance.. and while you can use NFS, its a pain. &lt;br /&gt;&lt;br /&gt;Also there is mysqldump - which I thought might do it.. but alas, if you use the --tab option it uses "SELECT INTO OUTFILE" internally anyway - plus you need to "grant lock tables on db.* to 'user'@'whateverhost'".&lt;br /&gt;&lt;br /&gt;Ok - so had to revise my strategy - since I am running this script on remote host... this generates ansi "insert" statements that I will try to execute against informix:&lt;br /&gt;&lt;br /&gt;mysqldump -h mysqlhost -usomeuser -psomepassword --compatible=ansi --no-create-info --compact dbname tablename &gt; x.sql&lt;br /&gt;&lt;br /&gt;Kinda works..   doesn't like text fields (clob datatype in informix).. and date formating could be an issue (easily fixed with informix DBDATE environment variable).. but certainly not as easy as I imagined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-2439391287775603763?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/2439391287775603763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/mysqldump-to-informix-ds.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/2439391287775603763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/2439391287775603763'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/mysqldump-to-informix-ds.html' title='mysqldump to informix DS'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-241564159131015983</id><published>2009-06-23T08:18:00.000-04:00</published><updated>2011-03-15T11:23:59.613-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bladecenter'/><category scheme='http://www.blogger.com/atom/ns#' term='snmp'/><category scheme='http://www.blogger.com/atom/ns#' term='ibm'/><category scheme='http://www.blogger.com/atom/ns#' term='nagios'/><title type='text'>BladeCenter S vitals via SNMP - installing MIBs</title><content type='html'>Thanks to this post:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.barfoo.org/2009/02/10/monitoring-the-ibm-bladecenter-chassis-with-nagios/"&gt;http://blog.barfoo.org/2009/02/10/monitoring-the-ibm-bladecenter-chassis-with-nagios/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was able to use SNMP to get all kinds of info from my BladeCenter S - and specifically have it monitored with nagios.  The original poster stated that the OIDs weren't documented anywhere.. but that is what the mib file is.. you just need to install it..&lt;br /&gt;&lt;br /&gt;Here is how to install the MIBs from the IBM &lt;a href="http://www-947.ibm.com/systems/support/supportsite.wss/docdisplay?lndocid=MIGR-5078305&amp;amp;brandind=5000020"&gt;firmware &lt;/a&gt; (mmblade.mib) on ubunutu (requires snmp package):&lt;br /&gt;&lt;br /&gt;copy mmblade.mib (contained in the firmware download) to /usr/share/snmp/mibs/BLADE-MIB.txt&lt;br /&gt;&lt;br /&gt;(if you want alerts.. copy mmalerts.mib to /usr/share/snmp/mibs/BLADESPPALT-MIB.txt)&lt;br /&gt;&lt;br /&gt;You now have access to over 10,000 settings..  you can get a complete list by doing:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;snmpwalk -v1 -c public -Of ipaddress-of-bladecenterS -m BLADE-MID enterprises.ibm&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and then for example, to find the front panel temperature:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;snmpwalk -v1 -c public -Of ipaddress-of-bladecenterS -m BLADE-MIB enterprises.ibm.ibmAgents.netfinitySupportProcessorAgent.&lt;br /&gt;bladeCenterSnmpMIB.monitors.temperature.ambientTemp.&lt;br /&gt;frontPanelTemp.0&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;which, although quite verbose.. is more human readable than&lt;br /&gt;&lt;pre class="bash" face="monospace"&gt;&lt;blockquote&gt;snmpwalk -v1 -c public -Of ipaddress-of-bladecenterS&lt;br /&gt;.1.3.6.1.4.1.2.3.51.2.2.1.5.1.0&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-241564159131015983?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/241564159131015983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/bladecenter-s-vitals-via-snmp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/241564159131015983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/241564159131015983'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/bladecenter-s-vitals-via-snmp.html' title='BladeCenter S vitals via SNMP - installing MIBs'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6676106307470710365.post-3186759376522770365</id><published>2009-06-22T15:06:00.000-04:00</published><updated>2009-06-24T16:46:54.722-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='aubit4gl'/><title type='text'>Aubit4GL and libmysqld</title><content type='html'>Had a frustrating time trying to build aubit4gl on ubuntu with mysql support.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;/usr/bin/ld: /usr/lib/mysql/libmysqld.a(net_serv.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC&lt;br /&gt;/usr/lib/mysql/libmysqld.a: could not read symbols: Bad value&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is from libmysqlclient15-dev package.  Turns out its not even an ubuntu issue.. its actual mysql bug:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bugs.mysql.com/bug.php?id=39288"&gt;http://bugs.mysql.com/bug.php?id=39288&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I did see somewhere that it was fixed in libmysqlclient16-dev  - which is not available in hardy (8.04) which I need.&lt;br /&gt;&lt;br /&gt;I stumbled upon this &lt;a href="http://amarok.kde.org/wiki/Development/MySQL_Embedded"&gt;link&lt;/a&gt; and was able to build a relocatable libmysqld.. but then I ran it this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;gcc -shared -L/lib -o /opt/aubit4gl/src/plugins-1.10RC_62/libSQL_mysqldb.so db-mysql.o -L/usr/local/lib -L/usr/local/mysql -L/usr/lib/mysql -L/usr/lib -L/opt/aubit4gl/src/lib -lmysqld -laubit4gl-1.10RC_62 -Wl,-Bsymbolic-functions -L/usr/lib/mysql -lmysqld -lwrap -lrt&lt;br /&gt;/usr/bin/ld: cannot find -lwrap&lt;/blockquote&gt;even though libwrap is in /lib  .. arrrg    ok.. so I did the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;cd lib/libsql/mysql&lt;br /&gt;gcc -shared -L/lib -o /opt/aubit4gl/src/plugins-1.10RC_62/libSQL_mysqldb.so db-mysql.o -L/usr/local/lib -L/usr/local/mysql -L/usr/lib/mysql -L/usr/lib -L/opt/aubit4gl/src/lib -lmysqld -laubit4gl-1.10RC_62 -Wl,-Bsymbolic-functions -L/usr/lib/mysql -lmysqld&lt;br /&gt;cd ../../..&lt;br /&gt;make&lt;/blockquote&gt;(ie. I just removed -lwrap and -lrt   and it went ok) and proceeded to compile the remainder of aubit4gl.  Now to test against mysql&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6676106307470710365-3186759376522770365?l=serenadetoacuckooo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://serenadetoacuckooo.blogspot.com/feeds/3186759376522770365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/aubit4gl-and-libmysqld.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/3186759376522770365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6676106307470710365/posts/default/3186759376522770365'/><link rel='alternate' type='text/html' href='http://serenadetoacuckooo.blogspot.com/2009/06/aubit4gl-and-libmysqld.html' title='Aubit4GL and libmysqld'/><author><name>Bob</name><uri>http://www.blogger.com/profile/07915031485219244351</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
