为什么总是赶不上DEADLINE

在芬兰工作了三年多,做过大大小小十来个 IT 项目。有一个共同的问题:大部分项目都赶不上 deadline。分析原因,都不是因为人手不足,而是技术决策和管理失误。

技术选型的坑

小众的技术

曾经工作过的一个创业公司,后端编程语言是 Elixir,框架是 Phoenix Framework。大部分人可能听都没听过这两个东西。后来想扩张团队规模,发现根本招不到人。对于创业公司而言,基本上不可能招没有经验的人来先培训后上岗。后来只能把后端用 Node.js 重写,浪费几个人月的工作量。

所以项目的技术的选择一定要考虑本地市场。比如后端编程语言要选择 Node.js,Ruby,PHP,Python 这些本地开发者比较多的。后端框架选择 Rails,Laravel,Django 这种比较成熟的。前端框架就选择 React 就好,在芬兰基本上都是 React 前端。

不熟悉的技术

在规划项目路线图的时候,必须要考虑团队的知识储备。对于开发时间比较紧张的项目,不熟悉的技术不超过一种,否则这个点可能会出问题,严重影响其他部分的时间分配。

比如我们现在做的项目,后端用的是一个全新的技术 Strapi。我们三个人都没用过。然后后面又有一部分 Strapi 不能做的部分,又要用 Firebase 的一些高级功能来做。这也是我们以前没用过的。同时处理两个新东西,倒不如完全用 Firebase 来做了,节约很多学习成本。如果是三个月开发时间,学两个新技术也可以。但这个项目只有一个半月开发时间(另外两个人还度假两周)。

设计师的坑

设计师拖稿啦

设计师拖稿是很常见的。如果总项目周期是三个月,前面规划的是设计一个月,开发两个月。但是由于某种原因设计搞了一个半月,那开发几乎不可能赶得上 deadline 的。

设计师放卫星啦

另一个问题是开发必须全程跟进设计进程,防止设计定稿的时候弄出实现难度超出项目资源的功能。比如设计里有图像识别,智能分类,而团队里连一个会 TensorFlow 的人都找不出来,那就得提前扩充团队,或者设计里就别加这个功能了。再比如设计里有很多动画效果和 3D 内容,必须要 WebGL,那么这个开发时间的需求可能就更大了。

设计师跑路啦

我发现芬兰这边,设计师交完设计经常就去旅游度假了,有些就去下一个项目组或者直接跳槽去别的公司。后面开发的时候你都找不到人,缺了哪些界面,哪些素材,哪些文案都得自己想办法。

第三方的坑

之前做 adidas 的项目的时候,就会遇到一些字体有缺陷的问题。联系 adidas branding 团队,从来没有人理,后来我们只能解释说 branding 团队不帮忙的话这问题我们也解决不了。

还有一个项目,我们开发的一个用 webpack 构建 React 应用前端,要和另一个公司开发的后端整合。而那个公司的人甚至都不知道什么是 webpack,所以一直就没法整合测试。如果一个项目分包给两个公司,那么要确保两个公司有人比较熟络,可以搞搞联谊什么的。

芬兰电信运营商指南

运营商可以套路你,你也可以套路运营商。

鹤仙人

Prepaid 和 Postpaid

Prepaid 卡不实名,在 R-Kioski 便利店买,大概 20 欧一张,自带10~20欧花费。取下 SIM 卡后也要保管好那张母卡,上面的 PIN 用于解锁,PUK 用于挂失或者以后转 Postpaid 卡。Prepaid 卡不能保号换运营商。没有套餐,充钱才能用。默认按流量计费,要省钱只能手动买流量包。坑:如果你忘记买流量包那么充了 50 欧可能一个月不到就没了,欠费立即停机。欧洲漫游需要额外买流量包。总之就是限制比较多,用起来不是特别方便。

Postpaid 卡实名,需要到运营商的网点办理。4G 不限流量套餐通常 20 欧/月左右。从开通起,每过一个月账单寄到你的地址或电子邮箱。坑:建议电子邮箱,因为邮寄是要额外收钱的。欧盟漫游 10GB 免费流量,甚至比很多国家的本地资费还便宜。

在芬兰居住不满两年且持有 B 签(学生,家属)的外国人是不能办 postpaid 卡的。所以新生基本上只能去便利店买个 prepaid 卡了。或者你在芬兰有认识的人符合办卡条件,可以让他们代办一张卡。

