一、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环境管理工具。
(一)下载
- 可选择官网下载 https://www.anaconda.com/download/
- 在清华大学开源软件镜像站下载相应的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://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后的部分截图
(caffe_src) root@ranxf-TEST:/workdisk/caffe# make runtest开始的部分截图(我目前安装的是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
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
指定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——配置模型训练的超参数——定义网络训练的中间的规则
train_test.prototxt——训练网络
以上截图给出了训练网络的基本配置,定义了数据层,对于数据层,只需要定义top层,他对应该层的输出,该层的输入对应了。另外将训练网络和测试网络,我们如何区分一个层是否用在训练网络还是测试网络中,通过定义include这个参数,如果phase定义为TRAIN,就应用在train网络中。如果phase定义为TEST(注意大写),那么久应用在测试网络中。如果我们去掉这个参数phase,这个层就会同时出现在测试网络和训练网络中。对于哪些层会存在这些问题,就是loss层。在训练网络中,需要用到loss层来计算梯度,而在测试网路中,不需要用到loss层来计算精度,只需要前向传播就可以。
在测试网路中,需要用精度层来直接为我们计算精度
deploy.prototxt——测试网络
deploy.prototxt用于网络训练完成后,往往通过deploy.prototxt文件进行网络测试
linux_caffe脚本使用说明
pycaffe使用范例
深度学习标准层在caffe中定义
caffe中特殊层添加
caffe中如何fine_tuning
caffe中学习率使用技巧
caffe中参数共享技巧
caffe网络通用设计技巧(工程实现中遇到的问题)
caffe训练网络中的数据打包
设计一个caffe网络,并用于分类任务
Ubuntu16.04下caffe CPU版的详细安装步骤的更多相关文章
-
Ubuntu16.04下caffe CPU版的图片训练和测试
一 数据准备 二.转换为lmdb格式 1.首先,在examples下面创建一个myfile的文件夹,来用存放配置文件和脚本文件.然后编写一个脚本create_filelist.sh,用来生成train ...
-
Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
-
ubuntu16.04下caffe以cpu运行faster rcnn demo
参考https://haoyu.love/blog404.html 获取并修改代码 首先,我们需要获取源代码: git clone --recursive https://github.com/rbg ...
-
ubuntu16.04下NVIDIA GTX965M显卡驱动PPA安装
禁用nouveau驱动 Ubuntu系统集成的显卡驱动程序是nouveau,我们需要先将nouveau从linux内核卸载掉才能安装NVIDIA官方驱动.将nouveau添加到黑名单blacklist ...
-
ubuntu16.04 下 NVIDIA GTX1050ti 显卡驱动 PPA安装
本文参考资料链接: http://blog.csdn.net/10km/article/details/61191230 前几天在京东商城上花了6999元买了台笔记本(惠普(HP)暗影精灵II代Pro ...
-
Ubuntu-16.04下Docker通过阿里云镜像安装(apt-get)
由于通过官方路径安装docker时总是连接不上,所以从网上找了半天,通过阿里云镜像安装docker,我的Linux是ubuntu-16.04 一.配置源里的阿里云镜像仓库 sudo vim /etc/ ...
-
SVN服务器在Ubuntu16.04下搭建多版本库详细教程
1 介绍 Subversion是一个*,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可 以很方面恢复到以前的版本,并可以查看数据 ...
-
Ubuntu16.04下nvidia驱动+nvidia-docker+cuda9+cudnn7安装
一.宿主机安装nvidia驱动 打开终端,先删除旧的驱动: sudo apt-get purge nvidia* 禁用自带的 nouveau nvidia驱动 sudo gedit /etc/modp ...
-
ubuntu16.04下使用python3开发时,安装pip3与scrapy,升级pip3
1)安装pip3: sudo apt-get install python3-pip 2)安装scrapy sudo pip3 install scrapy 若出现版本过低问题: pip3 insta ...
随机推荐
-
DS实验题 融合软泥怪-2 Heap实现
题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...
-
Kafka深度解析
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...
-
silverlight 获取服务器上图片出现异常 “AG_E_NETWORK_ERROR”
前言 之前项目一直是发布在IIS上面使用HTTP访问,现在要求改为HTTPS,通过在IIS生成自签名后,打开HTTPS通道,可以将原来的程序已HTTPS的方式发布出来. 可参见 http://blog ...
-
铁人系列(2)LA2218
思路:对于每个人 都会有n-1个半片面 加上x>0,y>0,1-x-y>0(这里的1抽象为总长) 代码是粘贴的 原来写的不见了 orz............ // LA22 ...
-
spring+mybatis的优缺点
mybatis的优缺点: 优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系映射 ...
-
sql 事务日志传输
原文:sql 事务日志传输 概述 可以使用日志传送将事务日志不间断地从一个数据库(主数据库)发送到另一个数据库(辅助数据库).不间断地备份主数据库中的事务日志,然后将它们复制并还原到辅助数据库,这将使 ...
-
(二十七)QQ好友列表的实现
QQ好友列表通过plist读取,plist的结构为一组字典,每个字典内有本组的信息和另外一组字典代表好友. 要读取plist,选择合适的数据结构,例如NSArray,然后调用initWithConte ...
-
MySQL数据库设计规范
1. 规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短.本规范旨在帮助或指导R ...
-
laravel在控制器中动态创建数据表
Schema::connection('usertable')->create('test', function ($table) { $table->increments('id'); ...
-
网络协议理论,http协议,数据结构,常用返回码
一.网络协议理论 先是DNS协议 将域名转化成IP地址 这个你要知道 域名只是人记着方便 计算机记的是IP 然后是TCPIP协议 数据在传输过程中可能要经过陆游器 涉及到的是ARP协议 将IP地址转换 ...