双11促销

今年 SF 官方没啥动静,我自己来。

今年 SF 官方没啥动静,我自己来。

SF 讲堂五折

讲堂名称链接
jQuery, Backbone, Vuehttps://segmentfault.com/l/1500000008694676
Promise 的 N 种用法https://segmentfault.com/l/1500000008757392
Web 永恒不变的主题:布局——Box,Flex,Gridhttps://segmentfault.com/l/1500000008879826
写 CSS 也要开脑洞:万能的 `:checked + label`https://segmentfault.com/l/1500000008950435
前端面试攻略:JavaScript 排序与搜索https://segmentfault.com/l/1500000009956817
前端必备技能:CSS 预处理工具 Stylus 详解https://segmentfault.com/l/1500000010125848
前端面试攻略:肉老师的面试题详解https://segmentfault.com/l/1500000010971105
前端面试攻略:避免求职中的“非战斗减员”https://segmentfault.com/l/1500000012807670
职场新人必修课(1) —— 实习社保个税等https://segmentfault.com/l/1500000014575853
职场新人必修课(2) —— 创业股票贷款买房晋升考评等https://segmentfault.com/l/1500000015205261
一起挣外快吧——环境搭建+万能的WP+前端如何玩转WPhttps://segmentfault.com/l/1500000015754431
系列讲堂:实战组件开发——手机日历https://segmentfault.com/ls/1650000014717120

B站视频

本来就是免费的……

https://space.bilibili.com/7409098/#/video

BaaS 碎碎念

暂时没时间写完整,零散记一些吧。

BaaS 的核心其实在于 ACL。

因为 BaaS 把获取数据的机制下发到客户端,所以 BaaS 和传统应用最显著的差距就是在哪里处理数据的可视性问题。传统应用里,哪个用户看到哪个数据是后端处理的。而 BaaS 里,则是前端、后端、ACL 一起确定的,而且通常情况下,ACL 设计的好,前端后端的验证步骤都可以省去。

小程序云不支持后台,无法使用。

哈哈哈,Strkingly 开始接入外包了

2B 工具,必须满足客户100%的需求,才有生存空间。所以建站工具在现有技术基础和框架下,没有完全成功的可能。

上线了/Strikingly认证开发者资格申请表


上线了/Strikingly 是一款简单易用的网站和小程序营销类SaaS工具。我们是第一支被硅谷最知名孵化器Y Combinator录取的中国团队,获得了来自顶级投资机构1750万美金投资。目前用户遍布全球200多个国家和地区。我们有百万级用户和各种定制开发的项目。成为我们认证的开发者,你可以接我们开拓出来的项目单子。我们看重的是长远的合作,一起赚钱并累积到各种门户行业的专业知识背景。我们的客户包括:Microsoft、阿里巴巴、Uber、招商银行、渣打银行和众多中小企业等等。

http://apply.sxl.cn/

随着 HTML5 一声炮响,网页进入“更富的体验”阶段,基于 HTML 的建站工具也涌现出来,比较知名的有 Strkingly、WIX 等。——早年更多,不过很长时间这条赛道一直比较冷清,所以慢慢都死了。

我之前做过两个建站工具,这种东西和 2B 产品一样,开始的时候很容易,20% 的时间可以完成 80% 的功能,然后就很开心,觉得胜利在望。然后就找用户来试用,结果用户就会提出一些 20% 的需求,然后你去实现,发现再用一倍的时间也做不出来……

与 2C 的产品不同的是,后者用户会觉得有 80% 的需求被满足,赚了,继续用这个产品(当然也是因为大部分 2C 产品是免费的);而 2B 的用户因为 20% 的工作无法开展,而必须放弃这个产品。

所以解决方案就是雇人。有人在,什么需求都能做。但是结果就是公司一直扩张,原本几个人全远程,结果也不得不租办公室才能管理这么大的开发团队了。

然后需求还是做不完,又不想丢失客户,干脆,接入外包商吧!于是就出现开头一幕。


其实写这篇就是为了说:所有建站工具,在现有的技术基础和框架下,都无法满足普适的需求。当然,我们可以做一些辅助自己的工作,或者满足本厂的需求。

回家换驾照

一些吐槽。

驾照即将到期,回老家换。

第一天。

上午11点到,问,曰没号,下午来。遂去找咖啡馆办公。

下午4点半到,说可以等,但是电脑坏了,不一定等得到。4:45 开始叫号,基本上没人。问之,答里面排着队,白天电脑坏了没办完。过了会儿,开始驱散门口排队人群。问,曰明日8点来取号。

