text: 'use strict';(function(){const indexCfg={cache:true};indexCfg.doc={id:'id',field:['title','content'],store:['title','href','section'],};const index=FlexSearch.create('balance',indexCfg);window.bookSearchIndex=index;index.add({'id':0,'href':'/Job-Searching/0_resume/','title':"Resume Guide (coming soon)",'section':"Job Searching",'content':"Nothing here at the moment\n"});index.add({'id':1,'href':'/Job-Searching/1_interview/','title':"Technical Interviews",'section':"Job Searching",'content':"General Advice when solving problems\n Understand the problem being asked Don\u0026rsquo;t forget to handle edge cases Expressing your answer is just as important as understanding the problem, and solving it!  Problems with Stacks #    Checking parenthesis #  Examples:\nInput: ()\rOutput: true\rInput: ()[]{}\rOutput: true\rInput: ([)]\rOutput: false\rInput: {[]}\rOutput: true\rInput : {[]{()}}\rOutput : true\rInput : [{}{}(]\rOutput :false\rThe logic here is to push a new item on to a stack when we notice an input with an opener, and pop when there is a closer.\n# Python3 code to Check for balanced parentheses in an expression open_list = [\u0026#34;[\u0026#34;,\u0026#34;{\u0026#34;,\u0026#34;(\u0026#34;] close_list = [\u0026#34;]\u0026#34;,\u0026#34;}\u0026#34;,\u0026#34;)\u0026#34;] # Function to check parentheses def check(myStr): stack = [] for i in myStr: if i in open_list: stack.append(i) elif i in close_list: pos = close_list.index(i) if ((len(stack) \u0026gt; 0) and (open_list[pos] == stack[len(stack)-1])): stack.pop() else: return \u0026#34;Unbalanced\u0026#34; if len(stack) == 0: return \u0026#34;Balanced\u0026#34; else: return \u0026#34;Unbalanced\u0026#34; Sample code\nstring = \u0026#34;{[]{()}}\u0026#34; print(string,\u0026#34;-\u0026#34;, check(string)) string = \u0026#34;[{}{})(]\u0026#34; print(string,\u0026#34;-\u0026#34;, check(string)) string = \u0026#34;((()\u0026#34; print(string,\u0026#34;-\u0026#34;,check(string)) Evaluate Postfix Notation #  Given a valid expression in reverse polish notation, evaluate it and return the result.\nInput: [\u0026quot;2\u0026quot;, \u0026quot;1\u0026quot;, \u0026quot;+\u0026quot;, \u0026quot;3\u0026quot;, \u0026quot;*\u0026quot;]\rOutput: 9, because ((2 + 1) * 3) = 9\rInput: [\u0026quot;4\u0026quot;, \u0026quot;10\u0026quot;, \u0026quot;5\u0026quot;, \u0026quot;/\u0026quot;, \u0026quot;+\u0026quot;]\rOutput: 6, because (4 + (10 / 5)) = 6\rThe algorithm #   Create an empty stack and scan postfix expression from left to right If element is an operand, push it into the stack If the element is an operator 📦:  pop twice to get A and B (calculate B 📦 A) push result back to the stack   When expression is ended, the value in stack is the final answer  Example #  \\[ \\(3 1 + 9 *\\) \\vspace{1in} 36\n\\begin{tikzpicture} \\matrix[matrix of nodes, %draw, nodes in empty cells, nodes={minimum size=10mm}]{ % column sep=-\\pgflinewidth Postfix char read in \u0026amp; Operands (stack) \u0026amp; Actions \\\\\\\n3 \u0026amp; 3 \u0026amp; \\\\\\\n1 \u0026amp; 3 1 \u0026amp; \\\\\\\n$+$ \u0026amp; 4 \u0026amp; Pop the top 2 operands and push the result \\\\\\\n9 \u0026amp; 4 9 \u0026amp; \\\\\\\n$*$ \u0026amp; 36 \u0026amp; Pop the top 2 operands and push the result \\\\\\\n}; The expression evalutes to 36. \\end{tikzpicture}\n\\fi ]\n"});index.add({'id':2,'href':'/Web-Development/2_concepts-of-web-dev/','title':"Concepts of Web Development",'section':"Web Developments",'content':"A website is rendered in a web browser through the HTTP Protocol. There\u0026rsquo;s a lot more one should learn about Internet Protocols, but it\u0026rsquo;s not required to get an operational understanding of working with websites.\n\r\rWeb Design Principles\nThe page that is rendered by the web browser is formatted in Hypertext Markup Language or HTML for short. HTML is a set of nested tags that describe how the page should be structured. It\u0026rsquo;s like an outline with hierarchical layers or if you recall from data structures class, a tree. This tree is officially called the Document Object Model (DOM).\nIf we use cake decorating as an analogy, HTML is the structure (i.e. the layers of cake), and Cascading Style Sheets (CSS) is the styling on top of the layers. You can be barebones or go all out with CSS to obscure the underlying layers.\n\r\r"});index.add({'id':3,'href':'/Software-Development/dataflowdiagrams/','title':"Data Flow Diagrams",'section':"Software Development",'content':"What are Data Flow Diagrams (DFD)? #  This is a diagram that maps out the flow of information for any system. There are defined symbols like rectangles, circles, arrows, and so on to distinguish different parts of the system.\nThere are different kinds of data flow diagrams as well, most are separated into either logical DFD or Physical DFD. Logical data flow diagrams focuses on the system process(es). Physical data flow diagrams show how the data flow is implemented in the system.\nNotations #  This section to be written soon.\nRectangle (Entity) #  Circle (Process) #  Rounded rectangle (Data Store) #  Arrow (Data flow) #  Why are Diagrams useful? #  A diagram serves as a roadmap for a project. It shows all the pieces and how they are connected.\nHow do you draw a diagram? #  First you have to identify the system components and boundaries.\nNext you have to pick the paths between these components.\nSoftware for drawing diagrams #  You can draw a diagram with pen and paper. This may be a good way to start because there is a low learning curve involved to expressing oneself in that medium.\nWhen you\u0026rsquo;re ready for creating a more polished diagram, there are many software availabe.\n Dia Diagram Editor http://dia-installer.de Draw.io http://draw.io/ Lucid Chart https://www.lucidchart.com/pages/usecase/education  References #   https://www.lucidchart.com/pages/data-flow-diagram/data-flow-diagram-symbols https://www.smartdraw.com/data-flow-diagram/ https://www.cs.uct.ac.za/mit%5Fnotes/software/htmls/ch06.html https://www.visual-paradigm.com/guide/data-flow-diagram/what-is-data-flow-diagram/  "});index.add({'id':4,'href':'/Web-Development/process/1_process/','title':"Process from idea to Product",'section':"Web Developments",'content':"Building a website follows many of the principles of building a software application, which includes figuring out what to build ,managing the building, and validating the quality of the final product. In software development this specifica refers to various phases of structured activities such as planning (such as gathering spec requirements), scheduling the work, development, and test. The name for this set of phases is called Software development lifecycle (SDLC). Some of these phases are described below. It can be customary for your team to cycle through these phases repeatedly.\nRequirements Gathering- What\u0026rsquo;s the purpose of the website? #  It helps to know what you\u0026rsquo;re building before you begin building.\nDeciding what to build should come from a review of similar websites, as well as discussions with the appropriate stakeholders. For example, if you\u0026rsquo;re building a website for an organization, you shoul devaluate websites from similar organizations, and also speak with the organization.\nThis is the chance to gather information about the project goals and/or needs, and any must have items. The outcome of this step is a rough list. In the next phase during design, you will further refine the requirements.\nDesign / Specifications - What are you going to build it with and how? #  Once you have the general requirements scoped out, it needs to be translated to technical specifications. This includes picking the technologies such the programming language(s), any libraries or frameworks, and so forth. This can also include the stage of creating wireframes, data flow diagrams, and other sketches to describe a roadmap.\nScheduling - When will it get completed? #  Once you figure out what needs to be built with what technology, you need to figure out when you will complete each feature. It helps to make a list of goals for regular intervals, such as weekly. You should keep in mind of any major events or holidays that might cause disruptions, and include them into your plan.\nSome teams prefer an agile approach, which means getting a quick prototype produced. Then using that to collect user feedback to guide prioritization of features for future\nBuilding #  This is the execution of the schedule. If you planned well and made the right choices, it will be fairly easy to execute on. One can easily become discouraged during this phase when the project pace doesn\u0026rsquo;t match the scheduled expectations. It takes a lot of experience to know how to pick the right tool(s) for the job, and estimate tasks accurately, so take all the hiccups in stride as learning experiences.\nTesting - Does it work as expected? #  Once you have built your website, be sure to test it. Make a checklist based on the requirements and/or specifications to compare against the item built. Ensure that the website meets all the requirements.\nDeployment - Delivering the software to the client #  This is the final stage of the project, when you\u0026rsquo;re ready to deliver the project. With a website this usually means deploying the website to a server.\n"});index.add({'id':5,'href':'/Web-Development/0_starting/','title':"Starting a Website",'section':"Web Developments",'content':"This section focuses on the process, concepts, and tools for building any type of web site or web application. A website has a lot of overlapping functionality and technology as a web application, except it doesn\u0026rsquo;t focus on high volume of dynamism and user interactivity, which would require a database. This article mentions the two interchangeable. However, if one were precise, this article focuses on websites.\n"});index.add({'id':6,'href':'/Version-Control/2_readme/','title':"Include a README with your project",'section':"Version Control",'content':"What is a README? #  This is a file that is named README, that usually resides in the root of your project directory. This name comes from the command Read me. as in the situation of handing a project off to another developer and writing a memo to them that should be read first before the source code.\nIn a way, it serves as an executive summary of your project. It gives your reader a chance to understand what\u0026rsquo;s going on since source code doesn\u0026rsquo;t describe the intent and purpose of projects very well.\nWhat should go into a README? #  The readme should contain description about what the project is about, and also information to build and/or run your program.\nAn example of a barebones README can be found at https://github.com/cisc3130-s20/assignment-template\nWithin this file it starts with the title of the project, followed by instructions for setting up a development environment and then some info on where code can be saved.\nThere\u0026rsquo;s generally no industry standard on the order sections should go or how to name the sections. It\u0026rsquo;s generally based on what makes sense to you, and/or what you think would help your reader.\nFormatting a README #  This file is usually a text file. It can be written in plain text, however you can also choose to use some sort of formatting if you\u0026rsquo;re publishing your project on GitHub and the like. That formatting is called markdown - it is a way to help your text be more readable on the web page.\nFor example, if you want to add a title to your markdown you can use a single # symbol to mark it as a heading level 1 (top level). You can add inline code snippets using the ` character or a code block with three ticks as fences around the section.\nThe other formatting possibilities like bold and italics is a lot like formatting chat messages in discord and slack, with a mixture of _, *, ~ symbols to mean varoius things. Take a look at the markdown page for more guidance.\nRead more about READMEs #   Make a README because no one can read your mind https://www.makeareadme.com/  "});index.add({'id':7,'href':'/Software-Development/buildtools/','title':"Build Tools",'section':"Software Development",'content':"What is a build tool? #  A build tool is a programming utility that automates a software build task, such as compiling source code, cleaning temporary files, and so on. A popular open source build tool is Make, another popular build tool is Maven\nGNU Make #  Make is a build tool released by GNU. Make was original designed to work with C source code. Make configurations are specified by a text file named Makefile.\nMakefile #  A programmer specifies how to build program from a file called a makefile, which lists a bunch of rules, each of which specifies the target, dependencies and commands.\nOnce you create a makefile, you don\u0026rsquo;t have to meticulously track details of how to build the file again, because the details are recorded in the makefiles you prepared. You can use make with any language.\nAn example of a make file:\nhello: javac hello.java To run the make file, you can run make in a terminal.\nAlternatively you can name your makefile with any name an run it with the -f flag option like so make -f myFile.mak\nApache Maven #  Maven is a build tool released by The Apache Software Foundation, which is a non-profit organization that maintains many open source software. Maven is a build tool and also a project management tool.\nMaven Project #  The workspace concept with Maven is at the unit of a project. A Maven project must have a pom.xml file at the root directory as a way to configure the project specific information. It works like a recipe in specifying the dependencies required for the project (i.e. any open source libraries used) and also specifying the way the project should be built.\nMaven Commands #  The syntax for running Maven in a terminal is a pattern as follows:\nmvn [options] [\u0026lt;goal(s)\u0026gt;] [\u0026lt;phase(s)\u0026gt;] mvn is the program and the following are parameters provided to the program.\nAvailable options for each of the parameters can be found by checking the manual page using man mvn\nCreating a Maven project from Scratch #  The instructions for getting started are on Maven\u0026rsquo;s website https://maven.apache.org/, under the page Maven in 5 minutes. This would be a good starting point to see the whole process however take your time to read through the docs to figure out specific configuration settings.\nBasically, from the root directory of your project, run this in a terminal:\nmvn -B archetype:generate -DgroupId=myApp -DartifactId=maven-example This would create a pom.xml file in the folder maven-example with maven\u0026rsquo;s project structure within it. The flag -DgroupId is how you name your project and here the name myApp is given.\nExplaining the pom.xml configiguration file #  There are a few things to configure for a maven build project. Keep in mind that this is an XML file so it means you should know generally how an XML file is structured. XML files use tags, arranged in nested order like tree nodes. It can be thought of as a text-based database. It uses the file extension .XML\n   Java Version\nTo use Java 8, you can specify it for your project like so:\n\u0026lt;properties\u0026gt; \u0026lt;maven.compiler.target\u0026gt;1.8\u0026lt;/maven.compiler.target\u0026gt; \u0026lt;maven.compiler.source\u0026gt;1.8\u0026lt;/maven.compiler.source\u0026gt; \u0026lt;/properties\u0026gt;      Project Libraries to include (dependencies)\nIn order to include dependencies you would include each dependency under the dependencies block.\n\u0026lt;dependencies\u0026gt; \u0026lt;dependency\u0026gt; \u0026lt;groupId\u0026gt;junit\u0026lt;/groupId\u0026gt; \u0026lt;artifactId\u0026gt;junit\u0026lt;/artifactId\u0026gt; \u0026lt;version\u0026gt;x.x.x\u0026lt;/version\u0026gt; \u0026lt;/dependency\u0026gt; \u0026lt;/dependencies\u0026gt; More dependencies can be found within the Maven repository.\n     Build Plugins\nPlugins can be helpful. If there is any that you would like to add, it would be under a block like so.\n\u0026lt;build\u0026gt; \u0026lt;plugins\u0026gt; \u0026lt;plugin\u0026gt; .... \u0026lt;/plugin\u0026gt; \u0026lt;/plugins\u0026gt; \u0026lt;/build\u0026gt;   Project File structure #  The code you\u0026rsquo;re working with can be found under the root directory under the path src/main/java/package/\nIn your file under this path, such as Main.java, that\u0026rsquo;s where you can import libraries at the top of the file.\nMaven figures out for you how to install and connect everything so you don\u0026rsquo;t have to worry about manually maintaining where files should go.\nCompile and Run #  Once the configuration file is set up, all you have to worry about during and after development is to compile your project with ease.\nWhen successfully built, Maven will produce an executable file under a target directory under root.\nCollaborating on a Maven project #  A software team can collaborate on a Maven project. In order to answer how a software team can collaborate we assume for specific description here that the version control system (VCS) used by the team is Git (there are many other VCS).\nLet\u0026rsquo;s first describe the VCS workflow and assume team hosted the project on a github as the central remote repository.. Every member of the team can clone the repository. This means each member now has a copy of the project on their local machine. Git is designed where any clone can access the full history and has full read/write permissions on all the files. Any changes that any single person makes… this person adds changes, commits it (to produce a revision or snapshot on the commit log), then pushes to the central area (github).\nNext, let\u0026rsquo;s say the team is working on a Java project and uses Maven to configure the Java dependencies and build/packaging concerns. Since every Maven project has a pom.xml configuration file in the root directory of the project, every single team member with the same pom.xml and same source code should theoretically have the same project. The pom.xml configuration file is like a recipe. If Member A changes the project to Java 11, then the pom.xml is updated, he/she/they tests that it won\u0026rsquo;t break. Once test passes commits changes and pushes up. Other team members can then pull changes (i.e. download updates from that github link) and then see an updated pom.xml. Hmm maybe that was not a good example to demonstrate the advantages of Maven, because now everyone else has to have Java 11 on their machine for the project to build.\nAnother example.. if a team member adds a new dependency and says so in the pom.xml - Maven checks against its own repository (it\u0026rsquo;s like an app store for maven https://mvnrepository.com/) and if a new team member doesn\u0026rsquo;t have dependencies maven will know to download and link it. This is an example of why developers often write a short list of dependencies in their README files… because if they work on a team, and they onboard someone new it\u0026rsquo;s easier to say, here\u0026rsquo;s all the stuff you need before you begin. Developers also often include brief instructions on how to build and run the program they produced also.\nChoosing a Build tool #  Picking a build tool boils down to what you like, which supports your needs.\nIf you\u0026rsquo;re on linux, GNU Make is a great choice.\nIf you\u0026rsquo;re solely working on Java programming projects (for desktop GUI, other programs, android apps, etc) Apache Maven is a good choice. There are other similar build tools available for Java development such as gradle, ant, etc.\nLinks #   GNU Make https://www.gnu.org/software/make/ Apache Maven https://maven.apache.org/ Gradle https://gradle.org/ Ant https://ant.apache.org/  "});index.add({'id':8,'href':'/Command-Line/ssh/','title':"SSH",'section':"Command Line",'content':" Table of Contents   Getting started with SSH   What is SSH?   What is an SSH Client?  When would you use SSH?      SSH by terminal   How do I ssh in terminal?  SSH Programs for Mac   1. Terminal App  2. iTerm app    SSH Programs for Windows   1. Putty (a simple GUI app)  2. Solar Putty  3. SSH Client    Linux Emulators   1. Git Bash  2. Cmder  3. ConEmu  4. Alacritty  4. Cygwin    Windows Subsystem for Linux (WSL)    What can I do with SSH?    Getting started with SSH #  What is SSH? #  SSH is an encrypted connection protocol that allows passing information between two machines. Generally you have a client that requests access and a server that responds to the requests.\nEach SSH server has an identifying code (a host key). If you connect to a server for the first time or if the server presets a different key then previously, you will have to go through the verification process again.\nWhat is an SSH Client? #  An SSH client is a software which uses the SSH protocol to connect to a remote computer.\nIn general SSH protocol can be used for two purposes, file transfers and terminal access.\nWhen would you use SSH? #  You would use SSH when you want to connect to another machine, and with more a more secure protocol than telnet or rlogin protocols.\nSSH by terminal #  How do I ssh in terminal? #  There is a command line program called ssh\nSSH Programs for Mac #  This guide aims to provide possible options objectively, that is, without bias.\n1. Terminal App #  You can use the terminal app that comes with Mac OS. To use it, open the terminal app\nWithin the terminal app, you can type `ssh yourusername@ipaddress`\nVideo Demonstration Link: https://www.youtube.com/playlist?list=PL8HPPNCXDcvxOnrFpfkRvv2Oi3%5F0OqUZi\n2. iTerm app #  The iTerm2 app ( https://iterm2.com/) is another option, you would have to go to the website and download it to install it.\nThe advantage of using this app is that it offers more customizations.\nSSH Programs for Windows #  This guide aims to provide possible options objectively, that is, without bias.\n1. Putty (a simple GUI app) #  PuTTY is an SSH and telnet client, developed originally by Simon Tatham for the Windows platform. PuTTY is open source software that is available with source code and is developed and supported by a group of volunteers. https://www.putty.org/\n2. Solar Putty #  Solar Putty is a new SSH client that has a multi tab interface to support multiple sessions from one console. It has additional features beyond putty such as saved credentials, support for multiple sessions, quick access to the most recent sessions and integration of Windows search.\nhttps://www.solarwinds.com/free-tools/solar-putty\n3. SSH Client #  Linux Emulators #  1. Git Bash #  https://git-scm.com/downloads A bash emulation used to run git from the commandline. It contains Bash, SSH\u0026lt; SCP and a few other Unix utilities compiled for windows.\n2. Cmder #  https://cmder.net/ An emulator that extends beyond the basic capabilities of ConEmu.\n3. ConEmu #  https://conemu.github.io/\n4. Alacritty #  https://github.com/alacritty/alacritty\n4. Cygwin #  https://www.cygwin.com/\nWindows Subsystem for Linux (WSL) #  The best option for those who want as full of an experience as possible.\n   Windows Subsystem for Linux\nhttps://docs.microsoft.com/en-us/windows/wsl/install-win10\n     Windows Terminal\nhttps://www.microsoft.com/en-gb/p/windows-terminal/9n0dx20hk701?rtc=1\u0026amp;activetab=pivot:overviewtab\n  What can I do with SSH? #  You can log into other machines, such as the WEB Building\u0026rsquo;s Linux server. You can manage web servers and websites. You can configure machines remotely. You can kill running threads of frozen applications.\n"});index.add({'id':9,'href':'/Version-Control/4_checklist/','title':"Checklists",'section':"Version Control",'content':"Elements to include with your project repository #  Note that these items do not include anything about documentation, which should also be included with coding projects.\n[ ] 1. Project description #   Description of the program such as a README file Project requirement(s) and tracking. Sample approaches listed below:   TODO file to track their task list  CHANGELOG file to track revisions, Use issue tracker that comes with a github repo, respond to issues in your commit messages Whatever else you think of that is relevant   Instructions on how to run your program or code Description of technologies used  [ ] 2. Source code with comments #   Comments describe why each class and function exist Comments describe any conditional or control flow logic  [ ] 3. Submit to the form before deadline #   Link to your code (you can use any platform. GitHub is common) Repository is either public, or you\u0026rsquo;ve added me as a collaborator   \u0026ldquo;Writing documentation is like saving for retirement. It\u0026rsquo;s hard to tell if you have enough at the time you\u0026rsquo;re doing it. Only later can you tell if you have enough, and usually you wish you had more.\u0026rdquo; -J.Wirth\n Elements of Style and Presentation #   Clean Code Indentation throughout code is uniform Sensible comments  Comments are included with each method, to describe why it exists Input parameters and output parameters described Comments describe classes   Variable names make sense  Other Enhancements #  Nice to have\n Sensible commits  Each commit to version control makes sense   Testing  Prepare a brief description of test cases to run on your code Prepare scripts/code for running the tests Report on the test cases    Elements included with your submission:\n Project description Instructions on how to run your program or code Description of technologies used  "});index.add({'id':10,'href':'/Version-Control/codeprojects/','title':"Sharing Coding Projects",'section':"Version Control",'content':"Project based thinking #  Programmers are typically learning to write source code to build programs not just scripts. A programming project requires far more than just fluency with a particular programming language syntax to cohesively put together.\nCreating a program requires certain executive functioning skills to coordinate and manage. This guide provides some advice and items to consider include when sharing your codebase. It is not meant to be followed religiously, but instead to provide a framework to guide your approach.\n Programming is an activity that starts with a specification and leads to its solution as a program - Peter Van Roy\n Programming as an activity #   Programming can be done in micro (small tasks) or macro (very large projects) Programming can be language independent architectural issues, and language-depended coding issues Programming should be unbiased by limitations of any particular language, tool or design methodology  Planning before you begin coding #  You need to first figure out what needs to be built, by gathering the requirements.\n What do you want to make? - can you describe the problem? how are you solving it? Sketch out your ideas - how many classes are needed? how many functions? What technologies will you use? You need to consider which languages, libraries, or environments you\u0026rsquo;re familiar with or willing to learn.  Software Development Life Cycle (SDLC) #  A common model for presenting the phases of building software goes by the name of Software Development Life Cycle or SDLC for short. This models covers the principles of building a software application, which includes various phases of activities such as planning (such as gathering spec requirements), scheduling the work, development, and test. The name for this set of phases is called Software development lifecycle (SDLC). Some of these phases are described below.\n\r  Requirements Gathering\nIt helps to know what you\u0026rsquo;re building before you begin building. Deciding what to build should come from discussions with\n  \r Scheduling  \r Design / Specifications  \r Building  \r Testing  \r Deployment  What is a README? #  This is a file that is named README, that usually resides in the root of your project directory. This name comes from the command Read me. as in the situation of handing a project off to another developer and writing a memo to them that should be read first before the source code.\nIn a way, it serves as an executive summary of your project. It gives your reader a chance to understand what\u0026rsquo;s going on since source code doesn\u0026rsquo;t describe the intent and purpose of projects very well.\nWhat should go into a README? #  The readme should contain description about what the project is about, and also information to build and/or run your program.\nAn example of a barebones README can be found at https://github.com/cisc3130-s20/assignment-template\nWithin this file it starts with the title of the project, followed by instructions for setting up a development environment and then some info on where code can be saved.\nThere\u0026rsquo;s generally no industry standard on the order sections should go or how to name the sections. It\u0026rsquo;s generally based on what makes sense to you, and/or what you think would help your reader.\nFormatting a README #  This file is usually a text file. It can be written in plain text, however you can also choose to use some sort of formatting if you\u0026rsquo;re publishing your project on GitHub and the like. That formatting is called markdown - it is a way to help your text be more readable on the web page.\nFor example, if you want to add a title to your markdown you can use a single # symbol to mark it as a heading level 1 (top level). You can add inline code snippets using the ` character or a code block with three ticks as fences around the section.\nThe other formatting possibilities like bold and italics is a lot like formatting chat messages in discord and slack, with a mixture of _, *, ~ symbols to mean varoius things. Take a look at the markdown page for more guidance.\nRead more about READMEs #   Make a README because no one can read your mind https://www.makeareadme.com/  Checklists #  Elements to include with your project repository #  Note that these items do not include anything about documentation, which should also be included with coding projects.\n[ ] 1. Project description #   Description of the program such as a README file Project requirement(s) and tracking. Sample approaches listed below:   TODO file to track their task list  CHANGELOG file to track revisions, Use issue tracker that comes with a github repo, respond to issues in your commit messages Whatever else you think of that is relevant   Instructions on how to run your program or code Description of technologies used  [ ] 2. Source code with comments #   Comments describe why each class and function exist Comments describe any conditional or control flow logic  [ ] 3. Submit to the form before deadline #   Link to your code (you can use any platform. GitHub is common) Repository is either public, or you\u0026rsquo;ve added me as a collaborator   \u0026ldquo;Writing documentation is like saving for retirement. It\u0026rsquo;s hard to tell if you have enough at the time you\u0026rsquo;re doing it. Only later can you tell if you have enough, and usually you wish you had more.\u0026rdquo; -J.Wirth\n Elements of Style and Presentation #   Clean Code Indentation throughout code is uniform Sensible comments  Comments are included with each method, to describe why it exists Input parameters and output parameters described Comments describe classes   Variable names make sense  Other Enhancements #  Nice to have\n Sensible commits  Each commit to version control makes sense   Testing  Prepare a brief description of test cases to run on your code Prepare scripts/code for running the tests Report on the test cases    Elements included with your submission:\n Project description Instructions on how to run your program or code Description of technologies used  References #   [Advice] Leslie Lamport. 2015. Who builds a house without drawing blueprints? Communications of the ACM 58, 4 (April 2015), 38–41. DOI: https://doi-org.ez-proxy.brooklyn.cuny.edu/10.1145/2736348 [Advice] Clean Code https://cs.lmu.edu/~ray/notes/cleancode/ [Advice] Planning a programming project https://www.khanacademy.org/computing/computer-programming/programming/good-practices/a/planning-a-programming-project  "});index.add({'id':11,'href':'/guides/githubpages/','title':"Github Pages",'section':"Guides",'content':"What is Github Pages? #  This is a feature provided by GitHub where you can host websites directly from your GitHub repository. These websites are typically static files, meaning there is no database no backend. For example, this website is hosted on GitHub Pages, it was built with a static site generator.\nTo find out more, go to https://pages.github.com\nHow to create your home page (easy way) #  When you use GitHub pages, you can access your website at the url http://username.github.io and the underlying files would be found in your repository, which is the repository can be found at url pattern http://github.com/username/username.github.io\nThis section walks you through step by step. These instructions are taken directly from GitHub\u0026rsquo;s docs.\nShort version:\n Create a repo of name: yourusername.github.io Go to that repo\u0026rsquo;s settings and check the box for your pages (note the drop down option selected) Add .html files to your repo  You should be able to access your website from http://yourusername.github.io\nLonger version:\n From your account, create a new repo with the name following the pattern yourusername.github.io where you use your username to replace the part that says yourusername – this is the basis for producing a website hosted by github pages (https://pages.github.com/). Confirm that the pages feature is turned on for that repository, under the settings menu. This allows you to host files under your GitHub account.  You could use the github.com web interface to upload each file individually, however I recommended you take time at some point in your career to gain familiarity with the workflow of using git commands from your machine terminal. Upload the images and html files to that repo.   If set up properly you should be able to access your website from http://username.github.io  Static Site Generators #  Static sites do not have a database backend, \u0026ldquo;data\u0026rdquo; is stored in text files. Data is used loosely here to mean contents of the site. Text files can often imply that they are markdown formatted files.\nIn order to translate text files into a website in a streamlined manner, you need some sort of tool to generate that website for you. This tool is called a static site generator. There are many Open Source static site generators available to choose from that go by different names. Some are produced in certain programming languages. They tend to require using the command line interface (CLI).\nBelow describes a couple of options.\nUsing Jekyll Static Site Generator #  Github Pages recognizes files that are formatted to the Jekyll Static Site Generated fraemwork. Jekyll (https://jekyllrb.com/) is written in the Ruby programming language, it convers text files in markdown format into HTML pages.\nStatic HTML pages means that it\u0026rsquo;s an HTML page that doesn\u0026rsquo;t change when you view it across different timestaps. As in, static is not a script generated page. The contents do not change because you pull data from a database. A page like that would be considered dynamic because the contents can change.\nGuides to using Jekyll #  The guides and tutorials for using Jekyll are easily found through your nearest search engine. These are some liks:\n https://jekyllrb.com/docs/github-pages/ Building a static website with Jekyll and GitHub Pages https://programminghistorian.org/en/lessons/building-static-sites-with-jekyll-github-pages  Using Hugo Static Site Generator #  The best reference material is the official documentation at https://gohugo.io\nOnce you have Hugo installed, make sure your files are organized in their proposed directory structure. Find a theme, configure your Hugo website.\nOrg-mode with Hugo #  This site is generated from the GNU Emacs program under the Org Mode. In order to use both pieces, you need to use one more open source plugin called ox-hugo\nThe contents are contained in *.org files instead of *.markdown or *.txt\nReferences #  Intro to HTML/CSS #   HTML Specifications https://html.spec.whatwg.org/ CSS Specifications https://www.w3.org/Style/CSS/specs.en.html Intro to HTML/CSS: Making webpages Khan Academy. https://www.khanacademy.org/computing/computer-programming/html-css Starting with HTML + CSS tutorial by W3C Web Design \u0026amp; Development I https://www.washington.edu/accessit/webdesign/student/lessons.htm Codecademy: Introduction to HTML https://www.codecademy.com/learn/learn-html Interactive HTML tutorial https://www.learn-html.org/  Tutorials and Guides on deploying to GitHub Pages #   GitHub’s 10 minute read guide https://guides.github.com/features/pages/ GitHub Pages Basics https://help.github.com/categories/github-pages-basics/ Khan Academy’s tutorial https://www.khanacademy.org/computing/computer-programming/html-css/web-development-tools/a/hosting-your-website-on-github Thinkful’s tutorial https://www.thinkful.com/learn/a-guide-to-using-github-pages/ Build a Web Portfolio from Scratch https://dannguyen.github.io/github-for-portfolios/ Set Up Your Portfolio Website in Less Than 10 Minutes with Github Pages https://blog.usejournal.com/set-up-your-portfolio-website-in-less-than-10-minutes-with-github-pages-d0efa8ff56fd The Beginners Guide to Github Pages https://www.ostraining.com/blog/coding/github-pages/  "});index.add({'id':12,'href':'/Version-Control/versioncontrol/','title':"Version Control Systems",'section':"Version Control",'content':"Git #  Version control systems are used in managing revision control of project artifacts, and maintaining a history of changes to each artifact. Artifacts can include documents, source code, and much more.\nMotivations for Source Version Control\n Keeping track of code Storing versions of code changes Restoring previous versions Reviewing work history Collaborating in a group Backup There are two main approaches to version control management systems. That is, they can either be centralized, or decentralized repositories. This page covers Git is a decentralized system.  Terminology #  Git vs GitHub #  Git — The version control tool that GitHub is built on top of. You do not need GitHub to use Git. You can install git to your machine to use locally.\nGitHub is a hosting service using git the open source revision control system. Github’s service allows you to share your code with the world, and also has several other collaboration features.\nCommon Git Commands #  Some common workflow steps\n   Command Description     git add puts changes to the stage   git commit logs the staged   git push origin master uploads the local master branch to server    Other common commands\n   Command Description     git pull downloads latest version from server   git fetch checks for changes but doesn\u0026rsquo;t download it   git clone \u0026lt;address\u0026gt; copies a server verion to local machine   git remote -v shows the server address    Workspace and Commits #   Workspace - this is where you have files you’re editing in a folder Stage - this is where you put files or selected lines into an area to be given a commit message Commit Log - a history of committed changes.  Slides #  \r\rWorkflow for \u0026ldquo;syncing\u0026rdquo; your local and remote repos #  The first time you copy from the server, you are cloning the repository. Once you have a local copy, getting more updates is considered a pull.\nWhen you make edits on your local machine, you save snapshots or revisions to your commit log. When you\u0026rsquo;re done for the day, you can push or upload changes back to ther remote.\n  Suggested reading #    Read Chapters 1-2 of the git book: https://git-scm.com/book/en/v2\n  Creating a new repository on GitHub https://help.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-new-repository\n  https://learngitbranching.js.org/\n  "});index.add({'id':13,'href':'/guides/jcf/','title':"Java Collections Framework",'section':"Guides",'content':"Introduction #  This description is taken straight from Oracle\u0026rsquo;s Java Documentation page.\n The Java platform includes a collections framework. A collection is an object that represents a group of objects (such as the classic Vector class). A collections framework is a unified architecture for representing and manipulating collections, enabling collections to be manipulated independently of implementation details.\n Object-Oriented Fundamentals #  It would be helpful to remember that because is using the Java programming language, which is an object oriented programming language, these collections use the data abstraction concepts such as inheritance to make it possible to be used.\nThese collections are interfaces. In the Java language, interfaces come with certain rules of how it can be used. In order to inherit (or use an interface), you would use the keyword implement and you can do this as many times as your program needs. You can inherit if you\u0026rsquo;d like to define a certain object to have the properties of any interface.\nYou can also use one of the collections directly by invoking it, such as ArrayList a = new ArryList();\nCollections Available #  The available implementations are described in the Java Documentation\nThe way to read the table below\u0026hellip; note that this table comes directly from the Java documentation page.\nThe first column describes the type of Java interface. The first row describes the possible data structures available. The cells with both row and column indicate the collection that has traits of both the column and row.\n   Interface HashTable Resizable Array Balanced Tree Linked List Hash+LL     Set HashSet  TreeSet  LinkedHashSet   List  ArrayList  Linked List    Deque  ArrayDeque  Linked List    Map HashMap  TreeMap  LinkedHashMap    Set, List, Map, etc #  There are some extra keywords that Java uses that are important to know when using the Java Collections Framework.\n     Interface Duplicates Allowed? Null Values Allowed? Insertion Order preserved? Iterator Data Structure     List Yes Yes, Multiple null values allwed Yes Iterator, ListIterator Array   Set No Yes but only once No Iterator Underlying Map Implementations   Map Not for keys Yes, but only once for keys No Through keyset, value and entry set Hashing Techniques    Using Collections framework #  Section to be filled with examples\nSlides #  \r\rReferences #   The Java Collections Framework https://docs.oracle.com/javase/8/docs/technotes/guides/collections/ The Java Tutorials: Collections https://docs.oracle.com/javase/tutorial/collections/index.html  "});index.add({'id':14,'href':'/guides/java/','title':"Java 8",'section':"Guides",'content':"1 Intro #  The CIS department at Brooklyn College officially supports Java 8. This means that Java courses are taught adhering to this version. Using later versions such as Java 11 is perfectly find for most instances, there may be some minor differences with certain classes and methods or certain version specific-quirks.\nThe best thing to do is to keep documentation links handy.\nHelpful links #  These are useful links to reference.\nThe Java Tutorials for JDK 8 #  https://docs.oracle.com/javase/tutorial/index.html\nJava SE 8 Documenatation #  https://docs.oracle.com/javase/8/\nJava SE 8 API #  https://docs.oracle.com/javase/8/docs/api/index.html\nJava Code Visualizer #  http://www.pythontutor.com/java.html#mode=edit\nConcepts #  \r Variables  \r Primitive Data Types  \r Operators  \r Expressions, Statements, and Blocks  \r Control Flow Statements  \r Objects \u0026amp; Classes  \r Arrays  2 Compiling Java on Command Line #  To compile Java source code on the command line, it is with this command where Main.java is your filename.\njavac Main.java followed by running the executable generated with\njava Main 2.1 BC Students can use the WEB Lab Server to compile and run Java code #  Use a terminal friendly app to connect to the server via ssh. A sample command is as follows:\nssh username@hostname After entering your password, create a directory for your assignment, such as mkdir folder1 and then you can use a command line such as vim, emacs, or nano to edit the file.\n2.1.1 You can get your linux server account information from the W.E.B. Computing lab #  You can email the Linux Administrator, Raymond Patitucci or visit their locatio nat\nFirst floor, West End Building P: 718.951.5787\n3 Java Books and other resources #  3.0.1 Teach Yourself Java in 21 Minutes #  https://fileadmin.cs.lth.se/cs/Education/EDA040/common/java21.pdf\n3.0.2 Java4Kids #  https://yfain.github.io/Java4Kids/\n4 Lecture Slides #    Java Review \r\r  Two Dimensional Arrays \r\r  "});index.add({'id':15,'href':'/Version-Control/filenames/','title':"File naming conventions",'section':"Version Control",'content':"Introduction #  In the day to day work of programming, one often finds that a large fraction of time is spent looking for certain files. One of the wise adages with managing an assortment of files is to provide an organization scheme to make it easier to find what you need again. It not only helps you as the maintainer, but also helps your reader(s)** and collaborator(s) as well. This is a good habit to devleop before you find yourself managing hundreds of files.\nMotivations for naming files well #    It is more efficient to name your files correct such that it\u0026rsquo;s easier to find.\n  With the correct file extentions it is easier to collaborate with another programmer.\n  Organizing your directory #  A developer also considerrs file organization and directory naming schemes as well. There\u0026rsquo;s no industry standard for this, just an organization level (if you join a team with a style guide), however there tends to be some common patterns to follow.\nWhen you have a lot of tiles in your project directory, it is common to start thinking about the organization of contents.\nThe scheme itself can depend on the type of project. For example, if you\u0026rsquo;re working on a web application you might split into layers such as the back-end from front-end features.\nCommon File extensions #     Language File Extension Example Rules \u0026amp; Conventions     Java .java Main.java - File name must match the public class defined in the file\n- Usually CamelCase   C++ .cpp main.cpp - C++ Programming File Organization1   Python .py main.py - Often lowercased\n- Pep8 Style Guidelines2   Scheme .scm main.scm - Guile Scheme Manual\n- §6.18.5 Compiling Scheme Code3   Markdown .md, .markdown foo.md - Markdown Syntax4   HTML .htm, .html index.html - Hypertext Markup Language\n- Include doctype   CSS .css style.css - Cascading Style Sheets   XML .xml pom.xml - Extensible Markup Language   JavaScript .js script.js    Haskell .hs Main.hs    Shell Script .sh build.sh - add a shebang at the the top, #!/bin/sh    Common Directory Names #   /src - for your packages \u0026amp; classes /test - for unit tests /docs - for documentation, generated and manually edited /lib - 3rd party libraries /etc - unrelated stuff /bin (or /classes) - compiled classes, output of your compile /dist - for distribution packages, hopefully auto generated by a build system  from https://stackoverflow.com/a/8594\nIgnoring files with your VCS repository #  If you\u0026rsquo;re using Git you can specify a .gitignore file that contains a list of filenames to ignore\n https://www.atlassian.com/git/tutorials/saving-changes/gitignore https://git-scm.com/docs/gitignore  —\n  C++ Programming/Programming Languages/C++/Code/File Organization. (2020, April 16). Wikibooks, The Free Textbook Project. from https://en.wikibooks.org/w/index.php?title=C%2B%2B%5FProgramming/Programming%5FLanguages/C%2B%2B/Code/File%5FOrganization\u0026amp;oldid=3676078. \u0026#x21a9;\u0026#xfe0e;\n PEP 8 – Style Guide for Python Code https://www.python.org/dev/peps/pep-0008/ \u0026#x21a9;\u0026#xfe0e;\n Guile Reference Manual https://www.gnu.org/software/guile/manual/guile.pdf#page=406\u0026amp;zoom=100,0,96 \u0026#x21a9;\u0026#xfe0e;\n Markdown: Syntax https://daringfireball.net/projects/markdown/syntax [1]: https://libraries.mit.edu/data-management/store/organize/ [2]: https://docs.python-guide.org/writing/structure/ [3]: http://opensource.guide/starting-a-project/#launching-your-own-open-source-project [4]: https://medium.com/@msandin/strategies-for-organizing-code-2c9d690b6f33 \u0026#x21a9;\u0026#xfe0e;\n   "});index.add({'id':16,'href':'/page/','title':"Index",'section':"Getting Started Guides",'content':"Some of the pages in this section include:\n Java SDK 8 Java Collections Framework Regular Expressions Build Tools (Apache Maven) Version Control (Git) GitHub Pages Travis CI Markdown Files (Mastering Markdown, GitHub Flavored Markdown Spec)  "});})();