拼音学习的一些尝试

儿子学习拼音一直比较吃力,一个原因是小时候很多音发音不准导致无法正确的读出音,例如q、x、b、p、g、d等这些音,经多方咨询后在成都市天使儿童医院语音纠正一段时间以后有较大的改善。第二个原因是自身上课注意力不集中,课后没有抓紧复习,家长没有施加太大的压力,最终导致拼音一塌糊涂,基本上注音练习错误率在60%以上。

后来想用数字化的方式来帮忙做练习,做了一些尝试,但均宣告失败。有一些技术上的问题尚待解决,有一些是流程设计不太合理,还有电脑、手机的交互方式不是太方便,不熟悉键盘,满屏幕找字母很麻烦,也分散注意力。到最后还是采取了人工用字典目录听写的方式,找到薄弱的环节,然后强化巩固。经过一段时间的坚持练习,拼音有了一些进步,很多常见的错误也得以修正。

在做前期的尝试中,倒是也发现了一些有趣的东西。

第一个尝试:拼音测试

地址:https://github.com/derekhe/pinyin-test
这是一个Web程序,可以随机的出题,然后选择声母韵母进行组合选择,点击声母和韵母的时候还可以听到对应的发音。通过查看这种方式期望能够尽快的搞明白拼音的组合。

发音资源来源

  • 拼音声母和韵母的发音。忘了当时哪里下载的一个资源了,反正放到了MP3目录中,需要的自取
  • 整体拼音的发音,连带音调。经过一番查找,发现百度汉语提供了所有汉字的发音。例如“贺”字,通过观察URL可以知道是https://appcdn.fanyi.baidu.com/zhdict/mp3/he4.mp3,是声母韵母的组合加上音调。

出题

解决了两个资源来源的问题,下一步就是下载下来以及如何出题。
出题的方式比较简单,通过随机的组合声母韵母,通过是否能够下载对应拼音的MP3即可知道拼音是否合法。

选择Web的解决方案相对比较简单,能够在多系统运行。界面方面想采用Vue来进行书写,其实React也是OK的,只是想练练手。逻辑比较简单,看下源代码就明白。

麻烦的事情是这个东西如果放到iPad上面运行,就会出现Safari内核播放音频延迟的问题,而且暂时无法解决。问题表现为点击后半天没有声音,非常影响用户体验。由于iPad上面的所有浏览器都是基于Safari的内核的,所以换成Chrome也无法解决。如果放到电脑上或者手机上就可以了。电脑鼠标或者触摸板用起来不是太方便,大部分时候都消耗到移动、点击上面了;手机上屏幕太小,点击又不是太方便。

试过一段时间后发现钥匙把所有拼音的声母韵母都放到屏幕上,只能到iPad这样的大屏幕上,而其固有的问题还是让我最终放弃了。

为了不做个App用呢?iOS开发暂时不会啊,而且没有证书无法部署。

第二个尝试:听音写拼音

到二年级了,拼音还是不行,注音练习也是没有太大的用处,每次错每次改,每次改完下次还是错,比训练人工神经网络还要麻烦。后来发现听写拼音,不断的练习应该能够解决问题,并且最好在无人监督的情况下也能自己去做,知道对错。这次我就不想在iPad上面开发了,直接用Python写。

地址:https://github.com/derekhe/pinyin-practice

这次想做一个简单的程序,就是读音,然后拼写,电脑判断错误。

那么是否之前找的资源可以直接用呢?并不完全是。

发音资源

有一个典型的问题是有些拼音出现的次数很少,可以忽略,比如chua这种。所以最终找到了一份小学生所有的汉字的列表,通过列表来找到所有的拼音,这样6年级所有的字的拼音就出来了。

上次用的资源我发现语音质量并不是很好,经常有发音很短促,无法听清的情况,还有一些错误的发音。最后对比了一下,使用了google translate的TTS语音合成的。这个有一个比较好的事情是可以任意组合,并且有一个选项可以生成缓慢的发音,这样更容易听清。生成的文件下载为MP3格式保存

Python发音

我之前以为万能的Python应该不会太难,哪知道几个现成的库都不好用,有一个win32接口的库很直接,但win10下面直接报错。最后找到了个稳定的方案,使用pygame。

def play_mp3(pinyinfile):
pygame.mixer.music.load(pinyinfile)
pygame.mixer.music.play(0)
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(1)

其他的就是一些逻辑处理了。

最后

