笨鸟也能飞,我真的“开发”了一个第一个小程序

96
PUPPET黄志华
2018.07.24 17:50* 字数 3481

0.0 前言

世界很奇妙,在很久之前我曾经听到这样的一种观点——未来“编程”一定是每一个孩子的必修课。

这是惊人的,却也是自然的,但一直到2018年7月22日这一天,我第一次深刻的理解了这样一种“情绪”。前一天刚刚参加完PRESS.one的拓荒者社区线下活动,还带着很多思绪的我,来到了深圳的一个咖啡馆,这里今天会举行一次小型的“区块链项目编程学习”活动。


0.1 简单介绍一下

李大狗,这是一个专注投资的程序员,也是这次活动的组织者,如果一定要用一个形容词来描述这样一个迷之男人的话,他告诉我,那就是“帅”!

我是一个小白,虽然曾经试图学习过编程,但最终都放弃了,因为早期的那个枯燥基础过程太过痛苦,唯一的收获大概就是,编程的逻辑略知道一点点,而且大部分还是在罗辑思维的专利里学来的。


0.2 “类DAG式”教学模式

混迹在区块链的程序员的确有些不同的世界观,就连教学模式也会自带“去中心化”影子。

来到咖啡厅,坐下来后李大狗首先和我介绍了他的教学模式与理念,他画了一个图给我,就大概如下图。

我一看,这其实有点像DAG的模式,最上面的点其实就是他自己本身,比如说最开始第一节课他会教2个学生,然后第二次课的时候是可能产生新的学生加入,这个时候新加入的学生就不需要李大狗亲自重复教学,因为新来的几个学生仍然是先学第一节课的内容,那么已经学过第一节课的学生会以教学的方式“复习”上一节课的内容来教新来的学生。

这种模式对于新来的学生的好处是,仍然处于1对2的状态,而不会随着时间推移变成1对n的教学。对于上一层的学生来说,学过一次的知识,可以有一个“输出”的过程,这个过程直接就强化了记忆,并且增强自己的解决问题能力。如果真的遇到无法解决的问题,这时候可以继续往上层求助,这样有限的教学资源就可以得到充分的利用。

如果你了解过DAG技术,会意识到他们有些神似之处,比如说“确认”的速度(教学效率)非常快,并且随时可以增加新的成员,你甚至也不需要连续上课,一个月后回来继续上第二节课完全不影响进度,因为总有人已经学过了,重新适配一下就可以了。

DAG这个词很多人会陌生,这是一种常用数据结构,最著名的区块链项目就是IOTA、Byteball(字节雪球),然后Mixin网络也采用了这一技术。


DAG:Directed Acyclic Graph,中文意为「有向无环图」。

DAG原本是计算机领域一种常用数据结构,因为独特的拓扑结构所带来的优异特性,经常被用于处理动态规划、导航中寻求最短路径、数据压缩等多种算法场景。

技术细节这里就不细说,详情请阅读:一文看懂DAG技术的现状与趋势

更有趣的还是下图,这个是mixin网络在某一个高度看的结构图。

仅仅是一开始的这几句话教学说明,已经让我眼前一亮了,我磨刀霍霍的期待接下来的教学。


0.3 看懂一张图

首先第一步就是登陆mixin小程序注册地址:https://developers.mixin.one/dashboard

打开网页后用mixin app 扫码登陆(mixin拍照功能即可),然后点击Create New App,创建一个机器人。


然后会出现这个界面,其实明白这个界面的内容,已经可以做一个“快捷入口”小程序了。

咋一看,其实每一个文字说明都懂,但就是好像隔着一层玻璃一样,不知道如何去捅破。这也是为什么我要特意跑深圳来“拜师”,对于外行人来说,小程序地址这一栏就是一个不可逾越的鸿沟。

对于程序员来说理所当然的知道应该填什么,但对于完全空白的小白呢?

李大狗这样和我说的,他随口说了一句——你随便填一个网址就可以了...



我当时就楞了一下,马上就意识到一个问题,什么是小程序?什么是机器人?

固有的知识让我产生了错误的思考方式,网页是什么?网页本身也是在某些个服务器上运行的程序,Mixin的小程序接口为什么说是通用的,是开放的包容性极强的,直到那个时刻我才明白。

于是我填了一个常用的网址——www.baidu.com

第二个跳转地址也填了这个网址,付上简短说明与头像,创建成功。


我非常激动的打开mixin app,添加了我创建的第一个机器人,上面有我的署名,这种感觉难以描述,虽然这个小程序事实上仅仅只能打开...百度搜索页面。

创建的过程让我很兴奋,一口气创建了3个机器人。。。

这下面2个机器人仍然是一个“无用”的机器人,只不过在mixin里建了一个网页的快捷通道,但从某种角度来说,我仍然认为是有意义的,为什么呢?因为我希望在一个app里面完成谷歌搜索与登陆candy.one网站的操作,这样我不需要经常切换app,但很可惜微信的公众号内容不允许被“外链”,如果可以的话完全可以在mixin app 完成浏览特定情况下的微信公众号阅读。

比如说我准备仔细阅读某个大咖的一系列文章,但微信端需要聊天啊,就算是浮窗也不能避免干扰的问题,但在另外的app里,我就可以安静的阅读。


0.4 真正运行一个机器人

上面都只不过不需要编程的知识就可以完成的,但我们的目标当然还想更进一步,那就是真的运行一个机器人。

0.4.1配置开发环境

第一步就是给编程准备好一个可以“生长”的土壤,在我的电脑里配置开发环境。首先安装 Python 及其依赖包,然后再装 Pycharm 作为我们的 IDE(集成开发环境)。

因为我用的是MAC的系统,所以有个非常方便的工具可以直接使用——终端。

