Skip to main content

Lost Temple

好久没写博客了

好久没来写点东西了。打算不写技术博客了,人要学技术,网上写的人还是太多了。而且写的比我更好,我也就不在这方面去费时间了。

打算就写点我的所见,所闻,所感,记录下岁月吧。可能还能引起一些共鸣。

从2007年我就喜欢博客,那时候有搜狐博客,新浪博客,经常去看韩寒,老徐,还有个极地阳光。想想现在的网红,其实逻辑没变。那时候写博客人气高的也是网红。

现如今变成了短视频的天下了,不过现在也有微博,知乎,小红书之类的。但是本质还是没变,还是看访问量,看粉丝。以前粉丝经济没这么强,现在粉丝经济那就是相当强了。

我的oh My Zsh主题

最近想改下iTerm的oh-my-zsh主题,看知乎讨论,有一款简洁的主题映入眼帘。

## 主题名称

half-life

## 修改PROMPT

然后去oh-my-zsh.sh修改PROMPT

vim ~/.oh-my-zsh/oh-my-zsh.sh

在文件末尾添加一行:

PROMPT=$'%{$purple%}%n%{$reset_color%} in %{$limegreen%}%~%{$reset_color%}$(ruby_prompt_info " with%{$fg[red]%} " v g "%{$reset_color%}")$vcs_info_msg_0_%{$orange%}%{$reset_color%} at %{$hotpink%}%* %{$orange%}λ%{$reset_color%} '

效果如下

Ubuntu18.04/Mysql5.7改成utf8编码

## 问题背景

向MySQL插入中文内容显示问号

## 原因

Server端的MySQL不支持utf8, 部分是latin1编码格式。

mysql>show variables like "%char%";

+--------------------------------------+----------------------------+
| Variable_name                        | Value                      |
+--------------------------------------+----------------------------+
| character_set_client                 | latin1                     |
| character_set_connection             | latin1                     |
| character_set_database               | utf8mb4                    |
| character_set_filesystem             | binary                     |
| character_set_results                | latin1                     |
| character_set_server                 | latin1                     |
| character_set_system                 | utf8                       |
| character_sets_dir                   | /usr/share/mysql/charsets/ |
| validate_password_special_char_count | 1                          |
+--------------------------------------+----------------------------+
9 rows in set (0.02 sec)

## 解决办法

1、直接登录MySQL改数据库, 但是MySQL重启后,修改会失效。

Ubuntu18.04使用supervisor守护进程

## 问题背景

最近部署了一个python server在我买的服务器上,想让他一直运行,否则一断开服务器的话,python server提供的API就访问不了了。

于是想着用supervisor来做守护进程, 本文就是记录supervisor 的安装、配置、使用技巧,并设置如何supervisor开机自动启动

## 机器环境

Ubuntu版本:18.04

Ubuntu用户:root

## Ubuntu安装supervisor

apt install supervisor

## Ubuntu配置supervisor

安装完成后,会生成一个默认的配置文件/etc/supervisor/supervisord.conf, 这个默认配置里面也会load所有在conf.d目录下的配置

root@test:/etc/supervisor# tree
.
|-- conf.d
|   `-- we.conf
`-- supervisord.conf

1 directory, 2 files

supervisord.conf这个默认配置会load所有在conf.d目录下的配置,所以我们接下来在conf.d目录下新建一个我们自己的配置

touch /etc/supervisor/conf.d/we.conf

参照默认配置文件supervisord.conf里的内容改改,配置内容如下

[program:we]
directory=/home/test/
command=sh we.sh
autostart=true
autorestart=true
startretries=10
redirect_stderr=true
stdout_logfile=/home/test/out.log

具体也可参照官方给的详细文档: http://supervisord.org/configuration.html

## 检查supervisor的状态

1、检查supervisor的状态

ps aux | grep supervisor

root@test:/etc/supervisor# ps aux | grep supervisor
root      2551  0.0  2.0  65580 21508 ?        Ss   12:39   0:09 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
root      7720  0.0  0.1  13116  1044 pts/0    S+   16:46   0:00 grep --color=auto supervisor

当看到如上对应的进程,就说明supervisor启动是成功的。

Vue Vite初学报错大全

## 项目环境

机器:mac

框架:vue3

版本:vue=^3.0.4

###报错信息

[vite] Internal server error: Failed to parse source for import analysis because the content contains invalid JS syntax. Install @vitejs/plugin-vue to handle .vue files.

## 问题描述

1、安装Vite及初始化项目

npm init vite-app vue3demo004
npm install
npm run dev

2、手动配置完项目后, 项目目录如下

