Tools and Frameworks - Sound-Mob/peripheral-brain GitHub Wiki

Server

  • Node

  • what is a server? In computer science, a server is a a software program, or the computer on which that program runs, that provides a specific kind of service to client software running on the same computer or other computers on a network. ... It is a major element of modern operating system and network design.
  • what is Node? : Node is an open source cross platform javascript runtime environment designed to execute code outside of a browser.
  • Streams : A node stream is a method of transferring large amounts of data on mobile devices or websites by breaking the file or data down into manageable chunks.
  • How does Node compare to other server-side technologies : NodeJS is known for event driven I/O server-side Javascript environments based on Chrome's V8 Engine. It's advantages vs other server-side technologies? First, it's speed, it uses Javascript on the back end and run's on google's V8 engine which compiles the Javascript directly into machine code making it blazingly fast. Second, NPM modules are an ever increasing source of tools and modules built specifically to work with Node. Third, Node's event driven architecture is useful for real-time applications, ie. chat and games. Since both the front end and back end are written in Javascript, it will sync faster. Fourth, productivity will see an increase since merging the front-end and back-end into a single entity will be efficient. According to a report from PayPal, since switching to NodeJS, they estimated a 2x increase in developer productivity.
  • why Node is useful, why it might suck: Please read the above answer, NodeJS's strengths are also its weaknesses. Since it is single threaded it will be hard to take advantage of better hardware ie. multiple cores/processors. The asynchronous nature of NodeJS which is a great strength can also be considered a weakness in the context of CPU intensive tasks that would slow down the process.
  • Useful packages: Useful packages for NodeJS? Most of these will be found on NPM, this is a strength that node has because there are many developers using it, there will be many developers testing, troubleshooting and group thinking packages that can make everyone's lives easier. In order to find the best packages simply go to NPM and navigate to the highest rated packages, or most downloaded packages and do your own research to determine the if you can use it for your project.
  • Node-inspector: According to node-inspector's github it is a debugger interface for Node.js applications that uses the Blink Developer Tools, this is something we will not be using according to the overview on github.
    Since version 6.3, Node.js provides a built-in DevTools-based debugger which mostly deprecates Node Inspector, see e.g. this blog post to get started. The built-in debugger is developed directly by the V8/Chromium team and provides certain advanced features (e.g. long/async stack traces) that are too difficult to implement in Node Inspector.
  • Nodemon: Nodemon is a tool used to launch node, simply npm install nodemon and you now have a tool that will relaunch your node server when changes are made. The official description of this package is
    nodemon is a tool that helps develop node.js based applications by automatically restarting the node application when file changes in the directory are detected. nodemon does not require any additional changes to your code or method of development. nodemon is a replacement wrapper for node, to use nodemon replace the word node on the command line when executing your script.
  • Express: According to expressjs.com Express is a fast, unopinionated, minimalist web framework for Node.JS
  • vs. HAPI, Koa, and others: All three of these frameworks have a lot in common, they can create a server with just a few lines of code and make creating a REST API very simple. Here is a quick summary taken from this article comparing the three.
    Express is definitely the most popular and most recognized framework of the three. It is almost a reaction to first create a server using Express when starting new development on an application but hopefully now there might be some thought involved whether to use Koa or Hapi as an alternative. Koa shows real promise for the future and is ahead of the pack with embracing ES6 and the web component ideology that the web development community is moving towards. Hapi should be the first consideration for large teams and large projects. It pushes for configuration over code which almost always benefits teams and the re-usability most teams strive towards.
  • Middleware: According to ExpressJS , Middleware functions are functions that have access to the request object (req), the response object (res), and the next middleware function in the application’s request-response cycle. The next middleware function is commonly denoted by a variable named next.
  • Router: Routing refers to how an application’s endpoints (URIs) respond to client requests.
  • Client

  • jQuery: jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers. With a combination of versatility and extensibility, jQuery has changed the way that millions of people write JavaScript. jquery.com
  • D3: According to d3js.org D3.js is a JavaScript library for manipulating documents based on data. D3 helps you bring data to life using HTML, SVG, and CSS. D3’s emphasis on web standards gives you the full capabilities of modern browsers without tying yourself to a proprietary framework, combining powerful visualization components and a data-driven approach to DOM manipulation.
    Their introduction states
    D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. For example, you can use D3 to generate an HTML table from an array of numbers. Or, use the same data to create an interactive SVG bar chart with smooth transitions and interaction.

    D3 is not a monolithic framework that seeks to provide every conceivable feature. Instead, D3 solves the crux of the problem: efficient manipulation of documents based on data. This avoids proprietary representation and affords extraordinary flexibility, exposing the full capabilities of web standards such as HTML, SVG, and CSS. With minimal overhead, D3 is extremely fast, supporting large datasets and dynamic behaviors for interaction and animation. D3’s functional style allows code reuse through a diverse collection of official and community-developed modules.

  • React

  • what is React?: React is a javascript library used for building user interfaces. It is maintained by Facebook and a community of developers and companies. It can be used as a base in the development of single-page or mobile applications.
  • compare React vs Angular: This is an extremely lengthy topic, here instead is a very recent article detailing the differences between Angular and React.
  • React Native: According to React Native React Native lets you build mobile apps using only JavaScript. It uses the same design as React, letting you compose a rich mobile UI from declarative components. With React Native, you don't build a "mobile web app", an "HTML5 app", or a "hybrid app". You build a real mobile app that's indistinguishable from an app built using Objective-C or Java. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.
  • JSX: JSX is a syntax extension to Javascript. It is recommended to use JSX with react to describe what the UI should look like. Although it might look like a template language, it comes with the full power of Javascript. JSX produces React Elements. JSX
  • Angular

  • What Is Angular?: Angular is a platform that makes it easy to build applications with the web. Angular combines declarative templates, dependency injection, end to end tooling, and integrated best practices to solve development challenges. Angular empowers developers to build applications that live on the web, mobile, or the desktop
  • Ionic: The open source Ionic Framework features a rich library of front-end building blocks and UI components that make it easy to design beautiful, high-performance mobile and Progressive Web Apps using web tech like HTML, CSS and Javascript.
  • compare React vs Angular: This is an extremely lengthy topic, here instead is a very recent article detailing the differences between Angular and React.
  • Angular 1.x vs Angular 2: The biggest change from Angular1 to Angular 2++ is typescript, which is a superset of Javascript, giving angular a compile phase to help catch errors before they ever get into run time.
  • Typescript: Superset of Javascript, primarily provides optional static typing, classes and interfaces. Catch errors as you TYPE!
  • Backbone

  • what is Backbone?: According to BackboneJS.org Backbone gives structure to web applications by providing models with key-value bindings and custom events, collections with a rich API of enumerable functions, views with declaritive event handling, and connects it all to your existing API over a restful JSON interface.
  • why Backbone is useful, why it might suck: Backbone applications take up a big portion of the existing internet, new developers should touch backbone at least to familiarize themselves with how it works and why things have changed and moved away from it.
  • Ember

  • what is Ember?: EmberJS is a framework used by companies like Microsoft, Netflix, Heroku. It is an open-source web framework based on the MVVM pattern. It allows developers to create SAP web applications by incorporating common idioms and best practices into the framework.
  • why Ember is useful, why it might suck Here is a list of it's pros and cons. Ember v React
  • Code management

  • git: is a version-control system for tracking changes in computer files and coordinating work on those files among multiple people. It is primarily used for source-code management in software development, but it can be used to keep track of changes in any set of files.
  • git basics: Here are the Git Basics according to Git.
  • git gotchas: Here are a list of common git problems according to codementor.io
  • why do people refer to "the SHA-1"?: SHA-1 is a cryptographic hash function which takes an input and produces a 160 bit hash value known as a message digest, typically rendered as a hexadecimal number, 40 digits long. SHA-1 has not been considered secure since 2005. In the context of Git Git stores all data in “objects.” Each object is named after the SHA-1 hash of its contents, and objects refer to each other by their SHA-1 hashes. If two distinct objects have the same hash, this is known as a collision. Git can only store one half of the colliding pair, and when following a link from one object to the colliding hash name, it can’t know which object the name was meant to point to.
    Two objects colliding accidentally is exceedingly unlikely. If you had five million programmers each generating one commit per second, your chances of generating a single accidental collision before the Sun turns into a red giant and engulfs the Earth is about 50%.

    and here is a link to the github blog that explains what happened in March 2017.
    SHA-1 collision detection on GitHub.com
  • merge vs rebase debate. where do you stand?: Currently, the debate between merge and rebase is very controversial. merge vs rebase
  • GitHub: GitHub Inc. is a web-based hosting service for version control using Git. It is mostly used for computer code. It offers all of the distributed version control and source code management functionality of Git as well as adding its own features.
  • Package management

  • apt-get
  • brew
  • npm
  • Dependency management

  • Webpack
  • Browserify
  • nvm
  • Deployment

  • AWS
  • Digital Ocean
  • Heroku
  • Concepts


  • Problem-solving


  • problem decomposition
  • Case-based reasoning
  • Back-of-the-envelope
  • "examplify"
  • pattern-matching
  • simplify then generalize
  • Base case, then inductive reasoning
  • How to apply scientific method to programming?
  • Programming paradigms

  • imperative vs. declarative
  • object-oriented
  • functional programming
  • functors / monads
  • higher-order functions
  • lambda expressions
  • Reactive programming
  • recursion

  • dynamic programming / memoization
  • Limiting the call stack
  • System design

  • Client-server
  • Workers
  • Service-oriented architecture
  • Multi-tier architecture
  • MVC
  • MV* (pronounced "MV-star")
  • asynchronous programming
  • callback hell
  • multi-threading
  • race condition
  • Pub/sub
  • Middleware
  • loose coupling / separation of concerns
  • ReST
  • HTTP "verbs"
  • CRUD
  • what should you consider when you design an API?
  • DRY (related to "single source of truth")
  • single-responsibility principle
  • idempotency
  • cohesion versus coupling
  • statelessness
  • "shared-nothing" architecture
  • abstraction
  • contracts (interfaces) between components
  • modules
  • classes
  • duck typing
  • data-hiding
  • interface versus implementation
  • Networking

  • TCP/IP
  • TCP vs. UDP
  • ports
  • socket
  • WebRTC
  • DNS
  • HTTP
  • HTTPS
  • hostnames
  • domains and subdomains
  • how email works
  • proxy
  • reverse proxy
  • load balancer
  • MIME types
  • URI
  • CDN
  • DDOS
  • standards/RFC's
  • what really happens when you upload a file?
  • Operationalizing / Productionizing your system

  • Scaling
  • vertical scaling
  • horizontal scaling
  • sharding
  • caching
  • Database replication
  • Monitoring
  • Configuration management
  • Branch management
  • Project management

  • Release management
  • Agile vs waterfall
  • MVP
  • Testing and writing testable code

  • Try / Catch
  • Black-box vs white-box
  • Regression testing
  • Unit testing vs integration testing
  • Smoke-testing vs end-to-end testing
  • Testing libraries
  • selenium
  • Debugging with Chrome Dev Tools
  • mocha, chai, etc
  • can you use these on the fly? no harness or setup provided...
  • Continuous integration
  • online CI services
  • Jenkins
  • Mocking & Stubbing
  • How testing improves system design
  • Security

  • Hashing vs encryption
  • Authentication vs authorization
  • Common encryption ciphers
  • Public-Private Key Encryption
  • oAuth
  • Same-origin policy
  • XSS
  • CORS
  • Data structures

  • Linked lists
  • Strings
  • Arrays
  • Trees
  • Binary search tree
  • Trie
  • Heap
  • Stacks
  • Queues
  • FIFO vs LIFO
  • Dequeue
  • Graphs
  • Hash tables
  • Algorithms

  • Big-O
  • Search
  • Sort
  • Bubble sort
  • Merge sort
  • Insertion sort
  • Quick sort
  • Radix sort
  • Time and Space Complexity (Big O notation)
  • How computers work

  • Memory
  • Speed of different data storage options
  • What does the OS really do when your program instantiates an object?
  • Memory management
  • What does "swapping to disk" mean? Why would you care?
  • Garbage collecting
  • Index / Search
  • Binary stuff
  • Bit-twiddling
  • What are "floating point errors"?
  • Code interpretation and compilation
  • Call stacks
  • What is a stack overflow?
  • common unix command line utilities
  • How does the internet work
  • What is the 'full stack'?
  • What is a cookie?
⚠️ **GitHub.com Fallback** ⚠️