Archive for the ‘me’ Category

Learning jQuery Deferreds published

Tuesday, January 7th, 2014

learning-jQuery-deferredsNicholas Tollervey and I have written a book, Learning jQuery Deferreds, published by O’Reilly.

If you’ve been a reader of this blog over the years, you may have noticed that I’m very fond of deferreds (also known as promises or futures). I’ve mainly been using them in Python with Twisted, and a couple of years ago was happy to notice that jQuery also has a (somewhat different) version of deferreds. Asking around, it soon became clear that although there are tens of millions of programmers who’ve used jQuery, very few of them have ever used deferreds. E.g., at the jQuery conference in San Francisco in 2012, only about 25% of the audience in a talk on deferreds. There are about 19,000 results for “deferred” on StackOverflow.

This seemed like a perfect storm: a fantastically cool and empowering technology that I love thinking and writing about, built in to a ubiquitous web library, in use by millions of programmers, and yet somehow not widely known or used.

The book tries to really teach deferreds. There are 18 real-life examples, along with 75 challenges (and solutions). We’ve tried to get readers into deferreds the way we are, to be provocative, to try and get you thinking and scratching your head. To get you to see how cool and elegant working with deferreds can be. In short, to make you one of us.

Although the book focusses on jQuery’s flavor of deferreds, we wrote it with a much broader aim: to be just as useful to people working with any flavor of deferreds in any language. The concepts behind deferreds are few and simple. Even if you’re not a jQuery user or a JavaScript programmer, we hope you’ll enjoy and benefit from the book.

If you’re curious, the animal on the cover is a musky rat-kangaroo. O’Reilly chose it for us. When I first saw it, I mailed them and Nicholas to say it looked “overfed, passive, and thoughtful” to which Nicholas replied that it resembled me. The O’Reilly toolchain is modern and fun, employing AsciiDoc and a shared Git repo. We wrote 30,817 words and 2,301 lines of Javascript. There’s a source code repo for all the book examples, at https://github.com/jquery-deferreds/code. We spent six months on the book, during which I usually spent 1-2 days a week on it. It was a blast to write.

If you’d like to buy a copy, use AUTHD as a discount code on the O’Reilly site and you’ll receive 40% off the print or 50% off the e-book. Please let me know what you think, and/or leave a review on the O’Reilly (or Amazon) site. Have fun, and thanks!

1793 viruses!

Tuesday, July 30th, 2013

In case you missed it, I spent ten days in hospital this past May (2013).

When they took the skin biopsy from my arm, I got them to take 2 samples. One of them, along with a throat and skin swab was later sent to the virologists I do some work with in the Viroscience Lab at the Erasmus Medical Center (EMC).

I got the sequence data back about a week ago and have been looking at them, firstly via BLAST and then using a bunch of code I’ve been writing lately. There are 115K reads from 6 preparations (RNA and DNA protocols for each of the 3 samples). These come from a “next generation” sequencer, a Roche 454. The next generation sequencing involves using random primers to indiscriminately match genetic material. My BLAST output files are about 82Mb in total (this is relatively small, some of my other data sets are about 30Gb). I BLASTed against a viral subset alias nucleotide database that I made from the full NCBI Nucleotide Database, excluding all bacteriophage viruses. There are about 1.3M viral sequences in the subset db.

I wont go into details, but wanted to dump a bit of data that’s pretty amusing / interesting. Just to give the EMC folks an idea of the scale of diversity I am seeing, I grepped out all “complete genome” hits from all the BLAST output. I chucked out suffixes in the sequence titles that matched the regex (nearly )?complete genome|isolate|strain|subtype).* and then stripped the titles of any text beyond the string “virus” in the title (this step collapses a lot of virus strain information that should really be kept). Then, do a unique sort and…. it turns out I have reads matching at least 1793 viruses.

I feel like the subject of a metagenomics study. At the hospital, once the chickenpox tests had come back negative, they threw a ton of tests at my samples and everything was negative. Otherwise, I’d really be worried :-)

Given the list of sequence matches, it feels like the only plausible explanation is that I’m actually dead and that this is all just a simulation.

Here’s the sorted list of virus names (read counts omitted). I find it pretty amazing. I don’t know what it all means, but I’m planning to find out more by writing more code and learning more.

