Gowhich

Durban's Blog

ssh是一种网络协议,用于计算机之间的加密登录。ssh原理及应用可参考:

SSH原理与运用(一):远程登录

生成ssh key步骤

这里以配置github的ssh key为例:

  1. 生成ssh key
1
ssh-keygen -t rsa -C "邮箱"

然后根据提示连续回车即可在~/.ssh目录下得到id_rsa和id_rsa.pub两个文件,id_rsa.pub文件里存放的就是我们要使用的key。

  1. 上传key到github
1
clip < ~/.ssh/id_rsa.pub

复制key到剪贴板

登录github

点击右上方的Accounting settings图标

选择 SSH key

点击 Add SSH key

  1. 测试是否配置成功
1
ssh -T [email protected]

如果配置成功,则会显示:

1
Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.

解决本地多个ssh key问题

有的时候,不仅github使用ssh key,工作项目或者其他云平台可能也需要使用ssh key来认证,如果每次都覆盖了原来的id_rsa文件,那么之前的认证就会失效。这个问题我们可以通过在~/.ssh目录下增加config文件来解决。

下面以配置git oschina的ssh key为例。

  1. 生成ssh key时同时指定保存的文件名,这里也可以不用指定,只需要在创建的时候根据提示修改就可以,这里使用直接指定路径文件名的方式
1
ssh-keygen -t rsa -f ~/.ssh/oschina/id_rsa -C "email"

这时~/.ssh目录下会多出oschina/id_rsa和oschina/id_rsa.pub两个文件,id_rsa.pub里保存的就是我们要使用的key。

  1. 新增并配置config文件

添加config文件

如果config文件不存在,先添加;存在则直接修改

1
touch ~/.ssh/config

在config文件里添加如下内容(User表示你的用户名)

1
2
3
4
Host git.oschina.net
HostName git.oschina.net
IdentityFile ~/.ssh/oschina/id_rsa
User git
  1. 上传key到oschina http://git.oschina.net/profile/sshkeys

  2. 测试ssh key是否配置成功

1
ssh -T xx@xx

成功的话会显示:

1
Welcome to Git@OSC, 张大鹏!

至此,本地便成功配置多个ssh key。日后如需添加,则安装上述配置生成key,并修改config文件即可。

提示:在此过程中会出现如下问题

1,Bad owner or permissions on .ssh/config

2,进行测试的时候总会出现提示输入密码

解决办法参照另外一篇文章点击这里

配置多个ssh key的遇到的问题

1,Bad owner or permissions on .ssh/config

2,进行测试的时候总会出现提示输入密码

以上两个问题多数是由于权限的问题

解决问题一:

将config的执行权限修改为600

1
sudo chmod 600 ~/.ssh/config

解决问题二:

这个问题在我这里出现的原因是由于我将config拥有权限改成了root,导致出现的问题

如果你也遇到这样的问题的话,可以试着改成拥有权限为自己就可以了。

1
sudo chown xxx ~/.ssh/config

[xxx]为linux的当前用户

执行完之后在测试下,是不是已经就成功了,没有的话可以加群沟通

很奇怪的,这个是要去自己发现的,我也是在摸索中发现的,其实React的使用,只有你发现了,才觉得好玩,最近的Reflux就是这样子的。

##表单提交部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
handleSubmit:function(e){
e.preventDefault();
var params = {};
var keys = React.findDOMNode(this.refs.keys).value.trim();
var days = React.findDOMNode(this.refs.days).value.trim();
var num = React.findDOMNode(this.refs.num).value.trim();
var startDate = React.findDOMNode(this.refs.from_date).value.trim();
var endDate = React.findDOMNode(this.refs.to_date).value.trim();
//这部分是我自己发现的,哈哈
var regStyle = $('.regStyle')[0].value;
var userTerminal = $('.userTerminal')[0].value;
params['keys'] = keys;
params['regstyle'] = regStyle;
params['terminal'] = userTerminal;
params['days'] = days;
params['num'] = num;
params['startDate'] = startDate;
params['endDate'] = endDate;
this.props.searchHandle(keys,params);
return false;
},

