2020 帕劳
帕劳潜水轨迹图
帕劳潜水轨迹图
前段时间做了一些 fastlane 自动化脚本的工作,记一些搜索出来的东西。
Xcode 一般用 Info.plist 来管理 project 的一些属性, 对 plist 的修改可以用 update_info_plist
。
1 | update_info_plist( |
如果用 update_Info_plist
来修改 bundle id , 会发现 plist 文件中 bundle id 变了,但是Build Setting 中的 product bundle identifier 没有变化。 在 Fastlane 中使用 update_app_identifier
来修改 bundle id, 同时 Info.plist 中不要显示地写 bundle id, 使用 $(PRODUCT_BUNDLE_IDENTIFIER)
引用 product bundle identifier 就好了。
1 | update_app_identifier( |
对于 plist 中的 array,使用 block: proc do |plist|
来遍历,找到相应的 key , 再修改。
1 | update_info_plist( |
项目文件中的 Associated Domains 写在 entitlements 文件中, 用文本打开后发现 entitlements 就是一个 XML 文件。 当成 plist 文件使用 update_plist
操作即可。
1 | update_plist( |
在 gym 打包时 通过 xcargs 参数修改 ASSETCATALOG_COMPILER_APPICON_NAME
。
1 | gym( |
2019年,我们终于支持 iPhone 的 today widget 了,today widget 就是 iPhone 的桌面小部件,在 iPhone X 系列中,滑到最左边就是 today widget的功能了,在非 X 系统 iPhone 中,需要下通知列表,再左滑才能看到。
iTimeLog 的 today widget 第一版,是一个快速输入系统。输入的简便是 iTimeLog录入设计 的最重要目标。
如图所示,iTimeLog 的 today widget 分为两个部分,用一条浅蓝色的线分割。上半部分第一条常驻按钮是添加一个新的事件,点击它将会调起 iTimeLog 的主程序,并且呼出键盘,接受你的输入。
第二条常驻元素是当前正在进行的事件,点击它将会完成这个事件的记录,如果当前没有记录事件,它的功能就和第一条常驻一样。
下半部分是常用输入事件备选项,一直以来, iTimeLog 都觉得将用户已输入的事件作为事件模板,自然形成最近一段时间的输入备选是一种合理的做法。这里也一样,这个桌面小部件的下半部分最多可以显示五个事件,这五个事件是 iTimeLog 中用户输入的最近五个事件列表,实测对于一个生活比较规律的人来说,可以覆盖 50% 以上的快速录入功能了。
在这个功能的开发过程中,我买了自己的第一台 X 系列 iPhone,一台红包的 iPhone Xr。实际使用中,我发现 today widget 的使用比想象中还要方便,在手机不解锁的情况下,你也可以在锁屏界面直接左滑使用这个功能。
图表是一种对数据的加工,目的是为了让你对你记录的数据有一种更直观的把握。
输入其实是为了输出数据进行检视,检视是为了改进工作流程。如果不做输出和检视,输入的数据就是死数据,输入所花费的时间也就白费了。
这一篇我们来介绍 iTimeLog 的图表,它们都是检视的辅助。
iTimeLog 的首页,是一个输入界面,同时它也是一张简单的基础时间消耗列表,这张列表中,以天为单位隔开,按时间顺序排列事件,并展示出每个事件的起止时间和时间消耗。
(上图是以下两个界面的合并,app界面是分列表和饼图的)
第一个页面是事件的列表,简单直接但是不直观,点击右上角的按钮就进入了事件的统计列表。
在这张表中,我们把选定时间段内事件的消耗时间加起来,让你直接看到每天每周或每月的总体时间花费。
这张表中,我们还提供一张饼图,让你直接看到各个事件的时间使用比例,这样你就能看出这一天是生产的一天,还是休憩的一天。
在统计界面中点击某个特定的事件,就进入了该事件的详细时间账单,这张账单显示出你使用 iTimeLog 以后在一件事件上付出的时间。
对于一些短期事件,比如读一本书之类的,也能非常方便地查看记录整体花费的时间。
柱状表显示每个时间段中,给事件付出的总使用时间。
同时多个时间段排列查看,也能看到这一事件的时间投出趋势,比如 iTimeLog 在最初比较密集开发的时候,每周大概要投入 20 个小时以上的业余时间,发布几版之后,主要功能稳定了,时间花费就降了下来。
这张事件的时间分布图,主要是显示你是否在正确的时间做重要的事情。
每个人都会有自己的高效时间和不高效的时间,在高效时间进行更有生产力的活动是一种更合理的选择。iTimeLog 其实并不希望给人压力,让人去尽力填满每天的 24 个小时,更希望通过统计数据,让人们对自己每天的 24 小时做出更合理的分配。
17年买了一个小房子,装修半年并搬了进去。
潜了一次水,见了长尾鲨。
年初去厦门跑了一场马拉松,年末去深圳踢了一个投资人组织的小杯赛,期间踢了很多友谊赛。
几乎完成了一个创业项目。
不记得读了多少书,Kindle 的磨损程度还一般,并且没有坏。
还保持着跑半个小时热身再踢两个小时球,最后十分钟才抽筋的体力。
今年依然在做OpenPlay,上半年忙一个新版本,下半年比较懒散和盲目,可能做不了太久了。固然有市场上对于这种增值服务不认可的原因,我们团队本身自由散慢也确实不像很有生命力的样子。
iTimeLog 去年赚了两只猫的生活费,今天情况好一些,跟一些大触没法比,可能赚出了四只猫的生活费,虽然也并没养四只猫。
工作时间上,花了 16 小时 47 分,发了 7 个版本,适配了 iPhone X。
年初处理一个在微信群里一直有反馈,我自己手机上无法复现的卡顿问题,折腾了近一个月。除此之外,都是一些功能上的小更新。
10月份左右,开始使用 swift 和 storyboard 构建一个新的 app ,累积了 41 小时 34 分钟的工作量,完成度 61.25% 左右,希望农历春节之前可以上线。
二位爷又老了一岁,已经是九年陈的老猫了。
路飞还是口臭,艾斯吃了罐头还是会吐。除此之外身体比较健康,体重没什么变动,也没去过医院。
12月的时候,有一个周末,我跑到广州图书馆办了张卡,当时借了两本书,感觉实体书拿在手上真是压手,还是 Kindle 轻便好用。
今天一直在听的中文谈话类 Podcast 是大内密谈,日谈公园和跟宇宙结婚。谈话类是一种陪伴,特别适合不太喜欢聊天又喜欢听的人。
英文的主要是 Accidental tech, undter the radar, core int 和 AppStories,没有全听,也没有全听懂。
要特别提一下 B站 和 油管,今年的视频消费主要是这两个站,在 B 站主要看一些老年电视剧,这一年看得最多的是 星际迷航:航海家号 ,可惜 B站 好像也没有版权,现在只剩下缓存里的几十集了。
youtube 上有万罗万象的短视频,没事看一个看外国人做木工特别生活。
17 年写了 7 篇 blog, 18 年写个 52 篇吧。
耐力:无伤、燃脂、轻松的MAF训练法
这本书我是在微博上看到有人说(跑步方面的书如果只看一本的话,这本就完全够了。 ),刚好 Kindle 又有电子版卖,就买了一本看看。
菲利普•马费通 博士在他这本耐力中,提出了一个我以前没有想过的概念,一个人运动能力强,不代表他身体健康。跑得快这个事,有可能是因为生理状态好,有可能是因为心理状态强,心理状态强便是“催谷”自己跑出长距离的极端结果就是马拉松上救护车。
我以前一直以为,只有职业运动员才会为了运动表现牺牲身体健康,但过度训练导致的健康受损和伤病还是挺普遍的。
这本书中提出了一个以心率为核心的健康训练方法,以跑步为例,它认为 (180 - 年龄)得到的数字大概就是你的最大有氧心率,用低于这个数字并接近这个数字的心率训练能发展你的有氧能力,用高于这个数字的心率训练能发展你的无氧能力。多数人在日常跑步的都会超过这个数字进行训练。这样在提高成绩的同时,其实也在累积疲劳,累积伤病,可能在赛季中途被迫离开赛场。
以我为例,我正常的配速是五分半左右(每公理要跑5分半钟),并且在5公里之内可以保持匀速巡航,心率在第1公里结束时就会达到150左右,然后会慢慢提高,到5公里结束时就会达到170以上,而且我习惯最后1公里左右开始加个速,那么最后的结束心率会达到180左右。也就是说,在1公里之后,我基本就是在无氧空间跑步了。
我现在的身体状况是,如果去跑全程马拉松的话,大概在20到25公里右左开始掉速。
我尝试实践一个书中的 MAF 训练方法,12.26日晚上我要去踢个球,球场离家有四公里多,我就带上心率器跑过去,在跑步过程中一直注意心率的变化,尽力把它稳定在 147 左右。配速如上图所示,从6:42 到 8:49,感觉上,早期心率还好控制,基本来还是要花点力气才能到147,到了最后一公里,带稳定住就比较难了,稍不注意就到150,而且过了150就飞快飚到160左右,最后一两百米的时候,为了保持住心率都开始用走的了。
不过,这个心率也许真的差不多就是我的有氧心率,因为跑完后基本没什么太大的疲劳感,直接踢了场两个小时的中年养生球,最后十分钟才开始出现抽筋现象。(踢球跟训练无关,按书中的指示,如果认真进行有氧训练,踢这场球是有害的,然而……
周一早上,我有进行了一次低心率的训练,这次数据上好看一点,可能是因为早上的气温比较低一些,跑了6公里,配速从6:14 掉到了7:33,(8:22是干扰项,当时我在进行跑后的散步,等心率掉到120以下才关掉 runkeeper。
我打算以这个数据为基点试着实践一下这个训练,每周135早上跑6公里左右,保持心率,不求速度,看看在相同心率下,配速会不会慢慢提高,每隔一段时间跟这个数据进行比较。
来自一个用户需求。
如方便的话,恳请作者在二个地方小调整一下,一是新建时间段能否增加一个“上一阶段结束时间为本阶段开始时间”的选项,而不是简单的直接调用当前时间
我试了一下,可能对大部分人来说,可能只有10%的时间需要在开始一个事件时间段时使用上一个阶段的结束时间,而为了这个频度的需求在每次添加时间的时候选一下,并不太方便。
所以做了一个折衷的方案,在事件编辑界面加了两个按钮,一个对开始时间进行设置,一个则针对结束时间。
开始时间的按钮,功能是把开始时间设置为上一个事件的结束时间。
结束时间的按钮,会查看是否存在下一个事件,如果存在,就设置下一个事件的开始时间,否则设置为当前的时间。
上一个版本,存储分享用图片时会 crash。因为苹果不同的 iOS 版本会对相册权限有不同的设置(基本上是越来越严格,越来越细致),iTimeLog 没有存储相册的权限。
4.5.0 没有太多可说的,就是一个快 7 年的老 app 适配了 iPhone X。
作为开发者,不得不说,积年的代码,不管有没有 bug,都会慢慢腐化。
经常有人在第一次听说时间记录 app 的时候,问它是自动记录的吗?没有人喜欢做额外的工作。但是很遗憾的是,至少在 iOS 上,自动记录的方法是不存在的。iTimeLog能做的是尽量简化记录。
iTimeLog 的录入设计,其基本的原则想法有两个:
所以 ,iTimeLog 的录入方法有以下几种:
什么都不要输入,如果你开始一件事情时脑中已经开始考虑做事的步骤和方法了,不要打断它,点一下这个加号,iTimeLog 为你建立一个开始时间为当前时间的事件,然后计时。等你中途休息或完全事件时再回来编辑就好了。
所有事件都是文字,所以 iTimeLog 其实不鼓励预先设定事件,然后通过选择来进行录入或开始的方式。我们鼓励直接输入文字,输入完成之后点击键盘上的完成或者输入提示条上的加号就开始计时。
当你在输入文字时,iTimeLog 为你在 app 中实时搜索,并在系统的输入提示上方展示 iTimeLog 的提示,这个提示中展示了你之前输入过的事件,按时间倒序排列。也就是说,排在最前面的事件并不是跟你当前的输入最匹配的事件,而是在所有可以匹配的事件中离现在最近的事件,因为这可能是你最想输入的事件。
在上面输入提示的图中,你可能注意到了,提示中的事件不单只是事件,而是“事件:类型” 的格式。这个格式是全 app 通用的,也就是说你在任何地方输入或设计这个格式的文本,都会被分解成 事件+类型 的数据型式。
在首页输入框可以这样输入,在模版设置中也可以设置这样的模版以供使用。
上面提到了模版,模版这个功能做得比输入提示要早,但做了输入提示之后,我个人已经很少用模版功能的。
模版功能是指你可以在设定中预设你的事件模版或类型模版,这样在需要的时候,你可以选择模版,而不需要手动输入了。
这个功能因为预设事件比较麻烦,而且如果预设的事件比较多,滚动选择也不是很方便。但如果只设置五六个左右的模版,而且这些模版事件不是很常用的(比如天天都会记录),还是有一定的作用。
那么,最常用的事件,天天都做的事,比如工作,吃饭,交通,(还有人记录睡觉时间 ),我们推荐使用“重新开始” 按钮,这个按钮是我觉得 iTimeLog 还算可以使用的原因。
对于大多数普通人来说,每天的生活主干就这上面说的几件事(工作,吃饭,交通,休息),所以在时间流中,iTimeLog的记录列表中,这几件事总是会出现在屏幕上。这个时候,就不要用输入或模版了,只要选中相应的事件,点击重新开始就可以,最快最简单。
malapascua岛在菲律宾宿务市所在的岛的北边,所以交通方式是从广州飞马尼拉转宿务之后坐车一路北行,到最北端之后换船半个小时上岛,岛非常小,基本上除了来潜水看长尾鲨之外无事可干。由于中文的误导,我一直以为岛的名字是 mamapascua ,上岛三天之后,才知道是 mala 不是 mama 。
这一段可能是这篇 blog 中唯一有用的东西,2017年10月,岛上没有 ATM,几乎没有官方换钱的地方,用信用卡的话,多数要加 3% 以上的费用,有些不收费的外国人开的店,要求消费 500P 以上。
而我们之前定的潜店,提前交了潜水的费用,觉得岛上花费应该不高,只带了 10000P 的现金上去。后来发现提交交的费用只支持在岛周围潜,如果行程是去 gato 之类的外岛,则加另加船费或上岛费,10000P 很快就会见底,又找不到取钱的地方,就嘿嘿了。我们后来发现同店同船的潜水员几乎都有同样的问题。
真没什么可吃的,没有辣味的重庆火锅,现生火要等一个小时的烧烤,意面比萨还过得去,也就是还过得去。仙本那没有吃的可能是因为伊斯兰,这里没有吃的应该就是因为偏僻闭塞,而且周边都是保育区,也就没什么海鲜可吃。比较奇怪的是,作为一个海岛,猪肉就像不要钱一样使劲上,一盅猪肉汤恨不得没有汤。
也真没有什么可玩的,热带岛屿的有海水和蓝天白云这里都有,但是没有游艇,水上摩托和香蕉船,所以基本上就是个潜水间隙休息换气晒干自己的地方。
malapascua的水下还是比较浑浊的,能见度不高,不知道是不是因为我们去的那几天总是时不时下个雨。
潜店的小哥听说我们已经一年多没潜了,不同意第二天就看我们去看鲨鱼,安排我们先出岛到 Gato 先适应一下潜水的感觉,还要自己带上午饭,船上没有准备。
第一次日潜印象比较深的是海水真的不太干净,总是些海兔海虾之类,比较新奇的是西班牙舞娘。这里的潜导对海底生物不是很客气,他们会玩西班牙舞娘,把它们拖离海底的石块,悬在空中,让他们踩着舞步向海面扭去。
潜水技能像是骑车,熟悉了就变成本能,一年没潜,下水30秒也就能随意漂浮了。
凌晨四点多起床在星空下出海很有一种当上了渔民的感觉,船出港后往东边开,太阳慢慢升起,等我们到了下潜地点的时候天还没有完全亮。因为长尾鲨每天只在这个时间上浮到35米左右的地方,我们要潜到35米左右的地方,只能呆5分钟,能不能看到长尾鲨就是看命,于是开始下潜,在一个二十米左右的平台呆了一会,再继续潜到一个类似观景台的地方,当地人在台上做了两个水泥墩,然后穿上粗铁链,我远远地看见有人排成一排跪着,像等待处刑,于是也跟过去跟着跪,慢慢呼吸。
水很浑,能见过不过十几米,我们就看着前面的悬崖,眼前只有雾和偶尔被吹到看着的泡泡,然后潜导拍拍手,指向一团混沌,过了三五秒,长尾鲨鱼那里现身了,巨圆巨圆的眼睛,扭一扭,向前一步,更清晰了一些,再扭一扭,转身侧对着我们,把尾巴从混沌中拖了出来,摇曳,摇曳生姿,再扭一扭,掉头又回到混浊中去了。像走戏台,不知道来去了几只,总是像主人一样,从容摇曳,然后我们的时间就到了,慢慢上浮,去吃早饭。
来之前定的是12潜的套餐,三天。因为按之前的经验,一般白天可以安排三潜,凌晨要起来看长尾鲨,晚上可潜可休。来了才发现这个岛上的潜店白天只能安排两潜。三天要想潜满十二,每天晨潜夜潜都要去,所以潜水日程基本上是凌晨4点到晚上7点,一天跨十五个小时。
第一天下午收工的时候,我的后背刚刚晒得发红,还没开始曝皮,潜导在船头问我要不要去看xx鱼 papapa。英文中夹着papapa让人一时反应不过来,papapa啊,就是啪啪啪啊,去看麒麟鱼交配啊。然后他打着手势告诉我们,麒麟鱼一般在黄昏时分在珊瑚丛上约会,然后旋转着交配。于是第一天的行程就定了。
公平地说,看麒麟鱼交配是一件无聊的事,为了不打扰它们,潜导着我们说好我们不能开手电筒,只能他开。傍晚的海底,比傍晚的陆地更暗,珊瑚丛中的麒麟鱼就是普通的灰色小鱼。我们一个团伙就围着珊瑚跪着,看着它们游来游去,然后起兴,然后并排,然后缠到一起,然后螺旋上升,潜导用手捂着手电筒悄悄地瞄准,突然放开,强光中受惊的鱼突然分开,受精的鱼卵四散。在光照中,我第一次看到麒麟鱼身上的蓝色和玛雅花纹,想:看什么啪啪啪,就这身花纹我就想打着光看它们游一天。
在水下看到蓝环章鱼的时候,我并没有认出来,回到水上听说看到的是蓝环章鱼的时候我也不知道蓝环章鱼是什么,甚至不知道当时看到的是章鱼。因为不认识而且碰到的章鱼比较小,看到一群人围着的时候也懒得钻进去,只隔着一两米看着一团土黄色的蛤蟆状生物在沙床上跳来跳去,躲避无聊人类的叮叮棒,错过了近距离看它闪现蓝光的机会,后来才知道这东西比含笑半步癫还要毒,被咬了基本不需要送医院。
之后在一个小鱼群旁边看到了一只乌贼,也许不是乌贼,反正就是上图中这货。在我看到它的第二秒钟,它就瞬移了,喷水瞬移到了两到三米之后的地方,完全没看到运转轨迹。还好距离不是很远,潜导用手电筒的光罩住了它,于是它开始顺着光笔直得向手电筒游去。白色的表皮泛着光,慢慢地变透明,露出蓝紫色的血,两边的鳍波浪式地翻滚着,撞了撞着电筒,储了足够的水,又向上方瞬移去了,这一次留下了一点点轨迹,冲进黑暗的海水中,再也看不见了。
回国一个月之后看蓝色星球II,总觉得章鱼+鱿鱼+乌贼是海底最大的生物族群,然而在我的潜水生涯中见得还不太多。
最后一天我果断地取消了下午的一潜改成夜潜。夜晚的海底像夜晚的非洲草原,白天一动不动的生物都开始活跃,从植动变成了动物,连海星都伸出脚爬了起来。
珊瑚上海草一样的东西,在晚上被灯光一照就缩了起来,而一扬手就会缩起来含羞草一样的花,会慢慢地从石管中伸出来,一点一点展开花序,像看一朵花开的慢速摄影。象拨蚌在海床上慢悠悠地爬着,被潜导抓了一把就全身缩了起来,之后潜导就游走了,我绕了一圈回来发现它又爬出来了,慢悠悠地在身后一直卷起沙土。螃蟹爬着爬着突然平沙落雁,然后一顿一顿地屁股向后把自己拱进了沙堆里。
最后一潜上船后,潜导跟我说抱歉没有找到太多特别的东西,然而夜潜本身就已经很特别了。
岛上的服务给人一种即好又坏的感觉。
刚到岛还没上船就会有人老远打招呼,并且上前帮忙扛箱子直接送到潜店前台,我就直接开始对各种单子,查看租用的装备什么,他们也就走了。后来发现他们可能不是潜店的人,帮忙帮个箱子是要小费的,但我当时没有意识到这个事情,他们也不纠缠,这种距离感让人特别舒服。
但旅店的女服务员就不是那么回事了,懒且冷淡,像传说的国营售货员,点菜要喊个两三次,买单还要喊个两三次。据我们同船的东北贵妇说,最后一天他们们点了菜之后一个小时都没上,他们要催菜,服务员看了他们一眼,说店里这么多人,根本忙不过来啊。
花了近十个小时看完沙丘。
可能是十五年前就想看的书,但不是知道是年纪大了看是书写得比较平缓,很好有迫不急待想翻下一页的感觉,即使有比较大段的时间,书还是看得断断缓缓。
一本书读完的感觉,是一个巨大的宇宙只在香料行星露出鳞爪,却也只是鳞爪而已,其它地方到全书结束都没有露出来。
因为后面还有五本。
另个,作者可能是个格言警句爱好者。
我绝不能恐惧。恐惧是思维杀手。恐惧是带来彻底毁灭的小小死神。我将正视恐惧,任它通过我的躯体。当恐惧逝去,我会打开心眼,看清它的轨迹。恐惧所过之处,不留一物,唯我独存。
“她说作为统治者,必须学会说服而不是迫人屈服;她还说,统治者必须拿出最好的咖啡炉,吸引最优秀的人才。”
心情跟这有什么关系?不管是什么心情,如有必要,你就必须战斗!心情这玩意儿只适合牲口,做爱,或是弹琴,跟战斗毫不相干。”
这世上并没有笔直通向终点的路。攀登一座高山,你需要爬几步来证明这是一座山。站在山顶,你看不到山。”
他总是抵抗着诱惑,不愿意选择一条明亮安全的路途,并警告“那条路通向停滞”。
“恐惧是思维杀手。恐惧是引向彻底毁灭的小小死神。我将正视恐惧,任它通过我的躯体。当恐惧逝去,我会打开心眼,看清它的轨迹。恐惧所过之处,不留一物,唯我独存。”
“我说得很清楚了,”男爵说,“绝不能想杀谁就杀谁,而该像管理整个封地一样,通过适当的法律程序来处理。一定要为了主要目标去做——了解你的目标!!”
人类潜意识深处存在一种渗透全身的需求,即追求一个符合逻辑、凡事有理的宇宙。但现实中的宇宙总是领先一步,令逻辑无法企及。
当宗教与政治同乘一辆马车时,驾车人会觉得没有什么东西可以阻挡他们。他们会一路狂奔,速度越来越快,把一切思想障碍都抛到一边。他们会把一切危机意识抛诸脑后,忘记前面的悬崖并不会主动提醒闭起眼睛盲目狂奔的人。他们不懂得悬崖勒马,直到为时已晚。
宇航公会的领航员拥有一种有限的预知能力,但他们作出了致命的决定:总是选择畅通无阻的安全航道。而畅通无阻的路途最终只会走向停滞。