diff --git a/.cz.yaml b/.cz.yaml new file mode 100644 index 00000000..b2de3025 --- /dev/null +++ b/.cz.yaml @@ -0,0 +1,4 @@ +commitizen: + name: cz_conventional_commits + tag_format: $version + version: 0.0.1 diff --git a/.gitignore b/.gitignore index 270d260a..97c77c76 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ .DS_Store site/ -.vscode diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..d1c7ebfb --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,7 @@ +repos: +- hooks: + - id: commitizen + stages: + - commit-msg + repo: https://github.com/commitizen-tools/commitizen + rev: v2.23.0 diff --git a/docs/archive/AWS CDK/AWS CDK Resources.md b/docs/archive/AWS CDK/AWS CDK Resources.md new file mode 100644 index 00000000..56f6ea22 --- /dev/null +++ b/docs/archive/AWS CDK/AWS CDK Resources.md @@ -0,0 +1,109 @@ +# WordPress AWS CDK Config using TDD +## Details/prerequisites +* Using typescript +* AWS Account +* AWS CLI +* Visual Studio Code +* DevContainer for CodeSpaces/Docker based development on Raspberry PI +* Node.js - We use the latest lts version installed + +## Setup +* Install the AWS CDK + * `nom install -g aws-cdk` - Global install of the cod +* Bootstrap the AWS CDK - Creates the S3 bucket for your AWS account + * Get your account details + * `aws sts get-caller-identity --profile default` - Will show your account credentials +``` +{ + "UserId": "AIDABCDEFPAYBY3IXXXXX", + "Account": "7804444519999", + "Arn": "arn:aws:iam::640532519999:user/nziswanodeveloper" +} +``` + * Get your default region + * `aws configure get region --profile default` + * Response: `eu-central-1` + * Bootstrap your CDK stack + `cdk bootstrap aws://78044451999/eu-central-1` +## Create the app +* Create a new repository in GitHub + * Name: aws_wordpress_cdk + * **Do not include a README or a .gitignore file. CDK will not run in a non-empty directory** +* Checkout the repository locally + * `git clone git@github.com:Nziswano/aws_wordpress_cdk.git` +* `nvm use --lts` - make sure we're using the latest lts version +* `cdk init app --language typescript` - Create the CDK app +* In the cloned folder + * Add *.nvmrc* file. Which version of node we're going to be using + * `echo "lts/*" >> .nvmrc ` + * Add *.devcontainer* folder. CodeSpaces/Docker container for our environment + * `cp -r ../holding_folder/.devcontainer .` +* Helpful Commands +``` +## Useful commands + +* `npm run build` compile typescript to js +* `npm run watch` watch for changes and compile +* `npm run test` perform the jest unit tests +* `cdk deploy` deploy this stack to your default AWS account/region +* `cdk diff` compare deployed stack with current state +* `cdk synth` emits the synthesized CloudFormation template +``` +* Build your initial stack `npm run build` +* Verify that it worked `cdk ls` - should show your stack +* Add/update your *README.md* file +* Commit and push to GitHub. +## Building our App +### AWS Registry configuration +* API Documentation: https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecr-readme.html +* `git checkout -b aws_ecr_config` +* Update our *README.md* file +#### Our first stack +* `lib/aws_wordpress_cdk-stack.ts` +```typescript +import * as cdk from 'aws-cdk-lib'; +import { Stack, StackProps } from 'aws-cdk-lib'; +import * as ecr from 'aws-cdk-lib/aws-ecr'; +import { Construct } from 'constructs'; + +export class AwsWordpressCdkStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const ecr_repo = new ecr.Repository(this, 'WordpressDockerRegistry', { + repositoryName: 'wordpress-cms-ecr', + }); + } +} +``` +##### Our Test +* File: `test/aws_wordpress_cdk.test.ts` +```typescript +import * as cdk from 'aws-cdk-lib'; +import { Template } from 'aws-cdk-lib/assertions'; +import * as AwsWordpressCdk from '../lib/aws_wordpress_cdk-stack'; + +test('WordPress Registry Created', () => { + const app = new cdk.App(); + const stack = new AwsWordpressCdk.AwsWordpressCdkStack(app, 'MyTestStack'); + const template = Template.fromStack(stack); + + template.hasResourceProperties('AWS::ECR::Repository', { + RepositoryName: 'wordpress-cms-ecr' + }); +}); + +``` +* To run tests: `npm run build && cdk synth && npm run test` +#### GitHub Actions for continues integration/deployment +* Github Actions + * https://github.com/marketplace/actions/aws-cdk-github-actions + +* Environment variables - Actions secrets + * DEV_AWS_ACCESS_KEY_ID + * DEV_AWS_SECRET_ACCESS_KEY + * DEV_AWS_REGION +Available to private repositories +* Setup the local environment +* Build and test +* Run the deployment diff --git a/docs/archive/AWS CDK/SetupWordpressViaCDKArticle.md b/docs/archive/AWS CDK/SetupWordpressViaCDKArticle.md new file mode 100644 index 00000000..c5d8cb45 --- /dev/null +++ b/docs/archive/AWS CDK/SetupWordpressViaCDKArticle.md @@ -0,0 +1,54 @@ +# Setup AWS CDK +## Resources +* https://github.com/projen/projen - project generator. Includes generators for CDK +* Test Resources: + * https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.assertions-readme.html + * https://axelhodler.medium.com/tests-for-aws-cdk-code-9a4bce9fec0e +* [Fargate with EFS and Aurora Serverless using AWS CDK](https://blog.codecentric.de/en/2021/03/fargate-with-efs-and-aurora-serverless-using-aws-cdk/) + * WordPress with Aurora and Elastic File System +* [Building an image searching solution with the AWS CDK](https://aws.amazon.com/blogs/compute/building-an-image-searching-solution-with-the-aws-cdk/) +* [How to create an RDS Aurora serverless instance with CDK](https://dev.to/cjjenkinson/how-to-create-an-aurora-serverless-rds-instance-on-aws-with-cdk-5bb0) +## Tutorials +* [AWS CDK v2 Tutorial – How to Create a Three-Tier Serverless Application](https://www.freecodecamp.org/news/aws-cdk-v2-three-tier-serverless-application/) +* [Testing the Async Cloud with AWS CDK](https://dev.to/aws-builders/testing-the-async-cloud-with-aws-cdk-33aj) +## Details +* [Aspects](https://docs.aws.amazon.com/cdk/v2/guide/aspects.html) +## CDK Documentation +* [ConstructHub](https://constructs.dev) +* [CDK Patterns](https://cdkpatterns.com) +* [AWS CDK API Reference](https://docs.aws.amazon.com/cdk/api/v2//docs/aws-cdk-lib.aws_ecr-readme.html) +## Setup AWS CLI environment with correct keys +* `aws configure` + * Need: + * AWS Access Key + * AWS Secret Access Key + * Default Region name: eu-central-1 + * Default output format: json +## Setup CDK environment +* `npm install -g aws-cdk` +* `cdk bootstrap` +* Be sure to import cdk `import * as cdk from 'aws-cdk-lib';` +* `cdk synth` -> `cdk deploy` +* Make changes +* `cdk diff` -> `cdk deploy` +* `cdk destroy` +## GitHub Actions +* https://github.com/marketplace/actions/aws-cdk-github-actions +* https://github.com/marketplace/actions/aws-cdk-action +* https://github.com/aws-actions + +## Setup constructs + +### ECR +### SSM Parameters +### Aurora Serverless MySQL +* Resources +* https://bobbyhadz.com/blog/aws-cdk-rds-example +#### Secrets Manager +* [How to create an RDS Aurora serverless instance with CDK](https://dev.to/cjjenkinson/how-to-create-an-aurora-serverless-rds-instance-on-aws-with-cdk-5bb0) +#### VPC +### API Gateway +### Fargate + +Can destroy one stack at a time +* `cdk destroy CmsCdkStack` \ No newline at end of file diff --git a/docs/archive/Headless RaspBerry Pi Development Server.md b/docs/archive/Headless RaspBerry Pi Development Server.md new file mode 100644 index 00000000..e3ed4d0c --- /dev/null +++ b/docs/archive/Headless RaspBerry Pi Development Server.md @@ -0,0 +1,17 @@ +# Headless RaspBerry Pi Development Server +## Setup for headless development +* Ubuntu 64 bit operating system +* SSH +* OhMyZsh +* Git +* Docker +* NodeJS +* Raspberry Pi +## C# Development +* Tools + * Visual Studio Code + * Remote development + * Devcontainer + * Docker + * NodeJS +## Wordpress Development diff --git a/docs/HomeNetowrk.drawio b/docs/archive/HomeNetowrk.drawio similarity index 100% rename from docs/HomeNetowrk.drawio rename to docs/archive/HomeNetowrk.drawio diff --git a/docs/archive/JoplinExport/Handbook/Articles/Google Firebase and WordPress.md b/docs/archive/JoplinExport/Handbook/Articles/Google Firebase and WordPress.md new file mode 100644 index 00000000..f0f2f86e --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/Google Firebase and WordPress.md @@ -0,0 +1,13 @@ +--- +title: Google Firebase and WordPress +updated: 2020-09-10 21:43:38Z +created: 2020-09-10 21:43:38Z +--- + +# Google Firebase and WordPress +Yes, it's technically possible to host a WordPress site on Google Firebase hosting using the WordPress REST API. Google Firebase is a family of services, mostly geared towards mobile development, but includes a very generous hosting allowance for static sites. When building my new personal site, I wanted to build a static site but also have a blog. Looked at some static blog engines but didn't feel like rebuilding the site everytime I create new content. Decided to use WordPress' REST API since I already had a WordPress multi-site running on an Amazon LightSail Server. +I decided to use Google Firebase hosting because I'm spending a fair amount of time in South Africa and wanted my site to have relative low latency from Johannesburg or New York City. Although Amazon has CloudFront, they don't have any local points of presence in South Africa but Google does. That, plus the cost (or lack of it), was nice too. +Google also has some nice tools to help with uploading your site on to their system. Using npm, you can install the firebase tools, login to your Google account and you are ready to go. You can configure your service from your command line. +Other services include both a realtime database and a nosql database. Providing user authentication and running node scripts on their platform is also supported. +So, I'm using the Amazon API gateway to expose the WordPress REST API to my static sites. The API gateway provides throttling and can also provide caching if necessary. I don't have to worry about my backend server getting overwhelmed by API calls. I can also provide authentication and filtering using the Amazon API gateway. +The front-end for my personal site use Reactjs as the javaScript framework. Now my static site is sitting on a content delivery network and I also get the benefit of having my blog on the same site without the need to have a PHP server running it. \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Articles/Learning ReactJS by building a headless WordPress .md b/docs/archive/JoplinExport/Handbook/Articles/Learning ReactJS by building a headless WordPress .md new file mode 100644 index 00000000..8a94a699 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/Learning ReactJS by building a headless WordPress .md @@ -0,0 +1,45 @@ +--- +title: Learning ReactJS by building a headless WordPress powered Site +updated: 2020-09-10 21:43:38Z +created: 2020-09-10 21:43:38Z +--- + +# Learning ReactJS by building a headless WordPress powered Site. +* Motivation + * Need to redo personal site. + * Want to experiment with front-end development especially JavaScript + * Low-cost hosting with the ability to scale a site if necessary. +* Benefits + * Scalability of a static site + * Benefit of using WordPress to manage my content. + * Completely custom front-end +* Issues + * Everything is custom + +## Getting Started +* Setting up WordPress - (WordPress with Composer)[http://composer.rarst.net] + * Using composer, nginx and php71-fpm + * Already know how to configure Apache. Was a good time to get more familiar with php71-fpm and nguni. + * Setting up on my local machine. Already have php configured. + * No desire to mess around with docker containers for this. + * Do use docker containers for my celery and elasticsearch in development + * Composer allows for easy configuration of local WordPress development and for upgrading the production version + * Put everything still in development under dev dependencies + * In production, only composer update the non-dev dependencies + * Tools + * Using johnbloch composer install + * wpackagist for access to packages + * direct access to packages via github +* Getting access to the APIs +* Benefits + * WordPress multisite support + * REST API including multi-site support + * Composer support + * Benefits of AWS + * Use API service for cache and security + * Use cloud services in site + * Low cost hosting + * Automatic CDN for front-end site +* ReCaptcha plugin support +## CSS for site +* Creating timeline via CSS \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Articles/Off-grid solutions are making more sense to South .md b/docs/archive/JoplinExport/Handbook/Articles/Off-grid solutions are making more sense to South .md new file mode 100644 index 00000000..817af357 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/Off-grid solutions are making more sense to South .md @@ -0,0 +1,115 @@ +--- +title: Off-grid solutions are making more sense to South Africans - IT-Online +updated: 2021-06-04 08:36:06Z +created: 2021-06-04 08:36:06Z +source: >- + https://it-online.co.za/2021/06/04/off-grid-solutions-are-making-more-sense-to-south-africans/ +--- + +- [Home](http://www.it-online.co.za) +- [About Us](https://it-online.co.za/aboutus/) +- [Business IT](http://business-it.co.za/) +- [Channelwise](http://www.channelwise.co.za/) +- [Subscribe](http://eepurl.com/bsw-mn) + +[](https://it-online.co.za/) + +- [Africa](https://it-online.co.za/category/african/) +- [Company News](https://it-online.co.za/category/company-news/) +- [Industry Areas](https://it-online.co.za/category/industryareas/) +- [Technology Areas](https://it-online.co.za/category/technews/) +- [Mobile Lifestyle Hub](https://it-online.co.za/mobile-lifestyle-hub/) + +# Off-grid solutions are making more sense to South Africans + +Jun 4, 2021 + +With load shedding back and disrupting day to day life, compounded by consumers feeling the 15% increase on their electricity bill, alternative sources of energy are starting to look more attractive to South Africans, and solar should be at the top of the list. + +By Mathew Hall, product director at Rectron + +Alternative power solutions, such as solar panels, inverters, and batteries, have progressed significantly in terms of efficiency and cost over the last decade. As solar technology becomes more accessible and electrical appliances continue to reduce their power consumption, installing a solar system to supplement your electricity bill and reduce your dependence on the electrical grid has never been more appealing and easier to do. + +Considering South Africa’s electricity supply issues, why don’t more homes and businesses already have solar? How expensive is implementing solar solutions within a household and when should users expect a payback from their investment? + +There are other ways to reduce a home’s electricity consumption. Consider these as part of a longer-term investment and cost-saving exercise. Depending on your needs, there are multiple options and solutions which can be customised for your home, cost, and preferences. + +Pure solar generation with no battery backup + +With the current generation of solar inverters available today, users can install a solar system without the need for backup batteries and significantly reduces the overall cost. Ideally, this solution is for households or offices that consume more power during the day, allowing the user to maximise the electricity generated in the daytime as there is no way to store power. + +A pure solar generation allows the user to generate solar with much lower capital investment and will supplement existing power available, rather than replacing it. + +\* According to Eskom, the national average daily consumption for a typical household is over 30 kWh. + +\* With the maximum 8 000W of panels installed, users could generate 7 290kWh a year. Based on the higher Eskom tariffs, the return per year is R22 526. + +\* The total hardware cost involved for panels and the inverter is around R70 000 and around R50 000 for installation, providing a total cost of around R120 000. + +\* Based on the generation figure of R22 526 the return will be 5,3 years if every kWh hour generated is used. The return on investment here will come from reducing consumption from Eskom, with users paying less on the R3.09 per kWh tariff for over 600KWh per month consumption. + +The downside of this installation is of course that in event of load shedding at night or during daytime when consumption is higher than generation, there will be no backup power, which of course leads us to the next scenario. + +Solar Generation with battery backup + +A photovoltaic system converts the sun’s radiation, in the form of light, into usable electricity. As a backup or moving to an off-grid style solution, a photovoltaic system and a solar power storage unit, valuable solar electricity can be stored and used during times of load shedding. + +As it is hard to match electricity consumption to the solar power that is being generated, you often need a battery backup so that users can store power to use at a later stage. This of course will lead to higher capital investment, with various considerations which must be taken into account. + +\* On top of the R120 000 needed for the solar system, users will need a sufficient battery backup, especially for night consumption or low light times of the year. + +\* The current South African household backup requirement is around 10Kwh of backup. This will require three 3.6kwh Dyness B3 Lithium Iron Phosphate batteries, leading to a total of R54 000 on top of the hardware cost above. + +\* With the total cost now at R174,000, the return on investment is now 7.72 years. However, with backup batteries in place, the user is much closer to be totally off the grid and far less reliant on Eskom power supply. + +When selecting the batteries which will be used within the solar system, it is important to consider their quality and capacity, rather than the initial cost of investment. Lithium Iron Phosphate batteries may be more expensive when compared to acid, AGM and Gel-based batteries. However, lithium batteries will last up to 10 years or 6000 cycles, while acid, AGM and Gel-based batteries will only last around 1200 cycles before they must be replaced. + +An installer should be able to provide you with an accurate energy estimate for how much your system will produce each year, as well as how much you will save. The payback period on these scenarios is based on Eskom tariff remaining flat for the next five to seven years. With tariffs likely to continue to rise, the return period will become much shorter with each increase. + +Over and above the benefit of lower electricity bills, a solar power system makes a home more environmentally friendly and limits reliance on Eskom. + +Alternatives to keep the lights on during load shedding + +For many South Africans, going off-grid might not be affordable and they may just be looking for solutions to ensure they can remain productive during load shedding. Once these hardware solutions have been installed within an office space or household, the adverse effects of load shedding can be completely sidestepped, ensuring you or your workforce remain productive and minimising business disruptions. + +Consumer backup options include: + +\* The MegaPower Bank is focused on users who need more than what a standard power bank can provide, and can power up a variety of devices. Focused at either a small home or traveling user, you should be able to power your router, notebook, and screen (details specific and uptime will vary). + +\* The MegaPower Trolley is focused on households looking to cover the full load shedding time. Depending on the number of devices that are connected to the 1k Inverter with a 200ah battery, this solution is capable of keeping basic lights, TVs and devices all charged throughout load shedding. + +Whether you prefer a permanent professionally installed solution or an easy plug play solution, Rectron offers a range of power solutions, including RCT and Vertiv, that can be customized for a variety of situations and needs of our customers. + +### *Related* + +[What to know before jumping into solar](https://it-online.co.za/2020/08/20/what-to-know-before-jumping-into-solar/?relatedposts_hit=1&relatedposts_origin=187283&relatedposts_position=0 "What to know before jumping into solar")August 20, 2020In "Power and Cooling Trends" + +[Businesses look to smart solar solutions](https://it-online.co.za/2019/02/28/businesses-look-to-smart-solar-solutions/?relatedposts_hit=1&relatedposts_origin=187283&relatedposts_position=1 "Businesses look to smart solar solutions")February 28, 2019In "Power and Cooling" + +[Master Power saves R9k a month with solar energy](https://it-online.co.za/2015/09/23/master-power-saves-r9k-a-month-with-solar-energy/?relatedposts_hit=1&relatedposts_origin=187283&relatedposts_position=2 "Master Power saves R9k a month with solar energy")September 23, 2015In "Power and Cooling" + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=369__zoneid=76__cb=82c2f8b216__oadest=http%3A%2F%2Fwww.koloksa.co.za%2Fcategories%2Ftoner-cartridges%2F508%2F1%2F9) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=298__zoneid=37__cb=261ea4562c__oadest=http%3A%2F%2Fwww.drivecontrol.co.za%2Fproducts%2Fdelll%2Fenterprise%2Fpowerstore.html) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=120__zoneid=70__cb=686cbc6a45__oadest=https%3A%2F%2Fkemtek.co.za%2Fsolutions%2Fbar-coding-technology%2F) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=371__zoneid=14__cb=fd1f1da80f__oadest=https%3A%2F%2Fbit.ly%2F3dAy0Qr) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=376__zoneid=75__cb=7811669054__oadest=mailto%3Amarketing_ACZA%40asus.com%3FSubject%3DSend+more+information+about+ASUS+Vivobook+15%2520%26body%3DName%2520and%2520Surname%253A%2520%250A%250ACompany%253A%2520%250A%250AEmail%253A%2520%250A%250ATel%2520number%253A%2520%250A%250A) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=303__zoneid=38__cb=2ddb45b13a__oadest=https%3A%2F%2Fglobal.pantum.com%2Fglobal%2F) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=299__zoneid=15__cb=6678085c23__oadest=http%3A%2F%2Fwww.sacoronavirus.co.za) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=363__zoneid=78__cb=775b642c09__oadest=http%3A%2F%2Fwww.spacepencil.co.uk) + +[](https://itomedia.co.za/www/delivery/ck.php?oaparams=2__bannerid=367__zoneid=16__cb=04e9836cfa__oadest=http%3A%2F%2Fwww.cocre8.africa%2Fsolutions%2F%23edge) + +- [Home](http://www.it-online.co.za) +- [About Us](https://it-online.co.za/aboutus/) +- [Business IT](http://business-it.co.za/) +- [Channelwise](http://www.channelwise.co.za/) +- [Subscribe](http://eepurl.com/bsw-mn) + +Designed by [Elegant Themes](http://www.elegantthemes.com "Premium WordPress Themes") | Powered by [WordPress](http://www.wordpress.org) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Articles/Progressive web app and Flexbox.md b/docs/archive/JoplinExport/Handbook/Articles/Progressive web app and Flexbox.md new file mode 100644 index 00000000..583f232d --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/Progressive web app and Flexbox.md @@ -0,0 +1,18 @@ +--- +title: Progressive web app and Flexbox +updated: 2020-09-10 21:43:38Z +created: 2020-09-10 21:43:38Z +--- + +# Progressive web app and Flexbox +* Using Flexbox when creating a progressive web app +* What I learned + * Develop for the small screen first + * Show without JS when doing a menu + * Progressive images + * srcset + * Media queries +* Resources + * udacity - google classes + * book () + * flex block resources \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Articles/Setting up WordPress with Composer.md b/docs/archive/JoplinExport/Handbook/Articles/Setting up WordPress with Composer.md new file mode 100644 index 00000000..7e6fd6ec --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/Setting up WordPress with Composer.md @@ -0,0 +1,24 @@ +--- +title: Setting up WordPress with Composer +updated: 2020-09-10 21:43:38Z +created: 2020-09-10 21:43:38Z +--- + +# Setting up WordPress with Composer +Putting together a new WordPress site can be frustrating. Download the code, upload to a hosting server, configure the server, configure the code, mess with permissions. Make sure to configure .htaccess because you're giving your server user access to update files. Plus, if you decide to create custom plugins or templates, do you have to commit all of the WordPress codebase into your version control system? +Well, PHP has a code dependency manager called Composer that is similar to what Pip does on Python and npm does for the Node ecosystem. We can now manage our code in a configuration file and don't have to manually upload or update support packages anymore. Composer simplifies the management of a WordPress site, especially if you're a developer. +With the johnpbloch, WordPress becomes another dependency in your project. You no longer have to commit the WordPress codebase into your version control system. All you need is the composer.json file. It also puts the wp-config file outside the public directory. +Now you can update your site by updating the plugins in your composer file. You can also include plugins that are not in the wordpress repository but are available via a version control repository. I'm using an S3 plugin that's not available on the WordPress plugin site by linking to it's git repository with composer and some custom plugins and custom templates that we created internally. All I have to manage is the composer configuration file to maintain my WordPress site. +Image management can be it's own nightmare. Wouldn't it be nice to have an image hosting service that provides a complete delivery network plus lets me alter images just by putting parameters in the URL. Well, look into Cloudinary. It has a very generous free tier that includes about 10GB of storage. Now I can provide responsive images to my site by just tweaking the URL of the images from Cloudinary. It also has an API to upload and find out information about the images in your repository. If you're on a paid plan, they have additional services that include policing your images, tagging them. Plus, not images stored on your server so no need to worry about backing these up. +Other issue I've ran into, especially with a multi-site and using composer, is the need on occasion to completely replace your wordpress codebase. That can be an issue because of the wp-content directory. Look into S3 from human made. It's a plugin that moves your uploads directly to S3. No longer need to worry about the wp-content folder or even making it writeable by your server user. You can completely set all your uploads to be safely stored in S3. Plus, you're saving your local storage space. Your site is maintainable, more secure and can be easily recreated. + + +# WordPress with Composer, S3 and Cloudinary +I created a couple of sites for the church and the preschool i'm working with. Although I wanted the sites to be static, I also wanted to include a blog. WordPress seemed like a good solution. Because I wanted complete control over the sites including being able to create my own plugins, I'm self-hosted on an Amazon LightSail server for about $5/month. +Setting up WordPress used to fill me with dread. Because I test the site locally before uploading it, I used to download the complete WordPress code, configure it with my plugins and templates, commit the complete class into my version control so I can deploy it on my server. +Updating WordPress becomes a nightmare because I need to see what changed manually. This means that I'm very reluctant to do upgrades. +Enter Composer. It is the PHP composer dependency manager which allows me to manage even WordPress as a package dependency. Now, my custom code can be separate from the WordPress codebase. With Composer and johnpbloch's WordPress installer, WordPress becomes just another dependency in my Composer.json file. +With Wpack?, all the plugins from the WordPress repository are available as Composer packages. Rather than giving your server user the ability to change files on your server or having to manually upload plugins or templates to your server, all of the plugins can be added in your composer file. Additional plus is that plugins unavailable on the WordPress plugin repository can still be installed with composer and their version control repositories. +There's also the benefit of having a development and a production configuration in the same file. All the plugins and templates in development stay under dev dependencies. Everything ready for development is just under dependencies. Updating the production site requirers running composer update with the --no-dev flag. Only plugins and templates ready for production are now included. +With Composer, I no longer dread working on a WordPress site. I can now use the latest features of PHP in plugins and there's even a sane system for creating custom templates using Timber which uses Twig as their templating system. Building a WordPress site no longer feels like I'm stepping back in time. + diff --git a/docs/archive/JoplinExport/Handbook/Articles/Why I use Joplin.md b/docs/archive/JoplinExport/Handbook/Articles/Why I use Joplin.md new file mode 100644 index 00000000..5fe955fb --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/Why I use Joplin.md @@ -0,0 +1,6 @@ +--- +title: Why I use Joplin +updated: 2021-02-27 10:13:21Z +created: 2021-02-27 10:13:14Z +--- + diff --git a/docs/archive/JoplinExport/Handbook/Articles/Wordpress container in Microsoft Web App for Conta.md b/docs/archive/JoplinExport/Handbook/Articles/Wordpress container in Microsoft Web App for Conta.md new file mode 100644 index 00000000..ad0fb6e5 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/Wordpress container in Microsoft Web App for Conta.md @@ -0,0 +1,22 @@ +--- +title: Wordpress container in Microsoft Web App for Containers +updated: 2020-03-01 18:38:28Z +created: 2020-02-29 12:47:15Z +--- + +# Wordpress container in Microsoft Web App for Containers +Transfer my current Wordpress configuration to Microsoft's app service. +1. Code is in github +2. Use pipeline to pull the code into Microsoft container registry +3. Build the container +4. Deploy to Web app container service +## Use azure cli locally + `docker run -it mcr.microsoft.com/azure-cli` +## Code pipeline to pull code from GitHub and build +### Need the GitHub authorisation key to build the code. +* Create a devops instance on azure + * https://dev.azure.com/ +* Install the GitHub app for azure - https://github.com/apps/azure-pipelines +* Create pipeline for a Docker image +## Setup Azure Container Registry +* Use docker image for azure cli \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Articles/wordpresscomposer.md b/docs/archive/JoplinExport/Handbook/Articles/wordpresscomposer.md new file mode 100644 index 00000000..3cf26fe5 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Articles/wordpresscomposer.md @@ -0,0 +1,141 @@ +--- +title: wordpresscomposer +updated: 2020-09-10 21:43:38Z +created: 2020-09-10 21:43:38Z +--- + +# Composer for WordPress management and development +## What is composer +* Package and dependency manager for PHP. + +## Why? +Setting up and managing a WordPress can +* Easier to manage. +* Easier to upgrade +* Create a 12 factor app +* No need to include the WordPress code in your plugin or template development +* Put plugins or templates in their own repositories. +* WordPress config is outside of the web public folder. + +## Other benefits +* keep plugins and templates in git +* Differentiate between development and production environment +* Store config in environmental variables. +* Use composer for developing plugins and templates. +## How +* https://github.com/johnpbloch/wordpress - automatically updating fork +* http://wpackagist.org +* Github +```json +{ + "name": "Paseo Site", + "description": "Wordpress site for Paseo Baptist Church and Daycare center", + "keywords": [ + "wordpress", + "blog", + "cms", + "church" + ], + "type": "project", + "homepage": "http://www.paseo.org.za", + "license": "GPL-2.0+", + "authors": [ + { + "name": "WordPress Community", + "homepage": "http://wordpress.org/about/" + }, + { + "name": "Johan Martin", + "homepage": "http://www.johan-martin.com", + "email": "martin.johan@johan-martin.com", + "role": "developer" + } + ], + "support": { + "email": "martin.johan@johan-martin.com" + }, + "extra": { + "wordpress-install-dir": "public", + "installer-paths": { + "public/wp-content/plugins/{$name}": [ + "type:wordpress-plugin" + ], + "public/wp-content/themes/{$name}": [ + "type:wordpress-theme" + ] + } + }, + "require": { + "php": "~7", + "johnpbloch/wordpress-core-installer": "~1", + "johnpbloch/wordpress-core": "~4", + "wpackagist-plugin/akismet":"~4", + "wpackagist-plugin/wp-core-media-widgets":"dev-master", + "wpackagist-plugin/ninjafirewall":"~3", + "wpackagist-plugin/jetpack":"~5", + "wpackagist-plugin/cloudinary-image-management-and-manipulation-in-the-cloud-cdn": "~1", + "humanmade/s3-uploads":"~2", + "paseo/paseo-wp-form-api":"dev-master" + }, + "require-dev": { + "wpackagist-plugin/jwt-authentication-for-wp-rest-api": "~1", + "wpackagist-plugin/gutenberg":"~2", + "wpackagist-plugin/wordpress-reset": "~1", + "wpackagist-plugin/wordpress-importer": "~0.6.3", + "wpackagist-plugin/demo-data-creator":"~1", + "wpackagist-plugin/wp-rest-api-log":"~1", + "wpackagist-plugin/debug": "~1", + "wpackagist-plugin/debug-bar-console": "~0.3", + "wpackagist-plugin/wordpress-mu-domain-mapping":"~0.5", + "wpackagist-plugin/wp-php-console":"~1", + "phpmd/phpmd" : "@stable", + "phpunit/phpunit": "~6" + }, + "repositories": [ + { + "type": "composer", + "url": "https://wpackagist.org" + }, + { + "type": "vcs", + "url": "https://github.com/catenare/paseo-wp-form-api.git" + }, + { + "type": "vcs", + "url": "https://github.com/humanmade/S3-Uploads.git" + } + ] +} +``` + +* Plugin +``` +{ + "name": "paseo/paseo-wp-form-api", + "description": "API plugin for form submission", + "type": "wordpress-plugin", + "license": "MIT", + "authors": [ + { + "name": "Johan Martin", + "email": "johan@paseo.org.za" + } + ], + "require": { + "timber/timber": "~1" + }, + "require-dev": { + }, + "autoload": { + "psr-4": { + "Paseo\\": "src/" + } + } +} +``` +## Resources +* [Using Composer with WordPress](https://roots.io/using-composer-with-wordpress/) +* [WordPress Packagist](https://wpackagist.org/) +* [John P Bloch WordPress Core Installer](https://github.com/johnpbloch/wordpress-core-installer) + + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Accessories.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Accessories.md new file mode 100644 index 00000000..443b1f04 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Accessories.md @@ -0,0 +1,8 @@ +--- +title: Accessories +updated: 2021-03-27 16:01:47Z +created: 2021-03-20 22:06:53Z +--- + +LaCie Rugged SSD Pro +https://eshop.macsales.com/shop/thunderbolt/thunderbolt-docks \ No newline at end of file diff --git "a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Applications/Introduction \302\267 macOS Setup Guide.md" "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Applications/Introduction \302\267 macOS Setup Guide.md" new file mode 100644 index 00000000..91216673 --- /dev/null +++ "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Applications/Introduction \302\267 macOS Setup Guide.md" @@ -0,0 +1,91 @@ +--- +title: Introduction · macOS Setup Guide +updated: 2021-03-14 13:26:24Z +created: 2021-03-14 13:26:24Z +source: https://sourabhbajaj.com/mac-setup/ +--- + +- [Introduction](https://sourabhbajaj.com/mac-setup/./) +- [System Preferences](https://sourabhbajaj.com/mac-setup/SystemPreferences/) +- [Xcode](https://sourabhbajaj.com/mac-setup/Xcode/) +- [Homebrew](https://sourabhbajaj.com/mac-setup/Homebrew/) + - [Usage](https://sourabhbajaj.com/mac-setup/Homebrew/Usage.html) + - [Cask](https://sourabhbajaj.com/mac-setup/Homebrew/Cask.html) +- [iTerm2](https://sourabhbajaj.com/mac-setup/iTerm/) + - [Zsh](https://sourabhbajaj.com/mac-setup/iTerm/zsh.html) + - [tree](https://sourabhbajaj.com/mac-setup/iTerm/tree.html) + - [fzf](https://sourabhbajaj.com/mac-setup/iTerm/fzf.html) + - [ack](https://sourabhbajaj.com/mac-setup/iTerm/ack.html) +- [Git](https://sourabhbajaj.com/mac-setup/Git/) + - [Git Ignore](https://sourabhbajaj.com/mac-setup/Git/gitignore.html) +- [Bash Completion](https://sourabhbajaj.com/mac-setup/BashCompletion/) +- [Vim](https://sourabhbajaj.com/mac-setup/Vim/) +- [Emacs](https://sourabhbajaj.com/mac-setup/Emacs/) +- [Sublime Text](https://sourabhbajaj.com/mac-setup/SublimeText/) + - [Preferences](https://sourabhbajaj.com/mac-setup/SublimeText/Preferences.html) + - [Packages 1/2](https://sourabhbajaj.com/mac-setup/SublimeText/Packages.html) + - [Packages 2/2](https://sourabhbajaj.com/mac-setup/SublimeText/Plugins.html) + - [Sublime Linter](https://sourabhbajaj.com/mac-setup/SublimeText/SublimeLinter.html) +- [Visual Studio Code](https://sourabhbajaj.com/mac-setup/VisualStudioCode/) +- [JetBrains IDEs](https://sourabhbajaj.com/mac-setup/JetBrainsIDEs/) +- [PostgreSQL](https://sourabhbajaj.com/mac-setup/PostgreSQL/) +- [Python](https://sourabhbajaj.com/mac-setup/Python/) + - [Pip](https://sourabhbajaj.com/mac-setup/Python/pip.html) + - [Virtualenv](https://sourabhbajaj.com/mac-setup/Python/virtualenv.html) + - [Numpy-Scipy](https://sourabhbajaj.com/mac-setup/Python/numpy.html) + - [IPython](https://sourabhbajaj.com/mac-setup/Python/ipython.html) +- [MySQL](https://sourabhbajaj.com/mac-setup/MyySQL/) +- [CPlusPlus](https://sourabhbajaj.com/mac-setup/Cpp/) +- [Java](https://sourabhbajaj.com/mac-setup/Java/) + - [SDKMAN!](https://sourabhbajaj.com/mac-setup/Java/sdkman.html) +- [Scala](https://sourabhbajaj.com/mac-setup/Scala/) +- [Ruby](https://sourabhbajaj.com/mac-setup/Ruby/) + - [RubyGems](https://sourabhbajaj.com/mac-setup/Ruby/RubyGems.html) +- [Rust](https://sourabhbajaj.com/mac-setup/Rust/) +- [Node.js](https://sourabhbajaj.com/mac-setup/Node.js/) +- [Go](https://sourabhbajaj.com/mac-setup/Go/) +- [Heroku](https://sourabhbajaj.com/mac-setup/Heroku/) +- [Vagrant](https://sourabhbajaj.com/mac-setup/Vagrant/) +- [Docker](https://sourabhbajaj.com/mac-setup/Docker/) + - [Useful Commands](https://sourabhbajaj.com/mac-setup/Docker/UsefulCommands.html) + - [Tips and Tricks](https://sourabhbajaj.com/mac-setup/Docker/TipsAndTricks.html) +- [LaTeX](https://sourabhbajaj.com/mac-setup/LaTeX/) +- [Other Apps](https://sourabhbajaj.com/mac-setup/Apps/) + - [Octave](https://sourabhbajaj.com/mac-setup/Apps/Octave.html) + - [App Settings](https://sourabhbajaj.com/mac-setup/Apps/Settings.html) +- [Security](https://sourabhbajaj.com/mac-setup/Security/) +- [References](https://sourabhbajaj.com/mac-setup/References/) +- [Contributors](https://sourabhbajaj.com/mac-setup/Contributors.html) + +- [Published with GitBook](https://www.gitbook.com) + +[](#) + +[](#)[](#) + +# [Introduction](https://sourabhbajaj.com/mac-setup/.) + +# [macOS Setup Guide](https://sourabhbajaj.com/mac-setup) + +| branch | status | +| --- | --- | +| `main` | [![main branch](../../../../_resources/badge_c65468e2acb14e2dabb92bc692d585d4.svg)](https://github.com/sb2nov/mac-setup/actions) | +| `health-check` | [![health-check branch](../../../../_resources/health-check_4013bc08f5bc475d8fc550c7164754c0.svg)](https://travis-ci.org/sb2nov/mac-setup) | + +This guide covers the basics of setting up a development environment on a new Mac. Whether you are an experienced programmer or not, this guide is intended for everyone to use as a reference for setting up your environment or installing languages/libraries. + +[![Screen](../../../../_resources/intro_1029016a8f8a4ad59f024d35fde0f5cf.gif)](https://raw.githubusercontent.com/sb2nov/mac-setup/main/assets/intro.gif) + +Some environments we will set up are [Node](https://nodejs.org) (JavaScript), [Python](https://www.python.org), [C++](http://www.cplusplus.com) and [Ruby](https://www.ruby-lang.org). Even if you don't program in all of them, they are useful to have as many command-line tools rely on them. We'll also show you some useful daily use applications. As you read and follow these steps, feel free to post any feedback or comments you may have. + +## Contributing to the guide + +All contributions to the guide are welcome. Please help add support for other libraries and languages. To make a contribution please use our [contribution template](https://github.com/sb2nov/mac-setup/blob/main/.github/CONTRIBUTION_TEMPLATE.md). + +**We're looking for more contributors to maintain and extend the documentation.** + +* * * + +This guide is [MIT licensed](https://github.com/sb2nov/mac-setup/blob/main/LICENSE) and has been generated using [GitBook](https://www.gitbook.com/). Feel free to contribute or create new issues on [GitHub](https://github.com/sb2nov/mac-setup/issues). + +[](https://sourabhbajaj.com/mac-setup/SystemPreferences/) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Applications/Rclone.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Applications/Rclone.md new file mode 100644 index 00000000..7ce45144 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Applications/Rclone.md @@ -0,0 +1,159 @@ +--- +title: Rclone +updated: 2021-03-14 13:36:32Z +created: 2021-03-14 13:36:32Z +source: https://rclone.org/ +--- + +[](https://rclone.org/) + +- [Downloads](https://rclone.org/downloads/) +- [Docs](#) +- [Commands](#) +- [Storage Systems](#) +- [Contact](https://rclone.org/contact/) +- [Donate](https://rclone.org/donate/) + +# Rclone syncs your files to cloud storage + + + +- [About rclone](#about) +- [What can rclone do for you?](#what) +- [What features does rclone have?](#features) +- [What providers does rclone support?](#providers) +- [Download](https://rclone.org/downloads/) +- [Install](https://rclone.org/install/) + +## [](#about)About rclone + +Rclone is a command line program to manage files on cloud storage. It is a feature rich alternative to cloud vendors' web storage interfaces. [Over 40 cloud storage products](#providers) support rclone including S3 object stores, business & consumer file storage services, as well as standard transfer protocols. + +Rclone has powerful cloud equivalents to the unix commands rsync, cp, mv, mount, ls, ncdu, tree, rm, and cat. Rclone's familiar syntax includes shell pipeline support, and `--dry-run` protection. It is used at the command line, in scripts or via its [API](https://rclone.org/rc). + +Users call rclone *"The Swiss army knife of cloud storage"*, and *"Technology indistinguishable from magic"*. + +Rclone really looks after your data. It preserves timestamps and verifies checksums at all times. Transfers over limited bandwidth; intermittent connections, or subject to quota can be restarted, from the last good file transferred. You can [check](https://rclone.org/commands/rclone_check/) the integrity of your files. Where possible, rclone employs server-side transfers to minimise local bandwidth use and transfers from one provider to another without using local disk. + +Virtual backends wrap local and cloud file systems to apply [encryption](https://rclone.org/crypt/), [caching](https://rclone.org/cache/), [compression](https://rclone.org/compress/) [chunking](https://rclone.org/chunker/) and [joining](https://rclone.org/union/). + +Rclone [mounts](https://rclone.org/commands/rclone_mount/) any local, cloud or virtual filesystem as a disk on Windows, macOS, linux and FreeBSD, and also serves these over [SFTP](https://rclone.org/commands/rclone_serve_sftp/), [HTTP](https://rclone.org/commands/rclone_serve_http/), [WebDAV](https://rclone.org/commands/rclone_serve_webdav/), [FTP](https://rclone.org/commands/rclone_serve_ftp/) and [DLNA](https://rclone.org/commands/rclone_serve_dlna/). + +Rclone is mature, open source software originally inspired by rsync and written in [Go](https://golang.org). The friendly support community are familiar with varied use cases. Official Ubuntu, Debian, Fedora, Brew and Chocolatey repos. include rclone. For the latest version [downloading from rclone.org](https://rclone.org/downloads/) is recommended. + +Rclone is widely used on Linux, Windows and Mac. Third party developers create innovative backup, restore, GUI and business process solutions using the rclone command line or API. + +Rclone does the heavy lifting of communicating with cloud storage. + +## [](#what)What can rclone do for you? + +Rclone helps you: + +- Backup (and encrypt) files to cloud storage +- Restore (and decrypt) files from cloud storage +- Mirror cloud data to other cloud services or locally +- Migrate data to cloud, or between cloud storage vendors +- Mount multiple, encrypted, cached or diverse cloud storage as a disk +- Analyse and account for data held on cloud storage using [lsf](https://rclone.org/commands/rclone_lsf/), [ljson](https://rclone.org/commands/rclone_lsjson/), [size](https://rclone.org/commands/rclone_size/), [ncdu](https://rclone.org/commands/rclone_ncdu/) +- [Union](https://rclone.org/union/) file systems together to present multiple local and/or cloud file systems as one + +## [](#features)Features + +- Transfers + - MD5, SHA1 hashes are checked at all times for file integrity + - Timestamps are preserved on files + - Operations can be restarted at any time + - Can be to and from network, e.g. two different cloud providers + - Can use multi-threaded downloads to local disk +- [Copy](https://rclone.org/commands/rclone_copy/) new or changed files to cloud storage +- [Sync](https://rclone.org/commands/rclone_sync/) (one way) to make a directory identical +- [Move](https://rclone.org/commands/rclone_move/) files to cloud storage deleting the local after verification +- [Check](https://rclone.org/commands/rclone_check/) hashes and for missing/extra files +- [Mount](https://rclone.org/commands/rclone_mount/) your cloud storage as a network disk +- [Serve](https://rclone.org/commands/rclone_serve/) local or remote files over [HTTP](https://rclone.org/commands/rclone_serve_http/)/[WebDav](https://rclone.org/commands/rclone_serve_webdav/)/[FTP](https://rclone.org/commands/rclone_serve_ftp/)/[SFTP](https://rclone.org/commands/rclone_serve_sftp/)/[dlna](https://rclone.org/commands/rclone_serve_dlna/) +- Experimental [Web based GUI](https://rclone.org/gui/) + +## [](#providers)Supported providers + +(There are many others, built on standard protocols such as WebDAV or S3, that work out of the box.) + +- 1Fichier [Home](https://1fichier.com/) [Config](https://rclone.org/fichier/) +- Alibaba Cloud (Aliyun) Object Storage System (OSS) [Home](https://www.alibabacloud.com/product/oss/) [Config](https://rclone.org/s3/#alibaba-oss) +- Amazon Drive ([See note](https://rclone.org/amazonclouddrive/#status)) [Home](https://www.amazon.com/clouddrive) [Config](https://rclone.org/amazonclouddrive/) +- Amazon S3 [Home](https://aws.amazon.com/s3/) [Config](https://rclone.org/s3/) +- Backblaze B2 [Home](https://www.backblaze.com/b2/cloud-storage.html) [Config](https://rclone.org/b2/) +- Box [Home](https://www.box.com/) [Config](https://rclone.org/box/) +- Ceph [Home](http://ceph.com/) [Config](https://rclone.org/s3/#ceph) +- Citrix ShareFile [Home](http://sharefile.com/) [Config](https://rclone.org/sharefile/) +- C14 [Home](https://www.online.net/en/storage/c14-cold-storage) [Config](https://rclone.org/sftp/#c14) +- DigitalOcean Spaces [Home](https://www.digitalocean.com/products/object-storage/) [Config](https://rclone.org/s3/#digitalocean-spaces) +- Dreamhost [Home](https://www.dreamhost.com/cloud/storage/) [Config](https://rclone.org/s3/#dreamhost) +- Dropbox [Home](https://www.dropbox.com/) [Config](https://rclone.org/dropbox/) +- Enterprise File Fabric [Home](https://storagemadeeasy.com/about/) [Config](https://rclone.org/filefabric/) +- FTP [Home](https://en.wikipedia.org/wiki/File_Transfer_Protocol) [Config](https://rclone.org/ftp/) +- Google Cloud Storage [Home](https://cloud.google.com/storage/) [Config](https://rclone.org/googlecloudstorage/) +- Google Drive [Home](https://www.google.com/drive/) [Config](https://rclone.org/drive/) +- Google Photos [Home](https://www.google.com/photos/about/) [Config](https://rclone.org/googlephotos/) +- HDFS [Home](https://hadoop.apache.org/) [Config](https://rclone.org/hdfs/) +- HTTP [Home](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) [Config](https://rclone.org/http/) +- Hubic [Home](https://hubic.com/) [Config](https://rclone.org/hubic/) +- Jottacloud [Home](https://www.jottacloud.com/en/) [Config](https://rclone.org/jottacloud/) +- IBM COS S3 [Home](http://www.ibm.com/cloud/object-storage) [Config](https://rclone.org/s3/#ibm-cos-s3) +- Koofr [Home](https://koofr.eu/) [Config](https://rclone.org/koofr/) +- Mail.ru Cloud [Home](https://cloud.mail.ru/) [Config](https://rclone.org/mailru/) +- Memset Memstore [Home](https://www.memset.com/cloud/storage/) [Config](https://rclone.org/swift/) +- Mega [Home](https://mega.nz/) [Config](https://rclone.org/mega/) +- Memory [Home](https://rclone.org/memory/) [Config](https://rclone.org/memory/) +- Microsoft Azure Blob Storage [Home](https://azure.microsoft.com/en-us/services/storage/blobs/) [Config](https://rclone.org/azureblob/) +- Microsoft OneDrive [Home](https://onedrive.live.com/) [Config](https://rclone.org/onedrive/) +- Minio [Home](https://www.minio.io/) [Config](https://rclone.org/s3/#minio) +- Nextcloud [Home](https://nextcloud.com/) [Config](https://rclone.org/webdav/#nextcloud) +- OVH [Home](https://www.ovh.co.uk/public-cloud/storage/object-storage/) [Config](https://rclone.org/swift/) +- OpenDrive [Home](https://www.opendrive.com/) [Config](https://rclone.org/opendrive/) +- OpenStack Swift [Home](https://docs.openstack.org/swift/latest/) [Config](https://rclone.org/swift/) +- Oracle Cloud Storage [Home](https://cloud.oracle.com/storage-opc) [Config](https://rclone.org/swift/) +- ownCloud [Home](https://owncloud.org/) [Config](https://rclone.org/webdav/#owncloud) +- pCloud [Home](https://www.pcloud.com/) [Config](https://rclone.org/pcloud/) +- premiumize.me [Home](https://premiumize.me/) [Config](https://rclone.org/premiumizeme/) +- put.io [Home](https://put.io/) [Config](https://rclone.org/putio/) +- QingStor [Home](https://www.qingcloud.com/products/storage) [Config](https://rclone.org/qingstor/) +- Rackspace Cloud Files [Home](https://www.rackspace.com/cloud/files) [Config](https://rclone.org/swift/) +- rsync.net [Home](https://rsync.net/products/rclone.html) [Config](https://rclone.org/sftp/#rsync-net) +- Scaleway [Home](https://www.scaleway.com/object-storage/) [Config](https://rclone.org/s3/#scaleway) +- Seafile [Home](https://www.seafile.com/) [Config](https://rclone.org/seafile/) +- SFTP [Home](https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol) [Config](https://rclone.org/sftp/) +- StackPath [Home](https://www.stackpath.com/products/object-storage/) [Config](https://rclone.org/s3/#stackpath) +- SugarSync [Home](https://sugarsync.com/) [Config](https://rclone.org/sugarsync/) +- Tardigrade [Home](https://tardigrade.io/) [Config](https://rclone.org/tardigrade/) +- Tencent Cloud Object Storage (COS) [Home](https://intl.cloud.tencent.com/product/cos) [Config](https://rclone.org/s3/#tencent-cos) +- Wasabi [Home](https://wasabi.com/) [Config](https://rclone.org/s3/#wasabi) +- WebDAV [Home](https://en.wikipedia.org/wiki/WebDAV) [Config](https://rclone.org/webdav/) +- Yandex Disk [Home](https://disk.yandex.com/) [Config](https://rclone.org/yandex/) +- Zoho WorkDrive [Home](https://www.zoho.com/workdrive/) [Config](https://rclone.org/zoho/) +- The local filesystem [Home](https://rclone.org/local/) [Config](https://rclone.org/local/) + +Links + +- [Home page](https://rclone.org/) +- [GitHub project page for source and bug tracker](https://github.com/rclone/rclone) +- [Rclone Forum](https://forum.rclone.org) +- [Downloads](https://rclone.org/downloads/) + +Share and Enjoy + +[Twitter](https://twitter.com/intent/tweet/?text=rclone%20-%20rsync%20for%20cloud%20storage%20from%20%40njcw&url=https%3A%2F%2Frclone.org) +[Facebook](https://facebook.com/sharer/sharer.php?u=https%3A%2F%2Frclone.org) +[Reddit](https://reddit.com/submit/?url=https%3A%2F%2Frclone.org&resubmit=true&title=rclone%20-%20rsync%20for%20cloud%20storage) + +Links + +[Rclone forum](https://forum.rclone.org) +[GitHub project](https://github.com/rclone/rclone) +[Rclone slack](https://slack-invite.rclone.org/) +[Rclone Wiki](https://github.com/rclone/rclone/wiki) +[Donate](https://rclone.org/donate/) +[@njcw](https://twitter.com/njcw) + +© [Nick Craig-Wood](https://www.craig-wood.com/nick/) 2014-2021 +Source file [_index.md](https://github.com/rclone/rclone/blob/master/docs/content/_index.md) last updated [2020-09-28](https://github.com/rclone/rclone/commit/71edc75ca651add7613e64ed41b1af3e082f3e7c) +Website hosted on a [MEMSET CLOUD VPS](https://www.memset.com/dedicated-servers/vps/), uploaded with [rclone](https://rclone.org) and built with [Hugo](https://github.com/spf13/hugo). Logo by [@andy23](https://twitter.com/andy23). \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Dotfiles.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Dotfiles.md new file mode 100644 index 00000000..d634bee9 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Dotfiles.md @@ -0,0 +1,23 @@ +--- +title: Dotfiles +updated: 2021-07-25 09:35:12Z +created: 2021-07-25 09:21:16Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +## Resources +* http://dotfiles.github.io/faq/ +* https://github.com/webpro/awesome-dotfiles +* https://www.atlassian.com/git/tutorials/dotfiles +### Moving to using dotfiles for managing resources + +- [Manage dotfiles with git](https://medium.com/toutsbrasil/how-to-manage-your-dotfiles-with-git-f7aeed8adf8b) + +``` +git init --bare $HOME/.dotfiles +alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' +dotfiles config --local status.showUntrackedFiles no +dotfiles remote add origin git@personal:catenare/dotfiles.git +``` \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Macports Installed.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Macports Installed.md new file mode 100644 index 00000000..7a9aef5b --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Macports Installed.md @@ -0,0 +1,17 @@ +--- +title: Macports Installed +updated: 2021-03-14 19:47:37Z +created: 2021-03-14 19:44:07Z +--- + +ack @3.4.0 devel/ack +gh @1.7.0 devel/gh +git @2.30.2 devel/git +jq @1.6 +neovim @0.4.4 +python38 @3.8.8 +python39 @3.9.2 +rclone @1.54.0 net/rclone +tmux @3.1c +tmux-pasteboard @2.9 +tree @1.8.0 diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Software.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Software.md new file mode 100644 index 00000000..3d15fc39 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Software.md @@ -0,0 +1,37 @@ +--- +title: Software +updated: 2021-04-14 13:53:02Z +created: 2021-03-13 14:36:09Z +--- + +# Software installed on my machine +* sdkman - https://sdkman.io +* Macports - https://www.macports.org +* NVM - https://github.com/nvm-sh/nvm - Node Version Manager +* Visual Studio Code +* Raspberry PI 4 8GB as dev server +AddOns +* https://github.com/Clipy/Clipy - Clipboard Extension +* Browser AddOns - Firefox + * Measure-IT + * React Developer Tools + * VueJS developoer Tools + * Redux DevTools + * `` + +https://www.businessinsider.co.za/apple-products-are-much-cheaper-abroad-how-to-import-directly-if-you-are-willing-to-risk-it-2021-3 + +## Installed Homebrew + * Can coexist with macports + * Casks are a great way to install general software +## Fonts Installed +* `brew tap homebrew/cask-fonts` - add fonts to homebrew and allow adding fonts without manual processing them. +* `brew install font-fira-code` or `brew install --cask font-fira-code` +* `brew install font-mononoki` +* cascadia code +## Node global packages - to install when necessary +* Firebase Tools +* Vue/Cli +* React +* Aws Amplify +* Angular tools \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Home - SDKMAN! the Software Development Kit Manage.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Home - SDKMAN! the Software Development Kit Manage.md new file mode 100644 index 00000000..2849bcda --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Home - SDKMAN! the Software Development Kit Manage.md @@ -0,0 +1,56 @@ +--- +title: Home - SDKMAN! the Software Development Kit Manager +updated: 2021-03-13 15:16:11Z +created: 2021-03-13 15:16:11Z +source: https://sdkman.io/ +tags: + - packagemanager +--- + +[![Fork me on GitHub](../../../../_resources/68747470733a2f2f73332e616d617a6f_01d0db7c7a814988a.png)](https://github.com/sdkman/sdkman-cli) + +[](https://sdkman.io/) + +- [Install](https://sdkman.io/install) +- [JDKs](https://sdkman.io/jdks) +- [SDKs](https://sdkman.io/sdks) +- [Usage](https://sdkman.io/usage) +- [Vendors](https://sdkman.io/vendors) +- [Socialize](#) + +[](https://srv.carbonads.net/ads/click/x/GTND42JJCWSD423NCEB4YKQNC6BIPK3YCYSDKZ3JCYYIP23UCKSDP2QKCASD6237C6BD427YCWSD42QWC67DT2QKC6SD42QNCESIKK3EHJNCLSIZ?segment=placement:sdkmanio;)[Your new development career awaits. Check out the latest listings.](https://srv.carbonads.net/ads/click/x/GTND42JJCWSD423NCEB4YKQNC6BIPK3YCYSDKZ3JCYYIP23UCKSDP2QKCASD6237C6BD427YCWSD42QWC67DT2QKC6SD42QNCESIKK3EHJNCLSIZ?segment=placement:sdkmanio;)[ads via Carbon](http://carbonads.net/?utm_source=sdkmanio&utm_medium=ad_via_link&utm_campaign=in_unit&utm_term=carbon) + +# The Software Development Kit Manager + +**SDKMAN!** is a tool for managing parallel versions of multiple **Software Development Kits** on most Unix based systems. It provides a convenient Command Line Interface (CLI) and API for installing, switching, removing and listing Candidates. Formerly known as **GVM** the **Groovy enVironment Manager**, it was inspired by the very useful **[RVM](https://rvm.io/)** and **[rbenv](https://github.com/sstephenson/rbenv)** tools, used at large by the Ruby community. + +# By Developers, for Developers + +Making life easier. No more trawling download pages, extracting archives, messing with `_HOME` and `PATH` environment variables. + +# Java all the way down + +Install Software Development Kits for the JVM such as Java, Groovy, Scala, Kotlin and Ceylon. Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x and many others also supported. + +# Lightweight + +Written in [bash](https://www.gnu.org/software/bash/) and only requires [curl](http://curl.haxx.se/) and [zip/unzip](http://www.info-zip.org/) to be present on your system. Even works with [ZSH](http://www.zsh.org/) too. + +# Multi-platform + +Runs on any UNIX based platforms: Mac OSX, Linux, Cygwin, Solaris and FreeBSD. + +# APIs + +New Clients can easily be written by consuming our open Broker REST API. Vendors can publish and announce their own releases through a secure Vendor API. + +# Get started now! + +Go on, paste and run the following in a terminal: +`$ curl -s "https://get.sdkman.io" | bash` + + + +© 2012 - 2021 SDKMAN! is Open Source Software licensed under [Apache 2](http://www.apache.org/licenses/LICENSE-2.0.html) + +Logos and additional Design by [Daida Medina](https://github.com/dmesu) \ No newline at end of file diff --git "a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Homebrew_homebrew-cask_ \360\237\215\273 A CLI workflow for the .md" "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Homebrew_homebrew-cask_ \360\237\215\273 A CLI workflow for the .md" new file mode 100644 index 00000000..d8243053 --- /dev/null +++ "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Homebrew_homebrew-cask_ \360\237\215\273 A CLI workflow for the .md" @@ -0,0 +1,312 @@ +--- +title: >- + Homebrew/homebrew-cask: 🍻 A CLI workflow for the administration of macOS + applications distributed as binaries +updated: 2021-03-13 15:31:11Z +created: 2021-03-13 15:31:11Z +source: https://github.com/Homebrew/homebrew-cask +--- + +[Skip to content](#start-of-content) + +![](../../../../_resources/search-key-slash_2d6dd05ab650429ead15e7b37b765c95.svg) + +[Pull requests](https://github.com/pulls) [Issues](https://github.com/issues) + +[Marketplace](https://github.com/marketplace) + +[Explore](https://github.com/explore) + + + +# [Homebrew](https://github.com/Homebrew) / **[homebrew-cask](https://github.com/Homebrew/homebrew-cask)** + +- Sponsor +- Watch [315](https://github.com/Homebrew/homebrew-cask/watchers) +- [18k](https://github.com/Homebrew/homebrew-cask/stargazers) + +- Fork + + [9k](https://github.com/Homebrew/homebrew-cask/network/members) + +- [Code](https://github.com/Homebrew/homebrew-cask) +- [Issues 24](https://github.com/Homebrew/homebrew-cask/issues) +- [Pull requests 33](https://github.com/Homebrew/homebrew-cask/pulls) +- [Actions](https://github.com/Homebrew/homebrew-cask/actions) +- [Security](https://github.com/Homebrew/homebrew-cask/security) +- [Insights](https://github.com/Homebrew/homebrew-cask/pulse) + +master + +[**3** branches](https://github.com/Homebrew/homebrew-cask/branches) [**130** tags](https://github.com/Homebrew/homebrew-cask/tags) + +[Go to file](https://github.com/Homebrew/homebrew-cask/find/master) Add file Code + +## Latest commit + +[](https://github.com/upkit) + +[upkit](https://github.com/Homebrew/homebrew-cask/commits?author=upkit "View all commits by upkit") [Update lx-music from 1.8.1 to 1.8.2 (](https://github.com/Homebrew/homebrew-cask/commit/51fe6851ed92589b50f5b5078131a1c1ee2e33dd "Update lx-music from 1.8.1 to 1.8.2 (#101078)")[#101078](https://github.com/Homebrew/homebrew-cask/pull/101078)[)](https://github.com/Homebrew/homebrew-cask/commit/51fe6851ed92589b50f5b5078131a1c1ee2e33dd "Update lx-music from 1.8.1 to 1.8.2 (#101078)") + +[51fe685](https://github.com/Homebrew/homebrew-cask/commit/51fe6851ed92589b50f5b5078131a1c1ee2e33dd) [11 minutes ago](https://github.com/Homebrew/homebrew-cask/commit/51fe6851ed92589b50f5b5078131a1c1ee2e33dd) + +## Git stats + +- [**128,315** commits](https://github.com/Homebrew/homebrew-cask/commits/master) + +## Files + +Type + +Name + +Latest commit message + +Commit time + +[.github](https://github.com/Homebrew/homebrew-cask/tree/master/.github ".github") + +[03\_cask\_request.yml: allow issue body so it works (](https://github.com/Homebrew/homebrew-cask/commit/f782af9c6020ff15080590409a55ba9ab3116827 "03_cask_request.yml: allow issue body so it works (#100767)")[#100767](https://github.com/Homebrew/homebrew-cask/pull/100767)[)](https://github.com/Homebrew/homebrew-cask/commit/f782af9c6020ff15080590409a55ba9ab3116827 "03_cask_request.yml: allow issue body so it works (#100767)") + +8 days ago + +[Casks](https://github.com/Homebrew/homebrew-cask/tree/master/Casks "Casks") + +[Update lx-music from 1.8.1 to 1.8.2 (](https://github.com/Homebrew/homebrew-cask/commit/51fe6851ed92589b50f5b5078131a1c1ee2e33dd "Update lx-music from 1.8.1 to 1.8.2 (#101078)")[#101078](https://github.com/Homebrew/homebrew-cask/pull/101078)[)](https://github.com/Homebrew/homebrew-cask/commit/51fe6851ed92589b50f5b5078131a1c1ee2e33dd "Update lx-music from 1.8.1 to 1.8.2 (#101078)") + +11 minutes ago + +[audit_exceptions](https://github.com/Homebrew/homebrew-cask/tree/master/audit_exceptions "audit_exceptions") + +[github\_prerelease\_allowlist: remove lidarr (](https://github.com/Homebrew/homebrew-cask/commit/ba361f5b6d7774d4e9497ff43400f1ca38c0e590 "github_prerelease_allowlist: remove lidarr (#98974)")[#98974](https://github.com/Homebrew/homebrew-cask/pull/98974)[)](https://github.com/Homebrew/homebrew-cask/commit/ba361f5b6d7774d4e9497ff43400f1ca38c0e590 "github_prerelease_allowlist: remove lidarr (#98974)") + +last month + +[cmd/lib](https://github.com/Homebrew/homebrew-cask/tree/master/cmd/lib "This path skips through empty directories") + +[cmd/lib/generate-matrix.rb: update GitHub API call (](https://github.com/Homebrew/homebrew-cask/commit/01798c1c34c42f4d3d3e58aeaea3cf8f15d1845b "cmd/lib/generate-matrix.rb: update GitHub API call (#99993)")[#99993](https://github.com/Homebrew/homebrew-cask/pull/99993)[)](https://github.com/Homebrew/homebrew-cask/commit/01798c1c34c42f4d3d3e58aeaea3cf8f15d1845b "cmd/lib/generate-matrix.rb: update GitHub API call (#99993)") + +24 days ago + +[developer](https://github.com/Homebrew/homebrew-cask/tree/master/developer "developer") + +[generate\_cask\_token: updates for deprecated commands (](https://github.com/Homebrew/homebrew-cask/commit/d22d5271a19faaef004ca19003aa573e33f3962c "generate_cask_token: updates for deprecated commands (#94176)")[#94176](https://github.com/Homebrew/homebrew-cask/pull/94176)[)](https://github.com/Homebrew/homebrew-cask/commit/d22d5271a19faaef004ca19003aa573e33f3962c "generate_cask_token: updates for deprecated commands (#94176)") + +3 months ago + +[doc](https://github.com/Homebrew/homebrew-cask/tree/master/doc "doc") + +[adding\_a\_cask.md: fix rejected casks link (](https://github.com/Homebrew/homebrew-cask/commit/51c57939a67279d756857887b2b02cc4924cd865 "adding_a_cask.md: fix rejected casks link (#100696)")[#100696](https://github.com/Homebrew/homebrew-cask/pull/100696)[)](https://github.com/Homebrew/homebrew-cask/commit/51c57939a67279d756857887b2b02cc4924cd865 "adding_a_cask.md: fix rejected casks link (#100696)") + +9 days ago + +[.editorconfig](https://github.com/Homebrew/homebrew-cask/blob/master/.editorconfig ".editorconfig") + +[add .editorconfig file](https://github.com/Homebrew/homebrew-cask/commit/18259219d72a991edcde959b10a555cc9e045127 "add .editorconfig file") + +6 years ago + +[.gitattributes](https://github.com/Homebrew/homebrew-cask/blob/master/.gitattributes ".gitattributes") + +[Create .gitattributes](https://github.com/Homebrew/homebrew-cask/commit/533ff608ba508996b34464447a37bd73c1bbf53d "Create .gitattributes") + +6 years ago + +[.gitignore](https://github.com/Homebrew/homebrew-cask/blob/master/.gitignore ".gitignore") + +[Add IntelliJ idea ignore attributes (](https://github.com/Homebrew/homebrew-cask/commit/de42515b5383b63d94bd62a68a18447553f34c6f "Add IntelliJ idea ignore attributes (#96757)")[#96757](https://github.com/Homebrew/homebrew-cask/pull/96757)[)](https://github.com/Homebrew/homebrew-cask/commit/de42515b5383b63d94bd62a68a18447553f34c6f "Add IntelliJ idea ignore attributes (#96757)") + +2 months ago + +[CONTRIBUTING.md](https://github.com/Homebrew/homebrew-cask/blob/master/CONTRIBUTING.md "CONTRIBUTING.md") + +[CONTRIBUTING.md: deprecate cask-repair (](https://github.com/Homebrew/homebrew-cask/commit/35ec6d9936b8ba7a016fd2715088dd736ab72d6a "CONTRIBUTING.md: deprecate cask-repair (#96725)")[#96725](https://github.com/Homebrew/homebrew-cask/pull/96725)[)](https://github.com/Homebrew/homebrew-cask/commit/35ec6d9936b8ba7a016fd2715088dd736ab72d6a "CONTRIBUTING.md: deprecate cask-repair (#96725)") + +3 months ago + +[LICENSE](https://github.com/Homebrew/homebrew-cask/blob/master/LICENSE "LICENSE") + +[LICENSE: 2013 (](https://github.com/Homebrew/homebrew-cask/commit/0fcafb22d6ce151818cab7a16e5c672023384541 "LICENSE: 2013 (#42767) + +[skip ci]")[#42767](https://github.com/Homebrew/homebrew-cask/pull/42767)[)](https://github.com/Homebrew/homebrew-cask/commit/0fcafb22d6ce151818cab7a16e5c672023384541 "LICENSE: 2013 (#42767) + +[skip ci]") + +3 years ago + +[README.md](https://github.com/Homebrew/homebrew-cask/blob/master/README.md "README.md") + +[README: reporting bugs: not included in upgrade (](https://github.com/Homebrew/homebrew-cask/commit/f76cc7fd5a9689371ae92aa9efc532477b2475f0 "README: reporting bugs: not included in upgrade (#96442)")[#96442](https://github.com/Homebrew/homebrew-cask/pull/96442)[)](https://github.com/Homebrew/homebrew-cask/commit/f76cc7fd5a9689371ae92aa9efc532477b2475f0 "README: reporting bugs: not included in upgrade (#96442)") + +3 months ago + +[USAGE.md](https://github.com/Homebrew/homebrew-cask/blob/master/USAGE.md "USAGE.md") + +[USAGE.md: add --no-quarantine (](https://github.com/Homebrew/homebrew-cask/commit/d8b0f6ce5acec25ba1e601b029740b207b26b30a "USAGE.md: add --no-quarantine (#98529)")[#98529](https://github.com/Homebrew/homebrew-cask/pull/98529)[)](https://github.com/Homebrew/homebrew-cask/commit/d8b0f6ce5acec25ba1e601b029740b207b26b30a "USAGE.md: add --no-quarantine (#98529)") + +2 months ago + +[tap_migrations.json](https://github.com/Homebrew/homebrew-cask/blob/master/tap_migrations.json "tap_migrations.json") + +[Update tap_migrations.json (](https://github.com/Homebrew/homebrew-cask/commit/a420adc0e833d8527a6cc65ae225a2e5440417d7 "Update tap_migrations.json (#98719) + +* Remove hyper and syncthing from tap_migrations.json + +* Remove cocoapods, nomad, r, redis from tap_migrations.json")[#98719](https://github.com/Homebrew/homebrew-cask/pull/98719)[)](https://github.com/Homebrew/homebrew-cask/commit/a420adc0e833d8527a6cc65ae225a2e5440417d7 "Update tap_migrations.json (#98719) + +* Remove hyper and syncthing from tap_migrations.json + +* Remove cocoapods, nomad, r, redis from tap_migrations.json") + +last month + +## README.md + +# [](#homebrew-cask)Homebrew Cask + +*“To install, drag this icon…” no more!* + +Homebrew Cask extends [Homebrew](https://brew.sh) and brings its elegance, simplicity, and speed to the installation and management of GUI macOS applications such as Atom and Google Chrome. + +We do this by providing a friendly CLI workflow for the administration of macOS applications distributed as binaries. + +[![Join us on GitHub discussions](../../../../_resources/68747470733a2f2f696d672e73686965_707f753856024bf8b.svg)](https://github.com/Homebrew/discussions) + +## [](#lets-try-it)Let’s try it! + +To start using Homebrew Cask, you just need [Homebrew](https://brew.sh/) installed. + +[](https://camo.githubusercontent.com/f8b75a5e461338a90db6acf4db8f5bc9cf620bfba65a5a490ed10bd08f457b52/68747470733a2f2f692e696d6775722e636f6d2f464e4e4d36574c2e676966) + +Slower, now: + +``` +$ brew install alfred +==> Downloading https://cachefly.alfredapp.com/Alfred_4.2.1_1187.dmg +######################################################################## 100.0% +==> Verifying SHA-256 checksum for Cask 'alfred'. +==> Installing Cask alfred +==> Moving App 'Alfred 4.app' to '/Applications/Alfred 4.app'. +🍺 alfred was successfully installed! +``` + +And there we have it. An application installed with one quick command: no clicking, no dragging, no dropping. + +## [](#learn-more)Learn More + +- Find basic documentation on using Homebrew Cask in [USAGE.md](https://github.com/Homebrew/homebrew-cask/blob/master/USAGE.md) +- Want to contribute a Cask? Awesome! See [CONTRIBUTING.md](https://github.com/Homebrew/homebrew-cask/blob/master/CONTRIBUTING.md) +- Want to hack on our code? Also awesome! See [hacking.md](https://github.com/Homebrew/homebrew-cask/blob/master/doc/development/hacking.md) +- More project-related details and discussion are available in the [documentation](https://github.com/Homebrew/homebrew-cask/blob/master/doc) + +## [](#reporting-bugs)Reporting bugs + +[**If you ignore this guide, your issue may be closed without review**](https://github.com/Homebrew/homebrew-cask/blob/master/doc/faq/closing_issues_without_review.md). + +Before reporting a bug, run `brew update-reset && brew update` and try your command again. This is a fix-all that will reset the state of all your taps, ensuring the problem isn’t an outdated setup on your side. + +If your issue persists, [search for it](https://github.com/Homebrew/homebrew-cask/search?type=Issues) before opening a new one. If you find an open issue and have any new information, add it in a comment. If you find a closed issue, try the solutions there. + +If the issue is still not solved, see the guides for common problems: + +- [Examples of common errors and their solutions](https://github.com/Homebrew/homebrew-cask/blob/master/doc/reporting_bugs/error_examples.md) +- [`curl` error](https://github.com/Homebrew/homebrew-cask/blob/master/doc/reporting_bugs/curl_error.md) +- [`Permission denied` error](https://github.com/Homebrew/homebrew-cask/blob/master/doc/reporting_bugs/permission_denied_error.md) +- [`Checksum does not match` error](https://github.com/Homebrew/homebrew-cask/blob/master/doc/reporting_bugs/checksum_does_not_match_error.md) +- [`source is not there` error](https://github.com/Homebrew/homebrew-cask/blob/master/doc/reporting_bugs/source_is_not_there_error.md) +- [`wrong number of arguments` error](https://github.com/Homebrew/homebrew-cask/blob/master/doc/reporting_bugs/wrong_number_of_arguments_error.md) +- [App isn’t included in `upgrade`](https://github.com/Homebrew/homebrew-cask/blob/master/doc/faq/app_not_upgrading.md) +- [The app can’t be opened because it is from an unidentified developer](https://github.com/Homebrew/homebrew-cask/blob/master/doc/faq/app_cant_be_opened.md) +- [My problem isn’t listed](https://github.com/Homebrew/homebrew-cask/issues/new?template=01_bug_report.md) + +## [](#requests)Requests + +- Issues requesting new casks will be closed. If you want a cask added to the main repositories, [submit a pull request](https://github.com/Homebrew/homebrew-cask/blob/master/CONTRIBUTING.md#adding-a-cask). +- For a feature request, [use this template](https://github.com/Homebrew/homebrew-cask/issues/new?template=02_feature_request.md). + +## [](#questions-wanna-chat)Questions? Wanna chat? + +We’re really rather friendly! Here are the best places to talk about the project: + +- [Open an issue](https://github.com/Homebrew/homebrew-cask/issues/new/choose). +- Join us on [GitHub discussions (forum)](https://github.com/Homebrew/discussions) + +## [](#license)License + +Code is under the [BSD 2 Clause (NetBSD) license](https://github.com/Homebrew/homebrew-cask/blob/master/LICENSE) + +## About + +🍻 A CLI workflow for the administration of macOS applications distributed as binaries + +[brew.sh](https://brew.sh) + +### Topics + +[homebrew](https://github.com/topics/homebrew "Topic: homebrew") [cask](https://github.com/topics/cask "Topic: cask") + +### Resources + +[Readme](#readme) + +### License + +[BSD-2-Clause License](https://github.com/Homebrew/homebrew-cask/blob/master/LICENSE) + +## [Releases 130](https://github.com/Homebrew/homebrew-cask/releases) + +[v0.60.1 Latest
on 11 Jan 2016](https://github.com/Homebrew/homebrew-cask/releases/tag/v0.60.1) + +[\+ 129 releases](https://github.com/Homebrew/homebrew-cask/releases) + +## Sponsor this project + +- [](https://github.com/Homebrew) [**Homebrew** Homebrew](https://github.com/Homebrew)[](https://github.com/sponsors/Homebrew) + +- [patreon.com/**homebrew**](https://patreon.com/homebrew) +- [https://www.paypal.com/cgi-bin/webscr?cmd=\_s-xclick&hosted\_button_id=V6ZE57MJRYC8L](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=V6ZE57MJRYC8L) +- https://github.com/homebrew/brew/#donations + +[Learn more about GitHub Sponsors](https://github.com/sponsors) + +## [Packages](https://github.com/orgs/Homebrew/packages?repo_name=homebrew-cask) + +No packages published + +## [Contributors 5,000+](https://github.com/Homebrew/homebrew-cask/graphs/contributors) + +- [](https://github.com/vitorgalvao) +- [](https://github.com/ran-dall) +- [](https://github.com/rolandwalker) +- [](https://github.com/suschizu) +- [](https://github.com/victorpopkov) +- [](https://github.com/MikeMcQuaid) +- [](https://github.com/reitermarkus) +- [](https://github.com/core-code) +- [](https://github.com/commitay) +- [](https://github.com/brianbrownton) +- [](https://github.com/miccal) + +[\+ 6,860 contributors](https://github.com/Homebrew/homebrew-cask/graphs/contributors) + +## Languages + +- [Ruby 98.6%](https://github.com/Homebrew/homebrew-cask/search?l=ruby) +- [Shell 1.3%](https://github.com/Homebrew/homebrew-cask/search?l=shell) +- Other 0.1% + +- © 2021 GitHub, Inc. +- [Terms](https://github.com/site/terms) +- [Privacy](https://github.com/site/privacy) +- [Security](https://github.com/security) +- [Status](https://www.githubstatus.com/) +- [Docs](https://docs.github.com) + +[](https://github.com "GitHub") + +- [Contact GitHub](https://support.github.com) +- [Pricing](https://github.com/pricing) +- [API](https://docs.github.com) +- [Training](https://services.github.com) +- [Blog](https://github.blog) +- [About](https://github.com/about) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Oh My Zsh - a delightful & open source framework f.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Oh My Zsh - a delightful & open source framework f.md new file mode 100644 index 00000000..5f5db8dc --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/Oh My Zsh - a delightful & open source framework f.md @@ -0,0 +1,192 @@ +--- +title: Oh My Zsh - a delightful & open source framework for Zsh +updated: 2021-03-13 15:15:37Z +created: 2021-03-13 15:15:37Z +source: https://ohmyz.sh/ +tags: + - zsh +--- + +[](https://ohmyz.sh/) + +- [docs](https://github.com/ohmyzsh/ohmyzsh/wiki) +- [code](https://github.com/ohmyzsh/ohmyzsh/) +- [themes](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) +- [store](https://shop.planetargon.com/collections/oh-my-zsh) +- [community](https://ohmyz.sh/community.html) + +[Fork me on Github](https://github.com/ohmyzsh/ohmyzsh) + +## Unleash your terminal like never before. + +Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout... + +# "Oh My ZSH!" + +[Install oh-my-zsh](#install) + +- +- +- +- +- +- + +## What is Oh My Zsh? + +Oh My Zsh is an open source, community-driven framework for managing your Zsh configuration. + +Sounds boring. Let's try again. + +Oh My Zsh will not make you a 10x developer...but you may feel like one! + +Once installed, your terminal shell will become the talk of the town or your money back! With each keystroke in your command prompt, you'll take advantage of the hundreds of powerful plugins and beautiful themes. Strangers will come up to you in cafés and ask you, *"that is amazing! are you some sort of genius?"* + +Finally, you'll begin to get the sort of attention that you have always felt you deserved. ...or maybe you'll use the time that you're saving to start flossing more often. 😬 + +### Plugins + +Oh My Zsh comes bundled with plugins that'll make your life as a software developer easier and leave you feeling like a superhero. + +[Browse 275+ plugins](https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins) + +### Community + +Oh My Zsh has a vibrant community of happy users and delightful contributors. Without all the time and help from our contributors, it wouldn't be so awesome. + +[Start contributing](https://github.com/ohmyzsh/ohmyzsh/wiki/Volunteers) + +### Themes + +We'll admit it. Early in the Oh My Zsh world, we may have gotten a bit too theme happy. We currently ship with 150 themes bundled. + +[Find your new theme](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) + +![Twitter Logo](../../../../_resources/icon-twitter_f129cd5dc9de4a1a84f04b361e289b3b.svg) + +### "As others have said and I’ll say as well, install @ohmyzsh. It takes the magic of zsh, bottles it up, and then anytime you use the CLI out comes a genie and asks you your wish. +Without it, discovering the greatness of zsh requires a PhD." + +[benj_fry](https://twitter.com/benj_fry/status/1225782423612346369?s=20) + +### Install oh-my-zsh now + +Oh My Zsh is installed by running one of the following commands in your terminal. You can install this via the command-line with either curl or wget. + +- Install oh-my-zsh via curl +- Install oh-my-zsh via wget + +$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" + +Not ready to jump right in? We’re not offended; it’s never a bad idea to [read the documentation](https://github.com/ohmyzsh/ohmyzsh/wiki) first. + +Psst… Oh My Zsh works best on macOS or Linux. + +### Got Plugins? + +If you don’t, we do! Oh My Zsh includes over 275 plugins, and we like to share. Here are some featured plugins: + +[See all plugins](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/laravel) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/node) + +[](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/osx/spotify) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/vscode) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/postgres) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/ruby) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/scala) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/sublime) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/python) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/rails) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/golang) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/heroku) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/django) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/aws) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/kube-ps1) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/docker) + +[](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/react-native) + +### Oh My Swag! + +We have t-shirts, stickers, and coffee mugs available to show off your 💖 of Oh My ZSH + + + +### Need a little more? + +Go ahead. Follow us. We're on the social media. + +![](../../../../_resources/follow-ohmyzsh_ce66aabc4260418694b5423e4c23aed0.jpg) + +#### Oh My Zsh + +Your favorite shell framework + +[@ohmyzsh](https://twitter.com/ohmyzsh) + +![](../../../../_resources/follow-robby_c4bc86e03946446eb1f879217c3d9813.jpg) + +#### Robby Russell + +Creator of Oh My Zsh + +[@robbyrussell](https://twitter.com/robbyrussell) + +![](../../../../_resources/follow-marc_7c436a17b89343e5abbee6f887d0ea51.jpg) + +#### Marc Cornellà + +Maintainer of Oh My Zsh + +[@MarcCornella](https://twitter.com/MarcCornella) + + + +Join the conversation on the [ohmyzsh](https://discord.gg/bpXWhnN) server on Discord + +[![Discord server](../../../../_resources/642496866407284746_style_flat-sq_bbaf0ace3cfb412fb.svg)](https://discord.gg/bpXWhnN) + +[](https://www.planetargon.com/) + +#### Planet Argon + +Oh My Zsh was started by the team at [Planet Argon](https://www.planetargon.com/). We help companies with existing Ruby on Rails applications make them better and more maintainable. + +Check out our other [open source projects](https://www.planetargon.com/open-source). + +[@planetargon](https://twitter.com/planetargon) + +[](https://ohmyz.sh/) + +- [Documentation](https://github.com/ohmyzsh/ohmyzsh/wiki) +- [Code](https://github.com/ohmyzsh/ohmyzsh/) +- [Themes](https://github.com/ohmyzsh/ohmyzsh/wiki/Themes) +- [Store](https://shop.planetargon.com/collections/oh-my-zsh) +- [Community](https://ohmyz.sh/community.html) +- [Contribute](https://github.com/ohmyzsh/ohmyzsh/blob/master/CONTRIBUTING.md) + +[](https://www.instagram.com/_ohmyzsh/ "Follow Oh My Zsh on Instagram") [](https://www.facebook.com/WeAreOhMyZsh/ "Follow Oh My Zsh on Facebook") + +©2009 - 2020 [Robby Russell](https://www.planetargon.com/about/robby-russell) & [Contributors](https://github.com/ohmyzsh/ohmyzsh/graphs/contributors) + +[Code of Conduct](https://github.com/ohmyzsh/ohmyzsh/blob/master/CODE_OF_CONDUCT.md) + +An open source [Planet Argon](https://www.planetargon.com "Ruby on Rails Development Firm") project under the terms of the [MIT License](https://github.com/ohmyzsh/ohmyzsh/blob/master/LICENSE.txt) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/The MacPorts Project -- Home.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/The MacPorts Project -- Home.md new file mode 100644 index 00000000..e5e8b6d3 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/The MacPorts Project -- Home.md @@ -0,0 +1,64 @@ +--- +title: The MacPorts Project -- Home +updated: 2021-03-13 15:06:47Z +created: 2021-03-13 15:06:47Z +source: https://www.macports.org/ +tags: + - packagemanager +--- + +# [The MacPorts Project](https://www.macports.org "The MacPorts Project") + +[Skip to Content](#content) + +[Download MacPorts](https://www.macports.org/install.php) + +- [Home](https://www.macports.org/index.php "Home") +- [Installing MacPorts](https://www.macports.org/install.php "Installing MacPorts") +- [Available Ports](https://ports.macports.org/ "Available Ports") +- [Documentation](https://guide.macports.org/ "Documentation") +- [Support & Development](https://trac.macports.org/ "Support & Development") +- [Contact Us](https://www.macports.org/contact.php "Contact Us") +- [News](https://www.macports.org/news/ "News") + +- [Available Downloads](https://github.com/macports/macports-base/releases/tag/v2.6.4 "Available Downloads") +- [MacPorts FAQ](https://trac.macports.org/wiki/FAQ "MacPorts FAQ") +- [Report a Bug](https://trac.macports.org/newticket "Report a Bug") +- [Bug reporting Guidelines](https://guide.macports.org/#project.tickets "Bug reporting Guidelines") +- [Git Repository](https://github.com/macports/ "Git Repository") +- [MacPorts Team](https://trac.macports.org/wiki/MacPortsDevelopers "MacPorts Team") +- [Becoming a Member](https://guide.macports.org/#project.membership "Becoming a Member") + +## The MacPorts Project Official Homepage + +The MacPorts Project is an open-source community initiative to design an easy-to-use system for compiling, installing, and upgrading either command-line, X11 or Aqua based open-source software on the [Mac operating system](http://www.apple.com/macos/). To that end we provide the command-line driven MacPorts software package under a [3-Clause BSD License](http://opensource.org/licenses/BSD-3-Clause), and through it easy access to thousands of ports that [greatly simplify](https://guide.macports.org/#introduction) the task of [compiling and installing](https://guide.macports.org/#using) open-source software on your Mac. + +We provide a single software tree that attempts to track the latest release of every software title (port) we distribute, without splitting them into “stable” Vs. “unstable” branches, targeting mainly macOS High Sierra v10.13 and later (including macOS Big Sur v11). There are [**thousands** of ports](https://ports.macports.org/) in our tree, distributed among different categories, and more are being added on a regular basis. + +### Getting started + +For information on installing MacPorts please see the [installation](https://www.macports.org/install.php) section of this site and explore the myriad of download options we provide and our base system requirements. + +If you run into any problems installing and/or using MacPorts we also have many options to help you, depending on how you wish to get [get in touch with us](https://www.macports.org/contact.php). Other important help resources are our online documentation, A.K.A [The MacPorts Guide](https://guide.macports.org/), and our Trac [Wiki server & bug tracker](https://trac.macports.org/). + +**Latest MacPorts [release](https://www.macports.org/install.php): 2.6.4** + +### Getting involved: Students + +A good way for students to get involved is through the [Google Summer of Code](https://summerofcode.withgoogle.com). GSoC is a program to encourage students' participation in Open Source development and offers a stipend to work on the project with an organization for three months. MacPorts has been participating in the program since 2007! We shall participate next year as well. You may find [past GSoC projects here](https://trac.macports.org/wiki/SummerOfCodeArchive). + +[](https://trac.macports.org/wiki/SummerOfCode) + +We have a list of ideas with possible tasks for MacPorts and additional information about the process at [wiki/SummerOfCode](https://trac.macports.org/wiki/SummerOfCode). We are always open to new ideas. Research on the idea, draft an initial proposal and get it reviewed. + +### Getting involved + +There are many ways you can get involved with MacPorts and peer users, system administrators & developers alike. Browse over to the “[Contact Us](https://www.macports.org/contact.php)” section of our site and: + +- Explore our [mailing lists](https://www.macports.org/contact.php#Lists), either if it is for some general user support or to keep on top of the latest MacPorts developments and commits to our software repository. +- Check out our [Support & Development](https://www.macports.org/contact.php#Tracker) portal for some bug reporting and live tutorials through the integrated Wiki server. +- Or simply come join us for a friendly [IRC chat](https://www.macports.org/contact.php#IRC) if you wish for more direct contact with the [people behind](https://www.macports.org/contact.php#Individuals) it all. + +If on the other hand you are interested in joining The MacPorts Project in any way, then don't hesitate to contact the project's management team, “[PortMgr](https://www.macports.org/contact.php#PortMgr)”, to explain your particular interest and present a formal application. We're always looking for more helping hands that can extend and improve our ports tree and documentation, or take MacPorts itself beyond its current limitations and into new areas of the vast software packaging field. We're eager to hear from you! + +Copyright © 2002–2021, [The MacPorts Project](https://www.macports.org). All rights reserved. \ No newline at end of file diff --git "a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/The Missing Package Manager for macOS (or Linux) \342\200\224.md" "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/The Missing Package Manager for macOS (or Linux) \342\200\224.md" new file mode 100644 index 00000000..4cfbf070 --- /dev/null +++ "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/The Missing Package Manager for macOS (or Linux) \342\200\224.md" @@ -0,0 +1,119 @@ +--- +title: The Missing Package Manager for macOS (or Linux) — Homebrew +updated: 2021-03-13 15:25:38Z +created: 2021-03-13 15:25:38Z +source: https://brew.sh/ +tags: + - packagemanager +--- + + + +# [Homebrew](https://brew.sh/) + +**The Missing Package Manager for macOS (or Linux)** + +- ## Install Homebrew + + ``` + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + ``` + + Paste that in a macOS Terminal or Linux shell prompt. + + The script explains what it will do and then pauses before it does it. Read about other [installation options](https://docs.brew.sh/Installation). + +- ## What Does Homebrew Do? + + Homebrew installs [the stuff you need](https://formulae.brew.sh/formula/ "List of Homebrew packages") that Apple (or your Linux system) didn’t. + + ``` + $ brew install wget + ``` + +- Homebrew installs packages to their own directory and then symlinks their files into `/usr/local`. + + ``` + $ cd /usr/local + $ find Cellar + Cellar/wget/1.16.1 + Cellar/wget/1.16.1/bin/wget + Cellar/wget/1.16.1/share/man/man1/wget.1 + + $ ls -l bin + bin/wget -> ../Cellar/wget/1.16.1/bin/wget + ``` + +- Homebrew won’t install files outside its prefix and you can place a Homebrew installation wherever you like. + +- Trivially create your own Homebrew packages. + + ``` + $ brew create https://foo.com/bar-1.0.tgz + Created /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/bar.rb + ``` + +- It’s all Git and Ruby underneath, so hack away with the knowledge that you can easily revert your modifications and merge upstream updates. + + ``` + $ brew edit wget # opens in $EDITOR! + ``` + +- Homebrew formulae are simple Ruby scripts: + + ``` + class Wget < Formula + homepage "https://www.gnu.org/software/wget/" + url "https://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz" + sha256 "52126be8cf1bddd7536886e74c053ad7d0ed2aa89b4b630f76785bac21695fcd" + + def install + system "./configure", "--prefix=#{prefix}" + system "make", "install" + end + end + ``` + +- Homebrew complements macOS (or your Linux system). Install your RubyGems with `gem` and their dependencies with `brew`. + +- “To install, drag this icon…” no more. [Homebrew Cask](https://formulae.brew.sh/cask/) installs macOS apps, fonts and plugins and other non-open source software. + + ``` + $ brew install --cask firefox + ``` + +- Making a cask is as simple as creating a formula. + + ``` + $ brew create --cask foo + Editing /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/foo.rb + ``` + +- ## Further Documentation + + [docs.brew.sh](https://docs.brew.sh) + +- ## Donate to Homebrew + + [Homebrew/brew#donations](https://github.com/homebrew/brew#donations) + +- ## Community Discussion + + [Homebrew/discussions](https://github.com/Homebrew/discussions/discussions) + +- ## Homebrew Blog + + [brew.sh/blog](https://brew.sh/blog/) + +- ## Homebrew Packages + + [formulae.brew.sh](https://formulae.brew.sh/) + +- ## Analytics Data + + [formulae.brew.sh/analytics](https://formulae.brew.sh/analytics/) + +- Homebrew was created by [Max Howell](https://mxcl.github.io/). Website by [Rémi Prévost](https://exomel.com/), [Mike McQuaid](https://mikemcquaid.com) and [Danielle Lalonde](https://cargocollective.com/danilalo). + + +[](https://github.com/Homebrew/brew) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/nvm-sh_nvm_ Node Version Manager - POSIX-compliant.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/nvm-sh_nvm_ Node Version Manager - POSIX-compliant.md new file mode 100644 index 00000000..64807216 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/System Software/nvm-sh_nvm_ Node Version Manager - POSIX-compliant.md @@ -0,0 +1,1209 @@ +--- +title: >- + nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage + multiple active node.js versions +updated: 2021-03-13 15:07:22Z +created: 2021-03-13 15:07:22Z +source: https://github.com/nvm-sh/nvm +tags: + - packagemanager +--- + +[Skip to content](#start-of-content) + +![](../../../../_resources/search-key-slash_91824b27c6c342558c419f7e526695f9.svg) + +[Pull requests](https://github.com/pulls) [Issues](https://github.com/issues) + +[Marketplace](https://github.com/marketplace) + +[Explore](https://github.com/explore) + + + +# [nvm-sh](https://github.com/nvm-sh) / **[nvm](https://github.com/nvm-sh/nvm)** + +- Sponsor +- Watch [916](https://github.com/nvm-sh/nvm/watchers) +- [47.4k](https://github.com/nvm-sh/nvm/stargazers) + +- Fork + + [4.8k](https://github.com/nvm-sh/nvm/network/members) + +- [Code](https://github.com/nvm-sh/nvm) +- [Issues 246](https://github.com/nvm-sh/nvm/issues) +- [Pull requests 69](https://github.com/nvm-sh/nvm/pulls) +- [Actions](https://github.com/nvm-sh/nvm/actions) +- [Security](https://github.com/nvm-sh/nvm/security) +- [Insights](https://github.com/nvm-sh/nvm/pulse) + +master + +[**25** branches](https://github.com/nvm-sh/nvm/branches) [**89** tags](https://github.com/nvm-sh/nvm/tags) + +[Go to file](https://github.com/nvm-sh/nvm/find/master) Add file Code + +## Latest commit + + [](https://github.com/RodEsp) [](https://github.com/ljharb) + +[RodEsp](https://github.com/nvm-sh/nvm/commits?author=RodEsp "View all commits by RodEsp") and [ljharb](https://github.com/nvm-sh/nvm/commits?author=ljharb "View all commits by ljharb") [\[Fix\] \`nvm_alias\`: ensure \`lts/-1\` returns the one before \`lts/*\`](/nvm-sh/nvm/commit/4da7f101a2d00521eba5fa69a4bd9394bf5c817b "[Fix] `nvm_alias`: ensure `lts/-1` returns the one before `lts/*` + +Fixes #2461") + +[4da7f10](https://github.com/nvm-sh/nvm/commit/4da7f101a2d00521eba5fa69a4bd9394bf5c817b) [2 days ago](https://github.com/nvm-sh/nvm/commit/4da7f101a2d00521eba5fa69a4bd9394bf5c817b) + +## Git stats + +- [**1,970** commits](https://github.com/nvm-sh/nvm/commits/master) + +## Files + +Type + +Name + +Latest commit message + +Commit time + +[.github](https://github.com/nvm-sh/nvm/tree/master/.github ".github") + +[\[actions\] update workflows](https://github.com/nvm-sh/nvm/commit/4c11ab1ac63cdd1d0dfc8e87b7c655d17d28401a "[actions] update workflows") + +last month + +[test](https://github.com/nvm-sh/nvm/tree/master/test "test") + +[\[Fix\] \`nvm_alias\`: ensure \`lts/-1\` returns the one before \`lts/*\`](/nvm-sh/nvm/commit/4da7f101a2d00521eba5fa69a4bd9394bf5c817b "[Fix] `nvm_alias`: ensure `lts/-1` returns the one before `lts/*` + +Fixes #2461") + +2 days ago + +[.dockerignore](https://github.com/nvm-sh/nvm/blob/master/.dockerignore ".dockerignore") + +[Remove useless trailing newlines](https://github.com/nvm-sh/nvm/commit/2cd2c0f72e7bae3bb9f6d340f7fa57d6023f37d1 "Remove useless trailing newlines") + +3 years ago + +[.editorconfig](https://github.com/nvm-sh/nvm/blob/master/.editorconfig ".editorconfig") + +[\[meta\] Rename some files to be more cross platform](https://github.com/nvm-sh/nvm/commit/9849bf494d50e74aa810451fb1f83208b0092dd6 "[meta] Rename some files to be more cross platform") + +2 months ago + +[.gitattributes](https://github.com/nvm-sh/nvm/blob/master/.gitattributes ".gitattributes") + +[Remove useless trailing newlines](https://github.com/nvm-sh/nvm/commit/2cd2c0f72e7bae3bb9f6d340f7fa57d6023f37d1 "Remove useless trailing newlines") + +3 years ago + +[.gitignore](https://github.com/nvm-sh/nvm/blob/master/.gitignore ".gitignore") + +[\[Refactor\] extract “get default packages” logic to `nvm\_get\_default_p…](https://github.com/nvm-sh/nvm/commit/5c117e6ab329cb1c5dc1c6fa932e7a590919a26f "[Refactor] extract “get default packages” logic to `nvm_get_default_packages`") + +2 years ago + +[.mailmap](https://github.com/nvm-sh/nvm/blob/master/.mailmap ".mailmap") + +[Add a Git .mailmap with my new name](/nvm-sh/nvm/commit/6ac8ebafba47ea396a3c7ee03329d98de2747baf "Add a Git .mailmap with my new name + +In this way my past contributions are mapped correctly.") + +4 years ago + +[.npmrc](https://github.com/nvm-sh/nvm/blob/master/.npmrc ".npmrc") + +[Only apps should have lockfiles](https://github.com/nvm-sh/nvm/commit/09951b49c5dc926287c43a2a5bb80c561277c7d6 "Only apps should have lockfiles") + +4 years ago + +[.travis.yml](https://github.com/nvm-sh/nvm/blob/master/.travis.yml ".travis.yml") + +[\[Tests\] `.npm` is now cached by default](https://github.com/nvm-sh/nvm/commit/e48cb858a69e7a62f6b9230d0c9ce916339e12cd "[Tests] `.npm` is now cached by default") + +2 years ago + +[CODE\_OF\_CONDUCT.md](https://github.com/nvm-sh/nvm/blob/master/CODE_OF_CONDUCT.md "CODE_OF_CONDUCT.md") + +[\[meta\] add CODE\_OF\_CONDUCT.md](https://github.com/nvm-sh/nvm/commit/87f37909f226b68e059b258d057a8cc5da107b8e "[meta] add CODE_OF_CONDUCT.md") + +26 days ago + +[CONTRIBUTING.md](https://github.com/nvm-sh/nvm/blob/master/CONTRIBUTING.md "CONTRIBUTING.md") + +[\[Docs\] Improve md file syntax](/nvm-sh/nvm/commit/f3fd5eff4655bf6336de648a3ba51e2cb8dafe80 "[Docs] Improve md file syntax + +- Lists should be surrounded by blank lines +- Use only `1.` for ordered list item prefix +- Starting bulleted lists at the beginning of the line +- Fenced code blocks should be surrounded by blank lines") + +3 years ago + +[Dockerfile](https://github.com/nvm-sh/nvm/blob/master/Dockerfile "Dockerfile") + +[\[Dockerfile\] Clean up dated comment](https://github.com/nvm-sh/nvm/commit/31bc0a13c2969a51b4adadfb5ba7bf0b5c5d2cb4 "[Dockerfile] Clean up dated comment") + +4 months ago + +[LICENSE.md](https://github.com/nvm-sh/nvm/blob/master/LICENSE.md "LICENSE.md") + +[\[meta\] add copyright line to license file](https://github.com/nvm-sh/nvm/commit/07b20d5008a480f7e579fd34e6d39919909206f4 "[meta] add copyright line to license file") + +2 years ago + +[Makefile](https://github.com/nvm-sh/nvm/blob/master/Makefile "Makefile") + +[\[Dev Deps\] update \`doctoc\`, \`replace\`, \`semver\`](https://github.com/nvm-sh/nvm/commit/0d14d7f6b7ae615f06aae27de574cf6115170ef3 "[Dev Deps] update `doctoc`, `replace`, `semver`") + +last month + +[README.md](https://github.com/nvm-sh/nvm/blob/master/README.md "README.md") + +[\[readme\] update \`cdnvm\` implementation](https://github.com/nvm-sh/nvm/commit/d9b11ba20843c8bc10772157571a67b9076b7ba5 "[readme] update `cdnvm` implementation") + +22 days ago + +[ROADMAP.md](https://github.com/nvm-sh/nvm/blob/master/ROADMAP.md "ROADMAP.md") + +[\[meta\] update repo links to point to org](https://github.com/nvm-sh/nvm/commit/e7a5b7992bb6bb27873367c59d72ecc96d07fc6f "[meta] update repo links to point to org") + +2 years ago + +[bash_completion](https://github.com/nvm-sh/nvm/blob/master/bash_completion "bash_completion") + +[\[Fix\] \`bash_completion\`: move compinit before bashcompinit](https://github.com/nvm-sh/nvm/commit/f3fa15745695e734e6e7f7288771a14afc1f40d4 "[Fix] `bash_completion`: move compinit before bashcompinit") + +3 months ago + +[install.sh](https://github.com/nvm-sh/nvm/blob/master/install.sh "install.sh") + +[\[New\] install script: Allow installation from other repository also f…](https://github.com/nvm-sh/nvm/commit/502089ae308c3a771e09d233f8221ea17a0647dd "[New] install script: Allow installation from other repository also for git method") + +2 months ago + +[nvm-exec](https://github.com/nvm-sh/nvm/blob/master/nvm-exec "nvm-exec") + +[\[Fix\] add missing quotes for $NODE_VERSION in nvm-exec](https://github.com/nvm-sh/nvm/commit/ac63638469aca2855732cde56d24a9265fa93bb6 "[Fix] add missing quotes for $NODE_VERSION in nvm-exec") + +4 years ago + +[nvm.sh](https://github.com/nvm-sh/nvm/blob/master/nvm.sh "nvm.sh") + +[\[Fix\] \`nvm_alias\`: ensure \`lts/-1\` returns the one before \`lts/*\`](/nvm-sh/nvm/commit/4da7f101a2d00521eba5fa69a4bd9394bf5c817b "[Fix] `nvm_alias`: ensure `lts/-1` returns the one before `lts/*` + +Fixes #2461") + +2 days ago + +[package.json](https://github.com/nvm-sh/nvm/blob/master/package.json "package.json") + +[\[Dev Deps\] update \`doctoc\`, \`replace\`, \`semver\`](https://github.com/nvm-sh/nvm/commit/0d14d7f6b7ae615f06aae27de574cf6115170ef3 "[Dev Deps] update `doctoc`, `replace`, `semver`") + +last month + +[rename_test.sh](https://github.com/nvm-sh/nvm/blob/master/rename_test.sh "rename_test.sh") + +[\[meta\] Rename some files to be more cross platform](https://github.com/nvm-sh/nvm/commit/9849bf494d50e74aa810451fb1f83208b0092dd6 "[meta] Rename some files to be more cross platform") + +2 months ago + +[update\_test\_mocks.sh](https://github.com/nvm-sh/nvm/blob/master/update_test_mocks.sh "update_test_mocks.sh") + +[\[New\] add \`lts/-1\` etc, to point to an LTS line relative to "latest"](https://github.com/nvm-sh/nvm/commit/4626d1aae6be7213fa7bb78d2fb304279b1d89e7 "[New] add `lts/-1` etc, to point to an LTS line relative to "latest"") + +12 months ago + +## README.md + +# [](#node-version-manager---)Node Version Manager [![Build Status](../../../../_resources/68747470733a2f2f7472617669732d63_2fea328014be4b49b.svg)](https://travis-ci.org/nvm-sh/nvm) [![nvm version](../../../../_resources/68747470733a2f2f696d672e73686965_a056ae235666432d8.svg)](https://github.com/nvm-sh/nvm/releases/tag/v0.37.2)[![CII Best Practices](../../../../_resources/68747470733a2f2f6265737470726163_e4e83d9f2d03463c8.svg)](https://bestpractices.coreinfrastructure.org/projects/684) + +## [](#table-of-contents)Table of Contents + +- [About](#about) +- [Installing and Updating](#installing-and-updating) + - [Install & Update Script](#install--update-script) + - [Additional Notes](#additional-notes) + - [Troubleshooting on Linux](#troubleshooting-on-linux) + - [Troubleshooting on macOS](#troubleshooting-on-macos) + - [Ansible](#ansible) + - [Verify Installation](#verify-installation) + - [Important Notes](#important-notes) + - [Git Install](#git-install) + - [Manual Install](#manual-install) + - [Manual Upgrade](#manual-upgrade) +- [Usage](#usage) + - [Long-term Support](#long-term-support) + - [Migrating Global Packages While Installing](#migrating-global-packages-while-installing) + - [Default Global Packages From File While Installing](#default-global-packages-from-file-while-installing) + - [io.js](#iojs) + - [System Version of Node](#system-version-of-node) + - [Listing Versions](#listing-versions) + - [Setting Custom Colors](#setting-custom-colors) + - [Persisting custom colors](#persisting-custom-colors) + - [Suppressing colorized output](#suppressing-colorized-output) + - [.nvmrc](#nvmrc) + - [Deeper Shell Integration](#deeper-shell-integration) + - [bash](#bash) + - [Automatically call `nvm use`](#automatically-call-nvm-use) + - [zsh](#zsh) + - [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file) + - [fish](#fish) + - [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file-1) +- [License](#license) +- [Running Tests](#running-tests) +- [Environment variables](#environment-variables) +- [Bash Completion](#bash-completion) + - [Usage](#usage-1) +- [Compatibility Issues](#compatibility-issues) +- [Installing nvm on Alpine Linux](#installing-nvm-on-alpine-linux) +- [Uninstalling / Removal](#uninstalling--removal) + - [Manual Uninstall](#manual-uninstall) +- [Docker For Development Environment](#docker-for-development-environment) +- [Problems](#problems) +- [macOS Troubleshooting](#macos-troubleshooting) + +## [](#about)About + +nvm is a version manager for [node.js](https://nodejs.org/en/), designed to be installed per-user, and invoked per-shell. `nvm` works on any POSIX-compliant shell (sh, dash, ksh, zsh, bash), in particular on these platforms: unix, macOS, and windows WSL. + +## [](#installing-and-updating)Installing and Updating + +### [](#install--update-script)Install & Update Script + +To **install** or **update** nvm, you should run the [install script](https://github.com/nvm-sh/nvm/blob/v0.37.2/install.sh). To do that, you may either download and run the script manually, or use the following cURL or Wget command: + +```shell +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash +``` + +```shell +wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash +``` + +Running either of the above commands downloads a script and runs it. The script clones the nvm repository to `~/.nvm`, and attempts to add the source lines from the snippet below to the correct profile file (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`). + +```shell +export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +``` + +#### [](#additional-notes)Additional Notes + +- If the environment variable `$XDG_CONFIG_HOME` is present, it will place the `nvm` files there. + +- You can add `--no-use` to the end of the above script (...`nvm.sh --no-use`) to postpone using `nvm` until you manually [`use`](#usage) it. + +- You can customize the install source, directory, profile, and version using the `NVM_SOURCE`, `NVM_DIR`, `PROFILE`, and `NODE_VERSION` variables. Eg: `curl ... | NVM_DIR="path/to/nvm"`. Ensure that the `NVM_DIR` does not contain a trailing slash. + +- The installer can use `git`, `curl`, or `wget` to download `nvm`, whichever is available. + + +#### [](#troubleshooting-on-linux)Troubleshooting on Linux + +On Linux, after running the install script, if you get `nvm: command not found` or see no feedback from your terminal after you type `command -v nvm`, simply close your current terminal, open a new terminal, and try verifying again. + +#### [](#troubleshooting-on-macos)Troubleshooting on macOS + +Since OS X 10.9, `/usr/bin/git` has been preset by Xcode command line tools, which means we can't properly detect if Git is installed or not. You need to manually install the Xcode command line tools before running the install script, otherwise, it'll fail. (see [#1782](https://github.com/nvm-sh/nvm/issues/1782)) + +If you get `nvm: command not found` after running the install script, one of the following might be the reason: + +- Since macOS 10.15, the default shell is `zsh` and nvm will look for `.zshrc` to update, none is installed by default. Create one with `touch ~/.zshrc` and run the install script again. + +- If you use bash, the previous default shell, run `touch ~/.bash_profile` to create the necessary profile file if it does not exist. + +- You might need to restart your terminal instance or run `. ~/.nvm/nvm.sh`. Restarting your terminal/opening a new tab/window, or running the source command will load the command and the new configuration. + +- You have previously used `bash`, but you have `zsh` installed. You need to manually add [these lines](#manual-install) to `~/.zshrc` and run `. ~/.zshrc`. + + +If the above doesn't fix the problem, you may try the following: + +- If you use bash, it may be that your `.bash_profile` (or `~/.profile`) does not source your `~/.bashrc` properly. You could fix this by adding `source ~/` to it or follow the next step below. + +- Try adding [the snippet from the install section](#profile_snippet), that finds the correct nvm directory and loads nvm, to your usual profile (`~/.bash_profile`, `~/.zshrc`, `~/.profile`, or `~/.bashrc`). + +- For more information about this issue and possible workarounds, please [refer here](https://github.com/nvm-sh/nvm/issues/576) + + +#### [](#ansible)Ansible + +You can use a task: + +```yaml +- name: nvm + shell: > + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash + args: + creates: "{{ ansible_env.HOME }}/.nvm/nvm.sh" +``` + +### [](#verify-installation)Verify Installation + +To verify that nvm has been installed, do: + +```shell +command -v nvm +``` + +which should output `nvm` if the installation was successful. Please note that `which nvm` will not work, since `nvm` is a sourced shell function, not an executable binary. + +### [](#important-notes)Important Notes + +If you're running a system without prepackaged binary available, which means you're going to install nodejs or io.js from its source code, you need to make sure your system has a C++ compiler. For OS X, Xcode will work, for Debian/Ubuntu based GNU/Linux, the `build-essential` and `libssl-dev` packages work. + +**Note:** `nvm` does not support Windows (see [#284](https://github.com/nvm-sh/nvm/issues/284)), but may work in WSL (Windows Subsystem for Linux) depending on the version of WSL. For Windows, two alternatives exist, which are neither supported nor developed by us: + +- [nvm-windows](https://github.com/coreybutler/nvm-windows) +- [nodist](https://github.com/marcelklehr/nodist) + +**Note:** `nvm` does not support [Fish](http://fishshell.com) either (see [#303](https://github.com/nvm-sh/nvm/issues/303)). Alternatives exist, which are neither supported nor developed by us: + +- [bass](https://github.com/edc/bass) allows you to use utilities written for Bash in fish shell +- [fast-nvm-fish](https://github.com/brigand/fast-nvm-fish) only works with version numbers (not aliases) but doesn't significantly slow your shell startup +- [plugin-nvm](https://github.com/derekstavis/plugin-nvm) plugin for [Oh My Fish](https://github.com/oh-my-fish/oh-my-fish), which makes nvm and its completions available in fish shell +- [fnm](https://github.com/fisherman/fnm) \- [fisherman](https://github.com/fisherman/fisherman)-based version manager for fish +- [fish-nvm](https://github.com/FabioAntunes/fish-nvm) \- Wrapper around nvm for fish, delays sourcing nvm until it's actually used. + +**Note:** We still have some problems with FreeBSD, because there is no official pre-built binary for FreeBSD, and building from source may need [patches](https://www.freshports.org/www/node/files/patch-deps_v8_src_base_platform_platform-posix.cc); see the issue ticket: + +- [\[#900\] \[Bug\] nodejs on FreeBSD may need to be patched](https://github.com/nvm-sh/nvm/issues/900) +- [nodejs/node#3716](https://github.com/nodejs/node/issues/3716) + +**Note:** On OS X, if you do not have Xcode installed and you do not wish to download the ~4.3GB file, you can install the `Command Line Tools`. You can check out this blog post on how to just that: + +- [How to Install Command Line Tools in OS X Mavericks & Yosemite (Without Xcode)](http://osxdaily.com/2014/02/12/install-command-line-tools-mac-os-x/) + +**Note:** On OS X, if you have/had a "system" node installed and want to install modules globally, keep in mind that: + +- When using `nvm` you do not need `sudo` to globally install a module with `npm -g`, so instead of doing `sudo npm install -g grunt`, do instead `npm install -g grunt` +- If you have an `~/.npmrc` file, make sure it does not contain any `prefix` settings (which is not compatible with `nvm`) +- You can (but should not?) keep your previous "system" node install, but `nvm` will only be available to your user account (the one used to install nvm). This might cause version mismatches, as other users will be using `/usr/local/lib/node_modules/*` VS your user account using `~/.nvm/versions/node/vX.X.X/lib/node_modules/*` + +Homebrew installation is not supported. If you have issues with homebrew-installed `nvm`, please `brew uninstall` it, and install it using the instructions below, before filing an issue. + +**Note:** If you're using `zsh` you can easily install `nvm` as a zsh plugin. Install [`zsh-nvm`](https://github.com/lukechilds/zsh-nvm) and run `nvm upgrade` to upgrade. + +**Note:** Git versions before v1.7 may face a problem of cloning `nvm` source from GitHub via https protocol, and there is also different behavior of git before v1.6, and git prior to [v1.17.10](https://github.com/git/git/commit/5a7d5b683f869d3e3884a89775241afa515da9e7) can not clone tags, so the minimum required git version is v1.7.10. If you are interested in the problem we mentioned here, please refer to GitHub's [HTTPS cloning errors](https://help.github.com/articles/https-cloning-errors/) article. + +### [](#git-install)Git Install + +If you have `git` installed (requires git v1.7.10+): + +1. clone this repo in the root of your user profile + +- `cd ~/` from anywhere then `git clone https://github.com/nvm-sh/nvm.git .nvm` + +1. `cd ~/.nvm` and check out the latest version with `git checkout v0.37.2` +2. activate `nvm` by sourcing it from your shell: `. ./nvm.sh` + +Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login: (you may have to add to more than one of the above files) + +```shell +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion +``` + +### [](#manual-install)Manual Install + +For a fully manual install, execute the following lines to first clone the `nvm` repository into `$HOME/.nvm`, and then load `nvm`: + +```shell +export NVM_DIR="$HOME/.nvm" && ( + git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR" + cd "$NVM_DIR" + git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)` +) && \. "$NVM_DIR/nvm.sh" +``` + +Now add these lines to your `~/.bashrc`, `~/.profile`, or `~/.zshrc` file to have it automatically sourced upon login: (you may have to add to more than one of the above files) + +```shell +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +``` + +### [](#manual-upgrade)Manual Upgrade + +For manual upgrade with `git` (requires git v1.7.10+): + +1. change to the `$NVM_DIR` +2. pull down the latest changes +3. check out the latest version +4. activate the new version + +```shell +( + cd "$NVM_DIR" + git fetch --tags origin + git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)` +) && \. "$NVM_DIR/nvm.sh" +``` + +## [](#usage)Usage + +To download, compile, and install the latest release of node, do this: + +```shell +nvm install node # "node" is an alias for the latest version +``` + +To install a specific version of node: + +```shell +nvm install 6.14.4 # or 10.10.0, 8.9.1, etc +``` + +The first version installed becomes the default. New shells will start with the default version of node (e.g., `nvm alias default`). + +You can list available versions using `ls-remote`: + +```shell +nvm ls-remote +``` + +And then in any new shell just use the installed version: + +```shell +nvm use node +``` + +Or you can just run it: + +```shell +nvm run node --version +``` + +Or, you can run any arbitrary command in a subshell with the desired version of node: + +```shell +nvm exec 4.2 node --version +``` + +You can also get the path to the executable to where it was installed: + +```shell +nvm which 5.0 +``` + +In place of a version pointer like "0.10" or "5.0" or "4.2.1", you can use the following special default aliases with `nvm install`, `nvm use`, `nvm run`, `nvm exec`, `nvm which`, etc: + +- `node`: this installs the latest version of [`node`](https://nodejs.org/en/) +- `iojs`: this installs the latest version of [`io.js`](https://iojs.org/en/) +- `stable`: this alias is deprecated, and only truly applies to `node` `v0.12` and earlier. Currently, this is an alias for `node`. +- `unstable`: this alias points to `node` `v0.11` \- the last "unstable" node release, since post-1.0, all node versions are stable. (in SemVer, versions communicate breakage, not stability). + +### [](#long-term-support)Long-term Support + +Node has a [schedule](https://github.com/nodejs/Release#release-schedule) for long-term support (LTS) You can reference LTS versions in aliases and `.nvmrc` files with the notation `lts/*` for the latest LTS, and `lts/argon` for LTS releases from the "argon" line, for example. In addition, the following commands support LTS arguments: + +- `nvm install --lts` / `nvm install --lts=argon` / `nvm install 'lts/*'` / `nvm install lts/argon` +- `nvm uninstall --lts` / `nvm uninstall --lts=argon` / `nvm uninstall 'lts/*'` / `nvm uninstall lts/argon` +- `nvm use --lts` / `nvm use --lts=argon` / `nvm use 'lts/*'` / `nvm use lts/argon` +- `nvm exec --lts` / `nvm exec --lts=argon` / `nvm exec 'lts/*'` / `nvm exec lts/argon` +- `nvm run --lts` / `nvm run --lts=argon` / `nvm run 'lts/*'` / `nvm run lts/argon` +- `nvm ls-remote --lts` / `nvm ls-remote --lts=argon` `nvm ls-remote 'lts/*'` / `nvm ls-remote lts/argon` +- `nvm version-remote --lts` / `nvm version-remote --lts=argon` / `nvm version-remote 'lts/*'` / `nvm version-remote lts/argon` + +Any time your local copy of `nvm` connects to https://nodejs.org, it will re-create the appropriate local aliases for all available LTS lines. These aliases (stored under `$NVM_DIR/alias/lts`), are managed by `nvm`, and you should not modify, remove, or create these files - expect your changes to be undone, and expect meddling with these files to cause bugs that will likely not be supported. + +To get the latest LTS version of node and migrate your existing installed packages, use + +```shell +nvm install 'lts/*' --reinstall-packages-from=current +``` + +### [](#migrating-global-packages-while-installing)Migrating Global Packages While Installing + +If you want to install a new version of Node.js and migrate npm packages from a previous version: + +```shell +nvm install node --reinstall-packages-from=node +``` + +This will first use "nvm version node" to identify the current version you're migrating packages from. Then it resolves the new version to install from the remote server and installs it. Lastly, it runs "nvm reinstall-packages" to reinstall the npm packages from your prior version of Node to the new one. + +You can also install and migrate npm packages from specific versions of Node like this: + +```shell +nvm install 6 --reinstall-packages-from=5 +nvm install v4.2 --reinstall-packages-from=iojs +``` + +Note that reinstalling packages *explicitly does not update the npm version* — this is to ensure that npm isn't accidentally upgraded to a broken version for the new node version. + +To update npm at the same time add the `--latest-npm` flag, like this: + +```shell +nvm install 'lts/*' --reinstall-packages-from=default --latest-npm +``` + +or, you can at any time run the following command to get the latest supported npm version on the current node version: + +```shell +nvm install-latest-npm +``` + +If you've already gotten an error to the effect of "npm does not support Node.js", you'll need to (1) revert to a previous node version (`nvm ls` & `nvm use `, (2) delete the newly created node version (`nvm uninstall `), then (3) rerun your `nvm install` with the `--latest-npm` flag. + +### [](#default-global-packages-from-file-while-installing)Default Global Packages From File While Installing + +If you have a list of default packages you want installed every time you install a new version, we support that too -- just add the package names, one per line, to the file `$NVM_DIR/default-packages`. You can add anything npm would accept as a package argument on the command line. + +```shell +# $NVM_DIR/default-packages + +rimraf +object-inspect@1.0.2 +stevemao/left-pad +``` + +### [](#iojs)io.js + +If you want to install [io.js](https://github.com/iojs/io.js/): + +```shell +nvm install iojs +``` + +If you want to install a new version of io.js and migrate npm packages from a previous version: + +```shell +nvm install iojs --reinstall-packages-from=iojs +``` + +The same guidelines mentioned for migrating npm packages in node are applicable to io.js. + +### [](#system-version-of-node)System Version of Node + +If you want to use the system-installed version of node, you can use the special default alias "system": + +```shell +nvm use system +nvm run system --version +``` + +### [](#listing-versions)Listing Versions + +If you want to see what versions are installed: + +```shell +nvm ls +``` + +If you want to see what versions are available to install: + +```shell +nvm ls-remote +``` + +### [](#setting-custom-colors)Setting Custom Colors + +You can set five colors that will be used to display version and alias information. These colors replace the default colors. Initial colors are: g b y r e + +Color codes: + +``` +r/R = red / bold red + +g/G = green / bold green + +b/B = blue / bold blue + +c/C = cyan / bold cyan + +m/M = magenta / bold magenta + +y/Y = yellow / bold yellow + +k/K = black / bold black + +e/W = light grey / white +``` + +```shell +nvm set-colors rgBcm +``` + +#### [](#persisting-custom-colors)Persisting custom colors + +If you want the custom colors to persist after terminating the shell, export the NVM_COLORS variable in your shell profile. For example, if you want to use cyan, magenta, green, bold red and bold yellow, add the following line: + +```shell +export NVM_COLORS='cmgRY' +``` + +#### [](#suppressing-colorized-output)Suppressing colorized output + +`nvm help (or -h or --help)`, `nvm ls`, `nvm ls-remote` and `nvm alias` usually produce colorized output. You can disable colors with the `--no-colors` option (or by setting the environment variable `TERM=dumb`): + +```shell +nvm ls --no-colors +nvm help --no-colors +TERM=dumb nvm ls +``` + +To restore your PATH, you can deactivate it: + +```shell +nvm deactivate +``` + +To set a default Node version to be used in any new shell, use the alias 'default': + +```shell +nvm alias default node +``` + +To use a mirror of the node binaries, set `$NVM_NODEJS_ORG_MIRROR`: + +```shell +export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist +nvm install node + +NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist nvm install 4.2 +``` + +To use a mirror of the io.js binaries, set `$NVM_IOJS_ORG_MIRROR`: + +```shell +export NVM_IOJS_ORG_MIRROR=https://iojs.org/dist +nvm install iojs-v1.0.3 + +NVM_IOJS_ORG_MIRROR=https://iojs.org/dist nvm install iojs-v1.0.3 +``` + +`nvm use` will not, by default, create a "current" symlink. Set `$NVM_SYMLINK_CURRENT` to "true" to enable this behavior, which is sometimes useful for IDEs. Note that using `nvm` in multiple shell tabs with this environment variable enabled can cause race conditions. + +### [](#nvmrc).nvmrc + +You can create a `.nvmrc` file containing a node version number (or any other string that `nvm` understands; see `nvm --help` for details) in the project root directory (or any parent directory). Afterwards, `nvm use`, `nvm install`, `nvm exec`, `nvm run`, and `nvm which` will use the version specified in the `.nvmrc` file if no version is supplied on the command line. + +For example, to make nvm default to the latest 5.9 release, the latest LTS version, or the latest node version for the current directory: + +```shell +$ echo "5.9" > .nvmrc + +$ echo "lts/*" > .nvmrc # to default to the latest LTS version + +$ echo "node" > .nvmrc # to default to the latest version +``` + +\[NB these examples assume a POSIX-compliant shell version of `echo`. If you use a Windows `cmd` development environment, eg the `.nvmrc` file is used to configure a remote Linux deployment, then keep in mind the `"`s will be copied leading to an invalid file. Remove them.\] + +Then when you run nvm: + +```shell +$ nvm use +Found '/path/to/project/.nvmrc' with version <5.9> +Now using node v5.9.1 (npm v3.7.3) +``` + +`nvm use` et. al. will traverse directory structure upwards from the current directory looking for the `.nvmrc` file. In other words, running `nvm use` et. al. in any subdirectory of a directory with an `.nvmrc` will result in that `.nvmrc` being utilized. + +The contents of a `.nvmrc` file **must** be the `` (as described by `nvm --help`) followed by a newline. No trailing spaces are allowed, and the trailing newline is required. + +### [](#deeper-shell-integration)Deeper Shell Integration + +You can use [`avn`](https://github.com/wbyoung/avn) to deeply integrate into your shell and automatically invoke `nvm` when changing directories. `avn` is **not** supported by the `nvm` development team. Please [report issues to the `avn` team](https://github.com/wbyoung/avn/issues/new). + +If you prefer a lighter-weight solution, the recipes below have been contributed by `nvm` users. They are **not** supported by the `nvm` development team. We are, however, accepting pull requests for more examples. + +#### [](#bash)bash + +##### [](#automatically-call-nvm-use)Automatically call `nvm use` + +Put the following at the end of your `$HOME/.bashrc`: + +```shell +cdnvm() { + cd "$@"; + nvm_path=$(nvm_find_up .nvmrc | tr -d '\n') + + # If there are no .nvmrc file, use the default nvm version + if [[ ! $nvm_path = *[^[:space:]]* ]]; then + + declare default_version; + default_version=$(nvm version default); + + # If there is no default version, set it to `node` + # This will use the latest version on your machine + if [[ $default_version == "N/A" ]]; then + nvm alias default node; + default_version=$(nvm version default); + fi + + # If the current version is not the default version, set it to use the default version + if [[ $(nvm current) != "$default_version" ]]; then + nvm use default; + fi + + elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then + declare nvm_version + nvm_version=$(<"$nvm_path"/.nvmrc) + + declare locally_resolved_nvm_version + # `nvm ls` will check all locally-available versions + # If there are multiple matching versions, take the latest one + # Remove the `->` and `*` characters and spaces + # `locally_resolved_nvm_version` will be `N/A` if no local versions are found + locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]') + + # If it is not already installed, install it + # `nvm install` will implicitly use the newly-installed version + if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then + nvm install "$nvm_version"; + elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then + nvm use "$nvm_version"; + fi + fi +} +alias cd='cdnvm' +cd $PWD +``` + +This alias would search 'up' from your current directory in order to detect a `.nvmrc` file. If it finds it, it will switch to that version; if not, it will use the default version. + +#### [](#zsh)zsh + +##### [](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file)Calling `nvm use` automatically in a directory with a `.nvmrc` file + +Put this into your `$HOME/.zshrc` to call `nvm use` automatically whenever you enter a directory that contains an `.nvmrc` file with a string telling nvm which node to `use`: + +```shell +# place this after nvm initialization! +autoload -U add-zsh-hook +load-nvmrc() { + local node_version="$(nvm version)" + local nvmrc_path="$(nvm_find_nvmrc)" + + if [ -n "$nvmrc_path" ]; then + local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")") + + if [ "$nvmrc_node_version" = "N/A" ]; then + nvm install + elif [ "$nvmrc_node_version" != "$node_version" ]; then + nvm use + fi + elif [ "$node_version" != "$(nvm version default)" ]; then + echo "Reverting to nvm default version" + nvm use default + fi +} +add-zsh-hook chpwd load-nvmrc +load-nvmrc +``` + +#### [](#fish)fish + +##### [](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file-1)Calling `nvm use` automatically in a directory with a `.nvmrc` file + +This requires that you have [bass](https://github.com/edc/bass) installed. + +```fish +# ~/.config/fish/functions/nvm.fish +function nvm + bass source ~/.nvm/nvm.sh --no-use ';' nvm $argv +end + +# ~/.config/fish/functions/nvm_find_nvmrc.fish +function nvm_find_nvmrc + bass source ~/.nvm/nvm.sh --no-use ';' nvm_find_nvmrc +end + +# ~/.config/fish/functions/load_nvm.fish +function load_nvm --on-variable="PWD" + set -l default_node_version (nvm version default) + set -l node_version (nvm version) + set -l nvmrc_path (nvm_find_nvmrc) + if test -n "$nvmrc_path" + set -l nvmrc_node_version (nvm version (cat $nvmrc_path)) + if test "$nvmrc_node_version" = "N/A" + nvm install (cat $nvmrc_path) + else if test nvmrc_node_version != node_version + nvm use $nvmrc_node_version + end + else if test "$node_version" != "$default_node_version" + echo "Reverting to default Node version" + nvm use default + end +end + +# ~/.config/fish/config.fish +# You must call it on initialization or listening to directory switching won't work +load_nvm +``` + +## [](#license)License + +nvm is released under the MIT license. + +Copyright (C) 2010 Tim Caswell and Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +## [](#running-tests)Running Tests + +Tests are written in [Urchin](https://github.com/scraperwiki/urchin). Install Urchin (and other dependencies) like so: + +``` +npm install +``` + +There are slow tests and fast tests. The slow tests do things like install node and check that the right versions are used. The fast tests fake this to test things like aliases and uninstalling. From the root of the nvm git repository, run the fast tests like this: + +``` +npm run test/fast +``` + +Run the slow tests like this: + +``` +npm run test/slow +``` + +Run all of the tests like this: + +``` +npm test +``` + +Nota bene: Avoid running nvm while the tests are running. + +## [](#environment-variables)Environment variables + +nvm exposes the following environment variables: + +- `NVM_DIR` \- nvm's installation directory. +- `NVM_BIN` \- where node, npm, and global packages for the active version of node are installed. +- `NVM_INC` \- node's include file directory (useful for building C/C++ addons for node). +- `NVM_CD_FLAGS` \- used to maintain compatibility with zsh. +- `NVM_RC_VERSION` \- version from .nvmrc file if being used. + +Additionally, nvm modifies `PATH`, and, if present, `MANPATH` and `NODE_PATH` when changing versions. + +## [](#bash-completion)Bash Completion + +To activate, you need to source `bash_completion`: + +```shell +[[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion +``` + +Put the above sourcing line just below the sourcing line for nvm in your profile (`.bashrc`, `.bash_profile`). + +### [](#usage-1)Usage + +nvm: + +> $ nvm Tab + +``` +alias deactivate install list-remote reinstall-packages uninstall version +cache exec install-latest-npm ls run unload version-remote +current help list ls-remote unalias use which +``` + +nvm alias: + +> $ nvm alias Tab + +``` +default iojs lts/* lts/argon lts/boron lts/carbon lts/dubnium lts/erbium node stable unstable +``` + +> $ nvm alias my_alias Tab + +``` +v10.22.0 v12.18.3 v14.8.0 +``` + +nvm use: + +> $ nvm use Tab + +``` +my_alias default v10.22.0 v12.18.3 v14.8.0 +``` + +nvm uninstall: + +> $ nvm uninstall Tab + +``` +my_alias default v10.22.0 v12.18.3 v14.8.0 +``` + +## [](#compatibility-issues)Compatibility Issues + +`nvm` will encounter some issues if you have some non-default settings set. (see [#606](https://github.com/nvm-sh/nvm/issues/606)) The following are known to cause issues: + +Inside `~/.npmrc`: + +```shell +prefix='some/path' +``` + +Environment Variables: + +```shell +$NPM_CONFIG_PREFIX +$PREFIX +``` + +Shell settings: + +```shell +set -e +``` + +## [](#installing-nvm-on-alpine-linux)Installing nvm on Alpine Linux + +In order to provide the best performance (and other optimisations), nvm will download and install pre-compiled binaries for Node (and npm) when you run `nvm install X`. The Node project compiles, tests and hosts/provides these pre-compiled binaries which are built for mainstream/traditional Linux distributions (such as Debian, Ubuntu, CentOS, RedHat et al). + +Alpine Linux, unlike mainstream/traditional Linux distributions, is based on [BusyBox](https://www.busybox.net/), a very compact (~5MB) Linux distribution. BusyBox (and thus Alpine Linux) uses a different C/C++ stack to most mainstream/traditional Linux distributions - [musl](https://www.musl-libc.org/). This makes binary programs built for such mainstream/traditional incompatible with Alpine Linux, thus we cannot simply `nvm install X` on Alpine Linux and expect the downloaded binary to run correctly - you'll likely see "...does not exist" errors if you try that. + +There is a `-s` flag for `nvm install` which requests nvm download Node source and compile it locally. + +If installing nvm on Alpine Linux *is* still what you want or need to do, you should be able to achieve this by running the following from you Alpine Linux shell: + +```shell +apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash +``` + +The Node project has some desire but no concrete plans (due to the overheads of building, testing and support) to offer Alpine-compatible binaries. + +As a potential alternative, @mhart (a Node contributor) has some [Docker images for Alpine Linux with Node and optionally, npm, pre-installed](https://github.com/mhart/alpine-node). + +## [](#uninstalling--removal)Uninstalling / Removal + +### [](#manual-uninstall)Manual Uninstall + +To remove `nvm` manually, execute the following: + +```shell +$ rm -rf "$NVM_DIR" +``` + +Edit `~/.bashrc` (or other shell resource config) and remove the lines below: + +```shell +export NVM_DIR="$HOME/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm +[[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion +``` + +## [](#docker-for-development-environment)Docker For Development Environment + +To make the development and testing work easier, we have a Dockerfile for development usage, which is based on Ubuntu 14.04 base image, prepared with essential and useful tools for `nvm` development, to build the docker image of the environment, run the docker command at the root of `nvm` repository: + +```shell +$ docker build -t nvm-dev . +``` + +This will package your current nvm repository with our pre-defined development environment into a docker image named `nvm-dev`, once it's built with success, validate your image via `docker images`: + +```shell +$ docker images + +REPOSITORY TAG IMAGE ID CREATED SIZE +nvm-dev latest 9ca4c57a97d8 7 days ago 650 MB +``` + +If you got no error message, now you can easily involve in: + +```shell +$ docker run -h nvm-dev -it nvm-dev + +nvm@nvm-dev:~/.nvm$ +``` + +Please note that it'll take about 8 minutes to build the image and the image size would be about 650MB, so it's not suitable for production usage. + +For more information and documentation about docker, please refer to its official website: + +- https://www.docker.com/ +- https://docs.docker.com/ + +## [](#problems)Problems + +- If you try to install a node version and the installation fails, be sure to run `nvm cache clear` to delete cached node downloads, or you might get an error like the following: + + curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume. + +- Where's my `sudo node`? Check out [#43](https://github.com/nvm-sh/nvm/issues/43) + +- After the v0.8.6 release of node, nvm tries to install from binary packages. But in some systems, the official binary packages don't work due to incompatibility of shared libs. In such cases, use `-s` option to force install from source: + + +```shell +nvm install -s 0.8.6 +``` + +- If setting the `default` alias does not establish the node version in new shells (i.e. `nvm current` yields `system`), ensure that the system's node `PATH` is set before the `nvm.sh` source line in your shell profile (see [#658](https://github.com/nvm-sh/nvm/issues/658)) + +## [](#macos-troubleshooting)macOS Troubleshooting + +**nvm node version not found in vim shell** + +If you set node version to a version other than your system node version `nvm use 6.2.1` and open vim and run `:!node -v` you should see `v6.2.1` if you see your system version `v0.12.7`. You need to run: + +```shell +sudo chmod ugo-x /usr/libexec/path_helper +``` + +More on this issue in [dotphiles/dotzsh](https://github.com/dotphiles/dotzsh#mac-os-x). + +**nvm is not compatible with the npm config "prefix" option** + +Some solutions for this issue can be found [here](https://github.com/nvm-sh/nvm/issues/1245) + +There is one more edge case causing this issue, and that's a **mismatch between the `$HOME` path and the user's home directory's actual name**. + +You have to make sure that the user directory name in `$HOME` and the user directory name you'd see from running `ls /Users/` **are capitalized the same way** ([See this issue](https://github.com/nvm-sh/nvm/issues/2261)). + +To change the user directory and/or account name follow the instructions [here](https://support.apple.com/en-us/HT201548) + +**Homebrew makes zsh directories unsecure** + +```shell +zsh compinit: insecure directories, run compaudit for list. +Ignore insecure directories and continue [y] or abort compinit [n]? y +``` + +Homebrew causes insecure directories like `/usr/local/share/zsh/site-functions` and `/usr/local/share/zsh`. This is **not** an `nvm` problem - it is a homebrew problem. Refer [here](https://github.com/zsh-users/zsh-completions/issues/680) for some solutions related to the issue. + +**Macs with M1 chip** + +*January 2021:* there are no pre-compiled NodeJS binaries for versions prior to 15.x for Apple's new M1 chip (arm64 architecture). + +Some issues you may encounter: + +- using `nvm` to install, say, `v14.15.4`: + - the C code compiles successfully + - but crashes with an out of memory error when used + - increasing the memory available to node still produces the out of memory errors: + + ```shell + $ NODE_OPTIONS="--max-old-space-size=4096" ./node_modules/.bin/your_node_package + ``` + +- when using `nvm` to install some versions, the compilation fails + +One solution to this issue is to change the architecture of your shell from arm64 to x86. + +Let's assume that: + +- you already have versions `12.20.1` and `14.15.4` installed using `nvm` +- the current version in use is `14.15.4` +- you are using the `zsh` shell + +```shell +# Check what version you're running: +$ node --version +v14.15.4 +# Check architecture of the `node` binary: +$ node -p process.arch +arm64 +# This confirms that the arch is for the M1 chip, which is causing the problems. +# So we need to uninstall it. +# We can't uninstall the version we are currently using, so switch to another version: +$ nvm install v12.20.1 +# Now uninstall the version we want to replace: +$ nvm uninstall v14.15.4 +# Set the architecture for our shell to 64-bit X86: +$ arch -x86_64 zsh +# Install node using nvm. This should download the precompiled x64 binary: +$ nvm install v14.15.4 +# Now check that the architecture is correct: +$ node -p process.arch +x64 +# It is now safe to revert zsh back to the native architecture: +$ arch -arm64 zsh +``` + +## About + +Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions + +### Topics + +[nodejs](https://github.com/topics/nodejs "Topic: nodejs") [shell](https://github.com/topics/shell "Topic: shell") [bash](https://github.com/topics/bash "Topic: bash") [zsh](https://github.com/topics/zsh "Topic: zsh") [node](https://github.com/topics/node "Topic: node") [install](https://github.com/topics/install "Topic: install") [nvm](https://github.com/topics/nvm "Topic: nvm") [posix](https://github.com/topics/posix "Topic: posix") [lts](https://github.com/topics/lts "Topic: lts") [version-manager](https://github.com/topics/version-manager "Topic: version-manager") [node-js](https://github.com/topics/node-js "Topic: node-js") [posix-compliant](https://github.com/topics/posix-compliant "Topic: posix-compliant") [nvmrc](https://github.com/topics/nvmrc "Topic: nvmrc") + +### Resources + +[Readme](#readme) + +### License + +[MIT License](https://github.com/nvm-sh/nvm/blob/master/LICENSE.md) + +## [Releases 89](https://github.com/nvm-sh/nvm/releases) + +[v0.37.2 Latest
on 28 Nov 2020](https://github.com/nvm-sh/nvm/releases/tag/v0.37.2) + +[\+ 88 releases](https://github.com/nvm-sh/nvm/releases) + +## Sponsor this project + +- [](https://github.com/ljharb) [**ljharb** Jordan Harband](https://github.com/ljharb)[](https://github.com/sponsors/ljharb) + +- [tidelift.com/funding/github/**npm/nvm**](https://tidelift.com/funding/github/npm/nvm) + +[Learn more about GitHub Sponsors](https://github.com/sponsors) + +## [Packages](https://github.com/orgs/nvm-sh/packages?repo_name=nvm) + +No packages published + +## [Used by 1.3k](https://github.com/nvm-sh/nvm/network/dependents?package_id=UGFja2FnZS01MDk3MDc4ODc%3D) + +[-
-
-
-
-
-
-
-
\+ 1,319](https://github.com/nvm-sh/nvm/network/dependents?package_id=UGFja2FnZS01MDk3MDc4ODc%3D) + +## [Contributors 289](https://github.com/nvm-sh/nvm/graphs/contributors) + +- [](https://github.com/ljharb) +- [](https://github.com/PeterDaveHello) +- [](https://github.com/creationix) +- [](https://github.com/koenpunt) +- [](https://github.com/lukechilds) +- [](https://github.com/frasertweedale) +- [](https://github.com/agnoster) +- [](https://github.com/danielb2) +- [](https://github.com/nlf) +- [](https://github.com/nmarghetti) +- [](https://github.com/ELLIOTTCABLE) + +[\+ 278 contributors](https://github.com/nvm-sh/nvm/graphs/contributors) + +## Languages + +- [Shell 97.6%](https://github.com/nvm-sh/nvm/search?l=shell) +- [Makefile 1.4%](https://github.com/nvm-sh/nvm/search?l=makefile) +- Other 1.0% + +- © 2021 GitHub, Inc. +- [Terms](https://github.com/site/terms) +- [Privacy](https://github.com/site/privacy) +- [Security](https://github.com/security) +- [Status](https://www.githubstatus.com/) +- [Docs](https://docs.github.com) + +[](https://github.com "GitHub") + +- [Contact GitHub](https://support.github.com) +- [Pricing](https://github.com/pricing) +- [API](https://docs.github.com) +- [Training](https://services.github.com) +- [Blog](https://github.blog) +- [About](https://github.com/about) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Visual Studio Code Config.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Visual Studio Code Config.md new file mode 100644 index 00000000..683b964f --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/Visual Studio Code Config.md @@ -0,0 +1,241 @@ +--- +title: Visual Studio Code Config +updated: 2021-03-14 21:41:50Z +created: 2021-03-14 18:13:27Z +--- + +# VS Code Extensions +## Personal machine +- [ ] Draw.io Integration +- [ ] Draw.io Integration: Mermaid plugin +- [ ] UMLet +- [ ] Control Snippets +- [ ] indent-rainbow +- [ ] Autocomplete Symbols +- [ ] Braun Extension Pack + - [ ] Prettier + - [ ] Live Share + - [ ] Material Icon Theme + - [ ] GitLens + - [ ] Bracket Pair Colorizer 2 + - [ ] EditorConfig for VSCode + - [ ] ESLint + - [ ] Dracula Official Theme (not necessary) +- [ ] .gitignore generator +- [ ] gitignore +- [ ] Auto Add Brackets in String interpolation +- [ ] Auto Complete Tag - extension + - [ ] Auto Close Tag + - [ ] Auto Rename Tag +- [ ] ES7 React/Redux/GraphQL/React-Native snippets +- [ ] Code Spell Checker +- [ ] DotENV +- [ ] Live Share Extension Pack + - [ ] Live Share + - [ ] Live Share Audio +- [ ] JavaScript + - [ ] Quokka.js + - [ ] i18n Ally + - [ ] JavaScript (ES6) code snippets + - [ ] NPM Intellisense + - [ ] Split HTML Attributes (Vue, React, Angular) + - [ ] Vue + - [ ] Vetur + - [ ] Vue VScode snippets + - [ ] Vue 3 Snippets + - [ ] Angular Essentials + - [ ] Angular Snippets version 11 + - [ ] Angular Language Service + - [ ] Editor Config for VSCode + - [ ] ESLint + - [ ] Debugger for Chrome + - [ ] Winter is Coming Theme + - [ ] Peacock + - [ ] Prettier + - [ ] NPM + - [ ] Material Icon Theme + - [ ] NX Console + - [ ] Debugger for Mirosoft Edge (not needed) +- [ ] Path Intellisense +- [ ] Color Highlight +- [ ] Highlight Matching Tag +- [ ] HTML + - [ ] CSS Peek + - [ ] Live Sass Compiler glenn2223.live-sass + - [ ] Sass Lint glen-84.sass-lint + - [ ] Sass syler.sass-indented + - [ ] Placeholder Images + - [ ] Lorem ipsum + - [ ] IntelliSense for CSS class names in HTML + - [ ] svg +- [ ] AWS + - [ ] AWS Amplify + - [ ] AWS Toolkit +- [ ] Azure + - [ ] Azure Pipelines + - [ ] Azure Account + - [ ] Azure Functions + - [ ] Azure CLI Tools + - [ ] Azure App Service + - [ ] Azure Database + - [ ] Azure Storage + - [ ] Azure Static Web Apps + - [ ] Azure Tools - extension pack. Includes above + - [ ] Azure Pipelines + - [ ] Azure resource manager + - [ ] Azure Virtual Machine + - [ ] ARM Template Viewer +- [ ] Dotnet + - [ ] C# + - [ ] Ionide-fsharp + - [ ] .NET Install Tool for Extension Authors + - [ ] .NET & Azure Extension Pack + - [ ] ESLint + - [ ] DotEnv + - [ ] Docker + - [ ] C# + - [ ] Azure Account + - [ ] Azure Functions + - [ ] Azure CLI Tools + - [ ] Azure App Service + - [ ] Azure Database + - [ ] Azure Storage + - [ ] .gitignore generator + - [ ] Azure Static Web Apps +- [ ] Docker +- [ ] Duplicate Action +- [ ] Edit CSV +- [ ] Python + - [ ] Python + - [ ] Jupyter + - [ ] Pylance + - [ ] MagicPython + - [ ] Python Test Explorer for Visual Studio Code + - [ ] python snippets + - [ ] Python Type Hint +- [ ] Remote Development - extension pack + - [ ] Remote Containers + - [ ] Remote SSH + - [ ] Remote - SSH: Editing Configuration Files +- [ ] Rest Client +- [ ] Todo Tree +- [ ] Visual Studio Intellicode +- [ ] YAML +- [ ] vscode faker +- [ ] Text Power Tools +- [ ] C/C++ + - [ ] C/C++ + - [ ] Doxygen Documentation Generator + +## Work Machine +- [ ] Draw.io Integration +- [ ] Draw.io Integration: Mermaid plugin +- [ ] UMLet +- [ ] Control Snippets +- [ ] indent-rainbow +- [ ] Autocomplete Symbols +- [ ] Braun Extension Pack + - [ ] Prettier + - [ ] Live Share + - [ ] Material Icon Theme + - [ ] GitLens + - [ ] Bracket Pair Colorizer 2 + - [ ] EditorConfig for VSCode + - [ ] ESLint + - [ ] Dracula Official Theme (not necessary) +- [ ] .gitignore generator +- [ ] gitignore +- [ ] Auto Add Brackets in String interpolation +- [ ] Auto Complete Tag - extension + - [ ] Auto Close Tag + - [ ] Auto Rename Tag +- [ ] ES7 React/Redux/GraphQL/React-Native snippets +- [ ] Code Spell Checker +- [ ] DotENV +- [ ] Live Share Extension Pack + - [ ] Live Share + - [ ] Live Share Audio +- [ ] JavaScript + - [ ] Quokka.js + - [ ] i18n Ally + - [ ] JavaScript (ES6) code snippets + - [ ] NPM Intellisense + - [ ] Split HTML Attributes (Vue, React, Angular) +- [ ] Path Intellisense +- [ ] Color Highlight +- [ ] Highlight Matching Tag +- [ ] HTML + - [ ] CSS Peek + - [ ] Live Sass Compiler glenn2223.live-sass + - [ ] Sass Lint glen-84.sass-lint + - [ ] Sass syler.sass-indented + - [ ] Placeholder Images + - [ ] Lorem ipsum + - [ ] IntelliSense for CSS class names in HTML + - [ ] svg +- [ ] AWS + - [ ] AWS Amplify + - [ ] AWS Toolkit +- [ ] Docker +- [ ] Duplicate Action +- [ ] Edit CSV +- [ ] Remote Development - extension pack + - [ ] Remote Containers + - [ ] Remote SSH + - [ ] Remote - SSH: Editing Configuration Files +- [ ] Rest Client +- [ ] Todo Tree +- [ ] Visual Studio Intellicode +- [ ] YAML +- [ ] vscode faker +- [ ] Text Power Tools +- [ ] Ruby + - [ ] Faker Snippets + - [ ] endwise + - [ ] Rails i18n + - [ ] Rails DB Schema + - [ ] Rails Routes + - [ ] Ruby + - [ ] Ruby Symbols + - [ ] Ruby and Rails snippets + - [ ] Ruby Solargraph + - [ ] ruby-rubocop + - [ ] Simple Ruby ERB + - [ ] Slim + - [ ] VSCode Ruby + - [ ] rails-touchbar (macbook pro with touchbar) + - [ ] Ruby Syntax Replacer + - [ ] Rails Fast Nav + - [ ] Ruby Test Explorer + - [ ] Rails Syntax Highlighting + - [ ] Ruby on Rails MisterJDevPack + - [ ] Rails + - [ ] Ruby + - [ ] Ruby on Rails + - [ ] Ruby Solargraph + - [ ] Slim + - [ ] VSCode Ruby + - [ ] vscode-gemfile + - [ ] endwise +### Themes +- [ ] Night Owl +- [ ] Material Product Icons +- [ ] Winter is Coming +- [ ] Make Apps Theme +### Fonts - Using Homebrew +- [ ] Fira Code +- [ ] Cascadia Code +- [ ] Other Fonts + - [ ] Menlo + - [ ] mononoki + - [ ] Monaco + - [ ] Inconsolata + +### Maybe +- [ ] Code Tour +- [ ] Better Comments +- [ ] Incrementor +- [ ] Insert Numbers +- [ ] Neo Vim +- [ ] Kite AutoComplete AI Code: Python, Java, Go, PHP, C/C#/C++, Javascript, HTML/CSS, Typescript, React, Ruby, Scala, Kotlin, Bash, Vue, React - currently not compatible with M1 macbook +- [ ] Tabnine Autocomplete AI: JavaScript, Python, TypeScript, PHP, Go, Java, Ruby, C/C++, HTML/CSS, C#, Rust, SQL, Bash, Kotlin, React diff --git "a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Best VSCode Extensions_ \360\237\244\251 Best VS Codes Extension.md" "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Best VSCode Extensions_ \360\237\244\251 Best VS Codes Extension.md" new file mode 100644 index 00000000..13d454ad --- /dev/null +++ "b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Best VSCode Extensions_ \360\237\244\251 Best VS Codes Extension.md" @@ -0,0 +1,547 @@ +--- +title: >- + Best VSCode Extensions: 🤩 Best VS Codes Extensions 🛠 Every Developers + Should Use in 2021 - DEV Community +updated: 2021-03-14 11:34:44Z +created: 2021-03-14 11:34:44Z +source: >- + https://dev.to/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3 +--- + +[Skip to content](#main-content) + +[](https://dev.to/) + +[Log in](https://dev.to/enter) [Create account](https://dev.to/enter?state=new-user) + + + +# Best VSCode Extensions 🤩 Best VS Codes Extensions 🛠 Every Developers Should Use in 2021 + +[#webdev](https://dev.to/t/webdev) [#vscode](https://dev.to/t/vscode) [#productivity](https://dev.to/t/productivity) [#opensource](https://dev.to/t/opensource) + + [ themeselection](https://dev.to/theme_selection) Aug 24, 2020 ・*Updated on Feb 17* ・9 min read + +Are you looking for the amazing VS Code extensions for your web app? Then Here is the amazing collection of the best vs code extensions of 2021. + +[**VS Code extensions**](https://marketplace.visualstudio.com/VSCode) are essential in modern web development. They are basically a source code editor for building modern web applications. It is a free and open-source editor. Furthermore, It supports a huge number of extensions that can be used for web app development. + +**[VS Code](https://code.visualstudio.com/)** extensions let you add debuggers, languages, and tools to your installation in order to support your development workflow. Their rich extensibility model lets extension authors plug directly into the VS Code UI and contribute functionality through the same APIs used by VS Code. + +So, to help you choose the right extensions that will add more value than the resources they draw from your system, we’ve listed this extensive list of the best trending extensions available today. While some of these are well-known and commonly-installed, others are highly recommended extensions by experienced developers who use Visual Studio Code. + +##### [](#1-gitlens)1\. [GITLENS](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) + +[![Gitlens](../../../../_resources/gitlens-preview_af72bf4934754fada08fe7e2609269d0.gif)](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) + +GitLens simply helps you better understand code. Quickly glimpse into whom, why, and when a line or code block was changed. Besides, it let you explore the history and evolution of a codebase effortlessly. + +GitLens supercharges the Git capabilities built into Visual Studio Code. It also helps you to visualize code authorship at a glance via Git blame annotations and code lens, seamlessly navigate and explore Git repositories, gain valuable insights via powerful comparison commands, and so much more. + +Downloads: 5,972,117 + +##### [](#2-prettier-code-formatter)2\. [PRETTIER – CODE FORMATTER](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) + +[![Prettier code formatter](../../../../_resources/prettier_555a2ea997884d419268503d16de78c5.png)](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) + +It is an opinionated code formatter that enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary. Besides, it supports many languages. It can be integrated with the most editor. + +Downloads: 7,676,738 + +##### [](#3-eslint)3\. [ESLINT](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) + +[![Eslint](../../../../_resources/12-ESLint-1024x640-2_3aa1b1e547164d3e8a1b7729a1086.png)](https://themeselection.com/wp-content/uploads/2020/08/12-ESLint-1024x640-2.png) + +ESLint statically analyzes your code to quickly find problems. ESLint statically analyzes your code to quickly find problems. It is built into most text editors and you can run ESLint as part of your continuous integration pipeline. ESLint fixes are syntax-aware so you won’t experience errors introduced by traditional find-and-replace algorithms. + +Downloads: 10,236,293 + +##### [](#4-quokkajs)4\. [QUOKKA.JS](https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode) + +[![Quokkajs](../../../../_resources/main-video_b14c4fb63894419896d26e1802ff83a6.gif)](https://marketplace.visualstudio.com/items?itemName=WallabyJs.quokka-vscode) + +Quokka.js is a developer productivity tool for rapid JavaScript / TypeScript prototyping. Runtime values are updated and displayed in your IDE next to your code, as you type. It makes **prototyping, learning, and testing** JavaScript / TypeScript **blazingly fast**. By default no config is required, simply open a new Quokka file and start experimenting + +Downloads: 754,978 + +##### [](#5-path-intellisence)5\. [PATH INTELLISENCE](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) + +[![Path intellisence](../../../../_resources/iaHeUiDeTUZuo_604cf57a1bb44edbad9813ccbb05351e.gif)](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) + +It adds Intellisense-style completion to filenames, letting you easily type long path names. It removes the file extension by default if the statement is an import statement +Downloads: 3,318,156 + +##### [](#6-path-autocomplete)6\. [PATH AUTOCOMPLETE](https://marketplace.visualstudio.com/items?itemName=ionutvmi.path-autocomplete) + +[![Pathautocomplete](../../../../_resources/path-autocomplete_780f2062ceae4a7a8cb4148d6ddf0568.gif)](https://marketplace.visualstudio.com/items?itemName=ionutvmi.path-autocomplete) + +This extension provides path completion for VS Code so you don’t have to memorize those long paths. +Downloads: 558,868 + +##### [](#7-visual-studio-intellicode)7\. [VISUAL STUDIO INTELLICODE](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode) + +[![visual studion intellicode](../../../../_resources/_3Flinkid_3D2006041_1c02d659cce048cbaaabef50c399b7.gif)](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode) + +It is built for helping developers and programmers with smart code completion suggestions. Also, it comes with default support for Python, TypeScript/JavaScript, React, and Java. IntelliCode saves you time by putting what you’re most likely to use at the top of your completion list. IntelliCode recommendations are based on thousands of open source projects on GitHub each with over 100 stars. When combined with the context of your code, the completion list is tailored to promote common practices. + +Downloads: 6,401,943 + +##### [](#8-import-cost)8\. [IMPORT COST](https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost) + +[![Import cost VS Code](../../../../_resources/Import-Cost-vscode_5028d9faf049482aa1257416a5ad628.jpg)](https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost) + +This extension will display inline in the editor the size of the imported package. The extension utilizes webpack with babili-webpack-plugin in order to detect the imported size. + +Downloads: 710,298 + +##### [](#9-filesize)9\. [FILESIZE](https://marketplace.visualstudio.com/items?itemName=mkxml.vscode-filesize) + +[![Filesize](../../../../_resources/02_3f75575191cd498cb431e174893a2d9e.jpg)](https://marketplace.visualstudio.com/items?itemName=mkxml.vscode-filesize) + +It displays the size of the focused file in the status bar of the editor. +Downloads: 198,807 + +##### [](#10-live-server)10\. [LIVE SERVER](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) + +[![Live server](../../../../_resources/vscode-live-server-animated-demo_4622e8087eac4ee19.gif)](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) + +Launch a development local Server by a single click and watch live changes with some extra functionality +Downloads: 6,541,468 + +##### [](#11-project-manager)11\. [PROJECT MANAGER](https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager) + +[![project manager](../../../../_resources/vscode-project-manager-side-bar_38d6fa5233994c3eae.gif)](https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager) + +It helps you to easily access your projects, no matter where they are located. Don’t miss those important projects anymore. +Downloads: 1,090,254 + +##### [](#12-code-spell-checker)12\. [CODE SPELL CHECKER](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) + +[![Code spell checker](../../../../_resources/example_de1b67f11c754488b87808165b351d8a.gif)](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) + +A simple source code spell checker for multiple programming languages. +Downloads: 1,596,862 + +##### [](#13-bracket-pair-colorizer)13\. [BRACKET PAIR COLORIZER](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer) + +[![Bracket Pair Colorizer](../../../../_resources/06_a2d808b4386a4d73a654a80c73000d07.jpg)](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer) + +This extension allows matching brackets to be identified with colors. The user can define which tokens to match, and which colors to use. +Downloads: 1,154,226 + +##### [](#14-remote-ssh)14\. [REMOTE — SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) + +[![Remote ssh](../../../../_resources/remote-ssh_10b51a08297c410b9815769b8056fdd6.png)](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) + +The Remote – SSH extension lets you use any remote machine with an SSH server as your development environment. +Downloads: 1,605,734 + +##### [](#15-rest-client)15\. [REST CLIENT](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) + +[![rest client](../../../../_resources/usage_f02475261a4b4e83b4838f1e1ebf366c.gif)](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) + +REST Client allows you to send HTTP requests and view the response in the Visual Studio Code directly. +Downloads: 1,025,700 + +##### [](#16-javascript-es6-code-snippets)16\. [JAVASCRIPT (ES6) CODE SNIPPETS](https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets) + +[![Javascript Code Snippets](../../../../_resources/09_b9fb48885a3344f087206b62b9ea7f66.jpg)](https://marketplace.visualstudio.com/items?itemName=xabikos.JavaScriptSnippets) + +This extension contains code snippets for JavaScript in ES6 syntax for Vs Code editor (supports both JavaScript and TypeScript). +Downloads: 3,789,793 + +##### [](#17-code-runner)17\. [CODE RUNNER](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner) + +[![code runner](../../../../_resources/usage_d12a7384fc894ab48f0d02905b25593e.gif)](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner) + +Code Runner is a run code snippet or code file for multiple languages. It is useful to run the code file of the currently active text editor, through the context menu of file explorer. Also, you can run selected code snippets in the text editor. It supports REPL by running code in Integrated terminal + +Downloads: 4,549,546 + +##### [](#18-docker)18\. [DOCKER](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) + +[![Docker](../../../../_resources/docker_9412cf37514e445fae4a9328dce4bbd5.png)](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) + +The Docker extension makes it easy to build, manage, and deploy containerized applications from Visual Studio Code. It also provides one-click debugging of Node.js, Python, and .NET Core inside a container. The extension recognizes workspaces that use most popular development languages (C#, Node.js, Python, Ruby, Go, and Java) and customizes generated Docker files accordingly. The Docker extension contributes a Docker view to VS Code. The Docker view lets you examine and manage Docker assets: containers, images, volumes, networks, and container registries + +Downloads: 5,136,014 + +##### [](#19-better-comments)19\. [BETTER COMMENTS](https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments) + +[![Better Comments](../../../../_resources/better-comments_95c24991739741639579b190047129e5.png)](https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-comments) + +The Better Comments extension will help you create more human-friendly comments in your code. You will be able to categorize your annotations into alerts, queries, TODOs, highlights, etc. Besides, commented out code can also be styled to make it clear the code shouldn’t be there, and any other comment styles you’d like can be specified in the settings. + +Downloads: 960,927 + +##### [](#20-debugger-for-chrome)20\. [DEBUGGER FOR CHROME](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) + +[![Debugger For Chrome](../../../../_resources/debugger-for-chrome_42ae93fdb43b4041a1a04d5f02a741.png)](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) + +The debugger is a VS Code extension to debug your JavaScript code in the Google Chrome browser or other targets that support the Chrome DevTools Protocol. It helps to debug eval scripts, script tags, scripts that are added dynamically, and setting breakpoints, including in source files when source maps are enabled. + +Downloads: 1,617,311 + +##### [](#21-markdown-all-in-one)21\. [MARKDOWN ALL IN ONE](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) + +[![Debugger for chrome](../../../../_resources/section-numbers_979bdcb6721b4f7d83cb1630def48e75.gif)](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one) + +All you need for Markdown (keyboard shortcuts, table of contents, auto preview, and more). It supports the following markdown syntax: + +- [CommonMark](https://spec.commonmark.org/) +- [Tables](https://help.github.com/articles/organizing-information-with-tables/), [strikethrough](https://help.github.com/articles/basic-writing-and-formatting-syntax/#styling-text) and [task lists](https://docs.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax#task-lists) (from GitHub Flavored Markdown) +- [Math support](https://github.com/waylonflinn/markdown-it-katex#syntax) (from KaTeX) +- [Front matter](https://github.com/ParkSB/markdown-it-front-matter#valid-front-matter) + +Downloads: 5,136,014 + +##### [](#22-search-nodemodules)22\. [SEARCH NODE_MODULES](https://marketplace.visualstudio.com/items?itemName=jasonnutter.search-node-modules) + +[![search node modules](../../../../_resources/demo_e4f839df4ff1407689ba4780c9d2dd93.gif)](https://marketplace.visualstudio.com/items?itemName=jasonnutter.search-node-modules) +Search node modules is a simple plugin for VS Code that allows you to quickly navigate the file inside your project’s node_modules directory. + +Downloads: 571,040 + +##### [](#23-settings-sync)23\. [SETTINGS SYNC](https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync) + +[![Setting sync](../../../../_resources/08-1_8cc73a359ff3465aad8150cd7186145e.jpg)](https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync) + +Setting sync lets you synchronize settings, snippets, themes, file icons, keybindings, workspaces, and extensions across machines by using a simple Gist. It supports GitHub Enterprise, pragmas with @sync keywords: host, os, and env. It is easy to Upload and Download on one click. It allows you to Sync any file across your machines. + +Downloads: 1,870,161 + +##### [](#24-npm)24\. [NPM](https://marketplace.visualstudio.com/items?itemName=eg2.vscode-npm-script) + +[![NPM](../../../../_resources/34-npm_bd501732560e4094be69eea72ffa16b4.png)](https://marketplace.visualstudio.com/items?itemName=eg2.vscode-npm-script) + +This extension supports running npm scripts defined in the package.json file and validating the installed modules against the dependencies defined in the package.json. The scripts can be run either in the integrated terminal or an output window. + +Downloads: 2,748,322 + +#### [](#conclusion)Conclusion: + +Well, Visual Studio Code had 4.9 million monthly active users in 2019. It is no doubt the best code editor out there at the moment. One of the best features is the [**Market Place**](https://marketplace.visualstudio.com/vscode) offering tons of extensions to customize it exactly to your needs and helping you in writing high-quality code. + +In this article, we will recommend these VS Code extensions for front-end engineers working with CSS, HTML, JavaScript, and frameworks like Angular, ReactJS, and VueJS. +We at [ThemeSelection](https://themeselection.com/) is using some of these extensions to create Modern & Clean Bootstrap Admin Template. + +[Vuexy - Vuejs, React, HTML & Laravel Admin Dashboard Template](https://themeselection.com/go/download-vuexy-vuejs/) + +[Apex - React Admin Template with Bootstrap + Redux](https://themeselection.com/go/download-apex-react/) + +[Chamaleon Free Bootstrap Admin Template](https://themeselection.com/products/chameleon-admin-free-bootstrap-dashboard-template/) + +You can also check some [free bootstrap admin template](https://themeselection.com/) made using these extensions. + +We would say this collection is not the complete one and the extensions are not necessarily the best but we hope it helps you to select the best tools to help you write high-quality code and become the best web developer. + +If you think this list is missing an extension feel free to suggest and extend it by adding your favorite in the comments section. + +## Discussion (26) + + + +Collapse + +[](https://dev.to/king11) + +[Lakshya Singh](https://dev.to/king11) • [Aug 24 '20](https://dev.to/king11/comment/142no) + +Thanks for this post it's really amazing although I do feel that settings sync is no more needed because in latest vscode update they have started providing it by default + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/142no) + +Collapse + +[](https://dev.to/theme_selection) + +[themeselection Author](https://dev.to/theme_selection) • [Aug 24 '20](https://dev.to/theme_selection/comment/142o6) + +Is it available now in the latest versions? I have heard about that that they will be going to provide it built-in. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/142o6) + +Collapse + +[](https://dev.to/king11) + +[Lakshya Singh](https://dev.to/king11) • [Aug 24 '20 • Edited on Aug 24](https://dev.to/king11/comment/142o7) + +Yeah it rolled out in july release i guess and i recently started using it + +Thread Thread + +[](https://dev.to/theme_selection) + +[themeselection Author](https://dev.to/theme_selection) • [Aug 24 '20](https://dev.to/theme_selection/comment/142ob) + +Great! I wasn't aware. Let me try and will update the post accordingly. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/142ob) + +Collapse + +[](https://dev.to/andreabaccolini) + +[Andrea](https://dev.to/andreabaccolini) • [Aug 28 '20](https://dev.to/andreabaccolini/comment/1471i) + +It is released but it is a preview feature + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1471i) + +Collapse + +[](https://dev.to/vrushank) + +[vrushank](https://dev.to/vrushank) • [Aug 24 '20 • Edited on Aug 24](https://dev.to/vrushank/comment/142p3) + +I agree!! Have you tried the default settings sync by vscode? How efficient and reliable is that? + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/142p3) + +Collapse + +[](https://dev.to/king11) + +[Lakshya Singh](https://dev.to/king11) • [Aug 25 '20 • Edited on Aug 25](https://dev.to/king11/comment/143pi) + +Yeah i guess it's cool although i am yet to try how the sync works when i switch or remove my OS and reinstall VS code but atleast you don't see that terminal opening up again and again telling you its uploading your new settings + +Thread Thread + +[](https://dev.to/michaelcurrin) + +[Michael](https://dev.to/michaelcurrin) • [Aug 29 '20](https://dev.to/michaelcurrin/comment/147oa) + +The older extension has quiet mode! Try it out in settings.json + +Thread Thread + +[](https://dev.to/king11) + +[Lakshya Singh](https://dev.to/king11) • [Aug 29 '20](https://dev.to/king11/comment/1485h) + +Ohh thanks for informing + +Thread Thread + +[](https://dev.to/michaelcurrin) + +[Michael](https://dev.to/michaelcurrin) • [Aug 29 '20](https://dev.to/michaelcurrin/comment/1488o) + +``` +{ "sync.quietSync": true } +``` + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1488o) + +Collapse + +[](https://dev.to/awesomeironman) + +[Cyrus Gracias](https://dev.to/awesomeironman) • [Aug 24 '20](https://dev.to/awesomeironman/comment/1434d) + +Try "Tab Nine" Extension which provides better intellisense/faster code complete +They say it uses ML +I find it provides very accurate predictions + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1434d) + +Collapse + +[](https://dev.to/nasimuddin) + +[Nasim Uddin](https://dev.to/nasimuddin) • [Aug 27 '20](https://dev.to/nasimuddin/comment/145hg) + +But the only problem of " Tab Nine" is it uses too much memory. Otherwise it's a cool code completion extension. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/145hg) + +Collapse + +[](https://dev.to/awesomeironman) + +[Cyrus Gracias](https://dev.to/awesomeironman) • [Aug 27 '20](https://dev.to/awesomeironman/comment/145hi) + +Ohh I didn't any face memory issues while working with it +I have 8GB ram with chrome, vscode, other small tools open at all times +And I'm working on a big website project + +Thread Thread + +[](https://dev.to/nasimuddin) + +[Nasim Uddin](https://dev.to/nasimuddin) • [Aug 27 '20](https://dev.to/nasimuddin/comment/145hl) + +Don't know why I had faced this problem. Ok I will try Tab Nine again, thanks😊 + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/145hl) + +Collapse + +[](https://dev.to/robole) + +[Rob OLeary](https://dev.to/robole) • [Aug 25 '20 • Edited on Sep 11](https://dev.to/robole/comment/1445m) + +Markdown All in One is a bit too much of a kitchen sink approach for my taste. If you just want to choose specific extensions for what you need in markdown, try the following: + +- [Marky Dynamic](https://marketplace.visualstudio.com/items?itemName=robole.marky-dynamic): Table of Contents and other dynamic content. It will auto-update on save. +- [Markdown Snippets](https://marketplace.visualstudio.com/items?itemName=robole.markdown-snippets): Extended Markdown snippets for quickly adding tables and task lists. +- [Marky Edit](https://marketplace.visualstudio.com/items?itemName=robole.marky-edit): Toggle-style editing. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1445m) + +Collapse + +[](https://dev.to/enguerran) + +[enguerran 🐐💨](https://dev.to/enguerran) • [Aug 26 '20](https://dev.to/enguerran/comment/1453g) + +Thank you for the selection. Some were already in my installed list (this is a proof of the selection quality 😋). + +By the way, the author of Bracket Pair Colorizer recommends v2: [marketplace.visualstudio.com/items...](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2) + +> - Differences between v1 and v2? +> - v2 Uses the same bracket parsing engine as VSCode, **greatly increasing speed and accuracy**. A new version was released because settings were cleaned up, breaking backwards compatibility. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1453g) + +Collapse + +[](https://dev.to/valeriopisapia) + +[Valerio](https://dev.to/valeriopisapia) • [Aug 28 '20](https://dev.to/valeriopisapia/comment/1470e) + +Awesome thanks 😊 + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1470e) + +Collapse + +[](https://dev.to/theme_selection) + +[themeselection Author](https://dev.to/theme_selection) • [Aug 28 '20](https://dev.to/theme_selection/comment/1471f) + +Welcome 🙏 + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1471f) + +Collapse + +[](https://dev.to/madza) + +[Madza](https://dev.to/madza) • [Aug 25 '20](https://dev.to/madza/comment/143g9) + +awesome list 👌 +be careful with Quokka tho, as you can mess up the code pretty quickly if you experiment with it in different parts of code simultaneously 😉 + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/143g9) + +Collapse + +[](https://dev.to/theme_selection) + +[themeselection Author](https://dev.to/theme_selection) • [Aug 25 '20](https://dev.to/theme_selection/comment/143kc) + +Thanks, Madza, for sharing your thoughts and experience with Quokka. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/143kc) + +Collapse + +[](https://dev.to/tjjone98) + +[Vu](https://dev.to/tjjone98) • [Nov 14 '20](https://dev.to/tjjone98/comment/181cf) + +If you want watch time log of project, language, time code in the day, the week, I recommend Waka plugin. Error Lens plugin: Improve highlighting of errors, warnings and other language diagnostics. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/181cf) + +Collapse + +[](https://dev.to/andrewbaisden) + +[Andrew Baisden](https://dev.to/andrewbaisden) • [Aug 28 '20](https://dev.to/andrewbaisden/comment/147cb) + +Great article I already have a few of them installed. + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/147cb) + +Collapse + +[](https://dev.to/michaelcurrin) + +[Michael](https://dev.to/michaelcurrin) • [Aug 29 '20](https://dev.to/michaelcurrin/comment/14824) + +Thanks for sharing. + +I cover most of those in my list here though without the GIFs. + +[gist.github.com/MichaelCurrin/e1f0...](https://gist.github.com/MichaelCurrin/e1f0b488d4ed8e6c24646e37c75fe2ea) + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/14824) + +Collapse + +[](https://dev.to/ronsoak) + +[ronsoak](https://dev.to/ronsoak) • [Aug 26 '20](https://dev.to/ronsoak/comment/145fo) + +Amazing Article, have downloaded a few :) + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/145fo) + +Collapse + +[](https://dev.to/xmariopereira) + +[Mario Pereira](https://dev.to/xmariopereira) • [Aug 25 '20](https://dev.to/xmariopereira/comment/14489) + +Still I can’t run unit test like webstorm :/ + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/14489) + +Collapse + +[](https://dev.to/tomaszs2) + +[Tomasz Smykowski](https://dev.to/tomaszs2) • [Jan 30](https://dev.to/tomaszs2/comment/1b2b9) + +Did you hear about Assistant? [dev.to/tomaszs2/i-ve-wrote-an-exte...](https://dev.to/tomaszs2/i-ve-wrote-an-extension-so-you-don-t-have-to-google-5485) + +[Comment button Reply](#/theme_selection/vs-codes-every-developers-should-use-in-2020-2fa3/comments/new/1b2b9) + +[Code of Conduct](https://dev.to/code-of-conduct) • [Report abuse](https://dev.to/report-abuse) + +## Read next + +[
### Underrated Articles on Dev.to from Last Week
Manpreet virk - Mar 9](https://dev.to/xenoxdev/underrated-articles-on-dev-to-from-last-week-4hgg)[
### You don't know the classNames library
Arek Nawo - Mar 10](https://dev.to/areknawo/you-don-t-know-the-classnames-library-k3n)[
### Top 10 VS Code Extensions to level up your development game
Sparsh Agarwal - Mar 11](https://dev.to/akathecoder/top-10-vs-code-extensions-to-level-up-your-development-game-18i)[
### Top 10 Date Pickers in React
deji adesoga - Mar 10](https://dev.to/desoga/top-10-date-pickers-in-react-9hm) + +[themeselection](https://dev.to/theme_selection) + +ThemeSelection provide selected high quality, modern design, professional and easy-to-use Bootstrap HTML Themes, Admin Dashboard Template and UI Kits to create your applications faster! + +- Joined + + Jan 3, 2020 + + +### More from [themeselection](https://dev.to/theme_selection) + +[Which PHP Framework 🛠 Is Best For Web Development In 2021?💥
#webdev #programming #php #tutorial](https://dev.to/theme_selection/which-php-framework-is-best-for-web-development-in-2021-5ck5)[How to use Exemplar - Free Avatar Library?🤩
#tutorial #design #opensource #html](https://dev.to/theme_selection/how-to-use-exemplar-free-avatar-library-1okp)[Bootstrap 5 CheatSheet By ThemeSelection! 🚀
#beginners #webdev #javascript #css](https://dev.to/theme_selection/bootstrap-5-cheatsheet-by-themeselection-2llg) + +[Home](https://dev.to/) [Listings](https://dev.to/listings) [Podcasts](https://dev.to/pod) [Videos](https://dev.to/videos) [Tags](https://dev.to/tags) [Code of Conduct](https://dev.to/code-of-conduct) [FAQ](https://dev.to/faq) [DEV Shop](https://shop.dev.to/) [Sponsors](https://dev.to/sponsors) [About](https://dev.to/about) [Privacy Policy](https://dev.to/privacy) [Terms of use](https://dev.to/terms) [Contact](https://dev.to/contact) [Sign In/Up](https://dev.to/enter) + +[Twitter](https://twitter.com/thepracticaldev) [Facebook](https://facebook.com/thepracticaldev) [Github](https://github.com/thepracticaldev) [Instagram](https://instagram.com/thepracticaldev) [Twitch](https://twitch.com/thepracticaldev) + +* * * + +[DEV Community](https://dev.to/) – A constructive and inclusive social network for software developers. With you every step of your journey. + +Built on [Forem](https://www.forem.com) — the [open source](https://dev.to/t/opensource) software that powers [DEV](https://dev.to) and other inclusive communities. + +Made with love and [Ruby on Rails](https://dev.to/t/rails). DEV Community © 2016 - 2021. + +[Forem logo](https://www.forem.com) + + \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Extensions.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Extensions.md new file mode 100644 index 00000000..79c2e66b --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Extensions.md @@ -0,0 +1,12 @@ +--- +title: Extensions +updated: 2021-03-20 22:04:48Z +created: 2021-03-20 22:03:37Z +--- + +* Dracula Official Theme +* Error Lens +* Bracket Pair Colorizer 2 +* Prettier +* Live Server +* Code runner \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Python Extensions.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Python Extensions.md new file mode 100644 index 00000000..1fe5c911 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Apple Macbook Pro M1 Setup/VsCode/Python Extensions.md @@ -0,0 +1,10 @@ +--- +title: Python Extensions +updated: 2021-03-20 21:56:00Z +created: 2021-03-20 21:49:23Z +--- + +# Python Extensions +* #%% - Interactive python mode +* Extensions + * Gather \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Architecture/Architecture.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Architecture/Architecture.md new file mode 100644 index 00000000..13b4673c --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Architecture/Architecture.md @@ -0,0 +1,11 @@ +--- +title: Architecture +updated: 2021-07-07 05:46:51Z +created: 2021-07-07 05:45:58Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +SEDA - Staged Event-Driven Architecture +Deployment pipeline - performance tests diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Index.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Index.md new file mode 100644 index 00000000..de5f4be9 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Index.md @@ -0,0 +1,23 @@ +--- +title: Index +updated: 2021-07-06 12:50:22Z +created: 2021-07-06 03:45:46Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +* Jordan Harrod +* Sources: + * [Google Colab](https://colab.research.google.com/) + * [Google Datasets Search](https://datasetsearch.research.google.com) + * [Kaggle Kernels](https://www.kaggle.com/) + * [Kaggle Datasets](https://www.kaggle.com/datasets) + * [Tensorflow Playground](http://playground.tensorflow.org/) + * [Other resources](https://sgfin.github.io/learning-resources/) + * https://www.statlearning.com + * https://course.fast.ai + +## Microsoft AI Certification +* https://docs.microsoft.com/en-us/learn/certifications/exams/ai-900 +* diff --git "a/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Machine Learning Crash Course \302\240_\302\240 Google Developer.md" "b/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Machine Learning Crash Course \302\240_\302\240 Google Developer.md" new file mode 100644 index 00000000..6422c0ff --- /dev/null +++ "b/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Machine Learning Crash Course \302\240_\302\240 Google Developer.md" @@ -0,0 +1,110 @@ +--- +title: "Machine Learning Crash Course \_|\_ Google Developers" +updated: 2021-04-08 03:09:20Z +created: 2021-04-08 03:09:20Z +source: https://developers.google.com/machine-learning/crash-course +--- + +- [# Machine Learning Crash Course](https://developers.google.com/machine-learning) + +[Courses](https://developers.google.com/machine-learning/crash-course) [Practica](https://developers.google.com/machine-learning/practica) [Guides](https://developers.google.com/machine-learning/guides) Glossary[](#) + +[![](../../../_resources/ADGmqu-xiF_d499QeHmzhXYGhNuSa2zs_14f1cb6086e54bd69.png)](https://accounts.google.com/SignOutOptions?hl=en&continue=https://developers.google.com/_d/profile/ogb) + +[Crash Course](https://developers.google.com/machine-learning/crash-course) [Problem Framing](https://developers.google.com/machine-learning/problem-framing) [Data Prep](https://developers.google.com/machine-learning/data-prep) [Clustering](https://developers.google.com/machine-learning/clustering) [Recommendation](https://developers.google.com/machine-learning/recommendation) [Testing and Debugging](https://developers.google.com/machine-learning/testing-debugging) [GANs](https://developers.google.com/machine-learning/gan) + +Google is committed to advancing racial equity for Black communities. [See how.](https://google.com/racialequity) + +### [### Machine Learning Crash Course
#### with TensorFlow APIs](https://developers.google.com/machine-learning/crash-course/ml-intro) + +Google's fast-paced, practical introduction to machine learning + +[Start Crash Course](https://developers.google.com/machine-learning/crash-course/ml-intro) [View prerequisites](https://developers.google.com/machine-learning/crash-course/prereqs-and-prework) + +### A self-study guide for aspiring machine learning practitioners + +Machine Learning Crash Course features a series of lessons with video lectures, real-world case studies, and hands-on practice exercises. + +- + + 30+ exercises + +- + + 25 lessons + +- + + 15 hours + +- + + Lectures from Google researchers + +- + + Real-world case studies + +- + + Interactive visualizations of algorithms in action + + +### Some of the questions answered in this course + +Learn best practices from Google experts on key machine learning concepts. + +- How does machine learning differ from traditional programming? + +- What is loss, and how do I measure it? + +- How does gradient descent work? + +- How do I determine whether my model is effective? + +- How do I represent my data so that a program can learn from it? + +- How do I build a deep neural network? + + +### [Ready to start practicing machine learning?](https://developers.google.com/machine-learning/crash-course/ml-intro) + +Learn and apply fundamental machine learning concepts with the Crash Course, get real-world experience with the companion Kaggle competition, or visit Learn with Google AI to explore the full library of training resources. + +[Start Crash Course](https://developers.google.com/machine-learning/crash-course/ml-intro) [Learn with Google AI](https://ai.google/education) + +- ### Connect + + - [Blog](https://googledevelopers.blogspot.com) + - [Facebook](https://www.facebook.com/Google-Developers-967415219957038) + - [Medium](https://medium.com/google-developers) + - [Twitter](https://twitter.com/googledevs) + - [YouTube](https://www.youtube.com/user/GoogleDevelopers) +- ### Programs + + - [Women Techmakers](https://www.womentechmakers.com) + - [Google Developer Groups](https://developers.google.com/community/gdg) + - [Google Developers Experts](https://developers.google.com/community/experts) + - [Accelerators](https://developers.google.com/community/accelerators) + - [Developer Student Clubs](https://developers.google.com/community/dsc) +- ### Developer consoles + + - [Google API Console](https://console.developers.google.com) + - [Google Cloud Platform Console](https://console.cloud.google.com) + - [Google Play Console](https://play.google.com/apps/publish) + - [Firebase Console](https://console.firebase.google.com) + - [Actions on Google Console](https://console.actions.google.com) + - [Cast SDK Developer Console](https://cast.google.com/publish) + - [Chrome Web Store Dashboard](https://chrome.google.com/webstore/developer/dashboard) + +[](https://developers.google.com/) + +- [Android](https://developer.android.com) +- [Chrome](https://developer.chrome.com/home) +- [Firebase](https://firebase.google.com) +- [Google Cloud Platform](https://cloud.google.com) +- [All products](https://developers.google.com/products) + +- [Terms](https://developers.google.com/terms/site-terms) +- [Privacy](https://policies.google.com/privacy) +- Sign up for the Google Developers newsletter [Subscribe](https://services.google.com/fb/forms/googledevelopersnewsletter/?utm_medium=referral&utm_source=google-products&utm_team=googledevs&utm_campaign=201611-newsletter-launch) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Terraform Cloud Workststion.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Terraform Cloud Workststion.md new file mode 100644 index 00000000..1dc92de0 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Artificial Intelligence/Terraform Cloud Workststion.md @@ -0,0 +1,10 @@ +--- +title: Terraform Cloud Workststion +updated: 2021-04-03 05:58:23Z +created: 2021-04-03 05:57:58Z +latitude: -26.16357351 +longitude: 27.95106383 +altitude: 1748.6248 +--- + +https://github.com/Resistor52/terraform-cloud-workstation \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Certification/Azure Certification/Azure Details.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Certification/Azure Certification/Azure Details.md new file mode 100644 index 00000000..ebaf581b --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Certification/Azure Certification/Azure Details.md @@ -0,0 +1,19 @@ +--- +title: Azure Details +updated: 2021-06-29 10:11:57Z +created: 2021-06-26 10:10:37Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +# Azure Certification Overview +* https://www.microsoft.com/en-us/learning/dashboard.aspx +* user: jnm@catenare.cm +* MCID: 990338779 + +## AI-900 Microsoft Azure AI Fundamentals +* https://docs.microsoft.com/en-us/learn/certifications/exams/ai-900 + * https://docs.microsoft.com/en-us/learn/certifications/courses/ai-900t00 + * https://www.freecodecamp.org/news/azure-data-fundamentals-certification-ai-900-pass-the-exam-with-this-free-4-hour-course/ + * \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Certification/Azure Certification/Azure fundamentals.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Certification/Azure Certification/Azure fundamentals.md new file mode 100644 index 00000000..98c6134b --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Certification/Azure Certification/Azure fundamentals.md @@ -0,0 +1,11 @@ +--- +title: Azure fundamentals +updated: 2021-06-04 21:46:43Z +created: 2021-06-04 21:29:17Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +* https://docs.microsoft.com/en-us/learn/certifications/azure-fundamentals/?WT.mc_id=Azure_BoM-wwl + * https://docs.microsoft.com/en-us/learn/paths/az-900-describe-cloud-concepts/ \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/IEC - Electoral Commission of South Africa/IEC API.md b/docs/archive/JoplinExport/Handbook/Developer Notes/IEC - Electoral Commission of South Africa/IEC API.md new file mode 100644 index 00000000..7820d397 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/IEC - Electoral Commission of South Africa/IEC API.md @@ -0,0 +1,12 @@ +--- +title: IEC API +updated: 2021-06-28 07:53:20Z +created: 2021-06-27 09:12:25Z +latitude: -26.29549578 +longitude: 27.90783421 +altitude: 1587.6040 +--- + +* https://www.elections.org.za/pw/ +* https://api.elections.org.za/Help + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Learning/Learning Management.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Learning/Learning Management.md new file mode 100644 index 00000000..0e098f59 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Learning/Learning Management.md @@ -0,0 +1,11 @@ +--- +title: Learning Management +updated: 2021-07-07 06:03:09Z +created: 2021-07-07 06:02:52Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +* OpenEdx using docker + * https://docs.tutor.overhang.io \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Next45/Ruby Notes.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Next45/Ruby Notes.md new file mode 100644 index 00000000..349c39e8 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Next45/Ruby Notes.md @@ -0,0 +1,16 @@ +--- +title: Ruby Notes +updated: 2021-07-03 16:09:49Z +created: 2021-07-03 16:09:18Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +tags: + - add-platform + - bundle + - gemfile + - heroku +--- + +* Issue: An app’s Gemfile.lock that is generated with Bundler 2.2.3 locally may not work on Heroku unless the Linux platform is explicitly “locked”: +* `bundle lock --add-platform x86_64-linux` \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/RestAPI Frameworks/Python Frameworks.md b/docs/archive/JoplinExport/Handbook/Developer Notes/RestAPI Frameworks/Python Frameworks.md new file mode 100644 index 00000000..80d6baf0 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/RestAPI Frameworks/Python Frameworks.md @@ -0,0 +1,21 @@ +--- +title: 'Python Frameworks ' +updated: 2021-03-13 19:46:32Z +created: 2021-03-13 19:40:07Z +--- + +* [FastAPI](https://fastapi.tiangolo.com) - FastAPI framework, high performance, easy to learn, fast to code, ready for production +* [Sanic](https://sanicframework.org) - Async Python 3.6+ web server/framework +* [Falcon](https://falcon.readthedocs.io/en/stable/) - The Falcon Web Framework +``` +Falcon is a minimalist WSGI library for building speedy web APIs and app backends. We like to think of Falcon as the Dieter Rams of web frameworks. +``` +* [Hug](https://www.hug.rest) - Obvious. Clean. Radically simple. +``` +Drastically simplify API development over multiple interfaces. With hug, design and develop your API once, then expose it however your clients need to consume it. Be it locally, over HTTP, or through the command line - hug is the fastest and most modern way to create APIs on Python3. +``` +* [Django](https://www.djangoproject.com) - Django makes it easier to build better Web apps more quickly and with less code. + * [Django REST framework](https://www.django-rest-framework.org) - Django REST framework is a powerful and flexible toolkit for building Web APIs +``` +Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source. +``` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/Security/Overview.md b/docs/archive/JoplinExport/Handbook/Developer Notes/Security/Overview.md new file mode 100644 index 00000000..9b451ce3 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/Security/Overview.md @@ -0,0 +1,13 @@ +--- +title: Overview +updated: 2021-07-03 11:54:55Z +created: 2021-07-03 11:52:18Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +* Security Chaos Engineering + * Learning and getting evidence + * Experiment and get the data + * https://www.verica.io/sce-book/ \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/AWS Notes.md b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/AWS Notes.md new file mode 100644 index 00000000..3a207a46 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/AWS Notes.md @@ -0,0 +1,11 @@ +--- +title: AWS Notes +updated: 2021-08-04 21:44:26Z +created: 2021-08-04 21:43:49Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +# Resources related to AWS and Wordpress +* [Introducing the new Serverless LAMP stack](https://aws.amazon.com/tw/blogs/compute/introducing-the-new-serverless-lamp-stack/) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/api.md b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/api.md new file mode 100644 index 00000000..e074711e --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/api.md @@ -0,0 +1,176 @@ +--- +title: api +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Wordpress API +## Resources +* [REST API Handbook](https://developer.wordpress.org/rest-api/) + +### Auth Plugins +* [JWT-Authentication](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) +* [Application Passwords](https://wordpress.org/plugins/application-passwords/) +* [OAuth 1.0a Server](https://wordpress.org/plugins/rest-api-oauth1/) +* [Basic Auth](https://github.com/WP-API/Basic-Auth) + +### Using JWT-Auth +* Added to *composer.json* + * Under require: `"wpackagist-plugin/jwt-authentication-for-wp-rest-api": "~1"` +* Added JWT constant to *wp-config.php* - `define('JWT_AUTH_SECRET_KEY','');` +* Access - local server - *http://paseo.demo/wp-json/jwt-auth/v1/token* Pass in username and password via form post. + +## Notes +* pass **?_embed** as part of the url to get some content embedded. `http://paseo.demo/wp-json/wp/v2/posts?_embed`; + +### Tools/packages used +* [Timber](https://github.com/timber/timber) - Templating engine. Not really necessary but think can be used to customize the admin site. +* [Vuejs](https://vuejs.org/) - Front-end framework I'm using for custom site. + +## Issues +* Learning this API is much harder than it should be. +* Biggest issue I'm running into is using the local client. +* Figuring out how to use the remote endpoints seems so much simpler. +* Documentation is very spotty. +* Hard to fine relevant or up-to-date resources. +* Don't seem to be many books around (that are up to date). +* **Decided I'm just going to use React. Not worth the extra hassle trying to figure out the Wordpress way** + +# Admin notes +## Admin and ajax +* [Using WP Async Requests](https://lkwdwrd.com/using-wp-ajax-async-requests/) +* [Ajax Async](https://lkwdwrd.com/ajax-async-wordpress/) + +## Creating admin settings page +* Resources + * [Creating wordpress settings page using wordpress rest api](https://torquemag.io/2017/06/creating-wordpress-settings-page-using-wordpress-rest-api/) + * [Wordpress Theme Settings with settings api](https://www.sitepoint.com/create-a-wordpress-theme-settings-page-with-the-settings-api/) +* Options vs Settings + * Setting is the newer of the two. More about building forms and managing setting + * (Wordpress Codex Settings API)[https://developer.wordpress.org/plugins/settings/settings-api/] + +* Authenticating with JWT Authentication for WP REST API for testing API with Postman +* [JWT Authentication for WP Rest Api](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) - needs to be installed and activated +1. Using Postman + * post request + * Url: http://paseo.demo/wp-json/jwt-auth/v1/token + * Body Params + * username + * password + * Response: +```json +{ + "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8", + "user_display_name": "admin", + "user_email": "admin@localhost.dev", + "user_nicename": "admin" +} +``` +1. Sending a request + * Create header + * key: Authorization + * Value: "token" value + * Will authenticate when necessary. +### Enabling your plugin for wordpress +* Resources + * *wp-api* - add as dependency for a script when you enqueue. +1. Setup + * Create new folder *Settings* under *Admin* + * Create new classes + * Rest + * Manages the Rest request and response + * Settings + * Manages the creation and management of the form, menu and database. + * *Rest Class* +```php + $value ){ + $result = $request->get_param($setting); + if($result) { + $settings[$setting] = $result; + } + } + Settings::save_settings($settings); + $updated_settings = self::get_settings(); + return rest_ensure_response( $updated_settings )->set_status(201); + } + + /** + * @param \WP_REST_Request $request + * @return \WP_REST_Response + */ + public static function check_settings(\WP_REST_Request $request ) { + $settings = self::get_settings(); + return \rest_ensure_response($settings); + } + +} +``` + +## Authenticating with JWT Authentication for WP REST API +* [JWT Authentication for WP Rest Api](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) +1. Using Postman + * post request + * Url: http://paseo.demo/wp-json/jwt-auth/v1/token + * Body Params + * username + * password + * Response: +```json +{ + "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9qd3QuZGV2IiwiaWF0IjoxNDM4NTcxMDUwLCJuYmYiOjE0Mzg1NzEwNTAsImV4cCI6MTQzOTE3NTg1MCwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMSJ9fX0.YNe6AyWW4B7ZwfFE5wJ0O6qQ8QFcYizimDmBy6hCH_8", + "user_display_name": "admin", + "user_email": "admin@localhost.dev", + "user_nicename": "admin" +} +``` +1. Sending a request + * Create header + * key: Authorization + * Value: "token" value + * Will authenticate when necessary. + + +## Use timber as the templating engine +* composer require timber/timber +* Set location + * user Timber\Timber; *Allow to use Timber* + * Timber::$location = 'file path to template folder'; Ex: Timber::$location = '/Users/johan/wp/plugin/site/admin'; + * Timber::render('mytemplate.twig'); Ex: Will return false if not completed. + +## Issues with using Rest API +* Limits access to customizing the site + * Current tools for modifying templates won't work. + * Front-end modification can be limited. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/composer.md b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/composer.md new file mode 100644 index 00000000..af95ea5d --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/composer.md @@ -0,0 +1,380 @@ +--- +title: composer +updated: 2021-07-29 09:43:14Z +created: 2020-09-10 22:07:13Z +--- + +# Setting up Wordpress with Composer, Nginx, PHP-fpm on Mac OS X (Development) +## Settings +* Mac OS X (10.11.6 & Mac OS Sierra) +* MacPorts (2.4.1) +* Software + * php71 + * mysql57 + * Wordpress + +## Resources +* [nginx documentation - wordpress](https://www.nginx.com/resources/wiki/start/topic/recipes/wordpress/) +* [Composer in Wordpress](http://composer.rarst.net/) +* [Intro to Wordpress and Composer](https://www.pmg.com/blog/composer-and-wordpress/) +* [John P. Bloch](https://code.johnpbloch.com/2015/07/upcoming-changes-to-my-wordpress-fork/) +* Wordpress package repo + * [wpackagist](https://wpackagist.org/) - Use with composer to install wordpress plugins and themes. + +## Install Wordpress with composer +* Install composer - [Composer Docs](https://getcomposer.org/doc/) + * Install in */usr/local/bin* +* Create composer.json file - Make sure composer has latest version or requirements. +```json +{ + "name": "johnpbloch/wordpress", + "description": "WordPress is web software you can use to create a beautiful website or blog.", + "keywords": [ + "wordpress", + "blog", + "cms" + ], + "type": "package", + "homepage": "http://wordpress.org/", + "license": "GPL-2.0+", + "authors": [ + { + "name": "WordPress Community", + "homepage": "http://wordpress.org/about/" + } + ], + "support": { + "issues": "http://core.trac.wordpress.org/", + "forum": "http://wordpress.org/support/", + "wiki": "http://codex.wordpress.org/", + "irc": "irc://irc.freenode.net/wordpress", + "source": "http://core.trac.wordpress.org/browser" + }, + "extra": { + "wordpress-install-dir": "public", + "installer-paths": { + "public/wp-content/plugins/{$name}": [ + "type:wordpress-plugin" + ], + "public/wp-content/themes/{$name}": [ + "type:wordpress-theme" + ] + } + }, + "require": { + "php": ">=5.3.2", + "johnpbloch/wordpress-core-installer": "~0.2", + "johnpbloch/wordpress-core": ">=4.7" + }, + "require-dev":{ + "wpackagist-plugin/theme-check": ">=20160523", + "wpackagist-plugin/wordpress-reset": ">=1.4", + "wpackagist-plugin/log-deprecated-notices": ">=0.4", + "wpackagist-plugin/debug-bar":">=0.9", + "wpackagist-plugin/wordpress-importer": ">=0.6.3" + }, + "repositories": [ + { + "type": "composer", + "url": "https://wpackagist.org" + }, + { + "type": "vcs", + "url": "https://github.com/catenare/aad-sso-wordpress" + } + ] +} +``` +* Add any additional repositories for plugins or themes being worked on and being hosted in version control +* Add the packages under require in composer.json +```json +"require": { + "catenare/aad-sso-wordpress": "dev-alicart", + "catenare/custom-theme": "dev-current" +} +"repositories": [ + { + "type": "vcs", + "url": "https://github.com/catenare/aad-sso-wordpress" + }, + { + "type": "vcs", + "url": "https://github.com/catenare/custom-theme" + } + ] +``` +* Run `composer install` if no composer.lock file present. +## Configure DNS +* Edit */etc/hosts* as **sudo** - Create a local domain name for your site **127.0.0.1 wpsite.demo** +## Setup ports +1. `sudo port install mysql57-server nginx php71-fpm php71`. Assumes php71 already installed. +## Ports configuration +1. Setup mysql server + * `sudo rm -fr /opt/local/var/db/mysql57` - remove current mysql57 db folder if it exists. + * `sudo /opt/local/lib/mysql57/bin/mysqld --initialize --user=_mysql` - setup new database and default password + * `mysql -u root -p` - use password generated with previous step + * `ALTER USER 'root'@'localhost' IDENTIFIED BY 'new pass';` +1. Setup php + * `cp /opt/local/etc/php.ini-development /opt/local/etc/php.ini` + * Configure socket connection for mysql in php.ini + * Edit [Pdo_mysql] section + * `pdo_mysql.default_socket=/opt/local/var/run/mysql57/mysqld.sock` + * Add `cgi.fix_pathinfo = 0;` to end of file +1. Configure fpm - `/opt/local/etc/php71` folder + * `cp php-fpm.conf.default php-fpm.conf` + * `cp php-fpm.d/www.conf.default php-fpm.d/www.conf` + * Edit `php-fpm.d/www.conf` to change to socket +```ini + ;listen = 127.0.0.1:9000 + listen = "/opt/local/var/run/php71/php71-fpm.socket" +``` +1. Setup nginx - `/opt/local/etc/nginx` - location of setup file +```js + server { + listen 80; + server_name localhost; + root /path/to/wordpress/public; + index index.php; + location = /favicon.ico { + log_not_found off; + access_log off; + } + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + + location / { + try_files $uri $uri/ /index.php?args; + } + + location ~ \.php$ { + fastcgi_param HTTP_PROXY ""; + fastcgi_pass unix:/opt/local/var/run/php71/php71-fpm.socket; + include fastcgi.conf; + fastcgi_intercept_errors on; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { + expires max; + log_not_found off; + } + + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} + } +``` +* Restart nginx + * `sudo port unload nginx` + * `sudo port load nginx` +* Restart fpm + * `sudo port unload php71-fpm` + * `sudo port load php71-fpm` +* Restart Mysql server + * `sudo port unload mysql57-server` + * `sudo port load mysql57-server` +* Install *Wordpress-cli* - wordpress command line admin - using composer - [Wordpress CLI](http://wp-cli.org/) + `composer global require wp-cli/wp-cli` - will have to include composer *bin* file in path + +## Wordpress Development +* [make.wordpress.org](https://make.wordpress.org/core/) +* [Gutenberg](https://wordpress.github.io/gutenberg/) - next level editor + +## Other options +* Using sqlite as the database + * Use sqlite plugin for sqlite - [SQLite Integration](https://wordpress.org/plugins/sqlite-integration/) + * Use for lightweight development. + +## Notes about using Composer to manage a package +### Notes for managing a custom packages with php composer. +* [Loading a package from a vcs repository](https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository) +1. Package must have it's own *composer.json* file. +```json +{ + "name": "catenare/smartsheet", + "description": "API Connection to Smartsheet. Add sheets and add rows", + "license": "proprietary", + "authors": [ + { + "name": "Johan Martin", + "homepage": "http://www.johan-martin.com", + "email": "martin.johan@johan-martin.com", + "role": "developer" + } + ], + "require": { + "guzzlehttp/guzzle": "^6.2", + "symfony/console": "^3.3", + "symfony/dotenv": "^3.3", + "symfony/dependency-injection": "^3.3", + "symfony/yaml": "^3.3", + "symfony/config": "^3.3", + "symfony/serializer": "^3.3", + "zendframework/zend-json": "^3.0" + }, + "minimum-stability": "dev", + "autoload": { + "psr-4": { "SmartSheet\\": "src/" }, + "files":["boot.php","main.php"] + }, + "autoload-dev": { + "psr-4": { "SheetTest\\": "test/" } + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + } +} +``` +1. Use **dev-{branch}** to have composer checkout the correct git branch. +* Example: +```json +"require": { + "catenare/smartsheet": "dev-master" + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/catenare/smartsheet-api" + } + ] +``` +* Other Notes + * For wordpress: Use the **type** property set to **wordpress-plugin**. Wordpress installer will install it in the right location. *Composer seems to be reluctant to go more than one level deep when checking out dev branches.* +```json +{ + "name": "catenare/ninjaforms-smartsheet-plugin", + "description": "Add form data to smartsheet", + "type": "wordpress-plugin", + "license": "proprietary", + "authors": [ + { + "name": "Johan Martin", + "homepage": "http://www.johan-martin.com", + "email": "martin.johan@johan-martin.com", + "role": "developer" + } + ], + "keywords":[ + "alicart", + "ninja-forms", + "smartsheet" + ], + "require": { + "catenare/smartsheet": "dev-master" + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/catenare/smartsheet-api" + } + ] +} +``` +* Dependencies for sub packages in vcs. Put repo info in man composer.json file. +```json +{ + "name": "catenare/wordpress-intranet", + "description": "Intranet based on WordPress", + "license": "proprietary", + "keywords": [ + "intranet", + "secure" + ], + "type": "package", + "homepage": "http://www.johan-martin.com", + "authors": [ + { + "name": "WordPress Community", + "homepage": "http://wordpress.org/about/" + }, + { + "name": "Johan Martin", + "homepage": "http://www.johan-martin.com", + "email": "martin.johan@johan-martin.com", + "role": "developer" + } + ], + "support": { + "email": "martin.johan@johan-martin.com" + }, + "extra": { + "wordpress-install-dir": "public", + "installer-paths": { + "public/wp-content/plugins/{$name}": [ + "type:wordpress-plugin" + ], + "public/wp-content/themes/{$name}": [ + "type:wordpress-theme" + ] + } + }, + "require": { + "php": "~7", + "johnpbloch/wordpress-core-installer": "~0.2", + "johnpbloch/wordpress-core": "~4.7", + "wpackagist-plugin/login-lockdown":"~1.7", + "wpackagist-plugin/all-in-one-intranet": "~1.2", + "wpackagist-plugin/ninja-forms":"~3.1", + "catenare/aad-sso-wordpress": "dev-alicart", + "catenare/ninjaforms-smartsheet-plugin": "dev-master" + }, + "require-dev": { + "phpunit/phpunit": "^6.2" + }, + "repositories": [ + { + "type": "composer", + "url": "https://wpackagist.org" + }, + { + "type": "vcs", + "url": "https://github.com/catenare/aad-sso-wordpress" + }, + { + "type": "vcs", + "url": "https://github.com/catenare/ninjaforms-smartsheet" + }, + { + "type": "vcs", + "url": "https://github.com/catenare/smartsheet-api" + } + ] +} +``` +* Added **smartsheet-api** vcs because **ninjaform-smartsheet-plugin** dependent on it. + +## Setting up S3 Plugin +* [S3 Uploads Plugin](https://github.com/humanmade/S3-Uploads) - made by [Human Made](https://hmn.md/). +* Using Composer with S3. +```json +"require": { + "humanmade/s3-uploads":"dev-master" +} +"repositories": [ + { + "type": "vcs", + "url": "https://github.com/humanmade/S3-Uploads.git" + } +] +``` +* Setup S3 Bucket + * bucket name +* Edit wp-config.php +```php +define( 'S3_UPLOADS_BUCKET', 'my-bucket' ); +define( 'S3_UPLOADS_KEY', '' ); +define( 'S3_UPLOADS_SECRET', '' ); +define( 'S3_UPLOADS_REGION', '' ); +``` + +* need wp-cli installed +* Be sure to be in public folder +* verify - `wp s3-uploads verify` +* enable - `wp s3-uploads enable` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/docker.md b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/docker.md new file mode 100644 index 00000000..7ee1c0de --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/WordPress/docker.md @@ -0,0 +1,289 @@ +--- +title: docker +updated: 2021-07-29 12:27:27Z +created: 2020-09-10 22:07:13Z +--- + +## Using docker +### Docker compose config with official Wordpress Docker image +#### Using +* Clone repo: `git@github.com:Nziswano/WordPressDocker.git` +* Copy *example.env* to *.env* +* Run *docker-compose up --build* +* Connect to localhost:9090 + +## Custom WordPress Image with Composer +* Features + * Use PHP Composer to build wordpress image + * Connect to Apache server +* Official Docker Wordpress Image: https://github.com/docker-library/wordpress/blob/cdb836237e3af7bfd011957316f159c1e81bf29c/latest/php8.0/apache/Dockerfile +* Current Dockerfile +``` +FROM php:8.0.7-apache + +ENV APACHE_DOCUMENT_ROOT /var/www/html/wordpress + +# persistent dependencies +RUN set -eux; \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + # Ghostscript is required for rendering PDF previews + ghostscript \ + ; \ + rm -rf /var/lib/apt/lists/* + +# install the PHP extensions we need (https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions) +RUN set -ex; \ + \ + savedAptMark="$(apt-mark showmanual)"; \ + \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + libfreetype6-dev \ + libjpeg-dev \ + libmagickwand-dev \ + libpng-dev \ + libzip-dev \ + wget \ + git \ + ; \ + \ + docker-php-ext-configure gd \ + --with-freetype \ + --with-jpeg \ + ; \ + docker-php-ext-install -j "$(nproc)" \ + bcmath \ + exif \ + gd \ + mysqli \ + zip \ + ; \ + # https://pecl.php.net/package/imagick + pecl install imagick-3.5.0; \ + docker-php-ext-enable imagick; \ + rm -r /tmp/pear; \ + \ + # reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies + apt-mark auto '.*' > /dev/null; \ + apt-mark manual $savedAptMark; \ + ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ + | awk '/=>/ { print $3 }' \ + | sort -u \ + | xargs -r dpkg-query -S \ + | cut -d: -f1 \ + | sort -u \ + | xargs -rt apt-mark manual; \ + \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + rm -rf /var/lib/apt/lists/* + +# set recommended PHP.ini settings +# see https://secure.php.net/manual/en/opcache.installation.php +RUN { \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=4000'; \ + echo 'opcache.revalidate_freq=2'; \ + echo 'opcache.fast_shutdown=1'; \ + } > /usr/local/etc/php/conf.d/opcache-recommended.ini +# https://wordpress.org/support/article/editing-wp-config-php/#configure-error-logging +RUN { \ + # https://www.php.net/manual/en/errorfunc.constants.php + # https://github.com/docker-library/wordpress/issues/420#issuecomment-517839670 + echo 'error_reporting = E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_RECOVERABLE_ERROR'; \ + echo 'display_errors = Off'; \ + echo 'display_startup_errors = Off'; \ + echo 'log_errors = On'; \ + echo 'error_log = /dev/stderr'; \ + echo 'log_errors_max_len = 1024'; \ + echo 'ignore_repeated_errors = On'; \ + echo 'ignore_repeated_source = Off'; \ + echo 'html_errors = Off'; \ + } > /usr/local/etc/php/conf.d/error-logging.ini + +RUN set -eux; \ + a2enmod rewrite expires; \ + \ + # https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html + a2enmod remoteip; \ + { \ + echo 'RemoteIPHeader X-Forwarded-For'; \ + # these IP ranges are reserved for "private" use and should thus *usually* be safe inside Docker + echo 'RemoteIPTrustedProxy 10.0.0.0/8'; \ + echo 'RemoteIPTrustedProxy 172.16.0.0/12'; \ + echo 'RemoteIPTrustedProxy 192.168.0.0/16'; \ + echo 'RemoteIPTrustedProxy 169.254.0.0/16'; \ + echo 'RemoteIPTrustedProxy 127.0.0.0/8'; \ + } > /etc/apache2/conf-available/remoteip.conf; \ + a2enconf remoteip; \ + # https://github.com/docker-library/wordpress/issues/383#issuecomment-507886512 + # (replace all instances of "%h" with "%a" in LogFormat) + find /etc/apache2 -type f -name '*.conf' -exec sed -ri 's/([[:space:]]*LogFormat[[:space:]]+"[^"]*)%h([^"]*")/\1%a\2/g' '{}' + + +WORKDIR /var/www/html +RUN set -ex; \ + chown -R www-data:www-data /var/www/html; \ + php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"; \ + php composer-setup.php --install-dir=/usr/local/bin --filename=composer --quiet; + +COPY composer.json /var/www/html +COPY wp-config.php /var/www/html + +RUN set -ex; \ + composer install --no-dev -vvv;\ + chown -R www-data:www-data /var/www/html; + +COPY htaccess /var/www/html/.htacces + +RUN set -ex; \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + rm -rf /var/lib/apt/lists/*; \ + composer clearcache; + +COPY docker-entrypoint.sh /usr/local/bin/ + +RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf +RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["apache2-foreground"] +``` +## Setup with Official Docker image and MariaDB database +```yml +version: "3" +services: + wordpress: + image: nziswano:wordpress + build: + context: . + dockerfile: Dockerfile + container_name: nziswano-wordpress + depends_on: + - wordpressdb + ports: + - "9090:80" + environment: + - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST} + - WORDPRESS_DB_USER=${WORDPRESS_DB_USER} + - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD} + - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME} + - AUTH_KEY=${AUTH_KEY} + - SECURE_AUTH_KEY=${SECURE_AUTH_KEY} + - LOGGED_IN_KEY=${LOGGED_IN_KEY} + - NONCE_KEY=${NONCE_KEY} + - AUTH_SALT=${AUTH_SALT} + - SECURE_AUTH_SALT=${SECURE_AUTH_SALT} + - LOGGED_IN_SALT=${LOGGED_IN_SALT} + - NONCE_SALT=${NONCE_SALT} + - MY_KEY=${MY_KEY} + - WP_DEBUG=${WP_DEBUG} + wordpressdb: + image: mariadb:latest + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + MYSQL_DATABASE: ${MYSQL_DATABASE} + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASSWORD} +``` +* Example env file +``` +WORDPRESS_DB_HOST=wordpressdb:3306 +WORDPRESS_DB_USER=wordpress +WORDPRESS_DB_PASSWORD=wordpress +WORDPRESS_DB_NAME=wordpress +AUTH_KEY=c3def60d6b870cb9ddfd5a37e5cc4cb2 +SECURE_AUTH_KEY=a8ee42c175b2b516d1f81ff992db030b +LOGGED_IN_KEY=bcedc450f8481e89b1445069acdc3dd9 +NONCE_KEY=cb584e44c43ed6bd0bc2d9c7e242837d +AUTH_SALT=22b938073218c4d8f0f10a3d36d352b8 +SECURE_AUTH_SALT=4e3baa46296d1358ea19f237ee1a5d19 +LOGGED_IN_SALT=1321b53ca4bc07e4d53fa198e59af3e7 +NONCE_SALT=283a64ff44db59568cc77dba8196046b +MY_KEY=5931acc50be4d738a0f530dc4709d156 +WP_DEBUG=true +MYSQL_ROOT_PASSWORD=example +MYSQL_DATABASE=wordpress +MYSQL_USER=wordpress +MYSQL_PASSWORD=wordpress +``` +## Custom WordPress Image with Composer +```json +{ + "name": "next45/wordpress-demo", + "description": "Dockerized Wordpress", + "keywords": [ + "wordpress", + "blog", + "cms" + ], + "type": "project", + "homepage": "http://www.docfoxapp.com", + "license": "GPL-2.0+", + "authors": [ + { + "name": "WordPress Community", + "homepage": "http://wordpress.org/about/" + }, + { + "name": "Johan Martin", + "homepage": "http://www.docfoxapp.com", + "email": "johan@next45.co", + "role": "developer" + } + ], + "support": { + "email": "info@docfoxapp.com" + }, + "extra": { + "wordpress-install-dir": "wordpress", + "installer-paths": { + "wordpress/wp-content/plugins/{$name}": [ + "type:wordpress-plugin" + ], + "wordpress/wp-content/themes/{$name}": [ + "type:wordpress-theme" + ] + } + }, + "require": { + "php": ">=8", + "johnpbloch/wordpress": ">=5", + "wpackagist-plugin/akismet": ">=4", + "wpackagist-plugin/jetpack": ">=5", + "wpackagist-plugin/cloudinary-image-management-and-manipulation-in-the-cloud-cdn": ">=1", + "wpackagist-plugin/wp-php-console": ">=1" + }, + "require-dev": { + "wpackagist-plugin/wordpress-reset": ">=1", + "wpackagist-plugin/wordpress-importer": ">=0.6", + "wpackagist-plugin/demo-data-creator": ">=1", + "wpackagist-plugin/debug": ">=1", + "wpackagist-plugin/debug-bar-console": ">=0.3", + "phpmd/phpmd": "@stable", + "phpunit/phpunit": ">=6" + }, + "repositories": [ + { + "type": "composer", + "url": "https://wpackagist.org" + } + ] +} +``` +* Features + * Use PHP Composer to build wordpress image + * Connect to Apache server +* Official Docker Wordpress Image: https://github.com/docker-library/wordpress/blob/cdb836237e3af7bfd011957316f159c1e81bf29c/latest/php8.0/apache/Dockerfile + +## Resources +* [wordPress.org](https://wordpress.org/) +* [Official Docker Image](https://github.com/docker-library/wordpress) +* [Docker Docs](https://docs.docker.com/compose/reference/) +* [nginx](https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/) +* [Intro to WordPress and Composer](https://www.pmg.com/blog/composer-and-wordpress/) +* [John P. Bloch](https://code.johnpbloch.com/2015/07/upcoming-changes-to-my-wordpress-fork/) + * [WordPress Composer Fork](https://github.com/johnpbloch/wordpress) +* [Composer](../../../Handbook/Developer%20Notes/WordPress/composer.md) - composer + + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/Overview.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/Overview.md new file mode 100644 index 00000000..17b03bf1 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/Overview.md @@ -0,0 +1,12 @@ +--- +title: Overview +updated: 2021-08-04 21:35:57Z +created: 2021-08-04 21:30:58Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +# General Resources +* https://aws.amazon.com/blogs/compute/category/serverless/ - AWS Blog +* https://serverlessland.com - AWS sponsored resource site \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/Wordpress.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/Wordpress.md new file mode 100644 index 00000000..06fe14ef --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/Wordpress.md @@ -0,0 +1,10 @@ +--- +title: Wordpress +updated: 2021-05-10 18:04:00Z +created: 2021-05-10 18:03:52Z +latitude: -26.16342168 +longitude: 27.95100655 +altitude: 1750.3939 +--- + +https://aws.amazon.com/blogs/compute/launching-a-wordpress-website-using-amazon-lightsail-containers/ \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/amplify.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/amplify.md new file mode 100644 index 00000000..146e7c26 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/amplify.md @@ -0,0 +1,42 @@ +--- +title: amplify +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Amazon Mobile Hub + +## Why +* Get + * Authentication and user management + * Hosting including https access + * NoSQL database + * S3 storage (userfiles) + * Amazon Analytics and messaging. + +## Setup +1. Create User in IAM with access Keys +1. Access **AWS Mobile Hub** +1. Create a project + 1. Click *Web* + 1. Click *Start* +1. Add project title +1. Edit your region + +### Setup your local environment +1. `npm install -g awsmobile-cli` + 1. ~`awsmobile configure aws` - set your access keys~ + 1. `awsmobile configure -p lookfindme` - use profile lookfindme +1. Change into your project folder +1. Initialize your project + 1. `awsmobile init e32a` + +### Add additional Services +1. *User Sign-in* + 1. *Email and Password* + 1. *Optional* - user required to sign in +1. *NoSQL Database* +1. *User Data Storage* + +1. Update your local environment + 1. `awsmobile pull` in your project directory diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/api_gateway.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/api_gateway.md new file mode 100644 index 00000000..377bbe2f --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/api_gateway.md @@ -0,0 +1,35 @@ +--- +title: api_gateway +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Amazon API Gateway +## Setup +* Endpoint - regional since it will only be used for admin and probably only in the US. **Can be changed afterwards** +![](/images/lookfindme_api_gateway/create_api_01.png) +![](/images/lookfindme_api_gateway/create_api_02.png) +* To Do List + - [x] Create custom domain name. It takes a while to go through the system. + - [x] Must have a certificate for https support. Import from Amazon Certificate Manager. Only in N.Virginia available. Next to the CIA. + * Can't do custom domain name because current name points to another cloudfront distribution already. Will probably have to use the command line to figure out which distribution this is and how so I can go and change it. + + - [x] Setup Client Certificate - Try to limit the access to the backend server for API access. +![](/images/lookfindme_api_gateway/create_api_03_create_private_certificate.png) + * Seems that the Amazon Gateway kept the certificate from the last gateway I deleted. + + - [x] Setup the endpoints ![](/images/lookfindme_api_gateway/create_api_04_endpoint.png) + - [x] Will be setup as proxy services + * admin + * site + * test + * user ![](/images/lookfindme_api_gateway/create_api_05_proxies.png) + - [x] Configure proxies for access to backend server at adminapi.lookfindme.com ![](/images/lookfindme_api_gateway/create_api_05_http_proxy_setting.png) + - [x] Test the proxies - I normally create a hello endpoint just for basic testing. ![](/images/lookfindme_api_gateway/create_api_06_test_hello_world.png) + - [x] Deploy API ![](/images/lookfindme_api_gateway/create_api_07_api_deployed.png) + - [x] Setup logging ![](/images/lookfindme_api_gateway/create_api_08_stage_logging_configure.png) + * Finding the ARN in cloudwatch logs ![](/images/lookfindme_api_gateway/create_api_08_logging_setup_arn_role.png) + - [x] Create a custom domain name. Have to go into GoDaddy and delete that cname record.![](/images/lookfindme_api_gateway/create_api_99.png) + - [x] Setup local environment to use correct aws credentials `aws apigateway get-domain-names --profile lookfindme` + * [Amazon API Gateway CLI Reference](https://docs.aws.amazon.com/cli/latest/reference/apigateway) + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/cognito.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/cognito.md new file mode 100644 index 00000000..7d1b522d --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/cognito.md @@ -0,0 +1,55 @@ +--- +title: cognito +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# AWS Cognito + +## Notes +* Trying to use aws-amplify with Typescript +* Issues with typescript definitions +* Adding @types/node for aws-sdk. See if that will help [aws-sdk-js#Usage with TypeScript](https://github.com/aws/aws-sdk-js) + * [tsconfig](https://github.com/aws/aws-sdk-js/blob/master/ts/tsconfig.json) +* Result + * `npm install --save-dev @types/node` + * `npm install aws-amplify` + +## Resources +* [Auth Guide](https://aws.github.io/aws-amplify/media/authentication_guide.html) +* [Custom UI for Cognito with aws-amplify](https://shellmonger.com/2018/01/17/building-a-custom-ui-for-amazon-cognito-with-aws-amplify/) +* [AWS Documentation](https://aws.github.io/aws-amplify/) +* `tsconfig.json` +``` +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "jsx": "preserve", + "noImplicitAny": false, + "noImplicitThis": true, + "allowJs": true, + "pretty": true, + "diagnostics": true, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true + }, + "exclude": [ + "node_modules" + ], + "awesomeTypescriptLoaderOptions": { + "useWebpackText": true, + "useTranspileModule": true, + "useBable": true, + "useCache": true, + "doTypeCheck": true, + "forkChecker": true + } +} +``` + +### Steps +### Configure the client +* diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/dynamodb.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/dynamodb.md new file mode 100644 index 00000000..08f5cdc4 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/dynamodb.md @@ -0,0 +1,11 @@ +--- +title: dynamodb +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# DynamoDB + +## Resources +* Local version - [DynamoDB Local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) + * `aws dynamodb list-tables --endpoint-url http://localhost:8000` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/general.md new file mode 100644 index 00000000..65939a38 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/general.md @@ -0,0 +1,40 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Amazon AWS +## Learning Lambda +### AWS Mobile +* Error Message: "error: Uncaught TypeError: Cannot read property 'crypto' of undefined in browser" + * [Github Issue](https://github.com/aws/aws-sdk-js/issues/1566) + * [Github Issue Resolution](https://github.com/aws/aws-sdk-js/issues/1512) + * Resolve: ...culprit is line 4 in rng.ks. In aws-sdk + * Fixed!! - test: /\.js$/, exclude: /(node_modules)/ +* Issues with mobile auth using email + * [Github Issue 104](https://github.com/aws/aws-amplify/issues/104) + * Use awsmobile cli + * `awsmobile user-signin enable -p` + * Did not get the aws amplify and mobile hub project to work. Had to create my own, custom setup. + +* Seems to only way to deal with awsamplify not working is to create your own custom setup. + +## Hosting single page app with Cloudfront +* [Hosting Single Page app with proper URLS](https://keita.blog/2015/11/24/hosting-a-single-page-app-on-s3-with-proper-urls/) + * In CloudFront, Create custom error response + * In CloudFront Distribution + * Select *Error Pages* + * *Create Custom Error Response* + * HTTP Error Code: 404 Not Found + * Customize Error Response - yes + * Response Page Path */index.html* + * HTTP Response Code *200 ok* +* Also need to configure for 403 errors. + * 403 300 /index.html 200 + * 404 5 /index.html 200 + +## Mobile Hub +* Set local configuration - `awsmobile configure -p lookfindme` - use lookfind me to configure awsmobile +* `awsmobile init` - setup local configuration + * Use selected *configuration* from *aws mobile hub* configuration. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/lightsail.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/lightsail.md new file mode 100644 index 00000000..ebea7e41 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/lightsail.md @@ -0,0 +1,98 @@ +--- +title: lightsail +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Working with Amazon (AWS) + +## Lightsail - virtual private server instances - $5 for 512gb instance/month +### Setting up SSH - trying to use my own ssh keys. +1. Logging in + * Change key permissions. `chmod 600 KEYFILE` + * `ssh -i KEYFILE ubuntu@ip-address` +### PHP Wordpress config +1. Packages + * `php7.0 php7.0-cli php7.0-fpm php7.0-mysql php7.0-xml php7.0-mbstring php7.0-zip php7.0-gd php7.0-curl php-imagick mysql-server git nginx` + * Install [composer](https://getcomposer.org). + * Follow instructions from composer + * Configure nginx and php7.0-fpm + * nginx - configure default virtual environment + * Enable php7.0-fpm in configuration. + * Create rsa key to share with bitbucket or github + * `ssh-keygen -t rsa` - no password + * Add a deployment key to github to pull code to server. +1. Configure nginx +1. Setup mysql database +1. Download composer and wordpress command line. + * [composer](https://getcomposer.org/) + * `mv composer.phar /usr/local/bin/composer` after install + * +### Upgrading Ubuntu Service +* [How To Upgrade to Ubuntu 16.04 LTS](https://www.digitalocean.com/community/tutorials/how-to-upgrade-to-ubuntu-16-04-lts) + * sudo do-release-upgrade -d ;; Will upgrade to the latest LTS version in development + +## Server Admin +* Restart service + * Ubuntu + * `sudo nginx -t` - test config + + * `sudo systemctl restart nginx` + * `sudo systemctl retart php7.0-fpm` + +## letsencrypt setup +* [Certbot](https://certbot.eff.org/#ubuntuxenial-nginx) - Ubuntu +* Port 443 needs to be open +* Domains need to be in nginx.conf file (sites-enabled/default) file. +* Pretty straightforward and easy to set up. + +## Amazon Identity and Access Management +* Create user to access S3 and Cloudfront - will be used to upload files to S3 + * IAM Management Console + * Create User + * Give S3, CloudFront and APIGateway settings +## Setting up S3 and CloudFront for paseo.org.za +1. Create ssl/tls certificate + 1. Create the certificate in N. Virginia else it won't work. + 1. Make sure that you have access to one of the email addresses that Amazon will use for verification + 1. Add a domain name - *.paseo.org.za/paseo.org.za and *.martinsonline.org/martinsonline.org +1. Create S3 Bucket + * Use basic settings. Going to use this bucket as source for CloudFront + * Upload site with Cyberduck to s3 + * Create Bucket Policy +```json +{ + "Version": "2012-10-17", + "Id": "Policy1488488343010", + "Statement": [ + { + "Sid": "Stmt1488488323316", + "Effect": "Allow", + "Principal": "*", + "Action": "s3:GetObject", + "Resource": "arn:aws:s3:::barbarasierrafoothilswineries/*" + } + ] +} +``` +1. Create CloudFront Distribution + * Web delivery method + * Create certificate with Certificate Manager + * Don't forget to enter the cname record. + * Use either both http and https or redirect http to https. +1. Update DNS records + * Add CNAME record to dns record + * www points to cloudfront url +1. Be sure to include root document - *index.html* - for it to work correctly. + +## Issues with deployment on LightSail +* Error *PHP Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar* + * [proc-open-fork-failed-errors for details](https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details) +```bash +/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 +/sbin/mkswap /var/swap.1 +/sbin/swapon /var/swap.1 +``` +* Add Permanent swap [Add swap to Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04) +## Adding API Theme +* Adding a public theme to show when hitting the front page of our api. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/search.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/search.md new file mode 100644 index 00000000..216b3f17 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/aws/search.md @@ -0,0 +1,9 @@ +--- +title: search +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Using ElasticSearch on AWS + +* [Indexing with python](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-indexing.html) - has the python tools for accessing elastic search. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/Azure Cli.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/Azure Cli.md new file mode 100644 index 00000000..19aa21c4 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/Azure Cli.md @@ -0,0 +1,161 @@ +--- +title: Azure Cli +updated: 2021-06-24 02:14:45Z +created: 2021-06-24 02:12:24Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +Details +``` +[ + { + "cloudName": "AzureCloud", + "homeTenantId": "d4f102d5-495c-4e63-b50e-e9b4123c4a29", + "id": "8b07a6be-3d14-4943-8af8-36d59994587b", + "isDefault": true, + "managedByTenants": [], + "name": "Free Trial", + "state": "Enabled", + "tenantId": "d4f102d5-495c-4e63-b50e-e9b4123c4a29", + "user": { + "name": "martin.johan@nziswano.co.za", + "type": "user" + } + } +] +``` +``` +[ + { + "additionalCapabilities": null, + "availabilitySet": null, + "billingProfile": null, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": null + } + }, + "evictionPolicy": null, + "extendedLocation": null, + "extensionsTimeBudget": null, + "hardwareProfile": { + "vmSize": "Standard_B1s" + }, + "host": null, + "hostGroup": null, + "id": "/subscriptions/8b07a6be-3d14-4943-8af8-36d59994587b/resourceGroups/NZISWANODEV/providers/Microsoft.Compute/virtualMachines/DevWorkstation", + "identity": null, + "instanceView": null, + "licenseType": null, + "location": "southafricanorth", + "name": "DevWorkstation", + "networkProfile": { + "networkApiVersion": null, + "networkInterfaceConfigurations": null, + "networkInterfaces": [ + { + "deleteOption": null, + "id": "/subscriptions/8b07a6be-3d14-4943-8af8-36d59994587b/resourceGroups/NziswanoDev/providers/Microsoft.Network/networkInterfaces/devworkstation413", + "primary": null, + "resourceGroup": "NziswanoDev" + } + ] + }, + "osProfile": { + "adminPassword": null, + "adminUsername": "catenare", + "allowExtensionOperations": true, + "computerName": "DevWorkstation", + "customData": null, + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "patchSettings": { + "assessmentMode": "ImageDefault", + "patchMode": "ImageDefault" + }, + "provisionVmAgent": true, + "ssh": { + "publicKeys": [ + { + "keyData": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJ8BTI5lg7Lf5r706DUnKHBhR7\r\nS7m6sefWoVFAS3hjFE6SAM1mvOl3lZDY02gOLiOpmS3a/qAZObvFnSAojCkrtrDp\r\noto7acq+IxSx1if0S7pFc0+RhCXF8NyxzBCvB8xxxKZGsHOB52Bzkgs8InKts9yf\r\n0h0vZ99NfhJoV8mqTfzvtz0jUlJuX9IaBKP0euwz4634koAR31CtdhpasGDmeGmu\r\nSkNBr9OFe+Mf806xvpFr3+3hNv0FF6UX9eGcz66I9EuPxat+lbSNZTVgpkJZRWgl\r\nJK3PZNdd+GJ4X2oWW9otvzgT09SkQReVRz+O++rH5ok9lhGhJ8ojABX8nGprU/Dq\r\nZOxEvgppJHNTgrYRG8+8uYnz3NYaZNQBvE08Jwe30tqg5JhKJCQMP4EpDS0c2Vbz\r\nRcHii75zUmeAAG8yUUqpgif/J5j35VMX/5zxLmDIjjPeZ8xTir52HOWlvGumAMjE\r\nz9zHqaZAZK23ai+So6Lm8KeRnFJnndSdr0XqDeU= generated-by-azure\r\n", + "path": "/home/catenare/.ssh/authorized_keys" + } + ] + } + }, + "requireGuestProvisionSignal": true, + "secrets": [], + "windowsConfiguration": null + }, + "plan": null, + "platformFaultDomain": null, + "priority": null, + "provisioningState": "Succeeded", + "proximityPlacementGroup": null, + "resourceGroup": "NZISWANODEV", + "resources": [ + { + "autoUpgradeMinorVersion": null, + "enableAutomaticUpgrade": null, + "forceUpdateTag": null, + "id": "/subscriptions/8b07a6be-3d14-4943-8af8-36d59994587b/resourceGroups/NZISWANODEV/providers/Microsoft.Compute/virtualMachines/DevWorkstation/extensions/AzureNetworkWatcherExtension", + "instanceView": null, + "location": null, + "name": null, + "protectedSettings": null, + "provisioningState": null, + "publisher": null, + "resourceGroup": "NZISWANODEV", + "settings": null, + "tags": null, + "type": null, + "typeHandlerVersion": null, + "typePropertiesType": null + } + ], + "scheduledEventsProfile": null, + "securityProfile": null, + "storageProfile": { + "dataDisks": [], + "imageReference": { + "exactVersion": "20.04.202106140", + "id": null, + "offer": "0001-com-ubuntu-server-focal", + "publisher": "canonical", + "sku": "20_04-lts-gen2", + "version": "latest" + }, + "osDisk": { + "caching": "ReadWrite", + "createOption": "FromImage", + "deleteOption": null, + "diffDiskSettings": null, + "diskSizeGb": null, + "encryptionSettings": null, + "image": null, + "managedDisk": { + "diskEncryptionSet": null, + "id": "/subscriptions/8b07a6be-3d14-4943-8af8-36d59994587b/resourceGroups/NZISWANODEV/providers/Microsoft.Compute/disks/DevWorkstation_OsDisk_1_6ade046ccb0141c2a48d8c1b27df9547", + "resourceGroup": "NZISWANODEV", + "storageAccountType": null + }, + "name": "DevWorkstation_OsDisk_1_6ade046ccb0141c2a48d8c1b27df9547", + "osType": "Linux", + "vhd": null, + "writeAcceleratorEnabled": null + } + }, + "tags": { + "Client": "Internal" + }, + "type": "Microsoft.Compute/virtualMachines", + "userData": null, + "virtualMachineScaleSet": null, + "vmId": "a60e1f74-f4fc-41a7-9e48-88e3b3b11242", + "zones": null + } +] +``` \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/Azure Virtual Desktop.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/Azure Virtual Desktop.md new file mode 100644 index 00000000..e26a1bf9 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/Azure Virtual Desktop.md @@ -0,0 +1,9 @@ +--- +title: Azure Virtual Desktop +updated: 2021-06-24 04:45:43Z +created: 2021-06-24 04:27:59Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/general.md new file mode 100644 index 00000000..8b5981a9 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/azure/general.md @@ -0,0 +1,66 @@ +--- +title: general +updated: 2021-07-30 11:42:26Z +created: 2020-09-10 22:07:13Z +--- + +# Azure Notes + +## Using Active Directory for remote login +### Register a new web application +1. Select *Azure Active Directory* +1. Choose *App registrations* +1. Click on *New Application registration* - current layout close to top toolbar. +1. Enter the name +1. Application type - *web app/API* +1. Sign-on Url + * End-point that will process and determine if the user is logged in. + * *http://{wordpress-site}/wp-login.php* is the endpoint for wordpress +#### Creating keys for API access +1. Select *Azure Active Directory* +1. Click on *App registrations* +1. Click on your app +1. Click on *All Settings* - current layout - bottom right corner. +1. Click on *Keys* under *Api Access* +1. Under keys + * Enter a description + * Choose duration + * Click *save* icon + * Copy secret key. Will go away when navigating away from this page. +1. Settings + * **Application ID** - *Can also be referred to as the Client ID. Refers to your application so Azure can tell where to authenticate.* + * **API Key** - *Generate under All Settings -> Api Key* +#### Determine Tenant ID +* Tenant Id is the the id of the Azure Directory you are using. +1. Click on *Azure Active Directory* - far right column under main list of services +1. Click on *Properties* +1. *Directory ID* is the same equivalent of *Tenant ID* when referring to this Active Directory. + +## Deploying to Azure Container Registry Service with Azure Pipelines +- Setup a free account with Azure +- Enable devops +- Create container registry to push docker image to +- Use docker image for command line client. + +* `docker run -it mcr.microsoft.com/azure-cli` + +* Azure Devops Notes +* https://docs.microsoft.com/azure/devops/pipelines/languages/docker +* Created a resource group + * PaseoWordpress + * Region: South Africa North + * Subscription: Free Trial +* Create a registry + * nziswanomultisite.azurcr.io - docker registry +* Create a new devops organization + * Under settings, create a **Service connections** + * Service name is nziswano docker registry +* Under devops use My Azure DevOps Orgnizations + +* Seperate build and push operations + https://stackoverflow.com/questions/60287354/i-am-using-azure-devops-to-build-and-push-my-docker-image-how-can-i-pass-argume + + Variables + $(GITHUB_AUTH) + $(image_name) + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/google/firebase/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/google/firebase/general.md new file mode 100644 index 00000000..ddbd8278 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/cloud/google/firebase/general.md @@ -0,0 +1,45 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Google Firebase +* Using Google Firebase for hosting + +## Setup notes +* Setting up hosting + * Folder is "dist". + * *firebase.json* should contain the following configuration. Documentation does not contain these notes. Results in an error. [Firebase Issue 367](https://github.com/firebase/firebase-tools/issues/367) +```json +{ + "hosting": { + "public": "dist", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ] + } +} +``` +## Process +1. Install firebase tools - `npm install -g firebase-tools` +2. Login to firebase - `firebase login` +3. Create project in firebase console. +4. In project directory (Project/dist) - `firebase init` +5. Select firebase project +6. Select hosting +7. Be sure to configure *firebase.json* correctly +8. Test with `firebase serve` +9. Deploy with `firebase deploy` +10. Configure domain information. + +## Issues +* Using TypeScript + * Node version online is v6.11.5 + * Be sure to install firebase-tools in this version + * Samples is incorrect + * tsconfig.json is incorrect + * add "dom" to "lib". Should be: "lib": ["es6", "dom"] + * [Github Issues](https://github.com/firebase/functions-samples/issues/310) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/general.md new file mode 100644 index 00000000..8c40b8f0 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/general.md @@ -0,0 +1,216 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# All About APIs - Servers and tools. + +## Frameworks +### PHP +* [apigility](https://apigility.org/) - provided by Zend Framework. Swagger support. +* [API Platform](https://api-platform.com/) - REST and GraphQL support. + +### Python +* [Falcon](https://falconframework.org/) - Just API framework for Python +* [Django Rest Framework](http://www.django-rest-framework.org/) +* [API Star](https://github.com/encode/apistar) +* [Flask Site](http://flask.pocoo.org) + * [Frozen Flask](* [Awesome Flask](https://github.com/humiaozuzu/awesome-flask)) - [Site](https://pythonhosted.org/Frozen-Flask/) + * Used for [Wineries Of the Sierra Foothills](http://www.wineriesofthesierrafoothills.com) and personal site [Johan Martin](http://www.johan-martin.com) + * Generate static site from flask site. + * [Awesome Flask](https://github.com/humiaozuzu/awesome-flask) + +### Node.js API Frameworks +* [Loopback](https://loopback.io/) +* [Strapi](https://strapi.io/) +* [Restify](http://restify.com/) +* [Koa](http://koajs.com/) + +## API Tools +### Docs +* [API Central Docs](https://devdocs.io/) +### API Documentation Tools +* [RAML](http://raml.org/) +* [Swagger](http://swagger.io/) +### API Mock Tools +* [MockServer](https://www.mock-server.com) - Has Docker config +* [WireMock](https://github.com/tomakehurst/wiremock) - Java +* [Osprey Mock Service](https://github.com/mulesoft-labs/osprey-mock-service) - RAML mock service. 1.0 compatible. +* [Osprey Service](https://github.com/mulesoft/osprey) +* [Prism](http://stoplight.io/platform/prism/) - run locally +* [Swagger-codegen](https://github.com/swagger-api/swagger-codegen) - Has Docker Config +* [Imposter](https://github.com/outofcoffee/imposter) - Has Docker config + +### Mock Service +* [Mockbin](http://mockbin.com/) - test, mock and track http requests & responses + +### How To - Mock API Server +* [Mock Rest API with JSON Server](https://coligo.io/create-mock-rest-api-with-json-server/) - Create your own mock API server with faker.js +* [Testing External APIs with Mock Servers](https://realpython.com/blog/python/testing-third-party-apis-with-mock-servers/) - Use python for testing +* [Go Raml](https://github.com/Jumpscale/go-raml) + +## Other +* [Standalone RAML API Mocking Tools Surface](https://www.programmableweb.com/news/standalone-raml-api-mocking-tools-surface/2015/08/13) - Article - Mock tools +* [RAML and Osprey - a Better Way to Build Mock APIs](https://www.tcias.co.uk/blog/2015/03/11/raml-and-osprey-a-better-way-to-build-mock-apis/) +* [Sandbox](https://getsandbox.com/) - online service for API mocking + +### Creating a mock api server - node.js +* Using `json-server` +* Setup + 1. Create directory - *test_server* + 1. `touch server.js` - server startup file + 1. `npm init` - create config file. Set `server.js` as the start script. + 1. Create `server.js` file. + 1. `npm install faker json-server --save-dev` + +```json + //server.js + const jsonServer = require('json-server') + const customers = require('./customers') + const server = jsonServer.create() + const router = jsonServer.router(customers()) + const middlewares = jsonServer.defaults() + + server.use(middlewares) + server.use(router) + server.listen(3000, () => { + console.log('JSON Server is running') + }) + + //customer.js + var faker = require('faker') + function generateCustomers () { + var customers = [] + for (var id = 0; id < 50; id++) { + + var firstName = faker.name.firstName(); + var lastName = faker.name.lastName(); + var phoneNumber = faker.phone.phoneNumberFormat(); + + customers.push({ + "id": id, + "first_name": firstName, + "last_name": lastName, + "phone": phoneNumber + }) + } + return { "customers": customers} + } + module.exports = generateCustomers +``` + +## REST Test Endpoints +* [JsonPlaceHolder](https://jsonplaceholder.typicode.com/) +* [Random User Generator](https://randomuser.me/) + +# Projects of interest + +## Software Engineering +* Kevlin Henney - #KevlinHenney + +## Web +### Tools to watch +* [Vapor](http://vapor.codes/) - Swift3 framework for web application development. +* [Electrode](http://www.electrode.io/index.html) - made by Walmart. ReactJS framework essentially. + +### JavaScript +* [elm](http://elm-lang.org/) + * [Tutorial](https://guide.elm-lang.org/) + * [Awesome list of Elm Tutorials](https://github.com/isRuslan/awesome-elm) +* [GrapeJs](http://grapesjs.com/) - Web builder framework. JavaScript. Sites without coding. Integrate into own site. +* [Monaco Editor](https://github.com/Microsoft/monaco-editor) - Microsoft javascript based code editor. + + +## Resource Lists +* [Awesome Awesome List](https://github.com/bayandin/awesome-awesomeness) - List of lists +* [Awesome Weekly](https://awesomeweekly.co/) - [Github](https://github.com/sindresorhus/awesome) +* [Awesome Serverless List](https://github.com/travist/awesome-serverless-1) +* [Awesome Python](https://awesome-python.com/) +* [Awesome Boilerplates & Templates](https://github.com/melvin0008/awesome-projects-boilerplates) +* [Awesome Elm Tutorials](https://github.com/isRuslan/awesome-elm) +* [Awesome Flask](https://github.com/humiaozuzu/awesome-flask) +* [Awesome PHP](https://github.com/ziadoz/awesome-php) +* [Awesome Angular](https://github.com/AngularClass/awesome-angular) +* [Awesome Angular Components](https://github.com/brillout/awesome-angular-components) +* [Awesome IOS](https://github.com/vsouza/awesome-ios) - [main site](http://awesomeios.com/) +* [Awesome Kotlin](https://github.com/KotlinBy/awesome-kotlin) +* [Front-end Dev Bookmarks](https://github.com/dypsilon/frontend-dev-bookmarks) +* [raywenderlich.com](https://www.raywenderlich.com) - IOS/development resources +### List of lists +* [Sindresourhus](https://github.com/sindresorhus/awesome) +* [Useful and silly lists](https://github.com/jnv/lists) + +## Algorithm Resources +* [Grokking Algorithms Source](https://github.com/egonSchiele/grokking_algorithms) +* [Elementary Algorithms and Data Structures](https://github.com/liuxinyu95/AlgoXY) +* [The Coders Hub](https://github.com/thecodershub/algorithms) - Algorithms in multiple languages + +## Other +* [Boomerang](http://www.seas.upenn.edu/~harmony/) - Data conversion and synchronization +* [Unison](https://www.cis.upenn.edu/~bcpierce/unison/) - File sync utility + +* Report Servers + * [ReportServer](https://reportserver.net/en/) - integrates Birt reports. Open Source + +## Serverless +* [Serverless](https://github.com/serverless/serverless) - serverless framework + +## Mobile Prototyping Tools +* [Marvel](https://marvelapp.com/features/) - Prototyping tool +* [CSS3 Animations](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Using_CSS_animations) - use for interactivity +* [Hammer](http://hammerjs.github.io/) - JavaScript library for touch. +* [Axure](https://www.axure.com/#a=features) - Has a free educational version. + +## Other Projects +* [freeCodeCamp](https://github.com/freeCodeCamp) + * [Mail For Good](https://github.com/freeCodeCamp/mail-for-good) - Open Source email campaign management tool. + * [Conference For Good](https://github.com/freeCodeCamp/conference-for-good) +* [what 3 words](https://support.what3words.com/hc/en-us) - location alternative to addresses +* [Apostrophe CMS](http://apostrophecms.org/) - Node.js based CMS + +## Event Management Software +* [Attendize](https://www.attendize.com) - self-hosted ticket sales online (think EventBrite) +* [Open Source Event Manager](https://github.com/openSUSE/osem) - Ruby on Rails event manager for tech conference +* [Open Conference Ware](https://github.com/osbridge/openconferenceware) - Ruby on Rails conference manager. +* [Event Espresso](https://github.com/eventespresso/event-espresso-core) - Wordpress Plugin + +## RPC Framework +* [gRPC](https://grpc.io/) +* [Apache Thrift](https://thrift.apache.org/) + +## Service Providers +* [Church Insight](http://www.churchinsight.com/) - church admin software. +* [Pilot](https://pilot.com/) - bookkeeping software. + +## Asset Management +* [Cloudinary](https://cloudinary.com/) - Digital Asset Management in the cloud. Has a free tier. + * Has a wordpress plugin +* [Filestack](https://www.filestack.com/) - Has a free tier. + +## Edge Services +* [Fastly](https://www.fastly.com/) - CDN/Edge servers. + +## Other Services +* [Sentry](https://docs.sentry.io/learn/context/) - has a free tier. + * Error tracking service. Able to rack from JavaScript, PHP, Java, Python. +* [FormSpree](https://formspree.io/) - Form to email. First 1000 are free. + +## Animation +* [GSAP](https://greensock.com/gsap) + + +## Presentation Frameworks [Web based] +* [Impress](https://github.com/impress/impress.js) +* [Remark](https://github.com/gnab/remark) +* [Deck](https://github.com/imakewebthings/deck.js) +* [WebSlides](https://github.com/webslides/WebSlides) + +## Lists for marketing site +* [Places To Post Your Startup](https://github.com/mmccaff/PlacesToPostYourStartup) + +## Blockchain +* [Non-financial Blockchain](https://github.com/machinomy/awesome-non-financial-blockchain) + +## Free Services for Devs +* [Free for Devs](https://github.com/ripienaar/free-for-dev) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/java.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/java.md new file mode 100644 index 00000000..bba5e4db --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/java.md @@ -0,0 +1,49 @@ +--- +title: java +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Java Notes +1. Determine location of Java on Mac OS X + 1. ```echo $(/usr/libexec/java_home)``` +1. Using Ivy with Ant + * Download [Apache Ivy](http://ant.apache.org/ivy/) + 1. Put files into ant/lib directory. + 1. Lib directory at `~/.ant/lib` - Using sdkman to manage Ant. + +## Resources +* [Awesome Java](https://github.com/akullpp/awesome-java) +* [JHipster](jhipster) - Spring Boot + Angular +* [Lombok](https://projectlombok.org/) - decorators for Java. +* [Apache POI](https://poi.apache.org/) - API for Microsoft Documents +* [Java Design Patterns](https://github.com/iluwatar/java-design-patterns) +* [Jbake](http://jbake.org/) - Static site generator in Java +* [Apache FOP](https://xmlgraphics.apache.org/fop/) - PDF generator +* [DropWizard](http://www.dropwizard.io/1.2.0/docs/) - Generate REST Apps. +* [Handlebars Java](https://jknack.github.io/handlebars.java/) - Mustache/Handlebars template engine in Java. +* [Apache PDFBox](https://pdfbox.apache.org/) - java library for PDF +* [Java Sample Approach](http://javasampleapproach.com/) + +# JHipster +## Resources +* [JHipster](http://www.jhipster.tech/) - Spring Boot + Angular +* [JHipster Book](http://www.jhipster-book.com/#!/) +* Articles and Tutorials + * [Top 10 JavaOne 2017 Sessions for Java Hipsters](https://developer.okta.com/blog/2017/09/28/top-10-javaone-2017-sessions-for-java-hipsters) + * [Microservices with JHipster](https://developer.okta.com/blog/2017/06/20/develop-microservices-with-jhipster) +* People + * [Matt Raible](https://github.com/mraible) +## Dev Notes +* [Tell Gradle to use a specific jdk version](https://stackoverflow.com/questions/18487406/how-do-i-tell-gradle-to-use-specific-jdk-version) = Point to Java8 - + * In *gradle.properties* - on Mac OS X with SDKMAN installed + `org.gradle.java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home` + +# Learning to use Spring +## Steps +* Start with maven + * ```mvn archetype:generate -DgroupId=za.co.catenare.tutorial -DartifactId=tutorial -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false``` + * cd tutorial + * mvn package + * java -cp target/tutorial-1.0-SNAPSHOT.jar za.co.catenare.tutorial.App + * Runs the App diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/javascript.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/javascript.md new file mode 100644 index 00000000..321a2fcf --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/javascript.md @@ -0,0 +1,273 @@ +--- +title: javascript +updated: 2021-03-14 10:26:17Z +created: 2020-09-10 22:07:13Z +--- + +# Notes related to front-end development. + +## Resources +* [Standard JS](https://standardjs.com/) - JavaScript Standard Style + * Rules for writing JavaScript. + +* [You Don't Need jQuery](https://blog.garstasio.com/you-dont-need-jquery/) +* [JavaScript Plugin for Web Forms](https://1stwebdesigner.com/javascript-plugins-web-forms/) +* [JavaScript Encyclopedia](http://www.crockford.com/javascript/encyclopedia/) +### Learn +* [Alligator.io](https://alligator.io/) +### Tools +* [Lerna](https://lernajs.io/) - Manage JavaScript projects with multiple packages +* [Colmena](https://github.com/colmena/colmena) - Colmena - CMS system. + +### Performace tools +* Calibre +* Speedcurve +* Bundlesize +* [httparchive.org](http://beta.httparchive.org/) - beta.httparchive.org - data/insights + +### Ionic +* Include font-awesome fonts in project. + * [FontAwesome in Ionic](https://luiscabrera.site/tech/2017/01/09/fontawesome-in-ionic2.html) + * Install FontAwesome - `npm install --save font-awesome` + * Create script to copy fonts into `www/assets/fonts` + + * Set path to fonts in SCSS - `$fa-font-path: /assets/fonts;` in `scr/app/app.scss`; + * https://forum.ionicframework.com/t/adding-font-awesome-to-rc0/65925/3 - comments for using with sass to convert to ion-icon. + +## Fixing Issues +* "SyntaxError: Unexpected keyword 'const'. Const declarations are not supported in strict mode." + * Resolution: [Safari/Babel/Webpack Const declarations are not supported in strict mode #922](https://github.com/hapijs/joi/issues/922) - Don't exclue node_modules when building with webpack. +* "ReferenceError: regeneratorRuntime is not defined" + * Resolution: [Async Functions Producing Error](https://github.com/babel/babel/issues/5085) - Include transform-runtime to plugins seems to work. + +## NPM Notes +* Update npm modules + * `npm outdated` - list of outdated files + * `npm install {} {}` - install list of outdated files. + +## Other +* [Normalizr](https://github.com/paularmstrong/normalizr) - create schema to normalize the result of a returned schema. + +### Captcha +```js +let getCaptcha = new Promise( + function(resolve) { + let captcha = true; + resolve(captcha); + } +) + +export default getCaptcha; + +import Vue from 'vue' +import App from './App.vue' +import getCaptcha from './recaptcha' + +window.captchaCallback = function() { + console.log('called') + getCaptcha.then(function(fulfilled){ + + grecaptcha.render('html_element', { + 'sitekey' : '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI' + }); + + }) + .catch(function(error){ + console.log(error); + }); +} + + +new Vue({ + el: '#app', + render: h => h(App) +}) +``` +### Axios +* Issue: [*Axios is not showing all headers of response*](https://github.com/axios/axios/issues/771) + * [Set Global Axios Headers](https://github.com/axios/axios#global-axios-defaults) + * [Mozilla CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Expose-Headers) + +### Fingerprint2 - use a quick and dirty way to track submissions. +* Wrap code in a promise. +```js +import Fingerprint2 from "fingerprintjs2"; + +const getFinger = new Promise((resolve) => { + + new Fingerprint2().get((result) => { + resolve(result); + }); +}); + +export default getFinger; +``` +* In Component - call a function from the promise and the set local var for finger. +```js +getFinger.then( (result) => this.getInitHeaders(result) ); +``` + +### Notes for github +* https://github.com/catenare/proto-app-demo + * vue + * awesome-typescript-loader + * Production options + * Marvel css prototype +* https://github.com/catenare/basic-typescript-project + * using webpack, typescript, faucet and tape +* https://github.com/catenare/foundation-cli-template-site + * Foundation 6 template with typescript +* https://github.com/catenare/webpack-starter + * Basic webpack template with leaflet + +### Shared files +* tslint.json +```json +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": {}, + "rulesDirectory": [] +} +``` +* tsconfig.json +```json +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "lib": [ + "es2016", "dom" + ], + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true + } +} +``` +* postcss.config.js +```js +module.exports = { + plugins: { + 'postcss-cssnext': {} + } +} +``` + +* .eslintrc.json +```json +{ + "extends": "standard" +} +``` +* .eslintignore +```json +dist +node_modules +``` +* .babelrc +```json +{ + "presets": [ + "env", + "react", + "stage-3" + ], + "plugins": [ + "transform-class-properties", + "transform-decorators", + "transform-react-constant-elements", + "transform-react-inline-elements" + ] +} +``` +### Other +* [npm-run-all](https://github.com/mysticatea/npm-run-all/blob/master/docs/npm-run-all.md) - cli options + +### Notes for eslint +* [Disable eslint rules](https://brunoscopelliti.com/how-to-disable-eslint-rule-via-javascript-comment/) + +### Getting hex codes for FontAwesome to work. +* **font-family** should be *"FontAwesome"* +```scss + &::before { + font-family: "FontAwesome"; + content: "\f00d"; + } +``` +* List of hex codes for font-awesome: [FontAwesomeSnippet](http://astronautweb.co/snippet/font-awesome/) + + +## Material Design +* [Material Design Web](https://github.com/material-components/material-components-web) + +### Notes for material.angular.io +* Using with autocomplete + * displayWith issue: don't have access to the host component. + * [Issue 3308](https://github.com/angular/material2/issues/3308) + * [Issue 3359](https://github.com/angular/material2/issues/3359) + * Fix/workaround below. +```ts + get displayName() { + return (val) => val ? this.accounts.filter( (account) => account.account_uuid === val)[0].full_name : undefined; + } +``` + +# JavaScript Project Startup + +## Basic setup +* *.editorconfig* +```ini +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +``` + +* Setup git repository +* `touch .gitignore` +* `git init` +* *.gitignore* +```ini +node_modules +dist +.vscode/ +.idea/ +``` + +## NPM Setup +1. `npm init -f` - create *package.json* + +1. Setup *eslint* + * `./node_modules/.bin/eslint --init` + * *Use a popular style guide* + * *Standard* + * *JSON* + +1. Setup *tslint* + * `./node_modules/.bin/tslint --init` + +1. Setup *tsconfig.json* + * `./node_modules/.bin/tsc --init` + +## Npm Scripts +```json + "scripts": { + "start": "npm-run-all -n -p dev:server", + "dev": "npm-run-all -n -p dev:server lint:watch", + "dev:server": "cross-env webpack-dev-server --history-api-fallback --color --progress --hot --inline", + "build": "npm-run-all -s build:webpack", + "build:webpack": "cross-env NODE_ENV=production webpack --progress --hide-modules", + "lint": "esw webpack.config.* src --color", + "lint:watch": "npm run lint -- --watch", + "test": "echo \"Error: no test specified\" && exit 1" + }, +``` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/jsonschema.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/jsonschema.md new file mode 100644 index 00000000..6c210efb --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/jsonschema.md @@ -0,0 +1,36 @@ +--- +title: jsonschema +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# json schema +## Documentation +* [JSON Schema](http://json-schema.org/) +* [Understanding JSON Schema](https://json-schema.org/understanding-json-schema/index.html) +## Resources +* [Mozilla React json schema form](https://github.com/mozilla-services/react-jsonschema-form) +* [Mozilla Services](https://mozilla-services.github.io/react-jsonschema-form/) +* [API Tools](https://github.com/interagent) +* [Automating API Documentation with JSON Schema](https://tech.degica.com/en/2015/05/02/automating-api-documentation-with-json-schema/) +* [Validating JSON Schemas with RSpec Matcher](https://thoughtbot.com/blog/validating-json-schemas-with-an-rspec-matcher) +* [Generate Models and Serializers from JSON, JSON Schema](https://github.com/quicktype/quicktype) +* [JSON Powered Documentation Generator](https://blog.cloudflare.com/cloudflares-json-powered-documentation-generator/) +## Ruby tools +* [json_schemer](https://github.com/davishmcclurg/json_schemer) +* [JSONAPI-RB](http://jsonapi-rb.org) +### json serializers ruby +* [Netflix fast json-api](https://github.com/Netflix/fast_jsonapi) +## jsonapi +* [Problem Details for HTTP APIs](https://tools.ietf.org/html/rfc7807) - API Errors +## Docs +* [Making the Most of JSON-API](https://blog.apisyouwonthate.com/making-the-most-of-json-api-7fb51f4407aa) +## Companies with jsonapi +* [WeWork](https://blog.apisyouwonthate.com/weworks-api-specification-workflow-defec45cc037) +## OpenAPI tools +* [SPECCY](https://speccy.io) +* [Standards.REST](http://standards.rest) +## Documenting JSON Schema +* ~~~[Docson](https://github.com/lbovet/docson) - Document JSON types~~~ +* [Cloudflare JSON Schema Tools](https://github.com/cloudflare/json-schema-tools) - Cloudfare +* [JSON Schema Documentation](https://github.com/FGRibreau/json-schema-documentation) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/mobile/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/mobile/general.md new file mode 100644 index 00000000..b998671a --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/mobile/general.md @@ -0,0 +1,149 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Deciding on a framework for mobile development + +## Goals +* Rapid development. + * Trying to get a quick prototype up and running to test out the feasability of the project +* Web initially + * Create the equivalent of a mobile web site that can be packaged as a native app later. Can be a combination of both web and native. +* IOS first + * Focused on developing an IOS app. Will port to Android. Maybe to Windows based on the framework. +* Web framework + * Use JavaScript, CSS, HTML for putting together project. + +## Tools +* Apache Cordova - underlying tool for the hybrid platform. +* AngularJS - JavaScript framework that seems to be most portable to NativeScript. +* TypeScript - write JavaScript with enterprise tools. + +## Frameworks +* Ionic - Angular and typescript. Has an infrastructure around it. Can generate components with command line. +* Framework7 - Seems to have a variety of templates. +* OnsenUI - just not enough for me to bite. + +## Thinking +* Starting with Framework7 template tool. See how far we can get. Goal is to create a web site that will suffice as a prototype for mobile site. + * Not going to use Framework7. Uses less for css. +* Going to try and use ionic framework. + +## Progressive Web Apps +* [Progressive Angular Applications](https://houssein.me/progressive-angular-applications) + +# Mobile Notes + +## Mobile Prototyping Tools +* [Marvel](https://marvelapp.com/features/) - Prototyping tool. Has a free tier. +* [Axure](https://www.axure.com/#a=features) - Has a free educational version. +* [Aquro](http://www.aquro.com/pricing) - Has free tier. +* [Vectr](https://vectr.com/) - Free. Includes for web. +* [Invision](https://www.invisionapp.com/) - Web and mobile prototype +* [Zeplin](https://zeplin.io/) - Free for single project. + +### Web only +* [CSS3 Animations](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Animations/Using_CSS_animations) - use for interactivity +* [Hammer](http://hammerjs.github.io/) - JavaScript library for touch. + +## Mobile Web UI Kits +* [Framework7](https://framework7.io/) +* [UIKit](https://getuikit.com/docs/installation) +* [OnsenUI](https://onsen.io) +* [Aura](https://github.com/forcedotcom/aura) - Java backen + * [Aura Documentation](http://documentation.auraframework.org/auradocs) +* [Mobile Angular UI](http://mobileangularui.com/) +* [Ratchet](http://goratchet.com/) + +## Native Kits +* [NativeScript](http://docs.nativescript.org/) +* [AppCelerator](http://www.appcelerator.com/) + +## Hybrid Kits +* [Ionic 2](http://ionicframework.com/docs/intro/installation/) - Uses Angular +* [PhoneGap](https://phonegap.com/) - uses Cordova +* [Cordova](https://cordova.apache.org/) - Underlying tool for most hybrid kits + +## Libraries +* [Hammer](http://hammerjs.github.io/) - JavaScript library for touch. +* [Angular](https://angular.io/) - Library that seems to be the underlying framework for most hybrid apps. +* [Zepto](http://zeptojs.com/) - replacement for jquery. + +## Tools +* [Google Developer Tools](https://developers.google.com/products/develop/) +* [LimeJS](https://github.com/digitalfruit/limejs) - [Web Page](http://www.limejs.com/) - Game framework. + +## Services +* [Googel Firebase](https://firebase.google.com/) +* [Keen IO](https://keen.io/) - api for event data + +## UI Kit Templates +* [UpLabs](https://ios.uplabs.com/) - UI kit market. + +## Agencies +* [Famous](https://famous.co/) + +## Online App Template Building Tools +* [AppInstitute](https://appinstitute.com/pricing/) +* [AppMachine](http://www.appmachine.com/) +* [AppMakr](https://www.appmakr.com/) +* [AppYourself](https://appyourself.net/en/) +* [Appery](https://appery.io/) +* [Creator](http://ionic.io/products/creator/pricing) +* [Swiftic](https://www.swiftic.com/features/) +* [Kinvey](https://www.kinvey.com/) +* [App Press](https://www.app-press.com/) - Code free app development +* [EachScape](https://eachscape.com/) - Drag and drop interfaces +* [iBuildApp](https://ibuildapp.com/) - Online app creator +* [ViziApps](http://www.viziapps.com/) - Create mobile apps +* [AppGyver](https://www.appgyver.eu/) - App gyver + +# Mobile Device Development Notes + +## Android +* Google Tools + * [Android Studio](https://developer.android.com/studio/index.html) + +### Solutions +* **Problem:** Launching Android SDK Manager without going through Atom Studio + * *~/Library/Android/sdk/tools/android* + * **For AVD** *~/Library/Android/sdk/tools/android avd* + * [StackOverflow](http://stackoverflow.com/questions/16271242/launch-android-sdk-manager-tools-directory-doesnt-exist-mac) + * Lauch AVD - [StackOverflow](http://stackoverflow.com/questions/8119282/dont-see-android-sdk-and-avd-manager-when-execute-android-tool-command) + +## IOS +### IOS Development Notes + +* Cocoapods + * Issue: *Unable to add a source with url https://github.com/CocoaPods/Specs.git named master. You can try adding it manually in ~/.cocoapods/repos or via pod repo add* + * [StackOverflow](http://stackoverflow.com/questions/33649114/since-i-installed-xcode-7-1-1-and-updatet-on-osx-10-11-1-i-get-an-git-error) +``` + cd ~/.cocoapods/repos + git clone git://github.com/CocoaPods/Specs.git master + pod install --no-repo-update --verbose +``` +* Actual issue: I'm in South Africa and it was taking forever to do the initial repo specs checkout. Doing git clone git:/github.com/CocoaPods/Specs.git master into ~/.cocoapods/repos resolved the problem. Going forward, only has to update the repos, not completely download it. + +## Resources +* [Android Developer - Google](https://developer.android.com/index.html)) +* [Some Teaching Notes - ](https://www3.ntu.edu.sg/home/ehchua/programming/android/Android_HowTo.html#zz-2.) + +### Tools +* [Fastlane](https://fastlane.tools/) - release tool for mobile app. +* [App Inventor](http://appinventor.mit.edu/explore/) +* [Cocos2d-x](http://www.cocos2d-x.org/) - IOS Game dev tools. + +# Ionic Development Notes +Trying to figure out Ionic while building a prototype to demo via the web. +## Notes +* Pushing site to gh-pages. + * Ref: [Deploying an Angular App to Github Pages](https://alligator.io/angular/deploying-angular-app-github-pages/) + * Ionic starter template includes the manifest and worker file by default. + * Use the ionic build scripts to create the web version of your app. + 1. Install *angular-cli-ghpages* globally + * `npm install --global angular-cli-ghpages` + 1. Build ionic app with base-href to github gh-url for your username + * `npm run ionic:build --prod --base-href "https://.github.io//"` + 1. Push to gh-pages. `ngh --dir www` - have to use *www* because the script looks for the *dist* folder by default. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/php/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/php/general.md new file mode 100644 index 00000000..8ee92b89 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/php/general.md @@ -0,0 +1,19 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Resources and notes for PHP + +## Setup +To enable php71-apache2handler, run: +* `cd /opt/local/apache2/modules` +* `sudo /opt/local/apache2/bin/apxs -a -e -n php7 mod_php71.so` + +## Debugging +* [PHP Console](http://consle.com/instance/examples/) + +## Resources +* [Google Cloud Datastore Library for PHP](https://github.com/tomwalder/php-gds) +* [Coding Style Guide for PHP](http://www.php-fig.org/psr/psr-2/) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/php/wordpress/api.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/php/wordpress/api.md new file mode 100644 index 00000000..01c4a493 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/php/wordpress/api.md @@ -0,0 +1,50 @@ +--- +title: api +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Wordpress API Resources and Tools + +## Resources +* [Rest Developer Handbook](https://developer.wordpress.org/rest-api/) +* [WP Rest API Docs](http://v2.wp-api.org/) +* [WP JavaScript Client](http://v2.wp-api.org/extending/javascript-client/) - *wp-api* + * This gets briefly mentioned in the documentation. + * Hard to find good documentation or examples about it. +- [React Admin Panel](https://github.com/rnaga/wordpress-rest-admin) + + +### Other Resources +* [Node WPAPI](https://github.com/WP-API/node-wpapi) - Wordpress Node Client. - See how they are doing things. +* [ADAM SILVERSTEIN](http://www.tunedin.net/) from [10UP](https://10up.com/about/#employee-adam-silverstein) - Listened to his talks about backbonejs. Learned about wp-api that way. + * [YouTube Put A Little Backbone in your Wordpress](https://www.youtube.com/watch?v=dRLFTpAqdb0) + +### Info that helped +1. Built complete front-end client in Vuejs. + * Access the REST API without trying to conform to Wordpress idiosyncrasies. +1. Learn to use Promises. +1. Use TypeScript because JavaScript is all over the place. +1. Don't worry about backwards compatibility. +1. Learn how to create an admin page in Wordpress using JavaScript + * [Create JavaScript Settings Page Using Wordpress REST API](https://torquemag.io/2017/06/creating-wordpress-settings-page-using-wordpress-rest-api/) + * Most documentation pointing to admin-ajax.php client. + +### Wordpress Vuejs +#### Notes +* [Wordpress and Vue Guides/Resources](http://www.peterrknight.com/2017/06/27/wordpress-and-vue-guides-resources/) +* [Vue Wordpress PWA](https://github.com/bstavroulakis/vue-wordpress-pwa) + +### Using the Wordpress API with angular +* Want to use Foundation for creating my theme +* Use Amazon CDN for serving pages. Reduce latency in South Africa +* Not to keen on splitting up my theme for Wordpress. +#### Resources +* [de Wordpress themes and angular articles](http://doppiaeast.com/) +* [Wordpress API Angular Client](https://github.com/wordpress-clients/wp-api-angular) +#### Tools +* [Postman](https://www.getpostman.com/) - Use to explore the Wordpress API +* [WP REST API Docs](https://developer.wordpress.org/rest-api/) + +### Notes +* Local site: `http://paseo.demo/wp-json/wp/v2/posts` - Access the REST API diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/flask.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/flask.md new file mode 100644 index 00000000..658d61a9 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/flask.md @@ -0,0 +1,47 @@ +--- +title: flask +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Flask Notes + +## Sources +* [Flask](http://flask.pocoo.org) +* [How to Structure Large Flask Applications](https://www.digitalocean.com/community/tutorials/how-to-structure-large-flask-applications) +* [How to serve flask applications with uwsgi and nginx](https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04) + +## ~~Creating a Flask App~~ Now using Pipenv +* Create directory and cd into directory + * `pipenv shell` +* Install flask + * `pipevn install flask SQLAlchemy psycopg2 click uwsgi` + +## Flask +### REST - Serializing and deserialing JSON data +* Using Marshmallow + * [Declaring Schemas](https://marshmallow.readthedocs.io/en/latest/quickstart.html#declaring-schemas) + * Implicit field creation - let marshmallow figure out the field. +```python +class DemoSchema(Schema): + class Meta: + fields=("name", "email", "created_at", "uppername") +``` +* Using Marshmallow with jsonschema to validate data from api - **No longer recommended. Latest Marsmallow includes actual validation** + * Using marshmallow-jsonschema - [marshmallow-jsonschema](https://github.com/fuhrysteve/marshmallow-jsonschema) + * Use to dump jsonschema from marshmallow + * Using jsonschema - [JsonSchema](https://github.com/Julian/jsonschema) + * Uses jsonshema validate, ValidationError + * Use the jsonschema from marshmallow-jsonschema to validate content from api +```python + åsch = ReceiptSchema() + js_schema = json_schema.dump(sch).data + receipt = request.get_json() + try: + validate(receipt, js_schema) + receipt_data = sch.load(receipt).data + except ValidationError as err: + resp['err'] = err.message +``` + +### [CORS Configuration](/api/CORS%20with%20FLASK%20without%20Flask-CORS/) - Without using Flask-CORS diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/general.md new file mode 100644 index 00000000..00bc8b20 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/general.md @@ -0,0 +1,144 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Using Python Notes + +## Resources +* [Fullstack Python](https://www.fullstackpython.com/) +* Podcasts + * [Talk Python To Me](https://talkpython.fm/) + * [Python Bytes](https://pythonbytes.fm/) +* Python books online [Invent with python](http://inventwithpython.com) + +## Notes +* ~~Using python terminal in PyCharm with virtualenv messes up the python terminal everywhere else. Need to exit PyCharm Python Terminal if I want to use the virtualenv from Mac OS X terminal.~~ +* Reload module from REPL + * `import imp` + * `import.reload(module)` - module is the name of the module to reload +* Import packages from current directory + * `from . import package` - will look in current directory for the package +* Shuffle list - random sequence for list + * `import random` + * `list = [a,b,c,d]` + * `random.shuffle(list)` + * `for item in list:` +* Issue with ASCII environment + * [Python 3 Surrogate handling](http://click.pocoo.org/6/python3/#python-3-surrogate-handling) + * Add to *~/.profile* + * `export LC_ALL=en_US.UTF-8` + * `export LANG=en_US.UTF-8` +* Special Method Names + * [Computed Attributes](http://www.diveintopython3.net/special-method-names.html) - magic names for objects + * [MagicMethods](https://rszalski.github.io/magicmethods/) +* Issue with readline + * ~~Terminal all screwed up after using python repl~~ + * ~~`sudo port install python36 +readline` - fixes issues with python and terminal Mac OS X~~ +* Merge dictionaries + * `z = {**x, **y}` - [Merge Python Dictionaries](https://stackoverflow.com/questions/38987/how-to-merge-two-dictionaries-in-a-single-expression) + +* uwsgi + * wsgi = wsgi.py file + * `uwsgi --socket 0.0.0.0:5000 --protocol=http -H /Users/themartins/Envs/lookfindmeAPI-jd3kET2g -w wsgi` + * `uwsgi --socket 0.0.0.0:5000 --protocol=http --wsgi-file wsgi.py --callable myApp -H /Users/themartins/Envs/lookfindmeAPI-jd3kET2g` + +## ~~Pip~~ **Now using pipenv** +* Upgrade pip - `pip install --upgrade pip` +* Error message: *"Can not perform a '--user' install. User site-packages are not visible in this virtualenv"* +* Problems **~/Library/Application Support/pip/pip.conf** contains **user=true** +* Resolution: Override the config in your virtualenv pip config file + * Create **$VIRTUAL_ENV/pip.conf** + * Place config information to override user=true +```Ini +[install] +user=false +``` +* [Pip Configuration](https://pip.pypa.io/en/stable/user_guide/#configuration) | [StackOverflow Issue](http://stackoverflow.com/questions/30604952/pip-default-behavior-conflicts-with-virtualenv) +## Install +* [Installing packages](https://packaging.python.org/tutorials/installing-packages/) + +### Install pip as user +* get the get-pip.py script + * Get the script ```wget https://bootstrap.pypa.io/get-pip.py``` + * Run the script with user option ```pytoh get-pip.py --user``` +* Now install all pip packages into user space. ```pip install --user ``` + +### Setup pip config file - want to set default settings for command line. Like always install in user space. +* Create file ```$HOME/Library/Application Support/pip/pip.conf``` +* Edit file +```Ini +[Install] +user = true +``` + +## Packaging python +* [Python Packaging User Guid](https://packaging.python.org/) +* [Packaging and Distributing Projects](https://packaging.python.org/tutorials/distributing-packages/) - Guide +* [setup.py cheatsheet](http://turbo87.github.io/setup.py/) +* [setup.py guide](https://github.com/kennethreitz/setup.py) + + +* [VirtualEnvWrapper](https://virtualenvwrapper.readthedocs.io/en/latest/index.html) + +## Uwsgi and NGINX +Notes for configuring uwsgi and Nginx +Using uwsgi to serve the python api on aws servers. +* [Digital Ocean - deploy python to wsgi](https://www.digitalocean.com/community/tutorials/how-to-deploy-python-wsgi-applications-using-uwsgi-web-server-with-nginx) - docs. + +### Using uwsgi. +* Notes: + * If api starts at /double than nginx config location should be /double +* Packages needed - Ubuntu + * `apt install uwsgi-core uwsgi-plugin-python3` - need python3 plugin +* `pip3 --user install pipenv` - need pipenv for our application. +* Files need for uwsgi to work. + * *wsgi.py* - startup python file to launch our application + * *uwsgi.ini* - configuration file for our uwsgi server + * Commands + * `uwsgi --ini uwsgi.ini --plugin python3` - start the server on ec2. Configuration will daemonize the app. Configuration already includes the config to daemonize it. + * `uwsgi --stop /tmp/lookfindme.pid` - stops the service. +* *wsgi.py* file +```python +from app import lookfindme +myApp = lookfindme.create_app() + +if __name__ == "__main__": + myApp.run() +``` +* *uwsgi.ini* file (different local and server version) +```ini +[uwsgi] +http-socket= :9090 +socket=127.0.0.1:8000 +socket=/tmp/lookfindme.sock +chmod-socket=666 +wsgi-file=wsgi.py +callable=myApp +master=true +processes=5 +vacuum=true +virtualenv=/Users/themartins/Envs/lookfindmeAPI-jd3kET2g +daemonize=/tmp/uwsgi_daemon.log +pidfile=/tmp/lookfindme.pid +``` +* *nginx.conf* - nginx config. nginx already includes uwsgi support. +```conf +upstream flask { + server 127.0.0.1:9000; +} +server { + listen 80 default_server; + listen [::]:80 default_server; + + location /double { + include /etc/nginx/uwsgi_params; + uwsgi_pass flask; + uwsgi_param Host $host; + uwsgi_param X-Real-IP $remote_addr; + uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for; + uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto; + } + } +``` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/jupyter.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/jupyter.md new file mode 100644 index 00000000..881a66e1 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/jupyter.md @@ -0,0 +1,53 @@ +--- +title: jupyter +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Jupyter Notebook +* [Jupyter](http://jupyter.org) +* Install + * `pipenv install jupyter` + +## Resources +* [JupyterLab](http://jupyterlab.readthedocs.io/en/stable/) - Extends Jupyter. +* [Jupyter Kernels](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels) +* [IPython Cookbook](http://ipython-books.github.io) +* [Widgets](https://ipywidgets.readthedocs.io/en/latest/index.html) +* [Jupyter Widgets](https://github.com/jupyter-widgets) + +## Notes +* Configuration - **~/Library/Jupyter** + +## Installing the notebook - using pipenv +* Create notebook folder and cd into directory `mkdir notebook` +* Install jupyter - `pipenv install jupyter` +* Install Kernels + * Need **node.js** ,**npm** and **zeromq* installed + * Using *macports* - `sudo port install zmq` - zeromq + * Using **nvm** for node.js + * Init a *package.json* file + * Install JavaScript kernel - install everything local in folder - [GitHub](https://github.com/n-riesco/ijavascript) + * `pipenv install pyzmq` + * `npm install -g ijavascript` - Need to install as global for it to work correctly + * `npx ijsinstall` + * `npx ijsnotebook` - Run the notebook with JavaScript enabled + * Install TypeScript kernel - [GitHub](https://github.com/nearbydelta/itypescript) + * `npm install itypescript` + * `jupyter notebook` - Typescript is now enabled. + * Install Ruby - [GitHub](https://github.com/SciRuby/iruby) + * Using **RVM** to manage Ruby + * Install iRuby - `gem install iruby` + * Install ffi-rzmq - `gem install ffi-rzmq` + * `iruby register --force` + * Install Elm - [Elm](https://github.com/abingham/jupyter-elm-kernel) + * `pipenv install elm_kernel` + * `python -m elm_kernel.install` +* Setting up *JuperLab* - [JupyterLab](http://jupyterlab.readthedocs.io/en/stable/index.html) + * Install in jupyter folder - `pipenv jupyterlab` + +## [BeakerX](http://beakerx.com) - includes a number of kernel extensions including SQL +* `pip install beakerx` then `beakerx install` +* Other Resources + * [Binder](https://mybinder.org/v2/gh/twosigma/beakerx/0.15.2?filepath=StartHere.ipynb) - Notebooks with documentation for BeakerX +* Very limited documentation. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/packages.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/packages.md new file mode 100644 index 00000000..b857ab5b --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/packages.md @@ -0,0 +1,60 @@ +--- +title: packages +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Learning About PipENV +## Resources +* [Pipenv Docs](https://docs.pipenv.org/) +* Tutorials + * [Hitchhikers Guide - Pipenv](http://docs.python-guide.org/en/latest/dev/virtualenvs/) + * [Packaging with Pipenv](https://code.tutsplus.com/tutorials/revisiting-python-packaging-with-pipenv--cms-30297) + * [Managing Dependencies](https://packaging.python.org/tutorials/managing-dependencies/) - Python.org - packaging + +## Notes +* `pip install --user pipenv` - installs in user mode. +* `pipenv shell` - activate the virtual environment +* Convert my **virtualenvwrapper** project to **pipenv** project. + * CD into directory of project. + * `pipenv install` - will install packages from **requirements.txt** file. + * `pipenv shell` - launch the virtual environment + * Edit **pidfile** to update dependencies to '*'. + * `pipenv update` - update to latest packages. +* Generate a requirements file + * `pipenv lock -r` + * `pipenv lock -r --dev` - only the dev requirement +# Python Packages + +## Database +* [SQLAlchemy](https://www.sqlalchemy.org) +* [SQLAlchemy Utils](https://sqlalchemy-utils.readthedocs.io/en/latest/#) + * Custom datatypes and utility functions for SQLAlchemy. Inludes UUIDType. +* [psycopg](http://initd.org/psycopg/) - PostgreSQL Python Adapter + +## Configuration +* [everett](https://github.com/willkg/everett) - [docs](https://everett.readthedocs.io/en/latest/) + * Works with .env and ini files. + +## Other +* [openpyxl](https://openpyxl.readthedocs.io/en/default/) + * Library to read and write Excel files including latest Excel files. +* [click](http://click.pocoo.org/6/) - Command line library for Python. +* Microsoft Word Merge Docs + * [docx-mailmerge](https://github.com/Bouke/docx-mailmerge) + * [Populating MS Word Templates with Python](http://pbpython.com/python-word-template.html) + * [python-docx](https://python-docx.readthedocs.io/en/latest/) + * [Automate The Boring Stuff](https://automatetheboringstuff.com/chapter13/) + +## Testing +* ~~[Nose](http://nose.readthedocs.io/en/latest/) - Testing for python~~ +* [PyTest](https://docs.pytest.org/en/latest/) +* [Tavern](https://taverntesting.github.io/) - API testing + +## Documentation +* [Mkdocs](http://www.mkdocs.org) + * Generate documentation for project and allows you to deploy to *github gh-pages* + +# Python Research and Resources +## Packages +* [Awesome Sphinx](https://github.com/yoloseem/awesome-sphinxdoc) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/sqlalchemy.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/sqlalchemy.md new file mode 100644 index 00000000..efe47d24 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/sqlalchemy.md @@ -0,0 +1,50 @@ +--- +title: sqlalchemy +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# SQLAlchemy Notes + +## Treat a view as a table in SQLAlchemy and allow use with ORM for queries. +* [Reflect a PostgreSQL view in Python’s SQLAlchemy](https://hultner.github.io/quickbits/2017-10-23-postgresql-reflection-views-python-sqlalchemy.html) +* Ref: [How do I map a table that has no primary key](http://docs.sqlalchemy.org/en/latest/faq/ormconfiguration.html#how-do-i-map-a-table-that-has-no-primary-key) + * How to reflect views for the ORM +``` +engine = create_engine(config('DB_URI')) +meta = MetaData() +meta.reflect(bind=engine, schema='public', views=True) +base = automap_base(metadata=meta) +base.prepare() + +def get_table(table_name): + try: + result = base.classes[table_name] + except KeyError as err: + result = meta.tables[table_name] + return result + +CHILD_VIEW = 'public.child_view' + + +class ChildView(base): + __table__ = get_table(CHILD_VIEW) + __mapper_args__ = { + 'primary_key': [__table__.c.account_uuid] + } + +base.prepare() +``` + +## [Automap](http://docs.sqlalchemy.org/en/latest/orm/extensions/automap.html) +* Use to automatically get table details from the database. This is if the table is being managed separately from *sqlalchemy*. + +## Notes +* Delete with session. [ORM Delete](http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.delete) +## Examples +* Order By - returns the latest item with the site_uuid. +```python + return self.query.filter(self._table.site_uuid == uuid).order_by( + self._table.updated_at.desc() + ).first() +``` \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/testing.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/testing.md new file mode 100644 index 00000000..be82a439 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/python/testing.md @@ -0,0 +1,36 @@ +--- +title: testing +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Testing with Python + +## Resources +* [Python Testing](http://pythontesting.net/) +* [PyTest](https://docs.pytest.org/en/latest/) +* [Tavern](https://taverntesting.github.io/) - API testing + +## Tavern + +### Notes +1. `pipenv install --dev tavern[pytest]` +1. Create YAML test file in **tests** directory. + * **test_server.tavern.yaml** - all test should be **test_{name}.tavern.yaml** +* Pytest + * Run `pytest` in top directory - will find **tests/** directory + * Run selected tests - `pytest -k fake` to run all tests with **fake** in the name. + * Minimize debug info - `pytest --tb=short` + * Run one test - `pytest tests\test_register_service.py::test_random_code_generator` + * Show print output in pytest - `pytest -s tests\test` + * Continuous watching changes + * `pipenv install --dev pytest-testmon pytest-watch` + * [Pytest Watch](https://github.com/joeyespo/pytest-watch) + * [Pytest Testmon](http://testmon.org/) +* Tavern + * Uses a YAML file for test setup. + * Talks directly to the API + * Can use pytest to run the test. + * Can create **common.yaml** file with shared parameters + * Be sure to include it in every individual test - every test is individual +* [Robot Framework](http://robotframework.org) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/resources/ruby.md b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/ruby.md new file mode 100644 index 00000000..e6d25fff --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/resources/ruby.md @@ -0,0 +1,112 @@ +--- +title: ruby +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Ruby Notes + +## RVM Notes +* Using RVM to install Ruby after upgrading OS x + * Error message: ```dyld: Symbol not found: _clock_gettime``` + * Solution __This worked for me__: ```xcode-select --install``` - Installed command line clients from os x. +* **No GPG software exists to validate rvm-installer, skipping.** + * Check gnupg2 installed + * Mac OS X - `sudo port install gnupg2` + * *Remove link to `/opt/local/bin/gpg` used to fix an earlier issue* + +## Gem +* Unable to run a command from a gem when installed with *gem install* + * Example: *gem install cocoapods*. Expect to use *pod* as a commandline client. + * Solution: **rvm use ruby-{current}** + * Problem related to rvm not setting up a default ruby. + +* *Warning! PATH is not properly set up* + * [About bash_profile and bashrc on Mac OS X](http://scriptingosx.com/2017/04/about-bash_profile-and-bashrc-on-macos/) - Terminal runs .bash_profile on new window. + * Edit *.profile* + * Add line to beginning of file. `[[ -s "$HOME/.bash_profile" ]] && source "$HOME/.bash_profile" # Load the default .bash_profile` +```bash +# MacPorts Installer addition on 2016-08-29_at_10:22:24: adding an appropriate PATH variable for use with MacPorts. +export PATH="/opt/local/bin:/opt/local/sbin:$PATH" +# Finished adapting your PATH environment variable for use with MacPorts. + +export NVM_DIR="/Users/themartins/.nvm" +[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm + +export WORKON_HOME=~/Envs +export VIRTUALENVWRAPPER_SCRIPT=$HOME/Library/Python/3.6/bin/virtualenvwrapper.sh +source "$HOME/Library/Python/3.6/bin/virtualenvwrapper_lazy.sh" +export PATH="$HOME/Library/Python/3.6/bin:$PATH" + +# pip bash completion start +_pip_completion() +{ + COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \ + COMP_CWORD=$COMP_CWORD \ + PIP_AUTO_COMPLETE=1 $1 ) ) +} +complete -o default -F _pip_completion pip +# pip bash completion end + +export PATH="$PATH:$HOME/.local/bin" + +alias mongostart="sudo mongod -f /opt/local/etc/mongodb/mongod.conf --httpinterface --rest" + +mongostop_func () { + local mongopid = `less /opt/local/var/db/mongodb/mongod.lock`; + if [[ $mongopid =~ [[:digit:]] ]]; then + sudo kill -15 $mongopid; + echo mongod process $mongopid terminated; + else + echo mongo process $mongopid not exists; + fi +} + +alias mongostop="mongostop_func" + +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 + +echo ".profile loaded" + + +``` +* Edit *.bash_profile* +```bash +[[ -s "$HOME/.profile" ]] && source "$HOME/.profile" # Load the default .profile +# export NVM_DIR="$HOME/.nvm" +# [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm + +# Export libsass library +export SASS_LIBSASS_PATH=/Users/themartins/Projects/Tools/libsass + +export PATH="$HOME/Library/Python/3.6/bin:$PATH" +eval $(/usr/libexec/path_helper -s) + +# export PATH="/Users/themartins/Documents/Projects/tutorial:$PATH" +export PATH=$PATH:"~/.bin" + +# export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home" +export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home" +export ANDROID_HOME="/Users/themartins/Library/Android/sdk" +export PATH=$ANDROID_HOME:$PATH + +###-tns-completion-start-### +if [ -f /Users/themartins/.tnsrc ]; then + source /Users/themartins/.tnsrc +fi +###-tns-completion-end-### + +export PATH=$PATH:/Users/themartins/bin + +source '/Users/themartins/lib/azure-cli/az.completion' + +# echo "end .bash_profile" + +#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! +export SDKMAN_DIR="/Users/themartins/.sdkman" +[[ -s "/Users/themartins/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/themartins/.sdkman/bin/sdkman-init.sh" + +export PATH="$PATH:$HOME/.rvm/bin" +[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function* +``` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/tools/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/general.md new file mode 100644 index 00000000..35542bda --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/general.md @@ -0,0 +1,79 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Developer Tools + +## Mac OS X + +- [Rectangle](https://rectangleapp.com/) - Window manager + +## General Tools + +- [MassCode](https://masscode.io) + Snippets manager. + - Commands to know + - Snipppet + - Adding a snippet: ++cmd+n++ + - Copying a snippet: ++shift+cmd+c++ + - Formatting as snippet: ++shift+cmd+f++ + - Fragment + - ++cmd+t++ + - Show Assistant + - ++option+s++ +- [FlyCut](https://github.com/TermiT/Flycut) + - HotKey: ++shift+command+v++ +- Potential tool to track outgoing connections: [Lulu](https://objective-see.com/products/lulu.html) + +## Editors + +- [StackBlitz](https://stackblitz.com/docs) - Online editor connected to GitHub. + +## Build Tools + +- [Bazel](https://bazel.build/) - build tool. Next iteration of building web projects. + +## Server Mock Tools + +- [MailCatcher](https://mailcatcher.me/) - Localhost email intercept +- [Ngrok](https://ngrok.com/) - Secure tunnel to localhost +- [Random User Generator](https://randomuser.me/) - API to generate random users. + +## Source code generators + +- [JHipster](http://www.jhipster.tech/) - Generate and deploy Spring Boot + Angular Apps. + +### Mock Service + +- [Mockbin](http://mockbin.com/) - test, mock and track http requests & responses + +## Testing Framework + +- [Galen Framework](http://galenframework.com/) - Look and feel testing for responsive sites. + +## Code Analyzers + +- [PMD](https://pmd.github.io/) - Source code analyser. Includes JS, Java, checks for duplicates in PHP +- [SourceTrail](https://www.sourcetrail.com/) - Sourcecode explorer for Java and C++ + +## Editors + +### Visual Studio Code + +- Adding multiple projects to workspace - [Multiple Root Workspaces](https://code.visualstudio.com/docs/editor/multi-root-workspaces) + +## Image Sprites + +- [PiskelApp](https://www.piskelapp.com/) + +## Screen recording + +- [OBS Studio](https://obsproject.com/) - open source screen recording + +## Other tools + +- Regex + - [Regulex](https://jex.im/regulex) - Regex validator + - [Regex101](https://regex101.com) - liked this one diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/tools/git.md b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/git.md new file mode 100644 index 00000000..85a09c2d --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/git.md @@ -0,0 +1,90 @@ +--- +title: git +updated: 2021-05-19 09:42:36Z +created: 2020-09-10 22:07:13Z +--- + +# Git notes +## Using git for version control. Lessons learned. + +## How To +* **Git tag** + 1. Adding a tag + * `git tag v1.0` + * `git push origin --tags` - push to github + 1. Deleting tags + * `git tag -d v1.0` + * `git push origin :refs/tags/v1.0` + 1. Get all tags including remote tags + * `git fetch --all --tags --prune` - get all remote tags and remove repos removed by remote. + 1. Remove from remotes locally ignored files and folders + * `git rm -r --cached some-directory` + * Need tags for composer +* **git worktree** [Git Worktree](https://git-scm.com/docs/git-worktree) + * Create temporary checkout for working on a branch without having to stash data +* Delete local and remote branches +```bash +git push -d +git branch -d +``` +* Update local list and prune branches + * `git fetch -p` -p is for prunining + +### Git Resources +* Styleguide for git messages - [Udacity Git Styleguide](https://udacity.github.io/git-styleguide/) +#### .gitignore +* Resources + * [.gitignore templates](https://github.com/github/gitignore) + * Collection of .gitignore templates + * [gitignore.io](https://www.gitignore.io/) +* Global .gitignore [Stackoverflow 7335420](http://stackoverflow.com/questions/7335420/global-git-ignore) + * `~/.config/git/ignore` - default location + * `git config --global core.excludesfile '~/.gitignore'` - set the location + +### Git error message. Can't merge unrelated histories. +* Allow unrelated histories [StackOverflow Issue](http://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories) + * `git pull remote branch --allow-unrelated-histories` + +### Git error trying to push when pull seems to work + +``` +hint: Updates were rejected because a pushed branch tip is behind its remote +hint: counterpart. Check out this branch and integrate the remote changes +hint: (e.g. 'git pull ...') before pushing again. +``` +* *Hint:* **Read hints** + * Checkout out rejected branch. ```git checkout master``` + * ```git pull {remote} master --allow-unrelated-histories``` + * Fix conflicts and commit + * ```git push {remote} master``` + +### Removing sensitive data from git after having committed [Removing Sensitive Data - Github]( https://help.github.com/articles/removing-sensitive-data-from-a-repository/) + +* ```git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch {path/filename}' --prune-empty --tag-name-filter cat -- --all``` +* ```git push github --force --all``` +* Remove the references + * ```git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin``` + * ```git reflog expire --expire=now --all``` + * ```git gc --prune=now``` + +* No guarantee that the data hasn't been downloaded or forked but at least it's removed going forward. + +### Git create empty branch +* [Create Orphan Branch](http://www.bitflop.dk/tutorials/how-to-create-a-new-and-empty-branch-in-git.html) +* Steps: + 1. `git checkout --orphan NEWBRANCH` + 1. `git rm -rf .` + 1. `git remote add {name} {git remote branch}` + 1. `git pull -u {name} {branch}` + 1. `git push -u {name} {branch}` +* Now one have a copy of another branch in working branch. + +### Github Markdown +* Languages for code blocks - [highlights.js](https://highlightjs.org/static/demo/) +* Emoji List - :bowtie [Emoji Cheat Sheet](http://www.webpagefx.com/tools/emoji-cheat-sheet/) +### Remote branches not showing on local. Only shows *master*. +* `git branch -a` show all branches +* `git checkout --track remote/branch` - pulls in the remote branch. + +### Unrelated histories +* `git pull --allow-unrelated-histories` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/tools/mkdocs.md b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/mkdocs.md new file mode 100644 index 00000000..0b59e705 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/mkdocs.md @@ -0,0 +1,11 @@ +--- +title: mkdocs +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# MkDocs notes +* Upgrade with pipenv shell `pipenv install --skip-lock` +* Upgrade pip `pipenv install --skip-lock pip` +* Serve pages: `mkdocs serve` +* Deploy to github pages: `mkdocs gh-deploy` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/tools/notes.md b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/notes.md new file mode 100644 index 00000000..212b08dc --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/notes.md @@ -0,0 +1,38 @@ +--- +title: notes +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Random notes + +- Install _xcode-select_ tools when updating xcode + +```bash +sudo rm -rf /Library/Developer/CommandLineTools +xcode-select --install +``` + +# Other notes + +## Downloading files with wget +* Use ```wget -c``` or ```wget --continue``` to restart a stopped or aborted download + +## Using Ivy with Ant +* Download [Apache Ivy](http://ant.apache.org/ivy/) + 1. Put files into ant/lib directory. + 1. Lib directory at `~/.ant/lib` - Using sdkman to manage Ant. + +## Image processing (tracing) +* [ImageTracerJs](https://github.com/jankovicsandras/imagetracerjs) +### Primitive +* [Primitive](https://github.com/fogleman/primitive) - convert image to svg. Installed at `~/go/bin/primitive` +* [Image Trace Loader](https://github.com/EmilTholin/image-trace-loader) - webpack image loader convert to image. + +## Image Processing Tools +* [DigiKam](https://www.digikam.org/) - Professional Photo Management with the Power of Open Source +* [Raw Therapee](http://rawtherapee.com/) - Open source image processing +* [DarkTable](http://www.darktable.org/) - Open source imaging + +## Other tools +* [Trunk Based Development](https://trunkbaseddevelopment.com/) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/tools/reporting.md b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/reporting.md new file mode 100644 index 00000000..772958d9 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/reporting.md @@ -0,0 +1,46 @@ +--- +title: reporting +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Reporting Server + +## [Birt](http://www.eclipse.org/birt/) +Currently using Birt for generating reports and invoices for the child center. +### Setup +1. Download Birt report designer +1. Create report using designer. + * Connect to database using jdbc connector +1. Built-in report generator - create PDF versions of report. + +## [Jasper](http://community.jaspersoft.com/) +* Seems to have more moving parts. +* Comes with a server component. + +## [Pentaho Reporting](https://community.hds.com/docs/DOC-1009856-pentaho-reporting) +* Has an open source server. + +## Currently using Birt to generate invoices. +* All data in postgres DB +* Connect to postgres DB via jdbc +* One view and sql queries to populate the reports +* Seems to work okay now. + +## Goals +1. Mobile view of reports. Web based mobile. +1. Generate reports on demand. Always most relevant data +1. Generate invoices that will be sent via email. +1. Enable reports for printing. Hardcopies are always nice. +1. Want to spend time desigining the report but only have to do it once. Easier with a graphic editor than trying to mangle XML, JSON, etc. +1. Want to chart. + +## Issue with Eclipse (starting up report server) +* [Eclipse Wiki](https://wiki.eclipse.org/Eclipse.ini) + * Fix issue to set explicit JVM for Eclipse. +## Generating PDFS +* [Dynamic Jasper](http://dynamicjasper.com/) - Make dynamic reports. +* [Dynamic Reports](http://dynamicreports.org/) - Dynamic reports based on Jasper +* [Jasper Reports Library](https://community.jaspersoft.com/project/jasperreports-library) +* [Apache PDFBox](https://pdfbox.apache.org/) - PDFBox - manipulate PDF docs. +* [iText](https://itextpdf.com) - Java PDF library - have book PDF diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/tools/vagrant.md b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/vagrant.md new file mode 100644 index 00000000..0c921b59 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/vagrant.md @@ -0,0 +1,146 @@ +--- +title: vagrant +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Setup Virtualbox with Apline Linux +## Resources +* [Alpine Linux](https://www.alpinelinux.org) +* Docker Alpine Config [fguillot/docker-alpine-nginx-php7](https://github.com/fguillot/docker-alpine-nginx-php7/blob/master/Dockerfile) +* [Vagrant Instructions](https://www.vagrantup.com/docs/boxes/base.html) +* [Packaging the Box](https://www.vagrantup.com/docs/virtualbox/boxes.html) +* [Setting up a ssh-server](https://wiki.alpinelinux.org/wiki/Setting_up_a_ssh-server) +* [AlpineLinux VM under VirtualBox](http://mowson.org/karl/2016/2016-05-20_alpinelinux_vm_under_virtualbox/) + +## Host Machine +* Install alpine plugin - `vagrant plugin install vagrant-alpine` + +## Instructions +### Download Alpine Linux distribution and install in VirtualBox +* [Alpine Linux Downloads](https://www.alpinelinux.org/downloads/) - Download Virtual Distribution for x86_64. +* [VirtualBox Install](https://wiki.alpinelinux.org/wiki/Install_Alpine_on_VirtualBox) + * 1GB Ram, 8GB HD +* Install Alpine Linux + * Mount *alpine-virt-3.6.1-x86_64.iso* to start installation + * Login with *root* + * `setup-alpine` to install + * `poweroff` to turn off the virtualbox + * Remove virtual iso +* Setup Alpine box + * Uncomment extra repositories + * `vi /etc/apk/repositories` + * `apk update` - get latest package list + * `apk upgrade` - Upgrade to latest versions + * `apk add bash` - Install base + * `apk add sudo` - Add sudo + * `adduser vagrant` - vagrant user + * ~~`vi /etc/sudoers`~~ + * Use **visudo** + * Add line: `vagrant ALL=(ALL) NOPASSWD: ALL` - add sudo without password +* Edit */etc/ssh/sshd_config + * set **UseDNS no** +* Setup Virtualbox + * [VirtualBox guest additions](https://wiki.alpinelinux.org/wiki/VirtualBox_guest_additions) + * `echo "http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories` + * `apk add virtualbox-additions-grsec` + * ~~`apk add virtualbox-guest-additions-5.1.22-r2`~~ + * ~~`echo vboxpci >> /etc/modules`~~ + * ~~`echo vboxdrv >> /etc/modules`~~ + * ~~`echo vboxnetflt >> /etc/modules`~~ + * `reboot` + +### Setup Vagrant +* Create Vagrant base + * `vagrant package --base {virtualbox}` + * `vagrant box add alpine-linux package.box` + * `vagrant init alpine-linux` + * Install vagrant plugin for alpine - `vagrant plugin install vagrant-alpine` + * Configure Vagrantfile [maier/packer-templates](https://github.com/maier/packer-templates/blob/master/alpine3.6/Vagrantfile) +```ruby + Vagrant.configure(2) do |config| + config.vm.define 'alpine' do |alpine| + alpine.vm.box = 'maier/alpine-3.6-x86_64' + # alpine.ssh.username = 'vagrant' + # alpine.ssh.password = 'vagrant' + + # NOTE: + # there are *no* guest additions installed + # for alpine linux - the guest additions + # installer fails. once workarounds are + # identified the vbga will be added + # to the base box. + # + # since there are no vbga. if the vagrant-alpine plugin + # is installed it can at least configure the system to + # enable shared folders. + # + alpine.vm.synced_folder '.', '/vagrant', disabled: true + # + # after `vagrant plugin install vagrant-alpine` + # comment the disabled synced_folder line above and + # uncomment the following two lines + # + # alpine.vm.network 'private_network', ip: '192.168.100.10' + # alpine.vm.synced_folder '.', '/vagrant', type: 'nfs' + + alpine.vm.provider 'virtualbox' do |vb| + # vb.gui = true + vb.name = 'Alpine' + vb.cpus = 1 + vb.memory = 1024 + vb.customize [ + 'modifyvm', :id, + '--natdnshostresolver1', 'on', + '--nic1', 'nat', + '--cableconnected1', 'on' + ] + end + end +end +``` +* My Config +```ruby +Vagrant.configure("2") do |config| + config.vm.box = "maier/alpine-3.6-x86_64" + config.vm.box_check_update = false + config.vbguest.auto_update = false + config.vm.synced_folder "./vmshared", "/vagrant_data", disabled: true + config.vm.network 'private_network', ip: "192.168.33.10" + config.vm.synced_folder ".", "/vagrant_shared", type: "nfs" + config.vm.provider "virtualbox" do |vb| + vb.name = "Maier Alpine" + vb.cpus = 1 + vb.memory = 1024 + vb.customize [ + 'modifyvm', :id, + '--natdnshostresolver1', 'on', + '--nic1', 'nat', + '--cableconnected1', 'on' + ] + end +end +``` + * Added *config.vbguest.auto_update = false* to eliminate it trying to update + * Added *config.vbguest.auto_update = false* to not check for updates + * Using nfs to share volumes +* `vagrant up` + +### Install packages +``` +apk update && \ +apk add nginx bash ca-certificates s6 curl ssmtp php7 php7-phar php7-curl \ +php7-fpm php7-json php7-zlib php7-xml php7-dom php7-ctype php7-opcache php7-zip php7-iconv \ +php7-pdo php7-pdo_mysql php7-pdo_sqlite php7-pdo_pgsql php7-mbstring php7-session \ +php7-gd php7-mcrypt php7-openssl php7-sockets php7-posix php7-ldap php7-simplexml +``` +## Other Notes +### Misc +* Search for packages - `apk search {name}` +### Shutdown +* `poweroff` +* `halt` +### Accessing services on the guest box +* Setup Port Forwarding + * ssh - local port 2222 - guest host port - 22 + * Use `ssh -p 2222 vagrant@127.0.0.1` - will give you access to the guest box diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/tools/vim.md b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/vim.md new file mode 100644 index 00000000..2877b483 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/tools/vim.md @@ -0,0 +1,15 @@ +--- +title: vim +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Vim and NeoVim + +## Resources + +- [Intellisense Enginve for Vim and NeoVim](https://github.com/neoclide/coc.nvim) + +* [Neo Vim Plugin for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=asvetliakov.vscode-neovim) +* [Vim plugin for vifm](https://github.com/vifm/vifm.vim) - Need VIFM too +* [Tabular Plugin](https://github.com/godlygeek/tabular) - Line up text diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/Node/Fastify, Fast and low overhead web framework, for .md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/Node/Fastify, Fast and low overhead web framework, for .md new file mode 100644 index 00000000..95cf9731 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/Node/Fastify, Fast and low overhead web framework, for .md @@ -0,0 +1,339 @@ +--- +title: Fastify, Fast and low overhead web framework, for Node.js +updated: 2021-04-06 10:00:04Z +created: 2021-04-06 10:00:04Z +source: https://www.fastify.io/ +--- + +[](https://www.fastify.io/) + +[Home](https://www.fastify.io/) [Docs](https://www.fastify.io/docs/latest) [Ecosystem](https://www.fastify.io/ecosystem) [Benchmarks](https://www.fastify.io/benchmarks) [Contribute](https://www.fastify.io/contribute) [Blog](https://medium.com/@fastifyjs/) [Help](https://github.com/fastify/help) + +[GitHub](https://github.com/fastify/fastify) [Twitter](https://twitter.com/fastifyjs) + +# + +## Fast and low overhead web framework, for Node.js + +# Why + +An efficient server implies a lower cost of the infrastructure, a better responsiveness under load and happy users. How can you efficiently handle the resources of your server, knowing that you are serving the highest number of requests possible, without sacrificing security validations and handy development? + +Enter Fastify. Fastify is a web framework highly focused on providing the best developer experience with the least overhead and a powerful plugin architecture. It is inspired by Hapi and Express and as far as we know, it is one of the fastest web frameworks in town. + +# Who is using Fastify? + +Fastify is proudly powering a large ecosystem of organisations and products out there. + +Discover [more organisations using Fastify](https://www.fastify.io/organisations). Do you want your organisation to [be featured here](https://www.fastify.io/organisations#how-to-be-featured)? + +- [![Mr Porter is using Fastify](../../../../_resources/mrp.366c52cf20c7664b_237a527f743a4bc7ab16e3d9e866f.svg)](https://www.mrporter.com) +- [](https://habit.global/) +- [](https://logdna.com) +- [](https://swissdevjobs.ch/) +- [](https://docs.microsoft.com) +- [](https://sobre.quero.com/) +- [![Seznam.cz is using Fastify](../../../../_resources/seznam.0e852b48d7670e1e.cz_084d41afe7c14f65852f4f9.svg)](https://www.seznam.cz/) +- [![Radity is using Fastify](../../../../_resources/radity.4eee1d7016ba6062_85e29bcf1be54a1a8fb003d98e.svg)](https://www.radity.com) +- [](https://www.globalctoforum.org) +- [](https://fabfitfun.com/) +- [![Satiurn is using Fastify](../../../../_resources/satiurn.1a5149cc66d4dc6d_9ddda710cd5146259d46c8517.svg)](https://www.satiurn.com/) +- [](https://www.nucleode.com) + +# Core features + +These are the main features and principles on which fastify has been built: + +- **Highly performant:** as far as we know, Fastify is one of the fastest web frameworks in town, depending on the code complexity we can serve up to 30 thousand requests per second. +- **Extendible:** Fastify is fully extensible via its hooks, plugins and decorators. +- **Schema based:** even if it is not mandatory we recommend to use [JSON Schema](https://json-schema.org/) to validate your routes and serialize your outputs, internally Fastify compiles the schema in a highly performant function. +- **Logging:** logs are extremely important but are costly; we chose the best logger to almost remove this cost, [Pino](https://github.com/pinojs/pino)! +- **Developer friendly:** the framework is built to be very expressive and to help developers in their daily use, without sacrificing performance and security. +- **TypeScript ready:** we work hard to maintain a [TypeScript](https://www.typescriptlang.org/) type declaration file so we can support the growing TypeScript community. + +# Quick start + +Get fastify with NPM: + +``` +npm install fastify +``` + +Then create `server.js` and add the following content: + +async/await + +``` +// Require the framework and instantiate it +const fastify = require('fastify')({ logger: true }) + +// Declare a route +fastify.get('/', async (request, reply) => { + return { hello: 'world' } +}) + +// Run the server! +const start = async () => { + try { + await fastify.listen(3000) + } catch (err) { + fastify.log.error(err) + process.exit(1) + } +} +start() +``` + +Finally, launch the server with: + +``` +node server +``` + +and you can test it with: + +``` +curl http://localhost:3000 +``` + +## Request/Response validation and hooks + +Of course, Fastify can do much more than this. + +For example, you can easily provide input and output validation using JSON Schema and perform specific operations before the handler is executed: + +async/await + +``` +const fastify = require('fastify')({ logger: true }) + +fastify.route({ + method: 'GET', + url: '/', + schema: { + // request needs to have a querystring with a `name` parameter + querystring: { + name: { type: 'string' } + }, + // the response needs to be an object with an `hello` property of type 'string' + response: { + 200: { + type: 'object', + properties: { + hello: { type: 'string' } + } + } + } + }, + // this function is executed for every request before the handler is executed + preHandler: async (request, reply) => { + // E.g. check authentication + }, + handler: async (request, reply) => { + return { hello: 'world' } + } +}) + +const start = async () => { + try { + await fastify.listen(3000) + } catch (err) { + fastify.log.error(err) + process.exit(1) + } +} +start() +``` + +## TypeScript Support + +Fastify is shipped with a typings file, but you may need to install `@types/node`, depending on the Node.js version you are using. + +The following example creates a http server. + +We pass the relevant typings for our http version used. + +By passing types we get correctly typed access to the underlying http objects in routes. + +If using http2 we'd pass ``. + +For https pass `http2.Http2SecureServer` or `http.SecureServer` instead of Server. + +This ensures within the server handler we also get `http.ServerResponse` with correct typings on `reply.res`. + +async/await + +``` +import Fastify, { FastifyInstance, RouteShorthandOptions } from 'fastify' +import { Server, IncomingMessage, ServerResponse } from 'http' + +const server: FastifyInstance = Fastify({}) + +const opts: RouteShorthandOptions = { + schema: { + response: { + 200: { + type: 'object', + properties: { + pong: { + type: 'string' + } + } + } + } + } +} + +server.get('/ping', opts, async (request, reply) => { + return { pong: 'it worked!' } +}) + +const start = async () => { + try { + await server.listen(3000) + + const address = server.server.address() + const port = typeof address === 'string' ? address : address?.port + + } catch (err) { + server.log.error(err) + process.exit(1) + } +} +start() +``` + +Visit the [Documentation](https://www.fastify.io/docs) to learn more about all the features that Fastify has to offer. + +# A fast web framework + +Leveraging our experience with Node.js performance, Fastify has been built from the ground up to be **as fast as possible**. Have a look at our [benchmarks section](https://www.fastify.io/benchmarks) to compare fastify performance to other common web frameworks. + +[Checkout our benchmarks](https://www.fastify.io/benchmarks) + +# Ecosystem + +Fastify has an ever-growing ecosystem of plugins. Probably there is already a plugin for your favourite database or template language. Have a look at the [Ecosystem page](https://www.fastify.io/ecosystem) to navigate through the currently available plugins. Can't you find the plugin you are looking for? No problem, [it's very easy to write one](https://www.fastify.io/docs/master/Plugins)! + +[Explore 179 plugins](https://www.fastify.io/ecosystem) + +# The team + +In alphabetical order + +## Lead Maintainers + + + +Matteo Collina + + + +Tomas Della Vedova + +## Collaborators + + + +Tommaso Allevi + + + +Ethan Arrowood + + + +Ayoub El Khattabi + + + +Cemre Mengu + + + +David Clements + + + +Dustin Deus + + + +Rafael Gonzaga + + + +Vincent Le Goff + + + +Luciano Mammino + + + +Salman Mitha + + + +Igor Savin + + + +Evan Shortiss + + + +Maksim Sinik + + + +Frazer Smith + + + +Manuel Spigolon + + + +James Sumners + + + +Nathan Woltman + +## Past Collaborators + + + +Trivikram Kamat + + + +Çağatay Çalı + +# Acknowledgments + +This project is kindly **sponsored by**: + +- [NearForm](http://nearform.com) +- [Microsoft](https://opensource.microsoft.com/) + +Past Sponsors: + +- [LetzDoIt](http://www.letzdoitapp.com) + +Also thanks to: + +- [The amazing Fastify community](https://github.com/fastify/fastify/graphs/contributors) + +# Hosted by + +We are currently an incubated project at the [OpenJS Foundation](https://openjsf.org/). + +[](https://openjsf.org/) + +*Found a typo or want to improve this page?* [Submit a PR on GitHub](https://github.com/fastify/website/blob/master/src/website/layouts/home.html) + +Fastify, Copyright © 2016-2021 [OpenJS Foundation](https://openjsf.org/) and [The Fastify team](https://github.com/fastify/fastify#team), Licensed under [MIT](https://github.com/fastify/fastify/blob/master/LICENSE) + +Icons by simpleicons.org \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/Index of WordPress Notes.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/Index of WordPress Notes.md new file mode 100644 index 00000000..4629d6a1 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/Index of WordPress Notes.md @@ -0,0 +1,17 @@ +--- +title: Index of WordPress Notes +updated: 2021-07-03 10:35:42Z +created: 2021-07-03 10:30:40Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +- [General](../../../../Handbook/Developer%20Notes/web_development/WordPress/general.md) + - [Composer](../../../../Handbook/Developer%20Notes/WordPress/composer.md) + - [Deployment](../../../../Handbook/Developer%20Notes/web_development/WordPress/deployment.md) + - [Docker](../../../../Handbook/Developer%20Notes/WordPress/docker.md) + - Setting up Docker with official docker image +- [API](../../../../Handbook/Developer%20Notes/WordPress/api.md) +- [Plugin_development](../../../../Handbook/Developer%20Notes/web_development/WordPress/plugin_development.md) +- [Themes](../../../../Handbook/Developer%20Notes/web_development/WordPress/themes.md) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/deployment.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/deployment.md new file mode 100644 index 00000000..399bc221 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/deployment.md @@ -0,0 +1,41 @@ +--- +title: deployment +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Wordpress deployment notes +## Deploying the site +### Backend Code - Wordpress Code +1. Create tag of current site in master + * `git checkout master` + * `git tag -a v1.0 -m "Initial version of site launched"` + * `git push origin --tags` +1. Merge code to master. + * `git checkout master` + * `git merge dev` + * `git push origin` +1. Deploy backend code to server + * `ssh -i keyfile.pem {user}@{server}` + * Update server: + * `sudo apt-get update` + * `sudo apt-get upgrade -y` + * Access the correct folder + * `/path/to/wordpress/folder` + * `git pull origin master` + * Run composer update without dev. + * `composer update --no-dev -vvv` - no dev packages and verbose. +1. Login and activate plugins. +1. Test API access. + +### Issues with deployment +* Error *PHP Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar* + * [proc-open-fork-failed-errors for details](https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details) +```bash +/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 +/sbin/mkswap /var/swap.1 +/sbin/swapon /var/swap.1 +``` +* Add Permanent swap [Add swap to Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04) +## Adding API Theme +* Adding a public theme to show when hitting the front page of our api. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/general.md new file mode 100644 index 00000000..25164f06 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/WordPress/general.md @@ -0,0 +1,378 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Wordpress Notes +## WP Cli +* Updating cli on local machine - `~/.bin/wp cli update` +## Errors +* *WordPress database error for query SHOW FULL COLUMNS FROM* + * *Found it... Security patch in 4.1.2 added a new function, 'wpdb->process_field_lengths()', that causes an insert or update query not to be run if the data is longer than the permissible size based on the database schema.* + * [Error fix](https://github.com/andyplak/events-manager-pro-sage-pay/issues/19) + +## API Notes +* Configure headers for API Rest Calls +* [Access Control Headers for Wordpress Rest API](https://joshpress.net/access-control-headers-for-the-wordpress-rest-api/) + * Added below code to plugin startup file. Let's one change headers and permissions. +```php +/** + * Use * for origin + */ + add_action( 'rest_api_init', function() { + + remove_filter( 'rest_pre_serve_request', 'rest_send_cors_headers' ); + add_filter( 'rest_pre_serve_request', function( $value ) { + header( 'Access-Control-Allow-Origin: *' ); + header( 'Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE' ); + header( 'Access-Control-Allow-Credentials: true' ); + header( 'Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages, PAS-Fingerprint, PAS-Check, PAS-Nonce, PAS-Captcha'); + header('Access-Control-Allow-Headers: Authorization, Content-Type, PAS-Nonce, PAS-Fingerprint, PAS-Check'); + return $value; + }); + }, 15 ); +``` +## Wordpress Resources +* [WP Hasty](https://www.wp-hasty.com/) +* Using jquery-ui with wordpress. + * [How to use jquery-ui in Wordpress](http://jafty.com/blog/tag/how-to-use-jquery-ui-in-wordpress/) + + +## Setting up S3 Plugin +* [S3 Uploads Plugin](https://github.com/humanmade/S3-Uploads) - made by [Human Made](https://hmn.md/). +* Using Composer with S3. +```json +"require": { + "humanmade/s3-uploads":"dev-master" +} +"repositories": [ + { + "type": "vcs", + "url": "https://github.com/humanmade/S3-Uploads.git" + } +] +``` +* Setup S3 Bucket + * bucket name +* Edit wp-config.php +```php +define( 'S3_UPLOADS_BUCKET', 'my-bucket' ); +define( 'S3_UPLOADS_KEY', '' ); +define( 'S3_UPLOADS_SECRET', '' ); +define( 'S3_UPLOADS_REGION', '' ); +``` + +* need wp-cli installed +* Be sure to be in public folder +* verify - `wp s3-uploads verify` +* enable - `wp s3-uploads enable` + +# Setting up Wordpress with Composer, Nginx, PHP-fpm +## Install packages +* Base packages + * mysql + * php7 + * nginx + +### Setup composer and *composer.json* config file +* Install *composer* in `/usr/local/bin/` +* Install +* Create **composer.json** file - `composer init` +* Configure with additional settings for wordpress + * Add [wpackagist](https://wpackagist.org) repository to repositories + * In *extra*, + * add *wordpress-install-dir* as *public* + * add "installer-paths" for plugins and themes - see below + * Add custom repositories from version control for custom developed plugins and themes + * See example file *"https://github.com/catenare/aad-sso-wordpress"* - fork of plugin I'm using and wanted to be able to install/manage via composer. +```json +{ + "name": "catenare/wordpress-intranet", + "description": "Intranet based on WordPress", + "keywords": [ + "intranet", + "secure" + ], + "type": "package", + "homepage": "http://www.johan-martin.com", + "authors": [ + { + "name": "WordPress Community", + "homepage": "http://wordpress.org/about/" + }, + { + "name": "Johan Martin", + "homepage": "http://www.johan-martin.com" + } + ], + "support": { + "email": "martin.johan@johan-martin.com" + }, + "extra": { + "wordpress-install-dir": "public", + "installer-paths": { + "public/wp-content/plugins/{$name}": [ + "type:wordpress-plugin" + ], + "public/wp-content/themes/{$name}": [ + "type:wordpress-theme" + ] + } + }, + "require": { + "php": "~7", + "johnpbloch/wordpress-core-installer": "~0.2", + "johnpbloch/wordpress-core": "~4.7", + "wpackagist-plugin/unyson": "~2.6", + "wpackagist-plugin/zendesk":"~1.7", + "wpackagist-plugin/login-lockdown":"~1.7", + "wpackagist-plugin/all-in-one-intranet": "~1.2", + "wpackagist-plugin/ninja-forms":"~3.1", + "wpackagist-plugin/memphis-documents-library":"~3.6", + "zurb/foundation": "^6.3", + "catenare/aad-sso-wordpress": "dev-alicart" + }, + "require-dev": { + "wpackagist-plugin/theme-check": ">=20160523", + "wpackagist-plugin/wordpress-reset": "~1.4", + "wpackagist-plugin/log-deprecated-notices": "~0.4", + "wpackagist-plugin/debug-bar":"~0.9", + "wpackagist-plugin/wordpress-importer": "~0.6.3" + }, + "repositories": [ + { + "type": "composer", + "url": "https://wpackagist.org" + }, + { + "type": "vcs", + "url": "https://github.com/catenare/aad-sso-wordpress" + } + ] +} +``` +* Run `composer install` if no composer.lock file present else, `composer update`. + +### Create and setup *wp-config.php* file for wordpress +* File located outside of *public* directory +* Copy settings when first installing site. +```php +addFilter( new Twig_SimpleFilter('myfoo', array($this, 'myfoo')));` + * Will get you to an unstyled Wordpress page. + +## Configuring foundation framework +* Checkout/download foundation-zurb-template +* Copy src/scss folder. + * app.scss + * _settings.scss +* Configuration + * Add *_custom.scss* for our custom configs + * Add *component* folder in sass folder for custom components + * Add *font-awesome* icons as a dependency - `npm install font-awesome` + * edit *app.scss* - explicit import statements +```sass +@import 'settings'; +@import 'custom'; +@import '~font-awesome/scss/font-awesome'; +@import '~foundation-sites/scss/foundation'; +``` +* Remove motion-ui imports and settings. +* Edit *_settings.scss* + * change `@import 'util/util'` to `@import '~foundation-sites/scss/util/util';` + * Add section 57 for *font-awesome* + * `$fa-font-path: "~font-awesome/fonts";` - font-awesome path \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/migrations/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/migrations/general.md new file mode 100644 index 00000000..d89950ba --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/migrations/general.md @@ -0,0 +1,100 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Database migrations with Flyway +## Using Flyway for Migrations +* [Flyway](https://flywaydb.org/) +* Recommendations: + * Use timestamp to tag migration. Makes it easier to manage especially if you're going to be in a multi-developer environment + * [Lessons Learned Using Flyway DB with Distributed Version Control](http://www.jeremyjarrell.com/using-flyway-db-with-distributed-version-control/) + * Get date on mac os x command line ```date +%s ``` + * Use git to track migrations - flyway notices if a migration file changes and causes issues + +## Setting up flyway +* Sqlite jdbc driver - [xerial/sqlite-jdbc](https://bitbucket.org/xerial/sqlite-jdbc/downloads) - for prototyping +* Postgresql JDBC Driver - [Postgresql](https://jdbc.postgresql.org) +* Flyway ant library - [Flyway Ant](https://repo1.maven.org/maven2/org/flywaydb/flyway-ant/4.0.3/flyway-ant-4.0.3.tar.gz) +* Directory Structure + * db + * conf/ + * flyway.conf + * libs/ + * flyway/ # Flyway ant + * postgresql-9.4.1212.jar + * ant-contrib-1.0b3.jar + * migrations + * build.xml +* Using the serial date for tracking migrations - ```date +%s``` + +## Using ant to run migrations +* Using SDKMAN to manage ant - [sdkman](http://sdkman.io) | [Ant](http://ant.apache.org/manual/index.html) +* Added Ant contrib jar +* Libs used + * ant-contrib-1.0b3.jar -- ant contrib jar - (Ant contrib task)[http://central.maven.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar] + * postgresql-9.4.1212.jar -- [Postgresql](https://jdbc.postgresql.org) + * flyway - has the flyway core and ant libraries -- [Flyway Ant](https://repo1.maven.org/maven2/org/flywaydb/flyway-ant/4.0.3/flyway-ant-4.0.3.tar.gz) + * build.xml in db library + +## Deleting a migration. +### Can't delete a migration, only repair it. +1. Comment out the commands in the migration mistake you are eliminating. +1. Run ```ant repair``` to fix the checksums for the migrations +1. Validate the current tatus ```ant validate``` +1. Flyway should be back to the status it is suppose to be in. + +## Using with Gradle +* If using SDK - Need to use Oracle java. java 9.0.4-oracle for using with Gradle. +* Can use maven dependencies +``` +buildscript { + dependencies { + classpath 'org.postgresql:postgresql:42.2.1' + } +} + +plugins { + id "org.flywaydb.flyway" version "5.0.7" +} +``` +* Created gradle.properties file with flyway configuration. +``` +flyway.url = jdbc:postgresql://localhost:5432/paseo_dev +flyway.user = name +flyway.password = password +flyway.locations = filesystem:'migrations' +``` + +* Custom task to add date-timestamp to file before running migration. In build.gradle. +``` +// https://stackoverflow.com/questions/43813724/gradle-script-to-append-timestamp-to-files +task renameFile { + println(" :migrate : renameForMigration") + def files = fileTree(dir: "${rootDir}/migrations") + files.include '**/*.sql' + files.exclude '**/V*.sql' + // , include: '**/*.sql', exclude: '^V\\d+.*\\.sql') + doLast { + files.each{ file -> + def newFileName = "V${getDate()}__${file.getName()}" + ant.move(file: file, toFile:"${file.parent}/${newFileName}") + println(newFileName) + } + } +} + +task migrateDatabase(type: org.flywaydb.gradle.task.FlywayMigrateTask) { + dependsOn 'renameFile' +} +``` + +## Notes +* Use timestamp to tag migration. Makes it easier to manage especially if you're going to be in a multi-developer environment + * [Lessons Learned Using Flyway DB with Distributed Version Control](http://www.jeremyjarrell.com/using-flyway-db-with-distributed-version-control/) + * Get date on mac os x command line ```date +%s ``` +* Use git to track migrations - flyway notices if a migration file changes and causes issues +* Moving away from Ant - seems support is not as strong anymore. +### Tasks +* Delete public.schema_version and ran `gradle flywayBaseline` to start migrations from scratch. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/mongo.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/mongo.md new file mode 100644 index 00000000..a9dd20b1 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/mongo.md @@ -0,0 +1,46 @@ +--- +title: mongo +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Mongo DB with MacPorts +## Resources +* [Mongo Site](https://docs.mongodb.com/) +## Setup +* `sudo port install mongodb mongo-tools` +* Setup configuration + * */opt/local/etc/mongodb.conf* +```ini +dbpath = /opt/local/var/db/mongodb + +bind_ip = 127.0.0.1 + +# Running as daemon +fork = true + +logpath = /opt/local/var/log/mongodb/mongodb.log +logappend = true +``` +* Configure ~/.profile +```bash +alias mongostart="sudo mongod -f /opt/local/etc/mongodb/mongod.conf --httpinterface" + +mongostop_func () { + local mongopid=`less /opt/local/var/db/mongodb/mongod.lock`; + if [[ $mongopid =~ [[:digit:]] ]]; then + sudo kill -15 $mongopid; + echo mongod process $mongopid terminated; + else + echo mongo process $mongopid not exists; + fi +} + +alias mongostop="mongostop_func" +``` +* Start the server + * `mongostart` - will need sudo password + * Be sure that there are no spaces between mongopid=`less`; +* Gui Clients + * [NoSql Booster](https://nosqlbooster.com/) + * [Robo 3T](https://robomongo.org/) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/mysql.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/mysql.md new file mode 100644 index 00000000..033bb61e --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/mysql.md @@ -0,0 +1,18 @@ +--- +title: mysql +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Mysql Notes +* Retrieving data as json + * [JSON Datatype](https://dev.mysql.com/doc/refman/5.7/en/json.html) +```sql + select contact_info, + JSON_EXTRACT(contact_info,'$') as 'extracted', + JSON_EXTRACT(contact_info, '$.email') as email, + JSON_EXTRACT(contact_info, '$.message') as message, + JSON_EXTRACT(contact_info, '$.fullname') as name, + JSON_EXTRACT(contact_info, '$.telephone') as telephone +from wp_contact_us; +``` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/postgresql.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/postgresql.md new file mode 100644 index 00000000..2c899440 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/database/postgresql.md @@ -0,0 +1,198 @@ +--- +title: postgresql +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +#Installing Postgresql with macports + +~~/opt/local/lib/postgresql96/bin/pg_ctl -D /opt/local/var/db/postgresql96/defaultdb -l logfile start~~ + +## postgresql96 has the following notes: +- Switch postgresql96 to postgresql10 +- To use the postgresql server, install the postgresql96-server port + - postgresql96-server has the following notes: + - To create a database instance, after install do + - sudo mkdir -p /opt/local/var/db/postgresql96/defaultdb + - sudo chown postgres:postgres /opt/local/var/db/postgresql96/defaultdb + - sudo su postgres -c '/opt/local/lib/postgresql96/bin/initdb -D /opt/local/var/db/postgresql96/defaultdb' + +- Select the correct postgresql server + - `sudo port select --set postgresql postgresql10` +- sudo port load postgresql10-server +- sudo su - postgres +- /opt/local/lib/postgresql96/bin/psql -U postgres -d template1 + +## Allowing remote setup on Mac OS X installed via MacPorts +- Config files are in */opt/local/var/db/postgresql96/defaultdb* +- ```sudo su postgres``` to edit the files +- Edit pg_hba.conf - ```host all all 192.168.1.0/24 trust``` to allow local network access +- Edit postgresq.conf - Under listen and settings - ```listen_address = "*"``` will allow network access. +- sudo port unload postgresql96-server +- sudo port load postgresql96-server +- configure Mac OS X firewall to allow remote access +### Open a port on Mac OS X +- [Open a port on mac os x](https://gauravsohoni.wordpress.com/2015/04/14/mac-osx-open-port/) +- Edit /etc/pf.conf +- Add line ```pass in proto tcp from any to any port 5432``` +- Restart firewall ```sudo pfctl -f /etc/pf.conf``` +### Access database consistently +- Create entry in ```/etc/hosts``` +- Remote entry ```192.168.1.103 paseodb``` +- Local entry ```127.0.0.1 db``` +- Will allow access without having to manually change settings everytime. + + + +## Postgresql Server on Ubuntu +* pg_hba.conf - allow remote connection and encrypted password + * host all all 0.0.0.0/0 md5 +* psql + * alter user {user} encrypted password '{password}'; +* `listen_addresses = '*'` + +* Connecting to ssh `ssh -i key.pem -L 3333:127.0.0.1:5433 ubuntu@api.paseo.org.za` +* Connecting to server `psql -h localhost -p 3333 -U paseo -W` + +### Configuring Postgresql with UUID and Postgis support. +* lookfindme setup +* Tools + * Using [Flyway](https://flywaydb.org) and [Gradle](https://gradle.org/) for migrations. + * Location - *lookfindmeAPI/tools/database* +* Create User and Database + * Create User + * `createuser lookfindme --username=lookfindme --login --no-superuser --inherit --no-replication --createdb -P` + * Create Database with created user. + * `createdb --owner=lookfindme -U lookfindme lookfindme 'lookfindme database'` + * Add uuid extension + * **Have to be superuser to install uuid extension.** + * `* psql -d lookfindme -U lookfindme -c 'create extension "uuid-ossp" schema public;'` + * Add postgis extension + * `* psql -d lookfindme -U lookfindme -c 'create extension "postgis" schema public;'` + * `* psql -d lookfindme -U lookfindme -c 'create extension "fuzzystrmatch" schema public;'` + * `* psql -d lookfindme -U lookfindme -c 'create schema if not exists tiger;'` + * `* psql -d lookfindme -U lookfindme -c 'create extension "postgis_tiger_geocoder" schema tiger;'` + * `* psql -d lookfindme -U lookfindme -c 'create extension "postgis_tiger_geocoder";'` - Note: no schema. + * `* psql -d lookfindme -U lookfindme -c 'create extension "address_standardizer";'` - Note: no schema. +* Setup Database with Docker and composer. + * See *docker-compose.yml* for name and ports. + * `createuser lookfindme -h localhost -p 15432 --username=lookfindme --login--no-superuser --inherit --no-replication --createdb -P` + * `createdb -h localhost -p 15432 --owner=lookfindme -U lookfindme lookfindme 'lookfindme database'` + * Add extensions + * `* psql -h localhost -p 15432 -d lookfindme -U lookfindme -c 'create extension "uuid-ossp" schema public;'` + * `* psql -h localhost -p 15432 -d lookfindme -U lookfindme -c 'create extension "postgis" schema public;'` + * `* psql -h localhost -p 15432 -d lookfindme -U lookfindme -c 'create extension "fuzzystrmatch" schema public;'` + * `* psql -h localhost -p 15432 -d lookfindme -U lookfindme -c 'create schema if not exists tiger;'` + * `* psql -h localhost -p 15432 -d lookfindme -U lookfindme -c 'create extension "postgis_tiger_geocoder" schema tiger;'` + * `* psql -h localhost -p 15432 -d lookfindme -U lookfindme -c 'create extension "postgis_tiger_geocoder";'` - Note: no schema. + * `* psql -h localhost -p 15432 -d lookfindme -U lookfindme -c 'create extension "address_standardizer";'` - Note: no schema. +* Run Migrate + * `gradle flywayBaseline` + * `gradle migrate` + +### Flyway Migrations Setup +* Create tables using *FlywayDB + * Migrations in folder *lookfindmeAPI/tools/database* + * Setup FlyWay with Gradle. +```groovy +/* + * File created to rename migration files for flyway + */ +buildscript { + dependencies { + classpath 'org.lookfindmeql:lookfindmeql:42.2.1' + } +} + +plugins { + id "org.flywaydb.flyway" version "5.0.7" +} + +// flyway { +// locations = ['filesystem:migrations'] +// } + +def getDate() { + new Date().format('yyyyMMddHHmmssSSS') +} + +// https://stackoverflow.com/questions/43813724/gradle-script-to-append-timestamp-to-files +task renameFile { + println(" :migrate : renameForMigration") + def files = fileTree(dir: "${rootDir}/migrations") + files.include '**/*.sql' + files.exclude '**/V*.sql' + files.exclude '**/U*.sql' + // , include: '**/*.sql', exclude: '^V\\d+.*\\.sql') + doLast { + files.each{ file -> + def newFileName = "V${getDate()}__${file.getName()}" + ant.move(file: file, toFile:"${file.parent}/${newFileName}") + println(newFileName) + } + } +} + +task migrate(type: org.flywaydb.gradle.task.FlywayMigrateTask) { + dependsOn 'renameFile' +} +``` +* Setup properties + * **gradle.properties** + * *flyway.locations = filesystem:/* - Explicit/full directory needed. + * *flyway.url=jdbc:lookfindmeql://localhost:5432/lookfindme* + * *flyway.user=* + * *flyway.password=* + +* Notes + * *Need to add public."user" to create constraint which contains user* + +### Alternate Create user and database +```sql +CREATE USER lookfindme WITH + LOGIN + NOSUPERUSER + CREATEDB + NOCREATEROLE + INHERIT + NOREPLICATION + CONNECTION LIMIT -1 + PASSWORD 'xxxxxx'; +COMMENT ON ROLE lookfindme IS 'User for lookfindme'; +``` +* Create database +```sql +-- Database: lookfindme + +-- DROP DATABASE lookfindme; + +CREATE DATABASE lookfindme + WITH + OWNER = lookfindme + ENCODING = 'UTF8' + LC_COLLATE = 'C' + LC_CTYPE = 'UTF-8' + TABLESPACE = pg_default + CONNECTION LIMIT = -1; +``` +* Install uuid extension - need superuser access +```sql +CREATE EXTENSION "uuid-ossp" + SCHEMA public + VERSION "1.1"; +``` + +## Postgis - geo location processing using PostGis +* [Site](http://postgis.net/) + +# Setup RDS on AWS + +## lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com + +* psql -h lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com -d lookfindme -U lookfindme -c 'create extension "uuid-ossp" schema public;' +* psql -h lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com -d lookfindme -U lookfindme -c 'create extension "postgis" schema public;' +* psql -h lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com -d lookfindme -U lookfindme -c 'create extension "fuzzystrmatch" schema public;' +* psql -h lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com -d lookfindme -U lookfindme -c 'create schema if not exists tiger;' +* psql -h lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com -d lookfindme -U lookfindme -c 'create extension "postgis_tiger_geocoder" schema tiger;' +* psql -h lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com -d lookfindme -U lookfindme -c 'create extension "postgis_tiger_geocoder";' +* psql -h lookfindmemain.cfvviq3vzuku.us-east-1.rds.amazonaws.com -d lookfindme -U lookfindme -c 'create extension "address_standardizer";' diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/docker.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/docker.md new file mode 100644 index 00000000..e49a5fcc --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/docker.md @@ -0,0 +1,261 @@ +--- +title: docker +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Notes for docker +* Not using everyday so need instructions on how I use it +* [Removing Docker containers and images](https://zaiste.net/posts/removing_docker_containers/) +* Reset containers when using docker-compose. `docker-compose up --force-recreate` +* Reset everything - `docker-compose down --remove-orphans -v --rmi all` +* **ElasticSearch** + * ElasticSearch Docker Images - `https://www.docker.elastic.co` + * Use oss images - [Pulling images](https://www.elastic.co/guide/en/kibana/current/_pulling_the_image.html) + * [Kibana Docker](https://www.elastic.co/guide/en/kibana/current/_configuring_kibana_on_docker.html) - Configure Kibana for docker. + * [Docker Kibana](https://docs.docker.com/samples/library/kibana/#-via-docker-stack-deploy-or-docker-compose) + +## Starting and using +* Now using Docker for Mac +1. ~~`docker-machine start default`~~ +1. ~~Set the environment~~ + * ~~Configure Shell (Docker Toolbox on Mac)~~ + * ~~`eval "$(docker-machine env default)"`~~ +1. ~~`docker-machine config` - verify can connect and pull info from the machine~~ + +## Use a base alpine image for docker +* [Official Alpine Docker Image](https://hub.docker.com/_/alpine/) +* [Docker Networking](https://docs.docker.com/compose/networking/) +* [Docker Store](https://store.docker.com/images/alpine) + * `docker pull alpine` + * `apk --no-cache add {package}` + * Dockerfile Example - avoids using *--update* and *rm -rf /var/cache/apk/\** +```yaml + FROM alpine:latest + RUN apk add --no-cache nginx + EXPOSE 80 + CMD ["nginx", "-g", "daemon off;"] +``` +## Nginx docker config +* `sudo docker cp docker-nginx:/etc/nginx/conf.d/default.conf default.conf` - *Copy config file from docker container* + +## Setup nginx-unit with docker +* [yousan/nginx-unit](https://github.com/yousan/nginx-unit/blob/master/docker-compose.yml) - instructions on getting access to the socket. +* [Nginx Unit Integration](https://unit.nginx.org/integration/) +* []() +* **docker-compose.yml** +```yaml +version: '3' +services: + web: + image: "nginx:1.13-alpine" + container_name: lookfindme-web + ports: + - "7000:80" + volumes: + - ./containers/nginx/html:/usr/share/nginx/html:ro + - ./containers/nginx/conf/nginx.conf:/etc/nginx/nginx.conf + - ./containers/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf + nginx-unit: + image: "nginx/unit:1.1-full" + container_name: lookfindme-nginx-unit + ports: + - 8081:8081 + - 8200:8200 + - 8300:8300 + volumes: + - ./containers/nginx/json:/root/json + - ./containers/nginx/www/root:/www/root + database: + image: "mdillon/postgis:10-alpine" + container_name: lookfindme-database + ports: + - "15432:5432" + volumes: + - ./containers/dbData:/var/lib/postgresql/data + search: + image: "docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.3" + container_name: lookfindme-search + ports: + - "9200:9200" + - "9300:9300" + queue: + image: "rabbitmq:3-management-alpine" + container_name: lookfindme-queue + ports: + - "15672:15672" + volumes: + - ./containers/queue:/var/lib/rabbitmq +``` +* container folder. - *containers/nginx/conf/* + * *default.conf* + +```conf +server { + listen 80; + server_name localhost; + + #charset koi8-r; + #access_log /var/log/nginx/host.access.log main; + + location /static { + root /usr/share/nginx; + } + + location / { + proxy_pass http://unit_backend; + proxy_set_header Host $host; + } + + location /home { + # uswgi_pass lookfindme; + # include uwsgi_params; + root /usr/share/nginx/html; + index index.html index.htm; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} +``` +* nginx.conf +```conf +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} + + + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + + upstream unit_backend { + server nginx-unit:8300; + } + + include /etc/nginx/conf.d/*.conf; +} +``` + +* nginx-unit json file +```json +{ + "listeners": { + "*:8300": { + "application": "blogs" + } + }, + + "applications": { + "blogs": { + "type": "php", + "processes": 20, + "root": "/www/root", + "index": "index.php" + } + } +} +``` +* `docker-compose exec nginx-unit curl -X PUT -d @/root/json/local.json --unix-socket /var/run/control.unit.sock http://localhost/ && docket-compose exec nginx-unit /bin/bash` + + +## Setup nginx-unit with docker +* Using *Docker for Mac* + * [Docker Nginx Unit](https://hub.docker.com/r/nginx/unit/) +* Using *docker-compose.yml* +```yml + nginx-unit: + image: "nginx/unit:1.1-full" + container_name: nginx-unit + ports: + - 8081:8081 + - 8200:8200 + - 8300:8300 + volumes: + - ../containers/nginx/json:/root/json + - ../containers/nginx/www/root:/www/root +``` +* Create *index.php* in ./containers/nginx/html +* *json.local* in ./containers/nginx/json +```json +{ + "listeners": { + "*:8300": { + "application": "blogs" + } + }, + + "applications": { + "blogs": { + "type": "php", + "processes": 20, + "root": "/www/root", + "index": "index.php" + } + } +} +``` + +## Creating the setup +* Create configuration in *docker-compose.yml* file +* Copy *json.local* to *containers/nginx/json* +* Copy *index.php* to *containers/nginx/www/root* +* `docker-compose up -d` - start the containers +* `docker-compose exec nginx-unit curl -X PUT -d @/root/json/local.json --unix-socket /var/run/control.unit.sock http://localhost/` - set the configuration for nginx unit +* Access the file at *http://localhost:8300* + +## Errors +* **ERROR: network lookfindmeapi_default id ae6c919c63c2f8a9ed5a5aea2ba716f4b19efe4fd7599fc0262a991d6e34b494 has active endpoints** + * `docker-compose ps` + * `docker stop {container}` + * `docker container prune` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/cors.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/cors.md new file mode 100644 index 00000000..91d26853 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/cors.md @@ -0,0 +1,76 @@ +--- +title: cors +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Fixing *Access-Control-Allow-Origin* issue with Flask + +* [Developer Notebook Link](https://www.catenare.com/devnotes/api/CORS%20with%20FLASK%20without%20Flask-CORS/) + +* What is CORS? +[Understanding CORS](https://spring.io/understanding/CORS) - Pivotal Spring Article. + +Accessing the Flask based API with *Postman* works, using *Curl* works, but it fails when connecting with your web application. (It worked just fine locally using the webpack proxy.) Checking the console shows an *Access-Control-Allow-Origin* error. Welcome to CORS or how to convince the browser to trust your API server. + +One option with Flask is to use [Flask-CORS](https://flask-cors.readthedocs.io/en/latest/). It works fine until you decide to setup authorisation with your Amazon API Gateway. Now the browser complains that *Access-Control-Allow-Origin* cannot be set to "\*". Since this API will be accessed by multiple web applications with different domain names, having one location configured does not work. Fastest solution for me was to configure the response headers directly with Flask. Just use the **@app.after_request** decorator and the global *request* object. + +**@app.after_request** runs after every request, even if you're using Blueprints. Because **request** is a global object, the request headers are available in the decorator function. This includes the *Origin* header which points to the web application server. + +Create a function with the **@app.after_request** decorator. In the function, include a list of allowed domains to verify the web servers allowed to access the API. If allowed, that server is set as the Origin in the *Access-Control-Allow-Origin* header. The response headers now has a specific Origin returned. + +Unfortunately, using Amazon's API Gateway to authorize client access removes the *Origin* header. To fix, include a check for the *Host* header if the *Origin* header is not available. Code is below. + +[Original Code Source](http://corpus.hubwiz.com/2/angularjs/23741362.html) + +```python +from flask import Flask, request +from app.config.settings import config + +ALLOWED_URLS = config('ALLOWED_URLS').split("|") + +def create_app(): + app = Flask(__name__) + + import app.routes.test as test_route + import app.routes.admin as admin_route + import app.routes.site as site_route + import app.routes.user as user_route + import app.routes.public as public_route + app.register_blueprint(test_route.bp) + app.register_blueprint(admin_route.bp) + app.register_blueprint(site_route.bp) + app.register_blueprint(user_route.bp) + app.register_blueprint(public_route.bp) + + # After Request function + @app.after_request + def after_request(response): + try: + origin = request.headers['Origin'] + except KeyError as err: + app.logger.debug(err) + origin = request.headers['Host'] + + + result = list( + filter( + lambda x: x in origin, + ALLOWED_URLS + ) + ) + + if len(result) > 0: + response.headers.add('Access-Control-Allow-Origin', origin) + else: + response.headers.add('Access-Control-Allow-Origin', '*') + + response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization,X-Requested-With') + response.headers.add('Access-Control-Allow-Credentials', 'true') + response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE') + return response + + return app +``` + + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/foundation.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/foundation.md new file mode 100644 index 00000000..43916256 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/foundation.md @@ -0,0 +1,371 @@ +--- +title: foundation +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Foundation for Sites Notes + +* Using [foundation from zurb](http://foundation.zurb.com/) + 1. Install foundation-cli - `npm install --global foundation-cli` + 1. Create new project - `foundation new --framework sites --template zurb` + * Use `foundation-zurb-template` + 1. ~~Install building block - `foundation kits install news`~~ + 1. `foundation watch` + +## Panini +* [Zurb University Documentation](https://zurb.com/university/lessons/the-main-ingredients-of-panini-layouts-pages-and-partials) + +## Other Packages +* fontawesome +* eslint + +## Setup eslint +1. `npm install eslint` +1. `node_modules/.bin/eslint --init` + * Select *standard* + +## Adding font-awesome to your foundation site +[HowTo: Foundation 6 Font Awesome and other asset fonts](http://foundation.zurb.com/forum/posts/46991-howto-foundation-6-font-awesome-and-other-asset-fonts) +* `npm install font-awesome` +* Modify *config.yml* +```yaml +# Gulp will reference these paths when it copies files +PATHS: + # Path to dist folder + dist: "dist" + fonts: + - "node_modules/@fortawesome/fontawesome-free/webfonts" + sass: + - "node_modules/foundation-sites/scss" + - "node_modules/motion-ui/src" +``` +* Modify *gulpfile.js* +```javascript +'use strict' + +const gulp = require('gulp'); +const panini = require('panini'); +const sherpa = require('style-sherpa'); +const rimraf = require('rimraf'); +const browserSync = require('browser-sync'); +const gulpwebpack = require('webpack-stream'); +const webpack = require('webpack'); +const webpackConfig = require('./webpack.config.js'); +// sass +const sass = require('gulp-sass'); +const sassLint = require('gulp-sass-lint'); +const postcss = require('gulp-postcss'); +const autoprefixer = require('autoprefixer'); +const sourcemaps = require('gulp-sourcemaps'); + +// webpackConfig.watch = true; + +const webpackDevMiddleWare = require('webpack-dev-middleware'); +const webpackHotMiddleWare = require('webpack-hot-middleware'); + +const webpackCompiler = webpack(webpackConfig); + +const yaml = require('js-yaml'); +const fs = require('fs'); + + + +// Load settings from settings.yml +const { + PATHS +} = loadConfig(); + +const server = browserSync.create(); + + +function loadConfig() { + let ymlFile = fs.readFileSync('config.yml', 'utf8'); + return yaml.load(ymlFile); +} + +// Build the index.html files for the final result +gulp.task('build', + gulp.series(clean, gulp.parallel(buildSass, fonts, pages, images), styleGuide)); + +// Build the site, run the server, and watch for file changes +gulp.task('default', + gulp.series(clean, gulp.parallel(buildSass, fonts, mywebpack, pages, images), styleGuide, serve, watch) +) + + +// add webpack stream +function mywebpack() { + return gulp.src('src/main.js') + .pipe(gulpwebpack(webpackConfig, webpack)) + .pipe(gulp.dest('dist/assets/')); +} + +// scss compile +function buildSass() { + return gulp.src(['src/assets/styles/styles.scss']) + .pipe(sourcemaps.init()) + .pipe(sass({ + includePaths: PATHS.sass + }).on('error', sass.logError)) + .pipe(postcss([autoprefixer()])) + .pipe(sourcemaps.write()) + .pipe(gulp.dest(PATHS.dist + '/assets')) +} + +// copy fonts +// Copy fonts to the "dist" folder +function fonts() { + return gulp.src(PATHS.fonts + '/*.*') + .pipe(gulp.dest(PATHS.dist + '/assets/fonts')); +} + +// browser-sync +function serve(done) { + server.init({ + server: { + baseDir: "./dist" + }, + middleware: [ + webpackDevMiddleWare(webpackCompiler), + webpackHotMiddleWare(webpackCompiler) + ] + }); + done(); +} + +function reload(done) { + server.reload(); + done(); +} + +// Copy images to the "dist" folder +// In production, the images are compressed +function images() { + return gulp.src('src/app/img/**/*') + .pipe(gulp.dest(PATHS.dist + '/img')) +} + +// Generate a style guide from the Markdown content and HTML template in styleguide/ +function styleGuide(done) { + sherpa('src/styleguide/index.md', { + output: PATHS.dist + '/styleguide.html', + template: 'src/styleguide/template.html' + }, done) +} + +// Delete the "dist" folder +// This happens every time a build starts +function clean(done) { + rimraf(PATHS.dist, done) +} + +// Copy page templates into finished HTML files +function pages() { + return gulp.src('src/html/pages/**/*.{html,hbs,handlebars}') + .pipe(panini({ + root: 'src/html/pages/', + layouts: 'src/html/layouts/', + partials: 'src/html/partials/', + data: 'src/html/data/', + helpers: 'src/html/helpers/' + })) + .pipe(gulp.dest(PATHS.dist)) +} + +// Load updated HTML templates and partials into Panini +function resetPages(done) { + panini.refresh() + done() +} + +// Watch for changes to static assets, pages, Sass, and JavaScript +function watch() { + // gulp.watch('src/html/pages/**/*.html').on('all', gulp.series(resetPages, pages, reload)); + gulp.watch('src/html/{layouts,partials,pages,helpers}/**/*.html').on('all', gulp.series(resetPages, pages, reload)); + gulp.watch('src/html/data/*.yml').on('all', gulp.series(resetPages, pages, reload)); + gulp.watch('src/styleguide/*.*').on('all', gulp.series(styleGuide, reload)); + gulp.watch('src/app/img/**/*').on('all', gulp.series(images, reload)); + gulp.watch('src/**/*.js').on('all', gulp.series(mywebpack, reload)); + gulp.watch('src/assets/styles/*.scss').on('all', gulp.series(mywebpack, reload)); + // gulp.watch('src/assets/styles/*.scss').on('all', gulp.series(buildSass, reload)); +} + +``` +* *Add* +```javascript +// Copy fonts to the "dist" folder +function fonts() { + return gulp.src(PATHS.fonts) + .pipe(gulp.dest(PATHS.dist + '/assets/fonts')); +} +``` +* *Modify* +```javascript +// Watch for changes to static assets, pages, Sass, and JavaScript +function watch() { + gulp.watch(PATHS.assets, copy); + gulp.watch('src/pages/**/*.html').on('all', gulp.series(pages, browser.reload)); + gulp.watch('src/{layouts,partials}/**/*.html').on('all', gulp.series(resetPages, pages, browser.reload)); + gulp.watch('src/assets/scss/**/*.scss').on('all', gulp.series(sass, browser.reload)); + gulp.watch('src/assets/js/**/*.js').on('all', gulp.series(javascript, browser.reload)); + gulp.watch('src/assets/img/**/*').on('all', gulp.series(images, browser.reload)); + gulp.watch('src/assets/fonts/**/*').on('all', gulp.series(fonts, browser.reload)); + gulp.watch('src/styleguide/**').on('all', gulp.series(styleGuide, browser.reload)); +} +``` +* Create *_custom.scss* and import into *app.css* +* Import *fontawesome* into *_custom.scss* +```scss +$fa-font-path: '/assets/fonts'; //set path for fonts + +@import 'node_modules/@fortawesome/fontawesome-free/scss/fontawesome'; +@import "node_modules/@fortawesome/fontawesome-free/scss/fa-solid"; +@import "node_modules/@fortawesome/fontawesome-free/scss/fa-brands"; +@import "node_modules/@fortawesome/fontawesome-free/scss/fa-regular"; +``` + +* `npm run dev` + +## Foundation 6 with @fortawesome fonts and webpack - If using Webpack for everything. Gulp version works pretty well. +Using *webpack* rather than *gulp* to manage scss and fonts. Webpack uses the url-loader to grab the fonts. Eliminates a function I'll have to write in gulp. + +* `settings.scss` + * `@import '~foundation-sites/scss/util/util';` - Change import statement to point to *node_modules* + * `$fa-font-path: '~@fortawesome/fontawesome-free/webfonts';` - Set the *$fa-font-path* so **fontawesome* can find the web fonts. +* `styles.scss` - main import file with all foundation imports + * `@import '~foundation-sites/scss/foundation';` - import foundation from node_modules. + * `@import '~motion-ui/src/motion-ui';` - Make sure we're only importing the scss for motion-ui. + * Import the fontawesome v5 scss and font scss. + * `@import '~@fortawesome/fontawesome-free/scss/fontawesome';` + * `@import "~@fortawesome/fontawesome-free/scss/fa-solid";` fas + * `@import "~@fortawesome/fontawesome-free/scss/fa-brands";` - fab + * `@import "~@fortawesome/fontawesome-free/scss/fa-regular";` - fa + * `@import 'local';` - Our local scss - imports our custom components. +* Import into our `main.js` file. Our entry point for our webpack application. + * `import "@/assets/styles/styles.scss";` - importing our main styles file. +* *wepack.config.js* + * Takes care of copying the fonts over. +```js +{ + test: /\.(png|jpe?g|gif|woff|woff2|eot|ttf|svg)$/, + loader: 'url-loader?limit=100000' + } +``` +* Compiles our scss to css. Extracts the css so our static html page can use it. scss section compiles scss to css for us. +```js +const pluginConfig = [ + new MiniCssExtractPlugin({ + filename: '[name].css', + chunkFilename: '[id].css' + }) +] + +const moduleConfigBase = [{ + test: /\.(sa|sc|c)ss$/, + exclude: /node_modules/, + use: [ + // devMode ? 'style-loader' : MiniCssExtractPlugin.loader, + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader', + 'sass-loader' + ] + }, + { + test: /\.js$/, + exclude: /(node_modules)/, + loader: 'babel-loader' + }, + { + test: /\.tsx?$/, + exclude: /(node_modules)/, + loader: 'awesome-typescript-loader' + }, + { + test: /\.(png|jpe?g|gif|woff|woff2|eot|ttf|svg)$/, + loader: 'url-loader?limit=100000' + } +] +``` +* Using webpack in gulp. Watch scss and run webpack whenever it changes. +```js +const gulpwebpack = require('webpack-stream'); +const webpack = require('webpack'); +const webpackConfig = require('./webpack.config.js'); + +// add webpack stream +function mywebpack() { + return gulp.src('src/main.js') + .pipe(gulpwebpack(webpackConfig, webpack)) + .pipe(gulp.dest('dist/assets/')); +} +gulp.watch('src/assets/styles/*.scss').on('all', gulp.series(mywebpack, reload)); +``` +## Zurb Panini Notes +* Partials are your friends. + * Inserting values `{{>partion value="value"}}` + * Use `{{#each}}` to iterate over array data + * Use `filename.variable` to access data from file in data folder + * [Custom Global Panini Variables](https://github.com/zurb/panini/issues/51) +```js +// src/data/globals.js +module.exports = { + production: process.env.NODE_ENV === 'production', +}; +``` +In handlbars template +```h +{{#if globals.production}} +

Production!

+{{else}} +

Not production.

+{{/if}} +``` + +## Create background-image slide show with orbit +* [Stack Overflow Responsive Background Image](https://stackoverflow.com/questions/21421062/responsive-background-image) +* [Full Page Background Image](https://css-tricks.com/perfect-full-page-background-image/) +* See the front. [Front](front/#carousel) + +## Notes +* Using mixins for grid +```scss +footer { + @include xy-grid; + @include xy-grid-layout(4, 'div'); +} +``` +* Result +```html +
+ +
+``` +## Notes +* Trying to organize my CSS/Styles. Get an overview of what I'm doing. Too many different options. + * StyleSherpa - Gives you an overview of all your styles. Forces you to at least have some type of plan. \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/general.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/general.md new file mode 100644 index 00000000..ff84ec51 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/general.md @@ -0,0 +1,80 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Tools +## Emmet +### Notes +* [Goodby Zen Coding](https://www.smashingmagazine.com/2013/03/goodbye-zen-coding-hello-emmet/) - Very good intro to Emmet. +* Visual Studio Code - [Emmet](https://code.visualstudio.com/docs/editor/emmet) + * lorem ipsum screws up what is following it + * lorem ipsum has to be last +* [Brand Colors](https://www.brandcolors.net) - List of brand colors +### Snippets +* **section#projects>h1>{Projects}^div.card*3>img[src="http://via.placeholder.com/250x200" alt="card"]>div>h2>{card title}^p>lorem10** +```html +
+

Projects

+
+ card +
+

card title

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Libero, blanditiis!

+
+
+
+ card +
+

card title

+

Consequatur voluptates repudiandae deserunt fuga. Magni, architecto labore. Ducimus, quisquam.

+
+
+
+ card +
+

card title

+

Libero, rerum fuga tempora distinctio sit praesentium labore animi odio!

+
+
+
+``` +* **aside>img[src="http://via.placeholder.com/400x200" alt="main artile"]+p>{article details}^div>a[href="#"]{link}** +```html + +``` +* **footer>div>h2>{my title}^img[src="http://via.placeholder.com/200x200" alt="image"]^div>h2>{experience}^ul>li*3>{experience}^^div>h2>{skills}^ul>li*3>{skills}^^div>h2>{contact me}** +```html +
+
+

my title

+ image +
+
+

experience

+
    +
  • experience
  • +
  • experience
  • +
  • experience
  • +
+
+

skills

+
    +
  • skills
  • +
  • skills
  • +
  • skills
  • +
+
+

contact me

+
+
+
+
+``` +## Other resources +* [PouchDB](https://pouchdb.com) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/angular.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/angular.md new file mode 100644 index 00000000..0a5d68e2 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/angular.md @@ -0,0 +1,187 @@ +--- +title: angular +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Angular Framework +## Notes +* When updating core, have to use *--to* to get it to work. `ng update @angular/core --to 6.0.6` + +## Resources +* Tools + * [Angular Augury](https://augury.angular.io/) - debug and profile angular 2 apps + * Chrome extension +* Lists + * [Awesome Angular](https://github.com/AngularClass/awesome-angular) +* [Angular Documentation](https://angular.io/) +* [Angular CLI Documetation](https://github.com/angular/angular-cli) +* [Awesome Angular](https://github.com/brillout/awesome-angular-components) +* [Clarity Design System](https://vmware.github.io/clarity/) +* [Angular Education](https://github.com/timjacobi/angular-education) +* Tools + * [ngrev](https://github.com/mgechev/ngrev) - navigate structure of the app. Desktop app + * [Augury] - Debug and profile angular project. Browser extension (Chrome only) + * [Angular Essentials Plugin]() - Visual Studio Code plugin for Angular development. +* Tutorials + * [Angular with Tailwindcss](https://www.jerriepelser.com/blog/using-tailwindcss-with-angular/) + +### Proxy api calls in angular - access API calls from local server. +* [Proxy Config](https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md) +* *proxy.conf.json* +```json +{ + "/children": { + "target": "http://localhost:5000", + "secure": false + } +} +``` + +### Material Design +* [Angular Material Table with CDK Table](https://stackblitz.com/edit/angular-material2-table?file=app%2Fapp.component.ts) +* [Layout and CSS](https://material.io/design/foundation-overview/) + +### Angular rxjs +* [Angular Observable Usage](https://angular.io/guide/practical-observable-usage) - Observable + +## Testing +I finally got the everything configured to test an API call from my Angular application. Because everything is local on my machine, I'm using a proxy on the Angular side to access my API without having to worry about CORS. Trying to Unit Test an API service took a little work because ng test does not read the proxy.conf.json file. +So, here is the test. +```ts +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + // require('karma-electron'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + // preprocessors: { + // '**/*.js': ['chrome'] + // }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], + fixWebpackSourcePaths: true + }, + angularCli: { + environment: 'dev' + }, + proxies: { + '/kinder': { + 'target': 'http://localhost:5000/kinder', + 'changeOrigin': true + } + // '/kinder': 'http://localhost:5000/kinder/' + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; +``` +
    +
  • UtilService contains the call I want to test
  • +
  • GetdataService actually makes the call.
  • +
+Here is my karma.conf.js file. + +```js +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + // require('karma-electron'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + // preprocessors: { + // '**/*.js': ['chrome'] + // }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], + fixWebpackSourcePaths: true + }, + angularCli: { + environment: 'dev' + }, + proxies: { + // '/kinder': { + // 'target': 'http://localhost:5000', + // 'changeOrigin': true + // }, + '/kinder': 'http://localhost:5000/kinder/' + }, + // proxies: { + // '/kinder': 'http://localhost:5000/' + // }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; +``` +Key was the proxies configuration. +

Test Angular async validator with Jasmine

+```ts + it('Check age right', (done) => { + formControl = new FormControl(''); + formControl.setAsyncValidators( + AgeValidator(1.5, 6, utilService) + ); + formControl.setValue('2014-01-03'); + setTimeout(function() { + expect(formControl.status === 'VALID').toBe(true); + done(); + }, 2000); + }); +``` +# Learning basic Angular + +## Setup + +* Install angular-cli + * `npm install -g @angular/cli` +* Create the project + * `ng new PROJECT_NAME --skip-install --routing --style scss` +* Setup styles + * Create styles folder in `src/app/assets` + * Copy _settings.scss file from Foundation Template. + * Copy _foundation.scss file from Foundation Template. + * install `npm install @fortawesome/fontawesome @fortawesome/fontawesome-free-solid @fortawesome/fontawesome-free-webfonts` + * Update settings in _foundation.scss + * Make sure to include ~ in import for foundation. + * import `@import '~@fortawesome/fontawesome-free-webfonts/scss/fontawesome';` + * Update settings.scss file + * Change util import to `@import '~foundation-sites/scss/util/util';` (line 63) + * Add line to point to font-awesome variable `$fa-font-path: '~@fortawesome/fontawesome-free-webfonts/webfonts';` + * Add `_custom.scss` to import your custom scss. + * Add `_foundation.scss` to your `styles.scss` file in your assets folder. + * Import the `styles.scss` file into your application. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/react.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/react.md new file mode 100644 index 00000000..50499be5 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/react.md @@ -0,0 +1,376 @@ +--- +title: react +updated: 2021-04-04 18:55:34Z +created: 2020-09-10 22:07:13Z +--- + +# Notes about learning reactjs + +## React Stack +* React - https://reactjs.org +* TypeScript - https://www.typescriptlang.org +* React Router - https://reactrouter.com +* React Query - Server state - https://react-query.tanstack.com +* React Redux - Client state (can exist) - https://redux-toolkit.js.org +* Chakra UI - https://chakra-ui.com +* Formik - Forms - https://formik.org + * Yup validation library + * State + * Validations + * Submissions +* React Testing Library - https://testing-library.com/docs/react-testing-library/intro/ +* Storybook - https://storybook.js.org +* Next.js - https://nextjs.org + +## Setup React from Scratch with TypeScript Support using Parcel + +- https://github.com/parcel-bundler/awesome-parcel + +* https://github.com/linbudu599/Parcel-Tsx-Template + +- [PostCss](https://postcss.org/) +- [TypeScript](https://www.typescriptlang.org/index.html) + +* Create directory +* Create Directory Structure + + - public + - index.html + - src + - App.scss + - App.tsx + - index.tsx + + * .babelrc + * .gitignore + +* Create _postcss.config.js_ file + +```json +module.exports = { + plugins: [ + require("autoprefixer"), + require("postcss-nested"), + require("postcss-scss"), + require("postcss-jsx"), + ], +}; +``` + +- Setup _package.json_ - `yarn install -y` + +* Install required packages: + +```json +{ + "name": "taskbox", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.8.4", + "@typescript-eslint/eslint-plugin": "^2.30.0", + "@typescript-eslint/parser": "^2.30.0", + "babel-eslint": "^10.1.0", + "eslint-config-prettier": "^6.11.0", + "eslint-config-react-app": "^5.2.1", + "eslint-plugin-flowtype": "^4.7.0", + "eslint-plugin-html": "^6.0.2", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-react": "^7.19.0", + "eslint-plugin-react-hooks": "^4.0.0", + "node-sass": "^4.14.0", + "parcel-bundler": "^1.12.4" + }, + "dependencies": { + "@babel/core": "^7.9.6", + "@babel/preset-env": "^7.9.6", + "@babel/preset-react": "^7.9.4", + "@babel/preset-typescript": "^7.9.0", + "@jest/core": "^25.5.4", + "@types/node": "^13.13.4", + "@types/react": "^16.9.34", + "@types/react-dom": "^16.9.7", + "@types/react-router-dom": "^5.1.5", + "babel-jest": "^25.5.1", + "eslint": "^6.8.0", + "jest": "^25.5.4", + "prettier": "^2.0.5", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "typescript": "^3.8.3" + } +} +``` + +- Create _tsconfig.json_ file - `npx tsc --init` + +* Can now start with a basic react tutorial + +## Routing is very different from what's available in books and tutorials + +- [Documentation for Routing](https://reacttraining.com/react-router/) +- [CSS Tricks: React Router 4](https://css-tricks.com/react-router-4/) + - Good code examples + +## Notes from rangle.io web chat + +- Tools: react, redux, express (optional) +- Tools + - webpack w/ babel + - PostCSS/CSSNext + - Testing - karma, mocha, chai + - Linting tools - js and css/sass (eslint/stylelint) + - Enzyme - component testing (?) + - Robot e2e test framework - python framework. natural language. connect to ci +- HelmetJS - security from cross-scripting +- Dev tools + - npm start - run in production mode + - npm dev - dev mode - dev tools connected. +- Components + - atomic design + +## General Notes + +- [React Typescript Samples](https://github.com/Lemoncode/react-typescript-samples) +- Render raw html in reactjs - `

` + +## Development + +- [Cross Origin Errors](https://reactjs.org/docs/cross-origin-errors.html) + +``` +Source maps +Some JavaScript bundlers may wrap the application code with eval statements in development. (For example Webpack will do this if devtool is set to any value containing the word “eval”.) This may cause errors to be treated as cross-origin. +If you use Webpack, we recommend using the cheap-module-source-map setting in development to avoid this problem. +``` + +- Import react - ['Cannot read property of createElement of undefined'](https://stackoverflow.com/questions/37360202/uncaught-in-promise-typeerror-cannot-read-property-createelement-of-undefin) + +``` +import { React, Component } from 'react'; +needs to be +import React, { Component } from 'react'; +``` + +### exporting stateless component + +```jsx +import React from "react"; +import ReactDOM from "react-dom"; + +const data = [ + { + name: "Baked Salmon", + ingredients: [ + { name: "Salmon", amount: 1, measurement: "l lb" }, + { name: "Pine Nuts", amount: 1, measurement: "cup" }, + { name: "Butter Lettuce", amount: 2, measurement: "cups" }, + { name: "Yellow Squash", amount: 1, measurement: "med" }, + { name: "Olive Oil", amount: 0.5, measurement: "cup" }, + { name: "Garlic", amount: 3, measurement: "cloves" }, + ], + steps: [ + "Preheat the oven to 350 degrees.", + "Spread the olive oil around a glass baking dish.", + "Add the salmon, garlic, and pine nuts to the dish.", + "Bake for 15 minutes.", + "Add the yellow squash and put back in the oven for 30 mins.", + "Remove from oven and let cool for 15 minutes. Add the lettuce and serve.", + ], + }, + { + name: "Fish Tacos", + ingredients: [ + { name: "Whitefish", amount: 1, measurement: "l lb" }, + { name: "Cheese", amount: 1, measurement: "cup" }, + { name: "Iceberg Lettuce", amount: 2, measurement: "cups" }, + { name: "Tomatoes", amount: 2, measurement: "large" }, + { name: "Tortillas", amount: 3, measurement: "med" }, + ], + steps: [ + "Cook the fish on the grill until hot.", + "Place the fish on the 3 tortillas.", + "Top them with lettuce, tomatoes, and cheese", + ], + }, +]; + +const Menu = ({ title, recipes }) => ( +

+
+

{title}

+
+
+ {recipes.map((recipe, i) => ( + + ))} +
+
+); + +const Recipe = ({ name, ingredients, steps }) => ( +
+

{name}

+
    + {ingredients.map((ingredient, i) => ( +
  • {ingredient.name}
  • + ))} +
+
+

Cooking Instructions

+ {steps.map((step, i) => ( +

{step}

+ ))} +
+
+); + +const list = () => ; + +export { list }; +``` + +- In Routing + +```tsx +import * as React from "react"; +import { + BrowserRouter, + HashRouter, + Redirect, + Route, + Switch, +} from "react-router-dom"; // eslint-disable-line +import { Hello } from "./components/Home/Hello"; +import { list } from "./components/Ingredients/ingredients"; + +const AppRoute = () => ( + // eslint-disable-line + +
+ + + + +
+
+); + +export { AppRoute }; +``` + +## Using typescript + +- tsConfig that works with `(color) => (color.id !== id) ? color : {...color, rating},`. Was causing issues when transpiling + +```json +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "lib": ["es6", "dom"], + "jsx": "react", + "allowJs": true, + "pretty": true, + "diagnostics": true, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true + }, + "exclude": ["node_modules"] +} +``` + +# Redux + +## Resources + +- [Documentation](https://redux.js.org) +- [Getting Started With Redux](https://egghead.io/courses/getting-started-with-redux) + - [Class Notes](https://github.com/tayiorbeii/egghead.io_redux_course_notes) +- [Build React Applications with Idiomatic Redux](https://egghead.io/courses/building-react-applications-with-idiomatic-redux) + - [Class Notes](https://github.com/tayiorbeii/egghead.io_idiomatic_redux_course_notes) + +## Code Examples. + +- Redux Implementation - implement redux from scratch (how it all works together). Only requires React. + +```js +const createStore = (reducer) => { + let state: number; + let listeners = []; + + const getState = () => state; + + const dispatch = (action) => { + state = reducer(state, action); + listeners.forEach((listener) => listener()); + }; + + const subscribe = (listener) => { + listeners.push(listener); + return () => { + listeners = listeners.filter((l) => l !== listener); + }; + }; + + dispatch({}); + + return { getState, dispatch, subscribe }; +}; + +const counter = (state: number = 0, action) => { + switch (action.type) { + case "INCREMENT": + state = state + 1; + return state; + case "DECREMENT": + return state - 1; + default: + return state; + } +}; + +const store = createStore(counter); +const unsub = store.subscribe(() => console.log(store.getState())); + +const el = document.getElementById("blog"); + +const Counter = (props) => { + const { value, onIncrement, onDecrement } = props; + return ( +
+

Value: {value}

+   + +
+ ); +}; + +const render = () => + ReactDOM.render( + store.dispatch({ type: "INCREMENT" })} + onDecrement={() => store.dispatch({ type: "DECREMENT" })} + />, + // , + el + ); + +render(); + +const renderUnsub = store.subscribe(render); +``` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/rxjs.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/rxjs.md new file mode 100644 index 00000000..bbf62243 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/rxjs.md @@ -0,0 +1,78 @@ +--- +title: rxjs +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Figuring out RXJS + +## Notes +* Getting it to work with typescript + * Error: `Uncaught TypeError: Cannot read property 'Observable' of undefined`. Works in plain javascript. + * Fix: + * Install type definitions for rxjs `npm install --save-dev @type/rx` + * Import as `import * as Rx from 'rxjs'` + +* (Archive) Issues with `Rx.DOM.get()`. Error: `The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'` + * Fix: + * [Issue 1732](https://github.com/ReactiveX/rxjs/issues/1732) + * Provide custom factory for XHR +```javascript + const settings = { + crossDomain: true, + responseType: "json", + method: "GET", + createXHR: () => new XMLHttpRequest(), + url: url + } +``` +* Ajax with rxjs 6 +```ts +import {ajax} from 'rxjs/ajax'; +export const getSettings$ = (url) => ajax(`${url}`); +``` + +## Examples +### Ajax and VueJS +* Setup services file to actually make the ajax calls +services.ts +```ts +import {ajax} from 'rxjs/ajax'; +export getSettings$ = (url) => ajax(`${url}`); +``` +* Vue Component - about/script.ts +```ts +import {Vue, Component} from "vue-property-decorator"; +import {Observable} from 'rxjs'; +import {IAbout, About as AboutModel } from "../../../models"; +import { getSettings$ } from '../../../services'; + +@Component({}) +export default class About extends Vue { + + about: IAbout = new AboutModel(); + getService: Observable; + + created() { + const url = '/admin/site/30b3cf31-a413-4871-aef2-c4b125cd5b36'; + this.getService = getSettings$(url); + this.getService.subscribe( + data => console.log(data), + err => console.error(err) + ); + } + +} +``` +## Resources +* [Official Site](http://reactivex.io/rxjs/) +* [Github RX Book](http://xgrommx.github.io/rx-book/index.html) +* [Rx Extensions](https://github.com/Reactive-Extensions) + +## Learn RxJS +* [Which Operator Do I Use](https://xgrommx.github.io/rx-book/content/which_operator_do_i_use/index.html) +* [RxJs Observables in Angular](https://github.com/wardbell/rxjs-in-ng) +* [Learn RxJs](https://github.com/btroncone/learn-rxjs) + +## rxjs advice +* catchError in pipe -> create a friendlier message. then throw error messages. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/testing.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/testing.md new file mode 100644 index 00000000..abfea33e --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/testing.md @@ -0,0 +1,141 @@ +--- +title: testing +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Testing + +## Resources +* Reactjs + * [Enzyme](https://github.com/airbnb/enzyme) +* Other + * [Karma](https://karma-runner.github.io/1.0/index.html) - runner + * [Mocha](https://mochajs.org/) - framework + * [Chai](http://chaijs.com/) - assertion library +* Acceptance testing + * [Robot Framework](http://robotframework.org/) + * Using `mkvirtualenv` - `mkvirtualenv -a . johan-martin` + * `pip install robotframework` +## Getting started +* installation `npm i --save-dev enzyme enzyme-adapter-react-16 chai mocha karma` +* Install *Robot Framework* + * `mkvirtualenv -a . johan-martin` + * `pip install robotframework` + +## Testing framework +* Using Karma, Mocha, Chai + * `npm -i --save-dev karma mocha chai` + +## TAP +* [Test Anything Protocol](https://testanything.org/) + * [tap-spec](https://github.com/scottcorgan/tap-spec) - output similar to Mocha + * [Faucet](https://github.com/substack/faucet) - TAP Reporter +## Tape +* [Why I use Tape...](https://medium.com/javascript-scene/why-i-use-tape-instead-of-mocha-so-should-you-6aa105d8eaf4) + +## Jasmine and Karma +* [Jasmine](https://jasmine.github.io/) + * Can't test es6 +* [Karma](https://karma-runner.github.io/2.0/index.html) + * [Headless Chrome](https://developers.google.com/web/updates/2017/04/headless-chrome) +* Docs + * [Jasmine, es6](https://www.classandobjects.com/test_using_jasmine_react_es6_webpack/) + * [Jasmine, Karma, Webpack, Commandline](https://what-problem-does-it-solve.com/webpack/testing.html) + * [Jasmine, Es6](http://www.syntaxsuccess.com/viewarticle/writing-jasmine-unit-tests-in-es6) + * [Karma, webpack, Jasmine](https://kentor.me/posts/testing-react-and-flux-applications-with-karma-and-webpack/) + +# Testing with Tape +## Requirements +* Using typescript for development +* Using webpack for hot reload and packaging. +## Tape +* [Tape](https://github.com/substack/tape) +* [Testing JavaScript Modules with Tape](https://ponyfoo.com/articles/testing-javascript-modules-with-tape) +* Seems to be simpler to get up and running then the other frameworks. +* Can run the tests in node. +* [SuperTest](https://github.com/visionmedia/supertest) - API Testing. + +## Setup +* [webpack-tape-run](https://github.com/syarul/webpack-tape-run) - run tests in webapck +* [TS-Node](https://github.com/TypeStrong/ts-node) - Run Typescript in Node.js. + * [Experimenting with TS-Node](https://www.bennadel.com/blog/3268-experimenting-with-ts-node-and-using-typescript-in-node-js-on-the-server.htm) +### Typescript Dependencies +* `@types/tape` +* `awesome-typescript-loader` +* `tslint` +* `tsnode` +### Tape Dependencies +* [Faucet](https://github.com/substack/faucet) - TAP Reporter + +### Configuration Example +* *package.json* +```json +"scripts": { + "start": "npm-run-all --parallel dev:server lint:watch", + "watch": "webpack -w -d", + "build": "webpack -d", + "dev:server": "webpack-dev-server --hot --inline --progress --colors", + "lint": "esw webpack.config.* src --color", + "lint:watch": "npm run lint -- --watch", + "test": "node_modules/.bin/ts-node node_modules/.bin/tape src/tests/*.ts | node_modules/.bin/faucet" + }, + "author": "Johan Martin (http://www.johan-martin.com/)", + "license": "ISC", + "dependencies": {}, + "devDependencies": { + "@types/tape": "^4.2.30", + "awesome-typescript-loader": "^3.2.3", + "babel-core": "^6.26.0", + "babel-loader": "^7.1.2", + "babel-preset-env": "^1.6.0", + "babel-preset-latest": "^6.24.1", + "electron": "^1.7.8", + "eslint": "^4.7.2", + "eslint-config-standard": "^10.2.1", + "eslint-plugin-import": "^2.7.0", + "eslint-plugin-node": "^5.1.1", + "eslint-plugin-promise": "^3.5.0", + "eslint-plugin-standard": "^3.0.1", + "eslint-watch": "^3.1.2", + "faucet": "0.0.1", + "html-webpack-plugin": "^2.30.1", + "npm-run-all": "^4.1.1", + "tap-spec": "^4.1.1", + "tape": "^4.8.0", + "ts-node": "^3.3.0", + "tslint": "^5.7.0", + "typescript": "^2.5.3", + "webpack": "^3.6.0", + "webpack-dev-server": "^2.9.0", + "webpack-tape-run": "0.0.7" + }, + "babel": { + "presets": [ + [ + "env", + { + "targets": { + "browsers": [ + "last 2 versions", + "ie >= 7" + ] + } + } + ] + ] + } +``` + + + + +### Issues +* Error: **"Module not found: Error: Can't resolve 'fs' in"** + * [Browser Testing and Code Coverage with Karma, Tape, and Webpack](http://rmurphey.com/blog/2015/07/20/karma-webpack-tape-code-coverage) + * Resolved by adding below to webpack.config.js: +```js +node: { + fs: 'empty' + }, +``` diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/typescript.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/typescript.md new file mode 100644 index 00000000..08a92ac6 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/typescript.md @@ -0,0 +1,29 @@ +--- +title: typescript +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Typescript Notes +## Resources +* [Typescript Language](https://www.typescriptlang.org) +* [TypeScript Notation](https://2ality.com/2018/04/type-notation-typescript.html) +* [TypeScript React Cheetsheet](https://github.com/typescript-cheatsheets/react-typescript-cheatsheet) +* [React Typescript Guide](https://github.com/piotrwitek/react-redux-typescript-guide) +## tslint +* ~~[Tslint](https://github.com/palantir/tslint/blob/master/docs/usage/rule-flags/index.md) - how to disable rules per line or section. // tslint:disable-line~~ Use eslint + +* Import json file into a typescript product +* [How to Import json into TypeScript](https://hackernoon.com/import-json-into-typescript-8d465beded79) +* Declare json in your typings file + * Vue - vue-shim.d.ts or index.d.ts +```js +declare module "*.json" { + const value: any; + export default value; +} +`` + +## Issues +* Dealing with `this` +* [This in typescript](https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript) diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/vue.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/vue.md new file mode 100644 index 00000000..7bc07c6a --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/vue.md @@ -0,0 +1,282 @@ +--- +title: vue +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Working with Vue in Foundation +* Used foundation-cli to install foundation +## Setup +* Install vue, vue-loader, vue-style-loader, vue-template-compiler, sass-loader, style-loader, css-loader, typescript, awesome-typescript-loader +### *gulpfile.babel.js* config +* Configure *gulpfile.babel.js - webpack* +* `gulp.watch('src/assets/components/**/*').on('all', gulp.series(javascript, browser.reload))` - add to end of file to watch components +```js +let webpackConfig = { + resolve: { + extensions: ['.ts', '.js', '.vue', '.json'], + alias: { + 'vue$': 'vue/dist/vue.esm.js' + } + }, + module: { + rules: [ + { + test: /\.js$/, + use: [ + { + loader: 'babel-loader' + } + ] + }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: { + loaders: { + scss: ['vue-style-loader', { + loader: 'css-loader', + options: { + minimize: false, + sourceMap: false + } + }, + { + loader: 'sass-loader', + options: + { + includePaths: ['./src/assets/vue/styles'], + data: '@import "./src/assets/vue/styles/app";', + sourceMap: false + } + } + ], + ts: 'awesome-typescript-loader' + } + } + }, + { + test: /\.ts$/, + loader: 'awesome-typescript-loader' + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + query: { + limit: 10000, + name: 'fonts/[name].[hash:7].[ext]' + } + }, + { + test: /\.(png|svg|jpg|gif)$/, + use: [ + 'file-loader?name=images/[name].[ext]' + ] + } + ] + } +} +``` +* Have to configure webpackConfig with vue-loader. +* Update *config.yml* +```yaml + assets: + - "src/assets/**/*" + - "!src/assets/{components,img,js,scss,fonts}/**/*" +``` +### Other Notes +* Created separate style directory for just Vue styles. + * Allow access to foundation from all components. + * Easier configuration in webpack. +* Installed *babel-preset-env* for always current babel engine. +* Customize the *app.css* file in *./src/assets/vue/styles* + * *@import '~foundation-sites/scss/foundation';* + * ~~*@import '~font-awesome/scss/font-awesome';*~~ - Not necessary since already in main config. + * *@import '~motion-ui/src/motion-ui';* + + +## Resources +* [Vue](https://vuejs.org/) - main site +* [Vue-loader](https://vue-loader.vuejs.org/en/) - Using Vue with Webpack +* [Vue Foundation](https://github.com/vue-foundation/vue-foundation) - template for using Foundation with Vue and Webpack +* [Vue Font Awesome](https://github.com/Justineo/vue-awesome) +* [Vue Admin](https://github.com/vue-bulma/vue-admin) +* [Vuex](https://github.com/vuejs/vuex) +* [Vuex Rest API](https://github.com/christianmalek/vuex-rest-api) +### Replacement resources +* [axios](https://github.com/mzabriskie/axios) - Replacement for vue resources http + * [How to use axios as your http client](http://codeheaven.io/how-to-use-axios-as-your-http-client/) - Section on setting headers in Axios. + * [Axios with Vue](https://alligator.io/vuejs/rest-api-axios/) - Use in component + + +## Notes +* [Multiple View Instances on Same Page](https://codingexplained.com/coding/front-end/vue-js/using-multiple-vue-instances-page) + + +## Tutorials +* [Vue Abstract Components](https://alligator.io/vuejs/vue-abstract-components/) +* [Vue Lazy Load Images](https://alligator.io/vuejs/vue-lazy-load-images/) + +## Components +* [Vue The Mask](https://github.com/vuejs-tips/vue-the-mask/blob/master/src/docs/docs.vue) +* [Vue Cookie Law](https://github.com/apertureless/vue-cookie-law) +* [Vue Class Component](https://github.com/vuejs/vue-class-component) +* [Vee Validate](https://github.com/baianat/vee-validate) + * Clear all errors and make fields pristine: + * `this.field = ""` + * `this.$validator.reset()` + +## Importing vue components - *script.ts* - *template.html* +```html +
+

{{msg}}

+ +
+``` +* *script.ts* +```js +import MarvelProto from './../MarvelProto/MarvelProto.vue' +export default { + components: { + MarvelProto, + }, + data: () => ( + { + msg: "User List", + } + ), +}; +``` + +## Creating new project with vue-cli +* Setup the proxy +* In *vue.config.js* +```json + devServer: { + proxy: 'http://localhost:5000' + } +``` +* Setup typescript + * `npm install -D @vue/cli-plugin-typescript` + * `vue invoke typescript` + + +# General notes while developing with Vue + +## Updated Resources +* Vue filters no longer included. + * [vue2-filters](https://github.com/freearhey/vue2-filters) - Restore vue1 filters +* Use methods on *v-for* rather than filter. Call the item as a method +* Ex: + * `
  • ` +```js + methods: { + famous: (stories) => { + return stories.filter( (item) => { + + console.log(item) + + return item.upvotes > 20 + }) + }, + now: function () { + return Date.now() + } + }, +``` +* Ajax requests for Vue +* [axios](https://github.com/mzabriskie/axios) - Replacement for vue resources http + +## TypeScript Notes +* [Vue Typescript](https://vuejs.org/v2/guide/typescript.html) +* [vue-class-component](https://github.com/vuejs/vue-class-component) +* `npm install vue-class-component` - Component annotations for Vue. + +```js +// tsconfig.json +{ + "compilerOptions": { + // ... other options omitted + "allowSyntheticDefaultImports": true, + "lib": [ + "dom", + "es5", + "es2015.promise" + ], + "module": "es2015", + "moduleResolution": "node" + } +} +``` +## Vue Components +* [Unknown Custom Element Error](https://forum-archive.vuejs.org/topic/2036/component-inside-component-unknown-custom-element-error-vueify/4) +* Include component globally +```js +import Hello from '../vue/components/Hello' +Vue.component('hello', Hello) +``` + * Now available globally + +* Include component locally +* [Getting elements in vue with vanilla javascript](https://forum.vuejs.org/t/getting-elements-in-vue-with-vanilla-javascript/8668/2) + * this.$el.querySelector('p') + +## Child/Parent Communication +* How to get the parent to update it's value from the child. +* Vuejs 2 changed how it is done. .sync has changed. +* Components + * Parent - wordpress + * Child - story + * props: [story, favorite] +* On Child + * button - `` - on click, call setFavorite method. + * method - emit event to favorite, send the current story as the object. +```js + private setFavorite() { + this.$emit("favorite", this.story); + } +``` +* On Parent + * in Template - `v-on:favorite="updateFavorite(story)` - event is favorite, method is updateFavorite and pass in the story. +```html + +``` +* method to update the favorite the current story. +```js + public updateFavorite(story) { + this.favorite = story; + } +``` +* Favorite is now pointing to the current story. Only one favorite. + +## Create module for npm +* [Vue Component Publish to npm](https://vuejsdevelopers.com/2017/07/31/vue-component-publish-npm/) + +## VueRouter +* Getting Router hooks to work in vue-class-component. + * [VueClassComponent Readme](https://github.com/vuejs/vue-class-component) - Adding Custom Huooks +* Fix issue with relative css files not being loaded. Cause page not to reload. + * Added base reference. + * [Base Element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base) + * Can also add it in router module. + * [Route Options](https://router.vuejs.org/en/api/options.html#routes) +* Fix Issue with TypeScript and router.push - Argument type `{name: string} is not assignable to parameter RawLocation. + * [Missing TS Definitions](https://github.com/vuejs/vue-router/issues/1312) + * Not yet in package - [Fix](https://github.com/druppy/vue-router/blob/25267faee57571510f3e7b04d0939c4ff69ca180/types/router.d.ts) + +## Vuex +* Using mapGetter in vue-class-component + * [Vue Class Component](https://github.com/vuejs/vue-class-component/issues/109) + + +## Options for admin/personal admin sites +* https://w3layouts.com/preview/?l=/modern-admin-panel-flat-bootstrap-responsive-web-template/ +* + + +## Components +* Calendar - [Date Picker](https://github.com/charliekassel/vuejs-datepicker) - diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/webpack.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/webpack.md new file mode 100644 index 00000000..b0fdd7de --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/webpack.md @@ -0,0 +1,301 @@ +--- +title: webpack +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Webpack Basic Configuration + +## Configure Webpack +```javascript +const path = require('path') +const webpack = require('webpack') +const BabiliPlugin = require('babili-webpack-plugin') +const CleanWebPackPlugin = require('clean-webpack-plugin') +const combineLoaders = require('webpack-combine-loaders') +const ExtractTextPlugin = require('extract-text-webpack-plugin') +const StylelintPlugin = require('stylelint-webpack-plugin') +const UglifyJsPlugin = require('uglifyjs-webpack-plugin') +const HtmlWebpackPlugin = require('html-webpack-plugin') +const vendorPackages = require('./package.json') +const { CheckerPlugin } = require('awesome-typescript-loader') + +const outputDir = path.join(__dirname, 'dist') + +const pluginConfig = [ + new HtmlWebpackPlugin( + { + title: 'Kinder Admin', + template: './src/index.ejs' + } + ), + new webpack.DefinePlugin({ + __STATE__: JSON.stringify(process.env.NODE_ENV) + }), + new CheckerPlugin() +] + +const moduleConfigBase = [ + { + test: /\.html$/, + loader: 'html-loader' + }, + { + test: /\.js$/, + exclude: /(node_modules)/, + loader: 'babel-loader' + }, + { + test: /\.tsx?$/, + exclude: /(node_modules)/, + use: [ + { loader: 'babel-loader' }, + { loader: 'awesome-typescript-loader' } + ] + }, + { + test: /\.(png|jpe?g|gif|woff|woff2|eot|ttf|svg)$/, + loader: 'url-loader?limit=100000' + }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: { + loaders: { + scss: ['vue-style-loader', { + loader: 'css-loader', + options: { + minimize: false, + sourceMap: false, + url: true + } + }, + { + loader: 'sass-loader', + options: { + includePaths: ['src/assets/styles'], + data: '@import "src/assets/styles/site";', + sourceMap: false + } + } + ], + ts: 'awesome-typescript-loader' + } + } + } +] + +const moduleConfigDev = [ + { + test: /\.scss$/, + exclude: /(node_modules)/, + use: [ + { loader: 'style-loader' }, + { loader: 'css-loader' }, + { loader: 'postcss-loader' }, + { loader: 'sass-loader' } + ] + }, + { + test: /\.css$/, + exclude: /(node_modules)/, + use: [ + { loader: 'style-loader' }, + { loader: 'css-loader' }, + { loader: 'postcss-loader' } + ] + } +] + +const moduleConfigProd = [ + { + test: /\.scss$/, + use: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: combineLoaders([ + { + loader: 'css-loader' + }, + { + loader: 'postcss-loader' + }, + { + loader: 'sass-loader' + } + ]) + }) + }, + { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: combineLoaders([ + { + loader: 'css-loader' + }, + { + loader: 'postcss-loader' + } + ]) + }) + } +] + +const serverConfig = { + contentBase: outputDir, + compress: true, + open: false, + port: 9000, + historyApiFallback: { + verbose: true, + disableDotRule: true + } +} + +const webpackConfig = { + entry: { + app: './src/app/main.ts', + vendor: Object.keys(vendorPackages.dependencies).filter(name => (name !== 'font-awesome' && name !== 'foundation-sites' && name !== '@fortawesome/fontawesome-free-webfonts')) + }, + output: { + path: outputDir, + filename: '[name].js' + }, + resolve: { + extensions: ['.html', '.ts', '.tsx', '.js', '.json', '.vue'], + alias: { + 'vue$': 'vue/dist/vue.esm.js', + '@': path.resolve('src') + } + }, + plugins: pluginConfig, + devServer: serverConfig +} + +if (process.env.NODE_ENV === 'production') { + webpackConfig.plugins = (webpackConfig.plugins || []).concat([ + new BabiliPlugin({}), + new CleanWebPackPlugin([outputDir]), + new ExtractTextPlugin({ + filename: '[name].css', + allChunks: true + }), + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + async: true, + minChunks: Infinity + }), + new StylelintPlugin( + {syntax: 'scss', emitErrors: false, lintDirtyModulesOnly: true} + ), + new UglifyJsPlugin({ + test: /\.js($|\?)/i + }), + new webpack.LoaderOptionsPlugin({ + minimize: true + }) + ]) + webpackConfig.module = { rules: moduleConfigBase.concat(moduleConfigProd) } + webpackConfig.devtool = '#source-map' +} else { + /* Development */ + webpackConfig.module = { rules: moduleConfigBase.concat(moduleConfigDev) } + webpackConfig.devtool = 'cheap-module-source-map' +} + +module.exports = webpackConfig +``` + +# Webpack Notes + +## Resources +* [Webpack Examples](https://github.com/webpack/webpack/tree/master/examples) +* [Webpack Book](https://survivejs.com/webpack/foreword/) +* [Lodash Plugin](https://github.com/lodash/lodash-webpack-plugin) +* [Awesome Webpack](https://github.com/webpack-contrib/awesome-webpack) +* [Webpack Vuejs Templates](https://vuejs-templates.github.io/webpack/) +* [Webpack Chain](https://github.com/mozilla-neutrino/webpack-chain) + +## Plugins +* [Static Site Generator](https://github.com/markdalgleish/static-site-generator-webpack-plugin) + +## Articles +* [Introduction to Webpack](https://www.smashingmagazine.com/2017/02/a-detailed-introduction-to-webpack/) + * Includes notes for using Handlebars. + +## font-awesome config with webpack and foundation +* webpack config - allow to process image and font files. +```js + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + query: { + limit: 10000, + name: utils.assetsPath('img/[name].[hash:7].[ext]') + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + query: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:7].[ext]') + } + } +``` +* Configure scss imports +* In `_settings.scss` add `$fa-font-path: "~font-awesome/fonts";` to end of the page. +* In `app.scss` add `@import '~font-awesome/scss/font-awesome';` after `@import "settings"`. + +## Errors and notes +* Issue: *Can't find variable: SockJS" in Safari on Mac and iOS* + * Resolve: [`eval-source-map` results in "Can't find variable: SockJS" in Safari on Mac and iOS with v2.8.x #1090](https://github.com/webpack/webpack-dev-server/issues/1090) + * Changed *devtool* to '#source-map' + +## Wordpress Configuration +* ` wp_enqueue_script( $this->plugin_name, \PASEO_WP_FORM_DIR_URL . 'site/assets/paseo-wp-form-api.js', array('jquery'), $this->version, false );` - enqueue with jQuery as a dependency. +* Use externals to not include jquery in the bundle but use the Wordpress instance of jquery. +```json + externals: { + jquery: 'jQuery' + }, +``` + +* Add **webpack.ProvidePlugin** with *jQuery* as the global variable. +```json + new webpack.ProvidePlugin({ + jQuery: 'jquery' + }) +``` + +* Error: TS2304 - Cannot find name Jquery - solution [StackOverflow - ts2304 - cannot find name](https://stackoverflow.com/questions/31173738/typescript-getting-error-ts2304-cannot-find-name-require?rq=1) + * `npm install --save-dev @types/jquery` +* Error: error TS2304: Build:Cannot find name 'Iterable' {still related to jquery} - solution: [StackOverflow Error ts2304](https://stackoverflow.com/questions/45360993/error-ts2304-buildcannot-find-name-iterable-after-upgrading-to-angular-4) + * Update tsconfig. +```json +"target": "es5", +"lib": [ + "es2016", "dom" + ], +``` +* Unexpected character '`' [./node_modules/foundation-sites/js/foundation.util.core.js:24,0][entry.bundle.js:10295,124] + * [Error building with WebPack #10275](https://github.com/zurb/foundation-sites/issues/10275) + * Resolve with: for test: /\.js$/ + * `exclude: /node_modules(\/?!foundation-sites)/,` + +* [Uncaught ReferenceError: webpackJsonp is not defined #5002](https://github.com/webpack/webpack/issues/5002) + * Resolve by determining loading order of files - `webpack --display-entrypoints` when you have multiple chunks + +* Notes for commons chunk plugin + * [Commons Chunk Plugin](https://webpack.js.org/plugins/commons-chunk-plugin/) + * Examples: [multiple-entry-points-commons-chunk-css-bundle](https://github.com/webpack/webpack/tree/master/examples/multiple-entry-points-commons-chunk-css-bundle) + + +* Injecting Server Urls - [Injecting Server Urls](http://developmentnow.com/2016/07/13/webpack-injecting-server-urls/) + * use webpack.DefinePlugin + * Be sure to quote the urls - *'"url"'* + + +* Using @ to refer to src folder. + * [Use @ in path](https://stackoverflow.com/questions/42749973/es6-import-using-at-sign-in-path-in-a-vue-js-project-using-webpack) + resolve: {alias: {'@': resolve('src')} } diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/xstate.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/xstate.md new file mode 100644 index 00000000..01e0e6d5 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/javascript/xstate.md @@ -0,0 +1,14 @@ +--- +title: xstate +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# State Machines +## Resources +* [StateCharts](https://statecharts.github.io/) +* [Redux apps with state charts](https://www.freecodecamp.org/news/how-to-model-the-behavior-of-redux-apps-using-statecharts-5e342aad8f66/) +## Testing +* @xstate/tesy +* simulato - gannettdigital.github.io/simulato/ +* GraphWalker - graphwalker.github.io diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/styleguide.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/styleguide.md new file mode 100644 index 00000000..6655a866 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/front_end/styleguide.md @@ -0,0 +1,106 @@ +--- +title: styleguide +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Styleguide Notes + +## CSS/SCSS +* Resources + * [CSS Architecture](http://bradfrost.com/blog/post/css-architecture-for-design-systems/) + * [CSS Style Guide](https://cssguidelin.es) + * [Thoughtful CSS Architecture](https://seesparkbox.com/foundry/thoughtful_css_architecture) + +``` +There are only two hard things in Computer Science: cache invalidation and naming things. +-- Phil Karlton +``` + +### Why? +* Working on a team. +* Working on multiple projects and being able to understand the project when you come back to it. +* Keep CSS maintainable. +* Keep stylesheets scalable. +* Documentation for the next developer on the system. Easier to transfer to another developer. Not required to be a mind reader anymore. + * Code as comments have failed. + +### CSS/SCSS Architecture & Styleguide +* Suggestions + 1. Modular - separation between components + 1. Legible - easy to read (think Python pep8) + 1. Clarity over succinctness - clear rather than clever. + 1. Flat - naming not too long + 1. Avoid conflicts - namespacing for components to avoid conflicts + +* Naming convention + * `.cn-{company-name}` - global company name space. Company name not necessary if specific company + * `.c-` - component `.ui` - component css `.c-ui-slider` + * `.l-` - layout item - `.l-grid-6` + * `.is-` or `.has-` - state of the item + * `.js-` - JavaScript targeting. No style associated. Used for JS targeting (click, etc.) + +* BEM + * Block - Element - Modifier + * `.cn-c-card__title` - Block is *.cn-c-card* and Element is *__title* + * `.cn-c-alert--error` - Block *.cn-c-alert* and modifier *--error* + +* Organization + * Base styles + * Rules for bare elements. Like normalizer. Keep it minimal + * Objects + * Focus on structure and layout. No decorative styles. + * Components + * Discrete, self-contained units of UI. Button or a carousel. Needs to be self contained. Drop anywhere on a page and it maintains its structure and design. (Name spacing) + * State + * Modify the state of a component (selected/not selected), open/close. Rather than adding or removing classes with JS, just change the state class. + * Themes + * Alter component (page) to use unique colors, fonts and decorations. Perception rather than structure. Entire page or just a component. + * Utilities + * Single purpose styling rule. Created for reuse. Minor changes to an existing component without changing the component. Make a specific instance of a component with a bold title rather than italic title for example. + * JavaScript Hooks + * Decouple js-hook classes from styling classes. Disconnect the tie between the two. + * File organization + 1. Settings: Variables and other settings + 1. Tools: Custom functions and mixins + 1. Generic: Base styles + 1. Elements - Element defaults + 1. Objects - layout and structure + 1. Components - individual components + 1. Overrides - Final rules that might overrule previous rules. + +* SCSS rules + * Limit nesting to 3 layers deep + * What to nest + * Modifiers of style block + * `.cn-c-alert { border: 1px solid gray; &--error { border: 1px solid red;}}` + * Media queries + * Parent selectors + * All rules for a component in one location + * States + * Component states in one location. `hover`, `focus` and `active` states included. + * Use variables when values are used more than once. + +## Forms +* [Design Better Forms](https://uxdesign.cc/design-better-forms-96fadca0f49c) + * Single column forms + * Top align labels + * Group labels with their inputs (put space between inputs) + * Show all options if under 6 options + * Resist using placeholders as labels. + * Options and checkboxes should be placed under each other. + * Make Call-To-Actions explicit + * Specify inline-errors for forms. + * Ditch * and denote optional fields excplicitly + * Group related information. +* [Web From Usability: Top 10 Recommendations](https://www.nngroup.com/articles/web-form-design/) + * Keep it short + * Group related labels and fields + * Fields in single column + * Use logiical sequencing + * Avoid placeholder text + * Match fields to type and size of input (ie. zip code field should be small) + * Distinguish between optional and required fields (explicit about what is optional) + * Explain input or formatting requirements + * Avoid reset, clear buttons. At least reduce visually prominence. + * Provide visible and specific error messages. diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/storybook/tutorial.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/storybook/tutorial.md new file mode 100644 index 00000000..1be6c9be --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/storybook/tutorial.md @@ -0,0 +1,103 @@ +--- +title: tutorial +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Storybook + +## About + +- [Storybook](https://storybook.js.org/) +- [Examples](https://storybook.js.org/docs/examples/) +- [Mirage](https://miragejs.com/) +- [Microsoft Playwright](https://github.com/microsoft/playwright) +- [TypeScript](https://www.typescriptlang.org/) +- [Jest](https://jestjs.io/) + +### Create a component + +```jsx +import { React } from "react"; +``` + +## Doing the Storybook Tutorial [Tutorial](https://www.learnstorybook.com/intro-to-storybook/react/en/get-started/) + +### Notes + +- [Storybook on medium](https://medium.com/storybookjs) + +### Updates + +- Storybook with main.js - [Declarative Storybook Configuration](https://medium.com/storybookjs/declarative-storybook-configuration-49912f77b78 + +### Setup + +- Had to remove the global react app. Storybook requires the latest version of the create-react-app - [github issue](https://github.com/storybookjs/storybook/issues/9243) + +* `yarn global remove create-react-app` worked to actually remove react cli. +* Trying to make this work. +* Using create react app - Storybook 3.5 + - `npx -p @storybook/cli sb init --type react_scripts` +* Run storybook and react app + ** Storybook - port 9009 + ** React - port 3000 (will conflict with Rails) + +* Checkout out the necessary resources \* Resources for the tutorial - https://github.com/chromaui/learnstorybook-code.git - Need the `font` and `icon` directories. + - Checking out the remote files - https://stackoverflow.com/questions/3334475/git-how-to-update-checkout-a-single-file-from-remote-origin-master +* Url for personal github in .git/config "url = git@personal:catenare/TaskBox.git" + +``` +[remote "origin"] + url = git@personal:catenare/TaskBox.git + fetch = +refs/heads/*:refs/remotes/origin/* + +``` + +```sh +git remote add learn https://github.com/chromaui/learnstorybook-code.git +git fetch learn +git restore -s learn/master -- src/index.css +git restore -s learn/master -- public/font +git restore -s learn/master -- public/icon +``` + +- Update package.json to run storybook on a different port and without going to the browser. + +```json +"storybook": "start-storybook -p 9009 -s public --ci" +``` + +### Tutorial + +#### Simple Component + +- href attribute is required + +```jsx +{ + state !== "TASK_ARCHIVED" && ( + onPinTask(id)}> + + + ); +} +``` + +#### Screens + +- InboxScreen.js - Import PureTaskList rather than TaskList +- Update App.test.js to no longer look for the test link. + +```js +test("render taskbox screen", () => { + const { getByText } = render(); + const linkElement = getByText(/Taskbox/i); + expect(linkElement).toBeInTheDocument(); +}); +``` + +### Testing using chromatic +* Start chromatic without starting storybook - `--do-not-start` + + diff --git a/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/web_dev.md b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/web_dev.md new file mode 100644 index 00000000..365e831f --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Developer Notes/web_development/web_dev.md @@ -0,0 +1,190 @@ +--- +title: web_dev +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Web Development Tools + +## Resources +* [Front End Beginner Resources](https://github.com/thedaviddias/Resources-Front-End-Beginner) +* [By People Web Assets Resources](https://www.bypeople.com) + +# Asset management for web +## Cloudinary - free account available +* [Cloudinary](https://cloudinary.com/console) + +## ClipArt +* [Open ClipArt](https://openclipart.org/) + +## Other +* [SVG Playing Cards](http://svg-cards.sourceforge.net/) + +# Tools +* [Emmet](http://emmet.io) - Code editor helper + * Expand html shortcuts + * Can really reduce the amount of typing necessary to to create a page. +* [browser-sync](https://browsersync.io/) - Basic local server. Avoid the hassle of Webpack + * `browser-sync start --server --directory --files "**/*"` +* **Images** + * [Placement Images List](https://www.hanselman.com/blog/TheInternetsBestPlaceholderImageSitesForWebDevelopment.aspx) + * [Hold It](http://www.placehold.it) +* **Prototyping tools** + * [Random User Generator](https://randomuser.me/) - get list of users. + * [UIFaces](http://uifaces.com/) - Faces for user interfaces + * [CSS Flat Mobile Devices](https://marvelapp.github.io/devices.css/) - Prototype devices in css. + * [Lists](http://www.lists.design/) - Content for prototyping +* **Combine JS files** + * [Requirejs](http://requirejs.org/) - Using Webpack now + * For r.js to work (without explicit path) `npm install -g requirejs` +* **Generating Color Palettes** + * [Colors Palette Generator](http://www.cssdrive.com/imagepalette/index.php) + * [Canva Color Palette](https://www.canva.com/color-palette/) + * [Pictaculous](http://www.pictaculous.com/) + * [Color Explorer](http://www.colorexplorer.com/imageimport.aspx) - can upload an image + +# CSS and SCSS +* Using sassc and libsass +* [libSass](https://github.com/sass/libsass) +* Export the library location so node-sass can use it. +* Compiling compass sass with sass c library. + * *sass --compass sass/styles.scss test,css* - seems to read the compass config.rb file to find paths. +* Maintainable CSS + * [BEM (block, element, modifier) methodology](https://en.bem.info/methodology/quick-start/) +* CSS Loaders + * [CSS Spin](https://webkul.github.io/csspin/) + * [CSS Loader](http://www.raphaelfabeni.com.br/css-loader/) + * [SVG Loaders](http://samherbert.net/svg-loaders/) + * [CSS Loader animations](https://connoratherton.com/loaders) + +## Resources +* [Fixed Menu](https://www.w3schools.com/howto/howto_css_fixed_menu.asp) - Fix menu to the top +* [CssDB](http://cssdb.co/) +* [Animista](http://animista.net/play) + +* [Atomic CSS](https://acss.io/) - css for component-based frameworks + +## Seo +* [MegaTags](https://megatags.co/) - OpenGraph tag generator + +## Linting CSS and SCSS +* Install stylelint, stylelint-config-standard + * `npm install stylelint stylelint-config-standard` +* Add *stylelint* in *package.json* +```json + "stylelint": { + "plugins": [ + "stylelint-scss" + ], + "extends": "stylelint-config-standard" + } +``` +### Stylelint Notes +* [stylelint-config-sass-guidelines](https://github.com/bjankord/stylelint-config-sass-guidelines) - scss stylelint rules +* [Stylelint webpack plugin](https://github.com/JaKXz/stylelint-webpack-plugin) + * `const StylelintPlugin = require('stylelint-webpack-plugin')` + * `new StylelintPlugin({syntax: 'scss', emitErrors: false, lintDirtyModulesOnly: true})` +* [stylelint](https://stylelint.io/) + * `npm install --save-dev stylelint stylelint-config-sass-guidelines stylelint-config-standard stylelint-scss stylelint-webpack-plugin` +* config in *package.json* +```json +"stylelint": { + "plugins: [ + "stylelint-scss" +} +``` +### PostCSS Notes +* Config notes: [Postcss Cli](https://www.npmjs.com/package/postcss-cli) - Config section explains *postcss.config.js* + * [Postcss Next in Webpack](https://blog.envylabs.com/webpack-2-postcss-cssnext-fdcd2fd7d0bd) - config *postcss.config.js* +## Font Awesome + +* Font Awesome icon as part of before pseudo class using scss. [StackOverflow Font Awesome Icon as CSS Content](https://stackoverflow.com/questions/20782368/use-font-awesome-icon-as-css-content) +```css +.a:after { + // Import mixin from font-awesome/scss/mixins.scss + @include fa-icon(); + + // Use icon variable from font-awesome/scss/variables.scss + content: $fa-var-exclamation-triangle; +} +``` + +## Fonts +* [Web Font Loading Recipes](https://github.com/zachleat/web-font-loading-recipes) +* [Awesome Fontstacks](http://www.awesome-fontstacks.com) - fonts that go together +* [Fonts Squirrel](https://www.fontsquirrel.com) + +## Icons - Free +* [Open Iconic](https://useiconic.com/open/) +* [Octicons](https://octicons.github.com/) +* [Entypo](http://www.entypo.com/) +* [Bytesize Icons](https://github.com/danklammer/bytesize-icons) +* [Material Icons](https://material.io/icons/) +* [Ionicons](http://ionicons.com/) +* [Dripicons](http://demo.amitjakhu.com/dripicons/) +* [Ikons](http://ikons.piotrkwiatkowski.co.uk/) +* [SmartIcons](http://glyph.smarticons.co/) +* [Feather Icons](https://feathericons.com/) - Install with `npm install feather-icons` + +### Web Framework +* [Foundation](http://foundation.zurb.com/) + * Setup a new project ```foundation new``` +* [uikit](https://getuikit.com/v2/index.html) +* [Clarity Design System](https://vmware.github.io/clarity/) + +### Templates +* [CoreUI](http://coreui.io/) - Admin template +* [flakes](http://getflakes.com/) - Design and frontend framework for dashboard. +* [Themezy](https://www.themezy.com/) +* [Templated](https://templated.co/) +* Admin tools + * [Grafana](https://grafana.com/) - analytics and monitoring visualization +* [Framework7](https://framework7.io/) - mobile web template +* [W3 Layouts](https://w3layouts.com/) +* [Freshdesign Templates](https://www.freshdesignweb.com/best-church-website-templates/) + +### Video +* [Videvo](https://www.videvo.net/) + +## How to +* **Parallax** + * [David Walsh - Used initially](https://davidwalsh.name/parallax) + * [Keith Clark](http://keithclark.co.uk/articles/pure-css-parallax-websites/) - nice 3d effect + * [w3schools demo](https://www.w3schools.com/howto/tryhow_css_parallax_demo.htm) - Tried this one + * [Pure Css](https://alligator.io/css/pure-css-parallax/) - 3d effect +* **Carousel** + * [Owl Carousel](https://owlcarousel2.github.io/OwlCarousel2/) - image strip carousel + * [Owl Carousel Fullscreen](https://codepen.io/ingvi/pen/gaOzYe) + * [Responsive Site Using Owl](http://www.creativebloq.com/web-design/build-responsive-sites-foundation-11513848) + * [Vegas Fullscreen Slideshow](http://vegas.jaysalvat.com/) + * [slick](https://kenwheeler.github.io/slick/) - scss for css + +# Web Authentication +## JWT +* [Jason Web Tokens](https://jwt.io/introduction/) + +## Rest +* Response Codes: [Response Codes](https://blog.restcase.com/rest-api-error-codes-101/) +* HTTP Status Codes: [HTTP Status Codes](http://www.restapitutorial.com/httpstatuscodes.html) +* Details: + * 200 OK + * 201 Created + * 202 Accepted + * 304 Not Modified + * 400 Bad Request + * 401 Not Authorized + * 403 Forbidden + * 404 Not Found + * 500 Internal Server Error + * 501 Not Implemented + * 503 Service Not Available + +## Web Colors +* I'm not a designer so need something very basic. + * [Web Developer Color Guide](https://www.smashingmagazine.com/2016/04/web-developer-guide-color/) + * White + * dark gray + * light gray + * Base color + * Accent color +* [Color Calculator](https://www.sessions.edu/color-calculator/) diff --git a/docs/archive/JoplinExport/Handbook/Network Setup/Arduino/Arduino Nano 33 IoT.md b/docs/archive/JoplinExport/Handbook/Network Setup/Arduino/Arduino Nano 33 IoT.md new file mode 100644 index 00000000..78e81987 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Network Setup/Arduino/Arduino Nano 33 IoT.md @@ -0,0 +1,12 @@ +--- +title: Arduino Nano 33 IoT +updated: 2021-05-16 14:46:19Z +created: 2021-05-16 14:45:27Z +latitude: -26.16342578 +longitude: 27.95106125 +altitude: 1751.1878 +--- + +Same as original nano +3.3v device +Wifi and Bluetooth diff --git a/docs/archive/JoplinExport/Handbook/Network Setup/Arduino/Install visual studio code on Raspberry pi with ub.md b/docs/archive/JoplinExport/Handbook/Network Setup/Arduino/Install visual studio code on Raspberry pi with ub.md new file mode 100644 index 00000000..add1e04e --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Network Setup/Arduino/Install visual studio code on Raspberry pi with ub.md @@ -0,0 +1,31 @@ +--- +title: Install visual studio code on Raspberry pi with ubuntu +updated: 2021-03-01 23:42:57Z +created: 2021-03-01 23:14:38Z +--- + +## Install visual studio code on Raspberry pi with ubuntu +* https://code.visualstudio.com/docs/setup/raspberry-pi-os +## VS Code Arduino Extension - https://github.com/microsoft/vscode-arduino +## Node serialport - https://github.com/serialport/node-serialport +### Docs for node serialport - https://serialport.io/docs/guide-installation#ubuntudebian-linux + +## Remove visual studio code +* https://www.raspberrypi.org/blog/coding-on-raspberry-pi-remotely-with-visual-studio-code/ +## Arduino Extension for visual studio code +* https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.vscode-arduino +* Arduino CLI - https://arduino.github.io/arduino-cli/latest/commands/arduino-cli_sketch/ +* https://docs.platformio.org/en/latest/ + +https://serialport.io/docs/guide-installation#ubuntudebian-linux + +### How to get it to upload +* `arduino-cli board list` - List of boards and ports attached. +* Edit *arduino.json* - ` "port": "/dev/ttyACM0",` +* Got it to work to at least upload files. +* Starter Kit documents - https://www.elecrow.com/download/Starter%20Kit%20for%20Arduino(user%20manual).pdf +* Other docs: https://www.makerspaces.com/simple-arduino-projects-beginners/ +* https://www.digikey.com/en/maker/projects/making-the-programming-of-arduino-easier-with-a-different-ide/33bf0b51eb54464194db70722c68d144 +## Details +* Serial port: /dev/ttyACM0 +* \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Network Setup/Basic Home Network.md b/docs/archive/JoplinExport/Handbook/Network Setup/Basic Home Network.md new file mode 100644 index 00000000..b237fe83 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Network Setup/Basic Home Network.md @@ -0,0 +1,33 @@ +--- +title: Basic Home Network +updated: 2021-04-23 12:19:35Z +created: 2021-03-20 20:59:11Z +--- + +* IP Range: 192.168.100.0/24 +* Devices: + * Raspberry Pi 4/8gb Unbuntu Server: + * IP Address: 192.168.100.120 + * User: ubuntu + * Raspberry Pi Zero Pihole: + * IP Address: 192.168.100.100 + * User: pi + * Raspberry Pi Zero Mydev: + * IP Address: 192.168.100.125 + * User: pi + * Raspberry Pi Zero Mydev2: + * IP Address: 192.168.100.90 + * User: pi  +* External network access + * IP: 105.209.35.12 + * DDNS: sahomeserver.duckdns.org + * Ports + * External: 2022 + * Internal: 192.168.100.120:22 (Rasbperry Pi 8gb Server) +* Connecting via ssh: `ssh -p 2022 ubuntu@sahomeserver.duckdns.org` +* Need to configure home assistant +## Network Overview + + +![HomeNetowrk.png](../../_resources/HomeNetowrk.png) + diff --git a/docs/archive/JoplinExport/Handbook/Network Setup/Raspberry Pi/Raspberry PI Admin.md b/docs/archive/JoplinExport/Handbook/Network Setup/Raspberry Pi/Raspberry PI Admin.md new file mode 100644 index 00000000..bc6b29ca --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Network Setup/Raspberry Pi/Raspberry PI Admin.md @@ -0,0 +1,122 @@ +--- +title: Raspberry PI Admin +updated: 2021-06-20 17:05:16Z +created: 2021-03-07 14:27:28Z +--- + +## Rclone +### Copy files from storage hdd to OneDrive +* Using rclone - https://rclone.org +#### Install rclone on dev pi +* Will need to get the token on a machine with a browser +* rclone config for OneDrive - https://rclone.org/onedrive/ +* `rclone authorize onedrive` +* `sudo apt install rclone` +* `rclone config` + * n - New remote + * Microsoft OneDrive - Type of storage + * Microsoft App Client ID - leave blank + * Microsoft App Client Secret - leave blank + * Choose Microsoft Cloud Global + * Choose - OneDrive for Personal or Business + * Select the drive you want to use (0 in my case) + +* Quota available + * `rclone about OneDrive: ` +``` +Total: 1.005T +Used: 84.698G +Free: 944.302G +Trashed: 91.924k +``` + +#### Mount external hdd on Ubuntu +* `lsblk` - see if drive is listed +``` +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +loop0 7:0 0 48.5M 1 loop /snap/core18/1883 +loop1 7:1 0 48.9M 1 loop /snap/core18/1990 +loop2 7:2 0 63M 1 loop /snap/lxd/19573 +loop3 7:3 0 63M 1 loop /snap/lxd/19390 +loop4 7:4 0 27M 1 loop /snap/snapd/11043 +loop5 7:5 0 26M 1 loop /snap/snapd/8543 +loop6 7:6 0 104.3M 1 loop /snap/docker/800 +sda 8:0 0 931.5G 0 disk +├─sda1 8:1 0 200M 0 part +└─sda2 8:2 0 931.2G 0 part +mmcblk0 179:0 0 59.5G 0 disk +├─mmcblk0p1 179:1 0 256M 0 part /boot/firmware +└─mmcblk0p2 179:2 0 59.2G 0 part / +``` + +* Want to mount sda2 /dev/sda2 +* `sudo fdisk -l` - Type of the devices +``` +Disk /dev/sda: 931.49 GiB, 1000170586112 bytes, 1953458176 sectors +Disk model: My Passport 0820 +Units: sectors of 1 * 512 = 512 bytes +Sector size (logical/physical): 512 bytes / 512 bytes +I/O size (minimum/optimal): 512 bytes / 512 bytes +Disklabel type: gpt +Disk identifier: A17712B3-71DC-4432-81AC-17AC305F1D4D + +Device Start End Sectors Size Type +/dev/sda1 40 409639 409600 200M EFI System +/dev/sda2 409640 1953195991 1952786352 931.2G Apple HFS/HFS+ +``` + +* `mkdir ~/BackupDisk` +* `sudo mount /dev/sda2 ~/BackupDisk` - Able to mount Apple HFS systems without additional parameters + +* HFS drive as rw - does not work for journalled file + * https://askubuntu.com/questions/332315/how-to-read-and-write-hfs-journaled-external-hdd-in-ubuntu-without-access-to-os + * Try to setup as RW + * `sudo mount -t hfsplus -o force,rw /dev/sda2 ~/BackupDisk` + * `sudo fsck.hfsplus /dev/sda2` + +* Want to copy **~/StorageDisk/images** to **OneDrive/BackupDrive** +* Start tmux on Raspberry PI - `tmux` +* `rclone copy ~/BackupDisk/images OneDrive:BackupDrive -Pv` +* Will log in later to see the progress +## Format a Harddrive +* https://tecadmin.net/format-usb-in-linux/ +* `sudo mkfs.ext4 /dev/sda` +## Update bootloader +### Raspberry PI Update +* Update Raspberry pi bootloader + * https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md + * `sudo apt install libraspberrypi-bin` + * `vcgencmd bootloader_version` - check bootloader version + * `sudo apt install rpi-eeprom -y` - program to install eeprom upgrade + * `sudo rpi-eeprom-update` - see if update available + * `sudo rpi-eeprom-update -a` - update eeprom + * Update boot config - https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md + * `sudo -E rpi-eeprom-config --edit` + * Changed **BOOT_ORDER** to boot **0x5** for USB2.0 boot +## Setup SSH authentication +### What worked - For Lightsail Server +* `ssh-keygen` - created default key pair +* `ssh-add LightsailDefaultKey-eu-central-1.pem` +* `ssh-copy-id -i ~/.ssh/id_rsa ubuntu@api.paseo.org.za` - copied the file over +* `ssh-copy-id -i ~/.ssh/id_rsa ubuntu@192.168.100.120` - Raspberry PI Server +* `ssh-copy-id -i ~/.ssh/id_rsa pi@192.168.100.100` - PiHole server and UPS monitor +## Installing Docker and Portainer on Ubuntu +* https://snapcraft.io/install/docker/ubuntu +* https://documentation.portainer.io/v2.0/deploy/ceinstalldocker/ - portainer + * `docker volume create portainer_data` + * `docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce` +* Home Assistant - https://www.home-assistant.io/installation/raspberrypi#install-home-assistant-container +* `docker volume create homeassistant_data` +``` +docker run --init -d --name homeassistant -p 8123:8123 --restart=unless-stopped -v /etc/localtime:/etc/localtime:ro -v homeassistant_data:/config --network=host homeassistant/raspberrypi4-homeassistant:stable +``` +* Add node-red +* https://nodered.org/docs/getting-started/docker#running-headless +* `docker volume create node_red_data` + * `docker run -d -p 1880:1880 -v node_red_data:/data --name hanodered nodered/node-red:latest` + +* Free ddns service. Signed in with sfbushie@gmail.com with google +* https://www.duckdns.org/domains +* `sahomeserver.duckdns.org` +* Waveshare Display - https://www.waveshare.com/wiki/7.9inch_HDMI_LCD +* https://www.waveshare.com/product/displays/lcd-oled/lcd-oled-1/7.9inch-hdmi-lcd.htm \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Network Setup/Silence your UPS.md b/docs/archive/JoplinExport/Handbook/Network Setup/Silence your UPS.md new file mode 100644 index 00000000..4e41875a --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Network Setup/Silence your UPS.md @@ -0,0 +1,63 @@ +--- +title: Silence your UPS +updated: 2021-04-08 02:58:43Z +created: 2020-01-11 07:12:57Z +--- + +# Silence your UPS - +* Now using a Raspberry PI Zero +* `ssh pi@192.168.100.100` +## Disable the beep +``` +upscmd myups@localhost beeper.disable +Username: admin +Pasword: pass +``` +## Setup +### Check that UPS is visible via UPS +### Install the Network UPS Tools - [Network Ups Tools](https://networkupstools.org) +* Verify that your UPS is supported - https://networkupstools.org/stable-hcl.html +* Connect your UPS to your computer using a USB cable. +* From the Virtual Machine Menu, See if your UPS is listed under Devices -> USB +/Capture USB.png +* `apt-get install nut` - install nut. +#### Configure Network UPS Tools +* [Detailed NUT Configuration](https://wiki.ipfire.org/addons/nut/detailed) +* [HOWTO:](http://tedfelix.com/software/nut-network-ups-tools.html) +* Configure MODE - **nut.conf** +``` +MODE=standalone +``` + +* Configure the UPS setup - **ups.conf** + +``` +[myups] + driver = usbhid-ups + port = auto + desc = "My ups" +``` + +* Test with `upsdrvctl start` +* Configure the daemon **upsd.conf** + +``` +LISTEN 127.0.0.1 3493 +``` + +* Configure **upsd.users** + +``` +[admin] + password = pass + actions = SET + instcmds = ALL + upsmon master +``` + +* Start daemon - `upsd` +* Read status - `upsc myups@localhost` +* See which commands are available - `upscmd -l myups@localhost` +* Disable the Beep - [Disable the beep from your device](https://linux-tips.com/t/disabling-ups-beep-under-linux/592) + + \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Notes.md b/docs/archive/JoplinExport/Handbook/Notes.md new file mode 100644 index 00000000..68da7b9d --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Notes.md @@ -0,0 +1,37 @@ +--- +title: Notes +updated: 2021-07-03 11:10:06Z +created: 2021-06-18 11:19:24Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +* https://www.dailymaverick.co.za/article/2021-06-18-the-city-of-golds-elegant-garagiste-winery/ +## Sites to follow/review +* https://hashnode.com/about +* https://devdocs.io +* https://devdocs.io/angular/ +* https://www.tensorflow.org/lite/guide/python +* https://alligator.io/ +* https://readme.so - Readme Formatter +* https://builtwith.com +## Saturday 3 July 2021 +* https://github.com/scanapi/scanapi - Given an API specification, written in YAML/JSON format, ScanAPI hits the specified endpoints, runs the test cases, and generates a detailed report of this execution - which can also be used as the API documentation itself. +* https://github.com/collerek/ormar - The ormar package is an async mini ORM for Python, with support for Postgres, MySQL, and SQLite. +* https://github.com/bregman-arie/devops-exercises - This repo contains questions and exercises on various technical topics, sometimes related to DevOps and SRE :) +* https://realpython.com/podcasts/rpp/66/ - Episode 66: Practicing Python With CSV Files and Extracting Values With "filter()" +* https://testdriven.io/blog/built-in-permission-classes-drf/ - Built-in Permission Classes in Django Rest Framework +* https://sixfeetup.com/company/news/pwc2021-videos-released - Talks and Tutorials from 2021 Python Web Conference Released +* https://javascript.plainenglish.io/8-web-application-architecture-principles-every-software-engineer-must-know-57eb1d8d8028 +* https://simpleisbetterthancomplex.com/tutorial/2021/06/27/how-to-start-a-production-ready-django-project.html - Template for django +### Random Notes +* How microteams change the way we collaborate again + * Pick a small problem + * Form a small team + * Discuss + * Do the work + * Mark as done + * Disband + * Go home + * Repeat the next day diff --git a/docs/archive/JoplinExport/Handbook/Quotes.md b/docs/archive/JoplinExport/Handbook/Quotes.md new file mode 100644 index 00000000..cb3543ea --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Quotes.md @@ -0,0 +1,11 @@ +--- +title: Quotes +updated: 2021-06-28 06:38:14Z +created: 2021-06-28 06:37:11Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +* Goal is something that is measureable - Sidehustle pro +* \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Sabbn Client Setup/How to setup gmail with outlook 2007 - gmail confi.md b/docs/archive/JoplinExport/Handbook/Sabbn Client Setup/How to setup gmail with outlook 2007 - gmail confi.md new file mode 100644 index 00000000..d20a2f8f --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Sabbn Client Setup/How to setup gmail with outlook 2007 - gmail confi.md @@ -0,0 +1,176 @@ +--- +title: How to setup gmail with outlook 2007 - gmail configuration for outlo +updated: 2021-06-10 10:34:54Z +created: 2021-06-10 10:34:54Z +source: >- + https://www.webdesignerexpress.com/blog/how-to-setup-gmail-with-outlook-2007-gmail-configuration-for-outlook.html +--- + +[](https://www.webdesignerexpress.com/) + + + +[**Proud USA Company**](https://www.webdesignerexpress.com/blog/web-design-usa.html) + +[**Hablamos Español**](https://www.webdesignerexpress.com/blog/landing/pagina-web-miami.html) + +[**Falamos Português**](https://www.webdesignerexpress.com/blog/landing/criacao-de-website-299.html) + +[**305.386.9003**](tel:305.386.9003) + +- [Our Work](https://www.webdesignerexpress.com/blog/portfolio) +- [Services](https://www.webdesignerexpress.com/blog/services.html) +- [Prices](https://www.webdesignerexpress.com/blog/prices.html) +- [Blog](https://www.webdesignerexpress.com/blog/blog) +- [FAQ](https://www.webdesignerexpress.com/blog/faqs.html) +- [Contact](https://www.webdesignerexpress.com/blog/contact.html) + +# Web Design **Latest Trends** & **Help Articles** + +[General](https://www.webdesignerexpress.com/blog/blog "General") + +[Web Design](https://www.webdesignerexpress.com/blog/blog/web-design "Web Design") + +[E-commerce](https://www.webdesignerexpress.com/blog/blog/ecommerce "E-commerce") + +[Mobile](https://www.webdesignerexpress.com/blog/blog/mobile "Mobile") + +[Internet Marketing](https://www.webdesignerexpress.com/blog/blog/internet-marketing "Internet Marketing") + +[Technology](https://www.webdesignerexpress.com/blog/blog/technology "Technology") + +2. [Blog](https://www.webdesignerexpress.com/blog) +3. [Technology](https://www.webdesignerexpress.com/blog/technology) +4. [How to setup gmail with outlook 2007 - gmail configuration for outlook](https://www.webdesignerexpress.com/blog/how-to-setup-gmail-with-outlook-2007-gmail-configuration-for-outlook.html) + +## How to setup gmail with outlook 2007 - gmail configuration for outlook + +by [JL Garcia](https://www.webdesignerexpress.com/blog/blog/author/JL+Garcia) on Mar 10, 2009 Category: [Technology](https://www.webdesignerexpress.com/blog/blog/technology) (422117 Views) + +* * * + +[](https://www.webdesignerexpress.com/uploads/blog/1f0e3dad99908345f7439f8ffabdffc4/email-tips.jpg) + +### To configure Outlook 2007 for your Gmail address: + +1. [Enable POP in your email account](https://mail.google.com/support/bin/answer.py?answer=13273). Don't forget to click **Save Changes** when you're done. +2. Open Outlook. +3. Click the **Tools** menu, and select **Account Settings...** +4. On the **E-mail** tab, click **New...** +5. If you are prompted to **Choose E-mail Service**, select **Microsoft Exchange**, **POP3**, **IMAP**, or **HTTP**, and click **Next**. +6. Fill in all necessary fields to include the following information: + +**Your Name:** Enter your name as you would like it to appear in the From: field of outgoing messages. +**Email Address:** Enter your full Gmail email address (*username@gmail.com*). Google Apps users, enter your full address in the format *username@your_domain.com*. +**Password:** Enter your email password. + +**Manually configure server settings or additional server types:** Leave this option unchecked if you want to automatically configure Outlook 2007. If you want to manually configure Outlook 2007, check this box now. Google Apps users should configure manually as follows. + +![Enter name, email address, and password](../../_resources/gmail_86374a_en_19b724f072ad4e4197f7d8d7ab3c389a.gif) + +1. Click **Next**. If you are configuring Outlook 2007 automatically, you're done! Just click **Finish**. + +![Successful Configuration](../../_resources/gmail_86374b_en_6f3e5dacbc1e4a2f921096369267b426.gif) + +1. If you are configuring Outlook 2007 manually, select **Internet E-mail** and click **Next**. +2. Verify your **User Information**, and enter the following additional information: + +**Server Information** + +**Account Type:** POP3 + +**Incoming mail server:** [pop.gmail.com](http://pop.gmail.com) (Google Apps users, enter the server names provided, don't add your domain name in these steps) + +**Outgoing mail server (SMTP):** [smtp.gmail.com](http://smtp.gmail.com) + +**Logon Information** + +**User Name:** Enter your Gmail username (including @*[gmail.com](http://gmail.com)*). Google Apps users, enter your full address in the format *username@your_domain.com* + +**Password:** Enter your email password. + +**Require logon using Secure Password Authentication (SPA):** Leave this option unchecked. + +![Account Settings](../../_resources/gmail_86374c_en_b9ae094ee94d4ee6b4241773c89886cf.gif) + +1. Click the **More Settings...** button, and select the **Outgoing Server** tab. +2. Check the box next to **My outgoing server (SMTP) requires authentication** and select **Use same settings as my incoming mail server.** + +![Outgoing Server Tab](../../_resources/gmail_86374d_en_436ab3b3ba1a463fbc9285fd59cfc05a.gif) + +1. Click the **Advanced tab**, and check the box next to **This server requires an encrypted connection (SSL)** under **Incoming Server (POP3)**. +2. In the **Outgoing server (SMTP)** box, enter 587, and select **TLS** from the drop-down menu next to **Use the following type of encrypted connection:**. + +![Advanced Tab](../../_resources/gmail_86374e_en_8bd86c15fe654046905ccca2995ff37f.gif) + +1. Click **OK**. +2. Click **Test Account Settings...** After receiving 'Congratulations! All tests completed successfully', click **Close.** +3. Click **Next**, and then click **Finish.** + +**Congratulations!** You're done configuring your client to send and retrieve Gmail messages. + +* * * + +Tags: [how to setup gmail with outlook 2007](https://www.webdesignerexpress.com/blog/blog/tag/how-to-setup-gmail-with-outlook-2007) [gmail](https://www.webdesignerexpress.com/blog/blog/tag/-gmail) + +### Related Articles + +1. [What to know before launching my website.](https://www.webdesignerexpress.com/blog/blog/what-to-know-before-launching-my-website.html "What to know before launching my website.") +2. [Why and How my Website Got Hacked?](https://www.webdesignerexpress.com/blog/blog/why-and-how-my-website-got-hacked.html "Why and How my Website Got Hacked?") +3. [Web design for startups - Learn why you need a website](https://www.webdesignerexpress.com/blog/blog/web-design-for-startups-learn-why-you-need-a-webs.html "Web design for startups - Learn why you need a website") +4. [CSS glyphs and other special characters for HTML, javascript and CSS](https://www.webdesignerexpress.com/blog/blog/css-glyphs-and-html-special-characters.html "CSS glyphs and other special characters for HTML, javascript and CSS") +5. [Custom Web Development To Make the Difference for a Country](https://www.webdesignerexpress.com/blog/blog/custom-web-development-to-make-the-difference-html.html "Custom Web Development To Make the Difference for a Country") + + + +* * * + +\* Let us keep you updated with the latest new tips, tech news and helpful articles! + +Subscribe Now + +#### Subscribe to our mailing list + +\* Your privacy is very important to us.  You email will never be share with any 3rd private party.  We guarantee that all email from us will be valuable information we believe will be helpful to you or your business. We never send spam. + +## What our (Partners/Customers) **are saying** + +This is my second time hiring Web Designer Express. I want to thank Gus and JP for doing a great job creating my website. I personally endorse them to anymore seeking assistance with creating a website. I defiantly will use them again with my next project :) Again gentlemen, thanks for all your help making my website come to life! + +**Michael Rose, Primetime Car Wash** +**Miami, Florida - USA** + +Helpful Navigation Links + +[Home](https://www.webdesignerexpress.com/) . [Company](https://www.webdesignerexpress.com/blog/company.html) . [Our Work](https://www.webdesignerexpress.com/blog/portfolio) . [Services](https://www.webdesignerexpress.com/blog/services.html) . [Prices](https://www.webdesignerexpress.com/blog/prices.html) . [Blog](https://www.webdesignerexpress.com/blog/blog) . [Reviews](https://www.webdesignerexpress.com/blog/reviews) . [Graphics Design](https://www.webdesignerexpress.com/blog/services/miami-graphics-design.html) . [Contact](https://www.webdesignerexpress.com/blog/contact.html) . [Sitemap](https://www.webdesignerexpress.com/blog/sitemap) + +#### **Proudly located in the Miami, FL** + +##### **Web Designer Express** + +5600 SW 135 Ave, Suite 105 +Miami, FL 33183 + +Rated **5.0** stars on Google+ +based on **74** reviews + +[**Get Directions**](https://www.google.com/maps/place/Web+Designer+Express/@25.7141883,-80.4154075,17z/data=!3m1!4b1!4m2!3m1!1s0x88d9c07d214b9023:0x5f1f92752bb309fb) + +Contact **Sales** +**Phone: [305.386.9003](tel:3053869003)** + +Contact **Support** +**Phone: [305.386.9003](tel:3053869003)** +**After Hours: [(954)226.7412](tel:9542267412)** + +Toll **Free** +**Phone: [1.866.405.2040](tel:18664052040)** + +[](https://www.webdesignerexpress.com/) + +Become a part of our family +Speak to a Specialist + +#### [**305.386.9003**](tel:305.386.9003) + +© 2021 Miami Web Design Company / Web Designer Express, All rights reserved. [Privacy](https://www.webdesignerexpress.com/blog/privacy.html) | [Terms and Conditions](https://www.webdesignerexpress.com/blog/terms.html) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Sabbn Client Setup/Setting up your Gmail Account in Microsoft Outlook.md b/docs/archive/JoplinExport/Handbook/Sabbn Client Setup/Setting up your Gmail Account in Microsoft Outlook.md new file mode 100644 index 00000000..f946ab8a --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Sabbn Client Setup/Setting up your Gmail Account in Microsoft Outlook.md @@ -0,0 +1,187 @@ +--- +title: Setting up your Gmail Account in Microsoft Outlook 2007 +updated: 2021-06-10 10:35:30Z +created: 2021-06-10 10:35:30Z +source: https://www.skynetindia.info/configure-gmail2007.html +--- + +[](https://www.skynetindia.info/ "Skynet Technologies") + +- [Request For Quote](https://www.skynetindia.info/inquiry.html "Request For Quote") + +- [Website Design](https://www.skynetindia.info/website-design.html "Website Design") +- [Website Maintenance](https://www.skynetindia.info/website-maintenance.html "Website Maintenance") +- [Web Development](https://www.skynetindia.info/web-development-india.html "Web Development") +- [SEO Services](https://www.skynetindia.info/seo-packages.html "SEO Services") +- [Mobile App Development](https://www.skynetindia.info/mobile-application-development.html "Mobile App Development") +- Company +- [Contact](https://www.skynetindia.info/contactus.html "Contact Web Design Company India") + +## **Setting Up your Gmail Account in Microsoft Outlook 2007** + +Let Us Help You To Setting Up Your E-Mail Account In Outlook! + +![tips to configure outlook](../../_resources/tips-to-configure-outlook_5ae1a7f3e3e94b9687da65e8.jpg "tips to configure outlook") + +1. [Home](https://www.skynetindia.info/index.html "Home") +2. [Setting up your E-mail Account in Outlook](https://www.skynetindia.info/tips-to-configure-outlook.html "Tips to configure Outlook") +3. Gmail Account in Microsoft Outlook 2007 + +# Setting up your Gmail Account in Microsoft Outlook 2007 + +This tutorial shows you how to set up Microsoft Outlook 2007 to work with your Gmail account. This tutorial focuses on setting up Microsoft Outlook 2007, but these settings are similar in other versions of Microsoft Outlook Express. You can set up previous versions of Microsoft Outlook Express by using the settings in this tutorial. + +## To Set Up Your Gmail Account in Microsoft Outlook 2007 + +First we need to make sure your Gmail account is set up to enable POP (Post Office Protocol). In Gmail just go to mail settings and choose the Forwarding and POP tab. Click on one of the options to enable POP. + +![Gmail Account Settings](../../_resources/07gmail1_1ca761fd351b4e25acb09d276711b75e.jpg) + +Update: Note the drop-down that says what to do when mail is accessed with POP3. Please do NOT change this to "Delete". + +Click on Save Changes Button + +**1\.** Now open up Outlook 2007 and go to Tools \ Account Settings. + +![Account Settings](../../_resources/07gmail01_7aa1f234c4484746a5bc562f3da0ff6f.jpg) + +**2\.** Under Account Settings choose the E-mail tab and click on New. + +![Email Tab](../../_resources/07gmail02_129f75229de14ce09626f7184db93ef3.jpg) + +**3\.** Enter in all of your Gmail account information \*\*make sure there is no check next to Manually configure server.\*\* You do not have to go through these extra steps. Just click on Next. + +![Acount Information](../../_resources/07gmail03_608dceea3846405bb117291facd2569b.jpg) + +**4\.** After Outlook has successfully configured the e-mail server settings you can go ahead and click Finish. + + + +**Go back to your inbox and hit send/receive and you are done!** + +### If this doesn't work + +If you are having problems with the automatic setup, you'll need to choose the "Manually Configure Server" option, and then fill in your details as follows: + + + +Here are the important settings: + +- **Email Address:** Your full Gmail address +- **Incoming Mail Server:** pop.gmail.com +- **Outgoing Mail Server:** smtp.gmail.com (Note: If you have problems with sending email you may have to check with your internet provider, as they often require you to send email through their system. +- **User Name:** Your full Gmail email address + +Now you'll need to click on the More Settings. button, and check the box on the Outgoing Server tab for "My outgoing server requires authentication" + + + +Now switch to the Advanced tab, and check the box that says "This server requires an encrypted connection", then change the fields to match these values: + +- **Incoming Server:** 995 +- Check the box for "This server requires an encrypted connection" +- **Outgoing Server (SMTP):** 587 +- Change the type of encrypted connection to Auto, or use TLS if you have problems. + + + +Close the dialogs and go through the rest of the wizard and everything should be working. + +Previous Slide Next Slide + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[](https://www.drupal.org/skynet-technologies "Top Web Development Company") + +[](https://www.oscommerce.com/Services&developers "Oscommerce Certified USA Partner") + + + + + + + + + + + + + + + + + + + + + +Subscribe to Our Newsletter! + +Join us to stay updated with our latest blog updates, marketing tips, service tips, trends, news and announcements! + +Name + +Email Address + +About Us + +- [About us](https://www.skynetindia.info/aboutus.html "About us") +- [About Jamnagar](https://www.skynetindia.info/about-jamnagar.html "About Jamnagar") +- [Quality Policy](https://www.skynetindia.info/quality-policy.html "Quality Policy") +- [Contact Us](https://www.skynetindia.info/contactus.html "Contact Skynet INDIA") +- [Blog](https://www.skynetindia.info/blog/ "Blog") +- [Imprint](https://www.skynetindia.info/imprint.html "Imprint") +- [Sitemap](https://www.skynetindia.info/sitemap.xml "Skyent Technologies India Sitemap") + +Important Links + +- [Payments](https://www.skynetindia.info/payment.html "How to Pay for Web Design India") +- [FAQ](https://www.skynetindia.info/faqs.html "FAQ") +- [How to configure Outlook](https://www.skynetindia.info/tips-to-configure-outlook.html "How to Configure Outlook 2007") +- [Careers](https://www.skynetindia.info/careers.html "Career in IT Company India") +- [Network Consultancy Services](https://www.skynetindia.info/network-consultancy-services.html "Network Consultancy Services") +- [Web Designing India](https://www.skynetindia.info/website-design.html "Web Design India") +- [Corporate Mailing Solutions](https://www.skynetindia.info/corporate-mailing-solution.html "Corporate Mailing Solutions") + +Offices + +- [ USA - Ohio](https://www.skynetindia.info/contactus.html?continent=north%20america&country=united%20states®ion=oh) +- [ USA - Nevada](https://www.skynetindia.info/contactus.html?continent=north%20america&country=united%20states®ion=nv) +- [ USA - Florida](https://www.skynetindia.info/contactus.html?continent=north%20america&country=united%20states®ion=fl) +- [INDIA - Gujarat](https://www.skynetindia.info/contactus.html?continent=asia&country=india®ion=all) +- [ AUSTRALIA - Victoria](https://www.skynetindia.info/contactus.html?continent=oceania&country=australia®ion=all) + +Customer Base + +Los Angeles Long Beach Anaheim, LA CA, Chicago Naperville Elgin, Dallas-Fort Worth Arlington, TX, Houston The Woodlands-Sugar Land, TX, Washington Arlington Alexandria, Miami-Fort Pompano Beach, FL Philadelphia Camden Wilmington, Atlanta-Sandy Springs Alpharetta, San Francisco Oakland Berkeley, Reno, NV, Gainesville, FL. + +© 2002 - *2021* [Skynet Technologies USA LLC.](https://www.skynetindia.info "Website Design India") 27 Heron Drive, Amelia, OH, 45102. - All rights reserved. +[Terms & Conditions](https://www.skynetindia.info/termsofuse.html) | [Privacy Policy](https://www.skynetindia.info/privacy.html) | [Disclaimer](https://www.skynetindia.info/disclaimer.html) | [R & C Policy](https://www.skynetindia.info/refundandcancellation.html) \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/Teaching/general.md b/docs/archive/JoplinExport/Handbook/Teaching/general.md new file mode 100644 index 00000000..0b191326 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Teaching/general.md @@ -0,0 +1,34 @@ +--- +title: general +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Tutorials +## Prototyping with HTML, CSS and JavaScript +* [Create an App Prototype](https://webdesign.tutsplus.com/tutorials/how-to-create-an-app-prototype-using-css-and-javascript--cms-29062) + +## Creating a live search component + +- [Live Search](https://alligator.io/react/live-search-with-axios/) - Tutorial + +## Angular +* ~~[Angular 2 Fundamentals](http://courses.angularclass.com/courses/enrolled/73288) - Online class with a really good introduction to Angular. Also check out the JavaScript Class. It has a really good introduction to `Webpack`~~ + * [Github Repo - Retain App](https://github.com/AngularClass/retain-app) + * ~~Webpack config is out of date (for the latest webpack)~~ + +## Wordpress +* [REST API - Creating and deleting data](https://code.tutsplus.com/tutorials/wp-rest-api-creating-updating-and-deleting-data--cms-24883) +* [REST API - Basic Authentication](https://code.tutsplus.com/tutorials/wp-rest-api-setting-up-and-using-basic-authentication--cms-24762) +### Plugin Development +* [Ajax Techniques for Object Oriented Programming](https://code.tutsplus.com/tutorials/improved-ajax-techniques-for-wordpress-object-oriented-programming--cms-24897) + +## PostCSS +* [PostCSS - Create your own plugin](https://webdesign.tutsplus.com/tutorials/postcss-deep-dive-create-your-own-plugin--cms-24605?_ga=2.180767079.1506170253.1505494089-367202937.1497472111) + + +## Other +* [Saylor Academy](https://learn.saylor.org) +* [EdX] +* [Coursera] +* [Udemy] diff --git a/docs/resources/teaching/html.md b/docs/archive/JoplinExport/Handbook/Teaching/html.md similarity index 89% rename from docs/resources/teaching/html.md rename to docs/archive/JoplinExport/Handbook/Teaching/html.md index 86d564e8..449fad96 100644 --- a/docs/resources/teaching/html.md +++ b/docs/archive/JoplinExport/Handbook/Teaching/html.md @@ -1,3 +1,9 @@ +--- +title: html +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + # Semantic HTML ## "... HTML elements for what they are rather than how they may appear in the browser by default." diff --git a/docs/archive/JoplinExport/Handbook/Teaching/javascript.md b/docs/archive/JoplinExport/Handbook/Teaching/javascript.md new file mode 100644 index 00000000..dffe5e17 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Teaching/javascript.md @@ -0,0 +1,188 @@ +--- +title: javascript +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Introduction to learning JavaScript + +## Introduction to JavaScript +* Goals + * Tools + * [Mozilla Thimble](https://thimble.mozilla.org/en-US/) - Geared towards learning + * [CodePen](https://codepen.io/) - too much to get in the way. + * [GitHub](https://github.com/) + * [Visual Studio Code](https://code.visualstudio.com/) + +## Resources +* Programs + * [freeCodeCamp](https://github.com/freeCodeCamp) + * [The Odin Project](https://github.com/TheOdinProject/curriculum) + * [Site](http://theodinproject.com/) +* List of books + * [JS Books](http://jsbooks.revolunet.com/) + * [Eloquent JavaScript](http://eloquentjavascript.net/) + * [Exploring ES2016 and ES2017](http://exploringjs.com/es2016-es2017.html) + * [Building Front-End Web Apps with Plain JavaScript](http://web-engineering.info/tech/JsFrontendApp/book/) + * [JavaScript for Cats](http://jsforcats.com/) + * [Learn JavaScript](https://gitbookio.gitbooks.io/javascript/) + * [JavaScript Allonge](https://gitbookio.gitbooks.io/javascript/) - JavaScript Allonge + * [JavaScript Design Patterns](https://gitbookio.gitbooks.io/javascript/) + * [Learn Javascript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/) + * [Understanding ECMAScript 6](https://gitbookio.gitbooks.io/javascript/) + * [Human JavaScript](https://gitbookio.gitbooks.io/javascript/) + * [Speaking JavaScript](http://speakingjs.com/es5/index.html) + * [Programming JavaScript](http://chimera.labs.oreilly.com/books/1234000000262/index.html) + * [HTML 5 Shoot 'em Up](https://leanpub.com/html5shootemupinanafternoon/read) + * [Backbone Applications](https://addyosmani.com/backbone-fundamentals/) + * [Exploring ES6](http://exploringjs.com/es6.html) + * [Programming JavaScript Applications](http://chimera.labs.oreilly.com/books/1234000000262/index.html) + +* Interactive environments + * [Parson's Problems](https://github.com/js-parsons/js-parsons) + * [Python Tutor](http://pythontutor.com/) - Visualize Code as it runs (JavaScript, Python, other) + +* Homework projects + * [Nifty Assignments](http://nifty.stanford.edu/) + * [Breakout Game](https://codeincomplete.com/posts/javascript-breakout/) + * [Intro Computing](http://introcomputing.org/) - Excercises. + +* Sites + * [MDN Web Docs - JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Introduction) + * [JavaScript Challenges](http://tcorral.github.io/javascript-challenges-book/) + + * [Learn computer science with JavaScript](https://code.tutsplus.com/series/learn-computer-science-with-javascript--cms-1213) + * [Mozilla Developer Tutorials](https://developer.mozilla.org/en-US/docs/Learn/JavaScript) + * [HTML Games](https://www.w3schools.com/graphics/game_intro.asp) + * [Khan Computer Programming](https://www.khanacademy.org/computing/computer-programming) + * [Idea List](http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/) + * [Rosetta Code](http://rosettacode.org/wiki/Category:Programming_Tasks) + * [Khan Academy Programming](https://www.khanacademy.org/computing/computer-programming/programming) + * [Daily Programmer](https://www.reddit.com/r/dailyprogrammer/) + + +* Minimum Requirements. 10 questions to gauge eligibility. +* HTML & CSS + * Create an HTML form from scratch + * Write CSS to modify the form + * Create a form to enter a todo item. Including the submit button. + * Make the submit button blue. Green when you the pointer is over it. + * Point the form submission to *** + * Programming experience + * Variable + * Loop + * var vs let + * Should use constant or let? + * Use an editor + * Developer tools in your browser. + +* Tools for this class + * Code editor - Visual Studio Code - Atom editor + * Browser - Mozilla Firefox. (Google Chrome will work) + * Internet connectivity - homework, class resources, quizzes. + +* Class structure + * Most of class as workshop lab. + * Lecture/Lab/Lecture/ - Homework. + +## Curriculum +* 10 Weeks +* Goal: + * JavaScript fundamentals + * Manipulate the DOM + * Understand the basis of popular libraries. How does jQuery work? Why do I need a framework? Can I build my own? + +## Topics - Fundamentals of JavaScript Development +* Able to understand why you might use a framework. +* Abstraction +* Algorithms +* Data Structures +* JavaScript Overview + * Editor + * Github + * JSBin +* Variables/Arrays +* Logic, loops, iteration +* Functions +* Classes/Objects/Arrays +* Modules + +* DOM +* Events and Listeners +* Async - non-blocking - callbacks + * Promises +* JSON + +* Pull Data + * AJAX - access data from servers (API Calls) + * API Services + * Google APIs + * Amazon APIs +* Push Data + * Forms + * HTML5 + * Color + * Date + * Time + * Validation + * Submitting +* Libraries + * Build your own library + * Understand the mechanisms behind jQuery. (Why do I need a library) + * Design patterns + * JQuery +* Advanced topics + * Testing + * TypeScript/Dart + * Build tools + * Node + * Virtual DOM + * Frameworks + * Progressive Web Apps + +* Projects + * Variables, Flow, Functions, array + * Hangman + +* Class + * Lecture + * In class labs + +* Readings +* Videos +* Lecture +* Practical + * In class labs + * Homework - hosted on github + * Quizzes + * Final Project + +* Resource Site + * Online learning resources + * Online classes (free and paid) + * Supplementary materials (Mozilla foundation resources, I can use, JavaScript the good parts) + * Videos + * Links to YouTube videos + * Online quizzes + * Readings + * Class notes and presentations + * Discussion group + * Resources + +## Resources +* [Web Engineering](http://web-engineering.info/) - free resources + +* 10 week class +* Learn how to use JavaScript to make your web pages interactive. Learn all about the DOM. The basics of event programming. How JavaScript works with the DOM. At the end, you'll be able to: + - Build your own slide show. + - Create a game in the browser. + - Validate and submit form data. + - Access data from servers and submit data to servers. + - Learn basic project management including version control. + +## Projects +* Slide show +* Games +* Video Player +* Form validation +* API diff --git a/docs/archive/JoplinExport/Handbook/Teaching/openedx.md b/docs/archive/JoplinExport/Handbook/Teaching/openedx.md new file mode 100644 index 00000000..4e63e941 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Teaching/openedx.md @@ -0,0 +1,15 @@ +--- +title: openedx +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Open edX - Using Open Edx for Online Learning Development + +## Why OpenEdx +* Python and Django +* In wide use +* Why not + +## Links +* [Sites Powered by edX](https://openedx.atlassian.net/wiki/spaces/COMM/pages/162245773/Sites+powered+by+Open+edX) diff --git a/docs/archive/JoplinExport/Handbook/Teaching/prototyping.md b/docs/archive/JoplinExport/Handbook/Teaching/prototyping.md new file mode 100644 index 00000000..7d0847d1 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Teaching/prototyping.md @@ -0,0 +1,733 @@ +--- +title: prototyping +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Building a protype with Vue and Marvel +* *Based on [How to Create an App Prototype Using CSS and JavaScript](https://webdesign.tutsplus.com/tutorials/how-to-create-an-app-prototype-using-css-and-javascript--cms-29062)* +* We are building this exact prototype using Vue and building it as a single file component. +* Have to use the *marvel-device nexus5* for it work properly. + +```html +
    + +
    +``` +## JavaScript +```js +import axios from 'axios' + +const transOriginNames = { + MozTransformOrigin : "MozTransformOrigin", + msTransformOrigin : "msTransformOrigin", + transformOrigin : "transformOrigin", + webkitTransformOrigin : "webkitTransformOrigin", +}; + +let screen_scroll = this; +let modal = this; + +export default { + + data: () => ( + { + avatar: { + img: "", + name: "", + }, + errors: [], + greeting: "User List", + isActive: false, + isLoaded: false, + users: [], + } + ), + + mounted() { + axios( + { + method: "GET", + url: "https://randomuser.me/api/?results=30", + }) + .then( (response) => { + this.users = response.data.results; + this.isLoaded = true; + }) + .catch((e) => { + this.errors.push(e); + }); + screen_scroll = this.$el.querySelector(".screen-scroll"); + modal = this.$el.querySelector(".modal"); + }, + + methods: { + fullname: (user) => { + return user.name.first + " " + user.name.last; + }, + hideModal() { + this.isActive = false; + }, + showModal(e) { + const target = e.target; + this.avatar.img = target.getAttribute("data-pic"); + this.avatar.name = target.getAttribute("data-name"); + this.avatar.email = target.getAttribute("data-email"); + const targetCoords = target.getBoundingClientRect(); + + if (target.nodeName === "IMG") { + for (let name in transOriginNames) { + modal.style[name] = (target.offsetLeft + (targetCoords.width / 2)) + "px " + + ((target.offsetTop + (targetCoords.height / 2)) - screen_scroll.scrollTop) + "px"; + } + } + this.isActive = true; + }, + }, +}; + +``` + +## Template +```html +
    +
    +
    +
    +
    +
    +
    +

    {{greeting}}

    +
    + +
    +
      +
    • + + {{user.name.first}} +
    • +
    +
    + +
    +
    +``` +## Stylesheet in SCSS +```scss +@import 'marvel/devices'; + +// ========================================================== +// DEMO STYLES +// ========================================================== + +$bg: #91999f; + +html, +body { height: 100%; } + +body { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + background: $bg; +} + +// ========================================================== +// REQUIRED STYLES +// ========================================================== + +:root { + --primary-color: #2c3942; + --secondary-color: #1192ff; + --tertiary-color: #997ac0; + --button-bg: var(--tertiary-color); + --material-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + --screen-height: 568px; + --screen-width: 320px; +} + +* { + &:before, + &:after { + box-sizing: inherit; + } +} + +html, +input { + box-sizing: border-box; +} + +button { + appearance: none; + border: 2px solid var(--button-bg); + border-radius: 100px; + margin: 10px 0; + padding: 10px 0; + transition: 200ms background cubic-bezier(.4, 0, .2, 1); + font-weight: 400; + background: transparent; + color: white; + &:hover, + &:focus { + cursor: pointer; + background: var(--button-bg); + } + &:focus { + outline: none; + } +} + +.screen { + position: relative; + background: var(--primary-color); +} + +.screen-scroll { + height: 100%; + overflow: scroll; +} + +.title { + font-family: 'Roboto', sans-serif; + font-size: 1em; + font-weight: 300; + text-transform: uppercase; + color: white; +} + +.users { + display: flex; + flex-wrap: wrap; + list-style-type: none; + margin: 0; + padding: 0; + + li { + padding: 5px; + width: 30%; + opacity: 0; + } + + img { + border-radius: 80%; + box-shadow: var(--material-shadow); + + &:hover { + cursor: pointer; + } + } +} + +.modal { + border-radius: 100%; + height: var(--screen-height); + pointer-events: none; + position: absolute; + top: 0; + left: 0; + overflow: scroll; + transform: scale(0) translateZ(0); + transition-duration: 640ms; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-property: transform, opacity, border-radius; + width: var(--screen-width); + background-color: var(--primary-color); + opacity: 0; +} + +.avatar { + position: relative; + + &::after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, var(--primary-color) 98%); + } + + img { + display: inline-block; + width: 100%; + max-width: 100%; + } +} + +.user-name { + display: block; + font-family: 'Roboto', sans-serif; + font-weight: 300; + text-align: center; + font-size: 0.875em; + text-transform: capitalize; +} + +.profile { + display: flex; + flex-direction: column; + padding: 0 1rem; + transition: 200ms transform 100ms cubic-bezier(0.4, 0, 0.2, 1); + transform: translateY(-100%); + font-family: 'Roboto', sans-serif; + font-weight: 400; +} + +.profile__name { + margin: 0; + font-family: 'Roboto', sans-serif; + font-weight: 300; + text-transform: capitalize; +} + +.profile__email { + display: inline-block; + margin: 5px 0; + font-family: 'Roboto', sans-serif; + font-weight: 300; + text-decoration: none; + color: inherit; +} + +.profile__info { + font-family: 'Roboto', sans-serif; + font-weight: 300; +} + +// ========================================================== +// LOADER +// ========================================================== + +$loader-count: 6; +$loader-proportion: 200px; +$loader-color: #00AABB; +$stagger: 0.1875s; +$animation_config: ( + name: expand-out, + duration: 600ms, + timing: cubic-bezier(0.66, 0.14, 0.83, 0.67), + iteration: infinite, + direction: alternate, + fill-mode: both +); + +@function sh-setup($config) { + @return zip(map-values($config)...); +} + +.loader { + position: absolute; + top: 50%; + left: 0; + right: 0; + bottom: 0; + transform: translateY(-50%); +} + +.loader svg { + position: relative; + width: $loader-proportion; + height: $loader-proportion; + circle { + animation: sh-setup($animation_config); + position: absolute; + transform: scale(0); + transform-origin: center center; + fill: $loader-color; + } +} + +@for $i from 1 through $loader-count { + .loader circle:nth-of-type(#{$i}) { + animation-delay: $i * $stagger; + fill: lighten($loader-color, $i * 3%); + } +} + +// ========================================================== +// STATES +// ========================================================== + +$user-count: 30; +$duration: 200ms; +$stagger_delay: 0.0125s; +$easing: cubic-bezier(0.66, 0.14, 0.83, 0.67); + +.loader.hide { + display: none; +} + +.users.show { + > * { + animation-duration: $duration; + animation-name: fade-in; + animation-fill-mode: both; + animation-timing-function: $easing; + opacity: 1; + + > * { + animation-duration: $duration; + animation-name: expand-out; + animation-fill-mode: both; + animation-timing-function: $easing; + } + + @for $i from 1 through $user-count { + &:nth-of-type(#{$i}) { + animation-delay: ($stagger_delay * $i); + > * { + animation-delay: ($stagger_delay * $i); + } + } + } + } +} + +.screen.active { + .screen-scroll { + overflow: hidden; + } + + .modal { + border-radius: 0; + pointer-events: auto; + transform: scale(1) translateZ(0); + opacity: 1; + } + + .profile { + transform: translateY(0); + } +} + +// ========================================================== +// KEYFRAMES +// ========================================================== + +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes expand-out { + from { transform: scale(0); } + to { transform: scale(1); } +} + +``` + +## Getting Started +### Creating the project +* Create a new vue project with the vue-cli + * `vue init webpack-simple marvel-prototype` +* Add the additional npm packages. + * awesome-typescript-loader > We're using typescript + * axios > ajax calls + * babel-env + * babel-preset-env + * babel-plugin-transform-class-properties + * babel-plugin-transform-decorators + * postcss-loader + * postcss-cssnext > issue with css variables + * vue-hot-reload-api + * tslint + * typescript - create config file + * eslint + * eslint-config-standard + * style-loader + +* Configure work environment + * typescript + * tslint - `./node_modules/.bin/tslint --init` - Generates a *tslint.json* file. + * tsc - `./node_modules/.bin/tsc --init` - Generates *tsconfig.json* file. +```json +"compilerOptions": { + "target": "es5", + "module": "es2015", + // "strict": true + "allowSyntheticDefaultImports": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true +} +``` +* eslint +* babel + * Create .babelrc file. +```json +{ + "presets": [ + ["env",{ + "targets": { + "browsers": ["last 2 versions", "safari >= 7"] + } + } + ] + ], + "plugins": [ + "transform-class-properties", + "transform-decorators" + ] +} +``` +* Create *postcss.config.js* +* You need to set this up to have the future css vars work. +```js +module.exports = { + plugins: { + 'postcss-cssnext': {} + } +} +``` +* Configure eslint +```json +{ + "extends": "standard" +} +``` + +### Update your webpack config +* Add *scss* processing section. +```js + { + test: /\.scss/, + loaders: [ + 'style-loader', + 'css-loader', + 'sass-loader' + ] + } +``` +* Add typescript processing in vue-loader section. +```js + { + test: /\.vue$/, + loader: 'vue-loader', + options: { + loaders: { + scss: ['vue-style-loader', { + loader: 'css-loader', + options: { + minimize: false, + sourceMap: false + } + }, + { + loader: 'sass-loader' + } + ], + ts: 'awesome-typescript-loader' + } + } + }, +``` +* Add typescript processing section. +```js + { + test: /\.ts$/, + loader: 'awesome-typescript-loader', + exclude: /node_modules/ + + }, +``` + +### Create Vue Component folder +* *./src/components* +* Create *MarvelProto* in *components*. +* Create files for the component + * MarvelProto.vue + * template.html + * script.ts + * style.scss +* Edit *MarvelProto.vue* + +### Download and add Marvel CSS for devices. +* Download *https://github.com/marvelapp/devices.css/archive/master.zip* +* Unzip and copy *devices.scss* and *mixins.scss* from *devics.css-master/assets/scss/* into *src/assets/scss* folder. +* Add the HTML to the MarvelProto *template.html* file. + +### Add MarvelProto component as main component. +* Import MarvelProto - `import MarvelProto from './components/MarvelProto/MarvelProto.vue'` +* Place it as the main component. +```js +new Vue({ + el: '#app', + render: h => h(MarvelProto) +}) +``` +### Setup Demo Content +* in *MarvelProto/script.ts*, create a *msg* variable. +```js +export default { + + data: () => ( + { + msg: "Hello World" + } + ) +} +``` +* Show the message in the template. +```html +
    +
    +
    +
    +
    +
    +
    +
    + {{ msg }} +
    +
    +
    +
    +``` +* Include the device.scss in your style sheet. +* `@import 'scss/devices';` + +* Start your development server. +* `npm run dev` +[image of plain phone] + +## Component Code +### Retrieve the list of users using [axios](https://github.com/mzabriskie/axios). +* in MarvelProto/script.ts +* import axios +* Create code to pull users from random api. +```js +import axios from 'axios'; + +export default { + + data: () => ( + { + errors: [], + msg: "Hello World", + users: [], + + } + ), + + mounted() { + axios( + { + method: "GET", + url: "https://randomuser.me/api/?results=30", + }) + .then( (response) => { + this.users = response.data.results; + this.isLoaded = true; + }) + .catch((e) => { + this.errors.push(e); + }); + }, +}; +``` +* Update *template.html* to show users + * Add for loop for users in `
      ` +```html +
      +
      +
      +
      +
      +
      +
      +

      {{ msg }}

      +
      + +
      +
        +
      • + + {{user.name.first}} +
      • +
      + +
      + +
      +
      +``` +* Hide Loader and show users. + * Hide loader: `
      ` + * Show Users: `
        ` + +* Create Modal +```html + +``` +* Add code to show and hide the Modal under Methods. +```js + hideModal() { + this.isActive = false; + }, + showModal(e) { + const target = e.target; + this.avatar.img = target.getAttribute("data-pic"); + this.avatar.name = target.getAttribute("data-name"); + this.avatar.email = target.getAttribute("data-email"); + const targetCoords = target.getBoundingClientRect(); + + if (target.nodeName === "IMG") { + for (let name in transOriginNames) { + modal.style[name] = (target.offsetLeft + (targetCoords.width / 2)) + "px " + + ((target.offsetTop + (targetCoords.height / 2)) - screen_scroll.scrollTop) + "px"; + } + } + this.isActive = true; + }, +``` diff --git a/docs/archive/JoplinExport/Handbook/Teaching/tools.md b/docs/archive/JoplinExport/Handbook/Teaching/tools.md new file mode 100644 index 00000000..05be9460 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Teaching/tools.md @@ -0,0 +1,82 @@ +--- +title: tools +updated: 2020-09-10 22:07:13Z +created: 2020-09-10 22:07:13Z +--- + +# Teaching web development +## Teaching Tools +* [Eclipse Che](http://www.eclipse.org/che/) + * Provide all students with a running learner environment. + * Allow them to develop without the need for a regular machine. + * In a place like South Africa, all they will need is a basic terminal or laptop. + * Everyone who wants to learn web development should have a computer/laptop available. + * Will use the browser as the tool of choice for learning development. + * Setting up with docker toolbox on Mac OS X + * be sure to run ```eval "$(docker-machine env default)"``` + * docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /Users/johan/Projects/eclispseChe/data:/data eclipse/che start + * Got it to work on docker toolbox +* [Cloud9](https://c9.io/) - In the cloud IDE tool. Free basic workspace. + +## Online Resources +* [Codenvy](https://codenvy.io) + * Create workspace instances using eclipse che +* [Thimble](https://thimble.mozilla.org/en-US) + * Work with HTML code directly on a browser. +* [Codepen](http://codepen.io) + * Frontend development environment +* [Stanford CS Education Library](http://cslibrary.stanford.edu/) + +## Curriculum +* [The Odin Project](https://github.com/TheOdinProject/curriculum) + * [Site](http://theodinproject.com/) +* [freeCodeCamp](http://www.freecodecamp.org/) + * [Github Repo](https://github.com/freeCodeCamp) + +## SCORM Tools +* [eXe](http://exelearning.net/?lang=en) - SCORM Tool + +## LMS Tools +* [Open Edx](https://open.edx.org) - Python based - Django +* [Claroline](https://www.claroline.net/) - PHP Based +* [Forma.lms](http://www.formalms.org/) - PHP based +* [Opigno](https://www.opigno.org/en#home) - Drupal based +* [Ilias](https://www.ilias.de/docu/goto_docu_root_1.html) - PHP based +* [SakaiProject](https://www.sakaiproject.org/) - Java Based +* [Chamilo](https://chamilo.org/) - +### LMS Tools Commercial +* [Eliademy](https://eliademy.com/en) + +## Create interactive lessons +* [Oppia](https://github.com/oppia/oppia) - build interactive lessons. + +## Learn Programming with Python +* [Paul Vincent Craven](http://simpson.edu/author/pcraven/) + * [Teaching Python 3.6 with Games](http://2017-craven-webinar.readthedocs.io/en/latest/) + * [Program Arcade Games](http://programarcadegames.com/index.php) + +## Teaching notes +* Revise often + * Restructured text for material (markdown) + * Sphinx (for documentation) (MkDocs) + * Store in Git + * Read The Docs - documentation generator + +## Other tools +* [Visualize Your Code](http://pythontutor.com/) - Online tutor for learning to code. + * Created by: [Philip J. Guo](http://www.pgbovine.net/index.html) +* [List of Public APIs](https://github.com/abhishekbanthia/Public-APIs) + +## Free hosting for html sites +* [NeoCities](https://neocities.org/) + +# Custom modules + +* Building a timeline + * [W3Schools](https://www.w3schools.com/howto/howto_css_timeline.asp) + * [CSS TimeLines](http://freefrontend.com/css-timelines/) + * [jQuery Scroll plugin](https://github.com/jlmakes/scrollreveal) + +## Github Education +* [GitHub Classroom](https://education.github.com/) +* [GitHub JavaScript Classroom](https://classroom.github.com/classrooms/20524172-javascript-introductory-class) diff --git a/docs/archive/JoplinExport/Handbook/Web Security.md b/docs/archive/JoplinExport/Handbook/Web Security.md new file mode 100644 index 00000000..5be63418 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/Web Security.md @@ -0,0 +1,12 @@ +--- +title: Web Security +updated: 2021-08-13 07:36:28Z +created: 2021-08-13 07:31:35Z +latitude: -26.16670000 +longitude: 27.86670000 +altitude: 0.0000 +--- + +## Vulnerability Scanner +* https://owasp.org/www-community/Vulnerability_Scanning_Tools +* https://hostedscan.com/scan-types - provides free scans \ No newline at end of file diff --git a/docs/archive/JoplinExport/Handbook/index.md b/docs/archive/JoplinExport/Handbook/index.md new file mode 100644 index 00000000..b3e3a7e3 --- /dev/null +++ b/docs/archive/JoplinExport/Handbook/index.md @@ -0,0 +1,207 @@ +--- +title: index +updated: 2021-07-03 10:42:56Z +created: 2020-09-10 23:53:43Z +--- + +# Developer Notes + +!!! notes +Using Mkdocs to track my daily developer activities. These are things that I'm doing and not necessarily code snippets although I will put snippets of code here. It is to track what I'm working on and what I'm doing. +Notes are stored on bitbucket in a privte repository. +Private notes and information that shouldn't be public gets added to OneNote or to 1Password depending on how sensitive it is. +This is not a public repository. +[Notes](../Handbook/Notes.md) + +## Local setup (Johan's machine) + +- **/etc/hosts** file. + * Added `127.0.0.1 db` to access docker database connection. + * Added `127.0.0.1 redis-server` to access docker redis server. +- Scripts for local setup repo: [Github Repo](https://github.com/johanmnext45/snippets) - Private repo + +## Resources + +- [Docfox Wiki](https://github.com/docfoxapp/docfox-rework/wiki) + +## App and commandline shortcuts + +### [MassCode](https://masscode.io) - Snippet manager + +- Adding a snippet: ++cmd+n++ +- Copying a snippet: ++shift+cmd+c++ +- Formatting as snippet: ++shift+cmd+f++ +- Fragment: ++cmd+t++ +- Show Assistant: ++option+s++ + +### [FlyCut](https://github.com/TermiT/Flycut) + +- HotKey: ++shift+command+v++ + +### Visual Studio Code + +- [Keyboard Shortcuts](https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf) + +* Multiple Cursors: + + - Insert Cursor: ++option++ click + - Next line: ++option+command++ down_arrow + +### [Macports](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/macports) + +| Alias | Command | Description | +| ----- | --------------------------------- | ------------------------------------------------------------ | +| pc | `sudo port clean --all installed` | Clean up intermediate installation files for installed ports | +| pi | `sudo port install` | Install package given as argument | +| psu | `sudo port selfupdate` | Update ports tree with MacPorts repository | +| puni | `sudo port uninstall inactive` | Uninstall inactive ports | +| puo | `sudo port upgrade outdated` | Upgrade ports with newer versions available | +| pup | `psu && puo` | Update ports tree, then upgrade ports to newest versions | + +### Ruby + +| Alias | Command | Description | +| ----- | -------------------------------------- | ---------------------------------------------------- | +| rb | `ruby` | The Ruby command | +| sgem | `sudo gem` | Run sudo gem on the system ruby, not the active ruby | +| rfind | `find . -name "*.rb" \| xargs grep -n` | Find ruby file | +| gin | `gem install` | Install a gem into the local repository | +| gun | `gem uninstall` | Uninstall gems from the local repository | +| gli | `gem list` | Display gems installed locally | + +#### Rails aliases + +| Alias | Command | Description | +| ------ | -------------------------- | -------------------------------------------------- | +| `rc` | `rails console` | Interact with your Rails app from the CLI | +| `rcs` | `rails console --sandbox` | Test code in a sandbox, without changing any data | +| `rd` | `rails destroy` | Undo a generate operation | +| `rdb` | `rails dbconsole` | Interact with your db from the console | +| `rgen` | `rails generate` | Generate boilerplate code | +| `rgm` | `rails generate migration` | Generate a db migration | +| `rp` | `rails plugin` | Run a Rails plugin command | +| `ru` | `rails runner` | Run Ruby code in the context of Rails | +| `rs` | `rails server` | Launch a web server | +| `rsd` | `rails server --debugger` | Launch a web server with debugger | +| `rsp` | `rails server --port` | Launch a web server and specify the listening port | + +##### Rake aliases + +| Alias | Command | Description | +| ------- | ------------------------------- | ------------------------------------------------------ | +| `rdm` | `rake db:migrate` | Run pending db migrations | +| `rdms` | `rake db:migrate:status` | Show current db migration status | +| `rdmtc` | `rake db:migrate db:test:clone` | Run pending migrations and clone db into test database | +| `rdr` | `rake db:rollback` | Roll back the last migration | +| `rdc` | `rake db:create` | Create the database | +| `rds` | `rake db:seed` | Seed the database | +| `rdd` | `rake db:drop` | Delete the database | +| `rdrs` | `rake db:reset` | Delete the database and set it up again | +| `rdtc` | `rake db:test:clone` | Clone the database into the test database | +| `rdtp` | `rake db:test:prepare` | Duplicate the db schema into your test database | +| `rdsl` | `rake db:schema:load` | Load the database schema | +| `rlc` | `rake log:clear` | Clear Rails logs | +| `rn` | `rake notes` | Search for notes (`FIXME`, `TODO`) in code comments | +| `rr` | `rake routes` | List all defined routes | +| `rrg` | `rake routes \| grep` | List and filter the defined routes | +| `rt` | `rake test` | Run Rails tests | +| `rmd` | `rake middleware` | Interact with Rails middlewares | +| `rsts` | `rake stats` | Print code statistics | + +##### Utility aliases + +| Alias | Command | Description | +| --------- | ----------------------------- | ---------------------------------------------- | +| `devlog` | `tail -f log/development.log` | Show and follow changes to the development log | +| `prodlog` | `tail -f log/production.log` | Show and follow changes to the production log | +| `testlog` | `tail -f log/test.log` | Show and follow changes to the test log | + +##### Environment settings + +| Alias | Command | Description | +| ----- | ----------------------- | ------------------------------- | +| `RED` | `RAILS_ENV=development` | Sets `RAILS_ENV` to development | +| `REP` | `RAILS_ENV=production` | Sets `RAILS_ENV` to production | +| `RET` | `RAILS_ENV=test` | Sets `RAILS_ENV` to test | + +These are global aliases. Use in combination with a command or just run them +separately. For example: `REP rake db:migrate` will migrate the production db. + +### Tmux + +- [CheatSheet](https://tmuxcheatsheet.com/) + +* ++ctrl+b++ " - Split window vertical + +- ++ctrl+b++ % - Split window horizontal + +| Alias | Command | Description | +| ------ | ---------------------- | -------------------------------------------------------- | +| `ta` | tmux attach -t | Attach new tmux session to already running named session | +| `tad` | tmux attach -d -t | Detach named tmux session | +| `ts` | tmux new-session -s | Create a new named tmux session | +| `tl` | tmux list-sessions | Displays a list of running tmux sessions | +| `tksv` | tmux kill-server | Terminate all running tmux sessions | +| `tkss` | tmux kill-session -t | Terminate named running tmux session | +| `tmux` | `_zsh_tmux_plugin_run` | Start a new tmux session | + +#### Configuration Variables + +| Variable | Description | +| ----------------------------------- | ----------------------------------------------------------------------------- | +| `ZSH_TMUX_AUTOSTART` | Automatically starts tmux (default: `false`) | +| `ZSH_TMUX_AUTOSTART_ONCE` | Autostart only if tmux hasn't been started previously (default: `true`) | +| `ZSH_TMUX_AUTOCONNECT` | Automatically connect to a previous session if it exits (default: `true`) | +| `ZSH_TMUX_AUTOQUIT` | Automatically closes terminal once tmux exits (default: `ZSH_TMUX_AUTOSTART`) | +| `ZSH_TMUX_FIXTERM` | Sets `$TERM` to 256-color term or not based on current terminal support | +| `ZSH_TMUX_ITERM2` | Sets the `-CC` option for iTerm2 tmux integration (default: `false`) | +| `ZSH_TMUX_FIXTERM_WITHOUT_256COLOR` | `$TERM` to use for non 256-color terminals (default: `screen`) | +| `ZSH_TMUX_FIXTERM_WITH_256COLOR` | `$TERM` to use for 256-color terminals (default: `screen-256color` | +| `ZSH_TMUX_CONFIG` | Set the configuration path (default: `$HOME/.tmux.conf`) | +| `ZSH_TMUX_UNICODE` | Set `tmux -u` option to support unicode | + +### NeoVim(Vim) + +- Some commands +- `:e filename` - can use tab to search files +- `:buffers` - List open buffers +- `:b1` - go to buffer number + +### Git + +- Ignore files specific to docfox `git config --local core.excludesFile ~/projects/bin/resources/.docfox_gitignore` + +- Ignore a file already checked in. `git rm --cached _file_` +- User their commit. `git merge --strategy-option theirs` + +#### Github client + +- Github Command Line Client + + - Create a pr: `gh pr create --title "Pull request title" --body "Pull request body"` + + * [Github Client](https://github.com/cli/cli) + * [Github CLI Manual](https://cli.github.com/manual/) + + ## Notes + + - Potential tool to track outgoing connections: [Lulu](https://objective-see.com/products/lulu.html) + + +## Developer Notebook for Johan Martin +![Notebook](https://openclipart.org/download/100339/notebook-black.svg") +Snippets and solutions to issues I have encountered. + +### My Info +* Contact me for web development projects +* Phone: (646) 783-9811 or +27 81 443 8234 +* [martin.johan@johan-martin.com](mailto:martin.johan@johan-martin.com) + +### My Links +* [www.johan-martin.com](https://www.johan-martin.com) +* [Git Projects](https://github.com/catenare) + +### Recommendations +* I think this is the best paper notebook for developers. Confidant available from [Baron Fig](https://www.baronfig.com/) +![Baron Fig](https://cdn.shopify.com/s/files/1/0543/1257/products/confidant_charcoal_flagship_01.jpg?v=1489606782) + diff --git a/docs/archive/JoplinExport/_resources/02_3f75575191cd498cb431e174893a2d9e.jpg b/docs/archive/JoplinExport/_resources/02_3f75575191cd498cb431e174893a2d9e.jpg new file mode 100644 index 00000000..796e2084 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/02_3f75575191cd498cb431e174893a2d9e.jpg differ diff --git a/docs/archive/JoplinExport/_resources/06_a2d808b4386a4d73a654a80c73000d07.jpg b/docs/archive/JoplinExport/_resources/06_a2d808b4386a4d73a654a80c73000d07.jpg new file mode 100644 index 00000000..5a64f69b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/06_a2d808b4386a4d73a654a80c73000d07.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail01_7aa1f234c4484746a5bc562f3da0ff6f.jpg b/docs/archive/JoplinExport/_resources/07gmail01_7aa1f234c4484746a5bc562f3da0ff6f.jpg new file mode 100644 index 00000000..5bcfdd87 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail01_7aa1f234c4484746a5bc562f3da0ff6f.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail02_129f75229de14ce09626f7184db93ef3.jpg b/docs/archive/JoplinExport/_resources/07gmail02_129f75229de14ce09626f7184db93ef3.jpg new file mode 100644 index 00000000..8c8a5a55 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail02_129f75229de14ce09626f7184db93ef3.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail03_608dceea3846405bb117291facd2569b.jpg b/docs/archive/JoplinExport/_resources/07gmail03_608dceea3846405bb117291facd2569b.jpg new file mode 100644 index 00000000..ee2af14d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail03_608dceea3846405bb117291facd2569b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail04_f6f03c7c73e245ba8da260cc69410909.jpg b/docs/archive/JoplinExport/_resources/07gmail04_f6f03c7c73e245ba8da260cc69410909.jpg new file mode 100644 index 00000000..fc11fad6 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail04_f6f03c7c73e245ba8da260cc69410909.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail05_4f5d4fff44194d609cbae47ae63e5064.jpg b/docs/archive/JoplinExport/_resources/07gmail05_4f5d4fff44194d609cbae47ae63e5064.jpg new file mode 100644 index 00000000..5272b4c3 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail05_4f5d4fff44194d609cbae47ae63e5064.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail06_6dbb51a033f24f7ba2a62c7f96ef808a.jpg b/docs/archive/JoplinExport/_resources/07gmail06_6dbb51a033f24f7ba2a62c7f96ef808a.jpg new file mode 100644 index 00000000..ce9bbf26 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail06_6dbb51a033f24f7ba2a62c7f96ef808a.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail07_b457c5cec4b946ab9bbbb0e601be87e3.jpg b/docs/archive/JoplinExport/_resources/07gmail07_b457c5cec4b946ab9bbbb0e601be87e3.jpg new file mode 100644 index 00000000..eaa3074c Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail07_b457c5cec4b946ab9bbbb0e601be87e3.jpg differ diff --git a/docs/archive/JoplinExport/_resources/07gmail1_1ca761fd351b4e25acb09d276711b75e.jpg b/docs/archive/JoplinExport/_resources/07gmail1_1ca761fd351b4e25acb09d276711b75e.jpg new file mode 100644 index 00000000..0c703479 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/07gmail1_1ca761fd351b4e25acb09d276711b75e.jpg differ diff --git a/docs/archive/JoplinExport/_resources/08-1_8cc73a359ff3465aad8150cd7186145e.jpg b/docs/archive/JoplinExport/_resources/08-1_8cc73a359ff3465aad8150cd7186145e.jpg new file mode 100644 index 00000000..965d8a02 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/08-1_8cc73a359ff3465aad8150cd7186145e.jpg differ diff --git a/docs/archive/JoplinExport/_resources/09_b9fb48885a3344f087206b62b9ea7f66.jpg b/docs/archive/JoplinExport/_resources/09_b9fb48885a3344f087206b62b9ea7f66.jpg new file mode 100644 index 00000000..600ad641 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/09_b9fb48885a3344f087206b62b9ea7f66.jpg differ diff --git a/docs/archive/JoplinExport/_resources/0cfa89be-2247-4f44-abf7-efcfa2d6_e26e44f24a604f13a.png b/docs/archive/JoplinExport/_resources/0cfa89be-2247-4f44-abf7-efcfa2d6_e26e44f24a604f13a.png new file mode 100644 index 00000000..72d78112 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/0cfa89be-2247-4f44-abf7-efcfa2d6_e26e44f24a604f13a.png differ diff --git a/docs/archive/JoplinExport/_resources/1054125_v_4_s_460_ffcee18b4bb9448987c8f6bdc01de09f.jpg b/docs/archive/JoplinExport/_resources/1054125_v_4_s_460_ffcee18b4bb9448987c8f6bdc01de09f.jpg new file mode 100644 index 00000000..f872c417 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1054125_v_4_s_460_ffcee18b4bb9448987c8f6bdc01de09f.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1084688_s_48_v_4_5b1fbd3d025c47d5b141e4e5946aa077.png b/docs/archive/JoplinExport/_resources/1084688_s_48_v_4_5b1fbd3d025c47d5b141e4e5946aa077.png new file mode 100644 index 00000000..df2af966 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1084688_s_48_v_4_5b1fbd3d025c47d5b141e4e5946aa077.png differ diff --git a/docs/archive/JoplinExport/_resources/11050534_s_460_v_4_5cad32c4890c40afbe4b9a0f6ed9885.jpg b/docs/archive/JoplinExport/_resources/11050534_s_460_v_4_5cad32c4890c40afbe4b9a0f6ed9885.jpg new file mode 100644 index 00000000..860c3a72 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/11050534_s_460_v_4_5cad32c4890c40afbe4b9a0f6ed9885.jpg differ diff --git a/docs/archive/JoplinExport/_resources/11404065_s_460_v_4_97d3ccd1d1ef471885f41aca6831509.jpg b/docs/archive/JoplinExport/_resources/11404065_s_460_v_4_97d3ccd1d1ef471885f41aca6831509.jpg new file mode 100644 index 00000000..a5ed170e Binary files /dev/null and b/docs/archive/JoplinExport/_resources/11404065_s_460_v_4_97d3ccd1d1ef471885f41aca6831509.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1190716_s_460_v_4_23e96542751a45279b711cc90588a7d3.jpg b/docs/archive/JoplinExport/_resources/1190716_s_460_v_4_23e96542751a45279b711cc90588a7d3.jpg new file mode 100644 index 00000000..80165354 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1190716_s_460_v_4_23e96542751a45279b711cc90588a7d3.jpg differ diff --git a/docs/archive/JoplinExport/_resources/12-ESLint-1024x640-2_3aa1b1e547164d3e8a1b7729a1086.png b/docs/archive/JoplinExport/_resources/12-ESLint-1024x640-2_3aa1b1e547164d3e8a1b7729a1086.png new file mode 100644 index 00000000..3e235708 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/12-ESLint-1024x640-2_3aa1b1e547164d3e8a1b7729a1086.png differ diff --git a/docs/archive/JoplinExport/_resources/125011_s_64_v_4_edd20b9b6c264a9b8ed3e3a8464735f8.jpg b/docs/archive/JoplinExport/_resources/125011_s_64_v_4_edd20b9b6c264a9b8ed3e3a8464735f8.jpg new file mode 100644 index 00000000..dc15c322 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/125011_s_64_v_4_edd20b9b6c264a9b8ed3e3a8464735f8.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1261954_s_64_v_4_843d27675b7d4aceaab4602a046d7b46.png b/docs/archive/JoplinExport/_resources/1261954_s_64_v_4_843d27675b7d4aceaab4602a046d7b46.png new file mode 100644 index 00000000..e9d16b23 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1261954_s_64_v_4_843d27675b7d4aceaab4602a046d7b46.png differ diff --git a/docs/archive/JoplinExport/_resources/1292d76a62eeaecbc200db180b845cb4_05474fae649d498ea.jpeg b/docs/archive/JoplinExport/_resources/1292d76a62eeaecbc200db180b845cb4_05474fae649d498ea.jpeg new file mode 100644 index 00000000..542a5b10 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1292d76a62eeaecbc200db180b845cb4_05474fae649d498ea.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/1297759_v_4_s_460_692d40e092834c69a8108b4975637fce.jpg b/docs/archive/JoplinExport/_resources/1297759_v_4_s_460_692d40e092834c69a8108b4975637fce.jpg new file mode 100644 index 00000000..16bb12fc Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1297759_v_4_s_460_692d40e092834c69a8108b4975637fce.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1303687_v_4_s_400_1eb063b5b0d34667b487ca84061518ee.jpg b/docs/archive/JoplinExport/_resources/1303687_v_4_s_400_1eb063b5b0d34667b487ca84061518ee.jpg new file mode 100644 index 00000000..97167d38 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1303687_v_4_s_400_1eb063b5b0d34667b487ca84061518ee.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1309829_s_64_v_4_9112fef7e8a44415b72663251cb7e92e.png b/docs/archive/JoplinExport/_resources/1309829_s_64_v_4_9112fef7e8a44415b72663251cb7e92e.png new file mode 100644 index 00000000..d001f58d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1309829_s_64_v_4_9112fef7e8a44415b72663251cb7e92e.png differ diff --git a/docs/archive/JoplinExport/_resources/1434096_s_64_v_4_4ee27a5ad32f4564a2905db955502c8a.jpg b/docs/archive/JoplinExport/_resources/1434096_s_64_v_4_4ee27a5ad32f4564a2905db955502c8a.jpg new file mode 100644 index 00000000..38b96d61 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1434096_s_64_v_4_4ee27a5ad32f4564a2905db955502c8a.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1503512_s_88_v_4_092d7ef77a614aa8b45418b45400c9e3.png b/docs/archive/JoplinExport/_resources/1503512_s_88_v_4_092d7ef77a614aa8b45418b45400c9e3.png new file mode 100644 index 00000000..dff6858c Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1503512_s_88_v_4_092d7ef77a614aa8b45418b45400c9e3.png differ diff --git a/docs/archive/JoplinExport/_resources/15210_s_64_v_4_7427bd5d25f948b89751d930fe26f18d.jpg b/docs/archive/JoplinExport/_resources/15210_s_64_v_4_7427bd5d25f948b89751d930fe26f18d.jpg new file mode 100644 index 00000000..9fedae05 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/15210_s_64_v_4_7427bd5d25f948b89751d930fe26f18d.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1565723204-1548360785-Authentic2_c43caa11082b4ea19.jpg b/docs/archive/JoplinExport/_resources/1565723204-1548360785-Authentic2_c43caa11082b4ea19.jpg new file mode 100644 index 00000000..f095deb8 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1565723204-1548360785-Authentic2_c43caa11082b4ea19.jpg differ diff --git a/docs/archive/JoplinExport/_resources/16004333_s_64_v_4_4049ca7f7b4b4e87859f3f581bbe45f8.png b/docs/archive/JoplinExport/_resources/16004333_s_64_v_4_4049ca7f7b4b4e87859f3f581bbe45f8.png new file mode 100644 index 00000000..2f62e486 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/16004333_s_64_v_4_4049ca7f7b4b4e87859f3f581bbe45f8.png differ diff --git a/docs/archive/JoplinExport/_resources/16024985_s_400_v_4_0abbd0789e0340edaf035f249ee5ad6.jpg b/docs/archive/JoplinExport/_resources/16024985_s_400_v_4_0abbd0789e0340edaf035f249ee5ad6.jpg new file mode 100644 index 00000000..d783b9e8 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/16024985_s_400_v_4_0abbd0789e0340edaf035f249ee5ad6.jpg differ diff --git a/docs/archive/JoplinExport/_resources/16144158_s_460_v_4_b9a6bfdf8d5142b28931bb155f877a8.jpg b/docs/archive/JoplinExport/_resources/16144158_s_460_v_4_b9a6bfdf8d5142b28931bb155f877a8.jpg new file mode 100644 index 00000000..b43edb69 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/16144158_s_460_v_4_b9a6bfdf8d5142b28931bb155f877a8.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1620916_s_460_v_4_ef9ef64fc6e140b99da300bb87ff9779.jpg b/docs/archive/JoplinExport/_resources/1620916_s_460_v_4_ef9ef64fc6e140b99da300bb87ff9779.jpg new file mode 100644 index 00000000..22577695 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1620916_s_460_v_4_ef9ef64fc6e140b99da300bb87ff9779.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1699443_s_64_v_4_dfd28e189db144758ee3d8f8be61a72d.jpg b/docs/archive/JoplinExport/_resources/1699443_s_64_v_4_dfd28e189db144758ee3d8f8be61a72d.jpg new file mode 100644 index 00000000..661ccd59 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1699443_s_64_v_4_dfd28e189db144758ee3d8f8be61a72d.jpg differ diff --git a/docs/archive/JoplinExport/_resources/17261190_s_64_v_4_19c488c238e34031a7b5be677391191b.png b/docs/archive/JoplinExport/_resources/17261190_s_64_v_4_19c488c238e34031a7b5be677391191b.png new file mode 100644 index 00000000..477bb406 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/17261190_s_64_v_4_19c488c238e34031a7b5be677391191b.png differ diff --git a/docs/archive/JoplinExport/_resources/1764424_v_4_s_460_4b824a9e89de441e8a0ec56c43a0dc75.jpg b/docs/archive/JoplinExport/_resources/1764424_v_4_s_460_4b824a9e89de441e8a0ec56c43a0dc75.jpg new file mode 100644 index 00000000..efa377f8 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1764424_v_4_s_460_4b824a9e89de441e8a0ec56c43a0dc75.jpg differ diff --git a/docs/archive/JoplinExport/_resources/1847934_s_460_v_4_ef3c9901773c4fbdb2ac20e4c576714f.jpg b/docs/archive/JoplinExport/_resources/1847934_s_460_v_4_ef3c9901773c4fbdb2ac20e4c576714f.jpg new file mode 100644 index 00000000..bf0b846a Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1847934_s_460_v_4_ef3c9901773c4fbdb2ac20e4c576714f.jpg differ diff --git a/docs/archive/JoplinExport/_resources/19-years-of-business-excellence_30318fbb50db48ce92.svg b/docs/archive/JoplinExport/_resources/19-years-of-business-excellence_30318fbb50db48ce92.svg new file mode 100644 index 00000000..e9b24b59 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/19-years-of-business-excellence_30318fbb50db48ce92.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/1b03b8fc-76cb-4542-8f76-2b6cc1a5_5bb34bea370540f2b.jpg b/docs/archive/JoplinExport/_resources/1b03b8fc-76cb-4542-8f76-2b6cc1a5_5bb34bea370540f2b.jpg new file mode 100644 index 00000000..1566f82f Binary files /dev/null and b/docs/archive/JoplinExport/_resources/1b03b8fc-76cb-4542-8f76-2b6cc1a5_5bb34bea370540f2b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/20-years-of-service-seal_66c26cee932d4e40864bc7905.png b/docs/archive/JoplinExport/_resources/20-years-of-service-seal_66c26cee932d4e40864bc7905.png new file mode 100644 index 00000000..951032ab Binary files /dev/null and b/docs/archive/JoplinExport/_resources/20-years-of-service-seal_66c26cee932d4e40864bc7905.png differ diff --git a/docs/archive/JoplinExport/_resources/200_s_64_v_4_87b5a264fee34f07b0f4bf6f8bf9b5b3.jpg b/docs/archive/JoplinExport/_resources/200_s_64_v_4_87b5a264fee34f07b0f4bf6f8bf9b5b3.jpg new file mode 100644 index 00000000..1f2540a0 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/200_s_64_v_4_87b5a264fee34f07b0f4bf6f8bf9b5b3.jpg differ diff --git a/docs/archive/JoplinExport/_resources/205629_v_4_s_460_93648036804340f39f95c95cc811f3c1.jpg b/docs/archive/JoplinExport/_resources/205629_v_4_s_460_93648036804340f39f95c95cc811f3c1.jpg new file mode 100644 index 00000000..f787eabc Binary files /dev/null and b/docs/archive/JoplinExport/_resources/205629_v_4_s_460_93648036804340f39f95c95cc811f3c1.jpg differ diff --git a/docs/archive/JoplinExport/_resources/2123375_s_64_v_4_19b86aee579847eaad72306db31f50b5.jpg b/docs/archive/JoplinExport/_resources/2123375_s_64_v_4_19b86aee579847eaad72306db31f50b5.jpg new file mode 100644 index 00000000..275ed1a4 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/2123375_s_64_v_4_19b86aee579847eaad72306db31f50b5.jpg differ diff --git a/docs/archive/JoplinExport/_resources/2331938_s_64_v_4_80394aa2069541789ae8b4e1dd2dbc75.jpg b/docs/archive/JoplinExport/_resources/2331938_s_64_v_4_80394aa2069541789ae8b4e1dd2dbc75.jpg new file mode 100644 index 00000000..72daf0a0 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/2331938_s_64_v_4_80394aa2069541789ae8b4e1dd2dbc75.jpg differ diff --git a/docs/archive/JoplinExport/_resources/2471327_s_64_v_4_836ff60f267a488f992436824ab3d405.png b/docs/archive/JoplinExport/_resources/2471327_s_64_v_4_836ff60f267a488f992436824ab3d405.png new file mode 100644 index 00000000..03e61c96 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/2471327_s_64_v_4_836ff60f267a488f992436824ab3d405.png differ diff --git a/docs/archive/JoplinExport/_resources/2510597_s_460_v_4_331a7c563a154357a67fe76d8a85eeb7.png b/docs/archive/JoplinExport/_resources/2510597_s_460_v_4_331a7c563a154357a67fe76d8a85eeb7.png new file mode 100644 index 00000000..8509b3ba Binary files /dev/null and b/docs/archive/JoplinExport/_resources/2510597_s_460_v_4_331a7c563a154357a67fe76d8a85eeb7.png differ diff --git a/docs/archive/JoplinExport/_resources/25519610_s_88_u_2b61581b0d7ee951_1f2821b7c7324c63b.jpg b/docs/archive/JoplinExport/_resources/25519610_s_88_u_2b61581b0d7ee951_1f2821b7c7324c63b.jpg new file mode 100644 index 00000000..c2fe5575 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/25519610_s_88_u_2b61581b0d7ee951_1f2821b7c7324c63b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/25664373_s_64_v_4_a5368d9cae964f68869d601455e760a3.png b/docs/archive/JoplinExport/_resources/25664373_s_64_v_4_a5368d9cae964f68869d601455e760a3.png new file mode 100644 index 00000000..81cc9ebe Binary files /dev/null and b/docs/archive/JoplinExport/_resources/25664373_s_64_v_4_a5368d9cae964f68869d601455e760a3.png differ diff --git a/docs/archive/JoplinExport/_resources/26216252_s_64_v_4_78db365c95a8423f8f234ab8ff5a3f13.jpg b/docs/archive/JoplinExport/_resources/26216252_s_64_v_4_78db365c95a8423f8f234ab8ff5a3f13.jpg new file mode 100644 index 00000000..ff7462d3 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/26216252_s_64_v_4_78db365c95a8423f8f234ab8ff5a3f13.jpg differ diff --git a/docs/archive/JoplinExport/_resources/26234614_v_4_s_400_43c7c664056648679733c292c78a17e.jpg b/docs/archive/JoplinExport/_resources/26234614_v_4_s_400_43c7c664056648679733c292c78a17e.jpg new file mode 100644 index 00000000..21dc4ff1 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/26234614_v_4_s_400_43c7c664056648679733c292c78a17e.jpg differ diff --git a/docs/archive/JoplinExport/_resources/26678_s_64_v_4_53fb3efa5ca44300b04b3701ab24cb4d.png b/docs/archive/JoplinExport/_resources/26678_s_64_v_4_53fb3efa5ca44300b04b3701ab24cb4d.png new file mode 100644 index 00000000..e6105d21 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/26678_s_64_v_4_53fb3efa5ca44300b04b3701ab24cb4d.png differ diff --git a/docs/archive/JoplinExport/_resources/2699e163-a248-4544-ac61-91d73bf5_dfe19e06026d41d79.jpg b/docs/archive/JoplinExport/_resources/2699e163-a248-4544-ac61-91d73bf5_dfe19e06026d41d79.jpg new file mode 100644 index 00000000..ab56e140 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/2699e163-a248-4544-ac61-91d73bf5_dfe19e06026d41d79.jpg differ diff --git a/docs/archive/JoplinExport/_resources/27728874_s_88_u_b04299a0dd266ae9_c59868ad8b3549628.jpg b/docs/archive/JoplinExport/_resources/27728874_s_88_u_b04299a0dd266ae9_c59868ad8b3549628.jpg new file mode 100644 index 00000000..3e66ba4f Binary files /dev/null and b/docs/archive/JoplinExport/_resources/27728874_s_88_u_b04299a0dd266ae9_c59868ad8b3549628.jpg differ diff --git a/docs/archive/JoplinExport/_resources/2e555ee4-0ec3-4fc3-abf7-bcd45e2e_cc1227864d2a43dda.jpeg b/docs/archive/JoplinExport/_resources/2e555ee4-0ec3-4fc3-abf7-bcd45e2e_cc1227864d2a43dda.jpeg new file mode 100644 index 00000000..c8c42650 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/2e555ee4-0ec3-4fc3-abf7-bcd45e2e_cc1227864d2a43dda.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/31933684_s_48_v_4_a37d6c62c49b464f8201c51ffb0fad75.jpg b/docs/archive/JoplinExport/_resources/31933684_s_48_v_4_a37d6c62c49b464f8201c51ffb0fad75.jpg new file mode 100644 index 00000000..a4e64a71 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/31933684_s_48_v_4_a37d6c62c49b464f8201c51ffb0fad75.jpg differ diff --git a/docs/archive/JoplinExport/_resources/31fa4a5d-e502-4bb4-934f-918499b4_658ea890d2b54c6cb.png b/docs/archive/JoplinExport/_resources/31fa4a5d-e502-4bb4-934f-918499b4_658ea890d2b54c6cb.png new file mode 100644 index 00000000..e7b34989 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/31fa4a5d-e502-4bb4-934f-918499b4_658ea890d2b54c6cb.png differ diff --git a/docs/archive/JoplinExport/_resources/321201_v_4_s_460_9fbddb6161ef49ffab6a7c2fa80a9c09.png b/docs/archive/JoplinExport/_resources/321201_v_4_s_460_9fbddb6161ef49ffab6a7c2fa80a9c09.png new file mode 100644 index 00000000..324a89b7 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/321201_v_4_s_460_9fbddb6161ef49ffab6a7c2fa80a9c09.png differ diff --git a/docs/archive/JoplinExport/_resources/326109cb-a894-412a-b963-1cf36950_9f3380fe1fc4475db.jpg b/docs/archive/JoplinExport/_resources/326109cb-a894-412a-b963-1cf36950_9f3380fe1fc4475db.jpg new file mode 100644 index 00000000..86e64d64 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/326109cb-a894-412a-b963-1cf36950_9f3380fe1fc4475db.jpg differ diff --git a/docs/archive/JoplinExport/_resources/326109cb-a894-412a-b963-1cf36950_aa36568c78ad4dcb9.jpg b/docs/archive/JoplinExport/_resources/326109cb-a894-412a-b963-1cf36950_aa36568c78ad4dcb9.jpg new file mode 100644 index 00000000..b5e533f2 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/326109cb-a894-412a-b963-1cf36950_aa36568c78ad4dcb9.jpg differ diff --git a/docs/archive/JoplinExport/_resources/34-npm_bd501732560e4094be69eea72ffa16b4.png b/docs/archive/JoplinExport/_resources/34-npm_bd501732560e4094be69eea72ffa16b4.png new file mode 100644 index 00000000..30958c52 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/34-npm_bd501732560e4094be69eea72ffa16b4.png differ diff --git a/docs/archive/JoplinExport/_resources/351038_s_64_v_4_ce45da8df723462aa1912f7ec49d576c.jpg b/docs/archive/JoplinExport/_resources/351038_s_64_v_4_ce45da8df723462aa1912f7ec49d576c.jpg new file mode 100644 index 00000000..198155d8 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/351038_s_64_v_4_ce45da8df723462aa1912f7ec49d576c.jpg differ diff --git a/docs/archive/JoplinExport/_resources/3691490_s_64_v_4_6236056ddcd44505ac1c169fec0351b8.jpg b/docs/archive/JoplinExport/_resources/3691490_s_64_v_4_6236056ddcd44505ac1c169fec0351b8.jpg new file mode 100644 index 00000000..1a2d1081 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/3691490_s_64_v_4_6236056ddcd44505ac1c169fec0351b8.jpg differ diff --git a/docs/archive/JoplinExport/_resources/384bb7eee00ec73ff738426a0d5ee4ee_96d8d7d2811641068.gif b/docs/archive/JoplinExport/_resources/384bb7eee00ec73ff738426a0d5ee4ee_96d8d7d2811641068.gif new file mode 100644 index 00000000..036ba185 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/384bb7eee00ec73ff738426a0d5ee4ee_96d8d7d2811641068.gif differ diff --git a/docs/archive/JoplinExport/_resources/3c4f8aa9-73d5-429c-92e4-c175cb36_3454b8e945cc4e1fa.jpeg b/docs/archive/JoplinExport/_resources/3c4f8aa9-73d5-429c-92e4-c175cb36_3454b8e945cc4e1fa.jpeg new file mode 100644 index 00000000..4b74bd7d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/3c4f8aa9-73d5-429c-92e4-c175cb36_3454b8e945cc4e1fa.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/3dbb565c-6cd7-42db-9376-bfad8f9e_efde230f2e1c4b89a.jpeg b/docs/archive/JoplinExport/_resources/3dbb565c-6cd7-42db-9376-bfad8f9e_efde230f2e1c4b89a.jpeg new file mode 100644 index 00000000..500ab76c Binary files /dev/null and b/docs/archive/JoplinExport/_resources/3dbb565c-6cd7-42db-9376-bfad8f9e_efde230f2e1c4b89a.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/40a7a345-20a8-4588-99f6-ea0b1a2d_e2b741ca64614ebdb.jpg b/docs/archive/JoplinExport/_resources/40a7a345-20a8-4588-99f6-ea0b1a2d_e2b741ca64614ebdb.jpg new file mode 100644 index 00000000..e0ddaf06 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/40a7a345-20a8-4588-99f6-ea0b1a2d_e2b741ca64614ebdb.jpg differ diff --git a/docs/archive/JoplinExport/_resources/424045_s_64_v_4_218c6659c9b44658a10765b19fc4d8dd.jpg b/docs/archive/JoplinExport/_resources/424045_s_64_v_4_218c6659c9b44658a10765b19fc4d8dd.jpg new file mode 100644 index 00000000..12c2be17 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/424045_s_64_v_4_218c6659c9b44658a10765b19fc4d8dd.jpg differ diff --git a/docs/archive/JoplinExport/_resources/43814140_s_460_v_4_f75fb515720f4601a1622158d88d020.jpg b/docs/archive/JoplinExport/_resources/43814140_s_460_v_4_f75fb515720f4601a1622158d88d020.jpg new file mode 100644 index 00000000..6c266056 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/43814140_s_460_v_4_f75fb515720f4601a1622158d88d020.jpg differ diff --git a/docs/archive/JoplinExport/_resources/45469_s_48_v_4_440bf03015134ae1974b4c7345aff9a6.jpg b/docs/archive/JoplinExport/_resources/45469_s_48_v_4_440bf03015134ae1974b4c7345aff9a6.jpg new file mode 100644 index 00000000..62976969 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/45469_s_48_v_4_440bf03015134ae1974b4c7345aff9a6.jpg differ diff --git a/docs/archive/JoplinExport/_resources/45469_s_64_v_4_54cca2fae24544fbb8826189f250c57b.jpg b/docs/archive/JoplinExport/_resources/45469_s_64_v_4_54cca2fae24544fbb8826189f250c57b.jpg new file mode 100644 index 00000000..dd2b17f6 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/45469_s_64_v_4_54cca2fae24544fbb8826189f250c57b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/45469_s_88_u_6ab74b3b934f9659a90_6c20e4bc0ffa49e6a.jpg b/docs/archive/JoplinExport/_resources/45469_s_88_u_6ab74b3b934f9659a90_6c20e4bc0ffa49e6a.jpg new file mode 100644 index 00000000..8ff94731 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/45469_s_88_u_6ab74b3b934f9659a90_6c20e4bc0ffa49e6a.jpg differ diff --git a/docs/archive/JoplinExport/_resources/45792768_s_88_u_d232b4e968472ccb_6c8401766a4d4a91b.jpg b/docs/archive/JoplinExport/_resources/45792768_s_88_u_d232b4e968472ccb_6c8401766a4d4a91b.jpg new file mode 100644 index 00000000..940100ac Binary files /dev/null and b/docs/archive/JoplinExport/_resources/45792768_s_88_u_d232b4e968472ccb_6c8401766a4d4a91b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/4865608_v_4_s_460_f8ef97c96096422aac564143ca3665ae.jpg b/docs/archive/JoplinExport/_resources/4865608_v_4_s_460_f8ef97c96096422aac564143ca3665ae.jpg new file mode 100644 index 00000000..159b9c4c Binary files /dev/null and b/docs/archive/JoplinExport/_resources/4865608_v_4_s_460_f8ef97c96096422aac564143ca3665ae.jpg differ diff --git a/docs/archive/JoplinExport/_resources/50088193_s_88_u_c77693b0fcf7bf01_4c94f7154459490ca.jpg b/docs/archive/JoplinExport/_resources/50088193_s_88_u_c77693b0fcf7bf01_4c94f7154459490ca.jpg new file mode 100644 index 00000000..1faf43a9 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/50088193_s_88_u_c77693b0fcf7bf01_4c94f7154459490ca.jpg differ diff --git a/docs/archive/JoplinExport/_resources/5128013_v_4_s_460_8e8ced4281074b8daccaee7fc7094266.jpg b/docs/archive/JoplinExport/_resources/5128013_v_4_s_460_8e8ced4281074b8daccaee7fc7094266.jpg new file mode 100644 index 00000000..c0fc86b4 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/5128013_v_4_s_460_8e8ced4281074b8daccaee7fc7094266.jpg differ diff --git a/docs/archive/JoplinExport/_resources/51948947_s_88_u_171228853e42fd64_ce101cf48cbe4b239.jpg b/docs/archive/JoplinExport/_resources/51948947_s_88_u_171228853e42fd64_ce101cf48cbe4b239.jpg new file mode 100644 index 00000000..fe535c7b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/51948947_s_88_u_171228853e42fd64_ce101cf48cbe4b239.jpg differ diff --git a/docs/archive/JoplinExport/_resources/52195_v_4_s_460_39b9a5ad26c745b28b9086ad5f6caca1.jpg b/docs/archive/JoplinExport/_resources/52195_v_4_s_460_39b9a5ad26c745b28b9086ad5f6caca1.jpg new file mode 100644 index 00000000..b22f5298 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/52195_v_4_s_460_39b9a5ad26c745b28b9086ad5f6caca1.jpg differ diff --git a/docs/archive/JoplinExport/_resources/52eb4b7fa20925f5bec9f725fa1bb7d8_8a73a19846f3470db.jpg b/docs/archive/JoplinExport/_resources/52eb4b7fa20925f5bec9f725fa1bb7d8_8a73a19846f3470db.jpg new file mode 100644 index 00000000..904f7411 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/52eb4b7fa20925f5bec9f725fa1bb7d8_8a73a19846f3470db.jpg differ diff --git a/docs/archive/JoplinExport/_resources/5620d0e9-3353-472e-b0c0-e0181ed2_c55d4dd44978487db.jpeg b/docs/archive/JoplinExport/_resources/5620d0e9-3353-472e-b0c0-e0181ed2_c55d4dd44978487db.jpeg new file mode 100644 index 00000000..868c84c4 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/5620d0e9-3353-472e-b0c0-e0181ed2_c55d4dd44978487db.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/59234683_s_88_u_26e6c04197c72220_b740e059bb6641f0b.jpg b/docs/archive/JoplinExport/_resources/59234683_s_88_u_26e6c04197c72220_b740e059bb6641f0b.jpg new file mode 100644 index 00000000..7258d591 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/59234683_s_88_u_26e6c04197c72220_b740e059bb6641f0b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/59d1ed83dfea4c764b147e8c2aafe20f_89592cf0a93445259.jpg b/docs/archive/JoplinExport/_resources/59d1ed83dfea4c764b147e8c2aafe20f_89592cf0a93445259.jpg new file mode 100644 index 00000000..e0c80dcd Binary files /dev/null and b/docs/archive/JoplinExport/_resources/59d1ed83dfea4c764b147e8c2aafe20f_89592cf0a93445259.jpg differ diff --git a/docs/archive/JoplinExport/_resources/5e36c5cb-4d47-481e-970a-0e1b9961_dadacc1e1986428f9.png b/docs/archive/JoplinExport/_resources/5e36c5cb-4d47-481e-970a-0e1b9961_dadacc1e1986428f9.png new file mode 100644 index 00000000..a199e790 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/5e36c5cb-4d47-481e-970a-0e1b9961_dadacc1e1986428f9.png differ diff --git a/docs/archive/JoplinExport/_resources/5fe417318288f4f1663b8a1acb61c066_3cc304022c1541369.gif b/docs/archive/JoplinExport/_resources/5fe417318288f4f1663b8a1acb61c066_3cc304022c1541369.gif new file mode 100644 index 00000000..b16e91fb Binary files /dev/null and b/docs/archive/JoplinExport/_resources/5fe417318288f4f1663b8a1acb61c066_3cc304022c1541369.gif differ diff --git a/docs/archive/JoplinExport/_resources/6127163_s_64_v_4_6aec30fdeb8547bb9ea3fa8deecdc8d0.jpg b/docs/archive/JoplinExport/_resources/6127163_s_64_v_4_6aec30fdeb8547bb9ea3fa8deecdc8d0.jpg new file mode 100644 index 00000000..a9f696b4 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/6127163_s_64_v_4_6aec30fdeb8547bb9ea3fa8deecdc8d0.jpg differ diff --git a/docs/archive/JoplinExport/_resources/62b762fc-d6de-4bd5-b5da-83026a3e_fbed03dabe684a638.png b/docs/archive/JoplinExport/_resources/62b762fc-d6de-4bd5-b5da-83026a3e_fbed03dabe684a638.png new file mode 100644 index 00000000..1b5e5d11 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/62b762fc-d6de-4bd5-b5da-83026a3e_fbed03dabe684a638.png differ diff --git a/docs/archive/JoplinExport/_resources/642496866407284746_style_flat-sq_bbaf0ace3cfb412fb.svg b/docs/archive/JoplinExport/_resources/642496866407284746_style_flat-sq_bbaf0ace3cfb412fb.svg new file mode 100644 index 00000000..ed2c0f94 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/642496866407284746_style_flat-sq_bbaf0ace3cfb412fb.svg @@ -0,0 +1 @@ +chat: 751 onlinechat751 online \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/68747470733a2f2f6265737470726163_e4e83d9f2d03463c8.svg b/docs/archive/JoplinExport/_resources/68747470733a2f2f6265737470726163_e4e83d9f2d03463c8.svg new file mode 100644 index 00000000..1515f0fa --- /dev/null +++ b/docs/archive/JoplinExport/_resources/68747470733a2f2f6265737470726163_e4e83d9f2d03463c8.svg @@ -0,0 +1 @@ +cii best practicescii best practicespassingpassing \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/68747470733a2f2f692e696d6775722e_50a4ca19622640269.gif b/docs/archive/JoplinExport/_resources/68747470733a2f2f692e696d6775722e_50a4ca19622640269.gif new file mode 100644 index 00000000..869cca9a Binary files /dev/null and b/docs/archive/JoplinExport/_resources/68747470733a2f2f692e696d6775722e_50a4ca19622640269.gif differ diff --git a/docs/archive/JoplinExport/_resources/68747470733a2f2f696d672e73686965_707f753856024bf8b.svg b/docs/archive/JoplinExport/_resources/68747470733a2f2f696d672e73686965_707f753856024bf8b.svg new file mode 100644 index 00000000..1302e2dd --- /dev/null +++ b/docs/archive/JoplinExport/_resources/68747470733a2f2f696d672e73686965_707f753856024bf8b.svg @@ -0,0 +1 @@ +github: discussionsgithubdiscussions \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/68747470733a2f2f696d672e73686965_a056ae235666432d8.svg b/docs/archive/JoplinExport/_resources/68747470733a2f2f696d672e73686965_a056ae235666432d8.svg new file mode 100644 index 00000000..f718102b --- /dev/null +++ b/docs/archive/JoplinExport/_resources/68747470733a2f2f696d672e73686965_a056ae235666432d8.svg @@ -0,0 +1 @@ +version: v0.37.2versionv0.37.2 \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/68747470733a2f2f73332e616d617a6f_01d0db7c7a814988a.png b/docs/archive/JoplinExport/_resources/68747470733a2f2f73332e616d617a6f_01d0db7c7a814988a.png new file mode 100644 index 00000000..1e19c212 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/68747470733a2f2f73332e616d617a6f_01d0db7c7a814988a.png differ diff --git a/docs/archive/JoplinExport/_resources/68747470733a2f2f7472617669732d63_2fea328014be4b49b.svg b/docs/archive/JoplinExport/_resources/68747470733a2f2f7472617669732d63_2fea328014be4b49b.svg new file mode 100644 index 00000000..738e29ee --- /dev/null +++ b/docs/archive/JoplinExport/_resources/68747470733a2f2f7472617669732d63_2fea328014be4b49b.svg @@ -0,0 +1 @@ +buildbuildpassingpassing \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/69254597_s_88_v_4_3c4bb89c46394a95bfdf393aa724f07c.png b/docs/archive/JoplinExport/_resources/69254597_s_88_v_4_3c4bb89c46394a95bfdf393aa724f07c.png new file mode 100644 index 00000000..c19242f5 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/69254597_s_88_v_4_3c4bb89c46394a95bfdf393aa724f07c.png differ diff --git a/docs/archive/JoplinExport/_resources/6959636_s_460_v_4_036282c03e334ca5958cf248f33bc1dd.jpg b/docs/archive/JoplinExport/_resources/6959636_s_460_v_4_036282c03e334ca5958cf248f33bc1dd.jpg new file mode 100644 index 00000000..e04e5ff0 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/6959636_s_460_v_4_036282c03e334ca5958cf248f33bc1dd.jpg differ diff --git a/docs/archive/JoplinExport/_resources/6db03cdd-12a0-4011-92a4-cf671a63_ad39eda88cf34bd8b.jpeg b/docs/archive/JoplinExport/_resources/6db03cdd-12a0-4011-92a4-cf671a63_ad39eda88cf34bd8b.jpeg new file mode 100644 index 00000000..497f7890 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/6db03cdd-12a0-4011-92a4-cf671a63_ad39eda88cf34bd8b.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/6ea39cd3-5710-4e3b-a0cf-5138ecfc_9eeadd60ee5f46b49.png b/docs/archive/JoplinExport/_resources/6ea39cd3-5710-4e3b-a0cf-5138ecfc_9eeadd60ee5f46b49.png new file mode 100644 index 00000000..3496f746 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/6ea39cd3-5710-4e3b-a0cf-5138ecfc_9eeadd60ee5f46b49.png differ diff --git a/docs/archive/JoplinExport/_resources/72444648_s_88_v_4_c5bed1f0b3f44efdb3d4bea9b4bd69be.png b/docs/archive/JoplinExport/_resources/72444648_s_88_v_4_c5bed1f0b3f44efdb3d4bea9b4bd69be.png new file mode 100644 index 00000000..449e6983 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/72444648_s_88_v_4_c5bed1f0b3f44efdb3d4bea9b4bd69be.png differ diff --git a/docs/archive/JoplinExport/_resources/727482_s_64_v_4_bf1293b678ce4f80945cf77a1d4fbc1c.jpg b/docs/archive/JoplinExport/_resources/727482_s_64_v_4_bf1293b678ce4f80945cf77a1d4fbc1c.jpg new file mode 100644 index 00000000..f2125f73 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/727482_s_64_v_4_bf1293b678ce4f80945cf77a1d4fbc1c.jpg differ diff --git a/docs/archive/JoplinExport/_resources/7aa657f7-7559-4f22-bdd6-e147f9ca_b47e398deb514392b.jpeg b/docs/archive/JoplinExport/_resources/7aa657f7-7559-4f22-bdd6-e147f9ca_b47e398deb514392b.jpeg new file mode 100644 index 00000000..da691073 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/7aa657f7-7559-4f22-bdd6-e147f9ca_b47e398deb514392b.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/82de4775-b05d-42fe-947a-a2f2088c_92493e0d7da24aa8a.png b/docs/archive/JoplinExport/_resources/82de4775-b05d-42fe-947a-a2f2088c_92493e0d7da24aa8a.png new file mode 100644 index 00000000..99797242 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/82de4775-b05d-42fe-947a-a2f2088c_92493e0d7da24aa8a.png differ diff --git a/docs/archive/JoplinExport/_resources/89353_s_64_v_4_3350d8cc160f417fb52ab8909ed0dc7c.jpg b/docs/archive/JoplinExport/_resources/89353_s_64_v_4_3350d8cc160f417fb52ab8909ed0dc7c.jpg new file mode 100644 index 00000000..816ddfd7 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/89353_s_64_v_4_3350d8cc160f417fb52ab8909ed0dc7c.jpg differ diff --git a/docs/archive/JoplinExport/_resources/9213230_v_4_s_460_f6dc983289d345b9bc044bf1c4f35aa8.jpg b/docs/archive/JoplinExport/_resources/9213230_v_4_s_460_f6dc983289d345b9bc044bf1c4f35aa8.jpg new file mode 100644 index 00000000..c4358582 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/9213230_v_4_s_460_f6dc983289d345b9bc044bf1c4f35aa8.jpg differ diff --git a/docs/archive/JoplinExport/_resources/921884_s_60_v_4_6926a2faa6604081ab4f1fe7d7666f5b.png b/docs/archive/JoplinExport/_resources/921884_s_60_v_4_6926a2faa6604081ab4f1fe7d7666f5b.png new file mode 100644 index 00000000..3211e23d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/921884_s_60_v_4_6926a2faa6604081ab4f1fe7d7666f5b.png differ diff --git a/docs/archive/JoplinExport/_resources/921884_s_60_v_4_6dc9e6a52eb44de58bd3d00c9154f4c2.png b/docs/archive/JoplinExport/_resources/921884_s_60_v_4_6dc9e6a52eb44de58bd3d00c9154f4c2.png new file mode 100644 index 00000000..3211e23d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/921884_s_60_v_4_6dc9e6a52eb44de58bd3d00c9154f4c2.png differ diff --git a/docs/archive/JoplinExport/_resources/99ab4864635a902569c7fa23977e8746_2834089657d8476fb.jpg b/docs/archive/JoplinExport/_resources/99ab4864635a902569c7fa23977e8746_2834089657d8476fb.jpg new file mode 100644 index 00000000..0fc0affc Binary files /dev/null and b/docs/archive/JoplinExport/_resources/99ab4864635a902569c7fa23977e8746_2834089657d8476fb.jpg differ diff --git a/docs/archive/JoplinExport/_resources/9c44606bd801ec9c00f757538cb392aa_50d92616520b487ab.jpg b/docs/archive/JoplinExport/_resources/9c44606bd801ec9c00f757538cb392aa_50d92616520b487ab.jpg new file mode 100644 index 00000000..1d4b5fba Binary files /dev/null and b/docs/archive/JoplinExport/_resources/9c44606bd801ec9c00f757538cb392aa_50d92616520b487ab.jpg differ diff --git a/docs/archive/JoplinExport/_resources/9f8f2a93-d0a1-4d77-a1f6-c3fc67eb_c88e25e4bc5143698.jpg b/docs/archive/JoplinExport/_resources/9f8f2a93-d0a1-4d77-a1f6-c3fc67eb_c88e25e4bc5143698.jpg new file mode 100644 index 00000000..a99000bb Binary files /dev/null and b/docs/archive/JoplinExport/_resources/9f8f2a93-d0a1-4d77-a1f6-c3fc67eb_c88e25e4bc5143698.jpg differ diff --git a/docs/archive/JoplinExport/_resources/ADGmqu-xiF_d499QeHmzhXYGhNuSa2zs_14f1cb6086e54bd69.png b/docs/archive/JoplinExport/_resources/ADGmqu-xiF_d499QeHmzhXYGhNuSa2zs_14f1cb6086e54bd69.png new file mode 100644 index 00000000..8bbe1276 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/ADGmqu-xiF_d499QeHmzhXYGhNuSa2zs_14f1cb6086e54bd69.png differ diff --git a/docs/archive/JoplinExport/_resources/G-suite-authorized-reseller_90fb1464bee348baa1f761.jpg b/docs/archive/JoplinExport/_resources/G-suite-authorized-reseller_90fb1464bee348baa1f761.jpg new file mode 100644 index 00000000..02961fd9 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/G-suite-authorized-reseller_90fb1464bee348baa1f761.jpg differ diff --git a/docs/archive/JoplinExport/_resources/HomeNetowrk.png b/docs/archive/JoplinExport/_resources/HomeNetowrk.png new file mode 100644 index 00000000..c0d4bfc0 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/HomeNetowrk.png differ diff --git a/docs/archive/JoplinExport/_resources/IT-Online-Logo_f86876d63dc948a2a6453103658255d5.png b/docs/archive/JoplinExport/_resources/IT-Online-Logo_f86876d63dc948a2a6453103658255d5.png new file mode 100644 index 00000000..e180a532 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/IT-Online-Logo_f86876d63dc948a2a6453103658255d5.png differ diff --git a/docs/archive/JoplinExport/_resources/Import-Cost-vscode_5028d9faf049482aa1257416a5ad628.jpg b/docs/archive/JoplinExport/_resources/Import-Cost-vscode_5028d9faf049482aa1257416a5ad628.jpg new file mode 100644 index 00000000..f76cea33 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/Import-Cost-vscode_5028d9faf049482aa1257416a5ad628.jpg differ diff --git a/docs/archive/JoplinExport/_resources/OMZLogo_BnW_03d484f5ef3d4624b9c98782cf2ffef9.png b/docs/archive/JoplinExport/_resources/OMZLogo_BnW_03d484f5ef3d4624b9c98782cf2ffef9.png new file mode 100644 index 00000000..186501fd Binary files /dev/null and b/docs/archive/JoplinExport/_resources/OMZLogo_BnW_03d484f5ef3d4624b9c98782cf2ffef9.png differ diff --git a/docs/archive/JoplinExport/_resources/_3Flinkid_3D2006041_1c02d659cce048cbaaabef50c399b7.gif b/docs/archive/JoplinExport/_resources/_3Flinkid_3D2006041_1c02d659cce048cbaaabef50c399b7.gif new file mode 100644 index 00000000..ccedfa09 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/_3Flinkid_3D2006041_1c02d659cce048cbaaabef50c399b7.gif differ diff --git a/docs/archive/JoplinExport/_resources/a5930809-17c9-411e-b754-e5653134_322aaf5b75674bb8b.jpeg b/docs/archive/JoplinExport/_resources/a5930809-17c9-411e-b754-e5653134_322aaf5b75674bb8b.jpeg new file mode 100644 index 00000000..bb422e83 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/a5930809-17c9-411e-b754-e5653134_322aaf5b75674bb8b.jpeg differ diff --git a/docs/archive/JoplinExport/_resources/af-magic_2658d8d5461b4a3d922ba6350f34da90.jpg b/docs/archive/JoplinExport/_resources/af-magic_2658d8d5461b4a3d922ba6350f34da90.jpg new file mode 100644 index 00000000..5c4d8596 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/af-magic_2658d8d5461b4a3d922ba6350f34da90.jpg differ diff --git a/docs/archive/JoplinExport/_resources/amazonws_23986de2dcbe419195d713812b6b22c3.jpg b/docs/archive/JoplinExport/_resources/amazonws_23986de2dcbe419195d713812b6b22c3.jpg new file mode 100644 index 00000000..d75169ce Binary files /dev/null and b/docs/archive/JoplinExport/_resources/amazonws_23986de2dcbe419195d713812b6b22c3.jpg differ diff --git a/docs/archive/JoplinExport/_resources/association-org-member-badge_6dfaf0e57e764ad8a5979.jpg b/docs/archive/JoplinExport/_resources/association-org-member-badge_6dfaf0e57e764ad8a5979.jpg new file mode 100644 index 00000000..b0da9541 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/association-org-member-badge_6dfaf0e57e764ad8a5979.jpg differ diff --git a/docs/archive/JoplinExport/_resources/australia-flag_73f9a690b9d5482f81b91b25eb5ca358.jpg b/docs/archive/JoplinExport/_resources/australia-flag_73f9a690b9d5482f81b91b25eb5ca358.jpg new file mode 100644 index 00000000..e71aa8bc Binary files /dev/null and b/docs/archive/JoplinExport/_resources/australia-flag_73f9a690b9d5482f81b91b25eb5ca358.jpg differ diff --git a/docs/archive/JoplinExport/_resources/badge_c65468e2acb14e2dabb92bc692d585d4.svg b/docs/archive/JoplinExport/_resources/badge_c65468e2acb14e2dabb92bc692d585d4.svg new file mode 100644 index 00000000..dd1e4303 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/badge_c65468e2acb14e2dabb92bc692d585d4.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + Test + + + Test + + + + + + passing + + + passing + + + + + + diff --git a/docs/archive/JoplinExport/_resources/bagisto-solution-partner-logo_d0753ebef8d5453690f2.jpg b/docs/archive/JoplinExport/_resources/bagisto-solution-partner-logo_d0753ebef8d5453690f2.jpg new file mode 100644 index 00000000..1a2e5cbe Binary files /dev/null and b/docs/archive/JoplinExport/_resources/bagisto-solution-partner-logo_d0753ebef8d5453690f2.jpg differ diff --git a/docs/archive/JoplinExport/_resources/better-comments_95c24991739741639579b190047129e5.png b/docs/archive/JoplinExport/_resources/better-comments_95c24991739741639579b190047129e5.png new file mode 100644 index 00000000..9e35a2d0 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/better-comments_95c24991739741639579b190047129e5.png differ diff --git a/docs/archive/JoplinExport/_resources/bigcommerce-partner-logo_a723724fdcf5418f9c2a2e40c.jpg b/docs/archive/JoplinExport/_resources/bigcommerce-partner-logo_a723724fdcf5418f9c2a2e40c.jpg new file mode 100644 index 00000000..633afe79 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/bigcommerce-partner-logo_a723724fdcf5418f9c2a2e40c.jpg differ diff --git a/docs/archive/JoplinExport/_resources/city_9e660d3bfc5b423e9af6e7216679f835.png b/docs/archive/JoplinExport/_resources/city_9e660d3bfc5b423e9af6e7216679f835.png new file mode 100644 index 00000000..3c446f7b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/city_9e660d3bfc5b423e9af6e7216679f835.png differ diff --git a/docs/archive/JoplinExport/_resources/daveverwer_90cbf1ff87834e35ad6c8a72a5d90d46.jpg b/docs/archive/JoplinExport/_resources/daveverwer_90cbf1ff87834e35ad6c8a72a5d90d46.jpg new file mode 100644 index 00000000..5594b17b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/daveverwer_90cbf1ff87834e35ad6c8a72a5d90d46.jpg differ diff --git a/docs/archive/JoplinExport/_resources/db-certification_3f795781aa1042deab1d9c4bb4bb8639.jpg b/docs/archive/JoplinExport/_resources/db-certification_3f795781aa1042deab1d9c4bb4bb8639.jpg new file mode 100644 index 00000000..fd171108 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/db-certification_3f795781aa1042deab1d9c4bb4bb8639.jpg differ diff --git a/docs/archive/JoplinExport/_resources/de2958226e1839b1842a7b7d783b6eda_ab618fe4e9004c22b.gif b/docs/archive/JoplinExport/_resources/de2958226e1839b1842a7b7d783b6eda_ab618fe4e9004c22b.gif new file mode 100644 index 00000000..1974fb28 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/de2958226e1839b1842a7b7d783b6eda_ab618fe4e9004c22b.gif differ diff --git a/docs/archive/JoplinExport/_resources/debugger-for-chrome_42ae93fdb43b4041a1a04d5f02a741.png b/docs/archive/JoplinExport/_resources/debugger-for-chrome_42ae93fdb43b4041a1a04d5f02a741.png new file mode 100644 index 00000000..313fbe3d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/debugger-for-chrome_42ae93fdb43b4041a1a04d5f02a741.png differ diff --git a/docs/archive/JoplinExport/_resources/demo_e4f839df4ff1407689ba4780c9d2dd93.gif b/docs/archive/JoplinExport/_resources/demo_e4f839df4ff1407689ba4780c9d2dd93.gif new file mode 100644 index 00000000..6de9ba8b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/demo_e4f839df4ff1407689ba4780c9d2dd93.gif differ diff --git a/docs/archive/JoplinExport/_resources/devlogo-pwa-512_b1438702d0464bf79960fa3376503bbe.png b/docs/archive/JoplinExport/_resources/devlogo-pwa-512_b1438702d0464bf79960fa3376503bbe.png new file mode 100644 index 00000000..ca407df7 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/devlogo-pwa-512_b1438702d0464bf79960fa3376503bbe.png differ diff --git a/docs/archive/JoplinExport/_resources/docker_9412cf37514e445fae4a9328dce4bbd5.png b/docs/archive/JoplinExport/_resources/docker_9412cf37514e445fae4a9328dce4bbd5.png new file mode 100644 index 00000000..300563c4 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/docker_9412cf37514e445fae4a9328dce4bbd5.png differ diff --git a/docs/archive/JoplinExport/_resources/drupal-membership1_148ad872fa54405dbc82feb199c095b.jpg b/docs/archive/JoplinExport/_resources/drupal-membership1_148ad872fa54405dbc82feb199c095b.jpg new file mode 100644 index 00000000..badc53e5 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/drupal-membership1_148ad872fa54405dbc82feb199c095b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/drupal-membership_c7a33fe98cf64590a6d6697358742816.jpg b/docs/archive/JoplinExport/_resources/drupal-membership_c7a33fe98cf64590a6d6697358742816.jpg new file mode 100644 index 00000000..c9fc66bc Binary files /dev/null and b/docs/archive/JoplinExport/_resources/drupal-membership_c7a33fe98cf64590a6d6697358742816.jpg differ diff --git a/docs/archive/JoplinExport/_resources/e5930feec42758f97656a95fdbf761c3_b3b292145cf54076b.jpg b/docs/archive/JoplinExport/_resources/e5930feec42758f97656a95fdbf761c3_b3b292145cf54076b.jpg new file mode 100644 index 00000000..3b7948f9 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/e5930feec42758f97656a95fdbf761c3_b3b292145cf54076b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/e6d9dfe3-ed52-4f75-a7f8-a5dcf3ae_6e073f46024741029.jpg b/docs/archive/JoplinExport/_resources/e6d9dfe3-ed52-4f75-a7f8-a5dcf3ae_6e073f46024741029.jpg new file mode 100644 index 00000000..c8730046 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/e6d9dfe3-ed52-4f75-a7f8-a5dcf3ae_6e073f46024741029.jpg differ diff --git a/docs/archive/JoplinExport/_resources/eastwood_8fabcb204ba14e238981c5ca212dae0c.jpg b/docs/archive/JoplinExport/_resources/eastwood_8fabcb204ba14e238981c5ca212dae0c.jpg new file mode 100644 index 00000000..97e92aca Binary files /dev/null and b/docs/archive/JoplinExport/_resources/eastwood_8fabcb204ba14e238981c5ca212dae0c.jpg differ diff --git a/docs/archive/JoplinExport/_resources/email-tips_03a20c93153c4691a703afc7632fcb5a.jpg b/docs/archive/JoplinExport/_resources/email-tips_03a20c93153c4691a703afc7632fcb5a.jpg new file mode 100644 index 00000000..da40f250 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/email-tips_03a20c93153c4691a703afc7632fcb5a.jpg differ diff --git a/docs/archive/JoplinExport/_resources/example_de1b67f11c754488b87808165b351d8a.gif b/docs/archive/JoplinExport/_resources/example_de1b67f11c754488b87808165b351d8a.gif new file mode 100644 index 00000000..3ee6a825 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/example_de1b67f11c754488b87808165b351d8a.gif differ diff --git a/docs/archive/JoplinExport/_resources/fabfitfun.7aa398cf7d47c48a_45af47ce0d6647e1a11a616.svg b/docs/archive/JoplinExport/_resources/fabfitfun.7aa398cf7d47c48a_45af47ce0d6647e1a11a616.svg new file mode 100644 index 00000000..2ed81628 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/fabfitfun.7aa398cf7d47c48a_45af47ce0d6647e1a11a616.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/fastify-logo-inverted.2180cc6b19_2cb925a5a46948709.png b/docs/archive/JoplinExport/_resources/fastify-logo-inverted.2180cc6b19_2cb925a5a46948709.png new file mode 100644 index 00000000..bd4370cd Binary files /dev/null and b/docs/archive/JoplinExport/_resources/fastify-logo-inverted.2180cc6b19_2cb925a5a46948709.png differ diff --git a/docs/archive/JoplinExport/_resources/fastify-logo-menu.d13f8da7a965c8_69c85f34c67e4068a.png b/docs/archive/JoplinExport/_resources/fastify-logo-menu.d13f8da7a965c8_69c85f34c67e4068a.png new file mode 100644 index 00000000..f445517b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/fastify-logo-menu.d13f8da7a965c8_69c85f34c67e4068a.png differ diff --git a/docs/archive/JoplinExport/_resources/fdb3cb41-839d-4aab-a28d-28a726ad_4a04537b2a774b30b.jpg b/docs/archive/JoplinExport/_resources/fdb3cb41-839d-4aab-a28d-28a726ad_4a04537b2a774b30b.jpg new file mode 100644 index 00000000..a2e269fb Binary files /dev/null and b/docs/archive/JoplinExport/_resources/fdb3cb41-839d-4aab-a28d-28a726ad_4a04537b2a774b30b.jpg differ diff --git a/docs/archive/JoplinExport/_resources/follow-marc_7c436a17b89343e5abbee6f887d0ea51.jpg b/docs/archive/JoplinExport/_resources/follow-marc_7c436a17b89343e5abbee6f887d0ea51.jpg new file mode 100644 index 00000000..3e13771e Binary files /dev/null and b/docs/archive/JoplinExport/_resources/follow-marc_7c436a17b89343e5abbee6f887d0ea51.jpg differ diff --git a/docs/archive/JoplinExport/_resources/follow-ohmyzsh_ce66aabc4260418694b5423e4c23aed0.jpg b/docs/archive/JoplinExport/_resources/follow-ohmyzsh_ce66aabc4260418694b5423e4c23aed0.jpg new file mode 100644 index 00000000..1b57588b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/follow-ohmyzsh_ce66aabc4260418694b5423e4c23aed0.jpg differ diff --git a/docs/archive/JoplinExport/_resources/follow-robby_c4bc86e03946446eb1f879217c3d9813.jpg b/docs/archive/JoplinExport/_resources/follow-robby_c4bc86e03946446eb1f879217c3d9813.jpg new file mode 100644 index 00000000..41398724 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/follow-robby_c4bc86e03946446eb1f879217c3d9813.jpg differ diff --git a/docs/archive/JoplinExport/_resources/gesia-it-association_265b782053ac4598b8967ef11d311.jpg b/docs/archive/JoplinExport/_resources/gesia-it-association_265b782053ac4598b8967ef11d311.jpg new file mode 100644 index 00000000..1c23f2eb Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gesia-it-association_265b782053ac4598b8967ef11d311.jpg differ diff --git a/docs/archive/JoplinExport/_resources/gitlens-preview_af72bf4934754fada08fe7e2609269d0.gif b/docs/archive/JoplinExport/_resources/gitlens-preview_af72bf4934754fada08fe7e2609269d0.gif new file mode 100644 index 00000000..f9b504af Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gitlens-preview_af72bf4934754fada08fe7e2609269d0.gif differ diff --git a/docs/archive/JoplinExport/_resources/global-cto-forum.5a4e391465f443b_a28a5caba3af4bbc8.svg b/docs/archive/JoplinExport/_resources/global-cto-forum.5a4e391465f443b_a28a5caba3af4bbc8.svg new file mode 100644 index 00000000..ca992f4b --- /dev/null +++ b/docs/archive/JoplinExport/_resources/global-cto-forum.5a4e391465f443b_a28a5caba3af4bbc8.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/gmail_86374a_en_19b724f072ad4e4197f7d8d7ab3c389a.gif b/docs/archive/JoplinExport/_resources/gmail_86374a_en_19b724f072ad4e4197f7d8d7ab3c389a.gif new file mode 100644 index 00000000..b8ae092d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gmail_86374a_en_19b724f072ad4e4197f7d8d7ab3c389a.gif differ diff --git a/docs/archive/JoplinExport/_resources/gmail_86374b_en_6f3e5dacbc1e4a2f921096369267b426.gif b/docs/archive/JoplinExport/_resources/gmail_86374b_en_6f3e5dacbc1e4a2f921096369267b426.gif new file mode 100644 index 00000000..2d44039e Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gmail_86374b_en_6f3e5dacbc1e4a2f921096369267b426.gif differ diff --git a/docs/archive/JoplinExport/_resources/gmail_86374c_en_b9ae094ee94d4ee6b4241773c89886cf.gif b/docs/archive/JoplinExport/_resources/gmail_86374c_en_b9ae094ee94d4ee6b4241773c89886cf.gif new file mode 100644 index 00000000..b7a0320a Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gmail_86374c_en_b9ae094ee94d4ee6b4241773c89886cf.gif differ diff --git a/docs/archive/JoplinExport/_resources/gmail_86374d_en_436ab3b3ba1a463fbc9285fd59cfc05a.gif b/docs/archive/JoplinExport/_resources/gmail_86374d_en_436ab3b3ba1a463fbc9285fd59cfc05a.gif new file mode 100644 index 00000000..3fcf1322 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gmail_86374d_en_436ab3b3ba1a463fbc9285fd59cfc05a.gif differ diff --git a/docs/archive/JoplinExport/_resources/gmail_86374e_en_8bd86c15fe654046905ccca2995ff37f.gif b/docs/archive/JoplinExport/_resources/gmail_86374e_en_8bd86c15fe654046905ccca2995ff37f.gif new file mode 100644 index 00000000..8b1b610f Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gmail_86374e_en_8bd86c15fe654046905ccca2995ff37f.gif differ diff --git a/docs/archive/JoplinExport/_resources/google-partner_6975a168091a4002a5291d6b57070a7f.jpg b/docs/archive/JoplinExport/_resources/google-partner_6975a168091a4002a5291d6b57070a7f.jpg new file mode 100644 index 00000000..058a159b Binary files /dev/null and b/docs/archive/JoplinExport/_resources/google-partner_6975a168091a4002a5291d6b57070a7f.jpg differ diff --git a/docs/archive/JoplinExport/_resources/gsoc_3f34b5a4c98f45d79e34b49629792ccc.png b/docs/archive/JoplinExport/_resources/gsoc_3f34b5a4c98f45d79e34b49629792ccc.png new file mode 100644 index 00000000..1966358a Binary files /dev/null and b/docs/archive/JoplinExport/_resources/gsoc_3f34b5a4c98f45d79e34b49629792ccc.png differ diff --git a/docs/archive/JoplinExport/_resources/habit.bddfda611001c895_dc5ab53ffaf44c24a6bf5648b62.svg b/docs/archive/JoplinExport/_resources/habit.bddfda611001c895_dc5ab53ffaf44c24a6bf5648b62.svg new file mode 100644 index 00000000..fcd1f274 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/habit.bddfda611001c895_dc5ab53ffaf44c24a6bf5648b62.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/health-check_4013bc08f5bc475d8fc550c7164754c0.svg b/docs/archive/JoplinExport/_resources/health-check_4013bc08f5bc475d8fc550c7164754c0.svg new file mode 100644 index 00000000..a76d2b89 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/health-check_4013bc08f5bc475d8fc550c7164754c0.svg @@ -0,0 +1 @@ +links: failinglinksfailing \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/homebrew-256x256_cfa83e1a078d46958344426c50b72757.png b/docs/archive/JoplinExport/_resources/homebrew-256x256_cfa83e1a078d46958344426c50b72757.png new file mode 100644 index 00000000..cacf7f4e Binary files /dev/null and b/docs/archive/JoplinExport/_resources/homebrew-256x256_cfa83e1a078d46958344426c50b72757.png differ diff --git a/docs/archive/JoplinExport/_resources/iaHeUiDeTUZuo_604cf57a1bb44edbad9813ccbb05351e.gif b/docs/archive/JoplinExport/_resources/iaHeUiDeTUZuo_604cf57a1bb44edbad9813ccbb05351e.gif new file mode 100644 index 00000000..8df381bd Binary files /dev/null and b/docs/archive/JoplinExport/_resources/iaHeUiDeTUZuo_604cf57a1bb44edbad9813ccbb05351e.gif differ diff --git a/docs/archive/JoplinExport/_resources/ibm-registered-partner_a94244c1c1cb4cd7bf0f9cd4f27.jpg b/docs/archive/JoplinExport/_resources/ibm-registered-partner_a94244c1c1cb4cd7bf0f9cd4f27.jpg new file mode 100644 index 00000000..698f69d0 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/ibm-registered-partner_a94244c1c1cb4cd7bf0f9cd4f27.jpg differ diff --git a/docs/archive/JoplinExport/_resources/icon-facebook_3d636543f35a43ff87005901cbd907d5.svg b/docs/archive/JoplinExport/_resources/icon-facebook_3d636543f35a43ff87005901cbd907d5.svg new file mode 100644 index 00000000..5b022880 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/icon-facebook_3d636543f35a43ff87005901cbd907d5.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/docs/archive/JoplinExport/_resources/icon-instagram_f4df17c26ccf4d37ae72ee2ab22f4945.svg b/docs/archive/JoplinExport/_resources/icon-instagram_f4df17c26ccf4d37ae72ee2ab22f4945.svg new file mode 100644 index 00000000..13c26674 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/icon-instagram_f4df17c26ccf4d37ae72ee2ab22f4945.svg @@ -0,0 +1,24 @@ + + + + + + diff --git a/docs/archive/JoplinExport/_resources/icon-twitter_f129cd5dc9de4a1a84f04b361e289b3b.svg b/docs/archive/JoplinExport/_resources/icon-twitter_f129cd5dc9de4a1a84f04b361e289b3b.svg new file mode 100644 index 00000000..b5fc3d8a --- /dev/null +++ b/docs/archive/JoplinExport/_resources/icon-twitter_f129cd5dc9de4a1a84f04b361e289b3b.svg @@ -0,0 +1,24 @@ + + + + Brands/twitter + Created with Sketch. + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/india_88f902ab7bb44c1abd383e8b6cdaaf86.gif b/docs/archive/JoplinExport/_resources/india_88f902ab7bb44c1abd383e8b6cdaaf86.gif new file mode 100644 index 00000000..cdb4dd57 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/india_88f902ab7bb44c1abd383e8b6cdaaf86.gif differ diff --git a/docs/archive/JoplinExport/_resources/intro_1029016a8f8a4ad59f024d35fde0f5cf.gif b/docs/archive/JoplinExport/_resources/intro_1029016a8f8a4ad59f024d35fde0f5cf.gif new file mode 100644 index 00000000..aef0b3de Binary files /dev/null and b/docs/archive/JoplinExport/_resources/intro_1029016a8f8a4ad59f024d35fde0f5cf.gif differ diff --git a/docs/archive/JoplinExport/_resources/iso-27001-2013-logo_50e0a7ba236a44f586be0fe1c6a865.jpg b/docs/archive/JoplinExport/_resources/iso-27001-2013-logo_50e0a7ba236a44f586be0fe1c6a865.jpg new file mode 100644 index 00000000..f84c044c Binary files /dev/null and b/docs/archive/JoplinExport/_resources/iso-27001-2013-logo_50e0a7ba236a44f586be0fe1c6a865.jpg differ diff --git a/docs/archive/JoplinExport/_resources/iso-9001-2015-logo_4ec55ac631b24526880daf98305c67e.jpg b/docs/archive/JoplinExport/_resources/iso-9001-2015-logo_4ec55ac631b24526880daf98305c67e.jpg new file mode 100644 index 00000000..5111d844 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/iso-9001-2015-logo_4ec55ac631b24526880daf98305c67e.jpg differ diff --git a/docs/archive/JoplinExport/_resources/kolo_cca6089fdc9f47348e7e596edf1547fb.jpg b/docs/archive/JoplinExport/_resources/kolo_cca6089fdc9f47348e7e596edf1547fb.jpg new file mode 100644 index 00000000..9561abb5 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/kolo_cca6089fdc9f47348e7e596edf1547fb.jpg differ diff --git a/docs/archive/JoplinExport/_resources/landing-icon-clipboard_b364c7ff70bb446c97277bc16e8.svg b/docs/archive/JoplinExport/_resources/landing-icon-clipboard_b364c7ff70bb446c97277bc16e8.svg new file mode 100644 index 00000000..6755fde8 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/landing-icon-clipboard_b364c7ff70bb446c97277bc16e8.svg @@ -0,0 +1 @@ +icon-128px-clipboard copy 2 \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/landing-icon-clock_afbd457359974500a353251c17b917e.svg b/docs/archive/JoplinExport/_resources/landing-icon-clock_afbd457359974500a353251c17b917e.svg new file mode 100644 index 00000000..37d0d776 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/landing-icon-clock_afbd457359974500a353251c17b917e.svg @@ -0,0 +1 @@ +icon-128px-clock_1 \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/landing-icon-globe_645bf3bae59d4facaf3b88fe7b05b25.svg b/docs/archive/JoplinExport/_resources/landing-icon-globe_645bf3bae59d4facaf3b88fe7b05b25.svg new file mode 100644 index 00000000..d06c183f --- /dev/null +++ b/docs/archive/JoplinExport/_resources/landing-icon-globe_645bf3bae59d4facaf3b88fe7b05b25.svg @@ -0,0 +1 @@ +icon-128px-globe_2 \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/landing-icon-list_6887cf8daa054453a3cd02e4c263f22d.svg b/docs/archive/JoplinExport/_resources/landing-icon-list_6887cf8daa054453a3cd02e4c263f22d.svg new file mode 100644 index 00000000..205284f1 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/landing-icon-list_6887cf8daa054453a3cd02e4c263f22d.svg @@ -0,0 +1 @@ +icon-128px-list_2 \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/landing-icon-sliders_5bb60caaf431420a999c0237bfc51.svg b/docs/archive/JoplinExport/_resources/landing-icon-sliders_5bb60caaf431420a999c0237bfc51.svg new file mode 100644 index 00000000..72302535 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/landing-icon-sliders_5bb60caaf431420a999c0237bfc51.svg @@ -0,0 +1 @@ +icon-128px-sliders_2 \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/landing-icon-video-lecture_42ca70411c7b48e8b13cd69.svg b/docs/archive/JoplinExport/_resources/landing-icon-video-lecture_42ca70411c7b48e8b13cd69.svg new file mode 100644 index 00000000..ee0484f1 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/landing-icon-video-lecture_42ca70411c7b48e8b13cd69.svg @@ -0,0 +1 @@ +icon-128px-video-lecture_1 \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/lockup-developers_e8596babe5994483bcae6fd2d6d9716e.svg b/docs/archive/JoplinExport/_resources/lockup-developers_e8596babe5994483bcae6fd2d6d9716e.svg new file mode 100644 index 00000000..d8e879a4 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/lockup-developers_e8596babe5994483bcae6fd2d6d9716e.svg @@ -0,0 +1,57 @@ + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logdna.68fb856ea6333916_8e0b17a4ed704e5da2db5ff71c.svg b/docs/archive/JoplinExport/_resources/logdna.68fb856ea6333916_8e0b17a4ed704e5da2db5ff71c.svg new file mode 100644 index 00000000..9b4a6826 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logdna.68fb856ea6333916_8e0b17a4ed704e5da2db5ff71c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/logo-aws_a9da392c3ff84c49b46739a563d01cad.svg b/docs/archive/JoplinExport/_resources/logo-aws_a9da392c3ff84c49b46739a563d01cad.svg new file mode 100644 index 00000000..4715937f --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-aws_a9da392c3ff84c49b46739a563d01cad.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logo-discord_b8c7de2c8a344362a1a0827b7ca4d470.svg b/docs/archive/JoplinExport/_resources/logo-discord_b8c7de2c8a344362a1a0827b7ca4d470.svg new file mode 100644 index 00000000..22dd1136 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-discord_b8c7de2c8a344362a1a0827b7ca4d470.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/logo-django_5b9bb5a30ac74db29f56978e332bcfe3.svg b/docs/archive/JoplinExport/_resources/logo-django_5b9bb5a30ac74db29f56978e332bcfe3.svg new file mode 100644 index 00000000..1538f081 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-django_5b9bb5a30ac74db29f56978e332bcfe3.svg @@ -0,0 +1,38 @@ + + + + +]> + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logo-docker_9b91f82b37ea44909552eb54a23e7597.png b/docs/archive/JoplinExport/_resources/logo-docker_9b91f82b37ea44909552eb54a23e7597.png new file mode 100644 index 00000000..d83e54a7 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-docker_9b91f82b37ea44909552eb54a23e7597.png differ diff --git a/docs/archive/JoplinExport/_resources/logo-git_890edba434354ffbae399000624f6a6d.png b/docs/archive/JoplinExport/_resources/logo-git_890edba434354ffbae399000624f6a6d.png new file mode 100644 index 00000000..18c5b29d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-git_890edba434354ffbae399000624f6a6d.png differ diff --git a/docs/archive/JoplinExport/_resources/logo-go_4cf3c240a64642c38c5b17cf117db494.svg b/docs/archive/JoplinExport/_resources/logo-go_4cf3c240a64642c38c5b17cf117db494.svg new file mode 100644 index 00000000..da6ea83d --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-go_4cf3c240a64642c38c5b17cf117db494.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/logo-heroku_b842f1ef13a84642b85afef768b957aa.svg b/docs/archive/JoplinExport/_resources/logo-heroku_b842f1ef13a84642b85afef768b957aa.svg new file mode 100644 index 00000000..33928fbe --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-heroku_b842f1ef13a84642b85afef768b957aa.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/archive/JoplinExport/_resources/logo-kubernetes_642200ced01b49b38f8bb2cf9e008cea.png b/docs/archive/JoplinExport/_resources/logo-kubernetes_642200ced01b49b38f8bb2cf9e008cea.png new file mode 100644 index 00000000..2e48618c Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-kubernetes_642200ced01b49b38f8bb2cf9e008cea.png differ diff --git a/docs/archive/JoplinExport/_resources/logo-laravel_aeb51f28a9504fffb3eb73a808574e42.svg b/docs/archive/JoplinExport/_resources/logo-laravel_aeb51f28a9504fffb3eb73a808574e42.svg new file mode 100644 index 00000000..73b8e534 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-laravel_aeb51f28a9504fffb3eb73a808574e42.svg @@ -0,0 +1,16 @@ + + + + Group + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/logo-nodejs_eb49a0c91e424ff2afe85d99150e22b2.svg b/docs/archive/JoplinExport/_resources/logo-nodejs_eb49a0c91e424ff2afe85d99150e22b2.svg new file mode 100644 index 00000000..3029b247 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-nodejs_eb49a0c91e424ff2afe85d99150e22b2.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logo-pa_fee6104221db4e8e90f3138fc4088d88.svg b/docs/archive/JoplinExport/_resources/logo-pa_fee6104221db4e8e90f3138fc4088d88.svg new file mode 100644 index 00000000..012be58d --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-pa_fee6104221db4e8e90f3138fc4088d88.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logo-postgresql_d1c203a3cbea4b888493d1d966a92db5.svg b/docs/archive/JoplinExport/_resources/logo-postgresql_d1c203a3cbea4b888493d1d966a92db5.svg new file mode 100644 index 00000000..1a29d4b1 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-postgresql_d1c203a3cbea4b888493d1d966a92db5.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/logo-python_14ba40c4f12d4479a371024f97e122e2.svg b/docs/archive/JoplinExport/_resources/logo-python_14ba40c4f12d4479a371024f97e122e2.svg new file mode 100644 index 00000000..116eaac3 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-python_14ba40c4f12d4479a371024f97e122e2.svg @@ -0,0 +1,269 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logo-rails_81697831d55d4e79afa133a446a4209d.svg b/docs/archive/JoplinExport/_resources/logo-rails_81697831d55d4e79afa133a446a4209d.svg new file mode 100644 index 00000000..9e8fc413 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-rails_81697831d55d4e79afa133a446a4209d.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logo-react_bd9463046a664bf481e35547960ed64e.png b/docs/archive/JoplinExport/_resources/logo-react_bd9463046a664bf481e35547960ed64e.png new file mode 100644 index 00000000..59e15b93 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-react_bd9463046a664bf481e35547960ed64e.png differ diff --git a/docs/archive/JoplinExport/_resources/logo-ruby_a8eb46b7a76243358751fbc704481459.svg b/docs/archive/JoplinExport/_resources/logo-ruby_a8eb46b7a76243358751fbc704481459.svg new file mode 100644 index 00000000..e5983a64 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo-ruby_a8eb46b7a76243358751fbc704481459.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/logo-scala_0a3f36fb21884a288317fdf966ebdd02.png b/docs/archive/JoplinExport/_resources/logo-scala_0a3f36fb21884a288317fdf966ebdd02.png new file mode 100644 index 00000000..28d205e7 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-scala_0a3f36fb21884a288317fdf966ebdd02.png differ diff --git a/docs/archive/JoplinExport/_resources/logo-spotify_8eab01d498ec4303a6e715deb970c67b.png b/docs/archive/JoplinExport/_resources/logo-spotify_8eab01d498ec4303a6e715deb970c67b.png new file mode 100644 index 00000000..cafa832d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-spotify_8eab01d498ec4303a6e715deb970c67b.png differ diff --git a/docs/archive/JoplinExport/_resources/logo-sublime_eae2138473d444a9b4c51dcf3a6734b2.png b/docs/archive/JoplinExport/_resources/logo-sublime_eae2138473d444a9b4c51dcf3a6734b2.png new file mode 100644 index 00000000..9724e35e Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-sublime_eae2138473d444a9b4c51dcf3a6734b2.png differ diff --git a/docs/archive/JoplinExport/_resources/logo-vscode_47043638e17f4bed9139e167b587208c.png b/docs/archive/JoplinExport/_resources/logo-vscode_47043638e17f4bed9139e167b587208c.png new file mode 100644 index 00000000..ea8aefd7 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo-vscode_47043638e17f4bed9139e167b587208c.png differ diff --git a/docs/archive/JoplinExport/_resources/logo_210ae374524a4aa298a2d4698c9b7ebf.png b/docs/archive/JoplinExport/_resources/logo_210ae374524a4aa298a2d4698c9b7ebf.png new file mode 100644 index 00000000..e56df001 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo_210ae374524a4aa298a2d4698c9b7ebf.png differ diff --git a/docs/archive/JoplinExport/_resources/logo_5e7734ea2abe4b2da4a184917b0210b7.png b/docs/archive/JoplinExport/_resources/logo_5e7734ea2abe4b2da4a184917b0210b7.png new file mode 100644 index 00000000..23f35d7c Binary files /dev/null and b/docs/archive/JoplinExport/_resources/logo_5e7734ea2abe4b2da4a184917b0210b7.png differ diff --git a/docs/archive/JoplinExport/_resources/logo_on_dark__horizontal_color_e5261b4d2843464bad3.svg b/docs/archive/JoplinExport/_resources/logo_on_dark__horizontal_color_e5261b4d2843464bad3.svg new file mode 100644 index 00000000..a49fc74f --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo_on_dark__horizontal_color_e5261b4d2843464bad3.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/logo_on_light__horizontal_color_8e134f066d734f3b8c.svg b/docs/archive/JoplinExport/_resources/logo_on_light__horizontal_color_8e134f066d734f3b8c.svg new file mode 100644 index 00000000..35360ef4 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/logo_on_light__horizontal_color_8e134f066d734f3b8c.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/mailchimp-expert-logo_be00ca4c845a46e6a8760bec0e09.jpg b/docs/archive/JoplinExport/_resources/mailchimp-expert-logo_be00ca4c845a46e6a8760bec0e09.jpg new file mode 100644 index 00000000..b0282a4e Binary files /dev/null and b/docs/archive/JoplinExport/_resources/mailchimp-expert-logo_be00ca4c845a46e6a8760bec0e09.jpg differ diff --git a/docs/archive/JoplinExport/_resources/main-video_b14c4fb63894419896d26e1802ff83a6.gif b/docs/archive/JoplinExport/_resources/main-video_b14c4fb63894419896d26e1802ff83a6.gif new file mode 100644 index 00000000..9adf4115 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/main-video_b14c4fb63894419896d26e1802ff83a6.gif differ diff --git a/docs/archive/JoplinExport/_resources/mh_20fcfe8f70a94e43a9b589d25d5cb1b2.jpg b/docs/archive/JoplinExport/_resources/mh_20fcfe8f70a94e43a9b589d25d5cb1b2.jpg new file mode 100644 index 00000000..27fe8104 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/mh_20fcfe8f70a94e43a9b589d25d5cb1b2.jpg differ diff --git a/docs/archive/JoplinExport/_resources/microsoft-partner-logo_0ab31ca73130468ba7aac95fa37.jpg b/docs/archive/JoplinExport/_resources/microsoft-partner-logo_0ab31ca73130468ba7aac95fa37.jpg new file mode 100644 index 00000000..8922c1df Binary files /dev/null and b/docs/archive/JoplinExport/_resources/microsoft-partner-logo_0ab31ca73130468ba7aac95fa37.jpg differ diff --git a/docs/archive/JoplinExport/_resources/microsoft.8f028edbe9fe9d40_13e91f6eb5514036be272ee.svg b/docs/archive/JoplinExport/_resources/microsoft.8f028edbe9fe9d40_13e91f6eb5514036be272ee.svg new file mode 100644 index 00000000..b5a4dc9d --- /dev/null +++ b/docs/archive/JoplinExport/_resources/microsoft.8f028edbe9fe9d40_13e91f6eb5514036be272ee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/mrp.366c52cf20c7664b_237a527f743a4bc7ab16e3d9e866f.svg b/docs/archive/JoplinExport/_resources/mrp.366c52cf20c7664b_237a527f743a4bc7ab16e3d9e866f.svg new file mode 100644 index 00000000..562c4759 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/mrp.366c52cf20c7664b_237a527f743a4bc7ab16e3d9e866f.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/mspAlliance-member_bde41eccb76f4b71b4f19474866472f.jpg b/docs/archive/JoplinExport/_resources/mspAlliance-member_bde41eccb76f4b71b4f19474866472f.jpg new file mode 100644 index 00000000..17858971 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/mspAlliance-member_bde41eccb76f4b71b4f19474866472f.jpg differ diff --git a/docs/archive/JoplinExport/_resources/nasscom-member_766eeb8bd928448fb3da1550b139ebf5.jpg b/docs/archive/JoplinExport/_resources/nasscom-member_766eeb8bd928448fb3da1550b139ebf5.jpg new file mode 100644 index 00000000..3181afa2 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/nasscom-member_766eeb8bd928448fb3da1550b139ebf5.jpg differ diff --git a/docs/archive/JoplinExport/_resources/nebirhos_b81e83235fa046f782d88888a0d119cd.jpg b/docs/archive/JoplinExport/_resources/nebirhos_b81e83235fa046f782d88888a0d119cd.jpg new file mode 100644 index 00000000..5af278ff Binary files /dev/null and b/docs/archive/JoplinExport/_resources/nebirhos_b81e83235fa046f782d88888a0d119cd.jpg differ diff --git a/docs/archive/JoplinExport/_resources/nucleode.fc9b4dd4588c1716_4eabfabd4057493e89ceed68.svg b/docs/archive/JoplinExport/_resources/nucleode.fc9b4dd4588c1716_4eabfabd4057493e89ceed68.svg new file mode 100644 index 00000000..ccbf8457 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/nucleode.fc9b4dd4588c1716_4eabfabd4057493e89ceed68.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/openjsf-knockout.2e1aee2e40559fa_bf572e615f5d4f22b.svg b/docs/archive/JoplinExport/_resources/openjsf-knockout.2e1aee2e40559fa_bf572e615f5d4f22b.svg new file mode 100644 index 00000000..03421af5 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/openjsf-knockout.2e1aee2e40559fa_bf572e615f5d4f22b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/oscommerce-certified-usa-partner_1c4f8dca436b443c9.jpg b/docs/archive/JoplinExport/_resources/oscommerce-certified-usa-partner_1c4f8dca436b443c9.jpg new file mode 100644 index 00000000..7e76f705 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/oscommerce-certified-usa-partner_1c4f8dca436b443c9.jpg differ diff --git a/docs/archive/JoplinExport/_resources/path-autocomplete_780f2062ceae4a7a8cb4148d6ddf0568.gif b/docs/archive/JoplinExport/_resources/path-autocomplete_780f2062ceae4a7a8cb4148d6ddf0568.gif new file mode 100644 index 00000000..a0a9aba2 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/path-autocomplete_780f2062ceae4a7a8cb4148d6ddf0568.gif differ diff --git a/docs/archive/JoplinExport/_resources/patreon_5f069e3860d747079ed006f9fc1dfd9e.svg b/docs/archive/JoplinExport/_resources/patreon_5f069e3860d747079ed006f9fc1dfd9e.svg new file mode 100644 index 00000000..3713fe97 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/patreon_5f069e3860d747079ed006f9fc1dfd9e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/pi1zbkpo2m0vnnlqwkht_82dfdb59bad1440b8f6b3f25fd3c8.png b/docs/archive/JoplinExport/_resources/pi1zbkpo2m0vnnlqwkht_82dfdb59bad1440b8f6b3f25fd3c8.png new file mode 100644 index 00000000..5a8e06b3 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/pi1zbkpo2m0vnnlqwkht_82dfdb59bad1440b8f6b3f25fd3c8.png differ diff --git a/docs/archive/JoplinExport/_resources/prettier_555a2ea997884d419268503d16de78c5.png b/docs/archive/JoplinExport/_resources/prettier_555a2ea997884d419268503d16de78c5.png new file mode 100644 index 00000000..20b67914 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/prettier_555a2ea997884d419268503d16de78c5.png differ diff --git a/docs/archive/JoplinExport/_resources/quero-educacao.30fc7cc391afc572_587f6cb373264a4ba6.svg b/docs/archive/JoplinExport/_resources/quero-educacao.30fc7cc391afc572_587f6cb373264a4ba6.svg new file mode 100644 index 00000000..15c7b51f --- /dev/null +++ b/docs/archive/JoplinExport/_resources/quero-educacao.30fc7cc391afc572_587f6cb373264a4ba6.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/radity.4eee1d7016ba6062_85e29bcf1be54a1a8fb003d98e.svg b/docs/archive/JoplinExport/_resources/radity.4eee1d7016ba6062_85e29bcf1be54a1a8fb003d98e.svg new file mode 100644 index 00000000..b1c31222 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/radity.4eee1d7016ba6062_85e29bcf1be54a1a8fb003d98e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/rainbow-robbies_7bcbf5d75e3044e484a7ab9808d6a90d.jpg b/docs/archive/JoplinExport/_resources/rainbow-robbies_7bcbf5d75e3044e484a7ab9808d6a90d.jpg new file mode 100644 index 00000000..19b815f2 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/rainbow-robbies_7bcbf5d75e3044e484a7ab9808d6a90d.jpg differ diff --git a/docs/archive/JoplinExport/_resources/remote-ssh_10b51a08297c410b9815769b8056fdd6.png b/docs/archive/JoplinExport/_resources/remote-ssh_10b51a08297c410b9815769b8056fdd6.png new file mode 100644 index 00000000..8734658f Binary files /dev/null and b/docs/archive/JoplinExport/_resources/remote-ssh_10b51a08297c410b9815769b8056fdd6.png differ diff --git a/docs/archive/JoplinExport/_resources/right-grey_2x_a99b713d192c41bba382c23da16a67c3.png b/docs/archive/JoplinExport/_resources/right-grey_2x_a99b713d192c41bba382c23da16a67c3.png new file mode 100644 index 00000000..a55f0c6e Binary files /dev/null and b/docs/archive/JoplinExport/_resources/right-grey_2x_a99b713d192c41bba382c23da16a67c3.png differ diff --git a/docs/archive/JoplinExport/_resources/satiurn.1a5149cc66d4dc6d_9ddda710cd5146259d46c8517.svg b/docs/archive/JoplinExport/_resources/satiurn.1a5149cc66d4dc6d_9ddda710cd5146259d46c8517.svg new file mode 100644 index 00000000..c7466192 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/satiurn.1a5149cc66d4dc6d_9ddda710cd5146259d46c8517.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/search-key-slash_2d6dd05ab650429ead15e7b37b765c95.svg b/docs/archive/JoplinExport/_resources/search-key-slash_2d6dd05ab650429ead15e7b37b765c95.svg new file mode 100644 index 00000000..d2a5ddbb --- /dev/null +++ b/docs/archive/JoplinExport/_resources/search-key-slash_2d6dd05ab650429ead15e7b37b765c95.svg @@ -0,0 +1,5 @@ + + + + diff --git a/docs/archive/JoplinExport/_resources/search-key-slash_91824b27c6c342558c419f7e526695f9.svg b/docs/archive/JoplinExport/_resources/search-key-slash_91824b27c6c342558c419f7e526695f9.svg new file mode 100644 index 00000000..d2a5ddbb --- /dev/null +++ b/docs/archive/JoplinExport/_resources/search-key-slash_91824b27c6c342558c419f7e526695f9.svg @@ -0,0 +1,5 @@ + + + + diff --git a/docs/archive/JoplinExport/_resources/section-numbers_979bdcb6721b4f7d83cb1630def48e75.gif b/docs/archive/JoplinExport/_resources/section-numbers_979bdcb6721b4f7d83cb1630def48e75.gif new file mode 100644 index 00000000..b511b7e6 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/section-numbers_979bdcb6721b4f7d83cb1630def48e75.gif differ diff --git a/docs/archive/JoplinExport/_resources/seznam.0e852b48d7670e1e.cz_084d41afe7c14f65852f4f9.svg b/docs/archive/JoplinExport/_resources/seznam.0e852b48d7670e1e.cz_084d41afe7c14f65852f4f9.svg new file mode 100644 index 00000000..417ed7a1 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/seznam.0e852b48d7670e1e.cz_084d41afe7c14f65852f4f9.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/shopify-logo_32c31b343d3c46b9bc0af1755154a9c8.jpg b/docs/archive/JoplinExport/_resources/shopify-logo_32c31b343d3c46b9bc0af1755154a9c8.jpg new file mode 100644 index 00000000..2c3bf88d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/shopify-logo_32c31b343d3c46b9bc0af1755154a9c8.jpg differ diff --git a/docs/archive/JoplinExport/_resources/skynet-technologies-logo_25e9d40afd8e4120a51032493.svg b/docs/archive/JoplinExport/_resources/skynet-technologies-logo_25e9d40afd8e4120a51032493.svg new file mode 100644 index 00000000..03385406 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/skynet-technologies-logo_25e9d40afd8e4120a51032493.svg @@ -0,0 +1,684 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/archive/JoplinExport/_resources/swissdev-javascript-jobs-200-200_794d50c324cc4ce59.svg b/docs/archive/JoplinExport/_resources/swissdev-javascript-jobs-200-200_794d50c324cc4ce59.svg new file mode 100644 index 00000000..b7076c42 --- /dev/null +++ b/docs/archive/JoplinExport/_resources/swissdev-javascript-jobs-200-200_794d50c324cc4ce59.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/tidelift_32214da6b1a74381bc8e1983e9df6a5e.svg b/docs/archive/JoplinExport/_resources/tidelift_32214da6b1a74381bc8e1983e9df6a5e.svg new file mode 100644 index 00000000..bb7ea1cc --- /dev/null +++ b/docs/archive/JoplinExport/_resources/tidelift_32214da6b1a74381bc8e1983e9df6a5e.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/archive/JoplinExport/_resources/tips-to-configure-outlook_5ae1a7f3e3e94b9687da65e8.jpg b/docs/archive/JoplinExport/_resources/tips-to-configure-outlook_5ae1a7f3e3e94b9687da65e8.jpg new file mode 100644 index 00000000..ad3a9010 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/tips-to-configure-outlook_5ae1a7f3e3e94b9687da65e8.jpg differ diff --git a/docs/archive/JoplinExport/_resources/usa_ace6796cbb9c416ba4b8a4a4f3a12701.gif b/docs/archive/JoplinExport/_resources/usa_ace6796cbb9c416ba4b8a4a4f3a12701.gif new file mode 100644 index 00000000..1a3bcd9d Binary files /dev/null and b/docs/archive/JoplinExport/_resources/usa_ace6796cbb9c416ba4b8a4a4f3a12701.gif differ diff --git a/docs/archive/JoplinExport/_resources/usage_d12a7384fc894ab48f0d02905b25593e.gif b/docs/archive/JoplinExport/_resources/usage_d12a7384fc894ab48f0d02905b25593e.gif new file mode 100644 index 00000000..06f81c86 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/usage_d12a7384fc894ab48f0d02905b25593e.gif differ diff --git a/docs/archive/JoplinExport/_resources/usage_f02475261a4b4e83b4838f1e1ebf366c.gif b/docs/archive/JoplinExport/_resources/usage_f02475261a4b4e83b4838f1e1ebf366c.gif new file mode 100644 index 00000000..70bfb40f Binary files /dev/null and b/docs/archive/JoplinExport/_resources/usage_f02475261a4b4e83b4838f1e1ebf366c.gif differ diff --git a/docs/archive/JoplinExport/_resources/vscode-live-server-animated-demo_4622e8087eac4ee19.gif b/docs/archive/JoplinExport/_resources/vscode-live-server-animated-demo_4622e8087eac4ee19.gif new file mode 100644 index 00000000..6212d8e7 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/vscode-live-server-animated-demo_4622e8087eac4ee19.gif differ diff --git a/docs/archive/JoplinExport/_resources/vscode-project-manager-side-bar_38d6fa5233994c3eae.gif b/docs/archive/JoplinExport/_resources/vscode-project-manager-side-bar_38d6fa5233994c3eae.gif new file mode 100644 index 00000000..84f58916 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/vscode-project-manager-side-bar_38d6fa5233994c3eae.gif differ diff --git a/docs/archive/JoplinExport/_resources/wmv3mtusjwb3r13d5h2f_41e00248024a415aa956cff67f603.png b/docs/archive/JoplinExport/_resources/wmv3mtusjwb3r13d5h2f_41e00248024a415aa956cff67f603.png new file mode 100644 index 00000000..603c7a97 Binary files /dev/null and b/docs/archive/JoplinExport/_resources/wmv3mtusjwb3r13d5h2f_41e00248024a415aa956cff67f603.png differ diff --git a/docs/archive/Keyboard Shortcuts.md b/docs/archive/Keyboard Shortcuts.md new file mode 100644 index 00000000..108f2d92 --- /dev/null +++ b/docs/archive/Keyboard Shortcuts.md @@ -0,0 +1,27 @@ +# Keyboard Shortcuts +* These are the short-cuts I'll use on a regular basis. +## Keyboard commands for Visual Studio Code dev +### Visual Studio Code +* Terminal + * Show terminal: CTRL-` + * New terminal: CTRL-Shift-` +* Multi-cursor + * Insert Cursor: OPT-click + * Insert Cursor Above: OPT-CMD-up-arrow + * Insert Cursor Below: OPT-CMD-down-arrow + * Undo: CMD-U + * Insert at end of each line selected: Shift-OPT-I + * All occurrences of current selection: Shift-Cmd-L + * Expand/Shrink Selection: Ctrl-Shift-Cmd-arrow forward or back +* Language Editing + * Quick Fix: Cmd-. + * Show all symbols: Cmd-T + * Editor: Ctrl-_ or Ctrl-Shift-- + * Copy path of active file: Cmd-K P + +### Vim in Visual Studio Code +### OhMyZsh Shortcuts (terminal) +* Git + * `gc -m "message"` - Git commit + * `ga .` - Git add + * diff --git a/docs/archive/Rails with Github Codespaces.md b/docs/archive/Rails with Github Codespaces.md new file mode 100644 index 00000000..c0985937 --- /dev/null +++ b/docs/archive/Rails with Github Codespaces.md @@ -0,0 +1,3 @@ +# Rails with GitHub Codespaces +* Hartl Tutorial +* \ No newline at end of file diff --git a/docs/archive/Web building.md b/docs/archive/Web building.md new file mode 100644 index 00000000..9165ecbe --- /dev/null +++ b/docs/archive/Web building.md @@ -0,0 +1,3 @@ +# Web building +* https://api.slack.com/block-kit +* Build with slack \ No newline at end of file diff --git a/docs/archive/Working with django.md b/docs/archive/Working with django.md new file mode 100644 index 00000000..1af5a867 --- /dev/null +++ b/docs/archive/Working with django.md @@ -0,0 +1,15 @@ +# Working with Django +* Configure environment for python3.9 +* **sudo update-alternatives** manages symlinks +* `sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1` - last number sets priority +## Setting up environment +pip install autopep8 +pip install pylint + +* `mkdir decoupled-dj && cd $_` +* `python -m venv venv` - create +* `source ./online-learning/bin/activate` - activate + +* https://github.com/valentinogagliardi/decoupled-dj/tree/chapter_05_setting_up_project +## Setting up Postgres + diff --git a/docs/cloud/aws/amplify.md b/docs/archive/cloud/aws/amplify.md similarity index 100% rename from docs/cloud/aws/amplify.md rename to docs/archive/cloud/aws/amplify.md diff --git a/docs/cloud/aws/api_gateway.md b/docs/archive/cloud/aws/api_gateway.md similarity index 100% rename from docs/cloud/aws/api_gateway.md rename to docs/archive/cloud/aws/api_gateway.md diff --git a/docs/cloud/aws/cognito.md b/docs/archive/cloud/aws/cognito.md similarity index 100% rename from docs/cloud/aws/cognito.md rename to docs/archive/cloud/aws/cognito.md diff --git a/docs/cloud/aws/dynamodb.md b/docs/archive/cloud/aws/dynamodb.md similarity index 100% rename from docs/cloud/aws/dynamodb.md rename to docs/archive/cloud/aws/dynamodb.md diff --git a/docs/cloud/aws/general.md b/docs/archive/cloud/aws/general.md similarity index 100% rename from docs/cloud/aws/general.md rename to docs/archive/cloud/aws/general.md diff --git a/docs/cloud/aws/lightsail.md b/docs/archive/cloud/aws/lightsail.md similarity index 100% rename from docs/cloud/aws/lightsail.md rename to docs/archive/cloud/aws/lightsail.md diff --git a/docs/cloud/aws/search.md b/docs/archive/cloud/aws/search.md similarity index 100% rename from docs/cloud/aws/search.md rename to docs/archive/cloud/aws/search.md diff --git a/docs/cloud/azure/general.md b/docs/archive/cloud/azure/general.md similarity index 100% rename from docs/cloud/azure/general.md rename to docs/archive/cloud/azure/general.md diff --git a/docs/cloud/google/firebase/general.md b/docs/archive/cloud/google/firebase/general.md similarity index 100% rename from docs/cloud/google/firebase/general.md rename to docs/archive/cloud/google/firebase/general.md diff --git a/docs/archive/electronics/srd_12vdc_relay.md b/docs/archive/electronics/srd_12vdc_relay.md new file mode 100644 index 00000000..a1fa5015 --- /dev/null +++ b/docs/archive/electronics/srd_12vdc_relay.md @@ -0,0 +1,2 @@ +## DataSheet +* Songle - http://www.songle.com/Public/Uploads/20161104/581c81ac16e36.pdf diff --git a/docs/archive/oh-my-zsh.md b/docs/archive/oh-my-zsh.md new file mode 100644 index 00000000..b37ccc53 --- /dev/null +++ b/docs/archive/oh-my-zsh.md @@ -0,0 +1,499 @@ +## MacPorts + +| Alias | Command | Description | +|-------|------------------------------------|--------------------------------------------------------------| +| pc | `sudo port clean --all installed` | Clean up intermediate installation files for installed ports | +| pi | `sudo port install` | Install package given as argument | +| psu | `sudo port selfupdate` | Update ports tree with MacPorts repository | +| puni | `sudo port uninstall inactive` | Uninstall inactive ports | +| puo | `sudo port upgrade outdated` | Upgrade ports with newer versions available | +| pup | `psu && puo` | Update ports tree, then upgrade ports to newest versions | + +## iTerm2 Plugin commands + +* `_iterm2_command ` + executes an arbitrary iTerm2 command via an escape code sequence. + See https://iterm2.com/documentation-escape-codes.html for all supported commands. + +* `iterm2_profile ` + changes the current terminal window's profile (colors, fonts, settings, etc). + `profile-name` is the name of another iTerm2 profile. The profile name can contain spaces. + +* `iterm2_tab_color ` + changes the color of iTerm2's currently active tab. + `red`/`green`/`blue` are on the range 0-255. + +* `iterm2_tab_color_reset` + resets the color of iTerm2's current tab back to default. + + ## MacOS + ## Commands + +| Command | Description | +| :------------ | :------------------------------------------------------- | +| `tab` | Open the current directory in a new tab | +| `split_tab` | Split the current terminal tab horizontally | +| `vsplit_tab` | Split the current terminal tab vertically | +| `ofd` | Open the current directory in a Finder window | +| `pfd` | Return the path of the frontmost Finder window | +| `pfs` | Return the current Finder selection | +| `cdf` | `cd` to the current Finder directory | +| `pushdf` | `pushd` to the current Finder directory | +| `pxd` | Return the current Xcode project directory | +| `cdx` | `cd` to the current Xcode project directory | +| `quick-look` | Quick-Look a specified file | +| `man-preview` | Open a specified man page in Preview app | +| `showfiles` | Show hidden files in Finder | +| `hidefiles` | Hide the hidden files in Finder | +| `itunes` | _DEPRECATED_. Use `music` from macOS Catalina on | +| `music` | Control Apple Music. Use `music -h` for usage details | +| `spotify` | Control Spotify and search by artist, album, track… | +| `rmdsstore` | Remove .DS_Store files recursively in a directory | +| `btrestart` | Restart the Bluetooth daemon | +| `freespace` | Erases purgeable disk space with 0s on the selected disk | + +## NPM + +| Alias | Command | Description | +|:------ |:-----------------------------|:----------------------------------------------------------------| +| `npmg` | `npm i -g` | Install dependencies globally | +| `npmS` | `npm i -S` | Install and save to dependencies in your package.json | +| `npmD` | `npm i -D` | Install and save to dev-dependencies in your package.json | +| `npmF` | `npm i -f` | Force install from remote registries ignoring local cache | +| `npmE` | `PATH="$(npm bin)":"$PATH"` | Run command from node_modules folder based on current directory | +| `npmO` | `npm outdated` | Check which npm modules are outdated | +| `npmU` | `npm update` | Update all the packages listed to the latest version | +| `npmV` | `npm -v` | Check package versions | +| `npmL` | `npm list` | List installed packages | +| `npmL0` | `npm ls --depth=0` | List top-level installed packages | +| `npmst` | `npm start` | Run npm start | +| `npmt` | `npm test` | Run npm test | +| `npmR` | `npm run` | Run npm scripts | +| `npmP` | `npm publish` | Run npm publish | +| `npmI` | `npm init` | Run npm init | +| `npmi` | `npm info` | Run npm info | +| `npmSe` | `npm search` | Run npm search | + +## Pipenv +This plugin provides some features to simplify the use of Pipenv while working on ZSH. +- Adds completion for pipenv +- Auto activates and deactivates pipenv shell +- Adds short aliases for common pipenv commands + - `pch` is aliased to `pipenv check` + - `pcl` is aliased to `pipenv clean` + - `pgr` is aliased to `pipenv graph` + - `pi` is aliased to `pipenv install` + - `pidev` is aliased to `pipenv install --dev` + - `pl` is aliased to `pipenv lock` + - `po` is aliased to `pipenv open` + - `prun` is aliased to `pipenv run` + - `psh` is aliased to `pipenv shell` + - `psy` is aliased to `pipenv sync` + - `pu` is aliased to `pipenv uninstall` + - `pwh` is aliased to `pipenv --where` + - `pvenv` is aliased to `pipenv --venv` + - `ppy` is aliased to `pipenv --py` + +## Tmux +| Alias | Command | Description | +| ------ | -----------------------|---------------------------------------------------------- | +| `ta` | tmux attach -t | Attach new tmux session to already running named session | +| `tad` | tmux attach -d -t | Detach named tmux session | +| `ts` | tmux new-session -s | Create a new named tmux session | +| `tl` | tmux list-sessions | Displays a list of running tmux sessions | +| `tksv` | tmux kill-server | Terminate all running tmux sessions | +| `tkss` | tmux kill-session -t | Terminate named running tmux session | +| `tmux` | `_zsh_tmux_plugin_run` | Start a new tmux session | + +## Configuration Variables + +| Variable | Description | +|-------------------------------------|-------------------------------------------------------------------------------| +| `ZSH_TMUX_AUTOSTART` | Automatically starts tmux (default: `false`) | +| `ZSH_TMUX_AUTOSTART_ONCE` | Autostart only if tmux hasn't been started previously (default: `true`) | +| `ZSH_TMUX_AUTOCONNECT` | Automatically connect to a previous session if it exits (default: `true`) | +| `ZSH_TMUX_AUTOQUIT` | Automatically closes terminal once tmux exits (default: `ZSH_TMUX_AUTOSTART`) | +| `ZSH_TMUX_FIXTERM` | Sets `$TERM` to 256-color term or not based on current terminal support | +| `ZSH_TMUX_ITERM2` | Sets the `-CC` option for iTerm2 tmux integration (default: `false`) | +| `ZSH_TMUX_FIXTERM_WITHOUT_256COLOR` | `$TERM` to use for non 256-color terminals (default: `screen`) | +| `ZSH_TMUX_FIXTERM_WITH_256COLOR` | `$TERM` to use for 256-color terminals (default: `screen-256color` | +| `ZSH_TMUX_CONFIG` | Set the configuration path (default: `$HOME/.tmux.conf`) | +| `ZSH_TMUX_UNICODE` | Set `tmux -u` option to support unicode | +| `ZSH_TMUX_DEFAULT_SESSION_NAME` | Set tmux default session name when autostart is enabled | + +## vi-mode +## Settings + +- `VI_MODE_RESET_PROMPT_ON_MODE_CHANGE`: controls whether the prompt is redrawn when + switching to a different input mode. If this is unset, the mode indicator will not + be updated when changing to a different mode. + Set it to `true` to enable it. For example: + + ```zsh + VI_MODE_RESET_PROMPT_ON_MODE_CHANGE=true + ``` + + The default value is unset, unless `vi_mode_prompt_info` is used, in which case it'll + automatically be set to `true`. + +- `VI_MODE_SET_CURSOR`: controls whether the cursor style is changed when switching + to a different input mode. Set it to `true` to enable it (default: unset): + + ```zsh + VI_MODE_SET_CURSOR=true + ``` + +- `MODE_INDICATOR`: controls the string displayed when the shell is in normal mode. + See [Mode indicator](#mode-indicator) for details. + +## Mode indicator + +*Normal mode* is indicated with a red `<<<` mark at the right prompt, when it +hasn't been defined by theme. + +You can change this indicator by setting the `MODE_INDICATOR` variable. This setting +supports Prompt Expansion sequences. For example: + +```zsh +MODE_INDICATOR="%F{yellow}+%f" +``` + +You can also use the `vi_mode_prompt_info` function in your prompt, which will display +this mode indicator. + +## Key bindings + +Use `ESC` or `CTRL-[` to enter `Normal mode`. + +NOTE: some of these key bindings are set by zsh by default when using a vi-mode keymap. + +### History + +- `ctrl-p` : Previous command in history +- `ctrl-n` : Next command in history +- `/` : Search backward in history +- `n` : Repeat the last `/` + +### Vim edition + +- `vv` : Edit current command line in Vim + +NOTE: this used to be bound to `v`. That is now the default (`visual-mode`). + +### Movement + +- `$` : To the end of the line +- `^` : To the first non-blank character of the line +- `0` : To the first character of the line +- `w` : [count] words forward +- `W` : [count] WORDS forward +- `e` : Forward to the end of word [count] inclusive +- `E` : Forward to the end of WORD [count] inclusive +- `b` : [count] words backward +- `B` : [count] WORDS backward +- `t{char}` : Till before [count]'th occurrence of {char} to the right +- `T{char}` : Till before [count]'th occurrence of {char} to the left +- `f{char}` : To [count]'th occurrence of {char} to the right +- `F{char}` : To [count]'th occurrence of {char} to the left +- `;` : Repeat latest f, t, F or T [count] times +- `,` : Repeat latest f, t, F or T in opposite direction + +### Insertion + +- `i` : Insert text before the cursor +- `I` : Insert text before the first character in the line +- `a` : Append text after the cursor +- `A` : Append text at the end of the line +- `o` : Insert new command line below the current one +- `O` : Insert new command line above the current one + +### Delete and Insert + +- `ctrl-h` : While in *Insert mode*: delete character before the cursor +- `ctrl-w` : While in *Insert mode*: delete word before the cursor +- `d{motion}` : Delete text that {motion} moves over +- `dd` : Delete line +- `D` : Delete characters under the cursor until the end of the line +- `c{motion}` : Delete {motion} text and start insert +- `cc` : Delete line and start insert +- `C` : Delete to the end of the line and start insert +- `r{char}` : Replace the character under the cursor with {char} +- `R` : Enter replace mode: Each character replaces existing one +- `x` : Delete `count` characters under and after the cursor +- `X` : Delete `count` characters before the cursor + +## Known issues + +### Low `$KEYTIMEOUT` + +A low `$KEYTIMEOUT` value (< 15) means that key bindings that need multiple characters, +like `vv`, will be very difficult to trigger. `$KEYTIMEOUT` controls the number of +milliseconds that must pass before a key press is read and the appropriate key binding +is triggered. For multi-character key bindings, the key presses need to happen before +the timeout is reached, so on low timeouts the key press happens too slow, and therefore +another key binding is triggered. + +We recommend either setting `$KEYTIMEOUT` to a higher value, or remapping the key bindings +that you want to trigger to a keyboard sequence. For example: + +```zsh +bindkey -M vicmd 'V' edit-command-line # this remaps `vv` to `V` (but overrides `visual-mode`) +``` +## vscode + +| Alias | Command | Description | +| ----------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------- | +| vsc | code . | Open the current folder in VS code | +| vsca `dir` | code --add `dir` | Add folder(s) to the last active window | +| vscd `file` `file` | code --diff `file` `file` | Compare two files with each other. | +| vscg `file:line[:char]` | code --goto `file:line[:char]` | Open a file at the path on the specified line and character position. | +| vscn | code --new-window | Force to open a new window. | +| vscr | code --reuse-window | Force to open a file or folder in the last active window. | +| vscw | code --wait | Wait for the files to be closed before returning. | +| vscu `dir` | code --user-data-dir `dir` | Specifies the directory that user data is kept in. Can be used to open multiple distinct instances of Code. | + +## Extensions aliases + +| Alias | Command | Description | +| ----------------------- | ---------------------------------------------------------------- | --------------------------------- | +| vsced `dir` | code --extensions-dir `dir` | Set the root path for extensions. | +| vscie `id or vsix-path` | code --install-extension `extension-id> or /dev/null | +| gbD | git branch -D | +| gbl | git blame -b -w | +| gbnm | git branch --no-merged | +| gbr | git branch --remote | +| gbs | git bisect | +| gbsb | git bisect bad | +| gbsg | git bisect good | +| gbsr | git bisect reset | +| gbss | git bisect start | +| gc | git commit -v | +| gc! | git commit -v --amend | +| gcn! | git commit -v --no-edit --amend | +| gca | git commit -v -a | +| gca! | git commit -v -a --amend | +| gcan! | git commit -v -a --no-edit --amend | +| gcans! | git commit -v -a -s --no-edit --amend | +| gcam | git commit -a -m | +| gcas | git commit -a -s | +| gcasm | git commit -a -s -m | +| gcsm | git commit -s -m | +| gcb | git checkout -b | +| gcf | git config --list | +| gcl | git clone --recurse-submodules | +| gccd | git clone --recurse-submodules "$@" && cd "$(basename $_ .git)" | +| gclean | git clean -id | +| gpristine | git reset --hard && git clean -dffx | +| gcm | git checkout $(git_main_branch) | +| gcd | git checkout $(git_develop_branch) | +| gcmsg | git commit -m | +| gco | git checkout | +| gcor | git checkout --recurse-submodules | +| gcount | git shortlog -sn | +| gcp | git cherry-pick | +| gcpa | git cherry-pick --abort | +| gcpc | git cherry-pick --continue | +| gcs | git commit -S | +| gd | git diff | +| gdca | git diff --cached | +| gdcw | git diff --cached --word-diff | +| gdct | git describe --tags $(git rev-list --tags --max-count=1) | +| gds | git diff --staged | +| gdt | git diff-tree --no-commit-id --name-only -r | +| gdnolock | git diff $@ ":(exclude)package-lock.json" ":(exclude)*.lock" | +| gdup | git diff @{upstream} | +| gdv | git diff -w $@ \| view - | +| gdw | git diff --word-diff | +| gf | git fetch | +| gfa | git fetch --all --prune | +| gfg | git ls-files \| grep | +| gfo | git fetch origin | +| gg | git gui citool | +| gga | git gui citool --amend | +| ggf | git push --force origin $(current_branch) | +| ggfl | git push --force-with-lease origin $(current_branch) | +| ggl | git pull origin $(current_branch) | +| ggp | git push origin $(current_branch) | +| ggpnp | ggl && ggp | +| ggpull | git pull origin "$(git_current_branch)" | +| ggpur | ggu | +| ggpush | git push origin "$(git_current_branch)" | +| ggsup | git branch --set-upstream-to=origin/$(git_current_branch) | +| ggu | git pull --rebase origin $(current_branch) | +| gpsup | git push --set-upstream origin $(git_current_branch) | +| ghh | git help | +| gignore | git update-index --assume-unchanged | +| gignored | git ls-files -v \| grep "^[[:lower:]]" | +| git-svn-dcommit-push | git svn dcommit && git push github $(git_main_branch):svntrunk | +| gk | gitk --all --branches &! | +| gke | gitk --all $(git log -g --pretty=%h) &! | +| gl | git pull | +| glg | git log --stat | +| glgp | git log --stat -p | +| glgg | git log --graph | +| glgga | git log --graph --decorate --all | +| glgm | git log --graph --max-count=10 | +| glo | git log --oneline --decorate | +| glol | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' | +| glols | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat | +| glod | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' | +| glods | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short | +| glola | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all | +| glog | git log --oneline --decorate --graph | +| gloga | git log --oneline --decorate --graph --all | +| glp | git log --pretty=\ | +| gm | git merge | +| gmom | git merge origin/$(git_main_branch) | +| gmtl | git mergetool --no-prompt | +| gmtlvim | git mergetool --no-prompt --tool=vimdiff | +| gmum | git merge upstream/$(git_main_branch) | +| gma | git merge --abort | +| gp | git push | +| gpd | git push --dry-run | +| gpf | git push --force-with-lease | +| gpf! | git push --force | +| gpoat | git push origin --all && git push origin --tags | +| gpr | git pull --rebase | +| gpu | git push upstream | +| gpv | git push -v | +| gr | git remote | +| gra | git remote add | +| grb | git rebase | +| grba | git rebase --abort | +| grbc | git rebase --continue | +| grbd | git rebase $(git_develop_branch) | +| grbi | git rebase -i | +| grbm | git rebase $(git_main_branch) | +| grbom | git rebase origin/$(git_main_branch) | +| grbo | git rebase --onto | +| grbs | git rebase --skip | +| grev | git revert | +| grh | git reset | +| grhh | git reset --hard | +| groh | git reset origin/$(git_current_branch) --hard | +| grm | git rm | +| grmc | git rm --cached | +| grmv | git remote rename | +| grrm | git remote remove | +| grs | git restore | +| grset | git remote set-url | +| grss | git restore --source | +| grst | git restore --staged | +| grt | cd "$(git rev-parse --show-toplevel \|\| echo .)" | +| gru | git reset -- | +| grup | git remote update | +| grv | git remote -v | +| gsb | git status -sb | +| gsd | git svn dcommit | +| gsh | git show | +| gsi | git submodule init | +| gsps | git show --pretty=short --show-signature | +| gsr | git svn rebase | +| gss | git status -s | +| gst | git status | +| gsta | git stash push | +| gsta | git stash save | +| gstaa | git stash apply | +| gstc | git stash clear | +| gstd | git stash drop | +| gstl | git stash list | +| gstp | git stash pop | +| gsts | git stash show --text | +| gstu | git stash --include-untracked | +| gstall | git stash --all | +| gsu | git submodule update | +| gsw | git switch | +| gswc | git switch -c | +| gswm | git switch $(git_main_branch) | +| gswd | git switch $(git_develop_branch) | +| gts | git tag -s | +| gtv | git tag \| sort -V | +| gtl | gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl | +| gunignore | git update-index --no-assume-unchanged | +| gunwip | git log -n 1 \| grep -q -c "\-\-wip\-\-" && git reset HEAD~1 | +| gup | git pull --rebase | +| gupv | git pull --rebase -v | +| gupa | git pull --rebase --autostash | +| gupav | git pull --rebase --autostash -v | +| glum | git pull upstream $(git_main_branch) | +| gwch | git whatchanged -p --abbrev-commit --pretty=medium | +| gwip | git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]" | +| gam | git am | +| gamc | git am --continue | +| gams | git am --skip | +| gama | git am --abort | +| gamscp | git am --show-current-patch | + +### Main branch preference + +Following the recent push for removing racially-charged words from our technical vocabulary, the git plugin favors using +a branch name other than `master`. In this case, we favor the shorter, neutral and descriptive term `main`. This means +that any aliases and functions that previously used `master`, will use `main` if that branch exists. We do this via the +function `git_main_branch`. + +### Deprecated aliases + +These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support. + +| Alias | Command | Modification | +| :----- | :----------------------------------------------------- | :----------------------------------------------------- | +| gap | `git add --patch` | new alias `gapa` | +| gcl | `git config --list` | new alias `gcf` | +| gdc | `git diff --cached` | new alias `gdca` | +| gdt | `git difftool` | no replacement | +| ggpull | `git pull origin $(current_branch)` | new alias `ggl` (`ggpull` still exists for now though) | +| ggpur | `git pull --rebase origin $(current_branch)` | new alias `ggu` (`ggpur` still exists for now though) | +| ggpush | `git push origin $(current_branch)` | new alias `ggp` (`ggpush` still exists for now though) | +| gk | `gitk --all --branches` | now aliased to `gitk --all --branches` | +| glg | `git log --stat --max-count = 10` | now aliased to `git log --stat --color` | +| glgg | `git log --graph --max-count = 10` | now aliased to `git log --graph --color` | +| gwc | `git whatchanged -p --abbrev-commit --pretty = medium` | new alias `gwch` | + +## Functions + +### Current + +| Command | Description | +|:-----------------------|:---------------------------------------------------------------------------------------------------------| +| `grename ` | Rename `old` branch to `new`, including in origin remote | +| current_branch | Return the name of the current branch | +| git_current_user_name | Returns the `user.name` config value | +| git_current_user_email | Returns the `user.email` config value | +| git_main_branch | Returns the name of the main branch: `main` if it exists, `master` otherwise | +| git_develop_branch | Returns the name of the develop branch: `dev`, `devel`, `development` if they exist, `develop` otherwise | + +### Work in Progress (WIP) + +These features allow to pause a branch development and switch to another one (_"Work in Progress"_, or wip). When you want to go back to work, just unwip it. + +| Command | Description | +|:-----------------|:------------------------------------------------| +| work_in_progress | Echoes a warning if the current branch is a wip | +| gwip | Commit wip branch | +| gunwip | Uncommit wip branch | diff --git a/docs/archive/raspberry_pi.md b/docs/archive/raspberry_pi.md new file mode 100644 index 00000000..08b230c7 --- /dev/null +++ b/docs/archive/raspberry_pi.md @@ -0,0 +1,108 @@ +# Setting up Raspberry Pi for remote dev +**Version: 20.04.3** +**IP Address: 192.168.100.110** +* Setting up SSH Authentication on my pi server from my mac + * https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server + * https://www.ssh.com/academy/ssh/copy-id + * `ssh-copy-id -i ~/.ssh/id_rsa ubuntu@192.168.100.110` - from my mac +* Setup zsh as default shell + * https://www.ubuntupit.com/how-to-install-and-configure-zsh-on-linux-distributions/ +```shell +sudo apt update +sudo apt install zsh +sudo chsh -s /bin/zsh ubuntu +``` +* Install oh-my-zsh + * `sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` +* Install nvm + * `curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash` + * `nvm install v17.2.0 --latest-npm --default` +* Add ssh key to github - https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account +* Accounts + * email: martin.johan@johan-martin.com + * `ssh-keygen -t ed25519 -C "martin.johan@johan-martin.com"` + * `cat ~/.ssh/id_ed25519.pub` +* Setup dev environment + * `sudo apt install build-essential git curl` +## Setup Docker +* https://docs.docker.com/engine/install/ubuntu/ +```shell +sudo apt-get update +sudo apt-get install \ + ca-certificates \ + curl \ + gnupg \ + lsb-release +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io +``` +* Post Install (run docker wihtou sudo) +```shell +sudo groupadd docker +sudo usermod -aG docker $USER +newgrp docker +docker run hello-world +``` + + +## Configure Raspberry +* https://github.com/raspberrypi +* Mirror Website: https://www.raspbian.org/RaspbianMirrors +### Add Raspberry Pi Repositories +* https://www.blackmoreops.com/2021/09/16/add-raspberry-pi-repository-in-ubuntu/ + * `echo deb http://archive.raspberrypi.org/debian/ bullseye main | sudo tee /etc/apt/sources.list.d/raspberrypi.list` + * `sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7FA3303E` +* Install `raspi-config` +```shell +sudo apt update +sudo apt install raspi-config +``` +### Video +* https://www.raspberrypi.com/documentation/computers/configuration.html#the-kernel-command-line + +## Fix issue with Perl Warning about Locale +* https://raspberrypi.stackexchange.com/questions/38019/locale-settings-issues +```shell +sudo nano /etc/default/locale +# LANG=en_US.UTF-8 +# LC_ALL=en_US.UTF-8 +# LANGUAGE=en_US.UTF-8 +``` + + +## Setup Node-RED +* with docker installed + * docker run -it -p 1880:1880 --name mynodered nodered/node-red +* `bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)` + + +## Zsh Plugins +* https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/web-search web-search +* https://github.com/zsh-users/zsh-autosuggestions +* https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/sudo +* https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/jsontools + + +## PiZeroMonitor +`ssh-copy-id -i ~/.ssh/id_rsa pi@192.168.100.120` +* Turn off display +* `vcgencmd display_power 0` + +## Upgrading raspbian from buster to bullseye + +* https://www.tomshardware.com/how-to/upgrade-raspberry-pi-os-to-bullseye-from-buster +```shell +sudo apt update +sudo apt dist-upgrade -y +sudo rpi-update +udo nano /etc/apt/sources.list +# Change the line from buster to bullseye and press CTRL + X, then press Y and Enter to save and exit. +sudo apt update +sudo apt dist-upgrade -y +sudo apt autoclean +sudo reboot +``` diff --git a/docs/archive/resources.md b/docs/archive/resources.md new file mode 100644 index 00000000..a8b58115 --- /dev/null +++ b/docs/archive/resources.md @@ -0,0 +1,14 @@ +# Resources +## Shells +### ZSH +* [OhMyZsh](https://github.com/ohmyzsh/ohmyzsh +) +## Programming Books +* [Free Programming books](https://github.com/EbookFoundation/free-programming-books) + +## AWS Certification Resources +* [Awesome AWS Resources](https://github.com/ptcodes/awesome-aws-certifications) + +## Security +### Api Security +* [Awesome API Security](https://github.com/arainho/awesome-api-security) diff --git a/docs/resources/general.md b/docs/archive/resources/general.md similarity index 100% rename from docs/resources/general.md rename to docs/archive/resources/general.md diff --git a/docs/resources/java.md b/docs/archive/resources/java.md similarity index 100% rename from docs/resources/java.md rename to docs/archive/resources/java.md diff --git a/docs/resources/javascript.md b/docs/archive/resources/javascript.md similarity index 100% rename from docs/resources/javascript.md rename to docs/archive/resources/javascript.md diff --git a/docs/resources/jsonschema.md b/docs/archive/resources/jsonschema.md similarity index 100% rename from docs/resources/jsonschema.md rename to docs/archive/resources/jsonschema.md diff --git a/docs/resources/mobile/general.md b/docs/archive/resources/mobile/general.md similarity index 100% rename from docs/resources/mobile/general.md rename to docs/archive/resources/mobile/general.md diff --git a/docs/resources/php/general.md b/docs/archive/resources/php/general.md similarity index 100% rename from docs/resources/php/general.md rename to docs/archive/resources/php/general.md diff --git a/docs/resources/php/wordpress/api.md b/docs/archive/resources/php/wordpress/api.md similarity index 100% rename from docs/resources/php/wordpress/api.md rename to docs/archive/resources/php/wordpress/api.md diff --git a/docs/resources/python/flask.md b/docs/archive/resources/python/flask.md similarity index 100% rename from docs/resources/python/flask.md rename to docs/archive/resources/python/flask.md diff --git a/docs/resources/python/general.md b/docs/archive/resources/python/general.md similarity index 100% rename from docs/resources/python/general.md rename to docs/archive/resources/python/general.md diff --git a/docs/resources/python/jupyter.md b/docs/archive/resources/python/jupyter.md similarity index 100% rename from docs/resources/python/jupyter.md rename to docs/archive/resources/python/jupyter.md diff --git a/docs/resources/python/packages.md b/docs/archive/resources/python/packages.md similarity index 100% rename from docs/resources/python/packages.md rename to docs/archive/resources/python/packages.md diff --git a/docs/resources/python/sqlalchemy.md b/docs/archive/resources/python/sqlalchemy.md similarity index 100% rename from docs/resources/python/sqlalchemy.md rename to docs/archive/resources/python/sqlalchemy.md diff --git a/docs/resources/python/testing.md b/docs/archive/resources/python/testing.md similarity index 100% rename from docs/resources/python/testing.md rename to docs/archive/resources/python/testing.md diff --git a/docs/resources/ruby.md b/docs/archive/resources/ruby.md similarity index 100% rename from docs/resources/ruby.md rename to docs/archive/resources/ruby.md diff --git a/docs/archive/resources/teaching/html.md b/docs/archive/resources/teaching/html.md new file mode 100644 index 00000000..a56ae0ca --- /dev/null +++ b/docs/archive/resources/teaching/html.md @@ -0,0 +1,15 @@ +# Semantic HTML +## "... HTML elements for what they are rather than how they may appear in the browser by default." + +## Resources +* [Web Development for Beginners](https://github.com/microsoft/Web-Dev-For-Beginners) +## Reference +* [Mozilla Developer](https://developer.mozilla.org/en/docs/Web/HTML/Element) + +## Elements +* [w3schools semantic elements](https://www.w3schools.com/html/html5_semantic_elements.asp) +* [Why Use Semantic Elements](https://www.thoughtco.com/why-use-semantic-html-3468271) +* [HTML 5 Semantics](http://www.hongkiat.com/blog/html-5-semantics/) +## CSS Resources +* [30 CSS Selectors You Must Memorize](https://code.tutsplus.com/tutorials/the-30-css-selectors-you-must-memorize--net-16048) +* [Mozilla CSS Grid Playground](https://mozilladevelopers.github.io/playground/) diff --git a/docs/resources/teaching/javascript.md b/docs/archive/resources/teaching/javascript.md similarity index 100% rename from docs/resources/teaching/javascript.md rename to docs/archive/resources/teaching/javascript.md diff --git a/docs/resources/teaching/openedx.md b/docs/archive/resources/teaching/openedx.md similarity index 100% rename from docs/resources/teaching/openedx.md rename to docs/archive/resources/teaching/openedx.md diff --git a/docs/resources/teaching/prototyping.md b/docs/archive/resources/teaching/prototyping.md similarity index 100% rename from docs/resources/teaching/prototyping.md rename to docs/archive/resources/teaching/prototyping.md diff --git a/docs/resources/teaching/tools.md b/docs/archive/resources/teaching/tools.md similarity index 100% rename from docs/resources/teaching/tools.md rename to docs/archive/resources/teaching/tools.md diff --git a/docs/resources/tutorials/general.md b/docs/archive/resources/tutorials/general.md similarity index 100% rename from docs/resources/tutorials/general.md rename to docs/archive/resources/tutorials/general.md diff --git a/docs/resources/web_dev.md b/docs/archive/resources/web_dev.md similarity index 100% rename from docs/resources/web_dev.md rename to docs/archive/resources/web_dev.md diff --git a/docs/tools/general.md b/docs/archive/tools/general.md similarity index 100% rename from docs/tools/general.md rename to docs/archive/tools/general.md diff --git a/docs/tools/git.md b/docs/archive/tools/git.md similarity index 100% rename from docs/tools/git.md rename to docs/archive/tools/git.md diff --git a/docs/tools/mkdocs.md b/docs/archive/tools/mkdocs.md similarity index 100% rename from docs/tools/mkdocs.md rename to docs/archive/tools/mkdocs.md diff --git a/docs/archive/tools/nodejs/general.md b/docs/archive/tools/nodejs/general.md new file mode 100644 index 00000000..388f7298 --- /dev/null +++ b/docs/archive/tools/nodejs/general.md @@ -0,0 +1,24 @@ +# JavaScript Backend Notes + +- [Restify](http://restify.com) - Restify server for Node. Potential for using as API test server(?) + +# Setup Nodejs on Pi Server + +### NodeJS install + +- https://github.com/nodesource/distributions/blob/master/README.md#debinstall + +# Setup Docker + +- https://docs.docker.com/engine/install/ubuntu/ + +- https://docs.docker.com/engine/install/linux-postinstall/ - Docker as non-privileged user +- https://stackoverflow.com/questions/69780128/docker-error-response-from-daemon-failed-to-create-endpoint-priceless-noether +- `sudo apt install linux-modules-extra-raspi` + +* `docker run hello-world` + + +## Learn React/Redux +* https://react-redux.js.org/introduction/getting-started + diff --git a/docs/tools/notes.md b/docs/archive/tools/notes.md similarity index 100% rename from docs/tools/notes.md rename to docs/archive/tools/notes.md diff --git a/docs/tools/reporting.md b/docs/archive/tools/reporting.md similarity index 100% rename from docs/tools/reporting.md rename to docs/archive/tools/reporting.md diff --git a/docs/tools/vagrant.md b/docs/archive/tools/vagrant.md similarity index 100% rename from docs/tools/vagrant.md rename to docs/archive/tools/vagrant.md diff --git a/docs/tools/vim.md b/docs/archive/tools/vim.md similarity index 100% rename from docs/tools/vim.md rename to docs/archive/tools/vim.md diff --git a/docs/web_development/database/migrations/general.md b/docs/archive/web_development/database/migrations/general.md similarity index 100% rename from docs/web_development/database/migrations/general.md rename to docs/archive/web_development/database/migrations/general.md diff --git a/docs/web_development/database/mongo.md b/docs/archive/web_development/database/mongo.md similarity index 100% rename from docs/web_development/database/mongo.md rename to docs/archive/web_development/database/mongo.md diff --git a/docs/web_development/database/mysql.md b/docs/archive/web_development/database/mysql.md similarity index 100% rename from docs/web_development/database/mysql.md rename to docs/archive/web_development/database/mysql.md diff --git a/docs/web_development/database/postgresql.md b/docs/archive/web_development/database/postgresql.md similarity index 100% rename from docs/web_development/database/postgresql.md rename to docs/archive/web_development/database/postgresql.md diff --git a/docs/web_development/docker.md b/docs/archive/web_development/docker.md similarity index 100% rename from docs/web_development/docker.md rename to docs/archive/web_development/docker.md diff --git a/docs/web_development/front_end/cors.md b/docs/archive/web_development/front_end/cors.md similarity index 100% rename from docs/web_development/front_end/cors.md rename to docs/archive/web_development/front_end/cors.md diff --git a/docs/web_development/front_end/foundation.md b/docs/archive/web_development/front_end/foundation.md similarity index 100% rename from docs/web_development/front_end/foundation.md rename to docs/archive/web_development/front_end/foundation.md diff --git a/docs/web_development/front_end/general.md b/docs/archive/web_development/front_end/general.md similarity index 100% rename from docs/web_development/front_end/general.md rename to docs/archive/web_development/front_end/general.md diff --git a/docs/web_development/front_end/javascript/angular.md b/docs/archive/web_development/front_end/javascript/angular.md similarity index 100% rename from docs/web_development/front_end/javascript/angular.md rename to docs/archive/web_development/front_end/javascript/angular.md diff --git a/docs/web_development/front_end/javascript/react.md b/docs/archive/web_development/front_end/javascript/react.md similarity index 100% rename from docs/web_development/front_end/javascript/react.md rename to docs/archive/web_development/front_end/javascript/react.md diff --git a/docs/web_development/front_end/javascript/rxjs.md b/docs/archive/web_development/front_end/javascript/rxjs.md similarity index 100% rename from docs/web_development/front_end/javascript/rxjs.md rename to docs/archive/web_development/front_end/javascript/rxjs.md diff --git a/docs/web_development/front_end/javascript/testing.md b/docs/archive/web_development/front_end/javascript/testing.md similarity index 100% rename from docs/web_development/front_end/javascript/testing.md rename to docs/archive/web_development/front_end/javascript/testing.md diff --git a/docs/web_development/front_end/javascript/typescript.md b/docs/archive/web_development/front_end/javascript/typescript.md similarity index 100% rename from docs/web_development/front_end/javascript/typescript.md rename to docs/archive/web_development/front_end/javascript/typescript.md diff --git a/docs/web_development/front_end/javascript/vue.md b/docs/archive/web_development/front_end/javascript/vue.md similarity index 100% rename from docs/web_development/front_end/javascript/vue.md rename to docs/archive/web_development/front_end/javascript/vue.md diff --git a/docs/web_development/front_end/javascript/webpack.md b/docs/archive/web_development/front_end/javascript/webpack.md similarity index 100% rename from docs/web_development/front_end/javascript/webpack.md rename to docs/archive/web_development/front_end/javascript/webpack.md diff --git a/docs/web_development/front_end/javascript/xstate.md b/docs/archive/web_development/front_end/javascript/xstate.md similarity index 100% rename from docs/web_development/front_end/javascript/xstate.md rename to docs/archive/web_development/front_end/javascript/xstate.md diff --git a/docs/web_development/front_end/styleguide.md b/docs/archive/web_development/front_end/styleguide.md similarity index 100% rename from docs/web_development/front_end/styleguide.md rename to docs/archive/web_development/front_end/styleguide.md diff --git a/docs/web_development/storybook/tutorial.md b/docs/archive/web_development/storybook/tutorial.md similarity index 100% rename from docs/web_development/storybook/tutorial.md rename to docs/archive/web_development/storybook/tutorial.md diff --git a/docs/web_development/wordpress/api.md b/docs/archive/web_development/wordpress/api.md similarity index 100% rename from docs/web_development/wordpress/api.md rename to docs/archive/web_development/wordpress/api.md diff --git a/docs/web_development/wordpress/composer.md b/docs/archive/web_development/wordpress/composer.md similarity index 100% rename from docs/web_development/wordpress/composer.md rename to docs/archive/web_development/wordpress/composer.md diff --git a/docs/web_development/wordpress/deployment.md b/docs/archive/web_development/wordpress/deployment.md similarity index 100% rename from docs/web_development/wordpress/deployment.md rename to docs/archive/web_development/wordpress/deployment.md diff --git a/docs/web_development/wordpress/docker.md b/docs/archive/web_development/wordpress/docker.md similarity index 100% rename from docs/web_development/wordpress/docker.md rename to docs/archive/web_development/wordpress/docker.md diff --git a/docs/web_development/wordpress/general.md b/docs/archive/web_development/wordpress/general.md similarity index 100% rename from docs/web_development/wordpress/general.md rename to docs/archive/web_development/wordpress/general.md diff --git a/docs/web_development/wordpress/plugin_development.md b/docs/archive/web_development/wordpress/plugin_development.md similarity index 100% rename from docs/web_development/wordpress/plugin_development.md rename to docs/archive/web_development/wordpress/plugin_development.md diff --git a/docs/web_development/wordpress/themes.md b/docs/archive/web_development/wordpress/themes.md similarity index 100% rename from docs/web_development/wordpress/themes.md rename to docs/archive/web_development/wordpress/themes.md diff --git a/docs/index.md b/docs/index.md index 52d85b37..860e014f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,5 +1,5 @@ # Developer Notebook for Johan Martin -![Notebook](https://openclipart.org/download/100339/notebook-black.svg") +* ![Notebook](https://openclipart.org/download/100339/notebook-black.svg") Snippets and solutions to issues I have encountered. ## My Info diff --git a/docs/tools/nodejs/general.md b/docs/tools/nodejs/general.md deleted file mode 100644 index 598e28f3..00000000 --- a/docs/tools/nodejs/general.md +++ /dev/null @@ -1,2 +0,0 @@ -# JavaScript Backend Notes -* [Restify](http://restify.com) - Restify server for Node. Potential for using as API test server(?)