戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

利用MySQL存储过程分割字符串

日期:2015年11月20日 作者: 分类:数据库 阅读:1,039

MySQL存储过程可用于分割字符串,现有一段字符串,如:”12,14,17,19″,要把它按逗号(,)分割,然后用于SQL中的 where in 条件查询。

1. 计算可分割成多少个字符串(func_split_strlen)

DELIMITER $$
DROP FUNCTION IF EXISTS `func_split_strlen`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `func_split_strlen`(
    f_string varchar(200),  -- 传入字符串
    f_delimiter varchar(5)  -- 分割符
) RETURNS int(11)
begin
    return 1+( length(f_string) - length(replace(f_string,f_delimiter, '')) );
end $$
DELIMITER ;

2. 拆分字符串函数(func_split)

DELIMITER $$
DROP FUNCTION IF EXISTS `func_split`$$
-- 功能:从 f_string 中以 f_delimiter 提取第 f_order 个字符
CREATE DEFINER=`root`@`localhost` FUNCTION `func_split`(
    f_string varchar(200),   -- 传入字符串
    f_delimiter varchar(5),  -- 分割符
    f_order int              -- 分割
) RETURNS varchar(255) CHARSET utf8  -- 返回字符串
begin
    declare result varchar(255) default '';
    set result = reverse(
        substring_index(
            reverse(substring_index(f_string,f_delimiter,f_order)),
            f_delimiter,
            1
        )
    );
    return result;
end $$
DELIMITER ;

阅读全文…

网站https配置攻略(Apache篇)

日期:2015年11月18日 作者: 分类:运维 阅读:848

本站采用 Nginx 做为本站的web服务软件,关于Nginx的配置参考《网站https配置攻略(Nginx篇)》

关于Apache下https的配置,来源于帮朋友配置服务器时的实践过程,网站效果见 https://webshao.com

什么是https

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。

现在它被广泛用于万维网上安全敏感的通讯,例如网银交易支付方面。现在国内大型网站开启https的有百度和淘宝。

网站https攻略(Nginx篇)

HTTPS和HTTP的区别主要为以下四点:

一、https协议需要到ca申请证书,一般免费证书很少,需要交费。(本站证书使用沃通证书免费版,申请地址:https://buy.wosign.com

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

阅读全文…

网站https配置攻略(Nginx篇)

日期:2015年11月18日 作者: 分类:运维 阅读:619

本站采用 Nginx 做为本站的web服务软件,前几天将网站全站开启https了,现在博客全程走https,可以抚慰每个总是担心隐私被人窥窃的强迫症的内心。

本站的配置目标是,无论访问http://wanglu.info 、http://www.wanglu.info 还是 https://www.wanglu.info,全部301跳转到https://wanglu.info

什么是https

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。

现在它被广泛用于万维网上安全敏感的通讯,例如网银交易支付方面。现在国内大型网站开启https的有百度和淘宝。

网站https攻略(Nginx篇)

HTTPS和HTTP的区别主要为以下四点:

一、https协议需要到ca申请证书,一般免费证书很少,需要交费。(本站证书使用沃通证书免费版,申请地址:https://buy.wosign.com

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

阅读全文…

戊辰人博客运行一周年

日期:2015年11月11日 作者: 分类:随笔 阅读:1,479

不得不说马云是相当牛逼的,硬生生的将一个普通的日子整成了一个购物狂欢节,引得各大电商互相撕逼。08年时好多人是听过淘宝不知道马云的,那时和范廉洁在讨论马云时我们就说:在未来的十年内,马云会人人皆知的,这个人人皆知不是因为什么名人成功故事,而是因为他所做的事情将会极大的影响我们的生活方式。

去年的双11,经过买服务器、买域名、域名备案、配置服务器、安装博客程序等一系列工作后,于2014年11月11日凌晨正式开始了个人独立博客的不归路。

博客开通后,就开始开发博客前端程序,使用Bootstrap框架,做成了现在的响应式布局界面。因为个人没有使用windows系统,所以博客前端界面没有对IE浏览器做兼容性测试,但在现代浏览器(Chrome、Firefox、Opera、IE10+)和手机浏览器上正常显示是没有问题的。

接着又开始做SEO优化排名(主要做“戊辰人”和“戊辰人博客”两个关键字排名),编写博客文章。因为博客是技术类型的,所以主要以编程和运维相关的技术文章为主。中途发现一个很有意思的事,就是文章中如果说百度坏话,百度就会降低你的排名,醉了!!! 所以有时间的话还是专注技术吧!

阅读全文…

OpenVPN客户端配置

日期:2015年11月09日 作者: 分类:运维 阅读:2,189

说明:本节教程接《企业VPN办公环境搭建(阿里云ECS上搭建OpenVPN服务器)》,本节中相应的文件也来源此文章。

制作OpenVPN配置文件

此处我按照客户端证书生成的方法生成名为uvs-001的证书,然后将ca.crt、uvs-001.crt、uvs-001.key三个文件从服务器下载到本地

openvpn客户端配置

用文本编辑工具创建配置文件uvs-001.ovpn,内容如下

client    # 表示openvpn客户端
dev tun   # 与服务器端的配置对应,之前tun
proto udp # 协议要与服务器端对应,之前为udp协议

# xxx.xxx.xxx.xxx为openvpn server的ip地址,1194为openvpn服务端口
remote xxx.xxx.xxx.xxx 1194

resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt # 指定服务端证书为当前目录下的ca.crt
cert uvs-001.crt # 指定客户端证书
key uvs-001.key  # 指定客户端key
ns-cert-type server
comp-lzo
verb 3

阅读全文…

企业VPN办公环境搭建(阿里云ECS上搭建OpenVPN服务器)

日期:2015年10月16日 作者: 分类:运维 阅读:4,978

应用环境

办公地点A:主要办公地点,市场统一管理,8:30-18:00开门供电,配置有电信50M宽带

办公地点B:公司仓库,24小时供电区,配置2M铁通宽带,工作时间为9:00-18:30

办公地点C:辅助办公地点,安全可靠,24小时供电区,配置100M移动宽带,无外网IP地址,工作时间无限制

服务器:办公ERP服务器物理机一台,阿里云ECS服务器一台(4M电信宽带)

之前办公:

由于网络环境的因素,ERP服务器只能放在A区才能通过外网IP的方式让A、B、C三区都能正常连接ERP服务器进行办公,但由于工作时间的不同,会导致其它办公区不能按工作时间使用ERP系统

改造后要实现的目标

ERP系统要24小时能访问,同时要保证ERP系统的安全,让员工只在指定的机器上进行连接访问。

方案:

阿里云ECS上安装OpenVPN服务器,将ERP服务器放置到C区,服务器和所有员工使用的电脑通过VPN证书连接虚拟网络,这样就可以通过VPN穿透移动宽带的内网和铁通宽带的线路限制。

VPN网络搭建

1)ECS环境(操作系统为CentOS 7.x)

ECS服务器上要配置epel软件源,由于阿里云ECS上已经配置了epel源,此处不用配置,没有配置的主参考以下链接:

http://mirrors.aliyun.com/help/epel

安装OpenVPN所需软件

yum -y install openvpn easy-rsa iptables-services

阅读全文…

Python解决生活问题之闹钟程序的实现

日期:2015年09月18日 作者: 分类:编程 阅读:1,013

昨天下班回家忘了带手机充电器,手机熄火没闹钟了,可现实是迟到30分钟以内要罚100RMB,超过30分钟算旷工要扣除3天工资,想想这代价,好吧,还是自己动手写一个闹钟程序吧!

系统环境: Linux Mint Debian Edition 2

软件需求:1. mpg123 (用来播放闹钟铃声)   2. python2.7.x(开发语言环境,本系统已经自带)

1.安装字符模式下的播放器mpg123

sudo apt-get install mpg123

2.编写闹钟程序代码

#!/usr/bin/env python
# -*- coding: utf8 -*-
import time
import os
import sys
from subprocess import call

# When get up ?
h = 7
m = 40

loop = True
while(loop):
    # now
    dt = list(time.localtime())
    hour = dt[3]
    minute = dt[4]

    # get up ?
    if h == hour and m == minute:
        return_code = call("/usr/bin/mpg123 我只在乎你.mp3", shell=True)
        loop = False

    # display current time
    timestr = "%04d-%02d-%02d %02d:%02d:%02d\r" \
            % (dt[0], dt[1], dt[2], dt[3], dt[4], dt[5])
    sys.stdout.write(timestr)
    sys.stdout.flush()
    time.sleep(1)
    # end

阅读全文…

CentOS 7下安装LNMP服务器

日期:2015年08月07日 作者: 分类:运维 阅读:1,773

LNMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作用。正如其名称所暗示的, LNMP 包是由 Linux、nginx、MariaDB/MySQL 和 PHP 组成的。在传统的 LAMP 包中使用的 Apache HTTP 协议服务器性能低下而且难于大规模集群,相比来说 nginx 的高性能及轻量级等特性,正是其的替代方案。 MariaDB 是一款社区支持驱动的 MySQL 数据库的分支,其功能更多性能更佳。PHP,服务端编程语言,具体是由 PHP FastCGI 的增强版 PHP-FPM 组件来处理,生成网页动态内容。

这篇文章里,我将示范如何在 CentOS 操作平台上安装 LNMP 包。我的安装的目标是 CentOS 7 这个操作平台。

第一步: Nginx

1. 安装 Nginx

因为在CentOS 7的默认源中没有 Nginx ,所以我们要导入Nginx官方源,官方文档原文链接:http://nginx.org/en/linux_packages.html

创建/etc/yum.repo.d/nginx.repo 文件,内容如下:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

安装:

yum install nginx 

2. 启动 Nginx

安装完成后,nginx 是不会自动启动的。现在让我们来启动它吧,还要做些配置让其可以随着操作系统启动而启动。我们也需要在防火墙里打开 TCP/80 端口,以使得可以远程访问 nginx 的 web 服务。所有这些操作、设置都只需要输入如下命令就可实现。

# 启动
systemctl start nginx

# 加入开机启动
systemctl enable nginx

# 开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

# 载入防火墙规则,使刚才的规则生效
firewall-cmd --reload

阅读全文…

C++学习复习笔记05 – 构造函数重载时的写法

日期:2015年08月05日 作者: 分类:编程 阅读:634

在C++类中进行构造函数重载时,有几种不同的简洁的写法。

下面先演示可读性最好的也是初学时常用的写法一:

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

class Person
{
public:
    string name;
    int age;

public:
    Person()
    {
        cout << "Person()" << endl;
    }
    // 构造函数一经重写,系统默认的无参数的将不复存在,若要使用得写出来
    Person(string name, int age)
    {
        this->name = name;
        this->age = age;
        cout << "Person(string name, int age)" << endl;
    }
};

int main()
{
    Person wuxie;
    Person xiaoge("张起灵", 22);

    return 0;
}

阅读全文…

C++学习复习笔记04 – 函数重载

日期:2015年08月05日 作者: 分类:编程 阅读:593

重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。

知识要点:

1) 独立函数重载

