Fail to upgrade Samsung Gear S2

Here is the problem when I try to upgrade gear s2 to the latest version:

  • hardware: Gear S2 Classic, SM-R732
  • software: R732XXU2CPC5
  • error: upgrade fails at 17% every time, then s2 will reboot automatically

Solution:

  1. use NetOdin to flash S2 to a old version (R732XXU2BOKK)
  2. use Gear Manager to upgrade S2, OTA

Now the new version is R732XXU2DPFB. It might also be possible to upgrade to this version directly. But I did not find this firmware for netOdin.

Here are steps to upgrade S2 using NetOdin:

操作方法:“短按电源键-->滚动选择菜单”,“长按电源键-->进入选中的选项”。。。          
Controls: 
1. short press power button: navigation; 
2. long press power button: select

注意事项:操作速度一定要快,因为闲置3秒自动重启开机。。。
Note: after 3 seconds idle, system will reboot, so please be quick
熟悉了操作方法,下面就开始动手操作了。

1. 手表充满电,关机.
power off

2. 长按开机键7秒钟,等到出现“Rebooting...”字样时,快速连续按三下开机键,进入一个启动模式选择菜单。
long press power button for 7 seconds, S2 will start with "Rebooting...", quick press power button for 3 times, enter recovery mode

3. 在这个“Select REBOOT MODE”菜单下,不要多要多停留,直接连续短按电源键向下选择到第三项“Download(wireless)”。
short press power button to navigate to "Download(Wireless)"

4. 停留在“Download(wireless)”项目上,再长按电源键进入无线刷机模式。
stop on "Download(Wireless)", then long press power button to enter wireless odin mode

5. 此时手表默认显示为(WPS连接模式),我们需要短按两下返回键,切换为(AP连接模式)。
short press back button twice, wireless mode will be switch to AP mode
至此手表端的操作就完成了!完成了!完成了!完成了刷机过程的一部分。。。 
then all operation on S2 side have been finished. the rest part will be done on PC

6. use your laptop to connect to S2's AP

7. use netOdin to flash S2 (AP, BL, CSC)
PS:可能会有人用电脑的网络管理器搜索连接手表的WIFI信号后,手表无限出红字,提示连接超时。 
这时候只需要在电脑端运行WIFI刷机工具“NetOdin3”,手表自然就出于等待接收的正常状态了。

 

Links:

netOdin3:

https://1drv.ms/u/s!Al8vqu22jWkyinLXd7kqBOZmofjL

Tutorials to use netOdin3: (in Chinese)

http://bbs.52samsung.com/forum.php?mod=viewthread&tid=739679&extra=page%3D1

http://bbs.52samsung.com/thread-737567-1-1.html

从Amazon跳槽到本土企业又回到Amazon的VP如此说

无责任转载,如有版权等纠纷请联系:

=================

仅以此文祭奠一场5个月的职场私奔。

今年年初我跳槽去了一家国内的互联网民企,因为刚换工作非常忙,所以一直抽不出空去讲课,直到四个月后才总算找了个机会到川大MBA上课—因为提前开了课实在无法爽约。那天急急忙忙的讲完课收拾好东西正想尽快离开(要赶晚班的飞机回京,因为第二天一大早开会),突然在教室门口被一个许久没见的女学生拦住了:“Peter老师,你好久都没来川大讲课了”。“是啊,最近换了新公司,所以一直没时间过来,不好意思”,我一边敷衍着回答一边继续往前走:“噢,怪不得,那一定很忙吧?”……对话就这么有一搭没一搭地进行着,很快我们就走到了校门口正要互道再见时,只见这个妹子停了下来,好像头一次看到我似的说:“Peter哥,我怎么觉得你好像变样子了。”啊!噢,这一下我的注意力总算聚焦了:“哦,怎么变了—是变胖了?瘦了?”, “其实都不是,哎呀,我也说不出来,反正觉得你变得不像你自己了。” 天啊,这一下可把我吓得不轻,禁不住停下脚步定定的看着她。一看我变得这么认真,妹子也紧张了起来,回答得愈发零乱了:“嗯,其实也不是了,主要是感到你好像绷得特别地紧,看人时的眼神好像一直在飘,完全没有了你原来的那种放松的感觉,让我和你说话都觉得好紧张一点都不舒服, 我还是喜欢以前的那个你……”

