金马的Blog

我喜欢折腾

如何使用 PhpStorm 查看类的继承关系

今天一个同事教了我一个很有用的小技巧,通过 PhpStorm 查看类的集成关系。

场景是这样的,我使用 Guzzle 要调用一些 api,api 出错了我需要处理 Exception,这个时候我肯定会看一下 Guzzle 的文档,不过看文档稍微有点繁琐,如果你使用 PhpStorm,有更简单的办法:

第一步:选中 Guzzle 的 Exception 文件夹

file

第二步:选中 Show Diagram

file

结果:

file

是不是很神奇? 这个时候,我大概 Catch RequestException 来处理一下比较合理。

感谢郭师傅。

如何使用网易云信实现匿名聊天

手机端的 APP 如果嵌入了 IM 模块,比如网易云信(环信),这些第三方的服务都有自己的账户系统,也是需要注册登录。

现在有这么一个需求:如何实现匿名聊天?同时要实现实名聊天。

需求可以简单理解为:相同的用户 A 和 B,需要有三个会话,一个是实名的聊天,一个是 A 匿名 B 实名的聊天,一个是 A 实名 B 匿名的聊天。

咋一看好像没什么难度,直接使用云信提供的 SDK 来做就可以吧,但是这里的一个问题是:

云信提供的移动端 SDK(Android 和 iOS)有自己的一套会话系统,这个会话系统里面,每两个人都只能有一个会话,怎么办?

开始的时候,和移动端工程师商量:

  1. 是否可以使用群聊来做?每个匿名聊天会话会创建一个群聊,然后在显示层面来隐藏匿名用户。后来发现这样做是有问题的,因为每个人可以创建的群聊个数是有限制的。
  2. 抛弃云信 SDK 的会话实现方法,重新实现会话,但这势必要修改移动端上面聊天会话的数据存储(sqlite),需要自己维护一套会话。这个方案我们只使用云信进行收发消息。

后来选择了方案2,虽然移动端花了比较多的时间,但是最终实现了自己的会话,并且完成了匿名聊天。

给大家一个思路,供大家参考。

如果修改 Git 的倒数第二个提交

我们都知道 Git Commit 的最后一个提交可以修改:

$ git commit —amend

使用 Gerrit 过程中有这样的需求,如果想修改倒数第二个提交该怎么办?

可以使用 rebase -i 来操作:

  1. git rebase -i HEAD~2

  2. 修改倒数第二个提交为:edit,保存退出

rebase edit

  1. rebase 会停在倒数第二个提交,此时你可以修改代码。

  2. 修改完,执行 git commit —amend(此时此刻,最后一个提交时倒数第二个提交)

  3. git rebase —continue

我希望程序员有这样的品质:搞定任何影响你效率的工具

鉴于程序员使用的很多工具都比较难用,实际情况是,你又没有替代品,遇到这样的问题怎么办?没办法,你只能硬着头皮搞定这些工具,事实上,你并不需要太多时间来搞定它。

  • 如果你已经因为 Git 的操作请教了别人两次,你是不是有责任花几个小时来好好熟悉下 Git 的原理,Git 的命令?
  • 如果你每次因为几个 Linux 命令卡住,影响你的效率,你是不是需要花几个小时好好熟悉下 Linux?
  • 如果你因为 vi 的使用恼火了很多次后(虽然你不喜欢 vi),你是不是也需要花一两个小时来熟悉下 vi ?这会影响你的效率。

珍惜自己的时间,珍惜别人的时间。

你对 Redis 有清晰的定位吗?

最近发现几个同事对 Redis 理解不准确,和他们沟通后,发现他们对缓存和 NoSQL 数据库的概念理解有问题,所以我解释一下我对 Redis 的理解。

  1. Redis 可以做 NoSQL 数据库,也可以做缓存。
  2. 如果把 Redis 当 NoSQL 用,maxmemory-policy 要设置为 noeviction,因为你当做数据库使用,不能再内存不够的时候把之前的数据扔掉。
  3. 如果把 Redis 当缓存使用,maxmemory-policy 要设置为会扔掉数据的选项,比如 volatile-lru (Remove the key with an expire set using an LRU algorithm)
  4. 因为两种使用方式下,maxmemory-policy 的不同,Redis 当做 NoSQL 或者缓存,需要分开存放,不能放在一起。
  5. 如果 Redis 当缓存在使用,Redis 的实际内存占用可以达到最大内存占用,不用太担心,这和当做 NoSQL 是完全不一样的,NoSQL 的话,需要做好内存的报警和提醒。

