免费好用的MySQL数据库客户端图形界面管理工具

1. Workbench
MySQL Workbench — 可视化数据库设计
MySQLWorkbench 是一款可视化的数据库设计工具,它将SQL开发、管理和数据库设计、创建和维护融合到一个简单的开发环境中,它源自fabFORCE.net,是 DBDesigner4的接班人,并且更换了mysql GUI工具绑定。当前的版本是5.2,最开始的版本是5.0, 需要强调的 是,MySQLWorkbench是被视为DBDesinger 4的继承者来开发的。

下载地址:http://dev.mysql.com/downloads/workbench/

2. HeidiSQL

ConnectionHeidiSQL 之前被称为mySQL-Front,是由德国程序员AnsgarBecker和一些在Delhi领域有突出贡献的人开发的一款免费的开源客户端。用 HeidiSQL管理数据库,用户必须通过验证登录一个本地或者远程的MySQL服务器,创建一个会话(session). 在这个会话里,用户可以通过 连接MySQL服务器管理MySQL 数据库,会话结束会断开与服务器的连接。它的特征集对于大部分普通和高级的数据库,表和数据操作来说已经足够了,但 是为了让它趋向完美,它依然保持积极的开发状态。

一个由Java, jHeidi编写的版本,被设计用来工作在Mac和Linux电脑上,不幸的是,这个项目在2010年三月被叫停了。

官方网站:http://www.heidisql.com/

3.phpMyAdmin10-best-mysql-gui-tools5

PhpMyAdmin是由PHP编写的,目的在于通过Internet管理MySQL,PhpMyAdmin支持对MySQL的大范围的操作,最频繁的使用是数据库的管理、表格、字段、关系、索引、用户、权限。你也可以直接执行SQL语句。

官方网站:http://www.phpmyadmin.net/home_page/

4. Sequel Pro

10-best-mysql-gui-tools6Sequel Pro是一款免费的开源项目,它是CocoaMySQL 数据库管理系统的继承者, CocoaMySQL是LorenzTextor脑力劳动的产物, 而Lorenz Textor是从2003年开始,CocoaMySQL主要的开发者。

SequelPro用来管理MySQL数据库(本地或者internet),它允许你增加、删除数据库和表,更改字段、索引和视图,过滤table内容,增加、编辑和删除列,执行自定义查询和转存table和整个数据库
它兼容MySQL 3.x, 4 or 5.

官方网站:http://www.sequelpro.com/

5. MySQL Browser

MySQLBrowser的优点是简单,极其简单,安装之后能够立刻上手,马上就能使用的那种,布局也很简陋,功能也很简陋,简单使用没有问题,尤其是刚开始学习mysql的童鞋,可以尝试一下。

官方下载地址: http://dev.mysql.com/downloads/gui-tools/5.0.html

linux 查看系统信息命令

下面给除了各linux发行版比较常用的系统信息查询的命令

#  man  # 使用man命令 查看命令手册

# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态用户
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务服务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务程序
# rpm -qa # 查看所有安装的软件包

PHP跳出多层循环

使用下面方法可以直接跳出循环(推荐):

$http = 0;

foreach($arr as $v){

    for($i=1;$i<=3;$i++){
        
        if($http == 200) break 2;

        echo $i,"\n";

        $http = 200;
    }

    echo $v,'这里不会输出';
}

echo 'END';

但是有些特殊情况使 层数不确定,或是很多层时(一般不会有这种情况):可以使用goto;

foreach($arr as $v){
    for($a=1;$a<=3;$a++)
    for($b=1;$b<=3;$b++)
    for($c=1;$c<=3;$c++)
    for($x=1;$x<=3;$x++)
    for($d=1;$d<=3;$d++)
    for($v=1;$v<=3;$v++)
    for($z=1;$z<=3;$z++)
    for($n=1;$n<=3;$n++){

//        if($http == 200) break ??;
        if($http == 200) goto end;

        echo $n,"\n";

        $http = 200;
    }

    echo $v,'这里不会输出';
}
end:

echo 'END';

C语言产生满足正态分布的随机数

C语言中可以通过rand函数生成满足均匀分布的随机数,但是生成满足正太分布的随机数就没有那么简单了,下面对常用的几种方法进行总结并用C++编程实现。

方法一:由均匀分布的随机数来产生

一个简单可行的并且容易编程的方法是:求12个在(0,1)上均匀分布的和,然后减6(12的一半)。这种方法可以用在很多应用中,这12个数的和是Irwin-Hall分布;选择一个方差12。但此推导的结果限制在(-6,6)之间,并且密度为12。

方法二:Box-Muller方法

Box-Muller方法是以两组独立的随机数U和V,这两组数在(0,1]上均匀分布,用U和V生成两组独立的标准常态分布随机变量X和Y:

正态分布曲线 2

