2015-05-09 Saturday 21:30:58
Node.js
-
看了《深入浅出Node.js》,理解是Node.js是一个基于V8引擎的JavaScript解释器,主要用来实现Web服务器,亮点是异步I/O,单线程,是一种处理 C10k问题 的解决方案。
-
Node之所以用JavaScript来实现,部分原因是其它语言中已经存在了同步I/O的库,而JavaScript没有类似的包袱。
-
npm -g install
安装后可以用相应的命令行调用包。安装位置 /usr/lib/node_modules -
可以用来实现简单的HTTP服务器,与
python -m http.server
类似。
C++
-
Cpp 中可以在程序的任意位置声明变量是因为声明是 Cpp 中的合法语句,而C中声明语句与其它语句是不同的。
-
vector的初始化。
vector<int> a(100, 0); vector<vector<int> > matrix(M, vector<int>(N, 0));
2015-05-10 Sunday 18:55:51
A re-introduction to JavaScript (JS tutorial)
-
JS的解释器
-
Mozilla SpiderMonkey 的
js
,用 print() 来打印。 -
Node.js 的
node
,用 console.log() 来打印。 -
浏览器中的
Firebug
, 用 alert() 来打印。
-
-
数字类型是双精度浮点数,
-
两个字符串相加是字符串合并。数字与字符串相加时,会先转换为字符串,再做字符串合并。把数字转换成字符串的一种做法是加上空字符串。
"big" + "east" // "bigeast"
3 + 4 + "5" // "75"
"3" + 4 + 5 // "345"
-
三个等号与两个等号判断相等的区别
1 == true # true
1 === true # false
true === true # true
-
if…else, for loop, do…while, while, switch…case, 以及短路表达式。与C的语法类似。
-
JavaScript中的对象可以看作简单的名字-值对,与Python中的字典、C\++中的map类似。类的定义类似于给字典赋值的函数。
var obj = new Object();
var obj = {} # really like dict in Python!
function Point(x, y) {
this.x = x;
this.y = y;
}
成员变量的访问其实就是访问哈希表。有两种方式:
p = new Point(3, 4);
p.x += 1;
p['x'] += 1;
-
数组是一个特殊的对象,有length成员。越界访问会返回"undefine"。除了用类似C的for循环遍历数组外,还可以用Python类似的for语法来遍历,只不过 变量是数组的下标,而不是数组的元素 。
for (var i in a) {
// process a[i]
}
a.push(3);
数组其实可以看作一种键值限制为整数的哈系表,在JavaScript中,Array对象也是用哈希来实现的。数组长度为3的情况下,可直接对a[10]赋值,a[3…9]的值是未定义的。这在其它语言中是不行的。
数组可以当作vector(push),双端队列(pop, shift)。
-
函数。
-
每个函数的参数都可以通过 arguments 访问到,据此可实现可变参数函数。
-
函数也是一个特殊的对象,每个函数都有 apply 方法。
-
可以像给变量赋值一样定义函数:
-
var avg = function() {
var sum = 0;
for (var i = 0, j = arguments.length; i < j; i++) {
sum += arguments[i];
}
return sum / arguments.length;
}
-
递归函数需要命名。
-
JavaScript是基于原型的,它的类其实是用函数对象来实现的。通过给函数对象的prototype增加新的值,可以动态地为对象增加方法。
function makePerson(first, last) {
return {
first: first,
last: last,
fullName: function() {
return this.first + ' ' + this.last;
},
fullNameReversed: function() {
return this.last + ', ' + this.first;
}
};
}
s = makePerson("Simon", "Willison")
s.fullName(); // "Simon Willison"
s.fullNameReversed(); // "Willison, Simon"
-
函数嵌套,可以缓解全局变量的问题。
-
JavaScript的函数引用与C语言中的函数指针的区别在于,函数引用除了指针之外,还包含函数内部的变量,它们在函数返回后依然可以被访问到。
Thu 21 May 2015 11:14:47 AM CST
2015-05-22 Friday 14:07:24
JSON
impress.js
Mon 25 May 2015 04:54:20 PM CST
Python
-
函数的参数列表
-
函数的参数已经存放在list中,但直接把list传给函数是不行的,需要加上星号对list进行unpacking。
-
最大元素的位置
-
a.index(max(a))
-
index只返回第一个等于max(a)的元素的下标。
-
Wed 27 May 2015 09:39:37 AM CST
/etc/resolv.conf
-
用53端口连VPN,如果用自动分配的DNS服务器则无法上网,用Google DNS则无问题。但是 'dhcpcd' 或者 'dhclient' 会经常更改 /etc/resolv.conf,如果要始终使用 Google DNS,如果是 'dhcpcd' ,最简单的方法是将其放入到 '/etc/resolv.conf.head' 中。
-
还有其它方法,例如配置 '/etc/dhcpcd.conf' ,或者写保护 'chattr +i /etc/resolv.conf' 。
-
'drill(1)' get information of DNS.
Thu 28 May 2015 02:17:52 PM CST
OpenVPN IPv6
-
目前应该是路由有问题。而且53端口不能在实验室的电脑上连VPN。
-
现在是登录系统后,在 'startx' 之前加上 'proxychains' 整个系统的流量都通过ss走。测了一下速度,还可以,因为是IPv6。
-
可以开两个tty, tty1是正常的 'startx' ,而 tty2 是 'proxychains startx' 。只是发现在tty2中,zsh会卡住,把zshrc disable掉之后就可以,但很不方便!应该是oh-my-zsh有联网的模块在与proxychains通信?