Ubuntu16.04下caffe CPU版的详细安装步骤

时间:2022-09-18 07:48:54

一、caffe简介

Caffe,是一个兼具表达性、速度和思维模块化的深度学习框架

伯克利人工智能研究小组和伯克利视觉和学习中心开发。

虽然其内核是用C++编写的,但Caffe有Python和Matlab 相关接口。

Caffe支持多种类型的深度学习架构,面向图像分类和图像分割,还支持CNN、RCNN、LSTM和全连接神经网络设计。

Caffe支持基于GPU和CPU的加速计算内核库,如NVIDIA cuDNN和Intel MKL。

二、ubuntu16.04 搭建python Conda 环境

conda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系。

conda是为python程序创建的,适用于Linux,OS X和Windows,也可以打包和分发其他软件。

conda是目前最流行的python环境管理工具。

(一)下载

  1. 可选择官网下载  https://www.anaconda.com/download/
  2. 清华大学开源软件镜像站下载相应的anaconda的版本

(二)我的安装顺序

cd /workdisk/software  # 切换到自己创建的下载目录
/workdisk/software# wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
/workdisk/software# ls
Anaconda3-5.3.1-Linux-x86_64.sh 安装过程根据提示点击回车和输入yes或no,中途有提示输入环境变量,如果没有配置, 安装完成后配置也可以。
手动配置环境变量:
/workdisk/software# vim ~/.bashrc

增加  export PATH=/root/anaconda3/bin:$PATH

使环境变量生效

/workdisk/software# source ~/.bashrc

验证conda是否安装成功

/workdisk/software# conda -V

conda 4.5.11

(三)创建tensorflow1.5环境

/workdisk/software# conda create -n tensorflow1.5 python=3.5

/workdisk/software# conda create -n tensorflow1.5 python=3.5
Solving environment: done ==> WARNING: A newer version of conda exists. <==
current version: 4.5.11
latest version: 4.7.11 Please update conda by running $ conda update -n base -c defaults conda ## Package Plan ## environment location: /root/anaconda3/envs/tensorflow1.5 added / updated specs:
- python=3.5 The following packages will be downloaded: package | build
---------------------------|-----------------
libgcc-ng-9.1.0 | hdf63c60_0 8.1 MB
libstdcxx-ng-9.1.0 | hdf63c60_0 4.0 MB
wheel-0.31.1 | py35_0 63 KB
sqlite-3.29.0 | h7b6447c_0 1.9 MB
ca-certificates-2019.5.15 | 1 134 KB
python-3.5.6 | hc3d631a_0 28.3 MB
zlib-1.2.11 | h7b6447c_3 120 KB
libedit-3.1.20181209 | hc058e9b_0 188 KB
certifi-2018.8.24 | py35_1 139 KB
setuptools-40.2.0 | py35_0 571 KB
_libgcc_mutex-0.1 | main 3 KB
pip-10.0.1 | py35_0 1.8 MB
ncurses-6.1 | he6710b0_1 958 KB
openssl-1.0.2s | h7b6447c_0 3.1 MB
------------------------------------------------------------
Total: 49.4 MB The following NEW packages will be INSTALLED: _libgcc_mutex: 0.1-main
ca-certificates: 2019.5.15-1
certifi: 2018.8.24-py35_1
libedit: 3.1.20181209-hc058e9b_0
libffi: 3.2.1-hd88cf55_4
libgcc-ng: 9.1.0-hdf63c60_0
libstdcxx-ng: 9.1.0-hdf63c60_0
ncurses: 6.1-he6710b0_1
openssl: 1.0.2s-h7b6447c_0
pip: 10.0.1-py35_0
python: 3.5.6-hc3d631a_0
readline: 7.0-h7b6447c_5
setuptools: 40.2.0-py35_0
sqlite: 3.29.0-h7b6447c_0
tk: 8.6.8-hbc83047_0
wheel: 0.31.1-py35_0
xz: 5.2.4-h14c3975_4
zlib: 1.2.11-h7b6447c_3 Proceed ([y]/n)? y Downloading and Extracting Packages
libgcc-ng-9.1.0      | 8.1 MB    | ##################################### | 100%
wheel-0.31.1         | 63 KB     | ##################################### | 100%
pip-10.0.1           | 1.8 MB    | ##################################### | 100%
sqlite-3.29.0        | 1.9 MB    | ##################################### | 100%
ca-certificates-2019 | 134 KB    | ##################################### | 100%
libedit-3.1.20181209 | 188 KB    | ##################################### | 100%
_libgcc_mutex-0.1    | 3 KB      | ##################################### | 100%
libstdcxx-ng-9.1.0   | 4.0 MB    | ##################################### | 100%
setuptools-40.2.0    | 571 KB    | ##################################### | 100%
openssl-1.0.2s       | 3.1 MB    | ##################################### | 100%
python-3.5.6         | 28.3 MB   | ##################################### | 100%
certifi-2018.8.24    | 139 KB    | ##################################### | 100%
ncurses-6.1          | 958 KB    | ##################################### | 100%
zlib-1.2.11          | 120 KB    | ##################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate tensorflow1.5 激活虚拟环境
#
# To deactivate an active environment, use
#
#     $ conda deactivate 停用虚拟环境

