分类目录归档:点点滴滴

点点滴滴便是点点和滴滴是也

聊聊近况吧

昨天居家办公的时候听完了池建强和王建硕在播客节目《夜航西飞》中的一次关于web3、大理、写作、思考、创业等等一系列话题的对谈。其间聊到了一次王建硕与阮一峰的一次对谈,阮一峰在谈及其自身的个人写作更需要读者的互动来给自己正反馈的激励,而王建硕相对来说就比较享受写作过程中的自我表达和逻辑的完善,其写作的目的更多的是帮助自己的思考和凝练。

今天早上在微信视频号里看到了读库老六与陈晓楠关于写作的对谈,老六非常骄傲地「鄙视」了一下他口中的「拖拉机」为啥会不愿意写稿,他已经能从写作中找到一种与自己对话和疗愈的出路,写作会让自己放松,把自己劝开了,写完了整个人都舒坦了,跟一次健身结束后的感受很类似。

以上提及的几位,在我个人成长的过程中,或多或少都对我有一定程度上的影响,阮一峰老师很多的技术科普类文章在我学习很多新技术概念的时候给到我很多的帮助,我自己的技术类文章也力求向阮一峰老师的技术类文章看齐,想要做到用简单和确定的文字把一个纯技术领域的内容说明白。对了,想起来了,虽然我没有正经写过 JavaScript 的代码,我还是买了一本阮一峰老师的 ES 相关的书,纯支持作者(是的,我每年或多或少都会做类似的一些事情,去年和今年就为了支持推上的两个技术书籍作者,买了一本 Golang 和一本 Python 的技术书籍,实际上这两本书我压根儿都没打开读过)。

池建强老师作为微信公众号早期的三剑客之一,又是MacTalk的主笔人,我一直都是其微信公众号的订阅者,看着他从用友到锤子,从锤子到极客时间,再到现在的墨问西东。虽然期间有一段时间因为「懒投资」的事情,我把曾经不断给「懒投资」和「张磊」站台的池建强和冯大辉的公众号都取关了,最后还是都关注回来了。池建强老师的书貌似我还买了一本,虽然其中大部分的内容都在微信公众号上都读了个七七八八,还是支持了一把。池建强老师的爱好广泛,其中爱读闲书对人文学科兴趣浓厚这一点,我也沾点边,所以会有天然的亲切感,而且他也是一个不折不扣的老程序员,直到最近几年才彻底完成转身,刚好我自己也处于这样的一个节点上。

读库老六对我个人的影响可能更为深远了,我早在上大四的时候通过网络了解到了有读库这么个出版物,在我开始来北京实习后,从 2009 年开始我就成为了读库的全年订户了,直到今年每一年都没有落下,虽然大概还有一半的读库我没有读完(持续创业996留给自己阅读的时间相对较少,毕竟自己不是那种重度阅读爱好者),但是每一期的老六的语和每一年的 00 刊,我都会完整地读完,看着这个小机构一步步成长,看着一个这么传统的行业里头,一位这么没有野心的人,踏踏实实把这么一个事做到「随时可死」的状态,对我自己的触动还是很大的。我记得当年我从喜讯离职的时候,跟我的老大聊的时候,我曾经还说过我有可能会选择去投奔读库,看看那家出版机构有没有能用得上我的地方。当然最终因为手游创业元年的大浪潮给了我一些其他的机会和幻想,我就跟着我的另外一位老哥哥就投身于手游创业去了,这事儿我就抛诸脑后了,连发个邮件问询一下的动作都没做,所以可能还是不够真热爱吧,都是说来骗人和骗自己的。

前一阵子,我隔几天都会问自己一个问题,那就是我到底是个什么样的人,缘由呢就是因为我做了多年的工作内容发生了变化,我从一个技术开发人员半推半就地转成了一个产品经理,并且要带领一个已经相对成熟的产品的产品团队。这期间产生的一些不适和压力,让我开始反问自己是不是适合这份工作,人大抵都会在不舒服的时候产生一些怀疑情绪吧,至少在我这儿是成立的。所以我就写了不长不短的大概一万来字吧,用手机在「纯纯写作」里配合着「微信键盘」写完的,从自己上学开始写到就业和创业,一直到现在,甚至有点自己写回忆录的感觉了,但是我应该还不到要给自己写回忆录的时候吧,如果自己能活到平均年龄的话,而且坦白讲自己的人生历练还非常的浅薄,远没有啥实际内容可写的。

