ssh公钥登录centos

2015年4月18日 没有评论

折腾了好久,差不多2个小时,其实很简单的,而且网上的教程也很多,但是大多类似,需要注意的地方很少有人对新手提示。当然也可以归结我对系统还是不熟悉,下面整理一下我艰苦奋斗的结果吧!

测试环境

服务器:CentOS release 6.6 (Final)

客户端:win7

ssh软件:xshell5

ssh服务配置

sshd配置文件,一般位于“ /etc/ssh/sshd_config”,使用编辑器打开

vim /etc/ssh/sshd_config

注意以下配置文件内容:

#是否允许root登录
PermitRootLogin yes

#ssh使用Rsa登录允许
RSAAuthentication yes
#ssh允许公钥登入
PubkeyAuthentication yes
#公钥文件位置
AuthorizedKeysFile .ssh/authorized_keys

#是否允许密码登入,改为no就禁止密码登入
PasswordAuthentication yes

配置完成以后,重启sshd进程。

service sshd restart

至此服务端大致配置完成,接下来我们来用工具生成登陆的公钥吧。

xshell公钥

在xshell简体中文中的“工具->新建用户密钥生成向导”

类型选择rsa,长度1024即可。

然后是下一步下一步了
xshell1

这里的密码出于安全目的最好再设置一个,这样在你的密钥丢失的情况下不会让黑客十分容易的登入服务器。

xshell2

 

这里注意公钥格式可选有3种可选,具体就不介绍了。点击保存为文件,然后完成即可。

然后上传保存的公钥文件(pub格式的文件)到用户主目录的.ssh目录下面,若.ssh目录不存在,请自行新建。

cd ~/.ssh/
cat id_rsa_centos_1024.pub >> authorized_keys
chmod -R 777 ~/.ssh
service sshd restart

最后需要注意是请禁用你的selinux,如果不仅用,可能还是登入不了,我就被它困住了2个小时,一直提示我“用户密钥未在远程主机上注册”.

参考资料:http://codelife.me/blog/2012/09/01/ssh-session-profile-management-in-terminal-of-macos-x/

ubuntu14.10安装vlck

2015年2月13日 没有评论

自从系统更新到14.10以后,一直没有安装上vlc,使用软件中心安装时总是失败,使用apt安装时,提示一个依赖库版本不行,所以就这么一直耽误下来了。今天在搜http live streaming的时候又看到vlc,于是就想给电脑装上。

google了一下,分享一下经验:


#添加ppa

sudo add-apt-repository ppa:videolan/master-daily

sudo apt-get update

sudo apt-get install vlc

vlc是一款非常强力的播放器,enjoy it!

vlc

初始C++对象

2015年2月12日 没有评论

本人是一个php程序员,去年由于工作机会使用过一点C语言。由于以前使用惯了php这种弱类型语言,在回头来使用C这种强类型的语言,项目期间也是各种纠结不适应。一个同事建议我使用C++来开发它,C++可以使用标准库,而使用C语言所有的东西几乎都要自己开发来写,做一个用户管理要自己来实现链表,就这些方面来看php这种高级语言相比C语言可以解放程序员更多时间去做其他事情。你可以把自己的业务逻辑更完善或者其他的相关的事情。去年年末到新公司,主要是做游戏,主要用C++做服务端,就决定花一些精力来学习C++,最近也看了一点经典的《C++Primer》,就动手写了一个简单的C++的类!

Printer类:


#include <iostream>
#include <string>
using namespace std;

class Printer{
public:
string m_msg;
Printer();
void setMsg(string str);
void showMSg();
};

int main(){
string msg("Hello Wolrd!");
Printer p = Printer();
p.setMsg(msg);
p.showMSg();
return 0;
}

Printer::Printer(){
cout << "Welcome to Printer!" <<endl;
}

void Printer::setMsg(string str){
m_msg = str;
}

void Printer::showMSg(){
cout << m_msg << endl;
}

这个简单的类里面涉及到成员变量和成员函数,其实C++面向对象就这点和php相比还是很大的。

先说最重要的一点吧,成员变量的操作。在php中,如果我要对一个类的成员进行操作,一般我们会使用”$this”关键字来调用操作的。但是在C++里面,你是可以直接对其操作的,例如上面setMsg函数赋值时,就是直接使用的“m_msg = str;”.所以在声明类的成员时,最好对其加上前缀或者后缀进行表示,否则,你就会可能和你在外部声明的变量重名了,使用起来就会很混乱了。

