0%

Python

大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验。 Python版本:2.7,Python 3请另寻其他博文。 首先爬虫是什么?

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。

根据我的经验,要学习Python爬虫,我们要学习的共有以下几点:

  • Python基础知识
  • Python中urllib和urllib2库的用法
  • Python正则表达式
  • Python爬虫框架Scrapy
  • Python爬虫更高级的功能

1.Python基础学习

首先,我们要用Python写爬虫,肯定要了解Python的基础吧,万丈高楼平地起,不能忘啦那地基,哈哈,那么我就分享一下自己曾经看过的一些Python教程,小伙伴们可以作为参考。

1) 慕课网Python教程

曾经有一些基础的语法是在慕课网上看的,上面附有一些练习,学习完之后可以作为练习,感觉效果还是蛮不错的,不过稍微遗憾的是内容基本上都是最基础的,入门开始的话,就这个吧 学习网址:慕课网Python教程

2) 廖雪峰Python教程

后来,我发现了廖老师的Python教程,讲的那是非常通俗易懂哪,感觉也是非常不错,大家如果想进一步了解Python就看一下这个吧。 学习网址:廖雪峰Python教程

3) 简明Python教程

还有一个我看过的,简明Python教程,感觉讲的也不错 学习网址:简明Python教程

4) 汪海的实验室

这是我的本科实验室学长,入门的时候参考的他的文章,自己重新做了总结,后来这些系列文章又在他的基础上增加了一些内容。 学习网址:汪海的实验室

2.Python urllib和urllib2 库的用法

urllib和urllib2库是学习Python爬虫最基本的库,利用这个库我们可以得到网页的内容,并对内容用正则表达式提取分析,得到我们想要的结果。这个在学习过程中我会和大家分享的。

3.Python 正则表达式

Python正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。这个在后面的博文会分享的。

4.爬虫框架Scrapy

如果你是一个Python高手,基本的爬虫知识都已经掌握了,那么就寻觅一下Python框架吧,我选择的框架是Scrapy框架。这个框架有什么强大的功能呢?下面是它的官方介绍:

HTML, XML源数据 选择及提取 的内置支持 提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持。 通过 feed导出 提供了多格式(JSON、CSV、XML),多存储后端(FTP、S3、本地文件系统)的内置支持 提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。 高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来定制实现您的功能。 内置的中间件及扩展为下列功能提供了支持: cookies and session 处理 HTTP 压缩 HTTP 认证 HTTP 缓存 user-agent模拟 robots.txt 爬取深度限制 针对非英语语系中不标准或者错误的编码声明, 提供了自动检测以及健壮的编码支持。 支持根据模板生成爬虫。在加速爬虫创建的同时,保持在大型项目中的代码更为一致。详细内容请参阅 genspider 命令。 针对多爬虫下性能评估、失败检测,提供了可扩展的 状态收集工具 。 提供 交互式shell终端 , 为您测试XPath表达式,编写和调试爬虫提供了极大的方便 提供 System service, 简化在生产环境的部署及运行 内置 Web service, 使您可以监视及控制您的机器 内置 Telnet终端 ,通过在Scrapy进程中钩入Python终端,使您可以查看并且调试爬虫 Logging 为您在爬取过程中捕捉错误提供了方便 支持 Sitemaps 爬取 具有缓存的DNS解析器

官方文档:http://doc.scrapy.org/en/latest/ 等我们掌握了基础的知识,再用这个 Scrapy 框架吧! 扯了这么多,好像没多少有用的东西额,那就不扯啦! 下面开始我们正式进入爬虫之旅吧!

Linux

最近一直在学习ubuntu,今天重装了系统,开机出现running in low-graphics mode 问题。 解决办法如下: 第一步:在出现running in low-graphics的界面右下角,有一个OK按钮,点击后有四个选项 第二步:随便点击一个选项可以进入tty1文字输入终端,但不可以进入图形界面 第三步:输入用户名和密码,再输入sudo apt-get install fglrx, Y/N选择Y,等待安装成功,再输入reboot重启之后,就可以正常进入了 以上是我遇到后的解决办法,有更好的解决办法,还请多多指教

Linux

电脑是双系统,在win7系统下的磁盘管理中,格式化ubuntu分区,开机出现grub rescue。win7系统是完好的,但是进不去。 原因是开机引导出现问题,具体原因在这里不再详述。以下是解决办法 第一步:输入ls出现(hd0,msods1),(hd0,msdos5),(hd0,msods6),(hd0,msods7),不同的电脑不一样,这是我电脑中的磁盘分区 第二步:输入set,查看现在电脑的root 和prefix所在的位置 第三步:查找你的grub目录(当然如果你知道你grub目录在哪里更好) 查找方法输入ls/(hd0,msdos1) 再按enter看看有没有boot文件夹,如果没有,就输入ls/(hd0,msdos5)等等,依次类推。。。 这里输入(hd0,madosX)是根据你输入ls出现的磁盘分区来输入的 第四步:找到boot文件夹在哪里之后,假设在(hd0,msdos7)中, 输入set root=(hd0,msdos7), 输入set prefix=(hd0,msdos7)/boot/grub 输入insmod normal 输入normal 第五步:之后回车之后应该出现启动界面,如果没有正常启动,文章后边有解决办法 如果正常启动,可以进入linux界面,输入sudo update-grub,回车 第六步:再输入sudo grub-install /dev/sda ,回车 第七步:最后输入reboot 还有一种情况,就是输入insmod normal显示找不到文件,可以选择制作ubuntu开机引导盘,重装ubuntu,不用担心,我们的win7系统还在,重装重启后,就可以看到我们熟悉的系统选择界面,有WIN7还有ubuntu,这样你就可以任意选择你想要进入的系统了。 有不足的地方,请多多指教。

