闲情zhi

生活 创业 时评 杂文

SCP后台运行传输(防止大文件传输 网络中断)

1、运行SCP命令
[root@test dpdir]# nohup scp OUTDB_ERR??.dmp oracle@192.168.1.133:/oradir

2、输入密码
nohup: appending output to nohup.out
oracle@192.168.1.133’s password:
此时输完密码进程会挂起,还是在前台运行

3、输入ctrl+z暂停程序
会出现如下提示:
[1]+  Stopped                 nohup scp OUTDB_ERR??.dmp oracle@192.168.1.133:/oradir

4、执行bg使进程在后台继续运行
[root@test dpdir]# bg
[1]+ nohup scp OUTDB_ERR??.dmp oracle@192.168.1.133:/oradir &

 

 

ref http://blog.itpub.net/205377/viewspace-1755848/

 

Qt应用开发学习(5) – Qt发送Http请求(Post/get)

qt的http请求还是很简单的

比如get请求

QEventLoop eventLoop;

    //request login api
    QNetworkAccessManager netManage;
    QNetworkRequest netReq(QUrl(QString("https://www.baidu.co/auth/login")));

//    netReq.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    QObject::connect(&netManage, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

    QNetworkReply *netReply = netManage.get(netReq);
    eventLoop.exec();

    qDebug() <<  "success" << netReply->readAll();

这边也红了eventLoop这个,自己写的话去掉问题也不大。

post请求则需要更多的信息

