<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: mobile</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/mobile.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-07-17T19:38:50+00:00</updated><author><name>Simon Willison</name></author><entry><title>Vibe scraping and vibe coding a schedule app for Open Sauce 2025 entirely on my phone</title><link href="https://simonwillison.net/2025/Jul/17/vibe-scraping/#atom-tag" rel="alternate"/><published>2025-07-17T19:38:50+00:00</published><updated>2025-07-17T19:38:50+00:00</updated><id>https://simonwillison.net/2025/Jul/17/vibe-scraping/#atom-tag</id><summary type="html">
    &lt;p&gt;This morning, working entirely on my phone, I scraped a conference website and vibe coded up an alternative UI for interacting with the schedule using a combination of OpenAI Codex and Claude Artifacts.&lt;/p&gt;
&lt;p&gt;This weekend is &lt;a href="https://opensauce.com/"&gt;Open Sauce 2025&lt;/a&gt;, the third edition of the Bay Area conference for YouTube creators in the science and engineering space. I have a couple of friends going and they were complaining that the official schedule was difficult to navigate on a phone - it's not even linked from the homepage on mobile, and once you do find &lt;a href="https://opensauce.com/agenda/"&gt;the agenda&lt;/a&gt; it isn't particularly mobile-friendly.&lt;/p&gt;
&lt;p&gt;We were out for coffee this morning so I only had my phone, but I decided to see if I could fix it anyway.&lt;/p&gt;
&lt;p&gt;TLDR: Working entirely on my iPhone, using a combination of &lt;a href="https://chatgpt.com/codex"&gt;OpenAI Codex&lt;/a&gt; in the ChatGPT mobile app and Claude Artifacts via the Claude app, I was able to scrape the full schedule and then build and deploy this: &lt;a href="https://tools.simonwillison.net/open-sauce-2025"&gt;tools.simonwillison.net/open-sauce-2025&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/open-sauce-2025-card.jpg" alt="Screenshot of a blue page, Open Sauce 2025, July 18-20 2025, Download Calendar ICS button, then Friday 18th and Saturday 18th and Sunday 20th pill buttons, Friday is selected, the Welcome to Open Sauce with William Osman event on the Industry Stage is visible." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;The site offers a faster loading and more useful agenda view, but more importantly it includes an option to "Download Calendar (ICS)" which allows mobile phone users (Android and iOS) to easily import the schedule events directly into their calendar app of choice.&lt;/p&gt;
&lt;p&gt;Here are some detailed notes on how I built it.&lt;/p&gt;
&lt;h4 id="scraping-the-schedule"&gt;Scraping the schedule&lt;/h4&gt;
&lt;p&gt;Step one was to get that schedule in a structured format. I don't have good tools for viewing source on my iPhone, so I took a different approach to turning the schedule site into structured data.&lt;/p&gt;
&lt;p&gt;My first thought was to screenshot the schedule on my phone and then dump the images into a vision LLM - but the schedule was long enough that I didn't feel like scrolling through several different pages and stitching together dozens of images.&lt;/p&gt;
&lt;p&gt;If I was working on a laptop I'd turn to scraping: I'd dig around in the site itself and figure out where the data came from, then write code to extract it out.&lt;/p&gt;
&lt;p&gt;How could I do the same thing working on my phone?&lt;/p&gt;
&lt;p&gt;I decided to use &lt;strong&gt;OpenAI Codex&lt;/strong&gt; - the &lt;a href="https://simonwillison.net/2025/May/16/openai-codex/"&gt;hosted tool&lt;/a&gt;, not the confusingly named &lt;a href="https://simonwillison.net/2025/Apr/16/openai-codex/"&gt;CLI utility&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Codex recently &lt;a href="https://simonwillison.net/2025/Jun/3/codex-agent-internet-access/"&gt;grew the ability&lt;/a&gt; to interact with the internet while attempting to resolve a task. I have a dedicated Codex "environment" configured against a GitHub repository that doesn't do anything else, purely so I can run internet-enabled sessions there that can execute arbitrary network-enabled commands.&lt;/p&gt;
&lt;p&gt;I started a new task there (using the Codex interface inside the ChatGPT iPhone app) and prompted:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Install playwright and use it to visit https://opensauce.com/agenda/ and grab the full details of all three day schedules from the tabs - Friday and Saturday and Sunday - then save and on Data in as much detail as possible in a JSON file and submit that as a PR&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Codex is frustrating in that you only get one shot: it can go away and work autonomously on a task for a long time, but while it's working you can't give it follow-up prompts. You can wait for it to finish entirely and then tell it to try again in a new session, but ideally the instructions you give it are enough for it to get to the finish state where it submits a pull request against your repo with the results.&lt;/p&gt;
&lt;p&gt;I got lucky: my above prompt worked exactly as intended.&lt;/p&gt;
&lt;p&gt;Codex churned for a &lt;em&gt;13 minutes&lt;/em&gt;! I was sat chatting in a coffee shop, occasionally checking the logs to see what it was up to.&lt;/p&gt;
&lt;p&gt;It tried a whole bunch of approaches, all involving running the Playwright Python library to interact with the site. You can see &lt;a href="https://chatgpt.com/s/cd_687945dea5f48191892e0d73ebb45aa4"&gt;the full transcript here&lt;/a&gt;. It includes notes like "&lt;em&gt;Looks like xxd isn't installed. I'll grab "vim-common" or "xxd" to fix it.&lt;/em&gt;".&lt;/p&gt;
&lt;p&gt;Eventually it downloaded an enormous obfuscated chunk of JavaScript called &lt;a href="https://opensauce.com/wp-content/uploads/2025/07/schedule-overview-main-1752724893152.js"&gt;schedule-overview-main-1752724893152.js&lt;/a&gt; (316KB) and then ran a complex sequence of grep, grep, sed, strings, xxd and dd commands against it to figure out the location of the raw schedule data in order to extract it out.&lt;/p&gt;
&lt;p&gt;Here's the eventual &lt;a href="https://github.com/simonw/.github/blob/f671bf57f7c20a4a7a5b0642837811e37c557499/extract_schedule.py"&gt;extract_schedule.py&lt;/a&gt; Python script it wrote, which uses Playwright to save that &lt;code&gt;schedule-overview-main-1752724893152.js&lt;/code&gt; file and then extracts the raw data using the following code (which calls Node.js inside Python, just so it can use the JavaScript &lt;code&gt;eval()&lt;/code&gt; function):&lt;/p&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;node_script&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; (
    &lt;span class="pl-s"&gt;"const fs=require('fs');"&lt;/span&gt;
    &lt;span class="pl-s"&gt;f"const d=fs.readFileSync('&lt;span class="pl-s1"&gt;&lt;span class="pl-kos"&gt;{&lt;/span&gt;&lt;span class="pl-s1"&gt;tmp_path&lt;/span&gt;&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/span&gt;','utf8');"&lt;/span&gt;
    &lt;span class="pl-s"&gt;"const m=d.match(/var oo=(&lt;span class="pl-cce"&gt;\\&lt;/span&gt;{.*?&lt;span class="pl-cce"&gt;\\&lt;/span&gt;});/s);"&lt;/span&gt;
    &lt;span class="pl-s"&gt;"if(!m){throw new Error('not found');}"&lt;/span&gt;
    &lt;span class="pl-s"&gt;"const obj=eval('(' + m[1] + ')');"&lt;/span&gt;
    &lt;span class="pl-s"&gt;f"fs.writeFileSync('&lt;span class="pl-s1"&gt;&lt;span class="pl-kos"&gt;{&lt;/span&gt;&lt;span class="pl-c1"&gt;OUTPUT_FILE&lt;/span&gt;&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/span&gt;', JSON.stringify(obj, null, 2));"&lt;/span&gt;
)
&lt;span class="pl-s1"&gt;subprocess&lt;/span&gt;.&lt;span class="pl-c1"&gt;run&lt;/span&gt;([&lt;span class="pl-s"&gt;'node'&lt;/span&gt;, &lt;span class="pl-s"&gt;'-e'&lt;/span&gt;, &lt;span class="pl-s1"&gt;node_script&lt;/span&gt;], &lt;span class="pl-s1"&gt;check&lt;/span&gt;&lt;span class="pl-c1"&gt;=&lt;/span&gt;&lt;span class="pl-c1"&gt;True&lt;/span&gt;)&lt;/pre&gt;
&lt;p&gt;As instructed, it then filed &lt;a href="https://github.com/simonw/.github/pull/1"&gt;a PR against my repo&lt;/a&gt;. It included the Python Playwright script, but more importantly it also included that full extracted &lt;a href="https://github.com/simonw/.github/blob/f671bf57f7c20a4a7a5b0642837811e37c557499/schedule.json"&gt;schedule.json&lt;/a&gt; file. That meant I now had the schedule data, with a  &lt;code&gt;raw.githubusercontent.com&lt;/code&gt;  URL with open CORS headers that could be fetched by a web app!&lt;/p&gt;
&lt;h4 id="building-the-web-app"&gt;Building the web app&lt;/h4&gt;
&lt;p&gt;Now that I had the data, the next step was to build a web application to preview it and serve it up in a more useful format.&lt;/p&gt;
&lt;p&gt;I decided I wanted two things: a nice mobile friendly interface for browsing the schedule, and mechanism for importing that schedule into a calendar application, such as Apple or Google Calendar.&lt;/p&gt;
&lt;p&gt;It took me several false starts to get this to work. The biggest challenge was getting that 63KB of schedule JSON data into the app. I tried a few approaches here, all on my iPhone while sitting in coffee shop and later while driving with a friend to drop them off at the closest BART station.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Using ChatGPT Canvas and o3, since unlike Claude Artifacts a Canvas can fetch data from remote URLs if you allow-list that domain. I later found out that &lt;a href="https://chatgpt.com/share/687948b7-e8b8-8006-a450-0c07bdfd7f85"&gt;this had worked&lt;/a&gt; when I viewed it on my laptop, but on my phone it threw errors so I gave up on it.&lt;/li&gt;
&lt;li&gt;Uploading the JSON to Claude and telling it to build an artifact that read the file directly - this &lt;a href="https://claude.ai/share/25297074-37a9-4583-bc2f-630f6dea5c5d"&gt;failed with an error&lt;/a&gt; "undefined is not an object (evaluating 'window.fs.readFile')". The Claude 4 system prompt &lt;a href="https://simonwillison.net/2025/May/25/claude-4-system-prompt/#artifacts-the-missing-manual"&gt;had lead me to expect this to work&lt;/a&gt;, I'm not sure why it didn't.&lt;/li&gt;
&lt;li&gt;Having Claude copy the full JSON into the artifact. This took too long - typing out 63KB of JSON is not a sensible use of LLM tokens, and it flaked out on me when my connection went intermittent driving through a tunnel.&lt;/li&gt;
&lt;li&gt;Telling Claude to fetch from the URL to that schedule JSON instead. This was my last resort because the Claude Artifacts UI blocks access to external URLs, so you have to copy and paste the code out to a separate interface (on an iPhone, which still lacks a "select all" button) making for a frustrating process.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That final option worked! Here's the full sequence of prompts I used with Claude to get to a working implementation - &lt;a href="https://claude.ai/share/e391bbcc-09a2-4f86-9bec-c6def8fc8dc9"&gt;full transcript here&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Use your analyst tool to read this JSON file and show me the top level keys&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This was to prime Claude - I wanted to remind it about its &lt;code&gt;window.fs.readFile&lt;/code&gt; function and have it read enough of the JSON to understand the structure.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Build an artifact with no react that turns the schedule into a nice mobile friendly webpage - there are three days Friday, Saturday and Sunday, which corresponded to the 25th and 26th and 27th of July 2025&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Don’t copy the raw JSON over to the artifact - use your fs function to read it instead&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Also include a button to download ICS at the top of the page which downloads a ICS version of the schedule&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I had noticed that the schedule data had keys for "friday" and "saturday" and "sunday" but no indication of the dates, so I told it those. It turned out later I'd got these wrong!&lt;/p&gt;
&lt;p&gt;This got me a version of the page that failed with an error, because that &lt;code&gt;fs.readFile()&lt;/code&gt; couldn't load the data from the artifact for some reason. So I fixed that with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Change it so instead of using the readFile thing it fetches the same JSON from  https://raw.githubusercontent.com/simonw/.github/f671bf57f7c20a4a7a5b0642837811e37c557499/schedule.json&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;... then copied the HTML out to a Gist and previewed it with &lt;a href="https://gistpreview.github.io/"&gt;gistpreview.github.io&lt;/a&gt; - here's &lt;a href="https://gistpreview.github.io/?06a5d1f3bf0af81d55a411f32b2f37c7"&gt;that preview&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Then we spot-checked it, since there are &lt;em&gt;so many ways&lt;/em&gt; this could have gone wrong. Thankfully the schedule JSON itself never round-tripped through an LLM so we didn't need to worry about hallucinated session details, but this was almost pure vibe coding so there was a big risk of a mistake sneaking through.&lt;/p&gt;
&lt;p&gt;I'd set myself a deadline of "by the time we drop my friend at the BART station" and I hit that deadline with just seconds to spare. I pasted the resulting HTML &lt;a href="https://github.com/simonw/tools/blob/main/open-sauce-2025.html"&gt;into my simonw/tools GitHub repo&lt;/a&gt; using the GitHub mobile web interface which deployed it to that final &lt;a href="https://tools.simonwillison.net/open-sauce-2025"&gt;tools.simonwillison.net/open-sauce-2025&lt;/a&gt; URL.&lt;/p&gt;
&lt;p&gt;... then we noticed that we &lt;em&gt;had&lt;/em&gt; missed a bug: I had given it the dates of "25th and 26th and 27th of July 2025" but actually that was a week too late, the correct dates were July 18th-20th.&lt;/p&gt;
&lt;p&gt;Thankfully I have Codex configured against my &lt;code&gt;simonw/tools&lt;/code&gt; repo as well, so fixing that was a case of prompting a new Codex session with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;The open sauce schedule got the dates wrong - Friday is 18 July 2025 and Saturday is 19 and Sunday is 20 - fix it&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here's &lt;a href="https://chatgpt.com/s/cd_68794c97a3d88191a2cbe9de78103334"&gt;that Codex transcript&lt;/a&gt;, which resulted in &lt;a href="https://github.com/simonw/tools/pull/34"&gt;this PR&lt;/a&gt; which I landed and deployed, again using the GitHub mobile web interface.&lt;/p&gt;
&lt;h4 id="what-this-all-demonstrates"&gt;What this all demonstrates&lt;/h4&gt;
&lt;p&gt;So, to recap: I was able to scrape a website (without even a view source too), turn the resulting JSON data into a mobile-friendly website, add an ICS export feature and deploy the results to a static hosting platform (GitHub Pages) working entirely on my phone.&lt;/p&gt;
&lt;p&gt;If I'd had a laptop this project would have been faster, but honestly aside from a little bit more hands-on debugging I wouldn't have gone about it in a particularly different way.&lt;/p&gt;
&lt;p&gt;I was able to do other stuff at the same time - the Codex scraping project ran entirely autonomously, and the app build itself was more involved only because I had to work around the limitations of the tools I was using in terms of fetching data from external sources.&lt;/p&gt;
&lt;p&gt;As usual with this stuff, my 25+ years of previous web development experience was critical to being able to execute the project. I knew about Codex, and Artifacts, and GitHub, and Playwright, and CORS headers, and Artifacts sandbox limitations, and the capabilities of ICS files on mobile phones.&lt;/p&gt;
&lt;p&gt;This whole thing was &lt;em&gt;so much fun!&lt;/em&gt; Being able to spin up multiple coding agents directly from my phone and have them solve quite complex problems while only paying partial attention to the details is a solid demonstration of why I continue to enjoying exploring the edges of &lt;a href="https://simonwillison.net/tags/ai-assisted-programming/"&gt;AI-assisted programming&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id="update-i-removed-the-speaker-avatars"&gt;Update: I removed the speaker avatars&lt;/h4&gt;
&lt;p&gt;Here's a beautiful cautionary tale about the dangers of vibe-coding on a phone with no access to performance profiling tools. A commenter on Hacker News &lt;a href="https://news.ycombinator.com/item?id=44597405#44597808"&gt;pointed out&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The web app makes 176 requests and downloads 130 megabytes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And yeah, it did! Turns out those speaker avatar images weren't optimized, and there were over 170 of them.&lt;/p&gt;
&lt;p&gt;I told &lt;a href="https://chatgpt.com/s/cd_6879631d99c48191b1ab7f84dfab8dea"&gt;a fresh Codex instance&lt;/a&gt; "Remove the speaker avatar images from open-sauce-2025.html" and now the page weighs 93.58 KB - about 1,400 times smaller!&lt;/p&gt;
&lt;h4 id="update-2-improved-accessibility"&gt;Update 2: Improved accessibility&lt;/h4&gt;
&lt;p&gt;That same commenter &lt;a href="https://news.ycombinator.com/item?id=44597405#44597808"&gt;on Hacker News&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It's also &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; soup and largely inaccessible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yeah, this HTML isn't great:&lt;/p&gt;
&lt;div class="highlight highlight-source-js"&gt;&lt;pre&gt;&lt;span class="pl-s1"&gt;dayContainer&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;innerHTML&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;sessions&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;map&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;session&lt;/span&gt; &lt;span class="pl-c1"&gt;=&amp;gt;&lt;/span&gt; `
    &amp;lt;div class="session-card"&amp;gt;
        &amp;lt;div class="session-header"&amp;gt;
            &amp;lt;div&amp;gt;
                &amp;lt;span class="session-time"&amp;gt;&lt;span class="pl-s1"&gt;&lt;span class="pl-kos"&gt;${&lt;/span&gt;&lt;span class="pl-s1"&gt;session&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;time&lt;/span&gt;&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/span&gt;&amp;lt;/span&amp;gt;
                &amp;lt;span class="length-badge"&amp;gt;&lt;span class="pl-s1"&gt;&lt;span class="pl-kos"&gt;${&lt;/span&gt;&lt;span class="pl-s1"&gt;session&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;length&lt;/span&gt;&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/span&gt; min&amp;lt;/span&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class="session-location"&amp;gt;&lt;span class="pl-s1"&gt;&lt;span class="pl-kos"&gt;${&lt;/span&gt;&lt;span class="pl-s1"&gt;session&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;where&lt;/span&gt;&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/span&gt;&amp;lt;/&lt;span class="pl-s1"&gt;div&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;
        &amp;lt;/&lt;span class="pl-s1"&gt;div&lt;/span&gt;&lt;span class="pl-c1"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I &lt;a href="https://github.com/simonw/tools/issues/36"&gt;opened an issue&lt;/a&gt; and had both Claude Code and Codex look at it. Claude Code &lt;a href="https://github.com/simonw/tools/issues/36#issuecomment-3085516331"&gt;failed to submit a PR&lt;/a&gt; for some reason, but Codex &lt;a href="https://github.com/simonw/tools/pull/37"&gt;opened one&lt;/a&gt; with a fix that sounded good to me when I tried it with VoiceOver on iOS (using &lt;a href="https://codex-make-open-sauce-2025-h.tools-b1q.pages.dev/open-sauce-2025"&gt;a Cloudflare Pages preview&lt;/a&gt;) so I landed that. Here's &lt;a href="https://github.com/simonw/tools/commit/29c8298363869bbd4b4e7c51378c20dc8ac30c39"&gt;the diff&lt;/a&gt;, which added a hidden "skip to content" link, some &lt;code&gt;aria-&lt;/code&gt; attributes on buttons and upgraded the HTML to use &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; for the session titles.&lt;/p&gt;
&lt;p&gt;Next time I'll remember to specify accessibility as a requirement in the initial prompt. I'm disappointed that Claude didn't consider that without me having to ask.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/icalendar"&gt;icalendar&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scraping"&gt;scraping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tools"&gt;tools&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/playwright"&gt;playwright&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-artifacts"&gt;claude-artifacts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-agents"&gt;ai-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/async-coding-agents"&gt;async-coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-to-app"&gt;prompt-to-app&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="definitions"/><category term="github"/><category term="icalendar"/><category term="mobile"/><category term="scraping"/><category term="tools"/><category term="ai"/><category term="playwright"/><category term="openai"/><category term="generative-ai"/><category term="chatgpt"/><category term="llms"/><category term="ai-assisted-programming"/><category term="claude"/><category term="claude-artifacts"/><category term="ai-agents"/><category term="vibe-coding"/><category term="coding-agents"/><category term="async-coding-agents"/><category term="prompt-to-app"/></entry><entry><title>What's New In Python 3.13</title><link href="https://simonwillison.net/2024/Oct/7/whats-new-in-python-313/#atom-tag" rel="alternate"/><published>2024-10-07T19:36:52+00:00</published><updated>2024-10-07T19:36:52+00:00</updated><id>https://simonwillison.net/2024/Oct/7/whats-new-in-python-313/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://docs.python.org/3/whatsnew/3.13.html"&gt;What&amp;#x27;s New In Python 3.13&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
It's Python 3.13 release day today. The big signature features  are a &lt;a href="https://docs.python.org/3.13/whatsnew/3.13.html#whatsnew313-better-interactive-interpreter"&gt;better REPL&lt;/a&gt; with improved error messages, an option to &lt;a href="https://docs.python.org/3.13/whatsnew/3.13.html#free-threaded-cpython"&gt;run Python without the GIL&lt;/a&gt; and the beginnings of &lt;a href="https://docs.python.org/3.13/whatsnew/3.13.html#an-experimental-just-in-time-jit-compiler"&gt;the new JIT&lt;/a&gt;. Here are some of the smaller highlights I spotted while perusing the release notes.&lt;/p&gt;
&lt;p&gt;iOS and Android are both now &lt;a href="https://docs.python.org/3.13/whatsnew/3.13.html#support-for-mobile-platforms"&gt;Tier 3 supported platforms&lt;/a&gt;, thanks to the efforts of Russell Keith-Magee and the &lt;a href="https://beeware.org/"&gt;Beeware&lt;/a&gt; project. Tier 3 &lt;a href="https://peps.python.org/pep-0011/#tier-3"&gt;means&lt;/a&gt; "must have a reliable buildbot" but "failures on these platforms do not block a release". This is still a really big deal for Python as a mobile development platform.&lt;/p&gt;
&lt;p&gt;There's a whole bunch of smaller stuff relevant to SQLite.&lt;/p&gt;
&lt;p&gt;Python's &lt;a href="https://docs.python.org/3.13/library/dbm.html"&gt;dbm module&lt;/a&gt; has long provided a disk-backed key-value store against multiple different backends. 3.13 introduces a new backend based on SQLite, and makes it the default.&lt;/p&gt;
&lt;div class="highlight highlight-text-python-console"&gt;&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; &lt;span class="pl-k"&gt;import&lt;/span&gt; dbm
&amp;gt;&amp;gt;&amp;gt; db &lt;span class="pl-k"&gt;=&lt;/span&gt; dbm.open(&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;/tmp/hi&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;, &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;c&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;)
&amp;gt;&amp;gt;&amp;gt; db[&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;hi&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;] &lt;span class="pl-k"&gt;=&lt;/span&gt; &lt;span class="pl-c1"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;"c"&lt;/code&gt; option means "Open database for reading and writing, creating it if it doesn’t exist".&lt;/p&gt;
&lt;p&gt;After running the above, &lt;code&gt;/tmp/hi&lt;/code&gt; was a SQLite database containing the following data:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sqlite3 /tmp/hi .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE Dict (
    key BLOB UNIQUE NOT NULL,
    value BLOB NOT NULL
  );
INSERT INTO Dict VALUES(X'6869',X'31');
COMMIT;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;dbm.open()&lt;/code&gt; function can detect which type of storage is being referenced. I found the implementation for that in the &lt;a href="https://github.com/python/cpython/blob/v3.13.0/Lib/dbm/__init__.py#L98-L189"&gt;whichdb(filename)&lt;/a&gt; function.&lt;/p&gt;
&lt;p&gt;I was hopeful that this change would mean Python 3.13 deployments would be guaranteed to ship with a more recent SQLite... but it turns out 3.15.2 is &lt;a href="https://www.sqlite.org/changes.html#version_3_15_2"&gt;from November 2016&lt;/a&gt; so still quite old:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SQLite 3.15.2 or newer is required to build the &lt;a href="https://docs.python.org/3.13/library/sqlite3.html#module-sqlite3" title="sqlite3: A DB-API 2.0 implementation using SQLite 3.x."&gt;&lt;code&gt;sqlite3&lt;/code&gt;&lt;/a&gt; extension module. (Contributed by Erlend Aasland in &lt;a href="https://github.com/python/cpython/issues/105875"&gt;gh-105875&lt;/a&gt;.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;code&gt;conn.iterdump()&lt;/code&gt; SQLite method now accepts an optional &lt;code&gt;filter=&lt;/code&gt; keyword argument taking a LIKE pattern for the tables that you want to dump. I found &lt;a href="https://github.com/python/cpython/commit/1a10437a14b13100bdf41cbdab819c33258deb65#diff-445686d2c16ed3989d2adeac33729d1b06765dcf315f117fe8668be101b1e269R35"&gt;the implementation for that here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And one last change which caught my eye because I could imagine having code that might need to be updated to reflect the new behaviour:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://docs.python.org/3.13/library/pathlib.html#pathlib.Path.glob" title="pathlib.Path.glob"&gt;&lt;code&gt;pathlib.Path.glob()&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://docs.python.org/3.13/library/pathlib.html#pathlib.Path.rglob" title="pathlib.Path.rglob"&gt;&lt;code&gt;rglob()&lt;/code&gt;&lt;/a&gt; now return both files and directories if a pattern that ends with "&lt;code&gt;**&lt;/code&gt;" is given, rather than directories only. Add a trailing slash to keep the previous behavior and only match directories.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;With the release of Python 3.13, Python 3.8 is &lt;a href="https://discuss.python.org/t/python-3-8-is-now-officially-eol/66983"&gt;officially end-of-life&lt;/a&gt;. Łukasz Langa:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you're still a user of Python 3.8, I don't blame you, it's a lovely version. But it's time to move on to newer, greater things. Whether it's typing generics in built-in collections, pattern matching, &lt;code&gt;except*&lt;/code&gt;, low-impact monitoring, or a new pink REPL, I'm sure you'll find your favorite new feature in one of the versions we still support. So upgrade today!&lt;/p&gt;
&lt;/blockquote&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/android"&gt;android&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/russell-keith-magee"&gt;russell-keith-magee&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ios"&gt;ios&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lukasz-langa"&gt;lukasz-langa&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/beeware"&gt;beeware&lt;/a&gt;&lt;/p&gt;



</summary><category term="android"/><category term="mobile"/><category term="python"/><category term="russell-keith-magee"/><category term="sqlite"/><category term="ios"/><category term="lukasz-langa"/><category term="beeware"/></entry><entry><title>You can stop using user-scalable=no and maximum-scale=1 in viewport meta tags now</title><link href="https://simonwillison.net/2023/Aug/4/you-can-stop-using-user-scalableno-and-maximum-scale1-in-viewpor/#atom-tag" rel="alternate"/><published>2023-08-04T23:41:55+00:00</published><updated>2023-08-04T23:41:55+00:00</updated><id>https://simonwillison.net/2023/Aug/4/you-can-stop-using-user-scalableno-and-maximum-scale1-in-viewpor/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://lukeplant.me.uk/blog/posts/you-can-stop-using-user-scalable-no-and-maximum-scale-1-in-viewport-meta-tags-now/"&gt;You can stop using user-scalable=no and maximum-scale=1 in viewport meta tags now&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Luke Plant points out that your meta viewport tag should stick to just “width=device-width, initial-scale=1” these days—the user-scalable=no and maximum-scale=1 attributes are no longer necessary, and have a negative impact on accessibility, especially for Android users.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/accessibility"&gt;accessibility&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html"&gt;html&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/luke-plant"&gt;luke-plant&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobileweb"&gt;mobileweb&lt;/a&gt;&lt;/p&gt;



</summary><category term="accessibility"/><category term="html"/><category term="luke-plant"/><category term="mobile"/><category term="mobileweb"/></entry><entry><title>Quoting Steven Soderbergh</title><link href="https://simonwillison.net/2023/Jun/12/steven-soderbergh/#atom-tag" rel="alternate"/><published>2023-06-12T18:13:08+00:00</published><updated>2023-06-12T18:13:08+00:00</updated><id>https://simonwillison.net/2023/Jun/12/steven-soderbergh/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://variety.com/2023/film/news/steven-soderbergh-full-circle-miniseries-upcoming-projects-ai-writers-strike-1235640731/"&gt;&lt;p&gt;Cellphones are the worst thing that’s ever happened to movies. It’s awful. [...] I think you could talk to a hundred storytellers and they would all tell you the same thing. It’s so hard to manufacture drama when everybody can get a hold of everybody all the time. It’s just not as fun as in the old days when the phone would ring and you didn’t know who was calling.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://variety.com/2023/film/news/steven-soderbergh-full-circle-miniseries-upcoming-projects-ai-writers-strike-1235640731/"&gt;Steven Soderbergh&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/screen-writing"&gt;screen-writing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;&lt;/p&gt;



</summary><category term="screen-writing"/><category term="mobile"/></entry><entry><title>viewport-preview</title><link href="https://simonwillison.net/2022/Jul/26/viewport-preview/#atom-tag" rel="alternate"/><published>2022-07-26T00:00:58+00:00</published><updated>2022-07-26T00:00:58+00:00</updated><id>https://simonwillison.net/2022/Jul/26/viewport-preview/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/simonw/viewport-preview"&gt;viewport-preview&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I built a tiny tool which lets you preview a URL in a bunch of different common browser viewport widths, using iframes.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/simonw/status/1551709715658186752"&gt;@simonw&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/css"&gt;css&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iframes"&gt;iframes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;&lt;/p&gt;



</summary><category term="css"/><category term="iframes"/><category term="mobile"/><category term="projects"/><category term="testing"/></entry><entry><title>Learning from Mini Apps</title><link href="https://simonwillison.net/2020/Nov/5/learning-mini-apps/#atom-tag" rel="alternate"/><published>2020-11-05T17:21:14+00:00</published><updated>2020-11-05T17:21:14+00:00</updated><id>https://simonwillison.net/2020/Nov/5/learning-mini-apps/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.tomayac.com/2020/11/05/learning-from-mini-apps-w3c-tpac-breakout-session/"&gt;Learning from Mini Apps&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
WeChat, Baidu, Alipay and Douyin in China are all examples of “Super apps” that can host “Mini apps” written in HTML and JavaScript by other developers and installed via in-app search or through scanning a QR code. Mini apps are granted (permission-gated) access to further system APIs via a JavaScript bridge. It’s a fascinating developer ecosystem, explored in detail here by Thomas Steiner.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/thomaswilburn/status/1324373166651809792"&gt;@thomaswilburn&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;&lt;/p&gt;



</summary><category term="javascript"/><category term="mobile"/></entry><entry><title>Machine Learning on Mobile and at the Edge: 2019 industry year-in-review</title><link href="https://simonwillison.net/2019/Dec/30/machine-learning-mobile/#atom-tag" rel="alternate"/><published>2019-12-30T22:17:39+00:00</published><updated>2019-12-30T22:17:39+00:00</updated><id>https://simonwillison.net/2019/Dec/30/machine-learning-mobile/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://heartbeat.fritz.ai/machine-learning-on-mobile-and-at-the-edge-2019-industry-year-in-review-3d783a404da4"&gt;Machine Learning on Mobile and at the Edge: 2019 industry year-in-review&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is a fantastic detailed overview of advances made in the field of machine learning on the edge (primarily on mobile devices) over 2019. I’m really excited about this trend: I love the improved privacy implications of running models on my phone without uploading data to a server, and it’s great to see techniques like Federated Learning (from Google Labs) which enable devices to privately train models in a distributed way without having to upload their training data.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/fritzlabs/status/1211697959693430784"&gt;@fritzlabs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/machine-learning"&gt;machine-learning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;&lt;/p&gt;



</summary><category term="machine-learning"/><category term="mobile"/></entry><entry><title>Announcing Envoy Mobile</title><link href="https://simonwillison.net/2019/Jun/18/announcing-envoy-mobile/#atom-tag" rel="alternate"/><published>2019-06-18T18:42:25+00:00</published><updated>2019-06-18T18:42:25+00:00</updated><id>https://simonwillison.net/2019/Jun/18/announcing-envoy-mobile/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://eng.lyft.com/announcing-envoy-mobile-5c2067d9ade0"&gt;Announcing Envoy Mobile&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is a fascinating development: Lyft’s Envoy proxy / service mesh has been widely adopted across the industry as a server-side component for adding smart routing and observability to the network calls made between services in microservice architectures. “The reality is that three 9s at the server-side edge is meaningless if the user of a mobile application is only able to complete the desired product flows a fraction of the time”—so Lyft are building a C++ embedded library companion to Envoy which is designed to be shipped as part of iOS and Android client applications. “Envoy Mobile in conjunction with Envoy in the data center will provide the ability to reason about the entire distributed system network, not just the server-side portion.” Their decision to release an early working prototype and then conduct ongoing development entirely in the open is interesting too.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microservices"&gt;microservices&lt;/a&gt;&lt;/p&gt;



</summary><category term="mobile"/><category term="microservices"/></entry><entry><title>When should you be using Web Workers?</title><link href="https://simonwillison.net/2019/Jun/15/when-should-you-be-using-web-workers/#atom-tag" rel="alternate"/><published>2019-06-15T04:31:34+00:00</published><updated>2019-06-15T04:31:34+00:00</updated><id>https://simonwillison.net/2019/Jun/15/when-should-you-be-using-web-workers/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://dassur.ma/things/when-workers/"&gt;When should you be using Web Workers?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
85% of worldwide mobile devices are massively less performant than high end iPhones. Surma argues that we should be making aggressive use of Web Workers to keep as much of our JavaScript as possible off the main UI thread, to avoid freezing up the entire interface.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webworkers"&gt;webworkers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-performance"&gt;web-performance&lt;/a&gt;&lt;/p&gt;



</summary><category term="javascript"/><category term="mobile"/><category term="webworkers"/><category term="web-performance"/></entry><entry><title>Sunsetting React Native at Airbnb</title><link href="https://simonwillison.net/2018/Jun/19/sunsetting-react-native-airbnb/#atom-tag" rel="alternate"/><published>2018-06-19T21:03:14+00:00</published><updated>2018-06-19T21:03:14+00:00</updated><id>https://simonwillison.net/2018/Jun/19/sunsetting-react-native-airbnb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a"&gt;Sunsetting React Native at Airbnb&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“Due to a variety of technical and organizational issues, we will be sunsetting React Native and putting all of our efforts into making native amazing.” Fascinating write-up from Airbnb (part of a series) based on two years of working with React Native. It’s worth reading this in full: 63% of their engineers they surveyed would have chosen React Native again given the chance and 74% would consider it for a new project—but the larger technical and organizational challenges (in particular the fact that React Native remains a polarizing choice in the mobile world, making it harder to hire great native engineers) mean that Airbnb are migrating back to pure-native for their iOS and Android apps.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/react"&gt;react&lt;/a&gt;&lt;/p&gt;



</summary><category term="mobile"/><category term="react"/></entry><entry><title>Are there any good bootcamps, such as Code Fellows, DevBootCamp for mobile (iOS/Android)?</title><link href="https://simonwillison.net/2013/Nov/25/are-there-any-good/#atom-tag" rel="alternate"/><published>2013-11-25T10:52:00+00:00</published><updated>2013-11-25T10:52:00+00:00</updated><id>https://simonwillison.net/2013/Nov/25/are-there-any-good/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Are-there-any-good-bootcamps-such-as-Code-Fellows-DevBootCamp-for-mobile-iOS-Android/answer/Simon-Willison"&gt;Are there any good bootcamps, such as Code Fellows, DevBootCamp for mobile (iOS/Android)?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Big Nerd Ranch have been offering iOS and Android for several years now. A friend of mine went in the iOS course a while ago and spoke highly of it - he has since released an app to the App Store.&lt;/p&gt;

&lt;span&gt;&lt;a href="http://www.bignerdranch.com/classes"&gt;http://www.bignerdranch.com/classes&lt;/a&gt;&lt;/span&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="mobile"/><category term="software-engineering"/><category term="startups"/><category term="quora"/></entry><entry><title>Do you need the feature in Dropbox mobile app that allows using the chosen files in offline mode? Why?</title><link href="https://simonwillison.net/2013/Oct/29/do-you-need-the/#atom-tag" rel="alternate"/><published>2013-10-29T10:53:00+00:00</published><updated>2013-10-29T10:53:00+00:00</updated><id>https://simonwillison.net/2013/Oct/29/do-you-need-the/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Do-you-need-the-feature-in-Dropbox-mobile-app-that-allows-using-the-chosen-files-in-offline-mode-Why/answer/Simon-Willison"&gt;Do you need the feature in Dropbox mobile app that allows using the chosen files in offline mode? Why?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I use this all the time. It's especially useful for travelling (when you're abroad you often don't have inexpensive cellular data or access to WiFi). I use it for:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Storing PDFs of my flight details and hotel reservations (using OS X's print-to-PDF feature)&lt;/li&gt;&lt;li&gt;Sometimes storing downloaded maps of the local area&lt;/li&gt;&lt;li&gt;Storing details of my travel insurance&lt;/li&gt;&lt;li&gt;Scanned copies of my passport&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I usually combine it with Instapaper - I save Wikipedia pages about the places I am visiting offline on my phone with Instapaper so I can refer to them when I'm actually there.
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dropbox"&gt;dropbox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="mobile"/><category term="quora"/><category term="dropbox"/><category term="ux"/></entry><entry><title>Is it possible for anybody to be expert in all areas of software development, that includes database, backend, web frontend, mobile apps, and graphic design?</title><link href="https://simonwillison.net/2013/Oct/20/is-it-possible-for/#atom-tag" rel="alternate"/><published>2013-10-20T12:44:00+00:00</published><updated>2013-10-20T12:44:00+00:00</updated><id>https://simonwillison.net/2013/Oct/20/is-it-possible-for/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Is-it-possible-for-anybody-to-be-expert-in-all-areas-of-software-development-that-includes-database-backend-web-frontend-mobile-apps-and-graphic-design/answer/Simon-Willison"&gt;Is it possible for anybody to be expert in all areas of software development, that includes database, backend, web frontend, mobile apps, and graphic design?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It isn't possible for someone to be expert in "all" aspects of software development - that would include everything from writing safety critical control systems for nuclear power plants in Fortran to high frequency trading algorithms on Wall Street. The world of software development is simply too big for that now.&lt;/p&gt;

&lt;p&gt;It is possible for someone to become an expert on "database, backend, web frontend, mobile apps, and graphic design". Programmers who excel at all of those with the exception of graphic design are sometimes known as "full stack" developers, although mobile apps are usually a seperate speciality.&lt;/p&gt;

&lt;p&gt;People who also excel at graphic design do exist but are very rare. I've known a few and I'm always pretty jealous of them!&lt;/p&gt;

&lt;p&gt;This answer does of course vary depending on how you define the word "expert".&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="mobile"/><category term="web-development"/><category term="quora"/></entry><entry><title>What are the best ways to find online serious partners ready to outsource mobile app development company?</title><link href="https://simonwillison.net/2013/Oct/18/what-are-the-best/#atom-tag" rel="alternate"/><published>2013-10-18T17:00:00+00:00</published><updated>2013-10-18T17:00:00+00:00</updated><id>https://simonwillison.net/2013/Oct/18/what-are-the-best/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-best-ways-to-find-online-serious-partners-ready-to-outsource-mobile-app-development-company/answer/Simon-Willison"&gt;What are the best ways to find online serious partners ready to outsource mobile app development company?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you want to do long-term outsourcing deals with "serious big companies", you need to get on a plane and meet them in person.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="iphone"/><category term="mobile"/><category term="quora"/></entry><entry><title>How can I produce an animated prototype out of designs for an iOS app?</title><link href="https://simonwillison.net/2013/Oct/13/how-can-i-produce/#atom-tag" rel="alternate"/><published>2013-10-13T10:31:00+00:00</published><updated>2013-10-13T10:31:00+00:00</updated><id>https://simonwillison.net/2013/Oct/13/how-can-i-produce/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-can-I-produce-an-animated-prototype-out-of-designs-for-an-iOS-app/answer/Simon-Willison"&gt;How can I produce an animated prototype out of designs for an iOS app?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Keynote is a surprisingly good tool for this kind of things, especially since they added path based animations to it a few years ago.&lt;/p&gt;

&lt;p&gt;I know a designer who uses PowerPoint to create interactive wireframes.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prototyping"&gt;prototyping&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ios"&gt;ios&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="iphone"/><category term="mobile"/><category term="prototyping"/><category term="quora"/><category term="ios"/><category term="ux"/></entry><entry><title>Getting the most out of technical conference as a services provider?</title><link href="https://simonwillison.net/2013/Sep/11/getting-the-most-out/#atom-tag" rel="alternate"/><published>2013-09-11T16:36:00+00:00</published><updated>2013-09-11T16:36:00+00:00</updated><id>https://simonwillison.net/2013/Sep/11/getting-the-most-out/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Getting-the-most-out-of-technical-conference-as-a-services-provider/answer/Simon-Willison"&gt;Getting the most out of technical conference as a services provider?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Leaving flyers out if you are not a sponsor will annoy both the event organiser and the other sponsors, and may give a bad impression to other attendees as well.&lt;/p&gt;

&lt;p&gt;I suggest just talking to as many people as possible, and building relationships that way. You should see a much higher conversion rate from that than from leaving fliers lying around.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/conferences"&gt;conferences&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/outsourcing"&gt;outsourcing&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="conferences"/><category term="mobile"/><category term="quora"/><category term="outsourcing"/></entry><entry><title>Can I pitch my app idea to google?</title><link href="https://simonwillison.net/2013/Aug/11/can-i-pitch-my/#atom-tag" rel="alternate"/><published>2013-08-11T16:27:00+00:00</published><updated>2013-08-11T16:27:00+00:00</updated><id>https://simonwillison.net/2013/Aug/11/can-i-pitch-my/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Can-I-pitch-my-app-idea-to-google/answer/Simon-Willison"&gt;Can I pitch my app idea to google?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You could pitch it to Google Ventures, but you'll need a lot more than just the idea.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/google"&gt;google&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="google"/><category term="mobile"/><category term="web-development"/><category term="quora"/></entry><entry><title>What new apps were used most at SXSW 2013, and why?</title><link href="https://simonwillison.net/2013/Feb/28/what-new-apps-were/#atom-tag" rel="alternate"/><published>2013-02-28T11:19:00+00:00</published><updated>2013-02-28T11:19:00+00:00</updated><id>https://simonwillison.net/2013/Feb/28/what-new-apps-were/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-new-apps-were-used-most-at-SXSW-2013-and-why/answer/Simon-Willison"&gt;What new apps were used most at SXSW 2013, and why?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Lanyrd will be at SXSW again this year, and we've continued to refine our unofficial schedule guide and session planner for SXSW Interactive. Here's our site for this year:&lt;/p&gt;

&lt;span&gt;&lt;a href="http://austin2013.lanyrd.com/"&gt;http://austin2013.lanyrd.com/&lt;/a&gt;&lt;/span&gt;

&lt;div&gt;&lt;img src="https://qph.ec.quoracdn.net/main-qimg-30614eb4e1df6dee5114ff550a696650" width="1086" height="995" style="max-width: 100%" /&gt;&lt;/div&gt;&lt;br /&gt;If you sign in with Twitter, we'll show you the people you follow who will be attending SXSW Interactive this year (we list over 2,000 Twitter attendees, increasing all the time) - we'll also show you the sessions they are presenting.

&lt;p&gt;You can then build your own personal schedule by tracking or plan-to-attending sessions - and get suggestions based on the schedules built by your contacts.&lt;/p&gt;

&lt;p&gt;We've added rich topic metadata to the schedule, so you can slice and dice it in different ways. For example, here are sessions about marketing on Sunday:  &lt;span&gt;&lt;a href="http://bit.ly/13p8c0g"&gt;http://bit.ly/13p8c0g&lt;/a&gt;&lt;/span&gt; or Workshops about HTML5: &lt;span&gt;&lt;a href="http://bit.ly/XmtHK7"&gt;http://bit.ly/XmtHK7&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;

&lt;p&gt;We're also running a neat location-enabled now and next app - hit &lt;span&gt;&lt;a href="http://now.lanyrd.com/"&gt;http://now.lanyrd.com/&lt;/a&gt;&lt;/span&gt; during the conference and we'll geolocate your phone and show you what's on now and next at the venues closest to you - pretty handy at a conference taking place across most of Austin!&lt;/p&gt;

&lt;div&gt;&lt;img src="https://qph.ec.quoracdn.net/main-qimg-21bf4d56ad86ebef92a4acf085433398" width="640" height="480" style="max-width: 100%" /&gt;&lt;/div&gt;

&lt;p&gt;We've also built a snazzy grid view, so you can see the full schedule, your personal schedule or the results of a search as a grid (making it easier to spot sessions that clash). Here's a grid of the sessions I'm considering attending on Saturday: &lt;span&gt;&lt;a href="http://bit.ly/Y2gyTr"&gt;http://bit.ly/Y2gyTr&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div&gt;&lt;img src="https://qph.ec.quoracdn.net/main-qimg-6b90a7d8c5676608da34bd70188cbe80-c" width="640" height="438" style="max-width: 100%" /&gt;&lt;/div&gt;&lt;br /&gt;Your personal schedule will also be available in our iPhone and Android/Mobile Web apps, which both include offline support so you can still see the schedule even if you don't have a reliable data connection in Austin. More about these on our blog: &lt;span&gt;&lt;a href="http://lanyrd.com/blog/2013/austin/"&gt;Get more out of SXSW Interactive 2013 with Lanyrd&lt;/a&gt;&lt;/span&gt; 

&lt;div&gt;&lt;img src="https://qph.ec.quoracdn.net/main-qimg-26c66c24560f9fa709321ec12af03062" width="640" height="551" style="max-width: 100%" /&gt;&lt;/div&gt;&lt;br /&gt;For us, SXSW is a great opportunity to showcase what our event platform can do. It's a particularly good stress test - if you can handle the 2,000+ speakers and 1,400+ sessions at SXSW, any other event should be a breeze!
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/android"&gt;android&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sxsw"&gt;sxsw&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="android"/><category term="iphone"/><category term="mobile"/><category term="sxsw"/><category term="quora"/></entry><entry><title>What are the top Apps/Mobile conferences &amp; events for 2013?</title><link href="https://simonwillison.net/2012/Nov/6/what-are-the-top/#atom-tag" rel="alternate"/><published>2012-11-06T18:08:00+00:00</published><updated>2012-11-06T18:08:00+00:00</updated><id>https://simonwillison.net/2012/Nov/6/what-are-the-top/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-top-Apps-Mobile-conferences-events-for-2013/answer/Simon-Willison"&gt;What are the top Apps/Mobile conferences &amp;amp; events for 2013?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The biggest is still Mobile World Congress in Barcelona in February - tens of thousands of attendees and representatives from pretty much every mobile company.&lt;/p&gt;

&lt;p&gt;In terms of app developer conferences there are dozens taking place around the world, so the best fit for you really depends on where you are based.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/conferences"&gt;conferences&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/conference"&gt;conference&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="conferences"/><category term="mobile"/><category term="quora"/><category term="conference"/></entry><entry><title>How do you make an existing web application more mobile-friendly without rebuilding it?</title><link href="https://simonwillison.net/2012/Sep/5/how-do-you-make/#atom-tag" rel="alternate"/><published>2012-09-05T12:22:00+00:00</published><updated>2012-09-05T12:22:00+00:00</updated><id>https://simonwillison.net/2012/Sep/5/how-do-you-make/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-do-you-make-an-existing-web-application-more-mobile-friendly-without-rebuilding-it/answer/Simon-Willison"&gt;How do you make an existing web application more mobile-friendly without rebuilding it?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Learn about responsive web design. Provided your site is built reasonably well using CSS for layout there is a TON of stuff you can do with CSS media queries to make your site work better on small screen devices. For example, using media queries to detect small screen (mobile) devices you can...&lt;/p&gt;

&lt;p&gt;- switch from two columns to a single column layout&lt;br /&gt;- hide irrelevant content entirely&lt;br /&gt;- use shorter labels on your site navigation&lt;br /&gt;- serve up larger, more mobile friendly click regions&lt;br /&gt;- switch to a font family and size that's easier to read on mobile&lt;/p&gt;

&lt;p&gt;Here's the original article that coined the term: &lt;span&gt;&lt;a href="http://www.alistapart.com/articles/responsive-web-design/"&gt;http://www.alistapart.com/articl...&lt;/a&gt;&lt;/span&gt; - there are plenty of excellent resources, tutorials and books around these days too if you want to learn more.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobileweb"&gt;mobileweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ui"&gt;ui&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ux"&gt;ux&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="mobile"/><category term="mobileweb"/><category term="ui"/><category term="quora"/><category term="ux"/></entry><entry><title>Mobile World Congress: Is it worth going?</title><link href="https://simonwillison.net/2012/Jan/10/mobile-world-congress-is/#atom-tag" rel="alternate"/><published>2012-01-10T16:52:00+00:00</published><updated>2012-01-10T16:52:00+00:00</updated><id>https://simonwillison.net/2012/Jan/10/mobile-world-congress-is/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Mobile-World-Congress-Is-it-worth-going/answer/Simon-Willison"&gt;Mobile World Congress: Is it worth going?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It depends on what you want to get out of it. I haven't been myself, but from what I've heard MWC is the Mobile world's equivalent of something like SXSW - huge (49,000+ people), sprawling, bewildering and full of everyone you could possibly want to meet from the mobile world.&lt;/p&gt;

&lt;p&gt;Tim Bray has an interesting account of last year's event: &lt;span&gt;&lt;a href="http://www.tbray.org/ongoing/When/201x/2011/02/18/MWC"&gt;http://www.tbray.org/ongoing/Whe...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/conferences"&gt;conferences&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="conferences"/><category term="mobile"/><category term="quora"/></entry><entry><title>US iPhone Data for International Visitors: A Guide</title><link href="https://simonwillison.net/2011/Jan/13/nikforg/#atom-tag" rel="alternate"/><published>2011-01-13T03:51:00+00:00</published><updated>2011-01-13T03:51:00+00:00</updated><id>https://simonwillison.net/2011/Jan/13/nikforg/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://nikf.org/post/1300933806/att-pay-as-you-go-iphone-data-guide"&gt;US iPhone Data for International Visitors: A Guide&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
AT&amp;amp;T will swear blind that their pay-as-you-go data plan doesn’t work with iPhones or other smart phones. Here’s how to prove them wrong.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="mobile"/><category term="recovered"/></entry><entry><title>What makes mobile application backends different from Webapp backends?</title><link href="https://simonwillison.net/2011/Jan/9/what-makes-mobile-application/#atom-tag" rel="alternate"/><published>2011-01-09T13:54:00+00:00</published><updated>2011-01-09T13:54:00+00:00</updated><id>https://simonwillison.net/2011/Jan/9/what-makes-mobile-application/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-makes-mobile-application-backends-different-from-Webapp-backends/answer/Simon-Willison"&gt;What makes mobile application backends different from Webapp backends?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nothing at all.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="mobile"/><category term="web-development"/><category term="quora"/></entry><entry><title>What are the most recommended upcoming  mobile tech conferences in North America?</title><link href="https://simonwillison.net/2010/Dec/5/what-are-the-most/#atom-tag" rel="alternate"/><published>2010-12-05T09:21:00+00:00</published><updated>2010-12-05T09:21:00+00:00</updated><id>https://simonwillison.net/2010/Dec/5/what-are-the-most/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-most-recommended-upcoming-mobile-tech-conferences-in-North-America/answer/Simon-Willison"&gt;What are the most recommended upcoming  mobile tech conferences in North America?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our site, &lt;span&gt;&lt;a href="http://Lanyrd.com"&gt;Lanyrd.com&lt;/a&gt;&lt;/span&gt;, is relatively new but already has a pretty good list of mobile conferences in the USA. Try this page: &lt;span&gt;&lt;a href="http://lanyrd.com/topics/mobile/in/usa/"&gt;http://lanyrd.com/topics/mobile/...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/conferences"&gt;conferences&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/events"&gt;events&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="conferences"/><category term="events"/><category term="mobile"/><category term="quora"/></entry><entry><title>Unlocking the Huawei E5830 aka 3 Mifi</title><link href="https://simonwillison.net/2010/Jun/17/mifi/#atom-tag" rel="alternate"/><published>2010-06-17T22:57:00+00:00</published><updated>2010-06-17T22:57:00+00:00</updated><id>https://simonwillison.net/2010/Jun/17/mifi/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.shadwell.eu/paul_shadwells_weblog/2010/05/unlocking-the-huawei-e5830-aka-3-mifi-part-one.html"&gt;Unlocking the Huawei E5830 aka 3 Mifi&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
3 will post you an unlocked replacement for your MiFi for £15, if you can figure out how to ask them to do it. Reports on the internet are that it can take several weeks and they sometimes forget to unlock the one you send them, so I went the self-unlocking route. These instructions (involving Windows running in VMWare Fusion, Firmware updates, PayPal, some very dodgy looking software and a PDF file half-written in Japan) ended up working a treat.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vmware"&gt;vmware&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/3g"&gt;3g&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mifi"&gt;mifi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unlocking"&gt;unlocking&lt;/a&gt;&lt;/p&gt;



</summary><category term="mobile"/><category term="vmware"/><category term="recovered"/><category term="3g"/><category term="mifi"/><category term="unlocking"/></entry><entry><title>Quoting Steve Jobs</title><link href="https://simonwillison.net/2010/Apr/29/thoughts/#atom-tag" rel="alternate"/><published>2010-04-29T15:22:06+00:00</published><updated>2010-04-29T15:22:06+00:00</updated><id>https://simonwillison.net/2010/Apr/29/thoughts/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.apple.com/hotnews/thoughts-on-flash/"&gt;&lt;p&gt;Flash was created during the PC era – for PCs and mice. Flash is a successful business for Adobe, and we can understand why they want to push it beyond PCs. But the mobile era is about low power devices, touch interfaces and open web standards – all areas where Flash falls short.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.apple.com/hotnews/thoughts-on-flash/"&gt;Steve Jobs&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/flash"&gt;flash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/adobe"&gt;adobe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/apple"&gt;apple&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/steve-jobs"&gt;steve-jobs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;&lt;/p&gt;



</summary><category term="flash"/><category term="adobe"/><category term="apple"/><category term="steve-jobs"/><category term="mobile"/></entry><entry><title>Notes on designing the Guardian iPhone app</title><link href="https://simonwillison.net/2009/Dec/20/iphone/#atom-tag" rel="alternate"/><published>2009-12-20T12:55:48+00:00</published><updated>2009-12-20T12:55:48+00:00</updated><id>https://simonwillison.net/2009/Dec/20/iphone/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://johnhenrybarac.com/http:/johnhenrybarac.com/notes-on-designing-the-guardian-iphone-app/"&gt;Notes on designing the Guardian iPhone app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
By John-Henry Barac, the principal designer of he iPhone application who also previously worked on the Guardian’s print transition to the Berliner format.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/design"&gt;design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-henry-barac"&gt;john-henry-barac&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;&lt;/p&gt;



</summary><category term="design"/><category term="guardian"/><category term="iphone"/><category term="john-henry-barac"/><category term="mobile"/></entry><entry><title>Quoting Joe Hewitt</title><link href="https://simonwillison.net/2009/Nov/15/openweb/#atom-tag" rel="alternate"/><published>2009-11-15T08:50:33+00:00</published><updated>2009-11-15T08:50:33+00:00</updated><id>https://simonwillison.net/2009/Nov/15/openweb/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://joehewitt.com/post/on-middle-men/"&gt;&lt;p&gt;We're at a critical juncture in the evolution of software. The web is still here and it is still strong. Anyone can still put any information or applications on a web server without asking for permission, and anyone in the world can still access it just by typing a URL. I don't think I appreciated how important that is until recently. Nobody designs new systems like that anymore, or at least few of them succeed. What an incredible stroke of luck the web was, and what a shame it would be to let that freedom slip away.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://joehewitt.com/post/on-middle-men/"&gt;Joe Hewitt&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/joe-hewitt"&gt;joe-hewitt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gatekeepers"&gt;gatekeepers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sharecropping"&gt;sharecropping&lt;/a&gt;&lt;/p&gt;



</summary><category term="iphone"/><category term="joe-hewitt"/><category term="mobile"/><category term="gatekeepers"/><category term="sharecropping"/></entry><entry><title>Correct way to handle mobile browsers</title><link href="https://simonwillison.net/2009/Nov/10/mobile/#atom-tag" rel="alternate"/><published>2009-11-10T08:57:10+00:00</published><updated>2009-11-10T08:57:10+00:00</updated><id>https://simonwillison.net/2009/Nov/10/mobile/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://ericholscher.com/blog/2009/nov/9/correct-way-handle-mobile-browsers/"&gt;Correct way to handle mobile browsers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
If your site has an equivalent “mobile” version running on a different subdomain, how and when should you redirect mobile users to it and how should you let them opt in or opt out?


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/eric-holscher"&gt;eric-holscher&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redirect"&gt;redirect&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/usability"&gt;usability&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="eric-holscher"/><category term="mobile"/><category term="redirect"/><category term="usability"/></entry><entry><title>WebKit, Mobile, and Progress</title><link href="https://simonwillison.net/2009/Oct/10/webkit/#atom-tag" rel="alternate"/><published>2009-10-10T00:28:31+00:00</published><updated>2009-10-10T00:28:31+00:00</updated><id>https://simonwillison.net/2009/Oct/10/webkit/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://alex.dojotoolkit.org/2009/10/webkit-mobile-and-progress/"&gt;WebKit, Mobile, and Progress&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Alex Russell responds to PPK’s analysis of the many different WebKit variants in today’s mobile phones, pointing out that the replacement cycle and increasing quality of WebKit in more recent phones means the situation still looks pretty good.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/alex-russell"&gt;alex-russell&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobile"&gt;mobile&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ppk"&gt;ppk&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webkit"&gt;webkit&lt;/a&gt;&lt;/p&gt;



</summary><category term="alex-russell"/><category term="browsers"/><category term="mobile"/><category term="ppk"/><category term="webkit"/></entry></feed>