Abalone herpesvirus
Abalone shriveling syndrome-associated virus
Abelson murine leukemia virus
Abutilon mosaic virus
Acanthamoeba castellanii mamavirus
Acanthamoeba polyphaga mimivirus
Acanthamoeba polyphaga moumouvirus
Acanthocystis turfacea Chlorella virus
Acheta domestica densovirus
Achimota virus
Acidianus bottle-shaped virus
Acidianus filamentous virus
Acidianus filamentus virus
Acidianus spindle-shaped virus
Aconitum latent virus
Acute bee paralysis virus
Adelaide River virus
Adeno-associated virus
Adenovirus
Adoxophyes honmai enomopoxvirus
Adoxophyes honmai nucleopolyhedrovirus
Adoxophyes orana granulovirus
Adoxophyes orana nucleopolyhedrovirus
Aedes aegypti densovirus
Aedes flavivirus
Aedes taeniorhynchus iridescent virus
Aeropyrum pernix K1 DNA
Aeropyrum spring-shaped virus
African cassava mosaic Burkina Faso virus
African cassava mosaic virus
African green monkey polyomavirus
African oil palm ringspot virus
African swine fever virus
Ageratum enation alphasatellite
Ageratum enation virus
Ageratum leaf curl virus
Ageratum yellow vein China virus
Ageratum yellow vein Singapore alphasatellite
Ageratum yellow vein virus
Agropyron mosaic virus
Agrotis ipsilon multiple nucleopolyhedrovirus
Agrotis segetum granulovirus
Agrotis segetum nucleopolyhedrovirus
Aichi virus
Aleutian mink disease parvovirus
Alfuy virus
Algerian watermelon mosaic virus
Alkhumra hemorrhagic fever virus
Allium virus
Alpaca respiratory coronavirus
Alphavirus
Alstroemeria virus
Alternanthera mosaic virus
Alternanthera yellow vein virus
Ambystoma tigrinum stebbensi virus
American hop latent virus
Amphotropic murine leukemia virus
Amsacta moorei entomopoxvirus
Anatid herpesvirus
Andean potato latent virus
Andean potato mild mottle virus
Anguillid herpesvirus
Anopheles gambiae densonucleosis virus
Antheraea pernyi nucleopolyhedrovirus
Anticarsia gemmatalis nucleopolyhedrovirus
Aotine herpesvirus
Aphid lethal paralysis virus
Apium virus
Apocheima cinerarium nucleopolyhedrovirus
Apodemus sylvaticus papillomavirus
Apple chlorotic leaf spot virus
Apple green crinkle associated virus
Apple stem grooving virus
Apple stem pitting virus
Apricot latent virus
Apricot pseudo-chlorotic leaf spot virus
Aravan virus
Archaeal BJ1 virus
Arctic ground squirrel hepatitis B virus
Armigeres subalbatus virus
Arracacha mottle virus
Artemisia virus
Artibeus jamaicensis parvovirus
Asclepias asymptomatic virus
Asian prunus virus
Asparagus virus
Astrovirus
Ateles paniscus polyomavirus
Ateline herpesvirus
Atlantic salmon paramyxovirus
Atlantic salmon swim bladder sarcoma virus
Aurantiochytrium single-stranded RNA virus
Australian bat lyssavirus
Autographa californica nucleopolyhedrovirus
Avastrovirus
Avian adeno-associated virus
Avian adenovirus
Avian bornavirus
Avian carcinoma virus
Avian encephalomyelitis virus
Avian endogenous retrovirus
Avian gyrovirus
Avian hepatitis E virus
Avian infectious bronchitis virus
Avian leukemia virus
Avian leukosis virus
Avian metapneumovirus
Avian myelocytomatosis virus
Avian nephritis virus
Avian paramyxovirus
Avian pneumovirus
B19 virus
BK polyomavirus
Babanki virus
Baboon endogenous virus
Baboon enterovirus
Bacillus virus
Bagaza virus
Bamboo mosaic virus
Baminivirus
Banana bract mosaic virus
Banana mild mosaic virus
Banana streak CA virus
Banana streak GF virus
Banana streak IM virus
Banana streak Imove virus
Banana streak Mys virus
Banana streak Mysore virus
Banana streak UA virus
Banana streak UI virus
Banana streak UL virus
Banana streak UM virus
Banana streak virus
Bandicoot papillomatosis carcinomatosis virus
Barbel circovirus
Barley dwarf virus
Barley yellow dwarf virus
Barmah Forest virus
Basella rugose mosaic virus
Bat Paramyxovirus
Bat SARS CoV Rs672/2006
Bat SARS coronavirus
Bat adenovirus
Bat betaherpesvirus
Bat circovirus
Bat coronavirus
Bat hepatitis virus
Bat hepevirus
Bat picornavirus
Bat polyomavirus
Bat sapovirus
Bathycoccus sp. RCC1105 virus
Beak and feather disease virus
Bean common mosaic necrosis virus
Bean common mosaic virus
Bean leafroll virus
Bean yellow mosaic virus
Beauveria bassiana RNA virus
Bebaru virus
Beet black scorch virus
Beet chlorosis virus
Beet curly top Iran virus
Beet curly top virus
Beet mild curly top virus
Beet mild yellowing virus
Beet mosaic virus
Beet severe curly top virus
Beet soil-borne mosaic virus
Beet western yellows virus
Beet yellows virus
Beilong virus
Bell pepper endornavirus
Bell pepper mottle virus
Berrimah virus
Betacoronavirus
Bettongia penicillata papillomavirus
Bhendi yellow vein Bhubhaneswar virus
Bhendi yellow vein mosaic betasatellite
Bhendi yellow vein mosaic virus
Bidens mottle virus
Black raspberry virus
Blackberry virus
Blackeye cowpea mosaic virus
Blattella germanica densovirus
Blue squill virus
Blueberry latent virus
Blueberry red ringspot virus
Blueberry scorch virus
Blueberry virus
Bluegill picornavirus
Bocavirus
Bokeloh bat lyssavirus
Bombyx mandarina nucleopolyhedrovirus
Bombyx mori Macula-like virus
Bombyx mori NPV
Bombyx mori densovirus
Bombyx mori nuclear polyhedrosis virus
Border disease virus
Borna disease virus
Bos grunniens papillomavirus
Botryotinia fuckeliana totivirus
Botrytis virus
Bougainvillea spectabilis chlorotic vein-banding virus
Bovine adeno-associated virus
Bovine adenovirus
Bovine astrovirus
Bovine coronavirus
Bovine enterovirus
Bovine ephemeral fever virus
Bovine foamy virus
Bovine herpesvirus
Bovine hungarovirus
Bovine kobuvirus
Bovine leukemia virus
Bovine papillomavirus
Bovine papular stomatitis virus
Bovine parainfluenza virus
Bovine parvovirus
Bovine polyomavirus
Bovine respiratory coronavirus
Bovine respiratory syncytial virus
Bovine rhinovirus
Bovine syncytial virus
Bovine viral diarrhea virus
Brassica yellows virus
Breda virus
Brevicoryne brassicae picorna-like virus
Bromus catharticus striate mosaic virus
Brugmansia mosaic virus
Brugmansia suaveolens mottle virus
Budgerigar fledgling disease polyomavirus
Buggy Creek virus
Bulbul coronavirus
Bundibugyo ebolavirus
Bussuquara virus
Butterbur mosaic virus
Cacao swollen shoot virus
Cactus mild mottle virus
Cactus virus
Cafeteria roenbergensis virus
Caladenia virus
Calf-giraffe coronavirus
Calibrachoa mottle virus
Calicivirus
California sea lion anellovirus
California sea lion polyomavirus
Callitrichine herpesvirus
Camelpox virus
Camelus dromedarius papillomavirus
Canary circovirus
Canary polyomavirus
Canarypox virus
Canine adenovirus
Canine bocavirus
Canine circovirus
Canine coronavirus
Canine distemper virus
Canine kobuvirus
Canine minute virus
Canine oral papillomavirus
Canine papillomavirus
Canine parvovirus
Canine picodicistrovirus
Canine picornavirus
Canine respiratory coronavirus
Canine vesivirus
Canna Yellow Streak Virus from United Kingdom
Capra hircus papillomavirus
Caprine arthritis encephalitis virus
Caprine arthritis-encephalitis virus
Cardioderma polyomavirus
Cardiospermum yellow leaf curl virus
Caretta caretta papillomavirus
Carnation etched ring virus
Carnation mottle virus
Carrot mottle mimic umbravirus
Carrot mottle virus
Carrot necrotic dieback virus
Carrot red leaf virus
Carrot yellow leaf virus
Cassava brown streak virus
Cassava common mosaic virus
Cassava latent virus
Cassava vein mosaic virus
Catharanthus yellow mosaic virus
Cauliflower mosaic virus
Cavally virus
Caviid herpesvirus
Cebus albifrons polyomavirus
Cedar virus
Celery mosaic virus
Cercopithecine herpesvirus
Cercopithecus erythrotis polyomavirus
Cercopithicine herpesvirus
Cereal yellow dwarf virus
Cervus elaphus papillomavirus
Cestrum yellow leaf curling virus
Chaerephon polyomavirus
Chaetoceros lorenzianus DNA Virus DNA
Chaetoceros salsugineum DNA virus
Chaetoceros tenuissimus DNA virus
Chandipura virus
Chaoyang virus
Chayote mosaic tymovirus
Chelonia mydas papillomavirus
Chenopodium leaf curl virus
Chenopodium mosaic virus
Cherry green ring mottle virus
Cherry mottle leaf virus
Cherry necrotic rusty mottle virus
Cherry rusty mottle associated virus
Cherry virus
Chiba virus
Chicken anemia virus
Chicken astrovirus
Chicken parvovirus
Chickpea chlorosis Australia virus
Chickpea chlorosis virus
Chickpea chlorotic dwarf virus
Chickpea chlorotic stunt virus
Chickpea redleaf virus
Chickpea yellows mastrevirus
Chikungunya virus
Chilli leaf curl India virus
Chilli leaf curl virus
Chilli ringspot virus
Chilli veinal mottle virus
Chilo iridescent virus
Chiltepin yellow mosaic virus
Chimeric Tick-borne encephalitis virus
Chimpanzee adenovirus
Chimpanzee alpha-1 herpesvirus
Chimpanzee polyomavirus
Chimpanzee stool associated circular ssDNA virus
Chimpanzee stool avian-like circovirus
Chinese yam necrotic mosaic virus
Chlamys acute necrobiotic virus
Chloris striate mosaic virus
Choristoneura biennis entomopoxvirus
Choristoneura fumiferana MNPV polyhedrin
Choristoneura fumiferana defective nucleopolyhedrovirus
Choristoneura occidentalis granulovirus
Choristoneura rosaceana entomopoxvirus
Chrysanthemum virus
Chrysodeixis chalcites nucleopolyhedrovirus
Circoviridae bovine stool/BK/KOR/2011
Circovirus
Circulifer tenellus virus
Citrus chlorotic dwarf associated virus
Citrus leaf blotch virus
Citrus sudden death-associated virus
Citrus tatter leaf virus
Citrus tristeza virus
Citrus yellow mosaic virus
Citrus yellow vein clearing virus
Clanis bilineata nucleopolyhedrosis virus
Classical swine fever virus
Clerodendron yellow mosaic virus
Clitocybe odora virus
Clitoria yellow mottle virus
Cloning vector pEAV030 containing cDNA of Equine arteritis virus
Clostera anachoreta granulovirus
Coastal Plains virus
Cocal virus
Cocksfoot mild mosaic virus
Cocksfoot mottle virus
Cocksfoot streak virus
Coconut foliar decay virus
Coleus vein necrosis virus
Colobus guereza papillomavirus
Colombian datura virus
Columbid circovirus
Common chimpanzee papillomavirus
Common marmoset foamy virus
Common midwife toad ranavirus
Common-moorhen coronavirus
Cordyline virus
Coronavirus
Cote d'Ivoire ebolavirus
Cotesia congregata virus
Cotia virus
Cotton leaf curl Burewala betasatellite
Cotton leaf curl Burewala virus
Cotton leaf curl Gezira alphasatellite
Cotton leaf curl Gezira virus
Cotton leaf curl Kokhran virus
Cotton leaf curl Multan betasatellite
Cotton leaf curl Multan virus
Cotton leaf curl Shadadpur virus
Cotton leafroll dwarf virus
Cottontail rabbit (Shope) papillomavirus
Cottontail rabbit papillomavirus
Cowpea aphid-borne mosaic virus
Cowpox virus
Coxsackievirus
Crassocephalum yellow vein virus
Crocuta crocuta papillomavirus
Croton yellow vein mosaic virus
Croton yellow vein virus
Crow polyomavirus
Cryphonectria hypovirus
Cryptophlebia leucotreta granulovirus
Cucumber fruit mottle mosaic virus
Cucumber green mottle mosaic virus
Cucumber mottle virus
Cucumber necrosis virus
Cucumber vein yellowing virus
Cucurbit aphid-borne yellows virus
Culex flavivirus
Culex nigripalpus baculovirus
Culex originated Tymoviridae-like virus
Culex tritaeniorhynchus rhabdovirus
Curtovirus
Cutthroat trout virus
Cycad leaf necrosis virus
Cyclovirus
Cydia pomonella granulovirus
Cygnus olor circovirus
Cymbidium mosaic virus
Cynomolgus macaque cytomegalovirus
Cyprinid herpesvirus
DG-75 Murine leukemia virus
Dahlia common mosaic virus
Dahlia mosaic virus
Daphne mosaic virus
Deer papillomavirus
Deerpox virus
Deformed wing virus
Delphinus delphis papillomavirus
Dendrolimus punctatus densovirus
Dengue Virus Type 2
Dengue type 3 virus
Dengue virus
Diaporthe ambigua RNA virus
Diascia yellow mottle virus
Diatraea saccharalis densovirus
Digitaria ciliaris striate mosaic virus
Digitaria didactyla striate mosaic virus
Digitaria streak virus
Dioscorea bacilliform virus
Diplodia scrobiculata RNA virus
Diuris virus
Dolichos yellow mosaic virus
Donggang virus
Dracaena mottle virus
Dragonfly circularisvirus
Dragonfly cyclicusvirus
Dragonfly cyclovirus
Dragonfly orbiculatusvirus
Dragonfly-associated circular virus
Dragonfly-associated mastrevirus
Drosophila A virus
Drosophila C virus
Drosophila melanogaster sigma virus
Drosophila melanogaster totivirus
Drosophila obscura sigma virus
Duck astrovirus
Duck circovirus
Duck coronavirus
Duck egg-drop syndrome virus
Duck enteritis virus
Duck flavivirus
Duck hepatitis A virus
Duck hepatitis B Virus DNA
Duck hepatitis B virus
Duck hepatitis virus
Duck picornavirus
Dulcamara mottle virus
Duvenhage virus
Dweet mottle virus
East African cassava mosaic virus
East Asian Passiflora virus
Eastern equine encephalitis virus
Ebola virus
Echovirus
Eclipta yellow vein virus
Ecotropis obliqua NPV
Ectocarpus siliculosus virus
Ectromelia virus
Eel Virus European X
Eidolon helvum parvovirus
Eidolon polyomavirus
Eimeria brunetti RNA virus
Elephant endotheliotropic herpesvirus
Elephantid herpesvirus
Eliat virus
Emilia yellow vein virus
Encephalomyocarditis (EMC) virus
Encephalomyocarditis virus
Entebbe bat virus
Enterovirus
Enzootic nasal tumour virus
Epinotia aporema granulovirus
Epiphyas postvittana nucleopolyhedrovirus
Epizootic haematopoietic necrosis virus
Epstein-Barr virus
Equid herpesvirus
Equine Pegivirus
Equine adenovirus
Equine arteritis virus
Equine coronavirus
Equine foamy virus
Equine herpesvirus
Equine infectious anemia virus
Equine papillomavirus
Equine polyomavirus
Equine rhinitis A virus
Equine rhinovirus
Equinus papillomavirus
Equus caballus papillomavirus
Equus ferus caballus papillomavirus
Eragrostis curvula streak virus
Eragrostis minor streak virus
Eragrostis streak virus
Erethizon dorsatum papillomavirus
Erysimum latent virus
Erythrovirus
Eupatorium vein clearing virus
Eupatorium yellow vein virus
Euphorbia leaf curl Guangxi virus
Euproctis pseudoconspersa nucleopolyhedrovirus
Euprosterna elaeasa virus
European bat lyssavirus
European elk papillomavirus
European hedgehog papillomavirus
European sheatfish virus
Farmington virus
Feldmannia species virus
Felid herpesvirus
Feline bocavirus
Feline calicivirus
Feline coronavirus
Feline foamy virus
Feline immunodeficiency virus
Feline infectious peritonitis virus
Feline leukemia virus
Feline morbillivirus
Feline papillomavirus
Feline picornavirus
Felis domesticus papillomavirus
Fenneropenaeus chinensis hepatopancreatic densovirus
Fer-de-lance virus
Ferret hepatitis E virus
Fig badnavirus
Fig fleck-associated virus
Finch circovirus
Finch polyomavirus
Flavivirus
Foot-and-mouth disease virus
Fort Morgan virus
Fowl adenovirus
Fowlpox virus
Foxtail mosaic virus
Francolinus leucoscepus papillomavirus
Frangipani mosaic virus
Freesia mosaic virus
French bean severe leaf curl virus
Friend murine leukemia virus
Friend spleen focus-forming virus
Fringilla coelebs papillomavirus
Frog adenovirus
Frog virus
Fujinami sarcoma virus
Furcraea necrotic streak virus
Fusarium graminearum dsRNA mycovirus
Fusarium graminearum hypovirus
Fusellovirus
GB virus
Galinsoga mosaic virus
Gallid herpesvirus
Gammapapillomavirus
Gammaretrovirus
Garlic common latent virus
Garlic virus
Gastropod associated circular ssDNA virus
Gayfeather mild mottle virus
Gentian Kobu-sho-associated virus
Geobacillus virus
Getah virus
Giardia canis virus
Giardia lamblia virus
Gibbon leukemia virus
Gill-associated virus
Giraffe coronavirus
Glomus sp. RF1 medium virus
Glossina pallidipes salivary gland hypertrophy virus
Goatpox virus
Goose adenovirus
Goose circovirus
Goose hemorrhagic polyomavirus
Goose paramyxovirus
Goose parvovirus
Gooseberry vein banding virus
Gorilla gorilla gorilla polyomavirus
Grapevine Pinot gris virus
Grapevine Rupestris stem pitting associated virus
Grapevine Rupestris stem pitting virus
Grapevine Syrah Virus-1
Grapevine berry inner necrosis virus
Grapevine endophyte endornavirus
Grapevine fleck virus
Grapevine geminivirus
Grapevine leafroll-associated virus
Grapevine rupestris stem pitting-associated virus
Grapevine vein-clearing virus
Grapevine virus
Grass carp rhabdovirus
Gremmeniella abietina RNA virus
Gremmeniella abietina mitochondrial RNA virus
Gremmeniella abietina type B RNA virus
Ground squirrel hepatitis virus
Grouper iridovirus
Gryllus bimaculatus nudivirus
Gull circovirus
Gyrovirus
HBV genotype A1
HBV genotype A2
HBV genotype B DNA
HBV genotype C DNA
HBV genotype D, serotype ayw3
HBV genotype D3
HBV genotype D4
HBV genotype E
HBV genotype F2
HBV genotype F4
HBV genotype G DNA
HBV genotype H DNA
HIV-1
HIV-1 92BR025 from Brazil
HIV-1 CRF03_AB
HIV-1 CRF04_cpx clone 94CY032-3 from Cyprus
HIV-1 E9 from the USA
HIV-1 G829 from Ghana
HIV-1 M_02CD.KS069 proviral
HIV-1 M_02CD.LBTB032 proviral
HIV-1 M_02CD.LBTB084 proviral
HIV-1 M_02CD.MBTB047 proviral
HIV-1 M_97CD.KFE267 proviral
HIV-1 M_97CD.KTB119 proviral
HIV-1 M_97CD.MBFE250 proviral
HIV-1 chimpanzee C455
HIV-1 chimpanzee C499
HIV-1 clone 00PTHDE10 from Portugal
HIV-1 clone 309 from China
HIV-1 clone 341 from China
HIV-1 clone 90cf402 from the Central African Republic
HIV-1 clone 92ug037 from Uganda
HIV-1 clone 93th253 from Thailand
HIV-1 clone 96TZ-BF061 from Tanzania
HIV-1 clone 96TZ-BF071 from Tanzania
HIV-1 clone 96TZ-BF110 from Tanzania
HIV-1 clone 98PTHEM103 from Portugal
HIV-1 clone C.96BW06.H51 from Botswana
HIV-1 clone C.96BW06.J4 from Botswana
HIV-1 clone C.96BW06.J7 from Botswana
HIV-1 clone C.96BW06.K18 from Botswana
HIV-1 clone C1P from USA
HIV-1 clone D24 from India
HIV-1 clone ES1-16 from USA
HIV-1 clone ES1-20 from USA
HIV-1 clone ES10-53 from USA
HIV-1 clone ES4-24 from USA
HIV-1 clone ES8-17 from USA
HIV-1 clone ES8-43 from USA
HIV-1 clone I-1 from USA
HIV-1 clone I-2 from USA
HIV-1 clone MJ4 from Botswana
HIV-1 clone N-1 from USA
HIV-1 clone N-2 from USA
HIV-1 clone S61D1 from Spain
HIV-1 clone S61D15 from Spain
HIV-1 clone S61G1 from Spain
HIV-1 clone S61G7 from Spain
HIV-1 clone XJDC6431-2 from China
HIV-1 clone XJDC6441 from China
HIV-1 clone XJN0084 from China
HIV-1 clone ZAM184-5.6 from Zambia
HIV-1 clone p05MYKL045.1 from Malaysia
HIV-1 clone pBD6.15 from Cameroon
HIV-1 clone pCM235-2 from Thailand
HIV-1 clone pCM235-4 from USA
HIV-1 clone pCMO2.3 from Cameroon
HIV-1 clone pCMO2.5 from Cameroon
HIV-1 clone pIIIB from USA
HIV-1 clone pWCML249 from Kenya
HIV-1 clone pZAC from South Africa
HIV-1 genotype CRF05_DF
HIV-1 patient WCIPR sample 1985 clone 4
HIV-1 patient WCIPR sample 1985 clone 46
HIV-1 patient WCIPR sample 1985 clone 5
HIV-1 patient WCIPR sample 1985 clone 52
HIV-1 patient WCIPR sample 1985 clone 54
HIV-1 patient WCIPR sample 1990 clone 11
HIV-1 patient WCIPR sample 1990 clone 18
HIV-2
HIV-l from Greece
HMO Astrovirus
HPIV-1
Halastavi arva RNA virus
Haloarcula hispanica icosahedral virus
Haloarcula hispanica pleomorphic virus
Halogeometricum pleomorphic virus
Halorubrum pleomorphic virus
Halovirus
Hamster polyomavirus
Hana virus
Hardenbergia mosaic virus
Hardenbergia virus
Helicobasidium mompa endornavirus
Helicoverpa armigera NPV
Helicoverpa armigera NPV NNg1 DNA
Helicoverpa armigera densovirus
Helicoverpa armigera granulovirus
Helicoverpa armigera multiple nucleopolyhedrovirus
Helicoverpa armigera nuclear polyhedrosis virus
Helicoverpa zea nudivirus
Helicoverpa zea single nucleocapsid nucleopolyhedrovirus
Heliocoverpa armigera nucleopolyhedrovirus
Heliothis virescens ascovirus
Heliothis zea virus
Helleborus net necrosis virus
Hemorrhagic enteritis virus
Hendra virus
Hepataitis E virus
Hepatitis A virus
Hepatitis B Virus
Hepatitis B virus
Hepatitis C virus
Hepatitis D Virus genotype 3, clone 010-OBC Cl11
Hepatitis D Virus genotype 3, clone 010-OBCCl2
Hepatitis D Virus genotype 3, clone BR2-ENB
Hepatitis D virus
Hepatitis E virus
Hepatitis G virus
Hepatitis GB virus
Hepatitis delta virus
Hepatopancreatic parvovirus
Heron hepatitis B virus
Herpes simplex virus
Heterocapsa circularisquama RNA virus
Heterosigma akashiwo RNA virus
Hibiscus chlorotic ringspot virus
Hibiscus latent Singapore virus
Highlands J virus
Hippeastrum mosaic virus
Hipposideros bat coronavirus
Hirame rhabdovirus
His1 virus
His2 virus
Hog cholera virus
Hollyhock leaf crumple virus
Hollyhock leaf curl virus
Hollyhock yellow vein mosaic virus
Homalodisca coagulata virus
Honeysuckle ringspot virus
Honeysuckle yellow vein Kagoshima virus
Honeysuckle yellow vein beta-[Japan:Fukui:2001] DNA
Honeysuckle yellow vein beta-[Japan:Masuda:2003] DNA
Honeysuckle yellow vein mosaic beta-[Japan:Kumamoto:1998] DNA
Honeysuckle yellow vein mosaic beta-[Japan:Miyizaki:2001] DNA
Honeysuckle yellow vein mosaic disease associated satellite DNA beta-[Ibaraki] DNA
Honeysuckle yellow vein mosaic disease associated satellite DNA beta-[Nara] DNA
Honeysuckle yellow vein mosaic virus
Honeysuckle yellow vein virus
Hop latent virus
Hop mosaic virus
Hordeum mosaic virus
Horsepox virus
Horseradish latent virus
Huma Immunodeficiency Virus Isolate D205
Human Bocavirus
Human Coronavirus
Human JC virus
Human Papillomavirus
Human Respiratory syncytial virus
Human T Cell Lymphotropic Virus I
Human T-cell lymphotropic virus
Human T-lymphotropic virus
Human TMEV-like cardiovirus
Human adenovirus
Human astrovirus
Human betacoronavirus
Human bocavirus
Human calicivirus
Human circular dsDNA virus
Human coronavirus
Human coxsackievirus
Human cytomegalovirus
Human echovirus
Human endogenous retrovirus
Human enteric coronavirus
Human enterovirus
Human foamy virus
Human group 1 coronavirus
Human gyrovirus
Human hepatitis A virus
Human hepatitis virus
Human herpesvirus
Human immunodeficiency virus
Human lymphadenopathy virus
Human metapneumovirus
Human papillomavirus
Human papillomoavirus
Human parainfluenza virus
Human parechovirus
Human parvovirus
Human poliovirus
Human polyomavirus
Human respiratory syncytial virus
Human rhinovirus
Human spumaretrovirus
Hybrid snakehead virus
Hydrangea chlorotic mottle virus
Hydrangea ringspot virus
Hyperthermophilic Archaeal Virus 1
Hyperthermophilic Archaeal Virus 2
Hyphantria cunea nucleopolyhedrovirus
Ia io picornavirus
Ictalurid herpesvirus
Igbo Ora virus
Iguape virus
Ikoma lyssavirus
Ilheus virus
Indian cassava mosaic virus
Indian citrus ringspot virus
Infectious bronchitis virus
Infectious flacherie virus
Infectious haematopoietic necrosis virus
Infectious hematopoietic necrosis virus
Infectious hypodermal and hematopoietic necrosis virus
Infectious spleen and kidney necrosis virus
Influenza A virus
Ipomoea yellow vein virus
Iranian johnsongrass mosaic virus
Iranian maize mosaic nucleorhabdovirus
Irkut virus
Israel acute paralysis virus
Israeli acute paralysis virus
J-virus
JC polyomavirus
JC virus
Jaagsiekte sheep retrovirus
Japanese encephalitis SA-14 virus
Japanese encephalitis virus
Japanese iris necrotic ring virus
Japanese yam mosaic virus
Jembrana disease virus
Jurona virus
KI polyomavirus
Kakugo virus
Kalanchoe latent virus
Kalanchoe top-spotting virus
Karshi virus
Kashmir bee virus
Kedougou virus
Kelp fly virus
Kennedya yellow mosaic virus
Keunjorong mosaic virus
Khujand lyssavirus
Kimberley virus
Koala retrovirus
Kobuvirus
Koi herpesvirus
Kokobera virus
Konjac mosaic virus
Kotonkan virus
Kyasanur forest disease virus
Kyuri green mottle mosaic virus
Lactate dehydrogenase-elevating virus
Lagenorhynchus acutus papillomavirus
Lagos bat virus
Lake Victoria marburgvirus
Lamium leaf distortion associated virus
Langat virus
Large yellow croaker iridovirus
Lausannevirus
Leek yellow stripe virus
Leishmania RNA virus
Lelystad virus
Leporid herpesvirus
Lettuce necrotic yellows virus
Lettuce virus
Lettuce yellow mottle virus
Leucania separata nuclear polyhedrosis virus
Ligustrum necrotic ringspot virus
Lily mottle virus
Lily symptomless virus
Lisianthus necrosis virus
Little cherry virus
Ljungan virus
Lloviu virus
Lolium latent virus
Lordsdale virus
Louping ill virus
Lucerne transient streak virus
Lucky bamboo bacilliform virus
Ludwigia yellow vein virus
Lumpy skin disease virus
Lupine mosaic virus
Lygus lineolaris virus
Lymantria dispar nucleopolyhedrovirus
Lymantria xylina MNPV
Lymphocystis disease virus
Lynx rufus papillomavirus
Lyssavirus
MW polyomavirus
Macaca fascicularis papillomavirus
Macaca fascicularis polyomavirus
Macaca fuscata rhadinovirus
Macaca mulatta rhadinovirus
Macacine herpesvirus
Macaque simian foamy virus
Macrobrachium rosenbergii Taihu virus
Magnaporthe oryzae virus
Magpie-robin coronavirus
Maize chlorotic dwarf virus
Maize chlorotic mottle virus
Maize dwarf mosaic virus
Maize fine streak virus
Maize mosaic virus
Maize necrotic streak virus
Maize rayado fino virus
Maize streak Reunion virus
Maize streak virus
Maize white line mosaic virus
Malakal virus
Malpais Spring virus
Malvastrum leaf curl Guangdong virus
Malvastrum yellow mosaic virus
Malvastrum yellow vein Yunnan virus
Malvastrum yellow vein virus
Mamastrovirus
Mamestra brassicae MNPV
Mamestra brassicae multiple nucleopolyhedrovirus
Mamestra configurata NPV-A
Mamestra configurata nucleopolyhedrovirus
Mapuera virus
Maraba virus
Maracuja mosaic virus
Marburg marburgvirus
Marine RNA virus
Marseillevirus
Maruca vitrata MNPV
Mason-Pfizer monkey virus
Mastadenovirus
Mastomys coucha papillomavirus
Mastomys polyomavirus
Mavirus
Mayaro virus
Measles virus
Megavirus
Melanoplus sanguinipes entomopoxvirus
Meleagrid herpesvirus
Melon aphid-borne yellows virus
Melon necrotic spot virus
Menangle virus
Mengo virus
Meno virus
Merkel cell polyomavirus
Mesta yellow vein mosaic virus
Micro Torque teno virus
Micromonas sp. RCC1109 virus
Microvirus
Midway virus
Miniopterus polyomavirus
Miniopterus schreibersii papillomavirus
Miniopterus schreibersii picornavirus
Mink astrovirus
Mink calicivirus
Mink coronavirus
Mint virus
Minute virus
Mirabilis jalapa mottle virus
Mirabilis mosaic virus
Miscanthus streak virus
Mokola virus
Molluscum contagiosum virus
Moloney murine leukemia virus
Moloney murine sarcoma virus
Monkey B-lymphotropic papovavirus
Monkeypox virus
Morelia spilota papillomavirus
Moroccan watermelon mosaic virus
Mosquito VEM Anellovirus
Mosquito VEM virus
Mosquito densovirus
Mosquito flavivirus
Mossman virus
Mouse astrovirus
Mouse hepatitis virus
Mouse kobuvirus
Mouse parvovirus
Mouse polyomavirus
Moussa virus
MuLV
Mud crab dicistrovirus
Mulard duck circovirus
Mumps virus
Mungbean yellow mosaic India virus
Mungbean yellow mosaic virus
Munia coronavirus
Murid herpesvirus
Murine adenovirus
Murine astrovirus
Murine coronavirus
Murine cytomegalovirus
Murine hepatitis virus
Murine herpesvirus
Murine leukemia virus
Murine norovirus
Murine osteosarcoma virus
Murine pneumotropic virus
Murine polyomavirus
Muromegalovirus
Murray Valley encephalitis virus
Mus dunni endogenous virus
Mus musculus papillomavirus
Musca domestica salivary gland hypertrophy virus
Muscovy duck circovirus
Muscovy duck parvovirus
Mutant Porcine reproductive and respiratory syndrome virus
Mutant Rabies virus
Mycoplasma virus
Myotis myotis bocavirus
Myotis polyomavirus
Myotis ricketti papillomavirus
Mythimna loreyi densovirus
Mythimna separata entomopoxvirus
Myxoma virus
Nam Dinh virus
Nandina mosaic virus
Nanovirus
Narcissus common latent virus
Narcissus degeneration virus
Narcissus late season yellows virus
Narcissus mosaic virus
Narcissus symptomless virus
Nariva virus
Ndumu virus
Nebovirus
Neodiprion abietis nucleopolyhedrovirus
Neodiprion lecontei NPV
Neodiprion sertifer nucleopolyhdrovirus
Nepavirus
Nerine latent virus
Nerine virus
New World begomovirus
Newbury agent 1
Newcastle Disease virus
Newcastle disease virus
Ngaingan virus
Ngewotan virus
Night-heron coronavirus
Nilaparvata lugens honeydew virus
Nile crocodilepox virus
Niminivirus
Nipah virus
Nootka lupine vein-clearing virus
Nora virus
Norovirus
Northern cereal mosaic virus
Norwalk virus
Norwalk-like virus
Nse virus
Ntaya virus
Nudaurelia capensis beta virus
Nyamanini virus
O'Nyong-nyong virus
O'nyong-nyong virus
Oak-Vale virus
Oat blue dwarf virus
Oat dwarf virus
Oat golden stripe virus
Oat necrotic mottle virus
Obodhiang virus
Ockelbo virus
Odontoglossum ringspot virus
Okra leaf curl Mali virus
Okra leaf curl virus
Okra mosaic virus
Okra yellow crinkle Cameroon alphasatellite
Okra yellow crinkle virus
Old World harvest mouse papillomavirus
Olive latent virus
Olive mild mosaic virus
Omsk hemorrhagic fever virus
Onion yellow dwarf virus
Ononis yellow mosaic virus
Orange-spotted grouper iridovirus
Orangutan hepadnavirus
Orangutan polyomavirus
Orf virus
Orgyia leucostigma NPV
Orgyia pseudotsugata MNPV
Ornithogalum mosaic virus
Oryctes rhinoceros virus
Oryza rufipogon endornavirus
Oryza sativa endornavirus
Ostreid herpesvirus
Ostreococcus lucimarinus virus
Ostreococcus tauri virus
Ostreococcus virus
Otomops polyomavirus
Ovine adenovirus
Ovine enterovirus
Ovine enzootic nasal tumor virus
Ovine herpesvirus
Ovine hungarovirus
Ovine lentivirus
Ovine papillomavirus
Ovine pulmonary adenocarcinoma virus
Oyster mushroom spherical virus
PRCV ISU-1
PRRSV HB-1(sh)/2002
PRRSV HB-2(sh)/2002
PRRSV LV4.2.1
Pan troglodytes schweinfurthii polyomavirus
Pan troglodytes verus polyomavirus
Panax virus
Panicum streak virus
Panine herpesvirus
Panthera leo persica papillomavirus
Papaya leaf crumple virus
Papaya leaf curl China virus
Papaya leaf curl Guangdong virus
Papaya leaf curl virus
Papaya leaf distortion mosaic virus
Papaya mosaic virus
Papaya ringspot virus
Papilio polyxenes densovirus
Papillomavirus
Papio hamadryas papillomavirus
Paprika mild mottle virus
Parainfluenza virus
Paralichthys olivaceus rhabdovirus
Paramecium bursaria Chlorella virus
Parechovirus
Parrot hepatitis B virus
Parvovirus
Paspalum dilatatum striate mosaic virus
Paspalum striate mosaic virus
Passiflora latent carlavirus
Passion fruit mosaic virus
Passion fruit woodiness virus
Pea seed-borne mosaic virus
Pea stem necrosis virus
Peace lily mosaic virus
Peach chlorotic mottle virus
Peanut chlorotic streak caulimovirus
Peanut mottle virus
Peanut stripe virus
Peanut stunt virus
Pedilanthus leaf curl virus
Pedilathus leaf curl virus
Pelargonium chlorotic ring pattern virus
Pelargonium flower break carmovirus
Pelargonium flower break virus
Pelargonium line pattern virus
Pelargonium necrotic spot virus
Pelargonium vein banding virus
Penaeid shrimp infectious myonecrosis virus
Penaeus merguiensis densovirus
Penaeus monodon hepatopancreatic parvovirus
Pennisetum mosaic virus
Pepino mosaic virus
Pepper curly top virus
Pepper leaf curl Lahore virus
Pepper leaf curl Yunnan virus
Pepper leaf curl virus
Pepper mild mottle virus
Pepper mottle virus
Pepper severe mosaic virus
Pepper vein yellows virus
Pepper veinal mottle virus
Pepper yellow dwarf virus
Pepper yellow leaf curl China virus
Pepper yellow leaf curl Indonesia virus
Pepper yellow leaf curl virus
Pepper yellow mosaic virus
Pepper yellow vein Mali virus
Perina nuda picorna-like virus
Perinet virus
Periplaneta fuliginosa densovirus
Peromyscus papillomavirus
Persea americana endornavirus
Persimmon cryptic virus
Peru tomato mosaic virus
Peste des petits ruminants virus
Peste-des-petits-ruminants virus
Pestivirus
Petunia vein clearing virus
Phaeocystis globosa virus
Phaius virus
Philosamia cynthia ricini nucleopolyhedrovirus
Phlox Virus B
Phlox virus
Phocine distemper virus
Phocoena phocoena papillomavirus
Phocoena spinipinnis papillomavirus
Phthorimaea operculella granulovirus
Phytophthora infestans RNA virus
Picalivirus
Picobiliphyte sp. MS584-5 nanovirus
Pieris rapae granulovirus
Pig stool associated circular ssDNA virus
Pigeon paramyxovirus
Pigeon picornavirus
Pike fry rhabdovirus
Piliocolobus rufomitratus polyomavirus
Pine marten torque teno virus
Pineapple bacilliform comosus virus
Pineapple mealybug wilt-associated virus
Piscine myocarditis virus
Plantago asiatica mosaic virus
Plum bark necrosis and stem pitting-associated virus
Plum pox virus
Plutella xylostella multiple nucleopolyhedrovirus
Pneumonia virus
Po-Circo-like virus
Poinsettia mosaic virus
Pokeweed mosaic virus
Poliovirus
Polyomavirus
Poplar mosaic virus
Porcine TTV 2 from China
Porcine adenovirus
Porcine associated stool circular virus
Porcine astrovirus
Porcine bocavirus
Porcine circovirus
Porcine circovius type 2
Porcine coronavirus
Porcine endogenous retrovirus
Porcine endogenous type C retrovirus
Porcine enteric calicivirus
Porcine enteric sapovirus
Porcine enterovirus
Porcine epidemic diarrhea virus
Porcine hemagglutinating encephalomyelitis virus
Porcine kobuvirus
Porcine parvovirus
Porcine reproductive and respiratory syndrome virus
Porcine respiratory and reproductive syndrome virus
Porcine sapelovirus
Porcine teschovirus
Posavirus
Possum enterovirus
Potato Virus P from Brazil
Potato apical leaf curl disease-associated satellite DNA beta
Potato latent virus
Potato leafroll virus
Potato mop-top virus
Potato rough dwarf virus
Potato virus
Potato yellow dwarf virus
Potato yellow mosaic virus
Pothos latent virus
Powassan virus
Procyon lotor papillomavirus
Providence virus
Pseudaletia unipuncta granulovirus
Pseudocowpox virus
Pseudoplusia includens densovirus
Psittacid herpesvirus
Psittacus erithacus timneh papillomavirus
Pteronotus polyomavirus
Puma concolor papillomavirus
Pyrobaculum spherical virus
Pyrococcus abyssi virus
Quail picornavirus
Quang Binh virus
RD114 retrovirus
RHDV-BS89
RHDV-SD
Rabbit astrovirus
Rabbit calicivirus
Rabbit coronavirus
Rabbit fibroma virus
Rabbit hemorrhagic disease virus
Rabbit oral papillomavirus
Rabbitpox virus
Rabies virus
Raccoon polyomavirus
Rachiplusia ou multiple nucleopolyhedrovirus
Radish leaf curl virus
Rana grylio iridovirus
Ranid herpesvirus
Raptor adenovirus
Raspberry leaf blotch virus
Raspberry mottle virus
Rat coronavirus
Rat cytomegalovirus
Rat parvovirus
Rat theilovirus
Rattail cactus necrosis associated virus
Rattus norvegicus papillomavirus
Rauscher murine leukemia virus
Raven circovirus
Recombinant Hepatitis C Virus SA13/JFH1
Recombinant Hepatitis C virus
Recombinant chimeric Hepatitis C virus
Recombinant vesicular stomatitis Indiana virus
Red clover vein mosaic virus
Rehmannia mosaic virus
Reindeer papillomavirus
Reptile vesivirus
Respiratory syncytial virus
Reston Ebola virus
Reston ebolavirus
Reticuloendotheliosis virus
Retroviridae
Rhesus cytomegalovirus
Rhesus papillomavirus
Rhinolophus ferrumequinum circovirus
Rhododendron virus
Rhopalosiphum padi virus
Rhynchosia yellow mosaic virus
Ribgrass mosaic virus
Rice tungro bacilliform virus
Rice tungro spherical virus
Rice yellow mottle virus
Rice yellow stunt virus
Rinderpest virus
Rio Bravo virus
Rocio virus
Rock bream iridovirus
Rodent hepacivirus
Rodent herpesvirus
Rodent pegivirus
Rodent stool-associated circular genome virus
Rosa rugosa leaf distortion virus
Rose leaf curl virus
Rose spring dwarf-associated virus
Rose yellow vein virus
Rosellinia necatrix partitivirus
Ross River virus
Ross' goose hepatitis B virus
Rosy apple aphid virus
Rous sarcoma virus
Rousettus aegyptiacus papillomavirus
Rousettus bat coronavirus
Rubella virus
Rubus canadensis virus
Rudbeckia flower distortion virus
Rupestris stem pitting associated virus
Rupestris stem pitting-associated virus
Ryegrass mosaic virus
SARS Coronavirus
SARS coronavirus
SIVcpz proviral
STL polyomavirus
Sable antelope coronavirus
Sacbrood virus
Saccharomyces cerevisiae killer virus
Saccharum streak virus
Saffold virus
Sagiyama virus
Saguaro cactus virus
Saimiri sciureus polyomavirus
Saimiriine herpesvirus
Salem virus
Salivirus
Salmon pancreas disease virus
Salmonid alphavirus
Sambar deer coronavirus
San Miguel sea lion virus
Sapovirus
Scallion mosaic virus
Scallion virus
Scheffersomyces segobiensis virus
Schlumbergera virus
Sclerotinia sclerotiorum debilitation-associated RNA virus
Sclerotinia sclerotiorum dsRNA mycovirus
Sclerotinia sclerotiorum hypovirus
Sclerotinia sclerotiorum mitovirus
Scophthalmus maximus rhabdovirus
Sea Turtle Tornovirus
Seal picornavirus
Semliki forest virus
Sendai virus
Seneca valley virus
Sepik virus
Sesbania mosaic virus
Shallot latent virus
Shallot virus
Shallot yellow stripe virus
Sheep astrovirus
Sheeppox virus
Sheldgoose hepatitis B virus
Shimoni bat virus
Shrimp white spot syndrome virus
Sibine fusca densovirus
Sida golden mosaic Buckup virus
Sida golden mosaic Florida virus
Sida golden mosaic virus
Sida golden yellow vein virus
Sida leaf curl virus
Sida micrantha mosaic virus
Sida yellow vein Madurai virus
Siegesbeckia yellow vein virus
Silurus glanis circovirus
Simian (African green monkey) immunodeficiency virus
Simian (macaque) immunodeficiency virus
Simian (stump-tailed macaque) immunodeficiency virus
Simian Agent 10
Simian Mason-Pfizer D-type retrovirus
Simian SRV-1 type D retrovirus
Simian T-cell lymphotropic virus
Simian T-lymphotropic virus
Simian adenovirus
Simian agent 12
Simian agent 5
Simian endogenous retrovirus
Simian enterovirus
Simian foamy virus
Simian hemorrhagic fever virus
Simian hepatitis A virus
Simian immunodeficiency PBJ virus
Simian immunodeficiency virus
Simian retrovirus
Simian sapelovirus
Simian virus
Simian-Human immunodeficiency virus
Sindbis virus
Sindbis-like virus
Singapore grouper iridovirus
Siniperca chuatsi rhabdovirus
Sitiawan virus
Sleeping disease virus
Small anellovirus
Small ruminant lentivirus
Snake adenovirus
Snakehead retrovirus
Snakehead rhabdovirus
Snow Mountain virus
Snow goose hepatitis B virus
Soft-shelled turtle iridovirus
Soil-borne cereal mosaic virus
Soil-borne wheat mosaic virus
Solenopsis invicta virus
Sonchus yellow net virus
Sorghum mosaic virus
Sour cherry green ring mottle virus
South African cassava mosaic virus
South polar skua adenovirus
Southern bean mosaic virus
Southern cowpea mosaic virus
Southern elephant seal virus
Southern tomato virus
Sowbane mosaic virus
Soybean chlorotic blotch virus
Soybean crinkle leaf virus
Soybean dwarf virus
Soybean mild mottle pararetrovirus
Soybean mild mottle virus
Soybean mosaic virus
Soybean yellow common mosaic virus
Soybean yellow mottle mosaic virus
Sparrow coronavirus
Sphaeropsis sapinea RNA virus
Spider monkey foamy virus
Spinach curly top Arizona virus
Spinach curly top virus
Spinach severe curly top virus
Spiroplasma kunkelii virus
Spissistilus festinus virus
Spodoptera exigua Iflavirus
Spodoptera exigua iflavirus
Spodoptera exigua nucleopolyhedrovirus
Spodoptera frugiperda MNPV
Spodoptera frugiperda MNPV genotype SfMNPV-G defective
Spodoptera frugiperda ascovirus
Spodoptera littoralis NPV
Spodoptera litura granulovirus
Spodoptera litura nucleopolyhedrovirus
Sporobolus striate mosaic virus
Spring Viremia of Carp
Spring viraemia of carp virus
Spring viremia of carp virus
Squash leaf curl China virus
Squash leaf curl Philippines virus
Squash leaf curl Yunnan virus
Squash vein yellowing virus
Squirrel monkey foamy virus
Squirrel monkey polyomavirus
Squirrel monkey retrovirus
Sri Lankan cassava mosaic virus
St. Louis encephalitis virus
Stachytarpheta leaf curl virus
Starling circovirus
Steller sea lion vesivirus
Stork hepatitis B virus
Strawberry chlorotic fleck associated virus
Strawberry vein banding virus
Streptocarpus flower break virus
Suakwa aphid-borne yellows virus
Subterranean clover mottle virus
Sudan ebolavirus
Sugarcane bacilliform IM virus
Sugarcane bacilliform virus
Sugarcane mosaic virus
Sugarcane streak Egypt virus
Sugarcane streak Reunion virus
Sugarcane streak mosaic virus
Sugarcane streak virus
Sugarcane yellow leaf virus
Suid herpesvirus
Sulfolobales Mexican fusellovirus
Sulfolobales Mexican rudivirus
Sulfolobus islandicus rudivirus
Sulfolobus spindle-shaped virus
Sulfolobus tengchongensis spindle-shaped virus
Sulfolobus turreted icosahedral virus
Sulfolobus virus
Sunflower chlorotic mottle virus
Sunflower mild mosaic virus
Sunshine virus
Sus scrofa papillomavirus
Sweet potato begomovirus
Sweet potato caulimo-like virus
Sweet potato chlorotic fleck virus
Sweet potato feathery mottle virus
Sweet potato geminivirus
Sweet potato golden vein associated virus
Sweet potato latent virus
Sweet potato leaf curl Canary Island virus
Sweet potato leaf curl Canary virus
Sweet potato leaf curl China Sichuan virus
Sweet potato leaf curl China virus
Sweet potato leaf curl Georgia virus
Sweet potato leaf curl Korean virus
Sweet potato leaf curl Lanzarote virus
Sweet potato leaf curl Sao Paulo virus
Sweet potato leaf curl South Carolina virus
Sweet potato leaf curl Spain virus
Sweet potato leaf curl Uganda virus
Sweet potato leaf curl virus
Sweet potato mosaic associated virus
Sweet potato vein clearing virus
Sweet potato virus
Sweetpotato badnavirus
Swine hepatitis E virus
Swine parainfluenza virus
Swine pasivirus
Swine vesicular disease virus
Swinepox virus
Switchgrass mosaic virus
TGEV Miller M6
TGEV Miller M60
TGEV Purdue P115
TGEV virulent Purdue
TPA_exp: Aeropyrum pernix ovoid virus
TPA_exp: Aeropyrum pernix spindle-shaped virus
TPA_exp: Suid herpesvirus
TPA_inf: Human herpesvirus
TPA_inf: Porcine rubulavirus
TT virus
TTV-like mini virus
TYLCAxV-Sic1-[IT:Sic2/2:04]
TYLCAxV-Sic2-[IT:Sic2/5:04]
TYLCCNV-[Y322] satellite DNA beta sequence
Tailam virus
Tamana bat virus
Tamus red mosaic virus
Tanapox virus
Taro bacilliform virus
Taro vein chlorosis virus
Taterapox virus
Taura syndrome virus
Telosma mosaic virus
Tembusu virus
Tench rhabdovirus
Theiler murine encephalomyelitis
Theiler murine encephalomyelitis virus
Theiler's disease-associated virus
Theiler's encephalomyelitis virus
Theiler's murine encephalomyelitis virus
Theiler's-like virus
Theilers murine encephalomyelitis virus
Thermococcus prieurii virus
Thermoproteus tenax spherical virus
Thrush coronavirus
Thunberg fritillary virus
Thysanoplusia orichalcea NPV
Tianjin totivirus
Tibrogargan virus
Tick-borne encephalitis virus
Tiger frog virus
Tioman virus
Titi monkey adenovirus
Tobacco bushy top virus
Tobacco curly shoot virus
Tobacco etch virus
Tobacco leaf curl Japan virus
Tobacco leaf curl Kochi virus
Tobacco leaf curl Thailand virus
Tobacco leaf curl Yunnan virus
Tobacco leaf curl Zimbabwe virus
Tobacco leaf curl virus
Tobacco mild green mosaic virus
Tobacco mosaic virus
Tobacco necrosis virus
Tobacco rattle virus
Tobacco vein banding mosaic virus
Tobacco vein distorting virus
Tobacco vein-clearing virus
Tomato Chino La Paz virus
Tomato Yellow Leaf Curl Virus
Tomato begomovirus
Tomato bushy stunt virus
Tomato golden mosaic virus
Tomato leaf curl Bangalore virus
Tomato leaf curl Bangladesh virus
Tomato leaf curl China virus
Tomato leaf curl Comoros virus
Tomato leaf curl Cotabato virus
Tomato leaf curl Guangxi virus
Tomato leaf curl Gujarat virus
Tomato leaf curl Hainan virus
Tomato leaf curl Iran virus
Tomato leaf curl Java virus
Tomato leaf curl Karnataka alphasatellite
Tomato leaf curl Karnataka virus
Tomato leaf curl Laos virus
Tomato leaf curl Madagascar virus
Tomato leaf curl Mayotte virus
Tomato leaf curl Mindanao virus
Tomato leaf curl Namakely virus
Tomato leaf curl New Delhi virus
Tomato leaf curl Oman virus
Tomato leaf curl Pakistan virus
Tomato leaf curl Palampur virus
Tomato leaf curl Philippine virus
Tomato leaf curl Philippines virus
Tomato leaf curl Pune virus
Tomato leaf curl Ranchi betasatellite
Tomato leaf curl Ranchi virus
Tomato leaf curl Seychelles virus
Tomato leaf curl Sudan virus
Tomato leaf curl Taiwan virus
Tomato leaf curl Vietnam virus
Tomato leaf curl geminivirus
Tomato leaf curl virus
Tomato mosaic virus
Tomato necrotic stunt virus
Tomato yellow blotch virus
Tomato yellow dwarf disease associated satellite DNA beta-[Kochi] DNA
Tomato yellow leaf curl Axarquia virus
Tomato yellow leaf curl China virus
Tomato yellow leaf curl Malaga virus
Tomato yellow leaf curl Mali virus
Tomato yellow leaf curl Sardinia virus
Tomato yellow leaf curl Thailand betasatellite
Tomato yellow leaf curl Thailand virus
Tomato yellow leaf curl Vietnam virus
Tomato yellow leaf curl virus
Torque teno canis virus
Torque teno douroucouli virus
Torque teno felis virus
Torque teno midi virus
Torque teno mini virus
Torque teno sus virus
Torque teno tamarin virus
Torque teno virus
Transmissible gastroenteritis virus
Tree shrew adenovirus
Trichechus manatus latirostris papillomavirus
Trichodysplasia spinulosa-associated polyomavirus
Trichomonas vaginalis virus
Trichoplusia ni ascovirus
Trichoplusia ni single nucleopolyhedrovirus
Triticum mosaic virus
Tuber aestivum endornavirus
Tuber aestivum mitovirus
Tuhoko virus
Tulip virus
Tupaia herpesvirus
Tupaia paramyxovirus
Tupaia rhabdovirus
Turbot reddish body iridovirus
Turdivirus
Turkey adenovirus
Turkey astrovirus
Turkey avisivirus
Turkey coronavirus
Turkey gallivirus
Turkey parvovirus
Turnip crinkle virus
Turnip curly top virus
Turnip mosaic virus
Turnip rosette virus
Turnip vein-clearing virus
Turnip yellow mosaic Blue Lake
Turnip yellow mosaic virus
Turnip yellows virus
Tursiops truncatus papillomavirus
UR2 sarcoma virus
Ugandan cassava brown streak virus
Uncia uncia papillomavirus
Uncultured Microviridae clone SARssphi1
Uncultured Microviridae clone SARssphi2
Uncultured virus
Urochloa streak virus
Ursus maritimus papillomavirus
Ustilaginoidea virens RNA virus
Usutu virus
VESV-like calicivirus
Vaccinia virus
Vallota speciosa virus
Valsa ceratosperma hypovirus
Variola major virus
Variola minor virus
Variola virus
Varroa destructor virus
Velvet bean severe mosaic virus
Velvet tobacco mottle virus
Venezuelan equine encephalitis virus
Verbena virus
Vervet monkey polyomavirus
Vesicular exanthema of swine virus
Vesicular stomatitis Alagoas virus
Vesicular stomatitis Indiana virus
Vesicular stomatitis New Jersey virus
Viral haemorrhagic septicaemia virus
Viral hemorrhagic septicemia virus
Virus PhiCh1
Visna virus
Visna/Maedi virus
Visna/maedi virus
WU Polyomavirus
Walleye dermal sarcoma virus
Wasabi mottle virus
Waterbuck coronavirus
Watermelon bud necrosis virus
Watermelon mosaic virus
Wesselsbron virus
West Caucasian bat virus
West Nile virus
Western equine encephalomyelitis virus
Western roedeer papillomavirus
Wets NIle virus
Whataroa virus
Wheat dwarf India virus
Wheat dwarf virus
Wheat eqlid mosaic virus
Wheat streak mosaic virus
Wheat yellow dwarf virus
White bream virus
White spot syndrome virus
White-eye coronavirus
White-tailed deer coronavirus
Whitefly VEM 1 begomovirus
Whitefly VEM 2 begomovirus
Whitefly VEM satellite
Wigeon coronavirus
Wild potato mosaic virus
Wild tomato mosaic virus
Wiseana iridescent virus
Wisteria vein mosaic virus
Wongabel virus
Wood mouse herpesvirus
Woodchuck hepatitis B virus
Woodchuck hepatitis virus
Woolly monkey hepatitis B Virus
Woolly monkey hepatitis B virus
Xenotropic MuLV-related virus
Xenotropic murine leukemia virus
Y73 sarcoma virus
Yaba monkey tumor virus
Yaba-like disease virus
Yam bean mosaic virus
Yam mild mosaic virus
Yellow baboon polyomavirus
Yellow fever virus
Yellow head virus
Yoka poxvirus
Yokose virus
Youcai mosaic virus
Yug Bogdanovac virus
Zaire Ebola virus
Zaire ebolavirus
Zalophus californianus papillomavirus
Zantedeschia mild mosaic virus
Zika virus
Zucchini green mottle mosaic virus
Zucchini yellow mosaic virus
bat SARS coronavirus
coxsackievirus
ovine papillomavirus
pea seed-borne mosaic virus
sugarcane yellow leaf virus
variola minor virus
yellow vein China virus