据说 Moi 这个小众运营商可以在线办 postpaid 卡,没有限制。它的价格也比别家便宜。新生可以试试。

手机信号哪家好

Moi 是个虚拟运营商,用的 DNA 的 4G/5G 设施,信号覆盖是一样的。DNA 和 Elisa 的覆盖都不错,基本有人的地方就有 4G 信号。Telia 在很多地方莫名其妙地找不到 4G 信号,时断时续。

不同的套餐标称速度是不一样的。前几年的调查是标称 100 Mbps 的里面 DNA 的实测速度是最快的,但也只有 80 Mbps 这样。

在欧盟内漫游,信号强度取决于各地的合作运营商水平。我的 DNA 的卡在汉堡就非常快,到了柏林市区就只有 3G 信号。除了去爬山的时候,基本上不用担心完全没信号的问题。10GB 流量完全够一次旅行用了。

去过一次波兰,不知道为什么手机没有数据信号,虽然能打电话发短信。只能在机场买了个卡,1 欧 5GB 流量,还挺便宜的。

运营商怎么套路你

如果你没有事先做好调查,营业员通常只给你推荐贵的套餐,而且哄骗你签两年合约。

貌似两年合约好像便宜了不少,但是这里面藏着很多坑:

  1. 随着时间推移,资费通常都是会稳步下降的。定期换套餐或者换运营商可能会更便宜。所以没有固定期限的套餐更灵活。
  2. 现在很多公司都开始提供免费的手机套餐给员工。如果你签了两年合约,那么在合约到期之前你就享受不到这种福利了。
  3. 万一你要去别的国家,提前结束套餐需要提供永久离开芬兰的证明。这也会非常的麻烦。

所以最好是选择没有固定期限的合约,随时可以换运营商或套餐。

你怎么套路运营商

Postpaid 是可以在不换手机号码的前提下换运营商的,利用这点就能得到更优惠的价格。

比如你现在有个月费 25 欧的 DNA 卡。你先到 Elisa 那边问他们:你们有没有更便宜的套餐,有的话我就转过来。(注意:不要一年合约或者两年合约,一定要灵活无固定期限的)通常 Elisa 的人就会给你一个稍微便宜一两欧的套餐,比如 23 欧。然后你就让他给你转运营商。这个过程不是立即完成的,通常会到你当前 DNA 套餐的这个月到期才会转。过两天,DNA 一定会打电话给你挽留一下。你这时候可以说 Elisa 给我 23 欧的套餐价格诶(当然你也可以骗他说 Elisa 给你 20 欧的价格)。然后 DNA 肯定会出一个比这个价格再低一点的。(注意:仍然不要签固定一年/两年合约)然后你告诉 DNA 我不转了。因为换运营商的手续中止,所以不需要给 Elisa 钱。(可怜的 Elisa 白忙活一场)

用这样的方式你甚至能够得到比两年合约还便宜的价格。

学生房宽带

AYY 学生公寓的宽带接口是接上就能用的,而且和学校内网联通,可以下载论文什么的。

HOAS 学生公寓的宽带是 Telia 的。入驻的时候 HOAS 会给你一个 Telia 的小册子,按上面的说明打电话给 Telia 注册,大概第二天就能开通。即使你入驻的时候前住户注册的还能用,也要及时更新注册,因为不知道哪天它就给你停了。

position: fix 没用?你大概是被 transform 坑了

在 CSS 里很多位置布局都是相对于容器的。但是 position: fixed; 比较直白,只相对于窗口,通常不会被干扰。但是我最近就遇到了这么个问题:

transform:scale(1);
position:fixed; right:10px; bottom:10px;

这不对呀,我明明写的是 position: fixed; 为啥没用呢?

于是我一个一个翻看父元素的 CSS 布局属性,发现一个 Modal 库有个奇怪的 transform: scale(1); 。这个属性没有任何视觉的效果,显然是动画执行之后留下的。然而在技术实现上,即使是 scale(1)translateX(0) 这种没有任何效果的 transform ,也会重建一个坐标系,导致内部元素的 position:fixed 不再相对于窗口,而是相对于这个 transform 元素。

这是不是某个浏览器实现的缺陷呢?实际测试 Firefox 和 Chrome 都是一样的效果。这也许是一个 Web 标准中比较含糊的灰色区域。

