右舷

宇宙,人类最后的边疆

2024
SwiftUI 可简单了,在你突然想优化一下性能之前。

刚开始玩 SwiftUI 时,烦的是数据怎么不计算更新,打开 Instrument 之后,恼的是数据怎么重复计算了五次。

经过大约一周的性能优化,PaceGuru 的跳转延迟问题终于好了一些,内存点用问题也好了一些,还删除了一个多余的实体,以后更新跑步记录更简单了,简单也就是出错的机率少了一些。

快到年底了,应该有分享一整年的跑步记录的需求,现在 PaceGuru 的日历视图是两列六行的,在手机上倒是看得清楚,发享到社交网络就有点太长了,所以计划在分享时把它转成三列四行,发布出去就好看一些,还没做完,网断了,AI 员工不给我结果了。

今天一直早上主要是在 PBS 的代码测试,主要代码是 Windsurf 写的,有问题,不断地叫它改。过程并不开心,因为同时生成的代码量大了,有个问题就是懒得看,但不看的话就只能盲目地让它改,对代码的掌控力不足导致整体感觉不太舒服。

因为 UI 还没想,算法测试完后就先放在那里了,下午主要是想看看首页的内存消耗问题有没有太好的解决方案,一下午没有成功,很挫败。

晚上去接小坨的时候,车刚停好,推上开始讨论 Revenuecat 被墙的问题,Paceguru用的也是这个,马上回想了一下。

现在 PaceGuru的逻辑,如果无法连接到服务器,对现有的 Pro 用户应该没有影响,只是未购买的用户会直接用上 Pro 功能,这么看也无所用,就让他们用两天好了,周一再更新了。
晚上回家上去看了一下,很多开发者比较着急,是因为他们怕付费用户用不了功能吗?好像也不是,他们是高用户量的开发者,应该是怕新用户无法购买吧。

不像我们这种一周都没几个内购的人……

interval

PaceGuru 的跑步详情页有一个区块,叫间歇。

间歇就是说,如果你用 Apple Watch 完成了一个设置好的分段跑步训练计划,在详情页除了每公里的分段之外,PaceGuru 还提供间隔的分段数据显示,当前提供分段的距离,时间,配速,步频、功率等等。提供了这些数据的问题就是,屏幕不够宽了,所以就需要滚动显示。

滚动显示的问题是什么呢?就是滚到后面就不能很方便地知道这一行是哪一段了,特别是行数比较多的情况下,滚动后面,看到了功率数据,但又不知道这是哪一段。于是一个很自然的想法,就是能不能像 Excel 那样,可以固定第一列。

之前也看过不少开源表格控件,都觉得太复杂了,犯不上。

于是我问 Windsurf: (我描述了固定列的需求)。
Windsurf: 你可以做两个 Grid,并排放,第一个 Grid 只放固定的列,第二个 Grid 滚动,这样就可以了。
我:我也这么想过,但有一个问题,两个 Grid 怎么保证每行对齐?
Windsurf:好办,每行都用固定高度。

我不是特别满意,但好像也没太大问题,于是让 Windsurf 写代码,我再改两手,事情就这样成了。

然后我又想起另一个问题,我现在的 Grid 每一列都是写死的固定宽度,这个固定宽度要同时适应中文和英文,所以只能按中英文中较宽的那一项来,有些难看。

于是我问 Windsurf: LazyVGrid 的宽度好是是根据第一行的内容来设置的吗?
Windsurf: 是的。
我说:那我第一行是时间,第二行是 12:32:40,明显第二行比较宽,按第一行定宽度明显会发生换行,写死一个宽度我又不开心,怎么办
Windsurf:你可以遍历一列中所有的内容,计算它们的宽度,然后以最大的宽度为宽
我说:想想就很麻烦,你来写一个实现吧

于是 Windsurf 写 calculateColumnWidths,中英文也直接解决了,我发现每一列的内容本身还是比较固定的,不同列才不一样,动手简化了一些代码,事情就这样成了。

程序跑了起来。

我发现左边的 Grid 只有两列,右边的五六列,他们平分了屏幕的宽度,特别怪。
我问Windsurf说:怎么办?
Windsurf说:左边固定宽度
我看左边两列的宽度存了一个数组,于是: 你 reduce 一下

于是 Windsurf 写 reduce(0, +),事情就这样成了。

回到之前每行固定高度的问题,既然列宽可以算,以后如果有需要,行高再让Windsurf算一下好了。

结果Windsurf说你超限了,请一小时后再尝试使用,我付了费,事情就这样成了。

玩起了文明 6
第一局,五六个小时左右吧。
派出了侦察兵在外面呆着
集结了全国的骑兵和弩手准备进攻一座城池
城池里射出机枪的子弹,侦察兵带着狗正在休息,头上响起了飞机的轰鸣
GG

11 月跑了 205 公里

11 月跑了 205 公里

在福州,我是一个请了假的人,在广州我是一个失了业的人。

其实就是辞职了,没有跟家里说,这次爸爸生病,来来回回的,在福州也呆了两三个月了,因为不想让爸妈有心理压力,觉得是因为这次生病导致我丢了工作,就一直说是请假,请长假,请没有工资留了职位的假。

最近在家里陪妈妈,顺便料理丧事,主要是陪妈,丧事料理得不多。在几个七之间,我主要的任务只是维持一根香一直燃着,等它快烧完了去换。

除些之外,到时间起床,到时间吃饭,到时间出去跑步,坐在沙发上写代码,就是普能的日常生活。

想老婆,想女儿。

在家帮忙办葬礼,也就是打个下手,妈妈说什么就做些什么,主要在大舅在操持。
晚上聊天,大舅说外公的兄弟去世那会,他才二十多,办丧事的时候,他做副手,很多事情都可以做了。我都四十了,还只能听话办事。
那是当然的,这些风俗习惯,经历这才会知道 ,我知道个啥啊。

早上起床他叫我,我给他换了尿不湿,擦了屁股。
他翻过去,我给他揉了揉腰,就到客厅里呆着了。
妈今天出去办事,办他的保险,再去医院去要点止痛药和安眠药。
爸在房间里睡,他一向都是早上睡得比较多,我也没有在意。
妈回来的时候说保险那边需要福州医院的出院小结,小程序可以办,但要人脸验证。
我拿进去,看他半边脸埋在枕头里,跟妈说这样应该做不了,等他醒了再说。
妈说把他叫醒吧,反正一整天都可以睡。
摇不醒,我上前探了一下,没有气息。
妈妈嚎啕。

一般来说,一个人持续跑步一段时间之后,可能会想提升自己的能力。

他会看视频,读书来寻找办法。

然后会接触到有氧跑,阈值跑,间歇跑等名词,了解到跑步的排乳酸能力,速度能力等单项能力。

同时了解到训练这些能力的办法就是针对性地进行训练,用特定的配速跑特定的距离或时间。

那么,训练计划怎么制定呢?

PaceGuru 本身就有制定计划并同步到 Apple watch 功能,这一次我们更进一步,你可以方便地使用我们内置的模版进行。

疲劳度是一个训练强度指数,是用之前训练的训练强度跟时间进行计算的,为了反映训练者当前的身体疲劳程度,为来防止训练者进行过度的训练。

在 UI 设计上,使用折线图表,按时间显示过去 16 天到未来 8 天的疲劳度。过去的时间主要是因为训练产生的疲劳度增加,而未来则是预测在不进行训练的情况来恢复曲丝。

0%