第二天。

7点起床,吃饭打车,门口排队者约10人。8点,协警开门发号,幸得03一枚。

8:30 开始办理。旁边违章处理一直在叫,我方换照没有动静。问之,曰电脑又坏了,赶紧去其它大队,也能办;别在这儿等,没点。

如此动作一直持续了半个小时。我觉得其中有诈,犹豫再三,没走。半小时后,02,又10分钟,03。进去2分钟,搞定。

结语:在老家办事儿需要各种社会经验。希望我的孩子们不需要这些社会经验。

WebSocket.onerror 没有错误描述

用 WebSocket 时遇到一个问题:有时候连接出错,我希望把错误描述报告给用户,方便他们排除。但是尝试了好几种方法,都无法获得错误描述。

于是只有 Google 之,发现了这个答案:https://stackoverflow.com/questions/18803971/websocket-onerror-how-to-read-error-description。原来是为了防止开发者利用 WebSocket 搞破坏,扫描特定条件下的网络,WebSocket 的 ErrorEvent 只包含一个 error,没有更进一步的描述。oncloseCloseEvent.code也只有 1006——非正常退出,这样毫无价值的信息。 

所以我的处理方式是:建议用户按 F12 打开开发者工具看错误信息。

在 Pug 模板中使用变量

如何在 Pug 里,把变量注入父模板。

我厂使用 Pug 作为 HTML 的预编译工具,写久了发现回不去了……Pug 写起来很高效,看久了习惯了阅读效率也很高,读了读文档,发现还有很丰富的可编程特性。于是我决定抛弃 Handlebars,以后都用 Pug 写模板了。

这次我厂官网改版,我就用 Pug 替换了 Handlebars,于是 build 脚本一下少了几十行,非常爽。其实我早就想这样做,不过卡在一个点:使用变量。

在 Pug 里可以这样使用变量:

- var name = 'meathill'

h1 hello #{ name }

以上代码将输出 <h1>hello meathill</h1>。这种用法比较简单,不过在 extends模板的时候,把变量放到哪里就不知道了,官方文档也语焉不详,我反复试了很多次无果,最终还是靠搜索找到了答案,原来要这样:

// Layout.pug
html
  block vars
    p 注意,这个 block 是重点,它出现在前面,用来注入变量
  head
    title #{ title } | My site
  body
    block content

// page.pug
extends Layout

block vars
  - var title = 'A blog'
  
block content
  h1 Blog title
  p blog content

理想的远程办公咖啡厅

我认为一二线程序员下沉到三四线城市之后,远程工作应该会更有潜力。其中,远程工作咖啡厅应该是个不错的方向。我理想中的远程工作咖啡厅应该是这样的。

昨天 @Easy 老师发了一条微博

之前问过一个问题:「在共克时艰和消费降级的大背景下,有哪些行业和生意会逆流而上呢?


昨天和墨多扯淡,他说搞一个「面向美元市场」但是「研发在国内」、「销售完全依靠网络」而且可以「远程办公」的「商业SaaS/APP」是最符合「时代的进程」的。

因为:

① 收入直接是美金,扛贬值,无管制。

② 经济如果下行,国内成本会进一步降低。

③ 一线城市房租房价高涨,远程办公可以吸收足够优秀的同学去二三线城市。

④ SaaS/APP 不好搞的话,其实外包也行,但要做好外语沟通和客服。还可能需要一个外语好的产品经理


我问他为啥不搞一个,他说懒

我不太看好这个想法。原因如下:

  1. 想要做的正规,必须给国内的工作人员发工资,上社保。当然可以大家协商发多少人民币,多少美元,不过维持家庭开支钱不会少,多半整个工资都发掉了。
  2. 发币的话,我是信不过……
  3. 远程工作并不适合所有人,有些人(比如前文中的小弟)可能在办公室里能发挥100%的战斗力,回到家连一半都做不到
  4. 说了半天都跟项目无关,其实项目本身也有很大风险

如果让我说,最合适的项目是做远程办公咖啡厅,类似 3W 咖啡或者车库咖啡之类。遗憾的是,这两家我都没去过,不知道里面办公是什么体验。不过我去过贝塔咖啡,咖啡部跟一般咖啡厅一样,并不舒服。结合我两年的远程经验,说一说理想的远程办公咖啡厅吧:

  1. 桌椅高度要合适。
  2. 可以租用显示器,借用笔记本支架。
  3. 可以租小柜子存放私人物品,不用太大,游泳池那种小的就行,放个充电宝、随手带的小物件之类。
  4. 咖啡符合一般品质,电信能达到星巴克品质。
  5. 交通方便,不需要营业太久。