Ten days in hospital

Thursday, May 23rd, 2013

IMG_5334

I’m about to check out of Addenbrookes Hospital in Cambridge after a 10-day stay, 8 of them in isolation. The short story: I got a rash, and it took over my body. Below are some notes on what’s been going on, along with a few images. You can see the full set of images at http://bit.ly/terry-rash (you may need to register for Dropbox).



April 29 – May 5: The LCHF diet begins

Bacon & eggs!Just back from a week in New York, I decided to start a low carb, high fat (LCHF) diet. I’ve put on about a kilo of weight a year over the last 9 years and eating less carbs seemed like it might be a good way to start burning some of my excess fat. In 2012 I’d done some reading about LCHF diets but hadn’t tried it (check out this video if you’re curious). In NY I’d been feeling too physically large, which prompted me to give it a go. After almost 50 years of living on cereal, bread, pasta, rice and potatoes, though, I wasn’t sure I’d be able to do it.

But it was suprisingly easy. I’d cook myself some bacon and eggs for lunch, along with a big salad, maybe a fried vegetable, nuts and dried beans for snacks, etc. Within a few days I was clearly in ketosis. I wasn’t getting hungry at all because my body had switched to burning my fat, and there was still plenty of that to consume. After 4 days I was down 3kg (from 78 to 75), or about 6.5 pounds. I felt like I was eating more healthily than ever.


