[root@localhost ~]# mkdir /centos_chroot
[root@localhost ~]# mkdir -p /centos_chroot/var/lib/rpm
module.exports = (file, api, options) => { | |
const j = api.jscodeshift; | |
const root = j(file.source); | |
// We have to add "use strict" for node to play nice | |
// Taken from https://github.com/cpojer/js-codemod/blob/master/transforms/use-strict.js | |
const hasStrictMode = body => | |
body.some( | |
statement => j.match(statement, { | |
type: 'ExpressionStatement', |
This note explains the common issue of "notapplicable" results when running openSCAP and SCAP-Security-Guide on CentOS.
SCAP seems like it should be easy because it is "just XML". Then you dig into looking for a test and it gets confusing fast. So it is good to have some background.
SCAP (Security Content Automation Protocol) is actually a set of multiple standards and specifications that are used together to enable automatically testing hundreds of nerd settings. Let me emphasize that: SCAP is not a single XML specification -- SCAP is multiple standards and specs. Whenever you give "SCAP Content" to a scanner to check a system configurations you are giving the scanner multiple XML files representing multiple standards.
#!/bin/bash | |
# REPO_NAME=<repo>.git | |
# ORIGIN_URL=git@<host>:<project>/$REPO_NAME | |
# REPO1_URL=git@<host>:<project>/$REPO_NAME | |
rm -rf $REPO_NAME | |
git clone --bare $ORIGIN_URL | |
if [ "$?" != "0" ]; then | |
echo "ERROR: failed clone of $ORIGIN_URL" |
#! /bin/sh | |
[ ! -d "$1" ] && echo "$1 is not a valid directory." && exit 1; | |
trap "umount \"${1}\"/tmp \"${1}\"/dev/null \"${1}\"/dev/pts \"${1}\"/dev/random \"${1}\"/dev/shm \"${1}\"/dev/urandom \"${1}\"/proc" EXIT INT TERM HUP PIPE && | |
mount --bind /tmp "${1}/tmp" && \ | |
mount --bind /dev/null "${1}/dev/null" && \ | |
mount --bind /dev/pts "${1}/dev/pts" && \ | |
mount --bind /dev/random "${1}/dev/random" && \ | |
mount --bind /dev/shm "${1}/dev/shm" && \ | |
mount --bind /dev/urandom "${1}/dev/urandom" && \ | |
mount --bind /proc "${1}/proc" && \ |
/* | |
This script attempts to identify all CSS classes mentioned in HTML but not defined in the stylesheets. | |
In order to use it, just run it in the DevTools console (or add it to DevTools Snippets and run it from there). | |
Note that this script requires browser to support `fetch` and some ES6 features (fat arrow, Promises, Array.from, Set). You can transpile it to ES5 here: https://babeljs.io/repl/ . | |
Known limitations: | |
- it won't be able to take into account some external stylesheets (if CORS isn't set up) | |
- it will produce false negatives for classes that are mentioned in the comments. |
exports.stripComments = function stripComments(toBeStrippedStr){ | |
//LEXER | |
function Lexer () { | |
this.setIndex = false; | |
this.useNew = false; | |
for (var i = 0; i < arguments.length; ++i) { | |
var arg = arguments [i]; | |
if (arg === Lexer.USE_NEW) { | |
this.useNew = true; | |
} |
All of the below properties or methods, when requested/called in JavaScript, will trigger the browser to synchronously calculate the style and layout*. This is also called reflow or layout thrashing, and is common performance bottleneck.
Generally, all APIs that synchronously provide layout metrics will trigger forced reflow / layout. Read on for additional cases and details.
elem.offsetLeft
, elem.offsetTop
, elem.offsetWidth
, elem.offsetHeight
, elem.offsetParent
// An `Object.observe()` "polyfill" using ES6 Proxies. | |
// | |
// Current `Object.observe()` polyfills [1] rely on polling | |
// to watch for property changes. Proxies can do one better by | |
// observing property changes to an object without the need for | |
// polling. | |
// | |
// Known limitations of this technique: | |
// 1. the call signature of `Object.observe()` will return the proxy | |
// object. The original object needs to be overwritten with this return value. |