Filtrar Array por valor

removeProduct(id) {
                const cart = this.cart;
                const filteredItems = cart.filter(item => item.id !== id);
                this.cart = filteredItems;
            }

ternary operators

($user->is_logged_in() ? $user->get('first_name') : 'Guest')

Email Extraction

Extracting emails from a string.
#entire email is group
#first part is name, any char and any period, in a range bracket, repeating
#then @ symbol
#next part is domain, any char, a period, in a range bracket
pattern = r'([\w\.]+@[\w\.]+)'
string = 'my email is susie.filange@gmail.com'

print(re.findall(pattern, string))#find all searches entire string for pattern

Email Extraction

Extracting emails from a string.
#entire email is group
#first part is name, any char and any period, in a range bracket, repeating
#then @ symbol
#next part is domain, any char, a period, in a range bracket
pattern = r'([\w\.]+@[\w\.]+)'
string = 'my email is susie.filange@gmail.com'

print(re.findall(pattern, string))#find all searches entire string for pattern

Processwire Upload File

Processwire Upload File
<?php
	/**
	 * 	Uplaod File
	 * 
	 * 	@var file_field_name	str: name of the file field in the uplaod form
	 * 
	 */
	public function uplaodFile($file_field_name = "") {

		// set uplaod path
		$upload_path = $this->config->paths->siteModules . $this->className() . "/xml/";

		// WireUpload
		$f = new WireUpload("$file_field_name");
		$f->setMaxFiles(1);
		$f->setOverwrite(true);
		$f->setDestinationPath($upload_path);
		$f->setValidExtensions(array("$file_field_name"));

		// if there is no uplaod path trow error
		if(!is_dir($upload_path)) {
			if(!wireMkdir($upload_path)) throw new WireException("No upload path!");
		}

		// execute upload
		try {

			$f->execute();

		} catch(Exception $e) {

			$error = $e->getMessage();
			$this->error($error); 

		}

	}

Debugging

# Debugging

## Types
```js
typeof
```

## Console
* `console.log();`
* `console.clear();`

Rich Text Editor - CKEditor v4.6.2

<html>
<head>
    <meta charset="utf-8">
    <script src="//cdn.ckeditor.com/4.6.2/standard/ckeditor.js"></script>
    <style>
        .button {
            background-color: #116b9c;
            color: white;
            border: none;
            padding: 10px 20px;
            text-align: center;
            font-family: 'Arial';
        }
    </style>
    <script type="text/javascript">
        window.onload = () => {

            CKEDITOR.replace("editor1", {
                toolbar: [
                    { name: 'document', groups: [ 'mode', 'document', 'doctools' ], items: [ 'Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates' ] },
                    { name: 'clipboard', groups: [ 'clipboard', 'undo' ], items: [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ] },
                    { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ], items: [ 'Find', 'Replace', '-', 'SelectAll', '-', 'Scayt' ] },
                    { name: 'forms', items: [ 'Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField' ] },
                    '/',
                    { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ], items: [ 'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat' ] },
                    { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ], items: [ 'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl', 'Language' ] },
                    { name: 'links', items: [ 'Link', 'Unlink', 'Anchor' ] },
                    { name: 'insert', items: [ 'Image', 'Flash', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe' ] },
                    '/',
                    { name: 'styles', items: [ 'Styles', 'Format', 'Font', 'FontSize' ] },
                    { name: 'colors', items: [ 'TextColor', 'BGColor' ] },
                    { name: 'tools', items: [ 'Maximize', 'ShowBlocks' ] },
                    { name: 'others', items: [ '-' ] },
                    { name: 'about', items: [ 'About' ] }
                ]
            });
        };

        setInterval(function sendText() {
            window.parent.postMessage(CKEDITOR.instances.CK1.getData(), "*");
        }, 500);
    </script>
</head>
<body>
<textarea name="editor1" id="CK1"></textarea>
<br>
<!--<button class="button" onclick="sendText()">Submit text</button>-->
</body>
</html>

Tic Tac Toe

Tic Tac Toe, comparing values based on difference.

