首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

VR(虚拟现实)开发资源汇总

Daydream https://developers.google.cn Virtual Reality High Performance googlevr Google VR for Android GVR SDK and NDKRelease Notes http://www.apkmirror.com/apk/google-inc com.google.vr.vrcore com.google.android.vr.home Google Inc. Daydream (Daydream) Google Inc. Google VR Services (Daydream) What is Google Daydream DaydreamPerformance HUD Daydream Controller手柄数据的解析 How do I fix my Daydream controller Google Daydream Controller Teardown Daydream controller : Comprehensive guide Use the Daydream View controller and headset 谷歌Daydream VR平台应用需求:如何设计VR应用 Algorithm Conversion Quaternion to Euler Conversion Euler to Quaternion ATW Timewarp Asynchronous timewarp How Does Time Warping Work Difference_between_ATW_ASW_and_Reprojection Bluetooth Bluetooth Core Specification HID-over-GATT NordicSemiconductor Dialog-semiconductor SmartBond™ DA14681 Android Bluetooth Low Energy NordicSDK and Documentation Calculate throughput for a BLE link Introduction to Bluetooth Low Energy Android Lollipop: Bluetooth LE Matures Bluetooth Low Energy vs. Classic Bluetooth Getting Started with Bluetooth Low Energy Maximizing BLE Throughput on iOS and Android How different BLE packet types influence throughput Analysis of Latency Performance of Bluetooth Low Energy (BLE) Networks FTS4BT™ Bluetooth® Protocol Analyzer and Packet Sniffer CPAS-11(Frontline_16.10.12321.12610) Latency Front Buffer Rendering Reducing latency in mobile VR by using single buffered strip rendering The importance of fine-grained GPU preemption support for VR Touch IQS525-B000 Unity Unity Editor and Android Runtime for Daydream Unity Download GVR-Unity-SDK Unity3d Quaternion 四元数(Quaternion)和旋转 Qualcomm 基于骁龙 VR SDK的VR图形优化 EGL EGL10 Tracer for OpenGL ES

优秀的个人博客,低调大师

iOS开发技巧 - 使用UIPickerView来选择值