就这么多吧。

网易云信在阿里云服务器上无法发送大消息

网易云信已经上线,用了一段时间发现了一个严重的问题。

  1. 服务器端通过 Api 来发送消息的时候,只要消息超过一个大小,curl 就超时,HTTP 的 Response 没有任何的返回

  2. 在本地的几个服务器上使用没有上面的问题。

  3. 服务器上使用 tcpdump 发现在发送大的消息的时候,总会出现丢包重试的情况。

折腾了一段时间,确定是阿里云服务器的原因,就联系了阿里云的工程师进行联调,最后发现减小 MTU 的值可以解决上述问题。

一般 MTU 的默认值是 1500,当我们修改为 1360 的时候,就可以正常发送消息了。

分析待续。

最近一段时间使用网易云信 IM 的总结

IM 在很多应用里面都是必须的,尤其是社交类应用,但是如果你自己开发 IM 就会遇见各样的坑,所以很多公司都使用了第三方的 IM 服务,你可以听说过环信,融云,云信等等,公司之前的应用”一起“使用的环信,现在公司选用的是网易云信。

环信的优点是便宜,整体来说他的免费额度已经够你使用。但是当时时候的时候也遇见了几个比较严重的问题,比如丢消息的问题,解决了比较久仍然存在;比如 Server 端 API 很多功能不支持,竟然不能通过 API 来设置群聊的消息配置(接收且提醒,接收不提醒,不接受),以至于我们为了修改默认的群聊消息配置,不得不在客户端做一些恶心的操作;比如透传功能会影响消息功能,当时做了一个功能使用透传比较频繁,但是群聊的消息竟然被影响了,最后不得不去掉了透传。

最近开始使用网易云信,网易云信的第一个特点就是:

免费额度只可以注册100人,注册满了100人就不能再新注册用户了,所以使用网易云信的免费额度机会不能做什么,调试一会就会消耗完免费额度。

下面我开始吐槽一下网易云信吧:

  1. 网易云信的后台难用的要哭,充值需要你转账到银行账号,然后销售人员给你修改订单状态,感觉回到了10年前。
  2. 网易云信的后台无法看到 IM 已注册的用户,除了手动注册的用户。
  3. 充值的时候,在各个活跃档位都有强制的金额,只要你充值,至少要充值4万,这不是坑爹吗?

最后说一下网易云信的优点吧:

  1. 有个”消息抄送“的功能我很喜欢,所有发送的消息都可以抄送到你指定的地址,通过这个功能可以保证兼容老版本。
  2. 技术支持同学们都比较靠谱,回复的比较及时,总体比较专业。
  3. 暂时测试服务器用户量比较少,没遇见丢消息等问题。

所以,如果你的公司有一定的经济能力,可以尝试使用网易云信,等网易云信聊天上线后,我再发一篇文章分析一下云信的情况,看会不会有坑。

拥着她

早晨,我会被楼上的鸟吵醒。

看着熟睡的花,我轻轻的侧身过去,拥着她,手放在她的皮肤上,像火一样暖,像水一样柔。

她轻轻的鼾声打在我的脸上,均匀细腻,可以闻到她懒懒的味道。

天蒙蒙亮,但仍然可以看清楚花平静的脸庞。

我的注视竟然吵醒了她。

她微微的一笑,我的心就化了。

新生大学 APP 使用感受

今天是李笑来老师团队开发的“新生大学” APP 发布的第一天,激动的使用 TestFlight 下载了测试版本。

Logo 中规中矩,不丑,但不能很好和“新生大学”联系起来。

主要包括四个模块:文章,聊天,发现,我

  • “文章”里面是所有发布的文章。
  • “聊天”里面包括私聊和群聊。
  • “发现”里面主要是朋友圈功能,与微信不一样的是,这里每个人都是朋友,所以朋友圈所有人都能看到。
  • “我”里面包括我的通讯录、名片、文章还有设置等。

