JSON 字符串反序列化为 Java 对象时, 不只是 true 和 false 能够转换为 boolean 变量的值:
- boolean:
- true: true
- false: false
- 数字:
- 1: true
- 0: false
- 其他数字: false
- 字符串:
- “true”: true (大小写不敏感)
- “false”: false (大小写不敏感)
- “1”: true
- “0”: false
- 其他字符串抛异常
1 | { "visible": true } // true |
大圣,此去欲何?踏南天,碎凌霄。若一去不回……?便一去不回!
JSON 字符串反序列化为 Java 对象时, 不只是 true 和 false 能够转换为 boolean 变量的值:
1 | { "visible": true } // true |
TinyMCE 是一个功能强大的富文本编辑器:
TinyMCE 提供了 cloud 版本, 也可以下载到本地使用.
使用 TinyMCE 只需要 3 步:
下图是使用默认参数创建的 TinyMCE 编辑器:
代码如下:
1 |
|
官方提供了非常丰富的文档, 请访问 https://www.tiny.cloud/docs 进行阅读, 了解 TinyMCE 更多的使用方法.
Echarts, 一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
Vue 项目中使用 yarn 安装 Echarts: yarn add echarts
, 然后在页面中使用 Echarts 步骤如下:
为 ECharts 准备一个具备大小 (宽高) 的 DOM
引入 echarts:
1 | import echarts from 'echarts'; // 方便, 但是也同时引入了很多不需要的组件 |
1 | import echarts from 'echarts/lib/echarts'; // 引入基本模板 |
基于准备好的 DOM,初始化 Echarts 实例
设置 Echarts 图表数据
使用 Echarts 实现的柱状图:
使用 Tio 实现 WebSocket, 可以在 tio-websocket-showcase 的基础上进行修改 (据说能够达到企业级性能, 单机支持 30 万连接). 利用 Tio 提供的绑定功能实现消息群发和给指定的用户发送消息, 并且把用户对象直接存储到 ChannelContext 上, 还能省去自己管理用户的麻烦, Tio 也提供了心跳检测功能, IP 黑名单, 流量监控等, 我们只需要关注与业务层代码即可, 下面介绍一些相关的经验:
应用中只有一个 GroupContext, 发送消息, 获取小组信息等
一个连接对应一个 ChannelContext (ip:port), 可以使用 setAttribute()
存储业务数据, getAttribute()
获取数据
绑定 (使用 Tio 进行绑定, 可参考让网络编程更轻松和有趣 t-io):
userid: 一个 userid 可以绑定多个 ChannelContext (实现同一个账号多个设备登录)
1 | bindUser(ChannelContext channelContext, String userid) |
token: 一个 token 可以绑定多个 ChannelContext (实现同一个账号多个设备登录)
1 | bindToken(ChannelContext channelContext, String token) |
bsId: 一个 bsId 只能绑定一个 ChannelContext (实现同一个账号只允许登录一个设备)
1 | bindBsId(ChannelContext channelContext, String bsId) |
下面介绍的绑定以 bsId 为例, 其他的方式参考实现即可
树形结构如果作为侧边栏, 使用 zTree 比较合适, 下图所示的平铺展开整棵树, 使用 zTree 估计就不适合了, 在此我们使用 jQuery 的另一个插件 Simple jQuery Mind Map Diagram Plugin - mindmap 来实现.
文档的例子使用静态的 HTML 标签准备 mindmap 需要的树形结构的数据, 实际中大多情况下树形结构的数据是存储在文件或者通过接口返回, 我们这里展示递归的方式遍历树形结构的数据创建 mindmap 需要的 HTML 标签. 因为每个节点都是 HTML 的标签, 能很方便的使用 CSS 定制样式.
新版富文本编辑器 Ckeditor 5 比 Ckeditor 4 使用更简单, 下载 zip 包后只需要里面的 ckeditor.js
(连样式文件都不需要), 像下面这样 3 步就可以了:
1 |
|
只是简单的使用, 默认的功能就可以了. 如果还需要更多的功能, 例如集成多种编辑模式, 使用非默认自带插件, 自定义插件等就不能使用直接下载的代码 (You can’t add a plugin to an existing build), 需要我们自己编译源码才行, 下面就一一进行介绍.
下图的控件估计很多数人会使用绘图的方式实现, 代码实现起来虽然不会很复杂, 但是要控制得到满意的效果就不太容易, 对于我来说, 能不使用继承就不使用继承 (例如给某些控件处理事件时, 能用 eventFilter 实现就尽量避免使用继承, 因为继承又要多出几个源码文件 =_=!!!). 巧妙的利用 QSS, 一个 QPushButton 和 QWidget 也能实现.
下面就来看实现的方法吧:
在 QtCreator 中如下图在一个 QWidget 中放一个 QPushButton, 右边放一个 Horizontal Spacer, 然后水平布局
使用下面的 QSS 就可以得到我们想要的效果了:
1 | #widget { |
补充说明:
可以使用 Gradle 来管理 Scala 项目, 和管理 Java 的项目是一样的.
1 | scala |
build.gradle 的内容为:
1 | plugins { |
插件 shadowJar 用于项目打包, 更多信息请参考 https://qtdebug.com/misc-gradle-app/
AppDemo.scala 的内容为:
1 | object AppDemo { |
运行: gradle run
运行对象 AppDemo 的 main 函数, 因为 project.mainClassName
中定义了默认运行的类名为 AppDemo
打包: gradle clean shadowJar
Scala: Scalable language, 面向对象的函数式编程语言.
类型的首字母大写, 没有基本类型:
常量: val greeting: String = "Hello world" (value), val π = 3.1415926
变量: var greeting: String = "Hello world" (variable)
名字: 字母, 数字, 特殊操作符如 +, -, *, /, π, θ 等, 不能以数字开头
使用非安全模式启动 MongoDB,不需要登录,可以操作任何数据库:
启动 MongoDB: mongod --config /usr/local/etc/mongod.conf
进入 MongoDB 客户端: mongo
进入数据库 admin: use admin
创建管理员 admin:
1 | db.createUser( |
退出 MongoDB 客户端: exit
退出非安全模式启动的 MongoDB
安全模式启动 MongoDB,登录全局的管理员的 admin,然后创建指定数据库的用户:
安全模式启动 MongoDB: mongod --auth --config /usr/local/etc/mongod.conf
进入 MongoDB 客户端: mongo
管理员登录:
use admin
db.auth("admin", "admin")
进入数据库 foo: use foo
(不存在则会自动创建)
创建用户 bar:
1 | db.createUser( |
退出 MongoDB 客户端: exit
安全模式启动 MongoDB:
方式一: mongod --auth --config /usr/local/etc/mongod.conf
方式二: 配置文件中添加下面的配置,执行 mongod --config /usr/local/etc/mongod.conf
进行启动
1 | security: |
用户登录:
mongo
use foo
db.auth('bar', 'bar')
mongo --port 27017 -u "bar" -p "bar" --authenticationDatabase "foo"
use foo