原笔迹手写SVG绘图算法的改善

最近折腾了一下SVG,对SVG绘图的效果做了重大的改善,效果可以媲美之前的分段画点算法,这个是一个很鼓舞的成果,SVG绘图的优点很多,例如绘图手指跟随效果很流畅,同时生成文件更小,更重要的是浏览器原生支持SVG,这样客户可以很方便的把SVG数据应用到网络应用,以及同步书写的应用。

后面有空的话,要把这个算法移植到 iOS。

好了,不多说,看效果图:

那,下一步应该是什么呢?

集成手写控件到 mupdf?手写控件javascript 版本?手写识别功能?

路漫漫其修远兮~~~

重大进展!iOS 原笔迹手写控件,压感,笔锋不可少!

之前在手写的合作项目中,有不少客户需要一并开发 iOS 的手写应用。

但是 iOS 手写控件一直是空白的,原因很多:

1是自己对 iOS 开发并不熟悉,
2是 iOS 开发上手也需要额外大量的空余时间,
3是 iOS 开发的门槛也是不低,iOS 开发 mbp 费用不低,还需要 iPhone 或者 iPad,甚至 apple pencil,这一套下来,费用不菲。

随着最近国家二胎政策的全面放开,以及电子教育、电子课堂的复兴,手写需求貌似越来越多,Kevin 最近的手写业务也是不少,最近好不容易挤出一点业余时间,来好好学习 iOS 开发,并实现 iOS 端的手写控件。

开发语言选择了新兴的 iOS 开发语言 swift,开发设备选择了 mbp pro 2018,而测试设备这个 iPhone 7,以及 ipad air。

凭着一定的移动开发经验,以及对手写的原理的深入掌握,从0开始,学习 swift,开发测试 demo,最终实现了 iOS 端的手写控件,而且初步效果很不错,后期将会继续完善 api 以及文档,以及相关功能。

如果客户有 iOS 端的需求,也完全可以满足客户的需求了。

测试设备使用的是 iPhone 7,因为还没有购置 iPad 以及 apple pencil,所以图示的压感效果是用速度算法计算出的压感,这样的效果已经很好了。相信后面有 apple pencil 的效果会更上一层楼。

效果图:

iOS paintview
iOS paint view
iOS paint view
iOS paint view

 

使用iperf测试nas网络传输性能

最近种草nas,在张大妈观望一段时间后,终于迎来京东的一波活动,历史最低价入手了一台QNAP TS-453Bmini, 4G内存,4盘位,还有hdmi输出,价格2229拿下,甚是满意。

既然入手了nas,那就要发挥nas的作用了,nas的首要作用是网络存储,那网络传输性能,如何确保能充分发挥呢?

例如我使用的局域网是1000M网络,那网络传输文件,应该有1000MBits/sec的速率。如何确保这个传输速率呢?网上很多的教程都是通过文件拷贝的形式,通过查看文件传输的大概速度去评估,这里我分享一个使用iperf测试网络性能的工具,来对网络传输数据作一个更加直观的评估。

首先介绍一下iperf,iPerf 是一个网络性能测试工具。iPerf 可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。

那如何使用iperf进行测试呢?步骤很简单,安装应用,使用应用进行测试。我们具体分为以下几步:

  1. nas 安装 iperf
  2. 电脑端安装 iperf
  3. nas 作为 iperf 服务器端运行,监控客户端的接入
  4. 电脑端作为 iperf 客户端,连接到 iperf 服务器端,向服务器端发送数据,最终 iperf 自动得出传输速率结果。

继续阅读使用iperf测试nas网络传输性能

原笔迹手写技术与智能绣花机的第一次亲密接触

0. 前言

是的,之前一直没有想象过原笔迹手写技术可以应用在绣花机上,更多的只是在教育行业有合作的需求。
直到客户提出需求,才恍然大悟,试想将自己酷炫的签名秀在自己的鸭舌帽上,将自己得意的书法作品秀在绸缎上,将孩子萌萌达的涂鸦秀在家庭亲子装上,等等,这是何等提升幸福感的事情啊!

