微信小程序背后的思考

微信小程序背后的思考

极客视点 9个月前 (01-11) 浏览: 190 评论: 1

1月9日,万众期待的微信小程序正式发布;朋友圈早早地被微信小程序的相关信息所刷屏,极客人也耐不住心里的好奇心,也关注了几个微信小程序尝了尝鲜儿。从技术的角度上,微信小程序个人认为谈不上有什么可圈点的创新;但是在软件应用的生态上,可能会产生巨大的影响。 微信公众号 大一统 早在一年多前,那时候还没有人任何微信小程序的风声,极客人在和同学的交流过程中,就曾“预言”了“小程序”的出现。那时候微信公众号只有 订阅号和服务号,我说,微信公众号应该可以加一个“应用号”,一年多以后,微信小程序横空出世,微信公众号也真的多了一个类型 “应用号”,名字和我当初起的都一模一样。当然,我在这里并不是想炫耀自己前瞻眼光,而是想表明,微信小程序的出现是软件开发中一个很正常的产物。 在软件开发繁荣的今天,编程语言越来越多,软件开发的平台不尽相同,软件开发商为了迎合不同使用平台的用户,不得不开发各个平台上的应用,IOS、Android作为移动操作系统的两大巨头,每个都有巨大的用户群,这意味着软件厂商要做一个同样的软件,都要编写两套代码:Android上的JAVA,IOS上的Object C/Swift,这无疑提高了成本。从近几年的软件开发的趋势来看,虽然大家都以标榜自己“全栈开发工程师”为荣,但是我却认为这也只是无奈之举,如果有一套代码在所有平台都能跑的话而且都拥有绝佳的性能的话,没人吃饱着撑着,造出各种开发语言。 软件开发百花齐放的今天,无论是程序员,还是软件厂商,都希望能够有一个“大一统”来结束这个既繁荣又混乱的局面。前几年,HTML5开发移动APP企图基于各平台的浏览器实现跨平台;Web中的前端开发中的“响应式布局”实现一套代码在 PC、平板、手机上智能化显示最适合的界面;QT开发工具希望用一套C++代码开发出在Windows、Linux、Android、IOS的原生APP;最近,React 正在用JS统治Web、IOS、Android的路上越走越远…… 微信小程序要做的,就是开发一套代码,在IOS、Android拥有相同的用户体验,而它基于的是HTML。HTML无疑在各个平台拥有最好的兼容性,哪里有浏览器,哪里就可以解析HTML。 虚拟化 如果让我用一些关键词来概括软件开发的特点的话,在我的答案中一定有一个词就是“虚拟化”。操作系统完成了底层硬件的虚拟化,让上层应用不需要关心底层硬件的操作细节和差异。虽然运行着windows操作系统的计算机数以亿计,它们的CPU、网卡、磁盘等都各不相同,通过Windows系统的Win32 API,程序员和上层应用不必理会底层环境的差异性,程序员运用相同的代码就可以对不同型号的硬件进行操作。同理的还有Java虚拟机。 可以这么说,微信的小程序,就是以微信为平台,通过相同的代码,可以在IOS和Android上拥有相同的操作,比如布局、支付、定位等等,微信虚拟化了布局、支付、定位这一层在Android和IOS上的细节 。在这个意义上,可以说微信是个“操作系统”。当然这样就把操作系统说的太简单,更准确的是微信应该是一个虚拟机。 插件化带来的思考 能预言到“微信小程序”的出现,是不足为奇的,现在许多软件在完成各自职能的同时,往往自身也作为平台出现。 平台是什么?牛顿说,“如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。”。那么这个巨人就是牛顿的平台了。虚拟化带来的结果,就是为上层应用带来更坚实的平台。在平台之上,我们可以忽略平台下面的实现细节。 作为平台出现的软件,可以实现诸多的扩展。极客人的博客是使用wordpress CMS平台搭建的,在wordpress上面,我们可以利用安装插件的方式实现防垃圾评论等等功能;在Chrome浏览器上,我们通过安装插件实现了广告屏蔽;而QQ内置查看word文档的功能,也是通过插件实现的(极客人实习的时候看过QQ的源代码)。 插件是平台之外的扩展,基于平台的插件,忽略了底层细节,同时让平台的功能更加丰富,走得更远。同时,开放的平台,也让平台更加活跃,为自己的生存灌输了青春。 微信小程序在某种意义上也是微信的插件,在极客人尝试了用wordpress、Chrome装插件后,我想,预知“应用号”的出现不会是什么难事。 用完就想卸载 曾经看过一篇文章,每个软件厂商都希望让自己开发的软件在用户的PC、手机上不被卸载,而其中的关键就是占领用户的桌面和状态栏。然而现在的应用市场上的APP千千万,由于过多的APP会导致手机的速度变慢、可用ROM变小,许多用户都是装完一个APP就马上卸载。 由于微信小程序的即用即删性,符合了用户的“洁癖”心理,在一些不常用的应用上,微信小程序必定大受欢迎。 姗姗来迟的谷歌Instant App 在微信小程序发布之前,谷歌在2016年谷歌大会上,曾计划推出一种类似的"小程序"—Android Instant APP;通过谷歌Deep link,用户点击一下链接即可以运行应用,目前仅支持比较简单而基础的应用,可以说它介于纯粹的Web应用和应用程序之间,“Instant Apps”将应用下载大小限制为最高4MB,并向下兼容到安卓4.1操作系统。 我们如今手机安装的应用,占用内存动辄百兆起步,许多应用添加了我们根本不需要的功能,应用间的相互串联也是让我们苦不堪言。如今Instant Apps为我们开启了一扇新的大门,我们手机目前也有点击网页跳转应用的功能,与此不同的是,Instant Apps的跳转直接并非转往完整的应用,而是根据用户的需要,跳转至拥有某个特定功能的APP,比如说我们在网页观看视频,需要转往应用观看,然而该视频应用十分卡顿,经常推送一些无用信息,若该视频应用开发了Instant Apps,那么我们会跳转到该视频的Instant Apps界面,该界面仅包含视频播放的相关功能,十分简洁流畅。 这么一来,若许多购物应用和社交应用都开发了Instant Apps,那么我们的用户体验将会有很大提升,手机的负担也不会那么沉重。从开发者的角度讲,这类应用的推广难度降低,甚至不需提交至应用商店,仅需分享应用的相关连接即可,十分省心。用户点击即用,倒也快捷 基本应用场景和微信小程序类似,个人认为的最大优点可能是原生开发性能会优于微信。但是由于微信小程序拥有微信这个大流量的入口,而且已经先发制人地发布了,我想,Instant APP至少在中国地区胎死腹中。 目测腾讯广告收入不久会出现一个高潮 目前微信小程序里里面还没有广告,但是不久的将来,目测微信很快就会提供财付通的广告SDK方便开发者接入,这么应用转向微信小程序,腾讯的广告收入必定迎来一波大幅度增长。

