很抱歉,没能满足大家的预期。在这里我想解释一下为什么会出现InkCanvasForClass,复活了又死,死了又复活,最后又死了的情况。
首先是我自己的原因:我现在已经高考完了,最大的变化是已经没有原先的使用场景了。我如果还在高二的话至少我还能晚上在家里改完,然后拿去学校的触摸屏上测试。高考完了过后,没有了测试设备,也没有了这个固定场景下的固定需求,自然也就没有了开发动力。
其次就是我没有那么多时间,去开发一个费力不讨好的软件。首先InkCanvasForClass这类屏幕批注软件,没有办法做付费转化(或者说是很难,之前有过市场调研,基本上,要靠一个独立的屏幕批注软件想让用户心甘情愿掏钱是非常困难的),并且领域太过垂直,需求太过分散,不集中。比如用户A可能需要数位板书写,用户B可能需要触摸屏书写,用户C可能需要适配手掌橡皮。这也给重构带来了很多困难。
还有就是开发成本的原因。即使InkCanvasForClass,按照目前的情况来看,服务器,开发资源这些是完全够的。但是由于没有直接的支持性,赞助性的资金来源,我自然也没有动力去开发。
我很想把InkCanvasForClass,做到一个非常稳定,易用的程度,但是照现在的场景看来,我设想的InkCanvasForClass,更多是以设计驱动的项目,而非目前大家主流所接受的以需求驱动的项目。
屏幕批注软件本身就是一个很小的领域,以至于开源社区用electron做一个能用的屏幕批注软件都能获得那么多stars。再加上还有这么垂直的需求,触摸屏,RTS,白板,模拟笔锋。
想要一个好用的产品,本来就需要一个固定的开发者或者一个固定的开发团队,按照发展规划去持续的开发改进。
但是在K12场景下面并不是这样,用户不会因为你这个软件某一点设计做得好就表扬你,很多时候是由需求驱动的改进,而不是设计驱动的改进。通俗易懂的讲,ICCCE为什么能变得这么垃圾,AI维护不仅算一点,需求驱动也算是一点。
如果一个软件只会一直无限的加功能,而不知道什么该做,什么不该做的话,那我觉得这个软件没有好好开发的必要。InkCanvasForClass最开始也是基于需求驱动的产物,但是到后面,越开发就越变成了一个由设计驱动的产物,这个时候原有的架构就不合适了。
因此看来,我觉得复活 InkCanvasForClass,并通过重构达到原有用户在原有使用场景下的心理预期,是非常困难的。这也是为什么Evolved死了,我还继续开发Inking SDK。至少Inking SDK不会被局限在屏幕批注这一个很niche的领域中。
所以这一次,我认为 InkCanvasForClass 应该真正停在这里。
这并不意味着之前的开发没有意义。恰恰相反,InkCanvasForClass 从最开始一个很简单的屏幕批注工具,到后来的 ICC Evolved,再到现在的 Inking SDK,它实际上一直在推动我重新思考“一个书写软件到底应该是什么”。
我也确实从这个项目里学到了很多东西。WPF、InkCanvas、触摸输入、笔迹处理、手势识别、渲染、架构设计,以及最重要的,如何去判断一个功能到底有没有存在的必要。
以前我总觉得,一个项目只要不断维护、不断加功能,总有一天能够变得足够完善。但后来我发现,软件开发并不是单纯地往上堆东西。一个项目真正困难的地方,反而是知道什么时候应该停止,知道哪些东西不应该做,以及知道什么时候原来的设计已经无法继续支撑新的目标。
所以我不打算再把 InkCanvasForClass 复活一次。
至少在目前这个阶段不会。
如果以后我重新回到类似的使用场景,或者重新获得了足够明确的需求、测试环境和开发动力,那么它也许还会以另外一种形式出现。但那时候它应该已经不再是现在这个 InkCanvasForClass 了。
至于现在,InkCanvasForClass 就停在这里。
感谢曾经使用过它、反馈过问题、提交过建议,或者单纯因为这个项目而认识我的人。这个项目虽然反复停更、复活、再停更,多少有点像一个不太愿意接受现实的僵尸,但它确实陪我走过了一段很重要的开发经历。
而这段经历不会随着项目停止开发而结束。
它只是从 InkCanvasForClass,变成了 Inking SDK。
——Dubi906w 2026.9.18
至于ICCCE,我祝该项目一路顺风。