wildfirechat野火IM搭建过程和demo试用
首先,当今微信当道,国内即时聊天工具没有第二家。不过当你进到一个群,群主会不停的告诉你,不要讨论一些不改讨论的事情,你就会发现,其实你说什么,群外之上还有人在看着你。
假设你跟爱人之间共享一些家里的密码之类的数据,是不是可能被一些人看到呢?天晓得!所以为了不自己整一个呢。平时两个人说啥也不至于发出去还要考虑一下别人会怎么看。所以就有了这个试水了。
野火IM是一套开源通用的即时通讯组件,本身就是一个比较成熟的产品。有PC,安卓,iOS,Web端,已经有了demo,部署起来直接能用。
项目搭建起来比较难的就是音视频中转服务器TURN服务。
说下自己搭建过程中遇到的坑。
第一次是在亚马逊的新加坡地区买了服务器,过程还比较顺利,稍微Google一些资料就搭建起来了。
安卓客户端按照说明改了配置,打包安装就能用。
不过后来发现,新加坡的服务器延迟比较严重,经常会有一些消息发不出。响应比较慢的情况。没办法只能想办法移回了阿里云深圳地区。
这其中就遇到了TURN服务搭建的一些坑,关键额就是3478的端口不仅要开TCP的,UDP的端口也要开,在这个问题上折腾了很久。这个图是我设置的策略组:
其他的服务,我是直接打包了aws上的文件过来,server和app_server这些这些配置都是不需要改的,启动即可。
下面是我打包好的iOS和安卓,有需要的可以试用:
iOS: 在iPhone打开safari浏览器,地址栏输入:
itms-services:///?action=download-manifest&url=https://www.lanjinming.com/wp-content/uploads/im.plist
安卓:https://www.lanjinming.com/wp-content/uploads/2021/01/chat-debug.apk
短信接口没有搭,试用了试用了超级验证码,需要的留言
快步是什么,有人找邀请码?试试 1635100
快步是什么?其实就是一个走路赚钱的APP,可能有人会不信,为什么走路可以赚钱,一开始我也是不信,我老婆卖了一个,支付宝收到十几块钱,我就信了。
双12那时刚好实名认证免费。平时实名认证就1块钱,也还好。
注册可能需要邀请码,可以填 1635100
实名认证送一张卷轴,30天有效期,一天走路5000步,得0.5个糖果,走3天可以得1.5个糖果
然后通过交易所卖掉1个(因为要0.5个手续费),现在的价格12.58(价格是变动的)
然后买家通过支付宝或者微信直接转账,款到了放行。
然后接着玩,接着卖。
wordpress插件集成vue
vue.js的简单让它可以很方便的集成到各应用中,相比react它更轻便灵活,所以react做大型应用是合适的。不过作为wordpress一个插件,react太重了。
其实,在wp的插件中集成vue是很简单的事情,可以看下面的代码示意,比较重要的是要先include页面进来,然后再引入vue.js,以及vue的初始化以及逻辑代码了
下面这个是插件主文件,我这里是dfass.php
function df_options_page_html() {
// check user capabilities
if (!current_user_can('manage_options')) {
return;
}
//加载页面
include(plugin_dir_path(__FILE__) . 'view.php');
//加载css
wp_enqueue_style('element-css', plugin_dir_url(__FILE__) . 'element.css', [], '2.14.1');
wp_enqueue_style('index.css', plugin_dir_url(__FILE__) . 'index.css', array(), '1.0');
//加载js
wp_enqueue_script('vue', plugin_dir_url(__FILE__) . 'vue.js', [], '2.6.12');
wp_enqueue_script('element-js', plugin_dir_url(__FILE__) . 'element.js', [], '2.14.1');
wp_enqueue_script('axios', plugin_dir_url(__FILE__) . 'axios.min.js', [], '0.21.1');
wp_enqueue_script('index.js', plugin_dir_url(__FILE__) . 'index.js', array(), '1.0');
init_user();
}
add_action('admin_menu', 'df_options_page');
function df_options_page() {
add_dashboard_page('钉钉表单助手', '钉钉表单助手', 'manage_options', 'df', 'df_options_page_html');
}
2. 接下来是view页面html文件view.php
<div id="app" class="wrapper">
<div class="centered">
<h2>钉钉表单助手</h2>
</div>
<template>
<el-row>
<el-input
v-model="value"
style="width: 300px"
placeholder="请输入手机号">
</el-input>
<el-button type="primary" v-on:click="btnClick()">添加</el-button>
<el-button type="primary" v-on:click="btnApply()">执行</el-button>
</el-row>
<el-row>
<el-table
:data="tableData"
stripe
style="width: 100%">
<el-table-column
prop="name"
label="用户名"
width="180">
</el-table-column>
<el-table-column
prop="user_id"
label="钉钉id"
width="180">
</el-table-column>
<el-table-column
prop="created_at"
label="添加时间">
</el-table-column>
<el-table-column
prop="last_time"
label="最后执行时间">
</el-table-column>
<el-table-column
prop="last_result"
label="最后执行结果">
</el-table-column>
<el-table-column
prop="enable"
label="状态">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<el-tag v-show="scope.row.enable===true" type="success" size="medium">启用</el-tag>
<el-tag v-show="scope.row.enable===false" type="info" size="medium">禁用</el-tag>
</div>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100">
<template slot-scope="scope">
<el-button v-show="scope.row.enable === false" @click="handleClick(scope.row,true)" type="primary"
size="small">启用
</el-button>
<el-button v-show="scope.row.enable === true" @click="handleClick(scope.row,false)" type="danger"
size="small">禁用
</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
</template>
</div>
3. 最后是vue初始化及逻辑代码index.js
(function () {
let vue = new Vue({
el: '#app',
data: function () {
return {
activeIndex: '1',
activeSubIndex: '1',
tableData: [],
loading: false,
value: undefined,
options: [],
}
},
mounted: function () {
this.getTableData()
},
methods: {
getTableData() {
let data = new FormData();
data.append('action', 'df_get_setting_list');
axios.post(ajaxurl, data).then(function (res) {
if (res.data.code !== 200) {
vue.$message({
message: res.data.message,
type: 'error'
});
return;
}
vue.tableData = res.data.data.userList;
})
},
handleClick(row, enable) {
let data = new FormData();
data.append('action', 'df_update_form_enable');
data.append('user_id', row.user_id);
data.append('enable', enable);
axios.post(ajaxurl, data).then(function (res) {
if (res.data.code !== 200) {
vue.$message({
message: res.data.message,
type: 'error'
});
}
vue.getTableData();
})
},
btnApply() {
let data = new FormData();
data.append('action', 'df_apply_form');
axios.post(ajaxurl, data).then(function (res) {
if (res.data.code !== 200) {
vue.$message({
message: res.data.message,
type: 'error'
});
}
vue.getTableData();
})
},
btnClick() {
let data = new FormData();
data.append('action', 'df_add_user_form');
data.append('phone', this.value);
this.value = undefined;
axios.post(ajaxurl, data).then(function (res) {
if (res.data.code !== 200) {
vue.$message({
message: res.data.message,
type: 'error'
});
}
vue.getTableData();
vue.$message({
message: '添加成功',
type: 'success'
});
})
}
}
})
})();
如上,其实就可以在wp插件中集成vue了,完整的逻辑代码省略。
这个插件其实实现的是,每天9点根据钉钉打卡记录检测如果有加班讲自动发起加班餐表单申请。
可能有的人觉得奇葩,加班餐都还要申请!确实,博主所在公司也是个几百人的“大公司”,所以规章很多。但加班了还要手动填单,说句实话虽然我不是多懒的人,但我觉得不符合我们做“懒人”宗旨。
具体实现的不开源了,需要了解详细的可以留言交流。
HR课程之一
2020年12月25日-26日
两天的人力资源课程结束了,花了一个周末的时间,公司给准备的课程,还是有一定意义的,做一个复盘。
这次课程主要围绕两个点进行:
如何组建团队 培养高绩效团队
一、组建团队
主要工作是如何做好招聘,主要经历几个阶段
岗位需求梳理 岗位说明书 招聘面试
面试的流程包括六个步骤
微笑迎接,寒暄轻松开场,自我介绍,提示过程中会做记录(轻松问) 请对方做3-5分钟自我介绍(简单问) 使用行为方式提问 收集信息,通过过往经历询问动力问题 ,核心胜任力( 复杂问) 请对方提问 (如果合适)适当介绍公司的优势和特色 感谢、告知后续的流程
动力问题的四个象限
不喜欢但需要做 喜欢工作中有 不喜欢庆幸工作中也不会遇到 喜欢但工作中没有
上工作中有,下工作中没有,左不喜欢做,右喜欢做
核心胜任力分可培养,或者难以培养,通常指半年内能取得比较好的成长
4、新人入职
二、团队成长
主要工作是让新人融入、为新人指定培训计划
1、新人入职前一周每天的培训计划
2、第一个月的培训计划
3、第二个月的培训计划
4、第三个月的培训计划
团队成员在团队的几个时期
适应期、成长期、爆发期、调整期
课后感想:其实很多过程我们平时在招聘时也确实是这么做的,只是我们可能都没有一些理论基础做支持,并不知道为什么要这样做。
但确实有一些我们是没有做到的,比如新人的培训计划,通常都是一周的熟悉时间,第二周就直接上手干项目了。
如果能为新人制定入职一周每天的计划,应该确实能帮助到新人,更快的融入到这个团队中,不至于忐忑和迷茫,这点以后确实需要加强。
常用命令
linux kill 特定名称
ps -ef | grep java | grep -v grep | cut -c 9-15 | xargs kill -9
sourcetree避免输入密码方法
git config --global credential.helper store
linux磁盘扩容
e2fsck -f /dev/vdb1 resize2fs /dev/vdb1
druid数据库密码配置文件加密
java -cp .\\druid-1.0.31.jar com.alibaba.druid.filter.config.ConfigTools ******
mac下csv乱码解决办法
到csv目录下, 用终端执行以下命令:
iconv -f UTF8 -t GB18030 a.csv >b.csv
MySQL修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '******';
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '******';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
Mac配置iTerm
切换
chsh -s /bin/zsh
chsh -s /bin/bash
其中,
bash的配置文件是 -/.bash_profile
zsh的配置文件是-/.zshrc
位置在用户家目录下,为隐藏文件
四 、 配置 Oh My Zsh
Oh My Zsh
是对主题的进一步扩展,下载地址https://github.com/robbyrussell/oh-my-zsh
1.一键安装:
via curl方式:
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
via wget方式:
$sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
2.手动方式安装,如下:
(git地址: https://github.com/ohmyzsh/ohmyzsh)
## 找到仓库, 然后clone到本地git clone https://github.com/ohmyzsh/ohmyzsh.git## 把仓库复制到 .oh-my-zsh目录cp -r ohmyzsh ~/.oh-my-zsh## 复制.zshrccp ohmyzsh/templates/zshrc.zsh-template ~/.zshrc## shell换成zshchsh -s /bin/zsh
3.安装好之后,需要把 Zsh 设置为当前用户的默认 Shell(这样新建标签的时候才会使用 Zsh):
$ chsh -s /bin/zsh
4.然后,将主题修改为ZSH_THEME="agnoster"
。
$ vim ~/.zshrc
输入i
进入编辑模式,将ZSH_THEME=""
编辑为 ZSH_THEME="agnoster"
按下esc
键,退出编辑,:wq
保存退出:
修改成功!
agnoster
是比较常用的 zsh 主题之一,你可以挑选你喜欢的主题,zsh 主题列表:https://github.com/robbyrussell/oh-my-zsh/wiki/themes补充:
上面提到的via wget安装方式需要安装wget,方法如下:
直接终端使用homebrew安装(前提是已经安装了homebrew)
安装命令:
$brew install wget
检验是否安装成功:
$ wget http://www.arefly.com/
image.png
五 、配置 Meslo 字体
使用上面的主题,需要 Meslo 字体支持,要不然会出现乱码的情况,字体下载地址:Meslo LG M Regular for Powerline.ttf
下载好之后,找到对应的字体,直接在 Mac OS 中安装即可。
然后打开 iTerm2,按Command + ,
键,打开 Preferences 配置界面,然后Profiles -> Text -> Font -> Chanage Font
,选择 Meslo LG M Regular for Powerline 字体。
六 、声明高亮
特殊命令和错误命令,会有高亮显示。
使用 Homebrew 安装:
$ brew install zsh-syntax-highlighting
安装成功之后,编辑vim ~/.zshrc文件,在最后一行增加下面配置:
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
方式2执行下面指令自动安装
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
然后编辑vim ~/.zshrc
文件,找到plugins配置,增加zsh-syntax-highlighting
插件。
image.png
七、自动建议填充
这个功能是非常实用的,可以方便我们快速的敲命令。
配置步骤,先克隆zsh-autosuggestions项目,到指定目录:
$ git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
然后编辑vim ~/.zshrc
文件,找到plugins配置,增加zsh-autosuggestions
插件。
高斯键盘设置指南
供电 : 蓝牙工作需要供电, 给高斯 GS87-D 供电有两种方式: 键盘背后的开关打到ON
; 使用 USB Type-C
电源. 切换模式 : 有线和无线模式切换键是 Fn
+P
按下 Fn
+P
右上角键盘灯闪烁 3 次, 有线模式和蓝牙模式互相切换. 但比较坑的是并没有指示灯表示当前处于有线模式还是蓝牙模式.对码 :长按 Fn
+P
直至 P
键快速闪烁, 键盘进入对码状态, 此时可以 在电脑/手机蓝牙界面搜索到 GS87-D Keyboard
;连接 :在电脑/手机设备上连接即可.一拖三: GS87-D 支持连接 3 个蓝牙设备并互相切换: 按下 Fn
+Q
/W
/E
, 右上角键盘灯闪烁 2 次, 切换到 频道1
/频道2
/频道3
; 执行对码 和连接 即可连接新设备, 同样使用 Fn
+Q
/W
/E
切换设备.
使用 USB Type-C 连接线连接键盘和设备, 此时设备上电自动进入上一次使用的模式(蓝牙或有线); 如果是蓝牙模式, 按一次 Fn
+P
切换到有线模式.下面的内容摘抄自说明书, 我自己并没有每个都使用过
按键 作用 Fn
+Space
长按 3 秒 恢复出厂设置 Fn
+Tab
打开/关闭宏定义 Fn
+Caps
Caps
和 Ctrl
键对调Fn
+Alt
Alt
和 Win
键对调Fn
+Z
/X
/C
按一次: 打开/关闭 Z
/X
/C
的宏定义; 长按: 录制/保存 Z
/X
/C
的宏定义 按键 作用 — — Fn
+F1
我的电脑 Fn
+F2
浏览器 Fn
+F3
E-mail Fn
+F4
音乐播放器 Fn
+F5
上一曲 Fn
+F6
下一曲 Fn
+F7
播放/暂停 Fn
+F8
停止 Fn
+F9
音量增大 Fn
+F10
音量减小 Fn
+F11
打开/关闭静音 Fn
+F12
计算器 按键 作用 — — Fn
+1
~7
7 种灯光模式 Fn
+8
/9
/0
按一次: 自定义灯光模式; 长按: 录制/保存自定义灯光 Fn
+↑
/↓
调节灯光亮度 Fn
+←
/→
调节灯光动态效果速度
__EOF__
跟大家Say Hello
今天是2020年12月25日,星期五,圣诞节!
我的个人今天正式跟大家Say Hello了,Hello World!
感觉取域名是件很麻烦的事,之前也搞注册过乱七八糟的域名,感觉跟自己都没什么关系,就算了,不玩了。所以干脆注册了个自己名字拼音的域名lanjinming.com。也不管是不是很长,反正现在记域名的人很好了吧
之前主体也做过备案,不过备案资料有变,感觉要修改要审核也是要很长时间,所以干脆就注销了主体,重新申请了一个。连域名一起备案还快一些。
这不圣诞前一天说备案通过了,今天就把它开起来吧。
wordpress还是很强大的,插件和主题的功能,扩展能力基本无敌,基于这个能做很多事情。以后会把自己的一些小工具尽量的做成插件。
基于现有的东西做开发可以省很多一些基础的搭建的工作,做过很多不想再做了。
以后这里会记录自己做过的,玩过的一些东西,后续开发的插件小工具也会在这里分享给大家,敬请期待!!
粤ICP备2020138247号-1