我觉得价格可以在星巴克基础上上浮二三成(咖啡30+,饮品40+),这样我也愿意接受。其实大部分需求共享工位都能满足,但是利用率太低,而且咖啡厅嘛,听起来 B 格高一些。

从零和博弈说开去

生活在现代社会,我们无时无刻不在跟他人协作。如果你细心观察,就会发现,越是高层次的人,越喜欢谈合作;反观底层民众,越是底层越喜欢互害。很多时候,眼界决定人的高度。希望大家今后,多多发现合作共赢、多和博弈的机会,尽量避免零和甚至负和博弈,提高生产效率,提高生活品质。

  1. 什么是零和博弈
  2. 为什么要避免零和博弈
  3. 分辨现实中的零和博弈
  4. 改变零和博弈的习惯
  5. 寻找合适的合作者,与他们一起多和博弈

什么是零和博弈

“零和博弈”并非什么稀罕的名词,相信很多同学都知道。就是说在博弈的过程当中,参与博弈的人的利益的总和是零,换言之,就是核算收益时,你多了我就少了,我多了你就少了。就是零和博弈。

那么很自然,如果参与博弈之后,所有人的利益总和会增加,就较“多和博弈”;如果博弈之后,所有人的利益总会只会减少,那么就叫“负和博弈”。这些概念应该都不难懂,我们后面讨论零和博弈。

为什么要避免零和博弈

零和博弈会使得参与博弈的人的目的和眼光发生变化,逼迫大家不再关注“如何把事情做好”,而是关注“如何让自己的利益最大化”。

原因很简单:因为无论你怎么努力,总收益就这么多,一个人多了,另一个人必定会少。桌上就一盘菜,菜里就二两肉丝,甲多夹一筷子,乙自然少吃一筷子,反之亦然。

抱定这种想法的话,多半会产生两个行为模式:

  1. 如果不那么努力,就相当于减少了自己要付出的时间成本和精力,假如这样还能维持原本的收益不变,就等于变相提高了自己的收益率。
  2. 尽量把收益拢到自己的盘子里,先下手为强,活儿不着急干,锅要赶紧甩。

总之,都是在保证甚至提高自己收益率的同时,少干甚至不干活。至于事情能不能做成,天塌下来有个高的顶着,事到临头有愿意干的人顶着,没关系。

分辨现实中的零和博弈

抽象的概念听起来有道理,不过有些同学会说:这与我何干?我可是很努力的!

其实不然,据我观察,很多同学都在有意无意的陷入零和博弈的思维模式,继而种种错误。

就拿我最近的一段经历举个例子吧。有朋友找我做一个小程序,不复杂,垂直交友类型的。用户只要先发出一个交友贴,就可以查看其他用户的交友贴,对对方感兴趣就可以获得对方的联系方式,然后自己去联系,平台不干预。大概就是这样,很简单。

因为逻辑很简单,页面也不多(大概十个),所以我就找了一个以前的小弟帮忙,算是转包,他负责开发,我负责验收。有钱大家一起挣嘛,说不定将来还有更多的可以合作的机会。

结果拿到他交付的作品,我一看,简直傻了。糟糕,非常糟糕,超乎我的想象的糟糕。

  • 首先他用了一个蓝湖还是什么的工具,切出来的图片非常奇葩,设计稿明明是750宽,但是导出的图片是1135的。
  • 同时由于设计稿是 PSD 的,所以有一些地方没有做到精确控制,而是用蒙板之类的把多余的部分给隐藏了。结果切出来的图,各种奇奇怪怪的分辨率都有,甚至文字都不居中。
  • 开工之前,我专门打电话给他解释的页面逻辑,但是他交付给我的几乎只有单页,之间的业务逻辑几乎没有体现。
  • 后退一万步到页面制作细节上,也糟糕至极。前面说了,用户要发求友帖,所以需要一个表单,是产品里最重要的表单。结果在手机上预览时,竟然看不到提交按钮,必需滚屏才行。

总之各种糟糕,我只好彻底返工。

接下来我就开始反思,问题出在哪里?我会找他,其实对他还是很信任的。结果他竟然交付这么差的作品,难道他认为这样就能通过我的验收么?难道他觉得这个样子能通过甲方的验收么?

