{"id":22901345,"url":"https://github.com/mooerslab/mooerslab","last_synced_at":"2025-07-07T02:40:00.963Z","repository":{"id":165234158,"uuid":"557264436","full_name":"MooersLab/MooersLab","owner":"MooersLab","description":"Landing page for MooersLab repository","archived":false,"fork":false,"pushed_at":"2025-06-22T16:50:25.000Z","size":2581,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-22T17:36:54.247Z","etag":null,"topics":["cctbx","colab","crystallographic-computing","emacs","jupyter","literate-programming","neovim","pymol","saxs","scientific-writing","speech-to-text","supercomputing","time-management","vim","voice-computing","writing","writing-aids","writing-tools"],"latest_commit_sha":null,"homepage":"https://github.com/MooersLab/MooersLab","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MooersLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-10-25T11:27:07.000Z","updated_at":"2025-06-22T16:50:28.000Z","dependencies_parsed_at":"2023-05-20T13:31:02.287Z","dependency_job_id":"cebdb758-1a06-4ab9-ac39-d39f7a07ee8d","html_url":"https://github.com/MooersLab/MooersLab","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MooersLab/MooersLab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2FMooersLab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2FMooersLab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2FMooersLab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2FMooersLab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MooersLab","download_url":"https://codeload.github.com/MooersLab/MooersLab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2FMooersLab/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264003265,"owners_count":23542594,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cctbx","colab","crystallographic-computing","emacs","jupyter","literate-programming","neovim","pymol","saxs","scientific-writing","speech-to-text","supercomputing","time-management","vim","voice-computing","writing","writing-aids","writing-tools"],"created_at":"2024-12-14T01:33:01.413Z","updated_at":"2025-07-07T02:40:00.950Z","avatar_url":"https://github.com/MooersLab.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"How is it work![Version](https://img.shields.io/static/v1?label=mooerslab\u0026message=0.7.3\u0026color=brightcolor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n# MooersLab\n\n## Quick Links\n\n- [ACA Structural Sciences Society talks](https://github.com/MooersLab#aca-talks)\n- [bash](https://github.com/MooersLab#bash-related)\n- [Bayesian Data Analysis](https://github.com/MooersLab#bayesian-data-analysis)\n- [Clojure](https://github.com/MooersLab#clojure)\n- [Cryocrystallography](https://github.com/MooersLab#cryocrystallography)\n- [Crystallization](https://github.com/MooersLab#crystallization)\n- [Crystallographic computing](https://github.com/MooersLab#crystallographic-computing)\n  + [Diffraction image processing](https://github.com/MooersLab#diffraction-image-processing)\n  + [SSRL-SMB bash functions](https://github.com/MooersLab/smb-bash-functions)\n  + [Wilson plots](https://github.com/MooersLab#wilson-plots)\n- [Emacs](https://github.com/MooersLab#emacs-related)\n  + [Talks about Emacs](https://github.com/MooersLab#my-talks-about-emacs)\n- [Experimental design](https://github.com/MooersLab#experimental-design)\n- [Grant writing](https://github.com/MooersLab#grant-writing)\n- [Jupyter and Colab](https://github.com/MooersLab#jupyter-and-colab-related)\n- [LaTeX](https://github.com/MooersLab#latex-related)\n- [Literate programming and computational narratives](https://github.com/MooersLab#literate-programming)\n- [Machine learning]\n- [Molecular Biophysics]\n- [Molecular Graphics Related](https://github.com/MooersLab#molecular-graphis-related)\n- [Molecular Simulation](https://github.com/MooersLab#molecular-simulation)\n- [Protein structure]\n- [PyMOL](https://github.com/MooersLab#pymol)\n- [Python](https://github.com/MooersLab#python)\n- [RNA Editing]\n- [RNA Structure](https://github.com/MooersLab#RNA-structure)\n- [SAXS](https://github.com/MooersLab#small-angle-scattering)\n- [SSRL talks](https://github.com/MooersLab#ssrl-talks)\n- [Structure-based drug design]\n- [Supercomputing](https://github.com/MooersLab#supercomputing-related)\n- [Time management](https://github.com/MooersLab#time-management)\n- [Typst](https://github.com/MooersLab#typst-is-exciting) \n- [vim/neovim](https://github.com/MooersLab/MooersLab/blob/main/README.md#vim-and-neovim)\n- [Writing tools](https://github.com/MooersLab#writing-productivity-tools)\n  + [Manuscript writing support](https://github.com/MooersLab#manuscript-writing-support)\n  + [Metacognition tool](https://github.com/MooersLab#writing-log-for-planning-manuscripts)\n  + [Accountability tools](https://github.com/MooersLab#progress-tracking) Includes a cool heatmap.\n- [Voice computing](https://github.com/MooersLab#voice-computing)\n  + [biological-crystallography-voice-in](https://github.com/MooersLab/biological-crystallography-voice-in)\n- [Videos of talks](https://github.com/MooersLab#videos-related-to-these-repositories)\n\n## Videos related to these repositories\n- [Snippets in Jupyter Notebooks](https://www.youtube.com/watch?v=LjJvhfJvla4), OKC Python Meetup, 10 May 2019.\n- [Why develop a snippet library for Jupyter in your subject domain?](https://www.youtube.com/watch?v=sZNCAwW5dYg\u0026amp;t=11s)  JupyterCon 2020.\n- [Reproducible molecular graphics with Org-mode](https://www.youtube.com/watch?v=ZTocGPS-Uqk\u0026amp;t=2s), EmacsConf 2021.\n- [Edit live Jupyter notebook cells with Emacs](https://www.youtube.com/watch?v=2NPUDYAOgW0), EmacsConf 2022.\n- [Enhancing productivity with voice computing](https://emacsconf.org/2023/talks/voice/), EmacsConf 2023.\n- [Managing multiple writing projects](https://mediasite.ouhsc.edu/Mediasite/Channel/python/watch/bc2777b248ff4fa4959b9bfed9b0e84a1d), Data Science Workshop, Jan. 2024.\n- [Voice Computing with Python in Jupyter Notebooks](https://www.youtube.com/watch?v=C9GILvqAYVg) PyTexas 2024, Austin, Texas: April 21, 2024.\n\n## Introduction\nThis site contains the public repositories of the Dr. Blaine Mooers Lab, Department of Biochemistry and Physiology, College of Medicine, University of Oklahoma Health Sciences, Oklahoma City, Oklahoma, USA.\nMy lab determines the structures of biological macromolecules and their complexes with drugs, mainly using [X-ray crystallography](https://en.wikipedia.org/wiki/X-ray_crystallography#Biological_macromolecular_crystallography) and sometimes small-angle [ X-ray scattering](https://en.wikipedia.org/wiki/Small-angle_X-ray_scattering), a method that does not require crystals.\nWe grow crystals using advanced experimental design methods and collect X-ray diffraction data in-house and frequently at the [Stanford Synchrotron Radiation LightSource](https://www-ssrl.slac.stanford.edu/content/) and sometimes at the four other significant light sources in the US.\nWe also do structure-based drug design using supercomputers.\n\nWe are not computer scientists; we leave the heavy-duty coding to the professionals.\nHowever, we write code occasionally to help advance our science and the science of others.\nWe have developed software tools to ease the writing of PyMOL scripts to make molecular images.\nThese tools are available for the top 19 text editors and the Jupyter, Colab, and R Markdown notebooks.\nThese text editors can make your work lighter and have many excellent features, but Emacs is our favorite because, thanks to Emacs Lisp, it is the most customizable text editor.\nHowever, we caution that one must take a disciplined approach to Emacs because it is a tinker's paradise.\n\nWe often use the web service called *Overleaf* to write manuscripts, grant applications, slideshows, posters, and lab notebooks in LaTeX.\nWe spent five years trying the alternative Markup languages.\nThis was before I became aware of Overleaf, which made working with LaTeX much easier.\nSome of our LaTeX templates are in the repositories found here (see the section on [LaTeX](https://github.com/MooersLab#latex-related) below).\n\nOverleaf is a great way to get started with LaTeX.\nHowever, Emacs provides access to more powerful editing features.\nYou can use GhostText to send a page from Overleaf to Emacs for editing.\nNonetheless, Overleaf is excellent for collaborative writing. \nWhen using Chrome or Microsoft Edge, you can use the Voice In plugin for Google Chrome to dictate prose in Overleaf.\n\nWe are also fans of Jupyter Notebooks.\nSomething inexplicable about Jupyter Notebooks makes coding in them fun.\nWe have developed tools for working on Jupyter with PyMOL and CCTBX.\nJupyter Notebooks may be frustrating for those without at least some formal training in computing.\nYou must always be aware of your computer's state, or at least the state you expected it to be in.\nThose who lack this awareness will run into a lot of trouble.\n\nWe also like R Markdown notebooks.\nAlthough somewhat less interactive than Jupyter notebooks, these are simpler to put under version control, and they support custom libraries of code snippets with tab triggers and tab stops.\nThe RStudio IDE provides excellent support for R Markdown notebooks.\nYou can have the best of both worlds by editing R Markdown notebooks in Emacs and using the reticulate package to harness Jupyter kernels to run Python inside the notebook.\n\nWe code in mainly in Python but sometimes in Bash, R, Clojure, Elisp, Julia, Fortran, and C/C++.\nIt is hard to be a polyglot programmer due to limitations on mental bandwidth.\n\nOur repositories are grouped by category.\nSome repositories are listed in several categories.\nThis listing is still a work in progress.\nSome repositories still need to be added to this page.\nSeventeen repos are forks to other people's repositories.\nVisit the [repositories tab](https://github.com/MooersLab?tab=repositories) to see the complete list of repositories.\n\nIn the spring of 2023, I started a [MooersLab](https://codeberg.org/MooersLab) site on Codeberg.\nA foundation runs Codeberg and has 13 years of funding.\nSome repositories on GitHub get mirrored on Codeberg.\n\nIf you like a repository, please click on the star in the upper right.\n\n\u003c!--\n(PS The ultimate text editor for writing prose and code is Emacs.\nAll paths through text editors lead to Emacs.\nSome people get stuck all too long in Vim or NeoVim, which are also great editors.)\n--\u003e\n\n# Index of repositories\n\n## ACA talks\n- [ACA2021](https://github.com/MooersLab/ACA2021)\n- [ACA2022](https://github.com/MooersLab/ACA2022)\n- [ACA2023](https://github.com/MooersLab/dsd4xtals)\n- [ACA2024](https://github.com/MooersLab/ACA2024)\n\n## Bash related\n- [Bash functions for Schooner at OSCER](https://github.com/MooersLab/bashFunctions4oscer)\n- [Multiple file transfer](https://github.com/MooersLab/multipleFileTransfer)\n- [Function that counts lines of uncommented code](https://github.com/MooersLab/count-lines-of-code/tree/main)\n\n## Bayesian Data Analysis\n- [Bayesian Data Analysis (BDA) Speech-to-Text expansions of acronyms](https://github.com/MooersLab/bayesian-data-analysis-voice-in/blob/main/README.md)\n- [JointProb](https://github.com/MooersLab/jointprob1D) R Markdown and Jupyter notebooks for the Saturday JointProb study group active in 2022 and 2023.\n\n## Blog\n- [Lab website with blog posts](https://mooerslab.github.io/year-archive/)\n\n## Clojure\n- [ClojConj 2023 talk about protein structure superposition via probabilistic programming in Clojure](https://www.youtube.com/watch?v=lDweOPGHLB8\u0026t=51s)\n- [quizzes about Clojure](https://github.com/MooersLab/qclj) These quizzes are useful for improving command recall after a break from using Clojure for several months.\n\n## Cryocrystallography\nTools to enhance success at cryopreserving protein and nucleic acid crystals.\n\n- [Easing cryosolution preparation](https://github.com/MooersLab/cryosolution-generation)\n\n\n## Crystallization\nTools to support protein and nucleic acid crystallization.\n\n- [Crystal scoring key](https://github.com/MooersLab/crystal-score-key)\n- [Crystallization drop observation record for 24 well tray](https://github.com/MooersLab/crystallization-observation-record-24wells)\n- [Vary One-Factor-at-a-Time (OFAT) experimental designs](https://github.com/MooersLab/ofat4xtals)\n- [Definitive Screening Designs](https://github.com/MooersLab/dsd4xtals)\n\n\n## Crystallographic computing\n\n### Diffraction-image-processing\n\n- [aimless summary table extraction](https://github.com/MooersLab/aimless-summary-table-extraction)\n- [collection of SSRL-SMB bash functions](https://github.com/MooersLab/smb-bash-functions)\n\n### Wilson plots\n\n- [Wilson plot with Python and truncate log file](https://github.com/MooersLab/wilson-plots)\n  \n### CCTBX related\n\n\u003ca id=\"cctbxsnips-for-notebooks\"\u003e\u003ch4\u003eFor use in notebooks\u003c/h4\u003e\u003c/a\u003e\n\n- [Jupyterlab cctbx snippets](https://github.com/MooersLab/jupyterlabcctbxsnips) CCTBX snippets for JupyterLab with the *jupyterlab-snippets* extension or the jupyterlab-snippets-mutlimenus extension.\n- [Jupyterlab cctbx plus snippets](https://github.com/MooersLab/jupyterlabcctbxsnipsplus) The variant of the *jupyterlabcctbxsnips* library with comments to guide editing of the snippets.\n- [Tagged cctbx snippets](https://github.com/MooersLab/taggedcctbxsnips) The variant for the Elyra-snippet extension for Jupyterlab. The snippets have tags in their metadata that can be used to retrieve code snippets.\n- [Tagged cctbx plus snippets](https://github.com/MooersLab/taggedcctbxsnipsplus) The variant for the Elyra-snippet extension for Jupyterlab. The tab stops in a comment block to guide the editing of the live snippet. The snippets have tags in their metadata that can be used to retrieve snippets.\n- [Colab cctbx snippets](https://github.com/MooersLab/colabcctbxsnips) Colab snippets.\n\n\n\u003ca id=\"cctbxsnips-for-editors\"\u003e\u003ch4\u003eFor use in text editors\u003c/h4\u003e\u003c/a\u003e\n\n- [cctbxsnips-Emacs](https://github.com/MooersLab/cctbxsnips-Emacs) CCTBX snippets for the *yasnippet* snippet system in for Emacs.\n- [cctbxsnips-SublimeText3](https://github.com/MooersLab/cctbxsnips-SublimeText3) CCTBX snippets for Sublime Text 3 (ST3).\n- [cctbxsnips-VSC](https://github.com/MooersLab/cctbxsnips-VSC) CCTBX snippets for Visual Studio Code (VSC).\n- [cctbxsnips-UltiSnips](https://github.com/MooersLab/cctbxsnips-Ultisnips) CCTBX snippets for Vim or NeoVim via UltiSnips plugin.\n- [cctbxsnips-neosnippets](https://github.com/MooersLab/cctbxsnips-neosnippets) CCTBX snippets for Vim or NeoVim via neosnippets plugin.\n- [cctbxsnips-Snipmate](https://github.com/MooersLab/cctbxsnips-snipmate) CCTBX snippets for Vim or NeoVim via snipmate plugin.\n- [cctbxsnips-Atom](https://github.com/MooersLab/cctbxsnips-Atom) CCTBX snippets for Atom. Have the same format required for Pulsar.\n\n\n## Curve-fitting software\n- [List of curve-fitting software](https://github.com/MooersLab/Curve-fitting-software) This list includes both proprietary and free software.\n\n\n## Design of Experiments (DoE) [See Experimental Design below]\n\n\n## Emacs related\nToday's Emacs is not your grandfather's Emacs.\nThe median age of an Emacs user is 32, not 77, as you might expect for a text editing program who is about 40 years old.\nThis is due to a very active community of young users centered around several YouTube channels, Emacs Lisp being well-designed to customize Emacs, an online annual international conference (emacsconf), the popularity of org-mode, and a welcoming community of developers.\nElisp was first used in Emacs 19 in 1985, with the GNU Emacs 19.3, about ten years after the project's start.\n\nIt should be noted that Emacs is single-threaded.\nThis is a significant limitation when it comes to loading large embedded images.\nThe developers have and continue to optimize the part of the code base that relies on C for speed so single treading is generally not a hindrance for most uses.\n\nOne group has started a 'lem' project that uses Common Lisp to build a multithreaded text editor similar to Emacs. \nUnfortunately, `lem` is not user-ready in our experience. \nPerhaps, Emacs users will migrate to `lem` someday. \nIn the meantime, it is worth continuing to use Emacs, knowing that a multithreading alternative is under development.\n\nThe Emacs project is open-source and run by several hundred volunteer core developers.\nThe project runs by consensus.\nThere is no succession issue.\nThe project's benevolent dictator for life stepped down about 15 years ago.\nAfter doing so, an explosion of creativity occurred.\n\nAccording to the [Lindy effect](https://www.sciencedirect.com/science/article/abs/pii/S0378437117305964?via%3Dihub), it is likely that Emacs will remain in use for another 50 years.\nExposure to elisp coding in Emacs leads some to pick up other languages in the Lisp family, including Clojure.\nThis, in turn, leads them to understand programming more deeply.\n\n### Tools to support the mastery of Emacs\n\nMastery is in the eye of the beholder.\nTotal mastery is impossible with \u003e5000 packages.\n\n- [Popup menus of GNU Emacs core commands you want to master](https://github.com/MooersLab/emacs-learning-spiral-hydra)\n- [Configuration for Emacs30 to support structured editing](https://github.com/MooersLab/emacs30venturatreesitterconfig)\n- [Some simple hydras in Codeberg repo](https://codeberg.org/MooersLab/emacs-hydra-examples)\n- [Quizzes about Emacs to improve recall of keybindings](https://github.com/MooersLab/qemacs) Ten minutes boosting your recall on a particular topic can save 10, 100, or 1000 hours of Google searches, especially if you are prone to getting side-tracked in the Google-verse.\n\n### Sample configurations\n\nThese files can help you on your Emacs journey. \nYou probably just want to copy bits of configuration to integrate into your own workflow.\n\n- [A simpler approach to using org in place of the init.el file](https://github.com/MooersLab/emacs-simple-init-org/tree/main)\n- [Compiling Emacs29 on Sequoia (macOS 15.01) with tree-sitter](https://github.com/MooersLab/compile-emacs-29/)\n- [Compiling Emacs30 on Ventura (macOS 13.2) with tree-sitter](https://github.com/MooersLab/emacs30macos13treesitter) This protocol compiles Emacs from source with tree-sitter support for structured editing of computer code on macOS.\n- [Compiling Emacs30 on Ubuntu22.04 LTS with tree-sitter](https://github.com/MooersLab/emacs30ubuntu22) This protocol compiles Emacs with tree-sitter support on Ubuntu.\n- [crafted-emacs user config](https://github.com/MooersLab/crafted-emacs-config) My user configuration file (config.el) for the crafted-emacs profile. I did install use-package and used it to install several packages. The base profile has the Doom theme, Vertico completion stack, and eglot. I added my org-agenda config and my favorite key bindings. I am currently *luvin* it.\n- [latex-emacs29 configuration](https://github.com/MooersLab/latex-emacs) A configuration file enhancing the use of LaTeX in Gnu Emacs version 29.0.5. Includes org-mode configuration.\n- [latex-emacs28 configuration](https://github.com/MooersLab/latexemacs28) Similar to above but for Gnu Emacs version 28.\n- [latex-emacs30 configuration](https://github.com/MooersLab/latexemacs30) Similar to above but for Gnu Emacs version 30.\n- [scimax user.el](https://github.com/MooersLab/scimaxuserconfig) Scimax is the Emacs configuration that Dr. John Kitchin of Carniege-Mellon University is developing to support reproducible research by scientists with Gnu Emacs. The *user.el* file for Scimax enables Scimax users to add keybindings and packages. I added features from latex-emacs and config.org.\n- [config.org](https://github.com/MooersLab/configorg) My default GNU Emacs version 30 configuration file.\n\n### Document templates and workflows in LaTeX and Org-mode\n\nOrg-mode is a blend of the best features of markdown and LaTeX.\nAlthough you can use org-mode without knowledge of LaTeX, you do not have to give up any of your skills and knowledge of using LaTeX to use org-mode.\nYou gain powerful tools for navigating the file, making major rearrangements of its sub-trees, and interfacing with many other programs, such as Gnuplot, for generating data plots from tables.\nOrg-mode's table editor is reason enough to adopt its use because it makes assembling a table easy.\nFor example, you can draft a table in org-mode, drop it into co-pilot, and ask it to reformat it LaTeX.\n\n#### Org-mode templates\n- [Book project in org-mode](https://github.com/MooersLab/bookInOrg)\n- [Writing log template in Org-mode](https://github.com/MooersLab/writingLogTemplateInOrg) Template for tracking your actions, decisions, and plans for any serious writing project that takes more than one session to finish. The LaTeX version is listed in the LaTeX section for use on Overleaf or in Emacs.\n- [Org-mode manuscript template](https://github.com/MooersLab/manuscriptInOrg) The manuscript will be exported to PDF after being run through LaTeX. This is for the first submission. This is for the lovers of org-mode. The export from org to PDF is fast and painless in Emacs.\n- [Basic modular annotated bibliography in org-mode](https://github.com/MooersLab/barebones-modulated-annotated-bibliography-orgmode)\n- [Full-featured annotated bibliography in org-mode](https://github.com/MooersLab/annotated-bibliography-org)\n\n### LaTeX related\nSee the section about LaTeX for more repositories.\n\n- [Slides about workflow in LaTeX](https://github.com/MooersLab/BerlinEmacsAugust2022) These were presented to the Berlin Emacs Meetup in August 2022. Regrettably, the talk was not recorded. It was a 90-minute presentation.\n- [snippets for latex-mode in Emacs](https://github.com/MooersLab/snippet-latex-mode) LaTeX code snippets for yasnippets.\n\n\n### My talks about Emacs\nThe more I am exposed to other Emacs community members, the more I appreciate how little I know about Emacs. \nThe growing disease of expertise tends to inhibit sharing knowledge with beginners.\nAdvanced beginners tend to give talks that are more accessible to beginners because they tend to assume less prior knowledge.\nAs an advanced beginner, I find the pressure of assembling a talk an effective way of forcing myself to master new material.\n\n- [emacsconf 2021 talk about rendering molecular graphics with PyMOL in org literate programming files](https://emacsconf.org/2021/talks/molecular/) Video and comments.\n- [EmacsATX Meetup Talk, 4 May 2022: functional programming in Emacs lisp](https://github.com/MooersLab/EmacsATX4May2022) Slides.\n- [Video link to talk about GhostText, Oklahoma Data Science Workshop, July 2022](https://mediasite.ouhsc.edu/Mediasite/Channel/python/watch/4da0872f028c4255ae12935655e911321d)\n- [Slides from talk about GhostText, Data Science Workshop, July 2022](https://github.com/MooersLab/DSW22ghosttext) GhostTexT rocks! It enables Emacs to edit textboxes on websites. You can use GhostText to bring the full power of Emacs to Overleaf (*Important:*  use the legacy version rendering of the text area in Overleaf to get text imported into a LaTeX buffer).\n- [emacsconf 2022 talk about using Emacs to edit Jupyter cells via GhostText and atomic-chrome](https://emacsconf.org/2022/talks/jupyter/) Video and comments.\n- [emacsconf 2023 talk about using voice-computing with Emacs to enhance productivity](https://emacsconf.org/2023/talks/voice/) Video, transcript, and comments.\n- [DSW November 2024: A Science Writing Workflow in Org Mode: slides and link to talk](https://github.com/MooersLab/DSW24-org-mode-slides)\n- [emacsconf 2024 talk about managing science writing metadata](https://emacsconf.org/2024/talks/project/)  \n\n### Voice computing for Emacs\n- [Voice-In library for emacs](https://github.com/MooersLab/emacs-voice-in)\n- [Voice-In library for org-mode](https://github.com/MooersLab/org-mode-voice-in)\n\n\n\n## Jupyter and Colab related\n\n### Jupyter and PyMOL\n\nPyMOL can be run in Jupyter via PyMOL's Python API.\n\n#### Snippet libraries for direct use in Jupyter\n\nMultiple extensions for Jupyter support the use of snippets.\nHowever, the support does not include tab stops nor tab triggers, two standard features of snippet support in modern text editors.\nThe libraries with `plus` at the end of their name have a second copy of the code in a comment.\nThis copy is marked with the sites of the tab stops where you might want to change the parameter value from its default value.\n\n##### Classics Notebook\nPyMOL Python snippets for use in the Classic Jupyter Notebook with the `snippets_menu` notebook extension.\n\n- [jupyternbclassicpymolpysnips](https://github.com/MooersLab/jupyternbclassicpymolpysnips)\n- [jupyternbclassicpymolpysnipsplus](https://github.com/MooersLab/jupyterlabpymolpysnipsplus)\n\n##### JupyterLab\n\nPyMOL Python snippets for use in JupyterLab with the jupyterlab-snippets extension.\n\n- [jupyterlabpymolpysnips](https://github.com/MooersLab/jupyterlabpymolpysnips) PyMOL Python snippets for use in JupyterLab with the jupyterlab-snippets extension.\n- [jupyternbclassicpymolpysnipsplus](https://github.com/MooersLab/jupyternbclassicpymolpysnipsplus)\n\nPyMOL Python snippets for use with the elyra-snippets extension and with PyMOL.\nThese snippets can be retrieved with tags in the elyra-snippet GUI.\n\n- [taggedpymolpysnips](https://github.com/MooersLab/taggedpymolpysnips)\n- [taggedpymolpysnipspymolpysnipsplus](https://github.com/MooersLab/taggedpymolpysnipspymolpysnipsplus)\n\n#### Snippet libraries for using external editors of Jupyter notebooks\nThese editors work in Jupyter Notebooks via the GhostText browser plugin.\n\n- [jupyter-vsc-pymolpysnips](https://github.com/MooersLab/jupyter-vsc-pymolpysnips)\n- [jupyter-st3-pymolpysnips](https://github.com/MooersLab/jupyter-st3-pymolpysnips)\n- [jupyter-emacs-pymolpysnips](https://github.com/MooersLab/jupyter-emacs-pymolpysnips)\n- [jupyter-ultisnips-pymolpysnips](https://github.com/MooersLab/jupyter-ultisnips-pymolpysnips)\n- [jupyter-snipmate-pymolpysnips](https://github.com/MooersLab/jupyter-snipmate-pymolpysnips)\n- [jupyter-neosnippets-pymolpysnips](https://github.com/MooersLab/jupyter-neosnippets-pymolpysnips)\n- [jupyter-atom-pymolpysnips](https://github.com/MooersLab/jupyter-atom-pymolpysnips)\n\n##### Demo of GhostText with Jupyter and Emacs\n\n- [emacsconf 2022 talk about using Emacs to edit Jupyter cells via GhostText and atomic-chrome](https://emacsconf.org/2022/talks/jupyter/)\n\n### Colab and PyMOL\n- [colabOpenSourcePyMOLpySnips](https://github.com/MooersLab/colabOpenSourcePyMOLpySnips) PyMOL Python snippets for use in Colab with open source PyMOL.\n- [colabPyMOLpySnips](https://github.com/MooersLab/colabPyMOLpySnips) PyMOL Python snippets for use in Colab with the incentive PyMOL.\n\n### CCTBX specific\n- [Jupyterlab cctbx snippets](https://github.com/MooersLab/jupyterlabcctbxsnips) CCTBX snippets for JupyterLab with the jupyterlab-snippets extension or the jupyterlab-snippets-mutlimenus extension.\n- [Jupyterlab cctbx plus snippets](https://github.com/MooersLab/jupyterlabcctbxsnipsplus) The variant of the jupyterlabcctbxsnips library with comments to guide editing of the snippets.\n- [Colab cctbx snippets](https://github.com/MooersLab/colabcctbxsnips) Colab snippets.\n\n\n## Experimental design\n\n### Experimental designs for crystal growth\nWe provide easy and fast-to-deploy experimental designs for crystallization setups in Excel workbooks.\nThese designs take three minutes to customize for your experimental needs.\nPlots of the results against factor level for each factor are automatically generated, thereby saving the users many hours of tedious coding of the data plots for each crystallization tray.\nThese workbooks could be adapted to other kinds of experiments.\n\nThe OFAT experiments are often used to screen for active factors.\nThe active factors can then be used in DSD designs to find the optimal conditions to return large crystals.\nOFAT experiments are inappropriate for this objective because they do not measure interactions between factors.\nFactor interactions are quite common in the crystallization of proteins.\n\nThe DSDs tend to be limited to three active factors because of their small size and weaker statistical power.\nLarger traditional response surface method designs (RSM) should be used if more factors are suspected of being active or if two or more interactions are expected.\nDSD can be thought of as a subset of RSMs.\nTheir small size is attractive for protein crystallization, where the sample is expensive and scarce.\nThe small size of DSD experiments opens up the possibility of replicating them to measure the variance.\n\n\n- [Vary One-Factor-at-a-Time (OFAT) experimental designs](https://github.com/MooersLab/ofat4xtals)\n- [Definitive Screening Designs](https://github.com/MooersLab/dsd4xtals)\n\n### Voice In Plus voice-triggered snippets\n- [Design of Experiments (DoE): doe.csv](https://github.com/MooersLab/design-of-experiments-voice-in)\n\n## Grant writing\n- [Voice Commands for NIH grants](https://github.com/MooersLab/nih-grants-voice-in)\n- [Voice commands for NSF grants](https://github.com/MooersLab/nsf-grants-voice-in)\n\n\n## LaTeX related\nUntil recently, I wrote a lot in Emacs on 750words.com via GhostText.\nI configured the atomic-chrome package for Emacs to go into LaTeX mode when GhostText connects to 750words.\nI can also use Emacs to write and edit text in Overleaf via atomic-chrome and GhostText.\nThis is a very cool way to extend Emacs to websites with weaker support for editing text.\n\nNow I use voice-to-text to dictate in 750words.com or Overleaf.\nI use voice commands to insert snippets containing LaTeX code.\nSee the [](https://github.com/MooersLab/MooersLab/blob/main/README.md#voice-computing-for-enchanced-productivity) section below.\n\nIf you do not have extensive experience writing in a markup language like HTML or Markdown, start with one of the Markdown flavors to become productive as quickly as possible.\nMany ideas behind the typesetting program Markdown will transfer to LaTeX.\nMarkdown is easy to use and highly intuitive.\nMastery of Markdown will provide a fallback system if you get stuck debugging the errors in your LaTeX document.\nThe latter is a common experience for beginning users of LaTeX.\n\n### What about MyST?\n\n*MyST* expands to Markedly Structured Text.\n*MyST* is an enhanced version of Markdown developed to interface with Jupyter notebooks and support their utilization in scientific publishing.\nYou can export files to LaTeX, MS Word, and PDF.\n\n*MyST* is part of the dream of converting Jupyter into a literate programming platform and supporting the conversion of scientific Publications into highly extensible documents.\nYou can edit *MyST* files in the newer versions of Jupyter Lab and any text editor.\n\nIt provides a preview in your default browser that is updated each time you save the `main.md` file.\nThe lovers of HTML are wowed by this feature.\n\nLive preview extensions are available for Emacs, Vim, and VS Code.\nIt feels like an underdeveloped version of org-mode, which had all the export capabilities over a decade ago.\nIt may be more analogous to the well-planned, lean, and efficient R Markdown for the R programming world.\n\n\n### What about RestructuredText and Typst?\n\nThese markup languages are more potent than markdown.\nHowever, very few publishers will accept the source files for these markup languages.\nYou may be able to submit the PDF generated by one of these systems on your first submission.\nHowever, you will be stuck transferring the contents of your file to MS Word or LaTeX.\n\nA nice introduction to Typst in October 2024 by Dr. Chase Brown of the University of Central Florida is found [here](https://mediasite.ouhsc.edu/Mediasite/Channel/python/browse/null/most-recent/null/0/null).\n\n\n#### RestructuredText\n\nThis typesetting language uses BibTeX and LaTeX Math.\n*RestructuredText* is used by some in the Python world to generate documentation.\nThe annual SciPy Proceedings have been prepared with it for many years.\nIt harnesses indentation, for better or worse.\nIt is not hard to use for a LaTeX user.\n\n#### Typst provides dopamine hits\n[*Typst*](https://sitandr.github.io/typst-examples-book/book/about.html) compiles many times faster than *LaTeX*.\n*Typst* provides a nearly live preview and thus instant gratification.\nThis may be the main reason to use it for simple documents.\n\n*Typst* has a more modern bibliography management system, but it also supports using BibLaTeX, which will ease adoption by new users. \n\n*Typst* also utilizes a more computer programmer-oriented approach to typesetting by using functions.\n*Typst* also provides boilerplate styling templates similar to classes in LaTeX.\nThe typesetting of math equations is similar to that for LaTeX, so LaTeX users will find it easy to adopt.\n*Typst* set out to replace LaTeX but retains many features.\n\n##### Typst is ready for writing scientific manuscripts\n\nIt is easy to write a generic manuscript in *typst* for the [first submission PDF](https://github.com/MooersLab/manuscriptInTypst).\nThe upside is the speed at which the document is compiled.\nThe corresponding writing project log file template in *typst* is found [here](https://github.com/MooersLab/writingLogInTypst).\nThe corresponding modular annotated bibliography template in *typst* is found [here](https://github.com/MooersLab/modular-annotated-bibliography-typst).\n\n\n\n##### Typist in Emacs\n\n*Typst* has been integrated into org-mode.\nYou can use a `#+typst:` keyword to start lines with *typst* commands.\nThere is even a *typst* submenu for exporting to PDF or *typ* files.\n\nThere is an abandoned `typst-mode` project on GitHub.\nThe author shifted his efforts to the `typst-ts-mode` project.\nUnfortunately, `typst-ts-mode` package is harder to install.\n\nOh well, `typst-mode` is much easier to install and use.\nIt provides syntax highlighting and entering `C-c C-p` compiles the document to PDF and instantly displays it in your default PDF viewer.\nThat is all of the support that I need most of the time.\n\n\n##### Who is typst for?\nIt might still be more accessible for computer programmers to adopt *typst* than nonprogrammers.\nWriters who are not computer programmers will quickly master Common Markdown.\nThe next step in markup systems will probably still be the LyX editor, which offers a `what you see is what you get` approach to using LaTeX.\n\n\n### Links to LaTeX-related repositories\n\n- [LaTeX bare-bones template file](https://github.com/MooersLab/barebonesLaTeX/tree/main) This template is for people who want to make a simple document without a lot of bells and whistles.\n- [LaTeX tips](https://github.com/MooersLab/latextips)\n- [Configuration for Emacs30 to support structured editing](https://github.com/MooersLab/emacs30venturatreesitterconfig)\n- [latex-emacs29 configuration](https://github.com/MooersLab/latex-emacs) A configuration file enhancing the use of LaTeX in Gnu Emacs version 29. This is the current release version of Gnu Emacs. Includes org-mode configuration.\n- [latex-emacs28 configuration](https://github.com/MooersLab/latexemacs28) Similar to above but for Gnu Emacs version 28.\n- [latex-emacs30 configuration](https://github.com/MooersLab/latexemacs30) Similar to above but for Gnu Emacs version 30.\n- [Slides about workflow in LaTeX](https://github.com/MooersLab/BerlinEmacsAugust2022) presented to the Berlin Emacs Meetup August 2022. Not recorded. It was a 90-minute lecture.\n- [slideshowTemplateInLaTeX](https://github.com/MooersLab/slideshowTemplateLaTeX) Slideshow template with use with the LaTeX package Beamer that supports the making of slides. Our templates make slides that do not look like they were made in LaTeX because we hide the navigation icons that no one ever uses and replace the triangles in bulleted lists with round bullets. Our slides look like they were made in PowerPoint.\n- [posterInLaTeX](https://github.com/MooersLab/posterInLaTeX) uses Beamer to make a poster with a simple design. This enables whipping together a poster in a few hours. It is much easier than using a Gaint slide in PowerPoint. Our approach is also saner than the default approach to making a poster with Beamer.\n- [LaTeX manuscript template](https://github.com/MooersLab/manuscriptInLaTeX) Generic template for the first submission as a PDF.\n- [Writing log template in LaTeX](https://github.com/MooersLab/writingLogTemplate) Place to track progress and plans behind a manuscript.\n- [Annotated bibliography template in LaTeX](https://github.com/MooersLab/annotatedBibliography) Every writing project needs one of these. These should be utilized more. They are good for recalling the relevant features of a paper.\n- [ditto but for org-mode](https://github.com/MooersLab/annotated-bibliography-org/blob/main/README.md)\n- [Diary for 2024 in LaTeX](https://github.com/MooersLab/diary2024inLaTeX) Designed for use on Overleaf.com but can compile locally. Each day is a section. Each month is a chapter. Has an automatically generated index (most markdowns cannot generate indices). Very feature-rich and ready to use. Makes a great electronic scientific notebook because it is searchable and indexed. \u003e 1000-page document at the end of the year compiles to PDF in under a minute on Overleaf.\n- [snippets for latex-mode in Emacs](https://github.com/MooersLab/snippet-latex-mode) My LaTeX code snippets for yasnippets.\n- [The writer's creed](https://github.com/MooersLab/thewriterslaw) Guidelines for greater productivity as a writer.\n- [bib2item3](https://github.com/MooersLab/bib2item3) Python script to convert bibtex.bib file to bibitems in `tex` file format. Bibitems are required by some publishers. They are a pain to create manually.\n- [LaTeX Voice In Plus library](https://github.com/MooersLab/latex-voice-in) Speech-to-text commands for inserting LaTeX markup.\n\n## Literate Programming\n\nSee the sections on Org-mode and Jupyter and Colab.\n\n\n\n\n## Molecular Graphics Related\n[Collection of links for a 15-hour course on Molecular Graphics](https://mooerslab.github.io/MolecularGraphicsLinks/index.html)\n\n## Molecular Simulation\n\nComing soon. Includes Structure-based Drug Design.\n\n## PyMOL\n\n### Highlights:\n\n- **EasyPyMOL**: go here for an easy start for interactive horizontal scripting on the command line in PyMOL and for the roundview.py function. YouTube videos show how to install the software on various operating systems.\n- **pymolshortcuts**: These are very popular. You do not need to be a code writer to use these. This is what most people will want to install. The README.md explains the installation and use.\n- **pymolsnips**: For people writing traditional vertical *.pml PyMOL scripts in a text editor. The README.md describes how to install each of the 17 supported text editors. It then shows how to install the snippet library in each editor. Animations show the snippet library in use in each text editor.\n- **pymolpysnips**: For people wanting to run PyMOL in one of these computational notebooks: Jupyter, Colab, RStudio, and org-mode.\n- **PyMOL wall hangings**: Protocol to convert molecular artwork into large images for framing and hanging on a wall.\n\n### Links\n- [pymolrc](https://github.com/MooersLab/pymolrc) My pymolrc file.\n- [pymolsnips](https://github.com/MooersLab/pymolsnips) A large collection of PyMOL macro language (pml) code snippets. It contains a link to a webpage with extensive instructions on installing 19 text editors.\n- [pymolshortcuts](https://github.com/MooersLab/pymolshortcuts) A large collection of functions mapped to aliases or shortcuts. This collection of functions is very useful for non-coders.\n- [EasyPyMOL](https://github.com/MooersLab/EasyPyMOL) Support for horizontal scripting in PyMOL.\n- [orgpymolpysnips](https://github.com/MooersLab/orgpymolpysnips) Support for generating computational narratives (literate programming plus interactive computing) in org-mode with PyMOL.\n- [rstudiopymolpysnips](https://github.com/MooersLab/rstudiopymolpysnips) Support for literate programming in Rstuido with PyMOL.\n- [taggedpymolpysnips](https://github.com/MooersLab/taggedpymolpysnips) Support for literate programming in JuptyerLab with tagged snippets with the elyra-snippets extension and with PyMOL.\n- [jupyterlabpymolpysnips](https://github.com/MooersLab/jupyterlabpymolpysnips) PyMOL Python snippets for use in JupyterLab with the jupyterlab-snippets extension.\n- [jupyternbclassicpymolpysnips]() PyMOL Python snippets for use in the Classic Jupyter Notebook (invoked with `jupyter nbclassic` with Jupyter Notebook version 7).\n- [colabOpenSourcePyMOLpySnips](https://github.com/MooersLab/colabOpenSourcePyMOLpySnips) PyMOL Python snippets for use in Colab with open source PyMOL.\n- [colabPyMOLpySnips](https://github.com/MooersLab/colabPyMOLpySnips) PyMOL Python snippets for use in Colab with the incentive version of PyMOL.\n- [PyMOL wall hangings](https://github.com/MooersLab/PyMOLwallhangings) Protocol for making oversized images framed and hung on a wall.\n\u003c!--\n## Structure-based Drug Design\n--\u003e\n\n## Python\nSee the sections on PyMOL, CCTBX, and Jupyter and Colab. Python is in many repositories.\n\n- [PyTexas talk: Voice computing with Python in Jupyter notebooks (slides and audio), 2024 Apr. 21](https://github.com/MooersLab/voice-computing-with-python-in-jupyter-notebooks)\n\n## R statistical program\n- [rstudiopymolpysnips](https://github.com/MooersLab/rstudiopymolpysnips) Support for literate programming in Rstuido with Python code for PyMOL.\n\n## RNA structure\n- [Count atoms in RNA by element](https://github.com/MooersLab/RNA-atom-counter)\n\n\n## Small Angle Scattering\n- [SmallAngleScatteringWebpage](https://mooerslab.github.io/SmallAngleScatteringWebpage/index.html)\n\n## SSRL Talks\n\nTalks at the SSRL/LCLS Users Meeting:\n- [2024 Workshop talk: Tools to Ease the Use of PyMOL](https://github.com/MooersLab/user-meeting-workshop-2024)\n\n## Time management\n- [Gantt chart](https://github.com/MooersLab/gantt-chart-py) Support mutliple project management.\n- [TimeBlocks](https://github.com/MooersLab/time-blocks) Form for daily scheduling with time blocks.\n- [TimeSpent](https://github.com/MooersLab/timeSpent) Time tracking by project with Google Sheets.\n\n## Supercomputing related\nHigh-performance computing (HPC), cluster computing, and cloud computing.\n\n- [Bash functions for Schooner at OSCER](https://github.com/MooersLab/bashFunctions4oscer)\n- [Emacs configuration file for schooner supercomputer](https://github.com/MooersLab/emacs4oscer)\n- [Multiple file transfer with scp](https://github.com/MooersLab/multipleFileTransfer)\n- [Vim configuration file for the schooner supercomputer at OU-Norman](https://github.com/MooersLab/vimrc4oscer)\n- [Vim configuration file for SSRL SMB cluster](https://github.com/MooersLab/vimrc4ssrl)\n- [Tutorial for biologists on using the supercomputer at OU-Norman](https://github.com/MooersLab/oscer-supercomputer-tutorial)\n\n## Vim (and Neovim)\n- [Vim configuration file](https://github.com/MooersLab/vimrc) Current `.vimrc` file for Mac OSX 10.15\n- [Vim configuration file for schooner supercomputer](https://github.com/MooersLab/vimrc4oscer)\n- [Vim configuration file for SSRL SMB cluster](https://github.com/MooersLab/vimrc4ssrl)\n- [Neovim configuration file](https://github.com/MooersLab/neovim-init-file)\n- [qvim](https://github.com/MooersLab/qvim) Quiz about Vim commands to improve your recall of the commands after a break from using Vim.\n\n## Voice Computing\n\nVoice computing can be divided into three activities:\n\n- speech-to-text (dictation)\n- speech-to-commands\n- speech-to-code\n\nSpeech-to-text is the easiest to master, the most widely applicable, and the most effective way of enhancing academic productivity.\n\nThe video below exemplifies using a voice trigger to insert a chunk of LaTeX code I use to plan each day.\nIt is inserted after saying `insert start day`.\nYou can easily make a markdown variant customized to meet your needs.\nI am using the Voice In Plus software in Google Chrome.\nIt also works in Microsoft Edge.\nIt uses the built-in Speech-to-text software in the web browser on your local machine, so latency is not much of an issue.\n\n\n\n\n### Index of subsections\n\n- [Software that I use](https://github.com/MooersLab#review-of-software-of-the-voice-copmputing-software-that-I-have-used)\n- [Talon Voice for voice control and computing](https://github.com/MooersLab#talon-voice-related)\n- [Voice In Plus for dictation and voice control in the web](https://github.com/MooersLab#voice-in-plus-related)\n- [Whisper for dictation, includes my text replacements](https://github.com/MooersLab#whisper-related)\n- [Voice Typing in Google Docs for dictation](https://github.com/MooersLab#voice-typing-in-google-docs-related)\n- [Words counts before and after adopting ](https://github.com/MooersLab#Word-Counts-before-and-after-adopting-Voice-Computing)\n- [Voice computing-related talks](https://github.com/MooersLab#voice-computing-related-talks)\n\n\n### Review of the software that I have used\n\nMy sampling of the available -related software is highly skewed towards the Mac operating system and Google Chrome.\nI have yet to complete a comprehensive survey of the software available for Windows, Linux, and other browsers.\nIf you are a user of such systems, the review below will give you a taste of what may be available for these other operating systems.\n\n**Voice Typing** is widely available through Google Docs.\n**Voice Typing** supports almost 100 voice commands but does not support custom commands.\n\n**Voice In Plus** has similar accuracy to **Voice Typing** with the addition of custom commands.\nI use the latter every day to dictate the first drafts.\nI do the rewriting using the keyboard.\n\nOpenAI's **Whisper** may be an order of magnitude more accurate.\nIt has a latency issue, so live transcription and interactive editing are difficult.\nIt is also not easy to fine-tune with custom commands.\n\nMy primary use of **Whisper** is for transcribing audio files.\nI run Python scripts to correct the initial transcript.\nThese corrections include expanding contractions.\nThis code also supports inserting simple commands like `new paragraph` during dictation.\n\nA very new use of **Whisper** for me is inside Emacs.\nAfter my third attempt, I finally figured out how to run **Whisper** in Emacs via the [**whisper.el** package](https://github.com/natrys/whisper.el?tab=readme-ov-file).\nThe package automates compiling the *whisper.cpp* software and downloading the Whisper LLM.\nYou record a local audio file of your dictation, and then you transcribe that audio file into text that appears in the current buffer in Emacs.\nThe `M-H r` keybinding starts the audio recording, and the `C-u M-x r` keybinding transcribes the audio file.\nHere, `H` is for the Hyper key; I have it mapped to the right-hand command key (alt-key) on a non-Mac keyboard.\n\nThe natural unit of dictation with `whisper.el` seems to be the paragraph.\nThis form of dictation is less interactive than Voice In Plus, where you can use the keyboard to edit the currently dictated sentence.\nI have yet to figure out the Elisp code to apply my text replacements in the transcription step.\n\nThe **Superwhisper.** **app** for the Mac is interesting.\nIt supports dictation in e-mail and elsewhere.\nIts support for custom commands is limited; it still needs to support bulk uploading of text replacements before I am sold.\nYou have to pay a subscription fee to access all its features.\nIts features may appeal to people with numerous electronic devices that must be synchronized with their primary computer.\n\nMacs with a newer Silicon chip have a local LLM that runs the conversion of your voice into words.\nThere are two programs, **Dictation** and **Voice Control**.\nThe latter program is more interesting because you can add custom voice snippets.\nOn my old Intel-based MacBook Pro, **Voice Control** did not do accurate dictations.\nIt was also slower because it utilizes a remote LLM.\n\nHowever, with a new M4 chip-based MacBook Pro, **Voice Control**  does a very accurate dictation job.\nCompared to **Voice In Plus**, its lag time is longer.\n**Voice Control**  will operate anywhere you can put a cursor.\nI did have it working for a while inside of Emacs, but then some package I introduced started interfering with it.\n\n**Talon Voice** supports all three activities, but speech-to-text accuracy needs to catch up to **Voice Typing** and **Voice In Plus** in my experience.\nI have been using **Talon Voice** for the last two activities.\nI plan to increase my use of **Talon Voice** for dictation.\n\nThe **Talon Voice** software is designed to be used by non-coders.\nIt can be configured with Talonscript files that have a simple syntax that is a subset of Python.\nYou can extensively customize **Talon Voice** using the Talonscript files without writing any Python code.\n\nVoice computing supports extending your productivity when you get tired of typing.\nVoice computing also supports issuing commands and dictating text while standing.\nVoice computing could be a cure for the envy of those colleagues who have standing desks.\nYou can speak commands to your computer while standing 20 feet away from it and looking out the window.\nYou can give your body and eyes a break from sitting and staring at the computer screen while remaining productive.\n\n### Word Counts before (orange) and after (magenta) adopting Voice Computing\n\nI have seen a three-fold increase in the total number of words captured in September and October 2023 compared to June and July 2023 before I took up speech-to-text in mid-August 2023.\nI have had the same amount of out-of-town travel during the first two periods.\nI did not make a conscious effort to capture more words per day.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"./images/words15.png\" alt=\"HTML5 Icon\" style=\"width:632px;height:244px;\"\u003e\u003c/p\u003e\n\nOn the day after Thanksgiving in 2023, I generated almost 12,000 words.\nFrom that point to just before Christmas, I made a concerted effort to generate at least 5,000 words daily.\nThen family obligations reduced my daily word generation.\nNonetheless, I had a five-fold increase in the total word count for November and December 2023.\n\nA three-fold increase is more realistic with all of the disruptions from doing experiments, administration, teaching, service, and work-related travel.\nThe slight decrease in word count after the new year 2024 may reflect a shift in my focus toward turning more of my writing into publishable products.\nThis decrease may reflect more effort focused on editing text.\n\nIn November-December 2024, I spent 80 hours preparing a talk for the Data Science Workshop and 140 hours preparing an Emacsconf talk.\nThis would explain some of the decline in word count in November.\nI started posting the daily writing effort in December,\nThis might have changed my behavior by trying to finish a manuscript.\nIn any event, the total word count for 2024 was 1,090,627 words.\nThis would be equivalent to the content of 12 long novels.\nToo bad my words are not so golden!\n\nI may have compensated by using a digital voice recorder (DVR) in mid-January 2024 while away from my computer.\nThe DVR is superior to a cell phone for recording speech because it does not need to be held next to your mouth.\nThe DVR can record a Zoom meeting when lying on a table or a seminar from the back of a room: Use it ethically.\nI transcribe the audio recordings with a locally installed version of OpenAI's Whisper.\nI use Python and bash scripts to reformat the text with one sentence per line for easier downstream editing.\n\nI am still using this device daily as of early May 2025.\nIt is the best $85 investment I have made in a long time.\nIt is worth ten times as much. \n\nSome of my mutterings are rubbish that I cut from the transcripts.\nI occasionally harvest valuable thoughts that are worth retaining.\nI also use the DVR to paraphrase some technical documents that otherwise are tedious to read.\nThe DVR has extended my generative writing time by 15-30 minutes daily.\n\nSpending more time on rewriting will lead to fewer new words generated if the time spent on writing is constant.\nRewriting is very time-consuming; it can take as much or more time than generating the text initially.\nAI-powered writing assistants make suggestions, but they are not a silver bullet.\nYou still have to spend a lot of time making the appropriate selections; otherwise, your writing will often be degraded.\nThese assistants have not saved me time, and they have often wasted it.\nBut if they keep you engaged in rewriting, they can be helpful.\n\nText written for grant applications and articles will take even more time because it needs to be highly polished.\nSufficient time has to be scheduled for it.\nI plan to spend more time rewriting, so you can expect the new words generated in the following bimonthly reports to decline.\n\nThe slump from November to February was due to switching laptop computers.\nThe new computer does not run Whisper correctly, dramatically reducing my conversion of audio files to text.\n\nThe surge in March-April 2025 was likely due to several causes.\nFirst, I discovered the `write file` command in `the whisper.el` package of Emacs.\nThis package uses the C++ version of whisper.\nThis version is about 100 times faster than the Python version, and it is far easier to install.\nIt is not susceptible to the dependency issues that plague Python.\n\nI run this command in a directory where I have moved the audio file.\nThis directory is the default directory whenever I log into Emacs.\nI am prompted for the audio file, which is easy to select because it starts with today's date.\nAudio files are then transcribed in a few seconds into one long line.\nI select this line in Emacs to make it an active region.\nI apply a custom-made command (found in the mooerslabfunctions.el) that splits the line by sentences so that I have one sentence per line.\nI either manually parse the text, or I have a chatbot parse the text for me.\n\nBecause the final destination of the text will be LaTeX document, I use the following prompt before I supply the transcript:\n\n```bash\nParse this transcript into paragraphs and subsubsections by topic. Include index keys below the subsubsection headline. Extract the TODO items into an org-mode style checklist starting (e.g., - [ ]). Enclose this list in a LaTeX minted block between \\begin{minted}{org} and \\end{minted}. Return the text in LaTeX. Here is the transcript:\n```\n\nI have a chatbot fill in the index keys and reorganize the prose by its identified categories.\nThese categories become the titles of subsections.\nThe addition of index keys is another distracting chore.\nThese are low-level tasks that I do not really like doing and that I neglect doing.\nHaving the chatbot do this labor has been liberating.\n\nSomeday, I will take the time to direct a chatbot to go through my old entries in my diary and clean up the text in a similar fashion.\nFor example, I have a folder of 365 tex documents for the prior year.\nI could direct it to review each document and clean up the text in response to the prompt above.\nI must go back through the rewritten text to correct errors and misinterpretations.\n\nI also have the chatbot extract to-do items and put these into a list in org-mode.\nI dictate the term `to-do' to mark the beginning of a task for my to-do list.\nI then copy and paste the list into my daily entry in an org-mode document where I keep my daily plans.\n\n\n### What about Mac's Dictation and Voice Control software?\nOne alternative is to use the built-in Dictation software for Mac.\nThe Mac dictation software used to be worse than the alternatives, like Voice In.\nI tried the Mac dictation software again on March 22, 2024,\nThe error rate was reduced enough to make it competitive.\n\nIts advantage is that it can operate anywhere.\nIt works inside Emacs and on webpages, including webmail applications like Outlook and Gmail.\nThe Dictation software relies on an internet connection for older Intel chip-based Macs.\nThe generated sound waves are sent to a server run by Apple and then returned as text.\nI found the delay caused by this transfer to be unnoticeable.\n\nThe Voice Control software provided by the Mac OS has not improved since I last tried it.\nIts error rate is too high to use for dictation.\nThe advantage of Voice Control is that it supports customized commands and commands that can be used to run GUI-based software.\n\n### Whisper and a Digital Voice Recorder\nWe use Open-AI's whisper software via the Python openai-whisper package to transcribe my audio recordings with the DVR for almost a year. \nI had a three-month break after I switched to an Apple Silicon computer in December 2024, on which this Python package was tough to install due to complex dependencies. \nI finally found that I could compile and run whisper.cpp, which is 100 times faster than the Python-based software.\n\nAn alternate approach is to play the DVR with Voice In Plus on Google Chrome and the cursor in a text area in the browser to carry out the transcription and have the text written to the text area.\nThis ties up the computer for the duration of the recording.\n\nI wrote some Python code that reformats the transcript from Whisper to make it easier to edit.\nI use Python to make my text replacements in the transcript via `regex`.\nThe approach I am taking with this software is more cumbersome than the straightforward approach taken by Voice In Plus.\n\nIn addition, I reformat the text so that each sentence is written on its own line.\nThis format eases the deletion of lines containing rubbish.\nYou can advance to the following line with the down arrow key in most text editors.\nIf the current line is to be deleted, you enter control-K.\n\nI have used the dictated text transcribed by Whisper to a lesser extent than that generated with Voice-In Plus.\nWhisper often inserts garbage during long pauses.\nIt takes a lot of effort to parse the transcribed text.\n\nIt is easier to redo the dictation via Voice In and make corrections as you go.\nDictating the first draft during the morning commute is analogous to generating a verbal rough draft.\nIf I leave the DVR at home, I will still compose some prose by speaking aloud.\nOnce the initial draft has been composed verbally, it is easier to redo it with better word choices after I reach my office.\n\nOf course, generative writing is a small part of writing.\nRewriting, data analysis, figure-making, reading the literature, and managing co-author input take up most of the time.\nYou can attempt to rewrite a small part of a manuscript before a commute by re-reading the part in question immediately before the commute.\nThis sounds boring, but exciting new ideas often emerge during this exercise.\n\nBelow are links to programming tools to aid the adoption of voice computing.\n\n### Talon Voice-related\n- [Expand dictated contractions automatically](https://github.com/MooersLab/talon-contractions)\n- [Run bash commands in the terminal by voice command](https://github.com/MooersLab/talon-iterm)\n- [Open favorite web pages by voice commands](https://github.com/MooersLab/talon-webpages)\n- [Master Talon Voice phonetic alphabet with interactive quiz written in Python](https://github.com/MooersLab/talon-voice-quizzes)\n- [Master Talon Voice with interactive quiz written in elisp for Emacs](https://github.com/MooersLab/talon-voice-quiz.el)\n\n\n### Voice In Plus related\n\nThis browser plugin works in Google Chrome and Microsoft Edge.\nIt depends on the browser's Speech-to-Text API.\nInteractive sessions with it persist for up to 5 to 10 paragraphs, depending on your activity and speed of dictation.\nIf you pause too long, the software will deactivate after 3 minutes.\nIf you dictate too quickly, you will get ahead of the software, which will hang. \nYou might lose text for some of the words you dictated.\nNonetheless, this software is superior to Mac dictation software, which will only persist for an average of three sentences because it sends the sound waves to a language model located on a remote server.\n\n\\url{https://github.com/MooersLab/MooersLab/assets/15176203/0b543abf-aa3e-4dc9-acb4-e98283e6b4f3}\n\n\n#### Generic\n- [Master basic Voice In commands with interactive Python quiz](https://github.com/MooersLab/voice-in-basics-quiz)\n- [Master basic Voice In commands with an interactive quiz in Emacs](https://github.com/MooersLab/voice-in-basics-quiz.el)\n- [Library of 186 English contractions (a must for nonfiction writing)](https://github.com/MooersLab/voice-in-plus-contractions)\n- [Jupyter notebook voice triggers](https://github.com/MooersLab/jupyter-voice-in)\n- [Full library of commands for Voice In Plus](https://github.com/MooersLab/voice-in-plus-commands)\n- [Org-mode](https://github.com/MooersLab/org-mode-voice-in/tree/main)\n- [OUHS-related acronym expansions](https://github.com/MooersLab/ouhs-voice-in)\n- [LaTeX](https://github.com/MooersLab/latex-voice-in)\n- [Generate new writing project commands](https://github.com/MooersLab/new-writing-project-voice-in)\n- [Books about scientific writing mapped to voice triggers](https://github.com/MooersLab/scientific-writing-books-voice-in)\n\n\n#### Structural biology \n- [Biological crystallography (MX)](https://github.com/MooersLab/biological-crystallography-voice-in)\n- [Cryogenic electron microscopy (CryoEM and CryoET)](https://github.com/MooersLab/cryoem-voice-in)\n- [Small Angle Scattering (SAS)](https://github.com/MooersLab/sas-voice-in)\n- [Computational Crystallography Toolbox (cctbx)](https://github.com/MooersLab/cctbx-voice-in)\n\n#### Design of Experiments\n- [Design of Experiments (DoE)](https://github.com/MooersLab/design-of-experiments-voice-in)\n\n#### Data analysis\n- [Bayesian Data Analysis (BDA)](https://github.com/MooersLab/bayesian-data-analysis-voice-in/blob/main/README.md)\n- [Artificial intelligence (AI)](https://github.com/MooersLab/artificial-intelligence-voice-in)\n- [Software Development](https://github.com/MooersLab/software-development-voice-in)\n- [Markdown in Jupyter notebooks](https://github.com/MooersLab/markdown-jupyter-voice-in/tree/main)\n\n#### Emacs related\n- [Voice-In library for emacs](https://github.com/MooersLab/emacs-voice-in)\n- [Voice-In library for org-mode](https://github.com/MooersLab/org-mode-voice-in)\n\n  \n\n#### Funding Agency related\n- [NIH grants](https://github.com/MooersLab/nih-grants-voice-in)\n- [NSF grants](https://github.com/MooersLab/nsf-grants-voice-in)\n\n\n### Serenade\nThis is a standalone application that supports speech-to-commands and speech-to-code.\nIt depends on the presence of an internet connection because it uses remote servers to convert sound waves into text and commands.\nSerenade runs in web browsers, in the terminal, and at command prompts.\nIt is more versatile than Voice In Plus but less versatile than Talon Voice.\nIt may be a good bridge between Voice In Plus and Talon Voice.\n\n- [Expansions of English contractions](https://github.com/MooersLab/serenade-contractions)\n\n\n### Voice Typing in Google Docs related\n- [Master Voice Typing commands with interactive quiz](https://github.com/MooersLab/voice-typing-quiz)\n\n\n### Whisper related\n- [Bash function to transcribe audio files with whisper](https://github.com/MooersLab/bash-whisper-transcription)\n\n\n### Voice computing-related talks\nI have given three talks on this topic: two at the regional level and one at the international level.\n\n- [emacsconf23 talk speech-to-text and speech-to-commands, 2023 Dec. 2 on YouTube](https://www.youtube.com/watch?v=Z7l1ImjXOWM)\n- [PyTexas talk: Voice computing with Python in Jupyter notebooks (slides and audio), 2024 Apr. 21](https://github.com/MooersLab/voice-computing-with-python-in-jupyter-notebooks)\n- [ACA slideshow (no video), 2024 July 8](https://github.com/MooersLab/ACA2024)\n\n## Writing productivity tools\nThese are some programming tools designed to support greater writing productivity.\nThere are three elements: progress tracking, support for manuscript writing in LaTeX, and the writing log.\nThe last is very helpful for organizing and managing a writing project.\nIt is analogous to a project-specific laboratory notebook.\n\n### Books about writing\n- [Books about scientific writing mapped to voice triggers](https://github.com/MooersLab/scientific-writing-books-voice-in)\n\n### Timelines for managing writing projects\n\n- [Gantt chart](https://github.com/MooersLab/gantt-chart-py) Support mutliple project management.\n\n### Manuscript writing support\n\n- [LaTeX classic manuscript template](https://github.com/MooersLab/manuscriptInLaTeX) Generic and classic template for the first submission as a PDF. It has enhanced headers to ease sorting pages when stored with two or more manuscripts while traveling.\n- [Typst classic manuscript template](https://github.com/MooersLab/manuscriptInTypst) Generic and classic template for the first submission as a PDF. It has enhanced headers to ease sorting pages when stored with two or more manuscripts while traveling.\n- [Org-mode classic manuscript template](https://github.com/MooersLab/manuscriptInOrg) Generic and classic template for the first submission as a PDF. It has enhanced headers to ease sorting pages when stored with two or more manuscripts while traveling.\n- [Annotated bibliography Template in LaTeX](https://github.com/MooersLab/annotatedBibliography) Classic and boring variant.\n- [Modular annotated bibliography with BibTeX in LaTeX](https://github.com/MooersLab/modular-annotated-bibliography-bibtex-latex) Modular annotation files for reuse and to evade mangling by BibTeX. Can be fully illustrated and include multiple paragraphs. Includes index, glossaries, and Literature Cited for references outside the annotated bibliography. Drag and drop zip file available for instant gratification on Overleaf.\n- [Modular annotated bibliography with BibLaTeX in LaTeX](https://github.com/MooersLab/modular-annotated-bibliography-biblatex-latex) Modular annotation files for reuse and to evade mangling by biber. Can be fully illustrated and include multiple paragraphs. Includes index, glossaries, and Literature Cited for references outside the annotated bibliography. Drag and drop the zip file, which is available for instant gratification on Overleaf.\n- [bib2item3](https://github.com/MooersLab/bib2item3) Python script to convert bibtex.bib file to bibitems in the tex file format. Bibitems are required by some publishers. They are tedious to create manually.\n- [Emacsconf 2022 talk about GhostText on YouTube, December 2022](https://www.youtube.com/watch?v=2NPUDYAOgW0\u0026t=3s) Includes a demonstration of using Emacs to edit a document stored in Overleaf.\n- [LaTeX Voice In Plus library of speech-to-text commands](https://github.com/MooersLab/latex-voice-in)\n\n### Writing log for planning manuscripts\n\n- [Writing Log template in LaTeX](https://github.com/MooersLab/writingLogTemplate). This is the favored format. LaTeX beginning users can easily use this document on Overleaf without any configuration.\n- [Writing log template in Org-mode](https://github.com/MooersLab/writingLogTemplateInOrg) Has all of the features of the LaTeX variant. Favored by many Emacs users. Org-mode is a powerful analog of Markdown that can interpret LaTeX code blocks. If you are a LaTeX user, you can view org-mode as LaTeX with extensions that ease the assembly of tables, support time management via org-agenda, support knowledge management via org-roam, and support interactive computing. \n- [Writing log template in typst](https://github.com/MooersLab/writing-log-typst) Typst is a new alternative to LaTeX. It is built on Rust and instantly compiles small documents like this writing log.\n- [Writing log template in reStructuredText](https://github.com/MooersLab/writing-log-rst) reStructuredText is used by programmers for documentation.\n- [Writing log template in Markdown](https://github.com/MooersLab/writing-log-md) Markdown variant. Rendered to PDF by most good text editors.\n- [Writing log template in ODT](https://github.com/MooersLab/writing-log-odt) ODT can be read by Open Office, LibreOffice, and MS Word.\n- [Writing log template in DOCX for MS Word](https://github.com/MooersLab/writing-log-docx) MS Word variant--the least suitable format for this task, in my opinion.\n\n### Progress tracking\nProgress tracking can support momentum and enthusiasm for writing tasks that cannot be completed in one sitting.\n\n- [Autogenerated GitHub-style calendar-based heatmap of time spent writing](https://github.com/MooersLab/writing-time-spent-heatmap)\n- [Track writing progress in 2024 and 2025](https://github.com/MooersLab/writing-progress-2024-25) Enables tracking effort on separate projects and generates plots of cumulative effort across projects in bar plots. Updating the records at the end of the day takes only several minutes. Required tracking start and stop times, \n- [TimeSpent](https://github.com/MooersLab/timeSpent) Hourly time tracking by project with Google Sheets. This is useful for making monthly time reports and learning how much various writing projects take. It requires updating every several hours throughout the day. Updating the record can be painful if you fall behind by a day or more. Only some people have the discipline to do time-tracking. If you cannot do it, you are \"regressing towards the mean\" as Sir Francis Galton would say.\n- [Writing contract template](https://github.com/MooersLab/writingContract) This contract is in Microsoft Word, Markdown, LaTeX, and org-mode. This accountability system works only if your partner is similarly committed to daily writing. I had a good run of four years with one person from out of state. I would consider doing this again.\n\n![Here is an example](https://github.com/MooersLab/writing-time-spent-heatmap/blob/main/images/hmgj.png)\n\n\n## Update History\n\n|Version   | Changes                                                                                                     | Date             |\n|:---------|:------------------------------------------------------------------------------------------------------------|:-----------------|\n| 0.7.3    | Added a highlights subsection to the PyMOL section. Made clarifications to the voice computing section.     | 2024 September 28 |\n\n## Sources of funding\n\n- NIH: R01 CA242845, AI088011\n- NIH: P30 CA225520 (PI: R. Mannel)\n- NIH P20GM103640 and P30GM145423 (PI: A. West)\n\n**MooersLab/MooersLab** is a ✨ _special_ ✨ repository because its `README.md` (this file) appears on his GitHub profile 👋.\n\n\u003c!--\n\nHere are some ideas to get you started:\n\n- 🔭 I’m currently working on ...\n- 🌱 I’m currently learning ...\n- 👯 I’m looking to collaborate on ...\n- 🤔 I’m looking for help with ...\n- 💬 Ask me about ...\n- 📫 How to reach me: ...\n- 😄 Pronouns: ...\n- ⚡ Fun fact: ...\n- 👋\n--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooerslab%2Fmooerslab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmooerslab%2Fmooerslab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooerslab%2Fmooerslab/lists"}