首先在终端里输入如下命令,确认本机中存在 Python3 :

python3 —version

(Windows用户需要自己搜索 Python3 下载安装)

不出意外我没有安装Python3,所以执行了以下命令安装 Brew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

(当把上面这段代码输入到终端之后,回车,程序就会自动执行安装Brew的操作,可以看到屏幕噼里啪啦的一直跳动信息并且会出现如下载进度条等信息)

然后再用 Brew 安装 Python3:

brew install python3

Python3 安装完毕后,用浏览器打开这个地址:

https://github.com/albertschr/Mixin_EOS_Player

因为其他方式比较麻烦,我直接点击绿色的 Clone or download > Download ZIP 下载,把这个“库”给下载到电脑里。

下载完成后,在终端通过cd命令进入到 mixin_mini文件夹里面。

cd Mixin_EOS_P1_Player/mixin_mini


在这里需要快速掌握几个基础命令:

1, pwd  #显示当前目录的路径(让你实时查看当前所处的路径) 

2,ls -la  #显示所有文件

3,ls       #显示在当前目录下的所有文件或文件夹

4, cd+空格+目录路径    #进入某一目录     

为了方便,放上来一个常用命令的链接:MAC常用终端命令

进入到mixin_mini文件夹后,Mac 用户和 Ubuntu 用户执行如下命令:

sudo pip3 install -r requirements.txt

Windows用户执行如下命令:

pip install -r requirements.txt


0.4.2 安装配置 Pycharm

通过如下网址进行 Pycharm 的下载,里面提供了免费的社区版和收费的 Pro版,因为只是刚刚接触,先用着免费版本试试。

https://www.jetbrains.com/pycharm/download/

通过 Pycharm > Preference > Project > Project Interpreter 打开解释器设置界面,将项目解释器选择为刚才安装的那个 Python(不是新建虚拟环境!) 。

这部分内容比较简单,略过就好了,编译器有很多种,功能也差不多。

0.4.3 配置最小可用版本的MiXin机器人

详细的教程在这里:搭建「最小可用版本」机器人 | 大狗教你Mixin开发(二)

打开一个已经做好的机器人模板之后,最重要的仍然是看懂一张图

#=====需要修改的参数=========

mixin_client_id = ""

mixin_client_secret = ""

mixin_pay_pin = ""

mixin_pay_sessionid = ""

mixin_pin_token=""

private_key = ""

以上是6个需要修改的参数,找到代码里面的这6条,把自己创建的mixin机器人对应的参数复制进去就可以了。

进入之前那个页面,只需要点击,就会显示出用来修改我们机器人参数的信息了。

然后配置完成机器人,我们的机器人就可以运行了,点击Pycharm右上角的绿色三角符号“运行”。

在这个时候,机器人只能简单的完成一个动作,就是当你对机器人回复“hello”的时候,机器人会自动回复你一句“world”。当然仅仅如此我是不满足的,所以我直接复制了指导我的“师兄”已经编辑好的一段条件语句,然后进行修改。

#我修改了以下内容,主要就是为除了“hello”之外的关键词回复,就像公众号的自动回复一样一样。

if realData == "hello":

            btn = "可以说中文吗?".encode('utf-8')

            params = {"conversation_id": data['conversation_id'], "recipient_id": data['user_id'],

                      "message_id": str(uuid.uuid4()), "category": "PLAIN_TEXT",

                      "data": base64.b64encode(btn).decode('utf-8')}

            writeMessage(ws, "CREATE_MESSAGE", params)

        elif realData == "你好":

            btn = "可以说英文吗?".encode('utf-8')

            params = {"conversation_id": data['conversation_id'], "recipient_id": data['user_id'],

                      "message_id": str(uuid.uuid4()), "category": "PLAIN_TEXT",

                      "data": base64.b64encode(btn).decode('utf-8')}

            writeMessage(ws, "CREATE_MESSAGE", params)

        elif realData == "你是谁":

            btn = "奥特曼~ 了解一下".encode('utf-8')

            params = {"conversation_id": data['conversation_id'], "recipient_id": data['user_id'],

                      "message_id": str(uuid.uuid4()), "category": "PLAIN_TEXT",

                      "data": base64.b64encode(btn).decode('utf-8')}

            writeMessage(ws, "CREATE_MESSAGE", params)

        else:

            btn = "你真棒!".encode('utf-8')    #其他情况下回复#

            params = {"conversation_id": data['conversation_id'], "recipient_id": data['user_id'],

                      "message_id": str(uuid.uuid4()), "category": "PLAIN_TEXT",

                      "data": base64.b64encode(btn).decode('utf-8')}

            writeMessage(ws, "CREATE_MESSAGE", params)

附一个语法等说明:Python 基础教程

如果能够理解上图,那么这部分编程就非常简单,事实上编程不需要完全理解每一个单词符号的意思就可以开始了,更多的时候先“抄代码”,成功运行了之后慢慢再去了解,效率更高。

所以编程的唯一障碍就是“逻辑关系”,也就是说思维更重要,死记硬背是无效的,这一次仅仅是那么简单的编程深度,就让我成功跑起来一个机器人,甚至可以接入到区块链应用当中运行,这种感觉,也许只有真的做一遍才能体会。


0.5 结语

那么下一步,我要做什么呢?一个是把机器人搬到云服务器上运行,因为只要我关机或者把程序关闭了,在mixin回复机器人什么内容都不会有反应,所以需要一个可以24小时在线的环境。

再之后,我可能会研究一下如何把别人已经做好的开源AI聊天机器人代码放到我的程序里,可以理解为接入一个聊天库,这样这个机器人可以做更多的事情。

如果还有时间的话,我也会想着,怎么发送图片、视频、GIF这些东西,当然路还很长哈。



日记本
Web note ad 1