整个 App 比较简单直接,已经完全可以满足写文章、阅读文章、交流等主要的几个功能,所以和我期待的 App 差距不大,比较担忧的是,想把朋友圈和聊天做得像微信那么流畅,确实不是一件容易的事情。

我的思考:

  1. 朋友圈是一种基于时间流的信息渠道,信息不会因为是否有价值而被置顶。
  2. 现在还不能发布文章,但我感觉文章应该类似 Hacker News 那种,可以把好的内容顶起来,总会有一个机制筛选出好的文章。
  3. 因为成员都交费2000多,所以经过这样一个价格的筛选,这里的朋友圈的价值会更大,会有更多有价值的内容被分享出来。
  4. 如果有好的文章,可以瞬间有1900(因为暂时只有 iOS 版本,将来会更多)多人看到,真的可以很快就传播给大量的有一定分辨能力的人们。
  5. 这里从一开始所有人都是实名的,有了这样一个基础,成员之间可以有更真实的了解,然后就可以擦出更多的火花、更多的 Serendipit,因为毕竟“真诚”在社交中是非常珍贵的。

当然,App 现在还是有比较多的Bug,我边用边测,边测边提交 Bug,差不多提交了10个左右的 Bug,其中有几个还是比较严重,期待情非得已的团队可以尽快修复,辛苦你们啦。

希望可以在这个“大学”里面,做一名认真的新生,行动起来吧,少年。

2016-03-02 21:48:06更新:

  1. 今天在“共同成长”群里面听到笑来老师说“共同成长”群会使用另外一个全新的 App,所以我猜测情非得已公司应该在做社群 APP 的 SAAS,每一个群组会开发一个独立的 App,不过这个仅仅是我的猜测。
  2. 将来任何一个想做群组的人都可以使用这套方案,修改 Logo 等资源,然后就可以做出来独一无二的社群 App。
  3. “新生大学”的程序员们效率还是很高的,今天就更新了一个版本,解决了一些严重的 Bug,比如点击消息提醒崩溃的问题,但是群聊的消息依然很卡顿,经常出现消息丢失、消息错乱等问题。
  4. 一个数字,按照笑来老师公布的数据,“新生大学”的报名人数是2500人左右,现在有iOS 版本有1925人(可能一部分使用 iPad),通过这个数据,大约可以算出“新生大学”成员 中 iPhone 的使用比例占到了 1900/2500 = 75%。

我的一些小幻想

我经常会有一些小的幻想,如果这些小幻想能变成事实,真的可以改变世界。

1. 充电秋裤(秋衣)

在南方的北方人都会有这样的感受:冬天太难熬了,阴冷的空气常常会刺透你的肌肉,直达骨髓。所以我就幻想能有一种可以充电的秋裤,这个秋裤有如下的特征:

  • 这个秋裤是柔软的,而不是绑着电热片。
  • 这个秋裤的材质类似电热毯;
  • 秋裤里面可以有柔软的电线;
  • 为了保证安全,秋裤是充电的,不是直流电。

如果真的有了这样的秋衣秋裤,白天上班的时候我可以给秋衣秋裤充电,晚上回来穿上这样的秋衣秋裤,家里甚至不再需要开空调,不再需要其他的加热设备,因为我的衣服是热的,我完全可以抵挡冷空气进入我的骨髓,这样我深夜看书就不怕身体的某些地方被冻僵硬了。

在市面上搜索了一下,还没有类似的产品,只有绑着电热片的裤子,不太适合我的需求,我觉得这样的产品很快就会出现,哈哈。

2. 男性自动理发机

每次去理发店我都会想念这样的一个机器。

每个男人的发型差不多都是固定的,所以我非常希望能有一种自动理发机,这种理发机可以做这么几件事情:

可以自动保存你的发型,包括你头发的每个区域的长度。 可以根据保存的发型进行自动剪发。

如果有这样的机器,不仅仅可以低成本理发,更重要的是发型设计就很简单了。

暂时还没发现有人在做这样的机器。