├── node_modules
├── package-lock.json
├── package.json
├── public
│   └── favicon.ico
├── src
│   ├── App.vue
│   ├── assets
│   │   └── logo.png
│   ├── components
│   │   └── HelloWorld.vue
│   ├── index.css
│   └── main.js

###关键文件信息

寻找Mac java_home

# 前期准备

  1. 下载JDK安装包:在JDK1.8下载中选择Mac的JDK安装包
  2. 安装JDK:这里只要按照安装指引一步一步安装即可

# 查找JAVA_HOME

  1. 打开Mac的终端,检查JDK是否安装成功:java -version
  2. 查看java指令所在的目录:which java。输出结果:/usr/bin/java
  3. 显示java指令文件的属性:ls -l /usr/bin/java。输出结果如下:lrwxr-xr-x 1 root wheel 74 12 2 06:44 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java,从输出结果可以知道**/usr/bin/java文件是一个链接文件,实际是指向/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java**文件的。
  4. 进入实际指令所在的文件夹:cd /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands。但是这个目录并不是JAVA_HOME目录。
  5. 然后就是最重点的地方,在这个目录下面有一个mac的JDK特有的java_home指令可以查看JDK的JAVA_HOME目录。执行指令:./java_home执行结果如下:/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home

# 设置JAVA_HOME

  1. 编辑.bash_profile文件:vim ~/.bash_profile
  2. 添加以下内容:export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Homeexport PATH=$JAVA_HOME/bin:$PATH
  3. 使修改的文件生效:source ~/.bash_profile

Linux command

## 一些命令

  • 查看目录结构 tree mac默认是没有tree命令的,所以可以有2种办法:
  • brew install tree
  • find . -print | sed -e ’s;[^/]*/;|;g;s;|; |;g'
  • 查看代码有多少行 find . -name “*.py” | xargs wc -l
  • 删除所有的pyc文件 find . -name “*.pyc” -delete
  • 返回到上一个目录 cd -
  • 生成随机数 jot -r [number_of_numbers] [lower_limit] [upper_limit]
  • 显示当前谁登陆到了你的系统 w
  • 将一个字符串打印很多次 yes [string]
  • 更好看的git log git log –graph –abbrev-commit –decorate –date=relative –format=format:’%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)’ –all
  • 更好看的git log(带详细信息) git log –graph –abbrev-commit –decorate –date=relative –format=format:’%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)’ –all -p
  • curl相关命令
  • 直接输出到命令行 curl http://www.centos.org
  • 输出到指定文件 curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.htmlor 直接用url里面的文件名 curl -O http://www.gnu.org/software/gettext/manual/gettext.html
  • 允许redirects curl -L http://www.google.com
  • 断点续传 curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html也可指定续传的位置
  • 限定下载速度 curl –limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html
  • 需要认证 curl -u username:password URL
  • 使用代理 curl -x proxysever.test.com:3128 http://google.co.in
  • 发邮件 curl –mail-from blah@test.com –mail-rcpt foo@test.com smtp://mailserver.com输入后,就可以开始写邮件内容, .表示结束 Subject: Testing This is a test mail .
  • HTTP Method curl –request GET ‘http:*//www.somedomain.com/’*curl –request POST ‘http:*//www.somedomain.com/curl –request DELETE ‘http:*//www.somedomain.com/curl –request PUT ‘http:*//www.somedomain.com/ 传入参数 curl –request POST ‘http:*//www.somedomain.com/login/’ –data ‘username=myusername&password=mypassword’*curl –data-urlencode “date=April 1” ‘http:*//example.com/form.cgi上传文件: curl –request POST ‘http:*//127.0.0.1:8008/api/trace_file’ -F ’trace_file=@journal.txt;type=text/plain’
  • 带上头部信息 curl –request GET ‘http:*//www.somedomain.com/user/info/’ –header ‘sessionid:1234567890987654321’需要请求返回带上头信息: curl –request GET ‘http:*//somedomain.com/’ –include-I 则是只显示头信息
  • 获取详细返回结果 curl -v ‘http:*//somedomain.com/’*还不够详细? curl –trace output.txt ‘http:*//somedomain.com/or curl –trace-ascii output.txt ‘http:*//somedomain.com/
  • 提供referer信息 curl –referer ‘http:*//www.example.com http://www.example.com’*
  • UA curl –user-agent “[User Agent]” [URL]
  • cookie curl –cookie “name=xxx” www.example.com
  • 带host访问 curl -H ‘Host: project1.loc’ ‘http:*//127.0.0.1/something’*
  • 命令行打开任一程序(限OSX) open /Applications/Safari.app/ or 打开一个目录 open .
  • 粘贴复制(限OSX) 将一个文件内容拷贝到clipboard: pbcopy < blogpost.txt 将clipboard的内容追加到文件: pbpaste » tasklist.txt
  • 截图(限OSX) 屏幕截图保存到image.png并发送到Mail中 screencapture -C -M image.png 鼠标选择区域截图并保存到clipboard screencapture -c -W 10秒之后截图并用Preview打开 screencapture -T 10 -P image.png 鼠标截取任意区域内容,保存为pdf screencapture -s -t pdf image.pdf
  • 说出任意内容(限OSX) say ‘You love me.’
  • OSX读写ntfs格式移动硬盘 mkdir -p /Volumes/1 && sudo mount -t ntfs /dev/disk1s1 /Volumes/1 之后操作1文件夹就行了 弹出: sudo umount /dev/disk1s1

