0%

事件背景:知乎问题《如何看待 Ant Design 圣诞节彩蛋事件?》

简单地说,这个拥有接近 40000 个 Star、被国内外前端同学广泛使用的 UI 库,在 9 月份的时候悄摸摸地在代码里加了一个功能:系统日期是 12 月 25 日时,所有这个库里的按钮组件都默认有一个积雪效果。而这个 feature 被设计成不写入产品文档、无控制开关、默认开启,于是圣诞节当天突然出现的「彩蛋」让很多前端工程师措手不及。有网友吐槽这种自动跳出来的彩蛋是「跳蛋」,或者更直接点认为这玩意是「地雷」。

拿这事出来讲主要是因为我也是这次被地雷波及到的「受害者」。25 日早上我正好有任务在客户那边驻场,有同事在群里说到测试环境出现了这个彩蛋,我一开始没多想,还悠闲地吃着早餐,完事抹了一把大油嘴,突然觉得哪里不对劲:测试环境有彩蛋,而这个彩蛋又是通过自身代码逻辑触发的,那我们在客户这边的线上环境也应该会出现。

当时就倒吸一口凉气。

阅读全文 »

2017 年第一天的时候我在朋友圈立了个小目标:今年不脱单。

完成得非常好。

另一个微小的愿望是创造价值,不管为自己还是为别人。这个也还行,虽然没做出什么很厉害的东西但总归是为其他人提供了些帮助。

春节时没有回家,一个人在公司的别墅里住了十天,顺带给公司的猫和狗铲屎。对于我这样的人来说能一个人安静待十天可以说是过年最佳实践了。回家所耗费的精力和时间,以及在家里产生的一连串非常难受的体验让我认定这事对我有害,我的家人们并不珍惜我对他们的善良、耐心和忍让,我对此毫无办法。为了不继续伤害自己,我必须扔掉一些东西,这和经历久了中国教育后需要在恰当的时机接受观念冲击洗一次脑一样,广泛地接受莫名其妙的恶意,想明白自己为谁而活,弄清楚怎么和世界相处,然后事情就非常简单了。

阅读全文 »

起因

我是微博重度用户。

在国庆节前后几天,我遭遇了一轮又一轮的被动加关注问题,刚开始以为自己不小心泄露了密码,因为之前很长时间我都没有遇到过这类问题,先从自己身上找原因。然后就是既定流程:修改密码 -> 在安全中心退出所有已登录设备 -> 清空所有第三方授权。

然后,好像并没有什么用。

阅读全文 »

大约在两年前,我认真思考了一个问题,如果我哪天走在路上被醉驾的傻逼撞死了怎么办?

这个问题当然是无解的,错不在我,真要轮到我倒霉我毫无办法。在中国,尤其是北京上海深圳,社会治安非常好,走在路上被人故意伤害的几率极低,自己不去作死就行。更何况我这种喜欢宅家里又善于预测可能的安全风险的人,如果生命真的受到威胁,那大概率是发生了不可控意外。飞来横祸这种事无法预判无法躲避,完全看命,基于「事事有着落」原则,我必须要为这种低概率的坏事情做好准备。所以,两年前这样想了一通后,我认为我有必要提前写一份遗嘱,来安排一下我意外死亡后的事情。

昨天下午,我终于把酝酿了两年的遗嘱写好了,内容其实非常简单,告诉我的朋友和家人需要帮我做些什么事情。主要是两件事:把这个博客续上费多维持几年;在我常去的几个社交平台上发布我的死讯,让我的那些近的远的朋友们知道这件事,告个别。

遗嘱里没有提到钱,因为我现在没有什么财富和资产,不存在分钱的问题。唯一提了一点是我身上的意外保险,可以赔到点钱,受益人是我父母。但你懂的,那其实已经不重要了。

阅读全文 »

看 WWDC 2017 直播的时候,Keynote 上有一页讲 iOS 11 专门为中国用户新增了一些功能,那页只是提了一句很快就切走,但上面有一句让我眼前一亮:SMS fraud extension. 看起来是在 iOS 11 上开放短信过滤功能了?

坦率地讲,对我个人而言目前 iOS 的使用体验已经比较满意,但短信过滤的缺失是我最大的困扰,我经常被这几种短信烦到不行:

  • 淘宝、京东的店庆、618、双十一等各种营销短信。
  • 各家信用卡推荐你分期、预借现金、购买纪念品的短信。
  • 摩拜单车、ofo 喊你骑车的短信。

iOS 目前只能对特定号码开启「勿扰模式」,这样短信进来后就没有铃声和振动,只在短信图标上 +1 个未读。很显然这解决不了多大问题,一方面经常会有新的短信通道号码(以 106 开头的那些)过来,第一次肯定没法避免,另一方面像银行信用卡消费提醒、账单提醒这种有用的短信和营销短信多数是同一个号码发过来的,为了避免错过那些用得上的短信,你可能不会把此类号码设成勿扰。

阅读全文 »