百度地图API位置偏移的校准算法

百度地图API位置偏移的校准算法

算法语言 软件开发 2年前 (2016-02-17) 浏览: 2012 评论: 0

在开始使用百度地图API进行开发时可能会遇到一件相当奇怪的事情,使用百度定位的经纬度在地图上显示相当不准确,这一问题我在微信开发和安卓开始时都遇到过。第一次使用百度地图api获取位置并在地图上显示是在微信开发的时候,那是不知道具体原因无奈在微信获取的地理位置上加了一个偏移量进行校准,虽能勉强解决,但是不太准确。后来在安卓开始也同样遇到了这个问题,才发现百度地图API定位偏移已经不是一个偶然问题了。 百度地图API定位偏移的原因 以下来自互联网: 一、坐标体系 首先我们要明白,开发者能接触到哪些坐标体系呢? 第一种分类: 1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。GPS坐标形式如图,度分秒形式的经纬度:   2、 GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。 3、 其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。 第二种分类: 首先明白,所有坐标体系的原点,都是非洲。 1、 经纬度。这个是球面坐标,对于北京来说,就是(116.38817139.935961)这样的坐标。比如腾讯、高德、百度都是这样的经纬度坐标。谷歌是经纬度顺序写反的经纬度坐标。 如果是度分秒坐标,需要进行转换,才能得到这样的经纬度坐标。详见坐标转换。 2、 墨卡托坐标。平面坐标,相当于是直线距离,数字一般都比较大,像这样的。(215362.00021333335 99526.00034912192) 墨卡托坐标,主要用于程序的后台计算。直线距离嘛,加加减减几乎计算方便。 搜狗地图API就是直接使用的墨卡托坐标。 二、坐标转换 在各种web端平台,或者高德、腾讯、百度上取到的坐标,都不是GPS坐标,都是GCJ-02坐标,或者自己的偏移坐标系。 比如,你在谷歌地图API,高德地图API,腾讯地图API上取到的,都是GCJ-02坐标,他们三家都是通用的,也适用于大部分地图API产品,以及他们的地图产品。 例外,百度API上取到的,是BD-09坐标,只适用于百度地图相关产品。 例外,搜狗API上取到的,是搜狗坐标,只适用于搜狗地图相关产品。 例外,谷歌地球,google earth上取到的,是GPS坐标,而且是度分秒形式的经纬度坐标。在国内不允许使用。必须转换为GCJ-02坐标。 1、度分秒坐标转换为经纬度 比如,在GPS记录仪,或者google earth上采集到的是39°31'20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。 2、 GPS转换为GCJ-02坐标 谷歌,高德,腾讯的地图API官网上,都不直接提供这样的坐标转换。如果要得到GCJ-02坐标,最好在他们的地图上直接取点,或者通过地址解析得到。(这个工具我后续会贴出来的。我就爱干这样的事情,哈哈。) 不过,在网上搜到了这样的接口,该接口的type=1就是GPS转到GCJ-02的墨卡托坐标。请大家对接口保密,哈哈。详见: http://map.sogou.com/api/documentation/javascript/api2.5/interface_translate.html#late_intro 3、GCJ-02与BD-09之间互转 国测局GCJ-02坐标体系(谷歌、高德、腾讯),与百度坐标BD-09体系的转换,在CSDN上有很详细的讲解: http://blog.csdn.net/coolypf/article/details/8569813 不过也有更简单的算法,线性算法(lat和lng是经纬度,球面坐标): To_B是转到百度,To_G是转到GCJ-02。 var TO_BLNG = function(lng){return lng+0.0065;}; var TO_BLAT = function(lat){return lat+0.0060;}; var TO_GLNG = function(lng){return lng-0.0065;}; var TO_GLAT = function(lat){return lat-0.0060;}; 4、经纬纬度转成墨卡托 网上也有详细讲解: http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=78245 (大家发现没,高德是api,腾讯和百度是mapapi,说明什么?) 三、坐标偏移 如果您的坐标在转换之后,还有偏移,那么考虑以下几个方面。 A、原始坐标系弄错,比如以为自己是GPS坐标,但其实已经是GCJ-02坐标。 解决方案:请确保采集到的数据是哪个坐标体系,需要转换到哪个坐标系,再进行坐标转换。 B、原始坐标准确度不够 解决方案:如果您是GPS坐标,请确保采集GPS数据时,搜到至少4颗以上的卫星。并且GPS数据准不准,还取决于周围建筑物的高度,越高越不准,因为有遮挡。 如果本来就是GCJ-02坐标,在不同地图放大级别的时候,看到的地方可能不一样。比如你在地图级别4(国家)取到的坐标,放大到地图12级(街道)时,坐标就偏了。请确保在地图最大放大级别时,拾取坐标。 C、度分秒的概念混淆 比如,在google earth上采集到的是39°31'20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。 D、经纬度顺序写反了 有些公司(比如高德,百度,腾讯)是先经度,再纬度,即Point(lng lat)。但谷歌坐标的顺序恰好相反,是(lat lng)。 相关问题的百度解释:http://developer.baidu.com/map/question.htm 百度地图API位置偏移的校准算法 C++算法  