前一阵子在多抓鱼上买了一本《讣告》,目前还没有打开塑封,跟它一起下单的另一本《变局:七千人大会始末》的塑封也还没有打开,不过对于《讣告》一书早有耳闻,因着这书是读库出品的,所以通过读库的各种渠道多少听了那么几耳朵,而且播客节目《文化有限》和《忽左忽右》都有专门做过节目介绍此书,所以大抵这该书中的内容和形式有所了解,应该是汇集了经济学人杂志上刊登的一些人物的讣告出版的一本书,由于杂志篇幅和形式,大体上每位人物的讣告篇幅都会凝练为两张纸以内吧,书籍出版的时候伊丽莎白女王还健在,当节目录制的时候女王刚刚去世不久,节目中主播们还在讨论「不知道经济学人会怎么给伊丽莎白二世写这篇讣告」。

像我这般的升斗小民,徇着社会大势,通过升学一步步从农村走到城市,生活非常的具体,也很模式化,有属于个人的喜怒哀乐,更多的是淹没在尘世中的一粒沙。没有太多闪光点,生活的单元基本可以用年来计算,跟我们国家的GDP统计单元有点类似😭,咋听着好像我就是一个经济大循环中的小螺丝呢,好无力啊。

不过回到自己为何主动尝试写作,尤其以回顾自己为何会走到今天这一步来做私人的写作这个话题上来,虽然写作不是一笔写到底,而是断断续续,中间还间隔了不短的时间,大概在一个月内写完的。前半部分的情绪会非常饱满,书写的速度和流畅感也会更好,也许那会儿心中还有比较强烈的肿胀感?有些块垒亟需抒发一下子?也许吧。后半部分有点想延续前半部分把这个写作完成,但是由于工作内容的变化和自己心境的变化,逐渐进入到新的岗位和角色后,最初的那个心境已经很难直接找回来了,写作的过程中还能延续的就是逻辑。也就是说,我后半部分的写作相对来说情绪更弱,更多的是在前半部分已形成的内容中呈现的逻辑之上的延续。然后在整个写作完成之后,我会发现一次较为完整的自己回顾,自己还是会选择那些自己情绪想要突破的出口相关的高光点来完成自己的书写,而那些同样真实的,在自己潜意识里与当前情绪相关度不高的内容,还是会选择性的放弃掉,最终会出现前文逻辑非常严密,立意非常清晰,但是后文有点难以为继,逐渐出现羞于呼应的状态了。

这次书写还是达成了两个目的的:

  • 情绪的出口找到了,至少那几天自己羞于对外人诉说的情绪被化解了;
  • 拉长时间的非即兴书写能帮助自己厘清自己的思考逻辑,设置产生怀疑;

所以,我感觉王建硕老师说的那句话还蛮有意思的,公众号更适合用来输出自己比较成型的一些思考结果,而Blog就是自己的自留地,我想种点啥都可,甚至不开花不结果也不重要,重要的是过程能历练我们自己的种地技巧并积累经验,内化为我们的能力。

那么我是不是也可以这么干呢,我想试试。

做了两个转换 Color HEX Codes 的 PopClip 插件

最近这三年里头,我成了一个 Flutter 开发人员,加入了映客这家做直播的公司,主要做直播相关的业务开发。映客的产品研发流程中设计团队的设计稿交付通常都是通过蓝湖来完成的,我们也就习惯使用这个工具来查看设计稿了,开发的过程中确认尺寸和取色的过程基本上都是直接在蓝湖上完成。

通常我们需要使用的颜色值在设计稿页面右侧的标注栏中根据我们想要的颜色格式,在 HEX、AHEX、HEXA、RGBA、HSLA 这几种颜色表达格式中随意切换,然后直接拷贝即可。

但是由于我们做的是 Flutter 开发,Flutter 原生支持的颜色构造方法有以下几种:

const Color(int value) : value = value & 0xFFFFFFFF;

const Color.fromARGB(int a, int r, int g, int b) :
    value = (((a & 0xff) << 24) |
             ((r & 0xff) << 16) |
             ((g & 0xff) << 8)  |
             ((b & 0xff) << 0)) & 0xFFFFFFFF;

const Color.fromRGBO(int r, int g, int b, double opacity) :
    value = ((((opacity * 0xff ~/ 1) & 0xff) << 24) |
              ((r                    & 0xff) << 16) |
              ((g                    & 0xff) << 8)  |
              ((b                    & 0xff) << 0)) & 0xFFFFFFFF;