#Note: this was worked out on paper before hand
#associate numbers with game input
gameDict = {
   'R':1,
   'P':2,
   'S':3
}
#turns counter
turns = 0

while True:
   #ask input
   playerOneInput = input('Player 1, choose R, P, S: ')
   playerTwoInput = input('player 2, choose R, P, S: ')

   #retrieve game dict values
   dictVal1 = gameDict[playerOneInput]
   dictVal2 = gameDict[playerTwoInput]

   #we use a difference among dict values to compare winner
   difference = dictVal1 - dictVal2

   #player one wins when diff are [-2,1,1]
   #player two wins when diff are [2,-1,-1]
   #based on the differences of dict values, either player 1 or player 2 wins
   if difference == -2 or difference == 1:
      print('player One wins')
   elif difference == 0: #draw if difference is 0, S & S, 3 - 3
      print('draw')
   else:
      print('player Two wins')

   #break out of loop after 7 turns
   turns +=1

   if turns == 7:
      break






OOP w/ Javascript

Implement a simplified filesystem using Object Oriented Programming consisting of only Files and Directories. Directories can contain Files or other Directories. Both Files and Directories should have attributes 'name', 'filesize', 'writeable'. Given a 'tree' that looks like Directory - File - Directory - Directory - File Change the 'writeable' attribute for each object from true to false
/*
Implement a simplified filesystem using Object Oriented Programming
consisting of only Files and Directories. Directories can contain
Files or other Directories. Both Files and Directories should have 
attributes 'name', 'filesize', 'writeable'.

Given a 'tree' that looks like
Directory
  - File
  - Directory
    - Directory
    - File
Change the 'writeable' attribute for each object from true to false
*/

class Directory extends File {
 constructor(name, filesize, writeable, children = []) {
   super(name, filesize, writeable);
   this.children = children;
 }
  
  setWriteable(writeable) {
    super(writeable);
    for (const child of this.children) {
      child.setWritable(writeable);
    }
  }
}

class File {
  constructor(name, filesize, writeable) {
   this.name = name;
   this.filesize = filesize;
   this.writeable = writeable;
  }
  
  setWriteable(writeable) {
    this.writeable = writeable;
  }
}

FORM dropdown

exclusively for work
##select_hrm.form..formName.formName2_choices,separated,by,commas##

Taxonomy page show posts count

As stated in the edit:

$count = $GLOBALS['wp_query']->post_count;
Another option would be to use

$count = $GLOBALS['wp_query']->found_posts

Single taxonomy / category page

single_cat_title(); 
single_tag_title();
the_archive_description();

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); 
echo $term->term_group;

You can use it for the all of the following values:

term_id
name
slug
term_group
term_taxonomy_id
taxonomy
description
parent
count

Jenkins Docker with docker cmd

FROM jenkins/jenkins:latest

##Install docker
RUN apt-get install docker.io -y

breadcrumb + shortcode

