Friday, February 20, 2015

Valentines Day 2015

We visited Chocolate the Restaurant on Valentines Day and had the following:

  • Olive dipping pool and crusty bread (served room temperature)
  • Mixed vegetarian antipasto
  • Organic baby greens salad
  • Baked pasta rosettes with fresh black Périgord truffles from France (Tuber melanosporum)
  • Dessert orgy (advertise as "an assortment of bite sized sweets to share" but presented with chocolate cake with mint chip ice cream and ganache-covered ice cream...tasted like caramel cappuccino...no complaints)
  • Optional: we chose a wine, "Cave de Ribeauville Giersberger Cremant d'Alsace Pinot Noir Rose Brut, France" (for example)




Radio songs

KMVQ 99.7 FM out of San Francisco:

Hebden Bridge, West Yorkshire, UK-native Ed Sheeran's "Thinking Out Loud" from his 2014 album "X" on the Asylum & Atlantic labels. Video

KRBQ 102.1 FM out of San Francisco:

??? Inquired with the station...apparently part of a playlist which they have not posted....

Nashua, New Hampshire-native Ray LaMontagne - "You Are The Best Thing", from his 2008 album "Gossip in the Grain" on the label. Audio--that voice!

KKUP 91.5 FM out of Cupertino:

10:15 a.m. - jazzy, sort of Saturday Night Live outro-like

1:50 p.m. - sort of a movie dramatic classical piece

Apparently they only post things in retrospect (?)

Wednesday, February 18, 2015

GeneTorrent - Building release 3.8.7 on Debian Wheezy stable+backports system

BACKGROUND

The University of Californa at Santa Cruz Genomics Institute, established in 2014, connects many efforts, including the UC Santa Cruz Cancer Genomics Hub, launched in 2012:
The Cancer Genomics Hub (CGHub) is a central repository for the genomics information for three different National Cancer Institute (NCI) programs, including The Cancer Genomics Atlas (TCGA). In addition to providing a repository, CGHub supports the establishment of standards and application programming interfaces (APIs), and provides support to end users.
An aside: Dawn says she thinks of the 1990's-era television series MST3K when she hears the name "Genomics Institute," because the name sounds like Gizmonic Institute, the fictitious cover organization of the show's antagonists. They send bad movies to the show's protagonist, Joel Robinson, as part of a psychological experiment. Note: Of course, UC Santa Cruz Genomics Institute staff do not compare, to my knowledge, to the antagonists in MST3K! : o )

CGHub staff provide "binary and source distributions of the GeneTorrent client software for downloading sequence data from CGHub's repository. The distribution contains two main programs: gtdownload and cgquery." Note: CGHub staff have a few other packages available at their bitbucket repository.

From my very limited, outsider experience with the project, it seems UCSC CGHub staff contracted with a private vendor, Annai Systems, Inc., to obtain the GeneTorrent client software and the other architectural components needed to store and transfer the terabytes (possibly petabytes, now) of cancer genome data.

From a 2012 press release, it appears UCSC CGHub licensed technology from Annai Systems Inc. to support the acquisition of a "new 5-petabyte-capacity data repository." The press release indicates the UCSC CGHub deployment represented the first release of the Annai Systems, Inc. architecture. Dr. David Haussler, Professor of Biomolecular Engineering at UCSC, who leads the CGHub project, stated, "Annai has been an exceptional partner in the development of CGHub." This seems to imply UCSC CGHub staff paid Annai Systems staff to create and maintain the system, at least initially, in combination with some on-campus dedicated operational support. From commit logs, it appears CGHub staff maintain GeneTorrent. Less likely, to me, they may only apply patches from the vendor. (?)

For what it's worth, Annai Systems staff seem to have sub-contracted some or most of the development work, at least on GeneTorrent, to private vendor Cardinal Peak (for example, see GeneTorrent repository file headers ./README, which states, "Created under contract by Cardinal Peak, LLC.  www.cardinalpeak.com"--the header reads "Copyright (c) 2011-2012, Annai Systems, Inc.")

Annai Systems, in a 2013 whitepaper, describes GeneTorrent as follows:
"Whole genome sequence data files range from several hundred gigabytes to over one terabyte in size. GeneTorrent enables accelerated transfers of terabyte-scale data. It employs a proprietary variant of the popular BitTorrent algorithm to securely transfer files at speeds limited only by the base network bandwidth. 
Technical Specifications 
GeneTorrent’s key functionality is as follows:
  • High-fidelity parallel file transfer at up to multi-Gbits/sec (speeds as high as 200 Mbps are routinely achieved) 
  • Highly resilient to in-network and computing failures with automatic recovery
  • Highly secure 256-bit encrypted file transfer"