坐在回程的飞机上,望着悬窗外漆黑一片的天空和远处忽明忽暗的星星,我知道,到了为这场五个月的职场私奔画上句号的时候了,因为:这,不是我想要的生活。

前些日子网络上曾经疯传了一篇文章, 介绍原P&G的一位女高管在加入京东几个月之后就因水土不服而铩羽而归的故事, 里面洋洋洒洒的罗列出许多外企/民企在内部管理、企业文化、用人哲学等方面存在的差异,然后高屋建瓴的总结出外企在中国没落的原因,进而引申到比较民企人VS外企人的优劣,内容翔实,文笔诙谐一时间转发者如云好不热闹……

我相信这位P&G的妞不是第一个死在民企的职业经理人,就如同我相信自己也不会是最后一个赴汤蹈火以身试险然后灰溜溜的重回外企的职场人一样,这一幕对我而言并非什么具有特殊启示寓意的经典案例—其实它和每天在职场中发生的千千万万个离职/入职的Case一样,不过是某个个体,在某个特殊的区间,因为某个特殊的原因而做出的选择,完全没必要上升到什么民企/外企之争;谁好谁坏之论的地步,在我的眼里,究其根源其实无比简单,那就是:

你想要的是一种什么样的生活?

本性使然吧,最终我也还是没有抵抗住内心那与生俱来的好奇心,选择加入了一家目前非常吸引人眼球而且大多数人都自认为看不懂的生态型互联网公司。单纯从工作和业务发展本身来讲,我还是挺喜欢这份新工作的:职责范围比我原来大了很多,工作内容富有挑战性,将外企那种十分Silo的视野/组织架构一下变得非常开放和混搭,每天都有新鲜的东西可以学习,改变的速度惊人……可就在我对这些业务上的挑战和层出不穷的学习机会欣喜不已的同时,身边的另一些东西却始终让我感到无法接受,甚至是极度的厌恶,这种冰火两重天的感觉,让我在翻身上马一只脚已经伸进马镫之后,始终无法下定决心将另一只脚也牢牢的踩进马镫—这就是我在那五个月中最真实的状态写照。

七月底去西雅图出差—这是我吃了回头草之后第一次去美国总部开会,在一周之内我不得不一遍又一遍的重复回答老同事/老朋友/之前的老板们好奇或者是关切的提问:why/why/why?其实说实话,有时候我自己也挺懵的:一个公司和另一个公司之间真的就差那么多吗?真的就让我如此不能忍受以至于不到半年就逃跑了?(连试用期都没过就辞职—new record in my career)到底是什么原因让我的这场“职场私奔”如此的短暂和失败?

让我拿几个“生动”的场景和我的感受来做答案吧:

  • 微信里的意淫: (形式VS本义)

我是一个极其讲求独立个性和崇尚自我的人,这一点在我对微信的使用上反映的最为突出:我一直将微信当作一个非常Private的东西,因此好友只限于我的朋友/家人/亲密的同事/学生;朋友圈的发文也以有趣的生活琐事为主,一般不会涉及工作,极少帮公司打广告/做营销—除非是我对内容发自内心的认可否则不会转发这些“鸡汤文”/软文。但很快这种外企“阳春白雪”般的不良嗜好就被好好的羞辱了一番:在进入新公司的第一周,我新加的微信好友数量就突破了过去几年的历史纪录(因为每个人见面都会要求加你的微信号,而且内部沟通和信息传递也极大的依托于微信平台,所以不加微信确实不行),好吧,入乡就要随俗吗,那就来者不拒吧,省得被新同事批评我不合群。晚上回到家,我好奇的打开手机想了解一下我的这帮新朋友们都是些什么样的人? 这一看还真吓了我一跳,原来微信朋友圈可以是这样的:
A. 转发Founder的Post—而且连标点符号都不带改的。
B. “夜已经很深了,时钟都敲过了两下,可办公室里还是灯光通明,Team里的小伙伴们还在为了伟大的理想而拼搏,加油,我爱你们!!
C/D/E/F/G。请参照A/B,然后没有了……

