{"componentChunkName":"component---src-templates-generic-template-js","path":"/resources/getting-started","webpackCompilationHash":"041090671d318979d692","result":{"data":{"markdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In CS312 you will use a variety of software tools and online services. Please\nget ready for the semester by making sure you have installed the following\ntools and created the following free accounts. Read the instructions completely\nbefore starting, paying close attention to the version numbers when specified.\nYou may have some of these tools already installed, or if you are working on\nbasin (basin.cs.midldebury.edu), some tools may already\nhave been installed for you. The latter is noted in the instructions. Don't\njust copy-and-paste, some commands require modifications (e.g. with your e-mail\naddress)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"A note to Windows users"}]},{"type":"text","value":", most of the core tools we are using should be\navailable for Windows. Some of the ancillary tools, e.g. NVM, may not. Our\nvarious workflows and exercises will have been developed and tested on OSX and\nLinux, but not on windows. If you would like to work in a more tested environment, you could make use of "},{"type":"element","tagName":"a","properties":{"href":"http://www.cs.middlebury.edu/~pjohnson/guides/linux/"},"children":[{"type":"text","value":"VirtualBox"}]},{"type":"text","value":" or the "},{"type":"element","tagName":"a","properties":{"href":"https://docs.microsoft.com/en-us/windows/wsl/install-win10"},"children":[{"type":"text","value":"Windows Subsystem for Linux"}]},{"type":"text","value":" to get a Linux distribution up and running on your machine."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A note to OSX users, many of these tools can be installed via\n"},{"type":"element","tagName":"a","properties":{"href":"https://brew.sh"},"children":[{"type":"text","value":"Homebrew"}]},{"type":"text","value":". If you are a current Homebrew user, keep an eye\nout for that install option. If you are not yet a Homebrew user, I recommend\nit. Homebrew is \"package manager\" for OSX that makes it easy to install (and\nremove) software (especially open-source CLI SW)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"browser"},"children":[{"type":"element","tagName":"a","properties":{"href":"#browser","ariaLabel":"browser permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Browser"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"All of the modern browsers should work fine, however to ensure a common,\nmulti-platform, environment we will standardize on "},{"type":"element","tagName":"a","properties":{"href":"https://www.mozilla.org/en-US/firefox/"},"children":[{"type":"text","value":"Firefox"}]},{"type":"text","value":". You are welcome to use any browser you are comfortable with, but this is the one that I will use to check your work. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"I also encourage you to install the "},{"type":"element","tagName":"a","properties":{"href":"https://addons.mozilla.org/en-US/firefox/addon/react-devtools/"},"children":[{"type":"text","value":"Rect Development Tools extension"}]},{"type":"text","value":" in Firefox, which will allow you to inspect your React component hierarchies (including state and props)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"git-and-github"},"children":[{"type":"element","tagName":"a","properties":{"href":"#git-and-github","ariaLabel":"git and github permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Git and GitHub"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Make sure you have "},{"type":"element","tagName":"a","properties":{"href":"https://git-scm.com/downloads"},"children":[{"type":"text","value":"git"}]},{"type":"text","value":" installed. You likely already have Git installed (e.g. as part of OSX developer tools). If you are working on  basin.cs.middlebury.edu, "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"git"}]},{"type":"text","value":" is also already installed. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"As an aside, OSX users should install XCode Command Line tools (which\nincludes compilers and other relevant tools like Git) if you don't already\nhave XCode installed. You will likely need those tools in another class.\nThis "},{"type":"element","tagName":"a","properties":{"href":"http://railsapps.github.io/xcode-command-line-tools.html"},"children":[{"type":"text","value":"guide"}]},{"type":"text","value":"\nincludes step-by-step instructions."}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you haven't already, configure git with your name and e-mail"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"git config --global user.name \"your name\"\ngit config --global user.email \"your email address\"\ngit config --global color.ui auto"}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"For example:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"git config --global user.name \"Christopher Andrews\"\ngit config --global user.email \"candrews@middlebury.edu\""}]}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Create a free "},{"type":"element","tagName":"a","properties":{"href":"https://github.com"},"children":[{"type":"text","value":"GitHub"}]},{"type":"text","value":" account if you don't have on\nalready. We will be using GitHub extensively, including for assignment\nsubmission. "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Make sure that whatever e-mail address you used above is\nassociated with your GitHub account so that project contributions are\nassociated with your account."}]},{"type":"text","value":" Note that you can have multiple e-mail\naddresses associated with your account, e.g. you can add and should add your\nMiddlebury e-mail address to an existing GitHub account. Once you have your\naccount, "},{"type":"element","tagName":"a","properties":{"href":"https://docs.google.com/forms/d/e/1FAIpQLScW6H8wXlQ8oKrzEXSZ7OBZqf1kvsBl3M6Vu0A8EzT1WeLLPQ/viewform?usp=sf_link"},"children":[{"type":"text","value":"submit your GitHub username to the instructor(s) via this online form"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"GitHub offers both SSH and HTTPS-based interfaces to your repository. GitHub recommends the HTTPS-based interface, but you can use either. SSH requires you to set up a public-key. See GitHub's "},{"type":"element","tagName":"a","properties":{"href":"https://help.github.com/en/articles/which-remote-url-should-i-use"},"children":[{"type":"text","value":"help page"}]},{"type":"text","value":" for more information on these two options."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Request an "},{"type":"element","tagName":"a","properties":{"href":"https://education.github.com"},"children":[{"type":"text","value":"education discount"}]},{"type":"text","value":" for your\nindividual GitHub account (not as an organization). Doing so gives you free\nprivate repositories and will unlock free accounts at other services that\nintegrate with GitHub!"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"nodejs"},"children":[{"type":"element","tagName":"a","properties":{"href":"#nodejs","ariaLabel":"nodejs permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Node.js"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Node.js is a stand-alone JavaScript engine that can be used to execute\nJavaScript outside the browser, either locally on your computer or on a\n\"backend\" server (i.e. \"full-stack\" JavaScript). We will be using the \"long term support\" (LTS) version which is 10.16.3. It will be important that you get this version and not use an older version you may happen to have (which may be missing features) or the latest, cutting edge version (which may have changed some features, and has certainly added some)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Windows users should install Node.js directly from "},{"type":"element","tagName":"a","properties":{"href":"https://nodejs.org"},"children":[{"type":"text","value":"https://nodejs.org"}]},{"type":"text","value":". If you do not have Administrator privileges on the computer (e.g. it is a library laptop) you can still install Node by following the updated instructions in this StackOverflow "},{"type":"element","tagName":"a","properties":{"href":"https://stackoverflow.com/a/37029090"},"children":[{"type":"text","value":"post"}]},{"type":"text","value":". In short, download the "},{"type":"element","tagName":"a","properties":{"href":"https://nodejs.org/en/download/"},"children":[{"type":"text","value":"Zip file"}]},{"type":"text","value":" containing the Windows binaries and unpack those programs for use on your computer."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"While OSX and Linux users can similarly install Node.js directly from "},{"type":"element","tagName":"a","properties":{"href":"https://nodejs.org"},"children":[{"type":"text","value":"https://nodejs.org"}]},{"type":"text","value":" we don't recommend that approach. Node.js moves quickly and so it is helpful to have a\ntool to manage different versions. I use "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/creationix/nvm"},"children":[{"type":"text","value":"Node Version\nManager"}]},{"type":"text","value":" on OSX/Linux and encourage you to\nas well. "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"nvm"}]},{"type":"text","value":" is a tool for downloading and installing different versions of\nNode.js (and associated tools) and a shell script for setting up your path to\nuse a specific version. Note that you will need to install NVM and Node.js,\neven if you are using basin. Because Node.js moves so quickly it is\nbetter for you to install it yourself so you have control over the version."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"https://github.com/creationix/nvm#installation"},"children":[{"type":"text","value":"Install "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"nvm"}]}]},{"type":"text","value":". "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Install the current Node.js long term support release, "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"lts/dubnium"}]},{"type":"text","value":". We will\nstandardize on this version this semester."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"nvm install lts/dubnium"}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you get a "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"nvm: command not found"}]},{"type":"text","value":" error, try opening a new terminal\nthen running the install command. If that doesn't fix that error, there are\nadditional debugging instructions for both Linux and OSX on the NVM\ninstallation "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/creationix/nvm#installation"},"children":[{"type":"text","value":"site"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you get an error like the following on the College's Linux machines:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"Version '' (with LTS filter 'dubnium') not found - try `nvm ls-remote --lts=dubnium` to browse available versions."}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"set an unencrypted mirror before trying to install Node.js:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"export NVM_NODEJS_ORG_MIRROR=\"http://nodejs.org/dist\""}]}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"Every time"}]},{"type":"text","value":" you start a new shell, you will use "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"nvm"}]},{"type":"text","value":" to select a specific version of Node.js, e.g."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"nvm use lts/dubnium"}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"to set the version once, you can create a "},{"type":"element","tagName":"a","properties":{"href":"https://github.com/creationix/nvm#nvmrc"},"children":[{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":".nvmrc"}]},{"type":"text","value":"\nfile"}]},{"type":"text","value":" in the top-level directory\nwhere you are working on your class assignments that specifies the Node.js\nversion. Then you only need to run "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"nvm use"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The default setup for NVM is to invoke the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"nvm.sh"}]},{"type":"text","value":" setup script whenever a new\nshell starts. Doing so takes a few seconds, and depending on how often you\ncreate a new shell that delay might be annoying. If you find yourself bothered\nby the delay, and are comfortable at the command line, you can modify your\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":".bashrc"}]},{"type":"text","value":" (or "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":".bash_profile"}]},{"type":"text","value":") with the following:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"markdown":"1","id":"nvm-startup","className":["collapse"]},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Replace the following lines in your "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":".bashrc"}]},{"type":"text","value":" (and any others, e.g. bash completion, added by NVM installation): "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"bash"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-bash"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-bash"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"export"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","assign-left","variable"]},"children":[{"type":"text","value":"NVM_DIR"}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","environment","constant"]},"children":[{"type":"text","value":"$HOME"}]},{"type":"text","value":"/.nvm\""}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"text","value":" -s "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$NVM_DIR"}]},{"type":"text","value":"/nvm.sh\""}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"&&"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$NVM_DIR"}]},{"type":"text","value":"/nvm.sh\""}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# This loads nvm"}]}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"with:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"bash"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-bash"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-bash"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# lazy loading nvm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","function-name","function"]},"children":[{"type":"text","value":"setup_nvm"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n  "},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"unset"}]},{"type":"text","value":" -f node\n  "},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"unset"}]},{"type":"text","value":" -f "},{"type":"element","tagName":"span","properties":{"className":["token","function"]},"children":[{"type":"text","value":"npm"}]},{"type":"text","value":"\n  "},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"unset"}]},{"type":"text","value":" -f nvm\n  "},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"unset"}]},{"type":"text","value":" -f npx\n  "},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"export"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","assign-left","variable"]},"children":[{"type":"text","value":"NVM_DIR"}]},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"="}]},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","environment","constant"]},"children":[{"type":"text","value":"$HOME"}]},{"type":"text","value":"/.nvm\""}]},{"type":"text","value":"\n  "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"["}]},{"type":"text","value":" -s "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$NVM_DIR"}]},{"type":"text","value":"/nvm.sh\""}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"]"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","operator"]},"children":[{"type":"text","value":"&&"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","builtin","class-name"]},"children":[{"type":"text","value":"."}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$NVM_DIR"}]},{"type":"text","value":"/nvm.sh\""}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","comment"]},"children":[{"type":"text","value":"# This loads nvm"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","function-name","function"]},"children":[{"type":"text","value":"node"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n  setup_nvm\n  node "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$@"}]},{"type":"text","value":"\""}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","function-name","function"]},"children":[{"type":"text","value":"npm"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n  setup_nvm\n  "},{"type":"element","tagName":"span","properties":{"className":["token","function"]},"children":[{"type":"text","value":"npm"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$@"}]},{"type":"text","value":"\""}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","function-name","function"]},"children":[{"type":"text","value":"npx"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n  setup_nvm\n  npx "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$@"}]},{"type":"text","value":"\""}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]},{"type":"text","value":"\n\n"},{"type":"element","tagName":"span","properties":{"className":["token","function-name","function"]},"children":[{"type":"text","value":"nvm"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"("}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":")"}]},{"type":"text","value":" "},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"{"}]},{"type":"text","value":"\n  setup_nvm\n  nvm "},{"type":"element","tagName":"span","properties":{"className":["token","string"]},"children":[{"type":"text","value":"\""},{"type":"element","tagName":"span","properties":{"className":["token","variable"]},"children":[{"type":"text","value":"$@"}]},{"type":"text","value":"\""}]},{"type":"text","value":"\n"},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"}"}]}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This lazily loads NVM whenever you use "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"nvm"}]},{"type":"text","value":", or the Node.js tools ("},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"node"}]},{"type":"text","value":",\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"npm"}]},{"type":"text","value":" and "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"npx"}]},{"type":"text","value":"). Note that you may need to modify the above if you install NVM\nvia Homebrew or another package manager. Specifically if you use Homebrew, you will likely need to replace "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"[ -s \"$NVM_DIR/nvm.sh\" ] && . \"$NVM_DIR/nvm.sh\""}]},{"type":"text","value":" with "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"source \"$(brew --prefix nvm)/nvm.sh\""}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Users on all platform should configure "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"npm"}]},{"type":"text","value":", the Node.js package manager, distributed as part of the Node.js installation (replacing "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"email address"}]},{"type":"text","value":" with your e-mail address, etc.) with their information:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"npm set init.author.email \"email address\"\nnpm set init.author.name \"name\"\nnpm set init.license \"Apache-2.0\""}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"sqlite"},"children":[{"type":"element","tagName":"a","properties":{"href":"#sqlite","ariaLabel":"sqlite permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"SQLite"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Install the "},{"type":"element","tagName":"a","properties":{"href":"https://www.sqlite.org/download.html"},"children":[{"type":"text","value":"sqlite-tools"}]},{"type":"text","value":" for your\nplatform to obtain the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sqlite3"}]},{"type":"text","value":" CLI for SQLite. Note that this tool is\ntypically already installed as part of OSX and is already on basin. This tool is not needed until the second half of the class, the absence of SQLite will not prevent you from completing the programming assignments in the first half of the course."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"mongodb"},"children":[{"type":"element","tagName":"a","properties":{"href":"#mongodb","ariaLabel":"mongodb permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"MongoDB"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Install "},{"type":"element","tagName":"a","properties":{"href":"https://docs.mongodb.com/manual/administration/install-community/"},"children":[{"type":"text","value":"MongoDB"}]},{"type":"text","value":". MongoDB is already installed on basin. This tool is not needed until the second half of the class, the absence of MongoDB will not prevent you from completing the programming assignments in the first half of the course."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"heroku"},"children":[{"type":"element","tagName":"a","properties":{"href":"#heroku","ariaLabel":"heroku permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Heroku"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Throughout the semester we will deploy our applications to\n"},{"type":"element","tagName":"a","properties":{"href":"https://heroku.com"},"children":[{"type":"text","value":"Heroku"}]},{"type":"text","value":", a \"platform-as-a-service\" (PaaS)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Create a free "},{"type":"element","tagName":"a","properties":{"href":"https://id.heroku.com/signup/login"},"children":[{"type":"text","value":"Heroku account"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Install the "},{"type":"element","tagName":"a","properties":{"href":"https://devcenter.heroku.com/articles/heroku-cli"},"children":[{"type":"text","value":"Heroku CLI\ntools"}]},{"type":"text","value":". The Heroku tools\n("},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"heroku"}]},{"type":"text","value":") are already installed on basin."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"travis-ci"},"children":[{"type":"element","tagName":"a","properties":{"href":"#travis-ci","ariaLabel":"travis ci permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Travis CI"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We will use Travis CI for continuous integration (CI). "},{"type":"element","tagName":"a","properties":{"href":"https://travis-ci.com"},"children":[{"type":"text","value":"https://travis-ci.com"}]},{"type":"text","value":"\n(the commercial side for private repositories) offers "},{"type":"element","tagName":"a","properties":{"href":"https://education.travis-ci.com"},"children":[{"type":"text","value":"free\naccounts"}]},{"type":"text","value":" to students enrolled in GitHub's\neducation program."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"After you have successfully enrolled in GitHub's education program"}]},{"type":"text","value":",\nsign-up for a free account at "},{"type":"element","tagName":"a","properties":{"href":"https://education.travis-ci.com"},"children":[{"type":"text","value":"Travis CI"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"}]}],"data":{"quirksMode":false}},"frontmatter":{"path":"/resources/getting-started","title":"CS 312 - Getting Started","name":"Getting Started"},"parent":{"__typename":"File","id":"920fb8b8-731f-54aa-a404-36f370f48b94","name":"getting_started","modifiedTime":"Sep 2 2019 16:25"}}},"pageContext":{"isCreatedByStatefulCreatePages":false}}}