(四)创建caffe2环境

root@ranxf-TEST:/workdisk/software# conda create -n caffe2 python=3.5Solving environment: done

==> WARNING: A newer version of conda exists. <==
current version: 4.5.11
latest version: 4.7.11 Please update conda by running $ conda update -n base -c defaults conda ## Package Plan ## environment location: /root/anaconda3/envs/caffe2 added / updated specs:
- python=3.5 The following NEW packages will be INSTALLED: _libgcc_mutex: 0.1-main
ca-certificates: 2019.5.15-1
certifi: 2018.8.24-py35_1
libedit: 3.1.20181209-hc058e9b_0
libffi: 3.2.1-hd88cf55_4
libgcc-ng: 9.1.0-hdf63c60_0
libstdcxx-ng: 9.1.0-hdf63c60_0
ncurses: 6.1-he6710b0_1
openssl: 1.0.2s-h7b6447c_0
pip: 10.0.1-py35_0
python: 3.5.6-hc3d631a_0
readline: 7.0-h7b6447c_5
setuptools: 40.2.0-py35_0
sqlite: 3.29.0-h7b6447c_0
tk: 8.6.8-hbc83047_0
wheel: 0.31.1-py35_0
xz: 5.2.4-h14c3975_4
zlib: 1.2.11-h7b6447c_3 Proceed ([y]/n)? y Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate caffe2
#
# To deactivate an active environment, use
#
# $ conda deactivate (base) root@ranxf-TEST:/workdisk/software#

(五)激活虚拟环境

root@ranxf-TEST:/workdisk/software# conda activate tensorflow1.5  激活tensorflow1.5的虚拟环境
(tensorflow1.5) root@ranxf-TEST:/workdisk/software# (base) root@ranxf-TEST:/workdisk/software# conda activate caffe2 激活caffe2虚拟环境
(caffe2) root@ranxf-TEST:/workdisk/software#

(六)停用虚拟环境

/workdisk/software# conda deactivate
(base) root@ranxf-TEST:/workdisk/software#

(七)查看已有的环境

(base) root@ranxf-TEST:/workdisk/software# conda info -e
# conda environments:
#
base * /root/anaconda3
caffe2 /root/anaconda3/envs/caffe2
tensorflow1.5 /root/anaconda3/envs/tensorflow1.5

三、虚拟环境下安装caffe

gpu版:conda install -c defaults caffe-gpu
cpu版:conda install -c defaults caffe
/workdisk/software# conda install -c defaults caffe
Solving environment: done ==> WARNING: A newer version of conda exists. <==
current version: 4.5.11
latest version: 4.7.11
…………

在网上搜索了很多方法(源码安装等)来安装caffe2,折腾整整一天,最后一条命令即可

(一)虚拟环境下安装caffe2

信息来源:

https://pytorch.org/

https://github.com/pytorch/pytorch

原有的caffe2源代码现在位于PyTorch存储库中

conda install pytorch torchvision cudatoolkit = 10.0 -c pytorch                         #  安装pytorch

