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的初始化以及逻辑代码了

  1. 下面这个是插件主文件,我这里是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: &#91;],
                loading: false,
                value: undefined,
                options: &#91;],
            }
        },
        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日

两天的人力资源课程结束了,花了一个周末的时间,公司给准备的课程,还是有一定意义的,做一个复盘。

这次课程主要围绕两个点进行:

  1. 如何组建团队
  2. 培养高绩效团队

一、组建团队

主要工作是如何做好招聘,主要经历几个阶段

  1. 岗位需求梳理
  2. 岗位说明书
  3. 招聘面试

面试的流程包括六个步骤

动力问题的四个象限

不喜欢但需要做喜欢工作中有
不喜欢庆幸工作中也不会遇到喜欢但工作中没有
上工作中有,下工作中没有,左不喜欢做,右喜欢做

核心胜任力分可培养,或者难以培养,通常指半年内能取得比较好的成长

4、新人入职

二、团队成长

主要工作是让新人融入、为新人指定培训计划

1、新人入职前一周每天的培训计划

2、第一个月的培训计划

3、第二个月的培训计划

4、第三个月的培训计划

团队成员在团队的几个时期

适应期、成长期、爆发期、调整期

课后感想:其实很多过程我们平时在招聘时也确实是这么做的,只是我们可能都没有一些理论基础做支持,并不知道为什么要这样做。

但确实有一些我们是没有做到的,比如新人的培训计划,通常都是一周的熟悉时间,第二周就直接上手干项目了。

如果能为新人制定入职一周每天的计划,应该确实能帮助到新人,更快的融入到这个团队中,不至于忐忑和迷茫,这点以后确实需要加强。

粤ICP备2020138247号-1