Algorithm
本周选择的算法题是:Zigzag Conversion。
impl Solution {
pub fn convert(s: String, num_rows: i32) -> String {
if num_rows < 2 { return s; }
let num_rows = num_rows as usize;
let s = s.as_bytes();
let cycle_count = 2 * num_rows - 2;
let mut ans = vec![];
for row in 0..num_rows {
let mut location = row;
while location < s.len() {
ans.push(s[location]);
if row != 0 && row != num_rows - 1 {
let next_location = location + cycle_count - row * 2;
if next_location < s.len() {
ans.push(s[next_location]);
}
}
location += cycle_count;
}
}
std::str::from_utf8(&ans).unwrap().into()
}
}
Review
Platform as a Product: How to set your objectives
这是一篇分享如何为平台团队设置目标的文章,先对齐对平台的定义:
“a foundation of self-service APIs, tools, services, knowledge and support which are arranged as a compelling internal product. Autonomous delivery teams can make use of the platform to deliver product features at a higher pace, with reduced coordination.” (Evan Bottcher)
其次是自问一个关键问题:客户使用平台的原因是什么,因为平台的客户一般是企业内部的用户,他们是因为公司内部有个团队在做平台所以才用,还是它真的有价值,如果有一个新的自助服务可以用,他们还会选择你的平台么?
这是衡量平台是否成功的关键因素。
在指标这块儿,作者不建议直接将业务目标设置为平台团队的目标,而是考虑将效率设置为核心指标,从客户群体上看,因为平台的使用者一般为内部用户,不涉及金钱交易,但并不是没有使用成本,平台的使用者是用他们的时间作为使用平台的成本,因此把效率作为核心指标,也是为了实现放大其他团队的产品价值,但需要强调的是,平台团队要更加关注服务对象的业务情况,只是对他们要解决的问题有清晰的认识,才能建立起从平台到提效再到产品价值提高的路径。
指标举例:
- 增加一个新客户需要多长时间
- 每个客户需要多长的周期支持?
- 客户反馈数,用于评估平台是否难以跟上客户的需求
作者的建议很中肯,做内部平台原来是为了缩短客户的交付周期并增加他们工作的影响力,最终却容易因为错误的指标,在无意识情况下变成了降低团队速度并减少工作影响力的 diminisher。
Tip
相比 Tampermonkey,Violentmonkey 有如下优点:
- 开源
- 在实现上更规范,比如严格执行 scope 约定
- 注重隐私,不采集用户数据
日常使用推荐以 Violentmonkey 为主。
Share
分享一个自己在 Notion 上做的书架模板,效果如下:
在信息维度上,它除了能记录阅读笔记外,还能记录书籍的阅读状态和阅读量统计;在实现上,主要用到了 Notion 的这些功能:
- Gallery
- Relation - 就像关系型数据库软件一样,Relation 也可以实现表之间的单向或双向关联
- Rollup - 基于设定的关系聚合数据
- Formula - 用于实现数据清洗和数据统计
模板地址见: 书架模板。