方式比较简单,只是因为caffe2集成到了pytorch当中,所以安装pytorch就安装了caffe2,并且如果你的电脑中有显卡并且安装了cuda,会自动安装成gpu版。

但是这个方式没有c/c++版的库,如果想要使用caffe2写c/c++程序,就只能通过caffe2源码编译了。

(二)源码安装caffe

(base) root@ranxf-TEST:/workdisk/caffe# conda activate caffe_src
(caffe_src) root@ranxf-TEST:/workdisk/caffe# apt-get update 安装caffe之前需要安装一些依赖库:
sudo apt-get install libprotobuf-dev
sudo apt-get install libleveldb-dev
sudo apt-get install libsnappy-dev
sudo apt-get install libopencv-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install protobuf-compiler
sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblmdb-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install --no-install-recommends libboost-all-dev

1下载源码

git clone git://github.com/BVLC/caffe.git  
1.生成Makefile.config文件:
cp Makefile.config.example Makefile.config

2.修改配置Makefile.config 文件

1)编辑Makefile.config文件:

vim Makefile.config

2)去掉CPU_ONLY:=1前面的#号:

3)配置引用文件路径:(增加部分主要是解决新版本下,HDF5的路径问题)

  将   INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

  换成 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/include/hdf5/serial/

(这个其实可以根据具体路径进行转换,一般此路径是对的,要是还出现问题,使用命令行查找该文件的正确路径即可)

3.修改Makefile文件

在Makefile文件,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代码改为第二行代码。


LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
变成
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

4.执行编译

make all
make test
make runtest

编译情况

(caffe_src) root@ranxf-TEST:/workdisk/caffe# make test后的部分截图

Ubuntu16.04下caffe CPU版的详细安装步骤

(caffe_src) root@ranxf-TEST:/workdisk/caffe# make runtest开始的部分截图(我目前安装的是CPU 版)

Ubuntu16.04下caffe CPU版的详细安装步骤

省略中间部分,最后面的截图

Ubuntu16.04下caffe CPU版的详细安装步骤

如果编译报错