(Swift) import UIKit class ViewController: UIViewController, UIPickerViewDataSource { var picker: UIPickerView! override func viewDidLoad() { super.viewDidLoad() picker = UIPickerView() // select the current view controller as the data source of the picker view picker.dataSource = self picker!.delegate = self picker.center = view.center view.addSubview(picker) } /* Implemented some of the methods of the UIPickerViewDataSource protocol */ // returns the number of 'columns' to display func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { if pickerView == picker { return 1 } return 0 } // returns the number of rows in each component func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView == picker { return 10 } return 0 } } func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { return "\(row + 1)" } (Objective-C) @interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate> @property (nonatomic, strong) UIPickerView *myPicker; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.myPicker = [[UIPickerView alloc] init]; // select the current view controller as the data source of the picker view self.myPicker.dataSource = self; self.myPicker.delegate = self; self.myPicker.center = self.view.center; [self.view addSubview:self.myPicker]; } /* Implemented some of the methods of the UIPickerViewDataSource protocol */ - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { if ([pickerView isEqual:self.myPicker]){ return 1; } return 0; } - (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if ([pickerView isEqual:self.myPicker]){ return 10; } return 0; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if ([pickerView isEqual:self.myPicker]) { /* Row is zero-based and we want the first row (with index 0) to be rendered as Row 1, so we have to +1 every row index */ return [NSString stringWithFormat:@"Row %ld", (long)row + 1]; } return nil; }

优秀的个人博客,低调大师

开发者如何应对APP臃肿化

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 先来看一张图: 图上看到,所有平台上用户花费时间都在减少,除了移动端。观察身边也是如此,回家不开电脑的小伙伴越来越多。手机平板加电视,下班场景全搞定。连那些以前电脑苦手的长辈,现在也都活跃在朋友圈上,无责任转发各种小道消息、心灵鸡汤以及人生真谛。 上次在朋友圈发了一张图,晒同事“中二病”的药,立刻被家里长辈好几通电话,一定要我解释解释什么叫中二病…(对治疗中二感兴趣的同学请自行淘宝搜索) 随着用户时间倾斜到移动设备上,移动App对PC软件的取代作用也随之放大。用户期望App能一站式解决所有需求,不需要再切换平台操作。比如网购,从浏览到下单到支付,需要在一台移动设备上搞定。但随之而来的问题是,一些移动App重走PC软件老路,走向臃肿化。 App的臃肿化,一方面是用户需求使然,另一方面也标志着移动互联网进入下半场。大型App,平台型App开始出现,App的功能不断纵深和外延。 然而手机的小屏幕和用户的碎片化使用场景,毕竟不如PC互联网时代的大屏幕,发挥空间有限。照搬PC的大而全的App,很容易遭用户唾弃。 所以,App肿了肿么办? 整合 俗话说要想瘦,先学吃。 现实中,大部分的App还是在不断地添加着新功能。如何更合理地添加功能,使App胖得有节操,是消肿的***步。 1. 扩充导航 通过扩展菜单或导航,加入新的功能模块,是一个非常有效地添加新功能的模式。 如Path在3.0改版时,增加了了表情商店功能,在侧滑导航中添加一个新项就搞定了! 侧滑导航现在越来越常见,一个重要原因就是因为它充分利用了屏幕的纵向高度,具有良好的扩展性。 Acompli是一款邮箱App,如果你通过手机收发Exchange邮件的话,那它绝对值得一试。 这里只看它的架构,和系统默认Mail App相比,Acompli用Tab的形式,把日历,文档,联系人都整合到一个App里。尤其是邮件、日程、待办的整合,对于邮箱重度用户来说,不得不说 是相当高效的设计。不过即使整合地再合理,Acompli整体感觉还是会稍微偏重,取舍就看个人了。 2. Dashboard式的首页 该模式下,更适合有多个独立子功能模块的App。比较典型的案例,照片处理类产品,如美图秀秀,百度魔图,天天P图等。Dashboard模式的优点是扩 展性强,缺点是各模块相互分裂。如Line Tools这款App,本身就是各种小工具的集合,相互之间没有关联,就非常适合Dashboard模式。 3. 增加流程分支 在一些线性操作的App中,功能整合很可能发生在支线节点上。如Instagram为了进军微视频领域,而整合的视频功能。在拍照这里给了一个分支入口,进入视频拍摄模式。 插件 解决App臃肿,不得不提的就是插件化设计,试以微信举例。 微信在集成了聊天,交友,社交媒体,生活服务,社交网络,表情平台,游戏商店如此庞杂的功能的情况下,安装包不过30M出头,很大程度上依赖于插件化的设计思想。 1. 界面框架 微信早期就搭了一个非常有利扩展的界面框架。这使得微信那么多版本,不断增加新功能,但每次新版看起来都变化不大,总是熟悉的4个Tab。每个Tab就像一块主板,功能像内存一样插在上面。 2. 外部插件 相比内部插件,外部插件的耦合度更低,但是功能更强大。如微信在聊天窗口中,点击加号>应用,可以将其他应用的内容发送给好友。 3. 功能可配置 微信相当一部分功能可配置,非常灵活,比如漂流瓶功能,不用的话就可以关闭。还有些功能,当你不用到的时候是不可见的,如公众号。功能可配置+无感化,使得微信在这么大的体量下,依然可以保持相对简单。 分拆 插件化是非常好的思路,但并非每个App都如微信这般,要往平台化方向发展。最近很多国外的App拆分,也是应对功能App臃肿的好方法。如 foursquare一拆为二,把签到功能单独孵化成Swarm App。Facebook动作就更大了,拆分Messenger,试水Paper,下架Poke。App分拆之后,Facebook不用小心顾忌影响主 App,可以大刀阔斧的迭代和试错。Google Drive拆分文档和表格应用,也是一例。 App拆分的好处是,单个App可以更聚焦,拥有更良好的用户体验。 一个更具代表性的例子或许是Line了。基于Line本身的成功,Line公司推出了一系列App,可以称之为App矩阵。各App功能独立,但在 品牌上保持了高度的一致性。通过品牌和Avatar带来的强大影响力,App矩阵进一步增强用户黏性,并非常成功地辐射到周边产品。 拉动 我非常欣赏Facebook、Google对App的杀伐决断。 但是App分拆确实也会带来一些问题:新App需要从0开始积累用户。 而通过已有App去拉动新App的量,是最简单直接地方式。 下面来看看拉动有哪些做法。 1. 广告 InstaFood是一款给照片添加美食信息的App。 左下是它的主界面。通过Drawer切换到What’s new界面时,InstaFood会推送一些广告,比如下图这几个妹子自拍,推荐用户下载他家另一款App Selfiegram。 2. 入口 Line Camera的***一个Icon,Pick。看起来和其他icon类似,是一个功能入口,实际上Pick是Line的另一款独立App。点击这个icon之后,会跳转到Pick的产品介绍页。 3. 产品列表 产品列表模式的应用,更多见于系列App上。如Tapbots这家我很喜欢的公司,他们的设计自成一格,有一批固定粉丝。在App的关于界面,列出了Tapbots的所有产品列表,引导脑残粉去购买其他几款App。 4. 应用推荐 另一类做法更讨巧些,在App中内置应用推荐模块,如手机管家Android版。推荐优质App的同时,当然举贤也不能不避亲,顺便拉动自己公司的其他App:) 打通 App间的拉动,更多见于功能独立的App之间。 对于一些功能耦合度较高的App来说,App间的打通是非常重要的设计点。 1. 插件式打通 插件式的打通,比如在Line中调起Line Camera,在Line Camera中完成任务后,带着结果返回到Line。调用的只是Line Camera功能的局部,始于拍照界面,终于分享界面,是一个封闭的流程。设计师需要关注的重点是,起点和终点两个体验衔接的地方,以及过程中的分支差异 化处理,以保证流程的封闭性。 2. App间打通 点击Facebook的Tab bar上的Messenger按钮,就会直接跳转到Messenger App。不同于插件式打通,这里并不是一个封闭流程,Messenger的所有功能可用。而在Messenger App中,全局的头部高亮区域,可以回到Facebook App,体验非常精准而流畅。这里Messenger App头部的全局返回是一个亮点,跨Tab全局一致,在单独打开Messenger App时不可见,不会影响到Messenger单独使用时的体验。 打通的做法目前还不多见。在系统App中,如iOS通讯录,电话,短信,Facetime中也有体现。但随着App分拆变多之后,多个App之间的协同设计,应该引起设计师关注。 结语 移动互联网不是传统互联网的延续,更应视作颠覆。PC时代的庞然大物,不会也不应该出现在移动平台上。 对于增肥中的App,我们需要更有规划地整合新功能。对于过于臃肿的App,通过合理地插件化/分拆,App间的拉动/打通,才能在小而美和功能复杂性之间找到平衡点。 原文: 腾讯ISUX

优秀的个人博客,低调大师

微信公众平台开发(75) 语音识别

本文介绍如何使用微信公众平台高级接口中的语音识别功能,做出一个语音版的天气预报查询功能。根据这个模型,你可以扩展到所有的语音查询。 一、接收语音识别结果 开通语音识别功能以后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。该字段为语音识别出的文本内容。 用户发送语音: 语音XML数据包如下 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <Format><![CDATA[Format]]></Format> <Recognition><![CDATA[深圳天气怎么样]]></Recognition> <MsgId>1234567890123456</MsgId> </xml> 参数说明: 参数 描述 ToUserName 接收方微信号 FromUserName 发送方帐号(一个OpenID) CreateTime 消息创建时间 (整型) MsgType 语音为voice MediaID 语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体 Format 语音格式:amr Recognition 语音识别结果,UTF8编码 MsgID 消息id,64位整型 二、中文分词 中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。通过分词可以提取其中关键词语进行搜索。 打个比方:“深圳天气怎么样”,这句话中可分词为“深圳”,“天气”,“怎么样”三个词。其中“天气”为名词,“深圳”为地点名词。 以下是SAE上的分词代码示例: <?php $str = "深圳天气怎么样"; $seg = new SaeSegment(); $ret = $seg->segment($str, 1); print_r($ret); //输出 if ($ret === false) var_dump($seg->errno(), $seg->errmsg()); ?> 结果如下: Array ( [0] => Array ( [word] => 深圳 [word_tag] => 102 [index] => 0 ) [1] => Array ( [word] => 天气 [word_tag] => 95 [index] => 1 ) [2] => Array ( [word] => 怎么样 [word_tag] => 40 [index] => 2 ) ) 得到,名词天气,和地名名词深圳,副词怎么样可以忽略。 三、程序实现 判断是否开启语音识别 private function receiveVoice($object) { if (isset($object->Recognition) && !empty($object->Recognition)){ $contentStr = "你发送的是语音,内容为:".$object->Recognition; }else{ $contentStr = "未开启语音识别功能或者识别内容为空"; } if (is_array($contentStr)){ $resultStr = $this->transmitNews($object, $contentStr); }else{ $resultStr = $this->transmitText($object, $contentStr); } return $resultStr; } 效果如下: 调用SAE分词 var_dump(segment("明天长沙天气怎么样")); function segment($str) { $seg = new SaeSegment(); $ret = $seg->segment($str, 1); if ($ret === false){ return; } $category = ""; $keyword = ""; foreach ($ret as $key => $value) { if ($value["word_tag"] == 95){ $category = $value["word"]; } if ($value["word_tag"] == 102){ $keyword = $value["word"]; } } if (!empty($category) && !empty($keyword)){ return array('category'=>$category, 'keyword'=>$keyword); }else{ return; } } 返回结果如下: array(2) { ["category"]=>string(6) "天气" ["keyword"]=>string(6) "长沙" } 这样就获知晓了用户要查询的功能是天气,城市名称是长沙。 功能查询 根据获得的功能类别及关键字,我们可以查询相应的城市天气预报。 include("segment.php"); $result = sinasegment($content); if (is_array($result)){ switch ($result['category']) { case "天气": $url = "http://api100.duapp.com/weather/?appkey=trialuser&city=".urlencode($result['keyword']); $output = file_get_contents($url); $contentStr = json_decode($output, true); break; default: $contentStr = "还不支持这一功能:".$result['category']; break; } }else{ $contentStr = "不能理解你的内容:".$content; } 四、效果演示

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册