论坛和社区如何防止垃圾文章和评论

在V2上看到被 spam 评论给弄疯了,如何有效的建立机器学习模型呢?,想起以前做论坛和信息发布平台的一些经历,也曾头痛过,总结自己以及网友的经验如下。

通过关键词库识别spam内容

如何建立关键词库

  • 人工方法收集词库;
  • 导入网上词库;
  • 收集历史内容,然后通过分词方式抽取词;
  • 使用网络上的开源spam机器学习方案;

如何运用关键词库

  • 匹配前利用正则表达式去空白
  • 使用正则表达式对整段内容运用关键词库进行多次匹配
  • 分词然后匹配词,因为分词通常不够精准,所以除非特殊情况不建议,效率上分词加词组匹配的时间不一定会比正则快

通过联系方式特征识别spam内容

如何识别联系方式

  • 数字联系方式:如④,肆等
  • 网址:.com等
  • 手机号、电话号等
  • 邮箱
  • 通讯软件:微信,咸鱼等

如何运用联系方式反spam

  • 正则表达式

通过用户身份识别spam内容

如何识别用户身份

  • 手机号认证
  • 邮箱认证
  • 微信,微博等第三方认证
  • ip地址识别
  • ip归属地识别
  • 手机归属地识别
  • 身份认证:身份证、人脸识别

如何运用身份识别反spam

  • 建立手机号,邮箱,IP,归属地黑名单
  • 注册、登录验证码
  • 答题识别
  • 邀请注册
  • 付费注册

通过操作特征识别spam内容

操作特征识别

  • 发布频率
  • 注册时间

如何运用操作特征识别反spam

  • 注册后一定时间内不允许发帖
  • 发帖消耗积分

识别后的处理

  • 过滤信息,进入待审核
  • 禁言用户(可设置时间)
  • 屏蔽账号(ip,手机号,邮箱等)
  • 屏蔽归属地(可以过一个月再打开)
  • 屏蔽所有用户发布信息(含用户名)

开源方案

商业方案

C++学习资料

电子书

纸质书

如何通过阅读源代码学习?

有选择的阅读

跟着大师学习,让你更接近大师,学习不好的代码,有可能被带进沟里,如何发现值得阅读的代码呢?

  • github star超过10K的
  • 开发参与人数超过5人的
  • 文档完善的(如有多语言版本、区分普通用户和开发者文档等)
  • 用户多的(issue规模可以看出,对应npm,composer,pypi的downloads等)
  • 发展时间等超过半年

阅读步骤

掌握正确的阅读步骤,能够让你少走弯路,起到磨刀不误砍柴工的作用。正确的方法应该是带着问题学习。

  • 运行软件:软件解决了什么问题?
  • 看用户说明书:软件有什么特点?
  • 看开发者文档:软件整体架构是怎样的?
  • 看代码组织结构:当前组织方式的优缺点?
  • 看代码的数据库结构:数据是如何存储的?
  • 针对特定问题解决办法深入学习:我的方式是什么?作者的方式是什么?有没有更好的解决办法?

学习的要点

  • 学习解决问题的思路和方法:思路就是思考的路径,了解他人的思路,我们就有可能能变得和他人一样聪明。思路是方向,方向对了事半功倍,方向错了事倍功半。比如“空间换时间”,“并行”等。
  • 学习编程的技巧:比如类、方法、变量命名,语言特性,设计模式等。
  • 学习软件架构的方法:即代码目录结构,数据存放,数据库设计,数据流,使用的第三方库等。
  • 学习软件的商业逻辑:如软件的界面,交互,用户体验,营销方法等。

Windows自动化打印Office文件(Word,PDF,Excel,PPT等)

Windows(C++)

