How to solve [cannot read property bar of undefined] in Javascript?

Question

I have a property of an Obejct, like profile.user.name.lastName, but somethings, name is undefined, so there is no way to access profile.user.name.lastName, the error message will be:

1
Uncaught TypeError: Cannot read property 'name' of undefined

Answer

Just need to check for profile.user.name, if it exists, pass the name value. Using ternary conditional operator to solve this issue.

1
profile.user.name ? profile.user.name.lastName : undefined

Reference


This is the end of post

NBA 球馆巡礼:波士顿凯尔特人 - TD 花园

基本信息

  • 球队:波士顿凯尔特人(Boston Celtics)
  • 城市:波士顿,马萨诸塞州
  • 球馆名称:TD 花园(TD Garden)
  • 第一次现场看球日期:2018 年 2 月 4 日
  • 对阵双方:波特兰开拓者 @ 波士顿凯尔特人

现场观赛体验

波士顿不愧是体育之都!怎么说呢,看下图就知道了,这是波士顿过去在美国四大联赛(NBA、NFL、MLB、NHL)收获的冠军。

01

去的当天因为是 NFL 超级碗比赛日,对阵双方是新英格兰爱国者和费城老鹰(当晚比赛赛果是费城老鹰夺得历史上球队第一个超级碗冠军),所以有很多观众身着爱国者的球衣,同时也有很多观众身着凯尔特人的球衣,而且数量还不少,目测是我看到过身穿球衣球迷占所有球迷比重最高的一次,足以彰显体育已经成为了波士顿人民生活的一部分。

进入球馆,抬头望上看就能看到挂满了凯尔特人的旗帜,总冠军旗帜、东部冠军旗帜、分区冠军旗帜,满满地挂满了球馆屋顶,彰显了波士顿凯尔特人曾经的辉煌岁月。如此之多的旗帜,能与之匹敌的大概只有洛杉矶湖人了,当然我还没去过斯坦普斯球馆,但 TD 花园的旗帜是我目前看到过最多的。

说一个小小的细节,如果去球队历史战绩不好的球馆,比如篮网主场巴克莱中心,你会看到篮网会把分区冠军旗帜、东部冠军旗帜分别罗列出来,例如 2002 年和 2003 年东部冠军旗帜会挂出两面,然后退役球衣也会分别单独挂出来。但凯尔特人不同,因为历史上获得了太多东部和分区冠军,退役了太多的球衣号码,所以一面旗帜上写上很多年份(每面 10 个年份),然而还是不够,挂了很多面,下图可以看到。退役球衣的号码也是一面旗帜挂八个号码,挂了很多面。只有 NBA 总冠军的旗帜才是单独挂出来,然后也是因为多年夺冠,也是非常多的旗。由于 TD 花园是篮球和冰球共用的球馆,这导致球馆的上空挂满了超级多的旗帜,其中也包括 NHL 冰球队 Boston Bruins(波士顿棕熊)的旗帜。

01
01
01

现场看球的体验也是非常好,球迷都非常热情,声浪此起彼伏,特别是两队比分焦灼的时候,呼喊声真的是震耳欲聋。每次主队进球,现场球迷都会给予非常高的喝彩!

比赛的高潮是第四节,双方比分非常接近,球迷也被点燃了,每次进攻回合都会呐喊「Let’s Go, Celtics!」,每次防守回合也会高呼「Defence!」。

特别是最后霍福德的压哨绝杀,燃爆全场,真是不虚此行。这也是我现场看球几十次来,第一次经历压哨绝杀!

球馆体验

这是一个非常具有历史的球馆,从我之前的描述中就可以看到。球馆内部也有很多特别历史纪念意义的东西,墙壁上也有很多凯尔特人退役球员的图片。见下图。

01
01

每个座位之间间距比较窄,离了比较近,所以观众坐多了的话,会看起来满满堂堂全是人。

01

在一层有个购买纪念品、球衣的商店,里面售卖 NBA 凯尔特人和 NHL 棕熊两队的商品。

交通指引

球馆的具体地址是:100 Legends Way, Boston, Massachusetts, 02114

如果你是从波士顿机场过去的话,搭乘地铁需要 40 分钟,如果打车的话,大概 15 分钟左右。我是从纽约飞往波士顿的,然后直接打车过去的话,Uber 差不多 15 刀左右。

球馆在波士顿的市中心,交通也是十分便利。同时球馆也是和波士顿地铁站连在一起的,如果坐地铁的话,到站之后直接按指示牌走就能不用出大楼抵达球馆内部。

