Reproducing a Traefik with SSL and Portainer setup on a 2 Node Docker Swarm
Install Docker on both nodes with a Bootstrap Script:
$ curl https://gitlab.com/rbekker87/scripts/raw/master/setup-docker-ubuntu.sh | bash
# to generate your dhparam.pem file, run in the terminal | |
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048 |
javascript:(function({ | |
var INSTAPAPER=true,w=window,d=document,pageSelectedTxt=w.getSelection?w.getSelection():(d.getSelection)?d.getSelection():(d.selection?d.selection.createRange().text:0),pageTitle=d.title,pageUri=w.location.href,tmplt=""; | |
tmplt="From ["+pageTitle+"]("+pageUri+"):\n\n"; | |
if(pageSelectedTxt!="") { | |
pageSelectedTxt=">%20"+pageSelectedTxt; | |
pageSelectedTxt=pageSelectedTxt.replace(/(\r\n|\n+|\r)/gm,"\n"); | |
pageSelectedTxt=pageSelectedTxt.replace(/\n/g,"\n>%20\n>%20"); | |
w.location.href="nvalt://make/?txt="+encodeURIComponent(tmplt+pageSelectedTxt)+"&title="+encodeURIComponent(pageTitle) | |
} | |
else { |
// Use Gists to store code you would like to remember later on | |
console.log(window); // log the "window" object to the console |
<div id="counter"> | |
<button @click="up()">+</button> | |
<p id="count">{{ value }}</p> | |
<button @click="down()">-</button> | |
</div> | |
<script> | |
var counter = new Vue({ | |
el: '#counter', | |
data: { | |
value: 0 |
<?php | |
/** | |
* Add Continue Shopping Button on Cart Page | |
* Add to theme functions.php file or Code Snippets plugin | |
*/ | |
add_action( 'woocommerce_before_cart_table', 'woo_add_continue_shopping_button_to_cart' ); | |
function woo_add_continue_shopping_button_to_cart() { |
<?php | |
// Geo Redirect using Cloudflare | |
$activepage = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; | |
$country_code = $_SERVER["HTTP_CF_IPCOUNTRY"]; | |
$page_from = "www.domain.tld/"; | |
$page_to = "www.newdomain.tld/"; | |
?> | |
<!-- Country Code : <?php echo $country_code; ?> --> | |
<!-- Active URL : <?php echo $activepage; ?> --> |
<?php | |
wp_load_translations_early(); | |
$protocol = wp_get_server_protocol(); | |
header( "$protocol 503 Service Unavailable", true, 503 ); | |
header( 'Content-Type: text/html; charset=utf-8' ); | |
header( 'Retry-After: 30' ); | |
?> | |
<!DOCTYPE html> | |
<html> |
/* keep a reference to original toISOString to use it into new method */ | |
const oldToISOString = Date.prototype.toISOString | |
/* Define new method */ | |
const toISOString = function toISOString(date) { | |
if(!date) return date; | |
/* extract GTM timezone from date.toString() */ | |
const regex = /(?:GMT)([-+]\d*)/gm; | |
let gtm = regex.exec(date.toString())[1]; | |
gtm = [...gtm]; | |
/* insert ':' in time -0500 -> -05:00*/ |
There is an increasing count of applications which use Authy for two-factor authentication. However many users who aren't using Authy, have their own authenticator setup up already and do not wish to use two applications for generating passwords.
Since I use 1Password for all of my password storing/generating needs, I was looking for a solution to use Authy passwords on that. I couldn't find any completely working solutions, however I stumbled upon a gist by Brian Hartvigsen. His post had a neat code with it to generate QR codes for you to use on your favorite authenticator.
His method is to extract the secret keys using Authy's Google Chrome app via Developer Tools. If this was not possible, I guess people would be reverse engineering the Android app or something like that. But when I tried that code, nothing appeared on the screen. My guess is that Brian used the