每次从蓝湖中拷贝过来的 HEX Color Codes 字符串总是无法直接拷贝粘贴到 Dart 代码中直接使用,每次要么得自己把 #FFFD3666 中的 # 换成 0x,最终变成 Color(0xFFFD3666) 这样才能正常构建出来一个颜色值对象。对于这种简单重复的劳动,我是有种本能的反感,在前两年的开发中,我自己实际动手写 UI 控件的机会不多,因为组内有其他能做得更好和更熟练的伙伴在负责 UI 控件这块儿,这近一年由于自己从原来的大项目组调整到了更小的团队中,由于人力配置的问题,日常开发工作中也开始自己写一些 UI 控件了。一次次地拷贝中,除了想着想把一些颜色值做成主题(更多依赖于研发和设计高度认同,严格遵守规范,定义好业务内不同场景下应用的颜色、尺寸、圆角半径等等),还有就是想着能不能把每次手动改动 # 符号为 0x 的这种机械式的动作简化掉。

恰巧我很多年之前使用过 PopClip 这款软件,具体为何我会购买这款软件,以及当时我用这款软件来帮助我完成什么事情,我已经记不起来了,但是我非常清楚地记得它有一个非常强大的插件生态和插件能力。所以我就想着是不是可以利用它的能力,帮助我达成每次拷贝到这种 HTML 的 Hex Color Codes 字符串的时候,弹出一个处理选项按钮,我直接点一下就帮我处理好了,我只需要切到我的 IDEA 代码编辑器中直接粘贴就好了,所以我这就直接先去这个官方整理的插件页面去找了一圈,不过看来这种需求还是有点小众,并没有完全匹配的。

想来想去,还是忍不了这样总是无聊的重复劳动,借着周末在家,刚好新项目的研发工作已经阶段性地告一段落了,只需要日常推进持续迭代即可。想着给自己来个代码按摩吧,了解了解这个编程世界中的其他一些美好的角落中的小故事,顺便给自己写个提效的小工具,也算不错,刚好北京近两周正处于疫情苗头又起来了的阶段,也不太能带娃出门。

既然选择要写自己的插件,那就找到官方的教程来读读看,不看不知道,一看吓一跳,真是要给这样的开发者竖大拇哥👍啊,文档写得是真到位,写得真好,但凡作者觉得能对读者有帮助的内容,都给出了外链和应用方法。从这个文档中,我至少拓展阅读或了解了以下一些非常优秀的项目:

quickref

case-anything

 The Noun Project

SF Symbols

ICU specification

作为一个非冲动动手型选手,在动手写任何代码之前,我总是希望能对我即将要做的事情有一个大致的了解后再思考自己需要怎么做。虽然我也能直接拿着官方插件仓库中的代码之间改一改就能跑起来,但我显然一直都不是这样的一个人,我还是比较享受从0到1慢慢了解一个项目,这样难度相对更低,自己也能更舒服,渐进了解了 PopClip Extension 的设计思路和整体规范之后,再了解具体制作的流程和规范,再结合自己要做的事情,匹配到我需要使用的特性,最终确定我需要使用到其 Shell Script Action 的特性来执行我自己稍微熟一些的 python 脚本来完成我想要做的两件事情。

  1. 将 #FFFFFFFF 这样的 HTML Hex Color Codes 一键转换为 0xFFFFFFFF 这样的 16 进制字面常量表示形式;
  2. 将 #FFFFFFFF 这样的 HTML Hex Color Codes 一键转换为整型数 4294967295。

具体的制作过程就不展开了,实际上非常的简单,直接照着教程,创建一个目录,在目录下放上以下三个文件即可:

  1. Config.json => 用于声明这个插件的各项参数和具体需要使用的图标,执行的脚本,以及执行完脚本得到结果后的动作等等;
  2. h2d.py => 这是我写的两个插件中的其中一个插件依赖的 python 脚本的名称;
  3. README.md => 一个用于描述自己插件是干嘛的 MD 文档,可有可无,但是我认为是需要的,像优秀的人和优秀的项目靠近,我们才可能也变得更好一些;

然后将整个目录改名,加一个 .popclipext 后缀在目录名称后面即可,安装了 PopClip 的 macOS 系统会自动识别出来这个目录是一个插件,整个目录的图标展示都会变成 PopClip 的图标样式,双击安装插件,由于我们自己写的插件目录下没有签名文件(如果要签名可以联系 PopClip 的作者帮忙),所以 PopClip 会检测到这是一个未签名的插件,需要我们二次确认后才可安装成功,安装成功之后,即可使用了。