一开始我还以为这只是一些个案,可慢慢的我发现100%的人都是如此—职级越高越极致,WOW!这是多么棒的凝聚力和企业文化的认同感啊!我不禁由衷地感慨民企在忽悠人这一点上确实很厉害,但是这么多年被外企惯出来的毛病不是一下子就能被改变的,因此在刚开始的一段时间里我变得不敢用微信了:转发这种文章吧觉得挺幼稚的,而且有些内容和语调我实在不喜欢;不转发吧又怕被老板和同事们觉得我不够和团队align的。就这么别别扭扭的熬了一个月直到我遇到了一位外企的老同事,当时他已经在这家企业待了一年多了,俨然一幅老民企人的做派了。一见面我就好奇的向他请教该如何快速适应这里独特的文化—尤其是微信朋友圈,这家伙听完我的困惑不禁哑然失笑:“Peter哥,你难道不知道微信有“小号”这件事吗?再注册一个Account专门转发公司推文不就行了吗?你以为大家都是用个人帐户在发的啊?你也太“天真”了吧?哈哈哈……”

在我这种年纪还能被称为“天真”本来是一件很值得欣慰的事情(这说明我已经大智若愚返璞归真了),但这种被愚弄了的感觉还是搞的人有“些许”的不爽。可接下来发生的一件事所带给我的冲击就早已超越“不爽”, 而只能用震撼来形容了。

  • 发布会现场的惶恐:(个体VS群体)

作为行业内公认的“发布会营销高手”,我有幸在短暂的任期内亲历了一场可以说是触及灵魂G点的发布会:为了配合即将开展的大促,公司在一个以自己品牌命名的体育场里组织了一场声势浩大的发布会,主要的流程包括评奖发奖,艺人站台助威,生态产品展示(电动车)以及促销活动预热,在现场上万名公司员工的注视下,获奖的各位“精英”、“新锐”、“领军者”纷纷登台为公司伟大的理想送上发自肺腑的钦佩之情。整场的高潮出现在Founder用手机引导自动驾驶电动车缓缓驶上舞台中央,当看着这个耗尽他心血的玩具揭开神秘面纱的时候,只见他眼里饱含着热泪,用哽咽的声音向台下诉说着自己的情怀和理想,这时现场所有的人都起身为他们的偶像报以经久不息的掌声,全然不顾脸上肆意流淌的泪水,每个人都沉浸在即伤感又激动的狂热情绪之中无法自控!而我呢?却像一个不合时宜的异类在漫天飞舞的泪雨中手足无措惶恐不已……其实我也很想和大伙一起享受这令人热血沸腾的瞬间,我也很想打开泪腺肆意的挥洒自己的泪水,然后放下自己溶于团队,但遗憾的是:我自幼出身于一个知识分子家庭,从小接受的是“君子周而不比,君子和而不同”的处世哲学;稍长进学又深受米兰昆德拉的毒害,觉得世间一切形式主义的东西都是“媚俗”,比如1936年的柏林奥运会;比如10万人一个动作的朝鲜阿里郎舞蹈;比如文革时毛爷爷接见百万红卫兵的胜景;比如全民创业/万众创新/总舵手/指路明灯/精神偶像……窃以为这个世界之所以可爱,之所以引人入胜就在于她是由一个个斌彩纷呈的个体所组成,每个拥有独立思考能力和思维方式的个体才是社会进步的真正的正能量。这就好比说“独立之精神,自由之思想”造就了民国初年的一代大师,以及百家争鸣,百花齐放的思想盛宴,可然后呢?就没有然后了……

  • 高管会议里的叹息:(理想VS现实)

可能是为了以示重视和隆重吧,每次大型活动都会被冠以“**战役”之名,而且会成立专项工作组负责管理和协调。进军海外是无数中国企业要显示自己全球化雄心和实力的必然之举,因此如何在*国一炮打响也成了当年的重头戏。为了协调整个公司的资源形成合力,项目组特别邀请外国团队的负责人(刚加入公司没几天的老外)来京开会,当海外团队介绍完他们的市场方案后,创始人以及一众高管们都觉得此方案不过瘾,根本没有领会和贯彻公司所独有的/成功的营销“精髓”,忍不住发言想敲醒这些愚钝的老外:“你们这样做肯定没效果,你们应该这样做……”

几个老外瞬间就懵圈了,以为是同声传译出了问题,可经过再次确认之后发现真的就是这样,他们一个个面面相觑陷入了沉默,少顷一个老外答到:“this never gonna happen in US”。“不会吧?多给些钱还不行吗?多做些活动预算呗。”“对啊!这些东西我们已经玩过好多次了非常有效,你们应该在米国试试!”“对啊!”“没错!”“一定行的!”……