解决方法比较简单粗暴,把 transform: scale(1) 改成 transform: unset 即可。在实践中,尽量避免对比较大的容器使用 transform,比如 Sidebar 和 Modal。如果要用的话,则要确保子元素不会用到 position: fixed,比如一些 Popup。

Web 内嵌字体格式

简而言之,WOFF2 是你唯一需要的字体格式。如果你需要支持 IE11,那么就加上 WOFF 作为备用字体格式。

@font-face {
  font-family: 'Source Code Pro';
  font-weight: 400;
  font-style: normal;
  src: local('Source Code Pro'),
    url('source-code-pro-regular.woff2') format('woff2');
}
继续阅读 →

永久居留许可可被撤销

简而言之:即使拿到永久居留许可,在你离开芬兰超过两年后都会被撤销。

永久居留许可(Permanent Residence Permit)并不是永久性的,它在某些条件下会被取消。根据半官方的 InfoFinland 网站介绍:

当您永久移居至国外,不间断居住满两年,或在申请永久居留许可时提供了不真实信息,永久居留许可可被取消。

InfoFinland

即使你打算大部分时间在国内生活,也必须每隔一年多回芬兰一次,以保证永久居留许可不被取消。

那么,在芬兰待多长时间算是有效的回芬兰呢?一天?一个月?一年?这个我也不太清楚,打算问一下移民局。

芬兰电子身份认证

当你在芬兰居住并注册社保号(Social Security Number)之后,各个公共系统里就已经自动为你创建了账号。这些系统包括:移民局系统,警察局系统,医疗系统,税务系统,社保系统(Kela),邮政系统(Posti)等。这些系统都有网络服务,但是你需要特殊的电子身份认证(e-Idenfication)才能注册使用。

先决条件

必要的条件是:

  1. 居留许可,且居留许可不能快要过期。
  2. 在当地警察局注册了社保号。
  3. 有芬兰本地的手机号码或银行账号,取决于你是要办理哪种。

一个存疑的条件是芬兰身份证。身份证是每个人都可以去居住地所属警察局办的(比如你住 Espoo,就必须去 Espoo 警察局),有些地方会要求这个证件才给你办理业务,但也有很多不用。尤其是办电子身份认证。有的银行网点就非要这个身份证才给办,我的一个学妹去了好几次都不给办。但是也有的地方就不需要,比如我去 Sello 的 Nordea 办的时候,她并没有特别要求身份证,我只是说我没有,但是又急着用。

银行身份认证

需要去你的开户银行办理。

银行的身份认证我觉得更有用,也更安全可靠。银行员工都会仔细核实你的身份信息,银行的动态密保 APP 也更加可靠。

如果银行工作人员要求必须要有身份证,可以换一个银行网点问问。如果都要身份证,那你可以去居住地警察局办一个。

使用方法和登录网银没有什么区别。在认证页面选择你开户的银行,然后跳转到网银登录页面,使用动态密保 APP 登录。

手机身份认证

需要去你的手机运营商办理。

据我个人模糊的感觉,手机运营商的员工通常业务都不太熟练,办事也不太靠谱。

手机运营商有个不成文的限制:你必须要在芬兰住满两年以上,他们才给你办理后付费卡(Post-Paid)和电子身份认证。新生就不要考虑了。

如果你的手机卡是预付费卡(Pre-Paid),说明它没有与你的身份信息绑定。而如果你要绑定身份,则需要把买卡的时候那张完整的卡片带来,上面有 PIN 和 PUK 码。不然就只能换新手机号了。

Arabia 姆明系列

姆明 Moomin 系列卡通形象可以说是芬兰输出全球最多的文化符号了。衍生周边产品众多,各个年龄段的人都喜欢,非常适合送礼物或自家用。

继续阅读 →

比较 HTML 和 JavaScript Input 验证

如果你想验证表单输入是否有效,比如你想让输入框只接受整数,而不是小数或文字,在 HTML5 中你可以用以下代码轻松实现:

<input type="number" pattern="[0-9]*" />

但是,用户仍然可以输入无效信息:

  1. 在 Firefox 里,你可以输入任何字符:比如“fsielfs”。
  2. 在 Chrome 里,你可以输入一些无效的数字:比如“1..2.2.2”。
继续阅读 →