方法三:由正态分布曲线图形得到的直观结果

图1 正态分布曲线

正态分布曲线

从上图可以看出,在μ附近的概率密度大,远离μ的地方概率密度小,我们要产生的随 机数要服从这种分布,就是要使产生的随机数在μ附近的概率要大,远离μ处小。算法的主要思想是:在上图的大矩形中随机产生点,这些点是平均分布的,如果产生的点落在概率密度曲线的下方,则认为产生的点是符合要求的,将它们保留,如果在概率密度曲线的上方, 则认为这些点不合格,将它们去除。如果随机产生了一大批在整个矩形中均匀分布的点,那 么被保留下来的点的横坐标就服从了正态分布。可以设想,由于在μ处的 f(x)的值比较大,理所当然的在μ附近的点个数要多,远离μ处的少,这从面积上就可以看出来。我们要产生的随机数就是这里的横坐标。

根据以上所述三种方法,编写C++测试代码如下:

#include

#include

using namespace std;

#define pi 3.1415926

#define rd (rand()/(RAND_MAX+1.0))

//区间[min,max]上的均匀分布,min和max要求传入的参数类型一致

template <<span style=”color:blue”>class T>

T rand(T min, T max)

{

return min+(max-min)*rand()/(RAND_MAX+1.0);

}

//求均值为miu,方差为sigma的正太分布函数在x处的函数值

double normal(double x, double miu,double sigma)

{

return 1.0/sqrt(2*pi)/sigma*exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));

}

//按照矩形区域在函数值曲线上下位置分布情况得到正太函数x值

double randn(double miu,double sigma, double min ,double max)

{

double x,y,dScope;

do{

x=rand(min,max);

y=normal(x,miu,sigma);

dScope=rand(0.0,normal(miu,miu,sigma));

}while(dScope>y);

return x;

}

double randn(int type)

{

//按照12个均匀分布之和减去6得到正态分布函数的x值

if (type==1)

return rd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd-6.0;

//按照计算公式y=sqrt(-2*ln(U))*cos(2*PI*V)计算得到x

else if(type==2)

return sqrt(-2*log(rand()/(RAND_MAX+1.0)))*cos(2*pi*rand()/(RAND_MAX+1.0));

else

return randn(0.0,1.0,-10.0,10.0);

}

int main(int argc,char* argv[])

{

srand((unsigned)time( NULL ));

ofstream outfile(“321.txt”);

for (int i=0;i<100;i++)

{

//randn(1)、randn(2)和randn(3)效果差不多

outfile << randn(3) << endl;

}

return 0;

}

参考:

[1] http://zh.wikipedia.org/wiki/正态分布

[2] http://en.wikipedia.org/wiki/Normal_distribution

[3] http://wenku.baidu.com/view/e9de620d7cd184254b3535c9?pn=2&ssid=&from=&bd_page_type=1&uid=bd_1332071259_725&pu=sl@1,pw@1000,sz@224_220,pd@1,fz@2,lp@0,tpl@color,&st=1&wk=rd&maxpage=3

转载:http://blog.sina.com.cn/s/blog_70a14458010155b8.html

高富帅们的Git技巧

Git是一个分布式版本控制系统,拥有许多神奇而易用的特性(比如:分支),这让它可以轻松适应各种工作流程。这篇文章不涉及Git的基本使用,而是介绍了一些高级却有用的小技巧。让我们一起来看看高富帅们的Git技巧,准备好逆袭吧!

以“块”形式暂存你的改动

你肯定已经很熟悉的使用git add命令来将改动暂存到暂存区(staging area)了。你可能也会偶然因为两个不同的原因而做了一次改动,却没有分别提交(仅仅提交了一次),所以,当你执行git log时,会看到诸如这样的提交信息:“修改X,改动无关的Y”。如果这看起来像是你的工作方式,交互式add将是你的有力工具。

交互式add(或者叫add块),将会一个块一个快的循环你的改动。使用命令git add -p时,你可以在每个改动“块”(即:连续的改动会被组织到一起)时进行一些选择,比如:切分当前块为更小的块、跳过一个改动块、甚至手动的编辑该块,你 可以敲入?来查看所有该命令提供的选项。

开始以“块”形式暂存改动简单到只需一条命令(括号部分替换为特定文件):

git add -p (path/file)

译者注:感觉这条命令平常用的较少,我遇到需要分别提交的情况时,都是手动来add然后提交,该命令是这种方法的高级版本。我们平常可能对提交历史的重视比较低,常常出现一些无用的、无意义的提交信息,可以试试这条命令。

切换到最后所在分支