在职场混了20多年了,我早已经不是当初那个穿着洁白的蕾丝小短裤,内藏一颗纯洁的玻璃心在空中飞来飞去的天使了,我也不可能白痴到站起身来义正严词的驳斥这种不**和无底限的言论—虽说一家公司所有的高管居然可以这么comfortably /openly / publicly / officially 的讨论这些违背基本****和道*的东西,而没有任何的不舒服/不好意思,以及哪怕有一丝丝的掩饰或者尴尬,这确实是一件让人颇为不悦和遗憾的事情,但在我的内心深处,就连我自己都不得不承认这无疑是最“有效”最“成功”的营销方式—尤其是在当今的中国。打个比方吧:一众兄弟上了贼船,忸怩作态了一阵之后突然发现做贼也挺好,同时四下一看,原来满江满河的都是贼于是自己的心也就放下了,进而还慢慢生出了些自豪感来……这就是当今中国这条商业大河上的众生相。

一半是挽留一半是好奇吧,听说我才来了五个月就要辞职,老板死活要拉着我聊一聊,当被第一次问到WHY时,我低头想了好久,才用一种和自己的年龄不相符的颇为羞涩的声音答道:

因为我想按自己的意愿去玩微信,因为我不想违背自己的价值观去混碗饭吃。

在职场待了大半辈子了,我才渐渐想明白了一件事:这个世界上其实没有什么好公司坏公司,关键要看你适合什么公司?

三星galaxy gear VR体验和使用总结

VR是最近非常流行的一个话题。适逢刚入手了galaxy s7 edge, 顺便就买了gear VR,也想体验一下VR的魅力。

gear VR不是一个完整的VR设备,它自己是不带显示屏幕的,需要把三星的手机嵌入到设备上,然后使用手机的屏幕、处理器来实现VR的功能。设备上有一个micro USB的接口,把手机的USB口直接扣上去,然后把手机固定好,就可以体验VR了。

1243321080365382725

原理

gear VR的原理很简单,就是在手机上运行软件,然后在屏幕的左右两块区域上显示出来每个眼睛需要看到的内容,然后在VR眼镜上让对应的眼睛看到相应的内容。VR眼镜实际上看的是屏幕上的一小块区域,VR眼镜上一块放大镜,使得眼睛看起来的屏幕很大。所以这个对手机屏幕的分辨率要求挺高的,现在s7e是2k的屏幕,但是在gear VR上看起来,分辨率还是很粗糙的。

1243321080446178629

软件

使用的VR的软件,都需要使用oculus home来安装和启动。当第一次把手机插入到gear VR的时候,会提示安装oculus home。oculus需要使用facebook相关的一些东西,并且自己也被国内屏蔽了,所以使用oculus home,安装和启动里面的软件的时候,很多时候需要打开VPN。

Oculus home是几乎所有软件的启动入口,所以最好熟悉一下它的使用。它是一个虚拟的房间,看起来还是蛮酷的。安装完之后,需要从Library打开自己的软件或者游戏。这个被翻译成“图书馆”,很容易造成歧义。

gear-vr-review-apps

这里有一个简单的教程:

https://product-guides.oculus.com/en-us/documentation/gear-vr/latest/concepts/ug-a-us-using-gear-vr/#ug-us-overview-tutorial

看视频

看视频最好的软件是samsung VR, 原来叫做milk VR, 在google play store和oculus home里都可以看到这个软件,但是两个地方的软件貌似不太一样。oculus home里安装的samsung vr, 需要在oculus home里启动;play store里下载的,可以不需要oculus home直接启动,可以在不连接眼镜的时候打开,方便下载和观看视频。另外,samsung VR原来的名字叫做milk VR, 现在改名了,所以大家看以往教程的时候要注意。

samsung VR本质是一个看在线视频的软件,但是也可以播本地的一些内容,包括2d, 3d, 和全景的视频。3d和全景的格式各异,可以给文件添加后缀,这样打开的时候就可以直接以合适的模式来播放视频;也可以在播放的时候,临时选择格式,但是在各个模式之间切换,是挺麻烦的事情。

GearVR_desktop_immersive_carousel_milkVR

这个是支持的所有的模式,以及后缀:

https://samsungvr.com/portal/content/faq_tech_gear_vr

When developing videos, the Samsung VR team would suggest using stereo sparingly as stereo effectively halves the resolution of your video.