1. 需求

  • 原笔迹手写,支持电磁屏/主动电容屏压感以及笔锋;普通电容屏的的压感以及笔锋
  • 生成笔迹svg,绣花机通过生成的svg来进行刺绣
  • 生成笔迹png,激光绣花级通过生成的png来进行刺绣
  • 其他

2. 技术实现

通过在平板上书写,绘制,能很好的还原原笔迹,压感,笔锋,平滑,优美。原笔迹手写技术已经比较成熟,实现效果如下:

唯一的问题就是svg的需求。之前生成的svg不符合客户的需求,绣花机需要的是不是一条贝塞尔曲线,而是形成笔迹的两条贝塞尔曲线,然后根据这两条塞尔曲线进行刺绣。

技术上有一定的难度,但是因为之前已经有过相当长的一段时间的研究,所有实现也并不是太难。svg文件的效果可以很好地满足客户的需求。

svg文件生成效果如下:

3. 视频实例

最终期望效果~~~

4. 展望

相信随着智能手机,平板的普及,原笔迹手写在消费行业定会大有所为,同时也会在工业行业找到更多展现自己价值的机会。

Android dm-verity 实现原理深入研究

前言:这篇文章是 Kevin 的原创作品,如有相关疑问,可以留言交流。

思维导图:

dm-verify
dm-verity

说明:源码基于 SC20 平台 Android5.1
Android dm-verify overview

目录

Android dm-verify overview.. 1

一、原理… 1

与Verified Boot关系… 1

dm-verity. 1

作用分区… 2

二、模块结构… 2

1.签名… 2

生成OEM自己的密钥对… 4

验签… 5
用户空间,android 部分… 5

内核空间… 5

三、如何启用… 5

四、测试… 6

测试样例1. 无法 remount, 无法 push 文件… 6

测试样例2. 6

五、存在风险… 6

物理块出现坏块… 6

六、其他… 6

七、参考文档… 6

一、原理

Verified Boot关系

Verified Boot 是 Android 4.4 开始引入的一个新特性,配合可选的 dm-verify 功能,可以检测系统是否被篡改,以此保存系统的完整性。

dm-verity

dm-verity 基于kernel 的 Device mapper 框架,Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略。关于 Device mapper,可以参考此文献

https://www.ibm.com/developerworks/cn/linux/l-devmapper/

dm-verity 用一个 hash 树来描述整个 system 镜像。这种机制允许 system 分区在读写的时候进行校验,而不是一次性将整个 system 镜像进行校验。当校验 hash 值不一致的时候,返回 IO 错误

框架示意图:

dm-verity-hash-tree
dm-verity-hash-tree

继续阅读Android dm-verity 实现原理深入研究

Android 启动“无启动图标的 apk“

在 Android 开发以及测试中,经常遇到需要启动一个没有启动图标的apk,这个时候可以使用 pm 以及 am 命令来配合,启动相应apk。

主流程:

  1. pm 获取apk包名
  2. pm 获取apk详细配置信息,主要是相应启动 Activity 的类的路径
  3. am 启动相应 Activity 的类

简单实践:

    1. pm 获取apk包名

连接 adb 后,输入

shell@rk3368_32:/ $ pm list packages

输出

...
package:com.android.captiveportallogin
package:android.rk.RockVideoPlayer

得到相应的包名为 android.rk.RockVideoPlayer

2. pm 获取apk详细配置信息,主要是相应启动 Activity 的类的路径
输入

pm dump android.rk.RockVideoPlayer

输出

...
    Non-Data Actions:
        android.intent.action.MAIN:
          3d093a3c android.rk.RockVideoPlayer/.RockVideoPlayer
        android.intent.action.VIEW:
          26ecb42f android.rk.RockVideoPlayer/.VideoPlayActivity

得到相应启动 Activity 的类的路径为 android.rk.RockVideoPlayer/.RockVideoPlayer

3. am 启动 Activity 类的路径
输入

am start -n android.rk.RockVideoPlayer/.RockVideoPlayer

即可启动相应 Activity。

掌握这个方法后,可以方便以后的自动化测试。