根据儿子的反馈,他说不想重复的做一些已经熟悉的没问题的拼音,第二依然是键盘输入的问题,由于键盘都是大写字母,需要很费脑子转换,找键位眼睛都看花了。
考虑到需求越来越复杂,性价比比较低,最终还是亲自上手,在本子上做每天20分钟拼音练习解决问题。

新3D打印机到货Creality Ender 5

15年的时候,脑袋一热,买了一个3D打印机。当时没有了解清楚情况,误买了杭州铭展网络科技的MBot3D Cube打印机。以为是个MakerBot 3D的打印机。后来研究了一些时间,写了3D打印及技巧以及20天3D打印总结

打印机很贵,多年来一直备受老婆鄙视,一直说这玩意儿是买的最不值的东西。确实也是,因为好几年都基本在吃灰,总共打印时间也就200个小时左右。究其原因,有以下几点:

  • 打印材料不好,机器没有热床,ABS无法打印,PLA打印的质量很差,稍微大型点的图形就翘边,打印失败率很高。
  • 材料容易断丝,还是PLA本身的问题。之前买过“三绿国维”、“天威”、甚至铭展原厂的耗材,都打印质量不好。
  • 机器的刚性不行,木质的结构晃动比较大。皮带松动,结构垂直度容易受到影响,导致打印的图形失真。比如打印的圆不是圆形。XY方向最为严重,买来不久就觉得是直线轴承出了问题,卡卡卡的响。后来自己动脑经调节了一下,但越调越乱,从上方看XY都不是垂直的。后来XY轴的塑料卡板久了出现了断裂,情形更加严重,直到最后卡皮带的卡板直接断掉。19年,厂商找了很久从库房里面找到了个塑料卡板,也算是进了ICU急救了。
  • XY出现波浪,即便打印速度降到50mm/s依然还是比较严重。
  • XY轴的丝杆似乎已经弯了,导致调平后,整个打印平面还是一个曲面,导致底板经常被烫伤。
  • 软件支持受限。15年的时候3D打印机的切片软件还不是很好,Cura这种开源的切片软件还很初级,原厂的切片软件用起来也很差劲。18年到19年,慢慢的用到了Simplify3D等切片软件,也慢慢的把新的Cura软件给配置好了,也总算能够用上新的切片软件。
  • 底板用的是蓝色美纹胶打印,经常会连着美纹胶一起拉起来。

19年喜欢上了RC遥控车,想做一些3D打印的部件,把打印机做了一些改造升级。比如加上了晶格玻璃、DIY了热床,更换了所有的轴承,加上了皮带的弹簧,线材选用了eSUN的PLA+材料,总算解决了一部分问题。但丝杠等部件的硬伤,没有精力去弄了。经过这次维修以后,打印的质量勉强可以接受。最主要的提升在于PLA+材料,解决了断丝、PLA脆的问题。

DIY热床安装,买了个热板,一个明伟12V 20A的电源,一个数字温控

安装热板:

这种平台很容易粘住底层的打印线或者大型的模型而取不下来,可能是质量不行:

20年由于2月份宅在家,准备弄点遥控车的车壳。打印出来一份,学了一些打磨模型,但打印的效果很差,需要打磨很久,很浪费时间。左看右看各种打印机维修的视频,想到还是买一个新的打印机算了。想想买一个打印机又要好几千,这次没有之前那么冲动,各种看youtube视频,最后看到很多老外都在用创想三维的Ender系列的打印机,一看价格还比较便宜,非常的心动。

正在打印中:

成型,可见很多的震荡纹路:

成型:

打印车壳:


运动相机支架:

3月初,打印机搞活动(其实春节就在搞活动,只是物流受到了很大的影响),Ender 3只要1000出头,Ender 5也只要1669。Ender 5还有一个Ender 5 Pro系列,有更多的升级件,只不过价格到了2499,贵了很多。再回头看看老外的评测,Ender 3只要一些少许的改造,就可以打印的很好,Ender 5的结构更好。所以就买了Ender 5。

Ender 5需要自己组装,其实很简单,几颗螺丝装好,几根线插好就可以用了。





调平还是需要手动的调平。但比之前的打印机好的是Z轴零点的位置波动比较小,就不会每次都要去调平。以前的机器Z轴的零点偏差很大,每次都要调平,非常的麻烦。XY轴花了几块钱买了个T-Smoother,据说可以有效的改善移动时候产生的波动。测试几个块块打印出来确实不错。整个机器的滑动结构采用了铝材加上V形的导轮,默认打印速度80mm/s的情况下,移动起来声音非常小,大部分的声音来自于电机的声音。上到120mm/s的时候,在中间附近会有一些共振类似的声响。但比较小的模型来说80和120的差距不大。