当地风土人情

波士顿是美国的历史名城、文化古城,波士顿见证了美国建国初期的历史,同时也是学术之都。如果时间充裕,十分推荐在波士顿多玩一两天。稍微推荐几个游玩景点,也是本人去玩过的。

自由之路:在波士顿城区有一条红砖铺出的路,全场 4 公里,因为全部是红砖,所以非常容易辨认。在这条自由之路上一共有 16 处历史古迹,可以走着瞧瞧。图二则是「指环王」比尔·拉塞尔的一块地砖。

01
01

哈佛大学与麻省理工学院:这两个大学不在波士顿主城区,属于郊外,但可以坐地铁直接达到。两个学校连一起,走着走着就可以把两个学校一起逛了。下图歪歪扭扭的建筑是 MIT 的著名建筑 Ray and Maria Stata Center,出自著名建筑师 Frank Gehry 之手。雕像则是哈佛大学的创始人,John Harvard。

02
01
01

昆西市场:坐落在波士顿的市区,是一个集商业与美食于一身的大市场,在这里可以买到各种各样的小玩意儿,也可以吃到不同国家都美食。

01

波士顿大龙虾:大龙虾属于波士顿的招牌之一,来了这里一定要找个当地餐馆吃一整只大龙虾。

01
01


本文完

詹姆斯 · 哈登:「天神下凡」般的 60 分三双

新闻:1 月 30 日晚,在火箭主场对阵魔术的比赛中,詹姆斯哈登砍下 60 分 10 篮板 11 助攻,拿到生涯第 34 次三双,带领球队 114-107 取胜。

评价

先上结论:詹姆斯 · 哈登犹如天神下凡,打出了史诗级别般的数据。

吹的部分在结尾,打出这种「前无古人后无来者」的数据,在我看来,必须要满足「天时、地利、人和」三者缺一不可。

天时地利人和

天时:

  • 保罗和阿里扎的缺阵。轮换阵容缺少两员大将,意味着其他球员的出场时间会有所增加,出场时间的增加意味着数据会更加亮眼。
  • 埃里克 · 戈登的临时退出。如果说保罗和阿里扎的缺阵是在提前计划中的话,那戈登的退出完全就是意料之外。火箭健康阵容下的后卫轮换是哈登、保罗和戈登,在后两位同时缺阵的情况下,哈登变成了后卫中的独苗,把三个人的时间和出手都给到一个人,数据爆炸也没有那么意外。
  • 队友的发挥不佳。除去哈登外,只有安德森、卡佩拉、格林三人得分上双,分别是 10、11、12 分。如果队友发挥出色,比赛早花了,也没哈登什么事情了。
  • 对手的发挥出色。魔术在 31 次三分出手的情况下,命中了其中的 15 计,三分命中率达到 48.39%,其中 6 人得分上双。在打出历史级别数据的比赛中,两队比分必须焦灼,不然比赛肯定是一边倒,也早花了。在此,特别感谢奥兰多魔术队。

地利:

  • 火箭丰田中心主场。主场优势在第四节特别明显,在得分、助攻、篮板慢慢上涨的同时,主场观众的情绪也慢慢高涨,预料到肯定有记录要被打破。如果说哈登最后时刻的 3+1 是杀死比赛的进球,那么主场观众给了哈登这一助攻。情绪高昂的主场情绪,往往也可以带动球星的情绪,打出神奇般的表现。
  • 安德森的发挥。为什么我把这个放在地利呢?因为这是火箭主场啊!安德森本场发挥不佳,作为火箭进攻端的一门火炮,安德森本场并没有获得太多的出手,仅仅获得 10 分。

人和:

  • 必须要手感非常好。虽然哈登上半场七次三分投篮无一命中,但下半场命中五计三分,而且两分命中率也非常高,不断突破到魔术的内线。
  • 必须体力非常好。在戈登中场决定不回来之后,同时在保罗没有出场的情况下,哈登肯定从德安东尼里的嘴里听到,他必须在下半场多加点班,谁想,直接打满下半场。在出场时间保证的前提下,哈登防守端开启省电模式,进攻端再关闭省电模式,合理地分配体力,才保证了第四节最后五分钟仍然在进攻端打出非常优秀的表现。
  • 鲍比 · 布朗的短信。啥也不说了,直接看短信吧,注意看时间。
    01