作为一个善良的码农,当你需要快速做些修正或是清理工作时,你都应该花些时间来对待。如果你的工作流程是十分依赖分支的话(译者注:强烈建议如 此),你可能不希望无关的修正影响到现在正在进行功能开发的分支。这意味着,你应该使用git stash命令来暂时存放你的改动,然后切到master分支(译者注:或是其它啥分支,我一般是取名为fix),在那个分支进行修正。(译者注:修正完 了,可以切回正在进行功能开发的分支,执行git stash pop来弹出之前暂存的改动,继续进行开发)。在不同分支间切换很乏味,幸好这里有个快捷命令可以切换到你最后所在的分支:

git checkout -

这个语法对于使用linux的高富帅们来说一定不陌生,cd命令有个类似的缩写cd -,表示切换到你最后所在的目录。当你需要切回功能开发分支时,你根本不用关心那个分支是啥名,只需git checkout -。

译者注:感觉tab键的自动补全也挺好用的,不过这条命令可以少敲点字。有了这条命令,妈妈再也不用担心我的分支切换了。

显示哪些分支被合并了(或是哪些没有被合并)

在使用git时,你可能会创建许多分支,导致执行git branch命令列出分支时变得有些杂乱。于是,你想处理那些已经合并到master分支的无用分支,但是,当你执行git checkout -d 来删除分支时可能会遇到“麻烦”(译者注:git会拒绝删除未合并的分支并提示你),如果使用以下命令,你将不再需要三思而后删,可以自信的处理那些已经 合并了的分支。

如果你想要看看你的本地分支里哪些分支是已经合并进你当前所在的分支时,可以使用:

git branch --merged

反过来,如果需要查看哪些分支还没有合并进当前所在的分支,可以使用:

git branch --no-merged

结合高富帅的UNIX工具,你可以轻松的删除那些已经合并了的分支:

git branch --merged | xargs git branch -d

译者注:xargs是UNIX平台的一个工具,它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。如果git branch –merged显示的是a,b,c三个分支已经合并,上面的命令会转换为:git branch -d a b c。更多xargs的信息:http://zh.wikipedia.org/wiki/Xargs

从另一分支获取文件内容而不用切换分支

设想你正在进行重构,你创建了好几个分支并在各分支下进行改动。这时,你想把另一个分支里某一个文件的改动引入到当前工作的分支里,为了达到目的你 可能需要好几步:git stash你的改动;切换到那个分支;获取文件的改动;切回工作分支(当然是使用git checkout -);继续进行编辑(译者注:别忘了git stash pop)。但是,你也可以直接检出另一分支的文件,并且合并到你当前所在的工作分支,使用命令(括号部分替换为对应的分支和文件):

git checkout (branch) -- (path/file)

以最后提交排序的Git分支

想必你已经使用上面的tip处理了杂乱的分支,有一些是用–merged选项标志来清理的吧。那其它的分支咋办呢?你咋知道哪些是有用的,哪些是 完全过期无用的呢?git for-each-ref命令可以打印出一个列表,该列表显示每个分支最后一次提交的引用(reference)信息。我们可以自定义输出来包含一些有用 的信息,更重要的是我们还可以按日期排序。可以使用下面的命令来输出一个列表,该表将显示按时间先后排序的每个分支的最后提交信息、提交者等信息:

git for-each-ref --sort=-committerdate --format="%(committername)@%(refname:short) [%(committerdate:short)] %(contents)"

还可以把它定义在gitconfig里:

[alias]
  latest = for-each-ref --sort=-committerdate --format=\"%(committername)@%(refname:short) [%(committerdate:short)] %(contents)\"

译者注:定义后就只需执行git latest了。注意双引号需要转义!

在玻璃房内的人们别用git blame

或者说,在玻璃房内的人们不应该直接使用git blame而不带下文的选项标志。(译者注:玻璃房内的人是完全能被别人看到的人。这里的意思应该是想说,你每一次提交的变动都会被记录到git仓库的历 史,对于git仓库来说,你就像是住在玻璃房里的人,没有任何秘密,你根本逃不过git的”责问“)git blame是很有用的命令,它就像使用科学来证明你是正确的!但是请注意,许多文件的变动是很表面的,发现问题的来源需要更多的探索。像是移除空白、移动 内容到新行、移动内容到另一文件等动作都可以使用选项来忽略掉,以便更容易的找到代码变动的始作俑者。

在你blame(责备)他人前,记得用以下命令看看结果:

git blame -w  # 忽略移除空白这类改动
git blame -M  # 忽略移动文本内容这类改动
git blame -C  # 忽略移动文本内容到其它文件这类改动

译者注:git blame用来显示一份文件每一行的最近一次提交的提交hash值和提交者。当你跟别人说“我真的没改过这个文件啊”之前,就得git blame下。

在整个git仓库提交历史中找寻内容(然后删掉它)

你有时可能需要查找一行你写的代码,但是就是无法找到。它可能安放在了一些已经被遗忘的分支,或是删除了很久,又或是就在那显而易见的地方。无论哪种方式,你都可以通过一些命令在整个git仓库的历史中搜寻特定的字符串。