我的这两个插件的效果就是这样的,#FFFFFFFF => 4294967295,0xFFFFFFFF

插件效果演示

最后附上我自己 fork 出来的 PopClip-Extensions 的地址吧:https://github.com/lishali12345/PopClip-Extensions

另外这两个插件的代码分别在:https://github.com/lishali12345/PopClip-Extensions/tree/master/source/Hex2Decimalhttps://github.com/lishali12345/PopClip-Extensions/tree/master/source/HexColorCodes2HexText

下载后可以直接双击安装并使用的插件(注意未签名)在:https://github.com/lishali12345/PopClip-Extensions/blob/master/extensions/Hex2Decimal.popclipextzhttps://github.com/lishali12345/PopClip-Extensions/blob/master/extensions/HexColorCodes2HexText.popclipextz

Unity3D Mecanim 中 Transition 的 Atomic 属性是个什么鬼

我们游戏中一直有一个让我非常恼火的问题,关键是查了已经无数次了,根本尼玛不屌我啊,像我如此这般坚强的程序猿都要拜倒了。谁知前几天再次出现,因为已经把 Log 打得有点天罗地网的意思了,而且还持久化到磁盘 Log 文件上了,这下也不担心查着查着突然被其他的事情打断之后,然后再次回来想查问题的时候发现 Log 已经不见了,尼玛不是说好的要保护第一现场的咩?

不扯淡了,先说这个问题是啥。我们的游戏中,对于战斗 NPC 的动作都加了 AnimationEvent 回调,游戏中很多逻辑都依赖于 AnimationEvent 的回调,例如战斗 NPC 释放了一个技能,那么在这个技能动画刚刚开始播放和即将结束的某个时间点,会分别调用 OnSkillStart 和 OnSkillEnd 这两个 AnimationEvent,在这两个回调函数中会有相应的处理逻辑,例如在 OnSkillStart 中给 NPC 加上霸体的 Buf,在 OnSkillEnd 中将 NPC 的 Buf 取消。我碰到的诡异现象是这样的,NPC 的技能 A 的动画时间长度为 3 秒,OnSkillStart 方法和 OnSkillEnd 方法分别处于整个动画时间轴的 0.2 秒和 2.8 秒,NPC 在 AI 判断确定释放技能 A,在技能 A 动画播放到 0.1 秒的时候,受到了主角的攻击,此时 NPC 应该立即切换到受击状态,开始播放受击动画,但是事实上却不是这样,我们能看到的日志信息如下:

10:34:05.565 AM ya_zhang_tie_qi_jun(Clone)001 TriggerSkill ya_zhang_tie_qi_jun_attack_3

10:34:05.573 AM #Network# GameClient Emit a Message: [Action, Ping]

