Full Code of rstacruz/cheatsheets for AI

master 6b3b35472a9b cached
499 files
2.2 MB
602.5k tokens
80 symbols
1 requests
Download .txt
Showing preview only (2,404K chars total). Download the full file or copy to clipboard to get everything.
Repository: rstacruz/cheatsheets
Branch: master
Commit: 6b3b35472a9b
Files: 499
Total size: 2.2 MB

Directory structure:
gitextract_tlrt29kp/

├── .eslintrc.cjs
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── .node-version
├── .prettierignore
├── .prettierrc
├── .ruby-version
├── .vscode/
│   ├── extensions.json
│   ├── launch.json
│   └── markdown.code-snippets
├── 101.md
├── AGENTS.md
├── CONTRIBUTING.md
├── Gemfile
├── README.md
├── _docs/
│   └── writing-guidelines.md
├── _includes/
│   └── common/
│       ├── moment_format.md
│       └── strftime_format.md
├── absinthe.md
├── activeadmin.md
├── adb.md
├── analytics.js.md
├── analytics.md
├── angularjs.md
├── animated_gif.md
├── ansi.md
├── ansible-examples.md
├── ansible-guide.md
├── ansible-modules.md
├── ansible-roles.md
├── ansible.md
├── appcache.md
├── applescript.md
├── applinks.md
├── arel.md
├── astro.config.mjs
├── atom.md
├── awesome-redux.md
├── awscli.md
├── backbone.md
├── bash.md
├── blessed.md
├── bluebird.md
├── bolt.md
├── bookshelf.md
├── bootstrap.md
├── browser-sync.md
├── browserify.md
├── bulma.md
├── bundler.md
├── c_preprocessor.md
├── camp.md
├── canvas.md
├── capybara.md
├── cask-index.md
├── chai.md
├── cheatsheet-styles.md
├── chef.md
├── chunky_png.md
├── cidr.md
├── circle.md
├── claude-code.md
├── clip.md
├── co.md
├── command_line.md
├── commander.js.md
├── composer.md
├── cordova.md
├── cron.md
├── csharp7.md
├── css-antialias.md
├── css-flexbox.md
├── css-grid.md
├── css-system-font-stack.md
├── css-tricks.md
├── css.md
├── cssnext.md
├── curl.md
├── datetime.md
├── deis.md
├── deku.md
├── deku@1.md
├── devise.md
├── divshot.md
├── do.md
├── docker-compose.md
├── docker.md
├── dockerfile.md
├── dom-range.md
├── dom-selection.md
├── editorconfig.md
├── elixir-metaprogramming.md
├── elixir.md
├── emacs.md
├── ember.md
├── emmet.md
├── enzyme.md
├── enzyme@2.md
├── es6.md
├── ets.md
├── expectjs.md
├── express.md
├── exunit.md
├── factory_bot.md
├── fastify.md
├── ffaker.md
├── ffmpeg.md
├── figlet.md
├── find.md
├── firebase.md
├── firefox.md
├── fish-shell.md
├── flashlight.md
├── flow.md
├── flux.md
├── flynn.md
├── freenode.md
├── frequency-separation-retouching.md
├── gh-pages.md
├── git-branch.md
├── git-extras.md
├── git-log-format.md
├── git-log.md
├── git-revisions.md
├── git-tricks.md
├── gnupg.md
├── go.md
├── goby.md
├── google-webfonts.md
├── google_analytics.md
├── graphql.md
├── gremlins.md
├── grep.md
├── gulp.md
├── haml.md
├── handlebars.js.md
├── harvey.js.md
├── heroku.md
├── hledger.md
├── homebrew.md
├── html-email.md
├── html-input.md
├── html-meta.md
├── html-microformats.md
├── html-share.md
├── html.md
├── http-status.md
├── httpie.md
├── ie.md
├── ie_bugs.md
├── imagemagick.md
├── immutable.js.md
├── index.md
├── index@2016.md
├── inkscape.md
├── ios-provision.md
├── jade.md
├── jasmine.md
├── jekyll-github.md
├── jekyll.md
├── jest.md
├── jinja.md
├── jinja2.md
├── jquery-cdn.md
├── jquery.md
├── js-appcache.md
├── js-array.md
├── js-date.md
├── js-fetch.md
├── js-lazy.md
├── js-model.md
├── js-speech.md
├── jscoverage.md
├── jsdoc.md
├── jshint.md
├── knex.md
├── koa.md
├── kotlin.md
├── kramdown.md
├── layout-thrashing.md
├── ledger-csv.md
├── ledger-examples.md
├── ledger-format.md
├── ledger-periods.md
├── ledger-query.md
├── ledger.md
├── less.md
├── licenses.md
├── linux.md
├── lodash.md
├── lua.md
├── machinist.md
├── macos-mouse-acceleration.md
├── make-assets.md
├── makefile.md
├── mako.md
├── man.md
├── markdown.md
├── meow.md
├── meta-tags.md
├── middleman.md
├── minimist.md
├── minitest.md
├── mixpanel.md
├── mobx.md
├── mocha-blanket.md
├── mocha-html.md
├── mocha-tdd.md
├── mocha.md
├── modella.md
├── modernizr.md
├── moment.md
├── mysql.md
├── ncftp.md
├── netlify.toml
├── nock.md
├── nocode.md
├── nodejs-assert.md
├── nodejs-fs.md
├── nodejs-path.md
├── nodejs-process.md
├── nodejs-stream.md
├── nodejs.md
├── nopt.md
├── npm.md
├── org-mode.md
├── osx.md
├── package-json.md
├── package.json
├── package.md
├── packs.md
├── pacman.md
├── parsimmon.md
├── parsley.md
├── pass.md
├── passenger.md
├── perl-pie.md
├── ph-food-delivery.md
├── phoenix-conn.md
├── phoenix-ecto.md
├── phoenix-ecto@1.2.md
├── phoenix-ecto@1.3.md
├── phoenix-migrations.md
├── phoenix-routing.md
├── phoenix.md
├── phoenix@1.2.md
├── plantuml.md
├── playwright.config.ts
├── pm2.md
├── polyfill.io.md
├── postcss.config.js
├── postgresql-json.md
├── postgresql.md
├── premailer.md
├── projectionist.md
├── promise.md
├── pry.md
├── psdrb.md
├── public/
│   ├── _headers
│   ├── _redirects
│   └── robots.txt
├── pug.md
├── python.md
├── qjs.md
├── qunit.md
├── rack-test.md
├── ractive.md
├── rails-controllers.md
├── rails-forms.md
├── rails-helpers.md
├── rails-i18n.md
├── rails-migrations.md
├── rails-models.md
├── rails-plugins.md
├── rails-routes.md
├── rails-tricks.md
├── rails.md
├── rake.md
├── rbenv.md
├── rclone.md
├── rdoc.md
├── react-router.md
├── react.md
├── react@0.14.md
├── redux.md
├── regexp.md
├── rename.md
├── resolutions.md
├── rest-api.md
├── riot.md
├── rollup.md
├── ronn.md
├── rspec-rails.md
├── rspec.md
├── rst.md
├── rsync.md
├── rtorrent.md
├── ruby.md
├── ruby21.md
├── rubygems.md
├── sass.md
├── saucelabs.md
├── scp.md
├── screen.md
├── sed.md
├── semver.md
├── sequel.md
├── sequelize.md
├── sh-pipes.md
├── sh.md
├── shelljs.md
├── siege.md
├── simple_form.md
├── sinon-chai.md
├── sinon.md
├── sketch.md
├── slim.md
├── social-images.md
├── spacemacs.md
├── spine.md
├── spreadsheet.md
├── sql-join.md
├── src/
│   ├── analytics/
│   │   ├── CloudflareAnalytics.astro
│   │   └── GoogleAnalytics.astro
│   ├── components/
│   │   ├── BaseLayout.astro
│   │   ├── SEO/
│   │   │   └── SEO.astro
│   │   ├── SocialList.astro
│   │   ├── TopNav.astro
│   │   ├── V2017/
│   │   │   ├── CarbonBox.astro
│   │   │   └── PushButton.astro
│   │   ├── V2017Home/
│   │   │   ├── Announcements.astro
│   │   │   ├── FeaturedPages.astro
│   │   │   └── PageListItem.astro
│   │   ├── V2017Sheet/
│   │   │   ├── CommentsArea.astro
│   │   │   ├── NoticeBox.astro
│   │   │   ├── RelatedPostItem.astro
│   │   │   ├── RelatedPosts.astro
│   │   │   ├── SearchFooter.astro
│   │   │   ├── SearchForm.astro
│   │   │   └── SearchForm.script.ts
│   │   ├── V2017Sheet.astro
│   │   └── gaEnabled.tsx
│   ├── config.ts
│   ├── env.d.ts
│   ├── lib/
│   │   ├── domutils/
│   │   │   └── onScrollVisible.ts
│   │   ├── fuseSearch/
│   │   │   ├── __snapshots__/
│   │   │   │   └── fuseSearch.test.ts.snap
│   │   │   ├── fuseSearch.test.ts
│   │   │   └── fuseSearch.ts
│   │   ├── kramdown.ts
│   │   ├── links.ts
│   │   ├── page/
│   │   │   ├── accessors.ts
│   │   │   └── queries.ts
│   │   ├── page.test.ts
│   │   ├── page.ts
│   │   ├── render.test.ts
│   │   ├── render.ts
│   │   └── seo/
│   │       ├── __snapshots__/
│   │       │   └── seo.test.ts.snap
│   │       ├── jsonJd.test.ts
│   │       ├── jsonLd.ts
│   │       ├── seo.test.ts
│   │       └── seo.ts
│   ├── pages/
│   │   ├── 404.astro
│   │   ├── [...slug].astro
│   │   ├── __tests__/
│   │   │   ├── searchindex.json.test.ts
│   │   │   └── sitemap.xml.test.ts
│   │   ├── index.astro
│   │   ├── searchindex.json.ts
│   │   ├── sitemap.xml.ts
│   │   └── test_scenarios/
│   │       └── seo_tags_test.astro
│   ├── ruby/
│   │   ├── cache_kramdown.rb
│   │   ├── kramdown.rb
│   │   ├── renderer.rb
│   │   └── renderer.test.rb
│   ├── sass/
│   │   ├── 2017/
│   │   │   ├── _utils.scss
│   │   │   ├── base/
│   │   │   │   └── prism_line_highlight.scss
│   │   │   ├── components/
│   │   │   │   ├── announcements-item.scss
│   │   │   │   ├── announcements-list.scss
│   │   │   │   ├── autocomplete.scss
│   │   │   │   ├── back-button.scss
│   │   │   │   ├── comments-area.scss
│   │   │   │   ├── comments-details.scss
│   │   │   │   ├── comments-section.scss
│   │   │   │   ├── h2-section.scss
│   │   │   │   ├── h3-section-list.scss
│   │   │   │   ├── h3-section.scss
│   │   │   │   ├── headline-pub.scss
│   │   │   │   ├── hint-mark.scss
│   │   │   │   ├── home-button.scss
│   │   │   │   ├── intro-content.scss
│   │   │   │   ├── main-heading.scss
│   │   │   │   ├── missing-message.scss
│   │   │   │   ├── notice-box.scss
│   │   │   │   ├── page-actions.scss
│   │   │   │   ├── pages-list.scss
│   │   │   │   ├── pre-footer.scss
│   │   │   │   ├── push-button.scss
│   │   │   │   ├── related-post-item.scss
│   │   │   │   ├── related-post-list.scss
│   │   │   │   ├── related-posts-area.scss
│   │   │   │   ├── related-posts-callout.scss
│   │   │   │   ├── related-posts-group.scss
│   │   │   │   ├── related-posts-section.scss
│   │   │   │   ├── search-box.scss
│   │   │   │   ├── search-footer.scss
│   │   │   │   ├── top-nav.scss
│   │   │   │   └── top-sheet.scss
│   │   │   ├── markdown/
│   │   │   │   ├── a-em.scss
│   │   │   │   ├── code.scss
│   │   │   │   ├── headings.scss
│   │   │   │   ├── p.scss
│   │   │   │   ├── table.scss
│   │   │   │   └── ul.scss
│   │   │   ├── placeholders/
│   │   │   │   └── push-button.scss
│   │   │   ├── utils/
│   │   │   │   ├── _font-size.scss
│   │   │   │   ├── _gutter.scss
│   │   │   │   ├── _heading-style.scss
│   │   │   │   ├── _section-gutter.scss
│   │   │   │   └── _section-with-container.scss
│   │   │   └── variables.scss
│   │   ├── full.scss
│   │   └── vendor/
│   │       ├── ionicons-inline/
│   │       │   └── ionicons.scss
│   │       └── modularscale/
│   │           └── _modularscale.scss
│   ├── scripts/
│   │   └── v2017/
│   │       ├── _utils.scss
│   │       ├── behaviors_2/
│   │       │   ├── anchors.js
│   │       │   ├── dismiss.js
│   │       │   ├── dismissable.js
│   │       │   ├── disqus.js
│   │       │   └── no-preview.js
│   │       └── helpers/
│   │           ├── data.js
│   │           ├── dismiss.js
│   │           ├── inject_disqus.js
│   │           ├── preview.js
│   │           ├── qs.js
│   │           └── store.js
│   ├── styles/
│   │   └── CommonStyles.ts
│   └── types/
│       ├── JsonLdDocument.ts
│       └── SheetFrontmatter.ts
├── stencil.md
├── stimulus-reflex.md
├── strftime.md
├── stylus.md
├── sublime-text.md
├── superagent.md
├── tabular.md
├── tailwind.config.mjs
├── tape.md
├── tar.md
├── test/
│   ├── basicPage.e2e.ts
│   ├── e2eUtils.ts
│   └── index.e2e.ts
├── tests/
│   ├── basic.md
│   └── keywords_test.md
├── textile.md
├── tig.md
├── tmux.md
├── tomdoc.md
├── top.md
├── travis.md
├── tsconfig.json
├── typescript.md
├── ubuntu.md
├── umdjs.md
├── underscore-string.md
├── unicode.md
├── vagrant.md
├── vagrantfile.md
├── vainglory.md
├── vim-diff.md
├── vim-digraphs.md
├── vim-easyalign.md
├── vim-help.md
├── vim-rails.md
├── vim-unite.md
├── vim.md
├── vimscript-functions.md
├── vimscript-snippets.md
├── vimscript.md
├── virtual-dom.md
├── vite.config.js
├── vows.md
├── vscode.md
├── vue.md
├── vue@1.0.28.md
├── watchexec.md
├── watchman.md
├── web-workers.md
├── webpack.md
├── weechat.md
├── weinre.md
├── wip/
│   ├── intl-datetime.md
│   └── php.md
├── xpath.md
├── yaml.md
├── yargs.md
├── yarn.md
├── yum.md
├── znc.md
├── zombie.md
└── zsh.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .eslintrc.cjs
================================================
/* eslint-env node */
module.exports = {
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:astro/recommended',
    'prettier'
  ],
  env: {
    browser: true // enables window, document, etc
  },
  parser: '@typescript-eslint/parser',
  plugins: ['@typescript-eslint'],
  root: true,
  ignorePatterns: ['dist/**'],

  overrides: [
    {
      files: ['*.test.ts'],
      rules: {
        '@typescript-eslint/no-explicit-any': 'off'
      }
    },
    {
      files: ['*.astro'],
      parser: 'astro-eslint-parser',
      parserOptions: {
        parser: '@typescript-eslint/parser',
        extraFileExtensions: ['.astro']
      }
      // rules: {
      // override/add rules settings here, such as:
      // "astro/no-set-html-directive": "error"
      // },
    }
  ]
}