微信开发获取位置与百度地图经纬度解析

微信开发获取位置与百度地图经纬度解析

软件开发 2年前 (2015-12-14) 浏览: 787 评论: 3

微信开发中我们常常需要知道用户的位置,在微信的JS-SDK中提供了访问地理位置的方法,这不需要你的公众号是认证账户,普通未认证的订阅号也有访问地理位置的权限。 微信开发获取位置与百度地图经纬度解析 根据微信公众号开发者文档中的 JSSDK使用步骤 1.1.1 步骤一:绑定域名 1.1.2 步骤二:引入JS文件 1.1.3 步骤三:通过config接口注入权限验证配置 1.1.4 步骤四:通过ready接口处理成功验证 1.1.5 步骤五:通过error接口处理失败验证 微信开发获取位置与百度地图经纬度解析,我们可以根据官方文档可以获取很多高级功能,这里就不赘述。可能比较棘手的是后面遇到的消息签名问题。下面是官方给的代码: 在PHP中调用: 在HTML中加入js代码: 调用js代码获取经纬度: 百度地图经纬度解析 微信JS-SDK提供的只是经纬度,而不是像“陕西省西安市”这样的地理位置,下面是将经纬度转为地理位置的PHP函数,调用的是百度地图的web-api:

怎样在手机中管理、收发公众号消息

怎样在手机中管理、收发公众号消息

