John Boyd Thacher State Park

John Boyd Thacher State Park, is situated along the Helderberg Escarpment, one of the richest fossil-bearing formations in the world. Even as it safeguards six miles of limestone cliff-face, rock-strewn slopes, woodland and open fields, the park provides a marvelous panorama of the Hudson-Mohawk Valleys and the Adirondack and Green Mountains. The park has volleyball courts, playgrounds, ball fields and numerous picnic areas with nine reservable shelters. Interpretive programs are offered year-round, including guided tours of the famous Indian Ladder Trail. There are over 25 additional miles of trails for summer hiking and mountain biking, and winter cross-country skiing, snowshoeing, hiking, and snowmobiling.

http://nysparks.com/parks/128/

Show Only ...
Maps - Photos - Videos

30 Zip Codes with the Fewest People Per Square Mile 📨

30 Zip Codes with the Fewest People Per Square Mile 📨

1HamiltonHoffmeister 13353
2HamiltonPiseco 12139
3St. LawrenceChildwold 12922
4HamiltonLong Lake 12847
5EssexNorth Hudson 12855
6HamiltonRaquette Lake 13436
7HerkimerEagle Bay 13331
8UlsterClaryville 12725
9HamiltonInlet 13360
10St. LawrenceCranberry Lake 12927
11HamiltonBlue Mountain Lake 12812
12HamiltonLake Pleasant 12108
13St. LawrenceSouth Colton 13687
14EssexNewcomb 12852
15WarrenNorth River 12856
16EssexSaint Huberts 12943
17EssexMinerva 12851
18GreeneWest Kill 12492
19HerkimerOld Forge 13420
20OswegoRedfield 13437
21HamiltonIndian Lake 12842
22FranklinOwls Head 12969
23EssexNew Russia 12964
24OneidaForestport 13338
25HamiltonWells 12190
26FranklinSaint Regis Falls 12980
27St. LawrenceParishville 13672
28LewisGlenfield 13312
29St. LawrenceOswegatchie 13670
30St. LawrenceDegrasse 13684

Weather Update – May 17, 2022

Look how hot the weekend will be 🏖

I just wish it was June and I could get out of town. But with work these days I can’t afford to be off the cell phone network for all weekend. But that day will come. Only two and a half weeks of session left. I’m hoping their are sine remote work opportunities in the summer but maybe that’s just wishful thinking.

Today.
Feels like …
May 6th.

Mostly Sunny then Mostly Sunny and Breezy

Mostly sunny.

Breezy, with a west wind 5 to 10 mph increasing to 16 to 21 mph in the afternoon. Winds could gust as high as 32 mph.

and

68 degrees , 47 max dew point, 8:14
sunset.
Tonight.
Feels like …
May 4th.

Partly Cloudy

Partly cloudy.

West wind 9 to 16 mph, with gusts as high as 26 mph.

and

44 degrees , 5:28
sunrise.
Wednesday.
Feels like …
May 9th.

Sunny

Sunny.

Northwest wind around 11 mph, with gusts as high as 21 mph.

and

69 degrees , 36 max dew point, 8:15
sunset.
Wednesday Night.
Feels like …
May 19th.

Slight Chance of Showers then Chance of Showers

A chance of showers, mainly after 2am. Mostly cloudy.

West wind around 5 mph becoming calm in the evening. Chance of precipitation is 50%. New precipitation amounts of less than a tenth of an inch possible.

and

49 degrees , 5:27
sunrise.
Thursday.
Feels like …
May 3rd.

Showers is likely

Showers likely, mainly before 2pm. Mostly cloudy.

South wind around 8 mph, with gusts as high as 21 mph. Chance of precipitation is 60%. New precipitation amounts between a tenth and quarter of an inch possible.

and

67 degrees , 51 max dew point, 8:16
sunset.
Thursday Night.
Feels like …
May 29th.

Chance of Showers then Partly Cloudy

A chance of showers before 8pm. Partly cloudy.

Chance of precipitation is 30%. New precipitation amounts of less than a tenth of an inch possible.

and

52 degrees , 5:26
sunrise.
Friday.
Hot !

Mostly Sunny