最后我认为,他的核心问题,就在于用纯粹静态的、局限的眼光,把整件事情当成了零和博弈。

在他的眼里,这是一件很固定的事情:他做出一套页面,老板总共给好比说100块,我扣下20,剩下给他80。对他来讲,这件事情的构成就是我们支付的成本 + 我们获得的收益。如果他想多挣一点钱,有两个办法:

  • 向我多要一些钱。但是这个很难,因为总金额是固定的,大家要完成的工作也是固定的。我多给他钱,我就挣的少,我就亏了。
  • 做得差一些,少付出一些时间成本和精力。

于是他选择,用最粗糙的手法完成产品。但是不清楚什么样的结果能通过验收,所以打算先做到最差,然后一点一点往上改,直到验收为止。这样就可以付出最少的成本。

我相信这并非他深思熟虑的结果,而是简单凭借本能和直觉做出的下意识的决定。

改变零和博弈的习惯

这其实是现实中非常典型的例子。很多同学并非主观想把这些事情搞成零和博弈,但是在固定化、局限化的眼光下,下意识的做出不良角色,导致事情零和化。

实际上,尤其是接包这类事情,非常容易产生多和博弈的结果。我们把作品做得好一些,主动加一些视觉效果,帮甲方把逻辑不合理考虑不周全的地方改好,甲方自然就更愿意付费。而且甲方下次有开发需求的时候,也会主动的来找我们。

如果把眼光再放得一点,其实我们跟甲方也可以形成多合博弈。产品做得好,他就更容易向他的老板,申请费用、申请资源。

索性我们把眼光再放大一点,我们和对方公司,也是一个多和博弈。我们的作品越优秀,他们就越容易在市场竞争中取得优势,公司的收益就越高,他们也就越愿意拿出更多的收益来和参与这个项目的人一起分享。

通过上面一系列对比,大家应该可以很明显的看出,什么是零和博弈,什么是多和博弈。关键就在于,我们不能把自己的眼光,局限在眼下这两个人,局限在眼下这一件事,要学会从日常的协作中,发现多和博弈的机会。

寻找合适的合作者,与他们一起多和博弈

可能会有同学会说:但是我做的好的时候,也不见得能拿的多呀?

这当然是可能的。前面说过,很多人无意识的,就把协作搞成零和博弈。这种情况下,作为协作者之一,我们可能难以扭转大局。但这绝不是拒绝多付出的理由,如果你总是以这样子的理由麻痹自己, 反复交付最差的作品,那么你只能一辈子都做 loser。

我们要做的,是从源头上杜绝自己被困在零和博弈的环境中。我们需要早早的去识别自己的合作伙伴,认清自己的老板、自己的公司、自己的行业,我们不要把自己困在一个只能和别人做零和博弈的环境,我们要去努力创造大家一起多和博弈的机会。

最后,我们也十分有必要帮助其他人认清多和博弈。如果你发现对方,在明明可以多和博弈的时候,试图和你做零和博弈,那你一定要争取改造对方的想法。如果对方完全没有改造的余地,那么我觉得放弃这次合作的机会也无妨。毕竟天下有那么多聪明人,有那么多值得争取的好机会。

总结

不仅仅是外包,生活在现代社会,我们无时无刻不在跟他人协作。如果你细心观察,就会发现,越是高层次的人,越喜欢谈合作;反观底层民众,越是底层越喜欢互害。很多时候,眼界决定人的高度。希望大家今后,多多发现合作共赢、多和博弈的机会,尽量避免零和甚至负和博弈,提高生产效率,提高生活品质。

前端驱动的 WordPress 主题开发

这次分享主要面向懂前端,对后端了解有限的同学。如果你想用 WordPress 开发网站,尤其想挣点小钱的话,这个视频应该对你很有帮助。这段视频中我没有深入 WordPress 开发的细节,而是以前端技术为主,将我如何尽量使用前端技术完成企业网站搭建的新的和盘托出。

这次分享主要面向懂前端,对后端了解有限的同学。如果你想用 WordPress 开发网站,尤其想挣点小钱的话,这个视频应该对你很有帮助。这段视频中我没有深入 WordPress 开发的细节,而是以前端技术为主,将我如何尽量使用前端技术完成企业网站搭建的新的和盘托出。

同时这也是补全《一起挣外快吧——环境搭建+万能的WP+前端如何玩转WP》。

B 站链接:https://www.bilibili.com/video/av31991750/