================================================
FILE: .github/workflows/build.yml
================================================
name: Run tests
on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
      - uses: actions/setup-node@v4
        with:
          node-version-file: .node-version
      - uses: pnpm/action-setup@v3
        with: { run_install: false }

      # https://github.com/pnpm/action-setup?tab=readme-ov-file#use-cache-to-reduce-installation-time
      - name: Get pnpm store directory
        shell: bash
        run: |
          echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
      - uses: actions/cache@v4
        name: Setup pnpm cache
        with:
          path: ${{ env.STORE_PATH }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-

      - name: Install dependencies
        run: pnpm install --frozen-lockfile
      - name: Install playwright browsers
        run: pnpm playwright install --with-deps chromium
      - name: Run tests
        run: pnpm run ci


================================================
FILE: .gitignore
================================================
# build output
dist/
# generated types
.astro/

# dependencies
node_modules/

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*


# environment variables
.env
.env.production

# macOS-specific files
.DS_Store

.cache

# playwright
test-results


================================================
FILE: .node-version
================================================
22.21.1


================================================
FILE: .prettierignore
================================================
src/sass/vendor
vendor
.cache
dist
*.md
pnpm-lock.yaml


================================================
FILE: .prettierrc
================================================
{
  "semi": false,
  "singleQuote": true,
  "trailingComma": "none",
  "plugins": ["prettier-plugin-astro"]
}


================================================
FILE: .ruby-version
================================================
3.2.2


================================================
FILE: .vscode/extensions.json
================================================
{
  "recommendations": ["astro-build.astro-vscode"],
  "unwantedRecommendations": []
}


================================================
FILE: .vscode/launch.json
================================================
{
  "version": "0.2.0",
  "configurations": [
    {
      "command": "./node_modules/.bin/astro dev",
      "name": "Development server",
      "request": "launch",
      "type": "node-terminal"
    }
  ]
}


================================================
FILE: .vscode/markdown.code-snippets
================================================
{
  "Test snip": {
    "prefix": ["about"],
    "body": "Copyright. Foo Corp 2028",
    "description": "Adds copyright...",
    "scope": "markdown"
  }
}


================================================
FILE: 101.md
================================================
---
title: 101
category: JavaScript libraries
updated: 2017-09-21
intro: |
  [101](https://www.npmjs.com/package/101) is a JavaScript library for dealing with immutable data in a functional manner.
---

### Usage

```js
const isObject = require('101/isObject')
isObject({}) // → true
```

Every function is exposed as a module.

See: [101](https://github.com/tjmehta/101)

### Type checking

```js
isObject({})
isString('str')
isRegExp(/regexp/)
isBoolean(true)
isEmpty({})
isfunction(x => x)
isInteger(10)
isNumber(10.1)
instanceOf(obj, 'string')
```

## Objects
{: .-three-column}

### Example
{: .-prime}

```js
let obj = {}
```

#### Update

```js
obj = put(obj, 'user.name', 'John')
// → { user: { name: 'John' } }
```

#### Read

```js
pluck(name, 'user.name')
// → 'John'
```

#### Delete

```js
obj = del(obj, 'user')
// → { }
```

### Getting

```js
pluck(state, 'user.profile.name')
```

```js
pick(state, ['user', 'ui'])
pick(state, /^_/)
```

`pluck` returns values, `pick` returns subsets of objects.

See:
[pluck](https://github.com/tjmehta/101#pluck),
[pick](https://github.com/tjmehta/101#pick)

### Setting

```js
put(state, 'user.profile.name', 'john')
```

See:
[put](https://github.com/tjmehta/101#put)

### Deleting

```js
del(state, 'user.profile')
omit(state, ['user', 'data'])
```

`omit` is like `del`, but supports multiple keys to be deleted.

See:
[omit](https://github.com/tjmehta/101#omit),
[del](https://github.com/tjmehta/101#del)

### Keypath check

```js
hasKeypaths(state, ['user'])
hasKeypaths(state, { 'user.profile.name': 'john' })
```

See:
[hasKeypaths](https://github.com/tjmehta/101#haskeypaths)

### Get values

```js
values(state)
```

## Functions

### Simple functions

| `and(x, y)` | `x && y` |
| `or(x, y)` | `x || y` |
| `xor(x, y)` | `!(!x && !y) && !(x && y)` |
| `equals(x, y)` | `x === y` |
| `exists(x)` | `!!x` |
| `not(x)` | `!x` |

Useful for function composition.

See:
[and](https://github.com/tjmehta/101#and),
[equals](https://github.com/tjmehta/101#equals),
[exists](https://github.com/tjmehta/101#exists)

### Composition

```js
compose(f, g)       // x => f(g(x))
curry(f)            // x => y => f(x, y)
flip(f)             // f(x, y) --> f(y, x)
```

See:
[compose](https://github.com/tjmehta/101#compose),
[curry](https://github.com/tjmehta/101#curry),
[flip](https://github.com/tjmehta/101#flip)

### And/or

```js
passAll(f, g)       // x => f(x) && g(x)
passAny(f, g)       // x => f(x) || g(x)
```

See:
[passAll](https://github.com/tjmehta/101#passall),
[passAny](https://github.com/tjmehta/101#passany)

### Converge

```js
converge(and, [pluck('a'), pluck('b')])(x)
```

```js
// → and(pluck(x, 'a'), pluck(x, 'b'))
```

See:
[converge](https://github.com/tjmehta/101#converge)

## Arrays

### Finding

```js
find(list, x => x.y === 2)
findIndex(list, x => ...)
includes(list, 'item')
last(list)
```

```js
find(list, hasProps('id'))
```

### Grouping

```js
groupBy(list, 'id')
indexBy(list, 'id')
```

## Examples

### Function composition

```js
isFloat = passAll(isNumber, compose(isInteger, not))
// n => isNumber(n) && not(isInteger(n))
```

```js
function doStuff (object, options) { ... }

doStuffForce = curry(flip(doStuff))({ force: true })
```

## Reference

- <https://github.com/tjmehta/101>


================================================
FILE: AGENTS.md
================================================
# Agent guidelines for devhints.io

## Commands

- **Dev server**: `pnpm dev` (requires Ruby for markdown caching)
- **Build**: `pnpm build`
- **Test**: `pnpm test` (runs Vitest in watch mode)
- **Run single test**: `pnpm vitest run <file-path>` or `pnpm vitest <file-path>` (watch mode)
- **All tests (CI)**: `pnpm ci` (runs all linters, tests, and build)
- **Lint**: `pnpm eslint:check` or `pnpm prettier:check`
- **Format**: `pnpm format` (runs both ESLint and Prettier fixes)

## Code style

- **Package manager**: pnpm (v8.15.4+)
- **Framework**: Astro with TypeScript (strict mode), Tailwind CSS
- **Imports**: Use `~/` alias for `src/` directory; Prettier organizes imports automatically
- **Types**: Use Zod schemas for runtime validation (see `SheetFrontmatter.ts`); TypeScript strict mode enabled
- **Naming**: camelCase for variables/functions, PascalCase for components/types
- **Error handling**: Distinguish operational (expected) vs unexpected errors; return error objects for operational errors
- **Testing**: Vitest with globals enabled; use `it.each()` for repeated test cases; prefer object constants over helper functions

## Markdown files

Consult @_docs/writing-guidelines.md for formatting *.md files.


================================================
FILE: CONTRIBUTING.md
================================================
# Developer notes

## Runtimes

Requires Node.js, Ruby, Yarn v1.

See `.ruby-version` and `.node-version` for supported versions.

## Gitpod

This repository supports contribution using [gitpod](https://gitpod.io) which is online IDE using [Theia](https://github.com/eclipse-theia/theia).

To open-up the environment simple natigate on https://gitpod.io/#https://github.com/rstacruz/cheatsheets

Or using a button:<br>
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rstacruz/cheatsheets)

### Preview built website

To preview the website you need to first build it then you can navigate to file that you are trying to contribute and preview directly.

<img src='.github/images/gitpod_preview_tut.png' width=828 height=459/>

## Starting a local instance

This starts Jekyll and Parcel. This requires recent versions of [Node.js], [Yarn], [Ruby] and [Bundler] installed.

```bash
yarn install
bundle install
env PORT=4001 yarn run dev
```

[node.js]: https://nodejs.org/en/download/package-manager/
[ruby]: https://www.ruby-lang.org/en/documentation/installation/
[yarn]: https://yarnpkg.com/en/docs/install
[bundler]: https://bundler.io/

### Docker

You can also run a local instance using Docker. This is the preferred method, especially for Windows.
You only need to install Docker ([macOS](https://docs.docker.com/docker-for-mac/install/), [Windows](https://docs.docker.com/docker-for-windows/install/), [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/), [Arch Linux](https://www.archlinux.org/packages/community/x86_64/docker/), [other](https://www.docker.com/community-edition#download)).

First time setup:

```bash
# Build images (takes ~12mins)
docker-compose build

# First-time setup
docker-compose run --rm web bundle install && docker-compose run --rm web yarn install
```

Starting the server:

```bash
docker-compose up
```

## CSS classes

See <https://devhints.io/cheatsheet-styles> for a reference on styling.

## JavaScript

When updating JavaScript, be sure Parcel is running (`yarn dev` takes care of this).

This auto-updates `/assets/packed/` and `_includes/2017/critical/` with sources in `_parcel/`.

Before committing, run `yarn parcel:build` first.

## JavaScript tests

There are also automated tests:

```
yarn run test --watch
```

## Frontmatter

Each sheet supports these metadata:

```yml
---
title: React.js
# Optional:
category: React
updated: 2020-06-14
ads: false # Add this to disable ads
weight: -5 # lower number = higher in related posts list
deprecated: true # Don't show in related posts
deprecated_by: /enzyme # Point to latest version
prism_languages: [vim] # Extra syntax highlighting
intro: |
  This is some *Markdown* at the beginning of the article.
tags:
  - WIP
  - Featured

# Special pages:
# (don't set these for cheatsheets)
type: home # home | article | error
og_type: website # opengraph type
---

```

## Prism languages

For supported prism languages:

- <https://github.com/PrismJS/prism/tree/gh-pages/components>

## Setting up redirects

This example sets up a redirect from `es2015` to `es6`:

```yml
# /es2015.md
---
title: ES2015
category: Hidden
redirect_to: /es6
---

```

## Localizations

See `_data/content.yml` for chrome strings.

## Forking

So you want to fork this repo? Sure, here's what you need to know to whitelabel this:

- It's all GitHub pages, so the branch has to be `gh-pages`.
- All other GitHub pages gotchas apply (CNAME, etc).
- Edit everything in `_data/` - this holds all 'config' for the site: ad IDs, strings, etc.
- Edit `_config.yml` as well, lots of things may not apply to you.

## CloudFlare purging

The site devhints.io is backed by CloudFlare. Updates will take 2 days to propagate to the website by default. To make sure recent changes will propagate, use this helper script. It will give instructions on how manual selective cache purging can be done.

```bash
./_support/cf-purge.sh
```

## SEO description

There are multiple ways to set meta description.

### Keywords (and intro)

Set `keywords` (and optionally `intro`). This is the easiest and the preferred
way for now.

```
React cheatsheet - devhints.io
------------------------------
https://devhints.io/react ▼
React.Component · render() · componentDidMount() · props/state · React is a
JavaScript library for building web...
```

### Description (and intro)

Set `description` (and optionally `intro`)

```
React cheatsheet - devhints.io
------------------------------
https://devhints.io/react ▼
One-page reference to React and its API. React is a JavaScript library for
building web user interfaces...
```

### Intro only

If you left out `description` or `keywords`, a default description will be added.


================================================
FILE: Gemfile
================================================
source "https://rubygems.org"
gem "minitest"
gem "kramdown"
gem "kramdown-parser-gfm"


================================================
FILE: README.md
================================================
<h1 align='center'>Devhints</h1>

<blockquote align='center'>
TL;DR for developer documentation - a ridiculous collection of cheatsheets
</blockquote>

<br>

<p align='center'>
<a href='https://devhints.io/'><img src='.github/images/screenshot.png' width=600></a>
<br>
✨ <b><a href='https://devhints.io/'>devhints.io</a></b> ✨
</p>

<br>

---

See [CONTRIBUTING.md](CONTRIBUTING.md) for developer notes.

[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/rstacruz/cheatsheets)

<h2 align='center'>Similar projects</h1>

- [Command Line Interface Pages](https://github.com/command-line-interface-pages)
- [tldr-pages](https://github.com/tldr-pages/tldr)
- [Cheat](https://github.com/cheat/cheat)
- [Eg](https://github.com/srsudar/eg)


================================================
FILE: _docs/writing-guidelines.md
================================================
# Cheatsheet guidelines

## Content organisation

- **Progressive complexity:** Start with basics, move to advanced
- **Logical sections:** Group related functionality together
- **H2 and H3:** Organise documents into H2 and H3 sections

H2 content length:

- Short H2s: 2-4 H3s (e.g., "Installing", "Getting started")
- Medium H2s: 4-7 H3s (e.g., "Components", "Lifecycle")  
- Long H2s: 7+ H3s (use column layouts)

H3 content length:

- Focused: One main concept + examples
- Consistent: Similar depth within each H2
- Self-contained: Each H3 should be understandable independently

## Format

- Documentation is in the format of Markdown with Kramdown class extensions
- H3's can have the following class names:
  - `{: .-prime}` - Visually highlighted section. Only use once per document at most.
- PRE elements can have:
  - `{: .-setup}` - Visually muted section. Used for sections with less importance. Deprecated, use sparingly.
- H2's can have:
  - `{: .-three-column}` - use if the H3's are short, and if there are at least 3 H3's in the H2.
  - `{: .-two-column}` - the default

## Writing guidelines

- Aim for brevity
- Sentence case headings, never Title Case
- Omit explanations if they are obvious

## Content priorities

1. **Essential first**: Most commonly used 20% of functionality
2. **Progressive disclosure**: Basic → intermediate → advanced
3. **Practical examples**: Real-world use cases over theoretical
4. **Quick reference**: Dense information for experienced developers
5. **Learning path**: Logical progression for newcomers

## H3 writing guidelines

- Place documentation links in the end. (see next for example)
- Prefer to write explanations *after* a pre/table. Example:

  ````markdown
  ### Setting default props
  
  ```jsx
  Hello.defaultProps = {
    color: 'blue'
  }
  ```
  
  Default properties are used if no properties are given.
  
  See: [defaultProps](https://reactjs.org/docs/react-component.html#defaultprops)
  ````

- When an example has multiple files, use H4 as filename markers. Example:

  ````markdown
  ### via Data Attributes
  
  #### index.html.erb
  
  ```html
  <a
    href="#"
    data-reflex="click->CounterReflex#increment"
    data-step="1"
    data-count="<%= @count.to_i %>"
    >Increment <%= @count.to_i %></a
  >
  ```
  
  #### counter_reflex.rb
  
  ```ruby
  class CounterReflex < StimulusReflex::Reflex
    def increment
      @count = element.dataset[:count].to_i + element.dataset[:step].to_i
    end
  end
  ```
  
  Trigger reflexes without writing any javascript with the `data-reflex` attribute.
  
  ````

- When showing reference information, use tables for quick scanning. Example:

  ````markdown
  ### Primitives

  | Sample                  | Type            |
  | ---                     | ---             |
  | `nil`                   | Nil/null        |
  | `true` _/_ `false`      | Boolean         |
  | ---                     | ---             |
  | `23`                    | Integer         |
  | `3.14`                  | Float           |
  | ---                     | ---             |
  | `"hello"`               | Binary string   |
  | `:hello`                | Atom            |

  These are the basic data types in Elixir.
  ````

- Use inline comments to explain results, equivalents, or provide context. Example:

  ````markdown
  ### Pattern matching

  ```elixir
  user = %{name: "Tom", age: 23}
  %{name: username} = user  # → username = "Tom"
  ```

  ### Piping

  ```elixir
  source
  |> transform(:hello)     # Step 1: transform the data
  |> print()               # Step 2: output the result
  ```

  ```elixir
  # Same as:
  print(transform(source, :hello))
  ```

  ### Type conversions

  ```elixir
  Integer.parse("34")      # → {34, ""}
  Float.parse("34.1")      # → {34.1, ""}
  ```
  ````

```


================================================
FILE: _includes/common/moment_format.md
================================================
## {{ include.title }}
{: .-three-column}

### Examples

#### Date

| Example                   | Output                 |
| ------------------------- | ---------------------- |
| `YYYY-MM-DD`              | 2014-01-01             |
| `dddd, MMMM Do YYYY`      | Friday, May 16th 2014  |
| `dddd [the] Do [of] MMMM` | Friday the 16th of May |

#### Time

| Example   | Output   |
| --------- | -------- |
| `hh:mm a` | 12:30 pm |

Used by [Moment.js](http://momentjs.com/docs/#/displaying/) and [date-fns/format](https://date-fns.org/v1.28.5/docs/format). Similar to Java [SimpleDateFormat](https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html).

### Date

| Symbol | Example                 | Area             |
| ---    | ---                     | ---              |
| `d`    | `0`..`6`                | **Weekday**      |
| `dd`   | `Su`                    |                  |
| `ddd`  | `Sun`                   |                  |
| `dddd` | `Sunday`                |                  |
| ---    | ---                     | ---              |
| `YY`   | `13`                    | **Year**         |
| `YYYY` | `2013`                  |                  |
| ---    | ---                     | ---              |
| `M`    | `1`..`12` _(Jan is 1)_  | **Month**        |
| `Mo`   | `1st`..`12th`           |                  |
| `MM`   | `01`..`12` _(Jan is 1)_ |                  |
| `MMM`  | `Jan`                   |                  |
| `MMMM` | `January`               |                  |
| ---    | ---                     | ---              |
| `Q`    | `1`..`4`                | **Quarter**      |
| `Qo`   | `1st`..`4th`            |                  |
| ---    | ---                     | ---              |
| `D`    | `1`..`31`               | **Day**          |
| `Do`   | `1st`..`31st`           |                  |
| `DD`   | `01`..`31`              |                  |
| ---    | ---                     | ---              |
| `DDD`  | `1`..`365`              | **Day of year**  |
| `DDDo` | `1st`..`365th`          |                  |
| `DDDD` | `001`..`365`            |                  |
| ---    | ---                     | ---              |
| `w`    | `1`..`53`               | **Week of year** |
| `wo`   | `1st`..`53rd`           |                  |
| `ww`   | `01`..`53`              |                  |
{: .-shortcuts}

### Time

| Symbol | Example      | Area                       |
| ---    | ---          | ---                        |
| `H`    | `0`..`23`    | **24h hour**               |
| `HH`   | `00`..`23`   |                            |
| ---    | ---          | ---                        |
| `h`    | `1`..`12`    | **12h hour**               |
| `hh`   | `01`..`12`   |                            |
| ---    | ---          | ---                        |
| `m`    | `0`..`59`    | **Minutes**                |
| `mm`   | `00`..`59`   |                            |
| ---    | ---          | ---                        |
| `s`    | `0`..`59`    | **Seconds**                |
| `ss`   | `00`..`59`   |                            |
| ---    | ---          | ---                        |
| `a`    | `am`         | **AM/PM**                  |
| `A`    | `AM`         |                            |
| ---    | ---          | ---                        |
| `Z`    | `+07:00`     | **Timezone offset**        |
| `ZZ`   | `+0730`      |                            |
| ---    | ---          | ---                        |
| `S`    | `0`..`9`     | Deciseconds                |
| `SS`   | `00`..`99`   | Centiseconds               |
| `SSS`  | `000`..`999` | Milliseconds               |
| ---    | ---          | ---                        |
| `X`    |              | Unix timestamp             |
| `x`    |              | Millisecond Unix timestamp |
{: .-shortcuts}

### Presets

| Example | Output                           |
| ------- | -------------------------------- |
| `LT`    | 8:30 PM                          |
| `LTS`   | 8:30:25 PM                       |
| ---     | ---                              |
| `LL`    | August 2 1985                    |
| `ll`    | Aug 2 1985                       |
| ---     | ---                              |
| `LLL`   | August 2 1985 08:30 PM           |
| `lll`   | Aug 2 1985 08:30 PM              |
| ---     | ---                              |
| `LLLL`  | Thursday, August 2 1985 08:30 PM |
| `llll`  | Thu, Aug 2 1985 08:30 PM         |


================================================
FILE: _includes/common/strftime_format.md
================================================
## {{ include.title }}
{: .-three-column}

### Presets

#### Date

| Example         | Output                 |
| ---             | ---                    |
| `%m/%d/%Y`      | `06/05/2013`           |
| `%A, %B %e, %Y` | `Sunday, June 5, 2013` |
| `%b %e %a`      | `Jun 5 Sun`            |
{: .-shortcuts}

#### Time

| Example         | Output                 |
| ---             | ---                    |
| `%H:%M`         | `23:05`                |
| `%I:%M %p`      | `11:05 PM`             |
{: .-shortcuts}

Used by Ruby, UNIX `date`, and many more.

### Date

| Symbol | Example                  | Area        |
| ---    | ---                      | ---         |
| `%a`   | `Sun`                    | **Weekday** |
| `%A`   | `Sunday`                 |             |
| `%w`   | `0`..`6` _(Sunday is 0)_ |             |
| ---    | ---                      | ---         |
| `%y`   | `13`                     | **Year**    |
| `%Y`   | `2013`                   |             |
| ---    | ---                      | ---         |
| `%b`   | `Jan`                    | **Month**   |
| `%B`   | `January`                |             |
| `%m`   | `01`..`12`               |             |
| ---    | ---                      | ---         |
| `%d`   | `01`..`31`               | **Day**     |
| `%e`   | `1`..`31`                |             |
{: .-shortcuts}

### Time

| Symbol | Example      | Area                |
| ---    | ---          | ---                 |
| `%l`   | `1`          | Hour                |
| `%H`   | `00`..`23`   | 24h Hour            |
| `%I`   | `01`..`12`   | 12h Hour            |
| --     | ---          | ---                 |
| `%M`   | `00`..`59`   | Minute              |
| `%S`   | `00`..`60`   | Second              |
| ---    | ---          | ---                 |
| `%p`   | `AM`         | AM or PM            |
| `%Z`   | `+08`        | Time zone           |
| ---    | ---          | ---                 |
| `%j`   | `001`..`366` | Day of the year     |
| `%%`   | `%`          | Literal % character |
{: .-shortcuts}


================================================
FILE: absinthe.md
================================================
---
title: Absinthe
category: Hidden
tags: [WIP]
updated: 2017-10-10
intro: |
  [Absinthe](http://absinthe-graphql.org/) allows you to write GraphQL servers in Elixir.
---

## Introduction

### Concepts

- `Schema` - The root. Defines what queries you can do, and what types they return.
- `Resolver` - Functions that return data.
- `Type` - A type definition describing the shape of the data you'll return.

### Plug

#### web/router.ex

```elixir
defmodule Blog.Web.Router do
  use Phoenix.Router

  forward "/", Absinthe.Plug,
    schema: Blog.Schema
end
```
{: data-line="4,5"}

Absinthe is a Plug, and you pass it one **Schema**.

See: [Our first query](http://absinthe-graphql.org/tutorial/our-first-query/)

## Main concepts
{: .-three-column}

### Schema

#### web/schema.ex

```elixir
defmodule Blog.Schema do
  use Absinthe.Schema
  import_types Blog.Schema.Types

  query do
    @desc "Get a list of blog posts"
    field :posts, list_of(:post) do
      resolve &Blog.PostResolver.all/2
    end
  end
end
```
{: data-line="5,6,7,8,9,10"}

This schema will account for `{ posts { ··· } }`. It returns a **Type** of `:post`, and delegates to a **Resolver**.

### Resolver

#### web/resolvers/post_resolver.ex

```elixir
defmodule Blog.PostResolver do
  def all(_args, _info) do
    {:ok, Blog.Repo.all(Blog.Post)}
  end
end
```
{: data-line="3"}

This is the function that the schema delegated the `posts` query to.

### Type

#### web/schema/types.ex

```elixir
defmodule Blog.Schema.Types do
  use Absinthe.Schema.Notation

  @desc "A blog post"
  object :post do
    field :id, :id
    field :title, :string
    field :body, :string
  end
end
```
{: data-line="4,5,6,7,8,9"}

This defines a type `:post`, which is used by the resolver.

## Schema

### Query arguments

#### GraphQL query

```
{ user(id: "1") { ··· } }
```

#### web/schema.ex

```elixir
query do
  field :user, type: :user do
    arg :id, non_null(:id)
    resolve &Blog.UserResolver.find/2
  end
end
```
{: data-line="3"}

#### Resolver

```elixir
def find(%{id: id} = args, _info) do
  ···
end
```
{: data-line="1"}

See: [Query arguments](http://absinthe-graphql.org/tutorial/query-arguments/)

### Mutations

#### GraphQL query

```
{
  mutation CreatePost {
    post(title: "Hello") { id }
  }
}
```

#### web/schema.ex

```elixir
mutation do
  @desc "Create a post"
  field :post, type: :post do
    arg :title, non_null(:string)
    resolve &Blog.PostResolver.create/2
  end
end
```
{: data-line="1"}

See: [Mutations](http://absinthe-graphql.org/tutorial/mutations/)

## References

  - [Absinthe website](http://absinthe-graphql.org/) _(absinthe-graphql.org)_
  - [GraphQL cheatsheet](./graphql) _(devhints.io)_


================================================
FILE: activeadmin.md
================================================
---
title: ActiveAdmin
category: Ruby
---

### Listing scopes

Allows you to filter listings by a certain scope.
{: .-setup}

```ruby
scope :draft
scope :for_approval
```

```ruby
scope :public, if: ->{ current_admin_user.can?(...) }
scope "Unapproved", :pending
scope("Published") { |books| books.where(:published: true) }
```

### Sidebar filters

```ruby
filter :email
filter :username
```

### Custom actions

You can define custom actions for models.
{: .-setup}

```ruby
before_filter only: [:show, :edit, :publish] do
  @post = Post.find(params[:id])
end
```

#### Make the route

```ruby
member_action :publish, method: :put do
  @post.publish!
  redirect_to admin_posts_path, notice: "The post '#{@post}' has been published!"
end
```

#### Link it in the index

```ruby
index do
  column do |post|
    link_to 'Publish', publish_admin_post_path(post), method: :put
  end
end
```

#### And link it in show/edit

```ruby
action_item only: [:edit, :show] do
  @post = Post.find(params[:id])
  link_to 'Publish', publish_admin_post_path(post), method: :put
end
```

### Columns

```ruby
column :foo
```

```ruby
column :title, sortable: :name do |post|
  strong post.title
end
```

### Other helpers

```ruby
status_tag "Done"           # Gray
status_tag "Finished", :ok  # Green
status_tag "You", :warn     # Orange
status_tag "Failed", :error # Red
```

### Disabling 'new post'

```ruby
ActiveAdmin.register Post do
  actions :index, :edit
  # or: config.clear_action_items!
end
```


================================================
FILE: adb.md
================================================
---
title: adb (Android Debug Bridge)
category: CLI
weight: -1
authors:
  - github: ZackNeyland
updated: 2018-03-06
---

### Device Basics

| Command                           | Description                                 |
| ---                               | ---                                         |
| `adb devices`                     | Lists connected devices                     |
| `adb devices -l`                  | Lists connected devices and kind            |
| ---                               | ---                                         |
| `adb root`                        | Restarts adbd with root permissions         |
| `adb start-server`                | Starts the adb server                       |
| `adb kill-server`                 | Kills the adb server                        |
| `adb remount`                     | Remounts file system with read/write access |
| `adb reboot`                      | Reboots the device                          |
| `adb reboot bootloader`           | Reboots the device into fastboot            |
| `adb disable-verity`              | Reboots the device into fastboot            |

`wait-for-device` can be specified after `adb` to ensure that the command will run once the device is connected.

`-s` can be used to send the commands to a specific device when multiple are connected.

#### Examples

```
$ adb wait-for-device devices
 List of devices attached
 somedevice-1234 device
 someotherdevice-1234 device
```

```
$ adb -s somedevice-1234 root
```

### Logcat

| Command                              | Description                            |
| ---                                  | ---                                    |
| `adb logcat`                         | Starts printing log messages to stdout |
| `adb logcat -g`                      | Displays current log buffer sizes      |
| `adb logcat -G <size>`               | Sets the buffer size (K or M)          |
| `adb logcat -c`                      | Clears the log buffers                 |
| `adb logcat *:V`                     | Enables ALL log messages (verbose)     |
| `adb logcat -f <filename>`           | Dumps to specified file                |

#### Examples
```
$ adb logcat -G 16M
$ adb logcat *:V > output.log
```

### File Management

| Command                              | Description                       |
| ---                                  | ---                               |
| `adb push <local> <remote>` | Copies the local to the device at remote   |
| `adb pull <remote> <local>` | Copies the remote from the device to local |

#### Examples

```
$ echo "This is a test" > test.txt
$ adb push  test.txt /sdcard/test.txt
$ adb pull /sdcard/test.txt pulledTest.txt
```

### Remote Shell

| Command                                | Description                                                           |
| ---                                    | ---                                                                   |
| `adb shell <command>`                  | Runs the specified command on device (most unix commands work here)   |
| `adb shell wm size`                    | Displays the current screen resolution                                |
| `adb shell wm size WxH`                | Sets the resolution to WxH                                            |
| `adb shell pm list packages`           | Lists all installed packages                                          |
| `adb shell pm list packages -3`        | Lists all installed 3rd-party packages                                |
| `adb shell monkey -p app.package.name` | Starts the specified package                                          |


================================================
FILE: analytics.js.md
================================================
---
title: Google Analytics's analytics.js
category: Analytics
updated: 2017-10-29
intro: |
  Google Analytics's analytics.js is deprecated.
---

### Page view

```js
ga('create', 'UA-XXXX-Y', 'auto')
ga('create', 'UA-XXXX-Y', { userId: 'USER_ID' })
```

```js
ga('send', 'pageview')
ga('send', 'pageview', { 'dimension15': 'My custom dimension' })
```

### Events

```js
ga('send', 'event', 'button',  'click', {color: 'red'});
```

```js
ga('send', 'event', 'button',  'click', 'nav buttons',  4);
/*                  ^category  ^action  ^label          ^value */
```

### Exceptions

```js
ga('send', 'exception', {
  exDescription: 'DatabaseError',
  exFatal: false,
  appName: 'myapp',
  appVersion: '0.1.2'
})
```


================================================
FILE: analytics.md
================================================
---
title: Analytics libraries
category: Analytics
---

### Mixpanel

```js
mixpanel.identify('284');
mixpanel.people.set({ $email: 'hi@gmail.com' });
mixpanel.register({ age: 28, gender: 'male' }); /* set common properties */
```

[mixpanel](./mixpanel)
{: .-crosslink}

### Google Analytics's analytics.js

```js
ga('create', 'UA-XXXX-Y', 'auto');
ga('create', 'UA-XXXX-Y', { userId: 'USER_ID' });
```

```js
ga('send', 'pageview');
ga('send', 'pageview', { 'dimension15': 'My custom dimension' });
```

[analytics.js](./analytics.js)
{: .-crosslink}


================================================
FILE: angularjs.md
================================================
---
title: Angular.js
category: JavaScript libraries
tags: [Archived]
archived: This describes an older version of Angular.
---

### About
{: .-intro}

 * <https://github.com/angular/angular-seed>
 * <https://angularjs.org/>

### ng-app

```html
    <html ng-app="nameApp">
```

### Lists (ng-repeat)
```html
    <ul ng-controller="MyListCtrl">
      <li ng-repeat="phone in phones">
        {{phone.name}}
      </li>
    </ul>
```

### Model (ng-model)

```html
    <select ng-model="orderProp">
      <option value="name">Alphabetical</option>
      <option value="age">Newest</option>
    </select>
```

### Defining a module
```js
    App = angular.module('myApp', []);

    App.controller('MyListCtrl', function ($scope) {
      $scope.phones = [ ... ];
    });
```

### Controller with protection from minification
```js
    App.controller('Name', [
      '$scope',
      '$http',
      function ($scope, $http) {
      }
    ]);

    a.c 'name', [
      '$scope'
      '$http'
      ($scope, $http) ->
    ]
```

### Service
```js
    App.service('NameService', function($http){
      return {
        get: function(){
          return $http.get(url);
        }
      }
    });
```
In controller you call with parameter and will use promises to return data from server.

```js
    App.controller('controllerName',
    function(NameService){
      NameService.get()
      .then(function(){})
    })
```

### Directive
```js
    App.directive('name', function(){
      return {
        template: '<h1>Hello</h1>'
      }
    });
```

In HTML will use `<name></name>` to render your template `<h1>Hello</h1>`

### HTTP
```js
    App.controller('PhoneListCtrl', function ($scope, $http) {
        $http.get('/data.json').success(function (data) {
            $scope.phones = data;
        })
    });
```


================================================
FILE: animated_gif.md
================================================
---
title: Animated GIFs
category: CLI
---

## Animated GIFs
{: .-one-column}

### Convert MP4 to GIF

```bash
mkdir -p gif
mplayer -ao null -vo gif89a:outdir=gif $INPUT
mogrify -format gif *.png
gifsicle --colors=256 --delay=4 --loopcount=0 --dither -O3 gif/*.gif > ${INPUT%.*}.gif
rm -rf gif
```

You'll need `mplayer`, `imagemagick` and `gifsicle`. This converts frames to .png, then turns them into an animated gif.

### A given range

```bash
mplayer -ao null -ss 0:02:06 -endpos 0:05:00 -vo gif89a:outdir=gif videofile.mp4
```

See `-ss` and `-endpos`.


================================================
FILE: ansi.md
================================================
---
title: Ansi codes
category: CLI
intro: |
  Quick reference to ANSI color codes.
---

### Format

```
\033[#m
```

### ANSI codes

```
0      clear
1      bold
4      underline
5      blink

30-37  fg color
40-47  bg color

1K     clear line (to beginning of line)
2K     clear line (entire line)
2J     clear screen
0;0H   move cursor to 0;0

1A     move up 1 line
```

### Colors

```
0      black
1      red
2      green
3      yellow
4      blue
5      magenta
6      cyan
7      white
```

### Bash utilities

```sh
hide_cursor() { printf "\e[?25l"; }
show_cursor() { printf "\e[?25h"; }
```


================================================
FILE: ansible-examples.md
================================================
---
title: Ansible examples
category: Ansible
---

### Examples

 * [Ruby installation](https://github.com/chelsea/ansible-example-ruby/blob/master/roles/webserver/tasks/main.yml) _(github.com)_
 * [Postgres installation](https://github.com/chelsea/ansible-example-ruby/blob/master/roles/db/tasks/main.yml)  _(github.com)_
 * [GitLab installation](https://github.com/tingtun/ansible-playbook-gitlab) _(github.com)_


================================================
FILE: ansible-guide.md
================================================
---
title: "Ansible quickstart"
category: Ansible
description: |
  A quick guide to getting started with your first Ansible playbook.
---

### Install Ansible

```bash
$ brew install ansible            # OSX
$ [sudo] apt install ansible      # elsewhere
```

Ansible is available as a package in most OS's.

See: [Installation](http://docs.ansible.com/ansible/latest/intro_installation.html)

### Start your project

```bash
~$ mkdir setup
~$ cd setup
```

Make a folder for your Ansible files.

See: [Getting started](http://docs.ansible.com/ansible/latest/intro_getting_started.html)

## Creating your files

### Inventory file

#### ~/setup/hosts

```dosini
[sites]
127.0.0.1
192.168.0.1
192.168.0.2
192.168.0.3
```

This is a list of hosts you want to manage, grouped into groups. (Hint: try
using `localhost ansible_connection=local` to deploy to your local machine.)

See: [Intro to Inventory](http://docs.ansible.com/ansible/latest/intro_inventory.html)

### Playbook

#### ~/setup/playbook.yml

```yaml
- hosts: 127.0.0.1
  user: root
  tasks:
    - name: install nginx
      apt: pkg=nginx state=present

    - name: start nginx every bootup
      service: name=nginx state=started enabled=yes

    - name: do something in the shell
      shell: echo hello > /tmp/abc.txt

    - name: install bundler
      gem: name=bundler state=latest
```

See: [Intro to Playbooks](http://docs.ansible.com/ansible/latest/playbooks_intro.html)

## Running

### Running ansible-playbook

```
~/setup$ ls
hosts
playbook.yml
```

#### Running the playbook

```
~/setup$ ansible-playbook -i hosts playbook.yml
PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [127.0.0.1]

TASK: [install nginx] *********************************************************
ok: [127.0.0.1]

TASK: start nginx every bootup] ***********************************************
ok: [127.0.0.1]
...
```

## Read more

* [Getting started with Ansible](http://lowendbox.com/blog/getting-started-with-ansible/) _(lowendbox.com)_
* [Getting started](http://docs.ansible.com/ansible/latest/intro_getting_started.html) _(docs.ansible.com)_
* [Intro to Inventory](http://docs.ansible.com/ansible/latest/intro_inventory.html) _(docs.ansible.com)_
* [Intro to Playbooks](http://docs.ansible.com/ansible/latest/playbooks_intro.html) _(docs.ansible.com)_
* [Ansible Tutorial for Beginners: Playbook & Examples](https://spacelift.io/blog/ansible-tutorial) _(spacelift.io)_
* [Working with Ansible Playbooks – Tips & Tricks with Examples](https://spacelift.io/blog/ansible-playbooks) _(spacelift.io)_


================================================
FILE: ansible-modules.md
================================================
---
title: Ansible modules
category: Ansible
prism_languages: [yaml]
updated: 2017-10-03
---

{% raw %}

## Format

### Basic file

```yaml
---
- hosts: production
  remote_user: root
  tasks:
  - ···
```

Place your modules inside `tasks`.

### Task formats

#### One-line

```yaml
- apt: pkg=vim state=present
```

#### Map

```yaml
- apt:
    pkg: vim
    state: present
```

#### Foldable scalar

```yaml
- apt: >
    pkg=vim
    state=present
```

Define your tasks in any of these formats. One-line format is preferred for short declarations, while maps are preferred for longer.

## Modules

### Aptitude

#### Packages

```yaml
- apt:
    pkg: nodejs
    state: present # absent | latest
    update_cache: yes
    force: no
```

#### Deb files

```yaml
- apt:
    deb: "https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb"
```

#### Repositories

```yaml
- apt_repository:
    repo: "deb https://··· raring main"
    state: present
```

#### Repository keys

```yaml
- apt_key:
    id: AC40B2F7
    url: "http://···"
    state: present
```

### git

```yaml
- git:
    repo: git://github.com/
    dest: /srv/checkout
    version: master
    depth: 10
    bare: yes
```

See: [git module](https://devdocs.io/ansible/git_module)

### git_config

```yaml
- git_config:
    name: user.email
    scope: global # local | system
    value: hi@example.com
```

See: [git_config module](https://devdocs.io/ansible/git_config_module)

### user

```yaml
- user:
    state: present
    name: git
    system: yes
    shell: /bin/sh
    groups: admin
    comment: "Git Version Control"
```

See: [user module](https://devdocs.io/ansible/user_module)

### service

```yaml
- service:
    name: nginx
    state: started
    enabled: yes     # optional
```

See: [service module](https://devdocs.io/ansible/service_module)

## Shell

### shell

```yaml
- shell: apt-get install nginx -y
```

#### Extra options

```yaml
- shell: echo hello
  args:
    creates: /path/file  # skip if this exists
    removes: /path/file  # skip if this is missing
    chdir: /path         # cd here before running
```

#### Multiline example

```yaml
- shell: |
    echo "hello there"
    echo "multiple lines"
```

See: [shell module](https://devdocs.io/ansible/shell_module)

### script

```yaml
- script: /x/y/script.sh
  args:
    creates: /path/file  # skip if this exists
    removes: /path/file  # skip if this is missing
    chdir: /path         # cd here before running
```

See: [script module](https://devdocs.io/ansible/script_module)

## Files

### file

```yaml
- file:
    path: /etc/dir
    state: directory # file | link | hard | touch | absent

    # Optional:
    owner: bin
    group: wheel
    mode: 0644
    recurse: yes  # mkdir -p
    force: yes    # ln -nfs
```

See: [file module](https://devdocs.io/ansible/file_module)

### copy

```yaml
- copy:
    src: /app/config/nginx.conf
    dest: /etc/nginx/nginx.conf

    # Optional:
    owner: user
    group: user
    mode: 0644
    backup: yes
```

See: [copy module](https://devdocs.io/ansible/copy_module)

### template

```yaml
- template:
    src: config/redis.j2
    dest: /etc/redis.conf

    # Optional:
    owner: user
    group: user
    mode: 0644
    backup: yes
```

See: [template module](https://devdocs.io/ansible/template_module)

## Local actions

### local_action

```yaml
- name: do something locally
  local_action: shell echo hello
```

### debug

```yaml
- debug:
    msg: "Hello {{ var }}"
```

See: [debug module](https://devdocs.io/ansible/debug_module)
{% endraw %}



================================================
FILE: ansible-roles.md
================================================
---
title: Ansible roles
category: Ansible
---

### Structure

    roles/
      common/
        tasks/
        handlers/
        files/              # 'copy' will refer to this
        templates/          # 'template' will refer to this
        meta/               # Role dependencies here
        vars/
        defaults/
          main.yml

### References

 * http://www.ansibleworks.com/docs/playbooks_roles.html


================================================
FILE: ansible.md
================================================
---
title: Ansible
category: Ansible
---

{% raw %}

## Getting started

### About
{: .-intro}

- <https://www.ansible.com/>

### Hosts

    $ sudo mkdir /etc/ansible
    $ sudo vim /etc/ansible/hosts

    [example]
    192.0.2.101
    192.0.2.102

### Running a playbook

    $ ansible-playbook playbook.yml

## Playbook files

### Tasks

    - hosts: all
      user: root
      sudo: no
      vars:
        aaa: bbb
      tasks:
        - ...
      handlers:
        - ...

### Includes

    tasks:
      - include: db.yml
    handlers:
      - include: db.yml user=timmy

### Handlers

    handlers:
      - name: start apache2
        action: service name=apache2 state=started

    tasks:
      - name: install apache
        action: apt pkg=apache2 state=latest
        notify:
          - start apache2

### Vars

    - host: lol
      vars_files:
        - vars.yml
      vars:
        project_root: /etc/xyz
      tasks:
        - name: Create the SSH directory.
          file: state=directory path=${project_root}/home/.ssh/
          only_if: "$vm == 0"

### Roles

    - host: xxx
      roles:
        - db
        - { role:ruby, sudo_user:$user }
        - web

    # Uses:
    # roles/db/tasks/*.yml
    # roles/db/handlers/*.yml

### Task: Failures

    - name: my task
      command: ...
      register: result
      failed_when: "'FAILED' in result.stderr"

      ignore_errors: yes

      changed_when: "result.rc != 2"

### Env vars

    vars:
      local_home: "{{ lookup('env','HOME') }}"

{% endraw %}


================================================
FILE: appcache.md
================================================
---
title: Appcache
category: HTML
---

### Format

```
CACHE MANIFEST
# version

CACHE:
https://www.google.com/jsapi
/assets/app.js
/assets/bg.png

NETWORK:
*
```

Note that Appcache is deprecated!

See: [Using the application cache](https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache) _(developer.mozilla.org)_


================================================
FILE: applescript.md
================================================
---
title: AppleScript
updated: 2018-12-06
category: macOS
prism_languages: [applescript]
---

### Running

```applescript
osascript -e "..."
```

```applescript
display notification "X" with title "Y"
```

### Comments

```applescript
-- This is a single line comment
```

```applescript
# This is another single line comment
```

```applescript
(*
This is
a multi
line comment
*)
```

### Say

```applescript
-- default voice
say "Hi I am a Mac"
```

```applescript
-- specified voice
say "Hi I am a Mac" using "Zarvox"
```

### Beep

```applescript
-- beep once
beep
```

```applescript
-- beep 10 times
beep 10
```

### Delay

```applescript
-- delay for 5 seconds
delay 5
```

### Handlers

```applescript
on doubleNumber(n)
	return n * 2
end doubleNumber

set doubledValue to my doubleNumber(2)
```


================================================
FILE: applinks.md
================================================
---
title: Applinks
category: HTML
---

### About

- <http://applinks.org/>

### Applinks

    <meta property="al:ios:url" content="applinks://docs" />
    <meta property="al:ios:app_store_id" content="12345" />
    <meta property="al:ios:app_name" content="App Links" />

    <meta property="al:android:url" content="applinks://docs" />
    <meta property="al:android:app_name" content="App Links" />
    <meta property="al:android:package" content="org.applinks" />

    <meta property="al:web:url" content="http://applinks.org/documentation" />

### Device types

 * `ios`
 * `ipad`
 * `iphone`
 * `android`
 * `windows_phone`
 * `web`

### Reference

 * [applinks.org](http://applinks.org/documentation/)


================================================
FILE: arel.md
================================================
---
title: Arel
category: Rails
---

### About
{: .-intro}

Arel is an SQL abstraction library built into Ruby on Rails.

* <https://github.com/rails/arel>

### Tables

```rb
users = Arel::Table.new(:users)
users = User.arel_table  # ActiveRecord model
```

### Fields

```rb
users[:name]
users[:id]
```

### `where` (restriction)

```rb
users.where(users[:name].eq('amy'))
# SELECT * FROM users WHERE users.name = 'amy'
```

### `select` (projection)

```rb
users.project(users[:id])
# SELECT users.id FROM users
```

### `join`
#### basic join
In ActiveRecord (without Arel), if `:photos` is the name of the association, use `joins`
```rb
users.joins(:photos)
```

In Arel, if `photos` is defined as the Arel table,
```rb
photos = Photo.arel_table
users.join(photos) 
users.join(photos, Arel::Nodes::OuterJoin).on(users[:id].eq(photos[:user_id]))
```

#### join with conditions
```rb
users.joins(:photos).merge(Photo.where(published: true))
```

If the simpler version doesn't help and you want to add more SQL statements to it:
```rb
users.join(
   users.join(photos, Arel::Nodes::OuterJoin)
   .on(photos[:user_id].eq(users[:id]).and(photos[:published].eq(true)))
)
```

#### advanced join
multiple `joins` with the same table but different meanings and/or conditions
```rb
creators = User.arel_table.alias('creators')
updaters = User.arel_table.alias('updaters')
photos = Photo.arel_table

photos_with_credits = photos
.join(photos.join(creators, Arel::Nodes::OuterJoin).on(photos[:created_by_id].eq(creators[:id])))
.join(photos.join(updaters, Arel::Nodes::OuterJoin).on(photos[:assigned_id].eq(updaters[:id])))
.project(photos[:name], photos[:created_at], creators[:name].as('creator'), updaters[:name].as('editor'))

photos_with_credits.to_sql
# => "SELECT `photos`.`name`, `photos`.`created_at`, `creators`.`name` AS creator, `updaters`.`name` AS editor FROM `photos` INNER JOIN (SELECT FROM `photos` LEFT OUTER JOIN `users` `creators` ON `photos`.`created_by_id` = `creators`.`id`) INNER JOIN (SELECT FROM `photos` LEFT OUTER JOIN `users` `updaters` ON `photos`.`updated_by_id` = `updaters`.`id`)"

# after the request is done, you can use the attributes you named
# it's as if every Photo record you got has "creator" and "editor" fields, containing creator name and editor name
photos_with_credits.map{|x|
  "#{photo.name} - copyright #{photo.created_at.year} #{photo.creator}, edited by #{photo.editor}"
}.join('; ')
```

### `limit` / `offset`

```rb
users.take(5) # => SELECT * FROM users LIMIT 5
users.skip(4) # => SELECT * FROM users OFFSET 4
```

### Aggregates

```rb
users.project(users[:age].sum) # .average .minimum .maximum
users.project(users[:id].count)
users.project(users[:id].count.as('user_count'))
```

### `order`

```rb
users.order(users[:name])
users.order(users[:name], users[:age].desc)
users.reorder(users[:age])
```

### With ActiveRecord

```rb
User.arel_table
User.where(id: 1).arel
```

### Clean code with arel

Most of the clever stuff should be in scopes, e.g. the code above could become:
```rb
photos_with_credits = Photo.with_creator.with_editor
```

You can store requests in variables then add SQL segments:
```rb
all_time      = photos_with_credits.count
this_month    = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month))
recent_photos = photos_with_credits.where(photos[:created_at].gteq(Date.today.beginning_of_month)).limit(5)
```


================================================
FILE: astro.config.mjs
================================================
import { defineConfig } from 'astro/config'
import partytown from '@astrojs/partytown'

/*
 * https://astro.build/config
 */
import tailwind from '@astrojs/tailwind'

// https://astro.build/config
export default defineConfig({
  site: 'https://devhints.io',
  build: {
    format: 'file' /* generate /my-post.html instead of /my-post/index.html */,
    inlineStylesheets: 'always'
  },
  prefetch: {
    prefetchAll: true
  },
  server: {
    host: true
  } /* access from https://192.168.x.x/ */,
  integrations: [
    partytown({
      config: {
        forward: ['dataLayer.push']
      }
    }),
    tailwind()
  ],
  markdown: {
    // Syntax highlighting is handled by render()
    syntaxHighlight: false
  }
})


================================================
FILE: atom.md
================================================
---
title: Atom
category: Apps
updated: 2021-09-10
---

## Shortcuts
{: .-three-column}

### Tree

| Shortcut | Description         |
| -------- | ------------------- |
| `⌘\`     | Toggle tree         |
| `⌘⇧\`    | Reveal current file |
{: .-shortcuts}

### Comments

| Shortcut | Description     |
| -------- | --------------- |
| `⌘/`     | Toggle comments |
{: .-shortcuts}

### View

| Shortcut             | Description                                     |
| --------             | ----------------------                          |
| `⌘k` `←,→,↑,↓`       | Split pane to the left, right, up, or down      |
| ---                  | ---                                             |
| `⌘⌥=`                | Grow pane                                       |
| `⌘⌥-`                | Shrink pane                                     |
| ---                  | ---                                             |
| `^⇧←`/`^⇧→`          | Move tab to left/right                          |
{: .-shortcuts}

### Bracket matcher

| Shortcut | Description                    |
| -------- | ------------------------------ |
| `^m`     | Go to matching bracket         |
| `^⌫`     | Remove brackets from selection |
| `^⌘m`    | Select inside brackets         |
| `⌥⌘.`    | Close tag                      |
{: .-shortcuts}

### Symbols view

| Shortcut | Description                      |
| -------- | -------------------------------- |
| `⌥⌘↓`    | Jump to declaration under cursor |
| `^⇧r`    | Show tags                        |
{: .-shortcuts}

Symbols view enables Ctags support for Atom.

See: [Symbols view](https://atom.io/packages/symbols-view)

### Git

| Shortcut | Description                    |
| -------- | ------------------------------ |
| `^⇧9` | Show Git pane |
| `^⇧8` | Show GitHub pane |
{: .-shortcuts}

### Editing

| Shortcut | Description    |
| -------- | -------------- |
| `⌘d`     | Select word    |
| `⌘l`     | Select line    |
| ---      | ---            |
| `^⌘↑`     | Move line up   |
| `^⌘↓`     | Move line down |
| ---      | ---            |
| `⌘⏎`     | New line below |
| `⌘⇧⏎`    | New line above |
| ---      | ---            |
| `^⇧k`    | Delete line    |
| `⌘⇧d`    | Duplicate line |
{: .-shortcuts}

### Project

| Shortcut | Description             |
| -------- | ----------------------- |
| `⌘⇧p`    | Command palette         |
| `⌘⇧o`    | Add project folder      |
| ---      | ---                     |
| `⌘n`     | New file                |
| `⌘⇧n`    | New window              |
| ---      | ---                     |
| `⌘f`     | Find in file            |
| `⌘⇧f`    | Find in project         |
| `⌘t`     | Search files in project |
{: .-shortcuts}

## Notes

### ⌘

- For Windows and Linux, `⌘` is the `Control` key.
- For macOS, it's the `Command` key.

### ⌥

- For Windows and Linux, `⌥` is the `Alt` key.
- For macOS, it's the `Option` key.


================================================
FILE: awesome-redux.md
================================================
---
title: Awesome Redux
category: React
updated: 2017-11-19
---

### redux-actions

Create action creators in flux standard action format.
{: .-setup}

```js
increment = createAction('INCREMENT', amount => amount)
increment = createAction('INCREMENT')  // same
```

```js
increment(42) === { type: 'INCREMENT', payload: 42 }
```

```js
// Errors are handled for you:
err = new Error()
increment(err) === { type: 'INCREMENT', payload: err, error: true }
```

[redux-actions](https://www.npmjs.com/package/redux-actions)
{: .-crosslink}

### flux-standard-action

A standard for flux action objects. An action may have an `error`, `payload` and `meta` and nothing else.
{: .-setup}

```js
{ type: 'ADD_TODO', payload: { text: 'Work it' } }
{ type: 'ADD_TODO', payload: new Error(), error: true }
```

[flux-standard-action](https://github.com/acdlite/flux-standard-action)
{: .-crosslink}

### redux-multi

Dispatch multiple actions in one action creator.
{: .-setup}

```js
store.dispatch([
  { type: 'INCREMENT', payload: 2 },
  { type: 'INCREMENT', payload: 3 }
])
```

[redux-multi](https://github.com/ashaffer/redux-multi)
{: .-crosslink}

### reduce-reducers
Combines reducers (like *combineReducers()*), but without namespacing magic.
{: .-setup}

```js
re = reduceReducers(
  (state, action) => state + action.number,
  (state, action) => state + action.number
)

re(10, { number: 2 })  //=> 14
```

[reduce-reducers](https://www.npmjs.com/package/reduce-reducers)
{: .-crosslink}

### redux-logger

Logs actions to your console.
{: .-setup}

```js
// Nothing to see here
```

[redux-logger](https://github.com/evgenyrodionov/redux-logger)
{: .-crosslink}

Async
-----

### redux-promise

Pass promises to actions. Dispatches a flux-standard-action.
{: .-setup}

```js
increment = createAction('INCREMENT')  // redux-actions
increment(Promise.resolve(42))
```

[redux-promise](https://github.com/acdlite/redux-promise)
{: .-crosslink}

### redux-promises

Sorta like that, too. Works by letting you pass *thunks* (functions) to `dispatch()`. Also has 'idle checking'.
{: .-setup}

```js
fetchData = (url) => (dispatch) => {
  dispatch({ type: 'FETCH_REQUEST' })
  fetch(url)
    .then((data) => dispatch({ type: 'FETCH_DONE', data })
    .catch((error) => dispatch({ type: 'FETCH_ERROR', error })
})

store.dispatch(fetchData('/posts'))
```

```js
// That's actually shorthand for:
fetchData('/posts')(store.dispatch)
```

[redux-promises](https://www.npmjs.com/package/redux-promises)
{: .-crosslink}

### redux-effects

Pass side effects declaratively to keep your actions pure.
{: .-setup}

```js
{
  type: 'EFFECT_COMPOSE',
  payload: {
    type: 'FETCH'
    payload: {url: '/some/thing', method: 'GET'}
  },
  meta: {
    steps: [ [success, failure] ]
  }
}
```

[redux-effects](https://www.npmjs.com/package/redux-effects)
{: .-crosslink}

### redux-thunk

Pass "thunks" to as actions. Extremely similar to redux-promises, but has support for getState.
{: .-setup}

```js
fetchData = (url) => (dispatch, getState) => {
  dispatch({ type: 'FETCH_REQUEST' })
  fetch(url)
    .then((data) => dispatch({ type: 'FETCH_DONE', data })
    .catch((error) => dispatch({ type: 'FETCH_ERROR', error })
})

store.dispatch(fetchData('/posts'))
```

```js
// That's actually shorthand for:
fetchData('/posts')(store.dispatch, store.getState)
```

```js
// Optional: since fetchData returns a promise, it can be chained
// for server-side rendering
store.dispatch(fetchPosts()).then(() => {
  ReactDOMServer.renderToString(<MyApp store={store} />)
})
```

[redux-thunk](https://www.npmjs.com/package/redux-thunk)
{: .-crosslink}


================================================
FILE: awscli.md
================================================
---
title: AWS CLI
category: Devops
---

### EC2

```
aws ec2 describe-instances
aws ec2 start-instances --instance-ids i-12345678c
aws ec2 terminate-instances --instance-ids i-12345678c
```

### S3

```
aws s3 ls s3://mybucket
aws s3 rm s3://mybucket/folder --recursive
aws s3 cp myfolder s3://mybucket/folder --recursive
aws s3 sync myfolder s3://mybucket/folder --exclude *.tmp
```

### ECS

```
aws ecs create-cluster
  --cluster-name=NAME
  --generate-cli-skeleton

aws ecs create-service
```

### Homebrew

```
brew install awscli
aws configure
```

### Configuration profiles

```
aws configure --profile project1
aws configure --profile project2
```

## Elastic Beanstalk

### Configuration

* .elasticbeanstalk/config.yml - application config
* .elasticbeanstalk/dev-env.env.yml - environment config

```
eb config
```

See: <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html>

## ebextensions

* <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html>
* <https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html>

## Also see

* [AWS CLI](https://aws.amazon.com/cli/)
* [Documentation](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)
* [All commands](https://docs.aws.amazon.com/cli/latest/reference/#available-services)


================================================
FILE: backbone.md
================================================
---
title: Backbone.js
updated: 2018-12-06
category: JavaScript libraries
---

### Binding events

```js
.on('event', callback)
.on('event', callback, context)
```

```js
.on({
  'event1': callback,
  'event2': callback
})
```

```js
.on('all', callback)
```

```js
.once('event', callback)   // Only happens once
```

### Unbinding events

```js
object.off('change', onChange)    // just the `onChange` callback
object.off('change')              // all 'change' callbacks
object.off(null, onChange)        // `onChange` callback for all events
object.off(null, null, context)   // all callbacks for `context` all events
object.off()                      // all
```

### Events

```js
object.trigger('event')
```

```js
view.listenTo(object, event, callback)
view.stopListening()
```

### List of events

  * Collection:
    * `add` (model, collection, options)
    * `remove` (model, collection, options)
    * `reset` (collection, options)
    * `sort` (collection, options)

  * Model:
    * `change` (model, options)
    * `change:[attr]` (model, value, options)
    * `destroy` (model, collection, options)
    * `error` (model, xhr, options)

  * Model and collection:
    * `request` (model, xhr, options)
    * `sync` (model, resp, options)

  * Router:
    * `route:[name]` (params)
    * `route` (router, route, params)

## Views

### Defining

```js
// All attributes are optional
var View = Backbone.View.extend({
  model: doc,
```

```js
  tagName: 'div',
  className: 'document-item',
  id: "document-" + doc.id,
  attributes: { href: '#' },
```

```js
  el: 'body',
```

```js
  events: {
    'click button.save': 'save',
    'click .cancel': function() { ··· },
    'click': 'onclick'
  },
```

```js
  constructor: function() { ··· },
  render: function() { ··· }
})
```
### Instantiating

```js
view = new View()
view = new View({ el: ··· })
```

### Methods

```js
view.$el.show()
view.$('input')
```

```js
view.remove()
```

```js
view.delegateEvents()
view.undelegateEvents()
```

## Models

### Defining

```js
// All attributes are optional
var Model = Backbone.Model.extend({
  defaults: {
    'author': 'unknown'
  },
  idAttribute: '_id',
  parse: function() { ··· }
})
```

### Instantiating

```js
var obj = new Model({ title: 'Lolita', author: 'Nabokov' })
```

```js
var obj = new Model({ collection: ··· })
```

### Methods

```js
obj.id
obj.cid   // → 'c38' (client-side ID)
```

```js
obj.clone()
```

```js
obj.hasChanged('title')
obj.changedAttributes()  // false, or hash
obj.previousAttributes() // false, or hash
obj.previous('title')
```

```js
obj.isNew()
```

```js
obj.set({ title: 'A Study in Pink' })
obj.set({ title: 'A Study in Pink' }, { validate: true, silent: true })
obj.unset('title')
```

```js
obj.get('title')
obj.has('title')
obj.escape('title')     /* Like .get() but HTML-escaped */
```

```js
obj.clear()
obj.clear({ silent: true })
```

```js
obj.save()
obj.save({ attributes })
obj.save(null, {
  silent: true, patch: true, wait: true,
  success: callback, error: callback
})
```

```js
obj.destroy()
obj.destroy({
  wait: true,
  success: callback, error: callback
})
```

```js
obj.toJSON()
```

```js
obj.fetch()
obj.fetch({ success: callback, error: callback })
```

### Validation

```js
var Model = Backbone.Model.extend({
  validate: function(attrs, options) {
    if (attrs.end < attrs.start) {
      return "Can't end before it starts"
    }
  }
})
```
{: data-line="2"}

```js
obj.validationError  //=> "Can't end before it starts"
obj.isValid()
obj.on('invalid', function (model, error) { ··· })
```

```js
// Triggered on:
obj.save()
obj.set({ ··· }, { validate: true })
```

### Custom URLs

```js
var Model = Backbone.Model.extend({
  // Single URL (string or function)
  url: '/account',
  url: function() { return '/account' },
```

```js
  // Both of these two work the same way
  url: function() { return '/books/' + this.id }),
  urlRoot: '/books'
})
```

```js
var obj = new Model({ url: ··· })
var obj = new Model({ urlRoot: ··· })
```

## References
{: .-one-column}

- [Backbone website](http://backbonejs.org/) _(backbonejs.org)_
- [Backbone patterns](http://ricostacruz.com/backbone-patterns/) _(ricostacruz.com)_


================================================
FILE: bash.md
================================================
---
title: Bash scripting
category: CLI
tags: [Featured]
updated: 2020-07-05
keywords:
  - Variables
  - Functions
  - Interpolation
  - Brace expansions
  - Loops
  - Conditional execution
  - Command substitution
---

## Getting started
{: .-three-column}

### Introduction
{: .-intro}

This is a quick reference to getting started with Bash scripting.

- [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_
- [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_
- [Bash Hackers Wiki](https://web.archive.org/web/20230406205817/https://wiki.bash-hackers.org/) _(wiki.bash-hackers.org)_

### Example

```bash
#!/usr/bin/env bash

name="John"
echo "Hello $name!"
```

### Variables

```bash
name="John"
echo $name  # see below
echo "$name"
echo "${name}!"
```

Generally quote your variables unless they contain wildcards to expand or command fragments.

```bash
wildcard="*.txt"
options="iv"
cp -$options $wildcard /tmp
```

### String quotes

```bash
name="John"
echo "Hi $name"  #=> Hi John
echo 'Hi $name'  #=> Hi $name
```

### Shell execution

```bash
echo "I'm in $(pwd)"
echo "I'm in `pwd`"  # obsolescent
# Same
```

See [Command substitution](https://web.archive.org/web/20230326081741/https://wiki.bash-hackers.org/syntax/expansion/cmdsubst)

### Conditional execution

```bash
git commit && git push
git commit || echo "Commit failed"
```

### Functions
{: id='functions-example'}

```bash
get_name() {
  echo "John"
}

echo "You are $(get_name)"
```

See: [Functions](#functions)

### Conditionals
{: id='conditionals-example'}

```bash
if [[ -z "$string" ]]; then
  echo "String is empty"
elif [[ -n "$string" ]]; then
  echo "String is not empty"
fi
```

See: [Conditionals](#conditionals)

### Strict mode

```bash
set -euo pipefail
IFS=$'\n\t'
```

See: [Unofficial bash strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/)

### Brace expansion

```bash
echo {A,B}.js
```

| Expression             | Description           |
| ---------------------- | --------------------- |
| `{A,B}`                | Same as `A B`         |
| `{A,B}.js`             | Same as `A.js B.js`   |
| `{1..5}`               | Same as `1 2 3 4 5`   |
| <code>&lcub;{1..3},{7..9}}</code> | Same as `1 2 3 7 8 9` |

See: [Brace expansion](https://web.archive.org/web/20230207192110/https://wiki.bash-hackers.org/syntax/expansion/brace)

## Parameter expansions
{: .-three-column}

### Basics

```bash
name="John"
echo "${name}"
echo "${name/J/j}"    #=> "john" (substitution)
echo "${name:0:2}"    #=> "Jo" (slicing)
echo "${name::2}"     #=> "Jo" (slicing)
echo "${name::-1}"    #=> "Joh" (slicing)
echo "${name:(-1)}"   #=> "n" (slicing from right)
echo "${name:(-2):1}" #=> "h" (slicing from right)
echo "${food:-Cake}"  #=> $food or "Cake"
```

```bash
length=2
echo "${name:0:length}"  #=> "Jo"
```

See: [Parameter expansion](https://web.archive.org/web/20230408142504/https://wiki.bash-hackers.org/syntax/pe)

```bash
str="/path/to/foo.cpp"
echo "${str%.cpp}"    # /path/to/foo
echo "${str%.cpp}.o"  # /path/to/foo.o
echo "${str%/*}"      # /path/to

echo "${str##*.}"     # cpp (extension)
echo "${str##*/}"     # foo.cpp (basepath)

echo "${str#*/}"      # path/to/foo.cpp
echo "${str##*/}"     # foo.cpp

echo "${str/foo/bar}" # /path/to/bar.cpp
```

```bash
str="Hello world"
echo "${str:6:5}"    # "world"
echo "${str: -5:5}"  # "world"
```

```bash
src="/path/to/foo.cpp"
base=${src##*/}   #=> "foo.cpp" (basepath)
dir=${src%$base}  #=> "/path/to/" (dirpath)
dir=${src%/*}     #=> "/path/to" (dirpath)
```

### Prefix name expansion

```bash
prefix_a=one
prefix_b=two
echo ${!prefix_*}  # all variables names starting with `prefix_`
prefix_a prefix_b
```

### Indirection

```bash
name=joe
pointer=name
echo ${!pointer}
joe
```

### Substitution

| Code              | Description         |
| ----------------- | ------------------- |
| `${foo%suffix}`   | Remove suffix       |
| `${foo#prefix}`   | Remove prefix       |
| ---               | ---                 |
| `${foo%%suffix}`  | Remove long suffix  |
| `${foo/%suffix}`  | Remove long suffix  |
| `${foo##prefix}`  | Remove long prefix  |
| `${foo/#prefix}`  | Remove long prefix  |
| ---               | ---                 |
| `${foo/from/to}`  | Replace first match |
| `${foo//from/to}` | Replace all         |
| ---               | ---                 |
| `${foo/%from/to}` | Replace suffix      |
| `${foo/#from/to}` | Replace prefix      |

### Comments

```bash
# Single line comment
```

```bash
: '
This is a
multi line
comment
'
```

### Substrings

| Expression      | Description                    |
| --------------- | ------------------------------ |
| `${foo:0:3}`    | Substring _(position, length)_ |
| `${foo:(-3):3}` | Substring from the right       |

### Length

| Expression | Description      |
| ---------- | ---------------- |
| `${#foo}`  | Length of `$foo` |

### Manipulation

```bash
str="HELLO WORLD!"
echo "${str,}"   #=> "hELLO WORLD!" (lowercase 1st letter)
echo "${str,,}"  #=> "hello world!" (all lowercase)

str="hello world!"
echo "${str^}"   #=> "Hello world!" (uppercase 1st letter)
echo "${str^^}"  #=> "HELLO WORLD!" (all uppercase)
```

### Default values

| Expression        | Description                                              |
| ----------------- | -------------------------------------------------------- |
| `${foo:-val}`     | `$foo`, or `val` if unset (or null)                      |
| `${foo:=val}`     | Set `$foo` to `val` if unset (or null)                   |
| `${foo:+val}`     | `val` if `$foo` is set (and not null)                    |
| `${foo:?message}` | Show error message and exit if `$foo` is unset (or null) |

Omitting the `:` removes the (non)nullity checks, e.g. `${foo-val}` expands to `val` if unset otherwise `$foo`.

## Loops
{: .-three-column}

### Basic for loop

```bash
for i in /etc/rc.*; do
  echo "$i"
done
```

### C-like for loop

```bash
for ((i = 0 ; i < 100 ; i++)); do
  echo "$i"
done
```

### Ranges

```bash
for i in {1..5}; do
    echo "Welcome $i"
done
```

#### With step size

```bash
for i in {5..50..5}; do
    echo "Welcome $i"
done
```

### Reading lines

```bash
while read -r line; do
  echo "$line"
done <file.txt
```

### Forever

```bash
while true; do
  ···
done
```

## Functions
{: .-three-column}

### Defining functions

```bash
myfunc() {
    echo "hello $1"
}
```

```bash
# Same as above (alternate syntax)
function myfunc {
    echo "hello $1"
}
```

```bash
myfunc "John"
```

### Returning values

```bash
myfunc() {
    local myresult='some value'
    echo "$myresult"
}
```

```bash
result=$(myfunc)
```

### Raising errors

```bash
myfunc() {
  return 1
}
```

```bash
if myfunc; then
  echo "success"
else
  echo "failure"
fi
```

### Arguments

| Expression | Description                                    |
| ---------- | ---------------------------------------------- |
| `$#`       | Number of arguments                            |
| `$*`       | All positional arguments (as a single word)    |
| `$@`       | All positional arguments (as separate strings) |
| `$1`       | First argument                                 |
| `$_`       | Last argument of the previous command          |

**Note**: `$@` and `$*` must be quoted in order to perform as described.
Otherwise, they do exactly the same thing (arguments as separate strings).

See [Special parameters](https://web.archive.org/web/20230318164746/https://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables).

## Conditionals
{: .-three-column}

### Conditions

Note that `[[` is actually a command/program that returns either `0` (true) or `1` (false). Any program that obeys the same logic (like all base utils, such as `grep(1)` or `ping(1)`) can be used as condition, see examples.

| Condition                | Description           |
| ------------------------ | --------------------- |
| `[[ -z STRING ]]`        | Empty string          |
| `[[ -n STRING ]]`        | Not empty string      |
| `[[ STRING == STRING ]]` | Equal                 |
| `[[ STRING != STRING ]]` | Not Equal             |
| ---                      | ---                   |
| `[[ NUM -eq NUM ]]`      | Equal                 |
| `[[ NUM -ne NUM ]]`      | Not equal             |
| `[[ NUM -lt NUM ]]`      | Less than             |
| `[[ NUM -le NUM ]]`      | Less than or equal    |
| `[[ NUM -gt NUM ]]`      | Greater than          |
| `[[ NUM -ge NUM ]]`      | Greater than or equal |
| ---                      | ---                   |
| `[[ STRING =~ STRING ]]` | Regexp                |
| ---                      | ---                   |
| `(( NUM < NUM ))`        | Numeric conditions    |

#### More conditions

| Condition            | Description              |
| -------------------- | ------------------------ |
| `[[ -o noclobber ]]` | If OPTIONNAME is enabled |
| ---                  | ---                      |
| `[[ ! EXPR ]]`       | Not                      |
| `[[ X && Y ]]`       | And                      |
| `[[ X || Y ]]`       | Or                       |

### File conditions

| Condition               | Description             |
| ----------------------- | ----------------------- |
| `[[ -e FILE ]]`         | Exists                  |
| `[[ -r FILE ]]`         | Readable                |
| `[[ -h FILE ]]`         | Symlink                 |
| `[[ -d FILE ]]`         | Directory               |
| `[[ -w FILE ]]`         | Writable                |
| `[[ -s FILE ]]`         | Size is > 0 bytes       |
| `[[ -f FILE ]]`         | File                    |
| `[[ -x FILE ]]`         | Executable              |
| ---                     | ---                     |
| `[[ FILE1 -nt FILE2 ]]` | 1 is more recent than 2 |
| `[[ FILE1 -ot FILE2 ]]` | 2 is more recent than 1 |
| `[[ FILE1 -ef FILE2 ]]` | Same files              |

### Example

```bash
# String
if [[ -z "$string" ]]; then
  echo "String is empty"
elif [[ -n "$string" ]]; then
  echo "String is not empty"
else
  echo "This never happens"
fi
```

```bash
# Combinations
if [[ X && Y ]]; then
  ...
fi
```

```bash
# Equal
if [[ "$A" == "$B" ]]
```

```bash
# Regex
if [[ "A" =~ . ]]
```

```bash
if (( $a < $b )); then
   echo "$a is smaller than $b"
fi
```

```bash
if [[ -e "file.txt" ]]; then
  echo "file exists"
fi
```

## Arrays

### Defining arrays

```bash
Fruits=('Apple' 'Banana' 'Orange')
```

```bash
Fruits[0]="Apple"
Fruits[1]="Banana"
Fruits[2]="Orange"
```

### Working with arrays

```bash
echo "${Fruits[0]}"           # Element #0
echo "${Fruits[-1]}"          # Last element
echo "${Fruits[@]}"           # All elements, space-separated
echo "${#Fruits[@]}"          # Number of elements
echo "${#Fruits}"             # String length of the 1st element
echo "${#Fruits[3]}"          # String length of the Nth element
echo "${Fruits[@]:3:2}"       # Range (from position 3, length 2)
echo "${!Fruits[@]}"          # Keys of all elements, space-separated
```

### Operations

```bash
Fruits=("${Fruits[@]}" "Watermelon")    # Push
Fruits+=('Watermelon')                  # Also Push
Fruits=( "${Fruits[@]/Ap*/}" )          # Remove by regex match
unset Fruits[2]                         # Remove one item
Fruits=("${Fruits[@]}")                 # Duplicate
Fruits=("${Fruits[@]}" "${Veggies[@]}") # Concatenate
words=($(< datafile))                   # From file (split by IFS)
```

### Iteration

```bash
for i in "${arrayName[@]}"; do
  echo "$i"
done
```

## Dictionaries
{: .-three-column}

### Defining

```bash
declare -A sounds
```

```bash
sounds[dog]="bark"
sounds[cow]="moo"
sounds[bird]="tweet"
sounds[wolf]="howl"
```

Declares `sound` as a Dictionary object (aka associative array).

### Working with dictionaries

```bash
echo "${sounds[dog]}" # Dog's sound
echo "${sounds[@]}"   # All values
echo "${!sounds[@]}"  # All keys
echo "${#sounds[@]}"  # Number of elements
unset sounds[dog]     # Delete dog
```

### Iteration

#### Iterate over values

```bash
for val in "${sounds[@]}"; do
  echo "$val"
done
```

#### Iterate over keys

```bash
for key in "${!sounds[@]}"; do
  echo "$key"
done
```

## Options

### Options

```bash
set -o noclobber  # Avoid overlay files (echo "hi" > foo)
set -o errexit    # Used to exit upon error, avoiding cascading errors
set -o pipefail   # Unveils hidden failures
set -o nounset    # Exposes unset variables
```

### Glob options

```bash
shopt -s nullglob    # Non-matching globs are removed  ('*.foo' => '')
shopt -s failglob    # Non-matching globs throw errors
shopt -s nocaseglob  # Case insensitive globs
shopt -s dotglob     # Wildcards match dotfiles ("*.sh" => ".foo.sh")
shopt -s globstar    # Allow ** for recursive matches ('lib/**/*.rb' => 'lib/a/b/c.rb')
```

Set `GLOBIGNORE` as a colon-separated list of patterns to be removed from glob
matches.

## History

### Commands

| Command               | Description                               |
| --------------------- | ----------------------------------------- |
| `history`             | Show history                              |
| `shopt -s histverify` | Don't execute expanded result immediately |

### Expansions

| Expression   | Description                                          |
| ------------ | ---------------------------------------------------- |
| `!$`         | Expand last parameter of most recent command         |
| `!*`         | Expand all parameters of most recent command         |
| `!-n`        | Expand `n`th most recent command                     |
| `!n`         | Expand `n`th command in history                      |
| `!<command>` | Expand most recent invocation of command `<command>` |

### Operations

| Code                 | Description                                                           |
| -------------------- | --------------------------------------------------------------------- |
| `!!`                 | Execute last command again                                            |
| `!!:s/<FROM>/<TO>/`  | Replace first occurrence of `<FROM>` to `<TO>` in most recent command |
| `!!:gs/<FROM>/<TO>/` | Replace all occurrences of `<FROM>` to `<TO>` in most recent command  |
| `!$:t`               | Expand only basename from last parameter of most recent command       |
| `!$:h`               | Expand only directory from last parameter of most recent command      |

`!!` and `!$` can be replaced with any valid expansion.

### Slices

| Code     | Description                                                                              |
| -------- | ---------------------------------------------------------------------------------------- |
| `!!:n`   | Expand only `n`th token from most recent command (command is `0`; first argument is `1`) |
| `!^`     | Expand first argument from most recent command                                           |
| `!$`     | Expand last token from most recent command                                               |
| `!!:n-m` | Expand range of tokens from most recent command                                          |
| `!!:n-$` | Expand `n`th token to last from most recent command                                      |

`!!` can be replaced with any valid expansion i.e. `!cat`, `!-2`, `!42`, etc.

## Miscellaneous

### Numeric calculations

```bash
$((a + 200))      # Add 200 to $a
```

```bash
$(($RANDOM%200))  # Random number 0..199
```

```bash
declare -i count  # Declare as type integer
count+=1          # Increment
```

### Subshells

```bash
(cd somedir; echo "I'm now in $PWD")
pwd # still in first directory
```

### Redirection

```bash
python hello.py > output.txt            # stdout to (file)
python hello.py >> output.txt           # stdout to (file), append
python hello.py 2> error.log            # stderr to (file)
python hello.py 2>&1                    # stderr to stdout
python hello.py 2>/dev/null             # stderr to (null)
python hello.py >output.txt 2>&1        # stdout and stderr to (file), equivalent to &>
python hello.py &>/dev/null             # stdout and stderr to (null)
echo "$0: warning: too many users" >&2  # print diagnostic message to stderr
```

```bash
python hello.py < foo.txt      # feed foo.txt to stdin for python
diff <(ls -r) <(ls)            # Compare two stdout without files
```

### Inspecting commands

```bash
command -V cd
#=> "cd is a function/alias/whatever"
```

### Trap errors

```bash
trap 'echo Error at about $LINENO' ERR
```

or

```bash
traperr() {
  echo "ERROR: ${BASH_SOURCE[1]} at about ${BASH_LINENO[0]}"
}

set -o errtrace
trap traperr ERR
```

### Case/switch

```bash
case "$1" in
  start | up)
    vagrant up
    ;;

  *)
    echo "Usage: $0 {start|stop|ssh}"
    ;;
esac
```

### Source relative

```bash
source "${0%/*}/../share/foo.sh"
```

### printf

```bash
printf "Hello %s, I'm %s" Sven Olga
#=> "Hello Sven, I'm Olga

printf "1 + 1 = %d" 2
#=> "1 + 1 = 2"

printf "This is how you print a float: %f" 2
#=> "This is how you print a float: 2.000000"

printf '%s\n' '#!/bin/bash' 'echo hello' >file
# format string is applied to each group of arguments
printf '%i+%i=%i\n' 1 2 3  4 5 9
```

### Transform strings

| Command option | Description                                         |
| -------------- | --------------------------------------------------- |
| `-c`           | Operations apply to characters not in the given set |
| `-d`           | Delete characters                                   |
| `-s`           | Replaces repeated characters with single occurrence |
| `-t`           | Truncates                                           |
| `[:upper:]`    | All upper case letters                              |
| `[:lower:]`    | All lower case letters                              |
| `[:digit:]`    | All digits                                          |
| `[:space:]`    | All whitespace                                      |
| `[:alpha:]`    | All letters                                         |
| `[:alnum:]`    | All letters and digits                              |

#### Example

```bash
echo "Welcome To Devhints" | tr '[:lower:]' '[:upper:]'
WELCOME TO DEVHINTS
```

### Directory of script

```bash
dir=${0%/*}
```

### Getting options

```bash
while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
  -V | --version )
    echo "$version"
    exit
    ;;
  -s | --string )
    shift; string=$1
    ;;
  -f | --flag )
    flag=1
    ;;
esac; shift; done
if [[ "$1" == '--' ]]; then shift; fi
```

### Heredoc

```sh
cat <<END
hello world
END
```

Heredoc allows a section of your source code to be treated as a file. See [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Redirections.html#Here-Documents).

### Herestring

```sh
tr '[:lower:]' '[:upper:]' <<< "Will be uppercased, even $variable"
```

Herestring allows a string to be treated as a standard input (stdin). See [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Redirections.html#Here-Strings).

### Process substitution

```sh 
# loop on myfunc output lines
while read -r line; do
  echo "$line"
done < <(myfunc)

# compare content of two folders
diff <(ls "$dir1") <(ls "$dir2")
```

Process substitution allows the input (or output) of a command to be treated as a file. See [Bash Reference Manual](https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html).

### Reading input

```bash
echo -n "Proceed? [y/n]: "
read -r ans
echo "$ans"
```

The `-r` option disables a peculiar legacy behavior with backslashes.

```bash
read -n 1 ans    # Just one character
```

### Special variables

| Expression         | Description                            |
| ------------------ | -------------------------------------- |
| `$?`               | Exit status of last task               |
| `$!`               | PID of last background task            |
| `$$`               | PID of shell                           |
| `$0`               | Filename of the shell script           |
| `$_`               | Last argument of the previous command  |
| `${PIPESTATUS[n]}` | return value of piped commands (array) |

See [Special parameters](https://web.archive.org/web/20230318164746/https://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables).

### Go to previous directory

```bash
pwd # /home/user/foo
cd bar/
pwd # /home/user/foo/bar
cd -
pwd # /home/user/foo
```

### Check for command's result

```bash
if ping -c 1 google.com; then
  echo "It appears you have a working internet connection"
fi
```

### Grep check

```bash
if grep -q 'foo' ~/.bash_history; then
  echo "You appear to have typed 'foo' in the past"
fi
```

## Also see
{: .-one-column}

- [Bash-hackers wiki](https://web.archive.org/web/20230406205817/https://wiki.bash-hackers.org/) _(bash-hackers.org)_
- [Shell vars](https://web.archive.org/web/20230318164746/https://wiki.bash-hackers.org/syntax/shellvars) _(bash-hackers.org)_
- [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_
- [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_
- [ShellCheck](https://www.shellcheck.net/) _(shellcheck.net)_


================================================
FILE: blessed.md
================================================
---
title: Blessed
category: JavaScript libraries
---

### Screen

```js
screen = blessed.screen({
  smartCSR: true       // optimize for flickering
  autoPadding: true    // ..
})

screen.append(Element)
screen.destroy()

screen.width
screen.height
screen.title = 'My window title'
screen.key(['escape', 'q', 'C-c'], (ch, key) => { ... })
```

### Element

```js
box = blessed.box({
  style: { fg, bg, border.fg, scrollbar.bg, focus.bg, hover.bg },
  border: { type: 'line'|'bg', bg, fg, bold, underline }
  tags: true,  // parse {bold}tags{/bold}

  top, left, width, height,
  width: '100%',
  height: '100%-1',
  top: 'center'
})
```

### Tags

```
{bold}
{right} {center}
{|}    left-right separator
{#c0ff33-fg}{/}
```

```
blessed.escape('...')
```


================================================
FILE: bluebird.md
================================================
---
title: bluebird.js
category: JavaScript libraries
weight: -1
updated: 2017-09-08
---

### Also see

Also see the [promise cheatsheet](promise.html) and [Bluebird.js API](https://github.com/petkaantonov/bluebird/blob/master/API.md) (github.com).

### Example

```js
promise
  .then(okFn, errFn)
  .spread(okFn, errFn)        // *
  .catch(errFn)
  .catch(TypeError, errFn)    // *
  .finally(fn)
  .map(function (e) { ··· })  // *
  .each(function (e) { ··· }) // *
```

Those marked with `*` are non-standard Promise API that only work with Bluebird promises.

### Multiple return values

```js
.then(function () {
  return [ 'abc', 'def' ]
})
.spread(function (abc, def) {
  ···
})
```
{: data-line="4"}

Use [Promise.spread](http://bluebirdjs.com/docs/api/promise.spread.html)

### Multiple promises

```js
Promise.join(
  getPictures(),
  getMessages(),
  getTweets(),
  function (pics, msgs, tweets) {
    return ···
  }
)
```
{: data-line="1"}

Use [Promise.join](http://bluebirdjs.com/docs/api/promise.join.html)

### Multiple promises (array)

- [Promise.all](http://bluebirdjs.com/docs/api/promise.all.html)([p]) - expect all to pass
- [Promise.some](http://bluebirdjs.com/docs/api/promise.some.html)([p], count) - expect `count` to pass
- [Promise.any](http://bluebirdjs.com/docs/api/promise.any.html)([p]) - same as `some([p], 1)`
- [Promise.race](http://bluebirdjs.com/docs/api/promise.race.html)([p], count) - use `.any` instead
- [Promise.map](http://bluebirdjs.com/docs/api/promise.map.html)([p], fn, options) - supports concurrency

```js
Promise.all([ promise1, promise2 ])
  .then(results => {
    results[0]
    results[1]
  })

// succeeds if one succeeds first
Promise.any(promises)
  .then(results => {
  })
```
{: data-line="1,8"}

```js
Promise.map(urls, url => fetch(url))
  .then(···)
```
{: data-line="1"}

Use [Promise.map](http://bluebirdjs.com/docs/api/promise.map.html) to "promisify" a list of values.

### Object

```js
Promise.props({
  photos: get('photos'),
  posts: get('posts')
})
.then(res => {
  res.photos
  res.posts
})
```
{: data-line="1"}

Use [Promise.props](http://bluebirdjs.com/docs/api/promise.props.html).

### Chain of promises

```js
function getPhotos() {
  return Promise.try(() => {
    if (err) throw new Error("boo")
    return result
  })
}

getPhotos().then(···)
```
{: data-line="2"}

Use [Promise.try](http://bluebirdjs.com/docs/api/promise.try.html).

### Node-style functions

```js
var readFile = Promise.promisify(fs.readFile)
var fs = Promise.promisifyAll(require('fs'))
```
{: data-line="2"}

See [Promisification](http://bluebirdjs.com/docs/api/promisification.html).

### Promise-returning methods

```js
User.login = Promise.method((email, password) => {
  if (!valid)
    throw new Error("Email not valid")

  return /* promise */
})
```
{: data-line="1"}

See [Promise.method](http://bluebirdjs.com/docs/api/promise.method.html).

### Generators

```js
User.login = Promise.coroutine(function* (email, password) {
  let user = yield User.find({email: email}).fetch()
  return user
})
```
{: data-line="1"}

See [Promise.coroutine](http://bluebirdjs.com/docs/api/promise.coroutine.html).

## Reference

<http://bluebirdjs.com/docs/api-reference.html>


================================================
FILE: bolt.md
================================================
---
title: Bolt Quickstart
category: Bolt
updated: 2018-12-25
authors:
  - github: lucywyman
keywords:
    - Puppet
    - tasks
    - modules
description: |
  A quick guide to getting started writing Bolt tasks
---

### Install Bolt

```bash
# On MacOS
brew cask install puppetlabs/puppet/puppet-bolt
# On Windows
choco install puppet-bolt
```

Bolt is available as a package for most platforms. See [installing bolt](https://puppet.com/docs/bolt/latest/bolt_installing.html)

### Create a module with a task

```bash
mkdir -p ~/.puppetlabs/bolt/modules/mymodule/tasks
cp myscript.sh ~/.puppetlabs/bolt/modules/mymodule/tasks/
```

Tasks can be written in any language your targets can run. See [writing tasks](https://puppet.com/docs/bolt/latest/writing_tasks.html) for more details.

### Run Bolt

```bash
bolt task run mymodule::myscript -n node1.example.com,node2.example.com --private-key ~/.ssh/id_rsa-private
```

See `bolt task run --help` for more information and command line options.


================================================
FILE: bookshelf.md
================================================
---
title: Bookshelf.js
category: JavaScript libraries
---

Model
-----

### Model
```js
Summary = bookshelf.Model.extend({
  tableName: 'summaries',
  hasTimestamps: true,
  hasTimestamps: ['created_at', 'updated_at'],
})
```

### Associations

```js
Summary = bookshelf.Model.extend({
  book () {
    return this.belongsTo(Book)
  },
  author () {
    return this.hasOne(Author)
  }
  // belongsToMany
  // hasMany
  // hasMany().through()
})
```

### CRUD

```js
Book.create({ title: '..' }).save()
new Book({ title: '..' }).save()

new Book({ id: 1 }).fetch()

Book.where({ id: 1 }).fetch()
Book.where('favorite_color', 'red').fetch()
Book.where('favorite_color', '<>', 'red').fetch()
Book
  .query((q) => q.orderBy('updated_at')
```


================================================
FILE: bootstrap.md
================================================
---
title: Bootstrap
prism_languages: [scss, haml, html]
weight: -1
category: CSS
description: |
  .container .row .col-md-6, @screen-sm-min, .form-control, grids, .modal-content, tooltips, and other Bootstrap CSS examples.
---

### Screen sizes

```
         768          992                1200
'     '     '     '     '     '     '     '     '
<---------^------------^------------------^--------->
     xs         sm              md             lg
   (phone)   (tablet)        (laptop)       (desktop)
```

Min:

```scss
@media (min-width: @screen-sm-min) // >= 768px (small tablet)
@media (min-width: @screen-md-min) // >= 992px (medium laptop)
@media (min-width: @screen-lg-min) // >= 1200px (large desktop)
```

Max:

```scss
@media (max-width: @screen-xs-max) { // < 768px (xsmall phone)
@media (max-width: @screen-sm-max) { // < 992px (small tablet)
@media (max-width: @screen-md-max) { // < 1200px (medium laptop)
```

### Columns

```scss
.container
.container-fluid
```

```scss
.col-xs-1
.col-sm-1
.col-md-1
.col-lg-1
.col-md-offset-1
```

Mixins:

```scss
@include make-xs-column(12);
@include make-sm-column(6);
@include make-md-column(3);
@include make-lg-column(3);
```

```scss
@include make-sm-column-offset(1);
@include make-sm-column-push(1);
@include make-sm-column-pull(1);
```

### Utilities

```scss
.pull-left
.pull-right
```

```scss
.hidden-{xs,sm,md,lg}
.visible-{xs,sm,md,lg}
.visible-{xs,sm,md,lg,print}-{block,inline,inline-block}
```

```scss
.center-block  /* margin: auto */
.clearfix
.text-{center,left,right,justify,nowrap}
.text-{lowercase,uppercase,capitalize}
```

```scss
.show
.hidden
```

### Modal

```html
<a data-toggle='modal' data-target='#new'>
```

```haml
#new.modal.fade(role='dialog')
  .modal-dialog // .modal-lg, .modal-sm
    .modal-content
      .modal-header
        %h4.modal-title hello
        %button.close{type: 'button', data: { dismiss: 'modal' }}
          %span{'aria-hidden' => true}!= "&times;"
          %span.sr-only Close
      .modal-body
        ...
      .modal-footer
        ...
```

### Modal via ajax (Rails)

```haml
%button.btn{data: { |
  toggle: 'modal', |
  target: '#chooseTheme', |
  remote: '/path/to/remote'}
  Change Theme
```

```haml
.modal.fade#chooseTheme
  .modal-dialog.modal-xl
    .modal-content
      .modal-header
        %h4.modal-title Choose a theme

      .modal-body
        .spinner-panel.-lg
          %i
```

### Tooltip

```html
<span
  data-toggle='tooltip'
  title='tooltip'
  data-placement='left|top|bottom|right'>
```

```js
$(function () {
  $('[data-toogle~="tooltip"]').tooltip()
})
```

### Input groups

```haml
.input-group
    input.form-control(type='text')
    .input-group-addon years
```


================================================
FILE: browser-sync.md
================================================
---
title: Browsersync
category: JavaScript libraries
---

### About
{: .-intro}

`npm i -g browser-sync`

* [browsersync.io](https://browsersync.io)

### Start a server

```sh
browser-sync start --server <path> --files='**/*.html, **/*.css'
```

### Options

```sh
  --port=N
  --proxy="http://127.0.0.1:3000"
```


================================================
FILE: browserify.md
================================================
---
title: Browserify
category: JavaScript libraries
tags: [Archived]
archived: Browserify has not been in active development.
---

### About
{: .-intro}

Browserify is a bundler for JavaScript.

- <https://browserify.org/>

### Usage

    browserify input.js
      -o output.js
      -t coffeeify
      -t [ coffeeify --extension coffee ]

      -u react (--exclude: omit a file)
      -x react (--external: reference in another bundle)
      -i react (--ignore: stub a file)
      -s Myapp (--standalone: generate a UMD bundle)
      --debug

### Programmatic usage

    browserify = require('browserify')
    browserify()
      .add('main.js')
      .bundle()
      .transform(coffeeify)
      .transform({extensions: '.coffee'}, coffeeify)
      .pipe(process.stdout)

    browserify({})

### Tools

  * watchify (recompiles on demand)
  * beefy (http server)
  * debowerify
  * es6ify (es6 to es5)

Transforms

  * coffeeify
  * ractify
  * reactify
  * brfs
  * cssify
  * https://github.com/substack/node-browserify/wiki/list-of-transforms



================================================
FILE: bulma.md
================================================
---
title: Bulma
category: CSS
prism_languages: [css, html]
weight: -1
updated: 2018-11-19
authors:
  - github: benolot
description: |
  Basic guide on how to use Bulma, the lightweight css flexbox framework.
---

### Screen sizes

```
         768         1024                1216         1408
'     '     '     '     '     '     '     '     '     '     '     '
<---------^------------^------------------^-------------^------------->
  mobile      tablet         desktop         widescreen      fullhd
```

### Columns

```css
.container
```
Wrap as many `.column`'s' as you like in a `.columns` wrapper
```html
<div class="columns">
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
    <div class="column"></div>
</div>
```

### Modifiers

The following CSS classes affect the **colour**.

```css
.is-primary
.is-link
.is-info
.is-success
.is-warning
.is-danger
```

The following classes modify the **size**.
```css
.is-small
.is-medium
.is-large
```

The following classes modify the **state**.
```scss
.is-outlined
.is-loading
```

### Typography Helpers

The following classes modify the **font-size**

| Class         | Font-size             |
| ---           | ---                   |
| `.is-size-1`  | 3rem                  |
| `.is-size-2`  | 2.5rem                |
| `.is-size-3`  | 2rem                  |
| `.is-size-4`  | 1.5rem                |
| `.is-size-5`  | 1.25rem               |
| `.is-size-6`  | 1rem                  |
| `.is-size-7`  | 0.75rem               |

The following classes **align** the text

| Class                 | Alignment                             |
| ---                   | ---                                   |
| `.has-text-centered`  | Makes the text **centered**           |
| `.has-text-justified` | Makes the text **justified**          |
| `.has-text-left`.     | Makes the text align to the **left**  |
| `.has-text-right`     | Makes the text align to the **right** |

The following classes **transform** the text

| Class              | Transformation        |
| ---                | ---                   |
| `.is-capitalized`  | Transforms the **first character** of each word to **uppercase**   |
| `.is-lowercase`    | Transforms **all** characters to **lowercase**                     |
| `.is-uppercase`    | Transforms **all** characters to **uppercase**                     |

### WYSIWYG Content

```html
<div class="content">
  <!-- start WYSIWYG contents -->
  <h1>Heading</h1>
  <p>Paragraph</p>

  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
  </ul>
  <!-- end WYSIWYG contents -->
</div>
```

To provide default stylings for commonly generated WYSIWYG contents, use the `.content` class.


================================================
FILE: bundler.md
================================================
---
title: Bundler
category: Ruby
---

### Commands

    bundle                  # same as bundle install
    bundle install          # installs gems
    bundle install -j3      # faster (3 jobs)
    bundle update           # update all gems
    bundle update --source gemname  # update specified gem

    bundle outdated         # show outdated gems
    cd `bundle show rails`  # inspect a gem's dir

    bundle gem              # new gem skeleton

### Gems

    gem 'hello'
    gem 'hello', group: 'development'

### Github support

    gem 'hello', github: 'rstacruz/hello'
    gem 'hello', github: 'rstacruz/hello', 'branch: master'

### Grouping

    group :development do
      gem 'hello'
    end

### Deployment

    $ bundle install --without=test,development --deployment

### Local gem development

In your Gemfile, define a Git source and a branch:

    gem 'hello', github: 'rstacruz/hello', branch: 'master'

And then:

    $ bundle config --global local.xxx ~/projects/xxx

### Rake Gem tasks

    # Rakefile
    require 'bundler/gem_tasks'

Terminal:

    $ rake release
    $ rake build


================================================
FILE: c_preprocessor.md
================================================
---
title: C Preprocessor
category: C-like
intro: |
  Quick reference for the [C macro preprocessor](https://en.m.wikipedia.org/wiki/C_preprocessor), which can be used independent of C/C++.
---

## Reference
{: .-three-column}

### Compiling

```
$ cpp -P file > outfile
```

### Includes

```
#include "file"
```

### Defines

```
#define FOO
#define FOO "hello"

#undef FOO
```

### If

```
#ifdef DEBUG
  console.log('hi');
#elif defined VERBOSE
  ...
#else
  ...
#endif
```

### Error

```
#if VERSION == 2.0
  #error Unsupported
  #warning Not really supported
#endif
```

### Macro

```
#define DEG(x) ((x) * 57.29)
```

### Token concat

```
#define DST(name) name##_s name##_t
DST(object);   #=> object_s object_t;
```

### Stringification

```
#define STR(name) #name
char * a = STR(object);   #=> char * a = "object";
```

### file and line

```
#define LOG(msg) console.log(__FILE__, __LINE__, msg)
#=> console.log("file.txt", 3, "hey")
```


================================================
FILE: camp.md
================================================
---
title: Camp
category: JavaScript libraries
updated: 2017-09-21
weight: -1
intro: |
  [Camp](https://github.com/espadrine/sc/) is a Node.js web server framework. This guide targets Camp v17.x.
---

Getting started
---------------
{: .-three-column}

### Quick start
{: .-prime}

#### app.js
{: .-file}

```js
const Camp = require('camp')
const camp = Camp.start({ port: 1234 })
```

#### web/index.html
{: .-file}

```html
<!doctype html>
<body>Hello world!</body>
```

Camp serves files in `web/` by default.

### Routes

#### Handles `/search?q=rainbows`

```js
camp.path('/search', (req, res) => {
  const q = res.query.q
  res.json({ results: ··· })
})
```
{: data-line="2"}

Also available: `camp.post`, `camp.get`.

### Templates

```js
const tpl = Camp.template('./templates/post.html')

camp.path('/blog/:post.html', (req, res) => {
  res.template({
    text: 'Hello world'
  }, tpl)
})
```
{: data-line="1,4"}

See: [Templates](https://github.com/espadrine/sc/blob/master/doc/Readme.md#templates)

### Not found

```js
camp.notFound('/*.lol', (req, res) => {
  res.file('/404.html')
})
```
{: data-line="1"}

See: [Fall through](https://github.com/espadrine/sc/blob/master/doc/Readme.md#fall-through)

### Low level handler

```js
camp.handle((req, res, next) => {
  res.setHeader('X-Hello', 'world')
  next()
})
```
{: data-line="1"}

See: [Handlers](https://github.com/espadrine/sc/blob/master/doc/Readme.md#handlers)

Templates
---------

### Basic templates

```js
const tpl = Camp.template('/templates/post.html')

camp.path('/blog/:post.html', (req, res) => {
  res.template({
    text: 'Hello world'
  }, tpl)
})
```
{: data-line="1,4,5,6"}

### Implicit templates

```js
camp.path('blog.html')
```

Uses `blog.html` as a template.

See: [Templates](https://github.com/espadrine/sc/blob/master/doc/Readme.md#templates)

Advanced features
-----------------

### Web sockets

```js
camp.ws('/path', (socket) => { ··· })
```

```js
camp.wsChannels[path]
```

```js
camp.wsBroadcast('/path', (req, res) => {
})
```

Sorry I don't completely understand this yet, but check it out in their docs.

See: [WebSocket](https://github.com/espadrine/sc/blob/master/doc/Readme.md#websocket)


================================================
FILE: canvas.md
================================================
---
title: Canvas
category: JavaScript
---

### Getting the context

```js
var canvas = document.getElementById('c')
var c = canvas.getContext('2d')
```

### Basic drawing

```js
// x = 10, y = 20, width = 200, height = 100
c.fillStyle = '#ff0000'
c.strokeStyle = '#ff00ff'
```

```js
c.lineWidth = 5
c.lineCap = 'round'
```

```js
c.fillRect(10, 20, 200, 100)
```

```js
c.stroke()
c.fill()
```

### Saving and restoring

```js
c.save()
```

```js
c.restore()
```

Saves: `strokeStyle` `fillStyle` `globalAlpha` `lineWidth` `lineCap` `lineJoin` `miterLimit` `shadowOffsetX` `shadowOffsetY` `shadowBlur` `shadowColor`
`globalCompositeOperation`, Transformations (`translate` `rotate` `scale` `transform` `setTransform`), Clipping path


### Animation

```js
onframe: function() {
  c.clearRect(0, 0, w, h)
}
```

### Transformations

```js
c.translate(0, 0)
c.rotate(Math.PI*2/5)
c.scale(1.0, 1.0)
```

To rotate along origin:

```js
c.translate(ox, oy)
c.rotate(theta)
c.translate(-ox, -oy)
```

To scale along origin:

```js
c.translate(-ox*x, -oy*y)
c.scale(x, y)
c.translate(ox/x, oy/y)
```

See [MDN: Transformations][xform].

### Image drawing

```js
c.drawImage(image, dx, dy, [dw, dh]);
/* `image` can be HTML Image/Canvas/Video */
```

See [MDN: Images][images].

### Colors, styles shadows

```js
c.strokeStyle = '#ff00ff';
c.fillStyle = '#ff00ff';
```

```js
c.shadowOffsetX = 0;
c.shadowOffsetY = 0;
c.shadowOffsetBlur = 3.0;
c.shadowColor = 'rgba(0,0,0,0.2)';
```

See [MDN: Styles][styles]

### Gradients

```js
gr = c.createLinearGradient(x0,y0,x1,y1)
gr = c.createRadialGradient(x0,y0,r0,x1,y1,r1)
pat = c.createPattern(image, 'repeat-x')
```

```js
c.fillStyle = gr
```

### Drawing

```js
c.beginPath()
c.moveTo(x,y)
c.lineTo(x,y)
c.quadraticCurveTo(cpx,cpy,x,y)
c.bezierCurveTo(cp1x,cp1y,cp2x,cp2y)
c.arcTo(...)
c.arc(...)
c.closePath()
```

### More resources

  * [Canvas Cheatsheet PDF][pdf]

[pdf]: http://www.nihilogic.dk/labs/canvas_sheet/HTML5_Canvas_Cheat_Sheet.pdf
[xform]: https://developer.mozilla.org/en-US/docs/Canvas_tutorial/Transformations
[styles]: https://developer.mozilla.org/en-US/docs/Canvas_tutorial/Applying_styles_and_colors
[images]: https://developer.mozilla.org/en-US/docs/Canvas_tutorial/Using_images


================================================
FILE: capybara.md
================================================
---
title: Capybara
category: Ruby libraries
weight: -5
updated: 2020-06-13
tags: [Featurable]
---

### Navigating

    visit articles_path

### Clicking links and buttons

```ruby
click_on 'Link Text'
click_button
click_link
```

### Interacting with forms

```ruby
attach_file 'Image', '/path/to/image.jpg'
fill_in 'First Name', with: 'John'
```

```ruby
check 'A checkbox'
uncheck 'A checkbox'
```

```ruby
choose 'A radio button'
```

```ruby
select 'Option', from: 'Select box'
unselect
```

### Limiting

```ruby
within '.classname' do
  click '...'
end
```

```ruby
within_fieldset :id do
  ...
end
```

## Querying

### Predicates

```ruby
page.has_css?('.button')
expect(page).to have_css('.button')
page.should have_css('.button')
```
{: .-setup}

| Positive                          | Negative               |
| ---                               | ---                    |
| `has_content?`                    | `has_no_content?`      |
| ---                               | ---                    |
| `has_css?` _(selector)_           | `has_no_css?`          |
| ---                               | ---                    |
| `has_xpath?` _(path)_             | `has_no_xpath?`        |
| ---                               | ---                    |
| `has_link?` _(selector)_          | `has_no_link?`         |
| ---                               | ---                    |
| `has_button?` _(selector)_        | `has_no_button?`       |
| ---                               | ---                    |
| `has_field?` _(selector)_         | `has_no_field?`        |
| ---                               | ---                    |
| `has_checked_field?` _(selector)_ | `has_unchecked_field?` |
| ---                               | ---                    |
| `has_table?` _(selector)_         | `has_no_table?`        |
| ---                               | ---                    |
| `has_select?` _(selector)_        | `has_no_select?`       |
{: .-headers.-left-align}

In Rspec, these also map to matchers like `page.should have_content`.

### Selectors

```ruby
expect(page).to have_button('Save')
```

```ruby
expect(page).to have_button('#submit')
```

```ruby
expect(page).to have_button('//[@id="submit"]')
```

The `selector` arguments can be text, CSS selector, or XPath expression.

### RSpec assertions

```ruby
page.has_button?('Save')
```

```ruby
expect(page).to have_no_button('Save')
```

In RSpec, you can use `page.should` assertions.

### About negatives

```ruby
expect(page).to have_no_button('Save')
```

```ruby
expect(page).not_to have_button('Save')
```

The two above statements are functionally equivalent.

## RSpec

### Matchers

```ruby
expect(page).to \
```
{: .-setup}

```ruby
  have_current_path(expected_path)
  have_selector '.blank-state'
  have_selector 'h1#hola', text: 'Welcome'
  have_button 'Save'
  have_checked_field '#field'
  have_unchecked_field
  have_css '.class'
  have_field '#field'
  have_table '#table'
  have_xpath '//div'
```

```ruby
  have_link 'Logout', href: logout_path
```

```ruby
  have_select 'Language',
    selected: 'German'
    options: ['Engish', 'German']
    with_options: ['Engish', 'German'] # partial match
```

```ruby
  have_text 'Hello',
    type: :visible # or :all
    # alias: have_content
```

### Common options

All matchers have these options:
{: .-setup}

```ruby
  text: 'welcome'
  text: /Hello/
  visible: true
  count: 4
  between: 2..5
  minimum: 2
  maximum: 5
  wait: 10
```

## Other features

### Finding

```ruby
find(selector)
find_button(selector)
find_by_id(id)
find_field(selector)
find_link(selector)
locate
```

### Scoping

```ruby
within '#delivery' do
  fill_in 'Street', with: 'Hello'
end
```

```ruby
within :xpath, '//article'
within_fieldset
within_table
within_frame
scope_to
```

```ruby
find('#x').fill_in('Street', with: 'Hello')
# same as within
```

### Scripting

```ruby
execute_script('$("input").trigger("change")')
evaluate_script('window.ga')
```

Executes JavaScript.

### Debugging

```ruby
save_and_open_page
```

Opens the webpage in your browser.

### Page

```ruby
page
  .all('h3')
  .body
  .html
  .source
  .current_host
  .current_path
  .current_url
```

### AJAX

```ruby
using_wait_time 10 do
  ...
end
```

### Misc

    drag
    field_labeled

### Page object

```ruby
page.status_code == 200
page.response_headers
```

See: <https://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Session>

### Poltergeist

```ruby
Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, :inspector => true)
end
Capybara.javascript_driver = :poltergeist
```

Use [poltergeist](https://github.com/teampoltergeist/poltergeist) to integrate PhantomJS.

### Blacklist

```ruby
config.before :each, :js do
  page.driver.browser.url_blacklist = [
    'fonts.googleapis.com',
    'use.typekit.net',
    'f.vimeocdn.com',
    'player.vimeo.com',
    'www.googletagmanager.com'
  ].flat_map { |domain| [ "http://#{domain}", "https://#{domain}" ] }
end
```

### Debugging

Enable `inspector: true` and then:
{: .-setup}

```ruby
page.driver.debug
```

To pause execution for a while:

```ruby
page.driver.pause
```

## Selenium

### Accepting confirm() and alert()

```ruby
accept_alert { ... }
dismiss_confirm { ... }
accept_prompt(with: 'hi') { ... }
```

Alternatively:

```ruby
page.driver.browser.switch_to.alert.accept
```

### Updating session

```ruby
page.set_rack_session(foo: 'bar')
```

## See also
{: .-one-column}

- <https://rubydoc.info/github/jnicklas/capybara/Capybara/RSpecMatchers>
- <https://www.rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers>


================================================
FILE: cask-index.md
================================================
---
title: Caskroom index
tags: [Archived]
archived: This sheet may have outdated information.
---



#### A

- [a-better-finder-attributes](http://www.publicspace.net/ABetterFinderAttributes/)
- [a-better-finder-rename](http://www.publicspace.net/ABetterFinderRename/)
- [a-slower-speed-of-light](http://gamelab.mit.edu/games/a-slower-speed-of-light/)
- [abgx360](http://abgx360.net/)
- [abscissa](http://rbruehl.macbay.de/Abscissa)
- [accessmenubarapps](http://www.ortisoft.de/accessmenubarapps/)
- [acorn](http://flyingmeat.com/acorn/)
- [actions-server](http://getactionsapp.com)
- [actiontastic](http://actiontastic.com)
- [activity-audit](https://www.dssw.co.uk/activityaudit)
- [actotracker](http://onflapp.wordpress.com/actotracker)
- [actprinter](http://houdah.com/ACTPrinter/)
- [actual-odbc-pack](http://www.actualtech.com/products.php)
- [adapter](http://www.macroplant.com/adapter/)
- [adium](https://www.adium.im/)
- [adobe-air](https://get.adobe.com/air/)
- [adobe-arh](http://help.adobe.com/en_US/air/redist/WS485a42d56cd19641-70d979a8124ef20a34b-8000.html)
- [adobe-creative-cloud](https://creative.adobe.com/products/creative-cloud)
- [adobe-digital-editions](http://www.adobe.com/pt/products/digital-editions.html)
- [adobe-dng-converter](http://www.adobe.com/support/downloads/product.jsp?product=106&platform=Macintosh)
- [adobe-photoshop-lightroom](http://www.adobe.com/products/photoshop-lightroom.html)
- [adobe-reader](http://www.adobe.com/products/reader.html)
- [adventure](http://www.lobotomo.com/products/Adventure/index.html)
- [aegisub](http://www.aegisub.org/)
- [aerofs](https://www.aerofs.com/)
- [affinity-designer](https://affinity.serif.com/)
- [air-connect](http://www.avatron.com/get-air-connect/)
- [air-video-server-hd](http://www.inmethod.com/airvideohd)
- [air-video-server](http://www.inmethod.com/air-video/)
- [airdisplay](http://avatron.com/apps/air-display/)
- [airfoil](http://www.rogueamoeba.com/airfoil/mac/)
- [airmail-amt](http://airmailapp.com/amt/)
- [airparrot](http://www.airsquirrels.com/airparrot/)
- [airserver](http://www.airserver.com)
- [airstream](http://airstream.io/download/)
- [alarm-clock](http://wayback.archive.org/web/20130123192255/http://www.robbiehanson.com/alarmclock/index.html)
- [alfred](http://www.alfredapp.com/)
- [alib1](http://presstube.com/blog/2011/alib1/)
- [alinof-timer](http://www.alinofsoftware.ch/en/products/products-timer/index.html)
- [aliwangwang](http://wangwang.taobao.com)
- [all-the-gifs](https://github.com/orta/GIFs)
- [all2mp3](http://www.tresrrr.com/All2MP3/ENGLISH.html)
- [amadeus-pro](http://www.hairersoft.com/pro.html)
- [amazon-cloud-drive](https://www.amazon.com/clouddrive)
- [amazon-music](https://www.amazon.com/gp/feature.html/ref=dm_mo_cpw_fb_lm?docId=1001067901)
- [amethyst](http://ianyh.com/amethyst)
- [ampps](http://www.ampps.com)
- [android-file-transfer](http://www.android.com/filetransfer/)
- [android-studio-bundle](http://developer.android.com/sdk/installing/studio.html)
- [android-studio](https://developer.android.com/sdk/installing/studio.html)
- [angry-ip-scanner](http://angryip.org)
- [anki](http://ankisrs.net/)
- [anonym](http://www.hanynet.com/anonym/index.html)
- [antetype](http://antetype.com)
- [antirsi](http://sabi.net/nriley/software/#antirsi)
- [anvil](http://anvilformac.com/)
- [anxiety](http://www.anxietyapp.com/)
- [anypass](http://icyblaze.com/anypass)
- [ap-grapher](https://www.macupdate.com/app/mac/11859/ap-grapher)
- [apache-directory-studio](http://directory.apache.org/studio/)
- [apikitchen](http://apikitchen.com/)
- [apns-pusher](https://github.com/blommegard/APNS-Pusher)
- [appcleaner](http://www.freemacsoft.net/appcleaner/)
- [appcode](http://www.jetbrains.com/objc/)
- [appdelete](http://www.reggieashworth.com/appdelete)
- [appfresh](http://metaquark.de/appfresh/mac)
- [appium](http://appium.io)
- [appmenuboy](https://code.google.com/p/appmenuboy/)
- [apptivate](http://www.apptivateapp.com)
- [apptrap](http://onnati.net/apptrap)
- [appzapper](http://www.appzapper.com/)
- [aptanastudio](http://www.aptana.com/)
- [aquamacs](http://aquamacs.org/)
- [aquaterm](http://aquaterm.sourceforge.net/)
- [araxis-merge](http://www.araxis.com/merge)
- [archiver](http://archiverapp.com/)
- [arduino-galileo](https://communities.intel.com/docs/DOC-22226)
- [arduino](http://arduino.cc/)
- [aria-maestosa](http://ariamaestosa.sourceforge.net)
- [armitage](http://www.fastandeasyhacking.com/)
- [armory](https://bitcoinarmory.com/)
- [arora](https://code.google.com/p/arora/)
- [arq](http://www.haystacksoftware.com/arq/)
- [arranger](http://bucketomac.de/arranger/arranger/)
- [arrsync](http://arrsync.sourceforge.net)
- [aseprite](http://www.aseprite.org)
- [asepsis](http://asepsis.binaryage.com/)
- [asteroid](http://www.asteroidapp.com/)
- [atext](http://www.trankynam.com/atext/)
- [atlantis](http://www.riverdark.net/atlantis/)
- [atmonitor](http://www.atpurpose.com/atMonitor/)
- [atom](http://atom.io)
- [atraci](https://github.com/Atraci/Atraci)
- [au-lab](http://www.apple.com/itunes/mastered-for-itunes/)
- [audacity](http://audacity.sourceforge.net/)
- [audio-editor](http://www.macsome.com/audio-editor-mac/index.html)
- [audio-hijack-pro](http://www.rogueamoeba.com/audiohijackpro/)
- [audio-mate](http://audiomateapp.com/)
- [audiobookbinder](http://bluezbox.com/audiobookbinder.html)
- [audioscrobbler](https://github.com/mxcl/Audioscrobbler.app)
- [audioslicer](http://audioslicer.sourceforge.net)
- [aurora](http://www.oneperiodic.com/products/aurora/)
- [authbuddy](https://www.dssw.co.uk/authbuddy)
- [authoxy](http://www.hrsoftworks.net)
- [authy-bluetooth](https://www.authy.com)
- [autodmg](https://github.com/MagerValp/AutoDMG)
- [automatic](http://codingcurious.com/automatic/)
- [aviator](https://www.whitehatsec.com/aviator/)
- [avidemux](http://www.avidemux.org/)
- [avogadro](http://avogadro.openmolecules.net/)
- [awareness](http://iamfutureproof.com/tools/awareness/)
- [ax88179](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=131;71;112&PLine=71)
- [ax88772](http://www.asix.com.tw/products.php?op=pItemdetail&PItemID=86;71;101&PLine=71)
- [axure-rp-pro](http://www.axure.com/)

#### B

- [b2designer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)
- [back-in-time](http://www.tri-edre.fr/english/backintime.html)
- [backblaze-downloader](http://www.backblaze.com/)
- [backblaze](https://www.backblaze.com/)
- [backtobed](http://backtobed.dadiugames.dk/)
- [backuploupe](http://www.soma-zone.com/BackupLoupe/)
- [bahamut](https://github.com/sdegutis/bahamut)
- [baiducloud](http://pan.baidu.com)
- [baiduinput](http://wuxian.baidu.com/input/mac.html)
- [baidumusic](http://music.baidu.com/)
- [balsamiq-mockups](http://balsamiq.com/)
- [bankid](http://www.bankid.com/)
- [banshee](http://banshee.fm)
- [bar-magnet](http://qata.cc/Site/Bar_Magnet.html)
- [baretorrent](http://baretorrent.org)
- [bartender](http://www.macbartender.com/)
- [base](http://menial.co.uk/base/)
- [basecamp](http://www.garmin.com/en-US/shop/downloads/basecamp)
- [basex](http://basex.org/home/)
- [basictex](http://www.tug.org/mactex/morepackages.html)
- [bassjump](http://www.twelvesouth.com/product/bassjump-2-for-macbook)
- [bassshapes](http://yellquietly.com/bass-shapes/)
- [bathyscaphe](http://bathyscaphe.sourceforge.jp/)
- [battery-guardian](https://www.dssw.co.uk/batteryguardian)
- [battery-report](https://www.dssw.co.uk/batteryreport)
- [battery-time-remaining](http://yap.nu/battery-time-remaining/)
- [baygenie](http://www.baygenie.com/)
- [bbc-iplayer-downloads](http://www.bbc.co.uk/iplayer/install)
- [bbedit](http://www.barebones.com/products/bbedit/)
- [beacon-scanner](https://github.com/mlwelles/BeaconScanner/)
- [beamer](http://beamer-app.com)
- [bean](http://www.bean-osx.com)
- [beardedspice](http://www.beardedspice.com)
- [beatport-pro](http://pro.beatport.com/)
- [bee](http://neat.io/bee/)
- [bettertouchtool](http://blog.boastr.net/)
- [betterzip](http://macitbetter.com)
- [betterzipql](http://macitbetter.com/BetterZip-Quick-Look-Generator/)
- [bibdesk](http://bibdesk.sourceforge.net/)
- [big-mean-folder-machine](http://www.publicspace.net/BigMeanFolderMachine/)
- [bill](http://billtheapp.com/)
- [bino](http://bino3d.org)
- [binreader](http://www.binreader.com/)
- [bit-slicer](https://github.com/zorgiepoo/bit-slicer/)
- [bitcasa](https://www.bitcasa.com)
- [bitcoin-core](https://bitcoin.org/)
- [bitlord](http://www.bitlord.com)
- [bitmessage](https://bitmessage.org/)
- [bittorrent-sync](http://www.bittorrent.com/sync)
- [black-ink](http://www.red-sweater.com/blackink/)
- [black-light](http://michelf.ca/projects/black-light)
- [blender](http://www.blender.org/)
- [blink1control](http://blink1.thingm.com/)
- [blu-ray-player](http://www.macblurayplayer.com/)
- [bluegriffon](http://bluegriffon.org)
- [blueharvest](http://zeroonetwenty.com/blueharvest/)
- [bluej](http://www.bluej.org)
- [bob](https://github.com/casperstorm/Bob)
- [bodega](http://appbodega.com/)
- [bonjour-browser](http://www.tildesoft.com/)
- [boom](http://www.globaldelight.com/boom/)
- [boot2docker](https://github.com/boot2docker/osx-installer)
- [bootchamp](http://www.kainjow.com/)
- [bootxchanger](http://namedfork.net/bootxchanger)
- [bowtie](http://bowtieapp.com/)
- [box-sync](https://sites.box.com/sync4/)
- [boxcryptor-classic](https://www.boxcryptor.com/en/boxcryptor-classic)
- [boxer](http://boxerapp.com/)
- [brackets](http://brackets.io)
- [brain-workshop](http://brainworkshop.sourceforge.net/)
- [breach](http://breach.cc)
- [breakaway](http://mutablecode.com/apps/breakaway.html)
- [brightness](http://www.bergdesign.com/brightness/)
- [brogue](https://sites.google.com/site/broguegame/)
- [broomstick](http://www.zibity.com/broomstick)
- [brow](http://www.timschroeder.net/brow/)
- [browserstacklocal](http://www.browserstack.com/)
- [brushviewql](http://brushviewer.sourceforge.net/)
- [brytonbridge](http://www.brytonsport.com/help/start)
- [buddi](http://buddi.digitalcave.ca/index.jsp)
- [burn](http://burn-osx.sourceforge.net/)
- [butter](http://harukasan.jp)
- [bzflag](http://bzflag.org/)

#### C

- [c3](http://www.downloadc3.com/)
- [caffeine](http://lightheadsw.com/caffeine/)
- [cakebrew](http://www.cakebrew.com)
- [calcservice](http://www.devontechnologies.com/products/freeware.html#c1111)
- [calibre](http://calibre-ebook.com/)
- [calibre2opds](http://calibre2opds.com/)
- [callnote](http://www.kandasoft.com/home/kanda-apps/skype-call-recorder.html)
- [camed](http://sourceforge.net/apps/mediawiki/camprocessor/index.php?title=Main_Page)
- [camerabag](http://nevercenter.com/camerabag/desktop/)
- [camino](http://caminobrowser.org/)
- [camranger](http://www.camranger.com/downloads/#fbox_5594)
- [camtasia](http://www.techsmith.com/camtasia.html)
- [camtwist](http://camtwiststudio.com/)
- [candybar](http://www.panic.com/blog/candybar-mountain-lion-and-beyond)
- [capo](http://supermegaultragroovy.com/products/Capo/)
- [capsee](http://www.threemagination.com/capsee/)
- [carbon-copy-cloner](http://bombich.com/)
- [carlson-minot](http://www.carlson-minot.com)
- [cartao-de-cidadao](http://www.cartaodecidadao.pt/)
- [catch](http://www.giorgiocalderolla.com/index.html)
- [catchmouse](http://ftnew.com/catchmouse.html)
- [cathode](http://www.secretgeometry.com/apps/cathode)
- [ccleaner](http://www.piriform.com/ccleaner)
- [ccmenu](http://ccmenu.sourceforge.net/)
- [cd-to](https://github.com/jbtule/cdto)
- [cdock](http://sourceforge.net/projects/cdock)
- [celestia](http://sourceforge.net/projects/celestia)
- [cert-quicklook](https://code.google.com/p/cert-quicklook/)
- [cfxr](http://thirdcog.eu/apps/cfxr)
- [chainsaw](http://logging.apache.org/chainsaw/)
- [chameleon-ssd-optimizer](http://chameleon.alessandroboschini.it/)
- [changes-meter](http://intuiware.com/apps/changes-meter)
- [changes](http://bitbq.com/changes/)
- [charles](http://www.charlesproxy.com/)
- [chatology](http://flexibits.com/chatology)
- [cheatsheet](http://www.cheatsheetapp.com/CheatSheet/)
- [cheetah3d](http://www.cheetah3d.com)
- [chefdk](http://www.getchef.com/downloads/chef-dk/mac/)
- [chemdoodle](http://www.chemdoodle.com)
- [chicken](http://sourceforge.net/projects/chicken/)
- [chirp](http://chirp.danplanet.com/)
- [chocolat](http://chocolatapp.com/)
- [choosy](http://www.choosyosx.com/)
- [chromatic](https://mrgeckosmedia.com/applications/info/Chromatic)
- [chrome-remote-desktop-host](https://chrome.google.com/remotedesktop)
- [chromecast](http://www.google.ca/intl/en/chrome/devices/chromecast/)
- [chromium](http://www.freesmug.org/chromium)
- [chronicle](http://chronicleapp.com/)
- [chronoagent](http://www.econtechnologies.com)
- [chronomate](http://chronomateapp.com/)
- [chronosync](http://www.econtechnologies.com)
- [chunkulus](http://presstube.com/blog/2011/chunkulus/)
- [cinch](http://www.irradiatedsoftware.com/cinch/)
- [citrix-receiver](http://www.citrix.com/receiver)
- [clamxav](http://www.clamxav.com/)
- [clarify](http://www.clarify-it.com/)
- [cleanmymac](http://macpaw.com/cleanmymac)
- [clementine](http://www.clementine-player.org/)
- [clion-eap](http://www.jetbrains.com/clion/)
- [clipmenu](http://www.clipmenu.com/)
- [clix](http://rixstep.com/4/0/clix/index.shtml)
- [cloak](https://www.getcloak.com)
- [clock](http://zachwaugh.me/clock/)
- [clonk](http://www.clonk.de/cr.php)
- [cloud](http://getcloudapp.com/)
- [cloudera-hive-odbc](http://www.cloudera.com)
- [cloudfoundry-cli](https://github.com/cloudfoundry/cli)
- [cloudpull](http://www.goldenhillsoftware.com/)
- [cloudup](https://cloudup.com/download)
- [cloudytabs](https://github.com/josh-/CloudyTabs/)
- [cn3d](http://www.ncbi.nlm.nih.gov/Structure/CN3D/cn3d.shtml)
- [coccinellida](http://coccinellida.sourceforge.net/)
- [cockatrice](http://www.woogerworks.com/)
- [cocktail](http://maintain.se/cocktail)
- [cocoadialog](http://mstratman.github.io/cocoadialog/)
- [cocoapacketanalyzer](http://www.tastycocoabytes.com/cpa/)
- [cocoarestclient](http://mmattozzi.github.io/cocoa-rest-client/)
- [cocoaspell](http://cocoaspell.leuski.net/)
- [cocoasplit](http://krylon.rsdio.com/zakk/cocoasplit/)
- [coconutbattery](http://www.coconut-flavour.com/coconutbattery/)
- [coda](https://panic.com/Coda/)
- [codebox](https://www.codebox.io)
- [codebug](http://www.codebugapp.com/)
- [codekit](http://incident57.com/codekit/)
- [codelite](http://codelite.org)
- [cog](http://cogx.org)
- [colloquy](http://colloquy.info/)
- [color-oracle](http://colororacle.org/)
- [color-picker-pro](https://github.com/oscardelben/Color-Picker-Pro)
- [colorpicker-antetype](http://www.antetype.com/blog/2013/12/updated-antetype-os-x-color-picker-1-3-1/)
- [colorpicker-developer](http://download.panic.com/picker/)
- [colorpicker-hex](http://wafflesoftware.net/hexpicker/)
- [colorpicker-propicker](http://www.irradiated.net/?page=pro-picker)
- [colorpicker-rcwebcolorpicker](http://www.rubicode.com/Software/RCWebColorPicker)
- [colorpicker-skalacolor](http://bjango.com/mac/skalacolor/)
- [colorpicker](http://www.northernspysoftware.com/software/colorpicker)
- [colors](http://mattpatenaude.com/)
- [colorschemer-studio](http://www.colorschemer.com)
- [comicbooklover](http://www.bitcartel.com/comicbooklover/)
- [comicbookloversync](http://www.bitcartel.com/comicbooklover)
- [comictagger](http://code.google.com/p/comictagger/)
- [commandq](http://clickontyler.com/commandq/)
- [concentrate](http://www.getconcentrating.com/)
- [connected-desktop](http://www.filetransporter.com/)
- [connector](http://mediaware.sk/connector)
- [consul](http://www.consul.io/)
- [contexts](http://contextsformac.com/)
- [controllermate](http://www.orderedbytes.com/controllermate/)
- [controlplane](http://www.controlplaneapp.com/)
- [coolterm](http://freeware.the-meiers.org/)
- [cooviewer](http://www.geocities.jp/coo_ona/viewer.html)
- [copy](https://www.copy.com/)
- [coqide](http://coq.inria.fr/)
- [cord](http://cord.sourceforge.net/)
- [cornerstone](http://www.zennaware.com/cornerstone/index.php)
- [corsixth](http://th.corsix.org)
- [coteditor](http://coteditor.github.io/)
- [couchbase-server-community](http://www.couchbase.com/)
- [couchbase-server-enterprise](http://www.couchbase.com/)
- [craftstudio](http://craftstud.io)
- [crashlytics](http://crashlytics.com)
- [crashplan](http://www.crashplan.com/)
- [crosspack-avr](http://www.obdev.at/products/crosspack/)
- [crushftp](https://www.crushftp.com)
- [crypt](http://voluntary.net/crypt/)
- [cryptol](http://cryptol.net/)
- [ctivo](https://github.com/dscottbuch/cTiVo)
- [cuda-z](http://cuda-z.sourceforge.net)
- [cuppa](http://www.nathanatos.com/software)
- [cups-pdf](http://www.cups-pdf.de)
- [cura](http://daid.github.com/Cura/)
- [curb](http://mrrsoftware.com/curb)
- [curse-client](http://www.curse.com/client)
- [cursorcerer](http://doomlaser.com/cursorcerer-hide-your-cursor-at-will/)
- [cutesdr](http://sourceforge.net/projects/cutesdr)
- [cx](http://www.cx.com)
- [cyberduck](http://cyberduck.io/)
- [cycling74-max](http://cycling74.com)

#### D

- [daemon-tools-lite](http://www.daemon-tools.cc/products/dtMacLite)
- [daisydisk](http://www.daisydiskapp.com)
- [darktable](http://www.darktable.org/)
- [darteditor](https://www.dartlang.org/tools/editor/)
- [dash](http://kapeli.com/dash)
- [dashlane](https://www.dashlane.com/)
- [datagraph](http://www.visualdatatools.com/DataGraph/)
- [dataurlmaker](https://github.com/sveinbjornt/Data-URL-Toolkit)
- [day-o](http://www.shauninman.com/archive/2011/10/20/day_o_mac_menu_bar_clock)
- [dbeaver](http://dbeaver.jkiss.org/)
- [dealalert](http://dealalertapp.com/)
- [deathtodsstore](http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/)
- [debookee](http://www.iwaxx.com/debookee/)
- [debt-quencher](http://nothirst.com/debtquencher/)
- [decitime](http://www.tinbert.com/DeciTimeMac/)
- [deeper](http://www.titanium.free.fr/downloaddeeper.php)
- [deeq](http://deeqapp.com)
- [default-folder-x](http://www.stclairsoft.com/DefaultFolderX)
- [delibar](http://www.delibarapp.com/)
- [delicious-library](http://delicious-monster.com/)
- [delivery-status](http://junecloud.com/software/mac/delivery-status.html)
- [deltawalker](http://www.deltopia.com/compare-merge-sync/macosx/)
- [deluge](http://deluge-torrent.org/)
- [deskfun](http://www.furrysoft.de/?page=deskfun)
- [desktop-log](http://www.nightproductions.net/desklog.html)
- [desmume](http://www.desmume.org)
- [detune](http://headlightsoft.com/detune/)
- [devonthink-pro-office](http://www.devontechnologies.com/products/devonthink/devonthink-pro-office.html)
- [devonthink-pro](http://www.devontechnologies.com/products/devonthink/devonthink-pro.html)
- [dewdrop](http://dewdrop.dangelov.com/)
- [dfontsplitter](http://peter.upfold.org.uk/projects/dfontsplitter)
- [dia](http://dia-installer.de/)
- [diashapes](http://dia-installer.de/)
- [dictunifier](http://code.google.com/p/mac-dictionary-kit/)
- [diffmerge](http://www.sourcegear.com/diffmerge)
- [disk-drill](http://www.cleverfiles.com/)
- [disk-inventory-x](http://www.derlien.com/)
- [diskaid](http://www.digidna.net/diskaid)
- [diskmaker-x](http://diskmakerx.com/)
- [diskwave](http://diskwave.barthe.ph/)
- [dispcalgui](http://dispcalgui.hoech.net)
- [displaperture](http://manytricks.com/displaperture)
- [displaylink](http://www.displaylink.com)
- [diumoo](http://diumoo.net/)
- [divvy](http://mizage.com/divvy/)
- [djay](http://algoriddim.com/djay-mac)
- [djv](http://djv.sourceforge.net)
- [djview](http://djvu.sourceforge.net/)
- [dmm](http://www.dmm.com/dc/book/)
- [dnscrypt](http://opendns.github.io/dnscrypt-osx-client/)
- [docear](http://docear.org)
- [dockmod](http://spyresoft.com/dockmod/)
- [dogecoin](http://dogecoin.com/)
- [dolphin](http://www.dolphin-emu.org/)
- [dosbox](http://www.dosbox.com)
- [doubanradio](http://douban.fm)
- [double-commander](http://doublecmd.sourceforge.net/)
- [doublecommand](http://doublecommand.sourceforge.net)
- [doubletwist](http://www.doubletwist.com/)
- [doxie](http://www.getdoxie.com/)
- [doxygen](http://www.stack.nl/~dimitri/doxygen/index.html)
- [dradio](http://dradio.me)
- [dragondisk](http://www.dragondisk.com/)
- [dragthing](http://www.dragthing.com)
- [drobo-dashboard](http://www.drobo.com)
- [dropbox-encore](http://www.joyofmacs.com/software/dropboxencore/)
- [dropbox](https://www.dropbox.com/)
- [dropin](http://excitedatom.com/dropin/)
- [dropletmanager](https://github.com/deivuh/DODropletManager-OSX)
- [droplr](https://www.droplr.com/)
- [dropzone](https://aptonic.com)
- [dsp-radio](http://dl2sdr.homepage.t-online.de/)
- [dterm](http://decimus.net/DTerm)
- [dukto](https://code.google.com/p/dukto/)
- [dump-truck](http://www.goldenfrog.com/dumptruck)
- [dungeon-crawl-stone-soup-console](http://crawl.develz.org)
- [dungeon-crawl-stone-soup-tiles](http://crawl.develz.org)
- [dupeguru-me](http://www.hardcoded.net/dupeguru_me/)
- [dupeguru-pe](http://www.hardcoded.net/dupeguru_pe/)
- [dupeguru](http://www.hardcoded.net/dupeguru/)
- [duplicate-annihilator](http://brattoo.com/propaganda/)
- [duplicati](http://www.duplicati.com/)
- [dupscanub](http://www5.wind.ne.jp/miko/mac_soft/dup_scan/index.html)
- [dvdstyler](http://dvdstyler.org)
- [dwarf-fortress](http://www.bay12games.com/dwarves/)

#### E

- [eagle](http://www.cadsoftusa.com/)
- [eaglefiler](http://c-command.com/eaglefiler/)
- [easyfind](http://www.devontechnologies.com/download/products.html)
- [easysimbl](https://github.com/norio-nomura/EasySIMBL/)
- [easyvpn](http://www.squashedsoftware.com/products-easyvpn.php)
- [eclipse-ide](http://eclipse.org/)
- [eclipse-java](http://eclipse.org/)
- [eclipse-jee](http://eclipse.org/)
- [eclipse-platform](http://eclipse.org)
- [ecoute](http://pixiapps.com/ecouteosx/)
- [eid-mw](https://code.google.com/p/eid-mw/)
- [ejector](http://www.jeb.com.fr/en/ejector.shtml)
- [electric-sheep](http://www.electricsheep.org)
- [electrum-ltc](http://electrum-ltc.org)
- [electrum](http://electrum.org/)
- [elm-platform](http://www.elm-lang.org)
- [eloquent](https://launchpad.net/eloquent)
- [elyse](http://silkwoodsoftware.com/)
- [emacs](http://emacsformacosx.com/)
- [ember](http://realmacsoftware.com/ember)
- [emin-webpquicklook](https://github.com/emin/WebPQuickLook)
- [enfusegui](http://software.bergmark.com/enfusegui/Main.html)
- [enjoyable](http://yukkurigames.com/enjoyable/)
- [entropy](http://www.eigenlogik.com/entropy/)
- [epic](http://www.epicbrowser.com)
- [epub-to-pdf](https://code.google.com/p/epub-2-pdf)
- [epubquicklook](http://people.ict.usc.edu/~leuski/programming/epub-quickview.php)
- [escritorio-movistar](http://www.movistar.es/particulares/servicios/descargaaplicaciones)
- [espionage](https://www.espionageapp.com/)
- [espresso](http://macrabbit.com/espresso/)
- [etrecheck](http://www.etresoft.com/etrecheck)
- [evasi0n](http://evasi0n.com)
- [eve](http://www.hotkey-eve.com/)
- [evernote](https://evernote.com/)
- [everweb](http://www.everwebapp.com/)
- [evom](http://thelittleappfactory.com/evom/)
- [exhaust](https://mrgeckosmedia.com/applications/info/Exhaust)
- [exist-db](http://exist-db.org/)
- [expandrive](http://www.expandrive.com/expandrive)
- [eye-fi](http://support.eye.fi/downloads)
- [eyetv](http://www.elgato.com/)

#### F

- [facebook-ios-sdk](https://developers.facebook.com/docs/ios)
- [factor](http://factorcode.org/)
- [fairmount](https://github.com/BoxOfSnoo/Fairmount)
- [fake](http://fakeapp.com/)
- [fakethunder](http://martianz.cn/fakethunder/)
- [fantastical](http://flexibits.com/fantastical)
- [fastest-free-youtube-downloader](https://www.fastestvideodownloader.com/)
- [fastscripts](http://www.red-sweater.com/fastscripts/)
- [faux-pas](http://fauxpasapp.com)
- [fdt](http://fdt.powerflasher.com/)
- [feedbinnotifier](http://kmikael.github.io/FeedbinNotifier)
- [feeder](http://reinventedsoftware.com/feeder/)
- [feeds](http://www.feedsapp.com/)
- [fender-amp-drivers](https://fuse.fender.com/)
- [fender-fuse](https://fuse.fender.com/)
- [fenix](http://fenixwebserver.com/)
- [fetch](http://fetchsoftworks.com/)
- [ffmpegx](http://www.ffmpegx.com/download.html)
- [figtree](http://tree.bio.ed.ac.uk/software/figtree/)
- [fiji](http://fiji.sc)
- [file-juicer](http://echoone.com/filejuicer/)
- [filebot](http://www.filebot.net/)
- [filedrop](http://www.filedropme.com/)
- [fileshuttle](http://fileshuttle.io/)
- [filezilla](https://filezilla-project.org/)
- [find-any-file](http://apps.tempel.org/FindAnyFile/)
- [findings](http://findingsapp.com)
- [firefox](https://www.mozilla.org/en-US/firefox/)
- [firewall-builder](http://www.fwbuilder.org)
- [fission](http://rogueamoeba.com/fission/)
- [fitbit-connect](http://www.fitbit.com/)
- [fivedetails-flow](http://fivedetails.com)
- [flame](http://husk.org/apps/flame/)
- [flash-decompiler-trillix](http://www.flash-decompiler.com/mac.html)
- [flash-player-debugger](https://www.adobe.com/support/flashplayer/downloads.html)
- [flash-player](https://www.adobe.com/support/flashplayer/downloads.html)
- [flash](https://www.adobe.com/products/flashplayer/distribution3.html)
- [flavours](http://flavours.interacto.net/)
- [flexiglass](http://nulana.com/flexiglass/)
- [flickr-uploadr](http://www.flickr.com/tools/)
- [flightgear](http://www.flightgear.org/)
- [flip4mac](http://www.telestream.net/flip4mac/)
- [fliqlo](http://fliqlo.com/)
- [flow](http://www.getflow.com/)
- [flowdock](https://www.flowdock.com/)
- [fluid](http://fluidapp.com/)
- [fluke](https://code.google.com/p/flukeformac/)
- [flux](http://justgetflux.com)
- [fm-fw-installer](http://www.flymaster-avionics.com/Support/Downloads/ForMacOSX/tabid/199/Default.aspx)
- [focus](http://www.heyfocus.com/)
- [focuswriter](http://gottcode.org/focuswriter/)
- [folding-text](http://www.foldingtext.com)
- [foldit](http://fold.it)
- [folx](http://mac.eltima.com/de/download-manager.html)
- [fontexplorer-x-pro](http://www.fontexplorerx.com/)
- [fontprep](http://fontprep.com)
- [forklift](http://www.binarynights.com/)
- [fotomagico](http://www.boinx.com/fotomagico/)
- [fotowall](http://www.enricoros.com/opensource/fotowall/)
- [fourk-video-downloader](http://www.4kdownload.com/products/product-videodownloader)
- [fourk-youtube-to-mp3](http://www.4kdownload.com/products/product-youtubetomp3)
- [fourpeaks](http://nucleobytes.com/index.php/4peaks)
- [foxmail](http://www.foxmail.com)
- [fpc](http://www.freepascal.org/)
- [framer-studio](http://framerjs.com/)
- [free-ruler](http://www.pascal.com/software/freeruler/)
- [freecad](http://sourceforge.net/projects/free-cad/)
- [freecol](http://freecol.org)
- [freedv](http://freedv.org/tiki-index.php)
- [freefilesync](http://freefilesync.sourceforge.net/)
- [freemind](freemind.sourceforge.net)
- [freezer](https://mrgeckosmedia.com/applications/info/Freezer)
- [fritzing](http://fritzing.org/)
- [frizzix](http://mac.frizzix.de/)
- [frostwire](http://www.frostwire.com)
- [fs-uae](http://fs-uae.net/)
- [fseventer](http://www.fernlightning.com/doku.php?id=software:fseventer:start)
- [fugu](http://rsug.itd.umich.edu/software/fugu/)
- [functionflip](http://kevingessner.com/software/functionflip/)
- [fuze](https://www.fuzemeeting.com)

#### G

- [gambit-c](http://gambitscheme.org/wiki/index.php/Main_Page)
- [gamesalad](http://gamesalad.com)
- [ganttproject](http://www.ganttproject.biz)
- [garagebuy](http://www.iwascoding.com/GarageBuy)
- [garagesale](http://www.iwascoding.com/GarageSale/index.html)
- [gargoyle](https://code.google.com/p/garglk/)
- [garmin-ant-agent](http://www8.garmin.com/support/download_details.jsp?id=4417)
- [garmin-communicator](http://www8.garmin.com/support/download_details.jsp?id=3739)
- [garmin-express](http://www.garmin.com/express)
- [garmin-training-center](http://www.garmin.com/garmin/cms/intosports/training_center)
- [gas-mask](http://www.clockwise.ee/gasmask/)
- [gawker](http://gawker.sourceforge.net/Gawker.html)
- [gdal-framework](http://www.kyngchaos.com/software/frameworks)
- [geekbench](http://www.primatelabs.com/geekbench/)
- [geektool](http://projects.tynsoe.org/en/geektool/)
- [genymotion](http://www.genymotion.com/)
- [gephi](http://gephi.org/)
- [geppetto](http://puppetlabs.github.io/geppetto/)
- [gfxcardstatus](http://gfx.io/)
- [ghc](http://ghcformacosx.github.io/)
- [ghostlab](http://vanamco.com/ghostlab/)
- [giffun](http://www.stone.com/GIFfun/)
- [gifrocket](http://www.gifrocket.com/)
- [gimp-lisanet](http://gimp.lisanet.de)
- [gimp](http://www.gimp.org)
- [gingr](http://harvest.readthedocs.org/en/latest/content/gingr.html)
- [gisto](http://www.gistoapp.com/)
- [git-annex](http://git-annex.branchable.com/)
- [gitbook](https://www.gitbook.io/)
- [gitbox](http://gitboxapp.com/)
- [github](http://mac.github.com)
- [gitifier](http://psionides.github.io/Gitifier/)
- [gitter](https://gitter.im/)
- [gitx-l](http://gitx.laullon.com/)
- [gitx-rowanj](http://rowanj.github.io/gitx/)
- [gitx](http://gitx.frim.nl/)
- [gity](http://gityapp.com/)
- [glcplayer](http://www.glc-player.net)
- [glimmerblocker](http://glimmerblocker.org)
- [glo](http://globible.com/gloformac/)
- [globalsync](http://www.usglobalsat.com/)
- [gmail-notifier](https://github.com/jashephe/Gmail-Notifier)
- [gmail-notifr](http://ashchan.com/projects/gmail-notifr)
- [gnucash](http://www.gnucash.org)
- [go-agent](http://www.go.cd)
- [go-server](http://www.go.cd/)
- [goagentx](http://goagentx.com/)
- [gog-downloader](http://www.gog.com/downloader)
- [golly](http://golly.sourceforge.net/)
- [google-adwords-editor](http://www.google.com/intl/en_US/adwordseditor/)
- [google-chrome](https://www.google.com/chrome/)
- [google-drive](https://drive.google.com/)
- [google-earth-web-plugin](http://www.google.com/intl/en/earth/explore/products/plugin.html)
- [google-earth](https://www.google.com/earth/)
- [google-hangouts](https://www.google.com/tools/dlpage/hangoutplugin)
- [google-japanese-ime](https://www.google.co.jp/ime/)
- [google-nik-collection](https://www.google.com/nikcollection/)
- [google-notifier](http://toolbar.google.com/gmail-helper/notifier_mac.html)
- [google-plus-auto-backup](http://picasa.google.com/)
- [google-refine](http://openrefine.org/)
- [google-web-designer](https://www.google.com/webdesigner/)
- [googleappenginelauncher](https://developers.google.com/appengine/)
- [gopanda](http://pandanet-igs.com/communities/gopanda2)
- [gpgtools](https://gpgtools.org/index.html)
- [gpower](http://www.gpower.hhu.de/)
- [gqrx](http://gqrx.dk/)
- [grabbox](http://grabbox.devsoft.no/)
- [grafx2](http://pulkomandy.tk/projects/GrafX2)
- [grandperspective](http://grandperspectiv.sourceforge.net/)
- [grandtotal](http://www.mediaatelier.com/GrandTotal3/)
- [graphsketcher](https://github.com/graphsketcher/GraphSketcher)
- [graphviz](http://www.graphviz.org/)
- [gravit](http://gravit.io/)
- [gridwars](http://gridwars.marune.de/)
- [grooveshark](http://www.grooveshark.com)
- [groovesquid](http://groovesquid.com/)
- [growl-fork](https://www.macupdate.com/app/mac/41038/growl-fork)
- [growler](http://wafflesoftware.net/growlergn/)
- [growlnotify](http://growl.info/downloads)
- [growlvoice](http://www.growlvoice.com/)
- [guitar-tuner](http://www.gieson.com/Library/projects/utilities/tuner/)
- [gulp](https://github.com/sindresorhus/gulp-app)
- [gurps-character-sheet](http://gurpscharactersheet.com)
- [gyazo](https://gyazo.com/)

#### H

- [hall](https://hall.com/download-hall/hall-for-mac)
- [handbrake](http://handbrake.fr/)
- [handbrakebatch](http://www.osomac.com/apps/osx/handbrake-batch/)
- [handbrakecli](http://handbrake.fr)
- [hands-off](http://www.metakine.com/products/handsoff/)
- [happygrep](https://github.com/happypeter/happygrep)
- [haroopad](http://pad.haroopress.com/)
- [harvest](http://www.getharvest.com/mac)
- [hashcat](https://hashcat.net/hashcat/)
- [haskell-platform](http://www.haskell.org/platform/)
- [hazel](http://www.noodlesoft.com/hazel.php)
- [hbuilder](http://dcloud.io/)
- [hear](http://www.prosofteng.com/products/hear.php)
- [heart](http://presstube.com/blog/2011/heart/)
- [hedgewars](http://hedgewars.org)
- [hermes](http://hermesapp.org/)
- [heroku-toolbelt](https://toolbelt.heroku.com/)
- [hex-fiend](http://ridiculousfish.com/hexfiend/)
- [hex](http://hextcg.com/)
- [hexchat](http://hexchat.github.io)
- [hexels](http://hexraystudios.com/hexels/)
- [hipchat](https://www.hipchat.com/)
- [hippoconnect](http://hipporemote.com/)
- [hiss](http://collect3.com.au/hiss/)
- [historyhound](http://www.stclairsoft.com/HistoryHound/)
- [hive](http://www.hivewallet.com)
- [hockeyapp](http://hockeyapp.net/releases/mac/)
- [homestream](http://www.sony.co.uk/hub/1237485339460)
- [honer](https://github.com/puffnfresh/Honer.app)
- [hopper-disassembler](http://www.hopperapp.com/)
- [hoppergdbserver](http://www.hopperapp.com/HopperGDBServer/index.html)
- [horndis](http://joshuawise.com/horndis)
- [hostbuddy](http://clickontyler.com)
- [hoster](http://www.redwinder.com/macapp/hoster/)
- [hosts](http://permanentmarkers.nl/software.html)
- [houdahgeo](http://houdah.com/houdahGeo/)
- [houdahspot](http://www.houdah.com/houdahSpot/)
- [hpuload](http://www.fernlightning.com/doku.php?id=software:hpuload:start)
- [hr](http://www.hrmacapp.com/)
- [hsang](http://lushi.163.com/)
- [httpscoop](http://www.tuffcode.com)
- [hubic](https://hubic.com)
- [hugin](http://hugin.sourceforge.net/)
- [hush](http://coffitivity.com/hush/)
- [hype](http://tumult.com/hype/)
- [hyperdock](http://hyperdock.bahoom.com/)
- [hyperswitch](http://bahoom.com/hyperswitch)
- [hyro](http://jawerty.github.io/Hyro/)

#### I

- [iannix](http://www.iannix.org/)
- [ibabel](http://www.macinchem.org/ibabel/ibabel3.php)
- [ibackup](http://www.grapefruit.ch/iBackup)
- [ibank](http://www.iggsoftware.com/ibank)
- [ibettercharge](http://softorino.com/ibettercharge/)
- [iboostup](http://www.iboostup.com)
- [ibrowse](http://www.ibrowseapp.com/)
- [icefloor](http://www.hanynet.com/icefloor/)
- [ichm](https://code.google.com/p/ichm/)
- [icolors](http://www.fadingred.com/icolors/)
- [icompta](http://www.icompta-app.com/)
- [iconping](http://antirez.com/iconping/)
- [icursor](https://www.macupdate.com/app/mac/17059/icursor)
- [id3-editor](http://www.pa-software.com/id3editor/)
- [identify](http://identify2.arrmihardies.com/)
- [ideskcal](http://www.hashbangind.com)
- [idocument-plus](http://www.icyblaze.com/idocument/)
- [idris](http://www.idris-lang.org)
- [iexplorer](http://www.macroplant.com/)
- [ifilex](http://www.osxbytes.com/page3/index.html)
- [ifunbox](http://www.i-funbox.com/)
- [igetter](http://www.igetter.net/)
- [iloc](http://derailer.org/iloc)
- [imagealpha](http://pngmini.com/)
- [imagemin](https://github.com/kevva/imagemin-app)
- [imageoptim](http://imageoptim.com/)
- [img2icns](http://www.img2icnsapp.com/)
- [imitone](http://imitone.com/)
- [inboard](http://inboardapp.com/beta)
- [inc](https://sendtoinc.com/apps/)
- [indigo](http://www.perceptiveautomation.com/indigo/index.html)
- [induction](http://inductionapp.com/)
- [infinit](https://infinit.io/)
- [inform](http://inform7.com/)
- [injection](http://injectionforxcode.com/)
- [inkscape](http://inkscape.org)
- [inky](http://inky.com)
- [insertpic](http://www.getinsertpic.com/)
- [instabridge](http://instabridge.com/)
- [instacast](http://vemedio.com/products/instacast-mac)
- [instead](http://instead.syscall.ru/)
- [insync](https://insynchq.com/)
- [integrity](http://peacockmedia.co.uk/integrity/)
- [intel-haxm](https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager)
- [intel-power-gadget](https://software.intel.com/en-us/articles/intel-power-gadget-20)
- [intel-xdk](http://xdk-software.intel.com/)
- [intellij-idea-ce](https://www.jetbrains.com/idea/index.html)
- [intellij-idea](https://www.jetbrains.com/idea/index.html)
- [intermission](http://rogueamoeba.com/intermission/)
- [invisiblix](http://www.read-write.fr/invisiblix/)
- [invisionsync](http://invisionapp.com/)
- [invisorql](http://www.pozdeev.com/invisor/)
- [iograph](http://iographica.com/)
- [ionu](https://ionu.com)
- [ioquake3](http://ioquake3.org/)
- [ios7-screensaver](http://bodysoulspirit.weebly.com/ios-7-screensaver-for-mac-os-x-by-bodysoulspirit.html)
- [ipalette](http://ipalette.info/)
- [ipaql](http://ipaql.com/)
- [iphone-configuration-utility](http://support.apple.com/kb/DL1465)
- [iphoney](https://www.marketcircle.com/iphoney)
- [ireadfast](http://www.gengis.net/prodotti/iReadFast_Mac/en/index.php)
- [irip](http://thelittleappfactory.com/irip/)
- [isabelle](http://www.cl.cam.ac.uk/research/hvg/Isabelle/)
- [isolator](http://willmore.eu/software/isolator)
- [istat-menus](http://bjango.com/mac/istatmenus/)
- [istat-server](http://bjango.com/mac/istatserver/)
- [isteg](http://www.hanynet.com/isteg/)
- [istopmotion](http://www.boinx.com/istopmotion/mac/)
- [istumbler](http://istumbler.net/)
- [iswiff](http://echoone.com/iswiff/)
- [iterm2](http://www.iterm2.com/)
- [itools](http://www.itools.cn/download.php?v=mac_en)
- [itsycal](http://www.mowglii.com/itsycal/)
- [itunes-volume-control](https://github.com/alberti42/iTunes-Volume-Control)
- [itunesscrobbler](http://www.easyclasspage.de/lastfm/seite-19.html)
- [itweax](http://www.itweax.net/)
- [iupx](http://iupx.sourceforge.net)
- [ivolume](http://www.mani.de/en/ivolume/)
- [izip](http://www.izip.com)

#### J

- [jabber-video](https://www.ciscojabbervideo.com/)
- [jabref](http://jabref.sourceforge.net/)
- [jaikoz](http://jthink.net/jaikoz)
- [jameica](http://www.willuhn.de/products/jameica/)
- [jaspersoft-studio](http://community.jaspersoft.com/project/jaspersoft-studio)
- [java](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
- [javafx-scene-builder](http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-info-2157684.html)
- [jawbone-updater](http://jawbone.com/)
- [jbidwatcher](http://www.jbidwatcher.com)
- [jd-gui](http://jd.benow.ca/)
- [jdiskreport](http://www.jgoodies.com/freeware/jdiskreport/)
- [jdownloader](http://jdownloader.org/)
- [jedit](http://www.jedit.org)
- [jenkins-menu](http://qvacua.com)
- [jetphoto-studio](http://www.jetphotosoft.com/web/home/)
- [jewelrybox](http://jewelrybox.unfiniti.com/)
- [jiggler](http://www.sticksoftware.com/software/Jiggler.html)
- [jing](http://www.techsmith.com/jing.html)
- [jitouch](http://www.jitouch.com)
- [jitsi](https://jitsi.org/)
- [joinme](https://join.me/)
- [josm](http://josm.openstreetmap.de)
- [jsonlook](https://github.com/rjregenold/jsonlook)
- [jubler](http://www.jubler.org/)
- [julia](http://julialang.org/)
- [juliastudio](http://forio.com/labs/julia-studio/)
- [jumpcut](http://jumpcut.sourceforge.net/)
- [jumpshare](https://jumpshare.com/)
- [justlooking](http://chipmunkninja.com/JustLooking)
- [jxplorer](http://jxplorer.org)

#### K

- [kaleidoscope](http://www.kaleidoscopeapp.com/)
- [kamakiri](https://mochidev.com/apps/kamakiri)
- [karabiner](https://pqrs.org/osx/karabiner/)
- [katana](http://katana.witiz.com/)
- [kdiff3](http://kdiff3.sourceforge.net/)
- [keepassx](http://www.keepassx.org)
- [keka](http://kekaosx.com/)
- [kensington-trackball-works](http://www.kensington.com/)
- [kext-drop](http://www.groths.org/software/kextdrop/)
- [kext-utility](http://cvad-mac.narod.ru/index/0-4)
- [kext-wizard](http://www.insanelymac.com/forum/topic/253395-kext-wizard-easy-to-use-kext-installer-and-more/)
- [key-codes](http://manytricks.com/keycodes/)
- [keyboard-cleaner](http://jan.prima.de/~jan/plok/archives/48-Keyboard-Cleaner.html)
- [keyboard-maestro](http://www.keyboardmaestro.com/)
- [keyboardcleantool](http://bettertouchtool.net)
- [keycastr](https://github.com/sdeken/keycastr)
- [keycue](http://www.ergonis.com/products/keycue/)
- [keyfinder](http://www.ibrahimshaath.co.uk/keyfinder/)
- [keymo](http://manytricks.com/keymo)
- [keystore-explorer](http://keystore-explorer.sourceforge.net/index.php)
- [kid3](http://kid3.sourceforge.net/)
- [kindle-previewer](http://www.amazon.com/gp/feature.html/?docId=1000765261)
- [kindle](http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000464931)
- [kindlegen](http://www.amazon.com/gp/feature.html?docId=1000765211)
- [kismac](http://kismac-ng.org/)
- [kitematic](https://kitematic.com/)
- [kivy](http://kivy.org)
- [kiwi](http://kiwi-app.net/)
- [kkbox](http://www.kkbox.com/)
- [klayout](http://www.klayout.de/index.html)
- [knock](http://knocktounlock.com)
- [knox](https://agilebits.com/knox)
- [kobito](http://kobito.qiita.com/)
- [kobo](http://www.kobo.com/)
- [kod](https://github.com/rsms/kod/)
- [komanda](https://github.com/mephux/komanda)
- [komodo-edit](http://komodoide.com/komodo-edit)
- [komodo-ide](http://komodoide.com/)
- [kompozer](http://www.kompozer.net/)
- [ksdiff](http://www.kaleidoscopeapp.com/ksdiff2)
- [kuaipan](http://www.kuaipan.cn/d/mac)
- [kugoumusic](http://www.kugou.com)
- [kvirc](http://www.kvirc.net)
- [kylo](http://kylo.tv)

#### L

- [lastfm](http://www.lastfm.com)
- [lastpass-universal](https://lastpass.com/)
- [latexian](http://tacosw.com/latexian/)
- [latexit](http://www.chachatelier.fr/latexit)
- [launchbar](http://www.obdev.at/products/launchbar/)
- [launchcontrol](http://www.soma-zone.com/LaunchControl/)
- [launchrocket](https://github.com/jimbojsb/launchrocket)
- [launchy](http://www.launchy.net)
- [layervault](http://layervault.com/)
- [lazarus](http://lazarus.freepascal.org/)
- [league-of-legends](http://signup.leagueoflegends.com/)
- [leap-motion](https://www.leapmotion.com/setup)
- [less](http://incident57.com/less/)
- [levelator](http://www.conversationsnetwork.org/levelator/)
- [librecad](http://librecad.org/)
- [libreoffice](https://www.libreoffice.org/)
- [licecap](http://www.cockos.com/licecap/)
- [licensed](http://amarsagoo.info/licensed)
- [lightpaper](http://clockworkengine.com/lightpaper-mac/)
- [lighttable](http://www.lighttable.com/)
- [lilypond](http://lilypond.org)
- [limechat](http://limechat.net/mac/)
- [lincastor](http://onflapp.wordpress.com/lincastor/)
- [linein](http://www.rogueamoeba.com/freebies/)
- [lingon-x](http://www.peterborgapps.com/lingon/)
- [lingrradar](http://radar.lingr.com/)
- [linkinus](http://conceited.net/products/linkinus)
- [linkliar](https://github.com/halo/LinkLiar)
- [linphone](http://www.linphone.org/)
- [liquifile](http://www.liquifile.info/)
- [litecoin](https://litecoin.org/)
- [liteicon](http://www.freemacsoft.net/liteicon/)
- [liteide](https://github.com/visualfc/liteide)
- [little-snitch](http://www.obdev.at/products/littlesnitch/index.html)
- [littleipsum](http://littleipsum.com)
- [livereload](http://www.livereload.com)
- [livestation](http://www.livestation.com)
- [loadmytracks](http://www.cluetrust.com/loadmytracks.html)
- [locko](http://www.binarynights.com/)
- [logic](http://www.saleae.com/)
- [logisim](http://ozark.hendrix.edu/~burch/logisim/)
- [logitech-control-center](http://www.logitech.com)
- [logitech-gaming-software](http://www.logitech.com/en-us/support/gaming-software?section=downloads&bit=&osid=36)
- [logitech-harmony](http://www.logitech.com/en-us/support/universal-remotes)
- [logitech-myharmony](https://setup.myharmony.com/)
- [logitech-unifying](http://www.logitech.com/en-us/promotions/6072)
- [logmein-client](https://secure.logmein.com/products/pro/learnmore/desktopapp.aspx)
- [logmein-hamachi](http://vpn.net)
- [logoist](http://www.syniumsoftware.com/logoist/)
- [loom](http://loom.com/)
- [love](http://love2d.org)
- [lpk25-editor](http://www.akaipro.com/index.php/product/lpk25)
- [ltspice](http://www.linear.com/designtools/software/)
- [lucidor](http://lucidor.org)
- [luminance-hdr](http://qtpfsgui.sourceforge.net/)
- [lyn](http://www.lynapp.com/)
- [lynxlet](http://habilis.net/lynxlet/)
- [lyrics-master](http://www.kenichimaehashi.com/lyricsmaster/)
- [lyx](http://www.lyx.org)

#### M

- [mac-informer](http://macdownload.informer.com/landing/)
- [mac-linux-usb-loader](http://sevenbits.github.io/Mac-Linux-USB-Loader/)
- [macaw](http://macaw.co/)
- [macbreakz](http://www.publicspace.net/MacBreakZ/)
- [macdown](http://macdown.uranusjr.com/)
- [macdrops](http://interfacelift.com/apps/macdrops/v1)
- [macfusion](http://macfusionapp.org/)
- [macgdbp](https://www.bluestatic.org/software/macgdbp/)
- [machacha](http://www.julifos.com/soft/machacha/index.html)
- [machg](http://jasonfharris.com/machg/)
- [macintosh-explorer](http://www.ragesw.com/products/explorer.html)
- [macmoney](http://www.devon.riceball.net/display.php?file=m01)
- [macpar-deluxe](http://gp.home.xs4all.nl/Site/MacPAR_deLuxe.html)
- [macpass](http://mstarke.github.io/MacPass/)
- [macpaw-gemini](http://macpaw.com/gemini)
- [macpilot](http://www.koingosw.com/products/macpilot.php)
- [macports](http://www.macports.org)
- [macs-fan-control](http://www.crystalidea.com/macs-fan-control)
- [macterm](http://www.macterm.net/)
- [mactex](http://www.tug.org/mactex/)
- [mactracker](http://mactracker.ca/)
- [mactubes](http://macapps.sakura.ne.jp/mactubes/index_en.html)
- [macupdate-desktop](https://www.macupdate.com/desktop)
- [macvim](http://code.google.com/p/macvim/)
- [macwinzipper](http://tidajapan.com/macwinzipper)
- [maczip4win](http://ynomura.com/home/?page_id=116)
- [madruby](http://www.wingsforpigs.com/MadRuby/MadRuby.html)
- [magic-launch](http://www.oneperiodic.com/products/magiclaunch/)
- [magican](http://www.magicansoft.com/)
- [mail-plugin-manager](http://www.chungwasoft.com/mailpluginmanager/)
- [mailbox](http://www.mailboxapp.com/)
- [mailfollowup](http://www.cs.unc.edu/~welch/MailFollowup/)
- [mailmate](http://freron.com/)
- [mailplane](http://mailplaneapp.com)
- [majic](http://erikhinterbichler.com/apps/majic/)
- [makehuman](http://www.makehuman.org/)
- [makemkv](http://www.makemkv.com/)
- [makerware](http://www.makerbot.com/makerware/)
- [mame](http://mameosx.sourceforge.net/)
- [mamp](http://www.mamp.info/en/index.html)
- [manager](http://manager.io)
- [manico](http://manico.im/)
- [mapture](http://anatoo.jp/mapture/)
- [maratis](http://www.maratis3d.org/)
- [marble](http://www.marble.kde.org)
- [marked](http://marked2app.com)
- [marsedit](http://www.red-sweater.com/marsedit/)
- [master-key](http://macinmind.com/?area=app&app=masterkey&pg=info)
- [matplotlib](http://www.kyngchaos.com/software/python)
- [mauve](http://gel.ahabs.wisc.edu/mauve/)
- [mavensmate](http://mavensmate.com)
- [max](http://sbooth.org/Max/)
- [maxthon](http://www.maxthon.com/)
- [mcedit](http://www.mcedit.net)
- [mcs783x](http://www.asix.com.tw/products.php?op=ProductList&PLine=74&PSeries=109)
- [mdrp](http://www.macdvdripperpro.com/)
- [media-converter](http://media-converter.sourceforge.net/)
- [mediaelch](http://www.mediaelch.de/)
- [mediafire-desktop](https://www.mediafire.com/software/desktop/)
- [mediainfo](http://mediaarea.net/en/MediaInfo)
- [mediathekview](http://sourceforge.net/projects/zdfmediathk/)
- [meerkat](http://codesorcery.net/meerkat)
- [memorytamer](http://www.memorytamer.com/)
- [mendeley-desktop](http://www.mendeley.com/)
- [menubar-countdown](http://capablehands.net/menubarcountdown)
- [menubarfilter](http://wez.github.com/MenuBarFilter/)
- [menucalendarclock-ical](http://www.objectpark.net/en/mcc.html)
- [menumeters](http://www.ragingmenace.com/software/menumeters/)
- [menuola](http://www.geocom.co.nz)
- [meocloud](https://meocloud.pt)
- [mercurymover](http://www.heliumfoot.com/mercurymover)
- [mesasqlite](http://www.desertsandsoftware.com)
- [meshlab](http://meshlab.sourceforge.net/)
- [metanota](http://www.metanota.com/)
- [meteorologist](http://heat-meteo.sourceforge.net/)
- [mi](http://www.mimikaki.net/)
- [microsoft-intellipoint](http://www.microsoft.com/hardware/en-us/mice)
- [microsoft-intellitype](http://www.microsoft.com/hardware/en-us/keyboards)
- [microsoft-lync-plugin](http://office.microsoft.com/Lync)
- [middleclick](http://clement.beffa.org/labs/projects/middleclick)
- [midikeys](http://www.manyetas.com/creed/midikeys.html)
- [miditrail](http://en.sourceforge.jp/projects/miditrail/)
- [mikogo](http://www.mikogo.com/)
- [milkytracker](http://www.milkytracker.org/)
- [minbox](https://minbox.com)
- [minco](http://www.celmaro.com/minco/)
- [mindnode-pro](https://mindnode.com/)
- [minecraft](http://minecraft.net)
- [mini-metro](http://dinopoloclub.com/minimetro/)
- [minilyrics](http://www.crintsoft.com/)
- [minimalclock](http://ilovecolorz.net/minimalclock/)
- [minitimer](http://kevingessner.com/software/minitimer/)
- [minitube](http://flavio.tordini.org/minitube)
- [miro-video-converter](http://www.mirovideoconverter.com/)
- [miro](http://www.getmiro.com/)
- [mirrordisplays](http://www.fabiancanas.com/Projects/MirrorDisplays)
- [mixlr](http://mixlr.com)
- [mixture](http://mixture.io/)
- [mixxx](http://www.mixxx.org)
- [mjolnir](http://mjolnir.io)
- [mkvtoolnix](http://www.bunkus.org/videotools/mkvtoolnix/)
- [mnemosyne](http://mnemosyne-proj.org/)
- [mocksmtp](http://mocksmtpapp.com/)
- [money](http://www.jumsoft.com/money/)
- [moneyguru](http://www.hardcoded.net/moneyguru/)
- [moneymoney](http://moneymoney-app.com/)
- [moneyplex](http://www.matrica.de/)
- [moneywell](http://nothirst.com/moneywell/)
- [mongodb](http://mongodbx-app.orelord.com/)
- [mongodbpreferencepane](https://github.com/remysaissy/mongodb-macosx-prefspane)
- [mongohub](https://github.com/fotonauts/MongoHub-Mac)
- [mono-mdk](http://mono-project.com/)
- [mono-mre](http://mono-project.com)
- [monochrome](http://lucianmarin.com/monochrome/)
- [monolingual](http://monolingual.sourceforge.net/)
- [monotype-skyfonts](http://www.fonts.com/web-fonts/google)
- [moom](http://manytricks.com/moom/)
- [moreamp](http://sourceforge.net/projects/moreamp/)
- [mosh](http://mosh.mit.edu/)
- [mou](http://mouapp.com/)
- [mountain](http://appgineers.de/mountain/)
- [mover](http://www.themaninhat.com/mover.html)
- [movieply](http://www.movieply.com/)
- [movist](https://github.com/samiamwork/Movist)
- [mozart](http://www.mozart-oz.org)
- [mp4tools](http://www.emmgunn.com/mp4tools/mp4toolshome.html)
- [mpeg-streamclip](http://www.squared5.com/)
- [mpfreaker](http://www.lairware.com/mpfreaker/)
- [mplayer-osx-extended](http://www.mplayerosx.ch/)
- [mplayerx](http://mplayerx.org/)
- [mpv](http://mpv.io/)
- [mucommander](http://www.mucommander.com/index.php)
- [mudlet](http://www.mudlet.org)
- [multibit](https://multibit.org/)
- [multibrowser](https://sites.google.com/site/tesseractsoftware/multibrowser)
- [multidoge](http://multidoge.org/)
- [multifirefox](http://davemartorana.com/multifirefox)
- [mumble](http://mumble.sourceforge.net)
- [murasaki](http://genjiapp.com/mac/murasaki/index_en.html)
- [musescore](http://musescore.org/)
- [music-manager](https://play.google.com/music/)
- [musicbrainz-picard](http://musicbrainz.org/doc/MusicBrainz_Picard)
- [musicplayer](http://ufd.dk/musicplayer)
- [musictube](http://flavio.tordini.org/musictube)
- [musique](http://flavio.tordini.org/musique)
- [myphonedesktop](http://www.myphonedesktop.com/)
- [mysqlworkbench](http://www.mysql.com/products/workbench)

#### N

- [nally](http://yllan.org/app/Nally/)
- [name-mangler](http://manytricks.com/namemangler/)
- [namebench](https://code.google.com/p/namebench/)
- [namechanger](http://www.mrrsoftware.com/MRRSoftware/NameChanger.html)
- [namely](http://amarsagoo.info/namely)
- [narrative-uploader](http://getnarrative.com)
- [navicat-data-modeler](http://www.navicat.com/products/navicat-data-modeler)
- [navicat-for-mariadb](http://www.navicat.com/products/navicat-for-mariadb)
- [navicat-for-mysql](http://www.navicat.com/products/navicat-for-mysql)
- [navicat-for-oracle](http://www.navicat.com/products/navicat-for-oracle)
- [navicat-for-postgresql](http://www.navicat.com/products/navicat-for-postgresql)
- [navicat-for-sql-server](http://www.navicat.com/products/navicat-for-sqlserver)
- [navicat-for-sqlite](http://www.navicat.com/products/navicat-for-sqlite)
- [navicat-premium](http://www.navicat.com/products/navicat-premium)
- [neofinder](http://www.cdfinder.de)
- [netbeans-cpp](https://netbeans.org/)
- [netbeans-php](https://netbeans.org/)
- [netbeans](https://netbeans.org/)
- [nethackcocoa](https://code.google.com/p/nethack-cocoa/)
- [netlogo](http://ccl.northwestern.edu/netlogo/)
- [netnewswire](http://netnewswireapp.com/)
- [netshade](http://raynersoftware.com/netshade/)
- [netspot](http://www.netspotapp.com)
- [neu](http://www.elegantchaos.com/neu/)
- [ngrok](https://ngrok.com/)
- [nicecast](http://rogueamoeba.com/nicecast)
- [nide](http://coreh.github.io/nide/)
- [nightingale](http://getnightingale.com/)
- [nike-plus-connect](http://nikeplus.nike.com)
- [nimbus](https://github.com/jnordberg/irccloudapp)
- [ninjablocks](http://forums.ninjablocks.com/index.php?p=/discussion/1655/ninja-osx-client/p1)
- [nitroshare](https://quickmediasolutions.com/apps/14/nitroshare)
- [nitrous-desktop](https://www.nitrous.io/mac)
- [nmap](http://nmap.org/)
- [no-ip-duc](http://www.noip.com/download?page=mac)
- [nocturne](http://code.google.com/p/blacktree-nocturne/)
- [node-webkit](https://github.com/rogerwang/node-webkit)
- [node](http://nodejs.org)
- [nodebox](http://nodebox.net/node/)
- [nodeclipse](http://www.nodeclipse.org/)
- [noejectdelay](https://pqrs.org/macosx/keyremap4macbook/noejectdelay.html.en)
- [noisy](https://github.com/jonshea/Noisy)
- [noiz2sa](http://workram.com/games/noiz2sa/)
- [nomachine](http://www.nomachine.com)
- [nomacs](http://www.nomacs.org/)
- [noobproof](http://www.hanynet.com/noobproof/index.html)
- [nosleep](https://code.google.com/p/macosx-nosleep-extension/)
- [notational-velocity](http://notational.net)
- [nothing-to-hide](https://back.nothingtohide.cc/)
- [notifyr](http://getnotifyr.com)
- [nottingham](https://clickontyler.com/nottingham/)
- [ntfs-free](http://sourceforge.net/projects/ntfsfree/)
- [nutstore](https://jianguoyun.com)
- [nvalt](http://brettterpstra.com/project/nvalt/)
- [nzbvortex](http://www.nzbvortex.com/)

#### O

- [objektiv](http://nthloop.github.io/Objektiv/)
- [obs](http://obsproject.com/)
- [obsidian-menu-bar-mountain-lion](http://www.obsidianmenubar.com)
- [ocenaudio](http://www.ocenaudio.com.br/en)
- [oclint](http://oclint.org)
- [octave](https://gnu.org/software/octave/)
- [odesk](https://www.odesk.com/)
- [omnidazzle](http://www.omnigroup.com/more)
- [omnidisksweeper](http://www.omnigroup.com/products/omnidisksweeper/)
- [omnifocus](http://www.omnigroup.com/products/omnifocus/)
- [omnigraffle](http://www.omnigroup.com/products/omnigraffle)
- [omnioutliner](http://www.omnigroup.com/omnioutliner/)
- [omniplan](http://www.omnigroup.com/products/omniplan/)
- [omnipresence](http://www.omnigroup.com/omnipresence)
- [omniweb](http://www.omnigroup.com/products/omniweb/)
- [onepassword](https://agilebits.com/onepassword)
- [oneswarm](http://www.oneswarm.org/)
- [onionshare](https://onionshare.org/)
- [onlive-client](http://games.onlive.com)
- [onyx](http://www.titanium.free.fr/downloadonyx.php)
- [oovoo](http://www.oovoo.com)
- [openarena](http://openarena.ws)
- [opendns-updater](https://support.opendns.com/entries/23218654-Where-do-I-download-an-OpenDNS-Dynamic-IP-updater-client-)
- [openemu](http://openemu.org/)
- [openlp](http://openlp.org)
- [opennx](http://opennx.net/)
- [openoffice](http://www.openoffice.org/)
- [openra](http://www.openra.net/)
- [openscad](http://www.openscad.org/)
- [opensesame](http://osdoc.cogsci.nl/)
- [opensong](http://www.opensong.org/)
- [openttd](http://openttd.org)
- [openvanilla](http://openvanilla.org/)
- [opera-mail](http://www.opera.com/computer/mail)
- [opera-mobile-emulator](http://www.opera.com/developer/mobile-emulator)
- [opera-next](http://www.opera.com/computer/next)
- [opera](http://www.opera.com/)
- [optimal-layout](http://most-advantageous.com/optimal-layout/)
- [orange](http://orange.biolab.si/)
- [orbit](http://orbitapp.net)
- [origin](http://origin.com)
- [ormr](http://getormr.com/home/)
- [osculator](http://www.osculator.net)
- [osirix](http://www.osirix-viewer.com)
- [osxfuse](https://osxfuse.github.io/)
- [outwit-hub](http://www.outwit.com)
- [owasp-zap](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project)
- [owncloud](http://owncloud.com)

#### P

- [p4merge](http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools)
- [p4v](http://www.perforce.com/product/components/perforce-visual-client)
- [p5](http://p5js.org/download/#editor)
- [pacifist](http://www.charlessoft.com/)
- [packer](http://www.packer.io/)
- [padre](http://padre.perlide.org)
- [pagico](http://pagico.com/)
- [paintbrush](http://paintbrush.sourceforge.net/)
- [paintcode](http://www.paintcodeapp.com/)
- [pandoc](http://johnmacfarlane.net/pandoc)
- [pandora-one](http://www.pandora.com/)
- [pangu](http://en.pangu.io/)
- [panic-unison](http://panic.com/unison/)
- [panini](http://sourceforge.net/projects/pvqt/)
- [paparazzi](http://derailer.org/paparazzi/)
- [papers](http://www.papersapp.com/papers/)
- [paragon-extfs](http://www.paragon-software.com/home/extfs-mac/)
- [paragon-ntfs](http://www.paragon-software.com/home/ntfs-mac/)
- [parallels](http://www.parallels.com/products/desktop/)
- [paraview](http://www.paraview.org/)
- [parse](https://parse.com)
- [pashua](http://www.bluem.net/en/mac/pashua/)
- [password-gorilla](https://github.com/zdia/gorilla)
- [password-practice](https://mrgeckosmedia.com/applications/info/PasswordPractice)
- [pastor](http://mehlau.net/pastor)
- [path-finder](http://www.cocoatech.com/pathfinder/)
- [paw](http://luckymarmot.com/paw)
- [paye-tools](http://www.hmrc.gov.uk/payerti/payroll/bpt/paye-tools.htm)
- [pcalc](http://www.pcalc.com/index.html)
- [pcsxr](https://pcsxr.codeplex.com)
- [pd-extended](http://puredata.info/downloads/pd-extended)
- [pdfinfo](http://www.sybrex.com/products/macgui/infomanager/)
- [pdfmasher](http://www.hardcoded.net/pdfmasher/)
- [pdfpen](http://smilesoftware.com/PDFpen/index.html)
- [pdfpenpro](http://www.smilesoftware.com/PDFpenPro/index.html)
- [pdfsam](http://www.pdfsam.org/)
- [pdfshaver](https://github.com/tparry/PDFShaver.app)
- [pdftk](http://www.pdflabs.com/tools/pdftk-server/)
- [peepopen](http://topfunky.github.io/PeepOpen/)
- [pemdas-widget](http://www.donkeyengineering.com/pemdaswidget/)
- [pencil](http://pencil.evolus.vn)
- [pentaho-data-integration](http://community.pentaho.com)
- [perian](http://www.perian.org/)
- [pester](http://sabi.net/nriley/software/index.html#pester)
- [petite-chez-scheme](http://www.scheme.com/petitechezscheme.html)
- [pflists](http://www.hanynet.com/pflists/index.html)
- [pg-commander](http://eggerapps.at/pgcommander/)
- [pgadmin3](http://pgadmin.org)
- [pgloader](http://pgloader.io)
- [phantomjs](http://phantomjs.org/)
- [pharo](http://www.pharo-project.org/home)
- [phoenix-slides](http://blyt.net/phxslides)
- [phoenix](https://github.com/sdegutis/Phoenix)
- [phoneclean](http://www.imobie.com/phoneclean/)
- [photoninja](http://www.picturecode.com/index.php)
- [phpstorm](http://www.jetbrains.com/phpstorm/)
- [pi-filler](http://ivanx.com/raspberrypi)
- [pianopub](http://dev.kunugiken.com/Pianopub/)
- [picasa](http://picasa.google.com/)
- [picturesque](http://www.acqualia.com/picturesque/)
- [piezo](http://rogueamoeba.com/piezo/)
- [pinegrow-web-designer](http://pinegrow.com/)
- [pingmenu](https://github.com/kalleboo/PingMenu)
- [pins](http://pinsapp.com/)
- [pinta](http://pinta-project.com/)
- [pivotalbooster](http://pivotalbooster.com/)
- [pixel-check](http://macguitar.me/apps/pixelcheck/)
- [pixel-winch](http://ricciadams.com/projects/pixel-winch)
- [pixelpeeper](http://www.irradiatedsoftware.com/labs)
- [pixelstick](http://plumamazing.com/mac/pixelstick)
- [pixi-paint](http://www.danielx.net/pixel-editor/docs/download)
- [pixlr](https://pixlr.com)
- [placeit](https://placeit.net/)
- [plain-clip](http://www.bluem.net/en/mac/plain-clip)
- [plainview](http://barbariangroup.com/)
- [platypus](http://sveinbjorn.org/platypus)
- [playonmac](http://www.playonmac.com/en)
- [pleasesleep](http://www.dragonone.com/products/macosx/pleasesleep/)
- [plex-home-theater](https://plex.tv)
- [plex-media-server](https://plex.tv/)
- [pliny](http://pliny.cch.kcl.ac.uk)
- [plover](http://stenoknight.com/wiki/Main_Page)
- [plug](http://www.plugformac.com/)
- [plycounter](http://www.plycount.com)
- [pngcommentator](http://www.echomist.co.uk/software/PNGCommentator.html)
- [pngyu](http://nukesaq88.github.io/Pngyu/)
- [poedit](http://www.poedit.net)
- [poison](http://tox.im)
- [pokemon-showdown](http://pokemonshowdown.com)
- [pokerstars](http://www.pokerstars.com/)
- [pokertracker](https://www.pokertracker.com)
- [port-map](http://www.codingmonkeys.de/portmap)
- [porthole](http://getporthole.com/)
- [postbox](http://www.postbox-inc.com/)
- [postgres](http://postgresapp.com/)
- [power-manager-pro](https://www.dssw.co.uk/powermanager)
- [power-manager](https://www.dssw.co.uk/powermanager)
- [powerkey](http://pkamb.github.io/PowerKey/)
- [powerword](http://mac.iciba.com)
- [praat](http://www.fon.hum.uva.nl/praat/)
- [preen](http://anomiesoftware.com/Anomie_Software/Preen.html)
- [pref-setter](http://www.nightproductions.net/prefsetter.html)
- [preference-manager](http://www.digitalrebellion.com/prefman)
- [preferencecleaner](http://www.echomist.co.uk/software/PreferenceCleaner.shtml)
- [prefs-editor](http://www.tempel.org/PrefsEditor)
- [prepros](http://alphapixels.com/prepros/)
- [prey](https://preyproject.com)
- [prezi](http://www.prezi.com/)
- [printrun](https://github.com/kliment/Printrun)
- [prismatik](http://lightpack.tv/)
- [private-eye](http://radiosilenceapp.com/private-eye)
- [private-internet-access](https://www.privateinternetaccess.com)
- [prizmo](http://www.creaceed.com/prizmo)
- [processing](http://processing.org/)
- [programmer-dvorak](http://kaufmann.no/roland/dvorak/)
- [projectlibre](http://www.projectlibre.org/)
- [prolific-usb-serial-driver](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41)
- [propane](http://propaneapp.com/)
- [propresenter](http://www.renewedvision.com/propresenter.php)
- [protege](http://protege.stanford.edu/)
- [provisioning](https://github.com/chockenberry/Provisioning)
- [provisionql](https://github.com/ealeksandrov/ProvisionQL)
- [proxifier](http://www.proxifier.com/mac/)
- [proximity](https://code.google.com/p/reduxcomputing-proximity/)
- [proxpn](http://proxpn.com)
- [ps3-media-server](http://www.ps3mediaserver.org/)
- [psi](http://psi-im.org/)
- [psychopy](http://www.psychopy.org/)
- [punto-switcher](http://punto.yandex.ru)
- [pupil](http://pupil.io/)
- [pusher](https://github.com/noodlewerk/NWPusher)
- [putio-adder](https://github.com/nicoSWD/put.io-adder)
- [puush](http://puush.me/)
- [puzzles](http://www.chiark.greenend.org.uk/~sgtatham/puzzles/)
- [pwnagetool](http://blog.iphone-dev.org/tagged/PwnageTool)
- [pycharm-ce](http://www.jetbrains.com/pycharm)
- [pycharm](http://www.jetbrains.com/pycharm/)

#### Q

- [qbittorrent](http://www.qbittorrent.org)
- [qdesktop](http://qvacua.com)
- [qgis](http://www.kyngchaos.com/software/qgis)
- [qgroundcontrol](http://qgroundcontrol.org)
- [qiyimedia](http://www.iqiyi.com)
- [qlcolorcode](https://code.google.com/p/qlcolorcode/)
- [qlimagesize](https://github.com/Nyx0uf/qlImageSize)
- [qlmarkdown](https://github.com/toland/qlmarkdown)
- [qlprettypatch](https://github.com/atnan/QLPrettyPatch)
- [qlrest](https://github.com/cluther/qlrest)
- [qlstephen](http://whomwah.github.io/qlstephen/)
- [qmind](http://qvacua.com)
- [qq](http://im.qq.com/macqq/index.shtml)
- [qqbrowser](http://browser.qq.com/mac/)
- [qqinput](http://qq.pinyin.cn/)
- [qqmusic](http://y.qq.com)
- [qrfcview](https://saghul.github.io/qrfcview-osx)
- [qrq](http://fkurz.net/ham/qrq.html)
- [qt-creator](http://qt-project.org/)
- [qtspim](http://spimsimulator.sourceforge.net/)
- [quassel-client](http://quassel-irc.org)
- [querious](http://www.araelium.com/querious/)
- [quick-search-box](http://www.google.com/quicksearchbox/)
- [quickcast](http://quickcast.io/)
- [quickhue](https://github.com/danparsons/QuickHue)
- [quicklook-csv](https://github.com/p2/quicklook-csv)
- [quicklook-json](http://www.sagtau.com/quicklookjson.html)
- [quicklook-pfm](https://code.google.com/p/quicklook-pfm/)
- [quicknfo](https://github.com/planbnet/QuickNFO)
- [quickradar](http://www.quickradar.com/)
- [quicksilver](http://qsapp.com/)
- [quiterss](http://quiterss.org/)
- [quotefixformac](https://github.com/robertklep/quotefixformac)
- [qvod-player](http://www.qvodcd.com/)

#### R

- [r-name](http://www.jacek-dom.net/software/R-Name/)
- [r](http://www.r-project.org/)
- [racket](http://racket-lang.org/)
- [radbeacon](http://store.radiusnetworks.com/collections/all/products/radbeacon-config)
- [radiant-player](http://kbhomes.github.io/google-music-mac/)
- [rapidweaver](http://realmacsoftware.com/rapidweaver)
- [raw-photo-processor](http://www.raw-photo-processor.com/RPP/Overview.html)
- [raw-therapee](http://rawtherapee.com)
- [razer-synapse](http://www.razerzone.com/synapse2)
- [razorsql](http://razorsql.com/download_mac.html)
- [rcdefaultapp](http://www.rubicode.com/Software/RCDefaultApp/)
- [rcenvironment](http://www.rubicode.com/Software/RCEnvironment/)
- [rdio](http://www.rdio.com)
- [rdm](http://redisdesktop.com)
- [readefine-desktop](http://readefine.anirudhsasikumar.net/)
- [readytalk](https://www.readytalk.com/)
- [reaper](http://www.reaper.fm/)
- [recordit](http://recordit.co/)
- [recovery-disk-assistant](http://support.apple.com/kb/HT4848)
- [reeddit](http://mac.reedditapp.com)
- [reflector](http://www.airsquirrels.com/reflector/)
- [refresh-finder](http://soderhavet.com/refresh/refresh-finder/)
- [reggy](http://reggyapp.com/)
- [rekordbox](http://rekordbox.com/en/)
- [remonit](http://zef.io/remonit/)
- [remote-desktop-connection](http://www.microsoft.com/en-us/download/details.aspx?id=18140)
- [renamer](http://renamer.com)
- [repetier-host](http://www.repetier.com/)
- [rescuetime](https://www.rescuetime.com)
- [retinacapture](http://www.retinacapture.com)
- [retinizer](http://retinizer.mikelpr.com/)
- [retroshare](http://retroshare.sourceforge.net/)
- [reveal](http://revealapp.com/)
- [rftg](http://keldon.net/rftg/)
- [ridibooks](http://ridibooks.com/support/introduce_appdown)
- [riffworkst4](http://www.sonomawireworks.com/T4/)
- [rightzoom](http://www.blazingtools.com/right_zoom_mac.html)
- [ringtones](http://thelittleappfactory.com/ringtones/)
- [ripit](http://thelittleappfactory.com/ripit/)
- [robomongo](http://robomongo.org)
- [rocks-n-diamonds](http://www.artsoft.org/rocksndiamonds/)
- [royal-tsx](http://www.royaltsx.com)
- [rrootage](http://workram.com/games/rrootage/)
- [rss](http://www.rssapplication.com/)
- [rstudio](http://www.rstudio.com/)
- [rtx](http://www.rtxapp.com/mac/)
- [rubitrack](http://www.rubitrack.com/)
- [rubymine](http://www.jetbrains.com/ruby/)
- [runtastic-connect](https://www.runtastic.com/connect)
- [runtimebrowser](https://github.com/nst/RuntimeBrowser)
- [rust](http://www.rust-lang.org/)
- [rythem](https://github.com/AlloyTeam/Rythem)

#### S

- [sabnzbd](http://sabnzbd.org/)
- [safaritabswitching](https://github.com/rs/SafariTabSwitching)
- [safe-in-cloud](http://www.safe-in-cloud.com)
- [safemonk](https://www.safemonk.com/)
- [sage](http://www.sagemath.org/)
- [sandbox](http://www.mikey-san.net/sandbox/)
- [sandvox](http://www.karelia.com/products/sandvox/)
- [satellite-eyes](http://satelliteeyes.tomtaylor.co.uk/)
- [sauce](https://saucelabs.com/mac)
- [sauerbraten](http://sauerbraten.org)
- [scala-ide](http://scala-ide.org/)
- [scansnap-manager](http://www.fujitsu.com/global/support/computing/peripheral/scanners/software/)
- [scapple](https://www.literatureandlatte.com/scapple.php)
- [schnapps](http://schnappsformac.com/)
- [scilab](https://www.scilab.org)
- [scout](http://mhs.github.io/scout-app/)
- [scratch](http://scratch.mit.edu/scratch2download/)
- [screenflick](http://www.araelium.com/screenflick/)
- [screenflow](http://www.telestream.net/screenflow/)
- [screenhero](http://screenhero.com)
- [screenmailer](http://www.screenmailer.com)
- [screens-connect](https://screensconnect.com)
- [screenstagram](http://screenstagram.s3.amazonaws.com/download.html)
- [screensteps](http://www.bluemangolearning.com/)
- [scribbleton](http://scribbleton.com/)
- [scribus](http://www.scribus.net/canvas/Scribus)
- [scriptql](http://www.kainjow.com/)
- [scrivener](http://literatureandlatte.com/scrivener.php)
- [scroll-reverser](https://pilotmoon.com/scrollreverser/)
- [scrup](https://github.com/rsms/scrup)
- [scummvm](http://scummvm.org/)
- [sdformatter](https://www.sdcard.org)
- [sdrdx](http://fyngyrz.com/?p=915)
- [seafile-client](http://seafile.com/)
- [seamonkey](http://www.seamonkey-project.org/)
- [seashore](http://seashore.sourceforge.net/)
- [second-life-viewer](http://secondlife.com/)
- [secondbar](http://blog.boastr.net/?page_id=79)
- [secrets](http://secrets.blacktree.com)
- [seil](https://pqrs.org/macosx/keyremap4macbook/seil.html.en)
- [selfcontrol](http://selfcontrolapp.com/)
- [selflanguage-self-control](http://selflanguage.org/)
- [semulov](http://www.kainjow.com)
- [send-to-kindle](http://www.amazon.com/gp/sendtokindle/mac)
- [sensiolabsdesktop](http://desktop.sensiolabs.org)
- [sente](http://www.thirdstreetsoftware.com)
- [sequel-pro](http://www.sequelpro.com/)
- [sequential](http://sequentialx.com)
- [serf](http://www.serfdom.io/)
- [serial-tools](http://www.w7ay.net/site/Applications/Serial%20Tools/)
- [serialcloner](http://serialbasics.free.fr/Serial_Cloner.html)
- [servetome](http://zqueue.com/servetome/)
- [serviio](http://serviio.org/)
- [servus](https://servus.io/)
- [sevenzx](http://sixtyfive.xmghosting.com/products/7zx/)
- [shades](http://www.charcoaldesign.co.uk/shades)
- [shadowsocksx](https://github.com/shadowsocks/shadowsocks-iOS/wiki/Shadowsocks-for-OSX-Help)
- [shadowsweeper](http://www.irradiatedsoftware.com/labs/)
- [sharetool](http://bainsware.com/)
- [shelf-leveler](https://mrgeckosmedia.com/applications/info/Shelf-Leveler)
- [shiftit](https://github.com/fikovnik/ShiftIt)
- [shimo](http://www.chungwasoft.com/shimo/)
- [shiori](http://aki-null.net/shiori/)
- [shoes](http://shoesrb.com/)
- [shortcat](http://shortcatapp.com/)
- [shotcut](http://www.shotcut.org/)
- [shuttle](http://fitztrev.github.io/shuttle/)
- [sickbeard-anime](http://sickbeard.lad1337.de/)
- [sickbeard](http://sickbeard.lad1337.de/)
- [sidekick](http://oomphalot.com/sidekick/)
- [sidestep](http://chetansurpur.com/projects/sidestep)
- [sidplay](http://www.sidmusic.org/sidplay/mac/)
- [sigil](http://code.google.com/p/sigil/)
- [silo](http://nevercenter.com/silo/)
- [silverback](http://silverbackapp.com/)
- [silverlight](http://www.microsoft.com/silverlight/)
- [simon](http://www.dejal.com/simon/)
- [simpholders](http://simpholders.com/)
- [simple-comic](http://dancingtortoise.com/simplecomic/)
- [simple-css](http://www.hostm.com/css)
- [simplecap](http://xcatsan.com/simplecap-en/)
- [simplefloatingclock](http://www.splook.com/Software/Simple_Floating_Clock.html)
- [simpless](http://wearekiss.com/simpless)
- [simplesynth](http://notahat.com/simplesynth/)
- [simpletag](http://sourceforge.net/projects/simpletag/)
- [simulator-folders](http://nimbleworks.co.uk/blog/simulator-folders/)
- [sitesucker](http://www.sitesucker.us/mac/mac.html)
- [sixtyforce](http://sixtyforce.com/)
- [sizeup](http://www.irradiatedsoftware.com/sizeup/index.html)
- [sizzlingkeys](http://www.yellowmug.com/sk4it/)
- [sketch-tool](http://bohemiancoding.com/sketch/tool/)
- [sketch-toolbox](http://sketchtoolbox.com)
- [sketch](http://www.bohemiancoding.com/sketch/)
- [sketchup](http://www.sketchup.com/intl/en/)
- [sketchupviewer](http://www.sketchup.com/intl/en/)
- [skim](http://skim-app.sourceforge.net/)
- [skitch](http://evernote.com/skitch/)
- [skreenics](https://code.google.com/p/skreenics/)
- [skydrive](http://windows.microsoft.com/en-us/skydrive/download)
- [skype](http://www.skype.com)
- [slack](http://slack.com)
- [slate](https://github.com/jigish/slate)
- [sleep-monitor](https://www.dssw.co.uk/sleepmonitor)
- [slender](http://dragonforged.com/slender/)
- [slic3r](http://slic3r.org/)
- [slice](http://sliceeq.com/)
- [slicy](http://macrabbit.com/slicy/)
- [slidemode](http://teaksoftware.com/app/slidemode)
- [slimbatterymonitor](http://www.orange-carb.org/SBM/)
- [slimboat](http://www.slimboat.com)
- [slingshot](http://www.airsquirrels.com/slingshot/)
- [sloth](http://sveinbjorn.org/sloth)
- [slowy](http://slowyapp.com/)
- [smaller](http://smallerapp.com/)
- [smartgithg](http://www.syntevo.com)
- [smartloader](http://picturelife.com)
- [smartsynchronize](http://www.syntevo.com)
- [smcfancontrol](http://www.eidac.de/?p=243)
- [smoothmouse](http://smoothmouse.com)
- [snagit](http://www.techsmith.com/snagit.html)
- [snes9x](http://www.snes9x.com/)
- [snip](http://snip.qq.com/)
- [snippet-edit](http://cocoaholic.com/snippet_edit/)
- [snippets](http://snippets.me/)
- [sococo](http://www.sococo.com)
- [sofortbild](http://www.sofortbildapp.com/)
- [sogouinput](http://pinyin.sogou.com/mac/)
- [soleol](http://eduo.info/apps/soleol)
- [sonic-visualiser](http://www.sonicvisualiser.org/)
- [sonora](http://getsonora.com/)
- [sonos](http://www.sonos.com/)
- [sopcast](http://www.sopcast.org)
- [sophos-anti-virus-home-edition](http://www.sophos.com/en-us/products/free-tools/sophos-antivirus-for-mac-home-edition.aspx/)
- [soqlxplorer](http://www.pocketsoap.com/osx/soqlx/)
- [soulseek](http://www.soulseekqt.net/)
- [soulver](http://www.acqualia.com/soulver/)
- [soundcleod](http://salomvary.github.io/soundcleod/)
- [soundflower](https://code.google.com/p/soundflower/)
- [soundnote](https://mrgeckosmedia.com/applications/info/SoundNote)
- [sourcetree](http://www.sourcetreeapp.com/)
- [spacemonkey](https://www.spacemonkey.com)
- [spacious](http://www.iospirit.com/products/spacious)
- [spark-inspector](http://sparkinspector.com/)
- [spark](http://www.shadowlab.org/softwares/spark.php)
- [sparkbox](http://www.icyblaze.com/sparkbox)
- [sparkle](http://sparkle-project.org/)
- [sparkleshare](http://sparkleshare.org/)
- [sparrow](http://www.sparrowmailapp.com/)
- [spectacle](http://spectacleapp.com/)
- [speedcrunch](http://www.speedcrunch.org)
- [speedlimit](http://mschrag.github.io/)
- [speedtao](http://www.speedtao.net/)
- [spek](http://spek.cc)
- [spideroak](http://spideroak.com)
- [spillo](http://bananafishsoftware.com/products/spillo/)
- [spirited-away](http://drikin.com/2010/11/spirited-away.html)
- [splashtop-personal](http://www.splashtop.com/personal)
- [splashtop-streamer](http://www.splashtop.com/downloads)
- [splayerx](https://bitbucket.org/Tomasen/splayerx/wiki/Home)
- [spotdox](http://spotdox.com/get-started/)
- [spotifree](http://spotifree.gordinskiy.com)
- [spotify-menubar](http://lifeupnorth.co.uk/Spotify-Menubar/)
- [spotify-notifications](http://spotify-notifications.citruspi.io/)
- [spotify](https://www.spotify.com)
- [spyder](https://code.google.com/p/spyderlib/)
- [sqleditor](http://www.malcolmhardie.com/sqleditor/)
- [sqlexplorer](http://eclipsesql.sourceforge.net/)
- [sqlite-database-browser](http://sqlitebrowser.org)
- [sqlite-professional](https://www.sqlitepro.com)
- [sqlitestudio](http://sqlitestudio.pl)
- [squidman](http://squidman.net/squidman/)
- [squire](http://squireapp.com)
- [squirrel](https://github.com/lotem/squirrel)
- [sqwiggle](https://www.sqwiggle.com)
- [srclib](https://srclib.org/)
- [sshfs](http://osxfuse.github.io/)
- [ssx](http://chris.schleifer.net/ssX/index.cgi/index.html)
- [stackato](http://docs.stackato.com/user/client/index.html)
- [stackroom](http://www.geocities.jp/aromaticssoft/stackroom/index.html)
- [startninja](http://www.allvu.com/index.php/products/startninja.html)
- [stay](http://cordlessdog.com/stay/)
- [steam](http://store.steampowered.com/about/)
- [steermouse](http://plentycom.jp/en/steermouse/)
- [stella](http://stella.sourceforge.net)
- [stellarium](http://stellarium.org)
- [stockbarjp](http://midnightsuyama.org)
- [streamtools](https://github.com/nytlabs/streamtools)
- [strongvpn-client](http://strongvpn.com/vpnclient.shtml)
- [sts](http://spring.io/tools/sts)
- [subclassed-mnemosyne](http://www.subclassed.com/apps/mnemosyne/details)
- [subl](https://github.com/dhoulb/subl)
- [subler](https://code.google.com/p/subler/)
- [sublercli](https://code.google.com/p/subler/)
- [sublime-text](http://www.sublimetext.com/2)
- [subnetcalc](http://subnetcalc.free.fr/)
- [subsmarine](http://www.cocoawithchurros.com/subsmarine.php)
- [subsurface](http://subsurface.hohndel.org/)
- [subtitle-master](http://subtitlemaster.com/)
- [subtitles](http://subtitlesapp.com)
- [sunlogin-remote](http://sunlogin.oray.com)
- [super-otr](http://apfel-a.macbay.de/super-otr/)
- [supercollider](http://supercollider.sourceforge.net/)
- [superduper](http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html)
- [supersync](http://supersync.com/)
- [supertuxkart](http://supertuxkart.sourceforge.net)
- [surplusmeter](http://www.skoobysoft.com/utilities/utilities.html#surplusmeter)
- [suspicious-package](http://www.mothersruin.com/software/SuspiciousPackage/)
- [svnx](https://code.google.com/p/svnx/)
- [sweet-home3d](http://www.sweethome3d.com/)
- [swingfish](http://cloakedcode.com/swingfish.html)
- [swinsian](http://swinsian.com)
- [switchresx](http://www.madrau.com)
- [switchup](http://www.irradiatedsoftware.com/switchup/)
- [synergy](http://synergy-foss.org/)
- [synology-assistant](http://www.synology.com/)
- [synology-cloud-station](http://www.synology.com/)
- [synology-photo-station-uploader](http://www.synology.com/)
- [synthesia](http://www.synthesiagame.com)

#### T

- [tabula](http://tabula.nerdpower.org)
- [tactor](http://onflapp.wordpress.com/tactor/)
- [tag](http://sbooth.org/Tag/)
- [tagalicious](http://thelittleappfactory.com/tagalicious/)
- [tagger](http://bilalh.github.io/projects/tagger/)
- [tagoman](http://onflapp.wordpress.com/tagoman)
- [tagr](http://www.entwicklungsfreu.de/tagr.html)
- [tagspaces](http://www.tagspaces.org)
- [tapaal](http://www.tapaal.net)
- [taskpaper](http://www.hogbaysoftware.com/products/taskpaper)
- [tau](http://tau.uoregon.edu/)
- [tcpblock](http://tcpblock.wordpress.com/)
- [td-agent](http://www.fluentd.org/)
- [td-toolbelt](http://toolbelt.treasuredata.com/)
- [teamspeak-client](http://www.teamspeak.com/)
- [teamviewer](http://www.teamviewer.com/)
- [teamviz](http://www.teamviz.com/)
- [teensy](http://pjrc.com/teensy/loader_mac.html)
- [teeworlds](https://www.teeworlds.com/)
- [telegram](https://vk.com/telegram_osx)
- [telephone](https://code.google.com/p/telephone/)
- [teleport](http://www.abyssoft.com/software/teleport/)
- [testflight](http://testflightapp.com)
- [tex-live-utility](https://code.google.com/p/mactlmgr/)
- [texmacs](http://www.texmacs.org/)
- [texmaker](http://www.xm1math.net/texmaker)
- [texnicle](http://www.bobsoft-mac.de/texnicle/texnicle.html)
- [texpad](https://www.texpadapp.com/osx)
- [texshop](http://pages.uoregon.edu/koch/texshop)
- [texstudio](http://texstudio.sourceforge.net/)
- [textadept](http://foicica.com/textadept/)
- [textexpander](http://www.smilesoftware.com/TextExpander/index.html)
- [textmate](http://macromates.com/)
- [textroom](https://code.google.com/p/textroom/)
- [texts](http://www.texts.io)
- [textsoap](http://www.unmarked.com/textsoap/)
- [texturepacker](http://www.codeandweb.com/texturepacker)
- [textwrangler](http://www.barebones.com/products/textwrangler)
- [tftpserver](http://ww2.unime.it/flr/tftpserver/)
- [thaiwitter](https://tw3.herokuapp.com/)
- [the-archive-browser](http://archivebrowser.c3.cx)
- [the-brain](http://www.thebrain.com/)
- [the-escapers-flux](http://www.theescapers.com/flux/)
- [the-hit-list](http://www.potionfactory.com/thehitlist)
- [the-unarchiver](http://unarchiver.c3.cx/)
- [theremin](https://github.com/TheStalwart/Theremin)
- [thetube](http://www.equinux.com/us/products/thetube/index.html)
- [things](http://culturedcode.com/things/)
- [thinkorswim](http://mediaserver.thinkorswim.com/installer/install.html#macosx)
- [thirty-three-rpm](http://www.edenwaith.com/products/33rpm/)
- [thisservice](http://wafflesoftware.net/thisservice/)
- [thong](http://thong.fousa.be/)
- [thumbsup](http://www.devontechnologies.com/products/freeware.html#c966)
- [thunder](http://mac.xunlei.com/)
- [thunderbird](http://www.mozilla.org/en-US/thunderbird/)
- [thyme](http://joaomoreno.github.io/thyme/)
- [tickets](http://www.irradiatedsoftware.com/tickets/)
- [tiddlywiki](https://github.com/Jermolene/TiddlyDesktop)
- [tikz-editor](https://github.com/fredokun/TikZ-Editor)
- [tiled](http://www.mapeditor.org/)
- [tilemill](http://www.mapbox.com/tilemill/)
- [time-out](http://www.dejal.com/timeout/)
- [time-sink](http://manytricks.com/timesink/)
- [time-tracker](https://code.google.com/p/time-tracker-mac)
- [timemachineeditor](http://timesoftware.free.fr/timemachineeditor/)
- [timemachinescheduler](http://www.klieme.com/TimeMachineScheduler.html)
- [timings](http://mediaatelier.com/Timings)
- [tinkertool](http://www.bresink.com/osx/TinkerTool.html)
- [tinygrab](http://www.tinygrab.com)
- [tinyumbrella](http://blog.firmwareumbrella.com/)
- [titanium-studio](https://my.appcelerator.com/resources)
- [tk-suite-client](http://agfeo.de/agfeo_web/hp3.nsf/lu/2064)
- [toad-mac](http://www.toadworld.com/products/toad-mac-edition/default.aspx)
- [toau](http://toauapp.com)
- [todoist](https://todoist.com)
- [todos](http://dbachrach.com/opensoft/index.php?page=Todos)
- [tofu](http://amarsagoo.info/tofu/)
- [toggldesktop](https://www.toggl.com)
- [tokaido](https://github.com/tokaido/tokaidoapp/releases)
- [tomahawk](http://www.tomahawk-player.org/)
- [tomighty](http://www.tomighty.org/)
- [tongbu](http://www.tongbu.com)
- [tonido](http://www.tonido.com/)
- [toodledo](https://www.toodledo.com/tools/mac_menubar.php)
- [torbrowser](https://www.torproject.org/projects/torbrowser.html)
- [torpedo](https://usetorpedo.com)
- [tortoisehg](http://tortoisehg.bitbucket.org/)
- [torustrooper](http://workram.com/games/)
- [totalfinder](http://totalfinder.binaryage.com)
- [totals](http://www.kedisoft.com/totals/)
- [totalspaces](http://totalspaces.binaryage.com/)
- [totalterminal](http://totalterminal.binaryage.com)
- [tower](http://www.git-tower.com/)
- [trailer](http://dev.housetrip.com/trailer/)
- [trailrunner](http://trailrunnerx.com/)
- [traktable](http://yo-han.github.io/Traktable/)
- [transmission-remote-gui](https://code.google.com/p/transmisson-remote-gui/)
- [transmission](http://www.transmissionbt.com/)
- [transmit](http://panic.com/transmit)
- [treemaker](http://www.langorigami.com/science/computational/treemaker/treemaker.php)
- [treesheets](http://strlen.com/treesheets/)
- [tresorit](http://tresorit.com)
- [tribler](http://www.tribler.org)
- [trickster](http://www.apparentsoft.com/trickster/)
- [trim-enabler](http://www.cindori.org/software/trimenabler/)
- [truecrypt](http://truecrypt.org/)
- [tubbler](http://www.celmaro.com/tubbler)
- [tuneinstructor](http://www.tune-instructor.de/com/start.html)
- [tunewiki](http://www.tunewiki.com/)
- [tunnelbear](https://www.tunnelbear.com/)
- [tunnelblick](https://code.google.com/p/tunnelblick/)
- [tuxguitar](http://www.tuxguitar.com.ar/)
- [tv-browser](http://www.tvbrowser.org/index.php?setlang=en)
- [tv-show-tracker](http://www.pixelperfectwidgets.com/)
- [tvmobili](http://www.tvmobili.com/)
- [tvshows](http://tvshowsapp.com/)
- [twentytwo](https://github.com/marcw/twentytwo)
- [twindocs](https://www.twindocs.com)
- [twine](http://twinery.org/)
- [twitterrific](http://twitterrific.com/mac)
- [typewriter](http://llllll.li/typewriter)
- [typinator](http://www.ergonis.com/)

#### U

- [uber-network-fuser](http://nickapedia.com/2012/01/10/breaking-new-ground-an-uber-tool-for-the-mac/)
- [uberpov](http://megapov.inetart.net/uberpov_mac/index.html)
- [ubersicht](http://tracesof.net/uebersicht)
- [ubuntu-one](http://one.ubuntu.com)
- [ukelele](http://scripts.sil.org/ukelele)
- [ultrastardeluxe](http://ultrastardx.sourceforge.net/)
- [uncrustifyx](https://github.com/ryanmaxwell/UncrustifyX)
- [undercover](http://www.orbicule.com/undercover/mac/)
- [unetbootin](http://unetbootin.sourceforge.net/)
- [unicodechecker](http://earthlingsoft.net/UnicodeChecker/)
- [unified-remote](http://www.unifiedremote.com)
- [uninstallpkg](http://www.corecode.at/uninstallpkg/)
- [unison](http://www.cis.upenn.edu/~bcpierce/unison/)
- [unity-web-player](https://unity3d.com/webplayer)
- [unity3d](http://unity3d.com/unity/)
- [universal-media-server](www.universalmediaserver.com)
- [unpkg](http://www.timdoug.com/unpkg/)
- [unrarx](http://www.unrarx.com)
- [usb-overdrive](http://www.usboverdrive.com/)
- [utc-menu-clock](https://github.com/netik/UTCMenuClock)
- [utopia](http://utopiadocs.com/)
- [utorrent](http://www.utorrent.com/)

#### V

- [vagrant-manager](http://vagrantmanager.com/)
- [vagrant](http://www.vagrantup.com)
- [valentina-studio](http://www.valentina-db.com/)
- [vassal](http://www.vassalengine.org)
- [versions](http://versionsapp.com/)
- [vessel](http://awvessel.github.io)
- [viber](http://viber.com)
- [vico](http://www.vicoapp.com)
- [videomonkey](http://videomonkey.org/)
- [videospec](http://videospec.free.fr/english/)
- [vienna](http://www.vienna-rss.org)
- [vimediamanager](http://mariusth.channelwood.org/vimediamanager/)
- [vimr](http://vimr.org/)
- [vine-server](http://www.testplant.com/products/vine/vine-server/)
- [vinoteka](http://www.vinotekasoft.com/)
- [virtaal](http://virtaal.translatehouse.org/)
- [virtualbox](http://www.virtualbox.org)
- [virtualhostx](http://clickontyler.com/virtualhostx/)
- [vi
Download .txt
gitextract_tlrt29kp/

├── .eslintrc.cjs
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── .node-version
├── .prettierignore
├── .prettierrc
├── .ruby-version
├── .vscode/
│   ├── extensions.json
│   ├── launch.json
│   └── markdown.code-snippets
├── 101.md
├── AGENTS.md
├── CONTRIBUTING.md
├── Gemfile
├── README.md
├── _docs/
│   └── writing-guidelines.md
├── _includes/
│   └── common/
│       ├── moment_format.md
│       └── strftime_format.md
├── absinthe.md
├── activeadmin.md
├── adb.md
├── analytics.js.md
├── analytics.md
├── angularjs.md
├── animated_gif.md
├── ansi.md
├── ansible-examples.md
├── ansible-guide.md
├── ansible-modules.md
├── ansible-roles.md
├── ansible.md
├── appcache.md
├── applescript.md
├── applinks.md
├── arel.md
├── astro.config.mjs
├── atom.md
├── awesome-redux.md
├── awscli.md
├── backbone.md
├── bash.md
├── blessed.md
├── bluebird.md
├── bolt.md
├── bookshelf.md
├── bootstrap.md
├── browser-sync.md
├── browserify.md
├── bulma.md
├── bundler.md
├── c_preprocessor.md
├── camp.md
├── canvas.md
├── capybara.md
├── cask-index.md
├── chai.md
├── cheatsheet-styles.md
├── chef.md
├── chunky_png.md
├── cidr.md
├── circle.md
├── claude-code.md
├── clip.md
├── co.md
├── command_line.md
├── commander.js.md
├── composer.md
├── cordova.md
├── cron.md
├── csharp7.md
├── css-antialias.md
├── css-flexbox.md
├── css-grid.md
├── css-system-font-stack.md
├── css-tricks.md
├── css.md
├── cssnext.md
├── curl.md
├── datetime.md
├── deis.md
├── deku.md
├── deku@1.md
├── devise.md
├── divshot.md
├── do.md
├── docker-compose.md
├── docker.md
├── dockerfile.md
├── dom-range.md
├── dom-selection.md
├── editorconfig.md
├── elixir-metaprogramming.md
├── elixir.md
├── emacs.md
├── ember.md
├── emmet.md
├── enzyme.md
├── enzyme@2.md
├── es6.md
├── ets.md
├── expectjs.md
├── express.md
├── exunit.md
├── factory_bot.md
├── fastify.md
├── ffaker.md
├── ffmpeg.md
├── figlet.md
├── find.md
├── firebase.md
├── firefox.md
├── fish-shell.md
├── flashlight.md
├── flow.md
├── flux.md
├── flynn.md
├── freenode.md
├── frequency-separation-retouching.md
├── gh-pages.md
├── git-branch.md
├── git-extras.md
├── git-log-format.md
├── git-log.md
├── git-revisions.md
├── git-tricks.md
├── gnupg.md
├── go.md
├── goby.md
├── google-webfonts.md
├── google_analytics.md
├── graphql.md
├── gremlins.md
├── grep.md
├── gulp.md
├── haml.md
├── handlebars.js.md
├── harvey.js.md
├── heroku.md
├── hledger.md
├── homebrew.md
├── html-email.md
├── html-input.md
├── html-meta.md
├── html-microformats.md
├── html-share.md
├── html.md
├── http-status.md
├── httpie.md
├── ie.md
├── ie_bugs.md
├── imagemagick.md
├── immutable.js.md
├── index.md
├── index@2016.md
├── inkscape.md
├── ios-provision.md
├── jade.md
├── jasmine.md
├── jekyll-github.md
├── jekyll.md
├── jest.md
├── jinja.md
├── jinja2.md
├── jquery-cdn.md
├── jquery.md
├── js-appcache.md
├── js-array.md
├── js-date.md
├── js-fetch.md
├── js-lazy.md
├── js-model.md
├── js-speech.md
├── jscoverage.md
├── jsdoc.md
├── jshint.md
├── knex.md
├── koa.md
├── kotlin.md
├── kramdown.md
├── layout-thrashing.md
├── ledger-csv.md
├── ledger-examples.md
├── ledger-format.md
├── ledger-periods.md
├── ledger-query.md
├── ledger.md
├── less.md
├── licenses.md
├── linux.md
├── lodash.md
├── lua.md
├── machinist.md
├── macos-mouse-acceleration.md
├── make-assets.md
├── makefile.md
├── mako.md
├── man.md
├── markdown.md
├── meow.md
├── meta-tags.md
├── middleman.md
├── minimist.md
├── minitest.md
├── mixpanel.md
├── mobx.md
├── mocha-blanket.md
├── mocha-html.md
├── mocha-tdd.md
├── mocha.md
├── modella.md
├── modernizr.md
├── moment.md
├── mysql.md
├── ncftp.md
├── netlify.toml
├── nock.md
├── nocode.md
├── nodejs-assert.md
├── nodejs-fs.md
├── nodejs-path.md
├── nodejs-process.md
├── nodejs-stream.md
├── nodejs.md
├── nopt.md
├── npm.md
├── org-mode.md
├── osx.md
├── package-json.md
├── package.json
├── package.md
├── packs.md
├── pacman.md
├── parsimmon.md
├── parsley.md
├── pass.md
├── passenger.md
├── perl-pie.md
├── ph-food-delivery.md
├── phoenix-conn.md
├── phoenix-ecto.md
├── phoenix-ecto@1.2.md
├── phoenix-ecto@1.3.md
├── phoenix-migrations.md
├── phoenix-routing.md
├── phoenix.md
├── phoenix@1.2.md
├── plantuml.md
├── playwright.config.ts
├── pm2.md
├── polyfill.io.md
├── postcss.config.js
├── postgresql-json.md
├── postgresql.md
├── premailer.md
├── projectionist.md
├── promise.md
├── pry.md
├── psdrb.md
├── public/
│   ├── _headers
│   ├── _redirects
│   └── robots.txt
├── pug.md
├── python.md
├── qjs.md
├── qunit.md
├── rack-test.md
├── ractive.md
├── rails-controllers.md
├── rails-forms.md
├── rails-helpers.md
├── rails-i18n.md
├── rails-migrations.md
├── rails-models.md
├── rails-plugins.md
├── rails-routes.md
├── rails-tricks.md
├── rails.md
├── rake.md
├── rbenv.md
├── rclone.md
├── rdoc.md
├── react-router.md
├── react.md
├── react@0.14.md
├── redux.md
├── regexp.md
├── rename.md
├── resolutions.md
├── rest-api.md
├── riot.md
├── rollup.md
├── ronn.md
├── rspec-rails.md
├── rspec.md
├── rst.md
├── rsync.md
├── rtorrent.md
├── ruby.md
├── ruby21.md
├── rubygems.md
├── sass.md
├── saucelabs.md
├── scp.md
├── screen.md
├── sed.md
├── semver.md
├── sequel.md
├── sequelize.md
├── sh-pipes.md
├── sh.md
├── shelljs.md
├── siege.md
├── simple_form.md
├── sinon-chai.md
├── sinon.md
├── sketch.md
├── slim.md
├── social-images.md
├── spacemacs.md
├── spine.md
├── spreadsheet.md
├── sql-join.md
├── src/
│   ├── analytics/
│   │   ├── CloudflareAnalytics.astro
│   │   └── GoogleAnalytics.astro
│   ├── components/
│   │   ├── BaseLayout.astro
│   │   ├── SEO/
│   │   │   └── SEO.astro
│   │   ├── SocialList.astro
│   │   ├── TopNav.astro
│   │   ├── V2017/
│   │   │   ├── CarbonBox.astro
│   │   │   └── PushButton.astro
│   │   ├── V2017Home/
│   │   │   ├── Announcements.astro
│   │   │   ├── FeaturedPages.astro
│   │   │   └── PageListItem.astro
│   │   ├── V2017Sheet/
│   │   │   ├── CommentsArea.astro
│   │   │   ├── NoticeBox.astro
│   │   │   ├── RelatedPostItem.astro
│   │   │   ├── RelatedPosts.astro
│   │   │   ├── SearchFooter.astro
│   │   │   ├── SearchForm.astro
│   │   │   └── SearchForm.script.ts
│   │   ├── V2017Sheet.astro
│   │   └── gaEnabled.tsx
│   ├── config.ts
│   ├── env.d.ts
│   ├── lib/
│   │   ├── domutils/
│   │   │   └── onScrollVisible.ts
│   │   ├── fuseSearch/
│   │   │   ├── __snapshots__/
│   │   │   │   └── fuseSearch.test.ts.snap
│   │   │   ├── fuseSearch.test.ts
│   │   │   └── fuseSearch.ts
│   │   ├── kramdown.ts
│   │   ├── links.ts
│   │   ├── page/
│   │   │   ├── accessors.ts
│   │   │   └── queries.ts
│   │   ├── page.test.ts
│   │   ├── page.ts
│   │   ├── render.test.ts
│   │   ├── render.ts
│   │   └── seo/
│   │       ├── __snapshots__/
│   │       │   └── seo.test.ts.snap
│   │       ├── jsonJd.test.ts
│   │       ├── jsonLd.ts
│   │       ├── seo.test.ts
│   │       └── seo.ts
│   ├── pages/
│   │   ├── 404.astro
│   │   ├── [...slug].astro
│   │   ├── __tests__/
│   │   │   ├── searchindex.json.test.ts
│   │   │   └── sitemap.xml.test.ts
│   │   ├── index.astro
│   │   ├── searchindex.json.ts
│   │   ├── sitemap.xml.ts
│   │   └── test_scenarios/
│   │       └── seo_tags_test.astro
│   ├── ruby/
│   │   ├── cache_kramdown.rb
│   │   ├── kramdown.rb
│   │   ├── renderer.rb
│   │   └── renderer.test.rb
│   ├── sass/
│   │   ├── 2017/
│   │   │   ├── _utils.scss
│   │   │   ├── base/
│   │   │   │   └── prism_line_highlight.scss
│   │   │   ├── components/
│   │   │   │   ├── announcements-item.scss
│   │   │   │   ├── announcements-list.scss
│   │   │   │   ├── autocomplete.scss
│   │   │   │   ├── back-button.scss
│   │   │   │   ├── comments-area.scss
│   │   │   │   ├── comments-details.scss
│   │   │   │   ├── comments-section.scss
│   │   │   │   ├── h2-section.scss
│   │   │   │   ├── h3-section-list.scss
│   │   │   │   ├── h3-section.scss
│   │   │   │   ├── headline-pub.scss
│   │   │   │   ├── hint-mark.scss
│   │   │   │   ├── home-button.scss
│   │   │   │   ├── intro-content.scss
│   │   │   │   ├── main-heading.scss
│   │   │   │   ├── missing-message.scss
│   │   │   │   ├── notice-box.scss
│   │   │   │   ├── page-actions.scss
│   │   │   │   ├── pages-list.scss
│   │   │   │   ├── pre-footer.scss
│   │   │   │   ├── push-button.scss
│   │   │   │   ├── related-post-item.scss
│   │   │   │   ├── related-post-list.scss
│   │   │   │   ├── related-posts-area.scss
│   │   │   │   ├── related-posts-callout.scss
│   │   │   │   ├── related-posts-group.scss
│   │   │   │   ├── related-posts-section.scss
│   │   │   │   ├── search-box.scss
│   │   │   │   ├── search-footer.scss
│   │   │   │   ├── top-nav.scss
│   │   │   │   └── top-sheet.scss
│   │   │   ├── markdown/
│   │   │   │   ├── a-em.scss
│   │   │   │   ├── code.scss
│   │   │   │   ├── headings.scss
│   │   │   │   ├── p.scss
│   │   │   │   ├── table.scss
│   │   │   │   └── ul.scss
│   │   │   ├── placeholders/
│   │   │   │   └── push-button.scss
│   │   │   ├── utils/
│   │   │   │   ├── _font-size.scss
│   │   │   │   ├── _gutter.scss
│   │   │   │   ├── _heading-style.scss
│   │   │   │   ├── _section-gutter.scss
│   │   │   │   └── _section-with-container.scss
│   │   │   └── variables.scss
│   │   ├── full.scss
│   │   └── vendor/
│   │       ├── ionicons-inline/
│   │       │   └── ionicons.scss
│   │       └── modularscale/
│   │           └── _modularscale.scss
│   ├── scripts/
│   │   └── v2017/
│   │       ├── _utils.scss
│   │       ├── behaviors_2/
│   │       │   ├── anchors.js
│   │       │   ├── dismiss.js
│   │       │   ├── dismissable.js
│   │       │   ├── disqus.js
│   │       │   └── no-preview.js
│   │       └── helpers/
│   │           ├── data.js
│   │           ├── dismiss.js
│   │           ├── inject_disqus.js
│   │           ├── preview.js
│   │           ├── qs.js
│   │           └── store.js
│   ├── styles/
│   │   └── CommonStyles.ts
│   └── types/
│       ├── JsonLdDocument.ts
│       └── SheetFrontmatter.ts
├── stencil.md
├── stimulus-reflex.md
├── strftime.md
├── stylus.md
├── sublime-text.md
├── superagent.md
├── tabular.md
├── tailwind.config.mjs
├── tape.md
├── tar.md
├── test/
│   ├── basicPage.e2e.ts
│   ├── e2eUtils.ts
│   └── index.e2e.ts
├── tests/
│   ├── basic.md
│   └── keywords_test.md
├── textile.md
├── tig.md
├── tmux.md
├── tomdoc.md
├── top.md
├── travis.md
├── tsconfig.json
├── typescript.md
├── ubuntu.md
├── umdjs.md
├── underscore-string.md
├── unicode.md
├── vagrant.md
├── vagrantfile.md
├── vainglory.md
├── vim-diff.md
├── vim-digraphs.md
├── vim-easyalign.md
├── vim-help.md
├── vim-rails.md
├── vim-unite.md
├── vim.md
├── vimscript-functions.md
├── vimscript-snippets.md
├── vimscript.md
├── virtual-dom.md
├── vite.config.js
├── vows.md
├── vscode.md
├── vue.md
├── vue@1.0.28.md
├── watchexec.md
├── watchman.md
├── web-workers.md
├── webpack.md
├── weechat.md
├── weinre.md
├── wip/
│   ├── intl-datetime.md
│   └── php.md
├── xpath.md
├── yaml.md
├── yargs.md
├── yarn.md
├── yum.md
├── znc.md
├── zombie.md
└── zsh.md
Download .txt
SYMBOL INDEX (80 symbols across 32 files)

FILE: src/components/V2017Sheet/SearchForm.script.ts
  function setup (line 4) | async function setup(input: HTMLInputElement) {

FILE: src/lib/domutils/onScrollVisible.ts
  function onScrollVisible (line 5) | function onScrollVisible(element: HTMLElement, callback: () => void) {

FILE: src/lib/fuseSearch/fuseSearch.test.ts
  function runTest (line 31) | function runTest({ label, query }: { label: string; query: string }) {

FILE: src/lib/fuseSearch/fuseSearch.ts
  type ExternalSearchData (line 8) | type ExternalSearchData = {
  type Row (line 13) | type Row = { title: string; slug: string }
  type FuseIndex (line 15) | type FuseIndex = Fuse.FuseIndex<Row>
  type PartialSheetPage (line 18) | type PartialSheetPage = {
  function buildFuseIndex (line 27) | function buildFuseIndex(pages: Record<string, PartialSheetPage>) {
  function fetchFuse (line 38) | async function fetchFuse() {
  function parseFuse (line 44) | function parseFuse(data: ExternalSearchData) {

FILE: src/lib/kramdown.ts
  type KramdownResult (line 5) | type KramdownResult = {
  function renderKramdown (line 13) | async function renderKramdown(input: string): Promise<KramdownResult> {
  function renderKramdownFromCache (line 21) | async function renderKramdownFromCache(
  function renderKramdownJIT (line 39) | function renderKramdownJIT(input: string): Promise<KramdownResult> {

FILE: src/lib/links.ts
  function getEditLink (line 4) | function getEditLink(page: { slug: string } | null | undefined) {
  function getUrlFromPage (line 9) | function getUrlFromPage(

FILE: src/lib/page.ts
  type SheetPage (line 8) | type SheetPage = {
  class FrontmatterValidationError (line 14) | class FrontmatterValidationError extends Error {
    method constructor (line 17) | constructor(message: string, options: ErrorOptions & { filePath: strin...
  function getPages (line 27) | async function getPages(): Promise<Record<string, SheetPage>> {
  function mapGlobToPages (line 48) | function mapGlobToPages(

FILE: src/lib/page/accessors.ts
  function hasTag (line 12) | function hasTag(page: SheetPage, tagName: string): boolean {
  function isListed (line 22) | function isListed(page: SheetPage): boolean {

FILE: src/lib/page/queries.ts
  type Category (line 5) | type Category = {
  function getPagesByCategory (line 15) | function getPagesByCategory(pages: Record<string, SheetPage>) {
  function getRecentPages (line 40) | function getRecentPages(
  function getFeaturedPages (line 56) | function getFeaturedPages(
  function getTopPages (line 72) | function getTopPages(
  function getRelatedPages (line 91) | function getRelatedPages(
  function compare (line 111) | function compare<T>(

FILE: src/lib/render.ts
  constant PRISM_CONFIG (line 8) | const PRISM_CONFIG = {
  constant REHYPE_SECTIONIZE_CONFIG (line 25) | const REHYPE_SECTIONIZE_CONFIG = [
  function render (line 68) | async function render(input: string): Promise<{ html: string }> {
  function addInitialH2 (line 78) | function addInitialH2(html: string): string {
  function addH3s (line 86) | function addH3s(html: string): string {
  function removeBlankHeadings (line 96) | function removeBlankHeadings(html: string): string {
  function processRehype (line 104) | async function processRehype(inputHtml: string): Promise<string> {

FILE: src/lib/seo/jsonLd.ts
  function getJSONLDsForPage (line 5) | function getJSONLDsForPage(page: {

FILE: src/lib/seo/seo.test.ts
  function runTest (line 32) | function runTest({ title, input }: { title: string; input: any }) {

FILE: src/lib/seo/seo.ts
  function getSEOPropsForHome (line 5) | function getSEOPropsForHome() {
  function getSEOPropsForPage (line 39) | function getSEOPropsForPage(
  function getDescription (line 79) | function getDescription(page: {
  function denull (line 125) | function denull(
  function getPageImage (line 135) | function getPageImage({ slug }: { slug: string }) {
  function getPageURL (line 139) | function getPageURL({ slug }: { slug: string }) {
  function toPlainText (line 147) | function toPlainText(input: string) {

FILE: src/pages/searchindex.json.ts
  function GET (line 8) | async function GET() {

FILE: src/pages/sitemap.xml.ts
  function GET (line 5) | async function GET() {

FILE: src/ruby/cache_kramdown.rb
  function remove_frontmatter (line 15) | def remove_frontmatter(input_string)

FILE: src/ruby/renderer.rb
  type Renderer (line 4) | module Renderer
    function render (line 12) | def render(input:)

FILE: src/ruby/renderer.test.rb
  function run_test (line 7) | def run_test(input:, expected:, label:)

FILE: src/scripts/v2017/behaviors_2/anchors.js
  constant DEFAULTS (line 1) | const DEFAULTS = {
  function setupAnchors (line 16) | function setupAnchors() {
  function prepend (line 48) | function prepend(el, child) {

FILE: src/scripts/v2017/behaviors_2/dismiss.js
  function setupDismiss (line 8) | function setupDismiss() {

FILE: src/scripts/v2017/behaviors_2/dismissable.js
  function setupDismissable (line 5) | function setupDismissable() {

FILE: src/scripts/v2017/behaviors_2/disqus.js
  function setupDisqus (line 8) | function setupDisqus() {
  function activateDisqus (line 19) | function activateDisqus(data, $parent) {

FILE: src/scripts/v2017/behaviors_2/no-preview.js
  function setupNoPreview (line 7) | function setupNoPreview() {

FILE: src/scripts/v2017/helpers/data.js
  function data (line 5) | function data(el, key, val) {
  function getData (line 13) | function getData(el, key) {
  function setData (line 18) | function setData(el, key, val) {

FILE: src/scripts/v2017/helpers/dismiss.js
  function setDismissed (line 10) | function setDismissed(id) {
  function isDismissed (line 25) | function isDismissed(id) {

FILE: src/scripts/v2017/helpers/inject_disqus.js
  function inject (line 8) | function inject(host) {
  function injectEmbed (line 13) | function injectEmbed(host) {
  function injectCount (line 21) | function injectCount(host) {

FILE: src/scripts/v2017/helpers/preview.js
  function isPreview (line 5) | function isPreview() {

FILE: src/scripts/v2017/helpers/qs.js
  function qs (line 5) | function qs(search) {
  function qsdecode (line 14) | function qsdecode(string) {

FILE: src/scripts/v2017/helpers/store.js
  function update (line 12) | function update(key, fn) {
  function fetch (line 26) | function fetch(key) {

FILE: src/types/JsonLdDocument.ts
  type JsonLdNewsArticle (line 1) | type JsonLdNewsArticle = {
  type JsonLdListItem (line 13) | type JsonLdListItem = {
  type JsonLdBreadcrumbList (line 22) | type JsonLdBreadcrumbList = {
  type JsonLdDocument (line 28) | type JsonLdDocument = JsonLdNewsArticle | JsonLdBreadcrumbList

FILE: src/types/SheetFrontmatter.ts
  type SheetFrontmatter (line 30) | type SheetFrontmatter = z.infer<typeof SheetFrontmatterSchema>

FILE: test/e2eUtils.ts
  function expectMeta (line 8) | async function expectMeta(
  function getLdJsonPayloads (line 27) | async function getLdJsonPayloads(
Condensed preview — 499 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,431K chars).
[
  {
    "path": ".eslintrc.cjs",
    "chars": 820,
    "preview": "/* eslint-env node */\nmodule.exports = {\n  extends: [\n    'eslint:recommended',\n    'plugin:@typescript-eslint/recommend"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 1170,
    "preview": "name: Run tests\non:\n  push:\n    branches: [main, master]\n  pull_request:\n    branches: [main, master]\njobs:\n  build:\n   "
  },
  {
    "path": ".gitignore",
    "chars": 264,
    "preview": "# build output\ndist/\n# generated types\n.astro/\n\n# dependencies\nnode_modules/\n\n# logs\nnpm-debug.log*\nyarn-debug.log*\nyarn"
  },
  {
    "path": ".node-version",
    "chars": 8,
    "preview": "22.21.1\n"
  },
  {
    "path": ".prettierignore",
    "chars": 55,
    "preview": "src/sass/vendor\nvendor\n.cache\ndist\n*.md\npnpm-lock.yaml\n"
  },
  {
    "path": ".prettierrc",
    "chars": 110,
    "preview": "{\n  \"semi\": false,\n  \"singleQuote\": true,\n  \"trailingComma\": \"none\",\n  \"plugins\": [\"prettier-plugin-astro\"]\n}\n"
  },
  {
    "path": ".ruby-version",
    "chars": 6,
    "preview": "3.2.2\n"
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 87,
    "preview": "{\n  \"recommendations\": [\"astro-build.astro-vscode\"],\n  \"unwantedRecommendations\": []\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 207,
    "preview": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"command\": \"./node_modules/.bin/astro dev\",\n      \"name\": \"Dev"
  },
  {
    "path": ".vscode/markdown.code-snippets",
    "chars": 154,
    "preview": "{\n  \"Test snip\": {\n    \"prefix\": [\"about\"],\n    \"body\": \"Copyright. Foo Corp 2028\",\n    \"description\": \"Adds copyright.."
  },
  {
    "path": "101.md",
    "chars": 3280,
    "preview": "---\ntitle: 101\ncategory: JavaScript libraries\nupdated: 2017-09-21\nintro: |\n  [101](https://www.npmjs.com/package/101) is"
  },
  {
    "path": "AGENTS.md",
    "chars": 1226,
    "preview": "# Agent guidelines for devhints.io\n\n## Commands\n\n- **Dev server**: `pnpm dev` (requires Ruby for markdown caching)\n- **B"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 4745,
    "preview": "# Developer notes\n\n## Runtimes\n\nRequires Node.js, Ruby, Yarn v1.\n\nSee `.ruby-version` and `.node-version` for supported "
  },
  {
    "path": "Gemfile",
    "chars": 86,
    "preview": "source \"https://rubygems.org\"\ngem \"minitest\"\ngem \"kramdown\"\ngem \"kramdown-parser-gfm\"\n"
  },
  {
    "path": "README.md",
    "chars": 786,
    "preview": "<h1 align='center'>Devhints</h1>\n\n<blockquote align='center'>\nTL;DR for developer documentation - a ridiculous collectio"
  },
  {
    "path": "_docs/writing-guidelines.md",
    "chars": 3817,
    "preview": "# Cheatsheet guidelines\n\n## Content organisation\n\n- **Progressive complexity:** Start with basics, move to advanced\n- **"
  },
  {
    "path": "_includes/common/moment_format.md",
    "chars": 4456,
    "preview": "## {{ include.title }}\n{: .-three-column}\n\n### Examples\n\n#### Date\n\n| Example                   | Output                "
  },
  {
    "path": "_includes/common/strftime_format.md",
    "chars": 2065,
    "preview": "## {{ include.title }}\n{: .-three-column}\n\n### Presets\n\n#### Date\n\n| Example         | Output                 |\n| ---   "
  },
  {
    "path": "absinthe.md",
    "chars": 2700,
    "preview": "---\ntitle: Absinthe\ncategory: Hidden\ntags: [WIP]\nupdated: 2017-10-10\nintro: |\n  [Absinthe](http://absinthe-graphql.org/)"
  },
  {
    "path": "activeadmin.md",
    "chars": 1491,
    "preview": "---\ntitle: ActiveAdmin\ncategory: Ruby\n---\n\n### Listing scopes\n\nAllows you to filter listings by a certain scope.\n{: .-se"
  },
  {
    "path": "adb.md",
    "chars": 3674,
    "preview": "---\ntitle: adb (Android Debug Bridge)\ncategory: CLI\nweight: -1\nauthors:\n  - github: ZackNeyland\nupdated: 2018-03-06\n---\n"
  },
  {
    "path": "analytics.js.md",
    "chars": 720,
    "preview": "---\ntitle: Google Analytics's analytics.js\ncategory: Analytics\nupdated: 2017-10-29\nintro: |\n  Google Analytics's analyti"
  },
  {
    "path": "analytics.md",
    "chars": 553,
    "preview": "---\ntitle: Analytics libraries\ncategory: Analytics\n---\n\n### Mixpanel\n\n```js\nmixpanel.identify('284');\nmixpanel.people.se"
  },
  {
    "path": "angularjs.md",
    "chars": 1808,
    "preview": "---\ntitle: Angular.js\ncategory: JavaScript libraries\ntags: [Archived]\narchived: This describes an older version of Angul"
  },
  {
    "path": "animated_gif.md",
    "chars": 559,
    "preview": "---\ntitle: Animated GIFs\ncategory: CLI\n---\n\n## Animated GIFs\n{: .-one-column}\n\n### Convert MP4 to GIF\n\n```bash\nmkdir -p "
  },
  {
    "path": "ansi.md",
    "chars": 600,
    "preview": "---\ntitle: Ansi codes\ncategory: CLI\nintro: |\n  Quick reference to ANSI color codes.\n---\n\n### Format\n\n```\n\\033[#m\n```\n\n##"
  },
  {
    "path": "ansible-examples.md",
    "chars": 415,
    "preview": "---\ntitle: Ansible examples\ncategory: Ansible\n---\n\n### Examples\n\n * [Ruby installation](https://github.com/chelsea/ansib"
  },
  {
    "path": "ansible-guide.md",
    "chars": 2665,
    "preview": "---\ntitle: \"Ansible quickstart\"\ncategory: Ansible\ndescription: |\n  A quick guide to getting started with your first Ansi"
  },
  {
    "path": "ansible-modules.md",
    "chars": 3555,
    "preview": "---\ntitle: Ansible modules\ncategory: Ansible\nprism_languages: [yaml]\nupdated: 2017-10-03\n---\n\n{% raw %}\n\n## Format\n\n### "
  },
  {
    "path": "ansible-roles.md",
    "chars": 415,
    "preview": "---\ntitle: Ansible roles\ncategory: Ansible\n---\n\n### Structure\n\n    roles/\n      common/\n        tasks/\n        handlers/"
  },
  {
    "path": "ansible.md",
    "chars": 1525,
    "preview": "---\ntitle: Ansible\ncategory: Ansible\n---\n\n{% raw %}\n\n## Getting started\n\n### About\n{: .-intro}\n\n- <https://www.ansible.c"
  },
  {
    "path": "appcache.md",
    "chars": 340,
    "preview": "---\ntitle: Appcache\ncategory: HTML\n---\n\n### Format\n\n```\nCACHE MANIFEST\n# version\n\nCACHE:\nhttps://www.google.com/jsapi\n/a"
  },
  {
    "path": "applescript.md",
    "chars": 805,
    "preview": "---\ntitle: AppleScript\nupdated: 2018-12-06\ncategory: macOS\nprism_languages: [applescript]\n---\n\n### Running\n\n```applescri"
  },
  {
    "path": "applinks.md",
    "chars": 709,
    "preview": "---\ntitle: Applinks\ncategory: HTML\n---\n\n### About\n\n- <http://applinks.org/>\n\n### Applinks\n\n    <meta property=\"al:ios:ur"
  },
  {
    "path": "arel.md",
    "chars": 3415,
    "preview": "---\ntitle: Arel\ncategory: Rails\n---\n\n### About\n{: .-intro}\n\nArel is an SQL abstraction library built into Ruby on Rails."
  },
  {
    "path": "astro.config.mjs",
    "chars": 718,
    "preview": "import { defineConfig } from 'astro/config'\nimport partytown from '@astrojs/partytown'\n\n/*\n * https://astro.build/config"
  },
  {
    "path": "atom.md",
    "chars": 2904,
    "preview": "---\ntitle: Atom\ncategory: Apps\nupdated: 2021-09-10\n---\n\n## Shortcuts\n{: .-three-column}\n\n### Tree\n\n| Shortcut | Descript"
  },
  {
    "path": "awesome-redux.md",
    "chars": 3628,
    "preview": "---\ntitle: Awesome Redux\ncategory: React\nupdated: 2017-11-19\n---\n\n### redux-actions\n\nCreate action creators in flux stan"
  },
  {
    "path": "awscli.md",
    "chars": 1336,
    "preview": "---\ntitle: AWS CLI\ncategory: Devops\n---\n\n### EC2\n\n```\naws ec2 describe-instances\naws ec2 start-instances --instance-ids "
  },
  {
    "path": "backbone.md",
    "chars": 4200,
    "preview": "---\ntitle: Backbone.js\nupdated: 2018-12-06\ncategory: JavaScript libraries\n---\n\n### Binding events\n\n```js\n.on('event', ca"
  },
  {
    "path": "bash.md",
    "chars": 21198,
    "preview": "---\ntitle: Bash scripting\ncategory: CLI\ntags: [Featured]\nupdated: 2020-07-05\nkeywords:\n  - Variables\n  - Functions\n  - I"
  },
  {
    "path": "blessed.md",
    "chars": 756,
    "preview": "---\ntitle: Blessed\ncategory: JavaScript libraries\n---\n\n### Screen\n\n```js\nscreen = blessed.screen({\n  smartCSR: true     "
  },
  {
    "path": "bluebird.md",
    "chars": 3226,
    "preview": "---\ntitle: bluebird.js\ncategory: JavaScript libraries\nweight: -1\nupdated: 2017-09-08\n---\n\n### Also see\n\nAlso see the [pr"
  },
  {
    "path": "bolt.md",
    "chars": 995,
    "preview": "---\ntitle: Bolt Quickstart\ncategory: Bolt\nupdated: 2018-12-25\nauthors:\n  - github: lucywyman\nkeywords:\n    - Puppet\n    "
  },
  {
    "path": "bookshelf.md",
    "chars": 738,
    "preview": "---\ntitle: Bookshelf.js\ncategory: JavaScript libraries\n---\n\nModel\n-----\n\n### Model\n```js\nSummary = bookshelf.Model.exten"
  },
  {
    "path": "bootstrap.md",
    "chars": 2711,
    "preview": "---\ntitle: Bootstrap\nprism_languages: [scss, haml, html]\nweight: -1\ncategory: CSS\ndescription: |\n  .container .row .col-"
  },
  {
    "path": "browser-sync.md",
    "chars": 315,
    "preview": "---\ntitle: Browsersync\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\n`npm i -g browser-sync`\n\n* [browsersyn"
  },
  {
    "path": "browserify.md",
    "chars": 1048,
    "preview": "---\ntitle: Browserify\ncategory: JavaScript libraries\ntags: [Archived]\narchived: Browserify has not been in active develo"
  },
  {
    "path": "bulma.md",
    "chars": 2737,
    "preview": "---\ntitle: Bulma\ncategory: CSS\nprism_languages: [css, html]\nweight: -1\nupdated: 2018-11-19\nauthors:\n  - github: benolot\n"
  },
  {
    "path": "bundler.md",
    "chars": 1104,
    "preview": "---\ntitle: Bundler\ncategory: Ruby\n---\n\n### Commands\n\n    bundle                  # same as bundle install\n    bundle ins"
  },
  {
    "path": "c_preprocessor.md",
    "chars": 952,
    "preview": "---\ntitle: C Preprocessor\ncategory: C-like\nintro: |\n  Quick reference for the [C macro preprocessor](https://en.m.wikipe"
  },
  {
    "path": "camp.md",
    "chars": 2196,
    "preview": "---\ntitle: Camp\ncategory: JavaScript libraries\nupdated: 2017-09-21\nweight: -1\nintro: |\n  [Camp](https://github.com/espad"
  },
  {
    "path": "canvas.md",
    "chars": 2249,
    "preview": "---\ntitle: Canvas\ncategory: JavaScript\n---\n\n### Getting the context\n\n```js\nvar canvas = document.getElementById('c')\nvar"
  },
  {
    "path": "capybara.md",
    "chars": 5651,
    "preview": "---\ntitle: Capybara\ncategory: Ruby libraries\nweight: -5\nupdated: 2020-06-13\ntags: [Featurable]\n---\n\n### Navigating\n\n    "
  },
  {
    "path": "cask-index.md",
    "chars": 91375,
    "preview": "---\ntitle: Caskroom index\ntags: [Archived]\narchived: This sheet may have outdated information.\n---\n\n\n\n#### A\n\n- [a-bette"
  },
  {
    "path": "chai.md",
    "chars": 3155,
    "preview": "---\ntitle: Chai.js\ncategory: JavaScript libraries\nweight: -3\nupdated: 2018-06-25\nversion: chai v4.x\ndescription: |\n  exp"
  },
  {
    "path": "cheatsheet-styles.md",
    "chars": 5986,
    "preview": "---\ntitle: Cheatsheet styles\ntags: [WIP]\nupdated: 2017-10-26\nintro: |\n  This is a reference of styles that you can use o"
  },
  {
    "path": "chef.md",
    "chars": 1637,
    "preview": "---\ntitle: Chef\ncategory: Devops\n---\n\n### Install\n\nIn your server:\n{: .-setup}\n\n```bash\n$ sudo apt-get install curl\n```\n"
  },
  {
    "path": "chunky_png.md",
    "chars": 744,
    "preview": "---\ntitle: Chunky PNG\ncategory: Ruby libraries\n---\n\n### Loading\n\n```ruby\nimage = ChunkyPNG::Image.from_file('file.png')\n"
  },
  {
    "path": "cidr.md",
    "chars": 464,
    "preview": "---\ntitle: CIDR\ncategory: Misc\nupdated: 2018-05-14\n---\n\n### CIDR ranges\n\n| Range           | First IP | Last IP        |"
  },
  {
    "path": "circle.md",
    "chars": 2379,
    "preview": "---\ntitle: CircleCI\ncategory: Devops\n---\n\n### About\n{: .-intro}\n\n- <https://circleci.com/docs/config-sample>\n\n### circle"
  },
  {
    "path": "claude-code.md",
    "chars": 9375,
    "preview": "---\ntitle: Claude Code\ncategory: AI\ntags: [Featured]\nupdated: 2025-01-08\nkeywords:\n  - AI assistant\n  - CLI\n  - Code gen"
  },
  {
    "path": "clip.md",
    "chars": 1071,
    "preview": "---\ntitle: Command Line Interface Pages\ncategory: CLI\nupdated: 2023-02-23\nkeywords:\n  - CLI\n---\n\n### Page layout\n\n```md\n"
  },
  {
    "path": "co.md",
    "chars": 1507,
    "preview": "---\ntitle: co\ncategory: JavaScript libraries\nupdated: 2017-10-27\nweight: -1\nintro: |\n  [co](https://github.com/tj/co) al"
  },
  {
    "path": "command_line.md",
    "chars": 2880,
    "preview": "---\ntitle: Command line stuff\n---\n\n## List (ls)\n{: .-three-column}\n\n### Usage\n\n    ls [options] [paths]\n\n### Format\n\n| S"
  },
  {
    "path": "commander.js.md",
    "chars": 659,
    "preview": "---\ntitle: Commander.js\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\n- <https://github.com/tj/commander.js"
  },
  {
    "path": "composer.md",
    "chars": 5120,
    "preview": "---\ntitle: composer\ncategory: CLI\nweight: -1\nauthors:\n  - github: benolot\nupdated: 2020-02-23\ndescription: |\n  Basic gui"
  },
  {
    "path": "cordova.md",
    "chars": 753,
    "preview": "---\ntitle: Apache Cordova\nintro: |\n  A quick reference to common [Apache Cordova](https://cordova.apache.org/) commands."
  },
  {
    "path": "cron.md",
    "chars": 1979,
    "preview": "---\ntitle: Cron\ncategory: CLI\nupdated: 2024-03-17\nweight: -3\n---\n\n## Format\n{: .-two-column}\n\n### Format\n\n```\nMin  Hour "
  },
  {
    "path": "csharp7.md",
    "chars": 4241,
    "preview": "---\ntitle: C# 7\ncategory: C-like\nupdated: 2018-12-06\nprism_languages: [csharp]\ndescription: |\n  A quick overview of C# 7"
  },
  {
    "path": "css-antialias.md",
    "chars": 681,
    "preview": "---\ntitle: CSS antialiasing\ncategory: CSS\nupdated: 2017-10-13\nintro: |\n  Here's a 4-line snippet on how to get beautiful"
  },
  {
    "path": "css-flexbox.md",
    "chars": 2973,
    "preview": "---\ntitle: CSS flexbox\ncategory: CSS\nupdated: 2020-06-13\nprism_languages: [css]\nweight: -3\n---\n\n### Simple example\n\n```c"
  },
  {
    "path": "css-grid.md",
    "chars": 7544,
    "preview": "---\ntitle: CSS Grid\ncategory: CSS\nupdated: 2019-08-23\nprism_languages: [css]\n---\n\n### Container\n\n```css\n.grid-container "
  },
  {
    "path": "css-system-font-stack.md",
    "chars": 1075,
    "preview": "---\ntitle: \"CSS system fonts\"\ncategory: CSS\nweight: -3\ntags: [Featurable]\n---\n\n### System fonts\n\n```css\nfont-family: -ap"
  },
  {
    "path": "css-tricks.md",
    "chars": 1984,
    "preview": "---\ntitle: CSS tricks\ncategory: CSS\n---\n\n### Heading kerning pairs and ligature\n\n```css\nh1, h2, h3 {\n  text-rendering: o"
  },
  {
    "path": "css.md",
    "chars": 8243,
    "preview": "---\ntitle: CSS\ncategory: CSS\nweight: -1\nkeywords:\n  - \"margin, padding, border\"\n  - \"div, .class, #id, [attr]\"\n  - \"font"
  },
  {
    "path": "cssnext.md",
    "chars": 2937,
    "preview": "---\ntitle: cssnext\ncategory: CSS\nupdated: 2017-10-30\ntags: [Featurable]\nweight: -3\n---\n\n### Variables\n\n```scss\n:root {\n "
  },
  {
    "path": "curl.md",
    "chars": 1893,
    "preview": "---\ntitle: Curl\ncategory: CLI\nupdated: 2020-03-09\n---\n\n## Options\n\n### Options\n\n```bash\n-o <file>    # --output: write t"
  },
  {
    "path": "datetime.md",
    "chars": 394,
    "preview": "---\ntitle: Date & time formats\nweight: -5\nupdated: 2017-11-27\ntags: [Featurable]\n---\n\n## Common time formats\n{: .-one-co"
  },
  {
    "path": "deis.md",
    "chars": 878,
    "preview": "---\ntitle: Deis\ncategory: Devops\n---\n\n### Deploy\n\n```\ndeis create app-name\ngit push deis master\ndeis open\n```\n\n### Deplo"
  },
  {
    "path": "deku.md",
    "chars": 1280,
    "preview": "---\ntitle: Deku v2\ncategory: JavaScript libraries\nintro: |\n  Quick reference for [Deku](https://www.npmjs.com/package/de"
  },
  {
    "path": "deku@1.md",
    "chars": 1913,
    "preview": "---\ntitle: Deku v1\ncategory: JavaScript libraries\nintro: |\n  Quick reference for [Deku](https://www.npmjs.com/package/de"
  },
  {
    "path": "devise.md",
    "chars": 3632,
    "preview": "---\ntitle: Devise\n---\n\n### About\n{: .-intro}\n\n[Devise](https://github.com/plataformatec/devise) is a flexible authentica"
  },
  {
    "path": "divshot.md",
    "chars": 2093,
    "preview": "---\ntitle: Divshot\ntags: [Archived]\narchived: Divshot is no longer in operation.\n---\n\n## Getting started\n\n### About\n\nDiv"
  },
  {
    "path": "do.md",
    "chars": 2373,
    "preview": "---\ntitle: Do gem\ncategory: Ruby libraries\n---\n\n### About\n{: .-intro}\n\n * [DAddYE/do](https://github.com/DAddYE/do)\n\n###"
  },
  {
    "path": "docker-compose.md",
    "chars": 4532,
    "preview": "---\ntitle: docker-compose\ncategory: Devops\nprism_languages: [yaml]\nweight: -1\nupdated: 2024-04-03 \n---\n\n### Basic exampl"
  },
  {
    "path": "docker.md",
    "chars": 3167,
    "preview": "---\ntitle: Docker CLI\ncategory: Devops\n---\n\nManage images\n-------------\n\n### `docker build`\n\n```yml\ndocker build [option"
  },
  {
    "path": "dockerfile.md",
    "chars": 1698,
    "preview": "---\ntitle: Dockerfile\ncategory: Devops\nprism_languages: [docker]\nupdated: 2019-10-20\n---\n\n## Reference\n{: .-three-column"
  },
  {
    "path": "dom-range.md",
    "chars": 1195,
    "preview": "---\ntitle: DOM Range\ncategory: JavaScript\nintro: |\n  Quick reference to the HTML [DOM createRange API](https://devdocs.i"
  },
  {
    "path": "dom-selection.md",
    "chars": 766,
    "preview": "---\ntitle: DOM Selection\ncategory: JavaScript\nintro: |\n  Quick introduction to the HTML [DOM selection API](https://devd"
  },
  {
    "path": "editorconfig.md",
    "chars": 1316,
    "preview": "---\ntitle: editorconfig\nprism_languages: [ini]\nweight: -1\nupdated: 2019-09-25\ncategory: Apps\n---\n\n### Short example\n{: ."
  },
  {
    "path": "elixir-metaprogramming.md",
    "chars": 717,
    "preview": "---\ntitle: Elixir metaprogramming\ncategory: Elixir\n---\n\n### Kernel\n\nMost of these magic is defined in [Kernel.SpecialFor"
  },
  {
    "path": "elixir.md",
    "chars": 11463,
    "preview": "---\ntitle: Elixir\ncategory: Elixir\ntags: [New]\nupdated: 2018-07-04\nweight: -10\n---\n\n## Getting started\n{: .-three-column"
  },
  {
    "path": "emacs.md",
    "chars": 330,
    "preview": "---\ntitle: Emacs\ncategory: CLI\n---\n\n### Movements\n\n   ^n ^p    # up/down\n   ^f ^b    # left/right\n\n   ^v Mv    # up/down"
  },
  {
    "path": "ember.md",
    "chars": 1517,
    "preview": "---\ntitle: Ember.js\ncategory: JavaScript libraries\ntags: [Archived]\narchived: This sheet describes an older version of E"
  },
  {
    "path": "emmet.md",
    "chars": 2331,
    "preview": "---\ntitle: Emmet\ncategory: Markup\nprism_languages: [html, css]\nupdated: 2020-07-03\nintro: |\n  Emmet is a markup language"
  },
  {
    "path": "enzyme.md",
    "chars": 5441,
    "preview": "---\ntitle: Enzyme\ncategory: React\nupdated: 2020-02-12\ntags: [Featured]\nweight: -1\nkeywords:\n  - shallow()\n  - mount()\n  "
  },
  {
    "path": "enzyme@2.md",
    "chars": 3018,
    "preview": "---\ntitle: Enzyme v2\ncategory: React\nupdated: 2017-10-12\nweight: -1\ndeprecated_by: /enzyme\n---\n\n## Getting started\n{: .-"
  },
  {
    "path": "es6.md",
    "chars": 9298,
    "preview": "---\ntitle: ES2015+\ncategory: JavaScript\ntags: [Featured]\nupdated: 2019-11-14\nweight: -10\nintro: |\n  A quick overview of "
  },
  {
    "path": "ets.md",
    "chars": 793,
    "preview": "---\ntitle: Erlang ETS\ncategory: Elixir\nweight: -1\n---\n\n## ETS\n\n### Usage\n\n```elixir\niex> table = :ets.new(:my_table, [])"
  },
  {
    "path": "expectjs.md",
    "chars": 1784,
    "preview": "---\ntitle: expect.js\ncategory: JavaScript libraries\nupdated: 2017-09-02\nweight: -1\n---\n\n### Using\n\n```\nnpm install --sav"
  },
  {
    "path": "express.md",
    "chars": 1375,
    "preview": "---\ntitle: Express.js\ncategory: JavaScript libraries\n---\n\n### Settings\n\n```js\napp.set('x', 'yyy')\napp.get('x') //=> 'yyy"
  },
  {
    "path": "exunit.md",
    "chars": 1458,
    "preview": "---\ntitle: ExUnit\ncategory: Elixir\nupdated: 2018-11-19\n---\n\n### Test cases\n\n```elixir\ndefmodule MyTest do\n  use ExUnit.C"
  },
  {
    "path": "factory_bot.md",
    "chars": 3761,
    "preview": "---\ntitle: Factory Bot\ncategory: Ruby libraries\nweight: -3\nupdated: 2020-07-06\nkeywords:\n  - \"FactoryBot.define do\"\n  - "
  },
  {
    "path": "fastify.md",
    "chars": 5499,
    "preview": "---\ntitle: Fastify\ncategory: JavaScript libraries\nupdated: 2017-09-23\n---\n\n## Getting started\n\n### Introduction\n{: .-int"
  },
  {
    "path": "ffaker.md",
    "chars": 22351,
    "preview": "---\ntitle: FFaker\ncategory: Ruby libraries\nupdated: 2017-09-12\n---\n\n## FFaker\n{: .-one-column}\n\n### Installing\n\n```ruby\n"
  },
  {
    "path": "ffmpeg.md",
    "chars": 1378,
    "preview": "---\ntitle: ffmpeg\ncategory: CLI\n---\n\n### Common switches\n\n```bash\n-codecs          # list codecs\n-c:v             # vide"
  },
  {
    "path": "figlet.md",
    "chars": 141613,
    "preview": "---\ntitle: Figlet\nupdated: 2018-06-14\nintroduction: |\n  [Figlet] renders text as ASCII art. Here's a list of Figlet font"
  },
  {
    "path": "find.md",
    "chars": 1753,
    "preview": "---\ntitle: Find\ncategory: CLI\nupdated: 2019-11-17\n---\n\n### Usage\n{: .-prime}\n\n```bash\nfind <path> <conditions> <actions>"
  },
  {
    "path": "firebase.md",
    "chars": 1260,
    "preview": "---\ntitle: Firebase\nprism_languages: [coffeescript]\ntags: [WIP]\n---\n\n### Authenticating\n\n```js\nFB = new Firebase('https:"
  },
  {
    "path": "firefox.md",
    "chars": 3886,
    "preview": "---\ntitle: Firefox\ntags: [Archived]\narchived: This sheet has not been updated with newer Firefox releases.\n---\n\n### [Fir"
  },
  {
    "path": "fish-shell.md",
    "chars": 8728,
    "preview": "---\ntitle: Fish shell\ncategory: CLI\nprism_languages: [fish]\nupdated: 2018-01-31\nweight: -1\n---\n\n### Keys\n\n| Shortcut    "
  },
  {
    "path": "flashlight.md",
    "chars": 673,
    "preview": "---\ntitle: Flashlight\ncategory: Apps\n---\n\n## Commands\n{: .-three-column}\n\n### Events and reminders\n\n* `add Dinner with R"
  },
  {
    "path": "flow.md",
    "chars": 6621,
    "preview": "---\ntitle: Flow\ncategory: JavaScript libraries\nupdated: 2020-07-05\nweight: -3\ntags: [Featurable]\n---\n\n## Getting started"
  },
  {
    "path": "flux.md",
    "chars": 3625,
    "preview": "---\ntitle: Flux architecture\ncategory: React\n---\n\n## About\n\n### About\n{: .-intro}\n\nFlux is an architecture for building "
  },
  {
    "path": "flynn.md",
    "chars": 1497,
    "preview": "---\ntitle: Flynn\ncategory: Devops\n---\n\n### General workflow\n\n* Start a flynn cluster (on amazon or vagrant)\n* `flynn clu"
  },
  {
    "path": "freenode.md",
    "chars": 280,
    "preview": "---\ntitle: Freenode\ntags: [WIP]\n---\n\n### IRC server\n\n```\nirc.freenode.net\n```\n\n### NickServ commands\n\n```\n/msg nickserv "
  },
  {
    "path": "frequency-separation-retouching.md",
    "chars": 522,
    "preview": "---\ntitle: Frequency separation retouching\ncategory: Others\n---\n\n### Frequency separation retouching in Photoshop\n\nDupli"
  },
  {
    "path": "gh-pages.md",
    "chars": 625,
    "preview": "---\ntitle: GitHub pages\ncategory: Jekyll\n---\n\n## Custom domains\n\n### Custom domains\n\n```sh\n$ echo \"foobar.com\" > CNAME\n$"
  },
  {
    "path": "git-branch.md",
    "chars": 1685,
    "preview": "---\ntitle: Git branches\ncategory: Git\nupdated: 2020-02-13\n---\n\n## Working with branches\n{: .-three-column}\n\n### Creating"
  },
  {
    "path": "git-extras.md",
    "chars": 1414,
    "preview": "---\ntitle: Git extras\ncategory: Git\nintro: |\n  Quick reference to some utilities in the [git-extras](https://github.com/"
  },
  {
    "path": "git-log-format.md",
    "chars": 1872,
    "preview": "---\ntitle: Git log format string\ncategory: Git\nupdated: 2017-10-18\nweight: -1\nkeywords:\n  - \"git log --pretty=format:%H\""
  },
  {
    "path": "git-log.md",
    "chars": 1552,
    "preview": "---\ntitle: git log\ncategory: Git\n---\n\n### Revision ranges\n\n```bash\ngit log master             # branch\ngit log origin/ma"
  },
  {
    "path": "git-revisions.md",
    "chars": 5082,
    "preview": "---\ntitle: Git revisions\ncategory: Git\nupdated: 2017-10-11\ndescription: \"\"\nintro: |\n  A list of revision specifications "
  },
  {
    "path": "git-tricks.md",
    "chars": 3078,
    "preview": "---\ntitle: Git tricks\ncategory: Git\n---\n\n### Refs\n\n    HEAD^       # 1 commit before head\n    HEAD^^      # 2 commits be"
  },
  {
    "path": "gnupg.md",
    "chars": 4220,
    "preview": "---\ntitle: GnuPG\ncategory: CLI\ntags: []\nupdated: 2017-10-22\nweight: 0\nintro: |\n  [GnuPG](https://gnupg.org/) is a comple"
  },
  {
    "path": "go.md",
    "chars": 10489,
    "preview": "---\ntitle: Go\nprism_languages: [go, bash]\nweight: -3\ntags: [Featured]\ncategory: C-like\nupdated: 2020-06-21\n---\n\n## Getti"
  },
  {
    "path": "goby.md",
    "chars": 25493,
    "preview": "---\ntitle: Goby\nprism_languages: [ruby]\nweight: -3\nupdated: 2018-12-06\ncategory: Ruby\nintro: |\n  Goby's language design "
  },
  {
    "path": "google-webfonts.md",
    "chars": 626,
    "preview": "---\ntitle: Google Webfonts\nintro: |\n  Short snippets on using [Google Webfonts](https://google.com/fonts) in a web page."
  },
  {
    "path": "google_analytics.md",
    "chars": 1070,
    "preview": "---\ntitle: Google Analytics\ntags: [Archived]\narchived: This sheet describes an older version of Google Analytics (UA).\n-"
  },
  {
    "path": "graphql.md",
    "chars": 3293,
    "preview": "---\ntitle: GraphQL\nupdated: 2019-07-07\ncategory: API\n---\n\n## Intro\n\n## Queries\n{: .-three-column}\n\n### Basic query\n\n```j"
  },
  {
    "path": "gremlins.md",
    "chars": 1922,
    "preview": "---\ntitle: Gremlins.js\ncategory: JavaScript libraries\nupdated: 2017-10-22\nweight: -1\nintro: |\n  [Gremlins](https://githu"
  },
  {
    "path": "grep.md",
    "chars": 2592,
    "preview": "---\ntitle: GNU grep\ncategory: CLI\nupdated: 2021-08-23\n---\n\n### Usage\n{: .-prime}\n\n```bash\ngrep <options> pattern <file.."
  },
  {
    "path": "gulp.md",
    "chars": 3930,
    "preview": "---\ntitle: Gulp\ncategory: JavaScript libraries\ntags: [Archived]\narchived: The information on this sheet may possibly be "
  },
  {
    "path": "haml.md",
    "chars": 696,
    "preview": "---\ntitle: Haml\ncategory: Markup\nprism_languages: [haml]\n---\n\n### Doctype\n\n```haml\n!!! 5\n```\n\n### Tags\n\n```haml\n%html\n  "
  },
  {
    "path": "handlebars.js.md",
    "chars": 544,
    "preview": "---\ntitle: Handlebars.js\ncategory: JavaScript libraries\nweight: -1\n---\n\n{% raw %}\n\n### Helpers\n\n```js\nHandlebars.registe"
  },
  {
    "path": "harvey.js.md",
    "chars": 594,
    "preview": "---\ntitle: Harvey.js\ncategory: JavaScript libraries\nintro: |\n  [Harvey.js](http://harvesthq.github.io/harvey/) helps you"
  },
  {
    "path": "heroku.md",
    "chars": 3384,
    "preview": "---\ntitle: Heroku\ncategory: Devops\nupdated: 2017-10-11\ndescription: |\n  A one-page reference to common Heroku-CLI comman"
  },
  {
    "path": "hledger.md",
    "chars": 3341,
    "preview": "---\ntitle: Hledger\ncategory: Ledger\n---\n\n### About\n{: .-intro}\n\n- <https://hledger.org>\n- <https://hledger.org/quickstar"
  },
  {
    "path": "homebrew.md",
    "chars": 2143,
    "preview": "---\ntitle: Homebrew\nweight: -3\ncategory: CLI\n---\n\n### Commands\n\n| Command                    | Description              "
  },
  {
    "path": "html-email.md",
    "chars": 1906,
    "preview": "---\ntitle: HTML emails\ncategory: HTML\nupdated: 2017-08-30\n---\n\n### Properties to avoid\n\n| Property             | Where  "
  },
  {
    "path": "html-input.md",
    "chars": 1595,
    "preview": "---\ntitle: Input tag\ncategory: HTML\nupdated: 2017-10-30\nweight: -3\n---\n\n### Input\n\n```html\n <input ...\n   disabled\n   re"
  },
  {
    "path": "html-meta.md",
    "chars": 3669,
    "preview": "---\ntitle: HTML meta tags\ncategory: HTML\nupdated: 2020-03-20\nweight: -3\n---\n\n### Meta tags\n\n```html\n<meta charset='utf-8"
  },
  {
    "path": "html-microformats.md",
    "chars": 480,
    "preview": "---\ntitle: Microformats\ncategory: HTML\n---\n\n### Author\n\n``` html\n<span class=\"entry-author\" itemprop=\"author\" itemscope="
  },
  {
    "path": "html-share.md",
    "chars": 421,
    "preview": "---\ntitle: Share links\ncategory: HTML\nupdated: 2017-09-04\n---\n\n## Share links\n{: .-one-column}\n\nFacebook:\n{:.-setup}\n\n``"
  },
  {
    "path": "html.md",
    "chars": 4578,
    "preview": "---\ntitle: HTML\ncategory: HTML\n---\n\n### Head stuff\n\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/favicon.ico"
  },
  {
    "path": "http-status.md",
    "chars": 6866,
    "preview": "---\ntitle: HTTP Status\ncategory: API\ndescription: |\n  List of HTTP Status codes and links to description.\n---\n\n### Infor"
  },
  {
    "path": "httpie.md",
    "chars": 2265,
    "preview": "---\ntitle: httpie\ncategory: CLI\nweight: -3\nupdated: 2020-07-05\ndescription: |\n  $ http POST http://example.com name=\"Joh"
  },
  {
    "path": "ie.md",
    "chars": 10193,
    "preview": "---\ntitle: Internet Explorer\ncategory: HTML\nupdated: 2018-03-06\n---\n\n## Support table\n{: .-one-column}\n\n### CSS Selector"
  },
  {
    "path": "ie_bugs.md",
    "chars": 766,
    "preview": "---\ntitle: Legacy IE bugs\ncategory: HTML\nupdated: 2018-03-06\nintro: |\n  A bunch of bugs to take care of if you're going "
  },
  {
    "path": "imagemagick.md",
    "chars": 1127,
    "preview": "---\ntitle: Imagemagick\nintro: |\n  A quick reference for common [Imagemagick](https://www.imagemagick.org) commands and s"
  },
  {
    "path": "immutable.js.md",
    "chars": 652,
    "preview": "---\ntitle: Immutable.js\ncategory: JavaScript libraries\n---\n\n### Maps\n\n```js\nvar map = Immutable.Map({ a: 1, b: 2, c: 3 }"
  },
  {
    "path": "index.md",
    "chars": 183,
    "preview": "---\nfull_title: \"Devhints — TL;DR for developer documentation\"\ndescription: \"A ridiculous collection of web development "
  },
  {
    "path": "index@2016.md",
    "chars": 193,
    "preview": "---\nfull_title: \"Devhints — for web development and more\"\ndescription: \"TL;DR for developer documentation - a ridiculous"
  },
  {
    "path": "inkscape.md",
    "chars": 419,
    "preview": "---\ntitle: Inkscape\ncategory: Apps\ntags: [WIP]\n---\n\n### All\n\n| `-` _/_ `=` | Zoom in/out\n| `3` _/_ `4` | Zoom to selecti"
  },
  {
    "path": "ios-provision.md",
    "chars": 1730,
    "preview": "---\ntitle: iOS Provisioning Profiles\n---\n\n### Types of profiles\n\n * __Development__ - deploy to an iPhone via XCode\n * _"
  },
  {
    "path": "jade.md",
    "chars": 69,
    "preview": "---\ntitle: Jade\ncategory: JavaScript libraries\nredirect_to: /pug\n---\n"
  },
  {
    "path": "jasmine.md",
    "chars": 3271,
    "preview": "---\ntitle: Jasmine\ncategory: JavaScript libraries\nweight: -1\n---\n\n## Tests\n\n### Writing tests\n\n```js\ndescribe('A suite',"
  },
  {
    "path": "jekyll-github.md",
    "chars": 2098,
    "preview": "---\ntitle: Jekyll for GitHub pages\ncategory: Jekyll\ntags: [WIP]\nupdated: 2017-11-17\n---\n\n{% raw %}\n\nJekyll\n------\n{: .-o"
  },
  {
    "path": "jekyll.md",
    "chars": 11074,
    "preview": "---\ntitle: Jekyll\njekyll_escape: true\nprism_languages: [bash, yaml, ruby]\ncategory: Jekyll\nupdated: 2018-08-25\n---\n\n{% r"
  },
  {
    "path": "jest.md",
    "chars": 6456,
    "preview": "---\ntitle: Jest\ncategory: JavaScript libraries\nupdated: 2020-06-17\nweight: -3\ntags: [Featurable]\nintro: |\n  A quick over"
  },
  {
    "path": "jinja.md",
    "chars": 1479,
    "preview": "---\ntitle: Jinja\ncategory: Python\n---\n\n{% raw %}\n### Basic usage\n\n```\n- variable x has content: {{ x }}\n- expression: {{"
  },
  {
    "path": "jinja2.md",
    "chars": 58,
    "preview": "---\ntitle: jinja\ncategory: python\nredirect_to: /jinja\n---\n"
  },
  {
    "path": "jquery-cdn.md",
    "chars": 195,
    "preview": "---\ntitle: jQuery CDN\ncategory: JavaScript libraries\ntags: [Archived]\n---\n\n### Google jQuery\n\n```html\n<script src=\"http:"
  },
  {
    "path": "jquery.md",
    "chars": 694,
    "preview": "---\ntitle: jQuery\ncategory: JavaScript libraries\ntags: [WIP]\nweight: -1\n---\n\n### Traversing\n\n```js\n$('.box')\n  .children"
  },
  {
    "path": "js-appcache.md",
    "chars": 838,
    "preview": "---\ntitle: applicationCache\ncategory: JavaScript\n---\n\n## Reference\n{: .-one-column}\n\n### applicationCache checking\n\n```j"
  },
  {
    "path": "js-array.md",
    "chars": 1602,
    "preview": "---\ntitle: JavaScript Arrays\ncategory: JavaScript\n---\n\n### Arrays\n\n```bash\nlist = [a,b,c,d,e]\n```\n{: .-setup}\n\n```bash\nl"
  },
  {
    "path": "js-date.md",
    "chars": 2902,
    "preview": "---\ntitle: JavaScript Date\ncategory: JavaScript\nweight: -3\n---\n\n## Date\n{: .-left-reference}\n\n### Constructor\n\n```js\n// "
  },
  {
    "path": "js-fetch.md",
    "chars": 1673,
    "preview": "---\ntitle: fetch()\ncategory: JavaScript\nweight: -3\n---\n\n### Fetch\n{: .-prime}\n\n```js\nfetch('/data.json')\n  .then(respons"
  },
  {
    "path": "js-lazy.md",
    "chars": 795,
    "preview": "---\ntitle: JavaScript lazy shortcuts\ncategory: JavaScript\n---\n\n## Shortcuts\n{: .-left-reference}\n\n### Examples\n\n```js\nn "
  },
  {
    "path": "js-model.md",
    "chars": 1056,
    "preview": "---\ntitle: js-model\ncategory: JavaScript libraries\n---\n\n### Example\n\n```bash\nProject = Model \"project\", ->\n  @extend\n   "
  },
  {
    "path": "js-speech.md",
    "chars": 488,
    "preview": "---\ntitle: JavaScript speech synthesis\ncategory: JavaScript\nweight: -1\n---\n\n## SpeechSynthesisUtterance\n{: .-one-column}"
  },
  {
    "path": "jscoverage.md",
    "chars": 1028,
    "preview": "---\ntitle: jscoverage\ncategory: JavaScript libraries\nintro: |\n  A small guide into installing [jscoverage](https://npmjs"
  },
  {
    "path": "jsdoc.md",
    "chars": 2662,
    "preview": "---\ntitle: Jsdoc\ncategory: JavaScript\nupdated: 2024-07-26\nweight: -1\n---\n\n### Functions\n\n```js\n/**\n * This is a function"
  },
  {
    "path": "jshint.md",
    "chars": 2683,
    "preview": "---\ntitle: Jshint\ncategory: JavaScript libraries\nupdated: 2017-09-12\n---\n\n### Relaxing\n\nEnable these options to *not* th"
  },
  {
    "path": "knex.md",
    "chars": 7303,
    "preview": "---\ntitle: Knex\nupdated: 2020-06-03\ncategory: Databases\nintro: |\n  [Knex](http://knexjs.org/) is an SQL query builder fo"
  },
  {
    "path": "koa.md",
    "chars": 2201,
    "preview": "---\ntitle: Koa\ncategory: JavaScript libraries\n---\n\n### About\n{: .-intro}\n\nKoa is a web framework for Node.js.\n\n- <https:"
  },
  {
    "path": "kotlin.md",
    "chars": 7970,
    "preview": "---\ntitle: Kotlin\nupdated: 2018-12-06\ncategory: Java & JVM\nprism_languages: [kotlin]\nintro: |\n    [Kotlin](http://kotlin"
  },
  {
    "path": "kramdown.md",
    "chars": 1258,
    "preview": "---\ntitle: Kramdown\ncategory: Markup\n---\n\n### About\n{: .-intro}\n\nKramdown is a Markdown parser in Ruby.\n\n- <https://kram"
  },
  {
    "path": "layout-thrashing.md",
    "chars": 1386,
    "preview": "---\ntitle: Layout thrashing\ncategory: HTML\ndescription: \"\"\nupdated: 2017-10-19\nweight: -1\nintro: |\n  These are CSS prope"
  },
  {
    "path": "ledger-csv.md",
    "chars": 720,
    "preview": "---\ntitle: Ledger CSV format\ncategory: Ledger\n---\n\n## Ledger CSV format\n{: .-one-column}\n\n```\n$ ledger csv\n```\n{: .-setu"
  },
  {
    "path": "ledger-examples.md",
    "chars": 1034,
    "preview": "---\ntitle: Ledger examples\ncategory: Ledger\n---\n\n### Inspecting transactions\n\n    # show me expenses for october (--peri"
  },
  {
    "path": "ledger-format.md",
    "chars": 989,
    "preview": "---\ntitle: Ledger format\ncategory: Ledger\n---\n\n### Example\n```\n2015/01/01 Pay rent\n  Assets:Savings     -$300\n  Expenses"
  },
  {
    "path": "ledger-periods.md",
    "chars": 764,
    "preview": "---\ntitle: Ledger periods\ncategory: Ledger\n---\n\n### About\n{: .-intro}\n\n- <https://ledger-cli.org/3.0/doc/ledger3.html#Pe"
  },
  {
    "path": "ledger-query.md",
    "chars": 561,
    "preview": "---\ntitle: Ledger queries\ncategory: Ledger\n---\n\n### About\n\n- <https://ledger-cli.org/3.0/doc/ledger3.html#Complex-expres"
  },
  {
    "path": "ledger.md",
    "chars": 4800,
    "preview": "---\ntitle: Ledger CLI\ncategory: Ledger\nupdated: 2020-05-23\nweight: -5\n---\n\n### Basic usage\n\n```bash\n$ ledger bal\n$ ledge"
  },
  {
    "path": "less.md",
    "chars": 729,
    "preview": "---\ntitle: Less.js\n---\n\n### Functions\n\n    unit(30px / 5px)  #=> 6\n    unit(5, px)       #=> 5px\n\n    e(\"ms:stuff()\")   "
  },
  {
    "path": "licenses.md",
    "chars": 4725,
    "preview": "---\ntitle: Licenses\nsection: Development\nupdated: 2017-08-30\n---\n\n## Licenses\n\n### MIT License\n\n```\nThe MIT License (MIT"
  },
  {
    "path": "linux.md",
    "chars": 1171,
    "preview": "---\ntitle: Linux\n---\n\n### Read/Write/Execute a file\n\n    $ chmod +rwx App\n    $ ./App\n\n### Remove\n\n    $ rm namefile\n   "
  },
  {
    "path": "lodash.md",
    "chars": 4242,
    "preview": "---\ntitle: Lodash\ncategory: JavaScript libraries\nweight: -3\nupdated: 2020-06-24\ndescription: |\n  This is not a complete "
  },
  {
    "path": "lua.md",
    "chars": 6004,
    "preview": "---\ntitle: Lua\n---\n\n## Basic examples\n\n### References\n\n- <https://www.lua.org/pil/13.html>\n- <http://lua-users.org/wiki/"
  },
  {
    "path": "machinist.md",
    "chars": 1063,
    "preview": "---\ntitle: Machinist\ncategory: Ruby libraries\ntags: [Archived]\narchived: Machinist has not been in active development si"
  },
  {
    "path": "macos-mouse-acceleration.md",
    "chars": 874,
    "preview": "---\ntitle: Mouse Acceleration\ncategory: macOS\nupdated: 2018-03-20\nweight: -1\nkeywords:\n  - \"defaults write .GlobalPrefer"
  },
  {
    "path": "make-assets.md",
    "chars": 955,
    "preview": "---\ntitle: Make for assets\ntags: [Archived]\narchived: This sheet may be listing practices that are outdated.\n---\n\n### Ba"
  },
  {
    "path": "makefile.md",
    "chars": 2501,
    "preview": "---\ntitle: Makefile\nprism_languages: [makefile]\ncategory: CLI\n---\n\n### Var assignment\n\n```makefile\nfoo  = \"bar\"\nbar  = $"
  },
  {
    "path": "mako.md",
    "chars": 1590,
    "preview": "---\ntitle: Mako\ncategory: Python\n---\n\n### Basic usage\n\n```\nVariable x has content: ${x}\nExpression: ${x + 1}\nEscaped for"
  },
  {
    "path": "man.md",
    "chars": 362,
    "preview": "---\ntitle: Man\ncategory: CLI\n---\n\n### Man paths\n\n| `1` | General User Commands |\n| `2` | System Calls |\n| `3` | Library "
  },
  {
    "path": "markdown.md",
    "chars": 1676,
    "preview": "---\ntitle: Markdown\ncategory: Markup\nprism_languages: [markdown]\nupdated: 2020-07-01\nweight: -1\n---\n\n## Reference\n{:.-th"
  },
  {
    "path": "meow.md",
    "chars": 1132,
    "preview": "---\ntitle: Meow\ncategory: JavaScript libraries\nupdated: 2017-10-30\nweight: -1\nintro: |\n  [meow](https://npmjs.com/packag"
  },
  {
    "path": "meta-tags.md",
    "chars": 1850,
    "preview": "---\ntitle: Meta-tags gem\ncategory: Ruby libraries\nweight: -1\nupdated: 2017-09-08\n---\n\n### Titles\n\n```ruby\nset_meta_tags "
  }
]

// ... and 299 more files (download for full content)

About this extraction

This page contains the full source code of the rstacruz/cheatsheets GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 499 files (2.2 MB), approximately 602.5k tokens, and a symbol index with 80 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!