WPF(.net C#)

Win10磁盘清理

临时文件

依此选择“c盘”》属性》磁盘清理

修改系统分页文件存储位置

我的电脑,右键,“高级系统设置”》“高级”》“性能”》“高级”》“虚拟内存”》修改C盘为无分页文件;

关闭休眠文件内存占用

开始菜单输入cmd,选择管理员身份运行"命令提示符",在命令提示符运行 powercfg -h off;

删除旧版windows备份文件

如果windows升级上来的,Windows.old备份文件也是可以删除的

Matplotlib使用中文字体(linux)

查看系统已有中文字体

fc-list :lang=zh

查询matplotlib默认配置示例

import matplotlib
matplotlib.matplotlib_fname()

查看当前系统matplotlib配置文件路径

import matplotlib
matplotlib.get_configdir()

全局修改

在系统如今下新增matplotlibrc文件,然后修改font.sans-serif,添加中文字体

font.sans-serif : WenQuanYi Micro Hei, Bitstream Vera Sans, ...

只修改当前程序

import matplotlib
matplotlib.rcParams['font.sans-serif'] = 'WenQuanYi Micro Hei'

参考

开源CRM/ERP比较

名称 语言 协议 提供外部API 项目地址
悟空 PHP/JAVA 商业 否(但是管理后台采用rest) https://gitee.com/wukongcrm/72crm
PSI PHP GPLv3 插件化ERP https://gitee.com/crm8000/PSI
SugarCRM PHP GPLv3 开源版本已不更新 https://sourceforge.net/projects/sugarcrm/
SuiteCRM PHP GPLv3 基于SugarCRM,目前仍在更新 https://github.com/salesagility/SuiteCRM
VtigerCRM PHP GPLv3 基于SugarCRM,开源版本已不更新
Odoo Python GPLv3 插件化ERP https://github.com/odoo/odoo
OFBiz Java Apache 未知 https://ofbiz.apache.org/

最后得出,
CRM完全免费用SuiteCRM,悟空收费中文支持好。
小型ERP选择Odoo,大公司ERP选择OFBiz。

《任正非传》读后感

如果本书能取一个副标题的话,可以是《论毛泽东思想在企业管理中的运用》

实时求是

  • 知错善改:华为多次危机都能避免,在于能够很快找到问题所在和解决办法
  • 破格提拔:不以年龄,经验,经历为界限(李一男等)
  • 没有调查就没有发言权:赴美考察,让听到炮声的人做决定
  • 知己知彼百战不殆:思科之争利用美国律师对付美国律师

与时俱进

  • 格局:中华有为
  • 技术上:世界先进
  • 管理上:国际化
  • 组织架构:多次变革
  • 华为基本法
  • 薪酬体系
  • 轮值上岗

群众路线

  • 敌人的敌人就是朋友:善于抓住阶段主要矛盾,团结一切可以团结的力量,如团结四大抵抗国外和邮电
  • 善用舆论:如思科之争,面对美国制裁

Appwrite介绍:开源的移动和WEB后端服务

Appwrite是面向前端和移动开发人员的新型开源端到端后端服务器,可让您更快地构建应用程序。

Appwrite的目标是抽象和简化REST API和工具背后的常见开发任务,以帮助开发人员更快地构建高级应用程序。

在这篇文章中,我将简要介绍一些主要的Appwrite服务,并解释它们的主要功能以及它们的设计方式,以帮助您比从头开始编写所有后端API时更快地构建下一个项目。

Appwrite服务器打包为docker容器,您可以使用本地计算机或云提供商终端上的简单docker-compose命令轻松设置。

mkdir appwrite-ce && \
cd appwrite-ce && \
curl -o docker-compose.yml https://appwrite.io/docker-compose.yml && \
docker-compose up -d --remove-orphans

Appwrite身份验证

您可以轻松地将OAuth提供程序集成为应用程序的新登录方法

通过Appwrite身份验证服务,您可以轻松管理用户注册并登录您的应用。Auth服务还提供与多个OAuth提供商的内置集成,如Facebook,Github,LinkedIn等。

除了管理对您的应用及其不同资源的访问控制之外,Auth服务还抽象其他重复任务,例如管理用户电子邮件确认和密码恢复。

使用Auth服务可以节省构建稳定安全的用户身份验证和授权系统所带来的大量时间和顾虑,同时还必须与多个第三方登录方法集成。

Appwrite帐户

file

Appwrite Account服务向您的客户端公开了一个API,允许您与当前登录的用户帐户进行交互。

Appwrite帐户服务可让您管理用户活动会话。

帐户服务允许您的用户更新其帐户相关信息,并保存他们的私人偏好,如用户界面语言,时区或喜爱的主题。您可以使用您希望的任何偏好设置用户。

您还可以使用API获取用户活动会话的列表,包括有关会话位置,设备,操作系统和用户代理的信息。使用API安全日志端点,您可以让用户查看其最新登录,密码恢复和其他安全敏感事件。

Appwrite数据库

file

Appwrite数据库仪表板允许您轻松浏览项目集合和文档。

Appwrite数据库服务允许您直接从客户端应用程序集成您的用户和应用程序数据,无论是浏览器还是本机应用程序。数据库中的每个文档都能够嵌套其他子文档。使用Appwrite数据库筛选器,您可以应用高级查询并筛选嵌套文档集合。

每个文档都可以为特定用户,用户团队,API密钥或用户角色设置读写权限。使用Appwrite数据库,简单而灵活的权限机制,您可以为您的应用程序管理复杂和复杂的访问控制逻辑。

Appwrite数据库还可以灵活地选择结构化数据收集或灵活的收集,以便随时管理数据。使用Appwrite,简单而强大的数据集合,您可以为集合中的每个文档强制执行数据结构和验证规则。

Appwrite存储

Appwrite Storage服务是让您或您的应用用户安全,简单地上传和管理文件的最简单方法。

Appwrite Storage API利用了Appwrite数据库使用的相同的简单读写权限机制。这使您可以轻松确定所有用户,特定用户甚至用户团队是否可以访问您的文件。

var appwrite = new window.Appwrite();

appwrite
    .setEndpoint('https://localhost/v1')
    .setProject('[PROJECT-ID]')
;

var file  = document.getElementById('file-input').files[0];
let read  = ['*']; // wildecard read access
let write = ['user:self']; // write access only to me

appwrite.storage.createFile(file, read, write)
    .then(function (response) {
        console.log('file uploaded successfully');
    }, function (error) {
          console.log(error);
    });

Appwrite Storage API允许您轻松地在应用程序中集成安全文件上载。

Appwrite Storage服务还提供与自动更新的防病毒服务器的内置集成。所有上传到您系统的新文件都会进行扫描和验证,以确保您和您的用户的安全。

Appwrite Storage服务提供的最有用的功能之一是能够预览文件内容并在应用程序或网站中将其显示为缩略图。您还可以动态更改缩略图的大小,在不同的图像格式之间进行转换(支持webp!)并更改其质量以提高网络性能。

Appwrite Teams

Appwrite Teams服务允许您和您的用户创建团队并共享不同API资源(如文件或文档)的权限。这是为您的产品实施复杂访问控制要求的一种非常简单的方法。

每个团队成员也可以被授予不同的角色,以便您获得更大的灵活性。

Appwrite Task

file

Appwrite Task 服务是设置定期计划作业的好方法。

而不是使用复杂的crontabs或长时间运行的守护进程处理并担心容错,监视和错误记录等问题,您需要做的就是提交一个表单,其中您的任务作为HTTP端点和类似cron的语法来指示如何经常应该执行。就这么简单。

您还可以使用任务高级选项向请求添加不同的HTTP标头,或使用基本HTTP身份验证对其进行保护。不用说,所有敏感的HTTP密码都在Appwrite内部数据库中安全加密。

Appwrite Webhooks

file

您可以从Appwrite控制台轻松注册新的webhook。

Appwrite Webhooks旨在让您轻松方便地集成后端的自定义行为。

想要在新用户注册到您的应用时收到短信?想要在您的某个应用文档获得更新时清除缓存吗?只需添加一个新的webhook,当特定的Appwrite事件触发时,该webhook会触发您端点的HTTP端点。使用Appwrite Webhooks你只会受到想象力的限制。

Appwrite Github

https://github.com/appwrite/appwrite

Arch linux / manjaro开启bbr

查看内核版本号

uname -r

如果内核版本大于等于4.9可以直接开启

检查bbr模块是否存在

然后使用命令modinfo tcp_bbr查看内核模块是否存在。

modinfo tcp_bbr

开启bbr模块

sudo  modprobe tcp_bbr

下次自动开启

默认没有开启,自动开启

echo "tcp_bbr" > /etc/modules-load.d/80-bbr.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/80-bbr.conf
echo "net.core.default_qdisc=fq" >> /etc/sysctl.d/80-bbr.conf

立即加载

sysctl -p 

检查是否成功

sysctl net.ipv4.tcp_congestion_control