首先,我们需要拿到所有的提交,然后,使用git grep来搜寻特定的字符串。如下:

git rev-list --all | xargs git grep -F '搜寻的字符串'

你可能有一个粗心的朋友不小心在仓库里提交了诸如,用户名、密码、外婆的大蒜食谱等敏感信息。首先,他们得更改用户名、密码(并向外婆道歉)。然 后,你需要搜寻这些得罪人的文件,并将他们从整个仓库的历史里抹去(这听起来好像很容易)。经过这个处理,那些执行git pull的伙计们就会发现所有提交中包含的敏感信息都被清理干净了,而那些没有合并你的远程改动的家伙还是拥有敏感信息(所以,千万别忘记先改用户名和密 码)。我们来看看怎么操作。

首先,重写每个分支的历史,移除敏感信息:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch (filename)' --prune-empty --tag-name-filter cat -- --all

然后,将记录敏感信息的文件增加到.gitignore文件,并提交(括号部分替换为对应文件名):

echo (filename) >> .gitignore
git add .gitignore
git commit -m "Add sensitive (filename) file to gitignore"

接着,由于我们改写了历史,我们需要“强制”的将改动推到远程:

git push origin master --force
# 译者注:还可以使用命令
git push origin +master

最后,这个文件还在你的本地仓库里,还需要将它完全抹除:

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

你这粗心的朋友从敏感文件的危机中解脱,而你用你高超的git知识成功逆袭,成为了他的英雄!

译者注:一天,妹子叫我去她家帮她把她的三围信息从git仓库的历史里完全删除,我研究了很久不得要领。妹子说,不如我们做点其它的事吧。我觉得我的git知识被她鄙视了,坚定的说,我一定要把它删掉!然后,就没有然后了… …

忽略文件跟踪

在和他人合作时可能常常意味着你需要更改一些配置才能让应用在环境里跑起来,这时,常常会不小心把这些只对你有意义的配置文件也给提交了。为了不再 常常关注这些文件,看着它们在git status时放肆的显示“modified”,你可以告诉git忽略它们的改动。这种方式,可以看成是一种和仓库绑定的gitignore文件(括号部 分替换为对应文件):

  git update-index --assume-unchanged (path/file)

译者注:感觉,.gitignore文件更方便和好理解。

让分支的历史归零

不管出于啥理由,有时从头开始正是你需要的。也许是你接手了一个不确信能安全开源的代码仓库;也许是你要着手做些全新的事情;也许是你想创建用于其 它目的一个新分支,又希望继续在仓库里维护它(比如:github页面,项目的文档一类的东西)。上述的情形下,你可以非常简单的创建一个没有提交历史的 分支(括号部分替换为对应分支):

  git checkout --orphan (branch)

译者注:我们知道,分支只是对提交的一个引用,所以,每当从当前分支创建一个分支时,被创建的分支都会延续之前的历史,但是这种方式却不会,是一个完完全全干净的git分支,没有任何的提交!

你一定离不开的别名

不讨论能节省大量敲击时间的“git别名(git alias)”技巧的git文章一定都是在耍流氓。停止输入冗长的命令,使用超级有用的别名吧!git别名可以加到.gitconfig文件里,或是使用 命令(译者注:本质就是改写.gitconfig命令)来增加(括号部分替换为别名和对应的命令):

    git config --global alias.(name) "(command)"
  1. 在依赖分支的工作流程中,你常常要在不同分支间切换,每次敲击节约你6个字母。
    co = checkout
    
  2. 在提交前瞧瞧你将要提交的都有什么改动是一个好习惯,这可以帮助你发现拼写错误、不小心的提交敏感信息、将代码组织成符合逻辑的组。使用git add暂存你的改动,然后使用git ds查看你将要提交的改动动。
    ds = diff --staged
    
  3. 你可能十分熟悉git输出的详细状态信息了,当到达一定境界时,你可能需要忽略所有那些描述,直击问题的核心。这个别名输出将输出git status的简短形式和分支的详细信息。
    st = status -sb
    
  4. 你是否在提交后才发现忘记git add某个文件了,或是提交了才想再改动些啥?amend(修正)暂存区到最近的一次提交吧。(译者注:这个命令不太好理解,–amend是重写提交历 史,-C是重用某次提交的提交信息。场景是当你提交完了发现还有些改动没提交,又不想写什么“改动了X,再次提交”这种狗血的提交信息。重新git add并git amend后,重用上次的提交信息再次提交,替换上次的不完整提交。特别注意–amend重写了提交,如果你已经push到远程了,慎用这条命令!)
    amend = commit --amend -C HEAD
    
  5. 有时上面的修正可能不好使了,你需要undo(撤销)。undo会回退到上次提交,暂存区也会回退到那次提交时的状态。你可以进行额外的改动,用新的提交信息来再次进行提交。
    undo = reset --soft HEAD^
    
  6. 维护一个多人编辑的代码仓库常常意味着试着发现何人在改动什么,这个别名可以输出提交者和提交日期的log信息。
    ls = log --pretty=format:'%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green) [%cn]' --decorate --date=short
    
  7. 这个别名用来在一天的开启时回顾你昨天做了啥,或是在早晨刷新你的记忆(括号内替换为自己的email)。
    standup = log --since '1 day ago' --oneline --author (YOUREMAIL)
    
  8. 一个复杂的仓库可能很难用直线式的输出来查看,这个别名可以用图表的形式向你展示提交是怎样及何时被加到当前分支的。
    graph = log --graph --pretty=format:'%C(yellow)%h %C(blue)%d %C(reset)%s %C(white)%an, %ar%C(reset)'
    