最后打印了一个经典的测试,在这个价位上,整体非常满意,对比之前的打印机有了本质的提升。至于底板还暂时用的原装的底板,粘性还是不错,等过段时间用旧了以后换用晶格玻璃。





国内机票历史价格数据库

简介

该数据库包含从2017年1月1日至今,国内2千多条直飞航线的出发前90天内的历史价格信息,具有包含价格历史长、连续性高、密度高、价格数据准确等特点。数据来源于互联网公开可查询数据,可用于科研、价格预测、出行优化等各种领域。

相关应用文章:

联系方式:微信号bcdata

数据详情

数据量

注:以下统计数据从2017年1月1日至2019年10月1日,共计1003天进行计算。

低频数据

低频数据收集每日下午2点附近的机票价格,数据库中总共包含1025159650(10亿)条数据。平均每天1025159(一百万)条数据。

高频数据

高频数据采取连续收集,每日采集从10次到20次不等,数据量大约为低频数据的10到20倍不等,约100亿到200亿条数据。平均每天一千万左右。高频数据可以看到每日不同时刻价格的变化,可以更加深入的分析。

字段

数据包含以下字段:

字段 解释
departdate 起飞日期
departtime 起飞时间
arrivetime 到达时间
crawldate 采集日期。2019年1月13日前包含起飞前45天内的价格信息,之后包含起飞前90天的价格信息
flightno 航班号
sharedflightno 共享航班号
departcity 出发机场三字码
departtower 出发航站楼
arrivecity 到达机场三字码
arrivetower 到达航站楼
discount 折扣价格
price 经济舱最低价格信息

样例数据

  • 2017年1月1日起飞的CA4305航班数据,通过crawldate可以看到距离起飞前若干天的机票变化情况(未排序)。例如第一条2016年12月29日,就是起飞前3天的价格数据,不含税为1020元,折扣为7.1折;同理第二条为起飞前5天的价格数据,为540元,3.8折。
index,departdate,departtime,arrivetime,crawldate,flightno,sharedflightno,departcity,departtower,arrivecity,arrivetower,discount,price
0,2017-01-01,07:30:00,09:55:00,2016-12-29,CA4305,,CTU,T2,CAN,,71,1020
1,2017-01-01,07:30:00,09:55:00,2016-12-27,CA4305,,CTU,T2,CAN,,38,540
2,2017-01-01,07:30:00,09:55:00,2016-12-31,CA4305,,CTU,T2,CAN,,68,970
3,2017-01-01,07:30:00,09:55:00,2016-12-26,CA4305,,CTU,T2,CAN,,38,540
4,2017-01-01,07:30:00,09:55:00,2016-12-30,CA4305,,CTU,T2,CAN,,68,970
5,2017-01-01,07:30:00,09:55:00,2016-12-25,CA4305,,CTU,T2,CAN,,38,540
6,2017-01-01,07:30:00,09:55:00,2016-12-24,CA4305,,CTU,T2,CAN,,38,540
7,2017-01-01,07:30:00,09:55:00,2016-12-23,CA4305,,CTU,T2,CAN,,38,540
8,2017-01-01,07:30:00,09:55:00,2016-12-22,CA4305,,CTU,T2,CAN,,38,540
9,2017-01-01,07:30:00,09:55:00,2016-12-28,CA4305,,CTU,T2,CAN,,38,540
10,2017-01-01,07:30:00,09:55:00,2016-12-21,CA4305,,CTU,T2,CAN,,38,540
11,2017-01-01,07:30:00,09:55:00,2016-12-20,CA4305,,CTU,T2,CAN,,38,540
12,2017-01-01,07:30:00,09:55:00,2016-12-17,CA4305,,CTU,T2,CAN,,38,540
13,2017-01-01,07:30:00,09:55:00,2016-12-18,CA4305,,CTU,T2,CAN,,38,540
14,2017-01-01,07:30:00,09:55:00,2016-12-16,CA4305,,CTU,T2,CAN,,38,540
15,2017-01-01,07:30:00,09:55:00,2016-12-19,CA4305,,CTU,T2,CAN,,38,540
16,2017-01-01,07:30:00,09:55:00,2016-12-13,CA4305,,CTU,T2,CAN,,38,540
17,2017-01-01,07:30:00,09:55:00,2016-12-12,CA4305,,CTU,T2,CAN,,38,540
18,2017-01-01,07:30:00,09:55:00,2016-12-11,CA4305,,CTU,T2,CAN,,38,540
19,2017-01-01,07:30:00,09:55:00,2016-12-15,CA4305,,CTU,T2,CAN,,45,640
20,2017-01-01,07:30:00,09:55:00,2016-12-14,CA4305,,CTU,T2,CAN,,38,540
21,2017-01-01,07:30:00,09:55:00,2016-12-10,CA4305,,CTU,T2,CAN,,38,540
22,2017-01-01,07:30:00,09:55:00,2016-12-09,CA4305,,CTU,T2,CAN,,38,540
23,2017-01-01,07:30:00,09:55:00,2016-12-07,CA4305,,CTU,T2,CAN,,30,430
24,2017-01-01,07:30:00,09:55:00,2016-12-08,CA4305,,CTU,T2,CAN,,38,540
25,2017-01-01,07:30:00,09:55:00,2016-12-06,CA4305,,CTU,T2,CAN,,30,430
26,2017-01-01,07:30:00,09:55:00,2016-12-04,CA4305,,CTU,T2,CAN,,38,550
27,2017-01-01,07:30:00,09:55:00,2016-12-05,CA4305,,CTU,T2,CAN,,38,540
28,2017-01-01,07:30:00,09:55:00,2016-12-03,CA4305,,CTU,T2,CAN,,38,548
29,2017-01-01,07:30:00,09:55:00,2016-12-02,CA4305,,CTU,T2,CAN,,38,540
30,2017-01-01,07:30:00,09:55:00,2016-12-01,CA4305,,CTU,T2,CAN,,38,540
31,2017-01-01,07:30:00,09:55:00,2016-11-30,CA4305,,CTU,T2,CAN,,38,540
32,2017-01-01,07:30:00,09:55:00,2016-11-29,CA4305,,CTU,T2,CAN,,38,540
33,2017-01-01,07:30:00,09:55:00,2016-11-27,CA4305,,CTU,T2,CAN,,38,540
34,2017-01-01,07:30:00,09:55:00,2016-11-26,CA4305,,CTU,T2,CAN,,38,540
35,2017-01-01,07:30:00,09:55:00,2016-11-25,CA4305,,CTU,T2,CAN,,38,540
36,2017-01-01,07:30:00,09:55:00,2016-11-28,CA4305,,CTU,T2,CAN,,38,540
37,2017-01-01,07:30:00,09:55:00,2016-11-23,CA4305,,CTU,T2,CAN,,40,570
38,2017-01-01,07:30:00,09:55:00,2016-11-22,CA4305,,CTU,T2,CAN,,40,570
39,2017-01-01,07:30:00,09:55:00,2016-11-24,CA4305,,CTU,T2,CAN,,38,540