Video Type Code
2D video “_2dp”
3D top bottom video (常见的上下分割的 3D视频) “_3dpv”
3D left right video (左右分割的3D视频) “_3dph”
Monoscopic 180 “180×180”
Monoscopic 180 16:9 “180×101”
Left right stereoscopic 180 16:9 “180x101_3dh”
Monoscopic 360 equirectangular projection (360度全景视频) “_mono360”
Top bottom stereoscopic 360 equirectangular projection “3dv” or “_tb”
Left right stereoscopic 360 equirectangular projection “3dh” or “_lr”
Monoscopic 360 cube projection “_cubemap “
Top bottom stereoscopic 360 cube projection “_cubemap_tb”
Left right stereoscopic 360 cube projection “_cubemap_lr​”
Monoscopic 360 octahedron projection “_octahedron”
Monoscopic 360 icosahedron projection “_icosahedron”
Top bottom stereoscopic 3D 180 “180x180_3dv”
Left right stereoscopic 3D 180 (有些小电影是这种格式的,代入感强烈) “180x180_3dh”
Left right stereo 3D 180 squished “180x180_squished_3dh”
Top bottom stereoscopic 3D 180×160 “180x160_3dv”
Two monoscopic 180 hemispheres “180hemispheres” or “180-hemispheres”
Top bottom 3D cylinder 2.25:1 “cylinder_slice_2x25_3dv”
Top bottom 3D cylinder 16:9 “cylinder_slice_16x9_3dv”
Top bottom 3D 360 no bottom “sib3d”
180 planetarium full dome “_planetarium” or “_fulldome”
V360 camera “_v360”
RTXP 360 cylindrical “_rtxp”

至于文件存储的位置,貌似samsung VR对此也没有特殊的要求,统一扔到/Movies目录里就成

也可以选择Oculus Video来看视频。

Oculus video对目录的要求比较严格:

On your phone's internal storage (Phone):
/DCIM/
/Movies/
/Oculus/Movies/

相应的使用指南: https://support.oculus.com/help/oculus/901894079905459/?ref=hc_fnav

玩游戏

VR里玩的游戏,只能在oculus home里安装和运行。安装好的游戏,在桌面上并不会出现图标,也不能直接运行。需要每次启动oculus,然后在里面运行。

现在有破解的游戏,下载完之后安装,但是因为是破解的,所以并不会出现在oculus home里,也不会在桌面上有图标。这时候,可以选择单独的程序管理器,把游戏打开,这时候会提示连接眼镜,再把眼镜装上去就成了。

推荐ES文件浏览器,可以看所有的app,

看全景图片

使用Oculus 360 Photo来看全景的照片。可以在oculus home里安装。

To view your own panoramic photos in Oculus 360 Photos: 

Create the folder "360Photos" under the Oculus folder
Create the folder "My images" under Oculus/360Photos folder
Load your photos into /Oculus/360Photos/My Images folder

使用指南:

https://support.oculus.com/help/oculus/169658330048676/?ref=hc_fnav

推荐的软件和游戏

VR现阶段能使用的软件和游戏还不多,大多是为了给人体验一下VR的效果。这里推荐一下一个免费应用: Jurassic World,可以直接在oculus home里安装。软件里面有一条大恐龙,慢慢走向你,然后抬起腿来吃草,效果还是震撼的!

 

 

2009年新疆恐怖事件后,法国到底做了什么事情惹怒了中国人?

2009年7月5日,新疆发生了暴力恐怖事件(乌鲁木齐七五事件)。在全中国人陷入巨大悲痛的时候,法国政府却发出了非常不负责任的声明。这个声明激怒了中国人,所以现在常常听到中国人民对法国发生恐怖事件的幸灾乐祸。这个不是中国人没有同情心,而是中国人曾经被深深伤害了!

法国对7.5事件的声明原文:

http://basedoc.diplomatie.gouv.fr/exl-doc/EPI00040432.pdf

Screen Shot 2016-07-16 at 14.40.34

中国在新疆地区发生事件的声明
贝尔纳·库什

法国外长声明

我们十分关注中国新疆地区最近两天发生的暴力冲突。我对人身损失深表遗憾。

同欧洲同盟国一起,我们重申对人权,尤其是言论自由和和平示威权利的重视。被拘押人员
的权利应该得到充分尊重。

RFI的报道:

