Windows下VirtualBox直接使用物理硬盘作虚拟机磁盘

目前VirtualBox只能用命令行来建立磁盘才可以使用物理硬盘。

我们假定VirtualBox安装在“D:\Program Files\Oracle\VirtualBox”这个目录下面,要在“D:\Users\VirtualBox VMs\Ubuntu\”目录下面生成文件,则执行如下命令:

\\.\PhysicalDrive1 表示机器上的第二块硬盘,\\.\PhysicalDrive0是第一块,\\.\PhysicalDrive2是第三块,以此类推。

在Windows 的磁盘管理中能看到硬盘的分区路径。如下图所示:ComputerManger

然后新建虚拟机,选择"使用已有的虚拟硬盘文件",找到刚刚创建的 Ubuntu.vmdk 即可。

对于Windows 8.1/10系统,以上的命令需要以管理员启动命令行的方式下启动并执行,否则会报告找不到磁盘。另外启动Virtual Box的时候,同样需要以管理员的身份运行,否则会出现VERR_ACCESS_DENIED错误,如下图所示:

VERR_ACCESS_DENIED

使用grunt压缩代码&配置多个任务

grunt是node环境下一个压缩、合并 js、css代码的工具,还可以做一下代码美化等。体验了一下压缩合并,还是不错的,大概流程如下:

在工程下建一个grunt目录,写两个文件 package.json-工程依赖Gruntfile.js-压缩任务

package.jsn:

Gruntfile.js:

这个Gruntfile很容易理解,想要压缩的文件以及目标文件写好就行,还有另一种自动化的写法,后面再说。

之后运行命令,grunt

1

出现了一个错误,网上解释

Note that installing grunt-cli does not install the grunt task runner! The job of the grunt CLI is simple: run the version of grunt which has been installed next to a Gruntfile. This allows multiple versions of grunt to be installed on the same machine simultaneously.

So in your project folder, you will need to install (preferably) the latest grunt version:

也就是说,之前装的grunt-cli只是grunt的运行环境,在工程目录下,还需要装一下grunt,运行一下命令:

2

之后再次运行grunt命令,又出现错误:

3

好吧,没有装这三个插件?原来是grunt一样,也要在工程下装,分别运行 npm install装一下,运行,成功:

4

工程复杂之后,肯定不会一个一个手动填文件,grunt也可以通过逻辑自动压缩js css文件,Gruntfile.js写法:

逻辑也很简单,就是把src里面的文件,压缩,生成文件会经过rename函数处理。

这里面需要注意的地方有

如果只写一个*.js,是不会递归cwd目录下的所有文件的,要递归几级写到数组中就可以了,如果不想添加什么文件,加!符号-‘!*.min.js’。

当然,这次也没有一帆风顺,运行的时候遇到错误:

5

报错在 最后一句,

查了半天也没找到这里有什么错误,网上搜了一下,大多数是 中括号里的uglify没有引号,跟我的情况也不一样。后来仔细检查了一下代码,发现了两处拼写错误,改了后就运行通过了,也就是说,其他错误都会报到最后一句。

做了一个小小的试验,写一个空模块

压缩后是这样的:

对,什么都没了。

 

最近有新的需求,压缩不同版本的文件,就需要开多个contact uglify任务,琢磨了一会,搞出来了,同时对grunt有了进一步的认识。

配置多任务是这么写的

r简单看一下配置文件

contact

首先配置了option,option中配置了不同文件中间增加;分隔符。

这个是contact所有任务的全局配置

后面又写了三个合并任务,分别配置下src和dest就可以了。

合并顺序就是 src中配置的顺序,*.js则按照字母排序。

uglify

uglify中配置了三个压缩任务,

压缩contact的文件

压缩所有文件并生成.min.js

最后运行

会自动加载contact和uglify中的所有任务。

来源于http://www.haorooms.com/post/qd_grunt_cssjs。

ES6新特性

ECMAScript出现了许多有趣的新特性,梳理一下:

1.支持constant声明

ES5中,想实现constant变量必须通过修改var的property实现

2.支持块作用域声明let,

JS只有函数作用域,没有块作用域,var声明有变量提升的效果,即如果var声明了一个未声明过的变量,会自动将此声明提升到顶端,所以想实现块作用域在ES5中是通过闭包的形式。

同时ES6也支持了块级作用域的函数

3.一种function的新写法

function中支持this的使用

4.undefined参数默认配置

ES6:

等效于ES5:

5.支持剩余参数写法

即...p写法会被解释为

ES6:

ES5:

6.可以直接在字符串中加入${表达式}