##Render部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
render:function(){
return (
<form onSubmit={this.handleSubmit} className='form-inline'>
<div className="row" style={{'marginBottom':'10px'}}>
<div className="col-md-2">
<select refs="type" className='form-control input type' data-style="btn-default" title='任务类型'>
<option value=''>所有</option>
<option value='exportUserData'>账单导出</option>
<option value='repairDefaultData'>修复数据</option>
<option value='updateUserExtendData'>用户数据统计</option>
<option value='mockerImportMail'>模拟登录导入账单</option>
<option value='protocolImportMail'>协议登录导入账单</option>
<option value='mockerFundImport'>公积金查询账单</option>
<option value='mockerCOImport'>话费查询账单</option>
<option value='mockerOnlineShopImport'>网络平台导入账单</option>
<option value='sendPassword'>发送密码</option>
</select>
</div>
<div className="col-md-2">
<select refs="status" className='form-control input status' data-style="btn-default" title='任务状态'>
<option value=''>所有</option>
<option value='200'>执行中</option>
<option value='100'>等待执行</option>
<option value='900'>执行成功</option>
</select>
</div>
<div className="col-md-2">
<input type='submit' className="btn btn-primary btn-block" value="搜索" />
</div>
</div>
</form>
);
}

如果这个时候你使用select的话,什么onChange会在某种情况是不好用的,我的这个就是针对这种情况的,

因为我还使用了selectpicker这个bootstrap插件库”bootstrap-select”,感兴趣的可以去看看

所谓gulp对less的一条龙服务是指,由less编译为css,再由css编译为min.css,再由min.css编译为min.css.map

大白话就是Less文件转为css文件,然后将css文件压缩,再然后生成css压缩文件的map文件最后就得到了我们的需要使用的

min文件和一些奇葩浏览器要用到的map文件

gulp的配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var gulp = require('gulp');
var gulpLess = require('gulp-less');
var gulpConcat = require('gulp-concat');
var gulpSourcemaps = require('gulp-sourcemaps');
var gulpMinifyCss = require('gulp-minify-css');
var gulpRename = require('gulp-rename');
gulp.task('less',function(){
return gulp.src(paths.less)
.pipe(gulpLess())
.pipe(gulp.dest('./app/css'))//这个是要存放css的目录
.pipe(gulpConcat('./app.css'))//这个是生成的css文件名
.pipe(gulpSourcemaps.init())
.pipe(gulpMinifyCss())
.pipe(gulpRename({
'suffix': '.min'
}))
.pipe(gulpSourcemaps.write('./'))
.pipe(gulp.dest('./app/css'))
});

然后没有安装gulp的去google下安装一下

运行

gulp less

在使用gulp-less的时候会出现这样的一个问题

这个修改之前的代码

1
2
3
4
5
6
7
8
9
10
11
//变量声明
var paths = {
'less':[
'./app/less/**/*.less',
]
};
gulp.task('less',function(){
return gulp.src(paths.less)
.pipe(gulpLess())
.pipe(gulp.dest('./app/css'))
});

其实我的意思就是,将我less目录下面的所有文件合并成一个app.css

但是这样执行确实行不通,会爆出来很多的错误。之前还是一头雾水,后来换了方式

这个修改之后的代码

1
2
3
4
5
6
7
8
9
10
11
12
//变量声明
var paths = {
'less':[
'./app/less/app.less',
'./app/less/main.less',
]
};
gulp.task('less',function(){
return gulp.src(paths.less)
.pipe(gulpLess())
.pipe(gulp.dest('./app/css'))
});

其实这样执行就没有问题了,其实很明了,问题已经出现了,也知道了原因,因为我们要生成一个文件app.css,那么其实app.less是主要文件

那么在其中的一些变量都是引过来,然后执行。那么我之前的代码问题就是在于我要将所有的less文件都编译成对应的css,我的天,怎么可能,

那要解决的问题就是每个文件都要引入需要的文件,哈哈,糊涂了。

问题出现的情况是,我喜欢使用sublime text 写博客,写完后在粘贴进去。

也是我就新建一个,但是没有保存,因为我觉的,反正写完就删除了,结果呢,写汉字的时候就会非常的慢。

这个问题一直都有,还特意去google上搜索了一下,也未果。

今天突然来了灵感,我发现原因是我没有保存,于是我试了一下,结果果然,保存一个临时一个地方再进行操作就块了很多。