PHP

WordPress主题做好了,但是登录界面还是原生的样子,带有WordPress的图标,现在我们想把Logo自定义成我们想要的样子。 原来的登录界面如下: QQ截图20150204161421 现在开始,我们将把WordPress图标换做我们自定义的LOGO,首先要明确的是我们不能修改WordPress的源代码,因为如果有版本更新之类的操作,这个效果就找不到了,所以我们需要在主题下修改。 1.修改主题下的 functions.php 文件 在主题的最后面加入下面的代码,来引入一个CSS文件

1
2
3
4
/* 登陆界面图标 */
function custom_login() {
echo '<link rel="stylesheet" tyssspe="text/css" href="' . get_bloginfo('template_directory') . '/login/icon.css" />'; }
add_action('login_head', 'custom_login');

也就是引入了 login 目录下的 icon.css 样式表。 2.新建 icon.css 文件 在主题目录下新建 login文件夹,然后新建 icon.css 文件,编码为UTF-8,然后拖入我们自定义的LOGO,命名为 logo.png login目录里面是这样子的 QQ截图20150204162536 我的网站自定义的logo如下 logo 大家可以自己设计好的LOGO放入login目录下 在 icon.css 中加入如下代码

1
2
3
4
5
6
.login h1 a {
background-image: url('logo.png');
height: 100px;
width: 230px;
background-size: 230px;
}

在以上代码中设定了背景图和宽高度还有背景图片的大小即可。 如果想添加其他样式,只要在 icon.css 文件中加入样式就好。 三、刷新预览 修改完之后,我们预览一下,大功告成啦! 效果图如下 QQ截图20150204162703 酷酷哒!小伙伴们快来尝试一下吧!

PHP

一、移除主题中的样式版本号

在更新新版本之后,发现WordPress中的JS和CSS文件引入时带有ver参数,在浏览器中审查元素或者 F12 查看其引入的文件,就如图中一样,文件的末尾会带有一个这样的参数,这样带来的麻烦有很多。很大的问题就是 修改style.css 文件不生效,它带有这个参数的作用就会让浏览器加载缓存的 JS 和 CSS 文件,而你修改了样式之后它还是不会生效。 0150201161853 那么这个怎么去除? 找到你的主题文件中的 functions.php 文件 找到类似于下面的代码:

1
2
3
4
5
6
wp_register_script( 'jquery','//libs.baidu.com/jquery/1.8.3/jquery.min.js', false,'1.0');
wp_enqueue_script( 'jquery' );
wp_register_script( 'default', get_template_directory_uri() . '/js/jquery.js', false, '1.0', dopt('d_jquerybom_b') ? true : false );
wp_enqueue_script( 'default' );
wp_register_style( 'style', get_template_directory_uri() . '/style.css',false,'1.0');
wp_enqueue_style( 'style' );

你可以查找这几个函数名来找到。 你可以发现倒数第二行,引入了 style.css 文件,那么第四个参数就是罪魁祸首了,就是文件的版本号,把第四个参数修改为 null 即可,记住不要加引号的 null

1
wp_register_style( 'style', get_template_directory_uri() . '/style.css',false,null);

这样刷新页面,你就会发现 style.css 样式表后面的参数就不见啦。 同样的道理,对于 JS文件,你同样可以通过修改第四个参数来解决问题。

二、移除主题之外样式版本号

除了主题之内的CSS和JS带有版本号,主题之外的界面也带有版本号,比如登录界面等等,如果你想定制一个个性化的登录界面,那么你可以修改 wp-admin 目录下的css样式。但是,修改完之后仍然存在不生效的问题。这个怎么办? 如下图所示,150204145120 审查该登录界面的元素,你会发现它的CSS样式仍然带有版本号,这会导致我们不管怎样修改 login.min.css 仍不会生效,那么我们就分析一下源代码。 我从 wp-admin 目录下找到了 load-styles.php 文件,它正是加载 CSS样式所必备的文件,但是和上面的主题中加载CSS文件的方式不同,它并不存在 wp_register_style 这个方法,不过我发现,它引入了一个 version.php 文件,代码如下:

1
require( ABSPATH . WPINC . '/version.php' );

那么它的路径在哪里,我们会发现 ABSPATH和 WPINC两个变量,这是两个宏定义

1
2
define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );

顺藤摸瓜,我们找到了 wp-includes 目录下的 version.php 文件,其中就定义了版本号这个变量

1
$wp_version = '4.0.1';

根据上面的思路,我们只需要把 version 改成null即可,试一下。这个方法不算好,去掉版本号之后一些插件可能识别有问题,请谨慎修改。

1
$wp_version = null;

再来审查一下元素,我们就已经发现,版本号的后缀不见啦。 QQ截图20150204145920 我们之前修改的样式也已经生效了!如果还有更好的方法,欢迎补充! 以上只是我的一些拙见,希望对大家有帮助!

Python

1.大小写转换

判断字符串

1
2
3
4
5
6
7
s.isalnum() #所有字符都是数字或者字母
s.isalpha() #所有字符都是字母
s.isdigit() #所有字符都是数字
s.islower() #所有字符都是小写
s.isupper() #所有字符都是大写
s.istitle() #所有单词都是首字母大写,像标题
s.isspace() #所有字符都是空白字符、\t、\n

大小写转换

1
2
3
4
s.upper() #把所有字符中的小写字母转换成大写字母
s.lower() #把所有字符中的大写字母转换成小写字母
s.capitalize()  #把第一个字母转化为大写字母,其余小写
s.title()  #把每个单词的第一个字母转化为大写,其余小写

