<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikis.ch.cam.ac.uk/thom/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tkl35</id>
	<title>Thom Group Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wikis.ch.cam.ac.uk/thom/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tkl35"/>
	<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php/Special:Contributions/Tkl35"/>
	<updated>2026-06-10T15:40:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1027</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1027"/>
		<updated>2022-08-25T14:23:30Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, do not disregard at your own convenience!&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Do NOT treat Git repositories like Google Drive&#039;&#039;&#039;.&lt;br /&gt;
#*Git repositories do not exist for you to backup all your files (e.g., cache, output and log files).&lt;br /&gt;
#*Do not be trigger happy with ```git add --all```.&lt;br /&gt;
#*Do not add whole directories.&lt;br /&gt;
#*Maintain a minimalistic mentality, i.e., carefully consider what files are important with the focus on successfully allowing the user to run your code.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include .pyc files, the entire __pycache__ folder and .DS_Store files.&#039;&#039;&#039;&lt;br /&gt;
#*Basically, you have been warned.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT ignore .gitignore.&#039;&#039;&#039;&lt;br /&gt;
#*They do not exist for no reason, create one to satisfy the above rules.&lt;br /&gt;
#*Visit https://git-scm.com/docs/gitignore for more information on formatting one.&lt;br /&gt;
#*Do not skip the following (bad) example:&lt;br /&gt;
#::&amp;gt; Sometimes, you might want to code using an IDE on your personal computer, git push and then git pull onto a workstation to run the code. &lt;br /&gt;
#::&amp;gt; As expected, you run into an error, nano into the file with the error and make the necessary changes.&lt;br /&gt;
#::&amp;gt; The code now works and you happily git push from the workstation, with all your output and cached folders.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT send a merge request with over 453 changed files - this is impossible to review!&#039;&#039;&#039;&lt;br /&gt;
#*Do not operate with the mentality of only submitting completed working code.&lt;br /&gt;
#*Do not forget that little and often with code review is better than the former.&lt;br /&gt;
#*Besides the mundane rationale of catching your mistakes and getting feedback quicker rather than letting than accumulate, it allows the reviewer to better track and follow your changes.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget the concept and importance of source control.&#039;&#039;&#039;&lt;br /&gt;
#*This is a big one. Basically, when you are coding as a team, or if your work is derived from another user, or needs to be passed on to future users, you must consider code maintenance and management.&lt;br /&gt;
#*For example, as much as possible, do not explicitly include other people&#039;s code in your own repository, because when they update their code, you do not want to repeat the cloning or downloading process again, or have to sieve through all your and their code to find what has changed and needs to be updated. What you do want is to simply perform a ```git pull```. To that end, do not forget git submodules exist for a very good reason. See https://git-scm.com/book/en/v2/Git-Tools-Submodules.&lt;br /&gt;
#*Along those lines, you also do not want to edit someone else&#039;s code as much as possible.&lt;br /&gt;
#::&amp;gt; For example, say you import the python package phreeqpy that serves as a wrapper for phreeqc, which is a piece of software written in C that you wish to use.&lt;br /&gt;
#::&amp;gt; You quickly realise one of the files, ```phreeqpy_dll.py``` is causing errors, and needs to be modified to suit your needs.&lt;br /&gt;
#::&amp;gt; You might wonder &amp;quot;Wouldn&#039;t the easiest solution be to make a new repository for phreeqpy, replace the _dll file with a newly edited (by you) _dll2 file and adding it as a submodule (*gasps* something about explicitly including someone else&#039;s code)? Clearly, the _dll2 file contains everything required to perform the job!&amp;quot;&lt;br /&gt;
#::&amp;gt; However, what you do not realise is that making a new repository means having to deal with the compilation of phreeqc underneath it (which is the job of phreeqpy), which will result in more work further down the road because you have effectively, albeit inadvertently, involved yourself in managing phreeqpy, and all the hard work required to make it interface with phreeqc, which is not your job.&lt;br /&gt;
#::&amp;gt; Indeed, do not rule out the possibility that it will probably be much less painful to make a single wrapper _dll2 file, and have &#039;&#039;&#039;your&#039;&#039;&#039; own module in &#039;&#039;&#039;your&#039;&#039;&#039; own repository import whatever is needed from the original &#039;&#039;&#039;unedited&#039;&#039;&#039; _dll file and extend its function by also importing &#039;&#039;&#039;your&#039;&#039;&#039; _dll2 file.&lt;br /&gt;
#::&amp;gt; This segregation of &#039;&#039;&#039;your&#039;&#039;&#039; and &#039;&#039;&#039;their unedited&#039;&#039;&#039; code makes life way easier since you effectively only have to deal with &#039;&#039;&#039;your&#039;&#039;&#039; own code.&lt;br /&gt;
#*As a maxim, you do not ever want to add a file to a repository that you did not create.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT think once when having to modify someone else&#039;s code.&#039;&#039;&#039;&lt;br /&gt;
#*The previous rule does not consider the case when you have no choice but to modify someone else&#039;s code in order to make it work. This might happen when you are trying to integrate their software with other pieces of software, and a mere wrapper function will not suffice. By the way, side tracking a little, do not use the horrible shortcut of writing code to convert a .py file to .txt file, edit it like a text file before converting it back to a .py file and importing it. Do not forget wrapper functions exist for a reason. Moreover, when importing user-defined variables into your program, please do not format it as a text file and execute it like a .py file. It makes future integration and extension an absolute nightmare. Do not forget the literal eval function exists too.&lt;br /&gt;
#*Moving on, what you can do here is:&lt;br /&gt;
#::&amp;gt; Create a new repository separate from your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Branch the (target) person&#039;s project into your new repository. The term for such a &amp;quot;cross-repository&amp;quot; branch is fork.&lt;br /&gt;
#::&amp;gt; Inside your new repository, make a &#039;&#039;&#039;new branch&#039;&#039;&#039; where you make your modifications to their code as git commits with a merge request back into the ```main``` (of your new repository) at the end.&lt;br /&gt;
#::&amp;gt; If you are in the mood, you can even make a ```pull request``` back to the (target) person&#039;s project branch with your new code.&lt;br /&gt;
#::&amp;gt; But considering your own needs first, you can then add this &#039;&#039;&#039;new branch&#039;&#039;&#039; as a submodule in your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Again, do not forget that untangling other people&#039;s code is a horrible process, so you want to keep yours and their code as separate as possible.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include autogenerated files in your git repository.&#039;&#039;&#039;&lt;br /&gt;
#*Do not forget that autogenerated files, e.g., .o and .d files, will change when you recompile them even if their source files have not.&lt;br /&gt;
#*Instead, add the compilation instructions to your README and leave that to the user. Again, do not forget ```make``` files exist.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to test your code on a workstation.&#039;&#039;&#039;&lt;br /&gt;
#*It is not a matter of making sure your code runs on a specific workstation, but to remember that the end user will have a different machine with a different setup.&lt;br /&gt;
#*For example, your code may require a compiler GLIBC &amp;gt;= 2.29 that in turn requires Ubuntu &amp;gt;=20.04. A quick check will reveal, as of August 2022, that most machines are running an older version.&lt;br /&gt;
#*Therefore, do not forget to include a detailed list of instructions and system requirements when asking someone else to review your code.&lt;br /&gt;
#*You do not want your reviewer (and therefore you) to spend ages just to debug software requirement related errors.&lt;br /&gt;
#*As such, do not miss an opportunity to test your code on a &#039;fresh&#039; machine. It may be helpful to even record the system specifications when your code runs successfully to aid with that.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT be afraid to clarify git related concepts as early as possible.&#039;&#039;&#039;&lt;br /&gt;
#*Especially when it is your first time using Git.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to share your mistakes and helpful pointers with your colleagues.&#039;&#039;&#039;&lt;br /&gt;
#*We certainly do not wish to entertain the situation of multiple people making the same mistakes with the same reviewer.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do not&amp;quot; counter: 37&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1026</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1026"/>
		<updated>2022-08-25T14:14:39Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, do not disregard at your own convenience!&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Do NOT treat Git repositories like Google Drive&#039;&#039;&#039;.&lt;br /&gt;