其实关于访问控制上面,php默认的是public而C++默认的是private。

还有一个就是关于变量实例时,我感觉如果你最初是一个php程序员之后来接触C++也是会可能遇到的问题。php在实例化类时,我们会使用new关键字,例如我要实例一个上面的Printer类,写法是这样的“$p = new Printer;”,但是C++里面如果你要也是使用new关键字的话,如”Printer p = new Printer;”,编译器会报错的。因为new关键字是在堆里面申请内存空间的,所以此时返回的指针类型的,此时就是应该把类型做类似的声明“Printer *p = new Printer;”.当然如果你不需要使用指针,也可以这样根据构造函数来实例化对象”Printer p = Printer();”.

基于这些,在进行C++开发时,就需要注意变量的命名规范来避免冲突。

分类: C/C++ 标签:

在php中使用socket进行tcp链接

2015年1月21日 没有评论

今天提供一个php利用socket建立tcp链接的类,当然后面可能会对这个类进行升级。php对C语言的socket操作进行了很好的封装和继承,而且个人感觉使用起来也比C语言方便很多(可能因为我本身就是一个phper而不是一个C语言开发者)。


class TcpScoket{

var $address;

var $port;

var $sock;

var $sockResult;

var $recvMsg='';

function __construct($address,$port=80){
$this->address = $address;
$this->port = $port;

$this->sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$this->sock) $this->getLastError();
$this->sockResult = socket_connect($this->sock,$this->address,$this->port);
if(!$this->sockResult) $this->getLastError();
}

/**
* 发送信息
* @param string $msg 发送信息
* @return mix 成功返回发送字符数,失败返回false
*/
function sendMsg($msg){
$msgLen = strlen($msg);
$num = socket_send($this->sock,$msg,$msgLen,0);
return $num;
}
/**
* 接受信息
* @param integer $len buff长度
* @return string 接受信息
*/
function recvMsg($len=512){

while(true){
$num = @socket_recv($this->sock,$buffer,$len,0);
if($num){
$this->recvMsg.=$buffer;
}else{
break;
}
}

return $this->recvMsg;
}

/**
* 获得上次的socket错误
* @return void
*/
function getLastError(){
$error = socket_last_error();
echo socket_strerror($error);
exit;
}

function __destruct(){
socket_close($this->sock);
}

}// end of class

使用它也是非常简单的,下面给出一个很简单的example,当然也欢迎大家补充.


$tcp = new TcpScoket("127.0.0.1",5730);
$tcp->sendMsg("你好");
echo $tcp->recvMsg();

分类: PHP 标签:

微信js自定义发送好友

2014年12月19日 没有评论

最近在做一个建设银行信用卡的项目,各种大改小改都折腾了一个星期多了!今天总算到一个段落了!其中客户提了一个要自定义发送给朋友的标题、描述、缩略图的问题!以前没有做过这个微信相关都开发,在网上找了好久,期间还因为js错误耽误了不少都事件!


var imgUrl = "http://www.hacknoote.com/ccb_12/img/logo.jpg";//这里的图片必须是http开头的完整路径
var lineLink = window.location.href;
var shareTitle = 'xxxxxx';//标题

var descContent = 'xxxxxx';//描述

var appid = ''; //可不填写

function shareFriend() {
 WeixinJSBridge.invoke('sendAppMessage',{
 "appid": appid,
 "img_url": imgUrl,
 "img_width": "200",
 "img_height": "200",
 "link": lineLink,
 "desc": descContent,
 "title": shareTitle
 }, function(res) {
 //_report('send_msg', res.err_msg);
 })
}

function shareTimeline() {
 WeixinJSBridge.invoke('shareTimeline',{
 "img_url": imgUrl,
 "img_width": "200",
 "img_height": "200",
 "link": lineLink,
 "desc": descContent,
 "title": shareTitle
 }, function(res) {
 //_report('timeline', res.err_msg);
 });
}

function shareWeibo() {
 WeixinJSBridge.invoke('shareWeibo',{
 "content": descContent,
 "url": lineLink,
 }, function(res) {
 //_report('weibo', res.err_msg);
 });
}
// 当微信内置浏览器完成内部初始化后会触发WeixinJSBridgeReady事件。
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
 // 发送给好友
 WeixinJSBridge.on('menu:share:appmessage', function(argv){
 shareFriend();
 });
 // 分享到朋友圈
 WeixinJSBridge.on('menu:share:timeline', function(argv){
 shareTimeline();
 });
 // 分享到微博
 WeixinJSBridge.on('menu:share:weibo', function(argv){
 shareWeibo();
 });
}, false);