译者注:我根据上面的别名进行了一些整理修改,这是我现在的.gitconfig里的别名配置:

[alias]
  st = status -sb
  co = checkout
  br = branch
  mg = merge
  ci = commit
  ds = diff --staged
  dt = difftool
  mt = mergetool
  last = log -1 HEAD
  latest = for-each-ref --sort=-committerdate --format=\"%(committername)@%(refname:short) [%(committerdate:short)] %(contents)\"
  ls = log --pretty=format:\"%C(yellow)%h %C(blue)%ad %C(red)%d %C(reset)%s %C(green)[%cn]\" --decorate --date=short
  hist = log --pretty=format:\"%C(yellow)%h %C(red)%d %C(reset)%s %C(green)[%an] %C(blue)%ad\" --topo-order --graph --date=short
  type = cat-file -t
  dump = cat-file -p

via alimama mux
作者:Chris Kelly 译者:栖邀
英文原文

来源:http://segmentfault.com/a/1190000002448847

unauthenticated user mysql 原因分析

最近常出现 客户端连接远程服务器失败问题

show processlist;

出现 unauthenticated user,一直到超时;

网上查了下,到处都是互相抄袭文章,类似:

解决的方案很简单,结束这个反查的过程,禁止任何解析。

打开mysql的配置文件(my.cnf),在[mysqld]下面增加一行:

skip-name-resolve

。。。

实际上我都用IP连接的,不会出现这种问题

最后网上有个说是网络慢也会影响连接,ping 测试了下果然慢

ping liyunde.com
PING liyunde.com (112.126.64.59): 56 data bytes
64 bytes from 112.126.64.59: icmp_seq=0 ttl=51 time=41.072 ms
64 bytes from 112.126.64.59: icmp_seq=1 ttl=51 time=40.965 ms
64 bytes from 112.126.64.59: icmp_seq=2 ttl=51 time=41.036 ms
64 bytes from 112.126.64.59: icmp_seq=3 ttl=51 time=42.662 ms
64 bytes from 112.126.64.59: icmp_seq=4 ttl=51 time=41.681 ms
64 bytes from 112.126.64.59: icmp_seq=5 ttl=51 time=41.701 ms
64 bytes from 112.126.64.59: icmp_seq=6 ttl=51 time=41.859 ms
64 bytes from 112.126.64.59: icmp_seq=7 ttl=51 time=43.713 ms

网络响应过慢,配置服务器不能解决这个问题,换个好点的网络,问题自然解决。

服务器的瞬时 Diffie-Hellman 公共密钥过弱

服务器的瞬时 Diffie-Hellman 公共密钥过弱

ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY

该错误会在连接到安全 (HTTPS) 服务器时发生。 这意味着服务器正在尝试建立安全连接, 但由于严重的配置错误,连接会很不安全!

在这种情况下, 服务器需要进行修复。 为了保护您的隐私, “Google Chrome”不会使用不安全的连接。

以前可以跳过,现在不行了

方法:

1.更改服务器加密协议为TSL,chrome 45 版本后不再支持SSL v2 v3了

Firefox 可以使用 禁止dhe,不过不推荐

2.使用更高强度的证书,可以自签,也可使用免费证书(不过都有时间限制)

当然如果不差钱,可以购买一个证书,这样解决问题彻底

PHP7 Support PThread

In PHP7 etc/standard/php_smart_str.h has been renamed to etc/standard/php_smart_string.h.

错误描述:

php-7.0.0beta3/ext/pthreads/php_pthreads.c:22:
./src/pthreads.h:41:10: fatal error: ‘ext/standard/php_smart_str.h’ file not
found
#include <ext/standard/php_smart_str.h>
^
1 error generated.
make: *** [php_pthreads.lo] Error 1

https://github.com/gophp7/gophp7-ext/wiki/extensions-catalog

