程序员的电脑有个特点,除了女票,谁碰都得跟他干上一架。因此程序员的电脑的壁纸的也有个特点,就是——只有自己弄,只有自己玩,也只有自己看。鉴于我还有半个自封的设计师的称号,前段时间就随便弄了个壁纸玩玩,直接上图:
给各位5分钟顶礼膜拜(逃)
制作步骤大概就是纸上打了个草稿,用3dsmax做成非常简单的3d模型(当时还没上手c4d),AI做非常简单的纹理贴图,非常简单地打个平行光+正交摄像机+AO出图,最后AI 非常简单地做左右两边的文字就是了。
为什么要强调这个词呢,因为程序员还有另外一个必(chui)备(niu)的特点:热爱折腾。 折腾硬件,A卡换成N卡,gtx换成泰坦(只要钞票够用);折腾系统,windows嫌闭源倒腾倒腾ubuntu,游戏没得玩再装个qemu;折腾软件,暴风影音广告太多下载个potPlayer,AI要钱瞧瞧新出的Affinity Designer——谁叫IT行业啥都更新的快咧! 折腾东西,就是把简单的整成复杂的,再把复杂的整成简单的,把原来的架构写成a ball of mud,再把大泥球整理成一个清晰美观的架构。并且在这个过程中探索更多的可能性,拓展自己的技术栈,最好还能写成几篇文章放到个人博客上面来,赚几个人气乐呵乐呵。
说了这么多,就为了交代一个起因,一个想要在闲暇时间做个动态壁纸的小项目的起因,旧的壁纸用的久了,打算基于其做个新的,要做到更炫酷,更好玩,更有技术难度——总之,将不再是非常简单了。
项目的大致方向不必再重复,大致的构思就是:因为这个桌面壁纸本身就是对我电脑桌面的一个反映(强行双关),现在打算在这个基础上把ren’wu它变成动态的,也就是说:动态地反映我的电脑桌面的变化。
实现目标如下(可能更新):
检测耳机插拔并且在桌面上反映+动画。检测手机靠近/原理并且在桌面上反映+动画。 附加任务:检测手机链接/断开&显示手机电量。集成程序员老黄历,每天准时更新显示+动画。检测u盘插拔并且在桌面上反映+动画。 附加任务:提供图形化的安全删除硬件操作(点击桌面上的u盘)。各种动画(比如动态的咖啡杯上面的热气等)。基于这个目标,我们可以试着设计一下整个项目的实现架构,当前的构思如下:
注1:由于我不怎么擅长win32编程,对于网页前端倒是略知一二,js写起来也会比较顺手,因此就选了网页壁纸而非应用程序壁纸。 注2:Wallpaper Engine是Steam上面18块入了正,追求0成本的朋友们可以找类似的替代品,只要能够运行H5+js就可以了。 注3:采用插件模式是为了方便扩展,在显示端和服务端并非一一对应,插件框架设计本身将在其他的博文中一并介绍。 注4:显示端/服务端仅仅是C/S分离,并非M/V分离,显示端也包括有处理逻辑的部分。 注5:服务端运行于localhost上,故采用效果最好的全双工WebSocket作为数据传输的通道。
本系列接下来的各种博文将分三条线入手:
设计线——视觉效果的设计与前端实现;框架线——两端插件接口以及各种附加组件的框架编程;底层线——底层win32编程的探索及JNI接口。按照线的编号为第一级编号,具体课题为第二级编号,课题下的文章顺序为第三季编号,组织目录树如:
3.1.1. 利用IMMNotificationClient实现耳机插拔检测(1)
最后到了给这项目取名字的时间了。由于壁纸本身是放在桌面(desktop)上面,又展示的是桌面(on top of desk)上的东西,决定用TopDesk作为项目名称,顺便还能取一下top作为“顶尖”的含义讨个口彩。
(持续更新中,敬请关注)
3.1.1. 利用IMMNotificationClient实现耳机插拔检测3.1.2. 利用JNI在Java中检测耳机插拔3.1.3. FindClass & ClassDefNotFoundException & Classloader & Tomcat