This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.
To capture the video (filesize: 19MB), using the free "QuickTime Player" application:
| #!/usr/bin/python | |
| # | |
| # Monte Carlo simulation of the payoffs to angel investing. | |
| # | |
| # Assume a pool of N different investors, each investing in D deals, | |
| # with a fixed time horizon and a fixed distribution of payoffs. | |
| # Randomly simulate each investor's total payoff, then compute the | |
| # mean and std dev of all IRRs in the overall pool. | |
| # | |
| # This gives an individual angel an idea of what kind of payoff & |
| #!/usr/bin/ruby | |
| # | |
| # This work is licensed under a Creative Commons Attribution 3.0 Unported License. | |
| # http://creativecommons.org/licenses/by/3.0/ | |
| # | |
| # With some slight modifications, this script should create | |
| # a new discount code for each of the 'live' events which are | |
| # owned by the user (who is identified by the user_key value). | |
| # | |
| # See the above license info and Eventbrite API terms for usage limitations. |
| function listFilesInFolder() { | |
| var folder = DocsList.getFolder("Maudesley Debates"); | |
| var contents = folder.getFiles(); | |
| var file; | |
| var data; | |
| var sheet = SpreadsheetApp.getActiveSheet(); | |
| sheet.clear(); | |
| // These two need to be declared outside the try/catch | |
| // so that they can be closed in the finally block. | |
| HttpURLConnection urlConnection = null; | |
| BufferedReader reader = null; | |
| // Will contain the raw JSON response as a string. | |
| String forecastJsonStr = null; | |
| try { | |
| // Construct the URL for the OpenWeatherMap query |
Firstly install Brew on your MAC
Then install PHP
| function sync() { | |
| var id="XXXXXXXX"; // CHANGE - id of the secondary calendar to pull events from | |
| var secondaryCal=CalendarApp.getCalendarById(id); | |
| var today=new Date(); | |
| var enddate=new Date(); | |
| enddate.setDate(today.getDate()+30); // how many days in advance to monitor and block off time | |
| var secondaryEvents=secondaryCal.getEvents(today,enddate); |
| function sync() { | |
| var id="XXXXXXXXXX"; // CHANGE - id of the secondary calendar to pull events from | |
| var today=new Date(); | |
| var enddate=new Date(); | |
| enddate.setDate(today.getDate()+7); // how many days in advance to monitor and block off time | |
| var secondaryCal=CalendarApp.getCalendarById(id); | |
| var secondaryEvents=secondaryCal.getEvents(today,enddate); |
A pattern for building personal knowledge bases using LLMs.
This is an idea file, it is designed to be copy pasted to your own LLM Agent (e.g. OpenAI Codex, Claude Code, OpenCode / Pi, or etc.). Its goal is to communicate the high level idea, but your agent will build out the specifics in collaboration with you.
Most people's experience with LLMs and documents looks like RAG: you upload a collection of files, the LLM retrieves relevant chunks at query time, and generates an answer. This works, but the LLM is rediscovering knowledge from scratch on every question. There's no accumulation. Ask a subtle question that requires synthesizing five documents, and the LLM has to find and piece together the relevant fragments every time. Nothing is built up. NotebookLM, ChatGPT file uploads, and most RAG systems work this way.