Homer

Homer, Alaska

Timelapse of sunset, moonrise and sunrise from Homer in Alaska.

Add your comment...

Related Posts

(More Timelapses)

(Published to the Fediverse as: Homer #timelapse #video #homer #alaska Insta360 time lapse of sunrise, moonrise and sunset from Homer, AK )

Grewingk Glacier

By Robert Ellison. Updated on Saturday, August 2, 2025.

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:

Add your comment...

Related Posts

(Hike Map)

(Published to the Fediverse as: Grewingk Glacier #hike #alaska #grewingkglacier #map #video #hikevid Grewingk Glacier )

Savage Alpine Trail

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.

Add your comment...

Related Posts

(Hike Map)

(Published to the Fediverse as: Savage Alpine Trail #hike #denali #map Savage Alpine Trail )

East Fork Toklat River

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.

Add your comment...

Related Posts

(Hike Map)

(Published to the Fediverse as: East Fork Toklat River #hike #denali #map East Fork Toklat River )

SEA FAI

SEA FAI

Google Pixel 8 Pro 7mm f1.7 1/800s ISO21

AS167

Add your comment...

Related Posts

(Recent Photos)

(Published to the Fediverse as: SEA FAI #photo #flight #sea #fai SEA FAI )

SFO SEA

SFO SEA

Google Pixel 8 Pro 7mm f1.7 1/1,500s ISO21

AS591

Add your comment...

Related Posts

(Recent Photos)

(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

Notification of a new OpenAI ModelMeta: Google Apps Script code to send an email alert whenever a new OpenAI model is available through 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.

Add your comment...

More Google Apps Script Projects

(All Code Posts)

(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

Point of Infinity

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.

Add your comment...

Related Posts

(More Timelapses)

(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

An abstract painting of the Todoist color palette

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}")

Add your comment...

Related Posts

(All Code Posts)

(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

R:Evolution

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.

Add your comment...

Related Posts

(Recent Photos)

(Published to the Fediverse as: Revolution #photo #revolution #sanfrancisco Photo of the R:Evolution sculpture towering over the end of Market Street )