玩遥控车(一)——小时的记忆

四驱小子这个动画片,我想大多数80年代出生的人都有看过,也或多或少的买过那种装电池、一开开关就跑、只能通过转向轮转向的四驱车。我还记得小时候玩这种四驱车的时候,买过很多的干电池,学会了如何给干电池充电(你没看错,确实是可以的),还去外面找卖烟的叔叔阿姨给我烟盒的包装,用来粘贴轨道。当然这些烟盒实在是太软了,精度也差,稍微跑快一点就卡死要不就撞坏。小时候家里没多少钱,有钱买几个合金的车模都要争取很久去了。

四驱车

后来过生日舅妈花了300多块钱给我买了一个遥控车,可以前进和后退但不能转向。如果需要转向的话,需要后退,然后带动轮子就能转向了。想想90年代,300多块钱的遥控车还真是贵啊。印象中好像还有大脚车,遥控的可以发射子弹的BB坦克。以前在成都游乐园里面,有那种开船的。当时交通很不发达,从西边到那里去玩一次单边坐车要接近两个小时,但玩个10多分钟这样的遥控船也是相当相当的开心。不记得什么时候,爸爸给我用木头做过一个船,就是把比较大的木头做成船型,中间开一个槽然后装上一个小电机。电机后面再装一个用一个细铁棍和一片易拉罐剪成的螺旋桨,接上四个干电池和很长的线。至于前进和后退,不知道是怎么控制的了,我猜可能是三个触点,前进的时候和倒退的时候正负极相反即可。这艘船在爸爸单位上的假山下面的池子里面开过,在河里面开过,现在想起还回味无穷。

后来五年级以后,有了电脑作伴,玩这些玩具就少多了,好像也就没有怎么买过遥控的玩具了。

产品运营从开始到失败

经过无数次的纠结后,我还是决定关了吧,一直亏损下去也是个无底洞。