https://github.com/krakjoe/pthreads/tree/seven

今天在github 上发现一个新的分支seven 可用在php7

下载之

使用当前最新php版本 php-7.0.0RC2

➜  /Users/liyunde/Downloads/pthreads-seven  >phpize7
Configuring for:
PHP Api Version:         20131218
Zend Module Api No:      20141001
Zend Extension Api No:   320140815

配置

➜  /Users/liyunde/Downloads/pthreads-seven  >./configure –with-php-config=php-config7 –enable-pthreads

…..

creating libtool
appending configuration tag “CXX” to libtool
configure: creating ./config.status
config.status: creating config.h

编译,安装

make -j2

make test

sudo make install

make 通过,工作正常,enjoy !

 

Excel最多可存多少行,多少列

使用Excel2007或Excel2010,在“另存为” 菜单中可以选择为“Excel 07-2003 工作薄”,从中我们可以看出,到了2007版以后,存储格式变了,简单一点从扩展名便可以看出,一个是.xls,一个是.xlsx,差异自己去体会,因为 对于我来说,Excel用得相当少。

平时多是用Number,不过一般为能用 都导出为excel格式,演示文档,内容相同的PPT2007 相对PPT2003要小很多,更方便携带。

Excel最多可存多少行,多少列?查到的资料如下:

Excel 07-2003一个工作表最多可有65536行,行用数字1—65536表示;最多可有256列,一个工作簿中最多含有255个工作表,默认情况下是三个工作表;

Excel 2007及以后版本,一个工作表最多可有1048576行,16384列;

我内容配得上搜索推荐吗 博文搜索排名的思考

在英超及欧冠赛后新闻发布会上,获胜方主教练常说的一句话是:“我们今天场上的表现配得上胜利”,而当球队表现不佳侥幸获胜时,他们也会坦然承认:“(虽然我们今天获得了胜利,)我们今天场上的表现配不上胜利”。

我们今天场上的表现配得上胜利(网络图片)

如本月欧冠表现不佳的皇马靠裁判过于严厉的红牌,在客场反超比分淘汰10人曼联后,穆里尼奥就坦承:“我们今天的表现配不上胜利”。

而对于国内太多搜索营销者来说,我们追求更高搜索引擎排名,带来更好的营销效果没有错,但我们同样也应该多考虑的是,自己网站内容是否“配得上搜索引擎高排名推荐”,是否能给搜索用户带来“配得上这个排名”解决问题的内容——这很关键,因为这不仅直接关系到我们能否将这个偶然的搜索流量转化为网站忠实用户,关系到我们关键词排名是否上升,而且更关系到我们网站能否留住辛苦努力积攒的铁杆用户的问题。

很遗憾的是,更多人关心的只是自己网站关键词更多“总在最前”的排名展示,没有考虑过我的内容是否“配得上这个排名”的问题,这样做下来,我们所强调的“重视原创”只是为了“迎合百度”,问题出发点错误,哪怕方法正确,结果也只会是错误的。

为什么我会想到这个问题?因为百度《2013年中国网站运营发展趋势报告》公开表明“扶持原创”态度后,我博客彻底改变了近7个月来原创内容百度迟迟不收录的尴尬情况;而且我博客百度搜索流量一直呈上升之势,从原来日平均不足10IP上升到了现在30IP以上。

但我并不觉得特别兴奋,我认为如“网络编辑有前途吗”、“媒体不实报道”及“SEO转行”等很多百度关键词,我相关博文内容的确能为搜索用户提供一些帮助——至少可以给这些关键词搜索用户拓宽一下思路。就这些关键词排名来说,我完全可以套用英超欧冠比赛后主教练们的话,毫不谦虚地说一句:“我这些内容完全配得上搜索引擎这样的高位推荐”。

而且我认为,搜索引擎这样的推荐是“为了提高它自身的用户体验行为”,完全是为它自己考虑,根本不值得我特别兴奋——因为搜索引擎不推荐我这些文章它推荐谁呢?

但同时,我也发现,百度对我博文的几个关键词推荐就连“侥幸获胜”都谈不上了,内容对搜索用户没有丝毫帮助,甚至可能造成误导。这样的关键词搜索引擎推荐,对我博客以后的发展完全不是什么好事情。如此“搜索引擎关键词”高排名推荐,如果套用英超欧冠比赛后主教练们的话来说,那就是:“我这些内容完全配不上搜索引擎这样的高位推荐”——而且对那些有可能误导搜索用户的关键词内容,我还必须马上采取补救措施补救。

这样的关键词搜索推荐真的很要命,比如“百度301”这个关键词,我被搜索引擎推荐的文章是一年多前写的,当时百度对于301跳转反应异常迟钝,甚至一年多时间都不能正确识别301跳转——就这篇文章所陈述内容来说,这在当时对于相关读者是个很好的提醒。