Mostly sunny.

and

85 degrees , 56 max dew point, 8:17
sunset.
Friday Night.
Hot !

Partly Cloudy

Partly cloudy.

and

64 degrees , 60 max dew point, 5:25
sunrise.
Saturday.
Hot !

Mostly Sunny then Chance of Showers

A chance of showers after 2pm. Mostly sunny and hot.

Chance of precipitation is 30%.

and

91 degrees , 61 max dew point, 8:18
sunset.
Saturday Night.
Feels like …
July 10th.

Chance of Showers

A chance of showers. Mostly cloudy.

Chance of precipitation is 40%.

and

62 degrees , 61 max dew point, 5:24
sunrise.
Sunday.
Feels like …
June 15th.

Scattered Showers

Scattered showers. Partly sunny.

Chance of precipitation is 50%.

and

79 degrees , 60 max dew point, 8:19
sunset.
Sunday Night.
Feels like …
May 19th.

Scattered Showers

Scattered showers. Partly cloudy.

Chance of precipitation is 30%.

and

49 degrees , 5:24
sunrise.
Monday.
Feels like …
May 9th.

Mostly Sunny

Mostly sunny.

and

69 degrees , 40 max dew point, 8:20
sunset.

Daily Update – May 17, 2022

Good morning! Happy School Board Vote Day. 🚸

I’m walking backwards from my normal morning walk as I’m planning to vote at 7 am.

Mostly sunny and 53 degrees at the Elm Ave Park and Ride. ☀ There is a west breeze at 5 mph. 🍃. The dew point is 47 degrees.

After a stormy and humid day yesterday ☔ today is much more cooler and sunny. Almost forgot my umbrella leaving the office 🏢 yesterday. I’ve been keeping it in the refrigerator with my lunch, mainly because it’s in the same bag and that way I don’t forget it.

I will vote this morning in the school board elections, 🗳 as I always try to vote in elections, especially when it’s easy and convenient. I figure it doesn’t take much to take a slight detour from the morning walk, 🏃‍♀️ and then get milk at the store 🐮 and come home and have breakfast and coffee. ☕

Don’t Forget to Vote in School Board Elections

Many of us forget about School Board Elections.

They are in a strange time of year, the middle of May, as many of us are thinking more about our summer plans, rather then critical questions of local government spending. School board elections, as local elections, are poorly covered by the news, and often are uninteresting. You may no longer attend high school, and you may not have kids in school. Yet those are not good reasons for not voting.

School Board Elections, School Budget Vote, and Library Budget Vote are all important things to vote on for several reasons including:

  • Low turn out, local elections mean your vote can change results easily.
  • Your decision hits your pocketbook directly, especially if pay property taxes.
  • Only chance to directly comment on government spending — should we invest more in our public schools or further increase the crushing tax burden on working folk?

None of us have perfect information. Many years when I vote in school board elections, I don’t even know whose running for school board, and leave those ballots blank. If your concerned about government spending and waste, or think schools and the students being educated are getting cut too much, then either vote Yes or No. It’s that simple.

Don’t Forget to Vote!

Weather Update – May 16, 2022

A few days of cooler, rainy weather ☔

Rain, possibly severe weather today. Then cooler. Rainy. Then really hot for next weekend for the Lupine Festival where I will be tabling. The following weekend is Memorial Day Weekend, I might head out of town for that though I have my doubts.

Today.
Feels like …
June 27th.

Areas Dense Fog then Severe Thunderstorms

Showers and thunderstorms, mainly after 3pm. Some of the storms could be severe. Areas of dense fog before 7am.

Light south wind increasing to 5 to 9 mph in the morning. Chance of precipitation is 80%. New rainfall amounts between a half and three quarters of an inch possible.

and

82 degrees , 64 max dew point, 8:13
sunset.
Tonight.
Feels like …
June 1st.

Severe Thunderstorms then Chance of Showers

Showers and thunderstorms before 1am, then a slight chance of showers between 1am and 2am. Some of the storms could be severe. 

West wind 8 to 11 mph, with gusts as high as 23 mph. Chance of precipitation is 80%. New precipitation amounts between a quarter and half of an inch possible.