2) 类中非构造函数重载

3) 类中构造函数重载

4) 析构函数不能重载,因为系统自动调用,无法传递参数.

 

代码示例:

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

class Person
{
public:
    string name;
    int age;

public:
    /* 类中构造函数重载 */
    Person()
    {
        cout << "默认调用原始构造函数" << endl;                         
    }     
    // 构造函数一经重写,系统默认的无参数的将不复存在,若要使用得写出来     
    Person(string name, int age)     
    {         
        this->name = name;
        this->age = age;
        cout << this->name << "调用重载的构造函数" << endl;
    }

    /* 类中非构造函数重载 */
    void display()
    {
        cout << "-----> " << this->name << " : " << this->age << endl;
    }
    void display(string msg)
    {
        cout << msg << endl;
    }
};

/* 独立函数重载 */
void run()
{
    cout << "快跑!!!" << endl;
}
void run(Person p)
{
    cout << p.name << "快跑!!!" << endl;
}

int main()
{
    Person wuxie;
    wuxie.name = "吴邪";
    wuxie.age = 20;
    cout << "-----------" << endl;

    Person xiaoge("小哥", 22);
    cout << "-----------" << endl;
    cout << endl;

    run();
    cout << "-----------" << endl;
    run(wuxie);
    cout << "-----------" << endl;
    cout << endl;

    xiaoge.display();
    xiaoge.display("小哥叫闷油瓶");

    return 0;
}

阅读全文…