[{"element_type":"text","content":"\n  \n  \n        \u003ch2\u003eOverview\u003c/h2\u003e\n\u003cp\u003eTo understand what the new Arduino UNO Q is about, I've been looking at the new the \u003ca href=\"https://www.arduino.cc/en/software/#app-lab-section\" target=\"_blank\"\u003eArduino App Lab\u003c/a\u003e coding tool. The App Lab download page links to the source code at \u003ca href=\"https://downloads.arduino.cc/app-lab-release/source-app-lab.zip\" target=\"_blank\"\u003ehttps://downloads.arduino.cc/app-lab-release/source-app-lab.zip\u003c/a\u003e, but the source seems incomplete. Among other differences, there aren't any build instructions or scripts in the source archive. So, I've been poking around trying to understand how the source works and how it differs from the binaries.\u003c/p\u003e\n\u003cp\u003eHighlights of what I found: You need a UNO Q board to get past the first screen. The app is written with\u0026nbsp;\u003ca href=\"https://wails.io/\" target=\"_blank\"\u003eWails\u003c/a\u003e which uses Go for the backend and a web app for the frontend (similar to Electron, but using a native web view rather than embedding a browser). The binaries include embedded markdown for examples that don't appear in the source. The app may be using \u003ca href=\"https://www.hotjar.com/\" target=\"_blank\"\u003eHotjar\u003c/a\u003e telemetry for analytics.\u003c/p\u003e\n      \n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/004/original/app_lab_start_screen.png?1760676717","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003ch3\u003eDownload Checksums\u003c/h3\u003e\n\u003cp\u003eWhen I downloaded the macOS dmg, Linux tar.gz, and source-app-lab.zip files on October 16, 2025, these are the checksums I got:\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"code","content":"$ sha256sum source-app-lab.zip ArduinoAppLab_0.1.23.dmg ArduinoAppLab_0.1.23_Linux_x86-64.tar.gz\ned973391ff5806dac07fb674674faabbf654a3307968d24144841f045dbc9fc5  source-app-lab.zip\nc85061f524ca6350e22c0f1d614cd8c670e4aa71ff9e2cd2e3c8e7221e7377c5  ArduinoAppLab_0.1.23.dmg\nd12c3fc5d0bfb21da25ec389aef7d5b9330530cec50a71fca85e06bae364d149  ArduinoAppLab_0.1.23_Linux_x86-64.tar.gz","metadata":{"language":"terminal","linenums":false,"filename":""}},{"element_type":"text","content":"\n        \u003ch2\u003eViewing Embedded Strings\u003c/h2\u003e\n\u003cp\u003eThe main thing I was hoping to do is read the UNO Q example code. But, I got stuck on the first screen since I don't have a UNO Q board and the preorders won't ship for a while yet (writing this on 2025-10-16). I started off by looking at the App Lab source, but there wasn't much there in the way of examples or docs. By using the \u003ccode\u003estrings\u003c/code\u003e command line tool, I found there were some interesting embedded strings in the binaries.\u003c/p\u003e\n\u003cp\u003eHere's my procedure for identifying and extracting the interesting embedded strings using macOS command line tools:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eExtract the ArduinoAppLab app from \u003ccode\u003eArduinoAppLab_0.1.23.dmg\u003c/code\u003e\n\u003c/li\u003e\n\u003cli\u003eIn Terminal, \u003ccode\u003ecd\u003c/code\u003e into the extracted \u003ccode\u003eArduinoAppLab.app/Contents/MacOS/\u003c/code\u003e directory. You should see an \u003ccode\u003eArduinoAppLab\u003c/code\u003e binary\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eotool -l ArduinoAppLab\u003c/code\u003e to list all the segments and sections in the binary\u003c/li\u003e\n\u003cli\u003eUse the BBEdit editor's regular expression search and replace to transform the\u0026nbsp;\u003ccode\u003eotool\u003c/code\u003e output into a list of section hexdump command like this:\u0026nbsp;\u003ccode\u003eotool -V -s __TEXT __rodata ArduinoAppLab | less\u003c/code\u003e\n\u003c/li\u003e\n\u003cli\u003eHexdump all the sections in the list, looking for ones that aren't boring (this is how I identified \u003ccode\u003e__TEXT,__rodata\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eExtract the sections of interest into a separate file using \u003ccode\u003eotool\u003c/code\u003e and \u003ccode\u003exxd\u003c/code\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThis is how I extracted the \u003ccode\u003e__rodata\u003c/code\u003e section using \u003ccode\u003eotool\u003c/code\u003e to hexdump its contents, \u003ccode\u003etail\u003c/code\u003e and \u003ccode\u003ecut\u003c/code\u003e to strip the address offsets, and \u003ccode\u003exxd\u003c/code\u003e to reverse the hexdump:\u003c/p\u003e\n      ","metadata":{}},{"element_type":"code","content":"otool -s __TEXT __rodata ArduinoAppLab | tail -n +3 | cut -c17- | xxd -r -p - rodata.bin","metadata":{"language":"terminal","linenums":false,"filename":""}},{"element_type":"text","content":"\n  \n  \n  \n  \n        \u003cp\u003eTo view the resulting data, I used the \u003ccode\u003eless\u003c/code\u003e command line tool. Since \u003ccode\u003eless\u003c/code\u003e automatically filters out garbage characters, it works great even though lots of the variable initializer data in \u003ccode\u003e__rodata\u003c/code\u003e is binary. The embedded markdown files start with a yaml header (\u003ccode\u003e\"---\\ntitle: ...\"\u003c/code\u003e), so you can find them by using the less search feature \u003ccode\u003e/title:\u003c/code\u003e + \u003ccode\u003e[return key]\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eThis is how it looks to start searching for the first title:\u003c/p\u003e\n      \n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/005/original/less-search-1.png?1760678361","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eThis is what the first yaml header looks like (press \u003ccode\u003en\u003c/code\u003e to search again for the next one):\u003c/p\u003e\n      \n\n\n\n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/002/006/original/less-search-2.png?1760678424","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n        \u003cp\u003eTo quit \u003ccode\u003eless\u003c/code\u003e, press the \u003ccode\u003eq\u003c/code\u003e key. You can also page forward with \u003ccode\u003e[spacebar]\u003c/code\u003e and backward with\u0026nbsp;\u003ccode\u003eb\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eIf you wanted to get fancy, you could try writing a script to separate the \u003ccode\u003e__rodata\u003c/code\u003e binary dump into individual strings by looking for patterns like \u003ccode\u003e0x0a 0x00\u003c/code\u003e at the end of a string, but I haven't bothered with that yet.\u003c/p\u003e\n\u003cp\u003eThese are the titles and descriptions of the markdown documents I found in the \u003ccode\u003e__rodata\u003c/code\u003e section:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cstrong\u003eArduino UNO Q\u003c/strong\u003e: An overview of the Arduino UNO Q board featuring a Linux system and a microcontroller.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eAI Models\u003c/strong\u003e: Learn how AI models work, where to find them, and how to use them in an App.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eWhat is a Brick?\u003c/strong\u003e: Learn about Bricks, the code building blocks for Apps.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eBuilt-in Examples\u003c/strong\u003e\u003cspan\u003e: Discover ready-made examples to launch in under a minute.\u003c/span\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eSingle Board Computer (SBC)\u003c/strong\u003e\u003cspan\u003e: Set up the UNO Q as a Single-Board Computer with a display, mouse \u0026amp; keyboard.\u003c/span\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFirst Setup\u003c/strong\u003e\u003cspan\u003e: Get to know the Arduino App Lab.\u003c/span\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eWhat is an App?\u003c/strong\u003e\u003cspan\u003e: Learn how Apps work, and how they run on the UNO Q.\u003c/span\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cspan\u003eBased on searching the contents of \u003ccode\u003esource-app-lab.zip\u003c/code\u003e for some of the strings in the markdown files, they don't seem to be included in the source.\u003c/span\u003e\u003c/p\u003e\n      \n\n\n","metadata":{}}]