and

53 degrees , 5:29
sunrise.
Tuesday.
Feels like …
May 3rd.

Slight Chance of Showers and Breezy

A slight chance of showers after 9am. Mostly sunny.

Breezy, with a west wind 11 to 21 mph, with gusts as high as 34 mph. Chance of precipitation is 20%.

and

67 degrees , 47 max dew point, 8:14
sunset.
Tuesday Night.
Feels like …
May 10th.

Partly Cloudy

Partly cloudy.

West wind 10 to 14 mph, with gusts as high as 24 mph.

and

46 degrees , 5:28
sunrise.
Wednesday.
Feels like …
May 9th.

Sunny

Sunny.

Northwest wind around 14 mph, with gusts as high as 26 mph.

and

69 degrees , 37 max dew point, 8:15
sunset.
Wednesday Night.
Feels like …
May 13th.

Partly Cloudy then Isolated Showers

Isolated showers after 2am. Partly cloudy.

Chance of precipitation is 20%.

and

47 degrees , 5:27
sunrise.
Thursday.
Feels like …
May 19th.

Scattered Showers

Scattered showers, mainly between 8am and 2pm. Partly sunny.

Chance of precipitation is 30%.

and

72 degrees , 48 max dew point, 8:16
sunset.
Thursday Night.
Feels like …
June 1st.

Partly Cloudy

Partly cloudy.

 

and

53 degrees , 5:26
sunrise.
Friday.
Feels like …
June 15th.

Partly Sunny

Partly sunny.

 

and

79 degrees , 56 max dew point, 8:17
sunset.
Friday Night.
Feels like …
July 10th.

Mostly Cloudy

Mostly cloudy.

 

and

62 degrees , 59 max dew point, 5:25
sunrise.
Saturday.
Hot !

Partly Sunny then Scattered T-storms

Scattered showers and thunderstorms. Mostly sunny.

Chance of precipitation is 30%.

and

88 degrees , 62 max dew point, 8:18
sunset.
Saturday Night.
Feels like …
June 8th.

Scattered T-storms then Scattered Showers

Scattered showers and thunderstorms. Mostly cloudy.

Chance of precipitation is 30%.

and

55 degrees , 5:24
sunrise.
Sunday.
Feels like …
May 27th.

Mostly Sunny

Mostly sunny.

 

and

74 degrees , 50 max dew point, 8:19
sunset.

Daily Update – May 16, 2022

Good morning! A Foggy Monday’s come back around again.

Seems like that happens every week. Just not every Monday is foggy but that’s what happens when the dew point is almost the temperature.

Foggy and 62 degrees in Delmar, NY. 🌫 There is a south breeze at 5 mph. 🍃. The dew point is 61 degrees. The skies will clear around 8 am.

Out walking 🚶 at 6:15 this morning. I like doing my morning walk before breakfast 🥣 as there is less traffic and pollution around the high school 🚸 and it’s just a lot quieter.

Only three 3⃣ more weeks of session 🕴️so I will probably go back to riding the express bus 🚍 and doing my morning walk on the Plaza. Won’t be quite as early then. With over 50 Assembly primaries on June 28th, I just don’t see things dragging on much past the final scheduled day on June 2nd. I’d like to get out of town once things are a bit calmer at work, 💼 although this weekend wasn’t as bad as I had feared work wise. Maybe Memorial Day Weekend I can get out of town. I don’t know, it’s often really buggy and I’ll probably have work to do with the end of session.

My truck is due for an oil 🛢 change so I should make that appointment and also maybe have the tires rotated. 🛠 I drive so little these days it could wait but I want it done before I’m traveling. I used to change my own oil but it’s a hastle finding the oil and filter and doing the change myself. Plus I don’t have a lift or torque wrench it the desire to lift the 35 inch tires myself and I make good money 💵.

Hopefully in a few weeks it will be nice enough to get out of town ⛺ and I can enjoy floating in the tube on a lazy Saturday afternoon, taking off a Friday or Monday too. At least it looks like the Assembly primaries are going to remain in June so that’s nice.