http://www1.rfi.fr/actucn/articles/115/article_14735.asp

Screen Shot 2016-07-16 at 14.31.57

这就是法国如何对待中国的真相。这也是法国政府如何自作孽的证据。

Android里TextView中链接识别问题

假设你有一些文本内容,这些文本内容中可能会有一些URL。如果你希望用户在看这些文本内容的时候,同时可以方便的触发这些链接,该怎么做呢?

很多人会说,用Linkify, 简单的两句话就可以实现了:

textView.setText(content);
Linkify.addLinks(textView, Linkify.WEB_URLS);

但是Linkify除了可以指定识别链接的类型外,没有任何可以定制的内容。比如想单击链接打开浏览器,长按链接复制地址到剪贴板,就无法实现。

更重要的是,Linkify对链接的识别貌似非常粗糙,尤其是包含中文的内容。下面是Linkify识别结果的一个例子:

Screenshot_20160514-143339

尝试找各种解决方案,最后觉得Android-TextView-LinkBuilder是最好的一个方案。

contentView.setText(content);
LinkBuilder.on(contentView).addLinks(getPostSupportedLinks()).build();
    public static void openLink(String link, Activity activity) {
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(link));
        try {
            activity.startActivity(browserIntent);
        } catch(ActivityNotFoundException e) {
            Toast.makeText(activity, "链接打开错误:" + e.toString(), Toast.LENGTH_LONG).show();
        }
    }

    public static void sendEmail(String link, Activity activity) {
        /* Create the Intent */
        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

        /* Fill it with Data */
        emailIntent.setType("plain/text");
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{link});
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, " \n \n \n \n--\n来自zSMTH的邮件\n");

        try {
            activity.startActivity(Intent.createChooser(emailIntent, "发邮件..."));
        } catch(ActivityNotFoundException e) {
            Toast.makeText(activity, "链接打开错误:" + e.toString(), Toast.LENGTH_LONG).show();
        }
    }

    // this will be called in PostRecyclerViewAdapter & MailContentActivity
    public static List<Link> getPostSupportedLinks(final Activity activity) {
        List<Link> links = new ArrayList<>();

        // web URL link
        Link weburl = new Link(Regex.WEB_URL_PATTERN);
        weburl.setTextColor(Color.parseColor("#00BCD4"));
        weburl.setHighlightAlpha(.4f);
        weburl.setOnClickListener(new Link.OnClickListener() {
            @Override
            public void onClick(String clickedText) {
                ActivityUtils.openLink(clickedText, activity);
            }
        });
        weburl.setOnLongClickListener(new Link.OnLongClickListener() {
            @Override
            public void onLongClick(String clickedText) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                    final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager)
                            activity.getSystemService(Context.CLIPBOARD_SERVICE);
                    final android.content.ClipData clipData = android.content.ClipData.newPlainText("PostContent", clickedText);
                    clipboardManager.setPrimaryClip(clipData);
                } else {
                    final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager)activity.getSystemService(Context.CLIPBOARD_SERVICE);
                    clipboardManager.setText(clickedText);
                }
                Toast.makeText(SMTHApplication.getAppContext(), "链接已复制到剪贴板", Toast.LENGTH_SHORT).show();
            }
        });

        // email link
        Link emaillink = new Link(Regex.EMAIL_ADDRESS_PATTERN);
        emaillink.setTextColor(Color.parseColor("#00BCD4"));
        emaillink.setHighlightAlpha(.4f);
        emaillink.setOnClickListener(new Link.OnClickListener() {
            @Override
            public void onClick(String clickedText) {
                ActivityUtils.sendEmail(clickedText, activity);
            }
        });

        links.add(weburl);
        links.add(emaillink);

        return links;
    }

这样就可以完全由自己去控制需要识别的内容,然后对单击、长按动作采用合适的操作了。

https://github.com/klinker24/Android-TextView-LinkBuilder

RxJava的学习教程

读完下面的三篇文章,基本上就知道怎么用了

1.给 Android 开发者的 RxJava 详解

http://gank.io/post/560e15be2dca930e00da1083

2.RxJava学习总结

http://wangxinghe.me/blog/2016-03-27/rxjava-basis/

3. RxJava使用场景小结

http://blog.csdn.net/lzyzsd/article/details/50120801

在Mac里安装单独的python

mac已经自带了python了,版本也还比较新。如果想自己控制python的版本的话,可以用brew来安装单独的python.