吹的部分:

  • 哈登拿到 60 分,刷新了个人得分纪录;
  • 哈登拿到 60 分,刷新休斯敦火箭队队史得分记录;
  • 哈登拿到 60 分,成为历史第 25 位拿到 60 + 得分的球员,现役球员中的第五位;
  • 哈登拿到 60 + 三双,联盟第一位得到 60 + 三双的队员;
  • 此役过后,哈登职业生涯拿到三次 50 + 三双,与威少并列联盟历史第一;

本文完

我的第一个云端机器人:Hubot

「扭腰日报」今天招募了一位新员工:hubot!它是一位 24 小时都在运行的机器人,而且是「免费」的!在工作之前的组,我们也有这样一位 bot 生活在 Slack 的频道里,每当需要 deployment 的时候,直接 @ 一下它就好,或者网站出了什么问题,bot 也会立即发送消息到指定的 Slack 频道里。

这次亲自动手配置属于自己的 bot 完全是因为看到湾区日报的第一个 “员工”:Slack/Hubot·的文章,通过 bot 不仅可以大大节省时间,而且增强了移动性,很多事情都可以直接在手机上通过 slack 来控制。

开始第一步

前提:一台装有 npm 和 node.js 的电脑。

下载 Hubot

用 terminal 打开到指定文件夹的目录,使用以下命令全局安装 hubot:

1
npm install -g yo generator-hubot

然后使用以下命令新建一个 hubot:

1
yo hubot --adapter=slack

这时候 terminal 会让你输入 bot 的属性,比如名字描述之类的,输入安装完成后,一个 hubot 就出生在你的本地电脑里。

配置 Slack

进入 Slack 的 App Directory 的页面,选择 Bots 或者 Hubot 都行,生成之后会产生一个 API Token,这样 Slack 的配置算是完成了,同时你也可以修改 bot 的名字和头像。

配置脚本

开始第一个「Hello World」脚本。进入 scripts 的文件夹,新建一个 hello-world.coffee 的script,然后将以下代码复制进去。

1
2
3
module.exports = (robot) ->
robot.respond /hello/i, (msg) ->
msg.send 'World!'

运行与部署

运行 Hubot

本地运行很简单,直接运行以下的命令行,就可以本地运行了,将 xoxb-YOUR-TOKEN-HERE 替换成你自己的 API Token。

1
HUBOT_SLACK_TOKEN=xoxb-YOUR-TOKEN-HERE ./bin/hubot --adapter slack

想必你的 Slack 已经有了一个 bot,你可以直接在它的对话栏里输入 hello, 它就会回复 World!。同时你可以把它加入指定的频道 Channel,@它以后在加上命令也会得到相应的回复,比如@bot hello

部署到 Heroku 云端运行

第一步完成了,需要将 hubot 部署到云端,文档中提供了好几个方案,这里选择 Heroku 作为平台,可以作为免费云部署。

  1. 在 terminal 中使用 heroku login 进入 heroku,然后创建一个新的 app,使用以下命令:heroku create
  2. 将 Slack 的 API Token 加入 configure,使用以下命令:heroku config:set HUBOT_SLACK_TOKEN=xoxb-YOUR-TOKEN-HERE
  3. 将代码上传到 Heroku 的服务器,使用以下命令:git push heroku master

这样你的 hubot 就进入云上了,生活在了 Heroku 的服务器上了。

24/7 工作

因为 Heroku 的免费 app 有自动睡眠的设置,这里是关于 Free Dyno Hours 的介绍:Free Dyno Hours

这就导致 Hubot 不能 24 小时一直都在运行,所以我们需要间隔一段时间去唤醒这个 app。Kaffeine 就是一个让 Heroku app 持续唤醒的网站,把你 app 的网址输入进去,Kaffeine 就会让它一直处于运行状态了。

Heroku 命令行

  • heroku ps -a your-app-name : 查询使用时间
  • heroku logs -a your-app-name : 查询 app 的日志

参考


本文完

我对智能家居的理解

现在市面上有越来越多的智能家居,那「智能」应该如何服务我们呢?我想谈谈我对此的理解。

我把「智能家居」分成了以下四类,从「最智能」到「最不智能」。

  1. 场景自动化
  2. 语音智能化
  3. 中心连接化
  4. 应用控制化

场景自动化

