Why Eratosthenes got it wrong.

Yep, Erathosthenes, that greek scholar who invented the leap year and measured the earth’s circumference, all in 200BC from Alexandria. I have discovered he systemically was set up to have errors based on his assumptions.

He was off by about 15%, and today I figured out part of why he was wrong.  The premise is Erathosthenes read in a book about a well in what is now the town of Aswan. He read this well cast no shadow on a particular day of the year. If you look at the image on wikipedia, it shows the suns rays directly overhead. This is impossible as Aswan is north of the Tropic of Capricorn by 50 miles. It would be approximate, but not truly directly overhead at solar noon on the summer solstice.  The sun can only be directly over head in the band south of the Tropic of Cancer to the Tropic of Capricorn.

Posted in musings by with comments disabled.

Harvested 8 Arctic Frost Oranges

My little orange tree at Schick that I bought at the nursery with unripe oranges this spring, finally ripened up and I harvested 8 oranges off of it.  Possibly ripened by thanksgiving. Definitely ripe on Dec 8.  Plan on making some cuttings to ensure the plant lives in case it dies this winter. The other tree, at my house didn’t have oranges this year. Dunno if that is a function of 3″ of soil on a rocky slope, or the youth of the plant. The Schick property has far better soil.

Easy to peel, and sweet.

Posted in news by with comments disabled.

Trump acceptance speech wordcloud via R

Used some simple R to create this

Wordcloud of the Trump acceptance speech at the Republican Convention.

Wordcloud of the Trump acceptance speech at the Republican Convention.

Not alot of insight to be had. Possibly because of the teleprompter he used.



aFile = readLines("trumpacceptance.txt")
myCorpus = Corpus(VectorSource(aFile))
myCorpus = tm_map(myCorpus,  content_transformer(tolower))
myCorpus = tm_map(myCorpus, removePunctuation)
myCorpus = tm_map(myCorpus, removeNumbers)
myCorpus = tm_map(myCorpus, removeWords, stopwords("english"))
myCorpus <- tm_map(myCorpus, PlainTextDocument)
myDTM = TermDocumentMatrix(myCorpus, control = list(minWordLength = 1))

m = as.matrix(myDTM)
v = sort(rowSums(m), decreasing = TRUE)

d <- data.frame(word = names(v),freq=v)
wordcloud(words = d$word, freq = d$freq, min.freq = 1,  max.words=200, random.order=FALSE, rot.per=0.35,  colors=brewer.pal(8, "Dark2"))

Posted in R and tagged , , by with comments disabled.

Modifications to my Downtube 9FS bike

So I got a Downtube 9FS in 2015, with the intent to modify it to a eBike with a Bafang BBS02 motor. Then take it on an epic tour through the Carribean islands.

A bike out to the festival and camped.

A bike out to the festival and camped.

The Downtube is a folding bike, permitting multi-modal travel. Take it on a bus, no problem, train, no problem, trunk of my wifes Honda Civic… tight fit, but no problem. So it has some big pluses. After I’ve put 2000 ebike miles on it, I understand its utility a lot better.

The bike

First, with the Bafang ebike motor, you get to use the gears. And the 9FS has 9 gears. Big plus as I live in a hilly area of Austin. I chose the 44T chainring model as I wanted more torque over speed.  Wow, does it climb hills,  up 20% grade hills at 9mph in bottom gear pulling only 16amps.

Second, I put on big apple tires, 2.15″ tires. Gives more cushion, steering feels less twitchy, but the big tires caused some derailour problems and I lose my lowest gear due to clearance to the tire. I’m thinking these maybe too big for the back wheel._1320029

_1320031Third, the battery is heavy, like 15# and now the bike is very back heavy and prone to accidental wheelies.  Part of that is I chose a handlebar throttle and not a thumb throttle. So I accidentally can throttle sometimes. And part of that is the handlebar throttle is not very linear. Turn it 1/2 way and nothing, 3/4 and you are at full throttle. Somewhere at 11/16th you start to feather into the throttle. Not a good throttle and I should get another, but I’m cheap.

Fourth, my pattern is using under 5 amp-hours for 95% of my trips. The bike normally can do 2.5 miles per amp-hour of battery. So 5 ah= 12.5 miles of range.  But I’m lugging either a 20ah battery or a 26 ah battery around when i should have a 5-8ah battery. Preferably one mounted in a bottle rack.  For instramentaion, I went with a WattsUp wattmeter to tell me how many amp-hourss I have left, because