/usr/local/bin/ld: /root/anaconda3/lib/libpng16.so.: undefined reference to `inflateValidate@ZLIB_1.2.9' collect2: error: ld returned 1 exit status
该错误的解决方法
问题可能是python是通过anaconda安装的而不是直接安装
解决办法:在Makefile.config中加入下列信息:
LINKFLAGS := -Wl,-rpath,/root/anaconda3/lib

四、卸载安装

(caffe2) root@ranxf-TEST:/workdisk/software# conda list
(caffe2) root@ranxf-TEST:/workdisk/software# conda remove caffe

五、编译Python接口

首先如果没有Python接口,导入caffe时是要报错的

(caffe_src) root@ranxf-TEST:/workdisk/caffe# python
Python 3.5. |Anaconda, Inc.| (default, Aug , ::)
[GCC 7.3.] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> import caffe
Traceback (most recent call last):
File "<stdin>", line , in <module>
File "/workdisk/caffe/python/caffe/__init__.py", line , in <module>
from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
File "/workdisk/caffe/python/caffe/pycaffe.py", line , in <module>
import numpy as np
ImportError: No module named 'numpy'

(一).安装pip以及numpy

1.安装pip以及numpy

(caffe_src) root@ranxf-TEST:/workdisk/caffe# sudo apt-get install python-pip
  (caffe_src) root@ranxf-TEST:/workdisk/caffe# sudo apt-get install python-numpy

2.安装python接口依赖库:

在安装依赖库前,需要先安装gfortran编辑器:

(caffe_src) root@ranxf-TEST:/workdisk/caffe#sudo apt-get install gfortran 

然后安装依赖库,首先进入caffe目录下的python文件中:

(caffe_src) root@ranxf-TEST:/workdisk/caffe# cd python/
(caffe_src) root@ranxf-TEST:/workdisk/caffe/python# for req in $(cat requirements.txt); do pip install $req; done

Ubuntu16.04下caffe CPU版的详细安装步骤

指定iPython版本

sudo pip install ipython==5.3.

安装完后,执行下面一条语句,该语句的作用是检查依赖库是否都已经安装成功,如果成功会显示requirement already saitisfied,如果未成功会继续安装:

sudo pip install -r requirements.txt

3.添加环境变量:(或许已经存在,打开确认即可)

打开配置文件bashrc:sudo vim ~/.bashrc

或者直接打开该文件也可以,在文件的最后面添加:

export PYTHONPATH=/workdisk/caffe/python:$PYTHONPATH

保存文件后关闭,然后输入下面语句,使环境变量生效:

source ~/.bashrc 

4.编译python接口:(在caffe目录下)

(caffe_src) root@ranxf-TEST:/workdisk/caffe# make pycaffe
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
touch python/caffe/proto/__init__.py
PROTOC (python) src/caffe/proto/caffe.proto

编译完后,若无错误提示,则说明编译成功。

5.验证python接口:

进入python环境,引入caffe包

(caffe_src) root@ranxf-TEST:/workdisk/caffe# python
Python 3.5. |Anaconda, Inc.| (default, Aug , ::)
[GCC 7.3.] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>>

如上显示,说明python接口编译成功。如果显示no model named caffe则说明python接口编译失败,重新检查上述步骤或百度解决。至此整个caffe安装编译的过程就全部结束了。

caffe_CPU版本编译安装参考文章:ubuntu16.04下安装caffe(cpu only)

六、是否安装成功

不报错即代表安装成功。

(caffe2) root@ranxf-TEST:/workdisk/software# python
Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 21:41:56)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>>

以上为caffe安装的详细步骤

以下为学习时的零散笔记,可以略过,后期再来整理

七、caffe的使用

训练图片文章参见:

https://blog.csdn.net/u013832707/article/details/52943935

https://www.cnblogs.com/denny402/p/5083300.html

基础篇——了解caffe的基本知识

实战篇——面向工程实践了解caffe的相关使用技巧

caffe介绍

深度学习框架,纯粹的C++CUDA架构,支持命令行,python和MATLAB接口,可以在CPU和GPU之间无缝切换。

不需要自己编写程序。

caffe对比其他框架

容易上手(对于新手,都是采用配置文件实现)

训练速度快

组件模块化

tensorFlow在github上下载量是最多的。资深的深度学习算法工程师可以使用,,灵活性高于其他框架。对于新手来说,要难一些。

caffe对比caffe2
caffe2是2017年4月18日开幕的F8年度开发者大会上,Facebook发布的一款全新的开源深度学习框架;

一个轻量级和模块化的深度学习框架。caffe2以原始Caffe为基础,在设计时充分考虑了表达,速度和模块性。在强调轻便性的同时,也保持了可扩展性和计算性能。

caffe2:有工具支持将caffe转caffe2模型

官网:http://caffe2.ai/

源码:http://github.com/caffe2/caffe2

支持分布式训练

支持IOS系统,Android系统和树莓派上训练和部署模型

简单调用caffe2中预先训练好的Model Zoo模型

caffe2框架已经应用在Facebook平台上

NVIDIA(英伟达),Qualcomm(高通),intel(英特尔),Amazon(亚马逊)和Microsoft(微软)等公司的云平台都已支持。

简化依赖,按需配置,完美的解决了依赖问题

采用operator方式,由更细粒度的operator组合而成

对caffe中的Blob进行扩展,支持了更多的类型,这就让BinarynNe,模型的量化压缩变得可行。

对于工程实践来说,模型压缩具有非常重要的意义,对于一个大模型和对于一个需要跑在芯片上的网络,原始的网络设计需要占用更多的网络资源,而通过量化压缩以后能够大大降低网络的参数规模,能够提高网络的计算速度。对于嵌入式系统来说,具有重要意义,尤其对于目前AI产品的落地。

很多时候,计算瓶颈是决定产品是否能够市场化的关键因素。

caffe中的基本概念

caffe模块包括4个部分,

  Blob:caffe中数据结构的封装,并且封装后的数据用于在layer层流通,也就是说可以作为网络层的输入和输出的数据。

  Blob基本概念:Blob思维连续数组,通常表示为(n,k,w,h)是基础的数据结构,其中n表示了一个milipit,也就是说一个批量样本的大小,也就是样本的个数。k表示通道的数量。w表示图像的宽度。h表示图像的高度。可表示网络层输入输出的数据,也可以表示参数数据;

    

  Layer:主要定义了网络结构。具体的网路结构也是相当丰富的,有输入层,输出层,神经网络层的抽象。网络层数据的传输依赖于Blob这样一个数据结构。

  layer神经网络基本单元,同样定义各种各样的类。每一类中不同的层定义了3种计算:

    初始化网络参数

      完成创建blobs和layers

      调用layers的setup函数来初始化layers

    前向传播

      定义Forward函数

    后向传播  

      定义backward函数

  Net:整个layer层通过组合之后,就能够构造一个相应的网络,而这个网络就通过net数据结构来表示,能将layer层关联,这关联依赖于一定的准则。

  caffe中Net为无回路有向图,

  Solver:关于网络的训练和测试部分通过Solver来完成。在Solver配置文件中给出网络训练和测试中各种参数。

  创建训练网络和测试网络

  周期性的测试网络(通过配置文件来对网络进行循环测试)

  调用前向和反响函数进行的迭代优化和参数更新

  slover每轮迭代都会通过前向函数计算输出和损失(loss),还用反向传播来计算梯度(梯度的计算关系到参数的更新,比如常见的网络优化算法SGD、RPMS等,这些算法的优化也是通过slovers来完成的)

caffe model主要用于保存和恢复网络参数,后缀为.caffemodel。主要是在网络训练之后得到的模型,通常这也是我们要交互的模型。

solver保存和恢复运行状态,后缀为.solverstate。

  

caffe配置

需要安装cuda和cudnn,可以分别从官网进行下载,在安装的时候,注意cuda和cudnn的版本需要对饮,

caffe源码解读(略)

安装好caffe的依赖后,下载源码后编译,先需要修改makefile.config。在里面加入python、cuda等支持项,修改支持GPU。

编译caffe,进入caffe项目目录,使用make all -j32(多线程命令),如果有错误,就去掉多线程,直接用makefile。

进入caffe

caffe是通过一些配置文件来完成网络的搭建,训练和测试的过程。

一个完整的caffe网络需要哪些必须配备的文件,除去我们编译生成的一些工具外,我们需要额外配置的文件有:

solver.prototxt——配置模型训练的超参数——定义网络训练的中间的规则

  Ubuntu16.04下caffe CPU版的详细安装步骤

train_test.prototxt——训练网络

Ubuntu16.04下caffe CPU版的详细安装步骤

Ubuntu16.04下caffe CPU版的详细安装步骤

以上截图给出了训练网络的基本配置,定义了数据层,对于数据层,只需要定义top层,他对应该层的输出,该层的输入对应了。另外将训练网络和测试网络,我们如何区分一个层是否用在训练网络还是测试网络中,通过定义include这个参数,如果phase定义为TRAIN,就应用在train网络中。如果phase定义为TEST(注意大写),那么久应用在测试网络中。如果我们去掉这个参数phase,这个层就会同时出现在测试网络和训练网络中。对于哪些层会存在这些问题,就是loss层。在训练网络中,需要用到loss层来计算梯度,而在测试网路中,不需要用到loss层来计算精度,只需要前向传播就可以。

  在测试网路中,需要用精度层来直接为我们计算精度

deploy.prototxt——测试网络

deploy.prototxt用于网络训练完成后,往往通过deploy.prototxt文件进行网络测试

Ubuntu16.04下caffe CPU版的详细安装步骤

linux_caffe脚本使用说明

pycaffe使用范例

深度学习标准层在caffe中定义

caffe中特殊层添加

caffe中如何fine_tuning

caffe中学习率使用技巧

caffe中参数共享技巧

caffe网络通用设计技巧(工程实现中遇到的问题)

caffe训练网络中的数据打包

设计一个caffe网络,并用于分类任务

Ubuntu16.04下caffe CPU版的详细安装步骤的更多相关文章

  1. Ubuntu16&period;04下caffe CPU版的图片训练和测试

    一 数据准备 二.转换为lmdb格式 1.首先,在examples下面创建一个myfile的文件夹,来用存放配置文件和脚本文件.然后编写一个脚本create_filelist.sh,用来生成train ...

  2. Ubuntu16&period;04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 说在前面的话  首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...

  3. ubuntu16&period;04下caffe以cpu运行faster rcnn demo

    参考https://haoyu.love/blog404.html 获取并修改代码 首先,我们需要获取源代码: git clone --recursive https://github.com/rbg ...

  4. ubuntu16&period;04下NVIDIA GTX965M显卡驱动PPA安装

    禁用nouveau驱动 Ubuntu系统集成的显卡驱动程序是nouveau,我们需要先将nouveau从linux内核卸载掉才能安装NVIDIA官方驱动.将nouveau添加到黑名单blacklist ...

  5. ubuntu16&period;04 下 NVIDIA GTX1050ti 显卡驱动 PPA安装

    本文参考资料链接: http://blog.csdn.net/10km/article/details/61191230 前几天在京东商城上花了6999元买了台笔记本(惠普(HP)暗影精灵II代Pro ...

  6. Ubuntu-16&period;04下Docker通过阿里云镜像安装(apt-get)

    由于通过官方路径安装docker时总是连接不上,所以从网上找了半天,通过阿里云镜像安装docker,我的Linux是ubuntu-16.04 一.配置源里的阿里云镜像仓库 sudo vim /etc/ ...

  7. SVN服务器在Ubuntu16&period;04下搭建多版本库详细教程

    1  介绍  Subversion是一个*,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可 以很方面恢复到以前的版本,并可以查看数据 ...

  8. Ubuntu16&period;04下nvidia驱动&plus;nvidia-docker&plus;cuda9&plus;cudnn7安装

    一.宿主机安装nvidia驱动 打开终端,先删除旧的驱动: sudo apt-get purge nvidia* 禁用自带的 nouveau nvidia驱动 sudo gedit /etc/modp ...

  9. ubuntu16&period;04下使用python3开发时,安装pip3与scrapy,升级pip3

    1)安装pip3: sudo apt-get install python3-pip 2)安装scrapy sudo pip3 install scrapy 若出现版本过低问题: pip3 insta ...

随机推荐

  1. DS实验题 融合软泥怪-2 Heap实现

    题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...

  2. Kafka深度解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

  3. silverlight 获取服务器上图片出现异常 &OpenCurlyDoubleQuote;AG&lowbar;E&lowbar;NETWORK&lowbar;ERROR”

    前言 之前项目一直是发布在IIS上面使用HTTP访问,现在要求改为HTTPS,通过在IIS生成自签名后,打开HTTPS通道,可以将原来的程序已HTTPS的方式发布出来. 可参见 http://blog ...

  4. 铁人系列(2)LA2218

    思路:对于每个人  都会有n-1个半片面  加上x>0,y>0,1-x-y>0(这里的1抽象为总长) 代码是粘贴的  原来写的不见了  orz............ // LA22 ...

  5. spring&plus;mybatis的优缺点

    mybatis的优缺点: 优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系映射 ...

  6. sql 事务日志传输

    原文:sql 事务日志传输 概述 可以使用日志传送将事务日志不间断地从一个数据库(主数据库)发送到另一个数据库(辅助数据库).不间断地备份主数据库中的事务日志,然后将它们复制并还原到辅助数据库,这将使 ...

  7. (二十七)QQ好友列表的实现

    QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...

  8. MySQL数据库设计规范

    1. 规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短.本规范旨在帮助或指导R ...

  9. laravel在控制器中动态创建数据表

    Schema::connection('usertable')->create('test', function ($table) { $table->increments('id'); ...

  10. 网络协议理论,http协议,数据结构,常用返回码

    一.网络协议理论 先是DNS协议 将域名转化成IP地址 这个你要知道 域名只是人记着方便 计算机记的是IP 然后是TCPIP协议 数据在传输过程中可能要经过陆游器 涉及到的是ARP协议 将IP地址转换 ...