17年10月左右开始《爱飞狗》的开发设计,到今年10月1日,差不多两年整的时间,一款有新意的产品,最终还是落了个关闭的下场。究其原因,我不会运营,没有精力去运营;没有雄心壮胆和经济实力进行产品的推广;尤其是产品的商业模式也是个很难突破的点,使得自己都无法说服自己进行投资,更别说找人投资。技术上倒是学到了很多,尤其在爬虫方面积累了非常多的经验,写出了《爬虫实战:从数据到产品》一书,也算是对这个产品的开发模式的一个总结。在这里,最后写一些琐碎的琐碎的文字,也算是对这段历史的总结。

数据

从16年6月开始到现在,我收集了三年多的国内直飞航线的机票数据,覆盖了80%以上的线路。直到现在也在源源不断的采集数据,每天几百万条记录。虽然产品不做了,但背后的数据还是会以继续收集。过去的数据就不会再回来,数据加上了时间的维度,积累的越久便越有价值。这些数据的的存储、处理我也是想了很多方法,以最低成本的方式进行处理,使得能够持续不断的进行收集。

在运营中我发现,越来越多的用户想要查询国际的航班,然而抓取国际航线非常消耗资源,投入非常大所以一直没有做。我将有限的资源用到刀刃上,解决国内航空的问题就可以了。

推广

到目前为止,爱飞狗总共积累了6.4万用户,日活在100左右,高峰时期可以到200左右。新增用户在50到100左右,主要来源还是靠搜索等自然增长。18年过年前爱范儿和知晓程序写了两篇文章帮我获取了大量的用户,而后就逐步放缓。

这样的日活确实有点低,我尝试过在今日头条进行推广、知乎上进行推广,也花了一些钱,但转换率相对较低,也没有太多时间去写软文。这样导致用户积累的速度也就比较慢。另一个硬伤是个低频的应用,一般而言每年只有在大家来临前才有几次使用,一个用户每年使用的时候也是在旅行前,平均下来也就那么一两次,想让一个新用户完全记住这个产品,还是比较困难的。

关于用户的群体,我通过背后采集到的数据和大家的问题了解到,基本上也符合我的假设——都是对价格敏感的群体。最好玩的事,有多个异地恋的学生朋友找过我问过一些问题,从他们得知爱飞狗提供的数据还是非常有用,确实能够节约一些钱。

技术

18年过年前一个多月那段时间,爱范儿推送了两篇产品的文章,使得产品突然面对洪水般的新用户,访问量一度达到2万每分钟。然而小程序还是经历住了考验,虽然慢一点,但还是进行了持续的响应。整个这个项目的最主要的是需要低成本的运营,每月的服务器开销要控制在500元以下,所以服务器等资源不是很强大。

这是当时在DigitalOcean上面一个20美元每月的2核4G的一个服务器上取得的成果,主要的功劳其实还是来自于各级缓存的应用。如果有更多的投入,支持更高数量的并发是没有问题的。然而毕竟这种突发情况也不是常态,所以并没有进行自动扩容等复杂的操作,架构简单即是美。

在架构上,数据采集在云端24小时运行,然后每日同步到本地,利用已有的台式机在夜间进行数据处理,然后将处理完的结果返回给云端。本地使用廉价的硬盘进行存储,部分数据同步到云盘进行备份。这样实现了固定资产的再次利用,降低了海量数据放到云端的成本。这些点都在我的书中有介绍。

支付

维持产品的持续增长和运营,还是靠钱。我没有注册公司以避免注册公司后的种种的坑,所以只能以个人账号进行支付。最初,PayJS刚好帮我实现了这个功能,月收入基本上能够抵消服务器的开销。我认为这就够了。但仅持续了一两个月,苹果将ios的小程序支付功能给禁用了,使得所有的苹果用户无法支付,收入减到一半以下,直到现在这个问题还没有有效的方案。

后来微信开通了广告的业务,遂在页面中加入了各种广告和利用广告来赚积分的方案来赚取少量的收入。但实在是太少了,而且极大的影响了用户体验。

未来

都决定关了,还谈什么未来?

我曾考虑过做成网页版,通过扫描支付等手段得到一定的收入,但在目前移动的趋势下,我认为也是死路一条;我最近还在看有没有支付的方案,还是没有找到;有哥们儿帮我提供了一个非常便宜的服务器,无奈在国外网络性能不好,在国内访问起来问题不断……现在程序或者数据出现了一些问题,历史数据也刷新不出来了,算了吧,没有时间精力去搞了。公众号上面,看到了有朋友依然需要这个App,但确实是没有精力了,关了吧……

或许,某一天,突然又有想法了,或者你有想法支持一把?请与我联系,或许这个App会因为你而重生。

再见!