[
{
"id": 3778,
"slug": "coins",
"link_url": "http://www.royalmint.com/newdesigns/designsRevealed.aspx",
"link_title": "The Royal Mint: The New Designs Revealed",
"via_url": null,
"via_title": null,
"commentary": "Matthew Dent's design for the new UK coinage is inspired - absolutely beautiful. Can't wait to get my hands on some of these.",
"created": "2008-04-04T07:42:05+00:00",
"metadata": {},
"search_document": "'absolutely':25C 'beautiful':26C 'can':27C 'coinage':22C 'coins':8B 'dent':15C 'design':9B,17C 'designs':6A 'for':18C 'get':31C 'hands':33C 'inspired':24C 'is':23C 'matthew':14C 'matthewdent':10B 'mint':3A,11B 'my':32C 'new':5A,20C 'of':36C 'on':34C 'revealed':7A 'royal':2A 'royalmint':12B 's':16C 'some':35C 't':28C 'the':1A,4A,19C 'these':37C 'to':30C 'uk':13B,21C 'wait':29C 'www.royalmint.com':38C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
},
{
"id": 8096,
"slug": "openai-file-search",
"link_url": "https://platform.openai.com/docs/assistants/tools/file-search/improve-file-search-result-relevance-with-chunk-ranking",
"link_title": "OpenAI: Improve file search result relevance with chunk ranking",
"via_url": "https://twitter.com/OpenAIDevs/status/1829259020437475771",
"via_title": "@OpenAIDevs",
"commentary": "I've mostly been ignoring OpenAI's [Assistants API](https://platform.openai.com/docs/assistants/overview). It provides an alternative to their standard messages API where you construct \"assistants\", chatbots with optional access to additional tools and that store full conversation threads on the server so you don't need to pass the previous conversation with every call to their API.\r\n\r\nI'm pretty comfortable with their existing API and I found the assistants API to be quite a bit more complicated. So far the only thing I've used it for is a [script to scrape OpenAI Code Interpreter](https://github.com/simonw/scrape-openai-code-interpreter/blob/main/scrape.py) to keep track of [updates to their enviroment's Python packages](https://github.com/simonw/scrape-openai-code-interpreter/commits/main/packages.txt).\r\n\r\nCode Interpreter aside, the other interesting assistants feature is [File Search](https://platform.openai.com/docs/assistants/tools/file-search). You can upload files in a wide variety of formats and OpenAI will chunk them, store the chunks in a vector store and make them available to help answer questions posed to your assistant - it's their version of hosted [RAG](https://simonwillison.net/tags/rag/).\r\n\r\nPrior to today OpenAI had kept the details of how this worked undocumented. I found this infuriating, because when I'm building a RAG system the details of how files are chunked and scored for relevance is the _whole game_ - without understanding that I can't make effective decisions about what kind of documents to use and how to build on top of the tool.\r\n\r\nThis has finally changed! You can now run a \"step\" (a round of conversation in the chat) and then retrieve details of exactly which chunks of the file were used in the response and how they were scored using the following incantation:\r\n<pre><span class=\"pl-s1\">run_step</span> <span class=\"pl-c1\">=</span> <span class=\"pl-s1\">client</span>.<span class=\"pl-s1\">beta</span>.<span class=\"pl-s1\">threads</span>.<span class=\"pl-s1\">runs</span>.<span class=\"pl-s1\">steps</span>.<span class=\"pl-en\">retrieve</span>(\r\n <span class=\"pl-s1\">thread_id</span><span class=\"pl-c1\">=</span><span class=\"pl-s\">\"thread_abc123\"</span>,\r\n <span class=\"pl-s1\">run_id</span><span class=\"pl-c1\">=</span><span class=\"pl-s\">\"run_abc123\"</span>,\r\n <span class=\"pl-s1\">step_id</span><span class=\"pl-c1\">=</span><span class=\"pl-s\">\"step_abc123\"</span>,\r\n <span class=\"pl-s1\">include</span><span class=\"pl-c1\">=</span>[\r\n <span class=\"pl-s\">\"step_details.tool_calls[*].file_search.results[*].content\"</span>\r\n ]\r\n)</pre>\r\n(See what I mean about the API being a little obtuse?)\r\n\r\nI tried this out today and the results were very promising. Here's [a chat transcript](https://gist.github.com/simonw/0c8b87ad1e23e81060594a4760bd370d) with an assistant I created against an old PDF copy of the Datasette documentation - I used the above new API to dump out the full list of snippets used to answer the question \"tell me about ways to use spatialite\". \r\n\r\nIt pulled in a lot of content! 57,017 characters by my count, spread across 20 search results ([customizable](https://platform.openai.com/docs/assistants/tools/file-search/customizing-file-search-settings)), for a total of 15,021 tokens as measured by [ttok](https://github.com/simonw/ttok). At current GPT-4o-mini prices that would cost 0.225 cents (less than a quarter of a cent), but with regular GPT-4o it would cost 7.5 cents.\r\n\r\nOpenAI provide up to 1GB of vector storage for free, then charge $0.10/GB/day for vector storage beyond that. My 173 page PDF seems to have taken up 728KB after being chunked and stored, so that GB should stretch a pretty long way.\r\n\r\n**Confession:** I couldn't be bothered to work through the OpenAI code examples myself, so I hit Ctrl+A on that web page and copied the whole lot into Claude 3.5 Sonnet, then prompted it:\r\n\r\n> `Based on this documentation, write me a Python CLI app (using the Click CLi library) with the following features:`\r\n>\r\n> `openai-file-chat add-files name-of-vector-store *.pdf *.txt`\r\n>\r\n> `This creates a new vector store called name-of-vector-store and adds all the files passed to the command to that store.`\r\n>\r\n> `openai-file-chat name-of-vector-store1 name-of-vector-store2 ...`\r\n>\r\n> `This starts an interactive chat with the user, where any time they hit enter the question is answered by a chat assistant using the specified vector stores.`\r\n\r\nWe [iterated on this a few times](\r\nhttps://gist.github.com/simonw/97e29b86540fcc627da4984daf5b7f9f) to build me a one-off CLI app for trying out the new features. It's got a few bugs that I haven't fixed yet, but it was a very productive way of prototyping against the new API.",
"created": "2024-08-30T04:03:01+00:00",
"metadata": {},
"search_document": "'-3':22B '-5':23B '/docs/assistants/overview).':44C '/docs/assistants/tools/file-search).':159C '/docs/assistants/tools/file-search/customizing-file-search-settings)),':427C '/gb/day':485C '/simonw/0c8b87ad1e23e81060594a4760bd370d)':365C '/simonw/97e29b86540fcc627da4984daf5b7f9f)':657C '/simonw/scrape-openai-code-interpreter/blob/main/scrape.py)':131C '/simonw/scrape-openai-code-interpreter/commits/main/packages.txt).':145C '/simonw/ttok).':441C '/tags/rag/).':203C '0.10':484C '0.225':452C '017':414C '021':433C '15':432C '173':492C '1gb':476C '20':421C '3.5':545C '4o':446C,466C '57':413C '7.5':470C '728kb':500C 'a':107C,122C,165C,179C,226C,277C,279C,344C,360C,409C,429C,456C,459C,511C,533C,556C,585C,640C,652C,661C,676C,688C 'abc123':322C,326C,330C 'about':253C,340C,401C 'above':383C 'access':61C 'across':420C 'add':574C 'add-files':573C 'additional':63C 'adds':596C 'after':501C 'against':371C,694C 'ai':16B,18B,26B,30B 'ai-assisted-programming':25B 'ai-assisted-search':29B 'all':597C 'alternative':48C 'an':47C,367C,372C,623C 'and':65C,98C,170C,182C,236C,260C,286C,302C,352C,504C,538C,595C 'answer':188C,396C 'answered':638C 'any':630C 'api':41C,53C,89C,97C,103C,342C,385C,697C 'app':559C,666C 'are':234C 'as':435C 'aside':148C 'assistant':193C,368C,642C 'assistants':40C,57C,102C,152C 'assisted':27B,31B 'at':442C 'available':185C 'based':550C 'be':105C,519C 'because':221C 'been':36C 'being':343C,502C 'beta':314C 'beyond':489C 'bit':108C 'bothered':520C 'bugs':678C 'build':263C,659C 'building':225C 'but':461C,685C 'by':416C,437C,639C 'call':86C 'called':589C 'calls':333C 'can':161C,248C,274C 'cent':460C 'cents':453C,471C 'changed':272C 'characters':415C 'charge':483C 'chat':285C,361C,572C,610C,625C,641C 'chatbots':58C 'chunk':8A,173C 'chunked':235C,503C 'chunks':177C,293C 'claude':21B,544C 'cli':558C,563C,665C 'click':562C 'client':313C 'code':127C,146C,526C 'comfortable':93C 'command':603C 'complicated':110C 'confession':515C 'construct':56C 'content':335C,412C 'conversation':69C,83C,282C 'copied':539C 'copy':375C 'cost':451C,469C 'couldn':517C 'count':418C 'created':370C 'creates':584C 'ctrl':532C 'current':443C 'customizable':424C 'datasette':378C 'decisions':252C 'details':211C,230C,289C 'documentation':379C,553C 'documents':257C 'don':76C 'dump':387C 'effective':251C 'embeddings':10B 'enter':634C 'enviroment':139C 'every':85C 'exactly':291C 'examples':527C 'existing':96C 'far':112C 'feature':153C 'features':568C,672C 'few':653C,677C 'file':3A,155C,296C,571C,609C 'file_search.results':334C 'files':163C,233C,575C,599C 'finally':271C 'fixed':683C 'following':309C,567C 'for':120C,238C,428C,480C,486C,667C 'formats':169C 'found':100C,218C 'free':481C 'full':68C,390C 'game':243C 'gb':508C 'generative':15B 'generative-ai':14B 'gist.github.com':364C,656C 'gist.github.com/simonw/0c8b87ad1e23e81060594a4760bd370d)':363C 'gist.github.com/simonw/97e29b86540fcc627da4984daf5b7f9f)':655C 'github.com':130C,144C,440C 'github.com/simonw/scrape-openai-code-interpreter/blob/main/scrape.py)':129C 'github.com/simonw/scrape-openai-code-interpreter/commits/main/packages.txt).':143C 'github.com/simonw/ttok).':439C 'got':675C 'gpt':445C,465C 'gpt-4o':464C 'gpt-4o-mini':444C 'had':208C 'has':270C 'have':497C 'haven':681C 'help':187C 'here':358C 'hit':531C,633C 'hosted':199C 'how':213C,232C,261C,303C 'i':33C,90C,99C,116C,217C,223C,247C,338C,347C,369C,380C,516C,530C,680C 'id':320C,324C,328C 'ignoring':37C 'improve':2A 'in':164C,178C,283C,299C,408C 'incantation':310C 'include':331C 'infuriating':220C 'interactive':624C 'interesting':151C 'interpreter':128C,147C 'into':543C 'is':121C,154C,240C,637C 'it':45C,119C,194C,406C,467C,549C,673C,686C 'iterated':649C 'keep':133C 'kept':209C 'kind':255C 'less':454C 'library':564C 'list':391C 'little':345C 'llms':20B 'long':513C 'lot':410C,542C 'm':91C,224C 'make':183C,250C 'me':400C,555C,660C 'mean':339C 'measured':436C 'messages':52C 'mini':447C 'more':109C 'mostly':35C 'my':417C,491C 'myself':528C 'name':577C,591C,612C,617C 'name-of-vector-store':576C,590C 'name-of-vector-store1':611C 'name-of-vector-store2':616C 'need':78C 'new':384C,586C,671C,696C 'now':275C 'obtuse':346C 'of':135C,168C,198C,212C,231C,256C,266C,281C,290C,294C,376C,392C,411C,431C,458C,477C,578C,592C,613C,618C,692C 'off':664C 'old':373C 'on':71C,264C,534C,551C,650C 'one':663C 'one-off':662C 'only':114C 'openai':1A,17B,38C,126C,171C,207C,472C,525C,570C,608C 'openai-file-chat':569C,607C 'openaidevs':699C 'optional':60C 'other':150C 'out':350C,388C,669C 'packages':142C 'page':493C,537C 'pass':80C 'passed':600C 'pdf':374C,494C,581C 'platform.openai.com':43C,158C,426C,698C 'platform.openai.com/docs/assistants/overview).':42C 'platform.openai.com/docs/assistants/tools/file-search).':157C 'platform.openai.com/docs/assistants/tools/file-search/customizing-file-search-settings)),':425C 'posed':190C 'pretty':92C,512C 'previous':82C 'prices':448C 'prior':204C 'productive':690C 'programming':28B 'promising':357C 'prompted':548C 'prototyping':693C 'provide':473C 'provides':46C 'pulled':407C 'python':141C,557C 'quarter':457C 'question':398C,636C 'questions':189C 'quite':106C 'rag':19B,200C,227C 'ranking':9A 'regular':463C 'relevance':6A,239C 'response':301C 'result':5A 'results':354C,423C 'retrieve':288C,318C 'round':280C 'run':276C,311C,323C,325C 'runs':316C 's':39C,140C,195C,359C,674C 'scored':237C,306C 'scrape':125C 'script':123C 'search':4A,13B,32B,156C,422C 'see':336C 'seems':495C 'server':73C 'should':509C 'simonwillison.net':202C 'simonwillison.net/tags/rag/).':201C 'snippets':393C 'so':74C,111C,506C,529C 'sonnet':24B,546C 'spatialite':405C 'specified':645C 'spread':419C 'standard':51C 'starts':622C 'step':278C,312C,327C,329C 'step_details.tool':332C 'steps':317C 'storage':479C,488C 'store':67C,175C,181C,580C,588C,594C,606C 'store1':615C 'store2':620C 'stored':505C 'stores':647C 'stretch':510C 'system':228C 't':77C,249C,518C,682C 'taken':498C 'tell':399C 'than':455C 'that':66C,246C,449C,490C,507C,535C,605C,679C 'the':72C,81C,101C,113C,149C,176C,210C,229C,241C,267C,284C,295C,300C,308C,341C,353C,377C,382C,389C,397C,524C,540C,561C,566C,598C,602C,627C,635C,644C,670C,695C 'their':50C,88C,95C,138C,196C 'them':174C,184C 'then':287C,482C,547C 'they':304C,632C 'thing':115C 'this':214C,219C,269C,349C,552C,583C,621C,651C 'thread':319C,321C 'threads':70C,315C 'through':523C 'time':631C 'times':654C 'to':49C,62C,79C,87C,104C,124C,132C,137C,186C,191C,205C,258C,262C,386C,395C,403C,475C,496C,521C,601C,604C,658C 'today':206C,351C 'tokens':434C 'tool':268C 'tools':64C 'top':265C 'total':430C 'track':134C 'transcript':362C 'tried':348C 'trying':668C 'ttok':438C 'txt':582C 'understanding':245C 'undocumented':216C 'up':474C,499C 'updates':136C 'upload':162C 'use':259C,404C 'used':118C,298C,381C,394C 'user':628C 'using':307C,560C,643C 'variety':167C 've':34C,117C 'vector':12B,180C,478C,487C,579C,587C,593C,614C,619C,646C 'vector-search':11B 'version':197C 'very':356C,689C 'was':687C 'way':514C,691C 'ways':402C 'we':648C 'web':536C 'were':297C,305C,355C 'what':254C,337C 'when':222C 'where':54C,629C 'which':292C 'whole':242C,541C 'wide':166C 'will':172C 'with':7A,59C,84C,94C,366C,462C,565C,626C 'without':244C 'work':522C 'worked':215C 'would':450C,468C 'write':554C 'yet':684C 'you':55C,75C,160C,273C 'your':192C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": true,
"is_draft": false,
"title": ""
},
{
"id": 8973,
"slug": "agentic-browser-security",
"link_url": "https://brave.com/blog/comet-prompt-injection/",
"link_title": "Agentic Browser Security: Indirect Prompt Injection in Perplexity Comet",
"via_url": null,
"via_title": null,
"commentary": "The security team from Brave took a look at Comet, the LLM-powered \"agentic browser\" extension from Perplexity, and unsurprisingly found security holes you can drive a truck through.\r\n\r\n> The vulnerability we\u2019re discussing in this post lies in how Comet processes webpage content: when users ask it to \u201cSummarize this webpage,\u201d Comet feeds a part of the webpage directly to its LLM without distinguishing between the user\u2019s instructions and untrusted content from the webpage. This allows attackers to embed indirect prompt injection payloads that the AI will execute as commands. For instance, an attacker could gain access to a user\u2019s emails from a prepared piece of text in a page in another tab.\r\n\r\nVisit a Reddit post with Comet and ask it to summarize the thread, and malicious instructions in a post there can trick Comet into accessing web pages in another tab to extract the user's email address, then perform all sorts of actions like triggering an account recovery flow and grabbing the resulting code from a logged in Gmail session.\r\n\r\nPerplexity attempted to mitigate the issues reported by Brave... but an update to the Brave post later confirms that those fixes were later defeated and the vulnerability remains. \r\n\r\nHere's where things get difficult: Brave themselves are developing an agentic browser feature called Leo. Brave's security team describe the following as a \"potential mitigation\" to the issue with Comet:\r\n\r\n> The browser should clearly separate the user\u2019s instructions from the website\u2019s contents when sending them as context to the model. The contents of the page should always be treated as untrusted.\r\n\r\nIf only it were that easy! This is the core problem at the heart of prompt injection which we've been talking about for [nearly three years](https://simonwillison.net/series/prompt-injection/) - to an LLM the trusted instructions and untrusted content are concatenated together into the same stream of tokens, and to date (despite many attempts) nobody has demonstrated a convincing and effective way of distinguishing between the two.\r\n\r\nThere's an element of \"those in glass houses shouldn't throw stones here\" - I strongly expect that the *entire concept* of an agentic browser extension is fatally flawed and cannot be built safely.\r\n\r\nOne piece of good news: this [Hacker News conversation](https://news.ycombinator.com/item?id=45004846) about this issue was almost entirely populated by people who already understand how serious this issue is and why the proposed solutions were unlikely to work. That's new: I'm used to seeing people misjudge and underestimate the severity of this problem, but it looks like the tide is finally turning there.\r\n\r\n**Update**: in [a comment on Hacker News](https://news.ycombinator.com/item?id=45004846#45017568) Brave security lead Shivan Kaul Sahib confirms that they are aware of [the CaMeL paper](https://simonwillison.net/2025/Apr/11/camel/), which remains my personal favorite example of a credible approach to this problem.",
"created": "2025-08-25T09:39:15+00:00",
"metadata": {},
"search_document": "'/2025/apr/11/camel/),':491C '/item?id=45004846#45017568)':473C '/item?id=45004846)':410C '/series/prompt-injection/)':327C 'a':34C,55C,83C,129C,134C,140C,146C,162C,200C,257C,355C,466C,499C 'about':320C,411C 'access':127C 'accessing':169C 'account':191C 'actions':187C 'address':181C 'agentic':1A,42C,244C,388C 'agents':23B,26B 'ai':12B,18B,22B,116C 'ai-agents':21B 'all':184C 'allows':106C 'almost':415C 'already':421C 'always':293C 'an':123C,190C,215C,243C,329C,367C,387C 'and':47C,99C,151C,158C,194C,229C,334C,346C,357C,394C,428C,447C 'another':143C,173C 'approach':501C 'are':241C,337C,483C 'as':119C,256C,282C,296C 'ask':75C,152C 'at':36C,309C 'attacker':124C 'attackers':107C 'attempted':206C 'attempts':351C 'aware':484C 'be':294C,396C 'been':318C 'between':94C,362C 'brave':27B,32C,213C,219C,239C,249C,474C 'brave.com':505C 'browser':2A,25B,43C,245C,266C,389C 'browser-agents':24B 'browsers':10B 'built':397C 'but':214C,454C 'by':212C,418C 'called':247C 'camel':487C 'can':53C,165C 'cannot':395C 'clearly':268C 'code':198C 'comet':9A,37C,69C,81C,150C,167C,264C 'commands':120C 'comment':467C 'concatenated':338C 'concept':385C 'confirms':222C,480C 'content':72C,101C,336C 'contents':278C,288C 'context':283C 'conversation':407C 'convincing':356C 'core':307C 'could':125C 'credible':500C 'date':348C 'defeated':228C 'demonstrated':354C 'describe':253C 'despite':349C 'developing':242C 'difficult':238C 'directly':88C 'discussing':62C 'distinguishing':93C,361C 'drive':54C 'easy':303C 'effective':358C 'element':368C 'email':180C 'emails':132C 'embed':109C 'entire':384C 'entirely':416C 'example':497C 'execute':118C 'expect':381C 'extension':44C,390C 'extract':176C 'fatally':392C 'favorite':496C 'feature':246C 'feeds':82C 'finally':461C 'fixes':225C 'flawed':393C 'flow':193C 'following':255C 'for':121C,321C 'found':49C 'from':31C,45C,102C,133C,199C,274C 'gain':126C 'generative':17B 'generative-ai':16B 'get':237C 'glass':372C 'gmail':203C 'good':402C 'grabbing':195C 'hacker':405C,469C 'has':353C 'heart':311C 'here':233C,378C 'holes':51C 'houses':373C 'how':68C,423C 'i':379C,440C 'if':298C 'in':7A,63C,67C,139C,142C,161C,172C,202C,371C,465C 'indirect':4A,110C 'injection':6A,15B,112C,314C 'instance':122C 'instructions':98C,160C,273C,333C 'into':168C,340C 'is':305C,391C,427C,460C 'issue':262C,413C,426C 'issues':210C 'it':76C,153C,300C,455C 'its':90C 'kaul':478C 'later':221C,227C 'lead':476C 'leo':248C 'lies':66C 'like':188C,457C 'llm':40C,91C,330C 'llm-powered':39C 'llms':19B 'logged':201C 'look':35C 'looks':456C 'm':441C 'malicious':159C 'many':350C 'misjudge':446C 'mitigate':208C 'mitigation':259C 'model':286C 'my':494C 'nearly':322C 'new':439C 'news':403C,406C,470C 'news.ycombinator.com':409C,472C 'news.ycombinator.com/item?id=45004846#45017568)':471C 'news.ycombinator.com/item?id=45004846)':408C 'nobody':352C 'of':85C,137C,186C,289C,312C,344C,360C,369C,386C,401C,451C,485C,498C 'on':468C 'one':399C 'only':299C 'page':141C,291C 'pages':171C 'paper':488C 'part':84C 'payloads':113C 'people':419C,445C 'perform':183C 'perplexity':8A,20B,46C,205C 'personal':495C 'piece':136C,400C 'populated':417C 'post':65C,148C,163C,220C 'potential':258C 'powered':41C 'prepared':135C 'problem':308C,453C,504C 'processes':70C 'prompt':5A,14B,111C,313C 'prompt-injection':13B 'proposed':431C 're':61C 'recovery':192C 'reddit':147C 'remains':232C,493C 'reported':211C 'resulting':197C 's':97C,131C,179C,234C,250C,272C,277C,366C,438C 'safely':398C 'sahib':479C 'same':342C 'security':3A,11B,29C,50C,251C,475C 'seeing':444C 'sending':280C 'separate':269C 'serious':424C 'session':204C 'severity':450C 'shivan':477C 'should':267C,292C 'shouldn':374C 'simonwillison.net':326C,490C 'simonwillison.net/2025/apr/11/camel/),':489C 'simonwillison.net/series/prompt-injection/)':325C 'solutions':432C 'sorts':185C 'stones':377C 'stream':343C 'strongly':380C 'summarize':78C,155C 't':375C 'tab':144C,174C 'talking':319C 'team':30C,252C 'text':138C 'that':114C,223C,302C,382C,437C,481C 'the':28C,38C,58C,86C,95C,103C,115C,156C,177C,196C,209C,218C,230C,254C,261C,265C,270C,275C,285C,287C,290C,306C,310C,331C,341C,363C,383C,430C,449C,458C,486C 'them':281C 'themselves':240C 'then':182C 'there':164C,365C,463C 'they':482C 'things':236C 'this':64C,79C,105C,304C,404C,412C,425C,452C,503C 'those':224C,370C 'thread':157C 'three':323C 'through':57C 'throw':376C 'tide':459C 'to':77C,89C,108C,128C,154C,175C,207C,217C,260C,284C,328C,347C,435C,443C,502C 'together':339C 'tokens':345C 'took':33C 'treated':295C 'trick':166C 'triggering':189C 'truck':56C 'trusted':332C 'turning':462C 'two':364C 'underestimate':448C 'understand':422C 'unlikely':434C 'unsurprisingly':48C 'untrusted':100C,297C,335C 'update':216C,464C 'used':442C 'user':96C,130C,178C,271C 'users':74C 've':317C 'visit':145C 'vulnerability':59C,231C 'was':414C 'way':359C 'we':60C,316C 'web':170C 'webpage':71C,80C,87C,104C 'website':276C 'were':226C,301C,433C 'when':73C,279C 'where':235C 'which':315C,492C 'who':420C 'why':429C 'will':117C 'with':149C,263C 'without':92C 'work':436C 'years':324C 'you':52C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": true,
"is_draft": false,
"title": ""
},
{
"id": 3777,
"slug": "brendan",
"link_url": "http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html",
"link_title": "Brendan Eich: Popularity",
"via_url": null,
"via_title": null,
"commentary": "I never knew that Brendan went to Netscape on the promise of \"doing Scheme in the browser\".",
"created": "2008-04-04T07:30:24+00:00",
"metadata": {},
"search_document": "'brendan':1A,12C 'brendaneich':4B 'browser':24C 'doing':20C 'eich':2A 'i':8C 'in':22C 'javascript':5B 'knew':10C 'netscape':6B,15C 'never':9C 'of':19C 'on':16C 'popularity':3A 'promise':18C 'scheme':7B,21C 'that':11C 'the':17C,23C 'to':14C 'weblogs.mozillazine.org':25C 'went':13C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
},
{
"id": 387,
"slug": "perl",
"link_url": "http://story.news.yahoo.com/news?tmpl=story&u=/nf/20040218/tc_nf/23197",
"link_title": "Perl Gets Extreme Makeover",
"via_url": null,
"via_title": null,
"commentary": "Surprisingly informative overview of Perl 6 from Yahoo! News.",
"created": "2004-02-20T04:17:20+00:00",
"metadata": {},
"search_document": "'6':10C 'extreme':3A 'from':11C 'gets':2A 'informative':6C 'makeover':4A 'news':13C 'of':8C 'overview':7C 'perl':1A,9C 'story.news.yahoo.com':14C 'surprisingly':5C 'yahoo':12C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
},
{
"id": 389,
"slug": "big",
"link_url": "http://www.gladwell.com/2004/2004_01_12_a_suv.html",
"link_title": "Big and Bad",
"via_url": "http://rc3.org/cgi-bin/less.pl?arg=5963",
"via_title": "rc3.org | The SUV Menace",
"commentary": "Why SUV safety is a myth.",
"created": "2004-02-20T19:17:37+00:00",
"metadata": {},
"search_document": "'a':8C 'and':2A 'bad':3A 'big':1A 'is':7C 'menace':14C 'myth':9C 'rc3.org':11C 'safety':6C 'suv':5C,13C 'the':12C 'why':4C 'www.gladwell.com':10C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
},
{
"id": 5170,
"slug": "breakfast",
"link_url": "http://breakfast-instapaper.appspot.com/",
"link_title": "Breakfast Instapaper",
"via_url": null,
"via_title": null,
"commentary": "Handy tool for selecting and bulk-submitting stories from today's Guardian and NYTimes to your Instapaper account, by Daniel Vydra.",
"created": "2010-04-29T11:49:02+00:00",
"metadata": {},
"search_document": "'account':25C 'and':11C,20C 'breakfast':1A 'breakfast-instapaper.appspot.com':29C 'bulk':13C 'bulk-submitting':12C 'by':26C 'daniel':27C 'danielvydra':3B 'for':9C 'from':16C 'guardian':4B,19C 'handy':7C 'instapaper':2A,5B,24C 'nytimes':6B,21C 's':18C 'selecting':10C 'stories':15C 'submitting':14C 'to':22C 'today':17C 'tool':8C 'vydra':28C 'your':23C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
},
{
"id": 5167,
"slug": "graph",
"link_url": "http://www.25hoursaday.com/weblog/2010/04/24/FacebooksOpenGraphProtocolFromAWebDevelopersPerspective.aspx",
"link_title": "Facebook's Open Graph Protocol from a Web Developer's Perspective",
"via_url": null,
"via_title": null,
"commentary": "Best explanation I've seen yet of what the Open Graph protocol actually does. Add the RDFa-inspired metadata and a Like button to a standard web page representing a place, group, product, website or one of another limited set of object types and people can \"Like\" it just like they might join a fan page within Facebook itself. You can then send news feed updates to all of that page's subscribers. The bootstrapped metadata can then benefit other services as well.",
"created": "2010-04-26T13:21:32+00:00",
"metadata": {},
"search_document": "'a':7A,38C,42C,47C,71C 'actually':29C 'add':31C 'all':85C 'and':37C,61C 'another':55C 'as':99C 'benefit':96C 'best':17C 'bootstrapped':92C 'button':40C 'can':63C,78C,94C 'dareobasanjo':12B 'developer':9A 'does':30C 'explanation':18C 'facebook':1A,13B,75C 'fan':72C 'feed':82C 'from':6A 'graph':4A,27C 'group':49C 'i':19C 'inspired':35C 'it':65C 'itself':76C 'join':70C 'just':66C 'like':39C,64C,67C 'limited':56C 'metadata':14B,36C,93C 'might':69C 'news':81C 'object':59C 'of':23C,54C,58C,86C 'one':53C 'open':3A,26C 'opengraph':15B 'opengraphprotocol':16B 'or':52C 'other':97C 'page':45C,73C,88C 'people':62C 'perspective':11A 'place':48C 'product':50C 'protocol':5A,28C 'rdfa':34C 'rdfa-inspired':33C 'representing':46C 's':2A,10A,89C 'seen':21C 'send':80C 'services':98C 'set':57C 'standard':43C 'subscribers':90C 'that':87C 'the':25C,32C,91C 'then':79C,95C 'they':68C 'to':41C,84C 'types':60C 'updates':83C 've':20C 'web':8A,44C 'website':51C 'well':100C 'what':24C 'within':74C 'www.25hoursaday.com':101C 'yet':22C 'you':77C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
},
{
"id": 388,
"slug": "wackycam",
"link_url": "http://stevenf.com/mt/archives/000370.php",
"link_title": "WackyCam",
"via_url": null,
"via_title": null,
"commentary": "Play with your iSight.",
"created": "2004-02-20T19:17:12+00:00",
"metadata": {},
"search_document": "'isight':5C 'play':2C 'stevenf.com':6C 'wackycam':1A 'with':3C 'your':4C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
},
{
"id": 386,
"slug": "om",
"link_url": "http://gigaom.com/archives/2004/02/pmachine_is_now_expression_engine.html",
"link_title": "Om Malik on Broadband: pMachine is now Expression Engine",
"via_url": null,
"via_title": null,
"commentary": "Interesting interview with the man behind pMachine and Expression Engine.",
"created": "2004-02-20T03:47:08+00:00",
"metadata": {},
"search_document": "'and':17C 'behind':15C 'broadband':4A 'engine':9A,19C 'expression':8A,18C 'gigaom.com':20C 'interesting':10C 'interview':11C 'is':6A 'malik':2A 'man':14C 'now':7A 'om':1A 'on':3A 'pmachine':5A,16C 'the':13C 'with':12C",
"import_ref": null,
"card_image": null,
"series_id": null,
"use_markdown": false,
"is_draft": false,
"title": ""
}
] |