Oculus三星Gear VR免插入头显调试应用的方法

最近入手的三星的GearVR头显设备,加上S6主机的视觉体验感的确让人震撼到了一把。虽然因为gear只实现了单屏2K输出,以至于在头显设备中观看高清内容时依然可见清晰的像素点,不过尚在能接受的范围内,我觉得,至少要到单眼2K以上,才能真正带来最佳的VR体验,相信过不了几个月,各大屏幕生产商必定会推出4K手机屏,16年的新屏幕值得期待。

正题,

很多国内开发者初拿到gear,发现要让手机进入vr模式就必须插入到头显中,那在开发中,频繁地需要debug,也要频繁的插拔头显?这岂不是要疯。。。

明显,oculus不可能设计这么脑残的方案,在系统层,预留了开发调试模式,但隐藏略深,很多童鞋不知道如何开启,这里就给大家图文说明开启gear开发者模式的方法。

1. 桌面找到「设置」- 「应用程序」- 「应用程序管理器」 – 下滑找到 「Gear VR Service」

2. 然后再点击「管理存储器」你就会看到类似下面的界面

3. 接着点击「VR Service Version」这一栏,连续点击6次

4. 成功之后,会弹出提示告知你开发者模式开启成功,然后点击下面的开关,调整为on即可。

5. 开启开发者模式后,在正常界面下屏幕会闪烁是正常现象。进入到VR应用后,闪烁消失。这样就可以在不插入头显的情况下,看到分屏效果了。 :)开始你的第一个VR应用开发吧

Read More

[转]Mozilla 发布 A-Frame 开源框架,帮助 Web 开发者轻松构建 WebVR

点评:Mozilla公开的WebVR方案,让Web开发者以最低的门槛接触到了VR 3D开发,经过笔者实测,在iphone手机上的传感器延迟

Mozilla今天发布了全新的开源框架 A-Frame,旨在帮助开发者更轻松的开发在浏览器中运行的高性能响应式的VR体验,而不用学习强大但非常复杂的 WebGL。Mozila 旗下的 MozVR 团队已经在 WebVR 技术上进行了很多试验,今天发布的 A-Frame 则是他们研究成果的结晶,已经可以提供给开发者进行探索了。开发者只需一行代码就可以集成支持 VR 页面所需的基本组件。


<Script Src=”Https://Aframe.Io/Releases/Latest/Aframe.Min.Js”></Script>


加入这行代码,Web开发者就能够开始使用他们所熟悉的HTML代码创建一些简单的VR网页。Mozilla同时发布了A-Frame的详细文档,对A-Frame感兴趣的同学可以参考文档内容进行自己的试验。

A-Frame很大的一个优点是提供了对 VR 头戴设备和非 VR 设备——例如电脑以及智能手机——之间的无缝响应。A-Frame 目前支持 Oculus Rift DK2 以及 Cardboard 类的纸盒眼镜,并会在未来对更多的设备提供支持。根据 MozVR 团队的消息,他们很快将会利用 Oculus 最新的 0.8版本Runtime 来更好的优化75Hz的头部追踪。文末将会教你如何设置 Oculus Rift使其支持 WebVR,而手机端的 VR 模式以及所有的非 VR 渲染则可以在任何支持 WebGL 的浏览器中工作。

A-Frame 拥有许多的开发模块供开发者使用,例如模型、视频、天空、几何体等等,同时集成了控制、动画以及光标,使得开发者能够轻松的构建富交互的VR网站。A-Frame 提供了许多模板,帮助开发者迅速上手,并且 Mozilla 还鼓励开发者之间分享自己制作的模板,来加快 WebVR 网站的创建。

“如果我们关心 Web 技术,觉得 Web 技术非常的酷炫,我们不应该等待 VR 行业的成形、成熟再进研究 Web VR 的技术,因为这一过程可能会长达五年之久,我们必须筹划未来。” Joshua Carpenter,MozVR 团队的产品设计总监在上个月的一场 Mozilla 的活动中说到,“这是我在 Mozilla、更确切的说是 CTO 办公室的主要工作——对于 Web 平台的未来进行一些研究项目。”

谈到 WebVR 的现状以及 A-Frame 时,Carpenter 说这个工具很强大,但还不能在数以百万计的现存 Web 开发者中普及。

“目前需要解决的最大的问题是 WebVR 的体验太难制作。Web 的核心价值是易用性”,他说,“你不需要安装任何东西 Web 就可以正常工作,你就可以打开链接。当你想自己制作一些东西时,你也只需要敲几行代码并且发布就行,没有人会告诉你‘你做不到’。”

A-Frame被设计出来正是为了将易用性这一价值在 WebVR 的开发中实现。

