Clean dust off a panasonic lx100 camera

The LX 100 camera is great compact 4/3 sensor camera. But it is prone to dust on the sensor which is likely pulled in by suction as it telescopes out.

Taking the camera apart is a chore, but I’ve read someone using a vacuum to apply suction to the lens assembly to pull out dust. Didn’t think much about it, but when I got dust on my sensor after 6 months, well. Had to try.

I turned it on and off twice to get the dust semi-airborne I hoped. Then turned on my vacuum cleaner and using the extension hose, i held it on the front side of the lens assembly then turned the camera off, which collapses the assemble and hopefully exerts positive air pressure. I repeated this 5 times. Then checked the camera using a white background. Poof, dust on sensor gone! Boy, was I surprised. I wanted to make an adaptor out of cardboard between the camera lens and the vacuum, but it wasn’t needed.


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

Finally measuring Earth using trigonometry

Eratosthenes measured the world using shadows cast in two different cities at the same time. I’ve been wanting to replicate it for over  decade. Today I did. 5 volunteers from San Diego to Nashville all have the same style of pencil of the same length. Everyone is to measure the shadow on it at noon CST.  Today only 2 could do it. From the data, I have computed the following:

circumference_earth – 32744.22 miles
> real_circumference_earth<-24901 miles

Error:    0.3149762

So a rough, but useful first attempt. The R code I’m using is:

#computing circumference of earth

library(dplyr)
library(tidyr)
library(ggplot2)
library(animation)
library(readr)
setwd("~/Copy/R/climate change/")

real_circumference_earth<-24901
data<-as.data.frame(read_delim("earth shadow data.csv", ","))
data<-data[,-1]
pencil<- 19.0
avg_data<-(colMeans(data))
str(data)
avg_data
angle_mt<-180-90-atan(pencil/avg_data[1])/(2*pi/360)
angle_tc<-180-90-atan(pencil/avg_data[2])/(2*pi/360)
net_angle_tc<-angle_tc-angle_mt
angle_mt
angle_ratio_to_tc<-360/abs(net_angle_tc)
distance_trevor<-651.0
earth_circ_per_tc<-distance_trevor*angle_ratio_to_tc
earth_circ_per_tc
err_per_tc<-(earth_circ_per_tc-real_circumference_earth)/real_circumference_earth*100
err_per_tc


Posted in R and tagged , by with comments disabled.

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.

 

Code:

setwd("~/cloud/R/")
aFile = readLines("trumpacceptance.txt")
library(tm)
library("SnowballC")
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)

library(wordcloud)
set.seed(4333)
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)
library(dplyr)
library(tidyr)
library(ggplot2)
library(animation)
setwd("~/cloud/R/climate change/")
#Data from https://crudata.uea.ac.uk/cru/data/temperature/
#As well as data read in script
source("read_cru_hemi.r")
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)

saveGIF({
  
#  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(
    year=tab[seq(1,nrows,2),1],
    annual=tab[seq(1,nrows,2),14],
    month=array(tab[seq(1,nrows,2),2:13]),
    cover=array(tab[seq(2,nrows,2),2:13])
  )
  # 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
  #
  return(hemi)
}

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.