专利申请流程小结

去年憋的一篇专利,到申请公布阶段了,算是去年研究区块链的副成果。https://patents.google.com/patent/CN110807211。整理下专利申请流程。

../../images/01C8BAF0-B9C7-4F08-9575-38AF85AC4F14.png

专利申请流程

主要流程如下图,来自网络。

../../images/7CA0DB1A-692F-481B-BFA3-987F503E1E39.png

技术成果生成

有可以申请专利的点,这个因人而异。基于点子,写个草稿。

申请专利

找一个专利代理,让他们提供专利稿的修改意见。反复迭代直到专利代理觉得没问题了。

之后专利代理会出具一份「专利申请受理通知书」,你再交点钱,可能还会有税费减免。

我遇到了专利代理看不大懂专利的情况,僵持了一段时间,后面换了一家顺畅好多。

专利申请公布

这个时间点叫做:申请公布日。

说明初审过了。实用新型和外观发明的话,直接就授权了,而发明还需要实质审查。

“初步审查合格后,实用新型和外观就直接授权了,而发明还要经过实质审查,检索国内外的资料,确认没有相同的才会授权,所以发明的含金量会高很多,因此发明专利审查的时间也会是比较长的,一般从申请到拿证书都需要2-3年,而实用、外观这两项专利一年能拿到。”

专利授权公告

这个时间点叫做:授权公告日。

说明正式审查完了。这时候才算是真正拥有专利。

Github pages重新开始:使用Hugo、Typora

重新开始GitHub pages

曾使用GitHub pages + jekyll 写过一段时间博客,没啥营养。

打算重新开始:

  1. 把我记录在Evernote和Typora中的资料迁移到GitHub pages上。
  2. 另外做一些Web形式的小工具,挂载在一个子目录里,方便平时使用。

Hugo + Typora

打算如下:

  1. Markdown文件还是使用Typora写。用过MWeb、Typora,Typora使用感受更好些(这么好用还不要钱)。
  2. Hugo作为静态网站生成,创建一个博客模板。

Hugo quickstart

# 安装hugo(其实是Go编译的二进制文件)
brew install hugo

# 创建site
hugo new site quickstart

# 通过git submodule的方式下载主题
git init
git submodule -b master add https://github.com/dillonzq/LoveIt themes/LoveIt

# 更新config.toml,配置主题参数,见loveit配置

# 创建博客,创建的posts在content目录下。文件格式为:content/<CATEGORY>/<FILE>.<FORMAT>
# hugo new 会采用 archetypes/default.md作为模板,把一些共性配置放在这个模板里吧。
hugo new posts/my-first-post.md

# 本地看blog效果,-D表示草稿状态的博客也显示
hugo server -D

# 生成静态网站到./public/,也可以指定目录
hugo -D

挑选了一个比较实用的主题 https://hugoloveit.com/

  1. 比较基本的posts, tags, categories
  2. 文章页面右边可显示文章的目录表

参考:

Hyper-V使用体验

Hyper-V 使用体验

Hyper-V是 Windows10 内置的虚拟机软件,没想到我会用到它。

为什么要用Hyper-V

  1. 需要使用虚拟机来模拟Kubernetes环境。
  2. Windows Docker依赖Hyper-V。貌似WSL2也是基于Hyper-V。应该是不会卸载Hyper-V了。
  3. Hyper-V与其他虚拟机软件(VirtualBox, VMWare)冲突,用不了其他的,只能用Hyper-V。
  4. Hyper-V与VirtualBox兼容的方案有没有。可能有,不想过于折腾了,那就不得不用。

Hyper-V好不好用

  1. 使用体验太差了,从Mac、从其他虚拟机使用过来,默认配置各种踩坑。
  2. 安装VM碰到DHCP超时的问题,反复试验无果,重启Windows后VM的DHCP不超时了。总结下,Windows上,如果怎么搞都搞不定,重启下可能就好了。WTF!
  3. 自带的NAT网络有点残疾,VM配置静态IP,网络就不通了。不像VirtualBox是开箱即用的。
  4. 最后借助网络上的零碎信息自定义了下NAT网络,各种神奇配置。
  5. Windows还是很屎,除了打游戏,开发体验跟我之前的体验一样糟。最后搞定花了我一天时间。要是用VMware/VirtualBox,可能在2个小时内就能搞定。总结,不好用。

Hyper-V 创建和克隆VM

创建VM

*.iso文件创建VM。

../../images/465F25A3-07A1-4DB7-90CE-FD02376D4C92.png

  1. 注意,Linux VM,不启用Windows Secure Boot。
  2. 更多选项里,设置VM的名称和交换机。
  3. 体验不好的地方:左上方的「选择操作系统」区域有长时间的加载过程,即使使用本地镜像文件也得等。

克隆VM

从硬盘文件创建VM。

../../images/03603F71-9B97-4ABC-8D1F-91F6CBB6602E.png

