centos下升级mysql5.5+php5.6

现在windows中的软件随着需求量每时每刻都在更新,不更新再难满足用户需求。linux也是一样,落伍的软件版本已经不再试用,本篇文章主要针对linux环境下php和mysql的升级。

测试环境:

CENTOS6.8(腾讯云学生机) mysql 版本 5.1 php 版本5.3

一、更新php版本为5.6

1.查看并删除原有的php5.3(如果没有安装可以直接安装php5.6)

查看原本的php版本:
 php -V
查看已经安装的php的包:
 yum list installed | grep php
然后删除这些包:
yum remove ... ...
检查是否删除完毕:
yum list installed | grep php
结果为空则证明删除完毕
2.安装php5.6
添加源:
rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

使用yum list命令查看可安装的包:
yum list --enablerepo=remi --enablerepo=remi-php56 | grep php
安装php5.6
yum install ... ...
省略号为上面显示的和php5.6有关的内容
比如我这里是:
yum install php56w.i386 php56w-bcmath.i386 php56w-cli.i386 php56w-common.i386 php56w-dba.i386 php56w-devel.i386 php56w-embedded.i386 php56w-enchant.i386 php56w-fpm.i386 php56w-gd.i386 php56w-imap.i386 php56w-interbase.i386 php56w-intl.i386 php56w-ldap.i386 php56w-mbstring.i386 php56w-mcrypt.i386 php56w-mssql.i386 php56w-mysql.i386 hp56w-mysqlnd.i386 php56w-odbc.i386 php56w-opcache.i386 php56w-pdo.i386
一定要把目录中的所有项都安装,否则会出现未知错误,只能卸了重新安装。
成功以后,我们可以查看现在的php版本:
php --version
重启php-fpm:
service php-fpm restart

二、升级mysql到5.5

1.卸载原来的mysql5.1
查看是否安装了mysql:
rpm -qa| grep mysql
卸载mysql5.1:
rpm -e mysql-libs --nodeps
2.安装mysql5.5
添加源
rpm -Uvh http://mirror.steadfast.net/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

查看是否增加成功:

yum --enablerepo=remi,remi-test list mysql mysql-server

得到如下结构:

Loading mirror speeds from cached hostfile
* remi: mirrors.tuna.tsinghua.edu.cn
* remi-safe: mirrors.tuna.tsinghua.edu.cn
* remi-test: mirrors.tuna.tsinghua.edu.cn
* webtatic: sp.repo.webtatic.com
Installed Packages
mysql.i686 5.5.54-1.el6.remi @remi
mysql-server.i686 5.5.54-1.el6.remi @remi

安装mysql5.5
yum --enablerepo=remi,remi-test install mysql mysql-server
到最后显示complete表示安装成功
启动mysql
/etc/init.d/mysqld start
支持mysql开机启动
chkconfig --levels 345 mysqld on

以后还可以安装phpmyadmin来管理mysql,详见:

笑盐生

笑盐生

——————脩于而公元二零一七年二月二十四日凌晨,夜不能昧

孤舟披蓑问苍穹,腾龙搅海枭愚鰕。

盐生万里富船去?乌云一号复空舣!

穿着蓑衣,脚踏孤舟,(如浩宇间的一颗孤星般)质问苍穹,高高在上的龙们吹一口气,就可以翻江倒海,高傲而冷漠它们从不知道那小小的鰕虎鱼。盐生想着这些都快忘记了自己远渡万里来到彼岸,就是这船上的东西,也许卖完一船的盐巴就可以得到他此生都难以想象的财富,他就是要用这些来为家中病倒的母亲凑足药费,也许还有剩下的……可以娶个勤劳善良的媳妇也说不定……乌云一下遮住了半边的苍天,盐生被怒号的狂风刮得东倒西歪,他拼命的朝前划着船,可是瘦弱的他在瓢泼大雨下不堪一击,可是他还是不停的将盐巴往船舱里靠紧一点。不知过了多久,船到了彼岸,又和他来这里前一样干干净净,什么都没有剩下。

兰山蓝