Whitepaper notwithstanding, it seems to me the GeneTorrent client's ability to operate within the larger ecosystem of the Annai Systems architecture represents the main selling point of the client. It does seem they have extended libtorrent in some minor ways, but I have not had time to investigate fully.

GENETORRENT INTERNALS

The source code reveals GeneTorrent version 3.8.7 relies primarily on release 0.16 of package libtorrent, which seems to represent the version extant in March 2012, during initial development:
"libtorrent is a C++ library that aims to be a good alternative to all the other bittorrent implementations around. It is a library and not a full featured client, although it comes with a working example client."
Currently at release 1.0.3, libtorrent originates from Swedish programmer Arvid Norberg, which also explains the origin of the word rasterbar, which I noticed frequently while building GeneTorrent. Rasterbar represents the name of a Swedish company, Rasterbar Software, which was founded in Umeå, Sweden. This further explains the shout-out of libtorrent developers to Umeå University for "providing development and test hardware" for the libtorrent project.

The source code also relies on project xqilla (which requires xerces-c) for XML parsing, OpenSSL for encryption, libcurl for file transfer, and boost (used for building libtorrent and GeneTorrent).

BUILDING GENETORRENT

First, install prerequisite packages:
  • autoconf
  • devscripts
  • gettext
  • libboost-all-dev
  • sudo apt-get install libp11-kit0/wheezy (note: "/wheezy" overrides installing from backports repository, to prepare the way to install libcurl4-openssl-dev)
  • libcurl4-openssl-dev (note: override backports, as above, first)
  • libtool
  • libxerces-c-dev
  • libxqilla-dev
  • lsb
  • python-openssl
  • xqilla
Second, download the source:

Go here, then select link "Download repository" (currently; all versions)

Optionally (if not the first go-round): rm -rf cghub-genetorrent-476d7bd44985
unzip cghub-genetorrent-476d7bd44985.zip
cd cghub-genetorrent-476d7bd44985

Third, customize for Debian Wheezy (7.8), as the source code currently seems to only support Debian Squeeze (6.0.6), out-of-the-box:

# Make Wheezy dpkg the same as squeeze...
ln -s squeeze dpkg/wheezy

# grab all ./dpkg/Makefile.am lines with squeeze, modify them to wheezy, fix the spacing of backslashes,
# then insert the modified lines back into ./dpkg/Makefile.am
export _cghub_file=./dpkg/Makefile.am && \
export _cghub_text=$(grep squeeze ./dpkg/Makefile.am | sed 's/squeeze/wheezy/g;s/\\/ \\/g') && \
awk '/squeeze/ && !done { print ENVIRON["_cghub_text"] ; done=1;}; 1;' $_cghub_file > ${_cghub_file}.new && \
mv ${_cghub_file}.new $_cghub_file && \
unset _cghub_text _cghub_file

# NOTE: Manually patch ./Makefile.am as follows ... too complicated to script, for now
# line numbers precede the actual line contents
# Note: the name--in this case, wheezy--must match the results of command "lsb_release -cs"
128 .PHONY: deb deb-builder deb-trusty deb-saucy deb-raring deb-precise deb-quantal deb-oneiric deb-lucid deb-squeeze deb-wheezy
161 
162 # Debian wheezy (7.8)
163 deb-wheezy:
164   $(MAKE) DEB_DISTRO_TAG=debian${DEB_PACKAGE_VER}-${DEB_RELEASE} deb-builder

# Rebuild Makefile.in ....
./autoregen.sh

Fourth, start building dependencies:

# Build dependencies
deps/boost/buildGeneTorrentBoost.sh && \
deps/openssl/buildGeneTorrentOpenSSL.sh && \
deps/xerces-c/buildGeneTorrentXerces-C.sh && \
deps/xqilla/buildGeneTorrentXQilla.sh

Fifth, fix what seems like a non-git bug in the configure script, which causes configure to not generate file src/gt_scm_rev.h:

# Fix missing header file src/gt_scm_rev.h (?)
# The GeneTorrent 3.8.5 release's NEWS file, dated March, 2014, states:
# "Generate gt_scm_rev.h during configure instead of make. That way it is included in the source
# distribution, make clean doesn't remove it, make install doesn't skip its creation."
# However, configure seems to fail and not create it (?) This needs verification.
# First, touch .git file, per scm-rev-update, which requires it to proceed to generating the file
# Second, re-run scm-rev-update to produce the file
# Possibly, this validation step prevents the creation of the file in non-git source builds (?), causing
# the error (?)
touch ./scripts/.git
./scripts/scm-rev-update

