0%

KVM客户机鼠标集成其实很简单,命令行里添加一个参数-usbdevice tablet就可以了,不过KVM运行带图形界面的客户机感觉还是不如virtualbox用起来更方面。KVM更适合服务器领域。

如果手上没有移动存储器,也不想开ftp,那么两台电脑之间可以使用nc(netcat)传输文件,比如现在要在一台mac和一台linux机器之间传输文件。

要接收文件的机器开启监听准备接收文件,本机器的ip地址为1.2.3.4

1
$ nc -l -p 1234 > foo.bar

发送文件的机器开始发送文件

1
$ nc 1.2.3.4 1234 < foo.bar

===
[erq]

HTML页面中储存自定义信息的方式能想到的大概有以下几种:

  • 重用HTML元素的标准属性,比如 id、class、rel 和 title等,这些属性的值根据自己的需要进行解释。DWZ框架使用了这种方式。
  • 上面的方式毕竟违反了标准的语意,容易造成一些问题。HTML5通过标准化的data-数据属性来支持在DOM元素上附加自定义数据
  • 使用span或div元素包含自定义信息,通过样式(display: none;)使其不可见。
  • 使用javascript代码自定义页面DOM元素与Javascript数据结构的关联
  • 使用JQuery的缓存系统,.data方法向DOM元素附加自定义数据,.removeData移除DOM元素关联的自定义数据。如果dom元素从页面中remove,则JQuery会将其关联的自定义数据一并移除,无需显式调用.removeData。但是如果只是detach元素,则不会清除关联数据。这种方式是JQuery对上一种方式的标准化,其缓存系统十分完善。

以上几种方法如无特殊要求,建议使用JQuery的缓存系统。

===
[erq]

因为sql语句中用了中文的”月”,而NLS_LANG设置为”AMERICAN_AMERICA.AL32UTF8”,所以oracle提示了错误”ORA-01843 not a valid month”,只需将NLS_LANG设置为”SIMPLIFIED CHINESE_CHINA.AL32UTF8”即可。

Mac OS X使用BSD版本的命令行工具,虽然都共同遵守POSIX标准,但其与GUN命令行工具仍然有很多的不同,而且明显不如GNU版本的命令好用。

可以用homebrew来安装GNU命令行工具,下面是脚本,更详细的内容请参考[1]
可以先安装最新版本的bash,再运行下面的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/local/bin/bash

# add source
# brew tap homebrew/dupes

# GNU Coreutils
brew install coreutils

# build tools
brew install autoconf
brew install m4
brew install make

# misc
brew install binutils
brew install diffutils
brew install ed
brew install findutils
brew install gawk
brew install gnu-indent
brew install gnu-sed
brew install gnu-tar
brew install gnu-which
brew install gnutls
brew install grep
brew install gzip
brew install screen
brew install watch
brew install wdiff
brew install wget

# third party
brew install git
brew install less
brew install openssh
brew install python3
brew install rsync
brew install unzip
brew install vim

Update(2020/01/26):
homebrew/dupes已经deprecated,其下的formula迁移到brew/core下。
–default-names选项已经无效。

References:
[1]Install and Use GNU Command Line Tools on Mac OS X

===
[erq]

XMLHttpRequest Level 2 简称XHR2添加了ProgressEvent接口,使得可以不借助第三方插件,使用原生Javascript就可以实现上传下载进度监控。

下载的progess事件由XMLHttpRequest对象自身触发,而上传的progess由XMLHttpRequest.upload对象触发。

使用原生的Javascript可以这样写:

1
2
3
4
5
var xhr = new XMLHttpRequest();
// 下载进度监控
xhr.addEventListener("progress", download_progress_handler, false);
// 上传进度监控
xhr.upload.addEventListener("progress", upload_progress_handler, false);

如果使用JQuery则需要一些曲折,因为JQuery没有对上传下载进度监控提供直接的支持。但是$.ajax函数提供了xhr和xhrFields配置接口,可以修改JQuery内部使用的XMLHttpRequest对象的属性,甚至可以提供自己的XMLHttpRequest对象供JQuery使用。

所有有了以下两种方式来配置$.ajax实现进度监控:

使用xhr配置

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
//.....
xhr: function() {
// 获取JQuery内部使用的XMLHttpRequest对象
var xhr = $.ajaxSettings.xhr();
// 下载进度监控
xhr.addEventListener('progress', download_progress_handler, false);
// 上传进度监控
xhr.upload.addEventListener('progress', upload_progress_handler, false);
return xhr;//一定要返回,不然jQ没有XHR对象用了
}
});

使用xhrFields配置

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
//......
xhrFields: {
onsendstart: function() {
// this指向JQuery内部使用的XMLHttpRequest对象
// 下载进度监控
this.addEventListener('progress', download_progress_handler, false);
// 上传进度监控
this.upload.addEventListener('progress', upload_progress_handler, false);
}
}
});

进度事件处理函数

此时的事件对象为ProgressEvent

1
2
3
4
5
6
7
8
function upload_progress_handler (e) {
if (e.lengthComputable) {
var percentComplete = e.loaded / e.total;
// ...
} else {
// 不能计算进度
}
}

References:
[1]Using XMLHttpRequest
[2]jQuery+FormData+文件上传+上传进度

===
[erq]

现代浏览器中的DOM对象有一个classList属性,这是一个DOMTokenList类型的对象。这个对象有add,remove,toggle,contains方法,可以用来操纵或测试DOM元素的class。

img元素的width和height属性只会取出图像当前的宽度和高度,这宽度和高度可能不是图像原始的尺寸,因为img元素可以指定width和height属性。

现代浏览器为img元素添加了两个属性naturalWidth和naturalHeight可以获取图像的原始尺寸。这两个属性是只读的。
jquery没有对应的属性或方法,可以通过获取原始的dom对象来读取这两个属性。

对于不支持这个两个属性的浏览器,可以通过生成一个不设定width和height的内存图像来获取原始尺寸。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var image = document.getElementById("img_id");

if(typeof image.naturalWidth == "undefined") {
// legacy browsers
var tmp_img = new Image();
tmp_img.addEventListener('load', function(e){
var rw = tmp_img.width;
var rh = tmp_img.height;
});
tmp_img.src = image.src;
}else{
// modern browsers
var rw = image.naturalWidth;
var rh = image.naturalHeight;
}

===
[erq]

最新版本的Mac OS X内置的bash仍然是3.x, 下面使用brew更新bash到4.x

安装bash
js$ brew install bash

/etc/shells文件最后附加一下行:
js/usr/local/bin/bash

更改当前用户的shell
js$ chsh -s /usr/local/bin/bash

即便如此,Terminal仍然使用系统内置的bash,也就是/bin/bash,这可以通过Terminal Preferences来修改。修改Shell open with为Default login shell或者为 command(complete path),空白处填/usr/local/bin/bash即可。

或者更暴力更直接一点:

1
2
# cp /bin/bash /bin/bash-3.bak
# ln -sf /usr/local/bin/bash /bin/bash

最后看一下bash版本:

1
2
3
4
5
6
7
8
9
10
$ echo $BASH_VERSION
4.3.24(1)-release

$ bash --version
GNU bash, version 4.3.24(1)-release (x86_64-apple-darwin13.3.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

===
[erq]

直接删除jdk目录即可

JDK所在目录为/Library/Java/JavaVirtualMachines/jdk_major.minor.macro_[_update].jdk

比如删除以下 jdk 1.8

rm -rf /Library/Java/JavaVirtualMachines/jdk1.8.0_06.jdk

===
[erq]