其中“imgUrl”设置发送好友圈时的缩略图,“lineLink”设置发送给好友链接的链接地址,“shareTitle”设置标题,“descContent”设置分享的描述,“appid”设置微信公众帐号都appid,当然也可以不填!

最后我们来看一下图片的预览效果!

wx_js

分类: Web 标签:

代码看实现,注释知原因

2014年11月27日 没有评论

前几天看到陈浩在手机微博上面回答“如何看待Linus‘从不认为阅读别人的代码是了解某个想法的一种有用的方法’言论?”.手机看东西不是很方便,所以也一直没有细看,今天在关注陈浩微博的时候又看到了他这个回答,忍不住点进去看了看!陈浩写的东西正如我过去说过的,还是营养成分很好的,让我从中很受启发的!下面的内容是从知乎copy过来的!

Jeff Atwood说过这么一句话:“Code Tells You How, Comments Tell You Why”.

其实,Jeff这句话并不准确,另外,我把其扩展一下——

代 码 => What, How & Details
文档/书 => What, How & Why

可见,代码并不会告诉你 Why,看代码只能靠猜测或推导来估计Why,是揣测,不准确,所以会有很多误解。而且,我们每个人都知道,Why 这个东西是让你一通百通的东西,也是让人醍醐灌顶的东西。(这也是楼主为什么喜欢看书的原因,我也是

但是,代码会告诉你细节,这是书和文档不能给你的,细节是魔鬼,细节决定成败,这样的话我们不但听过很多了,我们做技术的也应该体会过很多了。当然,我们也要承认,这些代码细节给人带来的快感毕竟不如知道Why后的快感大(至少对我是这样的)

书和文档是人对人说的话,代码是人对机器说的话

所以,

  1. 如果你想知道人为什么要这么搞,那么你应该去看书,看文档(就像Effective C++、Code Complete、Design Pattern、Thinking in Java等等这样的书)
  2. 如果你要知道让机器干了什么?那你应该看代码!(就像Linus去看zlib的代码来找性能问题)

因此,我认为都比较重要,关键看你的目的是什么了。

    • 如果,你想要了解一种思想,一种方法,一种原理,一种思路,一种经验,恐怕,读书和读文档会更有效率一些,因为其中应该会有作者的思路的描述。比如像Effective C++之类的书,里面有很多对不同用法和设计的推敲,像TCP/IP详解里面也会对TCP算法的好坏的比较……这些思维方式能让你对技术的把握力更强。光看代码很难达到这种级别。(现在你知道什么样的书是好书了吧 ;-))

 

  • 如果,你想了解的就是具体细节,比如:某协程的实现,某个模块的性能,某个算法的实现。那么,你还是要去读代码的。因为代码中会有更具体的处理(尤其是对于edge case或是一些代码技巧的东西)

另外,看看下面的几个现像,你可以自己比较一下:

  • 很多时候,我们去读代码,那是因为没有文档,或是文档写得太差。
  • 很多时候,你在google, stackoverflow, github过后,你会发现,你掌握的知识就是一块一块的碎片,即不系统,也不结构化,更别说融汇贯通了。你会觉得你需要好好地读一本书,系统地掌握知识,这种感觉你一定很强烈吧
  • 很多时候,在你去读别人代码的时候,你会因为基础知识或是原理不懂,或是你不知道为什么的情况下,你要么完全读不懂代码,要么就是会误解代码。(比如:如果你没有C语言和TCP原理的基础,你根本读不懂linux下TCP的相关代码的。我们因为误解代码用意而去修改代码造成的故障还少吗?)
  • 很多时候,看到一个算法时或是一个设计时,比如Paxos这样的,你是不是会有想去看一下这个算法的实现代码是什么样的?如何才能实现的好?(但是如果你没看过Paxos的算法思想,我不认为你光看代码实现,就能收获到Paxos的思想)
  • 很多时候,当你写代码的时候,你能感觉得到自己写的代码有点别扭,怎么写都别扭,这个时候,你也会有想去看别人的代码是怎么实现的冲动
  • …… ……

从代码中收获得大,还是从书中收获的大,不同的场景不同的目的下会有不同的答案。

