开篇:
两个月的时间眨眼就过去了,没有想到最后报名的我却能被导师选中,非常感谢我的导师罗磊老师。
这是我第一次真正接触到项目开发,在开发过程中也走了很多弯路,有看我代码的同学会发现我的项目被我分成了四个,这就是我走的几段弯路。在刚开始的时候,我是要写一个Linux平台下的通用网盘客户端,系统备份功能只是其中的一部分。在我实现完功能函数,开始写API的时候,罗老师及时发现并提醒我:备份才是重点,你应该利用系统已有的金山快盘 for UbuntuKylin进行开发。我只好暂时停止开发网盘客户端。按照罗老师的提示,学习Gnome桌面环境集成的备份服务Deja-dup,利用其后端duplicity和金山快盘开发了一个UbuntuKylin下的备用工具。相当于造了个功能与稳定性远不如原来的轮子。实现了后台定时备份和同步的功能。
虽然走了不少弯路,但终归还是找到正途了:在Deja-dup上下刀,直接在其上添加新的功能。这样就能利用系统原有的备份功能并保证程序稳定性了。于是:下源码、学Vala,在靠流量上网的环境下,我还是蛮拼的~~还有种XX天学会XX语言的感觉。然后就是while(1){读代码、写代码、测试、改代码};的生活了。
总结:
在这两个月里,完成的任务有:
- 掌握了利用开放API以及OAuth进行编程的技术,这为接下来实现通用网盘客户端以及Deja-dup的深入改造奠定基础。
- 利用GTK+、duplicity等开发了一个自动备份程序,虽然功能有点弱,不过加深了我对GTK程序的理解。
- 基于Deja-dup,添加了一键添加文档、图片的选项,添加了使用金山快盘的选项,不过有点不符合原程序审美。
- fork了Deja-dup,命名为Deja-dup-uk,略去打补丁的步骤。更专注于程序功能的实现,将金山快盘的选项改成符合原程序审美的方式,不过还有点小Bug,不过不影响功能。
存在的问题:
- 备份位置中的快盘选项需要点击两次才能选中,这是由于代码中的快盘选项是通过继承本地文件夹实现的,导致在本地与快盘切换时需要判断两次
- 在没有安装快盘 for UbuntuKylin 的系统中,可能会出现程序崩溃退出的现象,将在下次push时修正
- 偶尔会出现待备份文件夹变成俩个的现象,不过不影响使用,重启程序即会消失
遇到的困难:
- Deja-dup使用Vala语言开发,说实话,这门语言以前压根儿就没有听过,而且中文资料几乎没有。
- 拿着别人的代码改,必须先得把程序的总体框架摸清楚,否则挺难下手的
- ...
用到的技术:
- JSON解析(使用cJSON库)
- 网络编程(使用libcurl库)
- GUI编程(使用GTK+3.0)
- Linux下多线程编程
- Linux下时钟编程
- ...
计划:
虽然夏令营结束了,但是我会继续维护我的项目,跟踪上游版本变化,添加新的功能。我的计划如下:
- 继续优化Deja-dup中一键添加的部分,提供更多可选项。
- 更改Kuaipan后端部分代码,解决两次点击bug。
- 根据Ubuntu One等工具为Deja-dup添加系统备份功能。
- 使用FUSE开发支持多后端的网盘客户端,并为deja-dup提供网盘后端。
- 剔除代码中关于Ubuntu one 后端部分
- ...
上图:
无图无真相~~