聊一聊近日更新的 App Store 审核指南的几个重要变化。关于微信小程序,关于公众号打赏,都有了答案。

  • 禁止 App 自己引导用户打开 App Store 给 App 评分,因为现在有系统 API 支持这一行为了,在 App 内就能直接完成 review。

    Use the provided API to prompt users to review your app; this functionality allows customers to provide an App Store rating and review without the inconvenience of leaving your app, and we will disallow custom review prompts.

  • App 的名字长度限制从原来的 50 个字符缩短到 30 个字符,且名字不应该包含价格。App 的副标题更适合用来介绍 App,但副标题不应该有指向其他 App 的内容。

    这个可能是出于打击关键词排名刷榜的考虑。

  • App 只能使用当前最新系统版本的 Public API,保持 App 的更新确保废弃的 API 被移除。

    更严格了,以前没有对代码里 deprecated api 的使用作规定。这条更像是建议而非强制规定,因为不使用某些旧的 API 的话老系统可能无法正常运行 App 了。

    2.5.1 Apps may only use public APIs and must run on the currently shipping OS. Learn more about public APIs. Keep your apps up-to-date and make sure you phase out any deprecated features, frameworks or technologies that will no longer be supported in future versions of an OS.

  • 敲黑板,划重点了:

    In-App Purchase 的规则里新加入了一句话,App 应该使用 IAP 购买的货币让用户给数字内容的提供者给小费。

    这一句话结束了关于微信公众号打赏问题的争论。

    群众:审核规则只说解锁功能,打赏不属于解锁功能,强制走 IAP 不合理。

    Apple:嗯,有道理,那我现在加上了。

    If you want to unlock features or functionality within your app, (by way of example: subscriptions, in-game currencies, game levels, access to premium content, or unlocking a full version), you must use in-app purchase. Apps may use in-app purchase currencies to enable customers to “tip” digital content providers in the app. Apps may not include buttons, external links, or other calls to action that direct customers to purchasing mechanisms other than IAP.

  • 如果是使用商业模板创建的 App 或者是由自动生成服务生成的 App,会被拒绝。

    4.2.6 Apps created from a commercialized template or app generation service will be rejected.

  • 又要划重点了:

    新加入了一条关于 App 内运行第三方程序的规则,看起来是官宣微信小程序的合规性。

    有几个地方需要注意的:App 必须使用 WebKit 和 JavaScript Core 来运行第三方程序,那么就意味着只可能是 Web 程序,同时容器 App 不能把系统的原生接口暴露给第三方程序;第三方程序的开发者也必须是 Apple Developer。

    `4.7 Third-Party Software

Apps may contain or run code provided by third party developers (e.g. HTML5-based games), as long as the code is not offered in a store or store-like interface, and provided that the software (1) is free or purchased using in-app purchase; (2) only uses capabilities available in a standard WebKit view; your app must use WebKit and JavaScript Core to run third party software and should not attempt to extend or expose native platform APIs to third party software; (3) is offered by developers that have joined the Apple Developer Program and signed the Apple Developer Program License Agreement; and (4) adheres to the terms of these App Review Guidelines (e.g. does not include objectionable content; uses IAP to unlock features and functionality). You must provide an index of third party software and metadata available in your app upon request.`

  • App 必须向用户说清楚申请了哪些权限(位置、联系人、日历等),以及用户不给予权限的情况下什么功能无法工作。

    这条规定有可能解决大家经常骂的某些 App 不给权限就直接闪退的问题。

    Your app description should let people know what types of access (e.g. location, contacts, calendar, etc.) are requested by your app, and what aspects of the app won’t work if the user doesn’t grant permission.

  • App 和 Extension(包括第三方键盘),不应该包含 Apple emoji.

    没理解错的话,第三方键盘里不能直接输入系统的 emoji 表情了。我觉得这条略不合理,难道我想发表情时还必须得专门切换到系统的 emoji 键盘?

    Apps and extensions, including third party keyboards and Sticker packs, may not include Apple emoji.

阅读全文 »

过去一年我在网上常逛的社区有:微博、Twitter、V2EX、知乎。V2EX 里互联网从业者居多,偏小众,而 Twitter 中文圈因为自带门槛,活跃度不高,偏私人,特点非常明显。微博和知乎则很杂。

我玩社区的目的有两个:一些话题带来的见识和新鲜感;它们是体验、观察人性的好地方。一个社区一旦受众变广,一定趋向于成为小社会,在社会里就必然能感受到人性。从我个人经验上说,人们在网络上的公开言行要么带有目的,要么出于人性。网络环境越来越开放(只要不涉及敏感话题),受众越来越广,但现在能在网络上好好说话的人比例极低。这篇博客用来总结我过去几年所看所想,涉及以下几个话题:什么样的言论是不恰当的?为什么存在这么多不恰当发言?怎么理解和承受住网络暴力?什么是优质、正向的说话方式?

