临时文件
依此选择“c盘”》属性》磁盘清理
修改系统分页文件存储位置
我的电脑,右键,“高级系统设置”》“高级”》“性能”》“高级”》“虚拟内存”》修改C盘为无分页文件;
关闭休眠文件内存占用
开始菜单输入cmd,选择管理员身份运行"命令提示符",在命令提示符运行 powercfg -h off;
删除旧版windows备份文件
如果windows升级上来的,Windows.old备份文件也是可以删除的
依此选择“c盘”》属性》磁盘清理
我的电脑,右键,“高级系统设置”》“高级”》“性能”》“高级”》“虚拟内存”》修改C盘为无分页文件;
开始菜单输入cmd,选择管理员身份运行"命令提示符",在命令提示符运行 powercfg -h off;
如果windows升级上来的,Windows.old备份文件也是可以删除的
fc-list :lang=zh
import matplotlib
matplotlib.matplotlib_fname()
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'
| 名称 | 语言 | 协议 | 提供外部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是面向前端和移动开发人员的新型开源端到端后端服务器,可让您更快地构建应用程序。
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身份验证服务,您可以轻松管理用户注册并登录您的应用。Auth服务还提供与多个OAuth提供商的内置集成,如Facebook,Github,LinkedIn等。
除了管理对您的应用及其不同资源的访问控制之外,Auth服务还抽象其他重复任务,例如管理用户电子邮件确认和密码恢复。
使用Auth服务可以节省构建稳定安全的用户身份验证和授权系统所带来的大量时间和顾虑,同时还必须与多个第三方登录方法集成。

Appwrite Account服务向您的客户端公开了一个API,允许您与当前登录的用户帐户进行交互。
Appwrite帐户服务可让您管理用户活动会话。
帐户服务允许您的用户更新其帐户相关信息,并保存他们的私人偏好,如用户界面语言,时区或喜爱的主题。您可以使用您希望的任何偏好设置用户。
您还可以使用API获取用户活动会话的列表,包括有关会话位置,设备,操作系统和用户代理的信息。使用API安全日志端点,您可以让用户查看其最新登录,密码恢复和其他安全敏感事件。

Appwrite数据库仪表板允许您轻松浏览项目集合和文档。
Appwrite数据库服务允许您直接从客户端应用程序集成您的用户和应用程序数据,无论是浏览器还是本机应用程序。数据库中的每个文档都能够嵌套其他子文档。使用Appwrite数据库筛选器,您可以应用高级查询并筛选嵌套文档集合。
每个文档都可以为特定用户,用户团队,API密钥或用户角色设置读写权限。使用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服务允许您和您的用户创建团队并共享不同API资源(如文件或文档)的权限。这是为您的产品实施复杂访问控制要求的一种非常简单的方法。
每个团队成员也可以被授予不同的角色,以便您获得更大的灵活性。

Appwrite Task 服务是设置定期计划作业的好方法。
而不是使用复杂的crontabs或长时间运行的守护进程处理并担心容错,监视和错误记录等问题,您需要做的就是提交一个表单,其中您的任务作为HTTP端点和类似cron的语法来指示如何经常应该执行。就这么简单。
您还可以使用任务高级选项向请求添加不同的HTTP标头,或使用基本HTTP身份验证对其进行保护。不用说,所有敏感的HTTP密码都在Appwrite内部数据库中安全加密。

您可以从Appwrite控制台轻松注册新的webhook。
Appwrite Webhooks旨在让您轻松方便地集成后端的自定义行为。
想要在新用户注册到您的应用时收到短信?想要在您的某个应用文档获得更新时清除缓存吗?只需添加一个新的webhook,当特定的Appwrite事件触发时,该webhook会触发您端点的HTTP端点。使用Appwrite Webhooks你只会受到想象力的限制。
uname -r
如果内核版本大于等于4.9可以直接开启
然后使用命令modinfo tcp_bbr查看内核模块是否存在。
modinfo tcp_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
ALTER TABLE `member` ADD `user_from` smallint(1) NOT NULL, ALGORITHM=instant
看了网上很多回答,基本都是过时和错误的。
5.6 以后增加了ONLINE DDL,
实现不锁表增加字段和索引非常简单。
ALTER TABLE `member` ADD `user_from` smallint(1) NOT NULL, ALGORITHM=INPLACE, LOCK=NONE
ALGORITHM表示算法:default默认(根据具体操作类型自动选择),inplace(不影响DML),copy创建临时表(锁表),INSTANT只修改元数据(8.0新增,在修改名字等极少数情况可用)
LOCK表示是否锁表:default默认,none,shared共享锁,exclusive
什么情况下会inplace,什么情况下会copy,具体参考:Online DDL Operations
https://www.codeproject.com/Articles/51085/Monitor-jobs-in-a-printer-queue-NET
c# 完整代码展示了如何获取打印机任务状态

https://docs.microsoft.com/zh-cn/windows/win32/printdocs/print-spooler-api
The Print Spooler API provides an interface to the print spooler for applications to manage printers and print jobs.
The Print Spooler API is used by an application as part of its programming and not directly by end users.
Creates a collection that contains a PrintSystemJobInfo object for each job in the queue.
https://cboard.cprogramming.com/windows-programming/108156-virtual-printer-moving-printjobs.html
https://www.codeproject.com/Articles/3313/Monitoring-a-Printer-Queue-from-VB-NET
https://stackoverflow.com/questions/15748386/how-to-catch-printer-event-in-python
https://www.codeproject.com/Articles/14690/Printers-and-SafeHandles
https://www.codeproject.com/Articles/15084/Printers-and-SafeHandles-Part-2
从是否有API,客户端单独key,子域名,收费模式,采用语言,github stars多个维度比较了ngrok, frp, lanproxy, goproxy, nps几款内网穿透工具

https://github.com/inconshreveable/ngrok
https://github.com/fatedier/frp
https://github.com/ffay/lanproxy
https://github.com/snail007/goproxy
综上,
如果希望自己二次开发(有API可以调用)或者有多个租户(每个客户端一个单独的key),建议使用nps。
如果希望简单上手,没有多个租户的要求,建议使用frp。
2020.8.11更新:frp已支持OIDC认证
使用aliyun镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer require 添加 --no-update 参数
composer require packagename --no-update