Giter VIP home page Giter VIP logo

standards-and-practices's Introduction

Standards and Practices

Reason for Repo

  • Set and maintain standards for Bitwise projects.
  • Have a central repository where other Bitwise members can share knowledge of best practices.
  • Have a reference point to start a new project or answer questions on different topics.

Click Here to contribute!

Code of Conduct

  1. No cussing; we're beyond that.
  2. Keep the requests and issues professional and relevant to the work we're doing at Bitwise.
  3. Treat others with the same respect you would if you were talking to them in person. Don't be a jerk.
  4. Have fun and share your knowledge!

New to Bitwise?

Here's what we expect you to know before you write any code:

  • Please read all the links included:
  • Take a look at our Guidebook for all your (mostly) non-code related needs!

Get set up with GitHub

Git

  • Gitflow workflow
    • Maintain branches for main and development
    • Branch off development for new features
    • Request reviews on your Pull Requests to development
    • Merge reviewed code into development
    • When milestone is complete branch off development into a new release branch
    • QA the release branch, once stable merge release branch into main (and tag it) and also merge back into development
    • For any hot fixes, branch off main into a new hotfix branch, fix issue, then merge fixes back into main (and tag it) and also merge into development
    • Gitflow diagram Credit: https://nvie.com/posts/a-successful-git-branching-model/
  • Branching at Bitwise
  • Commit Messages at Bitwise

Code Versioning

Project Setup

Code Review

Machine Setup

