diff --git a/.gitignore b/.gitignore index 1d74e21..54166b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ +# Miscelleaneous +.DS_Store + +# Editors .vscode/ diff --git a/README.md b/README.md index 903ba74..1264254 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,16 @@ -![AWESOME CHEATSHEETS LOGO](_images/awesome_cheatsheets_logo@2x.png) +[![AWESOME CHEATSHEETS LOGO](_design/cover_github@2x.png)](https://lecoupa.github.io/awesome-cheatsheets/) [![Awesome](https://awesome.re/badge.svg)](https://awesome.re) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/LeCoupa/awesome-cheatsheets/blob/master/LICENSE) +**WEBSITE DIRECTORY**: [Available here](https://lecoupa.github.io/awesome-cheatsheets/). + > šŸ“š Awesome cheatsheets for popular programming languages, frameworks and development tools. They include everything you should know in one single file. -> ā¤ļø **If you like this repository, [you can click here to tweet it and make it spread](https://ctt.ec/PHba4).** - - ## šŸ¤” Why Awesome-Cheatsheets? -I always make a cheatsheet when I want to improve my skills on a programming language, a framework or a development tool. [I started doing these kind of things a long time ago on Gist](https://gist.github.com/LeCoupa) To better keep track of the history and to let people contribute to them, I reorganized everything into this single repository. Most of the content is coming from official documentations and some books I have read. - -Feel free to browse each cheatsheet to learn new things and to keep them at hand when you forgot about one command. They have been designed to provide a quick way to assess your knowledge and to save you time. - - -## šŸ™ŒšŸ¼ How to Contribute? - -You are more than welcome to contribute and build your own cheatsheet for your favorite programming language, framework or development tool. Just submit changes via pull request and I will review them before merging. +I usually make a cheatsheet when I want to improve my skills on a programming language, a framework or a development tool. [I started doing these kind of things a long time ago on Gist](https://gist.github.com/LeCoupa). To better keep track of the history and to let people contribute, I reorganized all of them into this single repository. Most of the content is coming from official documentations and some books I have read. +Feel free to take a look. You might learn new things. They have been designed to provide a quick way to assess your knowledge and to save you time. ## šŸ“š Table of Contents @@ -28,17 +21,19 @@ You are more than welcome to contribute and build your own cheatsheet for your f #### Command line interface -* [Bash](languages/bash.sh) +- [Bash](languages/bash.sh) #### Imperative -* [PHP](languages/php.php) +- [C](languages/C.txt) +- [C#](languages/C%23.txt) +- [PHP](languages/php.php) #### Functional -* [JavaScript](languages/javascript.js) - +- [JavaScript](languages/javascript.js) + ### šŸ“¦ Backend @@ -47,15 +42,15 @@ You are more than welcome to contribute and build your own cheatsheet for your f #### Python -* [Django](backend/django.py) +- [Django](backend/django.py) #### Javascript - -* [Feathers.js](backend/feathers.js) -* [Moleculer](backend/moleculer.js) -* [Node.js](backend/node.js) - +- [Feathers.js](backend/feathers.js) +- [Moleculer](backend/moleculer.js) +- [Node.js](backend/node.js) +- [Sails.js](backend/sails.js) + ### 🌐 Frontend @@ -64,13 +59,16 @@ You are more than welcome to contribute and build your own cheatsheet for your f #### Basics -* [HTML5](frontend/html5.html) +- [HTML5](frontend/html5.html) #### Frameworks -* [Vue.js](frontend/vue.js) - - +- [React.js](frontend/react.js) +- [Vue.js](frontend/vue.js) +- [Ember.js](frontend/ember.js) +- [Angular (2+)](frontend/angular.js) +- [AngularJS](frontend/angularjs.js) + ### šŸ—ƒļø Databases @@ -79,9 +77,8 @@ You are more than welcome to contribute and build your own cheatsheet for your f #### NoSQL -* [Redis](databases/redis.sh) - - +- [Redis](databases/redis.sh) + ### šŸ”§ Tools @@ -90,27 +87,30 @@ You are more than welcome to contribute and build your own cheatsheet for your f #### Development -* [VIM](tools/vim.txt) -* [Xcode](tools/xcode.txt) +- [VIM](tools/vim.txt) +- [Xcode](tools/xcode.txt) #### Infrastructure -* [Docker](tools/docker.sh) -* [Kubernetes](tools/kubernetes.sh) -* [Nanobox Boxfile](tools/nanobox_boxfile.yml) -* [Nanobox CLI](tools/nanobox_cli.sh) - +- [Docker](tools/docker.sh) +- [Kubernetes](tools/kubernetes.sh) +- [Nanobox Boxfile](tools/nanobox_boxfile.yml) +- [Nanobox CLI](tools/nanobox_cli.sh) + +## šŸ™ŒšŸ¼ How to Contribute? + +You are more than welcome to contribute and build your own cheatsheet for your favorite programming language, framework or development tool. Just submit changes via pull request and I will review them before merging. ## šŸ™šŸ» Contribution +
- + - + @@ -118,6 +118,9 @@ You are more than welcome to contribute and build your own cheatsheet for your f + +
diff --git a/_design/Awesome Cheatsheets.sketch b/_design/Awesome Cheatsheets.sketch new file mode 100644 index 0000000..4a6444f Binary files /dev/null and b/_design/Awesome Cheatsheets.sketch differ diff --git a/_design/awesome_cheatsheets_logo.png b/_design/awesome_cheatsheets_logo.png new file mode 100644 index 0000000..b40d174 Binary files /dev/null and b/_design/awesome_cheatsheets_logo.png differ diff --git a/_design/awesome_cheatsheets_logo.psd b/_design/awesome_cheatsheets_logo.psd new file mode 100644 index 0000000..d00b5e2 Binary files /dev/null and b/_design/awesome_cheatsheets_logo.psd differ diff --git a/_design/awesome_cheatsheets_logo@2x.png b/_design/awesome_cheatsheets_logo@2x.png new file mode 100644 index 0000000..ef691c2 Binary files /dev/null and b/_design/awesome_cheatsheets_logo@2x.png differ diff --git a/_design/awesome_cheatsheets_logo@4x.png b/_design/awesome_cheatsheets_logo@4x.png new file mode 100644 index 0000000..e8c39e9 Binary files /dev/null and b/_design/awesome_cheatsheets_logo@4x.png differ diff --git a/_design/cover_github@2x.png b/_design/cover_github@2x.png new file mode 100644 index 0000000..970c5b3 Binary files /dev/null and b/_design/cover_github@2x.png differ diff --git a/_images/awesome_cheatsheets_logo.png b/_images/awesome_cheatsheets_logo.png deleted file mode 100644 index 33f33de..0000000 Binary files a/_images/awesome_cheatsheets_logo.png and /dev/null differ diff --git a/_images/awesome_cheatsheets_logo.psd b/_images/awesome_cheatsheets_logo.psd deleted file mode 100644 index 564a2db..0000000 Binary files a/_images/awesome_cheatsheets_logo.psd and /dev/null differ diff --git a/_images/awesome_cheatsheets_logo@2x.png b/_images/awesome_cheatsheets_logo@2x.png deleted file mode 100644 index 91d9a9e..0000000 Binary files a/_images/awesome_cheatsheets_logo@2x.png and /dev/null differ diff --git a/backend/feathers.js b/backend/feathers.js index fb72c45..c1cd63e 100644 --- a/backend/feathers.js +++ b/backend/feathers.js @@ -15,7 +15,7 @@ * ******************************************************************************************* */ -```bash +``` # Provides the ability to initialize new application instances npm install @feathersjs/feathers --save @@ -185,7 +185,7 @@ app.on('login', (payload, info) => {}) // sent by the authentication module and * ******************************************************************************************* */ -```bash +``` # Contains Express framework integrations npm install @feathersjs/express --save @@ -252,7 +252,7 @@ app.configure(primus(options, callback)) // sets up the Primus transport with t * ******************************************************************************************* */ -```bash +``` # Bundles the separate Feathers client side modules into one providing the code as ES5 (compatible with modern browsers) # You do not have to install or load any of the other modules listed below npm install @feathersjs/client --save @@ -299,7 +299,7 @@ primus(socket, options) // initialize the Primus client using a given socket an * ******************************************************************************************* */ -```bash +``` #Ā Assists in using JWT for authentication npm install @feathersjs/authentication --save @@ -562,7 +562,7 @@ app.service('authentication').hooks({ * ******************************************************************************************* */ -```bash +``` # [MEMORY/FILESYSTEM] In-memory database adapter npm install feathers-memory --save diff --git a/backend/sails.js b/backend/sails.js new file mode 100644 index 0000000..0b61e28 --- /dev/null +++ b/backend/sails.js @@ -0,0 +1,734 @@ +/******************************************************************************************** + * SAILS.JS CHEATSHEET + * REFERENCE: https://sailsjs.com/documentation/reference + * CONCEPTS: https://sailsjs.com/documentation/concepts + * APP STRUCTURE: https://sailsjs.com/documentation/anatomy + * + * 1. APPLICATION + * 2. BLUEPRINT API + * 3. COMMAND-LINE INTERFACE + * 4. CONFIGURATION + * 5. REQUEST + * 6. RESPONSE + * 7. WATERLINE ORM + * 8. WEBSOCKETS + ********************************************************************************************/ + +/******************************************************************************************** + * 1. APPLICATION + * https://sailsjs.com/documentation/reference/application + ********************************************************************************************/ + +// A dictionary of all loaded Sails models, indexed by their identity. +sails.models + +// A dictionary of all accessible helpers, including organics. +sails.helpers + +// A dictionary of all loaded Sails hooks, indexed by their identity. +sails.hooks + +// The full set of configuration options for the Sails instance +// It is assembled automatically when Sails loads your app +// merging together command-line arguments, environment variables, your .sailsrc file, +// and the configuration objects exported from any and all modules in your app's config/ directory. +sails.config + +// The runtime values of your app's custom configuration settings. +sails.config.custom + +// A set of convenience methods for low - level interaction with connected websockets. +sails.sockets + +// Talk to Socket.io directly. +sails.io + +// A regular expression designed for use in identifying URL paths that seem like they are probably +// for a static asset of some kind (e.g. image, stylesheet, favicon.ico, robots.txt, etc). +sails.LOOKS_LIKE_ASSET_RX + +// Return a dictionary of Sails actions. +sails.getActions() + +// Look up the first route pointing at the specified target (e.g. MeController.login) +// and return a dictionary containing its method and URL. +sails.getRouteFor(target) + +// Look up the first route pointing at the specified target (e.g. entrance/view-login) +// and return its URL. +sails.getUrlFor(target) + +// Lift a Sails app programmatically. +// This does exactly what you might be used to seeing by now when you run sails lift. +sailsApp.lift(configOverrides, function(err) {}) + +// Load a Sails app into memory-- but without lifting an HTTP server. +// Useful for writing tests, command - line scripts, and scheduled jobs. +sailsApp.load(configOverrides, function(err) {}) + +// Shut down a lifted Sails app and have it cease listening for / responding to any future requests. +sails.lower(callback) + +// Register a new Sails action that can then be bound to a route. +sails.registerAction(action, name) + +// Register a new action middleware function that will be applied to actions +// with the specified identities. +sails.registerActionMiddleware(actionMiddlewareFns, actionIdentities) + +// Flush and reload all Sails actions. +sails.reloadActions() + +// Compile a view into an HTML template. +sails.renderView(pathToView, templateData) + +// Make a virtual request to a running Sails instance. +sails.request(request) +sails.request(url, body) +sails.request(url, callback) +sails.request(url, body, callback) + +// Access a particular datastore, or the default datastore. +sails.getDatastore(datastoreName) + +// Log a message or some data at the "debug" log level using Sails' built-in logger. +sails.log(message) + +/******************************************************************************************** + * 2. BLUEPRINT API + * https://sailsjs.com/documentation/reference/blueprint-api + ********************************************************************************************/ + +// Find a list of records that match the specified criteria +// and (if possible) subscribe to each of them. +GET /:model + +// Look up the record with the specified id from the database +// and (if possible) subscribe to the record to hear about any future changes. +GET /:model/:id + +// Populate and return foreign record(s) for the given association of this record. +GET /:model/:id/:association + +// Create a new record in your database +// and notify subscribed sockets that a newly record is created +POST /:model + +// Update an existing record in the database +// and notify subscribed sockets that it has changed. +PATCH /:model/:id + +// Replace all of the foreign records in one of this record's collections +// and notify subscribed sockets to the parent record. +PUT /:model/:id/:association + +// Add a foreign record to one of this record's collections +// and notify subscribed sockets to the parent record. +PUT /:model/:id/:association/:fk + +// Delete the record specified by id from the database forever +// and notify subscribed sockets that a record has been deleted +DELETE /:model/:id + +// Remove a foreign record from one of this record's collections +// and notify subscribed sockets about this removed child +DELETE /:model/:id/:association/:fk + +/******************************************************************************************** + * 3. COMMAND-LINE INTERFACE + * https://sailsjs.com/documentation/reference/command-line-interface + ********************************************************************************************/ + +// Lift your Node.js/Sails.js app in interactive mode, and enter the REPL. +// Useful for trying out Waterline queries, quickly managing your data, and checking +// out your project's runtime configuration. +sails console [--dontLift] + +// Generate api/models/Foo.js, including attributes with the specified types if provided. +sails generate model + +// Generate a standalone action. +sails generate action + +// Generate a helper at api/helpers/foo.js. +sails generate helper + +// Generate api/controllers/FooController.js, including actions with the specified names if provided. +sails generate controller + +// Generate a project hook in api/hooks/foo/. +sails generate hook + +// Generate a foo folder containing the files necessary for building a new generator. +sails generate generator + +// Generate a custom response at api/responses/foo.js +sails generate response + +// Generate a api/adapters/foo/ folder containing the files necessary for building a new adapter. +sails generate adapter + +// Generate a sails.io.js file at the specified location, overwriting the default sails.io.js if applicable. +sails generate sails.io.js + +// Generate api/models/Foo.js and api/controllers/FooController.js. +sails generate api + +// Alias for sails new. +sails generate new + +// Experimental. Adds the following files to your app: +// .gitignore, .jshintrc, .editorconfig, .npmignore, .travis.yml, .appveyor.yml +sails generate etc + +// Attach the node debugger and lift the sails app; similar to running node--inspect app.js. +// You can then use a tool like the Chrome DevTools to interactively debug your apps. +sails inspect + +// Run the Sails app in the current dir +// (if node_modules/sails exists, it will be used instead of the globally installed Sails) +sails lift [--prod] [--port ] [--verbose] [--silly] + +// Create a new sails project. +sails new [--no-frontend] [--minimal] [--without=package,package,package] + +// Get the version of your computer's globally installed Sails command-line tool +// (i.e. the version you installed with npm install -g sails). +sails version + +/******************************************************************************************** + * 4. CONFIGURATION + * https://sailsjs.com/documentation/reference/configuration + ********************************************************************************************/ + +// Determines which TCP port your Sails app will use to listen for incoming requests. +sails.config.port + +// Declare the host name of your Sails app (By default, Sails will assume localhost). +sails.config.explicitHost + +// The runtime ā€œenvironmentā€ of your Sails app (usually either development or production). +sails.config.environment + +// A time limit, in milliseconds, imposed on all hooks in your app (default to 20000) +sails.config.hookTimeout + +// Configure SSL settings for HTTPs and WSS +sails.config.ssl + +// These configurable settings allow you to configure the blueprint API in Sails. +sails.config.blueprints + +// Asynchronous bootstrap function that runs before your Sails app gets lifted (i.e. starts up). +// Can be used for setting up baseline data, running sanity checks on the status of your database... +sails.config.bootstrap + +// Custom configuration for your app (one-off settings specific to your application) +// Things like the domain to use when sending emails, or 3rd party API keys for Stripe, Mailgun... +sails.config.custom + +// Datastore configurations(or simply datastores) are like "saved settings" for your adapters. +sails.config.datastores + +// Configuration for the global variables that Sails exposes by default. +sails.config.globals + +// Configuration for your app's underlying HTTP server. +sails.config.http + +// Configuration for Sails' built-in internationalization & localization features. +sails.config.i18n + +// Configuration for the logger in your Sails app. +sails.config.log + +// Your default project-wide model settings. +sails.config.models + +// Dictionary that maps policies to an app’s actions. +sails.config.policies + +// Configuration for custom (aka "explicit") routes. +sails.config.routes + +// Configuration for your app's security settings. +sails.config.security + +// Configuration for Sails's built-in session support. +sails.config.session + +// Provide transparent access to Socket.io +sails.config.sockets + +// Configuration for your app's server-side views. +sails.config.views + +/******************************************************************************************** + * 5. REQUEST + * https://sailsjs.com/documentation/reference/request-req + ********************************************************************************************/ + +// The moment that Sails started processing the request, as a Javascript Date object. +req._startTime + +// An object containing text parameters from the parsed request body, defaulting to {}. +// If a request contains one or more file uploads, only the text parameters sent before +// the first file parameter will be available in req.body. +req.body + +// An object containing all of the unsigned cookies from this request (req). +req.cookies + +// A flag indicating the user-agent sending this request (req) wants "fresh" data +// (as indicated by the "if-none-match", "cache-control", and/or "if-modified-since" request headers.) +req.fresh + +// An object containing pre-defined/custom header given in the current request. +req.headers + +// Returns the hostname supplied in the host HTTP header. +// This header may be set either by the client or by the proxy. +req.hostname + +// The IP address of the client who sent this request (req). +req.ip + +// Contains the IP addresses in this request's "X-Forwarded-For" header +// as an array of the IP address strings. +req.ips + +// A flag indicating whether or not this request (req) originated from a Socket.io connection. +req.isSocket + +// The request method (aka "verb".) +// All requests to a Sails server have a "method", even via WebSockets. +req.method + +// Dictionary (plain JavaScript object) of request-agnostic settings available in your app's actions. +req.options + +// Retains the original request URL allowing you to rewrite req.url freely for internal routing purposes. +// In almost all cases, you’ll want to use req.url instead. +req.originalUrl + +// An object containing parameter values parsed from the URL path. +req.params + +// The URL pathname from the request URL string of the current request (req). +req.path + +// The protocol used to send this request (req). +req.protocol + +// A dictionary containing the parsed query-string, defaulting to {}. +req.query + +// Indicates whether or not the request was sent over a secure TLS connection (i.e. https:// or wss://). +req.secure + +// A dictionary containing all of the signed cookies from this request (req). +req.signedCookies + +// If the current Request (req) originated from a connected Socket.io client, +// req.socket refers to the raw Socket.io socket instance. +req.socket + +// An array of all the subdomains in this request's URL. +req.subdomains + +// Like req.path, but also includes the query string suffix. +req.url + +// A flag indicating whether the requesting client would prefer a JSON response +// (as opposed to some other format, like XML or HTML.) +req.wantsJSON + +// A flag indicating whether the current request (req) appears to be an AJAX request. +req.xhr + +// Return whether this request (req) advertises that it understands the specified media type. +req.accepts(mediaType) + +// Return whether this request (req) advertises that it is able to handle any of the specified +// character set(s), and if so, which one. +req.acceptsCharsets(charset1, charset2, …) + +// Return whether this request (req) advertises that it understands any of the specified +// language(s), and if so, which one. +req.acceptsLanguages(language1, language2, …) + +// Returns the value of all parameters sent in the request, merged together into a single dictionary +req.allParams() + +// Build and return a Skipper Upstream representing an incoming multipart file upload from the specified field. +req.file(field) + +// Returns the value of the specified header field in this request (req). Note that header names are case-insensitive. +req.get(header) + +// Returns true if this request's declared "Content-Type" matches the specified media/mime type. +req.is(type) + +// Returns the value of the parameter with the specified name. +req.param(name[, defaultValue]) + +// Override the inferred locale for this request. +req.setLocale(override) + +// Time out this request if a response is not sent within the specified number of milliseconds. +req.setTimeout(numMilliseconds) + +/******************************************************************************************** + * 6. RESPONSE + * https://sailsjs.com/documentation/reference/response-res + ********************************************************************************************/ + +// Indicate to a web browser or other user agent that an outgoing file download sent +// in this response should be "Saved as..." rather than "Opened", and optionally specify the +// name for the newly downloaded file on disk. +res.attachment([filename]) + +// This method is used to send a 200 ("OK") response back down to the client. +res.ok(data) + +// This method is used to send a 400 ("Bad Request") response back down +// to the client indicating that the request is invalid. +res.badRequest(data) + +// This method is used to send a 403 ("Forbidden") response back down +// to the client indicating that the request is not allowed. +res.forbidden() + +// This method is used to send a 404 ("Not Found") response using either res.json() or res.view(). +res.notFound() + +// This method is used to send a 500 ("Server Error") response back down to the client indicating +// that some kind of server error occurred (i.e. the error is not the requesting user agent's fault). +res.serverError(err) +res.serverError() + +// Sets a cookie with name (name) and value (value) to be sent along with the response. +res.cookie(name, value[, options]) + +// Clears cookie (name) in the response. +res.clearCookie(name[, options]) + +// Returns the current value of the specified response header (header). +res.get(header) + +// Sets specified response header (header) to the specified value (value). +res.set(header, value) +res.set(headers) + +// Sends a JSON response composed of a stringified version of the specified data. +res.json([statusCode,] data) + +// Send a JSON or JSONP response. +res.jsonp() + +// Sets the "Location" response header to the specified URL expression(url). +res.location(url) + +// Redirect the requesting user-agent to the given absolute or relative url. +res.redirect(url) +res.redirect(statusCode, url) + +// Send a string response in a format other than JSON (XML, CSV, plain text, etc. +// If you want to send a dictionary or JSON, use res.json(). +// If you want to send a custom status code, call req.status() first. +res.send([string]) + +// Set the status code of this response. +res.status(statusCode) + +// Sets the "Content-Type" response header to the specified type. +res.type(type) + +// Respond with an HTML page. +res.view(pathToView, locals) +res.view(pathToView) +res.view(locals) +res.view() + +/******************************************************************************************** + * 7. WATERLINE ORM + * https://sailsjs.com/documentation/reference/waterline-orm + ********************************************************************************************/ + +// --> DATASTORE <-- + +// Return the default datastore +var datastore = sails.getDatastore() + +// The generic, stateless, low-level driver for this datastore (if the adapter supports it). +datastore.driver + +// The live connection manager for this datastore. +datastore.manager + +// Lease a new connection from the datastore for use in running multiple queries +// on the same connection (i.e. so that the logic provided in during can reuse the db connection). +await datastore.leaseConnection(during) + +// Execute a raw SQL query using this datastore. +await datastore.sendNativeQuery(sql, valuesToEscape) + +// Fetch a preconfigured deferred object hooked up to the sails-mysql or sails-postgresql adapter +// (and consequently the appropriate driver) +await datastore.transaction(during) + +// --> MODELS <-- + +// Add one or more existing child records to the specified collection. +MyModel.addToCollection(parentId, association).members(childIds) + +// Remove one or more members from the specified collection +MyModel.removeFromCollection() + +// Replace all members of the specified collection +MyModel.replaceCollection() + +// Archive ("soft-delete") records that match the specified criteria, +// saving them as new records in the built-in Archive model, then destroying the originals. +MyModel.archive(criteria) + +// Archive ("soft-delete") the record that matches the specified criteria, +// saving it (if it exists) as a new record in the built-in Archive model, then destroying the original. +MyModel.archiveOne(criteria); + +// Get the total number of records matching the specified criteria. +MyModel.count(criteria) + +// Get the aggregate mean of the specified attribute across all matching records. +MyModel.avg(numericAttrName, criteria) + +// Get the aggregate sum of the specified attribute across all matching records. +MyModel.sum(numericAttrName, criteria) + +// Find records in your database that match the given criteria. +MyModel.find(criteria) + +// Attempt to find a particular record in your database that matches the given criteria. +MyModel.findOne(criteria) + +// Find the record matching the specified criteria. +// If no such record exists, create one using the provided initial values. +MyModel.findOrCreate(criteria, initialValues) + +// Create a record in the database. +MyModel.create(initialValues) +MyModel.create(initialValues).fetch() // Created record will be returned + +// Create a set of records in the database. +MyModel.createEach(initialValues) +MyModel.createEach(initialValues).fetch() // Created records will be returned + +// Update all records matching criteria. +MyModel.update(criteria, valuesToSet) +MyModel.update(criteria, valuesToSet).fetch() // Updated records will be returned + +// Update the record that matches the given criteria, if one exists. +MyModel.updateOne(criteria).set(valuesToSet); + +// Destroy records in your database that match the given criteria. +MyModel.destroy(criteria) +MyModel.destroy(criteria).fetch() // Destroyed record will be returned + +// Destroy the record in your database that matches the given criteria, if one exists. +MyModel.destroyOne(criteria); + +// Access the datastore for a particular model. +MyModel.getDatastore() + +// Stream records from your database one at a time or in batches, +// without first having to buffer the entire result set in memory. +MyModel.stream(criteria) + +// Verify that a value would be valid for a given attribute, then return it, loosely coerced. +MyModel.validate(attrName, value) + +// --> QUERIES <-- + +// Set the maximum number of records to retrieve when executing a query instance. +query.limit(maximum) + +// Indicate a number of records to skip before returning the results from executing a query instance. +query.skip(numRecordsToSkip) + +// Set the order in which retrieved records should be returned when executing a query instance. +query.sort(sortClause) + +// Specify a where clause for filtering a query. +query.where(whereClause) + +// Tell Waterline (and the underlying database adapter) to send back records that were +// updated/destroyed/created when performing an .update(), .create(), .createEach() or .destroy() +// query. Otherwise, no data will be returned (or if you are using callbacks, the second argument +// to the .exec() callback will be undefined.) +// This is just a shortcut for .meta({fetch: true}) +// Warning: This is not recommended for update/destroy queries that affect large numbers of records. +query.fetch() + +// Modify a query instance so that, when executed, it will populate child records for the +// specified collection, optionally filtering by subcriteria. Populate may be called more than +// once on the same query, as long as each call is for a different association. +query.populate() + +// Decrypt any auto-encrypted attributes in the records returned for this particular query. +// This is just a shortcut for .meta({decrypt: true}) +query.decrypt() + +// Execute a Waterline query instance. +query.exec(function (err, result) {}) + +// Begin executing a Waterline query instance and return a promise. +// This is an alternative to .exec(). +query.toPromise() + +// Capture and intercept the specified error, automatically modifying and re-throwing it, +// or specifying a new Error to be thrown instead. (Still throws.) +query.intercept(filter, handler) +query.intercept(handler) + +// Provide additional options to Waterline when executing a query instance. +query.meta(options) + +// Execute a Waterline query instance using promises. +// Whenever possible, it is recommended that you use await instead of calling this method. +// This is an alternative to .exec(). When combined with .catch(), it provides the same functionality. +query.then(callback) + +// Execute a Waterline query instance using promises. +// Whenever possible, it is recommended that you use await instead of calling this method. +// This is an alternative to .exec(). When combined with .then(), it provides the same functionality. +query.catch(callback) + +// Tolerate (swallow) the specified error, and return a new result value (or undefined) instead. (Don't throw.) +query.tolerate(filter, handler) +query.tolerate(filter) +query.tolerate(handler) + +// Specify an existing database connection to use for this query. +query.usingConnection(connection) + +/******************************************************************************************** + * 8. WEB SOCKETS + * https://sailsjs.com/documentation/reference/web-sockets + ********************************************************************************************/ + +// --> RESOURCEFUL PUBSUB (HIGHER LEVEL ABSTRACTION WHICH ARE USED BY SAILS BLUEPRINT API) <-- + +// Retrieve the name of the PubSub ā€œroomā€ for a given record. +MyModel.getRoomName(id) + +// Broadcast an arbitrary message to socket clients subscribed to one or more of this model's records. +// Be sure and check req.isSocket === true before passing in req to refer to the requesting socket. +// If used, the provided req must be from a socket request, not just any old HTTP request. +// Is like sails.sockets.broadcast() +MyModel.publish(ids, data, req) + +// Subscribe the requesting client socket to changes/deletions of one or more database records. +// Is like sails.sockets.join() +MyModel.subscribe(req, ids) + +// Unsubscribe the requesting client socket from one or more database records. +// Is like sails.sockets.leave() +MyModel.unsubscribe(req, ids) + +// --> SAILS.SOCKETS <-- + +// Subscribe all members of a room to one or more additional rooms. +// In a multi-server environment, the callback function (cb) will be executed when the +// .addRoomMembersToRooms() call completes on the current server. This does not guarantee that +// other servers in the cluster have already finished running the operation. +sails.sockets.addRoomMembersToRooms(sourceRoom, destRooms, cb) + +// Broadcast a message to all sockets connected to the server (or any server in the cluster, +// if you have a multi-server deployment using Redis). +sails.sockets.blast(data) +sails.sockets.blast(eventName, data) +sails.sockets.blast(data, socketToOmit) +sails.sockets.blast(eventName, data, socketToOmit) + +// Broadcast a message to all sockets in a room (or to a particular socket). +sails.sockets.broadcast(roomNames, data) +sails.sockets.broadcast(roomNames, eventName, data) +sails.sockets.broadcast(roomNames, data, socketToOmit) +sails.sockets.broadcast(roomNames, eventName, data, socketToOmit) + +// Parse the socket ID from an incoming socket request (req). +sails.sockets.getId(req) + +// Subscribe a socket to a room. +sails.sockets.join(socket, roomName) +sails.sockets.join(socket, roomName, cb) + +// Unsubscribe a socket from a room. +sails.sockets.leave(socket, roomName) +sails.sockets.leave(socket, roomName, cb) + +// Unsubscribe all members of a room (e.g. chatroom7) from that room and every other room +// they are currently subscribed to; except the automatic room associated with their socket ID. +sails.sockets.leaveAll(roomName, cb) + +// Unsubscribe all members of a room from one or more other rooms. +sails.sockets.removeRoomMembersFromRooms(sourceRoom, destRooms, cb) + +// --> SOCKET CLIENT <-- + +// Home of global configuration options for the sails.io.js library, as well as any sockets it creates. +io.sails + +// Wait one cycle of the event loop after loading and then attempt to create a new SailsSocket +// and connect it to the URL specified by io.sails.url. +io.sails.autoConnect + +// Sockets will automatically (and continuously) attempt to reconnect to the server +// if they become disconnected unexpectedly. +io.sails.reconnection + +// Dictionary of headers to be sent by default with every request from this socket. +// Can be overridden via the headers option in .request(). +io.sails.headers + +// Set an environment for sails.io.js, which affects how much information is logged to the console. +// Valid values are development (full logs) and production (minimal logs). +io.sails.environment + +// The URL that the socket is connected to, or will attempt to connect to. +io.sails.url + +// The transports that the socket will attempt to connect using. +io.sails.transports + +// Used for creating new socket connections manually. +io.sails.connect([url], [options]) + +// Unbind the specified event handler (opposite of .on()). +// To force a client socket to stop receiving broadcasted messages, do not use this method. +// Instead, unsubscribe the socket in your server-side code: +// In order to use .off(), you will need to store the handlerFn argument you passed in to .on() in a variable. +io.socket.off(eventIdentity, handlerFn) + +// Start listening for socket events from Sails with the specified eventName. +// Will trigger the provided callback function when a matching event is received. +// This happens when the server broadcasts a message to this socket directly, or to a room of which it is a member. +io.socket.on(eventName, function (msg) { }) + +// Send a virtual DELETE request to a Sails server using Socket.io. +io.socket.delete(url, data, function (data, jwres) {}) + +// Send a socket request(virtual GET) to a Sails server using Socket.io. +io.socket.get(url, data, function (resData, jwres) {}) + +// Send a socket request (virtual PATCH) to a Sails server using Socket.io. +io.socket.patch(url, data, function (resData, jwres) {}) + +// Send a socket request (virtual POST) to a Sails server using Socket.io. +io.socket.post(url, data, function (resData, jwres) {}) + +// Send a socket request (virtual PUT) to a Sails server using Socket.io. +io.socket.put(url, data, function (resData, jwres) {}) + +// Send a virtual request to a Sails server using Socket.io. +io.socket.request(options, function (resData, jwres) {}) diff --git a/databases/redis.sh b/databases/redis.sh index fcd1f4c..5665af4 100644 --- a/databases/redis.sh +++ b/databases/redis.sh @@ -49,6 +49,7 @@ LINSERT key BEFORE|AFTER pivot value # insert an element before or after anothe LLEN key # return the current length of the list LPOP key # remove the first element from the list and returns it LSET key index value # set the value of an element in a list by its index +LREM key number_of_occurrences value # delete occurrences of value if the list stored in key LTRIM key start stop # trim a list to the specified range RPOP key # remove the last element from the list and returns it RPOPLPUSH source destination # remove the last element in a list, prepend it to another list and return it diff --git a/frontend/angular.js b/frontend/angular.js new file mode 100644 index 0000000..4ef1427 --- /dev/null +++ b/frontend/angular.js @@ -0,0 +1,443 @@ +/* ******************************************************************************************* + * ANGULAR (2+) CHEATSHEET + * BASED ON https://angular.io/guide/cheatsheet + * DOCUMENTATION: https://angular.io/docs + * STYLE GUIDE: https://angular.io/guide/styleguide + * ******************************************************************************************* */ + + +``` +npm install --save @angular/cli // install command line interface (CLI) for Angular apps +ng serve // serve the app +ng build // build the release +``` + + +/* ******************************************************************************************* + * BOOSTRAPPING + * https://angular.io/guide/bootstrapping + * ******************************************************************************************* */ + + +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +// Bootstraps the app, using the root component from the specified NgModule. +platformBrowserDynamic().bootstrapModule(AppModule); + + +/* ******************************************************************************************* + * NG MODULES + * https://angular.io/guide/ngmodules + * ******************************************************************************************* */ + + +import { NgModule } from '@angular/core'; + +@NgModule({ + declarations: ..., + imports: ..., + exports: ..., + providers: ..., + bootstrap: ... +}) + +// Defines a module that contains components, directives, pipes, and providers. +class MyModule {} + +// List of components, directives, and pipes that belong to this module. +declarations: [MyRedComponent, MyBlueComponent, MyDatePipe] + +// List of modules to import into this module. Everything from the imported modules is available +// to declarations of this module. +imports: [BrowserModule, SomeOtherModule] + +// List of components, directives, and pipes visible to modules that import this module. +exports: [MyRedComponent, MyDatePipe] + +// List of dependency injection providers visible both to the contents of this module and to +// importers of this module. +providers: [MyService, { provide: ... }] + +// List of components to bootstrap when this module is bootstrapped. +bootstrap: [MyAppComponent] + + +/* ******************************************************************************************* + * TEMPLATE SYNTAX + * https://angular.io/guide/template-syntax + * ******************************************************************************************* */ + + +// Binds property value to the result of expression firstName. +// + +// Binds attribute role to the result of expression myAriaRole. +//
+ +// Binds the presence of the CSS class extra-sparkle on the element to the truthiness of the +// expression isDelightful. +//
+ +// Binds style property width to the result of expression mySize in pixels. Units are optional. +//
+ +// Calls method readRainbow when a click event is triggered on this button element (or its +// children) and passes in the event object. +//