Python

1.输入输出

输出实例

1
2
print 'hello','world'
hello world

输入实例

1
2
3
4
5
name = raw_input();
print "hello,",name

world
hello,world

输入时提示实例

1
2
3
4
5
name = raw_input('please enter your name:');
print "hello,",name

please enter your name:world
hello,world

raw_input 函数读入的是字符串,如果想要转换成int类型,就要用到int函数。

1
birth = int(raw_input('birth: '))

2.字符表示

十进制正常表示,十六进制最前面加 0x,小数正常表示,科学计数法表示 1.23x109就是1.23e9,或者 12.3e8 转义符 \ 转义符实例:

1
2
3
>>> print '\\\n\\'
\
\

防止转义,可以在前面加入 r

1
2
3
4
>>> print '\\\t\\'
\ \
>>> print r'\\\t\\'
\\\t\\

多行内容表示,用三引号包括

1
2
3
4
5
6
>>> print '''line1
... line2
... line3'''
line1
line2
line3

布尔值的表示 True 和 False

1
2
>>> 3 > 2
True

空值 None,相当于Java,C 中的 null

1
2
>>>print None==None
True

Unicode表示的字符串用 u’…’ 表示,转化成 UTF-8 编码

1
2
3
4
>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'>

文本文件编码

1
2
#!/usr/bin/env python
# -*- coding: utf-8 -*-

3.格式化

格式化输出实例

1
2
3
4
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

格式化整数和小数

1
2
3
4
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'

万能格式化 %s,可以代替所有格式化 对于Unicode字符串,用法完全一样,但最好确保替换的字符串也是Unicode字符串:

1
2
>>> u'Hi, %s' % u'Michael'
u'Hi, Michael'

输出百分号 %,用双 % 即可

1
2
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

4.列表 list

列表 list ,可变的有序表

1
2
3
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']

len函数获取它的长度

1
2
>>> len(classmates)
3

取得某个元素,可以用中括号索引

1
2
3
4
5
6
7
8
>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):

倒数索引

1
2
3
4
5
6
7
8
>>> classmates[-1]
'Tracy'
>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
>>> classmates[-4]
Traceback (most recent call last):

append 追加元素到末尾

1
2
3
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

insert 插入到指定位置

1
2
3
>>>> classmates.insert(1, 'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

pop 删除末尾元素

1
2
3
4
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']

pop 加入参数删除指定元素

1
2
3
4
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']

元素改变,直接赋值即可

1
2
3
>>> classmates[1] = 'Sarah'
>>> classmates
['Michael', 'Sarah', 'Tracy']

list可以嵌套,可用二维索引

1
2
3
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> s[2][1]
php

空列表

1
2
3
>>> L = []
>>> len(L)
0

5.元组 tuple

不可变有序的数组 定义元组

1
2
3
>>> classmates = ('Michael', 'Bob', 'Tracy')
>>> classmates
('Michael', 'Bob', 'Tracy')

空的元组

1
2
3
>>> classmates = ()
>>> classmates
()

一个元素的元组

1
2
3
>>> t = (1,)
>>> t
(1,)

注意不能用 t = (1) 来定义, 因为它定义的不是tuple,是 1 这个数,这是因为括号既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。 表面上可变的tuple

1
2
3
4
5
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向 ‘a’,就不能改成指向 ‘b’ ,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

6.字典 dict

字典 dict 即键值对组,dict的key必须是不可变对象。

1
2
3
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

把数据放入dict的方法,除了初始化时指定外,还可以通过key放入,在这之前,d 必须被声明,否则会报错

1
2
>>> d['Adam'] = 67
>>> d['Adam']

判断key是否在字典中 1. in 判断

1
2
>>> 'Thomas' in d
False

2. 通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value

1
2
3
4
>>> print d.get('Thomas')
None
>>> print d.get('Thomas', -1)
-1

要删除一个key,用 pop(key) 方法,对应的value也会从dict中删除

1
2
3
4
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

7.集合 set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。 要创建一个set,需要提供一个list作为输入集合:

1
2
3
>>> s = set([1, 2, 3])
>>> s
set([1, 2, 3])

重复元素在set中自动被过滤:

1
2
3
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
set([1, 2, 3])

通过 add(key) 方法可以添加元素到set中,可以重复添加,但不会有效果:

1
2
3
4
5
6
>>> s.add(4)
>>> s
set([1, 2, 3, 4])
>>> s.add(4)
>>> s
set([1, 2, 3, 4])

通过 remove(key) 方法可以删除元素:

1
2
3
>>> s.remove(4)
>>> s
set([1, 2, 3])

判断元素是否在set中

1
2
>>> 5 in s 
True

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

1
2
3
4
5
6
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])

HTML

之前一直想搭建一个个人CV,用来展示自己的详情,技能树,项目经历等等。从网上看了许多模板,发现扁平化设计的单页模板非常适合,不过下载了几个之后,直接拿来修改用了感觉没有什么可以学到的东西,现在扁平化趋势这么流行,加上网页的响应式布局也越来越火,何不自己尝试一把? 2015年1月23日,寒假正式结束了,处理完一些小事,就开始着手搭建个人CV了。四五天的时间,从学习相关BootStrap知识,响应式布局的相关了解,美工切图,代码实际编写,差不多搭建完毕,不过还有好多地方需要完善,欢迎访问 我的个人简介 搭建此网页需要具备的相关知识有:

  • Media Query相关了解
  • BootStrap框架布局的了解
  • jQuery相关语法的了解
  • font owesome图标框架的了解
  • Canvas绘图的了解