但现在就不同了,百度已经对301问题十分重视,百度站长平台专门就此发布说明,强调:“设置301之后,立刻在(百度)网站改版工具中将改版规则进行提交”,而我博文仍旧没有任何补充说明,也没有附上百度说明文章的相关链接。

显然,对于更多现在的搜索用户来说,就肯定无法从我博文如此的“老皇历”中,及时全面地了解现在百度对于301的态度及百度给出的正确处理方案。

虽然搜索用户从网络上获取正确信息的途径有很多,但考虑到如此搜索查询的朋友,多办都是不太熟悉此方面内容查询的人,如此不完整的过时内容,完全可能会对他们产生误导,这真的是件很不负责任的事。

这个事情还说明了两个问题:首先,更多网站关键词被搜索引擎更多的高位置展示推荐,对于我们更多中小网站来说,也并不完全是好事情。

我们网站内容是否配得上搜索排名推荐,这问题应该深思

我们真正应该追求的是,更多“我们网站内容配得上的搜索引擎排名推荐”,只有这样的关键词多起来之后,才会真正有益于我们网站的发展——这无论从网站即时销售“转换率提高”方面,还是从今后的网站发展来说,都是如此。

比如说,我一篇博文用户百度搜索关键词“XXXX方案”及相关关键词“XXXX文章”,我都没有怎么刻意优化——标题标签里也没有完整的出现其中任何一个关键词,完全是搜索引擎分词的结果。这也造成了我文章这几个关键词原来的百度排名全都在60位以后的情况。

但问题在于,前面百度高位推荐的内容搜索用户觉得不好,不断有搜索用户从N页之后比较靠后的位置,点击我的文章百度链接进入我博客——而且停留时间长,跳出率低。

于是,短短的一个多月时间,现在百度上我这几个关键词排名全部都已经进入了前20位,甚至有的进入了百度前几位。

显而易见,我博客的这几个相关关键词排名上升了,那肯定就有这几个关键词排名下降的网站。这个例子说明,我们那种“更多‘总在百度最前’的关键词排名”粗放式SEO思维,真的该好好的优化一下了。

其次,我博客“百度301”这个例子还说明,包括SEO内容在内的内容营销内容,都需要不断的更新维护,与时俱进,才能真正满足用户的即时需求,这就是内容营销专家Kristina Halvorson在《Web内容策略指南》中提醒我们的:“内容越多越难以维护”——她从另一个角度也提醒我们,对于更多中小网站来说,无论是网站内容,还是网站关键词主流搜索引擎高排名并非越多越好。

我们都十分注重营销结果,但太过于强调网络文章的即时推广营销效果了,过分地强调网络信息“文字向远方说话”中的“超越空间距离”层面含义;但网络信息“文字向远方说话”同样还包括了“超越时间距离”层面的含义。古话“文章千古事”、“千年的文章做得药”,对于今天的网络营销来说,也是完全适用的。

而且,往往更好的内容营销并不完全是赢在当下,而是赢在未来——打造出一个知名品牌,就个人品牌来说,大的如萨苏、当年明月;小一点的,如ZAC、月光博客。