目前的一部分挑战是你不能仅仅只为VR头戴设备提供正确的响应支持,你还需要消除WebVR开发对于WebGL深层知识的需求。

“A-Frame 的目标群体是Web开发者,他们中的绝大多数都因为对 WebGL 缺乏了解而无法进行 WebVR 的开发工作,而 WebGL 这一个强力但复杂的 3D API 是 WebVR 运行的基础。”Carpenter 告诉我说,“一个用 A-Frame 来开发 VR 网站的 Web 开发者只需要在他们原本的代码中加上一行,就可以进行 WebVR 的开发了。”

附:使 Oculus Rift 可以浏览 WebVR 的方法


1、安装最新的Oculus Runtime。

2、安装 Firefox Nightly, 或者开发者版的 Chromium。

3、安装 WebVR Enabler 插件 (只有Firefox有)。

4、打开你的网站。

5、确保你的 Oculus Rift 已经正确插入并正常工作,Oculus Rift 上的指示灯应该是蓝色的。

6、点击 “Enter VR” 按钮。

Read More

如何Chrome插件开发和打包后的id保持一致?

众所周知,在chrome插件开发中,插件的ID是chrome自动生成的全球唯一标记串。有了这个ID,我们在chrome store发布插件时,google就会为我们的插件创建一个唯一的url,用户可通过这个url下载或安装插件。

同时,这个ID也是chrome区别相同或不同插件的唯一指标。也就是说,即使是同样的插件名、一行不差的代码,如果拥有不同的ID,chrome也会认为他们是不一样的。

但是,聪明如你会发现,在通过chrome导入插件的源码文件夹进行开发时,此处的ID和你最终打包成crx再安装的ID竟然不!一!样!因此可能造成一个困扰:如果我在开发时,因为各种各样的原因,要写死插件ID在代码或者配置中,此时如果写的是开发状态下的ID,到了打包发布后,两边ID对应不上,相关的功能也就不能实现了。(譬如在做Autoupdate时)

所以,本文就是教你如何保持插件在开发和打包crx后都能保持相同ID的秘籍!

Ok,依据下面几步,你将能够快速地完成这一目的。

1. 在chrome插件管理中,点击“打包扩展程序”,将你的源码文件夹选中,然后生成一个pem密钥文件,这个文件一旦生成之后就要保存好,chrome是依据这个文件来生成ID的。 如果不甚文件丢失,你只能更换应用ID了。

2. 通过第一步的打包,你会得到一个crx文件,将此文件拖到chrome插件管理界面进行安装。

3. 安装完成之后,你需要进入Chrome的”UserData”目录下,将该目录下manifest.json中的一个key值取出来。

这个文件的位置:

Default/Extensions/<extensionId>/<versionString>/manifest.json

注意,不同的操作系统,userdata的目录不一样,不同系统的目录位置不同

Windows XP
Google Chrome: C:\Documents and Settings\%USERNAME%\Local Settings\Application Data\Google\Chrome\User Data\Default
Chromium: C:\Documents and Settings\%USERNAME%\Local Settings\Application Data\Chromium\User Data\Default


Windows 8 or 7 or Vista
Google Chrome: C:\Users\%USERNAME%\AppData\Local\Google\Chrome\User Data\Default
Chromium: C:\Users\%USERNAME%\AppData\Local\Chromium\User Data\Default


Mac OS X
Google Chrome: ~/Library/Application Support/Google/Chrome/Default
Chromium: ~/Library/Application Support/Chromium/Default


Linux
Google Chrome: ~/.config/google-chrome/Default
Chromium: ~/.config/chromium/Default


Chrome OS
/home/chronos/

3. 打开该目录下的manifest.json文件,找到

"key": "eYxnPzfSPtfL3ji4nQX3ujTXpzz3YQ6dVlvHWf1gvW8=",

“key”属性这一行,把后面一长串加密的字符串拷贝出来。

4. 对应的,将拷贝出来的key这一行内容,粘贴到你插件源文件目录下的manifest.json中。此后,你再通过插件管理界面导入插件后,你会发现显示出来的ID和打包的crx安装后的ID就是是一致的了。

Read More