1.Media Query 关于响应式布局,首先要了解的是 Media Query的相关知识,翻译过来就是媒体查询的意思,它可以使不同大小的网页适应几套不同的CSS布局。比如笔记本电脑,屏幕宽度大都在1300px以上,可以匹配最高分辩率对应的CSS布局;又如平板电脑,屏幕宽度750px左右,可以适配中等分辨率对应的CSS布局;至于手机,则适配最小分辨率的CSS布局。这样,一次编写网站,多种终端可以看到不同的效果,不过代码只有一份,这就是响应式布局。 传送门:Media Query 简介 2.BootStrap BootStrap是一款非常有名的前端框架,只需要写非常少的代码即可,如果你只会了Media Query,自己编写完全没有问题,不过代码的复杂度会大大增加,而且不一定可以适配多种浏览器,可能你在Chrome里面是正常的,跑到IE你会惊呆的!所以,BootStrap是你的最好选择,简化的代码加多种浏览器适配,还有栅格化布局是相当给力,值得一试。 3.jQuery 毕竟是自己完全编写整个网页,有些适配或者动画处理还是需要JS来实现,如果涉及到CSS样式的应用,jQuery是你最好的选择。 强大的JS框架,各种动画效果均可以通过jQuery实现。当然前期的搭建不需要过多的jQuery特效,如果你想让自己的个人CV变得更炫,推荐一用。 4.Font Awesome 如果你需要用到各种图标,那么你还在苦苦地用PS抠图绘制吗?你错了,利用Font Awesome 图标框架,只需要添加一句代码,即可轻松插入你想要的图标,比如新浪微博,人人网等等,素材应有尽有。 传送门:Font Awesome 框架 5.Canvas绘图 如果你想要自己的网站更炫酷,有各种动画效果。例如制作一个圆形的进度条,那么Canvas是不二选择。不过稍微有些复杂,我在创建圆形进度条的时候就偷懒直接抠了四张进度条图,是不是很机智?哈哈。不过,如果你想修改了,不能继续抠图吧?那就用Canvas绘图吧! 以上算是个人心得,也算是一个个人日记,也希望能给读者带来一些帮助!

个人日记

曾经以为过不去的,终究会过去。痛苦有时候是一种提升,否则,我们流的眼泪也就毫无意义。

感谢她曾经给我带来的幸福甜蜜,有些事也不必将就,不必强求。

继续前行吧,成为更好的自己,也祝她能够幸福。

放下 · 坦然

曾经的她

cBfQq

HTML

关于HTML5

万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改。 2014年10月29日,万维网联盟宣布,经过几乎8年的艰辛努力,该标准规范终于最终制定完成。 在此提供HTML5视频教程。 视频来源:兄弟连教育 感谢 @兄弟连教育

关于兄弟连

兄弟连成立于2006年,专注于IT技术培训,是国内最早及最大的PHP/LAMP技术专业培训学校。 兄弟连现已开设PHP/Java/Android/IOS/手游/云计算/UI等多学科,累计培养逾万名学员,2014年学员就业平均起薪高达5500元+。 兄弟连已是第9个年头,这条路虽历尽艰辛,但我们痴心不改。我们就是想让学员们知道:不是所有的培训机构都是骗人的! 在兄弟连,你可以找到自我、重拾自信;在兄弟连,你会每天渴求成长,学到深夜; 在兄弟连,你把学习当成一种习惯;在兄弟连,你有更多的兄弟姐妹; 在兄弟连,有陪你一起熬夜的老师;在兄弟连,你会被“狠狠”的爱着…… 兄弟连已在北京、上海和广州设立校区,今后几年内将会陆续在成都、西安等地建设校区,每年有数十万名学员受益于兄弟连教育的职业培训、教学视频、网络公开课。

兄弟连

“我们不仅仅是老师,我们是学员的梦想守护者与职场引路人。” 我们不敢妄言改变中国教育,只是低下头认认真真做教育。兄弟连没有做什么惊天动地的大事,我们就是把别人不愿做的脏活累活做到极致,做教育就是需要这种工匠精神。 在中国,选择职业培训的学生,一定是对自己未来有憧憬、想改变命运的有志青年。主观上有学习的欲望,客观上自控能力差,需要外力协助其改变。 教学靠谱/变态严管/职业素养课我们的核心竞争力。 培训结束会有脱胎换骨的感觉,怕死别来兄弟连!

视频下载

视频下载

PHP

关于PHP

PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。 在此提供PHP视频教程,视频来源:兄弟连教育

关于兄弟连

兄弟连成立于2006年,专注于IT技术培训,是国内最早及最大的PHP/LAMP技术专业培训学校。 兄弟连现已开设PHP/Java/Android/IOS/手游/云计算/UI等多学科,累计培养逾万名学员,2014年学员就业平均起薪高达5500元+。 兄弟连已是第9个年头,这条路虽历尽艰辛,但我们痴心不改。我们就是想让学员们知道:不是所有的培训机构都是骗人的! 在兄弟连,你可以找到自我、重拾自信;在兄弟连,你会每天渴求成长,学到深夜; 在兄弟连,你把学习当成一种习惯;在兄弟连,你有更多的兄弟姐妹; 在兄弟连,有陪你一起熬夜的老师;在兄弟连,你会被“狠狠”的爱着…… 兄弟连已在北京、上海和广州设立校区,今后几年内将会陆续在成都、西安等地建设校区,每年有数十万名学员受益于兄弟连教育的职业培训、教学视频、网络公开课。

兄弟连