brew install python

brew安装的命令会在/usr/local/bin里面,如果系统自带了一些工具在/usr/bin里,那么brew安装的可能无法被使用到。所以需要将/usr/local/bin放到 /usr/bin前面去

brew doctor会提供修复的命令:

Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
    echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc

修改之后source ~/.zshrc就可以使用最新版的python了

➜  python --version
Python 2.7.11
➜  which python
/usr/local/bin/python

 

 

enable xtrafinder to work under OS X 10.11 El Capitan

据说是OSX 10.11开启了一个System Integrity Protection的功能,所以Xtrafinder就无法正常工作了。

解决的方法,就是部分关闭SIP的功能,具体看:

How to modify System Integrity Protection

You must boot into the Recovery OS. You do this by restarting your machine, and holding COMMAND + R until the Apple logo appears.

Then select Terminal from the Utilities menu. It looks like this:

In the window that opens, type csrutil enable --without debug and press return.

This turns off the part of SIP that XtraFinder needs to run, and OS X complains that it is an unsupported configuration.

Now type reboot and press return to restart your machine.

 

如何有效的开团队会议

最近review了一下公司里不同团队的时间开销,发现各种各样的会议占据了工程师团队的很大一部分的时间。怎么有效的开团队会议(>= 3 人)呢?Andy同学做了一个很好的training, 把里面的一些内容拿出来跟大家分享一下:

0. 开会或者不开会,这是一个问题

还有其他的方式,比如email、skype,组织一个会议是必要的么?

1. 会议组织者,要提前做好准备

Why – Objectives

Who – Required/Optional

What – Agenda/Background

Where – Meeting room

When – Invite in advance, time slot

How – Facilities

2. 参会者,要提前做好准备工作

Prepare yourself

  • Confirm the purpose of the meeting
  • Know your role
  • Background, feedback, comments and questions

Response

  • Accept
  • Decline
  • Tentative
  • Propose new time

3.开会时,要有leadership

Be on time (Arrive 5 minutes earlier if possible)
Let everyone know who is in the meeting
Make sure someone is taking notes
Let everyone know the goal/objective of the meeting
Control the meeting

  • Stick to the agenda, don’t go too far, don’t let the meeting hijacked
  • If someone starts to dominate, bring the person under control
  • Make sure we reach the meeting objectives
  • Decisions, Agreements, Plans, Schedules, etc.
  • Time Keeper

Make sure action items are specific enough

  • What, Who, When

4. 会后,有会议记录和行动点跟踪

Send out meeting minutes with summary, action items in time

Keep track the work items if necessary

最后,一张图总结一下:

Screen Shot 2015-07-27 at 09.23.35

 

BTW: 看到一篇关于如何开会的文章, 《极限会议: 原则与实践》,有兴趣的可以瞅瞅

极限会议: 原则与实践

联通的DNS真是没有节操

家里使用的是联通的宽带,一直使用的也是联通的DNS.

最近在chrome里搜索,无论搜索什么东西,都会弹出这么一个东西出来:

Did you mean to go to 一个乱七八糟的网址。点击进去之后,是联通的一个网页导航的网站。

Screen Shot 2014-12-28 at 21.35.12研究了半天,原来是chrome的一个机制,被联通给没有节操的利用了,导致每次都出来这么一个弹出条。

下面这个连接有详细的解释:

https://productforums.google.com/forum/#!topic/chrome/LGepU6tPPWs

It's not really Chrome's fault. Chrome is just looking up what you typed in the address bar as though it were the name of a server, and if it finds something, it offers to take you there. If not for this feature, there would be no way to access the host named "tubes" (for example) on your local network. 

The problem is that your ISP is running a domain "helper" that responds in the affirmative to every server it's asked about. So when Chrome asks if 'tubes' exists, your ISP is saying, yes, I've got that right here. If you click on the omnibox, I strongly suspect that you'll be taken to a landing page owned by your ISP. 

If you don't like this behavior, you can sometimes turn it off with a control panel somewhere in your ISP's settings (on Comcast, for example, there's a link from the landing page). You can also configure your computer to use Google's public DNS, avoiding your ISP's DNS games entirely: http://code.google.com/speed/public-dns/docs/using.html

把路由器上缺省的DNS改成了114.114.114.114 和阿里的223.6.6.6,问题就解决了