分析原因:应该是内存的问题,我没有保存文件的话,数据应该临时存到内存或者其他地方了,反正应该不是硬盘,内存不够的话,就会

出现很慢计算,我觉的是这个原因,其实这个问题也是有的,我觉得处理逻辑是应该将为保存的文件临时存到/tmp这样的类似目录,

如果正式存储的话在进行切换,删除tmp目录的文件,其实就是copy一份啦。要不然就给个提示嘛,说不行了,内容太多了,哈哈

Sublime Text 3常用快捷键

快捷键组合 功能
shift + cmd + p 打开命令面板
control + ` 控制台
cmd + n 新建标签
cmd + 数字 标签切换
cmd + option + 2 分成两屏
control + 数字 分屏时移动到不同的屏幕
cmd + delete 删除光标前所有字符, 貌似是Mac快捷键
cmd + f 查找
option + cmd + f 查找替换
cmd + t 文件跳转
control + g 行跳转, 类似vim中的num + gg
cmd + r 函数跳转
cmd + / 给选中行添加或去掉注释
cmd + [或 cmd + ] 智能行缩进
cmd + k + b 开关侧边栏

简介

brew cask是一个用命令行管理Mac下应用的工具,它是基于homebrew的一个增强工具。

homebrew可以管理Mac下的命令行工具,例如imagemagick, nodejs,如下所示:

1
2
brew install imagemagick
brew install node

而使用上brew cask之后,你还可以用它来管理Mac下的Gui程序,例如qq, chrome, evernote等,如下所示:

1
2
3
brew cask install qq
brew cask install google-chrome
brew cask install evernote

安装

安装homebrew

用以下一行命令即可安装homebrew

1
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

之后执行 brew doctor 命令可以看看homebrew的环境是否正常。通常第一次安装完brew之后,还需要安装苹果的Command Line Tools。

安装cask

用如下命令来安装cask:

1
2
brew tap phinze/cask
brew install brew-cask

LaunchRocket

LaunchRocket是一个管理brew安装的service的工具,安装之后可以看所有的service的运行状态,如下图所示:

安装LaunchRocket就要用到我刚刚提的brew cask,用如下命令即可:

1
2
brew tap jimbojsb/launchrocket
brew cask install launchrocket

Reflux是根据React的flux创建的单向数据流类库。

Reflux的单向数据流模式主要由actions和stores组成。例如,当组件list新增item时,会调用actions的某个方法(如addItem(data)),并将新的数据当参数传递进去,通过事件机制,数据会传递到stroes中,stores可以向服务器发起请求,并更新数据数据库。数据更新成功后,还是通过事件机制传递的组件list当中,并更新ui。整个过程的对接是通过事件驱动的。

这里记录一个比较实用的实例;具体的想看详情的可以去‘http://segmentfault.com/a/1190000002793786#articleHeader24’这里仔细研读。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
var TodoActions = Reflux.createActions([
'getAll',
'addItem',
'deleteItem',
'updateItem'
]);
var TodoStore = Reflux.createStore({
items: [1, 2, 3],
listenables: [TodoActions],
onGetAll: function () {
$.get('/all', function (data) {
this.items = data;
this.trigger(this.items);
}.bind(this));
},
onAddItem: function (model) {
$.post('/add', model, function (data) {
this.items.unshift(data);
this.trigger(this.items);
}.bind(this));
},
onDeleteItem: function (model, index) {
$.post('/delete', model, function (data) {
this.items.splice(index, 1);
this.trigger(this.items);
}.bind(this));
},
onUpdateItem: function (model, index) {
$.post('/update', model, function (data) {
this.items[index] = data;
this.trigger(this.items);
}.bind(this));
}
});
var TodoComponent = React.createClass({
mixins: [Reflux.connect(TodoStore, 'list')],
getInitialState: function () {
return {list: []};
},
componentDidMount: function () {
TodoActions.getAll();
},
render: function () {
return (
<div>
{this.state.list.map(function(item){
return <TodoItem data={item}/>
})}
</div>
)
}
});
var TodoItem = React.createClass({
componentDidMount: function () {
TodoActions.getAll();
},
handleAdd: function (model) {
TodoActions.addItem(model);
},
handleDelete: function (model,index) {
TodoActions.deleteItem(model,index);
},
handleUpdate: function (model) {
TodoActions.updateItem(model);
},
render: function () {
var item=this.props.data;
return (
<div>
<p>{item.name}</p>
<p>{item.email}</p>
<p>/*操作按钮*/</p>
</div>
)
}
});
React.render(<TodoComponent />, document.getElementById('container'));

《藏海传》观众吐槽合集:野心与能力的失衡,权谋剧变“翻车现场”

作为2025年备受期待的权谋剧,《藏海传》开播后却因剧情、演技、制作等多方面问题引发争议。结合观众吐槽和剧评分析,以下是主要槽点总结:


一、剧情逻辑:硬伤频出,权谋变“过家家”

1. 灭门惨案草率开局

开篇平津侯屠戮藏海全家的情节被批“反派智商下线”——杀人灭口不搜地道、不查线索,直接放火烧屋,逻辑漏洞明显。后续藏海复仇过程更离谱,十年苦修后仍被青楼女子骗财骗色,被调侃“卧薪尝胆变菜市场砍价”。

2. 权谋设计低智化

剧中权谋斗争依赖巧合与“机械降神”,例如藏海身份暴露多次靠配角救场,策反仇人之子竟因“坟头长毒草”等荒诞理由。反派集体降智,平津侯为灭口屠戮全家的动机被批“缺乏历史合理性”。

3. 节奏拖沓与魔改争议

首集用45分钟铺垫灭门事件,后续学艺过程冗长空洞,被吐槽“微短剧式快进都救不了”。部分观众认为剧情强行蹭“盗墓”元素(如阴兵、葵玺),实际内容与宣传的“权谋复仇”严重偏离。


二、演员表现:主角光环刺眼,群像失衡

1. 肖战演技争议

肖战饰演的藏海被批“瞪眼式表演”,复仇情绪平淡如“上数学课”,与仇人画像对视时毫无恨意,被嘲“金扫帚影帝实至名归”。部分观众认为其缺乏《琅琊榜》梅长苏的隐忍与层次感。

2. 老戏骨“吊打”主演

黄觉(平津侯)、钟汉良(曹静贤)等老戏骨凭借眼神戏和台词功底碾压主角,形成鲜明对比。反派角色因演员表现生动,被调侃“比男主更像复仇者”。

3. 配角工具化与人设崩塌

香暗荼(张婧仪饰)从情报高手沦为“恋爱脑”,冬夏女王(余男饰)因“香肠嘴”造型和恋爱脑人设遭吐槽。高明师父(周奇饰)嬉皮笑脸的形象与“纵横术大师”定位严重不符。


三、制作问题:审美崩塌与特效翻车

1. 暗黑滤镜致画面窒息

剧组为追求“电影质感”滥用暗色调,白天追剧需调高手机亮度,弹幕吐槽“导演贪污电费”。

2. 服化道廉价感明显

服装款式普通、质感粗糙,场景搭建缺乏细节,被批“五毛特效”。冬夏女王的貂皮大氅(diāo pí dà chǎng)与闪亮首饰搭配“香肠嘴”,视觉违和感强烈。

3. 动作戏与打光灾难

打戏被嘲“菜鸡互啄”,藏海与平津侯对峙时“健步如飞”的主角光环更令人出戏。


四、其他争议:宣传与现实的割裂

1. “盗墓笔记前传”挂羊头卖狗肉

宣传强调“葵玺”与盗墓关联,实际剧情聚焦权谋复仇,探墓元素沦为背景板。

2. 粉丝控评引发反感

负面评价遭粉丝围攻,被指“容不得理性批评”,进一步败坏路人缘。


总结:野心与能力的失衡

《藏海传》的问题本质是“大IP+流量明星”模式的失败:剧本缺乏深度打磨,角色沦为工具人,制作细节失控,最终导致权谋剧应有的智斗博弈沦为“儿童过家家”。尽管郑晓龙的执导曾成就《甄嬛传》等经典,但本剧暴露的审美偏差与叙事混乱,或将成为古装剧创作的又一反面教材。

建议:若偏好强逻辑权谋剧,可绕道;若冲着肖战颜值或猎奇剧情,可浅尝前几集,但需备好“速效救心丸”应对逻辑硬伤。

0%