../../images/3C85F0B5-0763-468F-9ABC-2FC35AF20235.png

  1. 克隆是为了减少重复配置一些基础环境的工作量。
  2. 不像VirtualBox那样有直观的克隆按钮。摸索出的克隆功能是这样的:就是从VM硬盘创建VM。
  3. 建议先关机母体VM后,再基于母体VM的硬盘文件克隆。防止母体VM开机状态下一些更新并没有持久化到硬盘文件中。

Hyper-V NAT网络搭建总结

如果使用VMWare/VirtualBox的话,NAT网络是完全自动搭建的。

VMWare中有三种网络模式,Bridging、NAT、Host-only分别对应Hyper-V下的三种交换机,外部、内部、专用。

  1. Bridging:VM使用物理网络。GUEST VM与HOST相当于通过交换机连上一个网络(细节不确定)。
  2. NAT:VM使用虚拟网络,HOST同时连入物理网络和虚拟网络。VM出口流量都会通过HOST,使用HOST IP。
  3. Host-only:在NAT基础上,VM连不上外网,除非有路由设置。

默认的NAT网络

默认交换机支持NAT,但是瑕疵不少,无法满足工作需要。

使用Go Modules

Go Modules使用着感觉不错,Go终于有正常点的依赖管理工具了。记录一二。

使用小结

  1. go.mod, go.sum加入版本管理 Both go.mod and go.sum should be checked into version control.
  2. 直接依赖体现在go.mod,间接依赖由直接依赖自己管理,这是个递归的过程 Only direct dependencies are recorded in the go.mod file.
  3. go命令自动管理go.mod,这可太方便了 When it encounters an import of a package not provided by any module in go.mod, the go command automatically looks up the module containing that package and adds it to go.mod, using the latest version.
  4. 看着比之前的依赖管理好用很多。比如dep。因为网络下载包等问题,最后把依赖包全checkin到vendor目录了。太臃肿。

常用命令

  • go mod init creates a new module, initializing the go.mod file that describes it.
  • go build, go test, and other package-building commands add new dependencies to go.mod as needed.
  • go list -m all prints the current module’s dependencies.
  • go get changes the required version of a dependency (or adds a new dependency).
  • go mod tidy removes unused dependencies.

代理

国内网络的问题,加上下面这行就好很多了。

5G认识小结

去年11月尝鲜,买了个三星5G手机。找基站测5G速度成了刚买时候的乐趣。用了几个月,深感5G功能很鸡肋,5G基站太少。

这两天翻了好多知乎上关于5G的评论,对5G的概念、应用场景有了些厘清。

基本概念

  1. 5G,第五代移动通信技术。也就是5G的边界是移动通信网络。
  2. 5G的直接作用是提高了移动设备到基站的下载速率,能达到1G/s,也就是所谓的空口延迟低。
  3. 5G下载的速度上限还是光纤的下载速度上限。
  4. 5G的流量套餐应该不会便宜,除非国家出政策。为什么套餐不会便宜,这得看成本。5G的基站建设成本远比4G高。5G基站覆盖面积小,需要几倍于4G的基站,5G基站耗电成本也是几倍于4G基站。肥了设备商(华为中兴),苦了运营商(移动联通电信),最后还是消费者买单。
  5. 理论速度极可能跑不满。使用者多了,平均到每个终端,带宽就不够。现在我的4G速度好慢,完全没到理论速度。现在的矛盾不是需要更快的网络,而是更多的网络。
  6. 木桶效应,一个桶能装多少水由短板决定,以前的移动通信是短板,但是通过3G、4G到现在的5G的改善,已经成为长板了。运营商的承载网等配套也得扩容。不然5G的超高下载速率就是一个理论值。又是运营商的成本。

应用场景

大部分人的共识是,5G的杀手级应用仍在探索中。

什么样的场景,只有通过5G能够做到,而其他技术不行,这样的场景就是典型的5G应用场景。要找到技术的适用场景,不能生搬硬套。区块链也是这样一个典型。过滤那些“可以使用XXX技术,但是完全没必要”的场景。

媒体上关于5G的一些应用场景:

  1. 远程手术 —— 为什么不用光纤,可靠性更好。如果是边远山区不方便铺光纤,5G可能是好的替代。有总比没有好。
  2. 远程挖掘机 —— 微博上看到的,挖掘机通过5G联网,驾驶员在机房操控,安全性更高。
  3. 远程办公、远程上课 —— 这些光纤都能做到。对于山村里不方便通光纤的,是好事。但是山村里的困难是超乎我们想象的。看新闻,因为疫情不得不在家上课,几个小孩子共用一个手机,流量又贵,不舍得用。太难了。
  4. AR/VR —— 不看好。光纤,百兆宽带都这么普及了,AR/VR发展不好的根本原因应该是AR/VR本身吧,5G救不了ARVR。
  5. 无人驾驶 —— 不看好。移动通信中的延时一直保持很低很困难吧,比如短时间太多人/设备使用基站导致拥挤。可靠性太重要了,毕竟汽车是高速移动的,稍微的疏忽就是惨痛代价。