Sixth, configure with dependencies (optionally, with debug/verbose):

# Configure
# Note: To enable verbose logging, configure with --enable-logging=verbose
# Note: To create a debug build, configure with --enable-debug --enable-logging=verbose
./configure --with-boost=$PWD/deps/boost --with-openssl=$PWD/deps/openssl --with-xerces=$PWD/deps/xerces-c --with-xqilla=$PWD/deps/xqilla

Seventh, build the Debian packages (optionally, make install?):

# Build
# Note: make deb seems to represent a wrapper around make dist
make deb

Done, hopefully, without errors.

TO-DO

Try running gtdownload and cgquery and gtupload and cgsubmit programs.

NOTES - LIBCURL4-OPENSSL-DEV INSTALL ERROR

I got to a certain point and saw this configure error:
checking curl/curl.h usability... no
checking curl/curl.h presence... no
checking for curl/curl.h... no
configure: error: curl headers required but not found
So, who provides curl.h?
File Packages
/usr/include/curl/curl.h libcurl4-gnutls-dev, libcurl4-nss-dev, libcurl4-openssl-dev
/usr/include/discover/curl.h libdiscover-dev
/usr/include/lua5.1/lua-curl.h lua-curl-dev
/usr/include/rheolef/curl.h librheolef-dev [not armel, armhf]
/usr/include/rheolef/s_curl.h librheolef-dev [not armel, armhf]Attempts to install libcurl4-gnutls-dev, libcurl4-nss-dev, or libcurl4-openssl-dev results in errors:
Attempts to install libcurl4-openssl-dev:
The following packages have unmet dependencies:
libcurl4-openssl-dev : Depends: librtmp-dev but it is not going to be installed
Conflicts: libcurl-dev
Conflicts: libcurl4-gnutls-dev but 7.26.0-1+wheezy12 is to be installed
Conflicts: libcurl4-nss-dev but 7.26.0-1+wheezy12 is to be installed
E: Unable to correct problems, you have held broken packages.
Seems like they all depend on package librtmp-dev. Drilling down into this:
sudo apt-get install librtmp-dev
The following packages have unmet dependencies:
librtmp-dev : Depends: libgnutls-dev but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Uh-oh...going further...
sudo apt-get install libgnutls-dev
The following packages have unmet dependencies:
libgnutls-dev : Depends: libp11-kit-dev (>= 0.4) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Erm...almost there (?)
sudo apt-get install libp11-kit-dev
The following packages have unmet dependencies:
libp11-kit-dev : Depends: libp11-kit0 (= 0.12-3) but 0.20.7-1~bpo70+1 is to be installed
E: Unable to correct problems, you have held broken packages.
So...it has come to this. libp11-kit-dev depends on libp11-kit0. What? : o \ Let's dig a bit more:
sudo apt-cache policy libp11-kit0
libp11-kit0:
Installed: 0.20.7-1~bpo70+1
Candidate: 0.20.7-1~bpo70+1
Version table:
*** 0.20.7-1~bpo70+1 0
100 http://ftp.us.debian.org/debian/ wheezy-backports/main amd64 Packages
100 /var/lib/dpkg/status
0.12-3 0
500 http://ftp.us.debian.org/debian/ wheezy/main amd64 Packages
Wheezy backports provides a later version...ah! So, learning something new, I have to tell apt-get to use wheezy target instead of backports:
sudo apt-get install libp11-kit0/wheezy
This works! Now "sudo apt-get install libcurl4-openssl-dev" succeeds. Ta-da. : o )

NOTES - GT_SCM_REV.H

Running make fails.
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I/usr/include -I/usr/include -I/usr/include/xercesc -I/usr/include -DGT_RESOURCEDIR=\"/usr/local/share/GeneTorrent\" -DGT_BUILD_NUMBER=\"undefined\" -DGT_BUILD_TYPE=\"undefined\" -DGT_BUILD_TARGET=\"undefined\" -DTORRENT_CALLBACK_LOGGER -DTORRENT_MINIMAL_LOGGING -DTORRENT_USE_OPENSSL -DTORRENT_DISABLE_GEO_IP -DTORRENT_DISABLE_DHT -DBOOST_ASIO_HASH_MAP_BUCKETS=1021 -DBOOST_EXCEPTION_DISABLE -DBOOST_ASIO_ENABLE_CANCELIO -DTORRENT_LINKING_SHARED -I/usr/local/include/GeneTorrent -I/usr/local/include/GeneTorrent/libtorrent -I../libtorrent/include -g -O2 -Wall -MT libgenetorrent_la-gtBaseOpts.lo -MD -MP -MF .deps/libgenetorrent_la-gtBaseOpts.Tpo -c gtBaseOpts.cpp -fPIC -DPIC -o .libs/libgenetorrent_la-gtBaseOpts.o
gtBaseOpts.cpp:41:24: fatal error: gt_scm_rev.h: No such file or directorycompilation terminated.
make[2]: *** [libgenetorrent_la-gtBaseOpts.lo] Error 1
It can't find header file gt_scm_rev.h.