Monday May 6: The rash appears

On the morning on Monday May 6, I awoke with a small itchy rash on my sternum, just small red separated dots, probably about 20 of them. I didn’t think too much of it.

Tuesday/Wednesday May 7/8: Initial spread

The rash grew across part of my chest and down my stomach. On the night of May 8th I slept on a fold-out bed downstairs so as not to bug Ana through the night. The rash was extremely itchy, but I knew I must not scratch it. I lay in bed wishing there were manacles by my sides to hold my arms down.

I had began searching around on the web for LCHF rash connections and found there were many hundreds of people blogging and commenting on forums about their rashes. But I couldn’t find anything that looked like reliable scientific opinion on what was happening to those people. Most of them had small rashes and many were able to stop the rash simply by reintroducing carbs. I added some carbs back to my diet, but there was no change. Almost all the comments online were reassuring, saying it was normal, that (unspecified) “toxins” were leaving my cells and exiting through the skin, etc. As so many people had similar problems, and they seemed to just go away after a while, I wasn’t too worried, just very itchy.

Thursday May 9

IMG_20130509_164000

I had to take Findus to a doctor appointment after he got back from school. While there I showed part of my stomach to the doctor. She immediately said it was an allergic reaction. We didn’t discuss it further. I’ve never been allergic to any food, and hadn’t been eating anything new – just different amounts of foods I’d always eaten, and very few carbs. The doctor said she highly doubted the rash could be due to the diet change. She suggested I pick up some calamine lotion, hydrocortisone cream, and anti-allergy tablets to see if any of them helped.

