<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7100397</id><updated>2026-03-13T17:31:17.629-07:00</updated><category term="Ruby"/><category term="Java"/><category term="Clojure"/><category term="Lisp"/><category term="AI"/><category term="politics"/><category term="semantic web"/><category term="Ruby Rails"/><category term="Javascript"/><category term="AppEngine"/><category term="knowledge management"/><category term="economy"/><category term="IT"/><category term="Google"/><category term="Smalltalk"/><category term="Scala"/><category term="technical writing"/><category term="Haskell"/><category term="Latex"/><category term="search"/><category term="Amazon"/><category term="JRuby"/><category term="Python"/><category term="machine learning"/><category term="media"/><category term="MongoDB"/><category term="business"/><category term="data mining"/><category term="NLP"/><category term="open source"/><category term="web applications"/><category term="AJAX"/><category term="HTML5"/><category term="Hadoop"/><category term="Linux"/><category term="RDF"/><category term="CSS"/><category term="Scheme"/><category term="object mapping"/><category term="GWT"/><category term="Pharo"/><category term="SmartGWT"/><category term="commercial products"/><category term="Clojurescript"/><category term="CouchDB"/><category term="Dojo"/><category term="EC2"/><category term="Merb"/><category term="PaaS"/><category term="Ubuntu"/><category term="Wave"/><category term="cloud computing"/><category term="no-SQL"/><category term="social graph"/><category term="Android"/><category term="Compojure"/><category term="Deep Learning"/><category term="Erlang"/><category term="Freebase"/><category term="Heroku"/><category term="J2EE"/><category term="MapReduce"/><category term="Microsoft"/><category term="NetBeans"/><category term="PostgreSQL"/><category term="Privacy"/><category term="Squeak"/><category term="mobile devices"/><category term="productivity"/><category term="social media"/><category term="textmining"/><category term="AWS"/><category term="AllegroGraph"/><category term="Apple"/><category term="C++"/><category term="Cassandra"/><category term="Chromebook"/><category term="Emacs"/><category term="Ember.js"/><category term="FSF"/><category term="Glassfish"/><category term="IDEs"/><category term="IntelliJ"/><category term="LLM"/><category term="Neo4j"/><category term="Prolog"/><category term="Seaside"/><category term="Sedona"/><category term="Sesame"/><category term="SimpleDB"/><category term="TensorFlow"/><category term="Web 3.0"/><category term="admin"/><category term="food"/><category term="health"/><category term="nginx"/><category term="nutrition"/><category term="open content"/><category term="Apache"/><category term="Buzz"/><category term="C#"/><category term="Common Lisp"/><category term="Cucumber"/><category term="DBPedia"/><category term="EFF"/><category term="EJB"/><category term="Eclipse"/><category term="Facebook"/><category term="Gambit-C"/><category term="Google TV"/><category term="HTTPS"/><category term="IBM"/><category term="Internet"/><category term="JPA"/><category term="JSP"/><category term="Julia language"/><category term="Keras"/><category term="Knowledge Graph"/><category term="Lucene"/><category term="Mac"/><category term="Mahout"/><category term="Maven"/><category term="Mongrel"/><category term="MySQL"/><category term="Mylin"/><category term="Noir"/><category term="ODF"/><category term="OS X"/><category term="Ontology"/><category term="PGM"/><category term="Platform as a Service"/><category term="Play Framework"/><category term="RDFa"/><category term="Racket"/><category term="Ring"/><category term="SOA"/><category term="SPARQL"/><category term="SSL"/><category term="Testing"/><category term="Typescript"/><category term="Windows"/><category term="blockchain"/><category term="clustering"/><category term="deployment"/><category term="expert system"/><category term="games"/><category term="hyperledger"/><category term="iOS"/><category term="iPhone"/><category term="jQuery"/><category term="macOS"/><category term="mathematics"/><category term="nitrous.io"/><category term="platforms"/><category term="publishing"/><category term="source code"/><category term="standalone executables"/><category term="support vector machines"/><category term="travel"/><category term="vacation"/><title type='text'>Mark Watson&#39;s artificial intelligence and Lisp hacking blog</title><subtitle type='html'>I am a consultant and the author of 20+ books on artificial intelligence, machine learning, and the semantic web. 55 US patents. My favorite languages are Common Lisp, Haskell, Clojure, and Python. I live in Flagstaff Arizona.&lt;br&gt;&lt;a href=&quot;https://markwatson.com&quot;&gt;My personal web site: hire me for part time work!&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Privacy Policy:&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;My blog is hosted on Google&#39;s Blogger service.&lt;/b&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1195</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7100397.post-7096900169752434305</id><published>2025-11-14T15:38:00.003-07:00</published><updated>2025-11-14T15:38:51.163-07:00</updated><title type='text'>Supporting Goals of Free Software Foundation while using Apple hardware</title><content type='html'>&lt;p&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;I just rejoined the FSF (&lt;/span&gt;&lt;a href=&quot;https://www.fsf.org/&quot; style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;https://www.fsf.org/&lt;/a&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px;&quot;&gt;) recently after almost ten years of not being a member. For decades I relied on Linux for work and writing and being a member of the FSF made sense. However when I decided to simplify my life and use a MacBook, an iPhone, and an iPad I let my FSF membership drop. I am enjoying being a member again.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 14px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal;&quot;&gt;I am not recommending that anyone adopt &lt;/span&gt;my setup, but it may still be of general interest:&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;b&gt;Apps vs. Web Browser&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;On mobile devices (and my MacBook) I don’t like to install apps unless it is something like a Chess game app. Services like Email, Mastodon, Facebook, YouTube, and X all work fine in a web browser, even with the DuckDuckGo browser which is usually my default.&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;b&gt;Email&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;I use my own custom domain on Apple iCloud email. Convenient enough. I use backup ProtonMail and Gmail accounts.&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;I use the DuckDuckGo web browser, even on my iPhone, for these three services.&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;b&gt;AI vs. No AI&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;Well, I have been a paid AI practitioner since 1982 but I believe that modern (LLM based) AI should be used purposely, keeping in mind “productivity vs. playing around issues.” The resource costs of overuse of AI might cause an economic crash (a favorite little conspiracy theory of mine).&lt;/p&gt;
&lt;p style=&quot;font-family: Helvetica; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 13px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;I like to have AI available only when I specifically want it. Usually I just code in plain-old Emacs for coding and writing my books. If I specifically want AI help with something then for an IDE experience I will use the TRAE coding agent. For command line, I will use gemini-cli or codex. I like to use AI coding help 4 or 5 times a week. As an example, today I wanted some Python code that used a few libraries converted to Common Lisp (using several popular CL libraries). TRAE one-shotted this for me in two minutes. I think it would have taken me over 20 minutes to write it myself.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 15px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;AI is OK for easy stuff you can do yourself, and save time. I prefer to use it less, rather than more often but I love writing open source software and Open Content licensed books (&lt;a href=&quot;https://leanpub.com/u/markwatson&quot;&gt;https://leanpub.com/u/markwatson&lt;/a&gt;) - no strong desire to over-automate my work. But I appreciate AI tools when I do use them.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 15px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;b&gt;AI / Web Browser Integration?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 15px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;In general I say NO! After reading their privacy docs I did experiment a few hours each with the Perplexity Comet Browser and OpenAI’s ChatGPT Atlas and I have read the docs for Opera Neon and Brave with Leo. (I used Proton’s Lumo AI for two months which is not really a browser integration and decided I didn’t want to pay for it after two months.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 15px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;I am a human being, I like to think for myself, and just use AI sparingly.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 15px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;One option I am investigating is the “AI tab” on the DuckDuckGo browser that seems very useful and is privacy preserving. I am evaluating DDG’s subscription paid plan month by month, haven’t subscribed for a year yet.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 15px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;b&gt;Software Development&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px; min-height: 15px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: white; font-family: Verdana; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-width: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span style=&quot;font-kerning: none;&quot;&gt;I find macOS almost as good as Linux for coding. I do keep one or two small Linux VPSs running on the web when Linux is better than macOS.&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/7096900169752434305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2025/11/supporting-goals-of-free-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7096900169752434305'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7096900169752434305'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2025/11/supporting-goals-of-free-software.html' title='Supporting Goals of Free Software Foundation while using Apple hardware'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-2892123898987526218</id><published>2025-08-30T09:39:00.000-07:00</published><updated>2025-08-30T09:39:28.371-07:00</updated><title type='text'>Notes on effectively using AI</title><content type='html'>&lt;p&gt;&amp;nbsp;I cover the use of LLMs in several of &lt;a href=&quot;https://leanpub.com/u/markwatson&quot; target=&quot;_blank&quot;&gt;the books I have written&lt;/a&gt;. This blog post is meant to be common general purpose advice for effectively using AI using four techniques:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Use one-shot or few-shot prompting: show the AI what you want with examples.&lt;/li&gt;&lt;li&gt;Chain of thought reasoning: LLMs are auto-regressive models so the tokens generated &quot;become part of the prompt,&quot; that is, without asking for chain of thought reasoning if the model makes a quick guess at an answer, then that answer drives the remaining token generation process.&lt;/li&gt;&lt;li&gt;Assigning a role to the AI assistant: for example &quot;You are a historian who uses web search to verify your analysis of history and current events.&quot;&lt;/li&gt;&lt;li&gt;Reverse prompting: explicitly tell the AI to ask you questions (important because modern system prompts often coach a model to not do this).&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;One-shot or few-shot prompting&lt;/h2&gt;&lt;p&gt;As an example, you might want to process input text and save people&#39;s email addresses and names in some structured output format, like JSON. If you don&#39;t start a prompt with context for the format you want, results will vary. Here is an example prompt, where text to be processed would be placed below &lt;b&gt;Text:&lt;/b&gt;.&lt;/p&gt;&lt;pre&gt;#&amp;lt;&amp;lt;EOF&lt;p&gt;You are an information extraction system.&lt;/p&gt;&lt;p&gt;Extract all people’s **full names** and **email addresses** from the following text.&lt;/p&gt;&lt;p&gt;If no names or emails are present, return an empty list.&lt;/p&gt;&lt;p&gt;Return the result strictly in this JSON format:&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp; &quot;contacts&quot;: [&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;name&quot;: &quot;&amp;lt;full name as written in text&amp;gt;&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;email&quot;: &quot;&amp;lt;email address&amp;gt;&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; ]&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;Text:&lt;/p&gt;&lt;p&gt;Hi, I’m Alice Johnson, please email me at alice.j@example.com. &amp;nbsp;&lt;/p&gt;&lt;p&gt;Also, you can reach Bob Smith via bob.smith42@gmail.com.&lt;/p&gt;&lt;p&gt;EOF&lt;/p&gt;&lt;/pre&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Chain of thought reasoning&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;Treat the AI as you world a person: Start a prompt with something like this:&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;Before answering, give a concise reasoning summary: list the key assumptions and the 3–7 high-level steps you’ll take (no inner monologue). Then provide the final answer, followed by a quick self-check (one possible pitfall or edge case). Use Markdown, keep it succinct, and prefer bullet points.&lt;br /&gt;Question: ‹your question›&lt;/span&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/h4&gt;&lt;div&gt;&lt;h2&gt;Assigning a role to the AI assistant:&lt;/h2&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;b&gt;All-purpose role prompt&lt;/b&gt;&lt;/h3&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;You are a ‹role›. Always adopt this perspective when reasoning and answering. If relevant, use external verification (e.g. web search, references, or sources).&lt;br /&gt;Before answering: give a reasoning summary (assumptions + 3–7 steps).&lt;br /&gt;Then: provide the final answer, followed by a self-check (biases, gaps, or counterexamples).&lt;br /&gt;Question: ‹your question›&lt;/span&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;b&gt;Ultra-compact variant&lt;/b&gt;&lt;/h3&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;Act as a ‹role›.&lt;br /&gt;Reasoning summary → answer → self-check.&lt;br /&gt;Q: ‹your question›&lt;/span&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;b&gt;Example (historian role)&lt;/b&gt;&lt;/h3&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;You are a historian who cross-checks analysis using web sources.&lt;br /&gt;Before answering: assumptions + reasoning summary.&lt;br /&gt;Then: provide the historical analysis, with citations when possible.&lt;br /&gt;Self-check: note one uncertainty, bias, or missing source.&lt;br /&gt;Q: How did the Black Death reshape European economies?&lt;/span&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;b&gt;Coding / technical role&lt;/b&gt;&lt;/h3&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;You are a senior software engineer specializing in Python and AI.&lt;br /&gt;Step 1: reasoning summary.&lt;br /&gt;Step 2: final code, with inline explanation.&lt;br /&gt;Step 3: minimal test + note one edge case.&lt;br /&gt;Task: Build a script that reads a CSV and outputs JSON.&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Reverse prompting&lt;/h2&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;All-purpose reverse-prompt&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;Before answering, first ask me clarifying questions if anything is underspecified, ambiguous, or could change the answer. Keep it concise (max 3 questions). If the question is already clear, briefly state: “No clarifications needed.”&lt;br /&gt;Then: give a reasoning summary (assumptions + 3–7 steps).&lt;br /&gt;Finally: provide the answer with a self-check (one pitfall/edge case).&lt;br /&gt;Question: ‹your question›&lt;/span&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Ultra-compact variant&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;Always start by asking me clarifying questions (max 3). If none, say so.&lt;br /&gt;Then: reasoning summary → answer → 1-line self-check.&lt;br /&gt;Q: ‹your question›&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;Coding variant&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=&quot;color: #20124d;&quot;&gt;Step 1: Ask me clarifying questions about requirements (input format, edge cases, env).&lt;br /&gt;Step 2: Reasoning summary.&lt;br /&gt;Step 3: Provide final code, plus a usage example and one edge case.&lt;br /&gt;Task: ‹your task›&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/2892123898987526218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2025/08/notes-on-effectively-using-ai.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2892123898987526218'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2892123898987526218'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2025/08/notes-on-effectively-using-ai.html' title='Notes on effectively using AI'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-1472337296814657634</id><published>2025-07-16T09:57:00.002-07:00</published><updated>2025-11-14T15:42:56.312-07:00</updated><title type='text'>Tool calling with Moonshot&#39;s Kimi K2 mode</title><content type='html'>&lt;p&gt;Moonshot&#39;s new &lt;a href=&quot;https://moonshotai.github.io/Kimi-K2/&quot; target=&quot;_blank&quot;&gt;Kimi 2 &amp;nbsp;model &lt;/a&gt;is extremely inexpensive to use. Moonshot AI (月之暗面) is a prominent Chinese artificial intelligence startup focused on developing large language models with the long-term goal of achieving Artificial General Intelligence (AGI). The company gained significant recognition for its Kimi chatbot, which pioneered an exceptionally large context window capable of processing up to two million Chinese characters in a single prompt. Backed by major investors like Alibaba, Moonshot AI has quickly become one of China&#39;s most valuable AI unicorns and a key competitor in the global AI race.&lt;/p&gt;&lt;p&gt;November 14, 2025 update: the code below is Python. I have more up to date Common Lisp examples using Kimi K2 here:&amp;nbsp;&lt;a href=&quot;https://leanpub.com/lovinglisp/read#leanpub-auto-moonshots-kimi-k2-model&quot;&gt;https://leanpub.com/lovinglisp/read#leanpub-auto-moonshots-kimi-k2-model&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The release of Kimi 2 last week has been referred to as &quot;another DeepSeek moment.&quot;&lt;/p&gt;&lt;p&gt;You need a Moonshot API access key from&amp;nbsp;&lt;a href=&quot;https://platform.moonshot.ai/console/account&quot; target=&quot;_blank&quot;&gt;https://platform.moonshot.ai/console/account&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The direct API pricing from Moonshot AI is approximately:&lt;/p&gt;&lt;p&gt;&lt;b&gt;Input Tokens:&lt;/b&gt;&amp;nbsp;~$0.60 per 1 million tokens&lt;/p&gt;&lt;p&gt;&lt;b&gt;Output Tokens:&lt;/b&gt;&lt;span class=&quot;citation-11 citation-end-11&quot;&gt;&amp;nbsp;~$2.50 per 1 million tokens&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;citation-11 citation-end-11&quot;&gt;Several inference providers in the USA are now supporting Kimi 2 also. Kim 2 is a mixture of expert model with 32 billion parameters active at any time during inference. The total model size is a trillion parameters.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;citation-11 citation-end-11&quot;&gt;Tool use using the OpenAI Python library is fairly straightforward:&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;background-color: #fdf6e3; color: #657b83; font-family: Menlo, Monaco, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; line-height: 18px; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #859900;&quot;&gt;from&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;typing&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;*&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #859900;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;os&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #859900;&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;json&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #859900;&quot;&gt;from&lt;/span&gt; openai &lt;span style=&quot;color: #859900;&quot;&gt;import&lt;/span&gt; OpenAI&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #859900;&quot;&gt;from&lt;/span&gt; openai.types.chat.chat_completion &lt;span style=&quot;color: #859900;&quot;&gt;import&lt;/span&gt; Choice&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #268bd2;&quot;&gt;client&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; OpenAI(&lt;/div&gt;&lt;div&gt;    base_url&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;https://api.moonshot.ai/v1&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;    api_key&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;os&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;environ&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;get&lt;/span&gt;(&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;MOONSHOT_API_KEY&quot;&lt;/span&gt;),&lt;/div&gt;&lt;div&gt;)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# The specific implementation of the search tool&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;search_impl&lt;/span&gt;(arguments: &lt;span style=&quot;color: #cb4b16;&quot;&gt;Dict&lt;/span&gt;[&lt;span style=&quot;color: #cb4b16;&quot;&gt;str&lt;/span&gt;, &lt;span style=&quot;color: #cb4b16;&quot;&gt;Any&lt;/span&gt;]) -&amp;gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;Any&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;    When using the search tool provided by Moonshot AI, you just need to return the arguments as they are,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;    without any additional processing logic.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;    &quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; arguments&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# START: Added Tool Implementations&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# ---------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;list_files_impl&lt;/span&gt;() -&amp;gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;str&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&quot;&quot;Lists files in the current directory, one per line.&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;--- Calling list_files_impl ---&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #268bd2;&quot;&gt;files&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;os&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;listdir&lt;/span&gt;(&lt;span style=&quot;color: #2aa198;&quot;&gt;&#39;.&#39;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #859900;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;not&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;files&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;The current directory is empty.&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;join&lt;/span&gt;(&lt;span style=&quot;color: #268bd2;&quot;&gt;files&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;e&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Error listing files: &lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #268bd2;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;get_file_contents_impl&lt;/span&gt;(filename: &lt;span style=&quot;color: #cb4b16;&quot;&gt;str&lt;/span&gt;) -&amp;gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;str&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&quot;&quot;Reads and returns the contents of a file.&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;--- Calling get_file_contents_impl for file: &lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;filename&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt; ---&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;try&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #859900;&quot;&gt;with&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;open&lt;/span&gt;(filename, &lt;span style=&quot;color: #2aa198;&quot;&gt;&#39;r&#39;&lt;/span&gt;, encoding&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&#39;utf-8&#39;&lt;/span&gt;) &lt;span style=&quot;color: #859900;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;f&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;f&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;read&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;FileNotFoundError&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Error: File &#39;&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;filename&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&#39; not found.&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;except&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;Exception&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;e&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Error reading file &#39;&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;filename&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&#39;: &lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #268bd2;&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# -------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# END: Added Tool Implementations&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;chat&lt;/span&gt;(messages) -&amp;gt; Choice:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;completion&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;client&lt;/span&gt;.chat.completions.create(&lt;/div&gt;&lt;div&gt;        model&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;moonshot-v1-8k&quot;&lt;/span&gt;, &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# Using a standard model for tool use demonstration&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        messages&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;messages,&lt;/div&gt;&lt;div&gt;        temperature&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #d33682;&quot;&gt;0.3&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;        tools&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;[&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# Tool 1: Moonshot&#39;s built-in web search&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            {&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;builtin_function&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;function&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;$web_search&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                },&lt;/div&gt;&lt;div&gt;            },&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# START: Added Tool Schemas&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# -------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# Tool 2: List files in current directory&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            {&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;function&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;function&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;list_files&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;description&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Lists all files in the current working directory, one file per line.&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;parameters&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;object&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;properties&quot;&lt;/span&gt;: {},&lt;/div&gt;&lt;div&gt;                    },&lt;/div&gt;&lt;div&gt;                },&lt;/div&gt;&lt;div&gt;            },&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# Tool 3: Get contents of a file&lt;/span&gt;&lt;/div&gt;&lt;div&gt;            {&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;function&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;function&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;get_file_contents&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;description&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Returns the full contents of a specified file in the current directory.&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;parameters&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;object&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;properties&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                            &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;filename&quot;&lt;/span&gt;: {&lt;/div&gt;&lt;div&gt;                                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;string&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                                &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;description&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;The name of the file whose contents are to be retrieved.&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                            }&lt;/div&gt;&lt;div&gt;                        },&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;required&quot;&lt;/span&gt;: [&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;filename&quot;&lt;/span&gt;],&lt;/div&gt;&lt;div&gt;                    },&lt;/div&gt;&lt;div&gt;                },&lt;/div&gt;&lt;div&gt;            }&lt;/div&gt;&lt;div&gt;        ]&lt;/div&gt;&lt;div&gt;    )&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;completion&lt;/span&gt;.choices[&lt;span style=&quot;color: #d33682;&quot;&gt;0&lt;/span&gt;]&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;main&lt;/span&gt;():&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;messages&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; [&lt;/div&gt;&lt;div&gt;        {&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;role&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;system&quot;&lt;/span&gt;, &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;content&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;You are Kimi, an AI assistant who can browse the web and interact with the local file system. Return all answers in English.&quot;&lt;/span&gt;},&lt;/div&gt;&lt;div&gt;    ]&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# Updated question to demonstrate file system tools&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;messages&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;append&lt;/span&gt;({&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;role&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;user&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;content&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Please list the files in the current directory, and then show me the contents of the python script you find.&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;##&quot;content&quot;: &quot;Please search for Mark Watson AI consultant and author, and tell me what his hobbies are.&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;      })&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;finish_reason&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #b58900;&quot;&gt;None&lt;/span&gt;&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #859900;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;finish_reason&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: #b58900;&quot;&gt;None&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;or&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;finish_reason&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;tool_calls&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #268bd2;&quot;&gt;choice&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;chat&lt;/span&gt;(&lt;span style=&quot;color: #268bd2;&quot;&gt;messages&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #268bd2;&quot;&gt;finish_reason&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;choice&lt;/span&gt;.finish_reason&lt;/div&gt;&lt;div&gt;        &lt;span style=&quot;color: #859900;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;finish_reason&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;tool_calls&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #268bd2;&quot;&gt;messages&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;append&lt;/span&gt;(&lt;span style=&quot;color: #268bd2;&quot;&gt;choice&lt;/span&gt;.message)&lt;/div&gt;&lt;div&gt;            &lt;span style=&quot;color: #859900;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;in&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;choice&lt;/span&gt;.message.tool_calls:&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_name&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call&lt;/span&gt;.function.name&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# Note: Arguments can be an empty string if no parameters are needed.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments_str&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call&lt;/span&gt;.function.arguments&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; {}&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #859900;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments_str&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;and&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments_str&lt;/span&gt;.strip():&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cb4b16;&quot;&gt;json&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;loads&lt;/span&gt;(&lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments_str&lt;/span&gt;)&lt;/div&gt;&lt;br /&gt;&lt;div&gt;                &lt;span style=&quot;color: #268bd2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Model wants to call tool &#39;&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_name&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&#39; with arguments: &lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                &lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# START: Updated Tool Handling Logic&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# ----------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #859900;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_name&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;$web_search&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_result&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;search_impl&lt;/span&gt;(&lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #859900;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_name&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;list_files&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_result&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;list_files_impl&lt;/span&gt;()&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #859900;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_name&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;get_file_contents&quot;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #268bd2;&quot;&gt;filename&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_arguments&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;get&lt;/span&gt;(&lt;span style=&quot;color: #2aa198;&quot;&gt;&#39;filename&#39;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #859900;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;filename&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_result&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;get_file_contents_impl&lt;/span&gt;(filename&lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #268bd2;&quot;&gt;filename&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #859900;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                        &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_result&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Error: &#39;filename&#39; parameter is required.&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #859900;&quot;&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_result&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #586e75; font-weight: bold;&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;Error: unable to find tool by name &#39;&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_name&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&#39;&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# --------------------------------&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# END: Updated Tool Handling Logic&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;                &lt;span style=&quot;color: #268bd2;&quot;&gt;messages&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;append&lt;/span&gt;({&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;role&quot;&lt;/span&gt;: &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;tool&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;tool_call_id&quot;&lt;/span&gt;: &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call&lt;/span&gt;.id,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_call_name&lt;/span&gt;,&lt;/div&gt;&lt;div&gt;                    &lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;content&quot;&lt;/span&gt;: &lt;span style=&quot;color: #cb4b16;&quot;&gt;json&lt;/span&gt;.&lt;span style=&quot;color: #268bd2;&quot;&gt;dumps&lt;/span&gt;({&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;result&quot;&lt;/span&gt;: &lt;span style=&quot;color: #268bd2;&quot;&gt;tool_result&lt;/span&gt;}) &lt;span style=&quot;color: #93a1a1; font-style: italic;&quot;&gt;# Encapsulate result in a JSON object for consistency&lt;/span&gt;&lt;/div&gt;&lt;div&gt;                })&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;--- Final Answer ---&lt;/span&gt;&lt;span style=&quot;color: #cb4b16;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #2aa198;&quot;&gt;&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #268bd2;&quot;&gt;choice&lt;/span&gt;.message.content)&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #859900;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #268bd2;&quot;&gt;__name__&lt;/span&gt; &lt;span style=&quot;color: #859900;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #2aa198;&quot;&gt;&#39;__main__&#39;&lt;/span&gt;:&lt;/div&gt;&lt;div&gt;    &lt;span style=&quot;color: #268bd2;&quot;&gt;main&lt;/span&gt;()&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/1472337296814657634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2025/07/tool-calling-with-moonshots-kimi-k2-mode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/1472337296814657634'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/1472337296814657634'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2025/07/tool-calling-with-moonshots-kimi-k2-mode.html' title='Tool calling with Moonshot&#39;s Kimi K2 mode'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-4335610810535844353</id><published>2025-07-07T11:36:00.000-07:00</published><updated>2025-07-07T11:36:10.945-07:00</updated><title type='text'>Google Gemini Batch Mode API with a 50% cost reduction: a game changer?</title><content type='html'>&lt;p&gt;&amp;nbsp;I noticed on X this morning that Google dropped a new batch API with a 50% price cut. I use gemini-2.5-flash for speed and low cost and being able to batch large numbers of requests in a JSONL file (JSON where each line is a single legal JSON expression) seems like a big deal to me.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ai.google.dev/gemini-api/docs/batch-mode&quot; target=&quot;_blank&quot;&gt;Gemini Batch API Docs&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I have been a little negative on Hacker News and X recently about the energy costs vs. value from LLM use and it seems like Google is striking a good middle ground in cost and environmental impact.&lt;/p&gt;&lt;p&gt;Automating NLP and other workflows seems fairly simple: automate writing pipeline requests to a JSONL file, automate sending requests, periodically polling for the results being complete, auto-download and use results in your workflows.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/4335610810535844353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2025/07/google-gemini-batch-mode-api-with-50.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4335610810535844353'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4335610810535844353'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2025/07/google-gemini-batch-mode-api-with-50.html' title='Google Gemini Batch Mode API with a 50% cost reduction: a game changer?'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-2181024786844162077</id><published>2025-07-05T10:48:00.002-07:00</published><updated>2025-07-05T10:48:41.297-07:00</updated><title type='text'>So much fun: recreating 1970s text adventure games using LLMs, but better</title><content type='html'>&lt;p&gt;In the late 1970s, I worked long hours on a text based adventure game called land of the dwarf for the Apple II computer. My game was written in Apple Basic and I gave it away for free. I wrote it using a huge sheet of paper, drawing a transition network diagram with bubbles, locations and action codes for things that could be done and arcs between the bubbles being the ability to move from one location to another. Yesterday I was really in the mood to do something fun. We didn’t have anything going on for Fourth of July celebrations until an outdoor symphony in the early afternoon, so I sat down in the morning with Google‘s excellent Gemini CLI coding agent and I described what I wanted, which was to be able to input a story context as a text input file and then use an LLM in a conversation loop and continuously provide you with the text based adventure program experience. I was really surprised how well it turned out. Fun!&lt;/p&gt;&lt;p&gt;The generated adventure game code uses a local model running on Ollama - that is the way 😃&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/2181024786844162077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2025/07/so-much-fun-recreating-1970s-text.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2181024786844162077'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2181024786844162077'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2025/07/so-much-fun-recreating-1970s-text.html' title='So much fun: recreating 1970s text adventure games using LLMs, but better'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-7629844492657735710</id><published>2025-02-06T13:22:00.000-07:00</published><updated>2025-02-06T13:22:07.880-07:00</updated><title type='text'>AI dominance: US vs. China and the rest or the world</title><content type='html'>&lt;p&gt;&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;I would like the USA to not lose the ‘AI race’ but I don’t want other countries to lose either.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); font-family: &amp;quot;Times New Roman&amp;quot;; font-size: large;&quot;&gt;Ensuring continued US leadership in AI without constraining global progress necessitates a dual-pronged strategy that couples strategic national R&amp;amp;D investments with adherence to open international standards. On the technical front, integrating edge computing, specialized AI silicon, and advanced hardware-software co-design with standardized protocols for interoperability enables US institutions to maintain a competitive edge. Simultaneously, promoting collaborative frameworks for data sharing, federated learning, and algorithmic auditing mitigates risks of siloed innovation, ensuring that breakthroughs in efficiency, low-latency inference, and energy-optimized training regimes benefit a global network of research and industry stakeholders.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: medium;&quot;&gt;&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0);&quot;&gt;In the USA I would like to see major resources dedicated to both open models such as the ones from Meta, as well as the use of French Mistral open models (Mistral Small is awesome and easily runs on my Mac) and Chinese models such as Qwen (which I frequently use) and Deepseek R1 (that I play with.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Times New Roman; font-size: medium;&quot;&gt;&lt;span style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0);&quot;&gt;I also hope for vibrant closed model competition from Google, OpenAI, Anthropic, etc. I find Gemini 2 models and o3-mini-high to set new standards for general utility.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-webkit-text-stroke-color: rgb(0, 0, 0); -webkit-text-stroke-width: 0px; font-family: &amp;quot;Times New Roman&amp;quot;; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px 0px 12px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/7629844492657735710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2025/02/ai-dominance-us-vs-china-and-rest-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7629844492657735710'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7629844492657735710'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2025/02/ai-dominance-us-vs-china-and-rest-or.html' title='AI dominance: US vs. China and the rest or the world'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-5093438116135119878</id><published>2025-01-21T09:41:00.002-07:00</published><updated>2025-01-21T09:41:47.550-07:00</updated><title type='text'>AI update: The new Deepseek-R1 reasoning language model, Bytedance&#39;s Trae IDE, and my new book</title><content type='html'>&lt;p&gt;&amp;nbsp;I spent a few days experimenting with Cursor last week.&amp;nbsp;Bytedance&#39;s Trae IDE is very similar and is currently free to use with Claude Sonnet 3.5 and GPT-4o:&amp;nbsp;&lt;a href=&quot;https://www.trae.ai/home&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.trae.ai/home&lt;/a&gt;&amp;nbsp;I would like to use Trae with my own API accounts but currently Bytedance is paying for LLM costs.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;I have been experimenting with the qwen2.5 and qwen2.5-coder models that easily run on my M2Pro 32G Mac. For reasoning I have been going back to using OpenAI O1 and Claude Sonnet, but after my preliminary tests with Deepseek-R1, I feel like I can do most everything now on my personal computer.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;I am using:&amp;nbsp;&lt;strong&gt;ollama run deepseek-r1:32b&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;I recently published my new book “&lt;/span&gt;&lt;strong style=&quot;caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;Ollama in Action: Building Safe, Private AI with LLMs, Function Calling and Agents&lt;/strong&gt;&lt;span style=&quot;caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;” that can be read free online at&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://leanpub.com/ollama/read&quot; rel=&quot;&quot; style=&quot;caret-color: rgb(54, 55, 55); color: black; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;https://leanpub.com/ollama/read&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/5093438116135119878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2025/01/ai-update-new-deepseek-r1-reasoning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/5093438116135119878'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/5093438116135119878'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2025/01/ai-update-new-deepseek-r1-reasoning.html' title='AI update: The new Deepseek-R1 reasoning language model, Bytedance&#39;s Trae IDE, and my new book'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-8647239541028441153</id><published>2024-09-19T13:48:00.004-07:00</published><updated>2024-09-19T13:48:44.527-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apple"/><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>I am moving back to the Google platform, less excited by what Apple is offering</title><content type='html'>&lt;p&gt;I have been been playing with the Apple Intelligence beta’s in iPadOS and macOS and while I like the direction Apple is heading I am getting more use from Google’s Gemini, both for general analysis of very large input contexts, as well as effective integration my content in Gmail, Google Calendar, and Google Docs.&lt;/p&gt;&lt;p&gt;While I find the latest Pixel phone to be compelling, I will stick with Apple hardware since I don’t want to take the time to move my data and general workflow to a Pixel phone. The iPhone is the strongest lock-in that Apple has on me because of the time investment to change.&lt;/p&gt;&lt;p&gt;The main reason I am feeling less interested in the Apple ecosystem and platform is that I believe that our present day work flows are intimately wrapped up with the effective use of LLMs, and it is crazy to limit oneself to just one or two vendors. I rely on running local models on Ollama, super fast APIs from Groq (I love Groq for running most of the better open weight models), and other APIs from Mistral, OpenAI, Google, Anthropic, and other providers.&lt;/p&gt;&lt;p&gt;Except for accepting part time work, I am mostly retired and for my now more limited development requirements, I am using platform agnostic web based systems like Replit with their AI coding assistant and Google Colab with Gemini assistant.&lt;/p&gt;&lt;p&gt;I have a lot of excellent Apple hardware that I will use until it breaks and then decide on replacement gear based on cost performance. For years I have loved the Apple ecosystem but in modern times things change so quickly and I prefer to not being strongly loyal to any particular provider.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/8647239541028441153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2024/09/i-am-moving-back-to-google-platform.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/8647239541028441153'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/8647239541028441153'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2024/09/i-am-moving-back-to-google-platform.html' title='I am moving back to the Google platform, less excited by what Apple is offering'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-514824936856014454</id><published>2024-09-18T14:07:00.007-07:00</published><updated>2024-09-18T15:44:13.868-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>Getting closer to AGI? Google&#39;s NoteBookLM and Replit&#39;s AI Coding Agent</title><content type='html'>&lt;p&gt;Putting &quot;closer to AGI?&quot; in a blog title might border on being clickbait, but I will argue that it is not! I have mostly earned my living in the field of AI since 1982 and I argue that the existence of better AI driven products and the accelerating rate of progress in research, that we are raising the bar on what we consider AGI to be.&lt;/p&gt;&lt;p&gt;I have had my mind blown twice in the last week:&lt;/p&gt;&lt;p&gt;Today I took the PDF for my book &quot;Practical Artificial Intelligence Programming With Clojure (&lt;a href=&quot;https://leanpub.com/clojureai/read&quot; target=&quot;_blank&quot;&gt;you can read it free online here&lt;/a&gt;) and used it to create a notebook in Google&#39;s&amp;nbsp;&lt;a href=&quot;https://notebooklm.google.com&quot; target=&quot;_blank&quot;&gt;NotebookLM&lt;/a&gt;&amp;nbsp;and asked for a generated 8 minute podcast. This experimental app created a podcast with two people discussing my book accurately and showing wonderful knowledge of technology. If you want to listen to the audio track that Google&#39;s NotebookLM created,&amp;nbsp;&lt;a href=&quot;https://markwatson.com/audio/AIClojureBook.wav&quot; target=&quot;_blank&quot;&gt;here is a link to the WAV audio file&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Last week I signed up for a one year plan on&amp;nbsp;&lt;a href=&quot;https://replit.com/&quot; target=&quot;_blank&quot;&gt;Replit.com&lt;/a&gt;&amp;nbsp;after trying the web based IDE for Haskell and Python coding. After using the platform for a few days I used its AI coding agent to rewrite my Clojure web app CookingSpace.com in Javascript, HTML, and CSS. I estimate that doing this by hand would have taken me at least 30 hours, and I had something written and publicly deployed in less than an hour. This process would have been quicker but initially I asked for features like user accounts that I later decided I didn&#39;t want so I had to iterate with the AI coding agent to remove working functionality.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Why claim these two well engineered products make me feel that we are closer to AGI?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;To be fair what makes NotebookLM and Replit AI coding agent so impressive is the product design and infrastructure that uses LLMs under the hood. Still, it is very difficult to say that the functionality of both these systems is not now superior to most humans.&lt;/p&gt;&lt;p&gt;I feel that the argument over AI and AGI gets dragged down by discussions of sentient AI taking over the world of somehow controlling humans. The thing to worry about is how people use AI.&lt;/p&gt;&lt;p&gt;I find it difficult to view AI as anything but a set of advanced tools, something to augment human productivity. In my view, advanced AI driven tools and products are very close to what I would call AGI.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/514824936856014454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2024/09/getting-close-to-agi-googles-notebooklm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/514824936856014454'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/514824936856014454'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2024/09/getting-close-to-agi-googles-notebooklm.html' title='Getting closer to AGI? Google&#39;s NoteBookLM and Replit&#39;s AI Coding Agent'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-2180016790527622435</id><published>2024-09-13T10:23:00.004-07:00</published><updated>2024-09-13T10:26:19.105-07:00</updated><title type='text'>New OpenAI gpt-o1-preview and gpt-o1-mini and one week experience with Replit.com AI Coding Agent</title><content type='html'>&lt;p&gt;&amp;nbsp;I have only spent a short while experimenting with the ne gtp-o1 models: so far very impressive for science, math, and instruction following. You need a ChatGPT Plus account to try it, or you can perform rate limited queries for half the monthly cost using&amp;nbsp;&lt;a href=&quot;https://apps.abacus.ai/&quot; target=&quot;_blank&quot;&gt;Abacus AI&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The thing I am most impressed with (this week!) is the&amp;nbsp;&lt;a href=&quot;https://replit.com/&quot; target=&quot;_blank&quot;&gt;Replit.co AI coding agent&lt;/a&gt;&amp;nbsp;that after briefly trying it I pre-paid for a one year subscription. I quickly rewrote a complex Clojure web app I wrote 12 years ago in JavaScript making it much less expensive to host&amp;nbsp;&lt;a href=&quot;https://cookingspace.com&quot; target=&quot;_blank&quot;&gt;CookingSpace.com&lt;/a&gt;&amp;nbsp;(new JavaScript version)&lt;/p&gt;&lt;p&gt;I gave a live demo of Replit AI in my weekly AI demo and group chat. Please join:&amp;nbsp;&lt;a href=&quot;https://www.meetup.com/mark-watsons-informal-ai-presentations-and-group-chats&quot; target=&quot;_blank&quot;&gt;Mark Watson&#39;s informal AI presentations and group chats&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/2180016790527622435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2024/09/new-openai-gpt-o1-preview-and-gpt-o1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2180016790527622435'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2180016790527622435'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2024/09/new-openai-gpt-o1-preview-and-gpt-o1.html' title='New OpenAI gpt-o1-preview and gpt-o1-mini and one week experience with Replit.com AI Coding Agent'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-2449926353963189896</id><published>2024-09-12T15:06:00.000-07:00</published><updated>2024-09-12T15:06:28.028-07:00</updated><title type='text'>Topics: Recipe: Mark’s African Stew, and converting my Clojure CookingSpace web site to JavaScript</title><content type='html'>&lt;p&gt;I wanted to convert my server side web site&amp;nbsp;&lt;a href=&quot;https://cookingspace.com&quot; target=&quot;_blank&quot;&gt;CookingSpace.com&lt;/a&gt;&amp;nbsp;to mostly client side JavaScript. I used the Replit.com AI coding agent to do this, and while this is a subject for another blog article, I showed the Replit coding AI a snippet of my JSON recipes and nutrients file, and described in a few paragraphs the functionality of the new web site.&lt;/p&gt;&lt;p&gt;I want to share a recipe that I created:&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin-top: 0px;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Mark’s African Stew&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Ingredients&lt;/strong&gt;&lt;/p&gt;&lt;ul style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;Optional: 3/4 to 1 pound of Lamb shoulder, deboned and cut into cubes, leaving some fat on the meat&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;2 tablespoons of any non-seed oil (Avocado Oil is good). (Avoid seed oils like Canola, Corn, Soybean, Sunflower, etc.)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;1 brown onion, coarsely chopped&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;1 egg plant, partially skinned,&amp;nbsp; chopped into bite sized pieces, and heavily salt in a strainer. Before cooking, rinse well to remove excess salt!&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;ground coriander (at least 1 teaspoon)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;Cumin&amp;nbsp; (at least 2/3 teaspoon)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;paprika (1 to 2 teaspoons, depending on how you like the taste of paprika)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin-bottom: 0px; padding-left: var(--size-4);&quot;&gt;ginger powder ( at least 1/2 teaspoon), or, even better use finely chopped fresh ginger&lt;/p&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin-bottom: 0px; padding-left: var(--size-4);&quot;&gt;pealed and finely chopped)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;cinnamon (1/4 to 1/4 teaspoon depending how much you like the taste of cinnamon)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;black pepper (at least 1/3 teaspoon - nutritionally pairs well with the turmeric)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;turmeric (bout 1/4 teaspoon), or, even better use fresh turmeric root peeled and finely chopped.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;fresh chopped garlic (or garlic powder) added to taste. I use about 3 garlic cloves, you probably want less.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;Something hot and spicy: dried chili peppers, or fresh chopped chili peppers, or hot chili sauce - whatever you like, adding enough ‘hot’ for your tastes.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;1 cup chicken broth, or vegetable broth if you are not using the optional meat.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;4 cups water, or more in stew dries out while cooking&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;1/4 pound of lentils&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;2 or 3 celery stocks, coarsely chopped. Use the green tops also! Use the root also.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;1 14oz can of diced tomatoes&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;1 16oz can of cooked garbanzo beans, using water in can&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;2/3 cup chopped fresh cilantro, I use about half the stems (finely chopped)&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;Small pasta noodles, I use a very small amount as an accent&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;Optional: a table spoon of honey added after heat is turned off.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; margin: var(--size-8) 0 0 var(--size-32);&quot;&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; line-height: 1.6em; margin: 0px; padding-left: var(--size-4);&quot;&gt;Juice from 1 fresh lemon (optional, but…)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Directions:&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;Brown the lamb in about 2 tablespoons of any non-seed oil (Avocado Oil is good) and remove, leaving oil and the small amount of fat from cooking the meat.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;Sauté the onion&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Turn off heat and add rinsed lentils, prepared eggplant (rinse salt off before adding to pan), and&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;all spices.&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;Cook covered under low heat for about 20 minutes.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;Add everything else: canned garbanzo beans, chopped celery, cilantro, diced tomatoes, and return the meat to the heavy pan, cover and simmer for a while. Cook for at least 10 minutes before adding pasta:&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;Add the small amount of plaster noodles last, calculating how long they should cook by doubling the time that you would cook them in boiling water.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;When the pasta tastes done, cover the heavy pan, cook another minute, then turn off heat leaving the heat and leave the pan covered for 5 to 20 minutes.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; line-height: 1.6em; margin-bottom: 0px;&quot;&gt;Stir in fresh lemon juice and serve. After tasting at the table, add salt if necessary.&amp;nbsp;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/2449926353963189896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2024/09/topics-recipe-marks-african-stew-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2449926353963189896'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2449926353963189896'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2024/09/topics-recipe-marks-african-stew-and.html' title='Topics: Recipe: Mark’s African Stew, and converting my Clojure CookingSpace web site to JavaScript'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-9140483838212582146</id><published>2024-09-12T14:55:00.000-07:00</published><updated>2024-09-12T14:55:21.253-07:00</updated><title type='text'>Code and notes from my recent talk: Exploring the Future of AI: Introduction to using LLMs using Python</title><content type='html'>&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; font-family: var(--font_family_headings, var(--font_family_headings_preset, var(--font-family-title))); font-size: var(--font-size-18);&quot;&gt;Topics: Large context prompts with LLMs vs. RAGs using embeddings vector stores. How to avoid LLM hallucination. 3 code demos.&lt;/span&gt;&lt;/h4&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin-top: 0px;&quot;&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;started an informal code demo and group conversation&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.meetup.com/mark-watsons-informal-ai-presentations-and-group-chats&quot; rel=&quot;&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: #363737;&quot;&gt;Meetup group (link)&lt;/a&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;&amp;nbsp;and today I gave a fifteen minute code demo followed by a conversation with the attendees. Here is a GitHub repo with the code examples:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/mark-watson/talk2_LLM_Python_intro&quot; rel=&quot;&quot; style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; color: #363737;&quot;&gt;https://github.com/mark-watson/talk2_LLM_Python_intro&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Here are my talk notes:&lt;/span&gt;&lt;br style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot; /&gt;&lt;br style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot; /&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Exploring the Future of AI: Introduction to using LLMs using Python&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Riff on ‘AI grounding’ and how LLMs help:&lt;/strong&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;&amp;nbsp;LLMs, trained on vast amounts of text, excel at recognizing patterns and providing contextually relevant responses. They mimic grounded understanding by referencing large datasets that encompass a variety of real-world scenarios. For example, they can infer meanings from complex contexts by drawing on their training data. When LLMs are integrated with other modalities, such as vision or audio (e.g., vision-language models), the grounding improves. These models can associate text with images or sounds, making the connections more robust and closer to a human-like understanding of concepts.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Tradeoffs between using large context LLMs&lt;/strong&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;: where a large body of text is added to a query prompt, to the alternative approach of breaking multiple documents into many separate chunks of text, calculating an embedding vector for each chunk, and then storing the chunks and their associated embedding vectors ins a vector data store.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;Long-Context LLMs:&lt;/strong&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;&amp;nbsp;designed to support processing large blocks of text, often an entire book, within a single prompt. These models can accommodate extended sequences of text, enabling them to consider more context at once. This is particularly useful for tasks that require maintaining continuity over long narratives or documents. However, long-context LLMs have limitations, such as performance degradation when the context becomes too long, which can lead to reduced accuracy in generating or retrieving relevant information. These models are also computationally expensive, as handling extensive sequences demands significant resources.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;On the other hand,&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;vector stores&lt;/strong&gt;&lt;span style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;&amp;nbsp;(or vector databases) work by converting text or other unstructured data into high-dimensional vectors using embeddings. These vectors are stored and can be retrieved based on their similarity to a query vector, allowing for efficient semantic search across vast datasets. This approach provides a form of “long-term memory” for LLMs, enabling them to access and retrieve relevant information from large collections of documents without needing to process the entire context at once. Vector stores are particularly useful in retrieval-augmented generation (RAG) systems, where they help the model to find and focus on the most relevant information, improving both efficiency and accuracy&amp;nbsp; .&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;In essence, while long-context LLMs attempt to handle extensive information within the model’s processing window, vector stores offer an external memory solution that complements LLMs by efficiently managing and retrieving relevant information from larger datasets.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;&lt;strong style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0;&quot;&gt;What about LLM hallucinations?&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;Long context windows and retrieval-augmented generation (RAG) data stores significantly reduce LLM hallucinations by improving the model&#39;s access to relevant and accurate information during the generation process.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;1. Long Context Windows: When LLMs are equipped with long context windows, they can process and retain more information within a single session. This allows the model to maintain continuity and consistency over extended text, reducing the chances of fabricating information that doesn&#39;t align with the given context or user query. By having access to more surrounding context, the model can generate more coherent and accurate responses that are anchored in the actual input data.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin: 0 0 var(--size-20) 0;&quot;&gt;2. RAG Embedding Vector Data Stores: In a RAG setup, an LLM is paired with a vector store that holds a vast amount of pre-processed, structured information. When a query is posed, the model retrieves relevant documents or data snippets from this store, which then informs the generation process. This retrieval step grounds the model&#39;s output in factual data, effectively reducing the likelihood of hallucinations. Since the model can rely on precise and contextually relevant information, it is less prone to generating plausible-sounding but incorrect or nonsensical content.&lt;/p&gt;&lt;p style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); -webkit-text-size-adjust: 100%; caret-color: rgb(54, 55, 55); color: #363737; font-family: Spectral, serif, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 19px; font-weight: 400; line-height: 1.6em; margin-bottom: 0px;&quot;&gt;Together, these approaches enhance the reliability of LLM outputs. Long context windows allow the model to consider more of the input in a single pass, while RAG ensures that the model has access to verified information, leading to fewer instances of hallucination and more trustworthy results.&lt;/p&gt;&lt;/h4&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/9140483838212582146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2024/09/code-and-notes-from-my-recent-talk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/9140483838212582146'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/9140483838212582146'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2024/09/code-and-notes-from-my-recent-talk.html' title='Code and notes from my recent talk: Exploring the Future of AI: Introduction to using LLMs using Python'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-7510655982104600297</id><published>2023-08-28T07:23:00.001-07:00</published><updated>2023-08-28T07:23:20.466-07:00</updated><title type='text'>My Dad&#39;s work with Robert Oppenheimer and Edward Teller</title><content type='html'>&lt;p&gt;Robert Oppenheimer and Edward Teller facilitated my Dad getting a professorship at UC Berkeley when I was 3 years old. Oppenheimer left Berkeley but Teller was a good friend of my father and I remember him being in our home.&lt;/p&gt;&lt;p&gt;Three weeks ago, my wife and I were just leaving to see the new Oppenheimer movie when my Dad called. He mentioned that when I was in grade school he was invited to give a talk at Princeton. After his talk Oppenheimer talked with my Dad and invited him to have dinner at his house. My Dad said Oppenheimer was not well (I think he died of throat cancer soon afterwards) but his wife Kitty carried the conversation.&lt;/p&gt;&lt;p&gt;My Dad, Ken Watson, passed away 10 days ago on August 18, 2023.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/7510655982104600297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2023/08/my-dads-work-with-robert-oppenheimer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7510655982104600297'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7510655982104600297'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2023/08/my-dads-work-with-robert-oppenheimer.html' title='My Dad&#39;s work with Robert Oppenheimer and Edward Teller'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-8479994852597077280</id><published>2023-03-12T16:29:00.001-07:00</published><updated>2023-03-12T16:31:08.090-07:00</updated><title type='text'>Time and Attention Fragmentation in Our Digital Lives</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;-webkit-text-size-adjust: auto; font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;As humans we have evolved over a few million years to be both attentive and reactive to danger, live in social communities, and spend much of our time being in the present moment gathering and eating food and socializing.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px; min-height: 26.9px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;The behavior of rapidly changing short attention to content on social media, too many good short form things to watch on streaming video entertainment platforms, are all rewiring our brains in an unnatural and unhealthy way.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;I fight back, but in really simple ways that entail little ceremony:&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px; min-height: 26.9px;&quot;&gt;&lt;br /&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;Almost every morning I spend 30 minutes scanning Hacker News (about 10 minutes), Apple News (about 5 minutes), and the remaining time on Twitter and Mastodon finding interesting new (mostly tech) things. I make notes in a temporary Apple Note: links of things I may want to research, try, or simply read that day. I like to get this all done at once, and then not feel like I need to interrupt my activities during the day to “catch up” on what is happening in the world.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px; min-height: 26.9px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;In a way, it seems like 30 minutes a day, summed up over 365 days in a year, is a frightening amount of life spent on what I would consider “indexing.” In a typical day, I might spend between 1 and 3 hours taking long attention span meanderings over stuff on my daily (temporary) Apple note. While I feel kind of bad about the 30 minutes of chaotic short attention span “discovery and indexing” time each morning, I don’t feel bad at all, in fact the opposite I feel good about spending more time during the day diving more deeply into the few things on my daily list.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;p2&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px; min-height: 26.9px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;p1&quot; style=&quot;-webkit-text-size-adjust: auto; font-size: 21.3px; font-stretch: normal; line-height: normal; margin: 0px;&quot;&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: UICTFontTextStyleBody; font-size: 21.33px;&quot;&gt;Another thing I feel very good about is spending long periods of time socializing with friends and family, reading fiction (and sometimes technical books) or watching a single good movie in the evening.&lt;/span&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/8479994852597077280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2023/03/time-and-attention-fragmentation-in-our.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/8479994852597077280'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/8479994852597077280'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2023/03/time-and-attention-fragmentation-in-our.html' title='Time and Attention Fragmentation in Our Digital Lives'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-1532474438666830954</id><published>2023-02-02T15:39:00.007-07:00</published><updated>2023-02-02T16:06:52.281-07:00</updated><title type='text'>ChatGPT as part of the evolution of programming languages</title><content type='html'>In the 1940s von Neumann and his colleagues created conceptual models for computer architectures that were oriented toward the engineering problems of building computing devices, and not for making it easier for humans to write programs.

The Lambda Calculus and also the design of the Prolog programming language are the first real efforts that I am aware of to place emphasis on how we humans think and solve problems.&lt;div&gt;&lt;br /&gt;&lt;div&gt;I &amp;nbsp;had a thought earlier today that I keep coming back to: there are concise programming languages that can be more difficult to write code with, but once done the code is more valuable because of its conciseness that yields better readability.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have been fascinated by, and use Copilot and ChatGPT to write code and sometimes it works well enough. What will the effects of ChatGPT and future LLMs be on the popularity of niche languages like Prolog and APL?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All things considered I would often rather have a concise program in Prolog or a flavor of Lisp than a much larger program written in a verbose language (e.g., Java). If I can describe a problem and generate a quality program in any language, then I will ask for generation in my favorite languages.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because of its possible utility for so many tasks, ChatGPT and future similar systems really seem like programming environments to me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Collecting textual context data for a problem, appending a series of questions to be answered, and sending the resulting text off to ChatGPT also seems like programming to me.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/1532474438666830954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2023/02/chatgpt-as-part-of-evolution-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/1532474438666830954'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/1532474438666830954'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2023/02/chatgpt-as-part-of-evolution-of.html' title='ChatGPT as part of the evolution of programming languages'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-7424181501571764943</id><published>2022-11-05T08:30:00.000-07:00</published><updated>2022-11-05T08:30:22.078-07:00</updated><title type='text'>Elon Musk &amp; Twitter, Tech job market, my writing projects</title><content type='html'>I find it sad that Musk&#39;s purchase of Twitter is turning out so badly. I read that advertisement pre-sales for next year are very low, thus the urgent need to cut expenses. I don&#39;t dissagree with Elon Musk&#39;s original idea of having an uncensored platform, but the execution is not good. My best wishes to everyone at Twitter (and other tech companies) who have lost their jobs recently. The job market was crazy-good for a few years, and now I expect it to more like after the 2000 dot-com-crash, at least for a few years. 

&lt;p&gt;I advise people to take a different approach to managing their careers. As fantastic as online (often free) classes are for teaching useful stuff like machine learning, front end development, etc., this has also greatly expanded the global talent pool. Now more than ever, I advise learning through doing your own projects. I have literally done this myself for the last 40 years: I spend my own time experimenting with tech that both fascinates me and might be useful for my employer. Take control of what you want to learn and work on even if initially it is unpaid work.&lt;/p&gt;

&lt;p&gt;I have been using my Mastodon account &lt;a href=&quot;https://mastodon.social/@mark_watson&quot;&gt;https://mastodon.social/@mark_watson&lt;/a&gt; but I have plans what so ever to give up Twitter (you can follow me at &lt;a href=&quot;https://twitter.com/mark_l_watson&quot;&gt;https://twitter.com/mark_l_watson&lt;/a&gt;). I rely on Twitter to get tech news, thanks to the awesome people I follow. I am working hard to also follow awesome people on Mastodon.&lt;/p&gt;

&lt;p&gt;About 12 years ago, I used LaTex to write a semantic web book, but in 2 editions: Common Lisp and Java. It was very cool to have 2/3 of the manuscript common text, and about 1/3 unique to the programming language.
For the last two evenings, I have been revisiting my old manuscript materials because I am thinking of updating the material and also creating additional editions for more programming languages: Python, JavaScript, and maybe Swift and Prolog.&lt;/p&gt;
&lt;p&gt;I had forgot how cool TeX and LaTex are. It was very easy to start working with again, even after a 12 year gap.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/7424181501571764943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2022/11/elon-musk-twitter-tech-job-market-my.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7424181501571764943'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/7424181501571764943'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2022/11/elon-musk-twitter-tech-job-market-my.html' title='Elon Musk &amp; Twitter, Tech job market, my writing projects'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-6788048508757812700</id><published>2022-10-01T10:45:00.000-07:00</published><updated>2022-10-01T10:45:41.760-07:00</updated><title type='text'>Not really retired 😀</title><content type='html'>&lt;p&gt;I read with some humor my last blog post from 6 months ago, saying that I was
retired. Ha! As I mentioned 6 months ago, my wife has chronic health problems
but those have stabalized, and life is now fairly good. I did start a very much
part time (15 hours/week) advisory gig with
&lt;a href=&quot;https://mind.ai&quot; target=&quot;_blank&quot;&gt;Mind AI&lt;/a&gt; about 4 months ago.
Enjoyable work on an interesting product. I am not performing any substantial
development work, rather spending most of my time as an architect and advisor. I am 71
years old, and leaving heavy lifting development work to younger and more
energetic co-workers is for the best.
&lt;/p&gt;
&lt;p&gt;I have a huge backlog of writing
projects, mostly on hold for the moment because of my work at Mind AI:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;A new
book &quot;Artificial Intelligence Programming in Python: Exploring the Boundaries of
  Deep Learning, Symbolic AI, and Knowledge Representation&quot;.&lt;/li&gt;&lt;li&gt;Edits for my Common
  Lisp book, adding new examples.&lt;/li&gt;&lt;li&gt;Ideas and some new code for my Swift AI book.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
For the last year I have been basically giving away my recent eBooks for free on
&lt;a href=&quot;https://leanpub.com/u/markwatson&quot; target=&quot;_blank&quot;&gt;Leanpub&lt;/a&gt; by
setting the minimum price to $0.00. I stopped doing this today. Now all of my
recent eBooks are available for free online reading on my website
&lt;a href=&quot;https://markwatson.com&quot; target=&quot;_blank&quot;&gt;https://markwatson.com&lt;/a&gt; and readers have to pay for
  PDF/ePub/Kindle versions on &lt;a href=&quot;https://leanpub.com/u/markwatson&quot; target=&quot;_blank&quot;&gt;Leanpub&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;I have been very happy to get 5 visits to my home in Sedona this year from old collegues, including my boss from 40 years ago and a recent co-worker from Olive AI. Great fun!&lt;/p&gt;

&lt;p&gt;I also have a new hobby: I joined the Northern Arizona Audubon Society. Yes, I am now a bird watcher! I have some experience at this bird watching activity: I have had my pet parrot for 20 years. Looking at wild birds is fun also, and the birding hikes are guided by experts so this is a learning experience.&lt;p&gt;
  
</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/6788048508757812700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2022/10/not-really-retired.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/6788048508757812700'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/6788048508757812700'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2022/10/not-really-retired.html' title='Not really retired 😀'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-3232143831526336515</id><published>2022-03-05T06:44:00.002-07:00</published><updated>2022-03-05T06:44:17.792-07:00</updated><title type='text'>I retired yesterday: my list of things to do in retirement</title><content type='html'>&lt;p&gt;What does an intelligent person do in retirement? That is a question of individual tastes but I will share my list of 20 things.&lt;/p&gt;

&lt;p&gt;Yesterday was my last day working on a recommendation model at Babylist. Babylist is a great company to work for but I decided to retire in order to spend more time helping my wife who now has chronic health problems. When I write books, my wife enjoys editing my work so we will keep doing that. I also plan on being a &lt;i&gt;gentleman computer scientist&lt;/i&gt; by working on open source deep learning applications and semantic web/linked data tools and applications.&lt;/p&gt;

&lt;p&gt;I may end up not doing all of these things, but generally I plan on spending more time on current interests and starting some new hobbies:&lt;/p&gt;

&lt;b&gt;Retirement Activities&lt;/b&gt;&lt;br/&gt;

&lt;ul&gt;
  &lt;li&gt;Join an Internet Chess club             **DONE**&lt;/li&gt;
&lt;li&gt;Get a fishing license&lt;/li&gt;
&lt;li&gt;Video Games&lt;/li&gt;
&lt;li&gt;Improve my cooking/recipe web site&lt;/li&gt;
&lt;li&gt;Reading&lt;/li&gt;
&lt;li&gt;Release new editions for my 3 most popular eBooks&lt;/li&gt;
&lt;li&gt;Practice guitar, Native American Flute, and didgeridoo&lt;/li&gt;
&lt;li&gt;Eco-box vegetable garden&lt;/li&gt;
&lt;li&gt;Set up my model trains&lt;/li&gt;
&lt;li&gt;Play online Go.                                  **DONE** online-go.com&lt;/li&gt;
&lt;li&gt;Learn to use the Ham radio (listen only, no license) that my son in law Josh gave me&lt;/li&gt;
&lt;li&gt;Photography&lt;/li&gt;
&lt;li&gt;Wednesday and Saturday morning bird watching tours at &lt;a href=&quot;https://azstateparks.com/red-rock/events/sedona-red-rock-daily-guided-nature-walks&quot; target=&quot;_blank&quot;&gt;Red Rock State Park&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Kayaking&lt;/li&gt;
&lt;li&gt;Take more road trips with Carol and friends&lt;/li&gt;
&lt;li&gt;Using my new meat smoker&lt;/li&gt;
&lt;li&gt;Hiking with my friends&lt;/li&gt;
&lt;li&gt;Marksmanship: spend more time at the shooting range (I own a 22 caliber target pistol)&lt;/li&gt;
&lt;li&gt;Meditation&lt;/li&gt;
&lt;li&gt;Start taking flying lessons again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I may not do all of these activities but I found it useful to put some thought into what I want to now spend my time on.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/3232143831526336515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2022/03/i-retired-yesterday-my-list-of-things.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/3232143831526336515'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/3232143831526336515'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2022/03/i-retired-yesterday-my-list-of-things.html' title='I retired yesterday: my list of things to do in retirement'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-1156611432426580151</id><published>2021-09-21T08:56:00.002-07:00</published><updated>2021-09-21T08:56:49.122-07:00</updated><title type='text'>My productivity hacks</title><content type='html'>Like most people, there are many more things that I would like to do than I have time to do. I believe that learning to identify action items that simply should not be done is valuable, but not easy to do.

I am mildly attention deficit in the sense that I can only think about or attend to one thing at a time. For a computer scientist, this has been a super power, but is personally inconvenient.

I keep 3 TODO lists:

&lt;ul&gt;&lt;li&gt;TODO high priority - I tend to have 1 to 3 things on this list. I time box my
activities so this list is the actions that I will rotate through. I usually
  work in 60 to 90 minute sprints, but for deep coding this may be 3 or 4 hours.&lt;/li&gt;
&lt;li&gt;TODO open - everything that I would like to do, but a lot of stuff on this list
gets deleted with no further effort (the all important decisions on what not to
  do).&lt;/li&gt;
&lt;li&gt;TODO done - instead of deleting completed actions on &quot;TODO high priority&quot; I
  cut the text and paste the action text to the top of this list.&lt;/li&gt;&lt;/ul&gt;

I really like the &lt;a href=&quot;https://freedom.to&quot; target=&quot;new&quot;&gt;Freedom.to&lt;/a&gt; web site and app blocker. I feel like I am setting parental controls on myself. I keep a list of fun but not very useful web sites and apps (e.g., Hacker News, Twitter, Reddit tech groups, and Facebook) that can only be accessed in the early morning, briefly during lunch, and in the evening times. I sometimes temporarily unblock sites if I want to quickly post something to social media.

&lt;p&gt;I place no limits on the time I spend on meditation, hiking, kayaking, cooking + meals, and reading good books. I try to limit watching streaming media to a few shows and also movies I watch with my wife and/or friends.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/1156611432426580151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2021/09/my-productivity-hacks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/1156611432426580151'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/1156611432426580151'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2021/09/my-productivity-hacks.html' title='My productivity hacks'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-4724028286930477058</id><published>2021-03-24T10:36:00.006-07:00</published><updated>2021-03-24T10:38:37.086-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DBPedia"/><category scheme="http://www.blogger.com/atom/ns#" term="Deep Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>DBPedia Natural Language Interface Using Huggingface Transformer</title><content type='html'>I prototyped a simple natural language question answering demo in about 90 minutes. I accept a query like “where does Bill Gates work?”, find the likely URI for Bill Gates, collect some comment text for this DBPedia entity, and then pass the original query to the transformer model with the “context” being the comment text collected via a SPARQL query.

I run this on Google Colab. Note that I saved my Jupyter Notebook as a python file that is in the listing below. Note the use of ! to run shell commands (e.g., !pip install transformers).

&lt;br/&gt;


&lt;pre style=&#39;color:#000000;background:#ffffff;&#39;&gt;&lt;span style=&#39;color:#696969; &#39;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;&quot;&quot;&quot;DbPedia QA system.ipynb&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;Automatically generated by Colaboratory.&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;Original file is located at&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style=&#39;color:#5555dd; &#39;&gt;https://colab.research.google.com/drive/1FX-0eizj2vayXsqfSB2ONuJYG8BaYpGO&lt;/span&gt;&lt;span style=&#39;color:#696969; &#39;&gt;&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;**DBPedia Question Answering System**&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;Copyright 2021 Mark Watson. All rights reserved. License: Apache 2&lt;/span&gt;
&lt;span style=&#39;color:#696969; &#39;&gt;&quot;&quot;&quot;&lt;/span&gt;

!pip install transformers
!pip install SPARQLWrapper

&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;from&lt;/span&gt; transformers &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;import&lt;/span&gt; pipeline

qa &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; pipeline&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;
    &lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;question-answering&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;
    &lt;span style=&#39;color:#696969; &#39;&gt;#model=&quot;NeuML/bert-small-cord19qa&quot;,&lt;/span&gt;
    model&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;NeuML/bert-small-cord19-squad2&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;
    tokenizer&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;NeuML/bert-small-cord19qa&quot;&lt;/span&gt;
&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

!pip install &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;import&lt;/span&gt; spacy
!python &lt;span style=&#39;color:#44aadd; &#39;&gt;-&lt;/span&gt;m spacy download en_core_web_sm

&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;import&lt;/span&gt; spacy

nlp_model &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; spacy&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;load&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;en&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;from&lt;/span&gt; SPARQLWrapper &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;import&lt;/span&gt; SPARQLWrapper&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; JSON

sparql &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; SPARQLWrapper&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;http://dbpedia.org/sparql&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;def&lt;/span&gt; query&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;query&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
  sparql&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;setQuery&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;query&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
  sparql&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;setReturnFormat&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;JSON&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;return&lt;/span&gt; sparql&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;query&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;convert&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;results&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;bindings&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;

nlp_model &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; spacy&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;load&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;en&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;def&lt;/span&gt; entities_in_text&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;s&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
    doc &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; nlp_model&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;s&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
    ret &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; &lt;span style=&#39;color:#800080; &#39;&gt;{&lt;/span&gt;&lt;span style=&#39;color:#800080; &#39;&gt;}&lt;/span&gt;
    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;ename&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; etype&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt; &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;entity&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;text&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; entity&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;label_&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt; &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; entity &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; doc&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;ents
        &lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
        &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; etype &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; ret&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
            ret&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;etype&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; ret&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;etype&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt; &lt;span style=&#39;color:#44aadd; &#39;&gt;+&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;ename&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;
        &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;else&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
            ret&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;etype&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;ename&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;
    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;return&lt;/span&gt; ret

&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;def&lt;/span&gt; dbpedia_get_entities_by_name&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;name&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; dbpedia_type&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
  sparql &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; &lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;select distinct ?s ?comment where {{ ?s &amp;lt;http://www.w3.org/2000/01/rdf-schema#label&gt;  &lt;/span&gt;&lt;span style=&#39;color:#0f69ff; &#39;&gt;\&quot;&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;{}&lt;/span&gt;&lt;span style=&#39;color:#0f69ff; &#39;&gt;\&quot;&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;@en . ?s &amp;lt;http://www.w3.org/2000/01/rdf-schema#comment&gt;  ?comment  . FILTER  (lang(?comment) = &#39;en&#39;) . ?s &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&gt; {} . }} limit 15&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;format&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;name&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; dbpedia_type&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
  &lt;span style=&#39;color:#696969; &#39;&gt;#print(sparql)&lt;/span&gt;
  results &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; query&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;sparql&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;return&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;results&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

entity_type_to_type_uri &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; &lt;span style=&#39;color:#800080; &#39;&gt;{&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;PERSON&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt; &lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;&amp;lt;http://dbpedia.org/ontology/Person&gt;&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;
    &lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;GPE&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt; &lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;&amp;lt;http://dbpedia.org/ontology/Place&gt;&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; &lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;ORG&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
    &lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;&amp;lt;http://dbpedia.org/ontology/Organisation&gt;&#39;&lt;/span&gt;&lt;span style=&#39;color:#800080; &#39;&gt;}&lt;/span&gt;

&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;def&lt;/span&gt; QA&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;query_text&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
  entities &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; entities_in_text&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;query_text&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;def&lt;/span&gt; helper&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;entity_type&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
    ret &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; &lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;&quot;&lt;/span&gt;
    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; entity_type &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; entities&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
      &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; hname &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; entities&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;entity_type&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
        results &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; dbpedia_get_entities_by_name&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;hname&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; entity_type_to_type_uri&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;entity_type&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
        &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; result &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; results&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;
          ret &lt;span style=&#39;color:#44aadd; &#39;&gt;+&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; ret &lt;span style=&#39;color:#44aadd; &#39;&gt;+&lt;/span&gt; result&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;comment&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;[&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;value&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;]&lt;/span&gt; &lt;span style=&#39;color:#44aadd; &#39;&gt;+&lt;/span&gt; &lt;span style=&#39;color:#0000e6; &#39;&gt;&quot; . &quot;&lt;/span&gt;
    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;return&lt;/span&gt; ret

  context_text &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; helper&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;PERSON&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt; &lt;span style=&#39;color:#44aadd; &#39;&gt;+&lt;/span&gt; helper&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;ORG&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt; &lt;span style=&#39;color:#44aadd; &#39;&gt;+&lt;/span&gt; helper&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;GPE&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;Answer from transformer model:&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;Original query: &quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; query_text&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;Answer:&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

  answer &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; qa&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#800080; &#39;&gt;{&lt;/span&gt;
                &lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;question&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt; query_text&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;
                &lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;context&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt; context_text
               &lt;span style=&#39;color:#800080; &#39;&gt;}&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;answer&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;

QA&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;where does Bill Gates work?&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
QA&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;where is IBM is headquartered?&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
QA&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&quot;who is Bill Clinton married to?&quot;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;!--Created using ToHtml.com on 2021-03-24 17:32:28 UTC --&gt;


The output looks like this:

&lt;pre&gt;
Answer from transformer model:
Original query:  where does Bill Gates work?
Answer:
{&#39;score&#39;: 0.31679803133010864, &#39;start&#39;: 213,
 &#39;end&#39;: 222, &#39;answer&#39;: &#39;Microsoft&#39;}
Answer from transformer model:
Original query:  where is IBM is headquartered?
Answer:
{&#39;score&#39;: 0.8704459071159363, &#39;start&#39;: 115, &#39;end&#39;: 131,
 &#39;answer&#39;: &#39;Armonk, New York&#39;}
Answer from transformer model:
Original query:  who is Bill Clinton married to?
Answer:
{&#39;score&#39;: 0.00018714569159783423, &#39;start&#39;: 480, &#39;end&#39;: 505,
 &#39;answer&#39;: &#39;former secretary of state&#39;}
&lt;/pre&gt;
&lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/4724028286930477058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2021/03/dbpedia-natural-language-interface.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4724028286930477058'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4724028286930477058'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2021/03/dbpedia-natural-language-interface.html' title='DBPedia Natural Language Interface Using Huggingface Transformer'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-2448408807778805798</id><published>2020-10-22T16:41:00.000-07:00</published><updated>2020-10-22T16:41:04.009-07:00</updated><title type='text'>I have a new job helping to build a Knowledge Graph at Olive AI</title><content type='html'>&lt;p&gt;&amp;nbsp;I retired (my last job was Master Software Engineer and the manager of a deep learning team at Capital One) a year ago April and was enjoying time with friends and family, doing personal research in hybrid AI, lots of writing, and volunteering at our local food bank. I stopped my volunteer work with COVID-19 and welcomed the opportunity last month to start work at &lt;a href=&quot;https://oliveai.com&quot; target=&quot;_blank&quot;&gt;Olive AI&lt;/a&gt;&amp;nbsp;working on a very strong Knowledge Graph team. I believe in their mission and the work and the people are great!&lt;/p&gt;&lt;p&gt;It is refreshing to leave the deep learning field, at least for a while. My heart is in developing stronger AI that can explain its actions and adapt flexibly to help people in their lives. I always take a humans-first stand on technology. AI systems should help us get our work done efficiently and remove tedium, allow us more time for creative activities, and generally enjoy our own humanity.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/2448408807778805798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2020/10/i-have-new-job-helping-to-build.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2448408807778805798'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/2448408807778805798'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2020/10/i-have-new-job-helping-to-build.html' title='I have a new job helping to build a Knowledge Graph at Olive AI'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-5119809366997524695</id><published>2020-07-08T06:36:00.000-07:00</published><updated>2020-07-08T06:36:40.159-07:00</updated><title type='text'>I have tried to take advantage of extra time during the COVID-19 pandemic</title><content type='html'>&lt;div&gt;My wife Carol and I have been practicing social distancing and wearing masks for shopping for over 5 months now. Welcome to the new normal and a crazy world in which entertaining and seeing friends is done by meeting in people&#39;s yards and everyone bringing their own &quot;meal in a bag.&quot;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I enjoy writing so I have been updating my recent books, starting with &lt;a href=&quot;https://leanpub.com/lovinglisp&quot; target=&quot;_blank&quot;&gt;Loving Common Lisp, or the Savvy Programmer&#39;s Secret Weapon&lt;/a&gt; and&amp;nbsp;&lt;a href=&quot;https://leanpub.com/hy-lisp-python&quot; target=&quot;_blank&quot;&gt;A Lisp Programmer Living in Python-Land: The Hy Programming Language&lt;/a&gt;. These are free to read online and licensed with Creative Commons Share and Share Alike, No Commercial Reuse, so you can also find copies on the web (hopefully up to date copies!).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last month I started a much larger project: I have not updated my book &lt;a href=&quot;https://leanpub.com/javaai&quot; target=&quot;_blank&quot;&gt;Practical Artificial Intelligence Programming With Java&lt;/a&gt; since the fourth edition was published in 2013. I have discarded a lot of older material like exert systems, and have three new chapters on the semantic web and also a new chapter on deep learning. I also copied the material on anomaly detection from my Power Java book that is now discontinued and updated that material. Lastly, I am revisiting how readers install, run, and experiment with the code examples. I am still using maven but I am being more consistent, all of the examples are also installable libraries, and now some of the examples use the libraries developed in other examples.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For fun, I have been buying more material for my Oculus Quest VR device. Favorites include ping pong, racket ball, the Star Wars Darth Vader Immortal 3 volume set, and I enjoy a lot of 3D art that people post.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For exercise I try to hike every morning from 5:30am to about 6:30am (I live in the mountains of Central Arizona and even at high altitude it gets warmer later in the day). My wife and I cancelled our gym memberships so I bought myself some weights that I keep in my home office. I am a huge fan of the Apple Watch and I use it to track health and fitness activities.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope that you, dear reader, are doing well in these crazy times we are living in.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/5119809366997524695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2020/07/i-have-tried-to-take-advantage-of-extra.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/5119809366997524695'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/5119809366997524695'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2020/07/i-have-tried-to-take-advantage-of-extra.html' title='I have tried to take advantage of extra time during the COVID-19 pandemic'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-3645142785019036839</id><published>2020-02-18T09:33:00.000-07:00</published><updated>2020-02-18T09:33:35.289-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Common Lisp"/><category scheme="http://www.blogger.com/atom/ns#" term="NLP"/><category scheme="http://www.blogger.com/atom/ns#" term="standalone executables"/><title type='text'>Custom built SBCL and using spaCy and TensorFlow in Common Lisp</title><content type='html'>Here are some of my of my recent notes that might save you some time, or teach you a new trick.&lt;br /&gt;
&lt;br /&gt;
I have had good results using the &lt;a href=&quot;https://github.com/bendudson/py4cl&quot; target=&quot;_blank&quot;&gt;py4cl library&lt;/a&gt; if I wrap API calls to TensorFlow or spaCy in a short Python library that calls Python libraries and returns results in simple types like strings and dictionaries. I just committed a complete example (Python library and Common Lisp client code) to the public repo for my book&amp;nbsp;&lt;a href=&quot;https://leanpub.com/lovinglisp&quot; target=&quot;_blank&quot;&gt;Loving Common Lisp, or the Savvy Programmer&#39;s Secret Weapon&lt;/a&gt; that will be added to the next edition of my book. Here is a link to the subdirectory with this new example in my repo: &lt;a href=&quot;https://github.com/mark-watson/loving-common-lisp/tree/master/src/spacy&quot; target=&quot;_blank&quot;&gt;https://github.com/mark-watson/loving-common-lisp/tree/master/src/spacy&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I frequently make standalone executable programs using SBCL and I just noticed a great tip from&amp;nbsp;&lt;a href=&quot;https://lispblog.xach.com/&quot; target=&quot;_blank&quot;&gt;Zach Beane&lt;/a&gt; for compressing the size of standalone executables. Start with rebuilding SBCL from source to add the compression option; get the source code and:&lt;br /&gt;
&lt;br /&gt;
./make.sh --with-sb-thread --with-sb-core-compression&lt;br /&gt;sh install.sh&lt;br /&gt;
&lt;br /&gt;
When I now build my KGCreator application with:&lt;br /&gt;
&lt;br /&gt;
(sb-ext:save-lisp-and-die &quot;KGcreator&quot; :toplevel #&#39;kgcreator :executable t :compression t)&lt;br /&gt;
&lt;br /&gt;
then the size of the standalone executable is reduced from 93MB to 19MB. I don&#39;t notice any extra startup time which is important for command line utilities.</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/3645142785019036839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2020/02/custom-built-sbcl-and-using-spacy-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/3645142785019036839'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/3645142785019036839'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2020/02/custom-built-sbcl-and-using-spacy-and.html' title='Custom built SBCL and using spaCy and TensorFlow in Common Lisp'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-4129965659003282329</id><published>2020-02-10T17:30:00.000-07:00</published><updated>2020-02-11T07:25:36.505-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Privacy"/><title type='text'>Protecting oneself from surveillance capitalism</title><content type='html'>As an author I find occasional use of Facebook and Twitter to be useful for “broadcasting” notifications of my new books, open source projects, etc. I also find gmail to be useful for some types of email.&lt;br /&gt;
&lt;br /&gt;
Still, I do like to take a few easy steps to push back a little against the free use of my web behavioral data to profit corporations who I don’t do business with (and those I do):&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Use ProtonMail as my primary email&lt;/li&gt;
&lt;li&gt;Use Firefox on my Linux and macOS laptops with individual containers for Google, FaceBook, etc.&lt;/li&gt;
&lt;li&gt;On iOS devices, favor browsing with private tabs.&lt;/li&gt;
&lt;li&gt;Use a VPN when I am traveling and when I &amp;nbsp;need to use public WiFi&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Limit use of my gmail address to a backup email and as a junk email address.&lt;/li&gt;
&lt;li&gt;For online purchases from Amazon, etc. use a secure email service that does not use the contents of your email to market to you and as data to sell to 3rd parties.&lt;/li&gt;
&lt;li&gt;Frequently delete all cookies from web browsers that you use.&lt;/li&gt;
&lt;li&gt;Use private browsing windows for routine use of the web&lt;/li&gt;
&lt;li&gt;Prefer to access the web on an iOS or &amp;nbsp;Chromebook - probably more secure than a laptop or PC.&lt;/li&gt;
&lt;li&gt;Logout from web apps like Facebook, LinkedIn, Amazon, Google, Twitter, etc. to avoid active sessions.&lt;/li&gt;
&lt;li&gt;This takes some time, but on mobile devices, Apple/Windows laptops, etc. turn off tracking on as many apps as possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/4129965659003282329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2020/02/protecting-oneself-from-surveillance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4129965659003282329'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4129965659003282329'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2020/02/protecting-oneself-from-surveillance.html' title='Protecting oneself from surveillance capitalism'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7100397.post-4054442970032634167</id><published>2020-01-02T18:36:00.000-07:00</published><updated>2020-01-02T18:39:56.390-07:00</updated><title type='text'>My hopes and predictions for the next 10 years</title><content type='html'>Hello everyone, &amp;nbsp;I wish everyone a happy and healthy new year!&lt;br /&gt;
&lt;br /&gt;
Here are my predictions for the next ten years:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Wearable devices like the Apple Watch will become widely used and because of user pushback we will see company’s like Apple, Google, Toshiba, Huawei, Samsung, etc. start to support standards that allow, for example, an Apple Watch to interact with a Samsung TV. Further, I expect a single personal device (watch or phone) to be for most users a connection hub that interacts with public kiosks, displays, input devices, etc.&lt;/li&gt;
&lt;li&gt;Deep learning architectures and techniques will rapidly improve and will continue to rule the world, at least for a while. I expect at least one new dramatic paradigm shift for AI beyond current deep learning, reinforcement learning, etc. models.&lt;/li&gt;
&lt;li&gt;The world economies will get hit hard and wealth will be in a larger part measured in terms of ownership of water and food production, manufacturing, technology IP, and hopefully hard assets like gold, silver, and secure cryptocurrencies. I expect most currencies will eventually be backed by about 20% gold and this will enforce some stability and help eliminate wild printing of fiat currencies. I expect SDRs, or something like them, to be the reserve currency. In ten years, I would expect SDRs to be about equally made up of US dollars, Euros, and Chinese currency.&lt;/li&gt;
&lt;li&gt;Politically, world elites will continue to assume almost total control of news media and governments but they as a group will start to share more resources with highly trained and educated workers and allow the creation of a secure safety net that will provide a safer society because almost all people will have food and shelter needs met (this may take more than ten years). We all have to live on planet earth and everyone’s life improves with fewer wars and higher productivity.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='https://mark-watson.blogspot.com/feeds/4054442970032634167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://mark-watson.blogspot.com/2020/01/my-hopes-and-predictions-for-next-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4054442970032634167'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/7100397/posts/default/4054442970032634167'/><link rel='alternate' type='text/html' href='https://mark-watson.blogspot.com/2020/01/my-hopes-and-predictions-for-next-10.html' title='My hopes and predictions for the next 10 years'/><author><name>Mark Watson,  author and consultant</name><uri>http://www.blogger.com/profile/05514730816583918651</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDK41i2IJbDRKUtTYwKEAemM0jcuLi-2l0x85-Kd9mJzTuqcfCiLeBOjxUtPXTfqbwaFfgCQa4zVwml3H324Om9tXOIsbpnyGMhQZfGnl23hVGcQpQ_upDr6oFjGojac/s220/Mark_hat_small.jpg'/></author><thr:total>0</thr:total></entry></feed>