我对网络舆论的接触最早来自贴吧,刚开始和很多人一样,对于各种自己无法认同的发言很排斥,难以理解,为什么这样瞎说话的人也可以上网?作为活跃成员和管理者又不能正面怼,只能憋着,或者忍不住了上去试图讲两句道理。这种经历多了之后,我发现大多数「我无法认同」的言论都可以找到不复杂的原因解释:可能是信息不对称,比如我在这里已经待了3年而对方是一个新人很多信息和规矩不知道;可能是单纯的无聊,对方随便扯扯淡想吸引注意力;当然也有可能是我自己的问题,我没有跟上对方的思路,我的无知和短见蒙蔽了自己。我开始注意和总结这些现象,一方面能让自己积攒经验更容易了解到一个陌生人想传达的意图,另一方面是,如果不在逻辑上分析出原因让我知道问题不在我这里,我其实很难抵抗地住受众变广带来的压力。如果你有点粉丝,或者你管理过什么社区的话,你知道我在说什么,即使你在持续做正确的事,来自这个世界的恶意也是你难以想象的。后来不带社区,就只当一个普通的吃瓜群众到处逛,这样的思维习惯一直保留了下来,很庆幸培养了自己这样的习惯。即使现在到处都有撕逼、争吵、讽刺、打脸、反转,我看到后内心都毫无波动了。

人人都有的思维误区

阅读全文 »

  • 不轻易烂尾、关闭自己提供的开源项目、在线服务。关闭时应向他人解释原因,提供替代方案的建议。
  • 开始一个项目时,先敲定相应语言的编码规范,全项目保持一致。遵循自己所在公司、团队的编码规范,规范如果和我既有习惯冲突,改变自己的习惯。
  • 永远不提交空的 commit message。尽可能遵循 commit message 礼仪,提供精简有效的信息。
  • 注意名词的大小写和读音,不确定的就去翻官网搜 YouTube。英文和中文之间添加空格。中文排版尽量遵循中文文案排版指北
  • 永远保证对我有价值的数据存在至少一个备份(外置存储、网盘)。
  • 尽可能保证自己任意时刻都能被电话联系上,紧急情况时我可能很重要。
  • 我犯的错挖的坑,我负责擦好屁股填好坑,尤其是给他人带来负面影响时。
  • 视情况帮别人背锅。
  • 在团队、公司协作中,我单点掌握的公有资源应该有可恢复机制,即使自己突然意外死亡,同事也可以很快接手这些资源(公司 Apple ID,邮箱,第三方服务帐号,绑定的手机,私钥,服务器配置文档)。
  • 对当前的国家体制保持警惕。不仅仅是我所处的行业由于体制问题经常开倒车被压制,更重要的是,我正好处在了变革剧烈的时间点,即使我不惹政治,政治也极大可能会找上门来,只要自己不是碌碌无为就逃脱不掉。

这个话题一直想聊,正好碰到个相关的热点,忍不太住,索性拿过来说。热点倒没啥,就是那篇「xxx 你给我站住」的公众号文章。一堆人说被刷屏了,我的朋友圈反而没被波及。

这样祥和的局面来得不太容易,在过去的一年多里,我陆续将 102 个联系人一个个手动点进去设置「不看他的朋友圈」,而我微信通讯录里只有 337 个联系人,朋友圈活跃分子应该不足 200 个,这样下来我就强行将朋友圈的内容屏蔽了至少一半。

我一直将微信定位为私人场合沟通工具和面向熟人的社交工具,而且毫无疑问,微信是一款好用而伟大的产品。即使我不认同它的一部分产品理念,比如公众号文章无法被有效地索引和搜索,这不符合互联网精神开放共享的本质,所以我不会将自己的内容产出只发布到这样封闭的平台上。而重度依赖微信来工作,将微信作为公司协作工具的,在我看来是不负责任的表现,不是这样做不可以,而是几乎没有公司可以把公事和员工私人环境间的隔离做得很好。这一点,性感玉米和乔晓韵有两篇微博文章都说得很清楚了:微信及微信群协作沟通规范倡议书讲道理,为什么我抵制微信办公? 更何况还无法避免出现缺乏基本职业素养的同事,肆无忌惮地在微信上发长语音、传文件,不懂礼貌,无意义增加别人的沟通成本。

基于此,我的微信自注册以来,主动加好友和通过好友申请就卡得很紧,尽可能减少微信好友数量。我并不需要加一堆不太熟的人到私人圈子里来,我不靠交际而活,也不从点赞之交中获取安全感。

阅读全文 »

单身第 400 天,聊聊情感话题。这是我第一次在公共场合谈论此类话题,将来也很少会有,结尾解释原因。

你喜欢我吗?

如果一个朋友突然问你这个问题,你第一反应会是什么,你怎么定义「喜欢」?以我目前的圈子性质和亲密度划分规则,对于我的大多数朋友,我都可以立马回答 Ta 「喜欢」。这种喜欢是出自对对方人品、风格的肯定,简单地说,我下意识里对喜欢的定义,仍然在朋友关系的范围内,而不是通俗意义上男女关系中的喜欢。对于后一种喜欢,我要么很快地说不(没有任何这个意思),要么需要至少半分钟来思考(不太确定有没有),我在感觉上是否的确在喜欢你。

说这个的原因是,我遇到过很多在我这个年龄段(18~25)的人并不能够很好的理清自己的各种感觉和情绪。他们会把对一个人正常的心理倾向当做喜欢,比如:

阅读全文 »