“我们不仅仅是老师,我们是学员的梦想守护者与职场引路人。” 我们不敢妄言改变中国教育,只是低下头认认真真做教育。兄弟连没有做什么惊天动地的大事,我们就是把别人不愿做的脏活累活做到极致,做教育就是需要这种工匠精神。 在中国,选择职业培训的学生,一定是对自己未来有憧憬、想改变命运的有志青年。主观上有学习的欲望,客观上自控能力差,需要外力协助其改变。 教学靠谱/变态严管/职业素养课我们的核心竞争力。 培训结束会有脱胎换骨的感觉,怕死别来兄弟连!

感谢 @兄弟连教育 视频下载

Java

Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。 Java分为三个体系Java SE(J2SE,Java2 Platform Standard Edition,标准版),JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企业版),Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。 在此提供Java SE的视频教程,感谢@兄弟连教育 视频来源:兄弟连教育 视频下载

PHP

关于PHP

PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。 在此提供PHP视频教程,视频来源:兄弟连教育

关于CI

如果你已经掌握了一点PHP知识,如果…

  1. 你想要一个小巧的框架。
  2. 你需要出色的性能。
  3. 你需要广泛兼容标准主机上的各种 PHP 版本和配置。
  4. 你想要一个几乎只需 0 配置的框架。
  5. 你想要一个不需使用命令行的框架。
  6. 你想要一个不需坚守限制性编码规则的框架。
  7. 你对 PEAR 这种大规模集成类库不感兴趣。
  8. 你不希望被迫学习一门模板语言(虽然可以选择你喜欢的模板解析器)。
  9. 你不喜欢复杂,热爱简单。
  10. 你需要清晰、完善的文档。

那么CodeIgniter就是你的最好选择,在此提供一个学习视频,供大家学习

关于兄弟连

兄弟连成立于2006年,专注于IT技术培训,是国内最早及最大的PHP/LAMP技术专业培训学校。 兄弟连现已开设PHP/Java/Android/IOS/手游/云计算/UI等多学科,累计培养逾万名学员,2014年学员就业平均起薪高达5500元+。 兄弟连已是第9个年头,这条路虽历尽艰辛,但我们痴心不改。我们就是想让学员们知道:不是所有的培训机构都是骗人的! 在兄弟连,你可以找到自我、重拾自信;在兄弟连,你会每天渴求成长,学到深夜; 在兄弟连,你把学习当成一种习惯;在兄弟连,你有更多的兄弟姐妹; 在兄弟连,有陪你一起熬夜的老师;在兄弟连,你会被“狠狠”的爱着…… 兄弟连已在北京、上海和广州设立校区,今后几年内将会陆续在成都、西安等地建设校区,每年有数十万名学员受益于兄弟连教育的职业培训、教学视频、网络公开课。

兄弟连

“我们不仅仅是老师,我们是学员的梦想守护者与职场引路人。” 我们不敢妄言改变中国教育,只是低下头认认真真做教育。兄弟连没有做什么惊天动地的大事,我们就是把别人不愿做的脏活累活做到极致,做教育就是需要这种工匠精神。 在中国,选择职业培训的学生,一定是对自己未来有憧憬、想改变命运的有志青年。主观上有学习的欲望,客观上自控能力差,需要外力协助其改变。 教学靠谱/变态严管/职业素养课我们的核心竞争力。 培训结束会有脱胎换骨的感觉,怕死别来兄弟连!

感谢 @兄弟连教育 视频下载

Linux

VPN是什么?中文翻译叫做:虚拟专用网络。功能是,在公用网络上建立专用网络,进行加密通讯。 适用的场合: 1.你的公司网络在一个局域网,不能外部访问。有一天你外出度假了,想访问一下公司的内部网络,外网是不能直接访问的。如果公司的网络有一台主机设置了VPN,你就可以通过连上这台VPN主机,来访问公司内部网络啦。 2.如果你的主机是在国外,你可以在这台主机上配置VPN,然后你的电脑连上VPN之后就可以翻墙啦。 3.某台服务器(如游戏服务器)限制了一些IP连接到它上面,这时你配置VPN,连上VPN之后,就可以继续访问那台服务器咯。 4.etc… 我们以Ubuntu为例,说一下怎样配置VPN服务器。 1、用root账户登陆服务器 2、安装PPTPD

1
apt-get install pptpd

3、编辑pptpd.conf文件

1
vi /etc/pptpd.conf

取消注释下面内容

1
2
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

这几句的意思是:当外部计算机通过pptp联接到vpn后所能拿到的ip地址范围和服务器的ip地址设置。 4、添加用于登陆的账户

1
vi /etc/ppp/chap-secrets

格式如下:

1
2
# client server secret IP addresses
cqc pptpd 123456 *

从左到右依次是用户名,自己指定。服务器,填写pptpd,密码,自己指定。IP,填*即可。中间用空格分别隔开。 5、设置DNS解析,编辑pptpd-options文件

1
vi /etc/ppp/pptpd-options

找到ms-dns,取消掉注释,并修改DNS地址,这里我推荐大家用 Google DNS 8.8.8.8 和 8.8.4.4 更改为如下内容

1
2
ms-dns 8.8.8.8
ms-dns 8.8.4.4

6、开启转发

1
vi /etc/sysctl.conf

取消注释以下内容

1
net.ipv4.ip_forward=1

这句话意思是:打开内核IP转发 更新一下配置

1
sudo sysctl -p

7、安装iptables并设置

1
2
apt-get install iptables
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

后面这句话作用是:立刻让LINUX支持NAT(platinum) 8、重新启动服务

1
/etc/init.d/pptpd restart

9、大功告成,VPN服务器就这么配置好啦。 接下来,利用IP地址,刚才设置的VPN账号和密码,就可以连你的VPN啦。 如果有问题,欢迎与我交流~

Other

