{
    "version": "https://jsonfeed.org/version/1",
    "title": "kotfu.net",
    "home_page_url": "https://www.kotfu.net/",
    "feed_url": "https://www.kotfu.net/feed.json",
    "icon": "https://www.kotfu.net/apple-touch-icon.png",
    "favicon": "https://www.kotfu.net/favicon.ico",
    "author": {
      "name": "kotfu"
    },
    "expired": false,

    "items": [
    
        {
            "id": "https://www.kotfu.net/2026/07/brown-university-students-cheating-with-llms.html",
            "title": "Brown University Students Cheating with AI",
            "url": "https://www.kotfu.net/2026/07/brown-university-students-cheating-with-llms.html",
            "date_published": "2026-07-09T08:39:00-06:00",
            "date_modified": "2026-07-09T09:17:16-06:00",
            "content_text": "Emma Whitford writes at Inside Higher Ed about the appalling behaviorof students in the Welfare Economics and Social Choice Theory courseat Brown University. For the first time in 20 years teaching the course,economics professor Roberto Serranogave his students a take-home midterm exam.  Quite a few students had expressed anxiety about being in a classroomafter a gunman killed two students and injured nine in a Decembermass shooting at Brown, and so “it was appropriate,” he said,to allow students to take their exams at home.The average score on the take-home midterm was 96 percent.  “Historically the average grade in the midterm of this coursehas ranged between 65 and 80 [percent], and this exam was harderthan the exams I wrote in the past…”The student responses seemed “fishy” so he and his graders askedChatGPT to answer the test, and noted striking similarities withwhat the students had turned in. He changed the final exam to anin-person test.  “I am not declaring [the midterm] void for now. I am going to give theclass a chance to prove me wrong,” he wrote. “That is, if thedistribution of the final exam is roughly similar to the distributionof the midterm, I will count the midterm. Otherwise, which is ofcourse what I expect to happen, I will declare the midterm void andreweigh the final accordingly.”Subsequent to his message, 18 of 86 students dropped the class, and9 more did not take the final exam. Three students earned azero on the final (and two of those three scored 100 percenton the take-home midterm), and the average score was 48.6 percent.Only one student did better on the final than they did on themidterm.He published the anonymized student scores: brave, but fittingfor an economics professor.Brown University’s response has been tepid. Here’s what spokesmanBrian Clark said:  Brown treats every allegation of academic integrity with the utmost seriousness.In regard to this economics course, multiple academic leaders from Brown were intouch with the faculty member who raised concerns to provide details about howthe allegations raised could be formally adjudicated. To date, the faculty memberhas not provided the necessary details to the Standing Committee on the AcademicCode to pursue this path toward resolution.But the University has taken no action. Professor Serrano submittedthis data to Brown’s committee in May and got no response. He went public with hisstory in late June. Professor Serrano said:  “Their response, I must tell you, is seen as appalling and insufficient by hundredsof people who have emailed me in support, many of them Brown alumni.”  “We cannot afford to have a society in which a significant fraction of our bestyoung minds think that cheating is OK,” he said. “That leads to a decliningsociety, to a failed society… We cannot choose to become idiots.”",
            "content_html": "<p>Emma Whitford writes at Inside Higher Ed about the appalling behaviorof students in the Welfare Economics and Social Choice Theory courseat Brown University. For the first time in 20 years teaching the course,economics professor Roberto Serrano<a href=\"https://www.insidehighered.com/news/faculty/learning-assessment/2026/07/08/brown-professor-suspects-most-his-class-used-ai-cheat\">gave his students a take-home midterm exam</a>.</p><blockquote>  <p>Quite a few students had expressed anxiety about being in a classroomafter a gunman killed two students and injured nine in a Decembermass shooting at Brown, and so “it was appropriate,” he said,to allow students to take their exams at home.</p></blockquote><p>The average score on the take-home midterm was 96 percent.</p><blockquote>  <p>“Historically the average grade in the midterm of this coursehas ranged between 65 and 80 [percent], and this exam was harderthan the exams I wrote in the past…”</p></blockquote><p>The student responses seemed “fishy” so he and his graders askedChatGPT to answer the test, and noted striking similarities withwhat the students had turned in. He changed the final exam to anin-person test.</p><blockquote>  <p>“I am not declaring [the midterm] void for now. I am going to give theclass a chance to prove me wrong,” he wrote. “That is, if thedistribution of the final exam is roughly similar to the distributionof the midterm, I will count the midterm. Otherwise, which is ofcourse what I expect to happen, I will declare the midterm void andreweigh the final accordingly.”</p></blockquote><p>Subsequent to his message, 18 of 86 students dropped the class, and9 more did not take the final exam. Three students earned azero on the final (and two of those three scored 100 percenton the take-home midterm), and the average score was 48.6 percent.Only one student did better on the final than they did on themidterm.</p><p>He published the anonymized student scores: brave, but fittingfor an economics professor.</p><p><img src=\"/assets/2026/econ-1170-midterm-final.png\" alt=\"anonymized chart of student midterm and final scores\" /></p><p>Brown University’s response has been tepid. Here’s what spokesmanBrian Clark said:</p><blockquote>  <p>Brown treats every allegation of academic integrity with the utmost seriousness.In regard to this economics course, multiple academic leaders from Brown were intouch with the faculty member who raised concerns to provide details about howthe allegations raised could be formally adjudicated. To date, the faculty memberhas not provided the necessary details to the Standing Committee on the AcademicCode to pursue this path toward resolution.</p></blockquote><p>But the University has taken no action. Professor Serrano submittedthis data to Brown’s committee in May and got no response. He went public with hisstory in late June. Professor Serrano said:</p><blockquote>  <p>“Their response, I must tell you, is seen as appalling and insufficient by hundredsof people who have emailed me in support, many of them Brown alumni.”</p></blockquote><blockquote>  <p>“We cannot afford to have a society in which a significant fraction of our bestyoung minds think that cheating is OK,” he said. “That leads to a decliningsociety, to a failed society… We cannot choose to become idiots.”</p></blockquote>"
        },
        {
            "id": "https://www.kotfu.net/2026/07/fighting-software-bloat.html",
            "title": "Fighting software bloat",
            "url": "https://www.kotfu.net/2026/07/fighting-software-bloat.html",
            "date_published": "2026-07-01T15:53:00-06:00",
            "date_modified": "2026-07-02T19:20:21-06:00",
            "content_text": "Dave Plummer worked as a programmer at Microsoft in the 1990s. He wrotethe Smart Drive CD-ROM cache and DISKCOPY. He also invented and wrotethe first version of Task Manager. He justposted a video about hislatest project:  Are you sick of windows getting just a little fatter every single year?Tired of apps that need an account, a cloud sync, and 30 background servicesjust to open a damn text file? Well grab a seat, because today I’m actuallydoing something about it.He built a modern version of notepad.exe with the same features as were presentin the Windows XP-era version, and called itTinyRetroPad.The final executable size is only 2.5 kb. That’s smaller than the default sizefor a single disk cluster in NTFS (i.e. the smallest unit of disk space thatcan be allocated). It’s the same amount of disk space as the audio that goes alongwith a single frame of his video.",
            "content_html": "<p>Dave Plummer worked as a programmer at Microsoft in the 1990s. He wrotethe Smart Drive CD-ROM cache and DISKCOPY. He also invented and wrotethe first version of Task Manager. He just<a href=\"https://www.youtube.com/watch?v=OG91c7xsNMc\">posted a video</a> about hislatest project:</p><blockquote>  <p>Are you sick of windows getting just a little fatter every single year?Tired of apps that need an account, a cloud sync, and 30 background servicesjust to open a damn text file? Well grab a seat, because today I’m actuallydoing something about it.</p></blockquote><p>He built a modern version of notepad.exe with the same features as were presentin the Windows XP-era version, and called it<a href=\"https://github.com/PlummersSoftwareLLC/TinyRetroPad\">TinyRetroPad</a>.</p><p>The final executable size is only 2.5 kb. That’s smaller than the default sizefor a single disk cluster in NTFS (i.e. the smallest unit of disk space thatcan be allocated). It’s the same amount of disk space as the audio that goes alongwith a single frame of his video.</p>"
        },
        {
            "id": "https://www.kotfu.net/2026/01/LLM-deflation.html",
            "title": "LLM deflation",
            "url": "https://www.kotfu.net/2026/01/LLM-deflation.html",
            "date_published": "2026-01-31T18:42:00-07:00",
            "date_modified": "2026-01-31T20:26:26-07:00",
            "content_text": "About a year ago, Andreessen Horowitz (the largest venture capital firm in theworld), published a blog post showing that thecost of LLM inference is dropping 10x peryear.Andrej Karpathy, a member of the founding team at OpenAI and subsequently Tesla’s Sr.Director of AI, says that in 2019 it cost $43k to train GPT-2. Today he can train amodel that performs similarly for $73.That’s 600x cheaper in 7 years. Not the same metric, but maybe more important.",
            "content_html": "<p>About a year ago, Andreessen Horowitz (the largest venture capital firm in theworld), published a blog post showing that the<a href=\"https://a16z.com/llmflation-llm-inference-cost/\">cost of LLM inference</a> is dropping 10x peryear.</p><p>Andrej Karpathy, a member of the founding team at OpenAI and subsequently Tesla’s Sr.Director of AI, says that in 2019 it cost $43k to train GPT-2. Today he can train amodel that performs similarly <a href=\"https://x.com/karpathy/status/2017703360393318587\">for $73</a>.That’s 600x cheaper in 7 years. Not the same metric, but maybe more important.</p>"
        },
        {
            "id": "https://www.kotfu.net/2025/11/orion-1-0.html",
            "title": "Orion 1.0",
            "url": "https://www.kotfu.net/2025/11/orion-1-0.html",
            "date_published": "2025-11-30T18:42:00-07:00",
            "date_modified": "2025-11-30T20:13:55-07:00",
            "content_text": "In the last few months, a bunch of new AI browsers have launched, includingComet, Atlas, and Dia. I have no interest in these applications, they seem likea privacy nightmare, and I’m perfectly happy to use Claude and ChatGPT ina browser tab or in their native Mac apps.Six years ago, the team at Kagidecided to build a new browser called Orionusing the WebKit engine that powers Safari. They justreleased Orion 1.0 for Mac. It’s alreadyavailable for iOS and iPadOS.I’ve been an occasional Orion user for several years. It’s faster than Safarievery time I measure it. Orion loads and runs Safari, Chrome, and Firefoxextensions, including must haves like uBlock Origin and 1Password. UnlikeChrome, Kagi offers full support for extensions using both manifest v2 and v3.Orion has a robust AppleScript dictionary, and the user interface is excellent.You can tell a lot about how much a Mac dev team cares about their app bylooking at the settings. Orion’s settings page is beautiful. This is aMac-assed Mac app.Orion has no telemetry and no AI built in, and that receives top marks from me.It’s not open source, but the development is done in the open with anactive user community. Kagi is working to bringOrion to both Linux and Windows.I’m going to give Orion a try as my daily driver, and I hope you do too.",
            "content_html": "<p>In the last few months, a bunch of new AI browsers have launched, includingComet, Atlas, and Dia. I have no interest in these applications, they seem likea privacy nightmare, and I’m perfectly happy to use Claude and ChatGPT ina browser tab or in their native Mac apps.</p><p>Six years ago, the team at <a href=\"https://kagi.com\">Kagi</a>decided to build a new browser called <a href=\"https://orionbrowser.com\">Orion</a>using the WebKit engine that powers Safari. They just<a href=\"https://blog.kagi.com/orion\">released Orion 1.0 for Mac</a>. It’s alreadyavailable for iOS and iPadOS.</p><p>I’ve been an occasional Orion user for several years. It’s faster than Safarievery time I measure it. Orion loads and runs Safari, Chrome, and Firefoxextensions, including must haves like uBlock Origin and 1Password. UnlikeChrome, Kagi offers full support for extensions using both manifest v2 and v3.Orion has a robust AppleScript dictionary, and the user interface is excellent.You can tell a lot about how much a Mac dev team cares about their app bylooking at the settings. Orion’s settings page is beautiful. This is a<a href=\"https://inessential.com/2020/03/19/proxyman.html\">Mac-assed Mac app</a>.</p><p>Orion has no telemetry and no AI built in, and that receives top marks from me.It’s not open source, but the development is done in the open with an<a href=\"https://orionfeedback.org/\">active user community</a>. Kagi is working to bringOrion to both Linux and Windows.</p><p>I’m going to give Orion a try as my daily driver, and I hope you do too.</p>"
        },
        {
            "id": "https://www.kotfu.net/2025/09/laptop-edit-and-arrow-keys.html",
            "title": "Laptop Edit and Arrow Keys",
            "url": "https://www.kotfu.net/2025/09/laptop-edit-and-arrow-keys.html",
            "date_published": "2025-09-01T11:10:00-06:00",
            "date_modified": "2025-09-01T18:09:30-06:00",
            "content_text": "        Keyboard Layouts and SizesImage From KeychronIn the olden days, every computer keyboard had all the alphanumeric keys, a rowof function keys, an inverted T arrangement of arrow keys, edit keys(page up, home, end, etc), and a number pad. Today there aremany different keyboard sizes,with various combinations of all of these types of keys. Keyboard nerds know whata 60% keyboard is. The rest of us call it a laptop keyboard. I use theediting keys a lot when typing at my desk with a full size keyboard, and Ireally miss them when using my laptop. Inspired byBrett Terpstra’s Home Row Arrow Cluster,I decided to see if I could figure out a solution.I use a Macbook Air, so my approach is only useful for Mac users. LikeBrett, I decided to use Karabiner-Elements,an outstanding low-level keyboard customizer. In Brett’s implementation, you holddown the ; with your pinky, and then use I JK L for the arrow keys.That feels uncomfortable to me, and I wanted to be able to use P and; for Page Up and Page Down. I wanted somethingwhere I could enter an edit key mode, then have the keys work as arrows and edit keys,then leave the mode and they go back to normal. Kind of like how theNum Lock key works. I can’t use Num Lock, because Applelaptops and keyboards don’t have it. In it’s place is the Clearkey, which nobody uses because nobody knows what it does.While experimenting with several keystroke options I discovered I was alreadyusing them for something else. Funny how your fingers know to type a thing,but your brain can’t remember all the things you know how to type. I finallysettled on using &#8963;+Delete to activate and de-activate edit mode.Once in edit mode, I had to decide which keys to use for arrow keys and edit keys.I also experimented with this a lot. On my full size keyboard, I move my right handover to use the arrow keys, so I wanted to use keys on the right hand side of thekeyboard. I use my left hand for the modifier keys, so when I want to select backwardsby word I use my left hand to press and hold &#8997;+&#8679; and then usemy right hand to repeatedly press Left Arrow. I want to be able to do a similarthing on my laptop.I ended up with the following keys:            Key      Function                  I      Up Arrow              J      Left Arrow              K      Down Arrow              L      Right Arrow              U      Home              O      End              N      Delete              Y      Page Up              H      Page Down      I configured I J K L for the arrow keys,in a similar configuration to the gaming W A S Dbut on the right hand. Because I exclusively used Unix and Linux before everusing Windows or MacOS, I have Home and End move to the beginningand end of a line. U and O are logically positioned for thoseactions. I originally had H for Delete, but changed it toN so I can have Y and N for Page Up andPage Down.To implement this in Karabiner, you need to create a new complex rule, and paste in this JSON:{    \"description\": \"Control-Delete toggles 60% edit mode (I/J/K/L → ↑/←/↓/→, U/O → Home/End, N → Delete, Y/H → PageUp/PageDown)\",    \"manipulators\": [        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 0                }            ],            \"from\": {                \"key_code\": \"delete_or_backspace\",                \"modifiers\": { \"mandatory\": [\"control\"] }            },            \"to\": [                {                    \"set_variable\": {                        \"name\": \"sixty_edit_mode\",                        \"value\": 1                    }                }            ],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"delete_or_backspace\",                \"modifiers\": { \"mandatory\": [\"control\"] }            },            \"to\": [                {                    \"set_variable\": {                        \"name\": \"sixty_edit_mode\",                        \"value\": 0                    }                }            ],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"i\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"up_arrow\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"k\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"down_arrow\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"j\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"left_arrow\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"l\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"right_arrow\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"u\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"home\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"o\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"end\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"n\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"delete_forward\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"y\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"page_up\" }],            \"type\": \"basic\"        },        {            \"conditions\": [                {                    \"name\": \"sixty_edit_mode\",                    \"type\": \"variable_if\",                    \"value\": 1                }            ],            \"from\": {                \"key_code\": \"h\",                \"modifiers\": { \"optional\": [\"any\"] }            },            \"to\": [{ \"key_code\": \"page_down\" }],            \"type\": \"basic\"        }    ]}If these keys don’t work for you, and you are handy with JSON, you can probablyfigure out how to edit this.If you aren’t handy with JSON or aren’t a Karabiner expert, paste the code aboveinto your favorite chatbot, tell it this is a Karabiner-Elements complexrule, and use plain english to describe what you want to change. It will do apretty good job of making the changes for you.",
            "content_html": "<figure>    <img src=\"/assets/2025/keyboard-size-and-layout.jpg\" alt=\"image of 104 key keyboard with edit, arrow, number pad, and function keys each in different colors\" />    <figcaption>Keyboard Layouts and Sizes<br />Image From Keychron</figcaption></figure><p>In the olden days, every computer keyboard had all the alphanumeric keys, a rowof function keys, an inverted T arrangement of arrow keys, edit keys(page up, home, end, etc), and a number pad. Today there are<a href=\"https://www.keychron.com/blogs/archived/keyboard-buying-guide\">many different keyboard sizes</a>,with various combinations of all of these types of keys. Keyboard nerds know whata 60% keyboard is. The rest of us call it a laptop keyboard. I use theediting keys a lot when typing at my desk with a full size keyboard, and Ireally miss them when using my laptop. Inspired by<a href=\"https://www.brettterpstra.com/2025/03/30/keybindings-home-row-redux/\">Brett Terpstra’s Home Row Arrow Cluster</a>,I decided to see if I could figure out a solution.</p><p>I use a Macbook Air, so my approach is only useful for Mac users. LikeBrett, I decided to use <a href=\"https://karabiner-elements.pqrs.org/\">Karabiner-Elements</a>,an outstanding low-level keyboard customizer. In Brett’s implementation, you holddown the <span class=\"keycombo separated\" title=\"Semicolon (;)\"><kbd class=\"key\">;</kbd></span> with your pinky, and then use <span class=\"keycombo separated\" title=\"I\"><kbd class=\"key\">I</kbd></span> <span class=\"keycombo separated\" title=\"J\"><kbd class=\"key\">J</kbd></span><span class=\"keycombo separated\" title=\"K\"><kbd class=\"key\">K</kbd></span> <span class=\"keycombo separated\" title=\"L\"><kbd class=\"key\">L</kbd></span> for the arrow keys.</p><p>That feels uncomfortable to me, and I wanted to be able to use <span class=\"keycombo separated\" title=\"P\"><kbd class=\"key\">P</kbd></span> and<span class=\"keycombo separated\" title=\"Semicolon (;)\"><kbd class=\"key\">;</kbd></span> for <span class=\"keycombo separated\" title=\"Page Up Key\"><kbd class=\"key\">Page Up</kbd></span> and <span class=\"keycombo separated\" title=\"Page Down Key\"><kbd class=\"key\">Page Down</kbd></span>. I wanted somethingwhere I could enter an edit key mode, then have the keys work as arrows and edit keys,then leave the mode and they go back to normal. Kind of like how the<span class=\"keycombo separated\" title=\"Num Lock Key\"><kbd class=\"key\">Num Lock</kbd></span> key works. I can’t use <span class=\"keycombo separated\" title=\"Num Lock Key\"><kbd class=\"key\">Num Lock</kbd></span>, because Applelaptops and keyboards don’t have it. In it’s place is the <span class=\"keycombo separated\" title=\"Clear Key\"><kbd class=\"key\">Clear</kbd></span>key, which nobody uses because nobody knows what it does.</p><p>While experimenting with several keystroke options I discovered I was alreadyusing them for something else. Funny how your fingers know to type a thing,but your brain can’t remember all the things you know how to type. I finallysettled on using <span class=\"keycombo separated\" title=\"Control-Delete\"><kbd class=\"mod symbol\">&#8963;</kbd>+<kbd class=\"key\">Delete</kbd></span> to activate and de-activate edit mode.</p><p>Once in edit mode, I had to decide which keys to use for arrow keys and edit keys.I also experimented with this a lot. On my full size keyboard, I move my right handover to use the arrow keys, so I wanted to use keys on the right hand side of thekeyboard. I use my left hand for the modifier keys, so when I want to select backwardsby word I use my left hand to press and hold <span class=\"keycombo separated\" title=\"Option-Shift\"><kbd class=\"mod symbol\">&#8997;</kbd>+<kbd class=\"mod symbol\">&#8679;</kbd></span> and then usemy right hand to repeatedly press <span class=\"keycombo separated\" title=\"Left Arrow Key\"><kbd class=\"key\">Left Arrow</kbd></span>. I want to be able to do a similarthing on my laptop.</p><p>I ended up with the following keys:</p><table>  <thead>    <tr>      <th>Key</th>      <th>Function</th>    </tr>  </thead>  <tbody>    <tr>      <td><span class=\"keycombo separated\" title=\"I\"><kbd class=\"key\">I</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Up Arrow Key\"><kbd class=\"key\">Up Arrow</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"J\"><kbd class=\"key\">J</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Left Arrow Key\"><kbd class=\"key\">Left Arrow</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"K\"><kbd class=\"key\">K</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Down Arrow Key\"><kbd class=\"key\">Down Arrow</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"L\"><kbd class=\"key\">L</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Right Arrow Key\"><kbd class=\"key\">Right Arrow</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"U\"><kbd class=\"key\">U</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Home Key\"><kbd class=\"key\">Home</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"O\"><kbd class=\"key\">O</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"End Key\"><kbd class=\"key\">End</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"N\"><kbd class=\"key\">N</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Delete\"><kbd class=\"key\">Delete</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"Y\"><kbd class=\"key\">Y</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Page Up Key\"><kbd class=\"key\">Page Up</kbd></span></td>    </tr>    <tr>      <td><span class=\"keycombo separated\" title=\"H\"><kbd class=\"key\">H</kbd></span></td>      <td><span class=\"keycombo separated\" title=\"Page Down Key\"><kbd class=\"key\">Page Down</kbd></span></td>    </tr>  </tbody></table><p>I configured <span class=\"keycombo separated\" title=\"I\"><kbd class=\"key\">I</kbd></span> <span class=\"keycombo separated\" title=\"J\"><kbd class=\"key\">J</kbd></span> <span class=\"keycombo separated\" title=\"K\"><kbd class=\"key\">K</kbd></span> <span class=\"keycombo separated\" title=\"L\"><kbd class=\"key\">L</kbd></span> for the arrow keys,in a similar configuration to the gaming <span class=\"keycombo separated\" title=\"W\"><kbd class=\"key\">W</kbd></span> <span class=\"keycombo separated\" title=\"A\"><kbd class=\"key\">A</kbd></span> <span class=\"keycombo separated\" title=\"S\"><kbd class=\"key\">S</kbd></span> <span class=\"keycombo separated\" title=\"D\"><kbd class=\"key\">D</kbd></span>but on the right hand. Because I exclusively used Unix and Linux before everusing Windows or MacOS, I have <span class=\"keycombo separated\" title=\"Home Key\"><kbd class=\"key\">Home</kbd></span> and <span class=\"keycombo separated\" title=\"End Key\"><kbd class=\"key\">End</kbd></span> move to the beginningand end of a line. <span class=\"keycombo separated\" title=\"U\"><kbd class=\"key\">U</kbd></span> and <span class=\"keycombo separated\" title=\"O\"><kbd class=\"key\">O</kbd></span> are logically positioned for thoseactions. I originally had <span class=\"keycombo separated\" title=\"H\"><kbd class=\"key\">H</kbd></span> for <span class=\"keycombo separated\" title=\"Delete\"><kbd class=\"key\">Delete</kbd></span>, but changed it to<span class=\"keycombo separated\" title=\"N\"><kbd class=\"key\">N</kbd></span> so I can have <span class=\"keycombo separated\" title=\"Y\"><kbd class=\"key\">Y</kbd></span> and <span class=\"keycombo separated\" title=\"N\"><kbd class=\"key\">N</kbd></span> for <span class=\"keycombo separated\" title=\"Page Up Key\"><kbd class=\"key\">Page Up</kbd></span> and<span class=\"keycombo separated\" title=\"Page Down Key\"><kbd class=\"key\">Page Down</kbd></span>.</p><p>To implement this in Karabiner, you need to create a new complex rule, and paste in this JSON:</p><div class=\"language-json highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"p\">{</span><span class=\"w\">    </span><span class=\"nl\">\"description\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"Control-Delete toggles 60% edit mode (I/J/K/L → ↑/←/↓/→, U/O → Home/End, N → Delete, Y/H → PageUp/PageDown)\"</span><span class=\"p\">,</span><span class=\"w\">    </span><span class=\"nl\">\"manipulators\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">0</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"delete_or_backspace\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"mandatory\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"control\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"set_variable\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                        </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                        </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                    </span><span class=\"p\">}</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"delete_or_backspace\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"mandatory\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"control\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"set_variable\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                        </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                        </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">0</span><span class=\"w\">                    </span><span class=\"p\">}</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"i\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"up_arrow\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"k\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"down_arrow\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"j\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"left_arrow\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"l\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"right_arrow\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"u\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"home\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"o\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"end\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"n\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"delete_forward\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"y\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"page_up\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">},</span><span class=\"w\">        </span><span class=\"p\">{</span><span class=\"w\">            </span><span class=\"nl\">\"conditions\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"w\">                </span><span class=\"p\">{</span><span class=\"w\">                    </span><span class=\"nl\">\"name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"sixty_edit_mode\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"variable_if\"</span><span class=\"p\">,</span><span class=\"w\">                    </span><span class=\"nl\">\"value\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\">                </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">],</span><span class=\"w\">            </span><span class=\"nl\">\"from\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\">                </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"h\"</span><span class=\"p\">,</span><span class=\"w\">                </span><span class=\"nl\">\"modifiers\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"nl\">\"optional\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"any\"</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">            </span><span class=\"p\">},</span><span class=\"w\">            </span><span class=\"nl\">\"to\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\"> </span><span class=\"nl\">\"key_code\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"page_down\"</span><span class=\"w\"> </span><span class=\"p\">}],</span><span class=\"w\">            </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"basic\"</span><span class=\"w\">        </span><span class=\"p\">}</span><span class=\"w\">    </span><span class=\"p\">]</span><span class=\"w\"></span><span class=\"p\">}</span><span class=\"w\"></span></code></pre></div></div><p>If these keys don’t work for you, and you are handy with JSON, you can probablyfigure out how to edit this.</p><p>If you aren’t handy with JSON or aren’t a Karabiner expert, paste the code aboveinto your favorite chatbot, tell it this is a Karabiner-Elements complexrule, and use plain english to describe what you want to change. It will do apretty good job of making the changes for you.</p>"
        },
        {
            "id": "https://www.kotfu.net/2025/08/authors-v-ai.html",
            "title": "Authors v. AI",
            "url": "https://www.kotfu.net/2025/08/authors-v-ai.html",
            "date_published": "2025-08-10T21:45:00-06:00",
            "date_modified": "2025-08-10T22:34:55-06:00",
            "content_text": "Anthropic bought paper copies of books, scanned them, and used the resultingdata to train their large langugage models. Authors sued, claiming this was not fair useunder copyright law, and got their case certified as a class action.The case was assigned to District Judge William Alsup, a seasoned US districtcourt judge with deep experience in technology law, including two jury trials inthe Google v Oracle saga over the Java APIs in Android. Last month Judge Alsupruled that it’s fair use for legally obtained books to be used to train largelanguage models. That’s a big win for Anthropic and the other frontier modelcompanies.However, Anthropic is also accused of pirating digital copies of more than7 million books, and these illegally acquired works are not part of thefair use ruling. Judge Alsup also ruled that Anthropic must face a trialover the author’s piracy complaints.US Copyright law includes statutory damages of up to $150,000 for willfulcopyright infringement of a single work. With 7 million works in question,Anthropic faces potential damages of up to a trillion dollars.In their first major filing since Judge Alsup’s ruling, Anthropic isappealing the certification of the class. It’s their best tactic toreduce their financial exposure. Ashley Belangersummarizes Anthropic’s appeal for Ars Technica:  Confronted with such extreme potential damages, Anthropic may lose its rightsto raise valid defenses of its AI training, deciding it would be more prudentto settle, the company argued. And that could set an alarming precedent,considering all the other lawsuits generative AI (GenAI) companies face overtraining on copyrighted materials, Anthropic argued.No, Anthropic won’t lose any rights if they decide to settle. They made their choicewhen they willfully decided to pirate copyrighted works and hoped nobody would notice.Now that everyone knows, they may choose to settle and avoid a trial because if theylose at trial it’s a company ending event. Yes, the precendent would beground-breaking, but it’s only alarming if you are infringing author’s rights. Ifother frontier model companies have done the same thing, they should have to facelawsuits as well.Copyright class action lawsuits are incredibly complex, the case againstAnthropic will take a long time, and the outcome is far from certain.Authors Guild v. Googletook 10 years for the appeals court to finally rule that Google’s Books projectof scanning copyrighted works and publishing them on the internet “providesa public service without violating intellectual property law”. It was appealedto the Supreme Court, which declined to hear the case.I’ll be following Authors Guild v. Anthropic with great interest, even ifthe certification of the class is overturned. If the individual authorswin against Anthropic, the floodgates will be open for claimants to sueevery frontier model company. We already know thatMeta pirated 7.5 books and 81 million research papers. If there is a precedent set in Authors Guild v. Anthropic,I’ll bet it will only take one phone call to find a lawyer who will help yousue Meta, OpenAI, and Google on the same grounds. A trillion dollars ofdamages from Anthropic, another trillion from Meta, and pretty soon you aretalking real money.",
            "content_html": "<p>Anthropic bought paper copies of books, scanned them, and used the resultingdata to train their large langugage models. Authors sued, claiming this was not fair useunder copyright law, and got their case certified as a class action.</p><p>The case was assigned to District Judge William Alsup, a seasoned US districtcourt judge with deep experience in technology law, including two jury trials inthe Google v Oracle saga over the Java APIs in Android. Last month Judge Alsupruled that it’s fair use for legally obtained books to be used to train largelanguage models. That’s a big win for Anthropic and the other frontier modelcompanies.</p><p>However, Anthropic is also accused of pirating digital copies of more than7 million books, and these illegally acquired works are not part of thefair use ruling. Judge Alsup also ruled that Anthropic must face a trialover the author’s piracy complaints.</p><p>US Copyright law includes statutory damages of up to $150,000 for willfulcopyright infringement of a single work. With 7 million works in question,Anthropic faces potential damages of up to a trillion dollars.</p><p>In their first major filing since Judge Alsup’s ruling, Anthropic isappealing the certification of the class. It’s their best tactic toreduce their financial exposure. Ashley Belanger<a href=\"https://arstechnica.com/tech-policy/2025/08/ai-industry-horrified-to-face-largest-copyright-class-action-ever-certified/\">summarizes Anthropic’s appeal for Ars Technica</a>:</p><blockquote>  <p>Confronted with such extreme potential damages, Anthropic may lose its rightsto raise valid defenses of its AI training, deciding it would be more prudentto settle, the company argued. And that could set an alarming precedent,considering all the other lawsuits generative AI (GenAI) companies face overtraining on copyrighted materials, Anthropic argued.</p></blockquote><p>No, Anthropic won’t lose any rights if they decide to settle. They made their choicewhen they willfully decided to pirate copyrighted works and hoped nobody would notice.Now that everyone knows, they may choose to settle and avoid a trial because if theylose at trial it’s a company ending event. Yes, the precendent would beground-breaking, but it’s only alarming if you are infringing author’s rights. Ifother frontier model companies have done the same thing, they should have to facelawsuits as well.</p><p>Copyright class action lawsuits are incredibly complex, the case againstAnthropic will take a long time, and the outcome is far from certain.<a href=\"https://en.wikipedia.org/wiki/Authors_Guild,_Inc._v._Google,_Inc.\">Authors Guild v. Google</a>took 10 years for the appeals court to finally rule that Google’s Books projectof scanning copyrighted works and publishing them on the internet “providesa public service without violating intellectual property law”. It was appealedto the Supreme Court, which declined to hear the case.</p><p>I’ll be following Authors Guild v. Anthropic with great interest, even ifthe certification of the class is overturned. If the individual authorswin against Anthropic, the floodgates will be open for claimants to sueevery frontier model company. We already know that<a href=\"https://www.theatlantic.com/technology/archive/2025/03/libgen-meta-openai/682093/\">Meta pirated 7.5 books and 81 million research papers</a>. If there is a precedent set in Authors Guild v. Anthropic,I’ll bet it will only take one phone call to find a lawyer who will help yousue Meta, OpenAI, and Google on the same grounds. A trillion dollars ofdamages from Anthropic, another trillion from Meta, and pretty soon you aretalking real money.</p>"
        },
        {
            "id": "https://www.kotfu.net/2025/05/tear-down-this-wall.html",
            "title": "Tear Down This Wall",
            "url": "https://www.kotfu.net/2025/05/tear-down-this-wall.html",
            "date_published": "2025-05-07T09:22:00-06:00",
            "date_modified": "2025-05-19T21:39:20-06:00",
            "content_text": "Apple created an iconic commercialfor the introduction of the Macintosh in 1984. The punchline: “You’ll see why1984 won’t be like 1984”. 40 years later, Apple has becomeOceania.A few weeks ago, Judge Yvonne Gonzalez Rogers made a landmark ruling in the Epicv. Apple case started in August 2020. After a trial, Judge Rogers issued thefirst ruling in September 2021. Apple won 9 of the 10 counts, but the courtfound Apple’s prohibition on linking to web for “outside the app” payments wasanticompetitive and issued an injunction. Apple appealed all the way to theSupreme Court, who declined to take up the case. Meanwhile Apple continued withwhat many have labeled malicious compliance. There is an extensive record in this case:the April 30 order is the 1,508th item in the docket. This latest ruling is nota rushed one, the Judge has had enough. These are the first two sentences or the order:  For the reasons set forth herein, the Court FINDS Apple in willful violationof this Court’s 2021 Injunction which issued to restrain and prohibit Apple’santicompetitive conduct and anticompetitive pricing. Apple’s continuedattempts to interfere with competition will not be tolerated.It gets worse:  In stark contrast to Apple’s initial in-court testimony, contemporaneousbusiness documents reveal that Apple knew exactly what it was doing and at everyturn chose the most anticompetitive option. To hide the truth, Vice-President ofFinance, Alex Roman, outright lied under oath. Internally, Phillip Schiller hadadvocated that Apple comply with the Injunction, but Tim Cook ignored Schillerand instead allowed Chief Financial Officer Luca Maestri and his finance team toconvince him otherwise. Cook chose poorly. The real evidence, detailed herein,more than meets the clear and convincing standard to find a violation. The Courtrefers the matter to the United States Attorney for the Northern District ofCalifornia to investigate whether criminal contempt proceedings are appropriate.  This is an injunction, not a negotiation. There are no do-overs once a partywillfully disregards a court order. Time is of the essence. The Court will nottolerate further delays. As previously ordered, Apple will not impedecompetition. The Court enjoins Apple from implementing its new anticompetitiveacts to avoid compliance with the Injunction. Effective immediately Apple willno longer impede developers’ ability to communicate with users nor will theylevy or impose a new commission on off-app purchases.And here’s her closer:  Apple willfully chose not to comply with this Court’s Injunction. It did so with the expressintent to create new anticompetitive barriers which would, by design and in effect, maintain avalued revenue stream; a revenue stream previously found to be anticompetitive. That it thoughtthis Court would tolerate such insubordination was a gross miscalculation. As always, the cover-up made it worse. For this Court, there is no second bite at the apple.It has taken years, but the European Digital Markets Act combined with thisruling in the United States has finally opened the gate to more meaningfulcompetition in Apple’s walled garden. The costs have been staggering, as youmight expect when going up against one of the most valueable companies in theworld, who also has an enormous cash reserve. In theMay 6 episodeof his Channels podcast, Peter Kafka interviewed Tim Sweeney, CEO of Epic Games. Tim says theyspent more than $100 millionin legal feeds on Epic vs Apple.Naturally Apple is appealing this recent order, but I think it’s unlikely to be successful. Meanwhile,they are finally complying with the injuction issued way back in 2021. Amazon added a “Get Book” to theKindle app. Spotify now shows links in their app to buy various subscription plans on the web. Patreonupdated their app to allow fans to subscribe on the web, bypassing Apple’s 30% fee.The gate is open, let’s tear down this wall.",
            "content_html": "<p>Apple created an <a href=\"https://www.youtube.com/watch?v=VtvjbmoDx-I\">iconic commercial</a>for the introduction of the Macintosh in 1984. The punchline: “You’ll see why1984 won’t be like 1984”. 40 years later, Apple has become<a href=\"https://en.wikipedia.org/wiki/Nineteen_Eighty-Four_(1984_film)\">Oceania</a>.</p><p>A few weeks ago, Judge Yvonne Gonzalez Rogers made a landmark ruling in the Epicv. Apple case started in August 2020. After a trial, Judge Rogers issued thefirst ruling in September 2021. Apple won 9 of the 10 counts, but the courtfound Apple’s prohibition on linking to web for “outside the app” payments wasanticompetitive and issued an injunction. Apple appealed all the way to theSupreme Court, who declined to take up the case. Meanwhile Apple continued withwhat many have labeled malicious compliance. There is an extensive record in this case:the April 30 order is the 1,508th item in the docket. This latest ruling is nota rushed one, the Judge has had enough. These are the first two sentences or the order:</p><blockquote>  <p>For the reasons set forth herein, the Court FINDS Apple in willful violationof this Court’s 2021 Injunction which issued to restrain and prohibit Apple’santicompetitive conduct and anticompetitive pricing. Apple’s continuedattempts to interfere with competition will not be tolerated.</p></blockquote><p>It gets worse:</p><blockquote>  <p>In stark contrast to Apple’s initial in-court testimony, contemporaneousbusiness documents reveal that Apple knew exactly what it was doing and at everyturn chose the most anticompetitive option. To hide the truth, Vice-President ofFinance, Alex Roman, outright lied under oath. Internally, Phillip Schiller hadadvocated that Apple comply with the Injunction, but Tim Cook ignored Schillerand instead allowed Chief Financial Officer Luca Maestri and his finance team toconvince him otherwise. Cook chose poorly. The real evidence, detailed herein,more than meets the clear and convincing standard to find a violation. The Courtrefers the matter to the United States Attorney for the Northern District ofCalifornia to investigate whether criminal contempt proceedings are appropriate.</p>  <p>This is an injunction, not a negotiation. There are no do-overs once a partywillfully disregards a court order. Time is of the essence. The Court will nottolerate further delays. As previously ordered, Apple will not impedecompetition. The Court enjoins Apple from implementing its new anticompetitiveacts to avoid compliance with the Injunction. <strong>Effective immediately</strong> Apple willno longer impede developers’ ability to communicate with users nor will theylevy or impose a new commission on off-app purchases.</p></blockquote><p>And here’s her closer:</p><blockquote>  <p>Apple <strong>willfully</strong> chose not to comply with this Court’s Injunction. It did so with the expressintent to create new anticompetitive barriers which would, by design and in effect, maintain avalued revenue stream; a revenue stream previously found to be anticompetitive. That it thoughtthis Court would tolerate such insubordination was a gross miscalculation. As always, the cover-up made it worse. For this Court, there is no second bite at the apple.</p></blockquote><p>It has taken years, but the European Digital Markets Act combined with thisruling in the United States has finally opened the gate to more meaningfulcompetition in Apple’s walled garden. The costs have been staggering, as youmight expect when going up against one of the most valueable companies in theworld, who also has an enormous cash reserve. In the<a href=\"https://podcasts.apple.com/us/podcast/how-to-fight-apple-and-maybe-win-with-epic-games-ceo/id1080467174?i=1000706504327\">May 6 episode</a>of his Channels podcast, Peter Kafka interviewed Tim Sweeney, CEO of Epic Games. Tim says they<a href=\"https://www.businessinsider.com/tim-sweeeney-epic-games-apple-app-store-interview-peter-kafka-2025-05\">spent more than $100 million</a>in legal feeds on Epic vs Apple.</p><p>Naturally Apple is appealing this recent order, but I think it’s unlikely to be successful. Meanwhile,they are finally complying with the injuction issued way back in 2021. Amazon added a “Get Book” to theKindle app. Spotify now shows links in their app to buy various subscription plans on the web. Patreonupdated their app to allow fans to subscribe on the web, bypassing Apple’s 30% fee.</p><p>The gate is open, let’s <a href=\"https://www.youtube.com/watch?v=WX00QkvK-mQ\">tear down this wall</a>.</p>"
        },
        {
            "id": "https://www.kotfu.net/2025/04/shot-heard-round-the-world.html",
            "title": "Shot Heard Round The World",
            "url": "https://www.kotfu.net/2025/04/shot-heard-round-the-world.html",
            "date_published": "2025-04-19T09:22:00-06:00",
            "date_modified": "2025-12-07T16:09:50-07:00",
            "content_text": "        Old North BridgeNational Park Service Photo Archives250 years ago to the day, the simmering anger between the American colonists andthe British crown spilled into a shooting war. We don’t know whether the firstshots that day were fired on the Lexington green or at the Old North Bridge.Wherever it was, that day marked a key moment on the path to independence.As a child, Ralph Waldo Emerson’s father watched the events at the Old NorthBridge from his nearby home. In that same home, Emerson would later write:  By the rude bridge that arched the flood,Their flag to April’s breeze unfurled,Here once the embattled farmers stood,And fired the shot heard round the world.  − Ralph Waldo Emerson, “Concord Hymn”My eighth great-grandfather Peter Crapo was one of those American farmers, livingin nearby Freetown, MA. He was too far away to have been at the Old NorthBridge, but records from that day document that he marched with Captain LeviRounsevell’s Company on “the alarm of April 19, 1775”.The Commonwealth of Massachusetts commemorates these events as Patriots’ Day. Imark the day with gratitude for the sacrifices of my ancestors to secure theblessings of life, liberty, and the pursuit of happiness. I likewise honor allwho have served, and who serve today for the same noble cause.",
            "content_html": "<figure>    <img src=\"/assets/2025/old-north-bridge.jpg\" alt=\"Old North Bridge near Concord, MA\" />    <figcaption>Old North Bridge<br />National Park Service Photo Archives</figcaption></figure><p>250 years ago to the day, the simmering anger between the American colonists andthe British crown spilled into a shooting war. We don’t know whether the firstshots that day were fired on the Lexington green or at the Old North Bridge.Wherever it was, that day marked a key moment on the path to independence.</p><p>As a child, Ralph Waldo Emerson’s father watched the events at the Old NorthBridge from his nearby home. In that same home, Emerson would later write:</p><blockquote>  <p>By the rude bridge that arched the flood,<br />Their flag to April’s breeze unfurled,<br />Here once the embattled farmers stood,<br />And fired the shot heard round the world.<br /></p>  <p>− Ralph Waldo Emerson, “Concord Hymn”</p></blockquote><p>My eighth great-grandfather Peter Crapo was one of those American farmers, livingin nearby Freetown, MA. He was too far away to have been at the Old NorthBridge, but records from that day document that he marched with Captain LeviRounsevell’s Company on “the alarm of April 19, 1775”.</p><p>The Commonwealth of Massachusetts commemorates these events as Patriots’ Day. Imark the day with gratitude for the sacrifices of my ancestors to secure theblessings of life, liberty, and the pursuit of happiness. I likewise honor allwho have served, and who serve today for the same noble cause.</p>",
            "image": "https://www.kotfu.net/assets/2025/old-north-bridge.jpg"
        },
        {
            "id": "https://www.kotfu.net/2024/08/openbsd-satellite-time-sensor.html",
            "title": "OpenBSD Satellite Time Sensor",
            "url": "https://www.kotfu.net/2024/08/openbsd-satellite-time-sensor.html",
            "date_published": "2024-08-03T08:57:00-06:00",
            "date_modified": "2024-08-03T12:03:24-06:00",
            "content_text": "I just added a new Guide describing how to add a GPS Receiver to your OpenBSDNTP Server whichincreases resiliance and ensures accurate time when internet connectivity is notavailable.",
            "content_html": "<p>I just added a new Guide describing how to <a href=\"/guides/openbsd-ntp-server-with-gps-time-sensor/\">add a GPS Receiver to your OpenBSDNTP Server</a> whichincreases resiliance and ensures accurate time when internet connectivity is notavailable.</p>"
        },
        {
            "id": "https://www.kotfu.net/2024/04/the-cloud-under-the-sea.html",
            "title": "The Cloud Under The Sea",
            "url": "https://www.kotfu.net/2024/04/the-cloud-under-the-sea.html",
            "date_published": "2024-04-16T18:44:00-06:00",
            "date_modified": "2024-04-16T19:52:18-06:00",
            "content_text": "There are 800,000 miles of cables the size of a garden hose that carry the world’sinternational communications. Josh Dzieza writes a delightful long form pieceat The Verge about these cables and the ships that repair them:The Cloud Under The Sea  If, hypothetically, all these cables were to simultaneously break, moderncivilization would cease to function. The financial system would immediatelyfreeze. Currency trading would stop; stock exchanges would close. Banks andgovernments would be unable to move funds between countries because the Swiftand US interbank systems both rely on submarine cables to settle over $10trillion in transactions each day. In large swaths of the world, people woulddiscover their credit cards no longer worked and ATMs would dispense no cash.As US Federal Reserve staff director Steve Malphrus said at a 2009 cablesecurity conference, “When communications networks go down, the financialservices sector does not grind to a halt. It snaps to a halt.”  Corporations would lose the ability to coordinate overseas manufacturing andlogistics. Seemingly local institutions would be paralyzed as outsourcedaccounting, personnel, and customer service departments went dark.Governments, which rely on the same cables as everyone else for the vastmajority of their communications, would be largely cut off from their overseasoutposts and each other. Satellites would not be able to pick up even half apercent of the traffic.",
            "content_html": "<p>There are 800,000 miles of cables the size of a garden hose that carry the world’sinternational communications. Josh Dzieza writes a delightful long form pieceat The Verge about these cables and the ships that repair them:<a href=\"https://www.theverge.com/c/24070570/internet-cables-undersea-deep-repair-ships\">The Cloud Under The Sea</a></p><blockquote>  <p>If, hypothetically, all these cables were to simultaneously break, moderncivilization would cease to function. The financial system would immediatelyfreeze. Currency trading would stop; stock exchanges would close. Banks andgovernments would be unable to move funds between countries because the Swiftand US interbank systems both rely on submarine cables to settle over $10trillion in transactions each day. In large swaths of the world, people woulddiscover their credit cards no longer worked and ATMs would dispense no cash.As US Federal Reserve staff director Steve Malphrus said at a 2009 cablesecurity conference, “When communications networks go down, the financialservices sector does not grind to a halt. It snaps to a halt.”</p>  <p>Corporations would lose the ability to coordinate overseas manufacturing andlogistics. Seemingly local institutions would be paralyzed as outsourcedaccounting, personnel, and customer service departments went dark.Governments, which rely on the same cables as everyone else for the vastmajority of their communications, would be largely cut off from their overseasoutposts and each other. Satellites would not be able to pick up even half apercent of the traffic.</p></blockquote>"
        },
        {
            "id": "https://www.kotfu.net/2024/01/the-legal-foundation-of-american-bureaucracy-is-at-risk.html",
            "title": "The Legal Foundation of American Bureaucracy Is At Risk",
            "url": "https://www.kotfu.net/2024/01/the-legal-foundation-of-american-bureaucracy-is-at-risk.html",
            "date_published": "2024-01-18T12:32:00-07:00",
            "date_modified": "2024-01-18T19:32:05-07:00",
            "content_text": "Over the last 40 years, the Chevron doctrine has been cited as the legaljustification for a wide range of government agency regulation and rulemaking.This precedent was created by a 1984 ruling of the Supreme Court in theChevron v. National Resources Defence Councilcase. The Court ruled that courts should defer to a government agency’s interpretationof the law as long as the interpretation is reasonable. If Congress has been ambiguous or silent, the agency’s reasonable reading should govern. Of crucial importantance, agenciescan do more than interpret overly broad Congressional lawmaking; they cancreate new regulations never debated and approved by Congress as long as theyare “reasonable”. There are some limits to the deference courts must give,but they are narrow in scope and too complex to enumerate here. Chevron hasbecome a pillar of administrative law and has been cited in more than 15,000court cases.This ruling has allowed for the broad expansion and proliferation ofregulations, rules, policies, and guidance that go far beyond what Congress hasauthorized. For example, the Food and Drug Administration went from aformal rule-making approach, to an informal rule-making approach whichskips the cumbersome public hearings, to issuingnon-binding guidelines1which are very difficult or impossible to challenge in court and are thereforeeffectivly legally binding:  After courts decided that the residual rulemaking authority in thestatute empowered the FDA to issue binding regulations on mattersnot specifically covered by the formal rulemaking provision, theagency began to utilize “notice-and-comment” procedures for the promulgationof rules. The courts also, however, allowed interested parties to bringpre-enforcement challenges to such rules. Although “informal”rulemaking avoided the cumbersome hearings required with formal rulemaking,searching judicial review on the merits and increasing procedural demandsadded by all three branches of government have made it increasingly difficult.As a result, the FDA and other agencies have experimented with furthershortcuts for issuing regulations.  As informal rulemaking became more difficult, the FDA shiftedfrom promulgating binding rules to issuing nonbinding guidelines.For instance, rather than go to the trouble of amending its then25-year-old regulations delineating “current” good manufacturing practices(cGMPs) for drugs, the FDA decided to issue guidance for theadoption of innovative quality control technologies by the pharmaceuticalindustry. Similarly, even as prescription drug advertising has become increasinglysophisticated, reflecting greater ingenuity and the emergence of brand new mediasuch as the Internet, the FDA has not revised regulations that it issued duringthe 1960s, relying instead on various types of guidelines.I am in favor of some of the regulations now in place because of Chevron. Mostof the developed world models their regulation of pharmaceuticals after theUnited States Food and Drug Administration, and the FDA is undeniably theworld-wide gold standard in safety and efficacy.However, I am vigorously opposed to the relentless sprawl of administrativebureaucracy in government over the last 40 years, much of which has beenjustified and enabled by Chevron. It gives agencies wide-ranging latitudeto interpret, expand, and elaborate on laws passed by Congress. It improperlyshifts the balance of power from the judicial and legislative branches to theexecutive branch. It consolidates rule-making and rule-enforcement into anunaccountable government agency. You can vote your Congressional representativeout of office. What can you do about those who work in the Office of Trainingand Communications, Division of Communications Management, Drug InformationBranch, Center for Drug Evaluation and Research at the Food and DrugAdministration? Yes, that’s one of the official names for the people who issueguidelines on drug advertising. There are at least two other offices and/orcenters within the FDA which may be part of issuing these guidelines. After acouple hours of digging, I couldn’t be sure whether or how all these officesworked together, or didn’t, to produce the advertising guidelines drugmanufacturers must abide by.Yesterday, the justices on the United States Supreme Court heard arguments intwo cases which challege this long-standing principle of legal deference togovernment agencies. Each case involves a fishing company challenging a NationalMarine Fisheries Service requirement that herring boats cover the cost (approx$700 per day) of government-approved observers aboard their vessels.The court could chose to rule only on the specific fishing-related question in thesecases, but most court observers expect them to rule more broadly, and limit or evenpossibly strike down Chevron deference.Reporting for Bloomberg,Jennifer A Dlouhy and Greg Stohr articulate both sides of the issue clearly:  “The idea of deference is a fundamental mechanism for all of the agencies to do their jobs,”Green said during a discussion organized by the Center for American Progress and DemocracyForward. “Agencies have more expertise, they are more specialized and they are more flexible– so they can address new problems and crises that inevitably arise over time that Congress can’t foresee.”True.  Philip Hamburger, founder of the conservative New Civil Liberties Union, said the Supreme Courtshould sweep away a fundamentally flawed doctrine that unfairly tilts legal proceedings. Chevroncompels “a systematic favoring of the most powerful party” in regulatory disputes – the veryagencies that wrote the rules – said Hamburger, whose group represents fishing industry clientsin one of the high court cases.Also true.I expect that the current court will do more than narrowly resolve the two fishing casesthat were heard today. If they do, it could be one of the most impactful rulings of the JohnRoberts era.            Lars Noah, The Little Agency That Could (Act with Indifference to Constitutional and Statutory Strictures), 93 Cornell L. Rev. 901 (2008) &#8617;      ",
            "content_html": "<p>Over the last 40 years, the Chevron doctrine has been cited as the legaljustification for a wide range of government agency regulation and rulemaking.This precedent was created by a 1984 ruling of the Supreme Court in the<a href=\"https://supreme.justia.com/cases/federal/us/467/837/\">Chevron v. National Resources Defence Council</a>case. The Court ruled that courts should defer to a government agency’s interpretationof the law as long as the interpretation is reasonable. If <a href=\"https://news.harvard.edu/gazette/story/2024/01/chevron-deference-faces-existential-test/\">Congress has been ambiguous or silent, the agency’s reasonable reading should govern</a>. Of crucial importantance, agenciescan do more than interpret overly broad Congressional lawmaking; they cancreate new regulations never debated and approved by Congress as long as theyare “reasonable”. There are some limits to the deference courts must give,but they are narrow in scope and too complex to enumerate here. <em>Chevron</em> hasbecome a pillar of administrative law and has been cited in more than 15,000court cases.</p><p>This ruling has allowed for the broad expansion and proliferation ofregulations, rules, policies, and guidance that go far beyond what Congress hasauthorized. For example, the Food and Drug Administration went from aformal rule-making approach, to an informal rule-making approach whichskips the cumbersome public hearings, to issuing<a href=\"https://scholarship.law.cornell.edu/clr/vol93/iss5/9/\">non-binding guidelines</a><sup id=\"fnref:1\"><a href=\"#fn:1\" class=\"footnote\" rel=\"footnote\" role=\"doc-noteref\">1</a></sup>which are very difficult or impossible to challenge in court and are thereforeeffectivly legally binding:</p><blockquote>  <p>After courts decided that the residual rulemaking authority in thestatute empowered the FDA to issue binding regulations on mattersnot specifically covered by the formal rulemaking provision, theagency began to utilize “notice-and-comment” procedures for the promulgationof rules. The courts also, however, allowed interested parties to bringpre-enforcement challenges to such rules. Although “informal”rulemaking avoided the cumbersome hearings required with formal rulemaking,searching judicial review on the merits and increasing procedural demandsadded by all three branches of government have made it increasingly difficult.As a result, the FDA and other agencies have experimented with furthershortcuts for issuing regulations.</p>  <p>As informal rulemaking became more difficult, the FDA shiftedfrom promulgating binding rules to issuing nonbinding guidelines.For instance, rather than go to the trouble of amending its then25-year-old regulations delineating “current” good manufacturing practices(cGMPs) for drugs, the FDA decided to issue guidance for theadoption of innovative quality control technologies by the pharmaceuticalindustry. Similarly, even as prescription drug advertising has become increasinglysophisticated, reflecting greater ingenuity and the emergence of brand new mediasuch as the Internet, the FDA has not revised regulations that it issued duringthe 1960s, relying instead on various types of guidelines.</p></blockquote><p>I am in favor of some of the regulations now in place because of <em>Chevron</em>. Mostof the developed world models their regulation of pharmaceuticals after theUnited States Food and Drug Administration, and the FDA is undeniably theworld-wide gold standard in safety and efficacy.</p><p>However, I am vigorously opposed to the relentless sprawl of administrativebureaucracy in government over the last 40 years, much of which has beenjustified and enabled by <em>Chevron</em>. It gives agencies wide-ranging latitudeto interpret, expand, and elaborate on laws passed by Congress. It improperlyshifts the balance of power from the judicial and legislative branches to theexecutive branch. It consolidates rule-making and rule-enforcement into anunaccountable government agency. You can vote your Congressional representativeout of office. What can you do about those who work in the Office of Trainingand Communications, Division of Communications Management, Drug InformationBranch, Center for Drug Evaluation and Research at the Food and DrugAdministration? Yes, that’s one of the official names for the people who issueguidelines on drug advertising. There are at least two other offices and/orcenters within the FDA which may be part of issuing these guidelines. After acouple hours of digging, I couldn’t be sure whether or how all these officesworked together, or didn’t, to produce the advertising guidelines drugmanufacturers must abide by.</p><p>Yesterday, the justices on the United States Supreme Court heard arguments intwo cases which challege this long-standing principle of legal deference togovernment agencies. Each case involves a fishing company challenging a NationalMarine Fisheries Service requirement that herring boats cover the cost (approx$700 per day) of government-approved observers aboard their vessels.</p><p>The court could chose to rule only on the specific fishing-related question in thesecases, but most court observers expect them to rule more broadly, and limit or evenpossibly strike down Chevron deference.</p><p><a href=\"https://www.bloomberg.com/news/articles/2024-01-16/supreme-court-s-anti-regulatory-drive-capped-by-fishing-fee-case?sref=KkPzpZvz\">Reporting for Bloomberg</a>,Jennifer A Dlouhy and Greg Stohr articulate both sides of the issue clearly:</p><blockquote>  <p>“The idea of deference is a fundamental mechanism for all of the agencies to do their jobs,”Green said during a discussion organized by the Center for American Progress and DemocracyForward. “Agencies have more expertise, they are more specialized and they are more flexible– so they can address new problems and crises that inevitably arise over time that Congress can’t foresee.”</p></blockquote><p>True.</p><blockquote>  <p>Philip Hamburger, founder of the conservative New Civil Liberties Union, said the Supreme Courtshould sweep away a fundamentally flawed doctrine that unfairly tilts legal proceedings. Chevroncompels “a systematic favoring of the most powerful party” in regulatory disputes – the veryagencies that wrote the rules – said Hamburger, whose group represents fishing industry clientsin one of the high court cases.</p></blockquote><p>Also true.</p><p>I expect that the current court will do more than narrowly resolve the two fishing casesthat were heard today. If they do, it could be one of the most impactful rulings of the JohnRoberts era.</p><div class=\"footnotes\" role=\"doc-endnotes\">  <ol>    <li id=\"fn:1\">      <p>Lars Noah, <em>The Little Agency That Could (Act with Indifference to Constitutional and Statutory Strictures)</em>, 93 Cornell L. Rev. 901 (2008) <a href=\"#fnref:1\" class=\"reversefootnote\" role=\"doc-backlink\">&#8617;</a></p>    </li>  </ol></div>"
        },
        {
            "id": "https://www.kotfu.net/2024/01/cell-phone-passcodes-protected-by-5th-amendment-in-utah.html",
            "title": "Utah Supreme Court Rules Cell Phone Passcodes Are Protected By The 5th Amendment",
            "url": "https://www.kotfu.net/2024/01/cell-phone-passcodes-protected-by-5th-amendment-in-utah.html",
            "date_published": "2024-01-15T22:32:00-07:00",
            "date_modified": "2024-01-15T22:35:18-07:00",
            "content_text": "The United States Supreme Court has yet to issue a ruling on whether someone accused ofa crime can be compelled to provide the passcode to their cell phone.I believe the 5th Amendment protects cell phone passcodes, and defendents can refuseto provide the passcode to their phone, even if law enforcement has a warrent for the contentsof the cell phone.The Utah Supreme Court has ruled that not providing a passcode should not be held against a criminal defendant,or used against them at trial.More of this please.",
            "content_html": "<p>The United States Supreme Court has yet to issue a ruling on whether someone accused ofa crime can be compelled to provide the passcode to their cell phone.</p><p>I believe the 5th Amendment protects cell phone passcodes, and defendents can refuseto provide the passcode to their phone, even if law enforcement has a warrent for the contentsof the cell phone.</p><p>The Utah Supreme Court <a href=\"https://www.ksl.com/article/50844081/utah-supreme-court-rules-cellphone-passcodes-are-protected-under-5th-amendment\">has ruled that not providing a passcode should not be held against a criminal defendant</a>,or used against them at trial.</p><p>More of this please.</p>"
        },
        {
            "id": "https://www.kotfu.net/2023/04/the-most-important-copyright-battle-of-our-lives.html",
            "title": "The Most Important Copyright Battle of Our Lives",
            "url": "https://www.kotfu.net/2023/04/the-most-important-copyright-battle-of-our-lives.html",
            "date_published": "2023-04-22T11:45:00-06:00",
            "date_modified": "2023-04-22T12:52:56-06:00",
            "content_text": "In the last 12 months, what the lay person would call artificial intelligencehas taken a major jump forward. OpenAI launched ChatGPTon November 30, 2022 and probably hasthe fastest growing user base of any product in history.I say probably, because OpenAI hasn’t disclosed any usage data. But it went from a thingthat didn’t exist to the thing that everyone was using in just a few months.ChapGPT is more properly categorized as a large language model, and there are manynew implementations of these models which can generate images, video, and music. Allthese models had to be trained on something, and they were all trained on data fromon the internet, which creates a legal dilemma under current US law.Just because this blog post is available on the web doesn’t mean that I haverelenquished the copyright. Neither the statue nor the case law are clear onwhether using a copyrighted work to train a large language model is fair use.In the short few months since these models became wildly popular, this hasbeen mostly a thought exercise. Getty Images brought the first notable casesin this area of the law bysuing Stability AIin both the US and the UK. Getty alleges:  Stability AI has copied more than 12 million photographs from Getty Images’collection, along with the associated captions and metadata, without permissionfrom or compensation to Getty Images, as part of its efforts to build a competingbusiness.Court cases take a long time. DCMA takedown notices get processed much faster.Nilay Patel explains:  The AI Drake track that mysteriously went viral over the weekend is the startof a problem that will upend Google in one way or another — and it’s really notclear which way it will go.  Here’s the basics: there’s a new track called “Heart on My Sleeve” by a TikTokuser called @ghostwriter877 with AI-generated vocals that sound like Drake andThe Weeknd.This track was posted to YouTube, and then Google got a DMCA takedown notice fromUniversal Music Group:  But then TikTok and YouTube also pulled the track. And YouTube, in particular,pulled it with a statement that it was removed due to a copyright notice from UMG.And this is where it gets fascinatingly weedsy and probably existentially difficultfor Google: to issue a copyright takedown to YouTube, you need to have… a copyrighton something. Since “Heart on my Sleeve” is an original song, UMG doesn’t own it —it’s not a copy of any song in the label’s catalog.  So what did UMG claim? I have been told that the label considers the Metro Boominproducer tag at the start of the song to be an unauthorized sample, and that theDMCA takedown notice was issued specifically about that sample and that sample alone.Nilay explains Google’s predicament with “Heart on My Sleeve”, but it’s merely anotherskirmish in the broader war. We have large language models that canpass the bar exam. Butonly when trained on a corpus of data with legally disputed provenance. The lawyersare gonna make a lot of money over the next decade as we sort this all out.",
            "content_html": "<p>In the last 12 months, what the lay person would call artificial intelligencehas taken a major jump forward. OpenAI <a href=\"https://openai.com/blog/chatgpt\">launched ChatGPT</a>on November 30, 2022 and probably has<a href=\"https://www.reuters.com/technology/chatgpt-sets-record-fastest-growing-user-base-analyst-note-2023-02-01/\">the fastest growing user base of any product in history</a>.I say probably, because OpenAI hasn’t disclosed any usage data. But it went from a thingthat didn’t exist to the thing that everyone was using in just a few months.</p><p>ChapGPT is more properly categorized as a large language model, and there are manynew implementations of these models which can generate images, video, and music. Allthese models had to be trained on something, and they were all trained on data fromon the internet, which creates a legal dilemma under current US law.</p><p>Just because this blog post is available on the web doesn’t mean that I haverelenquished the copyright. Neither the statue nor the case law are clear onwhether using a copyrighted work to train a large language model is fair use.In the short few months since these models became wildly popular, this hasbeen mostly a thought exercise. Getty Images brought the first notable casesin this area of the law by<a href=\"https://arstechnica.com/tech-policy/2023/02/getty-sues-stability-ai-for-copying-12m-photos-and-imitating-famous-watermark/\">suing Stability AI</a>in both the US and the UK. Getty alleges:</p><blockquote>  <p>Stability AI has copied more than 12 million photographs from Getty Images’collection, along with the associated captions and metadata, without permissionfrom or compensation to Getty Images, as part of its efforts to build a competingbusiness.</p></blockquote><p>Court cases take a long time. DCMA takedown notices get processed much faster.Nilay Patel <a href=\"https://www.theverge.com/2023/4/19/23689879/ai-drake-song-google-youtube-fair-use\">explains</a>:</p><blockquote>  <p>The AI Drake track that mysteriously went viral over the weekend is the startof a problem that will upend Google in one way or another — and it’s really notclear which way it will go.</p></blockquote><blockquote>  <p>Here’s the basics: there’s a new track called “Heart on My Sleeve” by a TikTokuser called @ghostwriter877 with AI-generated vocals that sound like Drake andThe Weeknd.</p></blockquote><p>This track was posted to YouTube, and then Google got a DMCA takedown notice fromUniversal Music Group:</p><blockquote>  <p>But then TikTok and YouTube also pulled the track. And YouTube, in particular,pulled it with a statement that it was removed due to a copyright notice from UMG.And this is where it gets fascinatingly weedsy and probably existentially difficultfor Google: to issue a copyright takedown to YouTube, you need to have… a copyrighton something. Since “Heart on my Sleeve” is an original song, UMG doesn’t own it —it’s not a copy of any song in the label’s catalog.</p></blockquote><blockquote>  <p>So what did UMG claim? I have been told that the label considers the Metro Boominproducer tag at the start of the song to be an unauthorized sample, and that theDMCA takedown notice was issued specifically about that sample and that sample alone.</p></blockquote><p>Nilay explains Google’s predicament with “Heart on My Sleeve”, but it’s merely anotherskirmish in the broader war. We have large language models that can<a href=\"https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4389233\">pass the bar exam</a>. Butonly when trained on a corpus of data with legally disputed provenance. The lawyersare gonna make a lot of money over the next decade as we sort this all out.</p>"
        },
        {
            "id": "https://www.kotfu.net/2023/04/the-gambler-who-beat-roulette.html",
            "title": "The Gambler Who Beat Roulette",
            "url": "https://www.kotfu.net/2023/04/the-gambler-who-beat-roulette.html",
            "date_published": "2023-04-22T11:22:00-06:00",
            "date_modified": "2023-04-22T11:36:41-06:00",
            "content_text": "I’m a sucker for a good heist story, and this is agood heist story.  “It is practically impossible to predict the number that will come up,”Stephen Hawking once wrote about roulette. “Otherwise physicists would makea fortune at casinos.” The game was designed to be random; chaos, elegantlyrendered in circular motion.  … The green 0 pocket (with an additional 00 pocket on American wheels) means eventhe highest-odds bets, on red or black for example, have a slightly less than halfchance of success. Everyone loses eventually.  Except for Niko Tosa and his friends. When the Croatian left the casino in the earlyhours of March 16, he’d turned £30,000 worth of chips into a £310,000 check. HisSerbian partner did even better, making £684,000 from his initial £60,000. He askedfor a half-million in two checks and the rest in cash. That brought the group’s take,including from earlier sessions, to about £1.3 million.",
            "content_html": "<p>I’m a sucker for a good heist story, and this is a<a href=\"https://www.bloomberg.com/features/2023-how-to-beat-roulette-gambler-figures-it-out/\">good heist story</a>.</p><blockquote>  <p>“It is practically impossible to predict the number that will come up,”Stephen Hawking once wrote about roulette. “Otherwise physicists would makea fortune at casinos.” The game was designed to be random; chaos, elegantlyrendered in circular motion.</p></blockquote><blockquote>  <p>… The green 0 pocket (with an additional 00 pocket on American wheels) means eventhe highest-odds bets, on red or black for example, have a slightly less than halfchance of success. Everyone loses eventually.</p>  <p>Except for Niko Tosa and his friends. When the Croatian left the casino in the earlyhours of March 16, he’d turned £30,000 worth of chips into a £310,000 check. HisSerbian partner did even better, making £684,000 from his initial £60,000. He askedfor a half-million in two checks and the rest in cash. That brought the group’s take,including from earlier sessions, to about £1.3 million.</p></blockquote>"
        },
        {
            "id": "https://www.kotfu.net/2023/04/leading-from-the-heart.html",
            "title": "Leading From The Heart",
            "url": "https://www.kotfu.net/2023/04/leading-from-the-heart.html",
            "date_published": "2023-04-22T10:37:00-06:00",
            "date_modified": "2024-01-18T19:28:20-07:00",
            "content_text": "Fred Wilson cofounded Union Square Ventures, and has invested in hundreds of companies.He says that leading from the heart is very powerful.  I have watched so many leaders over the years in my various roles as lead investor,board member, board chair, investor, and advisor.  And one thing I have learned from this front-row seat is that leading from the heartis very powerful.  A leader can be the most brilliant product person, strategist, entrepreneur, and businessbuilder, but if they cannot get people to follow them, trust them, and care for them, theywill not be an effective leader.I am now working in my eighth tech startup. Much is expected from leaders in any company. Evenmore is expected from leaders of startups. I’ve experienced the full spectrum of emotionalleadership. The most fun and most personally rewarding companies I’ve worked at all hadleaders with a high emotional quotient.",
            "content_html": "<p>Fred Wilson cofounded Union Square Ventures, and has invested in hundreds of companies.</p><p>He says that <a href=\"https://avc.com/2023/04/leading-from-the-heart/\">leading from the heart is very powerful</a>.</p><blockquote>  <p>I have watched so many leaders over the years in my various roles as lead investor,board member, board chair, investor, and advisor.</p></blockquote><blockquote>  <p>And one thing I have learned from this front-row seat is that leading from the heartis very powerful.</p></blockquote><blockquote>  <p>A leader can be the most brilliant product person, strategist, entrepreneur, and businessbuilder, but if they cannot get people to follow them, trust them, and care for them, theywill not be an effective leader.</p></blockquote><p>I am now working in my eighth tech startup. Much is expected from leaders in any company. Evenmore is expected from leaders of startups. I’ve experienced the full spectrum of emotionalleadership. The most fun and most personally rewarding companies I’ve worked at all hadleaders with a high emotional quotient.</p>"
        }
    ]
}
