Looking for Catfood Software? Visit Catfood Earth and
Catfood WebCamSaver. If you have no
idea what Catfood Software is and got here by following my email domain then you probably want to go here.
This simple script adds useful AI to Todoist and runs in the cloud on Google Apps Script.
I use Todoist to run my life, and my dream is for it to be able to complete certain types of tasks for me. With OpenAI Operator and Anthropic Computer Use this is getting closer and closer to reality. Yes, there is a risk that Todoist spends all of my money on paper clips. But there is also the upside that it will eventually do my weekly shopping, pay my bills and call back the dentist's office. Google's new Ask for Me is promising too, even if right now it's just going to bother nail salons out of existence.
I already put together an Alexa replacement using a Raspberry Pi and the OpenAI realtime API. It switches lights on and off, adds things to my to do list, figures out when the next L is coming and more (I'll blog more about this soon). One thing I learned is that this kind of thing can get pretty expensive. I can see why Amazon is procrastinating on an LLM Alexa. But costs keep going down, and the future will get more evenly distributed over time.
The first version of this script has two objectives. Respond to tasks, and create calendar events. Here's the script:
To get this working you need API keys from OpenAi and Todoist. It only works with tasks that have the right label, ai is the default - you can change this with AI_TASK_LABEL. I initially developed this with o1, but it looks like the tool use was rushed out too quickly and it calls the same tool repeatedly. GPT-4o works well enough and you can test switching out the model by changing OPENAI_MODEL.
Quick configuration guide - create a Google Apps Script project in Google Drive. Paste in the code above and add your API keys and any other desired configuration changes. Go to Project Settings in the right hand navigation and make sure your time zone is correct. Then go to Triggers and schedule the function trigger to run periodically (I use every 5 minutes). You should be done.
Back in Todoist add the ai label to a task (or whatever label you set in the script) and the AI will respond. With the current script there are two use cases - ask it to create an event (it can invite people, add details to the description, etc.), or ask it to research some aspect of the task you're working on. I think this is helpful because it has the full context of the task, and while you're working in Todoist it's useful to store the history there as well.
The point here is to extend the number of tasks that the script can take on. Add new tools for the AI to consider in the getTools() function, and then wire that tool into an implementation in generateAIResponse(). createCalendarAppointment() is a good example of using built in Google services - as well as the calendar it's pretty easy to interact with email, Google docs and many more. I'm planning to add file uploads as well, and will update this post with iterations of the script that add helpful functionality.
OpenAI recommends around 20 tools as the maximum. At that point it might be necessary to break this up into multiple assistants with different tool collections.
Let me know in the comments if you manage to use this to start crossing anything off your list.
(Published to the Fediverse as:
Adding AI to Todoist with Google Apps Script and OpenAI #code#ai#openai#todoist#ml#appsscript#gas#google How to add an AI assistant to Todoist, includes code to respond to tasks and create calendar appointments with gpt-4o.)
TLDR: If you live in San Francisco and have windows, please consider signing this letter.
I need to replace my front window. The wood is rotten. While San Francisco never gets that cold, all the cold there is whistles in through the gaps.
In general I want to make my house a little bit more energy efficient whenever I replace something. I'd assumed I could find some nice looking double paned replacements and get on with my life. Sane jurisdictions even require certain levels of insulation for this kind of project. San Francisco went the other way. There is a 14 page guide (PDF) to the requirements. Which boil down to window originalism, if your house is old enough:
"Another significant difference is that vinyl, fiberglass, and aluminum windows often do not have an important detail that is common on most older wood windows: the Ogee (pronounced Oh-jee) lugs at the bottom of the top sash (also called the meeting rail) of a double-hung window."
Yes, when Meta and Red Hat cancelled their conferences in San Francisco I'm pretty sure it was the lack of Ogees.
What about some double paned units?
"There should be an interior space bar, preferably of a dark color, within the insulated unit that visually divides the interior and exterior grilles."
This relates to divided light windows (i.e. you've got multiple panes of glass in one window). You might want to just have a single double paned window, but no, it needs to be in keeping with the original. You might then think that you could put some wood details over that single window but no, just in case someone looks closely and at an angle there has to be a shim inside to simulate it being multiple individual panes.
Doesn't the city care about the environment at all?
"While the advantages of double-paned windows are well known, a properly weatherstripped, single-glazed sash window can greatly reduce or eliminate air, noise and air infiltration (where most energy is lost)."
Greatly reduced is doing a lot of heavy lifting here. Looking at U Values here, the rate of energy transfer in watts per square meter per Kelvin (1°C = 1K) – W/m2K, old single pane windows are over 4.8, modern double paned are 1.3 and triple paned 0.8. Lower is better, almost four times better just for double paned.
I don't know exactly how these requirements came into force. It could be out of touch planners wanting windows for a more civilized era. Maybe there is a concentrated benefit / diffuse cost thing going on in favor of a few eye wateringly expensive custom window builders. But when you're trying to pretend that single paned windows are a boon to the environment something has clearly gone very wrong.
Even at the aesthetic level I'm not sure we need all the Ogees. I love the chaotic architectural chaos of San Francisco. The hot pink victorian next to the grey brutalist remodel. It's part of the charm of the city. Also, the expense of complying with what was popular 100 years ago cannot help with affordability, a key challenge.
Happily my supervisor, Myrna Melgar, has proposed legislation to shred this document and allow most people to choose replacement windows that best fit their needs. It looks like her proposal is currently on a three month vacation with the planning department. If you have windows and live in San Francisco you should probably care about this, and you can sign a letter to show your support for the change here.
(Published to the Fediverse as:
Bringing Sanity to Window Replacement in San Francisco #politics#sanfrancisco#windows#planning#sfpol San Francisco's insane window replacement rules; legislation to improve the situation; an open letter you can sign to help.)
Time lapse of the L Taraval light rail from West Portal station to the San Francisco Zoo. The L shut down during the pandemic and then years of construction replaced the tracks (and water lines, and sewers). It finally returned in September of 2024. I made a time lapse of the construction phase outside my house.
By Robert Ellison. Updated on Saturday, January 18, 2025.
Google Pixel 8 Pro 18mm f2.8 1/35s ISO16
BA285
In this photograph, an expansive view of a British Airways plane dominates the frame, exuding an aura of readiness and anticipation. The image is captured through the terminal windows, creating a layered effect with reflective surfaces adding depth to the scene. The plane’s curved body and distinctive red, white, and blue tail fin contrast starkly against the soft, muted tones of the cloudy sky beyond. Subtle hints of activity manifest in the blurred figures and equipment around the jet bridge, evoking a quiet hustle and bustle typical of air travel. This juxtaposition of the stationary and the bustling hints at the silent hum of a hub transitioning between departure and arrival.
The composition employs a balanced use of lines and layers. The vertical lines of the window frames serve as a frame within the frame, guiding the viewer’s gaze towards the aircraft, which is centered but appears slightly off-center due to the depth created by the glass. I appreciate the dynamic interaction between the geometric lines of the windows and the curvilinear form of the airplane, drawing attention to both the subject and the structural beauty of the terminal. However, the reflections, while adding depth, slightly distract from the clarity of the plane's details. Overall, this photograph shines in its elegant portrayal of travel's intersections, capturing a moment teeming with possibilities just beyond the glass.
I spent a few days near Shasta Lake over Thanksgiving. Here's a three night time lapse of the milky way. Also a couple of great hikes in the area: Clikapudi Loop (long) and Waters Gulch Loop (short). Some other travel time lapses include Bangalore and Lviv.
There was an election. I probably single-handedly evicted Biden and then endorsed Harris. Unfortunately my lifetime winning national election voting record stands at 1. And I got to vote in the US and the UK this year. Trump would probably have lost if Biden gave this speech I wrote for him. I do better in local elections and this year used OpenAI to semi-automate my California and San Francisco proposition guides.
I got my first electric vehicle - so should re-write this post to be far more righteous - and the hardest part was figuring out PG&E's shell game of rate plans. I ended up writing a python script to simulate my bill and it should work for anyone else trying to figure out this conundrum.
I know what this review is trying to say but nonetheless I have been chuckling for two days about all the women ruining the view on this 18 mile long beach, especially with the accompanying photos.
(Published to the Fediverse as:
Winter Solstice 2024 #code#catfood#earth#winter#solstice The exact moment (09:20 UTC, December 21, 2024) of Winter Solstice as rendered in Catfood Earth.)