Mac: Install:
Windows:
  • (Optional) Install a third-party antivirus product of your choice.
  • Activate Windows using a valid license key. If you don't already have one, ask HR about getting one.
  • Install all available Microsoft updates, restarting your computer as necessary.
  • Open PowerShell with Administrator privileges. Run Set-ExecutionPolicy RemoteSigned. Type Y and press Enter to confirm that you want to make this change. (If you don't perform this step, you will not be able to run any PowerShell scripts on your system.)
  • Install the Chocolatey package manager for Windows.
  • Reopen PowerShell with Administrator privileges, if necessary. Run the install-apps-via-chocolatey.ps1 script to install a number of programs you will probably need. (Feel free to peek at this file's contents to see what it contains.)
  • (Optional) From the same PowerShell window, run the command oosu10. Here, you can easily configure several settings to have Windows respect your privacy a little more. Just make sure you understand what each setting does before you change it.
  • After running oosu10, restart Windows (if applicable).
  • Install Android Studio
  • Install the regular version of Visual Studio (as opposed to Visual Studio Code). Visual Studio Community Edition may be sufficient, or you may need a paid license for Visual Studio Professional, Enterprise, or similar. Either way, ask your PM (Project Manager).
  • You may wish to use the Windows Subsystem for Linux.
  • Ask your Project Manager if you need to install anything else.

Using Chocolatey has several advantages:

  1. You can install most of the software you need just by running a single script.
  2. You can update all of this software later by running choco upgrade all as Administrator.
  3. Chocolatey will automatically skip installing browser toolbars and junk like that.

Account Setup

You will need to schedule time with Greg Goforth, Corey Schuman, Chris Hawkins, or Jody Hicks to gain access to the following:

AWS Account:
  • AWS is our primary platform for deployment (staging and production) so you should familiarize yourself with their JavaScript SDK and whitepapers.
Bitwise Standards & Practices Meetings:
Meetings are now split into two types:
  • Presentations: Twice a month the software development teams in the Bitwise ecosystem meet on every other Wednesday from 4:00 pm - 5:00 pm PST to share their accomplishments, horror stories, workflow, and lessons learned with the rest of the BW community. While these meetings will generally be developer-focused, we invite anyone in the BW family to drop in and participate. You are highly encouraged to participate actively by leading a meeting on a topic of your choice. Ask Sonia Rohani, or Joel (Gyuhun Lee) to add you to the GCal event so that you get reminders and emails.
  • Workshops: Once a month we will do a deep dive into a topic of interest for our workflow and/or processes. These will typically take longer than 1 hour and will be a classroom/workshop setting. One developer will lead the workshop and the goal will be to produce developers who are proficient at a skill or process that will help us in our work.
Frontend Masters:
  • Bitwise main online teaching tool is Frontend Masters. They have courses on all of the platforms we employ at Bitwise, and you should take advantage of as many as possible.
WebStorm:
Photoshop:
  • If your job entails design work, you will need to get access to the Bitwise Adobe Photoshop license.

Need Help?

Getting stuck is a natural part of development and happens to the best of us. It's better to reach out than to stay silent, and we encourage you to do so. If you find yourself stuck on a task for more than 45 minutes, here are a couple of places to get help:

Problem Solving:

Try to use these suggested ways to better your problem solving skills when stuck on tasks. How to think like a programmer โ€” lessons in problem solving

Communication Channels:
  1. Your team channel - When you start a project, you will be added to a private team channel. Feel free to ask your questions there! Your team lead may be able to help you through your blocker.
  2. bwtc-stackoverflow - Did you know we have our own Stack Overflow? Take a look, it has some great questions and answers.
  3. bwtc-technical-discussions - Great place for technical questions that involve some code.

Problem Solving

While reaching out for help is very important when getting stuck, developers are expected to try and problem solve before seeking help else where. A good read on how to problem solve is listed below

Problem Solving

Contributing to Bitwise

You are expected to contribute something to our processes. You can do this in many different ways, such as leading a BW Developer Connect meeting, writing up a markdown sheet for this repository on a topic you are passionate about, leading a workshop, or posting discussion topics in Bitwise's #bwtc-technical-discussions channel.

Click Here to start contributing.

standards-and-practices's People

Contributors

amerikan avatar aramayiso avatar b-cavazos avatar b12howard avatar basim-elayan avatar carlosvargas avatar cmcoatney avatar cobyfielding avatar coreyshuman avatar dcedano avatar dependabot[bot] avatar dmpayton avatar dunlavy avatar flavioshift3 avatar fleury14 avatar hstamps-stack avatar jeffreyriosjr avatar karvel avatar kmausolf avatar linogomez avatar markrogers9109 avatar meru20 avatar michaelachrisco avatar mwallert avatar mxrcochxvez avatar stephengtuggy avatar thomwise avatar tomalperin avatar vperezma avatar zbyte64 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

standards-and-practices's Issues

Add Laravel

Let's add a folder and specs for Laravel and php in the /server-side/frameworks folder

Create a standard email field verification Regular Expression (or find and verify one)

https://en.wikipedia.org/wiki/Email_address

There are some crazy email addresses allowed in RFC 5321 and RFC 5322. Here is the above articles set of rules, and examples of valid and invalid addresses.

Local-part

The local-part of the email address may use any of these [[ASCII]] characters:

  • uppercase and lowercase [[Basic Latin (Unicode block)|Latin]] letters A to Z and a to z;

  • digits 0 to 9;

  • special characters !#$%&'*+-/=?^_`{|}~;

  • dot ., provided that it is not the first or last character unless quoted, and provided also that it does not appear consecutively unless quoted (e.g. [email protected] is not allowed but "John..Doe"@example.com is allowed);

Note that some mail servers wildcard local parts, typically the characters following a plus and less often the characters following a minus, so fred+bah@domain and fred+foo@domain might end up in the same inbox as fred+@Domain or even as fred@domain. This can be useful for tagging emails for sorting, see below, and for spam control. Braces { and } are also used in that fashion, although less often.

  • space and "(),:;<>@[] characters are allowed with restrictions (they are only allowed inside a quoted string, as described in the paragraph below, and in addition, a backslash or double-quote must be preceded by a backslash);
  • comments are allowed with parentheses at either end of the local-part; e.g. john.smith(comment)@example.com and (comment)[email protected] are both equivalent to [email protected].

In addition to the above ASCII characters, international characters above U+007F, encoded as [[UTF-8]], are permitted by RFC 6531, though even mail systems that support SMTPUTF8 and 8BITMIME may restrict which characters to use when assigning local-parts.

Domain

The [[domain name]] part of an email address has to conform to strict guidelines: it must match the requirements for a [[hostname]], a list of dot-separated [[DNS]] labels, each label being limited to a length of 63 characters and consisting of:{{rp|ยง2}}

  • uppercase and lowercase [[Basic Latin (Unicode block)|Latin]] letters A to Z and a to z;
  • digits 0 to 9, provided that top-level domain names are not all-numeric;
  • hyphen -, provided that it is not the first or last character.
    This rule is known as the ''LDH rule'' (letters, digits, hyphen). In addition, the domain may be an [[IP address]] literal, surrounded by square brackets [], such as jsmith@[192.168.2.1] or jsmith@[IPv6:2001:db8::1], although this is rarely seen except in [[email spam]]. [[Internationalized domain name]]s (which are encoded to comply with the requirements for a [[hostname]]) allow for presentation of non-ASCII domains. In mail systems compliant with RFC 6531 and RFC 6532 an email address may be encoded as [[UTF-8]], both a local-part as well as a domain name.

Comments are allowed in the domain as well as in the local-part; for example, john.smith@(comment)example.com and [email protected](comment) are equivalent to [email protected].

Examples

Valid email addresses

Invalid email addresses

Windows Setup

Add to root README.md all packages/programs/etc to install for new Shift3 Windows users.

Apple Deployment Docs

Add documentation for:

  • Deploying to Test Flight for development
  • Setting up a Developer account for Apple
  • Setting up an iTunes Connect account
  • Creating provisioning Profiles and certificates
  • Deploying to App Store for production
  • Registering a physical device with Xcode for local development

Update MongoDB to Atlas

Update the docs for MongoDB to utilize Atlas and update security to reflect current versions

Fix links

Some links are broken so let;'s make sure they work!

Add Firebase to list of dbs

Firebase is a schema-less database, created and maintained by Google. It runs Mongo on the backend, but that's not how we interface with it. It's really nice for small applications to medium applications, but doesn't scale all that well. Thanks, Mongo.

set up ESLint for organization

To maintain code uniformity across multiple projects and avoid common Javascript errors while working, ESLint is an invaluable tool. The tooling and support built around the open-source checker is some of the best in the JS community.

Add Docker Documentation

I'm not sure how commonly Docker is being used in current development projects at Shift3, but it seems like it's picking up steam. I know the current cohort is planning on using it for the credit union app. It also seems like there's only a handful of developers in the building that have a good grasp on it.

Docker's own documentation isn't very good, so this seems like it could be beneficial for everyone. Any thoughts? I wouldn't mind doing a first draft of some common Docker commands and Docker file setup if you like.

Add links to Frameworks

In the server-side/frameworks/Node and server-side/frameworks/python README.md files we need to link to the subfolders' README.md files.

Add Cloudfront set up script

I had written a script a few months ago that would set up the Cloudfront infrastructure needed to deploy an application (see #79). I'm creating this task so that I clean up the script and upload it to the repo.

Android Deployment

Add documentation for:

  • Cutting an APK for client testing
  • Setting up a Developer account for Google Play
  • Deploying to Google Play Store for production
  • Setting up Android Studio with physical devices and virtual devices

React Native

Add file structure for React Native and all it's component peices

Bring App Security Class content into this repo

Add documentation and resources from the application security class.

Topics:

  • Introduction to Secure Software Development Cycle
  • SQL Injection
  • MongoDb Query Injection
  • Cross Site Scripting (XSS)
  • Cross Site Request Forgery (CSRF)
  • Session hijacking / session replay
  • User Data Sanitization
  • Cross-Origin Resource Sharing (CORS)
  • Content Security Policy (CSP)
  • Passwords and Validation
  • Authorization (tokens, cookies, etc)
  • Authentication (User roles and permissions)
  • Cryptography (Encryption, Hashing, etc)
  • Error Handling
  • Auditing and Logging
  • Setting up SSL
  • Handling Sensitive Data

Tools:

  • Kali Linux
    • WPScan
    • nmap
  • Wireshark
  • Postman
  • Postico

Add guide for Testflight and Android internal, alpha, and beta testing

Getting an app setup in Android or Apple for internal and external testing takes Herculean effort. We should document this process on each platform. Screenshots would definitely be a plus, given how difficult both developer consoles are to navigate. Finally, adding a place for gotchas would be great (such as subscriptions not being available in iOS for testing if the client hasn't signed their tax agreement yet).

Proposed new process standard for workarounds in code

I would like to propose a new Shift3 rule: If you add code that is a workaround, you should include a comment which explains why it's there, and links to an official Github issue.

We have an example in our Normalize app, where navigation doesn't work correctly when simultaneously closing a modal window. Under this rule, all instances of the workaround would look something like this:

// This is a workaround for a navigation issue when closing a modal:
// https://github.com/NativeScript/nativescript-angular/issues/1380 
return setTimeout(() => Helpers.getRoute("badges", this.router), 50);

This will avoid confusion during code review and during future maintenance. This also documents the issue, so the workaround reasoning is not forgotten in the future.

add mobile browsers to client-side browser list

There's no doubt mobile navigation is a huge deal. Most of the time, there seems to be a lack of support, or perhaps more properly put, mobile browsers are having a hard time keeping up with modern technologies. Perhaps this could be a discussion of polyfills, frontend framework support, CSS attribute prefixing provided by caniuse, or even CSS variable support for that matter.

Add Search docs

How do we do search in our different servers/DBs? Let's add some docs!

  • Ryeker will take MongoDB

Angular spin up guide

We need a basic .md for:

  • Installing ng globally
  • Spin up Angular projects
  • Creating builds
  • Deploy to staging
  • Deploying to production

Add Vue to list of frontend frameworks

It works a lot like React, but feels about half the size, and works about half the size. It's a pretty popular framework to use with Laravel stacks.

Also, it's pronounced like "view", Micheal Wallert. Not like "Voo" ๐Ÿ˜

Facelift

Update front page to make repo more accessible. Refactor structure to make it more approachable.

root readme update

Hey everyone, I'd love to contribute to something open source like this, but in it's current state it's hard to know where to begin since I don't work for Bitwise/Shift3.

I'm thinking the root readme could be updated with a linked article on how to contribute to this repo specifically. A simplified version of Ryeker's contributing doc or Corey's current PR.

It should also have a section for how and when to submit issues, and maybe a brief code of conduct.

Finally, there's a few broken markdown styles that could be fixed. Spaces needed between hashtag and headers to display properly, and the markdown cheat sheet link can be shortened.

Write basic JS docs

In our repo we have a client-side/javascript doc that needs some contributions. Ideally we will link to the Google JS standards and all of us together will create a style guide for how we write JS.

Launch checklists

When delivering a site (or API) to a client there are a common set of things that should be gathered and checked: Various credentials or keys are needed to properly configure services before delivery, a test request to the site using the desired domain name before switching DNS, setting certain environment variables to production, etc.

Ideally we provide a documented template to be copied to an individual project.

add frameworks to server-side

I think it would be a great idea to drill down some backend frameworks that are not only modern, but also provide an education to further develop the skills of each developer. Some frameworks that come to mind...

Ruby

- Rails

Python

- Django

Node

- Hapi
- Express
- Koa
- MEAN

Anyone can get a Ruby education by building a small Jekyll site for a gh-pages. Django will be a sinch to learn, especially if taught by @dmpayton. Node, unfortunately offers many solutions, but are wonderful to learn, no doubt. Hapi is a framework I'm particularly fond of, and have worked with a buddy to develop our own simple REST API that is not only easy to extend, but has user auth built right in. Express is incredibly common to use. While I have my opinions against Express, it does prove to be a great framework for getting APIs up and running with little learning curve and extensive functionality, and is perfect for any team project, and I'm happy to use this on another project. Koa is an evolution of Express that uses generator functions for its middleware stack (see here). MEAN stacks, we teach in Geekwise, and is widely adopted. That's really all I can say about that.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.