切换到iOS系统后感受到了Android的好,比如以前十几行python脚本就能解决的问题现在变得复杂了根本没法解决了

最近关注iOS上的三个都有一定编程性的效率工具

  • workflow:具有基本的if、for等程序语言基本结构,使用体验跟儿童编程习惯的scratch差不多,基本动作打包抽象较好,网络相关操作上会比较弱点

  • jsbox:JavaScript编程,作者持续迭代开发,据说甚至可以对safari打开的浏览器页面操作,扩展性很强

  • pythonista:python编程,那当然是极好的,从需求初步来看缺点应该是ui编程太麻烦了……

考虑用其中一个来完成零散短篇小说保存的工作,以下是简单的计划↓

Trade-Off

  • 通知中心限制:workflow、jsbox、pythonista都无法在通知中心显示过长的列表,必须跳转到应用界面

workflow + pythonista

  • 优点:基本脚本已完成,dropbox代码不需要重新编写
  • 缺点:workflow拖拽非常烦人,脚本需要分割

jsbox + 独立服务器json响应

  • 优点:jsbox编程处理会很简单,服务器独立可考虑将来使用(好好设计rest api后续扩展)
  • 缺点:服务器代码需要编写,部署也需要设置,dropbox需要自己编写创建APP,UI部分jsbox的多选列表还要自己钻研
    • 需要缓存(如Redis),则云heroku不方便(也不一定,Redis Add-On免费)
    • 自己的服务器还要解析域名balabala……

纯pythonista脚本无界面

  • 优点:脚本已完成,可快速启用,没有网络交互响应成本
  • 缺点:操作不便,无法操作完立即关闭,dropbox需要自己编写创建APP
  • 硬伤:无法手动选择需要下载的文件

Flow

All

graph TD
a{"mode"} --> |Direct|b("body: { 'url':'xxx', 'mode':'direct' }")
b --> |Result|bb("content")
bb --> c{"file"}
c --> |Append|d("select an existed file")
c --> |Prepend|e("input title")
e --> f("Dropbox Write")
d --> f
a --> |Author|h{"key"}
h --> |Empty Input|g("body: { 'url':'xxx', 'mode':'author' }")
h --> |keyword|i("body: { 'url':'xxx', 'mode':'author', 'key':'word' }")
g --> j("list")
i --> |Keyword Existed|k("list of selected")
i --> |No Keyword|l("empty alert")
l --> m(("over"))
j --> |Select|n("body:['titleA','titleB'...]")
k --> |Comfirm|n
n --> |Joined|bb
f --> o(("over"))

Single

sequenceDiagram
Title: ServerSide Direct
client ->> pythonServer: 'url':'xxx', 'mode':'direct'
note over pythonServer: crawl from url
pythonServer ->> client: content

sequenceDiagram
Title: ServerSide Author
client ->> pythonServer: 'url':'xxx', 'mode':'author'
note over pythonServer: url transform to rss
note over pythonServer: filter if keyword existed
pythonServer ->> redis: { 'url':'xxx', 'title':'sss', 'content':''},{}
pythonServer ->> client: {'url':'xxx', 'title':'sss', 'exert':''},{}
note over client: show title list with exert
client ->> pythonServer: ['url1', 'url2']
pythonServer ->> redis: ['url1', 'url2']
redis ->> pythonServer: ['content1', 'content2']
note over pythonServer: joined contents
pythonServer ->> client: full contents
  • exert是为了避免同名标题,预览一部分内容