即console.log("Error: ${e.toString()}");

7.引用

8.支持class 继承,setter、getter

9.支持Promise Generators(待学习)

10.bufferArray

Android Studio 1.4主工程中使用gradle:1.3.0生成包含NDK的APK没有包含非".so"后缀的文件

Android Studio 1.4主工程中使用gradle:1.3.0,编译NDK,其中生成两个文件,一个是.so的动态链接库,另一个是可执行程序,没有扩展名,在最后生成的APK中没有包含非".so"后缀的文件。这个问题纠结了好久,最后追踪到了Android Studio对应的Gradle代码文件中。发现在

文件中有一个变量

这个变量决定了最后的打包时候的过滤条件。

具体的代码如下图所示:ndk_build_not_include
最后的解决方案,就是把编译之后的文件重新命名成为“.so”。

这边的build.gradle的配置如下:

(其他配置参考Android Studio 1.2 开发JNI工程

Windows下android-ndk-r10e执行ndk-gdb.py报告“ERROR: Non-debuggable application installed on the target device.”

Windows下android-ndk-r10e执行ndk-gdb.py报告“ERROR: Non-debuggable application installed on the target device.”

使用命令:

具体信息如下所示。android-ndk-r10e-ndk-gdb-py

使用apk-tool反编译了一下APK包,AndroidManifest.xml中的“android:debuggable="true"”已经设置了,lib\armeabi目录下面也已经存在gdb.setup,gdbserver。奇怪了!使用pyScripter跟踪ndk-gdb.py,在684行附近发现,脚本找错目录了。ndk-gdb-py-684

解决方法比较简单,拷贝一份“android-ndk-r10e\prebuilt\android-arm”,并且重新命名成为 “android-ndk-r10e\prebuilt\android-armeabi”即可。

建立Eclipse插件镜像服务器

使用Eclipse的时候,免不了要下载插件,可以插件的服务器一般都在国外,尤其是Android开发中的ADT(Android Developer Tools)插件,因此最好自己搭建一个镜像服务器。

常见的Eclipse插件分为两种组织方式,一种使用 Eclipse的P2插件来进行组织,一种使用site.xml进行组织。我们分别进行处理。

  • Mirror based on p2 information

对于P2方式的插件,使用Eclipse的 P2 mirror tool 可以比较方便的进行插件的离线镜像。
以下载ADT为例子:

简单介绍一下,P2采用两种文件对插件进行管理,metadataartifact,其中metadata可以理解为文件的描述信息,以及索引信息。而artifact则是实实在在的插件文件了。

因此,上面的命令,第一个是下载metadata,第二个是下载artifact。请注意命令中的细微区别。

  • Mirror based on site.xml information

  • 本站提供的镜像地址

ADT 23.0.7(August 2015)
Eclipse 3.8 http://www.mobibrw.com/eclipse/plugins/ADT/3.8/
Eclipse 4.5 http://www.mobibrw.com/eclipse/plugins/ADT/4.5/

  • 参考链接

1.Tool for downloading eclipse plugins from update sites
2.Equinox p2 Repository Mirroring
3.Downloading Eclipse plug-in update sites for offline installation
4.Equinox/p2/Ant Tasks/Partial Mirroring/Example

C++11 error: unable to find string literal operator 'operator"

一个简单的宏

一直都可以正常编译,但是当启用C++11的时候,报告编译错误

网上搜了一下,说是C++11要求,当字符串跟变量连接的时候,必须增加一个空格才行。因此简单修改如下即可。

注意:在“android-ndk-r10e”中使用的GCC版本,GCC-4.9之前的版本都存在"__cplusplus"宏定义错误的问题,需要参考“NDK下GCC定义__cplusplus不正确的问题”,把GCC升级到4.9

Android 5.0 模拟器休眠唤醒(黑屏)

Android 5.0 模拟器默认在一分钟之内没有操作,就会关闭屏幕,出现黑屏的情况,如下图所示.android_simulator_black_screen

注意,这不是死掉了,只是休眠了而已。解除休眠的方式是按“ESC”或者“F7”按键即可。如果需要测试休眠的话,“F7”按键是个不错的选择。

Cura 15.04 实心打印

Cura 15.04 打印物体,默认是对打印对象进行部分填充,来节省打印耗材,但是打印一些中空的结构的时候,会出现边框强度不够的情况,导致边缘的强度非常差,这时候需要设置完全填充。如下设置即可。注意: 设置后,最好关闭一下软件重新打开,出现过修改无效的情况!

Cura_15_04_Fill