I discovered that Google is a great place to discover new podcasts. 🎧 They seem to have a lot better suggestions than my podcast app has. Lately it just seems like there is less and less interesting podcast episodes out there and very little worth listening to on the radio 📻. I especially like to find good ones to listen to at camp but also at night 🌃 in bed.

Yesterday hiked Bennett Hill in the evening. 🐜 Mosquitoes are out now but not so bad. After the heat and humidity of late, things are really starting to green up in the hill towns. People got their big piles of brush, lumber and other burnable debris ready to go now thst May 15 has come and gone and bonfires 🔥 are somewhat lawful again.

Here is the R script I am using for creating the maps and graphs of ADP for the State Senate and Congressional Districts

Here is the R script I am using for creating the maps and graphs of ADP for the State Senate and Congressional Districts. It should be interesting to see how it compares to the maps released by the special master. You can get the data here.

library(tidyverse)
library(tigris)
library(ggtext)
library(sf)

rm(list=ls())

# load latfor data, VTD level data is okay for larger districts
# although latfor also provides block level data which is better as
# those centroids should always be inside the district you are comparing
vt20 <- read_csv(‘2020vote_vtd.csv’)
vt20$GEOID <- as.character(vt20$GEOID)

# edADP – This code has to be as efficient as possible, as
# it can not be vectorized, due to the need to check to see
# if a race is competitive before including. We also don’t want
# to search for columns here, due to the CPU time cost over thousands
# of rows, each time searched.
edADP <- function(ed, demcols) {
 
  # making sure everything is numeric helps with speed
  ed <- ed %>% as.numeric
 
  # store a total of dems, rep, ballot votes
  dem <- 0; rep <- 0; ballot <- 0;
 
  # use democratic columns as an index for all other columns
  for (pos in demcols) {
    
    # if either Democratic or Republican line is 0, then that
    # multiplies out to zero as x * 0 = 0. Then negate and skip to next race
    if (!(ed[pos] *  ed[pos+1])) next;
    
    # to minimize costs, we just use row positions based on positition relative to
    # democratic rows
    dem <- dem + ed[pos]
    rep <- rep + ed[pos+1]   
    ballot <- ballot + ed[pos-1] – ed[pos+6]
  }
 
  # return the vote totals for all competitive races to bind to the main table
  return (c(‘dem’=dem, ‘rep’=rep, ‘ballot’=ballot))
}

dfADP <- function(df, yr=18) {
  # find position of dem cols before starting to minimize CPU costs when
  # doing the row-by-row math with apply
  demcols <- c()
 
  i <- 1
  for (dfcols in colnames(df)) {
    if (substr(dfcols, 1, 5) == str_c(‘DEM’,yr)) demcols <- append(demcols, i)
    i <- i+1
  }
 
  # Calculate ADP, row by row then bind to the dataframe
  return(cbind(df,df %>% apply(1, edADP, demcols) %>% t))
}

# calculate ADP from VT20 data
adp <- vt20 %>% dfADP(18)

# join the VTD data to voting districts
vtd <- voting_districts(‘ny’, cb=T) %>%
  inner_join(adp, by=c(‘GEOID20’=’GEOID’)) %>%
  st_transform(‘epsg:3857’)

# load the shapefile want to join the VTDs against
a22 <- read_sf(‘/home/andy/Documents/GIS.Data/2022-districts/Congress22.shp’) %>% st_transform(‘epsg:3857’)

name <- ‘Congress’

# for reasons of speed, convert VTDs to centroids, then join against
# the new districts
join <- vtd %>% st_centroid() %>%
  st_join(a22)