#*Git repositories do not exist for you to backup all your files (e.g., cache, output and log files).&lt;br /&gt;
#*Do not be trigger happy with ```git add --all```.&lt;br /&gt;
#*Do not add whole directories.&lt;br /&gt;
#*Maintain a minimalistic mentality, i.e., carefully consider what files are important with the focus on successfully allowing the user to run your code.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include .pyc files, the entire __pycache__ folder and .DS_Store files.&#039;&#039;&#039;&lt;br /&gt;
#*Basically, you have been warned.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT ignore .gitignore.&#039;&#039;&#039;&lt;br /&gt;
#*They do not exist for no reason, create one to satisfy the above rules.&lt;br /&gt;
#*Visit https://git-scm.com/docs/gitignore for more information on formatting one.&lt;br /&gt;
#*Do not skip the following example:&lt;br /&gt;
#::&amp;gt; Sometimes, you might want to code using an IDE on your personal computer, git push and then git pull onto a workstation to run the code. &lt;br /&gt;
#::&amp;gt; As expected, you run into an error, nano into the file with the error and make the necessary changes.&lt;br /&gt;
#::&amp;gt; The code now works and you happily git push from the workstation, with all your output and cached folders.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT send a merge request with over 453 changed files - this is impossible to review!&#039;&#039;&#039;&lt;br /&gt;
#*Do not operate with the mentality of only submitting completed working code.&lt;br /&gt;
#*Do not forget that little and often with code review is better than the former.&lt;br /&gt;
#*Besides the mundane rationale of catching your mistakes and getting feedback quicker rather than letting than accumulate, it allows the reviewer to better track and follow your changes.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget the concept and importance of source control.&#039;&#039;&#039;&lt;br /&gt;
#*This is a big one. Basically, when you are coding as a team, or if your work is derived from another user, or needs to be passed on to future users, you must consider code maintenance and management.&lt;br /&gt;
#*For example, as much as possible, do not explicitly include other people&#039;s code in your own repository, because when they update their code, you do not want to repeat the cloning or downloading process again, or have to sieve through all your and their code to find what has changed and needs to be updated. What you do want is to simply perform a ```git pull```. To that end, do not forget git submodules exist for a very good reason. See https://git-scm.com/book/en/v2/Git-Tools-Submodules.&lt;br /&gt;
#*Along those lines, you also do not want to edit someone else&#039;s code as much as possible.&lt;br /&gt;
#::&amp;gt; For example, say you import the python package phreeqpy that serves as a wrapper for phreeqc, which is a piece of software written in C that you wish to use.&lt;br /&gt;
#::&amp;gt; You quickly realise one of the files, ```phreeqpy_dll.py``` is causing errors, and needs to be modified to suit your needs.&lt;br /&gt;
#::&amp;gt; You might wonder &amp;quot;Wouldn&#039;t the easiest solution be to make a new repository for phreeqpy, replace the _dll file with a newly edited (by you) _dll2 file and adding it as a submodule (*gasps* something about explicitly including someone else&#039;s code)? Clearly, the _dll2 file contains everything required to perform the job!&amp;quot;&lt;br /&gt;
#::&amp;gt; However, what you do not realise is that making a new repository means having to deal with the compilation of phreeqc underneath it (which is the job of phreeqpy), which will result in more work further down the road because you have effectively, albeit inadvertently, involved yourself in managing phreeqpy, and all the hard work required to make it interface with phreeqc, which is not your job.&lt;br /&gt;
#::&amp;gt; Indeed, do not rule out the possibility that it will probably be much less painful to make a single wrapper _dll2 file, and have &#039;&#039;&#039;your&#039;&#039;&#039; own module in &#039;&#039;&#039;your&#039;&#039;&#039; own repository import whatever is needed from the original &#039;&#039;&#039;unedited&#039;&#039;&#039; _dll file and extend its function by also importing &#039;&#039;&#039;your&#039;&#039;&#039; _dll2 file.&lt;br /&gt;
#::&amp;gt; This segregation of &#039;&#039;&#039;your&#039;&#039;&#039; and &#039;&#039;&#039;their unedited&#039;&#039;&#039; code makes life way easier since you effectively only have to deal with &#039;&#039;&#039;your&#039;&#039;&#039; own code.&lt;br /&gt;
#*As a maxim, you do not ever want to add a file to a repository that you did not create.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT think once when having to modify someone else&#039;s code.&#039;&#039;&#039;&lt;br /&gt;
#*The previous rule does not consider the case when you have no choice but to modify someone else&#039;s code in order to make it work. This might happen when you are trying to integrate their software with other pieces of software, and a mere wrapper function will not suffice. By the way, side tracking a little, do not use the horrible shortcut of writing code to convert a .py file to .txt file, edit it like a text file before converting it back to a .py file and importing it. Do not forget wrapper functions exist for a reason. Moreover, when importing user-defined variables into your program, please do not format it as a text file and execute it like a .py file. It makes future integration and extension an absolute nightmare. Do not forget the literal eval function exists too.&lt;br /&gt;
#*Moving on, what you can do here is:&lt;br /&gt;
#::&amp;gt; Create a new repository separate from your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Branch the (target) person&#039;s project into your new repository. The term for such a &amp;quot;cross-repository&amp;quot; branch is fork.&lt;br /&gt;
#::&amp;gt; Inside your new repository, make a &#039;&#039;&#039;new branch&#039;&#039;&#039; where you make your modifications to their code as git commits with a merge request back into the ```main``` (of your new repository) at the end.&lt;br /&gt;
#::&amp;gt; If you are in the mood, you can even make a ```pull request``` back to the (target) person&#039;s project branch with your new code.&lt;br /&gt;
#::&amp;gt; But considering your own needs first, you can then add this &#039;&#039;&#039;new branch&#039;&#039;&#039; as a submodule in your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Again, do not forget that untangling other people&#039;s code is a horrible process, so you want to keep yours and their code as separate as possible.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include autogenerated files in your git repository.&#039;&#039;&#039;&lt;br /&gt;
#*Do not forget that autogenerated files, e.g., .o and .d files, will change when you recompile them even if their source files have not.&lt;br /&gt;
#*Instead, add the compilation instructions to your README and leave that to the user. Again, do not forget ```make``` files exist.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to test your code on a workstation.&#039;&#039;&#039;&lt;br /&gt;
#*It is not a matter of making sure your code runs on a specific workstation, but to remember that the end user will have a different machine with a different setup.&lt;br /&gt;
#*For example, your code may require a compiler GLIBC &amp;gt;= 2.29 that in turn requires Ubuntu &amp;gt;=20.04. A quick check will reveal, as of August 2022, that most machines are running an older version.&lt;br /&gt;
#*Therefore, do not forget to include a detailed list of instructions and system requirements when asking someone else to review your code.&lt;br /&gt;
#*You do not want your reviewer (and therefore you) to spend ages just to debug software requirement related errors.&lt;br /&gt;
#*As such, do not miss an opportunity to test your code on a &#039;fresh&#039; machine. It may be helpful to even record the system specifications when your code runs successfully to aid with that.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT be afraid to clarify git related concepts as early as possible.&#039;&#039;&#039;&lt;br /&gt;
#*Especially when it is your first time using Git.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to share your mistakes and helpful pointers with your colleagues.&#039;&#039;&#039;&lt;br /&gt;
#*We certainly do not wish to entertain the situation of multiple people making the same mistakes with the same reviewer.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do not&amp;quot; counter: 37&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1025</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1025"/>
		<updated>2022-08-25T14:14:27Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, do not disregard at your own convenience!&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Do NOT treat Git repositories like Google Drive&#039;&#039;&#039;.&lt;br /&gt;
#*Git repositories do not exist for you to backup all your files (e.g., cache, output and log files).&lt;br /&gt;
#*Do not be trigger happy with ```git add --all```.&lt;br /&gt;
#*Do not add whole directories.&lt;br /&gt;
#*Maintain a minimalistic mentality, i.e., carefully consider what files are important with the focus on successfully allowing the user to run your code.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include .pyc files, the entire __pycache__ folder and .DS_Store files.&#039;&#039;&#039;&lt;br /&gt;
#*Basically, you have been warned.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT ignore .gitignore.&#039;&#039;&#039;&lt;br /&gt;
#*They do not exist for no reason, create one to satisfy the above rules.&lt;br /&gt;
#*Visit https://git-scm.com/docs/gitignore for more information on formatting one.&lt;br /&gt;
#*Do not skip the following example:&lt;br /&gt;
#::&amp;gt; Sometimes, you might want to code using an IDE on your personal computer, git push and then git pull onto a workstation to run the code. &lt;br /&gt;
#::&amp;gt; As expected, you run into an error, nano into the file with the error and make the necessary changes.&lt;br /&gt;
#::&amp;gt; The code now works and you happily git push from the workstation, with all your output and cached folders.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT send a merge request with over 453 changed files - this is impossible to review!&#039;&#039;&#039;&lt;br /&gt;
#*Do not operate with the mentality of only submitting completed working code.&lt;br /&gt;
#*Do not forget that little and often with code review is better than the former.&lt;br /&gt;
#*Besides the mundane rationale of catching your mistakes and getting feedback quicker rather than letting than accumulate, it allows the reviewer to better track and follow your changes.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget the concept and importance of source control.&#039;&#039;&#039;&lt;br /&gt;
#*This is a big one. Basically, when you are coding as a team, or if your work is derived from another user, or needs to be passed on to future users, you must consider code maintenance and management.&lt;br /&gt;
#*For example, as much as possible, do not explicitly include other people&#039;s code in your own repository, because when they update their code, you do not want to repeat the cloning or downloading process again, or have to sieve through all your and their code to find what has changed and needs to be updated. What you do want is to simply perform a ```git pull```. To that end, do not forget git submodules exist for a very good reason. See https://git-scm.com/book/en/v2/Git-Tools-Submodules.&lt;br /&gt;
#*Along those lines, you also do not want to edit someone else&#039;s code as much as possible.&lt;br /&gt;
#::&amp;gt; For example, say you import the python package phreeqpy that serves as a wrapper for phreeqc, which is a piece of software written in C that you wish to use.&lt;br /&gt;
#::&amp;gt; You quickly realise one of the files, ```phreeqpy_dll.py``` is causing errors, and needs to be modified to suit your needs.&lt;br /&gt;
#::&amp;gt; You might wonder &amp;quot;Wouldn&#039;t the easiest solution be to make a new repository for phreeqpy, replace the _dll file with a newly edited (by you) _dll2 file and adding it as a submodule (*gasps* something about explicitly including someone else&#039;s code)? Clearly, the _dll2 file contains everything required to perform the job!&amp;quot;&lt;br /&gt;
#::&amp;gt; However, what you do not realise is that making a new repository means having to deal with the compilation of phreeqc underneath it (which is the job of phreeqpy), which will result in more work further down the road because you have effectively, albeit inadvertently, involved yourself in managing phreeqpy, and all the hard work required to make it interface with phreeqc, which is not your job.&lt;br /&gt;
#::&amp;gt; Indeed, do not rule out the possibility that it will probably be much less painful to make a single wrapper _dll2 file, and have &#039;&#039;&#039;your&#039;&#039;&#039; own module in &#039;&#039;&#039;your&#039;&#039;&#039; own repository import whatever is needed from the original &#039;&#039;&#039;unedited&#039;&#039;&#039; _dll file and extend its function by also importing &#039;&#039;&#039;your&#039;&#039;&#039; _dll2 file.&lt;br /&gt;
#::&amp;gt; This segregation of &#039;&#039;&#039;your&#039;&#039;&#039; and &#039;&#039;&#039;their unedited&#039;&#039;&#039; code makes life way easier since you effectively only have to deal with &#039;&#039;&#039;your&#039;&#039;&#039; own code.&lt;br /&gt;
#*As a maxim, you do not ever want to add a file to a repository that you did not create.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT think once when having to modify someone else&#039;s code.&#039;&#039;&#039;&lt;br /&gt;
#*The previous rule does not consider the case when you have no choice but to modify someone else&#039;s code in order to make it work. This might happen when you are trying to integrate their software with other pieces of software, and a mere wrapper function will not suffice. By the way, side tracking a little, do not use the horrible shortcut of writing code to convert a .py file to .txt file, edit it like a text file before converting it back to a .py file and importing it. Do not forget wrapper functions exist for a reason. Moreover, when importing user-defined variables into your program, please do not format it as a text file and execute it like a .py file. It makes future integration and extension an absolute nightmare. Do not forget the literal eval function exists too.&lt;br /&gt;
#*Moving on, what you can do here is:&lt;br /&gt;
#::&amp;gt; Create a new repository separate from your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Branch the (target) person&#039;s project into your new repository. The term for such a &amp;quot;cross-repository&amp;quot; branch is fork.&lt;br /&gt;
#::&amp;gt; Inside your new repository, make a &#039;&#039;&#039;new branch&#039;&#039;&#039; where you make your modifications to their code as git commits with a merge request back into the ```main``` (of your new repository) at the end.&lt;br /&gt;
#::&amp;gt; If you are in the mood, you can even make a ```pull request``` back to the (target) person&#039;s project branch with your new code.&lt;br /&gt;
#::&amp;gt; But considering your own needs first, you can then add this &#039;&#039;&#039;new branch&#039;&#039;&#039; as a submodule in your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Again, do not forget that untangling other people&#039;s code is a horrible process, so you want to keep yours and their code as separate as possible.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT included autogenerated files in your git repository.&#039;&#039;&#039;&lt;br /&gt;
#*Do not forget that autogenerated files, e.g., .o and .d files, will change when you recompile them even if their source files have not.&lt;br /&gt;
#*Instead, add the compilation instructions to your README and leave that to the user. Again, do not forget ```make``` files exist.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to test your code on a workstation.&#039;&#039;&#039;&lt;br /&gt;
#*It is not a matter of making sure your code runs on a specific workstation, but to remember that the end user will have a different machine with a different setup.&lt;br /&gt;
#*For example, your code may require a compiler GLIBC &amp;gt;= 2.29 that in turn requires Ubuntu &amp;gt;=20.04. A quick check will reveal, as of August 2022, that most machines are running an older version.&lt;br /&gt;
#*Therefore, do not forget to include a detailed list of instructions and system requirements when asking someone else to review your code.&lt;br /&gt;
#*You do not want your reviewer (and therefore you) to spend ages just to debug software requirement related errors.&lt;br /&gt;
#*As such, do not miss an opportunity to test your code on a &#039;fresh&#039; machine. It may be helpful to even record the system specifications when your code runs successfully to aid with that.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT be afraid to clarify git related concepts as early as possible.&#039;&#039;&#039;&lt;br /&gt;
#*Especially when it is your first time using Git.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to share your mistakes and helpful pointers with your colleagues.&#039;&#039;&#039;&lt;br /&gt;
#*We certainly do not wish to entertain the situation of multiple people making the same mistakes with the same reviewer.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do not&amp;quot; counter: 37&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1024</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1024"/>
		<updated>2022-08-25T14:12:14Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, do not disregard at your own convenience!&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Do NOT treat Git repositories like Google Drive&#039;&#039;&#039;.&lt;br /&gt;