兰山蓝
牛大香
安宁深处有单家
肉蛋双飞吃不腻
小菜加上来解乏
凡年双归冬不寒
一栽难得一回聚

——————————————修于公元二零一七年一月三十日

梦虚旎天涯乐于春

水中望月月压湾,
镜中看花画弗圆?
愚拙蘧心伴汝玩,
春风得意知不远。

——————————————脩于公元二零一七年一月

(No title)

愿四域友乐享冬至

雨漱间尖山峦平,
旦改乡音亦难云。
行军侧卧百朝行,
鱼虾百万亿金轮。
至东多食饺,南地更团圆?

__________________________脩于二零一六年冬至日

关于stl标准库里的list的删除

使用C++ STL里的list 我刚开始用的是remove();
这个方法现在发现真的是捉襟见肘。
因为每次移除是按值匹配移除,
所以相同的值的所有元素都被移除:

例子,转置一个链表的一段值:

//程序详见:
template
void ReverseInPart( T & L ,int n )
{//实现功能的主要部分,反转f到t的f-t个元素
cout << "Enter two number as changed form and to :" ; int f, t ; cin >> f >> t ;

if(f >= t || t > n || f < 1) { cout << "Do not need reverse!\n" ; return; } Literator lt= L.begin(); int l = 1 ; while ( l < f) { lt++; l++ ; } Literator ch = lt ;//使用迭代器来完成 ++ch; //迭代器始终指向一个元素的位置,所以lt迭代器每次都前移 //而ch每次指向下一个元素,即第i+1个元素 for(int i = f ; i < t ; ++i,--lt) { int x = *ch ; ++ch; //由于remove会删除所有值为*ch 的元素,所以ch 应该先增加 //使用erase更方便,详见gx/abort_stl_list L.remove(x); L.insert(lt,x); } //remove void remove( const TYPE &val );删除所有值为val的元素 }
可以看出如果输入链表元素都是不同的值的话都无所谓
比如说 1→2→3→4→5,现在逆转2~5
得到:1→5→4→3→2
但是如果输入中有相同的数就会发生错误,
如原链表:1→2→2→1
(其实是个镜像链表,这个在《程序员面试算法》的第17题有体现)
逆转3~4后,L.remove(x);这里x值为1时,
将导致删除两个元素,最后得到的链表就变成了:
2→1→2
后面发现erase()这个方法,可以直接删除迭代器
指向的链表元素,这个方法是很方便的:

template
void ReverseInPart( T & L ,int n )
{//实现功能的主要部分,反转f到t的f-t个元素
cout << "Enter two number as changed form and to :" ; int f, t ; cin >> f >> t ;

if(f >= t || t > n || f < 1) { cout << "Do not need reverse!\n" ; return; } Literator lt= L.begin(); int l = 1 ; while ( l < f) { lt++; l++ ; } Literator ch = lt ;//使用迭代器来完成 ++ch; //迭代器始终指向一个元素的位置,所以lt迭代器每次都前移 //而ch每次指向下一个元素,即第i+1个元素 for(int i = f ; i < t ; ++i,--lt) { int x = *ch ; Literatir d_ch; ++ch; //由于remove会删除所有值为*ch 的元素,所以ch 应该先增加 //使用erase更方便,详见gx/abort_stl_list L.erase(d_ch); L.insert(lt,x); } //remove void remove( const TYPE &val );删除所有值为val的元素 }

初识C++引用&

在将左程云的《程序员面试代码指南》JAVA版转化为C++版中遇到的问题之一就是JAVA的一切皆引用:
C++引用:

void swap(int &a,int &b)

两种写法,比如用来交换数组a的i和j两个位置的值:
写法1:

//1:声明为指针型:
template
void Swap(T *a,T *b)
{
T tmp ;
tmp = *a ;
*a = *b;
*b = tmp ;
}
//调用时:
Swap(&a[i],&a[j]);

写法2:

//2:声明为引用类型;
void Swap(T &a,T &b)
{
T c = a;
a = b ;
b = c;
}
//调用时:
swap(list[i],list[k]);

未完待续!

关于C++的动态数组

一、动态数组的优点:
动态分配内存,用一个指针传值方便。

二、为什么我要用动态数组?
在程序中遇到数组的传递时,函数中的创建的数组由于在函数作用域
外无效,所以不能有效的传递。

三、动态数组实例:

一维动态数组:

#include
using namespace std;
int main()
{
//使用new,在程序运行时动态分配空间
int * arr = new int[10];
//赋值方法和普通数组通用
for(int i = 0 ; i < 10 ; i++ ) { arr[i] = i; } //释放空间 delete []arr; return 0; }

使用new 和delete时应当注意:
1.不要使用delete来释放不是new分配的内存
2.不要使用delete来释放同一个内存块两次
3.如果使用new[]维数组分配内存,则应使用delete[]来释放
4.如果使用new[]来为一个实体分配内存,则应使用delete(没有方括号)来释放内存
5.对空指针使用delete是安全的

二维动态数组:

两种二维数组开辟空间的方法:
方法1:

int r,c;//r is rows ,c is cols
r = 5 ;
c = 8 ;
//method 1 to initialize a dynamic-planar arr
int **arr = new int*[r];
for (int i = 0 ; i
上面方法的创建的二维数组是不连续的,所以需要进行寻址,
如果要进行赋初值,必须一一赋值,而不能一次用:
arr[0]={0}将arr全部赋值为0。

寻址和赋初值为0:

//method 1 to initialize a dynamic-planar arr
//寻址
for(int i = 1 ; i < r ; ++i) { arr[i] = arr[i - 1] + c ; } //赋初值为0 for(int i = 0 ; i < r ; i++) { for(int j = 0 ; j < c ; j++ ) { arr[i][j] = 0; } }

方法2:


//method 2 to initialize a dynamic-planar arr
int ** arr = new int*[r];
int size = r*c;
arr[0]= new int[size];
for(int i = 1 ; i < r ; i++) { arr[i] = &arr[0][i*c]; } //using std::fill to fill 0 std::fill( &arr[0][0], &arr[0][0]+r*c, 0); //上面的方法1寻址后即可用此方法填满

二维动态数组空间释放:

for(int i = 0 ; i < r ; i++) { delete [] arr[i]; } delete [] arr;

如果二维动态数组作为返回值或者参数的方法见完整函数:
https://github.com/ghostxiu/justfortest/blob/master/arr.cc

赠友姜浩

 赠友姜浩

脉乡美酒一滴醉,直言真语扰人烦。

江南才俊多腼腆,将士北转霸不言。

炼狱噬魂身百死,醉梦归来战一回。

漫地桂香皆不问,蹄踏北地血无痕。

莫做莺燕逆修心,疯癫一怒惊破天?!

打开计算机的大门,进入OPENGL的世界

第一次接触图像是在研究生前,刚去公司,老板让做了个GIS地图。呃,是cesium(依赖于一个JS库),后面做了一个简单的VR应用。但是至此为止,我仍然对计算机图形学一无所知,现在我就把我遇到过的东西写下来,希望能够帮助到后来者。

去图案书馆借了本计算机图形学(OPGL三维渲染)的书,看起来很新,2016年出版的。看了第一章介绍了OPENGL和物理渲染的区别,以及优势。结果到了第二章就傻眼了!!!作者用的OPENTK开发工具包官网已经打不开了,直接上了半截程序,也不说运行环境。做了以下尝试:
1.继续寻找opentk这个工具包;

2.SharpGL(VS2012或者2010的拓展):结果不支持咱的VS2015

3.Csgl(上了官网一看是2003年的最新版,果断放弃)

最后决定还是用C++吧,网上VS2015+Opengl的配置:

原文地址:http://blog.csdn.net/Jacketinsysu/article/details/49563139

最后我决定放弃手里那本书,换上红宝书和蓝宝书 :

[Dave_Shreiner,_The_Khronos_OpenGL_ARB_Working_Gro

[Richard_S._Wright]_OpenGL_SuperBible_Comprehensi