会不会带来下一个“移动互联网”

之所以大家对5G这么关注,就是在想,5G能否像3/4G一样带动下一个移动互联网(电商、O2O、移动支付、短视频、直播)。

先来看看移动互联网是怎么发展起来的。

  1. 苹果公司发布iPhone,智能手机的火种。
  2. 小米等一众国产品牌的低价策略,带来了智能手机的普及
  3. 国务院要求运营商资费下降。大家都用得起流量。
  4. 总结就是:智能手机普及 + 运营商资费下降。
  5. 其中智能手机,这是从无到有,从0到1的奇迹,颠覆了之前的所有手机。(好久没有让人激动的科技产品了,苹果的创新能力也是在备受质疑,因为大家期望太高了。)
  6. 其中运营商资费下降,这是国家权力。(知乎用户:钱都让互联网企业赚走了,通讯行业等同于修路。)

5G目前的作用仅限于加快了与基站之间的通信速度,假如说3G完成了从0到1,4G完成了从1到10,那么5G是从10到100吧。根据边际效应准则,后面的收益会越来越少。

很难看出能带来什么样的产业革命来。

5G的利益关系

利好:

  1. 5G基站厂商。华为为主。
  2. 国家层面。5G是国家战略,是政治正确。其一,靠专利技术薅世界羊毛,从国家角度是有利可图的。其二,带动产业发展,拉动GDP。
  3. 手机终端厂商。近年来手机上的创新的吸睛能力真不行,消费欲望降低。靠5G这个卖点,能赚一波眼球。
  4. 还有众多蹭5G话题流量的:广告公司、创业公司。

利坏:

  1. 三大运营商。基站投入是高成本的,为了发展5G生态,国家也会限制套餐费用,影响其收入。还好是国企。

参考:https://www.zhihu.com/question/342366514/answer/820922564

杂言

真正有颠覆性的,真正能突破人们想象力的,都在基础科学。比如材料科学,电池技术现在是瓶颈。离我很远。我做的事情真的对人类价值不大,只是个普通人,只能做到赚钱养家对家庭做贡献了。

Implicit:推荐系统协同过滤库的测评

简介

Implicit是一个推荐系统协同过滤库。所谓协同过滤,只用到了user、item的ID和user、item交互后的评分(或是某个度量)。

GitHub:https://github.com/benfred/implicit

安装

pip install implicit

其他选择

自己照着「推荐系统实战」里的基于物品推荐的相似度公式(类似关联分析中的Lift公式),也写了一个item-item recommender。

  1. 看推荐结果,自己写与implicit ALS有点差别,与implicit Cosine的结果差不多。
  2. 纯python,没有并行,没有用C/C++,果然很慢。
  3. 自己写一个的目的,除了练手,也想看看implicit的效果具体怎么样。
  4. 生产使用,不建议用自己手写的,水平真的有限。

Spark Mllib怎么样。

  1. Spark Mllib支持分布式,感觉没必要。本来Implicit单机就很强了。只要把数据导出来,导到训练机器上即可。
  2. Spark分布式,扩展性好,但是性能并没有Implicit那么好。
  3. Spark还得搭配HDFS,真的蛮重的,开发效率也没那么好。

背后的原理

今早根据作者文章Distance Metrics for Fun and Profit,整理了一份读后感,把之前的知识给梳理起来了。这篇文章主要介绍的是距离公式,用于K近邻的推荐算法。

协同过滤算法分两类:

  1. 基于记忆的,K近邻算法(基于“距离”公式),建议使用BM25。优势在读后感中有写。(实际效果怎么样,还得看数据)
  2. 基于模型的,矩阵分解算法,建议使用 (implicit) ALS,其变种是支持implicit dataset的。矩阵分解算法SGD,只适用于评分。

效果,见测评图。ALS的效果是最好的了。这是在movielens100k的结果。

../../images/3D66F424-97FD-4236-8A57-98111FAF65A7.png

看起来指标都很低,「推荐系统实战」里差不多这个结果。

../../images/FBC00415-D1AE-4F22-9B86-A0B070484ACF.png

遇到的小问题

  1. K近邻算法的model没有model.recommend_all方法。
  2. model.recommend与model.recommend_all的返回数据结构不同,model.recommend是包含评分的,而model.recommend_all只返回ID。
  3. recommend(0),传入第一个用户ID,与recommend_all[0],取出第一个用户ID,两者的结果是不一样的,不管用什么算法都一样!去年12月就有这样的issue:https://github.com/benfred/implicit/issues/299,我解决了,回复了这个issue。

猜想,因为recommend方法用到indices的原因?试着重新构建下user-item维度的sparse matrix。改完后,果然就一致了。技术原因,sparse matrix transpose后,indices是未转置前的indices,没有变化。 具体地,user_items.indices与item_users.T.indices是不同的。

../../images/159B8A3D-4238-401B-A4D3-61E086FF9F0B.png