# calculate the ADP by dividing democratic votes in all competitive races against
# democrats and republican. Add column for coloring
join %>% st_drop_geometry() %>% group_by(DISTRICT) %>%
  summarise(ADP = (sum(dem)/sum(dem+rep))*100,
            color=ifelse(ADP > 60, ‘Democratic (>60%)’,
                         ifelse(ADP > 50, ‘Lean Democratic (>50%)’,
                                ifelse(ADP > 40, ‘Lean Republican (>40%)’, ‘Republican (<40%)’)))
            ) %>% drop_na() %>%
  ggplot(aes(DISTRICT, ADP, fill=color)) + geom_col(alpha=0.8) +
  geom_hline(yintercept = 50) +
  scale_fill_manual(values=c(‘blue’,’LightSkyBlue’,’Pink’,’Red’)) +
  scale_x_continuous(breaks=seq(1,64,1)) +
  scale_y_continuous(limits = c(0,100), breaks=seq(0,100,10)) +
  theme_minimal() +
  coord_cartesian(expand=F) +
  labs(
    title = str_c(‘<span style=”color: red;”>2018 Average</span> <span style=”color: blue;”>Democratic Performance</span> – ‘,name,’ \’22’),
    y = “2018 ADP (All races with Dem. and Rep. candidates)”,
    x = “”,
    caption=’Data Source: LATFOR VTDs’,
    tag=paste(‘Andy Arthur,’, format(Sys.Date(), format=”%-m/%-d/%y”)),
    fill = “”) +
  theme(
    text=element_text(family=’Open Sans’,size=14),
    plot.title=element_textbox( hjust=0.5, face=’bold’,size=34),
    axis.text = element_text(size=12),
    plot.background = element_rect(fill = “white”, color=”white”),
    plot.tag=element_text(size=10,hjust=0, color=’#555555′),
    plot.caption=element_text(size=10, color=’#555555′),
    plot.margin = unit(c(1,1,1,1), ‘lines’),
    plot.tag.position = c(0.0,0.01),
    legend.key.width = unit(4,’cm’),
    legend.key.height = unit(0.2,’cm’),
    legend.position = ‘top’
  )

fn <- str_c(’22-‘,name,’-graph’)
ggsave(paste(‘/tmp/’,fn,’.jpg’,sep=”), width=1920, height=1200, units=’px’, dpi=120)
ggsave(paste(‘/tmp/’,fn,’.svg’,sep=”), width=1920, height=1200, units=’px’, dpi=130, device = grDevices::svg)

# calculate the ADP by dividing democratic votes in all competitive races against
# democrats and republican. Add column for coloring
join %>% st_drop_geometry() %>% group_by(DISTRICT) %>%
  summarise(ADP = (sum(dem)/sum(dem+rep))*100,
            color=ifelse(ADP > 60, ‘Democratic (>60%)’,
            ifelse(ADP > 50, ‘Lean Democratic (>50%)’,
            ifelse(ADP > 40, ‘Lean Republican (>40%)’, ‘Republican (<40%)’))))  %>%
  drop_na() %>%
  inner_join(a22, by=(‘DISTRICT’)) %>%
  ggplot(aes(geometry=geometry, fill=color)) + geom_sf(size=0.5) +
  scale_fill_manual(values=c(‘blue’,’LightSkyBlue’,’Pink’,’Red’)) +
  theme_void() +
  coord_sf(expand=F) +
  labs(
    title = str_c(‘<span style=”color: red;”>2018 Average</span> <span style=”color: blue;”>Democratic Performance</span> – ‘,name,’ \’22’),
    caption=’Data Source: LATFOR VTDs’,
    tag=paste(‘Andy Arthur,’, format(Sys.Date(), format=”%-m/%-d/%y”)),
    fill = “”) +
  theme(
    text=element_text(family=’Open Sans’,size=14),
    plot.title=element_textbox( hjust=0.5, face=’bold’,size=34, margin=unit(c(0,0,1,0),’pt’)),
    plot.background = element_rect(fill = “white”, color=”white”),
    plot.tag=element_text(size=10,hjust=0, color=’#555555′),
    plot.caption=element_text(size=10, color=’#555555′),
    plot.margin = unit(c(1,1,1,1), ‘lines’),
    plot.tag.position = c(0.0,0.01),
    legend.key.width = unit(4,’cm’),
    legend.key.height = unit(.6,’cm’),
    legend.position = ‘top’
  )

fn <- str_c(’22-‘,name,’-map’)
ggsave(paste(‘/tmp/’,fn,’.jpg’,sep=”), width=1920, height=1200, units=’px’, dpi=120)
ggsave(paste(‘/tmp/’,fn,’.svg’,sep=”), width=1920, height=1200, units=’px’, dpi=130, device = grDevices::svg)