minikube安装

本地安装kubernetes开发环境minikube

下载安装

minikube官网选择系统对应的安装包

1
2
3
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

测试是否安装成功

启动minikube查看运行结果

1
minikube start

遇到的问题

安装之后,apt用的是阿里镜像,运行apt-get update报错

1
2
3
W: GPG error: https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB
E: The repository 'https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.

解决方法

1
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

linux中clash安装

下载地址github clash

1
wget https://github.com/Dreamacro/clash/releases/download/v1.8.0/clash-linux-amd64-v1.8.0.gz

解压

1
gunzip clash-linux-amd64-v1.8.0.gz

创建clash目录

1
2
mkdir ~/clash

复制文件到clash目录

1
mv clash-linux-amd64-v1.8.0 ~/clash/clash

进入clash目录下载配置

1
2
3
cd ~/clash
wget -O config.yaml https://xxx/config.yml

启动class

1
2
3
./clash -d .
# clash不能执行,加可执行权限
sudo chmod +x clash

打开clash dashboard,设置:Host: 127.0.0.1,端口: 9090

打开网络设置代理,HTTP和HTTPS代理为 127.0.0.1:7890,Socks代理为 127.0.0.1:7891。

nodejs安装

各个linux系统的包管理都可安装nodejs,但安装的版本往往不是自己想要的版本,最好是手动安装

下载

nodejs中文网找到自己想要的版本

1
2
wget https://npmmirror.com/mirrors/node/v16.13.1/node-v16.13.1-linux-x64.tar.xz

解压

1
tar -xvf node-v16.13.1-linux-x64.tar.xz

移动到指定位置

1
sudo mv node-v16.13.1-linux-x64 /usr/local/node

链接

1
2
3
sudo ln -s /usr/local/node/bin/node /usr/bin/node
sudo ln -s /usr/local/node/bin/npm /usr/bin/npm
sudo ln -s /usr/local/node/bin/npx /usr/bin/npx

添加到path

在.profile或者.bashrc中添加

1
PATH=$PATH:/usr/local/node/bin

添加镜像源

1
npm config set registry "https://registry.npm.taobao.org"

模拟器运行instantRunSplitApkResourcesDebug报错

android应用模拟器运行里提示/app/build/intermediates/instant_run_split_apk_resources/debug/instantRunSplitApkResourcesDebug/out/slice_1/resources_ap报错,解决方法:

依次打开
Preferences | Build, Execution, Deployment | Instant Run

不勾选
Enable Instant Run to hot swap code/resource changes on deploy(default enabled)

在shell中执行一个字符串

写shell脚本时经常会拼接一个字串,然后当成命令执行,用到的linux命令是eval ${str}或者echo ${str} | sh,例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env bash

start=1
amount=$1
raceId=$2
api_host=127.0.0.1:8080
str="curl --location --request POST 'http://${api_host}/api/AddBuy'
--header \"'Content-Type':'application/json'\"
--data-raw '{
\"PidStart\":$start,
\"Amount\":${amount},
\"RaceId\":${raceId}
}'"

echo ${str} | sh
# 或者
eval ${str}

js防抖和节流

防抖和节流在前端性能优化中很常用,防抖和节流都是对一段时间内事件触发函数执行频率的控制;使用场景就是当频繁事件时怎样去处理函数执行。

防抖

在限定时间内,如果事件再次触发,丢弃当前已响应的函数执行,以当前事件响应函数重新计时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function debounce(fn, wait) {
wait = wait || 200;
var timer = null;
return function () {
if (timer) {
clearTimeout(timer);
}
var args = arguments;
var that = this;
timer = setTimeout(function () {
timer = null;
fn.apply(that, args);
}, wait)
}
}

github多帐号添加ssh公钥

github有两个账号,但是同一个ssh公钥只能添加给一个账号,需要再生成一个密匙后添加。步骤如下:

再添加一个ssh密匙

1、指定邮箱

1
2
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Generating public/private rsa key pair.

2、提示输入生成位置和文件名,取个不同的名称。如: /Users/you/.ssh/id_rsa1

1
Enter file in swhich to save the key (/Users/you/.ssh/id_rsa):

显示上传到laravel的storage目录中的图片

Laravel提供了强大文件系统,开发文件管理非常方便。默认情况下web只能访问public公共磁盘目录。

访问storage下任意图片

如果图片不是放在storage公共磁盘中,可以定义一个用于访问图片的路由,如下:

routes/web.php定义路由:

1
2
3
4
5
// file manager
Route::group(['prefix' => 'filemanager'], function () {
Route::get('show', 'FileManageController@get')->name('filemanager.show');
});

FileManageController.php中定义action:

1
2
3
4
5
6
7
8
9
10
/**
* @param Request $request
* @return mixed
*/
public function get(Request $request)
{
$filename = $request->get('filename', '');
$file = Storage::get($filename);
return response($file, 200)->header('Content-Type', Storage::mimeType($filename));
}

view里的图片:

1
<img src="{{route('filemanager.show',['filename'=>$image['name']])}}">

深入理解JS执行细节

以前看Tom大叔的深入理解JS系列介绍的很在错,但这篇文章短而好懂,mark一份。

转自http://www.cnblogs.com/onepixel/p/5090799.html

javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈、全局对象、执行环境、变量对象、活动对象、作用域和作用域链等,这些概念正是JS引擎工作的核心组件。这篇文章的目的不是孤立的为你讲解每一个概念,而是通过一个简单的demo来展开分析,全局讲解JS引擎从定义到执行的每一个细节,以及这些概念在其中所扮演的角色。

1
2
3
4
5
6
7
8
9
10
var x = 1;  //定义一个全局变量 x
function A(y){
var x = 2; //定义一个局部变量 x
function B(z){ //定义一个内部函数 B
console.log(x+y+z);
}
return B; //返回函数B的引用
}
var C = A(1); //执行A,返回B
C(1); //执行函数B

这个demo是一个闭包,执行结果是4,下面我们将分全局初始化、执行函数A、执行函数B 三个阶段来分析JS引擎的工作机制:

Promise和Deferred的用法对比

ES6原生提供了Promise对象,高版本的nodejs可以直接使用,服务器端的开发中借住babel工具也可以使用,但是如果直接用到浏览器中,兼容性还是个问题。试下了最新的firefox和chorme浏览器都支持了,为了安全还是老老实实用jquery提供的Deferred对象吧。Promise能实现的功能$.Deferred也能实现。