The blue WattsUp meter will tell me how many amp-hours I've used. Not as good as a Cycle Analyst, but more appropriate and low profile.

The blue WattsUp meter will tell me how many amp-hours I’ve used. Not as good as a Cycle Analyst, but more appropriate and low profile.

the Bafang has no useful power readings.  Bear in mind the only measurement you really want to worry about is amp hours. You run outta those and you have to pedal home.

Sixth, speaking of racks, putting a rack on this bike was a pain to research what would work. I eventually went with a Biologic rear rack (https://www.amazon.com/gp/product/B006OSYSUA) and a Axiom Journey Lowrider rack

Biologic back rack

Biologic back rack

for the front fork (https://www.amazon.com/gp/product/B0081FQW4E)

Axiom front rack for suspension bikes.

Axiom front rack for suspension bikes.

Then I bought Axiom panniers for front and back.

Seventh, after all that I realized that most carribean islands I want to tour are so damn small I should just take a light folding bike with no motor. Even Aruba can be toured in a day. So I need to buy a Nova and put on a rack and I’m good to go.


Ultimately, I’ve discovered that this ebike excels at letting me ride around town, out of town, and all around, and then I can take other modes of transportation back. It is a keeper.

Posted in Uncategorized and tagged , , by with comments disabled.

Handle mounted on spoon knife

The spoon carving knife I forged this summer at summer camp has finally been heat treated and tempered. With a propane blowtorch I got it up to cherry red for a few minutes then plunged it into vegetable oil. While it didn’t temporarily catch fire, it did harden the blade.  Then I treated it at 400 deg in the oven for an hour.  I’m hoping for a hardness of 54-60.  Other knives can’t scratch it now, and it was a bear to sharpen, so I know it is harder, but not how much.   Next I’ll sand the handle to 200 grit and coat with oil, although I do kind of like the roughness for handling it.

Spoon Carving Knife with handle of Juniper.

Spoon Carving Knife with handle of Juniper.

Posted in news and tagged , , by with comments disabled.

Pad poured for honey house and shed

After a few months of on and off excavation, the pad has been poured.

The excavation in the limestone was around $1800, the form $200, the concrete $1700, and the pumping $500. Not cheap, but I wanted a strong foundation.

Posted in news by with comments disabled.

Plotting Climate Change On A spider Graph using R

First, this is not original work. I must give credit to Ed on it. He made the original graph here http://www.climate-lab-book.ac.uk/2016/spiralling-global-temperatures/

So I’ve made some tweaks of work by Ed, to automate the data ingest.

Climate Change Spider Graph 2016The code I used was here

list.of.packages <- c("ggplot2", "dplyr", "tidyr","animation","ggvis")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
setwd("~/cloud/R/climate change/")
#Data from https://crudata.uea.ac.uk/cru/data/temperature/
#As well as data read in script
url_dat <- "https://crudata.uea.ac.uk/cru/data/temperature/HadCRUT4-gl.dat"
temp_dat <- read_cru_hemi(url_dat)

#temp_dat <- read_cru_hemi("./HadCRUT4-gl.dat")

#remove cover
temp_dat_monthly <- temp_dat %>%
  select(-starts_with("cover")) %>%
  select(-starts_with("annual")) %>%
  gather(month, anomaly, -year) %>%
  mutate(month = gsub("month\\.", "", month)) %>%
  mutate(month = as.numeric(month)) %>%
  filter(year !=2016)

mo <- months(seq(as.Date("1910/1/1"), as.Date("1911/1/1"), "months"))
mo <- gsub("(^...).*", "\\1", mo)

#  for(i in 1850:2015){
  for(i in 1850:2016){
    print(ggplot(temp_dat_monthly %>% filter(year <= i), 
           aes(x=month, y=anomaly, color=year, group=year)) +
        geom_line() +
          #scale_color_gradient(low="blue", high="red", limits=c(1850, 2015), guide="none") +
        scale_color_gradient(low="blue", high="red", limits=c(1850, 2016), guide="none") +
        geom_hline(yintercept=1.5, color="black", lty=2) +
        geom_hline(yintercept=2, color="black", lty=2) +
        coord_polar() +
        annotate(x=1, y=-1.5, geom="text", label=i) +
        annotate(x=1, y=1.5, geom="label", label="1.5C", fill="white", label.size=0) +
        annotate(x=1, y=2, geom="label", label="2.0C", fill="white", label.size=0) +
          ggtitle(expression(atop("Global Temperature Change 1850-2016, East Anglia's HadCRUT4-gl.dat", atop(italic("by McCartney Taylor 11JUL16"), "")))) +
    #    ggtitle("Global Temperature Change 1850-2016 using University of East Anglia's HadCRUT4-gl.dat") +
        scale_x_continuous(labels=mo, breaks=1:13) +
        scale_y_continuous(labels=NULL, breaks=NULL) +
         ylab("") + xlab("")
}, interval=0.1)

And you'll need to download and create read_cru_hemi.r

# read_cru_hemi.r
# Reads a CRU-format hemispheric average file, as provided at
# http://www.cru.uea.ac.uk/cru/data/temperature
# Format has two lines for each year.
#  1) monthly mean anomalies plus an annual mean
#  2) coverage percentages
# Returns a data frame with columns:
#  year (1850 to final year)
#  annual (mean annual anomaly)
#  month.1 ... month.12 (mean monthly anomaly)
#  cover.1 ... cover.12 (percentage coverage)
read_cru_hemi <- function(filename) {
  # read in whole file as table
  tab <- read.table(filename,fill=TRUE)
  nrows <- nrow(tab)
  # create frame
  hemi <- data.frame(
  # mask out months with 0 coverage
  hemi$month.1 [which(hemi$cover.1 ==0)] <- NA
  hemi$month.2 [which(hemi$cover.2 ==0)] <- NA
  hemi$month.3 [which(hemi$cover.3 ==0)] <- NA
  hemi$month.4 [which(hemi$cover.4 ==0)] <- NA
  hemi$month.5 [which(hemi$cover.5 ==0)] <- NA
  hemi$month.6 [which(hemi$cover.6 ==0)] <- NA
  hemi$month.7 [which(hemi$cover.7 ==0)] <- NA
  hemi$month.8 [which(hemi$cover.8 ==0)] <- NA
  hemi$month.9 [which(hemi$cover.9 ==0)] <- NA
  hemi$month.10[which(hemi$cover.10==0)] <- NA
  hemi$month.11[which(hemi$cover.11==0)] <- NA
  hemi$month.12[which(hemi$cover.12==0)] <- NA

Posted in musings, R and tagged , by with no comments yet.

Shed excavation nearly done

Ground is sloped at about 16%. Having to excavate a step foundation for a monolithic slab.  Hopefully soon we’ll build the form.

Deep end is 2' shallow is 6"

Deep end is 2′ shallow is 6″ Area is 210 sq ft.

Posted in news and tagged , by with comments disabled.

Keyed Scarf Joint

For some odd reason, I’m a little obsessed with scarf joints. Dunno why. I notice them when I travel and see old structures. I took photos of them at Czocha castle.  Anyway, I’ve had it on my bucket list to make some and it has taken up way too much brain time. So I made one to get it out of my system.

It started out cutting down a hackberry tree in the back yard. Lopping off a straight limb and then hatcheting it to reasonable square. From there, I used my japanese plane to make it square and flat. Once I have useable dimensional stock, I then made a template of the joint and drew it on the side of the stock to guide the saw cuts.  I may have made the points a bit too sharp as it was a pain to get a chisel in there, so next time, a much lower angle of attack.

If this scarf joint was used for some serious load bearing application, I’d have used a 1:8 ratio of thickness of beam:length of scarf.  Since this was a demo I just did 1:2.

The complete keyed scarf joint. The peg would normally be sawn off flush, but I leave it proud since it is a demo joint.

The complete keyed scarf joint. The peg would normally be sawn off flush, but I leave it proud since it is a demo joint.

The two halves of the scarf, with a cedar peg.

The two halves of the scarf, with a cedar peg.

I'd made a 1x1 before from hackberry but it was not good wood nor green.

I’d made a 1×1 before from hackberry but it was not good wood nor green.

Used these plus the carpenters square and plane to make the stock dimensional.

Used these plus the carpenters square and plane to make the stock dimensional.

Posted in news and tagged , by with comments disabled.

Finishing up Celtic Kraken leather notebook cover

Once the leather was cut, I had to square up the rough cut.  Then the design went on pretty fast. After that, the cutting and tooling was long and methodical.


End result, I like!

Front coverInside

Posted in news and tagged by with comments disabled.