By this time, the fourth day, the rash had spread across under my armpits and slightly down my upper inner arms. It was all across my stomach, and my belly button was all rash (see image below). It had begun to descend onto my upper thighs. It was on my lower legs, just above my ankles, and on the back of my calves. My lower back was covered with it. Did I mention that it was itchy as hell?



Friday May 10

IMG_20130510_114448IMG_20130510_114503IMG_20130510_114608IMG_20130510_114642

I went into Cambridge to meet people I’m doing some part-time research with (on virus detection and discovery, ironically). I was uncomfortable the whole time and spent much of the several hour meeting standing up. Sitting down was causing uncomfortable rubbing pressure on my pants line.

Late that night, Ana convinced me to call the emergency medical line. I didn’t feel it was warranted, but I admit I was worried. Plus, it was Friday night, the local surgery would be closed until Monday, and it was abundantly clear that if this thing didn’t stop spreading it was going to be really bad by then. A woman took my details, listened to the description, and decided to have the medical team call me. They did, and at 11:30pm I was given a midnight appointment at the Chesterton Medical Centre in Cambridge.

The doctor who saw me listened to my story and said I was having an allergic reaction. He put a bunch (8?) of triangular pink steroid tablets into a cup of water and got me to drink it. He wrote me a prescription for more. While talking to him I noticed an unusual slight twinge in my left eye, but didn’t think to say anything.

That night, the rash began to ooze. I noticed when turning over in bed that the sheets seemed to be wet. At first I thought I must be sweating a tiny bit without noticing it. After a while I realized the liquid was coming out of my body in tiny slippery beads of rash pus. Wet areas appeared on the sheets corresponding to my back, stomach, sides, thighs, etc. Very unpleasant. I didn’t sleep well, and not for the last time.



Saturday May 11

20130511_07393620130511_07394520130511_07395320130511_073929

The rash has again spread and become denser. I filled the prescription and went into Cambridge with Sofia to meet Ana and the boys. Back home I took my first steroid dose. My right eye had begun to twinge too. Liquid-filled blisters were beginning to appear on the palms of my hands and on my fingers.



Sunday May 12

After another unpleasant night and more rash spreading, I called the emergency medical people again and got an immediate appointment at the Chesterton Medical Centre. I didn’t take calling for help lightly, but I was constantly uncomfortable and the steroids didn’t seem to have helped at all. The opinion this time was chickenpox. The doctor examined my eye but found no lesions on the cornea. So I went off the steroids and onto aciclovir tablets and aciclovir eye ointment. I was told to go to the Over Surgery on Monday to get a blood test for detection of chickenpox antibodies to confirm the dignosis. I mailed my parents to see if they could remember if I’d had chickenpox already. It seemed very likely that I must have, given that I did not get it when our 3 kids did.

Monday May 13: In isolation at Addenbrookes

IMG_5216IMG_5218IMG_5219IMG_5221

I’m not saying much about the physical side of things. The rash itself was mainly itchy. But my upper body had become extremely sensitive, and I could hardly bear for things to touch it. The sensitivity had been making me tense for some days, so I was not physically relaxed – far from it. My breathing wasn’t natural and even: I’d take in a breath and hold it a little to avoid breathing out and moving my body. Looking in the mirror at my whole body was quite shocking. Given the speed of the spread of rash and the discomfort level, it was clear that in a couple of days things would be really serious.

I called the Over Surgery at 8:30am and got a 9am appointment to have a blood test. I packed a few things in a small bag because I had a feeling I might not be back for a while. As it turned out, I wouldn’t be back home for 10 days.

On arrival, they sent me to a small room where a nurse did the blood samples. She asked why I wanted the test and I told her. I lifted up my top to show her some of my stomach and she said “I’m calling a doctor”. When the doctor did not arrive after a few minutes, she called another. They both soon arrived, and both said the same thing: go straight to hospital.

It’s about a 25 minute drive to Addenbrookes hospital from Over. They tried calling Addenbrookes to speak to the dermatologist, but couldn’t get through. So the doctor wrote me a letter to help with admissions and told me to go to the Accident & Emergency section. I would have much preferred to go in an ambulance than to drive. I guess uncertainty about driving showed in my face or body. The doctor said they could call one, but I declined. I went out and folded myself uncomfortably into the car. I knew I could hold on and keep it together, but I also felt like I was on the edge of some kind of collapse due to sensory or stress overload. It’s hard to explain, but I didn’t feel well at all. I told myself to focus, to act normal, turned on the radio and off I headed.

At Addenbrookes I drove into the carpark. UK parking places are invarably narrow, and I wasn’t looking forward to trying to get into one. Turning my body or stretching to see were painful. Up and up I crawled in a line of cars looking for places, all the way to the 6th level before finding a spot. Then a short walk, feeling a bit geriatric, to A & E.

Inside, they screen all arrivals. I handed over my introduction letter, was given a summary form, and told to sit and wait to be registered. I looked at the summary form, which had the usual mundane information: name, address, etc. At the top, a description of the reason for the visit. Mine said “Rash. Cause?” I was soon called to the registration desk and the woman took more details, including next of kin, and asked if anyone knew I was there. She was telling me I’d need to go sit down again to wait, but I needed attention. I said: “I know ‘rash’ doesn’t sound like much of a problem, but I think I need help right away”. I showed her my stomach. She took one look and sent me back to the woman doing the input screening, and told me to tell her my story. I showed the screening woman my stomach, and that was it. I was out of the admissions area at high speed.

In a small room, they asked me a few questions. I was already in the medical system as “Doctor Jones”. I knew I now had to mention that I’d been doing some work in the Viroscience laboratory at the Erasmus Medical Centre (EMC) in Rotterdam a few weeks earlier. As I wrote to my father later that night in email:

If you ever want to get expedited at top speed through hospital admissions, being called DOCTOR JONES, having spent recent time in one of the world’s top viral labs, and having an unexplained full-on bright scarlet 90%-coverage body rash ain’t a bad combo!

They took me straight to a small isolation room. When they left me there I heard them hang something on the door on the outside – it sounded like they were barring it! Nurses and doctors began to come by to ask questions, take blood samples and nasal/oral swabs. I had a canula line put into the back of my left hand. My heart rate was 120 on admission. Resting it is 60 or less. A Scottish nurse asked to see my back and exclaimed “Oh, you poor, poor, gentleman!”. I had no idea what my back looked like. Bad, I guess. The questions were about recent travel, what I had been doing in Rotterdam, medication, health history. Chickenpox, excema, other illnesses, allergies, the diet change. Sexual practices, drugs, medication, travel, animal exposure, etc.

About 5 hours after arriving, I was admitted and told I wouldn’t be going home that night. After a chest x-ray, I was transferred to an isolation room in Ward L4. It was a ward full of older post-surgery patients, not one used for infectious disease patients. But they needed an isolation room, and that’s what was available. The room was huge, with a window and en suite bathroom. Just as I arrived, I ran into Ana and Derek in the ward looking for me. I was happy to be in hospital, being looked after instead at home looking at my body with mounting dread.

Derek took some photos and emailed them to medical and virology friends at EMC to get their opinions and to ask if anyone else at EMC had come down with a similar condition. The prevailing thinking, at least at Addenbrookes, was that I had chickenpox. The blisters on my palms seemed the strongest indicator. Rather few diseases cause blisters, apparently. My parents had mailed me back to say they couldn’t be sure whether I’d had them.



Tuesday May 14

The night was long and uncomfortable. I wont go into details of the discomfort (see below for some of that). It finally got light around 4:15am. I spent hours standing around in the room naked, sometimes with a blanket around my shoulders but held off my body. I’d lean against the wall to stretch my back, and listen to the clock tick. At some point I realized the rash had gotten into my scalp. I hope my face will continue to remain free from it.

I don’t remember much about the day. Blood samples, swabs, antibiotics going into my arm, more doctors and more questions. Ana and Derek visited again. Ana brought fruit and other supplies, including my Nexus 7. I had almost no comfortable positions that I could maintain for more than a handful of minutes, but lying on my back was fine. The Nexus 7 would become my point of contact with the outside world. The small screen, a case allowing it to stand propped up on my chest, some of my music on it, and connected via a wifi hotspot made by my phone – perfect. I couldn’t have used a laptop.

I met Dr Sterling (head of Dermatology) that day and was very impressed. I also had a swarm of 5 female dermatologists staring intently at my skin as I stood naked in front of them. I told them I wished I had a camera.

An old woman named Margaret has moved into the room next door. She’s confused and disoriented. Every 5 or 10 minutes she walks out of her room and announces “I’m going home”. The nurses tell her she needs to go back to her room, that she’s in hospital, that she can’t go home. “I’m not a child you know, I’m going home.”

Wednesday May 15

IMG_5234IMG_5235IMG_5239IMG_5243

Margaret wanders silently into my room as I’m eating breakfast. I don’t turn around, thinking it is a nurse. Her voice comes from behind me: “wrong house.” I don’t say anything, and she leaves. Later in the day, I am taking a pee and the door to my bathroom is open. I hear someone come in and call out to tell them I’m in the loo. There’s no response. Then I hear a voice call “Margaret, you’re in the wrong room.” Margaret calls back to them “my sister is here, she’s in the toilet.” By the time I come out of the bathroom, Margaret is gone. Later I hear them telling her that she’s going home today: “I certainly am not!” she replies, telling the staff that her friends are coming here to visit her and that she has to leave the ward to find them. No, no, they reassure her, your friends are coming here, they’ll come here to where you are. “But why would they come here?” I feel sorry for them all. Poor Margaret, and the nurses who have to look after her constantly coming out to declare she’s leaving and needing to be shepherded around the ward.

The coalesced parts of rash have gone a dark purple color. Meanwhile the rash has again spread and gotten denser everywhere. Blisters (at least 50 of them) are spreading on my palms and fingers. The VZV (Chickenpox) result came back negative, as did HSV (Herpes Simplex Virus).

With the negative chickenpox result, the case is suddenly more interesting and pressing. I met Dr Moore (head of Infectious Diseases) who comes to see me with Doctor Sterling. Dr Moore stared at me like a hawk, listened to everything very carefully, and then began asking questions. I liked her immediately, she seemed extremely smart and thorough. She suggested they move me to her ward tomorrow so I could be closer to the infectious disease people.

Tomorrow they’ll start throwing every test at me they can think of. Although the rash might be treatable with a steroid cream, the steroids suppress the immune system. So we need to figure out whether my body is busy fighting an actual disease before using steroids to try to settle what could otherwise be some kind of allergic reaction. The doctors here and at EMC start thinking of possibilities while the rest of us are digging for possible leads in Wikipedia, aided by Google Images.

What the hell have I got?



Thursday May 16: Skin pain like on that holiday trip to Mercury

IMG_5249IMG_5259IMG_5268IMG_5270

The canula in my left hand has been hurting a lot when they pump in the antibiotics. So they’ve changed it, and put it into my right forearm. Unfortunately, the plastic dongle attachments hang down to the middle of my forearm where it is unbearably sensitive. Shit.

From a mail I sent to Ana & Derek later this night:

Skin pain like on that holiday trip to Mercury, the one where you forget to take any sunscreen.

During the day, Dr Sterling takes two skin biopsies taken from left forearm. Five stitches in them, in total. One of the samples will go into her -80C freezer and we’ll send it to EMC if necessary.

That night I have a pain in my trunk, back right, as I get up out of a chair. Derek is still there and I tell him. After 15 minutes of waiting for it to go away, we alert the staff. I’m almost unable to raise myself in bed to a sitting position so as to get up. One problem they’re watching out for is any kind of internal infection, so a pain in my right kidney region is a bit of a worry. I’m sent for a chest x-ray in wheelchair, and I have to wear a mask. More blood is taken and sent off for septic analysis.

Ahead of the transfer to Infectious Diseases, I have a shower. I have a 500ml container of anti-bacterial soap-like liquid and I’m supposed to wash my whole body. On my left forearm I have the two bandages (covering the stitches from the biopsies) that are not supposed to get wet, and sticking out the middle of my right forearm are two dangling plastic dongles attached to a canula with a tube going into my arm. So I’ve got one arm that can’t get wet and one that I can’t bend properly, and I’m supposed to have a shower and wash myself?

After somehow managing that, I begin putting liquid paraffin all over the rash. I.e., over my entire body. You know you have a real rash when they provide you with soothing ointments by the liter. Once I’m done, the rash feels better, but I am totally covered in shiny paraffin. I hang out naked for as long as I can and then put on the hospital pyjamas for the ward transfer.

I’m transferred at 8pm to Infectious Disease ward D10, and placed in isolation. There’s an air lock to get into the ward and a “Barrier Nursing” sign on my door. The room is about half the size of the one I’d just left, and cold. Derek goes to ask them if they can turn off the blower, but it’s part of the airflow set-up of the isolation ward. He gets me a small radiator to counter the cold and soon after that, around 9pm, they ask him to leave.

I now have about 9 hours to get through before I’ll see the morning staff. I lay in the dark with the Nexus 7 on my chest and sent a short mail to Russell:

This is utterly hellish. The last ward was a paradise. I half expect Derren to walk in. I should be tweeting it. It’s only 2am. I have to look at it as a survival course. I wish I could write more easily. This is left hand only for various reasons. I should make a list.

I didn’t want to expand on how horrible I felt, because it seemed extra words could only make it seem less horrible than it was. But I had nothing better to do, I was certainly not going to fall asleep, so I might as well write up a list of things that were collectively making this all so unpleasant. So from 2-3:20am, typing with the index finger of my left hand and lying on my back, I got it all down, big and small.

The main problem of course was that my skin was ridiculously sensitive and painful. To ease this, I was covered in paraffin, from toes to neck. The paraffin is all over the inside of the synthetic hospital pyjamas. It soaks, somewhat, into the rasping synthetic sheets of the bed and synthetic pillowcase. The bed blankets are heavy and synthetic, and they too don’t mix well with paraffin. Everything is saturated with paraffin. None of it dries out at all or becomes any less slippery or welcoming. Under the paraffin, concreted to my skin are thousands of small golden crystals of solidified rash pus (see image for May 13). They are very hard and scratchy, and are difficult to dissolve in the shower. It is like having large grains of sand in the paraffin between me and the bed. The air conditioner is constantly on, blowing cool air onto me, and making the sheets cold and dead to the touch.

