Homer
Timelapse of sunset, moonrise and sunrise from Homer in Alaska.
Related Posts
(Published to the Fediverse as: Homer #timelapse #video #homer #alaska Insta360 time lapse of sunrise, moonrise and sunset from Homer, AK )
Grewingk Glacier
Hike to the Grewingk Glacier in Kachemak Bay State Park. Inaccessible by car, so it's a boat ride from Homer to across the trail and pick you up at the other end. Lots of varied forest and then the glacier is incredible.
Hike starts at: 59.612729, -151.190267. View in Google Earth.
Updated 2025-08-02 18:53:
Related Posts
(Hike Map)
(Published to the Fediverse as: Grewingk Glacier #hike #alaska #grewingkglacier #map #video #hikevid Grewingk Glacier )
Savage Alpine Trail
One way four mile trail from Savage Campground to Savage River in Denali National Park. There is a free shuttle bus back (and to the entrance area if no parking deeper in the park). This direction is 1,500 fet up and then 1,700 down with the descent in just a mile and a half. Fantastic variety of terrain and scenery.
Hike starts at: 63.715504, -149.254807. View in Google Earth.
Related Posts
- East Fork Toklat River
- Grewingk Glacier
- Bay View and Shoreline Trails at China Camp State Park
- Las Trampas Wilderness
- Waters Gulch Loop Trail
(Hike Map)
(Published to the Fediverse as: Savage Alpine Trail #hike #denali #map Savage Alpine Trail )
East Fork Toklat River
Four mile out and back hike along the Toklat River in Denali National Park. No trails in this part of the park, just pick a direction and go. Until a bridge is repaired this is the last stop on the park road bus route.
Hike starts at: 63.558897, -149.794342. View in Google Earth.
Related Posts
- Savage Alpine Trail
- Grewingk Glacier
- Summit Lake to Echo Lake in Lassen
- McCloud River Trail (Three Waterfalls)
- Adobe Creek
(Hike Map)
(Published to the Fediverse as: East Fork Toklat River #hike #denali #map East Fork Toklat River )
SEA FAI
Google Pixel 8 Pro 7mm f1.7 1/800s ISO21
AS167
Related Posts
(Published to the Fediverse as: SEA FAI #photo #flight #sea #fai SEA FAI )
SFO SEA
Google Pixel 8 Pro 7mm f1.7 1/1,500s ISO21
AS591
Related Posts
(Published to the Fediverse as: SFO SEA #photo #flight #sfo #sea SFO SEA )
Get an email when a new OpenAI model is available via the API
Here's a simple Google Apps Script to monitor for new OpenAI models:
var AlertEmail = ''; | |
var OpenAIAPIKey = ''; | |
function main() { | |
// we store known models in script properties | |
var scriptProperties = PropertiesService.getScriptProperties(); | |
var currentProps = scriptProperties.getProperties(); | |
var anythingNew = false; | |
var newText = ''; | |
// get list of models that the OpenAIAPIKey has access to | |
var options = { | |
'method' : 'get', | |
'headers' : { | |
'Authorization': 'Bearer ' + OpenAIAPIKey | |
}, | |
'muteHttpExceptions': true | |
}; | |
var response = UrlFetchApp.fetch('https://api.openai.com/v1/models', options); | |
var json = JSON.parse(response.getContentText()); | |
// chech for new models | |
if (json.data) { | |
json.data.forEach(function(model) { | |
if (!(model.id in currentProps)) { | |
scriptProperties.setProperty(model.id, model.owned_by); | |
anythingNew = true; | |
newText += 'New Model: ' + model.id + '\n'; | |
Logger.log('New Model: ' + model.id) | |
} | |
}); | |
} else { | |
Logger.log('Error: ' + response.getContentText()); | |
} | |
// send an email if we found anything new | |
if (anythingNew){ | |
MailApp.sendEmail(AlertEmail, 'New OpenAI Models on ' + new Date(), newText) | |
} | |
} |
To get this running, paste into a new Apps Script project and enable the Gmail API under services. Add your email address and OpenAI API Key at the top. Run a couple of times and you should get an email with all the current models and then nothing the second time unless you get lucky. On Triggers set a scheduled execution with whatever frequency feels good (I use daily) and you're all set.
More Google Apps Script Projects
- Get an email when your security camera sees something new (Apps Script + Cloud Vision)
- Get an email if your site stops being mobile friendly (no longer available)
- Export Google Fit Daily Steps, Weight and Distance to a Google Sheet
- Email Alerts for new Referers in Google Analytics using Apps Script
- Animation of a year of Global Cloud Cover
- Control LIFX WiFi light bulbs from Google Apps Script
- Adding AI to Todoist with Google Apps Script and OpenAI
- How to backup Google Photos to Google Drive automatically after July 2019 with Apps Script
- Using the Todoist API to set a due date on the Alexa integration to-do list (with Apps Script)
- Automate Google PageSpeed Insights and Core Web Vitals Logging with Apps Script
- Using the Azure Monitor REST API from Google Apps Script
- Monitor page index status with Google Sheets, Apps Script and the Google Search Console API
(Published to the Fediverse as: Get an email when a new OpenAI model is available via the API #code #software #appsscript #google #gmail #openai #ai Get an email when a new OpenAI model is available via the API )
Yerba Buena Island Timelapse
Timelapse shot from Panoramic Park at the top of Yerba Buena Island. This features the Point of Infinity sculpture, the Bay Bridge, Treasure Island, Angel Island, Alcatraz, the Golden Gate Bridge and downtown San Francisco.
Related Posts
- Treasure Island
- Both sides of the Golden Gate, a Time Lapse
- Embarcadero
- San Francisco New Year's Eve Timelapse
- San Francisco New Year's Eve Timelapse 2020
(Published to the Fediverse as: Yerba Buena Island Timelapse #timelapse #video #sanfrancisco #baybridge #goldengatebridge #angelisland #treasureisland #alcatraz Panoramic time lapse from Yerba Buena Island (Bay Bridge, Golden Gate Bridge, Islands and San Francisco) )
Set Todoist Label Colors Automatically Using OpenAI Embeddings
From the department of things I wouldn't have bothered with a year ago, here's a python script to set Todoist label colors.
Why? I like a productivity environment with some color and flare, and it also helps to visually recognize what a task relates to. But setting label colors is more clicks than I have patience for.
How? Just figure out embeddings for each available color and then for each label. Use cosine similarity to set the color that best suits each label. Colors will stay consistent for existing labels and new ones will get just a dash of semantic meaning in their assignments.
Here's the code (you need an OpenAI API key and a Todoist API token set as environment variables):
import os | |
from todoist_api_python.api import TodoistAPI | |
from openai import OpenAI | |
import numpy as np | |
# Todoist palette colors from https://developer.todoist.com/api/v1#tag/Colors | |
colors = [ | |
{"id": 30, "name": "berry_red", "hex": "#B8255F"}, | |
{"id": 31, "name": "red", "hex": "#DC4C3E"}, | |
{"id": 32, "name": "orange", "hex": "#C77100"}, | |
{"id": 33, "name": "yellow", "hex": "#B29104"}, | |
{"id": 34, "name": "olive_green", "hex": "#949C31"}, | |
{"id": 35, "name": "lime_green", "hex": "#65A33A"}, | |
{"id": 36, "name": "green", "hex": "#369307"}, | |
{"id": 37, "name": "mint_green", "hex": "#42A393"}, | |
{"id": 38, "name": "teal", "hex": "#148FAD"}, | |
{"id": 39, "name": "sky_blue", "hex": "#319DC0"}, | |
{"id": 40, "name": "light_blue", "hex": "#6988A4"}, | |
{"id": 41, "name": "blue", "hex": "#4180FF"}, | |
{"id": 42, "name": "grape", "hex": "#692EC2"}, | |
{"id": 43, "name": "violet", "hex": "#CA3FEE"}, | |
{"id": 44, "name": "lavender", "hex": "#A4698C"}, | |
{"id": 45, "name": "magenta", "hex": "#E05095"}, | |
{"id": 46, "name": "salmon", "hex": "#C9766F"}, | |
#{"id": 47, "name": "charcoal", "hex": "#808080"}, | |
#{"id": 48, "name": "grey", "hex": "#999999"}, | |
{"id": 49, "name": "taupe", "hex": "#8F7A69"}, | |
] | |
# OpenAI Client | |
oai = OpenAI() | |
# Embedding helper | |
def get_embedding(text): | |
# Replace underscores and hyphens with spaces | |
formatted_text = text.replace('_', ' ').replace('-', ' ') | |
response = oai.embeddings.create( | |
input=formatted_text, | |
model="text-embedding-3-small" | |
) | |
return response.data[0].embedding | |
# Add embeddings to each color in the colors list | |
print("Generating embeddings for colors...") | |
for color in colors: | |
color["embedding"] = get_embedding(color["name"]) | |
# Get API token from environment variable for security | |
# You need to set this environment variable with your Todoist API token | |
api_token = os.environ.get("TODOIST_API_TOKEN") | |
if not api_token: | |
print("Error: TODOIST_API_TOKEN environment variable not set") | |
exit(1) | |
# Initialize the Todoist API client | |
api = TodoistAPI(api_token) | |
try: | |
# Get all labels | |
labels = api.get_labels() | |
for label_iter in labels: | |
for label in label_iter: | |
embedding = get_embedding(label.name) | |
# Fix the calculation of similarities - create a proper comparison array | |
color_embeddings = np.array([color["embedding"] for color in colors]) | |
# Calculate similarities correctly - each embedding is a 1536-dim vector | |
similarities = np.array([np.dot(embedding, color_embedding) / | |
(np.linalg.norm(embedding) * np.linalg.norm(color_embedding)) | |
for color_embedding in color_embeddings]) | |
# Find the color with the highest similarity | |
max_index = np.argmax(similarities) | |
new_color = colors[max_index]["name"] | |
print(f"Setting {label.name} to {new_color}") | |
api.update_label( | |
label_id=label.id, | |
color=new_color | |
) | |
except Exception as error: | |
print(f"Error: {error}") |
Related Posts
- Adding AI to Todoist with Google Apps Script and OpenAI
- Using the Todoist API to set a due date on the Alexa integration to-do list (with Apps Script)
- Style Transfer for Time Lapse Photography
- More Colors
- Upgrading from word2vec to OpenAI
(Published to the Fediverse as: Set Todoist Label Colors Automatically Using OpenAI Embeddings #code #python #openai #todoist #ai Python code that uses OpenAI embeddings to set Todoist task labels to a semantically meaningful color. )
Revolution
Google Pixel 8 Pro 18mm f2.8 1/257s ISO17
Ok, technically it's R:Evolution, towering over the end of Market Street trying to make downtown happen again while gazing at a haphazardly decorated utility box.
Related Posts
(Published to the Fediverse as: Revolution #photo #revolution #sanfrancisco Photo of the R:Evolution sculpture towering over the end of Market Street )