10:34:05.667 AM Player OnSkillStart: player_female_suplex_back
10:34:05.792 AM Player OnSkillTrigger (player_female_suplex_back#0)
10:34:05.799 AM ya_zhang_tie_qi_jun(Clone)001 OnHookAttackHit by Player with player_female_suplex_back#0
10:34:05.803 AM ya_zhang_tie_qi_jun(Clone)001 Hit to Hooking from None
10:34:05.817 AM ya_zhang_tie_qi_jun(Clone)001 OnSkillStart: ya_zhang_tie_qi_jun_attack_3
10:34:06.297 AM GameClient Received a Message: [Action, Ping]

10:34:06.338 AM Player OnSkillTrigger (player_female_suplex_back#1)
10:34:06.345 AM ya_zhang_tie_qi_jun(Clone)001 OnSuplexAttackHit by Player with player_female_suplex_back#1
10:34:06.352 AM ya_zhang_tie_qi_jun(Clone)001 is SuperArmored, cannot be Suplex
10:34:06.359 AM ya_zhang_tie_qi_jun(Clone)001 ApplySuperArmoredFX
10:34:06.744 AM ya_zhang_tie_qi_jun(Clone)001 CancelSuperArmoredFX
10:34:06.859 AM Player OnSkillEnd: player_female_suplex_back
10:34:08.589 AM #Network# GameClient Emit a Message: [Action, Ping]

从日志里头看到的信息就是这个牙帐铁骑军已经释放了一个技能,但是在其技能动画播放到 OnSkillStart 的时间点时,已经被主角攻击了,此时其并未立即切换到受击状态,而是继续播放其技能动画并且触发了 OnSkillStart 的回调。所以游戏的逻辑就出问题了,NPC 因为触发了 OnSkillStart 回调进入霸体状态了,然后主角后续的所有攻击都无法让 NPC 做出相应的受击动作了,关键是这个 NPC 在回调了 OnSkillStart 函数进入霸体之后呢,还是会进入到对应的受击状态,这下就奇了怪了。你要么就不进入受击状态呗,要么就别触发霸体啊,这不是要疯吗。

最后仔细分析排查,知道了这个问题是因为 OnSkillStart 的触发时间点处于动画过渡的时间区间内,也就是说 NPC 从 Idle 状态进入到技能 Attack_3 的状态时间长为 0.3 秒,并且这个动画的过渡 Atomic 属性为 True。问题就这么来了,NPC 在从 Idle 状态时释放技能 Attack_3,动画从 Idle 切换到 Attack_3,动画切换到 0.1 秒的时候,受到了主角的攻击,NPC 的整个 AnimatorController 状态图中,受击状态都是直接从 Any State 跳转过去的。按理来说就应该在任意状态下都能切换到受击状态才对啊,为啥动画还会继续往后播放呢,直到 OnSkillStart 回调完了之后再切换到受击状态呢?

最终发现了就是这个 Atomic 属性给闹的,这个 Atomic 属性的字面意思已经很清楚了,那就是当它为 True 的时候,这个过渡是原子的,也就是说只要进入了这个过渡,那么这个过渡就一定会播放完成,不论是发生任何情况这个过渡都会播放完成,而刚好我们的这个 OnSkillStart 回调函数所处的时间点就在这个过渡时间段里头,所以就出现了,虽然最终 NPC 还是进入了受击状态,但是在进入受击状态之前因为已经回调了 OnSkillStart 函数,所以导致逻辑上出现了错误。

这个问题呢,有两个解决方法:

  1. 取消所有的动画状态切换之间的过渡时间,让动画之间的切换不再有过渡的过程,都是直接切换,这样就可以避免出现过渡的时候触发 AnimationEvent 了;
  2. 将牙帐铁骑军的 AnimatorController 中从 Idle 到 Attack_3 状态的 Transition 的 Atomic 选项取消,允许该 Transition 被打断,这个解决方法看上去更有技术含量一些,也更符合我们设计意图,当我们不论处于一种什么状态的时候,受击之后就应该立刻切换到某个受击状态下,这个从语义上也很能说得通,对伐?

我是怎么科学上网的

最近碰到不少朋友问我怎么科学上网,刚好自己也有一些科学上网的经验,记录一下吧。

从2008年开始,我真正开始学会使用互联网,那个时候Twitter也才刚刚兴起,国内还有饭否和叽歪这样的追随者。刚开始Twitter是可以正常访问的,但是后来逐渐就不能访问了,为了追随国际潮流,作为程序员的我们,当然得想办法了。那个时候网络上有各种各样的免费代理以及Twitter的第三方服务,找一个还算稳定的代理或者直接使用某个第三方的服务就好了。但是好景不长,GFW越来越牛逼,众多代理倒下了,那些第三方服务作者前期对Twitter疯狂的热情也慢慢消融了,Twitter对于API的政策也慢慢缩紧了,终于有一天我发现了一个叫Puff的服务,当然也是在Twitter上发现的。

Puff是我第一次花钱购买的一个科学上网服务,Puff最开始是有提供免费版本的,我在持续使用了近半年免费版本之后,毕业开始上班了。我工作的第一家公司『北京超图软件股份有限公司』针对研发中心的所有小伙伴们都做了访问外网的限制,所有的工作机器都是无法连接外网的,那个时候自己还住在公司集体宿舍,也木有自己的电脑,所以差不多有半年的时间里头,很少能有机会接触到互联网,作为一个对世界充满了爱的少年,我们肯定是无法忍受的。所以我忍痛向朋友借了5000块钱,自己再刷信用卡刷了2500,耗资7500购买了一台当时很牛逼的ThinkPad T400,从此非工作时间我就可以拿着我的电脑在办公区使用Wi-Fi网络畅游互联网了,感谢借钱给我的同学!就在我购买电脑之后,我购买了人生中的第一个正版软件『Nod32』为期1年半的服务,从此开始了自己数字消费之路。在我离开『超图』加入『喜讯』之后的第一个月,我购买了Puff的商业版。Puff有个特性让我很感动,因为那时候自己每天都是在Ubuntu下进行开发,所以有跨平台的需求,Puff可以在Wine的托管下非常好的运作,这样我就可以在家里和办公室都顺畅地使用Puff了。其实这一年使用Puff的主要需求也就是上上Twitter,看看别人每天都在刷什么,看看自己能不能跟上潮流,就这么Puff帮助了我科学上网了一年时间。

AWS EC2 + SSH在Puff服务到期之际非常及时的补上了缺,当时AWS在做活动,免费赠送1年的EC2服务时间,办公室里头4只程序猿果断掏出信用卡绑定上,免费的优质服务必须体验一下嘛。当时选择的是旧金山机房,貌似还不错,刚刚好当时自己的这个博客站点所托管的主机服务器也要到期了,所以正好把博客也迁移到了EC2上(这个要感谢我们的振警梁同学),EC2的稳定让我这一年几乎从未因为无法科学上网而发愁,简简单单『ssh -CfNg -D 127.0.0.1:7070 [your_user_name]@[your_host_name_or_ip_address]』一句话,配合浏览器Firefox的AutoProxy + gfwlist简直就是倚天屠龙啊,感谢AWS免费提供了一年高效稳定的服务。

免费的午餐抵不了成天的肚饿啊,EC2到期之后,跟同事一起合租了一个VPS,把大家自己的博客站点都挂上去之后,平时依然当做科学上网工具来使用,但是试过了多个VPS,稳定性都实在无法跟EC2相提并论,多方寻觅,最后选择了一个42区的VPS,价格也合适,刚刚使用的一段时间也很不错,不过后期经常宕机的毛病,让我们实在无法继续忍受。最终我们把VPS迁移到了一个SSD Cloud VPS平台了,就是现在持续在使用的Digital Ocean,我们选择的是最基础的套餐,20G SSD Disk,512M RAM,1TB Transfer,每个月$5,一年下来不到400人民币,还算划算,也还算稳定,重启机器也很方便。在购买Digital Ocean的服务之前,因为无法忍受其他VPS龟速的网络以及各种宕机的问题。我已经购买了VPN Tech的服务,这家VPN的网速还是相当不错的,配置也简单,可以直接使用域名进行连接设置,区分了各大地区,还区分了下载服务器,在提供付费VIP服务的同时,也提供了免费的试用服务。如果家里的网络稳定的话,看Youtube视频完全不是问题,而且最多支持5台设备同时在线,对于有多设备需求的人来说非常合适,其实这一个帐号都完全能够支撑一家子人使用了。

持续了使用了VPN Tech的服务之后,因为一直都是使用v.avpn.us这个域名进行连接,而有时候就是会连不上,最后发现使用hk.avpn.us连接会更快也更稳定,但是偶尔还是会出现掉线或者偶尔出现无法连接上VPN服务器的情况,而通常自己想用VPN的时候已经是比较着急的时候了,这么折腾几回之后,也尝试了一家香港的VPN服务Green网络加速器,网速非常强劲,稳定性也非常不错,只是我只用了一个月,因为对同时连接设备数限制太多,我又通常需要在我的电脑和手机上同时使用,不太适合我。

连续使用了两年多的VPN服务,感觉也还可以,但是总会出现一些不如人意的事情。其实我们自己现在使用的VPS上也有搭建VPN服务,偶尔也会使用一下,但是也偶尔会出现无法连接的情况,当然也可以使用SSH的方式,还是那句话,太折腾又时有不如人意的事情发生。折腾这些事情呢又总是很费时间,而且很容易让人心情不好,特别是在你需要科学上网的时候,喀给你来那么一下,你能舒服吗?

所以,我把目光投向了更专业的一些服务,当然价格也稍微贵一些,类似于『曲径』和『轻云』(貌似已经被墙了),最终我选择了MacTalk一直推荐的曲径,正所谓『曲径通幽处』我想你懂的,别想歪了啊。曲径这类服务其实本质上就是一个Http/Https代理,配合PAC(Proxy Auto-Config)文件进行分流,让你需要科学上网的时候通过曲径的服务器进行加密访问,不需要科学上网的时候直接访问,这样一来也不再需要担心流量问题(我每天都用Spotify听音乐,流量都能足够),而且配置极其简单,移动设备配置也非常方便。只是目前Android设备需要有Root权限才可以使用曲径的服务,这个让我感觉还是蛮蛋疼的,其他的都还好。当然曲径不能帮你解决所有的问题,她只能帮你解决使用系统默认代理设置,或者可以手动设定Http/Https代理的软件科学上网的问题,比如某些软件不提供代理设置方式又不使用系统默认的代理设置,这个时候VPN还是有作用的。

科学上网是一个渴望自由访问互联网内容的程序员的必修课,修这么课的同时就能让我了解到很多技术上的东西,也拓展了视野,最终成为了一个可以随时随地自由访问互联网的人。对此,我很开心,很感谢这些为我们提供各种科学上网服务的人们所做的各种努力。

谈谈理想吧

离开校园快5年了,记得还在学校的时候,我们不时地会畅想一下未来,虽未必在谈理想,起码也算是年少时美好的憧憬吧。

曾经跟宿舍好友们,坐在学校旁边小吃街的小餐馆里头,喝着冰啤酒,吃着长沙火辣的家常菜,不少个夜晚,跟不同面孔的同学,纷纷表达过自己对未来的各种憧憬,也有对未来未知的一些恐慌。

如今,回头看看,还是蛮有意思的。曾经讨厌写程序的GM在毕业之后加入南方测绘公司某旗下子公司,在两年之内成为了研发部门的中坚力量,每日与代码厮磨。我们最可爱的班长–猪头,在成功完成了保送的硕士研究生学业之后,如愿以偿地回到了福建厦门,虽然离他回到老家罗源还有一点距离,但是也算是圆满了。我们的亢芬同学,更是在一年之内终于成功嫁给了一个好老公,成为了光荣的军属。赵姐和赵胖的爱情结晶更是健健康康地来到我们身边,虎头虎脑的甚是可爱。偶像思麦如愿以偿地成为了自己一心想成为的游戏开发者,不知到偶像现在是否依然热爱和享受着制作游戏的那份快感。老比终于打破了这四年来我们一直的疑惑,选择了离开GameLoft前往深圳再次创业去也。刘琪最终没能持续做游戏,与我在喜讯相伴两年之余后,离开加入了Tencent大家庭,工作之余从未放弃为我国GIS行业的互联网化做着实际的工作和思想上的探索。而我,依然还在喜讯这个集体中,辛苦并坚持着。

曾经很多次跟同学聊天,有大学的同学,也有高中的同学,甚至老家的发小,都曾经问过我类似的问题,你们怎么这么辛苦?都这么些年了,你图什么,得到了什么?

首先,我在喜讯这几年确实很辛苦,工作时长平均每周70个小时以上,这没有什么值得炫耀的,说句难听的话,这说起来都是泪啊。
其次,我在喜讯这几年,目前得到了所有我应该得到的,公司给予我的跟我为公司做的,我认为是对等的,甚至公司给予我的多于我目前所创造的,未来会更加平衡一些。
最后,我图什么,其实我也不是特别清楚自己图的是什么,只是这一路走来,自然而然就成了现在的状态。

回到标题,谈谈理想。

在我们曾经年轻的日子里(貌似我现在也还没老哦),我们都曾美好地憧憬过未来,寄予美妙的幻想。我也曾多次问过自己,我的理想是什么?回过头看自己这26年里,自己一直想做的事情,貌似除了写作还真没有什么其他的想法。

在自己还是个小孩子的时候,就曾经梦想自己有一天能著书立作给别人看,除了这个一直保存在内心的小愿望,还有就是有一颗较为强烈的成为有钱人的原始欲望的心。也许是因为从小,家中家境一直不算好,在老家父母二人就是普通的农民,只是父亲自己年轻时候比较愿意学,也确实学过几年木工,所以父亲在老家还算是有一技之长的木匠,家中有我和弟弟两个孩子,父母辛苦大半辈子还算顺利地让我俩都大学毕业了。但是家境并没有因为我和弟弟二人的毕业加入工作之后顿时好转起来,只是已经不再像之前那么捉襟见肘了。正是出于对现实生活很多不确定因素的恐慌,以及多年来看着父母因为物质条件从未能真正地享受属于他们自己的生活,即便如今,二老在家依然劳作,说是趁着自己还能干得动,需要给我们攒点钱,能给我们减轻一点负担算一点。当我每次听到父母这番话时,作为长子长孙的我,我只有一个想法,我要让这个家庭不再那么穷。穷是一个很搞笑的字,看起来就像一个人在天底下,很用力的干活。穷人的姿态也许就是这般吧,我的爷辈,父辈,包括我自己,也许都会一直在天底下以这种姿态长时间地存在着。

不过,我跟我父亲一样,我们相信只要自己努力付出,总会有所回报,我的父母通过自己勤劳的双手,将我跟我弟弟送入大学,而且从未让我和我弟弟在生活上感觉到非常的困窘,他们真的很了不起。我想我起码应该在我父母给我创造的基础上,延续我父母的成就吧,也就是确保我能给我的后辈一个更好些的基础。多么原始和简单的欲望,纯粹就是出于本能的欲望。但是,不可否认的是这个欲望支撑了我很久,直到现在这个依然是我愿意付出我所有努力来达成的首要目的。

作为小学生的我,初中生的我,高中生的我,大学生的我,从未想过自己将来会成为科学家,警察,军人等等,唯独曾经梦想过的就是成为一个可以写作给很多人看的人。如今作为一个程序员的我,过得也非常开心。我有一个非常理解我的女友,有一个非常支持我的家庭,有一份我觉得满意的工作,有一群我觉得可以托付的同伴,真的很难得。

理想很多的时候感觉像是奢侈品,可望而不可及。跟身边很多的人都聊过类似的问题,大部分人的第一反应是“哪儿来的理想啊?”,大家普遍都会谈到很多现实的问题,然后最终得出一个结论就是自己即便是有理想,那都是空想。其实从侧面来看,其实每个人都是有理想的,只是大家通常认为因为现实的各种压力,我们已经没有机会实现自己的理想了。当然我也不能免俗,我也经常这么认为,认为自己不可能实现理想,甚至都认为自己根本就没有理想。只是在随着社会大流,一步一步地走到今天,成为一个社会最基层的建设者,默默地在自己的岗位上发光发亮,兴许会被人发现,当做一颗璀璨明星,兴许就如此慢慢黯淡下来。

现实诚然如此,在成长的路上,我们看到了很多风景,总是梦想有一天自己也能如此享受此般美好,殊不知时间的美好就只有那么多,人人都想拥有,谈何容易。所以我们说要奋斗,只有奋斗才能改变自己的命运,才能让自己站到人生的塔尖,看到更多更美的风景。于是,就有了很多个奋斗之后享受成功喜悦的梦。我自己也有过这样的梦,很直接很直接的梦,梦想有一天自己所在的创业公司能上市,自己作为初创团队的一员,在公司上市之际直接晋升到塔尖。WTF,多美美妙的一刻啊,此时站在塔尖望着下面还在为我此时享受的这一刻奋斗的人们,多么的惬意啊。

成功变成了我们的梦,我们的理想呢?我想即便到了那一时刻,其实离我儿时唯一的理想还是很远,我完成了自己的一个期望也完成了一个作为家族长子所背负的期望。也许那个时候我也会很快乐,可是谁知道呢。

在喜讯创业已经3年有余了,成功的影子慢慢显现,但是能否最终成真没有人能说得清。只有靠自己的努力,靠一众兄弟姐妹们的努力,兴许可以成功。喜讯的成功是不是我的理想?我想在目前的阶段里,这肯定算是我的一个很重要的目标,但是远谈不上理想。创业成功对于有些人来说是理想,对于我而言是手段,这是我摆脱经济困境的唯一手段,我为此会付出所有我能付出的东西。获得成功能让自己获得经济自由,是否我就会开始寻找儿时的理想呢?其实我也不知道,儿时的理想如果真的有如此强烈的话,也许我现在已经开始朝着这个方向前进了,可是我没有。

所以有的时候我就在想,其实理想可能真的跟初恋很像。很刻骨铭心,但未必会是最终的相守,她永远会占据你内心的某个角落,偶尔还会跳出来给你带来一阵阵的瘙痒,让你阵阵地感怀。时间一过,所有一切如常。

也许我真的没有什么理想,有的还就是短时间之内的各种目标,结婚,生子,赚钱,养家,等等。坚持自己有一个理想,无非是想偶尔能让自己显得不是那么的俗不可耐,给自己脆弱而又自负的内心些许救赎性的安慰。告诉自己,这些丑陋的社会现实,这些完全不能理解我的人们,他们不知道我内心想要的是什么,我做不好这个事情其实是因为我的理想根本就不是做这个事情,我要做的是更美好更高尚的事情。多美好的理由啊,还是允许像我这般渺小的人类拥有如此可笑的理由吧。

放下那个远大而崇高的理想吧,回到地球上来,为现在能努力做到的事情多尽一份心,多出一点力,踏实走每一步路,也许哪天真的会跟那个理想再次重逢,就跟结婚多年以后与初恋重逢那种释然的感觉,两者相视而会心一笑。