这应该是最智能的家居类型,当然需要实现场景的自动化,前期需要花费一定的时间来配置,也少不了某些装备来作为桥烈。以下是几个我能想到的实例:

  • 打开房子门的瞬间,特定房间的灯将自动开启,同时也可以有时间限制,比如只有在晚上 6 点以后才会开灯;
  • 房间的温度、湿度降低或者升到某种程度,会开启空调、暖气、加湿器、去湿气等设备;
  • 在大门口有摄像头的前提下,如果有任何人的动静,自动通知同时也自动录制视频;
  • 在使用小米门窗传感器的情况下,在特定时间如果门窗开启,则多功能网关发出警戒声;

语音智能化

通过语音来控制你的装备,类似设备有 Amazon Echo, Google Home 和 Apple HomePod。以下是几个我能想到的实例:

  • 通过语音来控制某个房间灯泡的亮度、颜色、场景设置;
  • 通过语音来播放某个音乐人的专辑或者自己的播放列表;
  • 通过语音来降低、升高空调温度

中心连接化

在没有语音音箱作为桥梁衔接的情况下,使用某个单一手机 app 来作为 hub 控制整体的智能家居。比如如果你有大量的小米智能家居设备,只需要使用小米的 Mi Home app 来控制所有的小米智能家居。或者在没有 Apple HomePod 的前提下,使用 iPhone 内置的 Home app 来控制所有支持 HomeKit 的家居设备。以下是几个我能想到的实例:

  • 通过小米 Mi Home app 来查看房间的温度湿度,也可以控制某些设备;
  • 使用 iPhone 的 Home App 来设置场景,需要通过用户点击来实现;

应用控制化

这应该是最最基本的智能家居的应用场景。购买某个设备后,下载相应的 app,然后配置后使用 app 来控制。以下是几个我能想到的实例:

  • 使用 app 来开关空调,调节温度;
  • 使用 app 来开关灯泡,调节亮度;

本文完

智能家居场景之一:配合 Google Home 来控制 Yeelight 灯泡

在圣诞节的时候入手了一台 Google Home。它是什么呢?你可以把它理解成 Amazon Echo 的竞品,功能几乎相似,并无差别。

前提条件

  • Google Home
  • Yeelight 灯泡
  • ifttt 服务

开始配置

Yeelight 配置

购买 Yeelight 彩色灯泡后,下载 Yeelight 的 app,应该它是小米的生态链产品,使用小米账号即可登录,想灯泡和 app 相互 pair。然后在 app 里设置不同场景下的灯泡颜色和亮度,比如「游戏」、「睡觉」模式。

Google Home

打开 Google Home app,在 Home Control 里将 Yeelight 添加到你的 Device 里。

ifttt 设置

在 ifttt 上配置你的 Google Assistant 的服务,同时也配置 Yeelight 的服务,同样也是用小米账户登录,它会读取到你现有连接的灯泡。下面是我的 applet 原理:
如果「你对 Google Assistant 说游戏模式的命令」,那么就「将 Yeelight 的灯泡切换成游戏模式」。

对 Google Assistant 说命令就相当于你对 Google Home 说,你可以这样理解:Google Home 里内置了 Google Assistant 的服务。

场景唤起命令

在没有配置 ifttt 的前提下,可以直接通过「turn on my lights」、「turn off my lights」来控制灯泡的开关。

在配置 ifttt 的前提下,通过不同命令来调节不同的场景,比如「Change my lights to Game Mode」就会自动切换成「Game Mode」。

场景视频


本文完

别了,2017!

人的一生会经历七八十个「年」,但并不会记得清每一年发生了什么,然而有些年肯定会记忆犹新。

「2017」对我来说就是属于记忆犹新的那一年,因为在这一年里发生了很多事情,有好的事情,也有不好的事情,我都把它们当成 blessing。

2017 年过去了,我很怀念它。

01


本文完

机会是给有成就 > 有经历 > 有准备 > 没准备的人

有人在知乎上提问「有在美国 Google Facebook 的工作经历,回国发展会有怎样的机会?」

其中有一个叫做梁小明回答说的挺有道理的,与诸位共勉。

名校名企只是一种经历,不是一种成就。有经历的人多,有成就的人少