Touch .git file in top directory...expected by ./scripts/scm-rev-update, line 11: 
11 if [ -d .git -o -f .git ] # in git >= 1.8, .git is a file if the working copy is a submodule
This should probably handle source code builds, in addition to git source code builds.

QUESTIONS
  • Do CGHub maintainers eventually foresee providing 64-bit Microsoft Windows binaries?
  • ./dpkg/squeeze/control lists Maintainer: Matt Lupfer <mlupfer@cardinalpeak.com>, but he no longer works there
  • make deb triggers re-downloading of boost package, even after running deps/boost/buildGeneTorrentBoost.sh, which downloads the tarball (?)
  • Other (?)
RANDOM OTHER ERRORS
A bunch of random errors & warnings from the build process (?) Not sure whether worthwhile to review, or not....
10287 ../configure: line 20168: #: command not found
10348 ./config.status: line 2384: scripts/scm-rev-update: No such file or directory
10516 sed: can't read include/libtorrent/version.hpp: No such file or directory
10713 ../../../libtorrent/src/rss.cpp:421:3: warning: invalid access to non-static data member 'libtorrent::feed::m_title'  of NULL object [-Winvalid-offsetof      ]
10714 ../../../libtorrent/src/rss.cpp:421:3: warning: (perhaps the 'offsetof' macro was used incorrectly) [-Winvalid-offsetof]
10715 ../../../libtorrent/src/rss.cpp:422:3: warning: invalid access to non-static data member 'libtorrent::feed::m_description'  of NULL object [-Winvalid-of      fsetof]
10716 ../../../libtorrent/src/rss.cpp:422:3: warning: (perhaps the 'offsetof' macro was used incorrectly) [-Winvalid-offsetof]
10717 ../../../libtorrent/src/rss.cpp:423:3: warning: invalid access to non-static data member 'libtorrent::feed::m_last_attempt'  of NULL object [-Winvalid-o      ffsetof]
10718 ../../../libtorrent/src/rss.cpp:423:3: warning: (perhaps the 'offsetof' macro was used incorrectly) [-Winvalid-offsetof]
10719 ../../../libtorrent/src/rss.cpp:424:3: warning: invalid access to non-static data member 'libtorrent::feed::m_last_update'  of NULL object [-Winvalid-of      fsetof]
10720 ../../../libtorrent/src/rss.cpp:424:3: warning: (perhaps the 'offsetof' macro was used incorrectly) [-Winvalid-offsetof]
10725 ../../../libtorrent/src/session_impl.cpp:519:3: warning: invalid access to non-static data member 'libtorrent::aux::session_impl::m_settings'  of NULL o      bject [-Winvalid-offsetof]
10726 ../../../libtorrent/src/session_impl.cpp:519:3: warning: (perhaps the 'offsetof' macro was used incorrectly) [-Winvalid-offsetof]
10727 ../../../libtorrent/src/session_impl.cpp:523:3: warning: invalid access to non-static data member 'libtorrent::aux::session_impl::m_proxy'  of NULL obje      ct [-Winvalid-offsetof]
10728 ../../../libtorrent/src/session_impl.cpp:523:3: warning: (perhaps the 'offsetof' macro was used incorrectly) [-Winvalid-offsetof]
10729 ../../../libtorrent/src/session_impl.cpp:528:3: warning: invalid access to non-static data member 'libtorrent::aux::session_impl::m_pe_settings'  of NUL      L object [-Winvalid-offsetof]
10730 ../../../libtorrent/src/session_impl.cpp:528:3: warning: (perhaps the 'offsetof' macro was used incorrectly) [-Winvalid-offsetof]
10751 ../../../libtorrent/src/torrent.cpp: In constructor 'libtorrent::torrent::torrent(libtorrent::aux::session_impl&, const endpoint&, int, int, const libto      rrent::add_torrent_params&, const sha1_hash&)':
10752 ../../../libtorrent/src/torrent.cpp:433:60: warning: large integer implicitly truncated to unsigned type [-Woverflow]
10753 ../../../libtorrent/src/torrent.cpp:433:60: warning: large integer implicitly truncated to unsigned type [-Woverflow]
10814 In file included from ../../src/gtBase.cpp:75:0:
10815 ../../src/gtBase.h: In constructor 'gtBase::gtBase(gtBaseOpts&, gtBase::opMode)':
10816 ../../src/gtBase.h:245:19: warning: 'gtBase::_bindIP' will be initialized after [-Wreorder]
10817 ../../src/gtBase.h:242:19: warning:   'std::string gtBase::_resourceDir' [-Wreorder]
10818 ../../src/gtBase.cpp:92:1: warning:   when initialized here [-Wreorder]
10825 ../../src/gtDownload.cpp: In member function 'void gtDownload::extractURIsFromTSV(std::string, vectOfStr&)':
10826 ../../src/gtDownload.cpp:528:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
10827 ../../src/gtDownload.cpp: In member function 'void gtDownload::performSingleTorrentDownload(std::string, int64_t&, int&)':
10828 ../../src/gtDownload.cpp:834:21: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
10829 ../../src/gtDownload.cpp:836:21: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
10830 ../../src/gtDownload.cpp:839:18: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
10866 /usr/bin/ld: warning: libboost_system.so.1.48.0, needed by /home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/deb-build/libtorrent/
10870 /usr/bin/ld: warning: libboost_system.so.1.48.0, needed by /home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/deb-build/libtorrent/
10876 /usr/bin/ld: warning: libboost_system.so.1.48.0, needed by /home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/deb-build/libtorrent/
1
10944 libtool: install: warning: remember to run `libtool --finish /usr/lib/GeneTorrent'

10990 libtool: install: warning: relinking `libgenetorrent.la'
10997 libtool: install: warning: remember to run `libtool --finish /usr/lib'
11000 libtool: install: warning: `/home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/deb-build/libtorrent/src/.libs/libtorrent-rasterbar.
11001 libtool: install: warning: `libgenetorrent.la' has not been installed in `/usr/lib'
11002 libtool: install: /usr/bin/install -c .libs/gtupload /home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/debian/tmp/usr/bin/gtupload
11003 libtool: install: warning: `/home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/deb-build/libtorrent/src/.libs/libtorrent-rasterbar.
11004 libtool: install: warning: `libgenetorrent.la' has not been installed in `/usr/lib'
11005 libtool: install: /usr/bin/install -c .libs/gtdownload /home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/debian/tmp/usr/bin/gtdown
11006 libtool: install: warning: `/home/k/Documents/Code/cghub-genetorrent-476d7bd44985/GeneTorrent-3.8.7/deb-build/libtorrent/src/.libs/libtorrent-rasterbar.
11007 libtool: install: warning: `libgenetorrent.la' has not been installed in `/usr/lib'
11111 dh_pysupport: This program is deprecated, you should use dh_python2 instead. Migration guide: http://deb.li/dhs2p
11137 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-common/usr/lib/GeneTorrent/libboost_regex.so.1.48.0 was not link
11138 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-upload/usr/bin/gtupload was not linked against libboost_regex.so
11139 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-upload/usr/bin/gtupload was not linked against libboost_filesyst
11140 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-upload/usr/bin/gtupload was not linked against libssl.so.1.0.0 (
11141 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-download/usr/bin/gtdownload was not linked against libboost_rege
11142 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-download/usr/bin/gtdownload was not linked against libxerces-c-3
11143 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-download/usr/bin/gtdownload was not linked against libtorrent-ra
11144 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-download/usr/bin/gtdownload was not linked against libboost_file
11145 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-download/usr/bin/gtdownload was not linked against libxqilla.so.
11146 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-download/usr/bin/gtdownload was not linked against libcrypto.so.
11147 dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/genetorrent-download/usr/bin/gtdownload was not linked against libssl.so.1.0
11150 dpkg-gencontrol: warning: package genetorrent-upload: unused substitution variable ${python:Depends}
11164 Now running lintian...
11165 E: genetorrent-download: binary-or-shlib-defines-rpath usr/bin/gtdownload /usr/lib/GeneTorrent
11166 W: genetorrent-download: hardening-no-relro usr/bin/gtdownload
11167 W: genetorrent-download: hardening-no-fortify-functions usr/bin/gtdownload
11168 W: genetorrent-common: package-name-doesnt-match-sonames libgenetorrent0
11169 W: genetorrent-common: hardening-no-relro usr/lib/GeneTorrent/libboost_filesystem.so.1.48.0
11170 W: genetorrent-common: hardening-no-fortify-functions usr/lib/GeneTorrent/libboost_filesystem.so.1.48.0
11171 W: genetorrent-common: hardening-no-relro usr/lib/GeneTorrent/libboost_program_options.so.1.48.0
11172 W: genetorrent-common: hardening-no-fortify-functions usr/lib/GeneTorrent/libboost_program_options.so.1.48.0
11173 W: genetorrent-common: hardening-no-relro usr/lib/GeneTorrent/libboost_regex.so.1.48.0
11174 W: genetorrent-common: hardening-no-fortify-functions usr/lib/GeneTorrent/libboost_regex.so.1.48.0
11175 W: genetorrent-common: hardening-no-relro usr/lib/GeneTorrent/libboost_system.so.1.48.0
11176 W: genetorrent-common: hardening-no-relro usr/lib/GeneTorrent/libboost_thread.so.1.48.0
11177 W: genetorrent-common: hardening-no-relro usr/lib/GeneTorrent/libtorrent-rasterbar.so.6.0.0
11178 W: genetorrent-common: hardening-no-fortify-functions usr/lib/GeneTorrent/libtorrent-rasterbar.so.6.0.0
11179 W: genetorrent-common: hardening-no-relro usr/lib/libgenetorrent.so.0.0.0
11180 W: genetorrent-common: hardening-no-fortify-functions usr/lib/libgenetorrent.so.0.0.0
11181 W: genetorrent-common: extra-license-file usr/share/doc/GeneTorrent/LICENSE.gz
11182 W: genetorrent-common: binary-without-manpage usr/bin/cgquery
11183 W: genetorrent-common: binary-without-manpage usr/bin/gtocheck
11184 W: genetorrent-common: binary-without-manpage usr/bin/gtoinfo
11185 W: genetorrent-common: non-dev-pkg-with-shlib-symlink usr/lib/libgenetorrent.so.0.0.0 usr/lib/libgenetorrent.so
11186 E: genetorrent-dbg: extended-description-is-empty
11187 W: genetorrent-dbg: wrong-section-according-to-package-name genetorrent-dbg => debug
11188 W: genetorrent-dbg: empty-binary-package
11189 E: genetorrent-upload: binary-or-shlib-defines-rpath usr/bin/gtupload /usr/lib/GeneTorrent
11190 W: genetorrent-upload: hardening-no-relro usr/bin/gtupload
11191 W: genetorrent-upload: hardening-no-fortify-functions usr/bin/gtupload
11192 W: genetorrent-upload: binary-without-manpage usr/bin/cgsubmit
11193 E: genetorrent-upload: python-script-but-no-python-dep usr/bin/cgsubmit
11194 Finished running lintian.

Tuesday, February 17, 2015

Angry attacks

Two of my favorite people have started attacking each other:
Phil Yu, publisher of the internet news blog Angry Asian Man: "I Am Being Threatened With An Angry Asian Lawsuit"
Lela Lee, creator of Angry Little Girls: "Why the "Angry Asian Man" is pissing me off."
As you might expect, it's...angry?

Background: I most definitely fall into the casual observer category. I follow Phil's blog feed. I have admired Lela's Angry Little Girls creations for years. Watching this public confrontation interests me roughly as much as the regular updates to blog 11-foot-8, which documents the completely avoidable demolition of over-sized vehicles attempting to pass under a bridge.

In my opinion, Lela seems to have a kernel of truth on her side. It sounds reasonable, to me, to assume she attempted to communicate her preferences to Phil, on a few occasions...I am guessing, given the casual context, Phil heard her preferences but didn't "hear" Lela's irritation/fear and her larger need to protect herself and her family's source of income.

Thus the "whoa, where did that come from, I-thought-we-were-friends" tone of Phil's post. It explains the corresponding escalation of tension and fear in Lela's actions and communications.

Rather than having it play out in public, this seems exactly the type of situation a skilled mediator might resolve, to begin de-escalating things and more quickly ensure each party gets their needs met.

However, first things first: each side needs to clearly articulate their needs and hear the needs of the other side.

Phil's attempt to formalize his blog with a trademark seems to represent the proverbial straw which broke the camel's back, for Lela. Therefore, it seems reasonable to infer Lela may want to protect herself and her family financially. She has also seemed to mention a need to be heard, especially in a timely way...stated a different way, perhaps a need for predictability in her interactions with Phil on this matter. It also sounds like, maybe as a secondary issue (?), Lela wants more recognition and appreciation from Phil, for her efforts and contributions in building her business and the inspirations it provided to the work of many people, Phil included.

Phil's needs seem a bit less clear, to me, but that's probably only because it's late and I am struggling to stay awake. I think it would make a lot of sense to ask and see if he can articulate his needs. If I had to guess, I would say Phil probably needs more trust from Lela about his intentions in operating his site, and that he only wants to operate his site if he can do so without significantly impacting Lela's financial situation. He seems overwhelmed with the implications of this issue and other, unmentioned, issues, of late, so I am guessing he needs more flexibility and consideration and autonomy in deciding the future of his site. Phil also seems to want recognition and appreciation for the years of time and energy he has invested into his site.

Things to avoid when identifying needs: evaluation, blame, criticism, labels, moralistic judgments, diagnoses, strategies, demands.

Then, stay with that discussion, and, once each side hears the other's needs and can repeat them back, it's most likely only a short hop to finding a way or ways to meet those needs...it usually follows naturally and quickly.

We are all human beings; we all share the same needs. Given Phil and Lela share so, so, so much common ground, I'm confident a mediator might help them not only reach an agreeable solution that meets everyone's needs, but also exit with a renewed commitment to work toward the larger goals of the community at large.

Sunday, February 15, 2015

CoeLux

Beautiful.

CoeLux: Artificial Sunlight That’s Real Enough to Trick Your Camera and Brain
http://petapixel.com/2015/02/09/coelux-artificial-sunlight-thats-good-enough-fool-cameras-brain/

Slug life

University of California, Santa Cruz McHenry Library

Dehumidifier

Researching a dehumidifier for a small apartment bathroom with only overhead fan ventilation (that is, no exterior windows).

TERMS
  • Humidity = amount of water vapor in the air (measured in grams?)
  • RH = relative humidity, the percentage of water vapor present, relative to the maximum amount a given space can hold, at a given temperature
  • Hygrometer = only measures and displays humidity (via)
  • Humidistat = both measures and controls humidity...may or may not have a display (via)
  • Adsorption = water molecules stick to the surface
  • Absorption = water molecules enter material
  • Hygroscopic = (of a substance) tending to absorb moisture from the air
HUMIDITY BASICS
  • Fundamentals, including an image showing how relative humidity decreases when the amount of water vapor remains constant while increasing temperature
  • The recommended average relative humidity level is between 35% and 45% (via)
  • RH above 50% can promote bacteria growth (via)
  • Misconception: Amount of water vapor which can enter a space depends on temperature and not on contents of the space...for example, a vacuum can hold the same amount of water vapor as air, at a given temperature...it depends on pressure of water vapor at a given temperature...not that we have a vacuum in our apartment...
BATHROOM DEHUMIDIFIERS
  • 1 or 2 pint-per-day models not enough (via)
  • 25 pint-per-day models seem to represent the next step up...really over-kill, however (via)
  • Humidistat allows unit to remove water quickly, then stay off the remainder of the day (via)
  • Drains
    • Bathtub
    • Toilet
      • Tank
      • Under seat
    • Sink
    • Other (?)
TYPES
  • Desiccant, passive (for example, DampRid)
    • Calcium chloride flakes, anhydrous
  • Desiccant, powered (for example, EcoSeb DD122EA)
  • Refrigeration
DESICCANT VERSUS REFRIGERATION DEHUMIDIFIERS
  • At colder temperatures, desiccant works a bit better, as getting down to 40% RH requires chilling refrigerant coils to around 30 degrees Fahrenheit, which causes frost build-up, which means more costly anti-frost measures needed (via)
  • Climates in which temperatures typically fall below 65 degrees Fahrenheit may require the purchase of a dehumidifier designed for low temperature operation (via)
  • Refrigerant dehumidifiers work more efficiently at higher temperatures and higher relative humidity (via)
  • Desiccant dehumidifiers may consume more electricity
  • Reddit
    • "How to dehumidify your room without an expensive dehumidifier?" (via)
OTHER
  • Nothing on TheSweetHome
  • Top 10 Reviews seems to only review larger, 70 pint-per-day models
  • Ecoseb is made by Ecoair, which is based in London, UK (via)
  • Ecoseb Simple and Ecoseb Classic differ in the control mechanisms: manual and electronic, respectively
BRANDS
  • Keystone
  • DeLonghi
  • Soleus
  • Comfort-Aire
  • Friedrich
  • Danby
  • Haier
  • Frigidaire
  • Sunpentown
  • GE
  • EdgeStar
UPDATE:

We went with the EcoSeb DD122EA-SIMPLE Desiccant Dehumidifier, 15-Pint, White, 120V. I liked the idea that it does not need refrigerant. It has a lot of high reviews. Also, a simple plastic tube to the toilet tank means no maintenance. I actually preferred the simple version, since it has a simple turning dial and functionally seems about the same, save for the electronic shut-off timer. I do not care for the ionizer. For our use case, we put it in our bathroom, run it on high while taking a shower, and turn it back to normal after a bit. We leave it on eco-mode the rest of the day. The warm air blowing out the top feels pleasant and the barely noticeable smell does not bother us, at all. Runs reasonably quiet. Very pleased--would highly recommend, if your use case seems similar.

Saturday, February 14, 2015

An idea is not a design...

An idea is not a design
A design is not a prototype
A prototype is not a program
A program is not a product
A product is not a business
A business is not profits
Profits are not an exit
And an exit is not happiness.

Via: http://www.eugenkiss.com/b/the-story-behind-true-fool/

Thursday, February 12, 2015

Marshall Rosenberg has died

Heavy news. Imagine the face of (what I imagine as, at least) a beardless Abraham Lincoln, the philosophical non-violence and grounded-ness of Gandhi, and the consistent gentleness of Fred Rogers--you have Dr. Marshall Rosenberg.

I heard about it from Miki Kashtan, who passed along an e-mail from the CNVC announcement.

Feelings-wise, the news did not seem to affect me much...no personal grief or sorrow. My thoughts are with his children and other family members. On two occasions, several years apart, I attended free beginner NVC group sessions hosted by Dr. M.R. (mentally, I came up with "Dr. Mr." a while back, as a joke) in Oakland, California. One in 2007, I think, and one before that, perhaps in 2005 or 2006. So, I got a first-hand perspective of listening to him.

These last few months, driving long distances, I have revisited his audio recordings. I have more to say about that in another post. For now, I only want to say his focus on teaching empathy has helped show me ways to connect and understand those around me. His ambitions went beyond just active listening, encompassing social change, restorative justice, and more.

That's all, for now.

Sunday, February 08, 2015

Riding light

Alphonse Swinehart visually displays the journey of a photon from the Sun to Jupiter: http://vimeo.com/117815404

Music: Steve Reich "Music for 18 Musicians"

Saturday, February 07, 2015

Particulates

Renting, above an occasional cigar smoker.

GENERAL CONCEPTS

  • Air exchanges per hour
  • CADR (clean air delivery rate)
  • Particulate removal differs from removing odor/VOC/gases

SEALING
  • Cracks
    • Silicone bathroom caulk (via)
  • Electrical face plates
    • Pre-cut foam insulating plates (via)
    • Spray foam insulation (via)
  • Exhaust/fresh air supply
  • Vents
  • Smoke detectors (hard wired)
  • Light fixtures
  • Window frames
  • Doors
    • Door excluder (via)
ODOR REMOVAL
  • "...the odor and many of the carcinogenic gas-phase pollutants from tobacco smoke will remain in filtered air." (via)
  • Febreze Air Effects Air Refresher (via)
  • Renuzit Subtle Effects (via)
  • Plain white vinegar in open bowls (via)
  • Coffee beans (via)
  • Fan venting out your window (via)
  • Fan blowing into apartment to create positive air pressure (via)
  • Tobacco Flower Home Fragrance Oil (via)
  • Soapstone Oil Burners (via)
  • Few drops of vanilla essence on your light bulbs...or in bowl of water (via)
  • Ozium (via)
  • Zeolite (via)
  • Activated charcoal (via)

PARTICULATE REMOVAL

  • "Coway AP-1512HH Mighty" air purifier (recommended general-use pick, via SweetHome)
  • Big names (via Sweethome)
    • IQAir
    • Coway
    • Blueair
    • Winix
    • HealthMate
    • Austin Air
    • Rabbit Air
    • Sharp
UPDATE:

We purchased the Coway AP-1512HH Mighty Air Purifier with True HEPA and Eco Mode. It's cheap to operate, small, and seems to operate just as effectively. Since all seem to work reduce particulates pretty much the same, after an hour or so, the extra money only seems to buy speed to reduce particulates and odor absorption/adsorption. Neither of these seemed worth the hundreds of dollars of extra expense and much higher ongoing operating costs. We have used it for about one month, now, and have no problems with it. Runs quiet--it never bothers us in the bedroom. Would recommend.

Sunday, February 01, 2015

NULL - The Billion Dollar Mistake

Tony Hoare:
"I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). 
My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. 
This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years. 
In recent years, a number of program analysers like PREfix and PREfast in Microsoft have been used to check references, and give warnings if there is a risk they may be non-null. More recent programming languages like Spec# have introduced declarations for non-null references. This is the solution, which I rejected in 1965."
Via: http://programmers.stackexchange.com/a/120372

Judy arrays

Had first heard of these over 10 years ago...nice to see they still seem competitive:

https://en.wikipedia.org/wiki/Judy_array

Note: "The Judy array was invented by Douglas Baskins and named after his sister." : o )