挣扎在逻辑抽象和业务环境的表单设计
这两天一直在写一个基于业务逻辑的表单抽象架构。听上去多么简单的一件事,不就是个表单么。然而,拥有这样想法的我果然还是太年轻。表单,可以说是web开发中最复杂的交互领域之一。单纯把表单理解为用户可以填写和提交的交互元素,那就太无知了,殊不知,一个表单除了填写和提交两个动作之外,还有一大堆可能需要的动作,例如数据验证、联动、按条件填写项、复原和暂存、创建和编辑表单公用等等。这些东西还完全没有考虑具体业务中的特殊逻辑,单纯从抽象层面去归纳而已。
而且,在现代SPA应用开发中,表单跟jquery时代也有巨大区别。SPA是数据驱动型开发模式,即界面如何展示,完全由数据(状态)驱动。这就会遇到很多问题,数据驱动的开发模式,不可避免的需要模板,模板中使用变量,并映射到实际提供的数据中。在模板中使用变量并不能方便的对应的数据层去,比如你在模板使用一个for in的循环,那么就有item和list。list好理解,但是,如果将item又传回给数据层呢?
除了数据层和模板映射的问题,表单的数据更改其实也是麻烦事。它依赖于框架内的事件系统,也就是说,现代前端框架,无一例外的要求你通过绑定数据,依靠自己内部的事件系统,当用户输入数据时,将数据的变化绑定到数据层去。这也就产生了一系列问题,几乎没有一个表单架构能够具备通用性。开发者无法在数据结构的便捷性、数据响应的便捷性、数据校验的便捷性之间得到平衡,它们一定是互斥的。我这两个星期都栽在这个问题上,无法自拔。
而且,当一些业务的特殊逻辑加入的时候,这个事情就更复杂。例如,表单中的某个(些)项目,仅在某个选项为true的时候才展示出来。这个听上去简单,但是,你要知道,当用户在true和false之前切换的时候,那些被显示/隐藏的被填写的数据要不要保留?另一个复杂的问题,就是数据源。一个下拉列表,它的选项列表可能是根据当前选中的某个项来决定,当未选中时,或重新选择时,要进行切换。这个问题听起来尚好解决,然而,当要求,其中某个选项为某值时,要求表单中其他某个项必须与它互斥……这样的特殊逻辑,不是不可能存在,我就遇到了,并且敲破了自己的脑袋。
真希望有人能够将表单这回事进行深度抽象,大老,靠你了……
听听音箱究竟还有哪里不对?
腾讯的生日是11.11,按理双十一应该被腾讯注册商标才对,可惜……腾讯的性格温和,能够做成事真的很幸运。在中国,要做一家有温度的公司,要做一家按照创业时的初衷行事的公司,要做一家以普通人为用户群体,用产品去服务他们打动他们的公司,真的是难到登天,唯独,腾讯这样做了20年,或许,今年之后,这样的腾讯也要转型了,要像产业互联网转变,不是因为不想继续做以用户为目标的产品,而是它不得不在市场竞争中活下去而面临转型。我08年高中毕业才有机会开始用QQ,10年,从用户变成员工,从喜欢它的产品,到去实现产品。
早上就拿到了公司发的周年礼物,由一个精美的大箱子装起来,包装精美,而且设计感十足,和它的产品一样,力求让人觉得有温度。如此隆重的包装,我觉得也有点浪费材料,不环保。
礼物中有腾讯自主研发的智能音箱“听听”,晚上回家体验了一下。
首先是颜值,不能说是最顶级的,毕竟只600上下的价格。但是整体而言,在同价位智能音箱中,算得上中上乘,我鹅的设计在国内还是顶级的。白色的上身,塑料感足,灰色网布的下身,音箱感十足。开关、接口、指示灯都遵循完美的对称原则,为了使这种对称更不拘一格,顶面采用斜面设计,增加了亲切感。
其次是音质,也算不上顶级,可能和音乐版本也有关系,非常浓的低音,放在桌面低音炮效果明显。也是因为这种明显的低音,不适合听现场音乐,音乐的细部会被和音盖下去。它不是专业的音响,更适合休闲,生活气息。
它的重量有点重,不适合便携。另外,AI功能需要联网支持,因此也只能在wifi环境下工作。
作为鹅厂人自己推出的AI音箱,它的AI语音交互是一个亮点。开机之后,只要你说出“9420”就能唤起AI小姐姐,然后你就可以告诉她你要干的事情,查询天气、听音乐、听小说等等。如果她不能马上理解你说的话,还会重新问你。据说,之所以用“9420”作为唤醒口令,除了它是“就是爱你”的谐音,还因为这个句法语音识别起来更容易,容错率更高。但是,代价就是比较难记,因为它有四个音节。虽然说错了也没关系,但是总有一种尴尬症犯的感觉。
在自然语言交流这个环节上,就目前整个行业的水平来看,听听算得上顶尖,响应速度快,识别准确,交流自然,非常流畅。当然,在情绪识别这个点上,还有待未来整个行业的提升。比如我很不耐烦的说下一首,它可能还无法意识到,我不喜欢当前这种音乐的类型。切换音乐类型,我能很明显感觉是后台的一个强制算法,比如连续切了两首之后,它就给我换了一个音乐类型。把玩之后,发现其实它也不过如此,主要还是依赖后台的AI算法。
当然,智能音箱市面上也很多,算不上独特的地方。而且,甚至在性价比上,还不如其他音箱,毕竟600RMB的价格不算是亲民,作为一款商业产品,注定会面临比较大的风险,甚至有可能卖不动都有可能。
但是,我认为听听是腾讯应该继续做的项目,主要从几个方面考虑:
AI落地产品。就目前整个市场而言,虽然AI话题火的足以燃烧市面上的所有现金,但是真正要把AI落地很难,因为一套算法只适用一个场景,而即使一个场景,算法也需要非常长的时间去学习和修正,特别是诸如自动驾驶这样庞大的AI系统,就连走在最前面的百度,也无法拍着胸脯说自己在自动驾驶上已经完全成熟,可以量产。而智能音箱则是一个非常好的切入口,它立足于非常小的场景,而且不要求非常准确,这就有了空间去逐渐打磨和完善。如果不落地一款AI产品,那么很难给市场信息,AI研究在公司内部也会被很多人质疑。所以,我觉得把这款产品做好,落地,打磨,非常重要,就像其他产品一样,前期不一定是市场上最有前景的,但公司有资源和钱推进它,让它在时间中逐渐淘汰那些资本推进的产品。
算法的完善。在AI领域,算法为王。就以同声传译为例子,这么简单的一个场景,AI仍然无法做到精确。要让AI越来越聪明,必须经过非常长周期的学习和调整,算法的优化。而通过智能音箱这样一个小场景,就可以达到这样一个目的。而且,一个用户,一旦拥有一个智能音箱,基本上不会再同时使用另外一个智能音箱,而且一个音箱的最低寿命也在半年以上,因此,对于长时间的针对单用户的学习和算法打磨,有非常好的作用。
平台。腾讯是一个做软件起家,以整合用户资源、内容资源为核心竞争力的公司。对于其他应用商而言,他们很难像腾讯一样,打通用户、音乐、视频、文学,而对于腾讯而言,文娱已经是整个公司的支柱之一,(我认为今天的腾讯,分为游戏、内容、投资三大块,这个话题我们以后讨论。)可以说能为用户提供最完善、最智能、最有效的视听服务。就拿音乐来说,QQ音乐经历了低谷期,慢慢积累沉淀,如今已经在国内市场没有任何竞争对手,准备独立上市,提供更优质的音乐服务,打通版权和商业,突破自己成为它最大的瓶颈。将这些平台整合起来,集公司各个事业群资源于一个小小的音箱上。在未来,这样的整合,可以被移植到车载系统、智能家具等其他设备上。音箱只是一个先行者,探路者,一旦这一平台模式成熟,那么面对未来各种可能,都可以心中不慌,从容面对。
总而言之,如果说听听是一款终极产品,我是不认同,毕竟它本身的缺陷很明显。它要做的有两个方面,一方面是继续打磨自身,像QQ音乐一样,慢慢沉淀,打磨出腾讯自己的硬件设备;另一方面,则是在AI算法上不断和公司整体层面的资源进行整合,把庞大的体系,浓缩为半尺大小的精华,为将来在其他领域的深入打下基础。
晚上准备写博客的适合,打不开网站,按照套路,这应该是需要重启apache的时候了。但是,打开自己的其他网站,发现竟然也打不开,经过摸索,发现是dnspod的问题,所有托管在dnspod的域名都无法访问。不知道是运营商线路还是什么原因,总之域名的dns服务宕了:
一头懵逼。吓得我以为自己写了什么敏感话题给官方封了呢……之后把dns切换到阿里云自己的服务,再做解析就好了。
微信小程序可能是近几年最耀眼的技术突破
当我们谈论微信小程序的时候,会有一种怪怪的感觉,我们会想尽一切办法找出这个点子是腾讯抄谁的。可是很遗憾,想来先去,也找不到,感觉小程序就像之前火过一阵的轻应用,于是感觉放心了,说来说去,也就是新瓶装旧酒。可是,我却认为,微信小程序,是近几年国内甚至国际上最耀眼的技术突破。
首先,我们要先确定一下为什么说它最耀眼。我之所以这么认为,是从产品的角度考虑。这世界上的产品无穷无尽,但是,真正有商业价值,并且就像一片空白,有待发挥巨大潜力的,并不多。早几年3D打印被认为不得了,可如今呢?之后VR火的不行,结果呢?如今,人工智能大行。一个产品,它是否具备非常大潜力的商业价值,要从它内在的实用价值,和它外在的市场规律去看。互联网技术的商业价值非常大,但在互联网早期,一切都是空白的时候,很多人看不到。互联网本身所带来实用场景颠覆毋庸置疑,问题在于,这样的颠覆是否符合市场规律?所谓符合市场规律,其实本质在于是否天时地利人和。中国最早的电商网站8848,它遇上错误的时间,互联网本身不普及,没有足够的信任体系(支付体系),快递成本高周期长,面向消费者的销售问题复杂。而阿里巴巴则看到这些弊病,它做了两件事:1.做企业间的生意,以商务解决互联网问题;2.即使再困难,也稳住不死,等待时机。对于微信小程序而言,它重新定义了一款服务的呈现方式,使商家可以脱离系统底层,快速开发服务,而且,小程序本身定了很多规矩,从某种层面讲,它用自己的方式制定了原则,这就像app store分发一样,有利于整个生态的良性循环。只要稳住不死不胡来,它就充满无限的遐想。
其次,为什么说它是技术突破?小程序底层要解决非常多兼容性问题,同时,它从另一个角度重新定义混合式开发的模式。它的开发方式和reactnative、weex很像,但是又不相同。一方面,它要解决reactnative一样的问题,即如何将基于前端技术开发的代码解构为可以和系统交互的代码,解决通信,解决视图渲染。另一方面,它要解决如何兼容微信所依托的整个平台,以及底层的系统。很多人觉得,我有一套H5就够了,微信里面照样可以被传播不是吗,干嘛非得有一套小程序呢?我们不从商业角度去考虑,而从技术出发。小程序给了开发者另外一片天地。在小程序之前,前端开发基本就是面向浏览器,面向浏览器的开发必然遇到浏览器本身的瓶颈。而小程序提供了另外一种可能。它用规范化的语言方式,并且在后台提供微服务,让编程更像是以最终产品为导向,而非以过程解决问题为导向。而且小程序是可升级的,它伴随着微信版本的升级而升级,因此,任何的瓶颈都有可商量的余地,开发者觉得有些地方实在不行,可以提,这是中国人自己掌握的技术。
小程序本身不会作为一款商业产品发布,发布小程序这个动作本身不收费,虽然要有发布资格需要付费认证。它更多的是作为一个平台,一个接入层,对接服务,把原本极其笨重的服务轻量化,对于用户而言,感知不到,对于微信本身而言,虽然自身能实现的东西有限,但却依赖这一平台,实现了无限的可能性。微信本身已经越来越重,如果再提供更多服务,几乎是不可能的,相反,小程序的出现,让社交、服务、支付、游戏等等融合一体,可谓是近20年中国互联网创业者的最终梦想。
什么样的产品算优秀?
在香港过十字路口时,红绿灯会响,慢响表示等待,快响表示可以通行。红绿灯不像大陆那么高,给车看,而是矮墩墩的,等的人可以按。一盏红绿灯,红色代表停,绿色代表行,但是如果是有红绿色盲的人呢?所以,红绿灯除了要有颜色状态之外,还要有声音状态,还要有静动的状态。
谈论一个产品是否优秀,是从它的外观考虑?从档次考虑?从价格考虑?还是从实用性考虑?都不是。一款优秀的产品,它的灵魂决定了它的它的用户是否可以热爱它,忘记它,把它融入自己的生活。什么是一款产品的灵魂?是它抱着怎样的价值观,以怎样的形式,为自己的用户服务。
灵魂,它的本质是爱,是仁,是对这世界的期待。它期待这世界变得美好,它期待这世界温柔待它。
一款优秀的产品,当它离开它的设计者的手,它就有了自己的生命。它所传递给用户的,是关爱,是拥抱,是对未来的向往,它就像黑夜里不烈不晃的光,它照亮路人前行。如果问这世界上,怎样的产品算一款优秀的产品,或许,它被注入了创造者最温柔的一面吧。
在iphone上写代码是怎样的一种体验?
说到写代码,好玩又有趣,心里有个想法,创意突然冒出来的时候,能不能马上把创意用代码表达出来呢?一台iphone满足你的这种需求。为了体验在iphone上写代码,我专门录制了一个视频。
视频中提到的软件有textastic,coda,codeanywhere。
另外,视频中关于local-remote的逻辑,我后来仔细想了一下,其实和filezilla的操作逻辑是一致的,我们在pc上使用sftp编辑远程文件,如果sftp软件不支持在线编辑,那其实和视频中的逻辑其实是一致的。
As wanted to programing on iPhone, I installed a application called Buffer Editor which costed me ¥60!! After a while using, I just want to say: what the fuck of this ¥60 shit!!!
- the shit UI which costed ¥30 unless the logo icon
- the shit features' usage costed ¥28 which make a coder like a foolish
- the left ¥2 given the author, go back home and wash your mind for 10 years
At last I have to install Textastic instead which cost ¥68. Both ¥60s, why your distance so much long? Even though Textast is less of features, the UI and the operation logic is like silk.
For all application developers: make your production worth for users, don't lose your face in public.
iMac升级之后,electron rebuild sqlite3失败
macOS出了新的版本,启用暗黑主题之后各种不习惯,又切回原来的主题。今天在build electron应用的时候,先是直接报错,不能electron-rebuild,接着发现sqlite3 rebuild失败了,各种坑。
解决这个问题先要:
sudo xcode-select --install
这样可以解决electron-rebuild无法使用的问题。接下来,修改rebuild sqlite3的命令为下:
electron-rebuild -f --module-dir ./node_modules/sqlite3/
也就是说之前的--which-module参数现在不好用了,必须通过--module-dir来明确指定目录路径。相信后面应该会修复这个问题,现在暂时这样解决了。
文件选择框,只选文件夹
文件选择器,多选,只选择文件夹,根据需要挑选属性即可
<input type="file" webkitdirectory directory multiple/>
怪异空格引发的血案
在整理博客的过程中发现博客内有部分地方没有对齐。于是赶紧打开devtool看下。结果发现了神秘而怪异的现象。明明没有打空格的地方,却出现了实体 真的是着了魔般,怎么都干不掉。