https://gist.github.com/Dimox/5654092
function dimox_breadcrumbs($atts) {
	ob_start();
  $a = shortcode_atts( array(
    'test' => '#',
	), $atts );
	
	/* === OPTIONS === */
	$text['home']     =  get_the_title(get_option('page_on_front')); // text for the 'Home' link
	$text['category'] = 'Archive by Category "%s"'; // text for a category page
	$text['search']   = 'Search Results for "%s" Query'; // text for a search results page
	$text['tag']      = 'Posts Tagged "%s"'; // text for a tag page
	$text['author']   = 'Articles Posted by %s'; // text for an author page
	$text['404']      = 'Error 404'; // text for the 404 page
	$text['page']     = 'Page %s'; // text 'Page N'
	$text['cpage']    = 'Comment Page %s'; // text 'Comment Page N'
	$wrap_before    = '<div class="breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">'; // the opening wrapper tag
	$wrap_after     = '</div><!-- .breadcrumbs -->'; // the closing wrapper tag
	$sep            = '<span class="breadcrumbs__separator"> > </span>'; // separator between crumbs
	$before         = '<span class="breadcrumbs__current">'; // tag before the current crumb
	$after          = '</span>'; // tag after the current crumb
	$show_on_home   = 0; // 1 - show breadcrumbs on the homepage, 0 - don't show
	$show_home_link = 1; // 1 - show the 'Home' link, 0 - don't show
	$show_current   = 1; // 1 - show current page title, 0 - don't show
	$show_last_sep  = 1; // 1 - show last separator, when current page title is not displayed, 0 - don't show
	/* === END OF OPTIONS === */
	global $post;
	$home_url       = home_url('/');
	$link           = '<span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">';
	$link          .= '<a class="breadcrumbs__link" href="%1$s" itemprop="item"><span itemprop="name">%2$s</span></a>';
	$link          .= '<meta itemprop="position" content="%3$s" />';
	$link          .= '</span>';
	$parent_id      = ( $post ) ? $post->post_parent : '';
	$home_link      = sprintf( $link, $home_url, $text['home'], 1 );
	if ( is_home() || is_front_page() ) {
		if ( $show_on_home ) echo $wrap_before . $home_link . $wrap_after;
	} else {
		$position = 0;
		echo $wrap_before;
		if ( $show_home_link ) {
			$position += 1;
			echo $home_link;
		}
		if ( is_category() ) {
			$parents = get_ancestors( get_query_var('cat'), 'category' );
			foreach ( array_reverse( $parents ) as $cat ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
			}
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				$cat = get_query_var('cat');
				echo $sep . sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_current ) {
					if ( $position >= 1 ) echo $sep;
					echo $before . sprintf( $text['category'], single_cat_title( '', false ) ) . $after;
				} elseif ( $show_last_sep ) echo $sep;
			}
		} elseif ( is_search() ) {
			if ( $show_home_link && $show_current || ! $show_current && $show_last_sep ) echo $sep;
			if ( $show_current ) echo $before . sprintf( $text['search'], get_search_query() ) . $after;
		} elseif ( is_year() ) {
			if ( $show_home_link && $show_current ) echo $sep;
			if ( $show_current ) echo $before . get_the_time('Y') . $after;
			elseif ( $show_home_link && $show_last_sep ) echo $sep;
		} elseif ( is_month() ) {
			if ( $show_home_link ) echo $sep;
			$position += 1;
			echo sprintf( $link, get_year_link( get_the_time('Y') ), get_the_time('Y'), $position );
			if ( $show_current ) echo $sep . $before . get_the_time('F') . $after;
			elseif ( $show_last_sep ) echo $sep;
		} elseif ( is_day() ) {
			if ( $show_home_link ) echo $sep;
			$position += 1;
			echo sprintf( $link, get_year_link( get_the_time('Y') ), get_the_time('Y'), $position ) . $sep;
			$position += 1;
			echo sprintf( $link, get_month_link( get_the_time('Y'), get_the_time('m') ), get_the_time('F'), $position );
			if ( $show_current ) echo $sep . $before . get_the_time('d') . $after;
			elseif ( $show_last_sep ) echo $sep;
		} elseif ( is_single() && ! is_attachment() ) {
			if ( get_post_type() != 'post' ) {
				$position += 1;
				$post_type = get_post_type_object( get_post_type() );
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_post_type_archive_link( $post_type->name ), $post_type->labels->name, $position );
				if ( $show_current ) echo $sep . $before . get_the_title() . $after;
				elseif ( $show_last_sep ) echo $sep;
			} else {
				$cat = get_the_category(); $catID = $cat[0]->cat_ID;
				$parents = get_ancestors( $catID, 'category' );
				$parents = array_reverse( $parents );
				$parents[] = $catID;
				foreach ( $parents as $cat ) {
					$position += 1;
					if ( $position > 1 ) echo $sep;
					echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
				}
				if ( get_query_var( 'cpage' ) ) {
					$position += 1;
					echo $sep . sprintf( $link, get_permalink(), get_the_title(), $position );
					echo $sep . $before . sprintf( $text['cpage'], get_query_var( 'cpage' ) ) . $after;
				} else {
					if ( $show_current ) echo $sep . $before . get_the_title() . $after;
					elseif ( $show_last_sep ) echo $sep;
				}
			}
		} elseif ( is_post_type_archive() ) {
			$post_type = get_post_type_object( get_post_type() );
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_post_type_archive_link( $post_type->name ), $post_type->label, $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_home_link && $show_current ) echo $sep;
				if ( $show_current ) echo $before . $post_type->label . $after;
				elseif ( $show_home_link && $show_last_sep ) echo $sep;
			}
		} elseif ( is_attachment() ) {
			$parent = get_post( $parent_id );
			$cat = get_the_category( $parent->ID ); $catID = $cat[0]->cat_ID;
			$parents = get_ancestors( $catID, 'category' );
			$parents = array_reverse( $parents );
			$parents[] = $catID;
			foreach ( $parents as $cat ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );
			}
			$position += 1;
			echo $sep . sprintf( $link, get_permalink( $parent ), $parent->post_title, $position );
			if ( $show_current ) echo $sep . $before . get_the_title() . $after;
			elseif ( $show_last_sep ) echo $sep;
		} elseif ( is_page() && ! $parent_id ) {
			if ( $show_home_link && $show_current ) echo $sep;
			if ( $show_current ) echo $before . get_the_title() . $after;
			elseif ( $show_home_link && $show_last_sep ) echo $sep;
		} elseif ( is_page() && $parent_id ) {
			$parents = get_post_ancestors( get_the_ID() );
			foreach ( array_reverse( $parents ) as $pageID ) {
				$position += 1;
				if ( $position > 1 ) echo $sep;
				echo sprintf( $link, get_page_link( $pageID ), get_the_title( $pageID ), $position );
			}
			if ( $show_current ) echo $sep . $before . get_the_title() . $after;
			elseif ( $show_last_sep ) echo $sep;
		} elseif ( is_tag() ) {
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				$tagID = get_query_var( 'tag_id' );
				echo $sep . sprintf( $link, get_tag_link( $tagID ), single_tag_title( '', false ), $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_home_link && $show_current ) echo $sep;
				if ( $show_current ) echo $before . sprintf( $text['tag'], single_tag_title( '', false ) ) . $after;
				elseif ( $show_home_link && $show_last_sep ) echo $sep;
			}
		} elseif ( is_author() ) {
			$author = get_userdata( get_query_var( 'author' ) );
			if ( get_query_var( 'paged' ) ) {
				$position += 1;
				echo $sep . sprintf( $link, get_author_posts_url( $author->ID ), sprintf( $text['author'], $author->display_name ), $position );
				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;
			} else {
				if ( $show_home_link && $show_current ) echo $sep;
				if ( $show_current ) echo $before . sprintf( $text['author'], $author->display_name ) . $after;
				elseif ( $show_home_link && $show_last_sep ) echo $sep;
			}
		} elseif ( is_404() ) {
			if ( $show_home_link && $show_current ) echo $sep;
			if ( $show_current ) echo $before . $text['404'] . $after;
			elseif ( $show_last_sep ) echo $sep;
		} elseif ( has_post_format() && ! is_singular() ) {
			if ( $show_home_link && $show_current ) echo $sep;
			echo get_post_format_string( get_post_format() );
		}
		echo $wrap_after;
	}

	$content = ob_get_contents();
  ob_end_clean();
  return $content;
} // end of dimox_breadcrumbs()
add_shortcode('breadcrumb', 'dimox_breadcrumbs');

Jenkins server Docker

docker service create -td --replicas 1 --name jenkins \
  -p 8081:8080 \
  -p 51000:51000 \
  --mount type=bind,source=/home/juanes/Projects/jenkins/jenkins_home/,destination=/var/jenkins_home \
  -e JENKINS_SLAVE_AGENT_PORT=51000 \
  jenkins/jenkins:latest

Vim eliminar espacios al final de linea

Vim eliminar espacios al final de linea
:%s/\s\+$//gec