记一个坑爹的夜晚。。。坑爹的console不仅是IE,还有你们喜欢的chrome

        最近在检查修改一个nodejs的项目的时候,突然好奇地去mongohub里面看了一下session的存储,想着形象一点地看看session的增加、修改过程。


        于是乎拿起chrome就开始测试,习惯性打开F12,监控本地cookie并对cookie进行清空,然后在mongo的监控器里面看sessionid,来了两下ctrl+r就发现不对劲了,监控器里面的sessionid在一直不断的增加啊。然后就是狂按刷新,监视器显示session疯狂增加。 这时候心中第一个念头就是:“我擦,肯定出bug了!” 


        回头进程序里面疯狂找虫,重写关于session部分的内容、更换了一套操作session的中间件、甚至跑去github上一行一行看这个middleware的源码啊你妹。。。。各种地方都检查过了,总没有发现问题,心想这种情况要是出现在线上项目,要是有个变态在session过期时间内疯狂刷新,数据库里面就不断新增session,总有一个时候被撑爆。带着疑惑不断的google,中文、英文甚至日语都去搜了一遍,完全没有找到头绪,不管从express还是这个被广为始终的session middleware的相关问题里面都没有查到一点蛛丝马迹了。到最后我都开始怀疑我对session的理解从一开始就存在了严重的错误,都怀疑到人生观价值观了有木有啊。于是乎去找了最基础的资料又把session的实现原理复习了一遍,可是看完之后我又觉得人生观重建:“尼玛,这完全没理解错啊”。但是带着坚定的人生观又狂刷了几遍。。。但是蹭蹭往上跳的session数据又给了我当头一棒 – -!(注意!这里注意chrome的f12里面cookie的值是始终没有变化的,包括expires、maxAge)

        看着前端console和后台完全对不上的情况,三观简直就要崩塌了啊,这尼玛到底是什么个情况。。。。我相信如果这会儿仍然没有灵光一现的话,我肯定会去看http组织原理一类的东西,去把session是怎么写出来都再搞一遍了。但是,上帝没有让我这么做 (因为我如果要这么做了,明后两天大概都要茶饭不思了。。。),突然不知道是憋了泡尿还是被翔一挤,尼玛一摔鼠标:“尼玛蛋,这chrome的调试工具不会有什么问题吧?”,接着果断关掉了f12,再刷新!我去,整个世界都干净了,一切如我最初做刷新时预想的那样,session仍然保持着一个连接一个sessionid的节奏,而不是随着每次刷新都不断增加session了。

        最后您猜是怎么,原来是打开了console台之后,chrome默认对request关闭了cookie发送(但实际上我并没有在控制台设置禁用缓存或者cookie的任何设置,而且resource里面的cookie一直展示出了的是不变的),但是在chrome的console台里面看的话,即使对request抓包,仍然看到有带cookie发送,但实际上呢,服务接收到的是不带cookie的request,尼玛蛋当然不断重建新的session了啊,然后最坑爹的还是在页面浏览上他又保持这cookie的状态,始终能够正常操作(这也为什么我没有一开始就怀疑是浏览器方面存在的问题,或至少知道问题不出在服务端)。

        所以这时候如果在外面对整体的网络quest去抓包的话,我相信应该能看到chrome开启console台之后的连接是默认不允许读cookie的了。而且我认为这样的默认限制可能还不止在cookie上,就如在ie上面你写了console.log,但是不开调试台的话,代码就永远执行不了的坑嗲问题一样,虽然极其简单,但如果一旦陷入到追bug的怪圈里面的话,你把代码看一万遍,甚至把javascript的源码都重看一遍也没用,因为问题根本不是他们。

        看来以后还得多了解一下各种不同browser的console台在执行调试的时候,是否都有些自家的坑嗲默认特性,不至于出现这样的问题的时候,掉入这样的怪洞里面。

        记此博文,希望为后人如有疑惑此问题时能找到个中文参考。因为网上随便搜了搜,好像没发现有人讨论如此的问题,特此一记,也当长个教训。兄弟请牢记:chrome打开调试工具、开发者工具的时候,是会新建一个连接请求,并且这个连接请求里面是每次建立一个全新的连接,包括缓存和cookie都是重新建立,但是在页面中,却保留首次获得的cookie的读取。

        如果有空你能去看google对于控制台特性的描述的话,我相信您会看到开启控制台之后,是进入了一个google为你默认设计好的开发者模式,页面上的响应和你开启控制台后发送页面时所看到的结果有些许的不同。我想,这个是google在设计时为了考虑开发者的操作体验同时又为了避免诸如缓存和服务器既存的一些状态值为调试带来的迷惑而做的。但是,有时候又给我们带来了更多的迷惑。

        最后呢,感谢您还能这么耐心地把这篇吐槽文给看到这里,来来来,给您发朵小红花,如果您对上面我描述的流程不甚明白的话,也可以留言再讨论,文字写的有点混乱,还望海涵。

Read More

在pcduino上显示中文/解决中文方块乱码

有人在网上说要把pcduino的lubuntu内的系统编码都调整成GBK或者GB2312的说法都是错误的,系统默认的编码已经是UTF8了,你还改回GB,那不是脑残了.而且出现原始系统不能显示中文 或者中文出现方块乱码的问题,其实本质在于系统没有安装中文字体而已.

 