The skin pain is complimented by lots of things about my arms and hands that make it hard to do anything or be comfortable, apart from lying flat on my back. I have two cuts with stitches in them on my left forearm from the skin biopsies today. One of them has lost its dressing. I have a hospital name tag on my left wrist that is too loose. It will sound trivial, but it was extremely annoying. Hundreds of times, often using my mouth, I move it up and try to wedge it around my wrist, trying to keep it away from my forearm. The back of my left palm is bruised and sore from having a line in it for 3 days. The back of my right palm has been used about 10 times to draw blood. My right elbow crease area has the canula line in it, the tube going up into my vein above my elbow, making it uncomfortable to bend the arm. Two plastic dongle connectors hang from the line right to the exact middle of my ultra-sensitive forearm (see the image below). I need to find ways to position my arm so the plastic connectors are not resting on my forearm. Each time I move the arm, I try to avoid letting them touch me. The line hurts a little when the connectors dangle backwards out into the air, which happen if I raise the arm much (I am lying on my back, so raising the arm is a frequent need). The plastic bandage holding the line to my arm is half off, due to the paraffin, which makes it swing around more than it should.

There are about 60 blisters on my palms, between my fingers, and on the tops/bottoms of my fingers. Some are large, all are pressure sensitive. Closing my hands is awkward / sensitive due to this. Picking things up or, much harder, supporting my weight as I get up hurts the hands, for the same reason. I find it hard to bend down, let alone to reach the ground (skin pain) to pick anything up.

Lying on my back is fine, if I keep my arms angled out and clear of anything that could touch them or my underarms. But I have been lying down so much this past week, my back is very tired. Lying on my side is very uncomfortable due to arms, underarms, dongles, skin etc. I do it from time to time to relieve the back. I find a way to have both arms sticking out from my body, bent at the elbows, nothing touching anything, and I more-or-less hold the position and hope to drift off a little.

One thing I had been saving up and looking forward to as a midnight snack was a bowl of cereal with cold milk. After a couple of hours of lying in the bed, I decided it was time. I got up, feeling cold. I prepared the cereal and went to take the first delicious mouthful. Unbelievably, the milk had gone sour! I had to get warm again and the only place was the bed. But in the few minutes of preparing the cereal, I had left the sheets folded down and the air conditioner had blown on them. They were cold and saturated with paraffin. I forced myself back into the bed, pulled a blanket over myself, and tried to get warm.

At some point, I thought to myself “This is a survival course”. That everything that was going wrong, finishing with finding the milk sour and having to force myself into the wet sheets despite being freezing, was all part of a deliberate plan to break me. All part of a set of challenges I was being thrown and which I had to deal with. I mailed Russell, telling him I expected Derren Brown to walk into the room at any moment with a TV crew. The “survival course” perspective helped, and I began to smile (a little, inwardly). There was no way I was going to let this get the better of me. From then on, things have gotten better.

It was a horrible night. Probably the most uncomfortable of my life.



Friday May 17

IMG_20130517_060747

My feet are now greatly swollen. Getting up from the bed is beginning to be painful. Negative test results come in on HIV and syphilis. During the day additional tests begin to come in.

Yesterday they weighed me: 81.6kg! I’ve somehow added 3.5kg in under 4 days. WTF?

Ana is worried I may have leukemia. It turns out she hasn’t slept for 3 days. The EMC guys have sent some worrying links, e.g., to things like Stevens Johnson disease. She brings me a ton of bedding: pillow cases, sheet, comforter cover, and a bunch of soft warm travel towels. That will make a huge difference.



Saturday May 18

20130518_152205IMG_5290IMG_5308IMG_5302

It’s hard to see that I used to have ankles. My lower legs have turned dark purple with the rash and are very swollen. Large ugly blisters have appeared on inside of my heels, around my ankles, and on my Archilles tendons, on both feet The right leg is worse, but it’s a close thing. The upper part of my body is looking quite a bit better – compare the earlier photo of my underarm.

Dr Sterling drops in. She thinks, given the negative infectious disease results, it’s time to try some steroid cream on just my stomach & chest. She examines my “tree stump” legs and takes a photo with her phone.

Dr Moore drops by too. She looks at my legs and tells me that due to some cellular protein level being low, water that would otherwise be bound and inside my cells is leaving them via osmosis and is basically sloshing around (I am paraphrasing) inside my system, causing the inflammation of my feet. She tells me I have eat well, with as much protein as possible. She suggests protein shakes. I tell Derek, who lives on SPIRU-TEIN, and he brings me a can.

Ana comes by and is still terribly worried I may have leukemia. I call to get a doctor in some that she can hear why they don’t think so. Mok, who works with Dr Moore, comes by to help. He says he’ll ask the lab doing the biopsy to examine the white blood cells (my count is high) for any abnormal shape that might indicate leukemia. Mok comes by later to lance some of the blisters on my heels to collect their liquid for analysis.

That night I have a fever of 39C. But they’d given me paracetamol and codeine which keeps it in check. The codeine makes me feel totally weird. I am aware of the distant sensory roar from my skin as I lie with my arms touching the sheets. I can’t think clearly about anything. I see faces transform into mischievous devil caricatures, with goatees and horns. At about 3am I manage to collect myself and put the steroid cream onto my chest. The codeine weirdness goes on all night, until daylight. In the morning I find the canula in the bed next to me, the tube has been pulled out of my vein. I’ll not be trying the codeine again.



Sunday May 19

IMG_5324IMG_5341IMG_5339IMG_20130519_094017

Sofia and Lucas visit with Ana. We eat Burger King that they bring and watch a movie. They look a bit shocked to see my upper body. I keep my pants on so as not to show my legs, which are much scarier at this point.

Getting into a standing position is now very painful. Pain shoots down my legs as the “sloshing” intra-cellular water pushes down through my legs. Then when my feet touch the ground, some of the water is forced back up my legs and pains shoot up to my inner thigh. Once I manage to stand, I have to take small shuffling painful steps for maybe a minute before things settle down and I can walk almost normally. If this keeps getting worse, getting out of bed is going to be a real problem.

I have very small new blisters on fingers. What’s going on, more blisters?



Monday May 20

IMG_5352IMG_5355IMG_5359IMG_5358

The creep of additional rash redness on feet has continued overnight, and the rash is now between toes. Walking in flip flops affected. I realize I should have been putting the steroid cream onto my entire foot, not just the parts that visually (only) have the rash.

Ana and Derek bring delicious Indian food from Cambridge for lunch.

More infectious disease test results are coming in, all negative.



Tuesday May 21

IMG_20130521_103639

Althea and Edward Parker visit. Rash creep on hands and feet has stopped. Liver structural damage sonogram test is negative. A stool enterovirus test comes back negative, ruling out Hand, Foot and Mouth Disease. I am declared officially non-infective, and get to go downstairs to coffee shop!

Derek drops by at night and we talk virus discovery and a presentation I’m due to give in Rotterdam next Monday. I’ve done no Fluidinfo work or anything else for a couple of weeks.

I am peeling pretty much everywhere. Each morning and evening I wash myself and apply steroid cream. In between I am constantly putting on a skin itchiness/excema moisturizer.



Wednesday May 22

I thought I’d be out today because the key liver test is now showing an improved result. But they want to keep me one more day to do another blood test for liver functionality. I’m tempted to let them take blood in the morning and then check out. If the result is bad, I can come back in.

At Costa coffee downstairs I begin to pull together the images (mine, Derek’s, Ana’s) from the weirdness of the last 9 days. I do some work on putting together the text for this blog post. Costa have a fast and free wifi network which you can use for 3 hours.

My legs are peeling so much. There are many large flakes of skin in the bed each time I get in or out. The peeling skin on my heels and back of my Archilles tendon is very thick. You wouldn’t think that skin could peel, but it can. The skin on your balls (if you have any) can peel too, I can confirm. It feels like I can rub cream into my feet forever and they still could use more. From shoulders down to feet it looks like I have a mild sunburn, skin either peeling or very dry.



Thursday May 23

I’m supposed to have a last blood test today, but they’ve not come as they usually do to take the sample. I’m totally packed up and ready to leave. It’s been 10 days.

Now I’ve had word, I’ll be out soon. They’re preparing the various ointments I’ll need at home. Blood just got taken again and the results will be back in about an hour. Next Wednesday I’ll come back in for another blood test.

Conclusions

There’s no strong conclusion as to what caused my rash. The doctors think the most likely explanation is that it was triggered by a virus, but they don’t know what. It could have been medication, but apart from some cough syrup and lozenges, I wasn’t on any. They say it’s not an allergic reaction, and that it’s not due to the diet change. If they’re right, I’m lucky, as it’s unlikely to re-occur.

The Addenbrookes people have been fantastic. Perhaps 100 people have looked after me over the last ten days. Many doctors, nurses, blood takers, food bringers, cleaners, wheelchair pushers, x-ray and sonograph operators, admin staff. They’re from all over: Poland, Hungary, Latvia, Zimbabwe, South Africa, Australia, Ghana, UK, India, Pakistan, Philipines, China. Everyone has been great. The nurses work 12 hour shifts. In a few hours I’ll be gone from here and someone else will be in this room, being taken care of just as expertly as I was, and the good people working here just keep going and going and going, making each patient feel special and cared for, for thousands of patients a year in this ward alone. I’ve had an unpleasant last 10 days, but compared to what some people go through on a much longer term basis, it has been nothing. I’m lucky, I’ll walk out in almost full health and soon be fully recovered.

And thanks so much to Ana and Derek, for coming by every day and taking so much care of me. That made a huge difference.

Daylight robbery: Barclays skims €170 off a 5K EUR -> GBP transfer

Tuesday, February 5th, 2013

Last month (on Jan 18, 2013) someone I’m doing some work for initiated a transfer of €5,000 into my UK bank account. According to xe.com the mid-market rate that day was 1.1937940679 euros per pound.

So you might innocently expect to receive about 5,000 / 1.1937940679 = £4,188 minus any transfer fees.

The transfer went through an intermediate bank, who charged €17. Barclays charged “our commission” of a mere £6.

But the amount that arrived in my bank was not roughly £4,188 – £20 = £4,168 as you might hope.

The amount that arrived was £4017.74.

The friendly banks decided that the appropriate exchange rate for me that day was 1.23840, which is a full 4.5% higher than the mid-market 1.19379 rate. That’s £143 (€170).

Sure, I know there’s a buy/ask spread in currency and the mid-market rate isn’t what you’d get in any transaction. But taking £143 from your own customer just because you can is pretty fucking nasty. And so, via today’s arbitrary setting of the greed parameter in a bank computer, the voracious banking industry gobbles up just a little bit more of the money made by regular people. People who actually worked to earn that money.

It’s no wonder people hate their banks and that the financial system in general is so despised.

A simple way to calculate the day of the week for any day of a given year

Sunday, November 11th, 2012

March 29th

Image: Jeremy Church

The other day I read a tweet about how someone was impressed that a friend had been able to tell them the day of the week given an arbitrary date.

There are a bunch of general methods to do this listed on the Wikipedia page for Determination of the day of the week. Typically, there are several steps involved, and you need to memorize some small tables of numbers.

I used to practice that mental calculation (and many others) when I was about 16. Although all the steps are basic arithmetic, it’s not easy to do the calculation in your head in a couple of seconds. Given that most of these questions that you’re likely to face in day-to-day life will be about the current year, it seemed like it might be a poor tradeoff to learn the complicated method to calculate the day of the week for any date if there was a simpler way to do it for a specific year.

The method I came up with after that observation is really simple. It just requires you to memorize a single 12-digit sequence for the current year. The 12 digits correspond to the first Monday for each month.

For example, the sequence for 2012 is 265-274-263-153. Suppose you’ve memorized the sequence and you need to know the day of the week for March 29th. You can trivially calculate that it’s a Thursday. You take the 3rd digit of the sequence (because March is the 3rd month), which is 5. That tells you that the 5th of March was a Monday. Then you just go backward or forward as many weeks and days as you need. The 5th was a Monday, so the 12th, 19th, and 26th were too, which means the 29th was a Thursday.

It’s nice because the amount you need to memorize is small, and you can memorize less digits if you only want to cover a shorter period. The calculation is very simple and always the same in every case, and you never have to think about leap years. At the start of each year you just memorize a single sequence, which is quickly reinforced once you use it a few times.

Here’s Python code to print the sequence for any year.

#!/usr/bin/env python

import datetime, sys

try:
    year = int(sys.argv[1])
except IndexError:
    year = datetime.datetime.today().year

firstDayToFirstMonday = ['1st', '7th', '6th', '5th', '4th', '3rd', '2nd']
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
summary = ''

for month in range(12):
    firstOfMonth = datetime.datetime(year, month + 1, 1).weekday()
    firstMonday = firstDayToFirstMonday[firstOfMonth]
    print months[month], firstMonday
    summary += firstMonday[0]

print 'Summary:', '-'.join(summary[x:x+3] for x in range(0, 12, 3))

The output for 2012 looks like

Jan 2nd
Feb 6th
Mar 5th
Apr 2nd
May 7th
Jun 4th
Jul 2nd
Aug 6th
Sep 3rd
Oct 1st
Nov 5th
Dec 3rd
Summary: 265-274-263-153

The memory task is made simpler by the fact that there are only 14 different possible sequences. Or, if you consider just the last 10 digits of the sequences (i.e., starting from March), there are only 7 possible sequences. There are only 14 different sequences, so if you use this method in the long term, you’ll find the effort of remembering a sequence will pay off when it re-appears. E.g., 2013 and 2019 both have sequence 744-163-152-742. There are other nice things you can learn that can also make the memorization and switching between years easier (see the Corresponding months section on the above Wikipedia page).

Here are the sequences through 2032:

2012 265-274-263-153
2013 744-163-152-742
2014 633-752-741-631
2015 522-641-637-527
2016 417-426-415-375
2017 266-315-374-264
2018 155-274-263-153
2019 744-163-152-742
2020 632-641-637-527
2021 411-537-526-416
2022 377-426-415-375
2023 266-315-374-264
2024 154-163-152-742
2025 633-752-741-631
2026 522-641-637-527
2027 411-537-526-416
2028 376-315-374-264
2029 155-274-263-153
2030 744-163-152-742
2031 633-752-741-631
2032 521-537-526-416

SOBGTR OCCC AILD FUNEX?

Friday, August 10th, 2012

Suppose you had to pick a very small set of character strings that you, and only you, could identify without hesitation in a particular way. What would you choose? How small a set could you choose and still be unique? For example, SOBGTR OCCC AILD FUNEX? is a set of strings that I think would uniquely identify me. (My interpretation is below.) I’m pretty sure that almost any subset of 3 of them would suffice. Coming up with a set of two wouldn’t be hard, I don’t think – but it feels risky.

There are 7 billion people on the planet. So if you just pick 3 reasonably obscure acronyms, e.g., things that only 1 person in 2000 would recognize, you’re heading in the right direction (since 2000 cubed is 8 billion). But that’s only if the obscurity of the things you pick is independent. For example, it’s less good to pick 3 computer acronyms from the 1960s than to choose just one of them plus some things from very different areas of your knowledge.

The rules

  1. Each of your strings with its meaning to you must be findable on Google.
  2. To match with you, another person must interpret all your strings the way you do.

Rule 1 prevents you from choosing something like your bank PIN number, that only you could possibly know. Without this rule, everyone could trivially choose a set of one string. The rule makes thinking up a uniquely identifying set for yourself like a game. Given that all your strings and their interpretations are on Google, each of your strings will likely be recognized by someone in the way you recognize it, so your set will probably have at least 2 strings. You need to choose a set of strings whose set of interpretations, taken as a whole, make you unique (Rule 2).

Why is this interesting?