二维码和下面的文字没有对齐,查看后发现图片没对齐
第一反应是css出了问题,于是打开devtool试着调试css。结果,怎么搞都没办法。仔细去看HTML,发现出现了两个 。
可是我很清楚,这地方源码里面没有空格啊。于是想到自己的网页是经过ob content输出的,是不是php处理上出了什么问题,然后去翻开插件看,可是怎么读代码,都觉得应该不是这个问题。
于是又去看下网页源代码,怪异的事情发生了,明明网页源代码里面没有 啊。
难道是\t的问题?于是把源码中的这个地方删掉重新换行,结果,仍然还是这个问题。直到我开启了vscode的空格显示功能,才发现了异样。
你仔细看<img>前面的空格,发现这两个空格的宽度感觉很奇怪。于是删掉,自己打了两个空格,问题解决了。
正常的空格[ ],奇怪的空格[ ],请查看源码和在devtool中查看。
原来这两个空格是全角空格,也就是中文格式下的特殊字符。但是,这个空格在键盘上是打不出来的,要通过特殊的输入方式才能打出来,这是怎么产生的呢?我不可能写代码的时候,还这样去特意打两个全角空格吧。最后,看来是在不同的系统切换,不同的环境下,切换编辑时,留下的问题。
-
你这个情况,我博客上也有,不过仅限 Mac 和部分 Windows 之间。
比如我明明正常输入的一句话,在某些 Windows 下会看到句子里出现类似+号的奇怪字符。
自己的Win 8.1 和 公司的 Win 10下会看到,但有的读者说他们并没有看到,所以也不知道是什么机制了。#612 Betty 2018-09-30 11:28 -
上班时间逛博客,小同学,需求不包含啊😝#613 回复给#612 否子戈 2018-09-30 11:32
-
上班时间回评论,大同学,你需求不包含啊
我是今天休假了,要对自己好一点,哈哈哈#614 回复给#613 Betty 2018-09-30 11:36 -
提前休假真爽啊,岂不是要出去浪了#615 回复给#614 否子戈 2018-09-30 11:44