先用

 locale -a 

看一下本机的LANG环境设置

如果显示的不是 zh_CN.UTF-8,那么接下来请修改这个文件

/etc/environment

在其中添加如下内容:

LC_ALL=zh_CN.UTF-8
LANG=zh_CN.UTF-8

 

接着,推荐去wenq.org下载你想要的字体,这里是文泉的免费中文字体下载站,可以直接下载到debian包,自带的lubuntu完美使用.

字体包下载地址推荐: http://wenq.org/wqy2/index.cgi 随便挑一个看的顺眼的好字体下载吧~,记得要下debian包

 

直接给出本包的下载地址,你可以来这边下载后双击安装,装完之后init6重启一下系统,妈妈再也不用担心我的开发板中文乱码了!

ps:接下来一篇文章将为你介绍在pcduino的开发板上,如何利用现有的win8电脑,直插网线给开发板共享网络上网.

Read More

centos上对php安装oci8扩展的支持

1.先像上一篇文章描述的那样安装好oracle client

2.对php增加oci8拓展

(1)用pecl安装oci拓展

pecl install oci8

一路自动编译下去之后,突然卡在这个地方报错了

checking Oracle Instant Client SDK header directory... configure: error: Oracle Instant Client SDK header files not found
ERROR: `/var/tmp/oci8/configure --with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib' failed

 

缺少SDK就去官网下SDK呗,于是又到官网地址 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

找到以下内容的sdk devel rpm包

*Instant Client Package - SDK: Additional header files and an example makefile for developing Oracle applications with Instant Client
Download oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm (609,139 bytes) (cksum - 2701969031)

使用 

rpm -ivh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm

进行默认的安装即可

 

重新执行 pecl install oci8

出现如下提示则代表安装扩展的过程完全成功,如出现其他提示,请返回重做上面的步骤

Build process completed successfully
Installing '/usr/lib64/php/modules/oci8.so'
install ok: channel://pecl.php.net/oci8-1.4.9
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini

 

 

(2)对php.ini进行设置,php.ini文件底部增加oci8.so

[oracle oci8]
extension=oci8.so

然后使用 service php-fpm restart重启php之后,查看phpinfo可见oci8成功开启,设置全部完成.

Read More

小记Centos6.2 U盘安装(UltraISO刻录)时偶遇的小问题

今天有童鞋在服务器CDROM坏掉之后,果断采用了U盘的方式安装centos. 

开了ultraISO把iso文件刻录到U盘之后. 插到服务器上轻车熟路地开始了引导. 进入install之后,内核加载完毕进行boot载入时出现如下错误:

panic ocucurred.

Warning: No root device "live:/dev/disk/by-label/Centos-6.2-x86_64-LiveCD" found.

之后发现是脑残的ultraiso在刻录文件之后写U盘的卷标时自动截断,把卷标变成了CentOS-6.2-从而造成此问题.

修改卷标为 Centos-6.2-x86_64-LiveCD 此问题解决.

Read More

python3开始不支持urllib.quote()

python3之后urllib.quote()这个转换字符串str类型为url编码的方法已经不能用了,

现在由 urllib.parse.quote(str)代替.

解码则用 urllib.parse.unquote(str)

 

因为urllib.parse.urlencode只能编码对象格式的数据,对于字符串类型数据需要编码就得使用quote了.

 

ps文件开头必须引入 import urllib.parse 这个包后才可以使用.

Read More

一个chrome下的超级奇怪的服务器问题??和反向代理有关?

记录这个日志都不知道是放到server分类里面还是程序bug分类……..今天再调整服务器架构之后出现了这样一种异常的情况实在是百思不得其解

记录一下,某日有大神的时候可以请教一下…现在已经累到无力去抓包分析什么的了.都是浮云

 

 

服务器调整完架构之后,最前端实现nginx动静分离,将fastcgi和nginx分离,两台fastcgi在nginx后面

然后我自己的chrome测试下偶尔发现,停留在一个页面超过一定时间之后(放在那边一会儿不去操作这个页面),再点击这个页面上的链接,(比如在www.xxx.com点击了.www.xxx.com/article-11-11.html)绝对就打不开了,若干秒之后chrome报链接超时 118错误,但是在地址栏敲一下回车,马上页面就又能打开了.

观察服务器日志发现,此连接请求根本没有发送到服务器成功.

 

nginx里面是通过upstream配置的如下,肯定是没有问题的.

[php]

upstream xxx{

server 192.168.100.144:9000 weight=5;

server 192.168.101.144:9000

}

[/php]

通过直接将域名指向内网的这个服务器ip之后,故障依旧,排除dns方面的问题.

 

 

Read More