TO-DO

无后端待办事项应用
授权协议 MIT
开发语言 Objective-C Ruby
所属分类 应用工具、 个人助理软件
软件类型 开源软件
地区 国产
投 递 者 湛博易
操作系统 iOS
开源组织
适用人群 未知
 软件概览

一个无后端待办事项应用,数据用 LeanCloud 进行同步。

简介

这是一个无后端的待办事项应用,数据用 LeanCloud 进行同步,也是我的第三个 iOS 项目。

做这个项目的初衷是想比较全面地体现我的前后端水平,该同步算法从整理思路到实现 95% 的代码(意为接近稳定)花了两周时间,除思路外没有任何代码可以参考(反正我是没有找到...

界面设计来源于 DO ,部分素材和界面为本人设计。

该项目于 2016-12-29 日第一版开发完成,之前由于意外收录可能有些朋友 clone 的是不稳定版,还请重新下载一次。

项目演示

测试服务器

为了方便大家观察服务器的数据,测试账号已公开,要是有什么情况请通知我,(当然万一发生了类似超额的情况我不一定会解决),另一方面会这样做的主要原因是自己搭建的话可能比较麻烦。

注:从 2016 年 12 月 31 日起,该项目中的所有的第三方 API Key 已经换成测试账号中的新秘钥,且之前的 API Key 都被弃用

LeanCloud 账号

todotest

Abcd123!@#

七牛账号(存放头像)

sgtodo@126.com

Abcd123!@#

高德

高德 Key 要 BundleID,请各位自行配置,不用地图也一样。

同步算法、思路等

如果你对这个感兴趣的话,请查看以下内容,并对照相应代码进行理解。

相关代码位于 SGSyncManager.m 和配置于 LeanCloud 云函数中的 nodejs 代码。

思路来源

该同步思路来源于以下两篇回答,并根据项目需求总结而来。

服务端和各种客户端(手机端,平板端,web端)怎样进行数据同步?

Evernote 的同步方式是怎样的?

同步方式

每一批次两个并行队列,每次最多同步X条数据,超过X条下次进行同步。

每批同步分上传和下载(与队列不对应),若上传或下载数超过上限,则下一批次同步。

同步类型

  1. 若本地没有同步记录,则将本地所有数据进行上传,并将服务器上所有的数据进行下载(Incremental Sync)

  2. 若 lastSyncTimeOnServer = lastSyncTimeOnClient,表明服务器数据没有变化,则仅需要上传本地修改过的数据和新增的数据(Send Changes)

  3. 若 lastSyncTimeOnServer > lastSyncTimeOnClient,则进行全量同步,先对比同步所有已有数据,再将其他数据从服务器上下载(Full Sync)

  4. 其他情况进行(Incremental Sync)

注意事项

  1. 所有同步时间戳均以服务器时间为准,每次同步之前先获取服务器的时间戳

  2. 对比同步规则:1.大版本同步小版本 2.版本相同的话,以线上数据为准进行覆盖(另一种做法是建立冲突副本,根据本项目的实际情况不采用这种方式)

异常情况

以下几种情况会影响同步时数据的原子性:

  1. 云函数返回之前挂掉:下次同步则为full sync,同时在对比时会将objectId赋值给本地对应的待办事项。

  2. 若在批次之间挂掉的话(上一批成功,下一批挂掉),这时需要在判断同步类型时,判断上一次同步成功的记录次数,若次数超限,此次同步为full sync。

同步难点

  1. 处理各种异常情况,保证数据的一致性和原子性

  2. 同步效率

  3. 分批同步

同步流程

同步稳定性

从我大致写好同步功能(2016-6-20)到今天(2016-12-30)一共产生了 3300 条同步记录,暂时没有发现数据错误的地方,如果各位发现这方面有什么问题和 Bug 请一定提交 issue,非常感谢。

同步记录截图:

  • TO-DO List是一项非常好用的功能。采用她可以让我们很清楚的了解以前完成了那些任务,还有哪些任务需要做,由谁负责完成,是不是比较紧急的任务等。今天来不及完成的,明天上班就可以很快的找到任务所在的位置。 打开TODOLIST:点击菜单【View】--> 选择菜单【To-Do List】  显示窗口内容有:   Action Item:任务项;   !:                优先级  

  • 不想看废话的话可以直接往下拉看解决方法。 问题描述 最近在用To-Do的时候发现两天没有同步了,而且一直提示同步失败,同时在尝试解决的过程中发现Edge浏览器也无法使用了。 (进行验证后,确实是因为科学上网的原因。) 解决思路 首先上微软官网查找解决方法,然而发现没什么用。 尝试重置网络也没用。 后来想起以前用有道云笔记的时候也遇到类似的问题,当时提示是因为科学上网后Edge浏览器代理设置被更改导

  • 一、Microsoft To-Do List 与OmniFocus对比 两者功能相当,但OmniFocus3相对Microsoft To-Do List多的标签功能能有更多的维度来筛选。 二、同步流程 Microsoft To-Do List任务-> Exchange帐户同步到Renminders -> AppleScript脚本同步到OmniFocus的收件箱再进行整理 -> AppleScri

  • 在主服务器上为从服务器建立一个用户: grant replication slave on *.* to '用户名'@'主机' identified by '密码'; 如果使用的是MySQL 4.0.2之前的版本,则用file权限来代替replication slave 编辑主服务器的配置文件:/etc/my.cnf binlog_do_db是指定binlog日志记录那些库的二进制日志。repli

  • 背景说明 删除只能在支持ACID的表上执行。 ACID 代表数据库事务的四个特征: 原子性(手术完全成功或失败,它没有离开部分数据) 一致性(一旦应用程序执行一个操作,操作的结果是可见的在每个后续操作) 隔离(由一个用户一个不完整的操作不会引起意想不到的副作用为其他用户) 持久性(一个操作完成后它将被保留下来即使面对机器或系统故障)。 长期以来,人们期望数据库系统具有这些特性,并将其作为事务功能的

  • 问题描述 系统自定义异常处理,在rollback时出现异常,日记如下所示 17:29:47 ERROR c.z.p.c.t.s.i.TmStatDetailServiceImpl - Transaction is already completed - do not call commit or rollback more than once per transaction org.springf

  • 虚拟环境中,在配置coco数据集的API时出现以下错误 (py37) C:\Users\HASEE>pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI Collecting git+https://github.com/philferriere/cocoapi.git#subdirec

  • 在用Centos 的时候出现了这种情况, Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile Setting up Install Process No package gcc available. Error: Nothing to do 遇到

  • 系统为centos7,在安装wget时,执行命令:yum -y install wget,提示如下错误: Loaded plugins: langpacks, versionlock Excluding 1 update due to versionlock (use "yum versionlock status" to show it) Package wget-1.14-18.el7_6.1

  • 吐槽:有点难...= =听了课还是差点没满分... 题目: 1. In the following Python code sequence (assuming cur is a SQLite cursor object), cur.execute('SELECT count FROM Counts WHERE org = ? ', (org, )) row = cur.fetchone() wh

  • WARNING: python3-pyqtchart-5.13.1-r0 do_fetch: Failed to fetch URL https://www.riverbankcomputing.com/static/Downloads/PyQtChart/5.13.1/PyQtChart-5.13.1.tar.gz, attempting MIRRORS if available ERROR:

 相关资料
  • 保存在手机日历应用程式中的活动会以通知形式出现在您的 M600 上。您也可调动您的时间表。 查看时间表 按下侧边电源按钮打开应用程式菜单,找到并轻击Agenda(待办事项)。 当日时间表会被打开。

  • 积压(待办事项/backlog)是团队需要在特定迭代中解决的一组活动或问题。您的项目的所有问题都分组在积压和冲刺(sprint)中。 在scrum backlog中,可以执行多个活动,例如创建和更新问题,拖放问题以确定优先级,将它们分配给sprint,epics,版本,管理epics等。 以下是可以在scrum backlog中执行的活动: 将问题添加到待办事项中 - 要在待办事项中添加问题,需要

  • Scrum中的敏捷产品待办事项是优先级功能的列表。它包含产品所需的所有功能的简短描述。在通常情况下,项目应分解为用户故事。通常,Scrum团队及其产品所有者会编写他们可以考虑的敏捷待办事项优先级的所有内容。 产品待办事项为何重要? 待办事项准备好提供每个功能的估计。 它有助于规划产品的路线图。 它通过为产品添加更多价值来帮助重新排列产品的功能。 它有助于首先确定产品的优先级,团队成员首先使用更高优

  • 该插件为待办事项列表组件提供了简单的功能。 用法 该插件可以作为 jQuery 插件或使用数据 API 激活。 数据 API 通过向 ul 元素添加 data-widget="todo-list" 来激活插件。如果你需要提供 onCheck 和 onUncheck 方法,请使用 jQuery API。 jQuery jQuery API 提供了更多可自定义的选项,允许开发人员处理待办事项列表中的选

  • To-Do-List是一个基于Yii框架开发的时间管理WebApp。 使用说明 将数据库文件导入MySQL中 给todolist文件夹重新命名

  • 英文原文:http://emberjs.com/guides/getting-started/show-all-todos-again/ 接下来我们将对应用进行进一步的修改,使得用户可以查看所有待办事项。 在index.html中,将‘全部’待办事项的<a>标签改为Handlebars的{{link-to}}助手: 1 2 3 4 5 6 7 8 9 10 11 {{! ... 为保持代码简洁,