这里,谈一谈人的学习过程吧,从学习的过程中,我们来分析一下看代码和看书这两个活动。

人对新事物的学习过程基本都是从“感性认识” 到 “理性认识”的。

    • 如果你是个新手,那应该多读代码,多动手写代码,因为你需要的是“感性认识”,这个时候“理性认识”对你来说你体会不到。一是因为,你没有切身的感受,告诉你Why你也体会不到,另一方面,这个阶段,你要的不是做漂亮,而是做出来。所以,在新手这个阶段,你会喜欢Github这样的东西

 

  • 如果你是个老手,那么你有多年的“感性认识”了,你的成长需要更多的“理性认识”,因为这个阶段,一方面,你会不满足于做出来,你会想去做更牛更漂亮的东西,另一方面,你知道的越多,你的问题也越多,你迫切地需要知道Why!这个时候,你就需要大量的找牛人交流(读牛人的书,是一种特殊的人与人的交流),所以,这个阶段,你会喜欢读好的书和文章的

然而,对于计算机行业这个技术创新超强技术繁多的行业来说,我们每个人都既是新手,也是老手。

《========================================================================》

上面这些内容都是陈浩的回答,不难看出陈浩确实是读过不少书的,像我这种程序员,其实大部分还是处于多读代码多动手的阶段,当然也承认不如陈浩大叔这么爱看书,读过的书也不能相提并论。这里推荐一下陈浩的微博“左耳朵耗子”,还有他的个人博客“酷壳”。陈浩和惠新宸都是我比较关注的2个大牛吧,但是陈浩写的文章感觉针对各种层次的都有。当初我学C时,看了不少陈浩的文章,尤其是他写《跟我一起学Makefile》和他写的gdb调试程序!但是在惠新宸身上,我只能看到他作为php开发组专家这个耀眼的光环!

分类: 随笔 标签:

ubuntu 14.04解决gedit gb2312编码问题

2014年8月4日 没有评论

使用gedit打开gb2312或者gbk编码的文件时,如果文件过大,会导致gedit出现错误退出。这时候,可以通过修改gedit自动检测编码的顺序来解决这个问题。
执行下面的命令:


sudo gsettings set org.gnome.gedit.preferences.encodings auto-detected "['GB18030','UTF-8', 'CURRENT', 'ISO-8859-15', 'UTF-16']"

这条命令,把GB18030放到了gedit检测顺序的第一位,而GB18030编码可以保证GB2312和GBK编码文件的正常打开。

为了大家方面复制粘贴,我把代码内容粘贴到下面:

sudo gsettings set org.gnome.gedit.preferences.encodings auto-detected “[‘GB18030′,’UTF-8’, ‘CURRENT’, ‘ISO-8859-15’, ‘UTF-16’]”

原文地址:http://lxdlife.us/system/ubuntu-gedit.html

分类: Linux 标签: ,

ajax跨域解决方案-Cross Origin Resource Sharing

2014年7月25日 没有评论

前几天在做一个项目的时候,使用ajax异步请求时涉及到可能跨域访问的一个问题,就google了一下,找到了CORS这个东西(Cross Origin Resource Sharing),是用来解决web开发当中可能涉及到的跨域问题。

CORS的原理:

CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问。CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求。实现此功能非常简单,只需由服务器发送一个响应标头即可。

CORS浏览器支持情况如下图:

06082033-9233ced009a644f9af909baca57a72b7

目前市面市面主流的浏览器还都是支持的,如果你的客户是ie6或者ie7的忠实用户,那么可能还真有点麻烦。不过目前的移动端方面几乎所有手机都支持html5,因此几乎所有也都支持CORS。

CORS实战

假设我们页面或者应用已在 http://www.test1.com 上了,而我们打算从 http://www.test2.com 请求提取数据。一般情况下,如果我们直接使用 AJAX 来请求将会失败,浏览器也会返回“源不匹配”的错误,”跨域”也就以此由来。
利用 CORS,http://www.test2.com 只需添加一个标头,就可以允许来自 http://www.test1.com 的请求,下图是我在PHP中的 hander() 设置,“*”号表示允许任何域向我们的服务端提交请求:

header("Access-Control-Allow-Origin:*")

也可以设置指定的域名,如域名 www.test2.com ,那么就允许来自这个域名的请求:

header("Access-Control-Allow-Origin:www.test2.com")

其本质就是在apache或者nginx的返回的http头中加入:

Access-Control-Allow-Origin:*
Access-Control-Allow-Origin:www.test2.com

因此这里面我们可以引申以下apache当中设置header来实现跨域,在windows下apache的httpd.conf文件中:

 LoadModule headers_module modules/mod_headers.so#这里是加载headersmodule

<IFModule headers_module>
Header add Access-Control-Allow-Origin "www.test2.com"
</IFModule>

重启apache就好,下面是request返回中的header内容!
1111111

Stardict-Ubuntu下不错的词典工具

2014年5月28日 没有评论

实话实说,一直对ubuntu下面没有找到一款类似有道词典或者金山词典这样的软件而苦恼,毕竟英文水平有点菜,看很多英文资料的时候很吃力,一些得力的工具帮忙可以有效提高阅读的效率!今天在Ubuntu软件中心终于被我找到一款类似的软件,拿来和大家分享一下-Stardict(星际译王)!

安装Stardict

apt-get安装:

sudo apt-get install stardict

软件中心安装:

在软件中心搜索stardict,然后选择安装即可!

安装离线词典

下载地址:

StarDict Dictionaries — 星际译王词库 词典下载,包括中文,日文,韩文词典等

zh_CN 简体中文词典,由上面的地址进入,包括汉英与英汉词典

推荐下载:朗道英汉字典,朗道汉英字典,牛津英汉双解美化版。前两个词典词汇量比较大,牛津的词典包括还包括英文解释。

点击词典后面的 tarball 就可以下载了。

stardict离线词典的保存位置在Ubuntu下面在“/usr/share/stardict/dic”,所以我们需要把下载好的词典解压到这个目录下面就可以在词典管理里面找到了。

现在将这三个词典解压到星际译王的词典目录下,终端输入命令:

tar  -xvf  stardict-oxford-gb-formated-2.4.2.tar.bz2  -C  /usr/share/stardict/dic

tar  -xvf  stardict-langdao-ce-gb-2.4.2.tar.bz2  -C  /usr/share/stardict/dic

#tar  -xvf  stardict-langdao-ec-gb-2.4.2.tar.bz2  -C  /usr/share/stardict/dic

设置星际译王

打开星际译王

d1

2.

进入词典管理,可以看到刚才下好的离线词典

stardict1

选择词典管理,可以调整词典的顺序,也就是翻译时,哪一个词典在前哪一个在后。

QQWry,Man,Dict.cn 这三个可以删掉了

stardict2

3.

进入首选项 -> 取词,可以根据需要将两个选项全部钩选。

选择一个取词按键,我选择了 Ctrl

stardict3

选择首选项 -> 网络词典,可以把网络词典取消了。

d2

其他设置可以根据个人喜好进行选择。

 桌面取词

这时无论是在终端,浏览器或者pdf阅读器里面在选中词以后再按我们设置的取词键(我的设置的是F4,不经常用到)!

终端取词

sd1pdf取词

sd2很不错吧!

参考文章地址:http://hi.baidu.com/sf_chipan/item/41f642579b67ecb08c12ede7

 

 

 

ubuntu下chkconfig的代替工具–sysv-rc-conf

2014年4月25日 没有评论

今天早上在配置新安装的ubuntu14.04时,使用chkconfig时发现系统提示找不到指定的指令,在centos下一直都是这么做的,难道还需要安装工具吗?google一番以后,发现原来ubuntu在12.10以后不再支持chkconfig这个工具,其替代工具是sysv-rc-conf.

安装sysv-rc-conf


sudo apt-get install sysv-rc-conf

帮助命令


sudo sysv-rc-conf --help

显示启动项列表


sysv-rc-conf --list  #代替 chkconfig --list

sysv-rc-conf --list mysqld #代替 chkconfig --list mysqld

添加启动项


sysv-rc-conf apache2 on #代替 chkconfig apache2 enable

添加普通开机启动命令

例如我的goagent需要开机启动,如果写成一个init.d脚本文件太麻烦,那么怎么设置开机启动方法那?

最简单的办法,按super键(键盘windows键),然后在里面输入启动,在搜索列表里面选择启动应用程序。

启动

然后点击启动应用程序,然后选择添加按钮,弹出下面的对话框,在命令处写入相应的命令,如我的goagent的开机启动命令为”/home/king/apps/goagent/local/goagent-gtk.py”.

添加启动应用程序

然后保存退出重启,我们就看到goagent自动启动了!