I find this interesting for many reasons. It seems clear that uniquely identifying sets are fairly easy to construct for people and they’re very small. Certainly small enough to fit in a tweet. Although it’s easy to make a set for yourself, it’s hard to make one for someone else – you might even argue that by definition it’s not possible. If someone else makes one, you can’t produce their set of interpretations without spending time on Google, and even then you’d probably have to know the person pretty well.

Is there a new authentication scheme here somewhere? It’s tempting to think yes, but there probably isn’t. This is less secure than asking people for a set of secrets that are not each findable in Google, so anything you come up with is almost certain to be less secure than the same thing based on a set of actual secrets. It’s more of a fun thought exercise (or Twitter game). It’s not hard to imagine some form of authentication. For example, identify which of a set of symbols are special to you (avoiding others chosen randomly from, say, the set of all acronyms), and their correct interpretations for you, and do it rapidly. Or if a clone shows up one day, claiming to be you, and you’ve thoughtfully put a sealed set of unique symbol strings in your safe, you should be able to convince people that you’re the real you :-)

Answer

Here’s my unhesitating interpretation of the set of 4 strings above:

Remember, to be me you have to get them all. It’s not enough to get a couple, or even three of them.

Emacs buffer mode histogram

Thursday, November 10th, 2011

Tonight I noticed that I had over 200 buffers open in emacs. I’ve been programming a lot in Python recently, so many of them are in Python mode. I wondered how many Python files I had open, and I counted them by hand. About 90. I then wondered how many were in Javascript mode, in RST mode, etc. I wondered what a histogram would look like, for me and for others, at times when I’m programming versus working on documentation, etc.

Because it’s emacs, it wasn’t hard to write a function to display a buffer mode histogram. Here’s mine:

235 buffers open, in 23 distinct modes

91               python +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
47          fundamental +++++++++++++++++++++++++++++++++++++++++++++++
24                  js2 ++++++++++++++++++++++++
21                dired +++++++++++++++++++++
16                 html ++++++++++++++++
 7                 text +++++++
 4                 help ++++
 4           emacs-lisp ++++
 3                   sh +++
 3       makefile-gmake +++
 2          compilation ++
 2                  css ++
 1          Buffer-menu +
 1                 mail +
 1                 grep +
 1      completion-list +
 1                   vm +
 1                  org +
 1               comint +
 1              apropos +
 1                 Info +
 1           vm-summary +
 1      vm-presentation +

Tempting as it is, I’m not going to go on about the heady delights of having a fully programmable editor. You either already know, or you can just drool in slack-jawed wonder.

Unfortunately I’m a terrible emacs lisp programmer. I can barely remember a thing each time I use it. But the interpreter is of course just emacs itself and the elisp documentation is in emacs, so it’s a really fun environment to develop in. And because emacs lisp has a ton of support for doing things to itself, code that acts on emacs and your own editing session or buffers is often very succinct. See for example the save-excursion and with-output-to-temp-buffer functions below.

(defun buffer-mode-histogram ()
  "Display a histogram of emacs buffer modes."
  (interactive)
  (let* ((totals ‘())
         (buffers (buffer-list()))
         (total-buffers (length buffers))
         (ht (make-hash-table :testequal)))
    (save-excursion
      (dolist (buffer buffers)
        (set-buffer buffer)
        (let
            ((mode-name (symbol-name major-mode)))
          (puthash mode-name (1+ (gethash mode-name ht 0)) ht))))
    (maphash (lambda (key value)
               (setq totals (cons (list key value) totals)))
             ht)
    (setq totals (sort totals (lambda (x y) (> (cadr x) (cadr y)))))
    (with-output-to-temp-buffer "Buffer mode histogram"
      (princ (format "%d buffers open, in %d distinct modes\n\n"
                      total-buffers (length totals)))
      (dolist (item totals)
        (let
            ((key (car item))
             (count (cadr item)))
          (if (equal (substring key -5) "-mode")
              (setq key (substring key 0 -5)))
          (princ (format "%2d %20s %s\n" count key
                         (make-string count ?+))))))))
 

Various things about the formatting could be improved. E.g., not use fixed-width fields for the count and the mode names, and make the + signs indicate more than one buffer mode when there are many.

The Grapes of Wrath & Occupy Wall Street

Monday, October 31st, 2011

I’m reading The Grapes of Wrath for the first time. I can’t believe it took me so long to finally read it. It’s great.

Below is a section I just ran across that I imagine will resonate strongly with the people involved in Occupy Wall Street. I’ve long been fascinated to watch how power tries to maintain itself by attempting to enforce isolation and to restrict information flow, and, on the contrary, how increased information flow between the subjects of power naturally undermines this basis. Awareness of these opposing forces, even if not explicitly understood, is what I think accounts for the tenacity and ferocity on both sides of the OWS (and many other) movements, even (especially) when the movements are still only tiny. The occupiers experience the surge of energy and determination and self-identification that comes from solidarity, while those in power recognize the danger and act in heavy-handed ways to try to crush it, usually after trying to ignore and then ridicule. The consistent characteristic of the reaction against these movements, as Steinbeck notes, is that those in power do not understand what’s going on. So in their efforts to snuff out the protests they instead fan the flames, which they then have to react even more violently to. It seems an extraordinarily difficult task for power to successfully manage to defuse a popular movement without resorting to extremes. Hence the absurd justifications of needing to clean (often already cleaned – by the protesters) public spaces, to make the public spaces once again available to the public, etc. Disperse, ridicule, isolate. If the gentle pretenses do not work, then we’ll do what we can to get rid of or evade the media (in all its forms), and then come in and beat the shit out of you.

So for all those out there in the OWS camps around the world (don’t forget there were protests in almost one thousand cities worldwide), and especially for those in the US, here’s some beautiful Steinbeck:

One man, one family driven from the land; this rusty car creaking along the highway to the West. I lost my land, a single tractor took my land. I’m alone and I am bewildered. In the night one family camps in a ditch and other family pulls in and the tents come out. The two men squat on their hams and the women and children listen. Here’s the node, you who hate change and fear revolution. Keep these two squatting men apart; make them hate, fear, suspect each other. Here is the anlage of the thing you fear. This is the zygote. For here “I lost my land” is changed; a cell is split and from its splitting grows the thing you hate — “we lost our land.” The danger is here, for two men are not as lonely and perplexed as one. And from his first “we” there grows a still more dangerous thing; “I have a little food” plus “I have none”. If from this problem the sum is “we have a little food”, the thing is on its way, the movement has direction. Only a little multiplication now, and this land, this tractor are ours. The two-men squatting in a ditch, the little fire, the side-meat stewing in a single pot, the silent, stone-eyed women; behind, the children listening with their souls to words their minds do not understand. The night draws down. The baby has a cold. Here, take this blanket. It’s wool. It was my mothers blanket — take it for the baby. This is the thing to bomb. This is the beginning — from “I” to “we”.

If you who own the things people must have could understand this, you might preserve yourself. If you could separate causes from results, if you could know that Paine, Marx, Jefferson, Lenin were results, not causes, you might survive. But that you cannot know. For the quality of owning freezes you forever into “I”, and cuts you off forever from the “we”.

The Western states are nervous under the beginning change. Need is the stimulus to concept, concept to action. A half-million people moving over the country; one million more restive, ready to move; 10 million more feeling the first nervousness.

And tractors turning the multiple furrows in the vacant land.

Leaving Barcelona

Friday, October 7th, 2011

I’m leaving Barcelona on October 19th and have a bunch of stuff I need to get rid of before then. If you’re interested anything below, please let me know ASAP. You’ll need to come pick things up in the Born, right next to Santa Maria del Mar. I’ve not put prices on anything. So either make an offer or tell me why I should just give you what you want for free. You can reach me via email to terry at-sign jon dot es.

  • Cheap ironing board
  • Braun iron
  • Vacuum cleaner
  • Dell DN1815 multi-function networked laser printer (black & white). Fax, copy, scan, print. 5 years old, works great.
  • 20" Miyata deluxe (48 spoke) unicycle
  • 26" Semcycle unicycle
  • 6 Renegade juggling clubs
  • Bag of about 15 silicone juggling balls
  • 2 minitorre computers (from about 2002) without hard drives
  • 3 Ikea CD shelves (each holds about 200 CDs)
  • 7 60cm wide x 2.5m tall white Ikea (Billy) bookshelves
  • 1 40cm wide x 2.5m tall white Ikea (Billy) bookshelf
  • 1 30cm wide x 2.5m tall white Ikea (Billy) bookshelf
  • 19" CRT monitor
  • 2 100Mbit ethernet hubs (5 port, 8 port)
  • 5 cable modems (DLink, Cisco, 3Com)
  • 2 Siemens Gigaset AS29H DECT phones, like new, white
  • White wooden Ikea TV/DVD table
  • Massive (3m by 1.2m) wall-mounted whiteboard
  • White Ikea filing cabinet (2 wide roll-out shelves)
  • Green wooden 6-drawer small rolling shelves
  • DVD player with sub-woofer & 5 external speakers
  • Sony CD player with sub-woofer & 2 external speakers
  • Panasonic NVGS230 hand-held video recorder, perfect condition
  • K2 rollerblades 6000 series, good condition, size 41/42
  • 5-wheel speed skates, size 41/42
  • Philips toaster
  • Large wooden Ikea cutting board
  • Kettle
  • Electric juice extractor
  • Hand-held electric blender
  • Barcelona apartment floor tiles. I have about 20 that I’ve accumulated over the years.

La Storia di San Michele

Monday, August 8th, 2011

Image: Villa San Michele