#*Git repositories do not exist for you to backup all your files (e.g., cache, output and log files).&lt;br /&gt;
#*Do not be trigger happy with ```git add --all```.&lt;br /&gt;
#*Do not add whole directories.&lt;br /&gt;
#*Maintain a minimalistic mentality, i.e., carefully consider what files are important with the focus on successfully allowing the user to run your code.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include .pyc files, the entire __pycache__ folder and .DS_Store files.&#039;&#039;&#039;&lt;br /&gt;
#*Basically, you have been warned.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT ignore .gitignore.&#039;&#039;&#039;&lt;br /&gt;
#*They do not exist for no reason, create one to satisfy the above rules.&lt;br /&gt;
#*Visit https://git-scm.com/docs/gitignore for more information on formatting one.&lt;br /&gt;
#*Do not skip the following example:&lt;br /&gt;
#::&amp;gt; Sometimes, you might want to code using an IDE on your personal computer, git push and then git pull onto a workstation to run the code. &lt;br /&gt;
#::&amp;gt; As expected, you run into an error, nano into the file with the error and make the necessary changes.&lt;br /&gt;
#::&amp;gt; The code now works and you happily git push from the workstation, with all your output and cached folders.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT send a merge request with over 453 changed files - this is impossible to review!&#039;&#039;&#039;&lt;br /&gt;
#*Do not operate with the mentality of only submitting completed working code.&lt;br /&gt;
#*Do not forget that little and often with code review is better than the former.&lt;br /&gt;
#*Besides the mundane rationale of catching your mistakes and getting feedback quicker rather than letting than accumulate, it allows the reviewer to better track and follow your changes.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget the concept and importance of source control.&#039;&#039;&#039;&lt;br /&gt;
#*This is a big one. Basically, when you are coding as a team, or if your work is derived from another user, or needs to be passed on to future users, you must consider code maintenance and management.&lt;br /&gt;
#*For example, as much as possible, do not explicitly include other people&#039;s code in your own repository, because when they update their code, you do not want to repeat the cloning or downloading process again, or have to sieve through all your and their code to find what has changed and needs to be updated. What you do want is to simply perform a ```git pull```. To that end, do not forget git submodules exist for a very good reason. See https://git-scm.com/book/en/v2/Git-Tools-Submodules.&lt;br /&gt;
#*Along those lines, you also do not want to edit someone else&#039;s code as much as possible.&lt;br /&gt;
#::&amp;gt; For example, say you import the python package phreeqpy that serves as a wrapper for phreeqc, which is a piece of software written in C that you wish to use.&lt;br /&gt;
#::&amp;gt; You quickly realise one of the files, ```phreeqpy_dll.py``` is causing errors, and needs to be modified to suit your needs.&lt;br /&gt;
#::&amp;gt; You might wonder &amp;quot;Wouldn&#039;t the easiest solution be to make a new repository for phreeqpy, replace the _dll file with a newly edited (by you) _dll2 file and adding it as a submodule (*gasps* something about explicitly including someone else&#039;s code)? Clearly, the _dll2 file contains everything required to perform the job!&amp;quot;&lt;br /&gt;
#::&amp;gt; However, what you do not realise is that making a new repository means having to deal with the compilation of phreeqc underneath it (which is the job of phreeqpy), which will result in more work further down the road because you have effectively, albeit inadvertently, involved yourself in managing phreeqpy, and all the hard work required to make it interface with phreeqc, which is not your job.&lt;br /&gt;
#::&amp;gt; Indeed, do not rule out the possibility that it will probably be much less painful to make a single wrapper _dll2 file, and have &#039;&#039;&#039;your&#039;&#039;&#039; own module in &#039;&#039;&#039;your&#039;&#039;&#039; own repository import whatever is needed from the original &#039;&#039;&#039;unedited&#039;&#039;&#039; _dll file and extend its function by also importing &#039;&#039;&#039;your&#039;&#039;&#039; _dll2 file.&lt;br /&gt;
#::&amp;gt; This segregation of &#039;&#039;&#039;your&#039;&#039;&#039; and &#039;&#039;&#039;their unedited&#039;&#039;&#039; code makes life way easier since you effectively only have to deal with &#039;&#039;&#039;your&#039;&#039;&#039; own code.&lt;br /&gt;
#*As a maxim, you do not ever want to add a file to a repository that you did not create.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT think once when having to modify someone else&#039;s code.&#039;&#039;&#039;&lt;br /&gt;
#*The previous rule does not consider the case when you have no choice but to modify someone else&#039;s code in order to make it work. This might happen when you are trying to integrate their software with other pieces of software, and a mere wrapper function will not suffice. By the way, side tracking a little, do not use the horrible shortcut of writing code to convert a .py file to .txt file, edit it like a text file before converting it back to a .py file and importing it. Do not forget wrapper functions exist for a reason. Moreover, when importing user-defined variables into your program, please do not format it as a text file and execute it like a .py file. It makes future integration and extension an absolute nightmare. Do not forget the literal eval function exists too.&lt;br /&gt;
#*Moving on, what you can do here is:&lt;br /&gt;
#::&amp;gt; Create a new repository separate from your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Branch the (target) person&#039;s project into your new repository. The term for such a &amp;quot;cross-repository&amp;quot; branch is ```fork```.&lt;br /&gt;
#::&amp;gt; Inside your new repository, make a &#039;&#039;&#039;new branch&#039;&#039;&#039; where you make your modifications to their code as git commits with a merge request back into the ```main``` (of your new repository) at the end.&lt;br /&gt;
#::&amp;gt; If you are in the mood, you can even make a ```pull request``` back to the (target) person&#039;s project branch with your new code.&lt;br /&gt;
#::&amp;gt; But considering your own needs first, you can then add this &#039;&#039;&#039;new branch&#039;&#039;&#039; as a submodule in your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Again, do not forget that untangling other people&#039;s code is a horrible process, so you want to keep yours and their code as separate as possible.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT included autogenerated files in your git repository.&#039;&#039;&#039;&lt;br /&gt;
#*Do not forget that autogenerated files, e.g., .o and .d files, will change when you recompile them even if their source files have not.&lt;br /&gt;
#*Instead, add the compilation instructions to your README and leave that to the user. Again, do not forget ```make``` files exist.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to test your code on a workstation.&#039;&#039;&#039;&lt;br /&gt;
#*It is not a matter of making sure your code runs on a specific workstation, but to remember that the end user will have a different machine with a different setup.&lt;br /&gt;
#*For example, your code may require a compiler GLIBC &amp;gt;= 2.29 that in turn requires Ubuntu &amp;gt;=20.04. A quick check will reveal, as of August 2022, that most machines are running an older version.&lt;br /&gt;
#*Therefore, do not forget to include a detailed list of instructions and system requirements when asking someone else to review your code.&lt;br /&gt;
#*You do not want your reviewer (and therefore you) to spend ages just to debug software requirement related errors.&lt;br /&gt;
#*As such, do not miss an opportunity to test your code on a &#039;fresh&#039; machine. It may be helpful to even record the system specifications when your code runs successfully to aid with that.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT be afraid to clarify git related concepts as early as possible.&#039;&#039;&#039;&lt;br /&gt;
#*Especially when it is your first time using Git.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to share your mistakes and helpful pointers with your colleagues.&#039;&#039;&#039;&lt;br /&gt;
#*We certainly do not wish to entertain the situation of multiple people making the same mistakes with the same reviewer.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do not&amp;quot; counter: 37&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1023</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1023"/>
		<updated>2022-08-25T14:12:03Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, do not disregard at your own convenience!&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Do NOT treat Git repositories like Google Drive&#039;&#039;&#039;.&lt;br /&gt;
