[–] 1 point 6 months ago (1 child)

A comparison to eat would be interesting - as it does not have external dependencies I generally use that, but there are a few things where it reaches its limits.

  • source
  • [–] 39 points 1 year ago (2 children)

    Like always in 3D printing you need to understand if something is worth printing. There are enough toys that work as 3D print, and enough stuff that either will not survive the load, or not be played with (like those figurines). For those categories (especially the figurines) commercial ones might have the same fate, though, so just printing one to shut the child up may have smaller footprint/costs.

    A small list of toys that work very well 3D printed:

    This propeller pull toy last longer than the commercial ones with pull string.

    This stomp rocket also works great, and if the kids listen to instructions will last ages.

    This kind of logic game has similar durability than commercial ones.

    This kind of balloon toy also is pretty nice - we used to build those from wood when I was small, but 3D-printing here offers quite a bit more options for experimentation together with the kids. (The author has different models in his profile)

    From that there's pretty much a direct line to 3D printed RC models, where the main problem is that many are in the classic model builder mindset where you have to live with the parts you can buy, and due to that end up with a BOM containing dozens of different screw types. This one is an easy to build example not making that mistake, and there are some others as well.

  • source
  •  

    This uses the tool support from gptel to let any LLM with tool support

    • search my bbdb for contact info
    • perform a bbdb search for all contacts with an anniversary field
    • use gnus to compose an email

    plus a few helper functions to make it useful (like giving it the ability to query the current date).

    The tool definition it used in the above screenshot are:

    (defun gptel-tool--get-date ()
      "Return the current date"
      (format-time-string "%Y-%m-%d"))
    
    (defun gptel-tool--compose-email (to-address subject text)
      "Open an email compose buffer '*new message*' to to-address with subject subject."
      (gnus-setup-message 'message (message-mail to-address subject))
      (insert (concat "\n" text)))
    
    (defun gptel-tool--bbdb-search (name)
      "Search bbdb for NAME"
      (bbdb-search (bbdb-records) :name name))
    
    (defun gptel-tool--bbdb-search-anniversary (anniversary-type)
      "Search bbdb for anniversary with ANNIVERSARY-TYPE"
      (let ((bbdb-default-xfield 'anniversary))
        (bbdb-search (bbdb-records) :xfield anniversary-type)))
    

    And they get registered with the following code:

          (gptel-make-tool
           :function #'gptel-tool--get-date
           :name  "gptel-tool--get-date"
           :description "Use to get the current date in %Y-%m-%d format. After calling this tool, stop. Then continue fulfilling user's request."
           :category "emacs")
    
          (gptel-make-tool
           :function #'gptel-tool--compose-email
           :name  "gptel-tool--compose-email"
           :description "Open an email compose buffer and set subject, to-address and body. After calling this tool, stop. Then continue fulfilling user's request."
           :args (list '(:name "to-address"
                               :type string
                               :description "The address to send to")
                       '(:name "subject"
                               :type string
                               :description "The mail subject")
                       '(:name "body"
                               :type string
                               :description "The body text of the email"))
           :category "emacs")
    
          (gptel-make-tool
           :function #'gptel-tool--bbdb-search
           :name  "gptel-tool--bbdb-search"
           :description "Return a bbdb entry for name, or nil if not found. After calling this tool, stop. Then continue fulfilling user's request."
           :args (list '(:name "name"
                               :type string
                               :description "The name to search for"))
           :category "emacs")
    
          (gptel-make-tool
           :function #'gptel-tool--bbdb-search-anniversary
           :name  "gptel-tool--bbdb-search-anniversary"
           :description "Return or a specific anniversary type. After calling this tool, stop. Then continue fulfilling user's request."
           :args (list '(:name "anniversary-type"
                               :type string
                               :description "The anniversary to search for, for example 'birthday' for birthdays"))
           :category "emacs")