0 1 2 |
$ xz -d ***.tar.xz $ tar -xvf ***.tar $ tar -xvJf ***.tar.xz |
可以看到这个压缩包也是打包后再压缩,外面是xz压缩方式,里层是tar打包方式。
可以直接使用 tar xvJf ***.tar.xz来解压,J这是大写的
0 1 2 |
$ xz -d ***.tar.xz $ tar -xvf ***.tar $ tar -xvJf ***.tar.xz |
可以看到这个压缩包也是打包后再压缩,外面是xz压缩方式,里层是tar打包方式。
可以直接使用 tar xvJf ***.tar.xz来解压,J这是大写的
1. 在命令行输入”dpkg-reconfigure locales”。进入图形化界面之后,(空格是选中/取消,Tab是切换),选中en_US.UTF-8和zh_CN.UTF-8,确定回车后,将en_US.UTF-8选为默认。
2. 安装中文字体,”apt-get install xfonts-intl-chinese “和” apt-get install ttf-wqy-microhei”
3. 重启 reboot
4. 这时发现网页不乱码,系统也不乱码,但是是英文的界面。打开系统设置,找到设置语言的地方,将语言再改为汉语(中国)。如果没有,或者找不到的输入如下命令:
0 |
# echo LANG="zh_CN.UTF-8" > /etc/default/locale |
5.重启。
6. 如果重启后界面没有变为中文,修改apt源并更新。
总结:Kali系统的一些常见问题,搜索Debian的常见问题,往往能搜到更多的信息。毕竟,Kali是在Debian上进行一些修改的镜像。
使用模块
node-windows
npm官网: https://www.npmjs.com/package/node-windows
github官网: https://github.com/coreybutler/node-windows
1.使用命令行工具,进入项目根目录D:\www\web\itme1下载node-windows模块 : npm install node-windows –save
2.在项目根目录创建nw.js文件
0 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#!/usr/bin/env node var Service = require('node-windows').Service; var name = 'shippositioning'; var svc = new Service({ name: name, //服务名称 description: '新船舶定位服务器自动启动', //描述 script: 'D:\\www\\web\\itme1\\bin\\www' //nodejs Express 4.x项目要启动的文件路径 }); // 在安装完成时触发 svc.on('install', function() { console.log('install'); console.log('安装服务'); //启动服务 svc.start(); }); /* console.log('服务名称:'+name); svc.on('alreadyinstalled', function() { console.log('alreadyinstalled'); console.log('已存在此服务'); }); svc.on('invalidinstallation', function() { console.log('invalidinstallation'); console.log('无效的安装'); }); svc.on('uninstall', function() { console.log('uninstall'); console.log('卸载完成'); }); svc.on('start', function() { console.log('start'); console.log('服务已启动'); }); // 在服务停止时触发 svc.on('stop', function() { console.log('stop'); console.log('服务已停止'); //启动服务 svc.start(); }); svc.on('error', function() { console.log('error'); console.log('发生错误'); }); */ //安装服务 svc.install(); //卸载服务 //svc.uninstall(); |
3.使用命令行工具,进入项目根目录运行 node nw.js,同时在项目根目录生成daemon文件夹,里面生成了以我的项目名称为文件名的exe文件和两个日志文件,当项目在浏览器中运行后,此文件夹还会生成几个日志文件。
4.进入系统服务,查找名称为shippositioning的服务是否正常启动。
系统基础环境说明:
Windows Server 2008 R2 Enterprise x64
IIS 7.5
Node v8.9.3
IIS新装模块:
URL Rewrite
iisnode-full-v0.2.21-x64.msi
Node应用程序:
express v4.15.5
socket.io v2.0.4
…
Node package.json文件如下:
0 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 |
{ "name": "shippositioning", "version": "0.0.1", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.18.2", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "ejs": "^2.5.7", "express": "~4.15.5", "jade": "~1.11.0", "morgan": "~1.9.0", "mysql": "^2.15.0", "node-windows": "^0.1.14", "serve-favicon": "~2.4.5", "socket.io": "^2.0.4" }, "main": "app.js", "devDependencies": {}, "author": "mrdede", "license": "ISC", "description": "" } |
如果确认不是php版本问题,需要检查定义常量时获取所在目录并定义ROOT根目录的方法。
0 1 2 3 4 5 6 7 8 9 10 |
/* 假定目录结构如下: / --- |-- /include --- |-- common.inc.php |-- ...... |-- /tmp |-- common.inc.php |-- index.php |-- ...... */ |
windows系统路径格式与linux系统路径格式是不同的(“\”和“/”),所以在设置ROOT路径时需要先进行替换。
windows路径 D:\www\web
linux路径 /www/web
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 根目录common.inc.php设置ROOT常量 // windows/linux系统都可用 define('ROOT', dirname(__FILE__)); // /include/common.inc.php设置ROOT常量 // windows系统可用/linux系统不可用 $path = dirname(__FILE__); define('ROOT', substr($path, 0, strripos($path, '\\'))); // /include/common.inc.php设置ROOT常量 // linux系统可用/windows系统不可用 $path = dirname(__FILE__); define('ROOT', substr($path, 0, strripos($path, '/'))); // /include/common.inc.php设置ROOT常量 // windows/linux系统都可用 $path = str_replace("\\", '/', dirname(__FILE__)); define('ROOT', substr($path, 0, strripos($path, '/'))); |
INSERT INTO … ON DUPLICATE KEY UPDATE …
表结构:
0 1 2 3 4 5 6 |
CREATE TABLE `mrdede_notfind` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `keyword` varchar(32) NOT NULL COMMENT '查询的关键词', `count` int(6) unsigned DEFAULT NULL COMMENT '计数:被查询的次数', PRIMARY KEY (`id`), UNIQUE KEY `keyword` (`keyword`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='保存没有查询到的搜索关键词' |
该语句是基于唯一索引或主键才可使用的,如下语句:
必要条件:其中字段id或keyword或count,至少有一个字段属性是主键或唯一索引。
0 |
INSERT INTO `mrdede_notfind` (id,keyword,count) VALUES (1,'织梦先生',3) ON DUPLICATE KEY UPDATE count=count+1; |
语句解释:如果查询主键id=1或者唯一索引keyword=’织梦先生’的记录存在,则更新此记录的count字段 count=count+1;如果没有查询主键id=1或者唯一索引keyword=’织梦先生’的记录都不存在,则插入一行记录。
其它:
假定id=1的记录存在,则下面语句与上面语句是等效的
0 |
UPDATE table SET count=count+1 WHERE id=1 OR keyword='织梦先生'; |
一般讲的宽度指的是内容宽度,但一个 div 的实际宽度不仅只于内容宽度,尤其在做 CSS 排版时更不能搞错,必须同时考虑 Padding、Border 与 Margin 的宽度,四个加起来才是 div 真正占有的宽度。
JQUERY 获取 DIV 宽度与高度(width,padding,margin,border)全都有了!
0 1 2 3 4 5 6 |
var content = $('div'). width();//只是获取content宽度 var contentWithPadding = $('div'). innerWidth();//获取content+padding的宽度 var withoutMargin = $('div'). outerWidth();//获取content+padding+border的宽度 var full = $('div'). outerWidth(true);//获取content+padding+border+margin的宽度 |
宽度与高度概念一样,只差水平与垂直向而已。
Margin 有个特色,就是当两个有 margin的 div 靠在一起时,两个 div 紧邻的 margin 不是相加,而是取其大者,举例来说,两个 10px margin 的 div 并在一起只会有 10px margin 的距离,若是一个 20px margin,另一个为 10px margin,则会有 20px 的 margin。
但是获取当前元素的全部宽度的时候,还是获取自身的margin+content+padding+border的值。
故事一:
“阻塞”与”非阻塞”与”同步”与“异步”不能简单的从字面理解,提供一个从分布式系统角度的回答。
1.同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。
而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。 Continue reading
使用WebStorm开发百度地图API时,在WebStorm中变量new_info提示:mutable variable accessible from closure…,译:可从闭包中访问的可变变量。在实际运行中,函数_translateCallback2()的形参info接收到元素的个数总是小于变量new_info传入元素个数,原因是在translate()函数的回调没有执行完,for就进行了下一个循环,或者是下几个循环。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
_translateCallback2 = function (data, info){ console.log('info:', info); ///// // ... } var convertor = new BMap.Convertor(); for(var v1=0,v2=10,i=0; i<new_point.length/10; i++){ v2 = v2 < new_point.length ? v2 : new_point.length; var v_point = new_point.slice(v1, v2); var new_info = info.slice(v1, v2); console.log('new_info:', new_info); ///// convertor.translate(v_point, 1, 5, function (data) { _translateCallback2(data, new_info); }); v1 += 10; v2 += 10; } |
解决方法:
1、在使用for循环时,不要使用带有回调函数的方法;
2、如果一定要使用带有回调函数的方法,那就用立即执行匿名函数括起来,如下:
(function(){ …… })(i);
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
var convertor = new BMap.Convertor(); for(var v1=0,v2=10,i=0; i<new_point.length/10; i++){ (function () { // 看这里 v2 = v2 < new_point.length ? v2 : new_point.length; var v_point = new_point.slice(v1, v2); var new_info = info.slice(v1, v2); convertor.translate(v_point, 1, 5, function (data) { _translateCallback2(data, info.slice(v1, v2)); }); v1 += 10; v2 += 10; })(i); //看这里 } |