#*Git repositories do not exist for you to backup all your files (e.g., cache, output and log files).&lt;br /&gt;
#*Do not be trigger happy with ```git add --all```.&lt;br /&gt;
#*Do not add whole directories.&lt;br /&gt;
#*Maintain a minimalistic mentality, i.e., carefully consider what files are important with the focus on successfully allowing the user to run your code.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include .pyc files, the entire __pycache__ folder and .DS_Store files.&#039;&#039;&#039;&lt;br /&gt;
#*Basically, you have been warned.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT ignore .gitignore.&#039;&#039;&#039;&lt;br /&gt;
#*They do not exist for no reason, create one to satisfy the above rules.&lt;br /&gt;
#*Visit https://git-scm.com/docs/gitignore for more information on formatting one.&lt;br /&gt;
#*Do not skip the following example:&lt;br /&gt;
#::&amp;gt; Sometimes, you might want to code using an IDE on your personal computer, git push and then git pull onto a workstation to run the code. &lt;br /&gt;
#::&amp;gt; As expected, you run into an error, nano into the file with the error and make the necessary changes.&lt;br /&gt;
#::&amp;gt; The code now works and you happily git push from the workstation, with all your output and cached folders.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT send a merge request with over 453 changed files - this is impossible to review!&#039;&#039;&#039;&lt;br /&gt;
#*Do not operate with the mentality of only submitting completed working code.&lt;br /&gt;
#*Do not forget that little and often with code review is better than the former.&lt;br /&gt;
#*Besides the mundane rationale of catching your mistakes and getting feedback quicker rather than letting than accumulate, it allows the reviewer to better track and follow your changes.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget the concept and importance of source control.&#039;&#039;&#039;&lt;br /&gt;
#*This is a big one. Basically, when you are coding as a team, or if your work is derived from another user, or needs to be passed on to future users, you must consider code maintenance and management.&lt;br /&gt;
#*For example, as much as possible, do not explicitly include other people&#039;s code in your own repository, because when they update their code, you do not want to repeat the cloning or downloading process again, or have to sieve through all your and their code to find what has changed and needs to be updated. What you do want is to simply perform a ```git pull```. To that end, do not forget git submodules exist for a very good reason. See https://git-scm.com/book/en/v2/Git-Tools-Submodules.&lt;br /&gt;
#*Along those lines, you also do not want to edit someone else&#039;s code as much as possible.&lt;br /&gt;
#::&amp;gt; For example, say you import the python package phreeqpy that serves as a wrapper for phreeqc, which is a piece of software written in C that you wish to use.&lt;br /&gt;
#::&amp;gt; You quickly realise one of the files, ```phreeqpy_dll.py``` is causing errors, and needs to be modified to suit your needs.&lt;br /&gt;
#::&amp;gt; You might wonder &amp;quot;Wouldn&#039;t the easiest solution be to make a new repository for phreeqpy, replace the _dll file with a newly edited (by you) _dll2 file and adding it as a submodule (*gasps* something about explicitly including someone else&#039;s code)? Clearly, the _dll2 file contains everything required to perform the job!&amp;quot;&lt;br /&gt;
#::&amp;gt; However, what you do not realise is that making a new repository means having to deal with the compilation of phreeqc underneath it (which is the job of phreeqpy), which will result in more work further down the road because you have effectively, albeit inadvertently, involved yourself in managing phreeqpy, and all the hard work required to make it interface with phreeqc, which is not your job.&lt;br /&gt;
#::&amp;gt; Indeed, do not rule out the possibility that it will probably be much less painful to make a single wrapper _dll2 file, and have &#039;&#039;&#039;your&#039;&#039;&#039; own module in &#039;&#039;&#039;your&#039;&#039;&#039; own repository import whatever is needed from the original &#039;&#039;&#039;unedited&#039;&#039;&#039; _dll file and extend its function by also importing &#039;&#039;&#039;your&#039;&#039;&#039; _dll2 file.&lt;br /&gt;
#::&amp;gt; This segregation of &#039;&#039;&#039;your&#039;&#039;&#039; and &#039;&#039;&#039;their unedited&#039;&#039;&#039; code makes life way easier since you effectively only have to deal with &#039;&#039;&#039;your&#039;&#039;&#039; own code.&lt;br /&gt;
#*As a maxim, you do not ever want to add a file to a repository that you did not create.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Do NOT think once when having to modify someone else&#039;s code.&#039;&#039;&#039;&lt;br /&gt;
#*The previous rule does not consider the case when you have no choice but to modify someone else&#039;s code in order to make it work. This might happen when you are trying to integrate their software with other pieces of software, and a mere wrapper function will not suffice. By the way, side tracking a little, do not use the horrible shortcut of writing code to convert a .py file to .txt file, edit it like a text file before converting it back to a .py file and importing it. Do not forget wrapper functions exist for a reason. Moreover, when importing user-defined variables into your program, please do not format it as a text file and execute it like a .py file. It makes future integration and extension an absolute nightmare. Do not forget the literal eval function exists too.&lt;br /&gt;
#*Moving on, what you can do here is:&lt;br /&gt;
#::&amp;gt; Create a new repository separate from your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Branch the (target) person&#039;s project into your new repository. The term for such a &amp;quot;cross-repository&amp;quot; branch is ```fork```.&lt;br /&gt;
#::&amp;gt; Inside your new repository, make a &#039;&#039;&#039;new branch&#039;&#039;&#039; where you make your modifications to their code as git commits with a merge request back into the ```main``` (of your new repository) at the end.&lt;br /&gt;
#::&amp;gt; If you are in the mood, you can even make a ```pull request``` back to the (target) person&#039;s project branch with your new code.&lt;br /&gt;
#::&amp;gt; But considering your own needs first, you can then add this &#039;&#039;&#039;new branch&#039;&#039;&#039; as a submodule in your &#039;&#039;&#039;present repository&#039;&#039;&#039;.&lt;br /&gt;
#::&amp;gt; Again, do not forget that untangling other people&#039;s code is a horrible process, so you want to keep yours and their code as separate as possible.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT included autogenerated files in your git repository.&#039;&#039;&#039;&lt;br /&gt;
#*Do not forget that autogenerated files, e.g., .o and .d files, will change when you recompile them even if their source files have not.&lt;br /&gt;
#*Instead, add the compilation instructions to your README and leave that to the user. Again, do not forget ```make``` files exist.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to test your code on a workstation.&#039;&#039;&#039;&lt;br /&gt;
#*It is not a matter of making sure your code runs on a specific workstation, but to remember that the end user will have a different machine with a different setup.&lt;br /&gt;
#*For example, your code may require a compiler GLIBC &amp;gt;= 2.29 that in turn requires Ubuntu &amp;gt;=20.04. A quick check will reveal, as of August 2022, that most machines are running an older version.&lt;br /&gt;
#*Therefore, do not forget to include a detailed list of instructions and system requirements when asking someone else to review your code.&lt;br /&gt;
#*You do not want your reviewer (and therefore you) to spend ages just to debug software requirement related errors.&lt;br /&gt;
#*As such, do not miss an opportunity to test your code on a &#039;fresh&#039; machine. It may be helpful to even record the system specifications when your code runs successfully to aid with that.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT be afraid to clarify git related concepts as early as possible.&#039;&#039;&#039;&lt;br /&gt;
#*Especially when it is your first time using Git.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT forget to share your mistakes and helpful pointers with your colleagues.&#039;&#039;&#039;&lt;br /&gt;
#*We certainly do not wish to entertain the situation of multiple people making the same mistakes with the same reviewer.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do not&amp;quot; counter: 37&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1022</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1022"/>
		<updated>2022-08-25T13:11:00Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, do not disregard at your own risk!&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Do NOT treat Git repositories like Google Drive&#039;&#039;&#039;.&lt;br /&gt;
#*Git repositories do not exist to for you to backup all your files (e.g., cache, output and log files).&lt;br /&gt;
#*Do not be trigger happy with ```git add --all```.&lt;br /&gt;
#*In other words, do not add whole directories.&lt;br /&gt;
#*Maintain a minimalistic mentality, i.e., carefully consider what files are important with the focus on successfully allowing the user to run your code.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT include .pyc files, the entire __pycache__ folder and .DS_Store files.&#039;&#039;&#039;&lt;br /&gt;
#*Basically, you have been warned.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT ignore .gitignore.&#039;&#039;&#039;&lt;br /&gt;
#*They do not exist for no reason, create one to satisfy the above rules.&lt;br /&gt;
#*Visit https://git-scm.com/docs/gitignore for more information on formatting one.&lt;br /&gt;
#*Do not skip the following example:&lt;br /&gt;
#::&amp;gt; Sometimes, you might want to code using an IDE on your personal computer, git push and then git pull onto a workstation to run the code. &lt;br /&gt;
#::&amp;gt; As expected, you run into an error, nano into the file with the error and make the necessary changes.&lt;br /&gt;
#::&amp;gt; The code now works and you happily git push from the workstation, with all your output and cached folders.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT send a merge request with over 453 changed files - this is impossible to review!&#039;&#039;&#039;&lt;br /&gt;
#*Do not operate with the mentality of only submitting completed working code.&lt;br /&gt;
#*Do not forget that little and often with code review is better than the former.&lt;br /&gt;
#*Besides the mundane rationale of catching your mistakes and getting feedback quicker rather than letting than accumulate, it allows the reviewer to better track and follow your changes.&lt;br /&gt;
#&#039;&#039;&#039;Do NOT foster a habit &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do not&amp;quot; counter: 12+&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1021</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1021"/>
		<updated>2022-08-25T12:47:47Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, disregard at your own risk!&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Do NOT treat Git repositories like Google Drive&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1020</id>
		<title>The Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=The_Ten_Git-mmandments&amp;diff=1020"/>
		<updated>2022-08-25T12:46:29Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: Created page with &amp;quot;Herein lies precious Git-related wisdom, disregard at your own risk!  * Do NOT treat Git repositories like your Google Drive.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies precious Git-related wisdom, disregard at your own risk!&lt;br /&gt;