QNetworkAccessManager netManage;
    QNetworkRequest netReq(QUrl(QString("https://www.baidu.co/auth/login")));

    netReq.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

    //data params
    QUrlQuery postData;
    QByteArray params;

    postData.addQueryItem("email", "contact@222.co");
    postData.addQueryItem("passwd", "2222");

    params.append(postData.toString());

    QObject::connect(&netManage, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

    QNetworkReply *netReply = netManage.post(netReq, params);
    eventLoop.exec();

    ui->pushButton->setText("Login Completed");

    qDebug() <<  "success" << netReply->readAll();


Gitlab使用记录

之前使用bitbucket以及之后迁移到自己搭建的gitlab的时候,采用的多人协作模式都是如下图。

无标题

但今天在研究gitlab结合jenkins的文章中看到了另外一种更加简便的管理方式…也真是后知后觉啊..

无标题

不过bitbucket本身没有分支保护功能,而gitlab并非如此。所以第二种协作方式显得更加的必要。

但是相比之下第二种方式对于分支的命名和管理要求会更加高一点。

 

jenkins的CI部署还在研究中…等更新

Sublime Text3 工具 SFTP

SFTP是一个非常优秀的工具,维护线上的配置文件,查看日志文件非常的简易。

filehelper_1451356623015_29

 

 

包括Nginx配置文件的修改,再也不用怎么打开线上服务器了。

 

不过作为运维的工具,我还需要几个工具:

  1. 可以本地输入命令,线上可以直接执行
  2. 多台服务器之间文件同步的工具

sublime Text3 Config for myself

 

Package Control

import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

Docblockr   注释占位符
SublimeLinter   代码错误提示
Bracket Highlighter  括号匹配

SideBarEnhancements 侧栏增强工具

SFTP 本地直接管理FTP上的文件

Soda -Theme 主题

BetterCoffee Coffee高亮

SCSS scss文件高亮

 

 

 

 

gulp-changed gulp-sass only compile files that changed

these are some examples

uglifycss = require "gulp-uglifycss"
watch = require "gulp-watch"
changed = require "gulp-changed"

##编译scss文件
gulp.task 'sass', ->
  gulp.src "src/scss/**/*.scss"
  .pipe(changed("assets/css", {extension: ".min.css"}))   //this is right              {".css"} is wrong because i use rename ".min"
  .pipe(sass())
  .on "error", logError
  .pipe autoprefixer
  browsers: ['last 3 versions'],
     cascade: true, #是否美化属性值 默认:true 像这样:
     #-webkit-transform: rotate(45deg);
     # transform: rotate(45deg);
      remove:true #是否去掉不必要的前缀 默认:true
  .pipe uglifycss()
  .pipe rename suffix: '.min'
  .pipe gulp.dest 'assets/css'
  .pipe livereload()

#编译coffee文件
gulp.task "coffee", ->
  gulp.src "src/js/**/*.coffee", read:false
    .pipe(changed("assets/js", {extension: ".min.js"}))
    .pipe browserify
      debug: true
      transform: ['coffeeify']
      extensions: ['.coffee']
    .on "error", logError
    .pipe uglify()
    .pipe rename suffix: ".min"
    .pipe extReplace '.js'
    .pipe gulp.dest "assets/js"
    .pipe livereload()

#编译coffee文件
gulp.task "coffee", ->
  gulp.src "src/js/**/*.coffee", read:false
    .pipe(changed("assets/js", {extension: ".js"}))
    .pipe browserify
      debug: true
      transform: ['coffeeify']
      extensions: ['.coffee']
    .on "error", logError
    .pipe uglify()
    .pipe extReplace '.js'
    .pipe gulp.dest "assets/js"
    .pipe livereload()

If you have problem, leave your message

gulp-changed

高德地图使用小记

因为租哪儿之后会做海外的业务,所以很快地图要从高德地图迁移到google Map。不过使用高德地图过程中的一些经验值得留下来,以后可以作为参考(当然不会说API,只是写一点方向性的解决方案)。

1. Marker、Polyline等覆盖物

租哪儿地图找房必然会用到一些标记,如房源信息,地铁线路、以及区域。

这些覆盖物需要注意的几个点是:
1. 他们可以绑定事件,如marker.on(“click”, function(){})
2. marker等是有内置函数可以获取此html,以及自定义marker的样式的。
3. marker等是可以自定义参数的extData,这边遇到过坑。
4. 覆盖物图层是可以分层的,之前很傻逼,用map.clearMap清除,然后marker.setMap(map)这样来添加,导致清除图层的时候不能选择性的不分清除。然而这边更优化的方案则是 map.add map.remove来进行覆盖物的添加。对了,map.add 是可以添加单个、也可以添加一个marker组成的数组的。

2. 地图事件

租哪儿的地图是可以拖动的,拖动的时候会触发事件以从服务器端获取房屋数据。但拖动触发事件有很多。我们团队之前有人开发的时候用touchstart、dragstart触发,经常会出问题,后来我选用movestart来触发,则很精准。所以这种东西的选择很关键,需要留意。

如何判断JS中两个数组相同

今天做的一个需求需要比较两个数组是否相同,网上查了几个方法。有个方式特别让我印象深刻,也就对于JS特性比较熟悉的牛儿们比较玩得转了,学习记录下来。

假设
a = [1,2,3]
b = [1,2,3]

JS中的 == 和 === 是无法直接进行比较的。

但是 >= > 这些符号,会把数组直接变成字符串进行比较。

所以利用这个特性存在表达式
a > b || a < b 如果ab相同,那么两个都是false,即 false||false 则返回false,取反则产生true 如果ab不同,那么其中一个必定是真,即false||true,则返回true,取反则产生false 是不是超级牛!作为一个有灵性的代码手!必须下跪求饶!

HTTPS网站如何使用百度分享

前阵子因为电信广告劫持,一怒之下给租哪儿上了https,广告倒是没有了,百度分享却不支持https。

作为一个有灵性的,很有灵性的码帅哥,怎么可以容许浏览器左上角没有绿色的锁图标呢,处女座不能忍。

微信截图_20151118131309

微信截图_20151118130120

然后百度分享确实这个阶段不支持https。可以看到百度分享的域名都是 http://bdimg.share.baidu.com/

所以很无奈,灵性的我直接物理下载了百度分享的组件代码和文件,直接放在网站目录(=。=当然你可以放CDN,通过HTTPS访问啊)

微信截图_20151118131507

直接上线,DONE!excited!

微信截图_20151118131614

微信截图_20151118130732

 

不过这种做法有种问题,是我把百度logger.js里面的统计代码删掉了,这个logger的坐拥就是用来记录数据的,里面nclick的图片文件,没错,这个是http,所以可以考虑删掉logger的内容,但是后果就是没有百度分享的统计数据了。本叼也表示很无奈啊。

 

以下附件是百度分享离线压缩包 ,使用也很简单,改一下路径全搞定。

 

window._bd_share_config={

		"common":{
			"bdSnsKey":{
				"tsina": "3185645315",
				"douban": "0741f32a7258ef8715c5d97f570ace95"
			},
			"bdText":"",
			"bdMini":"2",
			"bdMiniList":false,
			"bdPic":"{:C('RESOURCE_DOMAIN')}{$img.url}!medium",
			"bdStyle":"1",
			"bdUrl" : "", 
			"bdSize":"32"
		},

		"share":{},
	};

	with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='/assets/lib/bdshare.min.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];