现在遇到这么一个情况,在我电脑上配置了一对SSH秘钥,其中公钥已经添加到了我的GitHub上面。 现在我又申请了一个账号,我同样想添加这个秘钥到这个账号上去,但是GitHub提示了一个错误,说这个公钥已经被使用,不能添加。 于是,我意识到了一个问题,同一个公钥是不能添加到不同的GitHub账号的。在我的GitHub上配置了,另一个就不能配置了。 所以,我需要重新生成一对SSH,过程如下: 在命令行中输入:

1
ssh-keygen -t rsa -C '1016903103@qq.com'
1
2
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): ~/.ssh/id_rsa2 #这里输入一个新的ssh key文件名

在这里我们就输入 ~/.ssh/id_rsa2 了,注意此处一定要加上路径名,要不然生成的秘钥不会保存到 .ssh文件夹中。 后面会让你提示输入密码,直接回车两次就好了,如果你非要输入密码也没事。 接下来就会提示秘钥生成成功,会打印出你生成的秘钥。 ~/.ssh/id_rsa2为新SSH Keys文件名,根据实际情况修改,保证每次不一样即可。 打开新生成的~/.ssh/id_rsa2.pub文件,将里面的内容添加到GitHub后台,在这里我就添加到我另一个GitHub账号里了。 接下来你再Push尝试一下,发现会提交失败,提示如下的内容。

1
2
Please make sure you have the correct access rights 
and the repository exists.

这是因为它默认识别了你第一个私钥,也就是id_rsa 为了让它识别你新生成的私钥,你需要在.ssh目录,注意一定要是.ssh目录,和你的秘钥放在一块。要不然不能识别,新建一个config文件,不要后缀,文件名即为config 输入如下内容:

1
2
3
4
5
Host git@github2.com   #此处可以随意指定
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa2 #你新生成的SSH名字

Git的时候不是有一个SSH地址吗?比如我原先的是

1
git@github.com:cqcre/shiyida.git

现在我们就要把它改成

1
git@github2.com:cqcre/shiyida.git

其中:前面的内容就是你填写的Host内容。 你可以随意更改,这里我为了保持风格统一,就把Host设置为了 git@github2.com 如果你的Host设置为xxx,那么我的SSH地址就要改为 xxx:cqcre/shiyida.git,你的地址相对应地更改。 现在尝试一下,就可以Push了,如果还不能,请重新打开Git Bash,需要关闭后再次开启一下Git才能生效的。 如果有问题,与我联系~ 邮箱 1016903103@qq.com QQ 1016903103

PHP

首先感谢郝同学告诉我这么一个神奇的接口 可以输入你的手机号、密码、对方手机号、发送内容直接给对方发短信。 源作者博客地址为:http://blog.quanhz.com/ 郝同学的博客地址:http://www.findspace.name 我们先来演示下这个接口的功能: 测试地址:res.cuiqingcai.com/fetion 进入之后会让您选择两种发送方式,一种是GET,一种是POST 两种方式什么区别?最重要的区别是GET方式是直接以链接形式访问,链接中包含了所有的参数,当然如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。POST则不会在网址上显示所有的参数,不过如果你想直接查看提交了什么就不太方便了,大家可以酌情选择。 QQ截图20141123225356 或者直接通过以下接口来访问: 1. GET方式:http://res.cuiqingcai.com/fetion/get.php 2.POST方式:http://res.cuiqingcai.com/fetion/post.php 二者界面相同,功能稍有不同而已。 QQ截图20141123230147 点击发送之后,便可以向你的飞信好友发送短信了。是不是很神奇,如果你输入的号码不合法,会自动通过JS判定,如果不合法,不会提交。 那么接口是怎样调用的呢? GET接口是这样的:通过访问一个URL来进行发送短信。参数如下: 1.你的手机号 2.飞信密码 3.对方的手机号 4.要发送的信息。 例如:http://res.cuiqingcai.com/fetion/php/gsend.php?user=18366119732&key=abcd&number=18366119732&text=hello 加入这四个参数之后,你便可以通过访问这个网址来向好友发送短信。那么18366119732 就能收到hello的信息了,并通过查看返回值来判断发送状况。 P.S.输入你的飞信密码后我不会盗取你的密码的,源码地址在下面,大家可以自行查看。相信我的人品,我不会偷偷存到数据库的… 如果担心,请自行下载源码,并部署到自己的服务器上。 接口为PHP版本,我对其源码进行了重构,增加了返回登录信息的功能。并对其接口进行了重写,增加了是否登录成功,是否信息为空,是否信息过长,是否是给自己发短信,是否是给别人发短信的判定,并返回相应的结果。 返回结果判定如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(strpos($result,'请输入密码')){
//登录失败
echo "D";
}else if(strpos($result,'NoMessage')){
//发送的消息为空
echo "K";
}else if(strpos($result,'限制在500字')){
//发送内容超长
echo "L";
}else if(strpos($result, '短信发送成功!')) {
//给自己发送成功
echo "M";
}else if(strpos($result,'发送消息成功')){
//给别人发送成功
echo "O";
}else {
//不是好友,发送失败
echo "H";
}

1.登录失败:D 2.发送消息为空:K 3.发送内容超长:L 4.给自己发送成功:M 5.给别人发送成功:O 6.不是好友,发送失败:H 返回结果大家可以更改echo的内容自己定制。 在下面附上接口及测试的源代码: https://github.com/cqcre/fetion 另附:JS和PHP用正则表达式判定手机号是否合法的方法,新增加了最新4G手机号的判定。 JS:

1
2
3
4
5
6
var number = $("#number").val();
if((number.length != 11) || (!number.match(/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|17[6|7|8]|18[0-9])\d{8}$/))){
alert("号码不合法");
}else{
alert("号码合法");
}

PHP:

1
2
3
4
5
if((strlen($phone) != 11) || !(preg_match("/13[0123456789]{1}\d{8}|15[012356789]\d{8}|18[0123456789]\d{8}|17[678]\d{8}|14[57]\d{8}/",$phone))){
echo "手机号不合法";
}else{
echo "手机号合法";
}

Linux

作为一名学生,免不了同学之间传送资料和数据的问题。 由于整个学校相当于一个大型局域网,相互之间传送数据非常快,比如要共享个电影,传点资料什么的。 所以我们可以选择搭建一个FTP服务器来共享文件。 那么问题来了,有的同学会问,我们既然在一个局域网内,直接用QQ传也很快啊,干嘛要搭建FTP服务器? 那么告诉大家,如果两人不能同时在线呢?离线文件?传离线文件不就不走局域网了吗? 还有如果你想一个人给多个人同时发呢?一个一个发?网盘链接?算了吧,等到花儿都谢了都下不完… 所以,明智的选择,FTP服务器。 在学校拥有了一台服务器之后,我可以把自己的资料或者电影放到我的FTP服务器上,分享给同学一个链接,分分钟下载完,当然我们需要在一个局域网才能有那样的速度,这样的话,不用我去开个QQ传,也不用动什么网盘分享,简单粗暴。 接下来我就说一下怎样配置自己的FTP服务器。 我的系统为Ubuntu,所以我选择了利用vsftpd来配置自己的服务器。 配置这个,为了确保安全,你可以选择使用用户名和密码来登录,也可以直接匿名登录…随你怎么来。 为了方便,我直接设置了匿名登录,这样让别人分享给我东西时,也不需要告诉别人用户名密码,直接拖进去上传就行了,方便快捷,不过安全性嘛,你懂得~ 这里我只配置了匿名的方式,具体的用户名密码登录的方式,网上的教程也是一大堆。 废话说了一大通了,开始干!配置很简单 首先下载安装vsftpd

1
sudo apt-get install vsftpd

然后修改/etc/vsftpd.conf文件 修改如下几行: #为注释的意思,最前面不加#就是取消掉它的注释,使之生效

1
anonymous_enable=YES    #设置匿名可登录
1
local_enable=YES        #本地用户允许登录
1
write_enable=YES        #用户是否有写的权限
1
anon_upload_enable=YES   #允许匿名用户上传
1
anon_mkdir_write_enable=YES   #允许匿名用户创建目录文件

其他的就不用管了,保存文件。 重启vsftpd服务器

1
sudo service vsftpd restart

设置完了这些之后,其他人就能来访问你的FTP服务器了。 现在你可以登录你的服务器来尝试一下了。 现在应该能登录进去,但是里面什么也没有。 因为匿名用户默认访问的是你的 /srv/ftp 文件夹 现在我们需要两个功能,一个用来上传的,一个用来下载的 上传的文件夹,其他人可以上传到这个文件夹,但是不能有删除权限,试想如果有匿名登录进来的给你删除掉了别人好心给你分享的文件还行吗? 下载的文件夹,其他人只能读取这个文件夹,但是不能修改这个文件夹,也就是你要分享给其他人的文件可以放到这里面。 我们在/srv/ftp 文件夹新建两个文件夹,一个是upload,一个是download 执行下面的两条指令

1
sudo chmod -R 777 /srv/ftp/upload
1
sudo chmod -R 755 /srv/ftp/download

这样就把upload的权限设置为可读可写,把download权限设置为可读不可写。 配置完上面的内容,就大功告成啦,登录FTP服务器后,你就可以看到一个upload文件夹,一个download文件夹。 是不是很简单。 现在下面的事情你就可以实现了: 1. 学校里某个同学有一个非常好看的电影,而你现在又不方便去接受,发网盘又太慢,你就把你的FTP地址扔给他,对他说,你上传到 ftp://<你的IP地址>/upload 文件夹下吧,我回去的时候取下来看。 2. 你剪辑了一个很不错的视频短片,想分享给学校里的小伙伴,你就可以把它扔到你的FTP服务器 /srv/ftp/download 目录下,然后对小伙伴们说,我的视频已经共享了,你们到 ftp://<你的IP地址>/download 里面去下载吧。 恩,只要你配置好了FTP,就能享受FTP局域网高速传输,分分钟搞定~ 如果配置有问题,欢迎与我联系~

Other

一、字符串

以实际输入的命令为例

1.建立键值对

1
set bar 1

建立了一个键值对,键名叫bar,键值是1

2.判断键是否存在

1
exists bar

判断键名bar是否存在 若存在则返回1,不存在返回0

3.删除键

1
del bar

删除键名为bar的键值对 若删除成功则返回删除的个数,删除失败(不存在)则返回0

4.查看所有的键

1
keys *

5.获得键值的数据类型

1
type foo

获得键名为foo的键值类型 返回值类型可能有 string(字符串),hash(散列),list(列表),set(集合),zset(有序集合)

6.获得键对应的值

1
get foo

获得键名为foo的键值

7.自增

1
incr foo

创建一个foo的键值对,并自增为1 但是运行type foo 时,显示为string 增加特定数值

1
incrby foo 3

使foo增加3

8.自减

1
decr foo

减小1个数值

1
decrby foo 3

减小3个数值

9.增加指定浮点数

1
incrbyfloat bar 2.5

bar增加指定的浮点数2.5

10.向尾部追加值

1
append bar hehe
1
append bar " world"

如果是要追加带空格的内容,则要用空格引起来 返回值是一个数字,代表现在键值的长度