&lt;br /&gt;
* Do NOT treat Git repositories like your Google Drive.&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=Main_Page&amp;diff=1019</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=Main_Page&amp;diff=1019"/>
		<updated>2022-08-25T12:44:35Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
 # _________  # ___   ___     # ______      # ___ __ __     #  # _______     # ______       # ______      # __  __      # ______    #&lt;br /&gt;
 #/________/\ #/__/\ /__/\    #/_____/\     #/__//_//_/\    #  #/______/\    #/_____/\      #/_____/\     #/_/\/_/\     #/_____/\   #&lt;br /&gt;
 #\__.::.__\/ #\::\ \\  \ \   #\:::_ \ \    #\::\| \| \ \   #  #\::::__\/__  #\:::_ \ \     #\:::_ \ \    #\:\ \:\ \    #\:::_ \ \  #&lt;br /&gt;
 #   \::\ \   # \::\/_\ .\ \  # \:\ \ \ \   # \:.      \ \  #  # \:\ /____/\ # \:(_) ) )_   # \:\ \ \ \   # \:\ \:\ \   # \:(_) \ \ #&lt;br /&gt;
 #    \::\ \  #  \:: ___::\ \ #  \:\ \ \ \  #  \:.\-/\  \ \ #  #  \:\\_  _\/ #  \: __ `\ \  #  \:\ \ \ \  #  \:\ \:\ \  #  \: ___\/ #&lt;br /&gt;
 #     \::\ \ #   \: \ \\::\ \#   \:\_\ \ \ #   \. \  \  \ \#  #   \:\_\ \ \ #   \ \ `\ \ \ #   \:\_\ \ \ #   \:\_\:\ \ #   \ \ \   #&lt;br /&gt;
 #      \__\/ #    \__\/ \::\/#    \_____\/ #    \__\/ \__\/#  #    \_____\/ #    \_\/ \_\/ #    \_____\/ #    \_____\/ #    \_\/   #&lt;br /&gt;
 #            #               #             #               #  #             #              #             #             #           #&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hello, Guten Abend, and Bienvenue to the new Thom Group Wiki. (Apparently evenings are good times to read the Wiki.)&lt;br /&gt;