[Written in 2003, as the first of a two-part story of a remarkable connection. Here's part two.]

Axel Munthe

In 1928, Axel Munthe, a Swedish physician living on the isle of Capri, published The Story of San Michele. Munthe’s villa on the slopes of Mount Barbarossa stands on a site chosen almost two thousand years earlier by the emperor Tiberius, who from tiny Capri held sway over the entire Roman empire. Extraordinarily beautiful, the island passed at various times through the hands of the Greeks, the Romans (Caesar Augustus was captivated), the Dutchy of Naples, the Saracens, the Longobards, the Normans, the Angevins, the Aragonese, the Spanish, and the Bourbons.

On completing his medical studies, Munthe was the youngest physician in Europe. The Story of San Michele describes his time in Paris and Rome, his years as the physician to the Swedish Royal family and later his years as private physician to the queen of Sweden, who had also taken a liking to Capri. Written in English, The Story of San Michele, which remains in print, was an instant success, becoming the best-selling non-fiction book in the U.S. in 1930. Munthe’s novel approach to medicine and the book’s mixture of adventure, treasure, and royalty continue to inspire. The Story of San Michele was the mysterious target of one Henry Arthur Harrington, a petty thief who crisscrossed the UK, stealing 1,321 copies from second-hand bookstores before his eventual arrest in 1982. Even in 2003, Munthe’s contributions are the subject of learned attention: the Second International Symposium on Axel Munthe’s life and work will be held in Sweden tomorrow (September 13).

With the rapid success of The Story of San Michele, the book was a natural target for would-be translators. Editions in several languages were soon completed. Given its origin, it was odd that such a popular book was not more quickly translated into Italian.

Patricia Volterra

Living in Florence, Patricia Volterra was fascinated by the book and was eager for her husband Gualti to read it too. A minor obstacle: Gualti did not speak English. Undeterred, Volterra decided to translate the book into Italian. She wrote to John Murray, the publisher, requesting permission. To her surprise, she received a reply directly from Munthe. From Volterra’s diary, Munthe told her that:

the book had already been translated into several languages and was selling like wildfire. To date he had refused offers for it to be translated into Italian as, he wrote, this language, when written, was apt to become too flowery and overloaded and that he had written the book in an extremely simple style which he wished to retain. However, he continued, he suggested I should translate the last chapter, which he considered the most difficult, and send it to him to the Torre Matterita at Anacapri. He would then let me know whether he thought he could permit me to translate the rest.

Volterra sent off her translation of the final chapter and spent several weeks waiting for an answer. Finally her manuscript was returned “with an extremely complimentary letter from Munthe, telling me to proceed to do the rest.” Later she wrote that at that time nothing seemed impossible to her but that now she wouldn’t have even considered the translation.

While working on the translation, she had lunch with Munthe in Rome when Gualti, an Italian concert pianist, was playing at the Augusteum. Munthe was staying at Villa Svezia, the Queen of Sweden’s residence on the Via Aldovrandi. When Munthe saw her he exclaimed ‘My goodness, how old are you?’ She: ‘Twenty three.’ He: ‘And you are translating San Michele!’ Munthe was over 70 at the time.

Volterra sent the work to an Italian publisher, Mondadori, who refused her. “Their great loss,” she wrote. Another, Treves, accepted. Munthe “had decreed that the entire royalties should go to the Society for the Protection of Animals in Naples.” Volterra was to sell her translation for whatever she could get for it. This amounted to the equivalent of 50 pounds sterling for 8 months work.

Later that spring, Volterra traveled to Capri. In a horse-drawn cab they drove to Anacapri where they visited San Michele. From there on foot through the olives to the Torre di Materita to have lunch with Munthe. A variety of his dogs scampered round his heels as he showed them the old tower which was then his home. They had a vegetarian lunch served by Rosina, so affectionately mentioned by Munthe in his book.

The Volterra translation ran quickly into 35 editions and was still selling well when she left Italy in 1938. Mussolini was so impressed by La Storia di San Michele that he passed a law prohibiting the shooting of migratory birds on Capri.

Volterra saw Munthe one final time, in Jermyn Street, London. Munthe died in 1949, leaving the villa of San Michele to Sweden. Owned today by the Swedish Munthe Foundation, it is home to an ornithological research center and is open to the public.

[Continued in part two, "Bob Arno".]

Bob Arno

Monday, August 8th, 2011

Image: ABC Tasmania

[Written in 2003, this is the 2nd part of the story of a remarkable connection. You'll need to read part one for the set up.]

For the last seven years, I’ve kept a web page full of people’s email about street scams they’ve been involved in (as victims) in Barcelona.

In the beginning I just wrote down brief descriptions of things that I saw or was involved in soon after moving to Spain. I’d seen hardly any street crime in my (then) 33 years and I found it fascinating to watch for. It certainly wasn’t hard to find. Often it came right to my door or to the street under my balcony. Before long I began to receive email from others who had visited or lived in Barcelona, each with their own story to tell. I put the stories onto the web page and they soon outnumbered my own. I continue to receive a few emails a month from people who’ve read the web page (generally after being robbed, though sometimes before leaving on a trip). I don’t often reply to these emails, apart from a line or two to say thanks when I put their messages on the web page, often months after they mail me.

For whatever reason, I’ve never been very interested to meet these people, though I’ve had plenty of chances to. In general I don’t seem to have much interest in meeting new people – it’s quite rare that I do. I should probably be more sociable (or something) because once in a while the consequences are immediately extraordinary.

Among my email, I get occasional contacts from people in the tourism industry. Lonely Planet, Fodor’s, people writing books or running travel services or web sites. Mainly they want to know if they can link to the web page, or to use some of the content in their own guides. I always agree without condition. After all, the main (but not the only) point is to help people be more aware, and besides, the majority of the content was written by other people who clearly share the same advisory aim. With this attention from various professionals who are trying to pass on the information, I began to wonder how many such people there were. Maybe there were other people with web sites devoted to street crime. So once in a while I’d do a web search on “street scams”, or something similar, just to see what came up. It’s usually interesting.

On July 30th 2001, I went looking around for similar web sites and ran across Bob Arno. I took a quick look around and fired off an email to say hello, and offered to buy him a beer the next time he was in Barcelona:

    Hi Bob

    I was just having a wander around the web when I ran into your
    pages about pickpockets. They look good, very useful.

    You might be interested to see a page of my own: http://jon.es/barna/scams.html

    All about things that have happened to people in Barcelona. It's
    not too well organized, but there's a lots of it. Most of it falls
    into well known classes of petty crime. Things are getting worse
    here, with the most recent tactics being strangulation from behind
    and squirting a flammable liquid onto people's backs and then, you
    guessed it, setting them on fire.

    Let me know next time you're in Barcelona and I'll buy you a
    beer. I'm also in Manhattan very often.

    Regards,
    Terry Jones.

Bob looked very interesting, and we seemed to have the same point of view on street crime. He’s a seasoned professional, a Vegas showman, and is constantly traveling the world studying many forms of crime and passing on his knowledge. Check out his website.

I sent mail to Derek, passing on Bob Arno’s URL. I said a little of how funny and random it seemed to me, of how over all the years of doing different things and meeting any number of famous and high-powered academics and intellectuals etc., and not really having much interest in any of them, that I’m sending email to this Bob Arno guy suggesting we meet up.

The next day I read more about Bob’s exploits and interests and I guessed that we would probably get on really well. I sent off a longer email with some more of my observations about Barcelona:

    Hi again.

    I sent off that first email without having looked at more than a
    page or two of your web site.

    It's very interesting to read more. I spend far too much time
    thinking about and watching for petty thieves in Barcelona. I've
    thought about many of the issues touched on in the interview with
    you by your own TSJ. The whole thing is very intriguing and lately
    I've begun to wonder increasingly what I can do about it, and if I
    want to do anything about it. I have tended to act to try to stop
    pickpockets, but I've also seen things many times from a distance
    or a height, read many things, seen freshly robbed people weeping,
    talked to many people who have been robbed, thought of this as an
    art (I'm interviewed in a Barcelona newspaper under the headline
    "Some crimes are a work of art" - I'm not sure if they understood
    what I meant), etc. I've never tried filming these people. But I
    know how they look at you when they know they have been spotted,
    how their faces look when the wallet hits the floor, how they prey
    on Western or "rich" psychology, and so many other things.  My
    focus has been Barcelona, after coming to live here 5 years ago
    and (at that time) having an apartment 1 floor up about 100 meters
    from Plaza Real. If I had had a net I could have caught people
    several times a day.

    I recently got a video camera and was thinking of interviewing the
    woman on my web site who was strangled here earlier this month. By
    the way, the papers reported up to 9 cases of such stranglings in a
    single day. I wasn't quite sure what to do with the tape. It hadn't
    occurred to me to film the thieves, but it would be so easy.  In
    Barcelona it's trivial to spot these people, and also feels very
    safe since many of them have been arrested literally hundreds of
    times.  There is basically no deterrent. There are undoubtedly more
    sophisticated pickpockets here too, but there is little in the way
    of evolutionary pressure to make them improve their methods. The
    tourists are too many and too unaware, the police are too few, and
    the laws are too slack. Why would you even bother to improve or
    think?

    I also know the boredom that comes with professional acts. I used to
    do a lot of juggling and unicycling, practicing 6 hours a day for a
    long time. But I could never stand to have a canned show that I did
    time after time - it was just too routine to have a routine. So I
    refused and eventually drifted into other things.

    How can I get a copy of your book? It doesn't seem to say on the web
    site. Also, the menu of links at the top left of your pages looks
    extremely garbled under my browser (Opera).

    Terry

As it turned out, my timing was perfect. I got a mail back the next day from Bob’s wife Bambi (yes, really). She said they’d be in Barcelona in just 5 days time and that they’d love to meet up.

And meet up we did!

They came to our apartment and we all hit it off immediately. As I’d thought, we did have a lot in common, both in terms of what we had done and in outlook. They told me they also get lots of email through their web site and hardly ever reply. Ana and I took them out for food. We sat outside at the nearby Textile Museum. Later, Ana went home to look after Sofia, and I stayed with Bob and Bambi. In the end I was with them about five hours and I had a really good time. We arranged to meet the next day to go hunting for thieves on the Ramblas. In one sense, “hunting” isn’t at all the right word: the thieves are typically very obvious to anyone who’s actually paying attention. But there’s a lot of subtlety in tracking and filming them, so it really is something like a hunt. I’ve since spent many hours, on several occasions, in action with Bob and Bambi in Barcelona. But that’s another story.

After getting home that first night, I went back to Bob’s web site and read more of his pages. He’s had a pretty colorful life. Actually, it’s extraordinarily colorful by almost any measure. “Who is this Bob Arno?” I wondered. Fortunately, Bob has a “Who is Bob Arno?” page, which I finally got around to reading.

Halfway down… unbelievable… I want to cry.

    Born in Sweden, Bob Arno is a great-grandson of Dr. Axel Munthe,
    who is most famous for his novel The Story of San Michele.

Patricia Volterra was my great aunt.

The first empirical evidence that confusion might be recursive

Monday, September 13th, 2010

I spent 4 wonderful years (92-96) at the Santa Fe Institute in New Mexico. During that time there was a very funny underground SFI newsletter “The New Can” (a play on the name of the NM newspaper The New Mexican) that poked merciless fun at various Institute activities and researchers. The author, a brilliant friend, must unfortunately remain anonymous. I still have half a dozen copies, and I imagine I must be one of the few people on earth who does. I ran across them tonight. Below is a graph that appeared in the September 14, 1992 edition entitled “Mutation Rocks Halls of SFI”. I’ve always loved it.

Vigilante

Friday, September 3rd, 2010

From terry Thu Jun 7 01:26:35 +0200 2001
To: dsmith@cs.unm.edu, high@hci.ucsd.edu

today i saw a bag snatching
happened about 20/30 yards in front of me
2 guys on a motorbike
the back guy leans sideways
smooth as can be
takes the handle of a bag from an old well dressed woman

they head off down the side of the church
right next to where i live

the people yell out to the people at the end of the street
looking away from me

i am in motion

sprinting.

i zoom past the robbed
going absolutely flat out
heading to the end of the street
thinking i had no chance at all

but, around the corner
not more than 5 yards
i see the guys on the motorbike
caught behind some walking other people
(there is construction there
which makes it narrower
harder to pass)

this is right on the corner of paseo del borne (our street)
and montcada

and…………………..

i fucking tackled them
yeah
over the top
arms spread to get them both at once
guys to the ground
motorbike to the ground
me falling stepping over the top
grazed shin, no more

i wasn’t thinking really
just knew i had to stop them
couldn’t do it as good as it could have been
and as it was the bike crashed down almost
into some people beside it
who had no clue what the fuck was going on

the guys jumped up
yelled
ripped off their helmets and flung them away
one smacking hard into the wall
and sprinted off
leaving one shoe behind

i was pretty surprised
didn’t occur to me that the bike was stolen too

the cops turned up in about a minute flat
there were 30 or 40 people gathered around
talking like crazy
no-one knew what had happened
the robbed people just came around the corner to find a mess
one guy saw it and one woman
the woman acted like my PR agent
telling the entire crowd
over and over that i was a hero

it was great
so funny
i smiled and bowed to them all
like an idiot
hamming it up

the robbed people thrust a 2000 ptas reward into my hands
absolutely insisted that i take it
(we ate it in pizza later)

the cops shrugged it off
called in the stolen bike

it was pretty cool
i could get into being a vigilante

i should have tried to have held one of the guys
but i thought hitting them hard sideways
and knocking their bike over would do it

but, it wasn’t their bike

i was smiling afterwards
the most exercise i’ve had
since beating derek to the office on skates a few weeks back

Asynchronous data structures with Twisted Deferreds

Friday, July 23rd, 2010

Earlier this week I gave a talk titled Deferred Gratification (slides) at EuroPython in Birmingham. The title was supposed to hint at how much I love Twisted‘s Deferred class, and that it took me some time to really appreciate it.

While thinking about Deferreds in the days before the talk, I think I put my finger on one of the reasons I find Deferreds so attractive and elegant. The thought can be neatly summarized: Deferreds let you replace synchronous data structures with elegant asynchronous ones.

There are various ways that people get exposed to thinking about programming in an asynchronous style. The great majority do so via building user interfaces, usually with widget libraries wherein one specifies widgets and layouts, sets up event handlers, and then surrenders control to a main loop that thereafter routes events to handlers. Exposure to asynchronous programming via building UIs is becoming much more common as Javascript programmers build client-side web apps that operate asynchronously with web servers (and the “A” in AJAX of course stands for asynchronous). Others become aware of asynchronous programming via writing network code (perhaps using Twisted). Relatively few become aware of asynchronous programming via doing async filesystem I/O.

Because Twisted’s Deferreds don’t have anything to do with UIs or networking or filesystems, you can use them to implement other asynchronous things, like an asynchronous data structure. To show you what I mean, here’s a slightly simplified version of Twisted’s DeferredQueue class, taken from twisted/internet/defer.py:

class DeferredQueue(object):

    def __init__(self):
        # It would be better if these both used collections.deque (see comments section below).
        self.waiting = [] # Deferreds that are expecting an object
        self.pending = [] # Objects queued to go out via get.

    def put(self, obj):
        if self.waiting:
            self.waiting.pop(0).callback(obj)
        else:
            self.pending.append(obj)

    def get(self):
        if self.pending:
            return succeed(self.pending.pop(0))
        else:
            d = Deferred()
            self.waiting.append(d)
            return d
 

I find this extremely elegant, and I’m going to explain why.

But first, think about code for a regular synchronous queue. What happens if you call get on a regular queue that’s empty? Almost certainly one of two things: you’ll get some kind of QueueEmpty error, or else your code will block until some other code puts something into the queue. I.e., you either get a synchronous error or you get a synchronous non-empty response.

If you look at the get method in the code above, you’ll see that if the queue is empty (i.e., the pending list is empty), a new Deferred is made, added to self.waiting, and is immediately returned to the caller. So code calling get on an empty queue doesn’t get an error and doesn’t block, it always gets a result back essentially immediately. How can you get a result from an empty queue? Easy: the result is a Deferred. And because we’re in the asynchronous world, you just attach callbacks (like event handlers in the UI world) to the Deferred, and go on your merry way.

If you can follow that thinking, the rest of the code in the class above should be easy to grok. In put, if there are any outstanding Deferreds (i.e., earlier callers who hit an empty queue and got a Deferred back), the incoming object is given to the first of these by passing it to the callback function of the Deferred (and popping it out of the waiting list). If there are no outstanding Deferreds expecting a result, the incoming object is simply appended to self.pending. On the get side, if the queue (i.e., self.pending) is non-empty, the code creates a Deferred that has already been fired (using the succeed helper function) and returns it.

By now, this kind of code seems routine and straightforward to me. But it certainly wasn’t always that way. So if the above seems cryptic or abstract, I encourage you to think it over, maybe write some code, ask questions below, etc. To my mind, these kinds of constructs – simple, elegant, robust, practical, obviously(?) bug-free, single-threaded, etc. – are extremely instructive. You too can solve potentially gnarly (at least in the threaded world) networking coding challenges in very simple ways just by building code out of simple Twisted Deferreds (there’s nothing special about the DeferredQueue class, it’s just built using primitive Deferreds).

For extra points, think about the concept of asynchronous data structures. I find that concept very attractive, and putting my finger on it helped me to see part of the reason why I think Deferreds are so great. (In fact, as you can see from the use of succeed, Deferreds are not specifically asynchronous or synchronous: they’re so simple they don’t even care, and as a consumer of Deferreds, your code doesn’t have to either). That’s all remarkably elegant.

I sometimes hope O’Reilly will publish a second volume of Beautiful Code and ask me to write a chapter. I know exactly what I’d write about :-)

Finishing Proust, redux

Monday, June 21st, 2010

Back in December 2006 I wrote about finishing Proust and made a rough argument about how often anyone on earth finishes the whole thing. The argument was a bit subtle. I was never 100% convinced it was sound, but no-one I showed it to found a hole in it. I still think about the question from time to time. The other day I mentioned the original post to Tim O’Reilly. Later that day, I realized there’s a much simpler way to get an estimate, with far fewer assumptions.

The new approach is simply to divide the number of hours that have passed since In Search of Lost Time was published by the number of people who’ve ever finished it. That average is a crude measure, but it may be nevertheless quite accurate and it’s irresistibly interesting to me to see how it compares to my original 2006 estimate of 2.19 hours.

So, assume 2B people were alive in 1927 when the final volume was published, and 6.4B alive at the end of 2006 (source).

Assume that no-one alive in 1927 was still alive in 2006 (obviously not the case, but not unreasonable and not a significant error). I.e., there were 4.4B births in those 79 years. Note: This is ignoring a significant number of people who were born after 1927 and who died before 2006. But it is including everyone born from 1990 onwards, essentially zero of whom would have read Proust by 2006.

In my original post I estimated that one person in 10K actually finishes the whole book. So that’s 4.4B/10K = 440K people who read the book during the 79 years.

79 years is 28,835 days, or 692,040 hours. Doing the division, 692,040 / 440,000 = 1.57 hours.

I.e., by the above rough reasoning, someone, somewhere on earth, finishes Proust every 1.57 hours, on average.

I find the closeness of the two estimates quite remarkable. There’s only one shared assumption (1 in 10,000 finishes). Both estimates are quite crude, yet there’s only about a 30% difference in the answers. I was expecting them to be much more divergent.

Crowdsourcing Arabic-to-English translation in the Geneva airport

Saturday, October 10th, 2009

Today I met an extraordinary Iranian man in the Geneva airport. He’s written a 1000 page book in Arabic about (at least in part) his experiences in Cyprus. He approached me, asked if my English was really really good, sat next to me, and started pulling out several pages of hand-wrtten uppercase English. He had me go over them, improve them, write some new text as he read his Arabic in halting English, told me exactly how he wanted it to sound, pressed me to find shorter ways to say things, and finally got me to write out (for his next helper, no doubt) a clean copy of all my work. He had me go look up a recent paper dating the evolutionary split between humans & chimpanzees and to confirm that it didn’t contradict his text (another fragment thrust importunately into my hands). He was about 75. We spent 90 mins together, smiling and congratulating each other over a few sentences that turned out particularly well. Told me he’s going to have it published by Oxford – that’s his aim anyway.

I thought to myself that we each have our own mountain to climb – or at least those who have a taste for years-long patient endeavors, but how different his from mine. We parted and he went off to approach another stranger. He’ll get the whole book done a few pages a day in the Geneva airport, I’ve no doubt. “It’s the perfect place” he told me. Amazing, extraordinary, humbling, etc…

FluidDB has launched!

Tuesday, August 25th, 2009

In case you missed it, FluidDB has (finally) launched. I wont be blogging here about FluidDB or Fluidinfo, though will continue to post personal things and of course random bits of code that seem interesting (and small) enough to warrant mention. I have yet another Twisted snippet coming up, though I’m not sure when I’ll get there.

We’re all exhausted and thrilled to have FluidDB out the door. I wont try to describe the feelings, except to say that it’s all incredibly exciting, and that I haven’t been getting much sleep recently. The reaction in the programmer community has been astounding: there are 9 client-side libraries already written (with more on the way), there are tools, there’s a FluidDB Explorer, and little apps are now starting to pop up. We couldn’t be happier. You can see a list of those things here.

To find out more about FluidDB, here are your best choices:

Thanks for reading along! The real journey is probably only just beginning…

2 cents

Friday, June 5th, 2009

My bank account hits rock bottom, at 2 cents, while building Fluidinfo.

634761-bbva-highlighted

Slides from FluidDB talk at PGCon

Tuesday, May 26th, 2009

Here are the slides from my talk on May 22, 2009 at the Postgres Conference (PGCon) in Ottawa. The video will be available soon.

Talking at Postgres Conference (PGCon) in Ottawa

Tuesday, May 19th, 2009

Here’s just a quick note to mention that I’m talking at the annual Postgres Conference aka PGCon. The talk is titled The design, architecture, and tradeoffs of FluidDB, and is at 3pm on May 22nd. So if you happen to be in Ottawa this week…

I could have added the subtitle “How someone who knows nothing about databases wound up in a project to build a database.”