就好比名校的 MBA 每年有千千万万,但这只是一种经历。张小龙并没有读过什么名校 MBA,但是人家做出了 QQ 邮箱,做出了微信,这是一种成就。从我个人的经历来看,机会一般会先给有成就的人,然后会给有经历的人,最后会给有准备的人。举个例子,现在某巨头想进入社交网络领域,需要一个 CEO,这个机会会先给张小龙这样有成就的人;然后会给之前在 Facebook 或者 Wechat 做过经理职务的,这种有经历的人;如果这两种人都找不到,机会会给有准备的人。题主如果已经有了 Google,Facebook 的工作经历的话,不妨去努力做点成就出来吧,再去找个机会去个 BAT 什么的经历一番,其实已经没有太大意义了。

所以说,如果有一天「机会」来找人,是会按照这个顺序来找的:

  1. 成就的人
  2. 经历的人
  3. 准备的人
  4. 没准备的人

本文完

NBA 球馆巡礼:亚特兰大老鹰 - 菲利普斯球馆

基本信息

  • 球队:亚特兰大老鹰(Atlanta Hawks)
  • 城市:亚特兰大,佐治亚州
  • 球馆名称:菲利普斯球馆(Philips Arena)
  • 第一次现场看球日期:2017 年 12 月 14 日
  • 对阵双方:底特律活塞 @ 亚特兰大老鹰

现场感受

菲利普斯球馆这段时间正在装修,球馆里面很多地方都被挡住了,甚至球馆里有一个区域没有座椅,也是因为装修的缘故。

老鹰队这赛季战绩不好,战绩也是垫底,所以现场来看球的球迷并不多,现场气氛和整体评价只能说是差强人意,中途看球的过程中我都差点睡着了,因为实在太无聊了,暂停时间也没有活跃气氛。

虽然比赛无聊,战绩也不好,但在现场也有那么一群球迷统一穿着了老鹰队的球衣,球队每次进球都会欢呼,对方拿球也会呐喊「Defence, Hawks」!我想那群人便是死忠球迷吧,不管球队怎么样,不管球员是谁,他们就是发自心底地热爱这支亚特兰大老鹰。

值得一提的是,菲利普斯球馆处在亚特兰大 downtown 的位置,交通十分便利。在球馆附近,还有很多「旅游景点」可以参观,例如 CNN 总部大楼、可口可乐世界、水族馆和奥林匹克公园。如果去看球,也可以顺便把这些景点都看了。

评价

  • 球馆整体评价:一般
  • 观球气氛:较差

注意事项

  • 因为处于 downtown 的缘故,停车位置不多也不容易找,所以建议打车前往,如果你住在 downtown 附近,可以直接走路过去。

现场图片

01
02
03
04


本文完

NBA 球馆巡礼:布鲁克林篮网 - 巴克莱中心

基本信息

  • 球队:布鲁克林篮网(Brookyln Nets)
  • 城市:布鲁克林,纽约州
  • 球馆名称:巴克莱中心(Barclays Center)
  • 第一次现场看球日期:
  • 对阵双方: @ 布鲁克林篮网

现场感受

巴克莱中心是新修建的场馆,2012 年篮网从新泽西搬迁至此。球馆内部的装修和配套设施也是非常先进,场馆外面也有一个非常巨大的屏幕,还没进入场馆你就可以远远地发现它了。

尽管篮网这几年战绩不好,但现场球迷对主队还是很热情的,精彩的进球都能赢得全场喝彩。

当然,如果是热门球队,比如火箭、马刺、骑士等球队,现场的客队球迷也是很多的,可以听到客队进球的欢呼声盖过主队进球。

因为我住在纽约的缘故,我去巴克莱中心看球超过二十多次了。为什么不选择麦迪逊广场花园的纽约尼克斯呢?因为篮网的球票比尼克斯的球票便宜太多了,尼克斯球票的价格几乎是篮网的五倍以上,如果你来纽约只想看一场 NBA 现场比赛的话,来看篮网的比赛要比看尼克斯要值。当然,如果你有尼克斯或者麦迪逊广场花园的情节的话,那就去看纽约尼克斯的球吧!

评价

  • 球馆整体评价:好
  • 观球气氛:好

注意事项

  • 巴克莱中心上层的座位非常高,坐在靠后的区域会有一种「一望众山小」的既视感,所以如果你对高度有恐惧,不要买太靠后的门票。
  • 巴克莱中心在布鲁克林的 downtown 区域,属于各路地铁的交汇站,你可以坐 B/D/F/N/R/Q/2/3/4/5 到 Atlantic Av - Barclays Ctr 这一站就可以到达。
  • 球场附近很难停车,非常不建议开车前往。同样,在纽约市也不建议开车游玩,坐地铁或者 Uber 都是很明智的选择。

现场图片


本文完