11.获取字符串长度

1
strlen bar

返回值是一个数字,代表现在的字符串长度

12.同时设置多个键值对

1
mset key1 value1 key2 value2 key3 value3

13.同时获得多个键值对应内容

1
mget key1 key2
1
2
1)value1
2)value2

二、散列

1.赋值和取值

1
hset key field value

例如:

1
hset car price 500
1
hget car price

同时赋值多个字段的值

1
hmset car price 500 name BMW
1
hmget car price name

2.判断字段是否存在

1
hexists car price

3.只获得字段名

1
hkeys car

4.只获得字段值

1
hvals car

5.获得字段数量

1
hlen key

三、列表

1.向两边添加元素

1
lpush group 1
1
rpush group 2

结果

1
2
1) "1" 
2) "2"

lpush 是向左边添加元素,rpush 是向右边添加元素。

2. 从两边弹出元素

1
lpop group
1
rpop group

lpop 是从左边弹出元素, rpop 是从右边弹出元素,显示元素的值

3.获取列表中元素的个数

1
llen group

4.获得列表片段

1
lrange group 0 3
1
lrange group -2 -1

其中 -2 -1 为负索引,这个也是可行的。-2代表倒数第二个元素,-1代表倒数第一个元素。 特殊地:获取所有元素则可以这么写

1
lrange group 0 -1

5.删除列表中指定的值

1
lrem group count value

当count > 0,它会从左边开始删除前count个值为value的元素。 当count < 0,它会从右边开始删除前|count|个值为value的元素。 但count = 0,它会删除所有值为value的元素。

6.获得索引处的值

1
lindex group 0

获得索引0位置的元素值

7.设置索引处的值

1
lset group 1 5

将 group 索引 1 处的值改为 5

8.只保留特定的片段

1
ltrim group 0 1

只保留索引0到1的值,其余的删除

9.向列表中插入元素

1
linsert group after 2 5

从左边开始查询,找到数字2,在后面插入数字5 insert group before 2 5 从左边开始查询,找到数字2,在前面插入数字5

四、集合

1.添加元素

1
sadd hello 2 4 5

向集合中添加2 4 5元素,返回值是成功加入的元素数量

2.删除元素

srem hello 4 5 从集合中删除4 5,返回值是成功删除的元素数量

3.获得集合中所有元素

1
smembers hello

4.判断元素是否在集合中

sismember hello 2 判断2是否在集合hello中 存在返回1,不存在返回0

5.集合的运算

差集

1
sdiff setA setB

返回值是集合,返回的是存在集合A中但是不存在B中的元素集合

交集

1
sinter setA setB

返回值是setA和setB的交集

并集

1
sunion setA setB

6.获得集合大小

1
scard setA

返回值是数目

7.随机获得集合中的数字

1
srandmember setA

五、有序集合

1.增加元素

增加时需要指定元素的分数和元素的名称

1
zadd score 89 Tom 45 Amy

分数不仅可以是整数,还可以是浮点数

1
zadd score 2.3 Mike
1
zadd score +inf Bob

2.获得元素分数

1
zscore score Tom

如果不存在,返回(nil)

3.获得排名在某个范围内的元素列表

1
zrange score 0 2

带分数显示

1
zrange score 0 -1 withscores

4.获得指定分数范围的元素

1
zrangebyscore score 45 80

获得45分到80分的元素,闭区间 如果不想是闭区间,则可以在索引前面加上(

1
zrangebyscore score (45 80

5.取某几个值

zrangebyscore score (45 80 limit 0 3 取(45,80]之间的元素,从第一个开始,取3个

6.增加某个元素分数

1
zincrby score 5 Tom

给某个元素加5分

1
zincrby score -2 Tom

给某个元素减2分

7.给某个元素重新赋值分数

同样用zadd命令

1
zadd score 22 Tom

8.获得集合中元素的数量

1
zcard score

9.获得指定分数范围内元素个数

1
zcount score 79 90

10.删除一个或者多个元素

1
zrem score Tom

11.按照分数删除元素

1
zremrangebyrank score 0 1

它先会把它按照分数从小到大排列,然后删除索引位置的元素

12.按照分数删除元素

1
zremrangebyscore score 28 99

他会删除指定分数范围内的元素

13.获得元素排名

1
zrank score Tom

获得按照分数从小到大排列后,Tom的索引位置 反向排名

1
zrevrank score Tom

返回从大到小排列后,Tom的索引位置

Other

首先,你可以试着输入git,看看系统有没有安装Git

1
2
3
$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。 如果你碰巧用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。 如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./configmakesudo make install这几个命令安装就好了。 安装完成后,还需要最后一步设置,在命令行输入:

1
2
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

然后我们需要配置SSH。 第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

1
$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。 如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。 第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面: 然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容: 0 点“Add Key”,你就应该看到已经添加的Key: 10 为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。 当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。 现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

1
$ git remote add origin git@github.com:cqcre/cqc.git

请千万注意,把上面的 cqcre 替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。 添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。 下一步,就可以把本地库的所有内容推送到远程库上:

1
$ git push -u origin master

好啦,静静等待git把你的代码Push上去吧~是不是很简单?

福利专区

想学游戏开发吗? 想把自己的创意变成现实吗? 想一次开发,各个平台到处运行吗? 想亲自体验一下开发的成果带给你的惊喜吗? 玩过捕鱼达人么?这个游戏6不6?想不想自己做一个? 那就选择Cocos2d-x游戏开发。在这里提供给小伙伴们全套的视频教程。 来自兄弟连的Cocos2d-x视频教程。 网盘地址:http://pan.baidu.com/s/1ntxCnbF