- macOS
- Go2Shell
- iTerm2
安装Go2Shell之后把快捷在当前目录打开终端设置好之后,在终端内输入一下命令:
open -a Go2Shell --args config
执行以下步骤,
然后再打开 Finder ,点击 Go2Shell 小图标即可在 iTerm2 。
安装Go2Shell之后把快捷在当前目录打开终端设置好之后,在终端内输入一下命令:
open -a Go2Shell --args config
执行以下步骤,
然后再打开 Finder ,点击 Go2Shell 小图标即可在 iTerm2 。
Workerman 是一款开源高性能异步 PHP socket 即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、MQTT物联网客户端、异步消息队列等众多高性能组件。
原文:List of Chromium Command Line Switches
拓展:
macOS 命令行打开Chrome
# case 1
/Applications/Google\ Chrome.app/Contents/macOS/Google\ Chrome
# case 2
/Applications/Google\ Chrome.app/Contents/macOS/Google\ Chrome https://webclown.net
# case 3 app 模式
/Applications/Google\ Chrome.app/Contents/macOS/Google\ Chrome --app=https://webclown.net
Ps:原文时间 2016-09-10 13:30
git add -A
和git add .
、git add -u
在功能上看似很相近,但还是存在一点差别
git add .
:他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。git add -u
:他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u
不会提交新文件(untracked file)。(git add --update
的缩写)git add -A
:是上面两个功能的合集(git add --all
的缩写)下面是具体操作例子,方便更好的理解(Git version 1.x):
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
git add -A
:提交所有变化git add -u
:提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)git add .
:提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件New Files | Modified Files | Deleted files | Description |
---|---|---|---|
git add -A | ✅ | ✅ | ✅ |
git add . | ✅ | ✅ | ❎ |
git add -u | ❌ | ✅ | ✅ |
New Files | Modified Files | Deleted files | Description |
---|---|---|---|
git add -A | ✅ | ✅ | ✅ |
git add . | ✅ | ✅ | ✅ |
git add –ignore-removal | ✅ | ✅ | ❎ |
git add -u | ❌ | ✅ | ✅ |
在 XCode 中打开项目,并打包(command + b
),在项目的根目录的 Products:
然后在桌面上新建一个文件夹,随意取个名字(例如:项目名字),然后将Products目录中的.app
文件复制进去,为了实现拖拽到Applications
的效果,需要在这个文件夹里放一个Applications
的替身。具体做法是cd到这个目录,建立一个软链接(用终端):
cd ~/Desktop/[刚刚创建的文件夹]
ln -s /Applications/ Applications
创建.dmg
文件需要用到Mac自带的磁盘工具
App。打开磁盘工具
,菜单栏选择文件
–新建镜像
–来自文件的镜像
,然后选择刚刚创建的文件夹,
然后就OK了。
参考:
PS:cuImage不是自己开发的,引用别人的。
Column A | Column B | Column C |
---|---|---|
Art | Cryptocurrency | Science |
True | Personal Finance | Justice |
Technology | Programming | |
Philosophy | Comics | Women |
Basic | Gaming | Addiction |
Education | Masculinity | Style |
Psychology | Business | Space |
Privacy | Fiction | Data Science |
Blockchain | World | Visual Design |
Spirituality | Family | Work |
Race | Relationships | Math |
Media | Books | Film |
TV | Poetry | Environment |
Podcasts | Food | Health |
Cities | Mental | Productivity |
San | Language | Machine Learning |
LGBTQIA | Humor | Parenting |
History | Politics | Self |
Internet Culture | Sports | Pets |
Music | Accessibility | Sexuality |
Design | Culture | Future |
Medium Magazine | Writing | Economy |
Creativity | Religion | Gadgets |
Startups | Social | Psychedelics |
Neuroscience | iOS | Artificial Intelligence |
Self | Software Engineering | Android Dev |
Wellness | Freelancing | Gun |
Cybersecurity | Marketing | Disability |
UX | Photography | Leadership |
Javascript | Transportation | Equality |
macOS 10.11 开始引入的系统完整性保护(Rootless),不再能够随心所欲的读写很多路径下了。设置 root 权限也不行。
Rootless机制将成为对抗恶意程序的最后防线
于是尝试关闭 Rootless。重启按住 Command+R,进入恢复模式,打开Terminal(终端)。
csrutil disable
重启即可。如果要恢复默认,那么
csrutil enable
csrutil命令参数格式:
csrutil enable [--without kext | fs | debug | dtrace | nvram][--no-internal]
禁用:csrutil disable
(等同于csrutil enable –without kext –without fs –without debug –without dtrace –without nvram)
其中各个开关,意义如下:
由于团队在进行前后端分离,前端接管了Nginx和node层,在日常的工作中,跟Nginx打交道的时候挺多的。之前对location的匹配规则是一知半解的,为了搞明白location是如何匹配的,查了些资料总结此文。希望能给大家带来帮助。
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
语法规则很简单,一个location
关键字,后面跟着可选的修饰符,后面是要匹配的字符,花括号中是要执行的操作。
=
表示精确匹配。只有请求的url路径与后面的字符串完全相等时,才会命中。~
表示该规则是使用正则定义的,区分大小写。~*
表示该规则是使用正则定义的,不区分大小写。^~
表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找。对请求的url序列化。例如,对%xx
等字符进行解码,去除url中多个相连的/
,解析url中的.
,..
等。这一步是匹配的前置工作。
location有两种表示形式,一种是使用前缀字符,一种是使用正则。如果是正则的话,前面有~
或~*
修饰符。
具体的匹配过程如下:
首先先检查使用前缀字符定义的location,选择最长匹配的项并记录下来。
如果找到了精确匹配的location,也就是使用了=
修饰符的location,结束查找,使用它的配置。
然后按顺序查找使用正则定义的location,如果匹配则停止查找,使用它定义的配置。
如果没有匹配的正则location,则使用前面记录的最长匹配前缀字符location。
基于以上的匹配过程,我们可以得到以下两点启示:
/
的话,可以使用=
来定义location。接下来我们以一个例子来具体说明一下匹配过程。
假如我们有下面的一段配置文件:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /user/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
请求/
精准匹配A,不再往下查找。
请求/index.html
匹配B。首先查找匹配的前缀字符,找到最长匹配是配置B,接着又按照顺序查找匹配的正则。结果没有找到,因此使用先前标记的最长匹配,即配置B。
请求/user/index.html
匹配C。首先找到最长匹配C,由于后面没有匹配的正则,所以使用最长匹配C。
请求/user/1.jpg
匹配E。首先进行前缀字符的查找,找到最长匹配项C,继续进行正则查找,找到匹配项E。因此使用E。
请求/images/1.jpg
匹配D。首先进行前缀字符的查找,找到最长匹配D。但是,特殊的是它使用了^~修饰符,不再进行接下来的正则的匹配查找,因此使用D。这里,如果没有前面的修饰符,其实最终的匹配是E。大家可以想一想为什么。
请求/documents/about.html
匹配B。因为B表示任何以/
开头的URL都匹配。在上面的配置中,只有B能满足,所以匹配B。
@用来定义一个命名location。主要用于内部重定向,不能用来处理正常的请求。其用法如下:
location / {
try_files $uri $uri/ @custom
}
location @custom {
# ...do something
}
上例中,当尝试访问url找不到对应的文件就重定向到我们自定义的命名location(此处为custom)。
值得注意的是,命名location中不能再嵌套其它的命名location。
/
需不需要关于URL尾部的/
有三点也需要说明一下。第一点与location配置有关,其他两点无关。
/
都没有影响。也就是说/user/
和/user
是一样的。https://domain.com/
的形式,尾部有没有/
都不会造成重定向。因为浏览器在发起请求的时候,默认加上了/
。虽然很多浏览器在地址栏里也不会显示/
。这一点,可以访问baidu验证一下。https://domain.com/some-dir/
。尾部如果缺少/
将导致重定向。因为根据约定,URL尾部的/
表示目录,没有/
表示文件。所以访问/some-dir/
时,服务器会自动去该目录下找对应的默认文件。如果访问/some-dir
的话,服务器会先去找some-dir
文件,找不到的话会将some-dir
当成目录,重定向到/some-dir/
,去该目录下找默认文件。可以去测试一下你的网站是不是这样的。location的配置有两种形式,前缀字符和正则。查找匹配的时候,先查找前缀字符,选择最长匹配项,再查找正则。正则的优先级高于前缀字符。
正则的查找是按照在配置文件中的顺序进行的。因此正则的顺序很重要,建议越精细的放的越靠前。
使用=
精准匹配可以加快查找的顺序,如果根域名经常被访问的话建议使用=
。
转自:https://segmentfault.com/a/1190000013267839
用下面这段代码连接MongoDB数据库出现了警告提示:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
警告提示:
(node:10626) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
更改为一下代码即可:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }, (err,res) => {
if (!err) {
console.log('连接数据成功!')
} else {
console.log('连接数据失败!');
}
})
初始化 WordPress 项目时出现了一系列错误,关键词是:
CREATE command denied to user webclown@x.x.x.x for table
wp_users]
出现问题的原因是因为 webclown 没有读写数据库权限。给 webclown 用户授权即可。