Skip to content

Instantly share code, notes, and snippets.

@leon0707
leon0707 / parser.js
Last active May 6, 2018 19:11
Get metadata of a page by page-metadata-parser
const domino = require('domino');
const { getMetadata } = require('page-metadata-parser');
const fetch = require('node-fetch');
const request = async (url, cb) => {
const response = await fetch(url).catch(err => console.error(err));
const html = await response.text();
const doc = domino.createWindow(html).document;
const metadata = getMetadata(doc, url);
cb(metadata);
@leon0707
leon0707 / coursera.py
Created June 11, 2018 19:35
a snippet to download pdf and pptx
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import scrapy
import random, string, json, re
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
@leon0707
leon0707 / fbmessenger_client.py
Created December 10, 2018 17:29
Get client's information in the facebook messenger
import requests
import logging
logger = logging.getLogger(__name__)
class Client(object):
_page_access_token = ''
@leon0707
leon0707 / mysql-docker.sh
Created August 26, 2019 21:22 — forked from spalladino/mysql-docker.sh
Backup and restore a mysql database from a running Docker mysql container
# Backup
docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql
# Restore
cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE
@leon0707
leon0707 / start.sh
Last active November 5, 2019 17:09
New ubuntu starter
#!/bin/bash
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
sudo apt-get install htop apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-compose -y
@leon0707
leon0707 / react.html
Created January 18, 2020 20:40
react starter
<!DOCTYPE html>
<html>
<body>
<div id="root"></div>
<script src="https://unpkg.com/react@16.3.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16.3.2/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js" charset="utf-8"></script>
<script type="text/babel">
function Greeter(props) {
return <div>Hello {props.user}</div>;
@leon0707
leon0707 / mac_queue.py
Last active January 20, 2020 21:55
_semlock._get_value() NotImplementedError on mac
'''
qsize raises NotImplementedError on Unix platforms like Mac OS X where sem_getvalue() is not implemented.
https://docs.python.org/3.6/library/multiprocessing.html#multiprocessing.Queue.qsize
'''
import multiprocessing.queues
from queue import Empty, Full
class SharedCounter(object):
""" A synchronized shared counter.
@leon0707
leon0707 / web-worker.js
Last active February 4, 2020 14:53
a worker script
// web-worker.js
self.addEventListener('message', (event) => {
console.log('worker receives a msg');
if (event.data === 'close your thread') {
console.log('close msg received');
try {
self.close();
// this thread is terminated.
} catch (error) {
self.postMessage('cannot terminated by itself');
@leon0707
leon0707 / main.js
Created February 4, 2020 14:44
main script
// some old browsers don't support web worker
if (window.Worker) {
// create a worker thread
const worker = new Worker('web_worker.js');
// send the first msg to worker
worker.postMessage('hello worker');
worker.addEventListener('message', function(event) {
if (event.data === 'msg received, ack') {
console.log('main thread received the ack');
@leon0707
leon0707 / shared-worker.js
Last active February 4, 2020 14:52
shared worker
// shared-worker.js
onconnect = function(e) {
var port = e.ports[0];
port.onmessage = function(e) {
port.postMessage('send msg back to a script');
}
}
// client
if (!!window.SharedWorker) {
const myWorker = new SharedWorker("shared-worker.js");