Wget用法

我会向你展示10个 Wget 命令的实际案例. Wget 是一个用于下载文件的免费工具,它支持大多数常用的Internet协议,包括 HTTP, HTTPS, 以及 FTP.

Wget这个名字来源于 World Wide Web + get. Wget 有很多功能,可以很方便地做到下载大型文件,递归下载,一次下载多个文件以及镜像web网站和FTP站点.

Wget是非交互式的,但是使用起来相当的灵活. 你可以在脚本,cron任务,终端等地方调用它. 它可以在用户未登陆的情况下运行在后台. 也就是说你可以开始下载文件,然后退出系统,wget会在后台运行直到完成任务.

在本文中,我将演示一些wget的使用例子, 这些例子都很常见,比如下载文件,比如镜像整个网站.

在演示前,我们先在 Ubuntu 16.04 VPS 上安装wget.

请注意,虽然该演示是在 Ubuntu 16.04 上进行的, 但是这些命令在其他 Linux 发行版中同样适用.

登陆服务器并安装wget

第一步是 通过SSH登陆服务器.

使用下面命令更新你的服务器:

apt-get update apt-get upgrade

然后安装wget软件包:

apt-get install wget

安装完成后,就可以开始使用wget命令了.

下载单个文件 wget最常用也是最简单的用法就是用来下载单个文件.

你可以用下面命令想下载最新版的WordPress

wget https://wordpress.org/latest.zip

你会看到如下输出:

–2017-10-14 03:46:06– https://wordpress.org/latest.zip Resolving wordpress.org (wordpress.org)… 66.155.40.250, 66.155.40.249 Connecting to wordpress.org (wordpress.org)|66.155.40.250|:443… connected. HTTP request sent, awaiting response… 200 OK Length: 8912693 (8.5M) [application/zip] Saving to: ’latest.zip'

同一台电脑双Github账号配置

因为用Hugo开了一个新Blog,然后原来github账号的blog我想一直保留,所以就有了2个github账号,这样放在一台电脑上就不好管理。

因为github不支持同一个SSH绑定不同的github账号。这样如果我想用github A账号,我就要换成A账号的私钥,用github B账号就要换成B账号的密钥,挺麻烦的。于是网上找到教程,搞成功了。

第一步:假设已经有了A B密钥账号,分别保存在~/.ssh目录下,名字为id_rsa_public, id_rsa_private,当然公钥也是与之对应。

第二步:编辑 ~/.ssh/config 文件。如果该文件不存在的话,直接创建一个就好。里面的内容如下:

# public account
Host github_public
HostName ssh.github.com
IdentityFile ~/.ssh/id_rsa_public
port 22

# private account
Host github_private
HostName ssh.github.com
IdentityFile ~/.ssh/id_rsa_private
port 22

第三步:把这两个密钥对应的公钥添加到对应的github账号上。

第四步:执行bash命令,确认能够跟github那边鉴权成功

ssh -T git@github_public
ssh -T git@github_private

当你看到如下信息, 就说明成功了

➜  ssh -T git@github_public
Hi YOURNAME! You've successfully authenticated, but GitHub does not provide  access.

第五步:仓库设置

# 删除全局设置
git config --global --unset user.name
git config --global --unset user.email

# 添加本地设置
# 设置为私有仓库的GitHub账号邮箱和公有账号的GitHub邮箱。
git config --local user.name xxxx
git config --local user.email xxx

第六步,进入你的github项目根目录,然后执行命令

DABDA

from https://twitter.com/cryptoismyjam/status/1548114053247012865

1/ The future of our funds is in limbo.

The company that told us “Banks are Not Your Friends” & “Unbank Yourself” violated our trust in a most egregious manner.

We are sad. Angry. Brokenhearted.

Here are the 5 Stages of Grief (DABDA) according to a Celsian

1/ 我们的基金前途未卜。

告诉我们“银行不是你的朋友”和“你自己取消银行”的公司以最令人震惊的方式违反了我们的信任。

我们都很伤心。生气的。心碎了。

这是根据 Celsian

2/ I am not a licensed psychologist, nor do I seek to provide any clinical advice.