技术应用 计算机技术 2年前 (2015-04-17) 浏览: 926 评论: 0

极客人最近为王柏元的博客制作了自己的微信公众号,这个公众号旨在将移动终端用户在手机上的所有操作,化繁为简,集中在一个微信公众号里,免去用户安装过多移动APP,比如天气查询、查询单词、百科、图片搜索、火车飞机票的查询,这里极客人就不赘述了,感兴趣的朋友可以访问:http://weixin.wangbaiyuan.cn扫码关注一下我的公众号——“极客中心”;虽然微信一直专注于移动终端上(比如电脑上登录必须手机扫码,移动端登录必须手机短信验证,都可以看出腾讯把微信的终端定位是放在移动终端上的),但是目前腾讯却不能为公众号管理者提供能在手机上管理公众号的平台。在手机浏览器访问电脑网页,然后在网页上管理图文消息、收发粉丝信息,这的确有点鸡肋。 相信很多公众号管理者都和我有同样的苦恼,在此,我向大家介绍一下怎样在手机上管理、收发公众号消息: 手机端管理公众号、收发粉丝私信 微信虽然没有为用户提供良好移动端管理环境,但是第三方的微信管理平台早已坐不住了。所以官方没有,我们不妨使用第三方平台管理。在此向大家介绍一款手机管理公众号APP:公众平台助手。大家可以在各大移动商店搜索下载。 这款APP是第三方开发,虽然有安全认证,但是不是腾讯的亲儿子,有没有后门不得而知,大家可酌而后行之。 这是消息列表:   这是用户管理:   当然还可以修改备注、发消息,这里极客人就不做赘述了,大家一用便知; 不过公众平台助手不提供群发图文的功能,所以接下来的经验就是解决这一问题的。 微信关注“公众号安全助手”,手机随时随地群发公众号消息 怎么关注公众号就不用我多说了,公众号安全助手是微信官方的公众号,使用起来安全也很方便,你需要为自己的公众号绑定管理员微信号,然后这个管理员微信号给“公众号安全助手”的所有消息,都会方便地群发给订阅用户。   更多IT经验、公众号运营经验,请访问:http://weixin.wangbaiyuan.cn扫码关注一下我的公众号——“极客中心”。

模拟UA实现访问只能在微信上打开的网页

模拟UA实现访问只能在微信上打开的网页

计算机技术 3年前 (2015-03-29) 浏览: 26196 评论: 8

今天,笔者打开学校的“小瓜工大助手”查跑操的页面,对它的网页源代码非常感兴趣。无奈网页的设计者只让用户在微信的自带浏览器中打开网页,而手机微信自带浏览器是没有审查元素、查看源代码之类的功能。我的第一感觉就是写代码的人肯定是采取UA匹配以限制其它终端访问的机制。所以,解决办法很简单,在电脑模拟一个微信浏览器,实现方法就是修改浏览器的UA(userAgent)。 试验结果很顺利: 通过微信右上角的菜单“复制链接”获取当前页面的链接:http://npuxiaogua.mgschool.cn/wx/apps/paocao 在电脑浏览器上打开时: 通过修改浏览器UA后的结果: 下面讲讲操作方法:   一.“谷歌浏览器”审查元素 使用右键—“审查元素” 点击审查元素手机小图标的按钮(element选项卡左边),进入模拟手机、平板电脑等其他终端的视图,下面在截图上做详解: 现在只需要在上图的UA里填写一下微信的UA就行了。那么微信的UA是什么呢? 二、怎样获取访问者的UA信息 其实获取设备的UA很简单,任何一个网站的网站日志里面都会显示访问设备的UA信息: 下面是一段标准的网站日志:   其中“61.*.43.34 ”是访问者的IP, [25/Mar/2015:23:38:15 +0800]——访问日期 http://wangbaiyuan.cn/javascript-implementation-article-copy-plus-copyright-information.html—访问网址 网址后面的就是UA信息了: Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; Lenovo A808t Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.2.1.550 U3/0.8.0 Mobile Safari/534.30 通过上面的方法,笔者获取了微信自带浏览器的UA字段如下: Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI 三、在谷歌浏览器终端模拟界面填写UA Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI 刷新你要访问的微信网页,就再也不会出现“本网页只能在微信自带浏览器中打开”了。 四、拓展与总结: 1.可以通过上述方法模拟iPhone、ipad、安卓手机,从而在网页开发时用一台电脑即可知晓自己的网页在不同设备终端上的界面状况; 2.微信的UA为:Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

切换登录

注册