这,可以给我们一些启发(本文由gouyn12原创首发,版权所有,文责自负,转载请以链接形式标明文章首发出处http://www.gouyn12.com/seogw/406.html及本声明,谢谢)。
http://www.chinaz.com/web/2013/0320/296457.shtml

WordPress文章ID不连续的解决方法

2012-03-28 16:47  来源: congblog.cn

最近看到有许多朋友提到“WordPress文章ID不连续”怎么办?,其实笔者刚刚接触WordPress的时候就发现了这个问题,所以也是一开始就把WordPress的自动保存以及文章修订版本功能隐蔽。但是固定连接如果不用postid命名的话也许发现不了,但是大葱一直使用的就是这种固定链接。如果你网速不佳的时候,这会影响到文章的编辑以及发表页面的载入速度;另外每一次自动保存的文章草稿它都会自动写入我们的数据库,这样的话无形之中也就大大了数据库的储存,冗余数据太多的话也会影响到数据库的工作效率,另外也就是我们之前提到的文章ID不连续。

WordPress仪表盘并没有直接的提供关闭这个功能的选项,那么今天就给大家讲讲如何把这个功能完完全全的隐蔽掉。

方法1:

WordPress默认是每60秒就会对文章进行自动保存,我个人是觉得太频繁了,那么我们可以打开博客根目录下的wp-config.php文件,搜索“require_once(ABSPATH . ‘wp-settings.php’);”在其前面/上面添加如下代码:

//自动保存10小时一次

define(‘AUTOSAVE_INTERVAL’, 36000);

//取消自动修订版

define(‘WP_POST_REVISIONS’,false);

方法2:

代码来源于国外网站,使用环境:WordPress 3.3.1,原理上 3.0 以上都支持,WP3.0.x 大葱没有进行测试。在我们当前使用主题的 functions.php 文件加入如下代码即可:

/* 取消自动保存和修订版本 */

remove_action(‘pre_post_update’, ‘wp_save_post_revision’);

add_action(‘wp_print_scripts’, ‘disable_autosave’);

function disable_autosave() {

wp_deregister_script(‘autosave’);

}

清理数据库中以前的文章历史修订版本

自动保存和修订版本我们都解决了,接下来我们进行删除数据库中的冗余文章和修订版本,数据库操作之前大葱建议大家先进行备份。我们登录phpmyadmin 中进行数据库管理,SQL语句命令行中写入以下运行代码执行(如果更改了数据库表名的前缀,需要将数据表名称中wp改成你的前缀):

delete from wp_posts where post_type=’revision’;

本文固定链接:http://www.congblog.cn/878.html | 大葱博客

How to set up mysql master/slave architecture.

来源:【原创】How to set up mysql master/slave architecture. (2008-12-10 09:55)

All the info below should be added in /etc/my.cnf. If you can’t find this file, just use the following statements to find where it is.

  1. To find the location of my.cnf.

ps aux | grep mysql | grep -v ‘grep’ | head -n 1

For example .

[root@localhost ~]# ps aux | grep mysql | grep -v ‘grep’ | head -n 1

root      2952  0.0  0.2   4512  1220 ?        S    16:12   0:00 /bin/sh ./mysqld_safe –defaults-file=/usr/local/mysql/my.cnf

Then we know the correct configuration file is /usr/local/mysql/my.cnf.

We should add the following lines to my.cnf in section [mysqld].

server-id = 1

log-bin=mysql-bin

binlog-do-db=db1

binlog-do-db=db2

binlog-ignore-db=ignore-db1

binlog-ignore-db=ignore-db2

expire_logs_days = 5

max_binlog_size=500M

log-slave-updates

Then restart mysqld manually and execute the following statements in mysql command line client.

  1. To grant valid user to slave.

To assume this thread called A.

grant file,replication slave on *.* to ‘mysql_ms’@’Slave IP’ identified by ‘Your password’;

flush privileges;

For example, if my slave’s ip address is "192.168.4.55". The user is "mysql_ms" and his password is "123456".

mysql> grant replication slave,file on *.* to ‘mysql_ms’@’192.168.4.55’ identified by ‘123456’;

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

Be sure to send the username and password to me.

  1. Lock tables and get the master’s binary log file and position.

flush tables with read lock;

show master status\G

You must not quit the current mysql command line client.

mysql> show master status\G

*************************** 1. row ***************************

            File: mysql-bin.000004

        Position: 595

Binlog_Do_DB: test

Binlog_Ignore_DB: mysql

1 row in set (0.00 sec)

mysql>

Then send the results to me.

  1. Backup exact database.

Now we locked all the tables and got the exact binary log file and position in the previous step. So begin to backup the exact database right now.

Use mysqldump to dump the necessary data to flat file, then use tool named gzip or gzip2 to compress it.

For example, if your database name is db1 and your mysql installation path was added in the environment variable named "PATH".

Use the following statement to backup your databases’ data.

mysqldump -uroot -p –net_buffer_length=10M –max_allowed_packet=11M db1 > db1.txt

Here is my example in my machine, my database name is test.

[root@localhost ~]# /usr/local/mysql/bin/mysqldump -uroot -p –net_buffer_length=100M –max_allowed_packet=120M test > test.txt

To compress the flat text file to a gzip file, using the following command.

gzip db1.txt

Then the compressed file named db1.txt.gz will be generated. You should send this file to me.

After all the above completes, go to thread A and execute the following command.

unlock tables.

Then quit thread A.

  1. What the slave machine want.

User name and password.

Master’s IP address.(192.168.4.54)

Master’s  mysql port.(3308)

Master’s  mysql binary log file and position

Master’s backup data.

  1. The following is the slave configuration.

Add the my.cnf on slave machine and restart mysqld.

[mysqld]

server-id = 2

replicate-do-db=db1

replicate-do-db=db2

replicate-ignore-db=ignore-db1

replicate-ignore-db=ignore-db2

log-bin=slave-bin

  1. Get the master information on slave machine.

Then exit from it and use the following command to import from the backup file in the shell environment.

gzip gb1.txt.gz

mysql –uroot –p –S/tmp/mysql3307.sock < gb1.txt

Enter the mysql command line client.

set @@global.max_allowed_packet=11*1024*1024;

Then exit it and enter it again.

Change master to

master_host=’192.168.4.54’,

master_port=3308,

master_user=’mysql_ms’,

master_password=’123456’

master_log_file=’mysql-bin.000004’,

master_log_pos=595;

start slave;