&lt;br /&gt;
In this Wiki you can find various pieces of useful information, such as when group meetings are, who is going to bring cake, how to run a particular calculation or perform a certain computer trick, who&#039;s using which computer in the group, and so on. You can also see how fun we are as a group by looking at our various photos.&lt;br /&gt;
&lt;br /&gt;
=Group Calendar=&lt;br /&gt;
https://calendar.google.com/calendar/render?mode=day&amp;amp;date=20160601T153539#main_7%7Cday-1+23745+23745+23745&lt;br /&gt;
&lt;br /&gt;
{{Special:IframePage}}&lt;br /&gt;
&lt;br /&gt;
=Group Meetings=&lt;br /&gt;
&lt;br /&gt;
Past Group Meetings [[Past Group Meetings|here]].&lt;br /&gt;
&lt;br /&gt;
===Summer 2022===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 20ex;&amp;quot; |&#039;&#039;&#039;Date&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Talk&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Cake&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|25th July || WATOC Review &amp;amp; IPLU Discussion ||  &lt;br /&gt;
|-&lt;br /&gt;
|8th August || Brian || Andreea&lt;br /&gt;
|-&lt;br /&gt;
|30th August || Nick || Daniel&lt;br /&gt;
|-&lt;br /&gt;
|12th September|| Interns || Alex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Journal Club=&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 20ex;&amp;quot; |&#039;&#039;&#039;Date&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Contributor&#039;&#039;&#039; || style=&amp;quot;width: 36ex;&amp;quot; | &#039;&#039;&#039;Paper&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 8 Oct 2021 || Kripa || [https://arxiv.org/pdf/1712.01815.pdf/ Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm]&lt;br /&gt;
|-&lt;br /&gt;
| 5 Nov 2021 || Brian || [https://pubs.acs.org/doi/10.1021/acs.jpca.1c05962 Neat, Simple and Wrong: Debunking Electrostatic Fallacies Regarding Noncovalent Interactions]&lt;br /&gt;
|-&lt;br /&gt;
| 6 Dec 2021 || Kripa  || [https://pubs.acs.org/doi/10.1021/acs.jpclett.1c03214 Quantum Algorithm for Full Configuration Interaction Calculations without Controlled Time Evolutions]&lt;br /&gt;
|-&lt;br /&gt;
| 11 Feb 2022 || Nick  || [https://www.nature.com/articles/s41598-021-00053-8 Mapping the NFT revolution: market trends, trade networks, and visual features]&lt;br /&gt;
|-&lt;br /&gt;
| 11 Mar 2022 || Andreea || [https://link.springer.com/article/10.1007/BF02650179 Simulating physics with computers]&lt;br /&gt;
|-&lt;br /&gt;
| 27 Apr 2022 || Fabio || [https://arxiv.org/pdf/1912.06462.pdf Rethinking Superdeterminism]&lt;br /&gt;
|-&lt;br /&gt;
| 25 May 2022 || Kripa || [https://www.frontiersin.org/articles/10.3389/fnhum.2014.00068/full#h1 The experience of mathematical beauty and its neural correlates]&lt;br /&gt;
|-&lt;br /&gt;
| 17 Aug 2022 || Nick || [https://onlinelibrary.wiley.com/doi/10.1002/nadc.20224120702 Scientists must resist cancel culture] [https://pubs.acs.org/doi/10.1021/acs.jpclett.2c02242 Words Matter: On the debate over free speech, inclusivity, and academic excellence]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Summer &#039;Interns&#039;=&lt;br /&gt;
Past Summer Interns [[Past Summer Interns|here]].&lt;br /&gt;
==2022==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 18ex;&amp;quot; |&#039;&#039;&#039;Name&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Dates&#039;&#039;&#039; || style=&amp;quot;width: 25ex;&amp;quot; | &#039;&#039;&#039;Project&#039;&#039;&#039;|| style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Machine&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Douglas Russell  || - || IPLU || hypatia&lt;br /&gt;
|-&lt;br /&gt;
| Theo Hatcher || - || IPLU || chucksty&lt;br /&gt;
|-&lt;br /&gt;
| Motoki Yamano  || - || IPLU || hypatia&lt;br /&gt;
|-&lt;br /&gt;
| King Lam  || - || IPLU || chucksty&lt;br /&gt;
|-&lt;br /&gt;
| Juan Fernandez Pottecher  || - || Strong Correlation || hylas&lt;br /&gt;
|-&lt;br /&gt;
| Max Howe  || - || Singlet Fission || moonraker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= [[Group_List | Group List]] =&lt;br /&gt;
The full timeline of all current and past group members is available [https://wikis.ch.cam.ac.uk/thom/wiki/index.php/Group_List here].   NB autogenerated by `thom-fs-common/old-ifs-thom/cbh31/groupwiki`&lt;br /&gt;
&lt;br /&gt;
An up to date list of group members is also available [http://www.ch.cam.ac.uk/group/thom here].&lt;br /&gt;
&lt;br /&gt;
[[File:AJWT_group_8_21_taken_by_Nathan Pitt_©University_of_Cambridge_1274_M.jpg|1000px|thumb|center|Thom Group photo - taken by Nathan Pitt, ©University of Cambridge, August 2021]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
Front row, left to right: Anna Bui, Brian Zhao, Bang C. Huynh, Arta Safari, Maria-Andreea Filip&amp;lt;br&amp;gt;&lt;br /&gt;
Back row, right to left: David Izuogu, Kripa Panchagnula, Zian Wang, Dr Alex Thom&amp;lt;br&amp;gt;&lt;br /&gt;
Not in picture: Fabio Albertani, Nicholas Lee, Tarik Benyahia, César Feniou, Benjamin Mokhtar&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:AJWT_group_photo_2_5_19-4926_taken_by_Nathan_Pitt_University_of_Cambridge-tighter.jpg|500px|thumb|center|Thom Group photo - taken by Nathan Pitt, ©University of Cambridge, May 2019]]&lt;br /&gt;
[[File:AJWT_Group_photo-5470_taken_by_Nathan_Pitt_University_of_Cambridge.jpg|500px|thumb|center|Thom Group photo - taken by Nathan Pitt, ©University of Cambridge, November 2017]]&lt;br /&gt;
&lt;br /&gt;
= [[Computer_and_Storage_List | Computing Resources]] =&lt;br /&gt;
- Group computers available.&lt;br /&gt;
&lt;br /&gt;
- Clusters available.&lt;br /&gt;
&lt;br /&gt;
- Storage available.&lt;br /&gt;
&lt;br /&gt;
= Computing Setup Guide =&lt;br /&gt;
Anaconda takes up a lot of space on /home so it&#039;s worth running&lt;br /&gt;
&lt;br /&gt;
   mv ~/.conda /scratch/$USER/.conda&lt;br /&gt;
   ln -s /scratch/$USER/.conda ~/.conda&lt;br /&gt;
&lt;br /&gt;
= [[Introduction | Introduction to basic shell commands]] = &lt;br /&gt;
- There are a number of tutorials available which document basic operations that are useful including:&lt;br /&gt;
&lt;br /&gt;
# General bash commands&lt;br /&gt;
# Setting up cygwin&lt;br /&gt;
# Setting up [https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key ssh keys] and general bash commands what are helpful&lt;br /&gt;
# Setting up ssh config files&lt;br /&gt;
# using [[GIT]]&lt;br /&gt;
# Useful cerebro queue commands&lt;br /&gt;
# Some [[vim]] tidbits&lt;br /&gt;
&lt;br /&gt;
Currently undergoing construction.&lt;br /&gt;
&lt;br /&gt;
= How to connect to department machines =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;On Mac/WSL:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Check you have an Admitto account and collect your password from https://www.ch.cam.ac.uk/computing/admitto-service&lt;br /&gt;
# In the terminal run the command &#039;&#039;ssh -X crsid@citadel.ch.cam.ac.uk&#039;&#039;&lt;br /&gt;
# When prompted input your Admitto username (crsid) and password &lt;br /&gt;
# Once this has worked run the command &#039;&#039;ssh -X crsid@machinename&#039;&#039; in the terminal to log into a particular machine&lt;br /&gt;
&lt;br /&gt;
Set up logging in without a password:&lt;br /&gt;
&lt;br /&gt;
# Generate an ssh key by running the command &#039;&#039;ssh-keygen&#039;&#039; in the terminal, as described in detail in the section &amp;quot;Introduction to basic shell commands&amp;quot;&lt;br /&gt;
# Use &#039;&#039;cd ~/.ssh&#039;&#039; to navigate to the directory holding the keys, and copy the text from the file &amp;quot;id_rsa.pub&amp;quot; beginning with ssh-rsa. This is your public ssh key&lt;br /&gt;
# Log into the department citadel machine, and create / navigate to a directory called .ssh&lt;br /&gt;
# Use &#039;&#039;chmod 700 .ssh&#039;&#039; to set permissions for the directory&lt;br /&gt;
# Input &#039;&#039;vi authorized_keys&#039;&#039; to open up the vi text editor. Press i, then paste in your public ssh key. Press escape, then type &#039;&#039;:wq&#039;&#039; and press enter to write and quit the editor &lt;br /&gt;
# Log into the particular machine you want to ssh to, and repeat steps 3 to 5&lt;br /&gt;
# Exit back to your machine and navigate to the home directory&lt;br /&gt;
# Input &#039;&#039;vi .ssh/config&#039;&#039; to open the vi text editor. Press i, then paste in the following, with your crsid and machine name in the places given:&lt;br /&gt;
   Host citadel&lt;br /&gt;
      User crsid&lt;br /&gt;
      Hostname citadel.ch.cam.ac.uk&lt;br /&gt;
      ForwardAgent yes&lt;br /&gt;
      ProxyCommand none&lt;br /&gt;
   Host machinename&lt;br /&gt;
      Hostname machinename&lt;br /&gt;
      ProxyCommand ssh citadel -W %h:%p&lt;br /&gt;
      User crsid&lt;br /&gt;
      ForwardAgent yes&lt;br /&gt;
      ServerAliveInterval 60&lt;br /&gt;
      ServerAliveCountMax 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Press escape, then input &#039;&#039;:wq&#039;&#039; followed by enter to exit the editor.&lt;br /&gt;
You can now log straight into citadel with &#039;&#039;ssh citadel&#039;&#039; or straight into your machine with &#039;&#039;ssh machinename&#039;&#039;. The last two commands stop the ssh being killed if you are idle for too long. The &#039;&#039;ServerAliveInterval&#039;&#039; is how many seconds to ping a null packet, and the &#039;&#039;ServerAliveCountMax&#039;&#039; are how many consecutive times it needs to fail for the ssh to be killed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;File Transfer Protocol :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You may want to transfer files between department machines and your computer. The standard way is to &#039;&#039;scp&#039;&#039; via the terminal with commands :&lt;br /&gt;
 UPLOAD :       &lt;br /&gt;
 scp -o ProxyCommand=&amp;quot;ssh crsid@citadel.ch.cam.ac.uk nc machinename 22&amp;quot; LocalPath/FileName crsid@machinename.ch.cam.ac.uk:/RemotePath&lt;br /&gt;
 DOWNLOAD :     &lt;br /&gt;
 scp -o ProxyCommand=&amp;quot;ssh crsid@citadel.ch.cam.ac.uk nc machinename 22&amp;quot;  crsid@machinename.ch.cam.ac.uk:/RemotePath/FileName LocalPath&lt;br /&gt;
&lt;br /&gt;
However, a more convenient way is to set up a File Transfer Protocol (FTP) between machines. It can come with a graphic user interface, where you can drag and drop files from the department machine to your computer. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;ON WINDOWS&amp;lt;/u&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
I recommend the WinSCP software. You can download it from [https://winscp.net/eng/download.php here].&lt;br /&gt;
Once installed, click &#039;&#039;New Session&#039;&#039;, and choose &#039;&#039;SFTP&#039;&#039; protocol with :&lt;br /&gt;
 Hostname = machinename&lt;br /&gt;
 Port number = 22&lt;br /&gt;
 Username = crsid&lt;br /&gt;
 Leave &#039;Password&#039; entry empty.&lt;br /&gt;
Then click on &#039;&#039;Advanced...&#039;&#039;, &#039;&#039;Tunnel&#039;&#039; tab, check the &#039;&#039;Connect through SSH tunnel&#039;&#039; tickbox and enter:&lt;br /&gt;
 Hostname = citadel.ch.cam.ac.uk&lt;br /&gt;
 Port number = 22&lt;br /&gt;
 Username = crsid&lt;br /&gt;
 Leave &#039;Password&#039; entry empty.&lt;br /&gt;
Click &#039;&#039;OK&#039;&#039; and click &#039;&#039;Save&#039;&#039;, and finally &#039;&#039;Login&#039;&#039;. Enter your admitto password twice.&lt;br /&gt;
You can now navigate in the directories of the remote machine on the right tab, and of your local computer on the left tab, and you can transfer files between the two with a drag and drop. Enjoy !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;ON MAC\LINUX&amp;lt;/u&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
You can download FileZilla for [https://filezilla-project.org/download.php?platform=osx MacOS] or [https://filezilla-project.org/download.php?platform=linux64 linux].&lt;br /&gt;
The problem is that FileZilla does not support tunnel ssh. To open the connection, you need to use a ssh client like puTTY.&lt;br /&gt;
On MacOS please follow [https://phoenixnap.com/kb/install-putty-on-mac this guide].&lt;br /&gt;
&lt;br /&gt;
On Linux you can do :&lt;br /&gt;
 sudo apt-get install -y putty&lt;br /&gt;
Open it by typing &#039;&#039;putty&#039;&#039; on the terminal. The interface should open.&lt;br /&gt;
Type the following entries :&lt;br /&gt;
&lt;br /&gt;
in the &#039;&#039;SSH/Tunnels&#039;&#039; tab :&lt;br /&gt;
 Source Port = 3111 &lt;br /&gt;
 Destination = machinename:22 &lt;br /&gt;
 local &lt;br /&gt;
 auto&lt;br /&gt;
and click &#039;&#039;Add&#039;&#039;. (source port can be any number &amp;gt; 1024)&lt;br /&gt;
&lt;br /&gt;
in the &#039;&#039;session&#039;&#039; tab :&lt;br /&gt;
 Host Name = citadel.ch.cam.ac.uk &lt;br /&gt;
 port = 22 &lt;br /&gt;
 connection type = SSH&lt;br /&gt;
Enter a name for this connection in the &#039;&#039;saved sessions&#039;&#039; entry, and click &#039;&#039;Save&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Now click &#039;&#039;Open&#039;&#039;.&lt;br /&gt;
A terminal should open, type your crsid and your admitto password, you&#039;re now logged into Citadel (it&#039;s normal that it&#039;s not your machine).&lt;br /&gt;
&lt;br /&gt;
Now open FileZilla, and enter :&lt;br /&gt;
 Host = sftp://localhost&lt;br /&gt;
 username = crsid&lt;br /&gt;
 password = admitto password&lt;br /&gt;
 port = 3111 &lt;br /&gt;
and click &#039;&#039;Quickconnect&#039;&#039;. (port needs to be the same as source port in puTTY).&lt;br /&gt;
&lt;br /&gt;
A window will open (Unknown host key), click &#039;&#039;OK&#039;&#039;. Hopefully the connection is successful. &lt;br /&gt;
&lt;br /&gt;
You can now navigate in the directories of the remote machine on the right tab, and of your local computer on the left tab, and you can transfer files between the two with a drag and drop. Enjoy !&lt;br /&gt;
&lt;br /&gt;
= Useful Software =&lt;br /&gt;
# Using [[QChem]]&lt;br /&gt;
# Using [[QCMagic]]&lt;br /&gt;
# [[SimpleDMC]]&lt;br /&gt;
# [[MRCC]]&lt;br /&gt;
# [[GAMESS]]&lt;br /&gt;
&lt;br /&gt;
= Useful Information =&lt;br /&gt;
# Guidelines on [[Code Review]]&lt;br /&gt;
# How to do things relating to [[HANDE]]&lt;br /&gt;
# How to run PySCF or other [[Python software on Archer]]&lt;br /&gt;
# How to run QChem on [[darwin]]&lt;br /&gt;
# Where to get [[Travel Money]]&lt;br /&gt;
# Backed-up [[Storage]]&lt;br /&gt;
# [[How to get IQMol to run a local version of Q-Chem via SSH]]&lt;br /&gt;
# [[Slow ubuntu dash]]&lt;br /&gt;
# [[Persistent X]] sessions for remote working&lt;br /&gt;
# [[Paper submission]]&lt;br /&gt;
# [[Getting Started with cerebro]]&lt;br /&gt;
# [[Things to do before leaving]]&lt;br /&gt;
# [[The Ten Git-mmandments]]: what NOT to do&lt;br /&gt;
&lt;br /&gt;
= [[Archiving_data | Archiving data for the university repository]] =&lt;br /&gt;
&lt;br /&gt;
= [[Website_to_do | To-do list for the Thom Group Website]] =&lt;br /&gt;
&lt;br /&gt;
= [[Group_activities | Group Activities]] =&lt;br /&gt;
&lt;br /&gt;
= To-do list for the Wiki=&lt;br /&gt;
&lt;br /&gt;
- A pretty picture&lt;br /&gt;
&lt;br /&gt;
- A &amp;quot;How to:&amp;quot; page on setting up cygwin, ssh keys and general bash commands what are helpful&lt;br /&gt;
&lt;br /&gt;
- A &amp;quot;How to:&amp;quot; page on using qchem&lt;br /&gt;
&lt;br /&gt;
- A Pretty picture for the $wgLogo&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=Ten_Git-mmandments&amp;diff=1018</id>
		<title>Ten Git-mmandments</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=Ten_Git-mmandments&amp;diff=1018"/>
		<updated>2022-08-25T12:44:04Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: Created page with &amp;quot;Herein lies a compilation of Git-related wisdom, disobey at your own risk!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Herein lies a compilation of Git-related wisdom, disobey at your own risk!&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
	<entry>
		<id>https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=Main_Page&amp;diff=1017</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wikis.ch.cam.ac.uk/thom/wiki/index.php?title=Main_Page&amp;diff=1017"/>
		<updated>2022-08-25T12:42:16Z</updated>

		<summary type="html">&lt;p&gt;Tkl35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
 # _________  # ___   ___     # ______      # ___ __ __     #  # _______     # ______       # ______      # __  __      # ______    #&lt;br /&gt;
 #/________/\ #/__/\ /__/\    #/_____/\     #/__//_//_/\    #  #/______/\    #/_____/\      #/_____/\     #/_/\/_/\     #/_____/\   #&lt;br /&gt;
 #\__.::.__\/ #\::\ \\  \ \   #\:::_ \ \    #\::\| \| \ \   #  #\::::__\/__  #\:::_ \ \     #\:::_ \ \    #\:\ \:\ \    #\:::_ \ \  #&lt;br /&gt;
 #   \::\ \   # \::\/_\ .\ \  # \:\ \ \ \   # \:.      \ \  #  # \:\ /____/\ # \:(_) ) )_   # \:\ \ \ \   # \:\ \:\ \   # \:(_) \ \ #&lt;br /&gt;
 #    \::\ \  #  \:: ___::\ \ #  \:\ \ \ \  #  \:.\-/\  \ \ #  #  \:\\_  _\/ #  \: __ `\ \  #  \:\ \ \ \  #  \:\ \:\ \  #  \: ___\/ #&lt;br /&gt;
 #     \::\ \ #   \: \ \\::\ \#   \:\_\ \ \ #   \. \  \  \ \#  #   \:\_\ \ \ #   \ \ `\ \ \ #   \:\_\ \ \ #   \:\_\:\ \ #   \ \ \   #&lt;br /&gt;
 #      \__\/ #    \__\/ \::\/#    \_____\/ #    \__\/ \__\/#  #    \_____\/ #    \_\/ \_\/ #    \_____\/ #    \_____\/ #    \_\/   #&lt;br /&gt;
 #            #               #             #               #  #             #              #             #             #           #&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hello, Guten Abend, and Bienvenue to the new Thom Group Wiki. (Apparently evenings are good times to read the Wiki.)&lt;br /&gt;
&lt;br /&gt;
In this Wiki you can find various pieces of useful information, such as when group meetings are, who is going to bring cake, how to run a particular calculation or perform a certain computer trick, who&#039;s using which computer in the group, and so on. You can also see how fun we are as a group by looking at our various photos.&lt;br /&gt;
&lt;br /&gt;
=Group Calendar=&lt;br /&gt;
https://calendar.google.com/calendar/render?mode=day&amp;amp;date=20160601T153539#main_7%7Cday-1+23745+23745+23745&lt;br /&gt;
&lt;br /&gt;
{{Special:IframePage}}&lt;br /&gt;
&lt;br /&gt;
=Group Meetings=&lt;br /&gt;
&lt;br /&gt;
Past Group Meetings [[Past Group Meetings|here]].&lt;br /&gt;
&lt;br /&gt;
===Summer 2022===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 20ex;&amp;quot; |&#039;&#039;&#039;Date&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Talk&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Cake&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|25th July || WATOC Review &amp;amp; IPLU Discussion ||  &lt;br /&gt;
|-&lt;br /&gt;
|8th August || Brian || Andreea&lt;br /&gt;
|-&lt;br /&gt;
|30th August || Nick || Daniel&lt;br /&gt;
|-&lt;br /&gt;
|12th September|| Interns || Alex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Journal Club=&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 20ex;&amp;quot; |&#039;&#039;&#039;Date&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Contributor&#039;&#039;&#039; || style=&amp;quot;width: 36ex;&amp;quot; | &#039;&#039;&#039;Paper&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| 8 Oct 2021 || Kripa || [https://arxiv.org/pdf/1712.01815.pdf/ Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm]&lt;br /&gt;
|-&lt;br /&gt;
| 5 Nov 2021 || Brian || [https://pubs.acs.org/doi/10.1021/acs.jpca.1c05962 Neat, Simple and Wrong: Debunking Electrostatic Fallacies Regarding Noncovalent Interactions]&lt;br /&gt;
|-&lt;br /&gt;
| 6 Dec 2021 || Kripa  || [https://pubs.acs.org/doi/10.1021/acs.jpclett.1c03214 Quantum Algorithm for Full Configuration Interaction Calculations without Controlled Time Evolutions]&lt;br /&gt;
|-&lt;br /&gt;
| 11 Feb 2022 || Nick  || [https://www.nature.com/articles/s41598-021-00053-8 Mapping the NFT revolution: market trends, trade networks, and visual features]&lt;br /&gt;
|-&lt;br /&gt;
| 11 Mar 2022 || Andreea || [https://link.springer.com/article/10.1007/BF02650179 Simulating physics with computers]&lt;br /&gt;
|-&lt;br /&gt;
| 27 Apr 2022 || Fabio || [https://arxiv.org/pdf/1912.06462.pdf Rethinking Superdeterminism]&lt;br /&gt;
|-&lt;br /&gt;
| 25 May 2022 || Kripa || [https://www.frontiersin.org/articles/10.3389/fnhum.2014.00068/full#h1 The experience of mathematical beauty and its neural correlates]&lt;br /&gt;
|-&lt;br /&gt;
| 17 Aug 2022 || Nick || [https://onlinelibrary.wiley.com/doi/10.1002/nadc.20224120702 Scientists must resist cancel culture] [https://pubs.acs.org/doi/10.1021/acs.jpclett.2c02242 Words Matter: On the debate over free speech, inclusivity, and academic excellence]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Summer &#039;Interns&#039;=&lt;br /&gt;
Past Summer Interns [[Past Summer Interns|here]].&lt;br /&gt;
==2022==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 18ex;&amp;quot; |&#039;&#039;&#039;Name&#039;&#039;&#039; || style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Dates&#039;&#039;&#039; || style=&amp;quot;width: 25ex;&amp;quot; | &#039;&#039;&#039;Project&#039;&#039;&#039;|| style=&amp;quot;width: 18ex;&amp;quot; | &#039;&#039;&#039;Machine&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Douglas Russell  || - || IPLU || hypatia&lt;br /&gt;
|-&lt;br /&gt;
| Theo Hatcher || - || IPLU || chucksty&lt;br /&gt;
|-&lt;br /&gt;
| Motoki Yamano  || - || IPLU || hypatia&lt;br /&gt;
|-&lt;br /&gt;
| King Lam  || - || IPLU || chucksty&lt;br /&gt;
|-&lt;br /&gt;
| Juan Fernandez Pottecher  || - || Strong Correlation || hylas&lt;br /&gt;
|-&lt;br /&gt;
| Max Howe  || - || Singlet Fission || moonraker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= [[Group_List | Group List]] =&lt;br /&gt;
The full timeline of all current and past group members is available [https://wikis.ch.cam.ac.uk/thom/wiki/index.php/Group_List here].   NB autogenerated by `thom-fs-common/old-ifs-thom/cbh31/groupwiki`&lt;br /&gt;
&lt;br /&gt;
An up to date list of group members is also available [http://www.ch.cam.ac.uk/group/thom here].&lt;br /&gt;
&lt;br /&gt;
[[File:AJWT_group_8_21_taken_by_Nathan Pitt_©University_of_Cambridge_1274_M.jpg|1000px|thumb|center|Thom Group photo - taken by Nathan Pitt, ©University of Cambridge, August 2021]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
Front row, left to right: Anna Bui, Brian Zhao, Bang C. Huynh, Arta Safari, Maria-Andreea Filip&amp;lt;br&amp;gt;&lt;br /&gt;
Back row, right to left: David Izuogu, Kripa Panchagnula, Zian Wang, Dr Alex Thom&amp;lt;br&amp;gt;&lt;br /&gt;
Not in picture: Fabio Albertani, Nicholas Lee, Tarik Benyahia, César Feniou, Benjamin Mokhtar&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:AJWT_group_photo_2_5_19-4926_taken_by_Nathan_Pitt_University_of_Cambridge-tighter.jpg|500px|thumb|center|Thom Group photo - taken by Nathan Pitt, ©University of Cambridge, May 2019]]&lt;br /&gt;
[[File:AJWT_Group_photo-5470_taken_by_Nathan_Pitt_University_of_Cambridge.jpg|500px|thumb|center|Thom Group photo - taken by Nathan Pitt, ©University of Cambridge, November 2017]]&lt;br /&gt;
&lt;br /&gt;
= [[Computer_and_Storage_List | Computing Resources]] =&lt;br /&gt;
- Group computers available.&lt;br /&gt;
&lt;br /&gt;
- Clusters available.&lt;br /&gt;
&lt;br /&gt;
- Storage available.&lt;br /&gt;
&lt;br /&gt;
= Computing Setup Guide =&lt;br /&gt;
Anaconda takes up a lot of space on /home so it&#039;s worth running&lt;br /&gt;
&lt;br /&gt;
   mv ~/.conda /scratch/$USER/.conda&lt;br /&gt;
   ln -s /scratch/$USER/.conda ~/.conda&lt;br /&gt;
&lt;br /&gt;
= [[Introduction | Introduction to basic shell commands]] = &lt;br /&gt;
- There are a number of tutorials available which document basic operations that are useful including:&lt;br /&gt;
&lt;br /&gt;
# General bash commands&lt;br /&gt;
# Setting up cygwin&lt;br /&gt;
# Setting up [https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key ssh keys] and general bash commands what are helpful&lt;br /&gt;
# Setting up ssh config files&lt;br /&gt;
# using [[GIT]]&lt;br /&gt;
# Useful cerebro queue commands&lt;br /&gt;
# Some [[vim]] tidbits&lt;br /&gt;
&lt;br /&gt;
Currently undergoing construction.&lt;br /&gt;
&lt;br /&gt;
= How to connect to department machines =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;On Mac/WSL:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Check you have an Admitto account and collect your password from https://www.ch.cam.ac.uk/computing/admitto-service&lt;br /&gt;
# In the terminal run the command &#039;&#039;ssh -X crsid@citadel.ch.cam.ac.uk&#039;&#039;&lt;br /&gt;
# When prompted input your Admitto username (crsid) and password &lt;br /&gt;
# Once this has worked run the command &#039;&#039;ssh -X crsid@machinename&#039;&#039; in the terminal to log into a particular machine&lt;br /&gt;
&lt;br /&gt;
Set up logging in without a password:&lt;br /&gt;
&lt;br /&gt;
# Generate an ssh key by running the command &#039;&#039;ssh-keygen&#039;&#039; in the terminal, as described in detail in the section &amp;quot;Introduction to basic shell commands&amp;quot;&lt;br /&gt;
# Use &#039;&#039;cd ~/.ssh&#039;&#039; to navigate to the directory holding the keys, and copy the text from the file &amp;quot;id_rsa.pub&amp;quot; beginning with ssh-rsa. This is your public ssh key&lt;br /&gt;
# Log into the department citadel machine, and create / navigate to a directory called .ssh&lt;br /&gt;
# Use &#039;&#039;chmod 700 .ssh&#039;&#039; to set permissions for the directory&lt;br /&gt;
# Input &#039;&#039;vi authorized_keys&#039;&#039; to open up the vi text editor. Press i, then paste in your public ssh key. Press escape, then type &#039;&#039;:wq&#039;&#039; and press enter to write and quit the editor &lt;br /&gt;
# Log into the particular machine you want to ssh to, and repeat steps 3 to 5&lt;br /&gt;
# Exit back to your machine and navigate to the home directory&lt;br /&gt;
# Input &#039;&#039;vi .ssh/config&#039;&#039; to open the vi text editor. Press i, then paste in the following, with your crsid and machine name in the places given:&lt;br /&gt;
   Host citadel&lt;br /&gt;
      User crsid&lt;br /&gt;
      Hostname citadel.ch.cam.ac.uk&lt;br /&gt;
      ForwardAgent yes&lt;br /&gt;
      ProxyCommand none&lt;br /&gt;
   Host machinename&lt;br /&gt;
      Hostname machinename&lt;br /&gt;
      ProxyCommand ssh citadel -W %h:%p&lt;br /&gt;
      User crsid&lt;br /&gt;
      ForwardAgent yes&lt;br /&gt;
      ServerAliveInterval 60&lt;br /&gt;
      ServerAliveCountMax 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Press escape, then input &#039;&#039;:wq&#039;&#039; followed by enter to exit the editor.&lt;br /&gt;
You can now log straight into citadel with &#039;&#039;ssh citadel&#039;&#039; or straight into your machine with &#039;&#039;ssh machinename&#039;&#039;. The last two commands stop the ssh being killed if you are idle for too long. The &#039;&#039;ServerAliveInterval&#039;&#039; is how many seconds to ping a null packet, and the &#039;&#039;ServerAliveCountMax&#039;&#039; are how many consecutive times it needs to fail for the ssh to be killed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;File Transfer Protocol :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You may want to transfer files between department machines and your computer. The standard way is to &#039;&#039;scp&#039;&#039; via the terminal with commands :&lt;br /&gt;
 UPLOAD :       &lt;br /&gt;
 scp -o ProxyCommand=&amp;quot;ssh crsid@citadel.ch.cam.ac.uk nc machinename 22&amp;quot; LocalPath/FileName crsid@machinename.ch.cam.ac.uk:/RemotePath&lt;br /&gt;
 DOWNLOAD :     &lt;br /&gt;
 scp -o ProxyCommand=&amp;quot;ssh crsid@citadel.ch.cam.ac.uk nc machinename 22&amp;quot;  crsid@machinename.ch.cam.ac.uk:/RemotePath/FileName LocalPath&lt;br /&gt;
&lt;br /&gt;
However, a more convenient way is to set up a File Transfer Protocol (FTP) between machines. It can come with a graphic user interface, where you can drag and drop files from the department machine to your computer. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;ON WINDOWS&amp;lt;/u&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
I recommend the WinSCP software. You can download it from [https://winscp.net/eng/download.php here].&lt;br /&gt;
Once installed, click &#039;&#039;New Session&#039;&#039;, and choose &#039;&#039;SFTP&#039;&#039; protocol with :&lt;br /&gt;
 Hostname = machinename&lt;br /&gt;
 Port number = 22&lt;br /&gt;
 Username = crsid&lt;br /&gt;
 Leave &#039;Password&#039; entry empty.&lt;br /&gt;
Then click on &#039;&#039;Advanced...&#039;&#039;, &#039;&#039;Tunnel&#039;&#039; tab, check the &#039;&#039;Connect through SSH tunnel&#039;&#039; tickbox and enter:&lt;br /&gt;
 Hostname = citadel.ch.cam.ac.uk&lt;br /&gt;
 Port number = 22&lt;br /&gt;
 Username = crsid&lt;br /&gt;
 Leave &#039;Password&#039; entry empty.&lt;br /&gt;
Click &#039;&#039;OK&#039;&#039; and click &#039;&#039;Save&#039;&#039;, and finally &#039;&#039;Login&#039;&#039;. Enter your admitto password twice.&lt;br /&gt;
You can now navigate in the directories of the remote machine on the right tab, and of your local computer on the left tab, and you can transfer files between the two with a drag and drop. Enjoy !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;ON MAC\LINUX&amp;lt;/u&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
You can download FileZilla for [https://filezilla-project.org/download.php?platform=osx MacOS] or [https://filezilla-project.org/download.php?platform=linux64 linux].&lt;br /&gt;
The problem is that FileZilla does not support tunnel ssh. To open the connection, you need to use a ssh client like puTTY.&lt;br /&gt;
On MacOS please follow [https://phoenixnap.com/kb/install-putty-on-mac this guide].&lt;br /&gt;
&lt;br /&gt;
On Linux you can do :&lt;br /&gt;
 sudo apt-get install -y putty&lt;br /&gt;
Open it by typing &#039;&#039;putty&#039;&#039; on the terminal. The interface should open.&lt;br /&gt;
Type the following entries :&lt;br /&gt;
&lt;br /&gt;
in the &#039;&#039;SSH/Tunnels&#039;&#039; tab :&lt;br /&gt;
 Source Port = 3111 &lt;br /&gt;
 Destination = machinename:22 &lt;br /&gt;
 local &lt;br /&gt;
 auto&lt;br /&gt;
and click &#039;&#039;Add&#039;&#039;. (source port can be any number &amp;gt; 1024)&lt;br /&gt;
&lt;br /&gt;
in the &#039;&#039;session&#039;&#039; tab :&lt;br /&gt;
 Host Name = citadel.ch.cam.ac.uk &lt;br /&gt;
 port = 22 &lt;br /&gt;
 connection type = SSH&lt;br /&gt;
Enter a name for this connection in the &#039;&#039;saved sessions&#039;&#039; entry, and click &#039;&#039;Save&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Now click &#039;&#039;Open&#039;&#039;.&lt;br /&gt;
A terminal should open, type your crsid and your admitto password, you&#039;re now logged into Citadel (it&#039;s normal that it&#039;s not your machine).&lt;br /&gt;
&lt;br /&gt;
Now open FileZilla, and enter :&lt;br /&gt;
 Host = sftp://localhost&lt;br /&gt;
 username = crsid&lt;br /&gt;
 password = admitto password&lt;br /&gt;
 port = 3111 &lt;br /&gt;
and click &#039;&#039;Quickconnect&#039;&#039;. (port needs to be the same as source port in puTTY).&lt;br /&gt;
&lt;br /&gt;
A window will open (Unknown host key), click &#039;&#039;OK&#039;&#039;. Hopefully the connection is successful. &lt;br /&gt;
&lt;br /&gt;
You can now navigate in the directories of the remote machine on the right tab, and of your local computer on the left tab, and you can transfer files between the two with a drag and drop. Enjoy !&lt;br /&gt;
&lt;br /&gt;
= Useful Software =&lt;br /&gt;
# Using [[QChem]]&lt;br /&gt;
# Using [[QCMagic]]&lt;br /&gt;
# [[SimpleDMC]]&lt;br /&gt;
# [[MRCC]]&lt;br /&gt;
# [[GAMESS]]&lt;br /&gt;
&lt;br /&gt;
= Useful Information =&lt;br /&gt;
# Guidelines on [[Code Review]]&lt;br /&gt;
# How to do things relating to [[HANDE]]&lt;br /&gt;
# How to run PySCF or other [[Python software on Archer]]&lt;br /&gt;
# How to run QChem on [[darwin]]&lt;br /&gt;
# Where to get [[Travel Money]]&lt;br /&gt;
# Backed-up [[Storage]]&lt;br /&gt;
# [[How to get IQMol to run a local version of Q-Chem via SSH]]&lt;br /&gt;
# [[Slow ubuntu dash]]&lt;br /&gt;
# [[Persistent X]] sessions for remote working&lt;br /&gt;
# [[Paper submission]]&lt;br /&gt;
# [[Getting Started with cerebro]]&lt;br /&gt;
# [[Things to do before leaving]]&lt;br /&gt;
# The [[Ten Git-mmandments]]: what NOT to do&lt;br /&gt;
&lt;br /&gt;
= [[Archiving_data | Archiving data for the university repository]] =&lt;br /&gt;
&lt;br /&gt;
= [[Website_to_do | To-do list for the Thom Group Website]] =&lt;br /&gt;
&lt;br /&gt;
= [[Group_activities | Group Activities]] =&lt;br /&gt;
&lt;br /&gt;
= To-do list for the Wiki=&lt;br /&gt;
&lt;br /&gt;
- A pretty picture&lt;br /&gt;
&lt;br /&gt;
- A &amp;quot;How to:&amp;quot; page on setting up cygwin, ssh keys and general bash commands what are helpful&lt;br /&gt;
&lt;br /&gt;
- A &amp;quot;How to:&amp;quot; page on using qchem&lt;br /&gt;
&lt;br /&gt;
- A Pretty picture for the $wgLogo&lt;/div&gt;</summary>
		<author><name>Tkl35</name></author>
	</entry>
</feed>