豪翔天下

Change My World by Program

0%

参考文档:https://docs.python.org/3/library/configparser.html#module-configparser

今天在研究MySQL Connector for Python的时候无意间发现原来Python自带了设置与读取配置信息的模块的,有了这么一个功能就能够在一个单独的文件里面写上一些敏感信息,比如你的数据库的用户名密码等,以后要使用的时候直接读取该文件即可。这里简要描述一下其使用方法。

首先,得要有一个文件用来保存配置信息,格式如下setting.conf:

[DATABASE]
Port = 21
Username = haofly
Password = 123456
Database = test

[DEFAULT]
User = hg

需要注意的是,在配置文件里字符串是不加引号的,因为无论是字符串还是数字,读取出来都是字符串的形式。

在另一个文件中使用方法如下:

1
2
3
4
5
6
import configparser

config = configparser.ConfigParser()
config.sections()
config.read('co.config')
print(config['DATABASE']['Username'])

打印出来haofly

上一次用cURL获取了QQ的好友列表,跳过了验证过程,感觉特别爽,所以趁热打铁,直接又写了个获取所有QQ好友相册的代码。

环境:Python3 + Chrome + Windows7

首先得要获取到所有QQ好友的QQ号码,直接参考《使用Python3和Chrome获取QQ好友列表》,当然,如果你想要指定的号码,那么直接在**qqlist.txt**里写上其QQ号
码即可(不过获取之后是不用处理末尾的’\n’的,因为我当时写入的时候加入了)。

然后,和那篇文章一样,获取cURL。

首先在任意一个_user.qzone.qq.com/QQ号码/4_页面刷新,在审查里面的Network获取_fcg_list_album_的cURL
,然后,再随便点进一个相册获取_cgi_list_photo_的cURL,其中一个是获取相册列表的,一个是获取某相册下照片列表的。

然后将两个字符串分别替换代码16/17行的get_album和get_photo

#-_- coding: UTF-8 -_-
import os, sys
import re
import subprocess
import shlex
import urllib.request
import json
import codecs
import datetime




# 我最先是把get_album和get_photo的值存储在request_curl.py文件里面的




# from request_curl import *




# 添加curl的环境变量




os.putenv('PATH', 'C:\\Program Files (x86)\\Git\\bin')




# 获取原始curl请求




origin_album = get_album
origin_photo = get_photo




# 获取目标QQ




fp = open('qqlist.txt', 'r')
qqlist = fp.readlines()
for i in range(len(qqlist)):
    qqlist[i] = qqlist[i][:-1]
fp.close()




for target in qqlist:
        log = \{\}                    # 下载日志
        log['qq'] = target          # QQ号
        log['access'] = 1           # 是否允许访问
        log['time'] = datetime.datetime.now()   # 下载完成后记录花费的时间
        log['album_count'] = 0      # 相册总数
        log['photo_count'] = 0      # 照片总数





    print('当前QQ:' + target)
    try:
        os.makedirs('photos/' + target)                                             # 建立相应的文件夹
    except:
        os.removedirs('photos/' + target)
        os.makedirs('photos/' + target)
    # 先得到正确的curl,然后执行获取json数据
    curl = origin_album.replace('&hostUin=1129029735', '&hostUin=' + target)    # 被访问者
    curl = curl.replace('&pageNumModeSort=40', '&pageNumModeSort=100')          # 显示相册数量
    args = shlex.split(curl)
    result = subprocess.check_output(args).decode('utf-8')
    convert = result[result.find('(') + 1 : result.find(')', -1) -1]            # 去除不标准的json数据
    output = json.loads(convert)                                                # 最终json数据
    if(output['code'] == -4009):
        log['access'] = 0           # 是否允许访问
        fp = open('photos/' + target + '/log.txt', 'w', encoding='utf-8')       # 日志文件,记录时间与数量
        fp.writelines(str(log))
        fp.close()
        continue

    # output['data']['albumListModeSort']就是相册列表
    # 艹,也有可能output['data']['albumListModeClass'][0]['albumList']是相册列表
    # 最后才发现,output['data']['albumListModeClass']也有可能是相册列表
    try:
        if(output['data']['albumListModeSort'] == None):
            albumList = None
        else:
            albumList = output['data']['albumListModeSort']
    except:
        if(output['data']['albumListModeClass'] == None):
            albumList = None
        else:
            albumList = output['data']['albumListModeClass'][0]['albumList']

    # 我服都服了,这么大个人了,居然还有没有相册的
    if(albumList == None):
        continue

    theSameAlbumName = 0    # 防止同名相册的出现
    print(albumList)
    for album in albumList:
        log['album_count'] += 1
        print('当前相册:' + album['name'])
        if(album['allowAccess'] == 0):                  # 相册无法直接访问(需要密码或者禁止访问)
            continue

        # album['id']就是照片列表的ID
        # 获取照片列表数据
        curl = origin_photo.replace('&hostUin=1129029735', '&hostUin=' + target)
        curl = curl.replace('&topicId=V10HYl1S33NLS5', '&topicId=' + album['id'])
        curl = curl.replace('&pageNum=30', '&pageNum=600')  # QQ空间每个相册最大貌似不会超过512
        args = shlex.split(curl)
        result = subprocess.check_output(args).decode('utf-8')
        convert = result[result.find('(') + 1 : result.find(')', -1) -1]
        output = json.loads(convert)

        if(output['code'] == -4404):
            continue

        # 相册名里面会不会也有奇葩名字呢
        filt = re.compile(r'\\\\|/|:|\\*|\\?|<|>|\\||\\.')
        album['name'] = re.sub(filt, '', album['name'])
        # 我服都服了,QQ空间居然还允许同名的相册。。。
        albumname = album['name'].replace(' ', '')
        filelist = os.listdir('photos/' + target + '/')
        if (albumname in filelist) or (len(albumname) == 0):
            albumname = albumname + '_' + str(theSameAlbumName)
            theSameAlbumName += 1

        os.makedirs('photos/' + target + '/' + albumname)
        same = 0    # 防止同名

        # 获取该相册下的每一张照片,如果相册为空,那么output['data']['photoList'] = None,艹
        photoList = output['data']['photoList']
        if(photoList == None):
            continue

        for photo in photoList:
            log['photo_count'] += 1
            print('当前照片' + photo['name'])

            # 图片格式由photo['phototype']字段(整型)控制
            # 1:jpg
            # 3:png
            phototype = \{'1': '.jpg', '2': '.gif', '3': '.png', '5': '.jpg', '10': '.jpg'\}
            try:
                format = phototype[str(photo['phototype'])]
            except:
                format = '.jpg'

            # 建立文件夹并下载图片
            # QQ图片里面有太多的特殊字符了
            photoname = photo['name']
            filelist = os.listdir('photos/' + target + '/' + albumname)
            for i in range(len(filelist)):
                filelist[i] = filelist[i][:-4]
            photoname = photoname.replace(' ','')

            if (photoname in filelist) or (len(photoname) == 0):
                photoname = photoname + '_' + str(same)
                same += 1
            # 文件名中不能有特殊字符
            filt = re.compile(r'\\\\|/|:|\\*|\\?|<|>|\\||\\.|\\n|\\t|\\"')
            photoname = re.sub(filt, '', photoname)

            path = 'photos\\\\' + target + '\\\\' + albumname + '\\\\' + photoname + format
            try:
                urllib.request.urlretrieve(photo['url'], path)
            except urllib.error.ContentTooShortError as e:
                print('啥子错误哟')

    fp = open('photos/' + target + '/log.txt', 'w', encoding='utf-8')       # 日志文件,记录时间与数量
    log['time'] = (datetime.datetime.now() - log['time']).seconds
    log['time'] = str(log['time']) + 's'
    fp.writelines(str(log))
    fp.close()
    print('当前QQ:' + target + '下载完毕')</pre>

以下是我获取到的结果,可以说,百分之九十九都成功获取到了,但是有几个好友反映貌似他们的没有获取完,我去看了下,又是获取的json数据结构的问题,我真的服了,
腾讯同一个功能搞那么多数据结构来干嘛,操蛋。

另外写了一个统计耗时的脚本,因为我在每个相册的日志里都记录了下载时间的,所以直接就统计了

# 统计log.txt里面所有的数据




# 根目录是photos




import os
import json
alltime = 0
for i in os.walk('photos'):
    if(len(i[2]) == 1 and i[2][0] == 'log.txt'):
        fp = open(i[0] + '/' + 'log.txt', 'r')
        data = fp.read()
        data = data.replace('\\'', '"')
        if(data.find('datetime') < 0):
            #print(data)
            output = json.loads(data)
            time = output['time'][:-1]
            alltime += int(time)
            fp.close()
print(str(alltime/60/60) + 'h')

结果是13.797500000000001h,和我预计的差不多,虽然是4M的网速,但是建立连接建立过多,而且没有用到多线程,这个时间还是合情合理的。

PS:正在把这些照片上传到云盘,哈哈,要是泄漏了可不要说我是故意的 还有就是请勿模仿,我虽然总共下载了400个好友,但是停下来了十多次,都是数据结构出现问题
,请千万不要为此折腾,我纯属是为了完成自己以前的愿望罢了,下载下来也没用。

上一次用cURL获取了QQ的好友列表,跳过了验证过程,感觉特别爽,所以趁热打铁,直接又写了个获取所有QQ好友相册的代码。

环境:Python3 + Chrome + Windows7

首先得要获取到所有QQ好友的QQ号码,直接参考《使用Python3和Chrome获取QQ好友列表》,当然,如果你想要指定的号码,那么直接在**qqlist.txt**里写上其QQ号
码即可(不过获取之后是不用处理末尾的’\n’的,因为我当时写入的时候加入了)。

然后,和那篇文章一样,获取cURL。

首先在任意一个_user.qzone.qq.com/QQ号码/4_页面刷新,在审查里面的Network获取_fcg_list_album_的cURL
,然后,再随便点进一个相册获取_cgi_list_photo_的cURL,其中一个是获取相册列表的,一个是获取某相册下照片列表的。

然后将两个字符串分别替换代码16/17行的get_album和get_photo

#-_- coding: UTF-8 -_-
import os, sys
import re
import subprocess
import shlex
import urllib.request
import json
import codecs
import datetime




# 我最先是把get_album和get_photo的值存储在request_curl.py文件里面的




# from request_curl import *




# 添加curl的环境变量




os.putenv('PATH', 'C:\\Program Files (x86)\\Git\\bin')




# 获取原始curl请求




origin_album = get_album
origin_photo = get_photo




# 获取目标QQ




fp = open('qqlist.txt', 'r')
qqlist = fp.readlines()
for i in range(len(qqlist)):
    qqlist[i] = qqlist[i][:-1]
fp.close()




for target in qqlist:
        log = \{\}                    # 下载日志
        log['qq'] = target          # QQ号
        log['access'] = 1           # 是否允许访问
        log['time'] = datetime.datetime.now()   # 下载完成后记录花费的时间
        log['album_count'] = 0      # 相册总数
        log['photo_count'] = 0      # 照片总数





    print('当前QQ:' + target)
    try:
        os.makedirs('photos/' + target)                                             # 建立相应的文件夹
    except:
        os.removedirs('photos/' + target)
        os.makedirs('photos/' + target)
    # 先得到正确的curl,然后执行获取json数据
    curl = origin_album.replace('&amp;hostUin=1129029735', '&amp;hostUin=' + target)    # 被访问者
    curl = curl.replace('&amp;pageNumModeSort=40', '&amp;pageNumModeSort=100')          # 显示相册数量
    args = shlex.split(curl)
    result = subprocess.check_output(args).decode('utf-8')
    convert = result[result.find('(') + 1 : result.find(')', -1) -1]            # 去除不标准的json数据
    output = json.loads(convert)                                                # 最终json数据
    if(output['code'] == -4009):
        log['access'] = 0           # 是否允许访问
        fp = open('photos/' + target + '/log.txt', 'w', encoding='utf-8')       # 日志文件,记录时间与数量
        fp.writelines(str(log))
        fp.close()
        continue

    # output['data']['albumListModeSort']就是相册列表
    # 艹,也有可能output['data']['albumListModeClass'][0]['albumList']是相册列表
    # 最后才发现,output['data']['albumListModeClass']也有可能是相册列表
    try:
        if(output['data']['albumListModeSort'] == None):
            albumList = None
        else:
            albumList = output['data']['albumListModeSort']
    except:
        if(output['data']['albumListModeClass'] == None):
            albumList = None
        else:
            albumList = output['data']['albumListModeClass'][0]['albumList']

    # 我服都服了,这么大个人了,居然还有没有相册的
    if(albumList == None):
        continue

    theSameAlbumName = 0    # 防止同名相册的出现
    print(albumList)
    for album in albumList:
        log['album_count'] += 1
        print('当前相册:' + album['name'])
        if(album['allowAccess'] == 0):                  # 相册无法直接访问(需要密码或者禁止访问)
            continue

        # album['id']就是照片列表的ID
        # 获取照片列表数据
        curl = origin_photo.replace('&amp;hostUin=1129029735', '&amp;hostUin=' + target)
        curl = curl.replace('&amp;topicId=V10HYl1S33NLS5', '&amp;topicId=' + album['id'])
        curl = curl.replace('&amp;pageNum=30', '&amp;pageNum=600')  # QQ空间每个相册最大貌似不会超过512
        args = shlex.split(curl)
        result = subprocess.check_output(args).decode('utf-8')
        convert = result[result.find('(') + 1 : result.find(')', -1) -1]
        output = json.loads(convert)

        if(output['code'] == -4404):
            continue

        # 相册名里面会不会也有奇葩名字呢
        filt = re.compile(r'\\\\|/|:|\\*|\\?|&lt;|&gt;|\\||\\.')
        album['name'] = re.sub(filt, '', album['name'])
        # 我服都服了,QQ空间居然还允许同名的相册。。。
        albumname = album['name'].replace(' ', '')
        filelist = os.listdir('photos/' + target + '/')
        if (albumname in filelist) or (len(albumname) == 0):
            albumname = albumname + '_' + str(theSameAlbumName)
            theSameAlbumName += 1

        os.makedirs('photos/' + target + '/' + albumname)
        same = 0    # 防止同名

        # 获取该相册下的每一张照片,如果相册为空,那么output['data']['photoList'] = None,艹
        photoList = output['data']['photoList']
        if(photoList == None):
            continue

        for photo in photoList:
            log['photo_count'] += 1
            print('当前照片' + photo['name'])

            # 图片格式由photo['phototype']字段(整型)控制
            # 1:jpg
            # 3:png
            phototype = \{'1': '.jpg', '2': '.gif', '3': '.png', '5': '.jpg', '10': '.jpg'\}
            try:
                format = phototype[str(photo['phototype'])]
            except:
                format = '.jpg'

            # 建立文件夹并下载图片
            # QQ图片里面有太多的特殊字符了
            photoname = photo['name']
            filelist = os.listdir('photos/' + target + '/' + albumname)
            for i in range(len(filelist)):
                filelist[i] = filelist[i][:-4]
            photoname = photoname.replace(' ','')

            if (photoname in filelist) or (len(photoname) == 0):
                photoname = photoname + '_' + str(same)
                same += 1
            # 文件名中不能有特殊字符
            filt = re.compile(r'\\\\|/|:|\\*|\\?|&lt;|&gt;|\\||\\.|\\n|\\t|\\"')
            photoname = re.sub(filt, '', photoname)

            path = 'photos\\\\' + target + '\\\\' + albumname + '\\\\' + photoname + format
            try:
                urllib.request.urlretrieve(photo['url'], path)
            except urllib.error.ContentTooShortError as e:
                print('啥子错误哟')

    fp = open('photos/' + target + '/log.txt', 'w', encoding='utf-8')       # 日志文件,记录时间与数量
    log['time'] = (datetime.datetime.now() - log['time']).seconds
    log['time'] = str(log['time']) + 's'
    fp.writelines(str(log))
    fp.close()
    print('当前QQ:' + target + '下载完毕')</pre>

以下是我获取到的结果,可以说,百分之九十九都成功获取到了,但是有几个好友反映貌似他们的没有获取完,我去看了下,又是获取的json数据结构的问题,我真的服了,
腾讯同一个功能搞那么多数据结构来干嘛,操蛋。

另外写了一个统计耗时的脚本,因为我在每个相册的日志里都记录了下载时间的,所以直接就统计了

# 统计log.txt里面所有的数据




# 根目录是photos




import os
import json
alltime = 0
for i in os.walk('photos'):
    if(len(i[2]) == 1 and i[2][0] == 'log.txt'):
        fp = open(i[0] + '/' + 'log.txt', 'r')
        data = fp.read()
        data = data.replace('\\'', '"')
        if(data.find('datetime') < 0):
            #print(data)
            output = json.loads(data)
            time = output['time'][:-1]
            alltime += int(time)
            fp.close()
print(str(alltime/60/60) + 'h')

结果是13.797500000000001h,和我预计的差不多,虽然是4M的网速,但是建立连接建立过多,而且没有用到多线程,这个时间还是合情合理的。

PS:正在把这些照片上传到云盘,哈哈,要是泄漏了可不要说我是故意的 还有就是请勿模仿,我虽然总共下载了400个好友,但是停下来了十多次,都是数据结构出现问题
,请千万不要为此折腾,我纯属是为了完成自己以前的愿望罢了,下载下来也没用。

不知道是因为以前看过太多成功学书籍还是译者没有翻译好,还是我买的版本不对,反正我总感觉这本书,不大好。文笔有点枯燥,和很多成功学书籍差不多。当时买这本书的时候还是京东上打折,谁知道买来纸质非常差,而且比32开还小,每本也只有300页左右,一股盗版的感觉,我一直以为京东上是不会买到盗版书的哟。

《人性的弱点》《人性的优点》《语言的突破》,分别出版于1937年、1948年、1926年,我相信,在上个世纪,这本书肯定是给很多人带来了很多的启发,无论是为人处事还是商业活动都对一个人有很大的影响,但是现在已经21世纪,书中的观点和很多方法都没有过时,只是这样的书在现在已经泛滥成灾了。任何一个书店的“成功学”分类中都能一抓一大把,或许其始祖就是卡耐基的三部曲。

唉,比较失望,也没大从中学到什么。

语录

什么是进取精神呢?我可以告诉各位:那就是在没有人告诉你应该怎样行事的情况下,就能做出最正确的行动。

让自己不停地忙着。忧虑的人一定要让自己沉浸在工作里,否则只有在绝望中挣扎。

每个人都会死,但并非每个人都真正地活着。

如果你想成为有勇气的人,那么你就去尝试一些至今从没有做过,但却令你胆怯的事情,而且一直做到有相当的成绩为止。

一个人的成功,只有15%归结于他的专业也只是,还有85%归于他表达思想、领导他人及唤起他人热情的能力。

人类天性中最深切的冲动,那是“成为重要人物的欲望”。

批评是没有用的,因它使人增加一层防御,而且竭力地替自己辩护。批评也是危险的,它会伤害了一个人的自尊和自重的感觉,并激起他的反抗。

你所认识的人,你愿意他改变、调整,或是进步吗?是的,那是最好不过的。可是为什么不从你自己先开始呢?

要显示一个伟大人物的伟大之处,那就要看他如何对待一个卑微的人。——卡莱尔

如果我们是那样的卑贱自私,不从别人身上得到什么,就不愿意分给别人一点快乐,假如我们的气量比一个酸苹果还小,那我们所要遇到的,也绝对是失败。

永远使别人感觉重要。

在辩论中,获得最大利益的唯一方法,就是避免讨论。

称赞最细微的进步,而且称赞每一个进步。

婚姻的成功,那不只是寻找一个适当的人,而是自己该如何做一个适当的人。

这条路,我只能经过一次,所以,凡我所能为人做的任何好事,任何一点仁慈,让我现在就做吧!不要延迟,不要忽略,因为我将不会再从这里经过了。

光阴似箭,日月如梭。日子看起来很慢很慢,但每次回首往事的时候我们又突然发觉时间原来早已在不经意间悄悄溜走了。我想,人在每个时期都有特定的价值观,人总是会改变
,但是改变这种东西却是可以参考的,只要你还知道曾经的自己到底是什么样的。很多人都会成长为自己曾经讨厌的样子,我还未长大,我不知道这句话是真是假,只知道无数的
“大人”都对这句话深信不疑,但,至少现在,我还坚持着。

对于这种“致未来”的主题,有时候我想写五年,有时候想写十年,但是我自己也不知道到底什么时候会改变,所以干脆写一篇文章,以后经常提醒自己看看。

注:下面列出的所有点,今后都不准删除

1.多年以后,你还有梦想吗?

今天的我21岁,如果按照新历来算,今天正好是我21岁的生日。人生大概已经过了四分之一,我,还有梦想。不过,我现在对梦想有点模糊,我知道自己有梦想,但说不出具
体是什么,只知道心中有一把火,有一个小宇宙。我想要创业,就在重庆创业,到时候能够养活自己、家人以及公司的员工们。我还想要祖国能够实现真正的民主自由,这么大了
,我也想要行使一下自己的选举权和被选举权,我也想让家人看看twitter和facebook,google是什么样子的。我还想以后能不能通过自己的经济实力来限
制到政府的某些腐败问题。

2.多年以后,你还像当初那样对金钱不敏感吗?

这里之所以说“敏感”,是因为我早已经过了视金钱如粪土的年纪了。现在的我,知道了金钱的作用,钱不是万能的,但没有钱是万万不能的。人是社会动物,不可能离开钱的。
但是我是绝对不会有拜金主义的,我相信自己永远不会因为钱的问题闹起家庭矛盾,不会因为钱的问题而做伤天害理的事情,不会因为钱的问题而去街头乞讨。哪怕再穷再苦,也
要通过自己的双手来挣钱。千万别做什么事情都为了钱,钱,够用就行。

3.多年以后,你会像现在所想的一样不收礼金吗?

这是一直以来我自认为的一个非常“崇高”的想法。以后自己办生日酒席或者其他人来访的时候,我绝不会理把钱当作礼物的人(当然,仅限于同龄人,上一辈肯定无法理解的,
没准还怪我不给他们面子)。大家可以送一下礼物,我想,朋友精挑细选的几块钱的礼物绝对比得上两三百一个的红包!

4.多年以后,你还会坚持自己的教育方法吗?

没错,一直都觉得自己肯定会是个好爸爸。幼稚的男人绝对会是一个好爸爸的,我会陪孩子一起玩耍,陪他一起疯,而不是让他一个人在旁边受冷落。我会回答孩子一切的问题,
哪怕我不知道,也不会说“别问这么天真的问题”,而是“来,爸爸教你用谷歌”。每次我说以后自己的孩子如果不想认真读书那不读也行的时候,大人们都说笑我说以后我就不
这样想了。我想,我会从小教孩子寻找自己的兴趣所在,如果真对读书不感兴趣并且认为读书真的不能给自己的兴趣带来什么,那么,不读吧,去追逐自己想要的东西。无论男女
,一定要在十八岁前谈一场恋爱,因为多年后他们回忆的时候肯定会怀念那段十分青涩的年华,要知道,你们的爸爸我当年和初恋谈了两年就只牵过一次手哇。但你们要记住,性
虽然是爱的升华,但在你们身体还未成熟之前,严禁性生活。不要像。。。额。。。 反正争取在他大学阶段就能完全撒手,我和老伴去过二人世界去了。

5.多年以后,你还会那么爱学习吗?

其实我一直庆幸自己能踏上计算机这条路,因为计算机行业的人员必须不停地学习。我从小就喜欢看书,无论什么书都看,希望自己这个爱好能一直发扬下去,到时候自己家的书
房就已经能成为一个小型的图书馆了,那该多好。

6.多年以后,你还会爱自己的家庭、爱自己的朋友吗?

现在我的家庭,虽然偶有一些小争执,但是我知道全家六口人都爱着这个家(过年,应该就会有七口人啦)。我和我哥绝不会像其他兄弟一样争过来争过去的。我会一直孝顺爸妈
,等到我自己有经济能力的时候,我会每年都带他们去进行一次全身体检,我要让他们活得更久,过得更快乐。另外,如果以后有了自己的家庭,我绝对不能成为一个工作狂(目
前看来,我很有可能成为一个工作狂),答应老婆的事情一定要实现。我绝对不会让老婆住租来的房子,我绝对不会让怀孕的老婆挤公交车。

现在的我,有一些朋友。希望以后的我不要滥交朋友,朋友绝对不是越多越好,我也希望以后的朋友能体谅我,因为虽然是我朋友,我也不大喜欢和朋友聊心里事的。但我绝对是
会把你们当作朋友的,要看我有没有把你当作朋友,找我借钱吧,哈哈!

7.多年以后,你真的会经常去旅游吗?

今天正是国庆节,我又没出去玩,感觉大学时期出去旅游的基本上都是女生,男生要么宅在寝室要么宅在家里,反正几乎不会出去的。其实我也很想玩,但是找不到同伴(好吧,
我承认,我不大喜欢和男生一起出去玩),不过以后有的是时间。很多人说,以后有时间才怪,以后上班什么的绝对没时间。我想,上班有没有时间不是老板能决定的,而是自己
。时间就像乳沟,挤一挤总会有的。当然,尽量别挑节假日,挑个小小的周末,来一个小小的自驾游,这才是生活啊!

8.多年以后,你真的会那么关注健康吗?

现在的我不运动,是因为场地受限,以后自己上下班应该尽量走路或者跑步,身体好的时候,每天来个四五公里。每周给老婆做一个养生的菜,平时嘛做一些家常菜就够了。然后
,每年来一个全身体检。以前的我说不喝酒,现在已经破戒了。但现在的我依然坚持着不抽烟,以后也会吗?

9.多年以后,你会麻木吗?

我想,任何一个接受过教育的人都不应该像鲁迅《藤野先生》里面所写的那样麻木。但现实确实,很多人不敢做自己应该做的事情或者本身就认为那不是自己应该做的事情。多年
以后,面对香港、台湾问题,我还会这么认真地去分析吗,至少现在的我能够理性地认为,谁都有对有错,但某些人却从来不改变一下自己,反而变本加厉,我草。我爱国,但我
不爱党。多年以后,面对摔倒的老人,我会不会不计后果地去扶起来呢?现在的我面对这样的情况我都不知道,只能按照本能去做了,本能,好吧,我肯定会去扶的。

10.多年以后,你还能回答下面这些问题吗?

你爸爸的生日、妈妈的生日、老婆的生日、朋友的生日、自己的生日是什么时候? 你的初恋是谁? 你家乡在哪儿? 你还记得当年的朋友都有哪些?你现在的朋友又有哪些?

最后,老的时候,告诉自己,答应自己的,全部做到了。如果没有,那么请尽量别讨厌现在的自己。希望多年以后当有人问“你为什么和别人不一样”的时候,我依然能反问

到:“我为什么要和别人一样?”

我从没见过任何一个大学老师有如此的教育心态。我也只是一等书生,还未进入社会,但是对贺利坚这种老师,我是非常憧憬的。我母亲总是叫我要么当官、要么学医、要么从教,为什么?因为这两个职位在他们看来是最赚钱的。每次面对他们的说法,我只能以呵呵面对,当官我不想当贪官,学医我不会收贿赂,从教我不会只教学生读书,如果要我当老师,我一定会去当大学老师,因为大学老师不用担心学生的升学考试,可以全身心的教育学生该怎么做人,而不是该怎么应付考试。

本书基本上是摘录整理自贺老师的CSDN博客语言很朴实,和网上很多的说教型文章不一样的是,该书几乎全是干货。虽然说是写给计算机学子看的,但是我认为其他任何专业,任何学生,任何老师都值得去一。详细的介绍可以看作者自己的《走在<逆袭大学>的征途上》。此书真的是有满满的正能量,在大学,我们迷茫过,踌躇过,退缩过,有的女生也因性别问题困扰过,看完此书,我们总会找到自己解决困难的方法。

我在大二下学期看了两遍此书,因为大二下学期是我心态变化最大的一个学期。刚开始时,我一心想要考研,但当实验室的老师给我看了几篇论文过后,我果断放弃了。没错,论文是全英文的,很多地方都看不懂,但是这不是我放弃的原因,我绝不可能因为一点点的困难就轻言放弃的,其主要原因是经过跟随实验室老师的几个月学习,并且询问了一些研究生,我了解了一些研究生的生活。在研究生早期(我这里所说的是爱学习的研究生),基本上是看理论,看论文,后期就和本科生一样了,去实习,找工作。我不喜欢这样的生活,我不大喜欢看理论,我更喜欢用代码来敲出新的东西,哪怕他功能并不强大,哪怕他用户极少,但我也能从中获得足够多的满足感。当然,或许我还是图样图森破,但是谁又能肯定我不是对的呢?我也不能肯定,但我想试试,我有自己的忍道!之后我就打算去工作,但过了没几天我就决定去创业了。那时候想了很久,其实我一直有一个很好的朋友在等着我一起创业,就等我一个答复了,而我,终于答应了他。决定创业后,我又把此书看了一遍,依然受益匪浅。

书中有很多观点我是十分赞同的(摘抄了一部分在语录部分)。贺老师鼓励我们关心国家大事,这几天,香港问题非常尖锐,但是国内的媒体集体失声,大陆人士基本上无从知晓,只能从CCAV里面获知只言片语,不过那能信吗?每次有这种事情的时候我都是在微博上先看到,然后我就会去twitter或者facebook里面查询是否属实,最后再去草榴等网站看看人们的评论,有时候转发一下微博,当然,生活在这样的环境里,为了不被查水表,也只能小声地发几句言了。但我至少会去关心,会因为深灰上的某些不公感到愤怒,其他人呢。

另外一个观点,大学最重要是要学到什么?我认为,大学最重要的是要学会学习。这里所说的学习不是普通的按照课本,按照老师的要求来学习,如果真那样,那我们和专业院校又有什么区别。首先我们要学会自我学习,现在我都大三了,但进入大学这么久,学校就只教了C语言(不是谭浩强的,但我觉得那本教材连谭浩强都不如),幸好,我经常浏览一些开放的论坛和微博等,对新技术新知识了解了很多,所以自己自学了很多东西,C++/MySQL/Python等。另外,跟重要的,我建立了自我学习的意识,不仅仅是计算机相关的专业知识,还要学习一些人文知识和其他学科的知识,在Coursera上面我已经获得了三个Statement of Finished,虽然只是完成证明,但我都是认真学习了的,在Coursera上不适合做专业的学习,所以学习人文课程就非常好。

最后享受大学最后两年吧!

语录

如果不是感到迷茫,就不知道突破;如果不是克服迷茫的过程,就找不到自信。

现在的大学,谈个人理想、民族命运的声音渐微,上大学被视为谋生、当官、发财的途径和资本,而有些立志从事实业,担负民族振兴职责的学子常常遭到鄙视。大学应该是“追求学问的地方,而非资格养成之所”。

享受自由的大学是需要资格的。陷入迷茫,只因为不能享受这份曾经渴望的自由。

大学的精彩在于自学,这不是指自己一个人闷头去学,而是一种有帮助的自学,一种到处都可以借力的自主性学习,只不过,帮助你的力量需要自己去发现。

学编程不拘于语言,学语言不限于平台。

练出的功夫不只是体现在拳脚上,而是无论哪里发力,使什么样的兵器,丹田之气都能随之跟进。

会学习意味着会根据自身的基础和主客观条件,去极化、调控和评价学习。
会学习意味着会利用最少的时间、尽量少的经历,以最快的速度获取尽可能多的知识和技能。
会学习意味着会自己把握学习的重点,不满足于只获取某种知识,而是重点掌握思维过程和方法。
会学习意味着会把所学知识应用到生产和社会需要的实践中去。

课内学习主要保证抽象能力的发展,而在课外自主的学习中,让实践成为主流,朝着打开个人经验的方向,安排出有效的学习。

最有效的办法谁都知道,那就是找到学习、生活该有的节奏,稳定地行动,坚定地前进。

没有自学,不是大学。

教是为了不教。

大学所能给予的只是成长。大学,从某种意义上讲,本来就不是要用来做什么的。只有摆脱附加在其上的各种功利的期望,才能够获得与心灵成长、能力增长一致的学习。

在我理想的大学中,同学们的学习将是这样的:接受着一项专业教育,由学校系统地传授者专业知识,接受着一种“正规”的训练,另一方面,学生能够根据自己的兴趣和感觉自由地拓展,拓展的内容有的是和现有“系统”相关的,有的完全是”节外生枝“。如此形成的是每个人个性的系统。这是大学里最有生命力的独特风景。

吃多了拉是队列,吃多了吐就是栈。

20岁的人对30岁的事不用纠结,20岁不用将别人30岁遇到的困扰当作理由而退缩。

计算机是如此重要,因为不能把它只留给男人去做!

兴趣本来是前行中最好的老师,但现在也是为逃避现实,不去努力找到的最好的理由和借口。

一个要面对现实的人,必须原谅过去在自己身上发生的一切,要有这种大度。

以兴趣为理由放慢前行的脚步是对青春的一种亵渎,兴趣很重要但其作用并没有大到成为决定性的和唯一的因素。

因项目决定人如何参加。———————这也是我认为的

”开发经验“不是”工作经验“,他们似乎更在乎有个借口,将那些读了几年死书的人挡在门外。

大一大二是夯实基础和开阔视野期,大三大四是目标实现期。大二结束大三开始的那段时间确定目标,而目标中必须明确主要的应用方向。

大一不知道自己不知道,大二知道自己不知道,大三不知道自己知道,而大四知道自己知道。

在年少轻狂之时想别人不敢想的,做别人不敢做的 ,实在是一件幸运的事,这也成就了许多追梦人。做了却没有达到是正常的,但不敢想不敢做,无论何时都是一种遗憾。即使这个梦想没有实现,努力也会积淀下来,成为新的能量来源。

有人将迷茫常挂在嘴上,任由该做的事情一拖再拖,这样的迷茫,就是一个借口!

坚决前行,就是给知道一个机会。

给予求学越多的功利,意味着越多的走样,其中的失望也会越大。

面对一次次“裸考”不过,还要调侃高中只会考试,大学连考试也不会了的大学生,我不作评论。

有效的学习是根本,学有所成是核心,外在的东西可以有,内在的东西不可少。

让这种奋斗来得更坚决一些,不要为自己暂时不能拥有的而纠结,不必为我们不屑的丑陋现实而低头,我们就用读书人的方式面对浮躁的社会。

在进取的方向上,选择了做草根,就是要向泥土的深处钻,这是作为草根应该选择的方向。

其实,我们那没有战斗力的爹将你送到这个平台已经付出了很多的努力了。二代们总是吸引人眼球的,个别无能的二代总得造出点什么来告诉人们他的存在。

许多人对精神世界失去了兴趣,又在对物质的追求中迷失了方向。

写作,是让一个人活得更明白的方法。

有勇气来改变可以改变的事情,有胸怀来接收不可改变的事情,有智慧来分辨两者的不同。——李开复。

**上大学,并不是每个人成才成长的必经之路,但大学却的确是一个值得经历的阶段,这和毕业证无关,和找工作或许有关,也许无关。其实很多人把“知识改变命运”想成了“大学改变命运”。“大学改变命运”是一个绝对的伪命题,但有些人就迷信这个。 **

最近想获得所有QQ好友的QQ帐号列表,但是腾讯居然没有提供这个功能,这让我很苦恼。由于QQ客户端上的数据我并不知道怎么获取(有人说可以提取手机QQ的数据库来
获取,但我对那个也是一无所知),于是我想到了通过QQ空间里的某些地方来寻找。其实QQ空间的寻找好友功能里面就能够查看到很多的好友,但是却只能查看亲密度前面2
00的好友,对于我这种QQ好友比较多的人来说实在没办法。其实我对http等不大了解,最终是通过一个很笨的方法来获取的,如下:

首先,在QQ空间顶部面板处有一个搜索好友和用户的搜索框,输入一个数字即可显示以该数字为关键词的好友,最多显示5个。于是通过Chrome的**右键->审查元素
**功能获取我的请求信息:

随便输入一个数字,在下面的Network监听处会出现所请求的cgi脚本的信息

点击JS脚本,找到Preview里面有刚才显示的QQ帐号信息的那个就是它了,然后鼠标右键,copy as
cURL即可得到curl请求信息(如果在linux下直接命令行就搞定了)

注:经过研究发现,在处理_subprocess.check_output(args)的返回值时,直接subprocess.check_out
put(args).decode(‘utf-8’)
_,直接将含有中文的bytes转换utf编码的str,这样可以避免很多编码问题

#-_- coding: UTF-8 -_-
import os, sys
import re
import subprocess
import shlex
import json
import codecs




# 添加curl的环境变量




os.putenv('PATH', 'C:\\Program Files (x86)\\Git\\bin')




# 分解原始请求




origin = ''        # 这里粘贴从浏览器copy过来的cURL请求
temp = origin.split('&search=1')
temp[0] += '&search='




# 结果集合




qqlist = set()




# 查找并移去含有中文的字段




# 应该默认遇到逗号结束,如果遇到的是大括号,那么就相当于在最后




def remove(convert, char):
    while(convert.find(char) > 0):
        pre = convert.find(char)    # pre 表示前面的位置
        now = pre + 1
        while(True):
            if(convert[now] == '\}' and convert[now+1] == ',' and convert[now+2] == '\{'):
                break
            # \}]
            elif(convert[now] == '\}' and convert[now+1] == ']'):
                break
            elif(convert[now] == ',' and convert[now+1] == '"'):
                break
            else:
                now += 1
        if(convert[now] == ','):
            if(convert[now+1] == '"' and convert[now+2] == ','):
                now += 3
            else:
                now += 1
        else:
            pre -= 1
        leave = convert[: pre]
        leave += convert[now :]
        convert = leave
    return convert




def search(pre):
    for i in range(10):





        curl = temp[0] + pre + str(i) + temp[1]
        print('当前' + pre + str(i))

        # 执行curl命令并获取返回结果,并对结果字符串进行处理转换为json对象
        args = shlex.split(curl)
        result = str(subprocess.check_output(args)).replace(' ', '')
        convert = result.replace(' ', '').split('callback(')[1].split(');')[0]

        # 这一句话可以减少很多时间
        if(convert.find('100006') &lt; 0):
            continue

        # 我郁闷,我要直接把那几个字段给删除,这些人起昵称太奇葩了
        convert = remove(convert, '"CA"')
        convert = remove(convert, '"TA"')
        convert = remove(convert, '"CB"')
        convert = remove(convert, '"TB"')
        convert = remove(convert, '"hitFieldContent"')
        convert = remove(convert, '"TF"')           
        output = json.loads(convert)

        """
        如果想获取其中的中文信息,可以改变一下其编码的字符
        regex = re.compile(r'\\\\(?![/u"])')
        fixed = regex.sub(r"\\\\\\\\", convert)
        """

        if('data' not in output):
            continue
        for sub in output['data']:
            if(sub['llBoxType'] == 100006):
                for one in sub['sData']['resultData']:
                    if(one['intimacy'] == '0'):
                        continue
                    qqlist.add(one['NM'])
                if(len(sub['sData']['resultData']) == 5):
                    search(pre + str(i))

for i in range(10, 100): search(str(i))

输出最终结果

fp = codecs.open(‘1129029735.txt’, ‘a’, ‘utf-8’) fp.write(‘总共搜索到’ +
str(len(qqlist)) + ‘个QQ\n’) result = [qq + ‘\n’ for qq in sorted(qqlist)]
fp.writelines(result) fp.close()

由于前面两位QQ号基本上都可以搜索到大于5位的好友,所以,我从100到999逐个开始搜索,如果发现小于5个就进入下一个,如果等于5个,那就递归。这个请求所返
回的不是标准的JSON数据,总是有这样或者那样的干扰,看我的remove函数你们就可以发现其中出现的诸多问题,其实我最先还想把QQ昵称一起提取出来的,后来发
现QQ昵称里面的奇葩字符太多了,真不知道腾讯的人是怎么处理的,还是我对中文字符处理技术比较薄弱。最终,搜索我QQ上400多个好友花费时间约为9分钟(忘了统计
请求数量了,应该只有1000多次的请求):

参考文章: [http://zh.lucida.me/blog/sublime-text-complete-guide/
](http://zh.lucida.me/blog/sublime-text-complete-
guide/)http://blog.jobbole.com/40660/[ ](http://zh.lucida.me/blog/sublime-
text-complete-guide/)

汉化

参考:[http://jingyan.baidu.com/article/a501d80ced31d5ec630f5e22.html ](http://ji
ngyan.baidu.com/article/a501d80ced31d5ec630f5e22.html)和[http://www.cnblogs.com
/kingwell/archive/2012/11/22/2782991.html ](http://www.cnblogs.com/kingwell/ar
chive/2012/11/22/2782991.html)sublime3见http://jingyan.baidu.com/article/ce093
21b22fc7d2bff858f87.html
汉化包在我的云盘上是有个的

需要注意的是,汉化版的如果直接点击Perferences里面的设置文件并修改并不会有效,真正的配置文件可以在浏览程序包里面找到Preferences.su blime-settings这个文件,只有在这里面的修改才是有效的,不信,你在这儿修改一下主题试试,立马就会生效。

{
    //"color_scheme": "Packages/Color Scheme - Default/IDLE.tmTheme",
    "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
    "font_size": 11,
    "ignored_packages":
    [
    ]
}

常用快捷键

Ctrl + `                打开控制台(和QQ拼音有冲突,改一下QQ拼音的设置)
Ctrl + ←/→         逐词移位
Ctrl + ↑/↓             移动当前显示区域
Ctrl + Shift + F    多文件搜索
Ctrl + G               跳转到指定行

Python编译系统

(注:如果是Sublime3的绿色版,可以在C:\software\sublime\Data\Packages\User下新建Python.sublime-
build文件)默认情况下,应该是可以直接编译(即Ctrl +
B)执行的,但是由于我的电脑上python.exe的路径太多,所以需要重新设置,偏好->浏览程序包,在该文件夹下搜索_Python.sublime-bu
ild
_该文件就是sublime编译python的配置文件,此时需要将Python的路径修改为正确的路径,比如(如果找不到该文件,那就在tools里面新
建编译系统):

{
    "cmd": ["python", "-u", "$file"],
    "path": "C:/Python34",
    "file_regex": "^[ ]_File \\"(..._?)\\", line ([0-9]*)",
    "selector": "source.python"
}

如果出现_**[Decode error - output not utf-8]错误,那么可以在该配置文件中添加“encoding”:”cp93
6”**_,我当时配置的时候正在用os.system执行curl命令,但是却说curl不是内部命令,关键是我已经把它加进了系统的环境变量了,在windows
的cmd中能够执行curl。之前找不到解决方案,就用直接在Terminal中执行python文件的,现在我知道了sublime里的python的环境变量(通
过_os.getenv(‘PATH’)_获取)里的PATH的值只是它自己的执行路径,而要添加其它的路径,则要在代码中添加

os.environ['PATH'] = os.environ['PATH'] + u'; C:\\Program Files (x86)\\Git\\bin'

另外,Linux下,如果要使用Python3,那么需要自己新建build文件,Tools->Build System>New Build
System,然后写入如下代码,保存为python3开头的build文件

\{
    "cmd": ["python3", "$file"]
\}

在Mac下,可能出现没有显示输出或者编码错误,例如:UnicodeEncodeError: ‘ascii’ codec can’t encode
characters in position 0-2: ordinal not in range(128)

可以将build system改为如下:

\{
"cmd": ["python3", "-u", "$file"],
"file_regex": "^[ ]_File \\"(..._?)\\", line ([0-9]*)",
"selector": "source.python",
"env": \{"LANG": "en_US.UTF-8"\}
\}

并讲该文件的Build System为Python3即可.擦,要使用input,还是只能用SublimeREPL.

推荐插件

Package Control:sublime很好的插件管理器,安装方式 ,之后安装插件就可以直接使用它来安装了,如果要安装插件,点击_Preferences->Package Control或者Ctrl + Shift + P ,然后选择Package Control: Install Package_,然后输入相应的插件名称,而某些插件的功能如git的功能也可以通过Ctrl+Shift+P来选择

AllAutocomplete:可以在所有打开的文件里面查找关键词来提示代码

Anaconda:真正可以将sublime打造成Python的IDE,功能非常全,比如语法检查、函数跳转等IDE才有的功能,当然,最好把warning提醒给去掉,做自己的项目,从头做起,遵守PEP8规范,很好,但是打开公司之前的项目,全是warning,忍无可忍了,所以需要给其添加一个user配置:

\{
    "pep8_error_levels": \{"E": "W","V": "V"\},
\}

Bracket Highlighter:匹配标签,比Sublime默认的匹配明显多了

ConvertToUtf8:可以解决很多编码问题,比如打开txt乱码

Djaneiro:支持Django模版和关键字高亮,还可以方便得到代码片,例如,输入var 可以新建\{\{\}\},输入tag可以新建\{\%\%\}

DocBlockr:可快速生成代码注释,对于PHP输入/**然后回车即可

Emmet:十分强大的html、css代码自动补全工具,常用使用方法:

1.适用于tr(th)/ul(li)/select(option)中
tr>th*3 会生成如下代码:
<tr>
    <th></th>
    <th></th>
    <th></th>
</tr>

HtmlPretty:Ctrl + Shift + H快速格式化CSS、Html、Js等文件,但需要先安装上NodeJS

Git:Sublime也支持git,真是太好了

IMESupport:解决中文输入法不跟随问题(只针对win,linux下无解)

Markdown Preview:非常使用的markdown扩展,ctrl + shift + p,然后输入mrkdown使用相应的命令,ctrl + B构建当前文件为html

SublimeCodeIntel:增强Python等语言的自动完成功能(暂时不考虑了,妈蛋,顺序永远不变)

SublimeLinter-php:PHP代码审查工具

SublimeREPL:强大的Python调试工具,具体有多强大,我还没弄清楚,Sublime默认的Python终端太low了,中文总是不对,但是在>>>这里确实对的,所以以后直接用SublimeREPL的run current file功能就可以相当于在>>>中执行输出了。快捷键Ctrl+Shift+P

SyncedSideBar:Mac上保存打开的项目

VAlign:代码对齐插件,比那个alignment好用多了,快捷键是Ctrl + \

View in Browser:在浏览器中预览,右键即可,注意我的谷歌是64位,要把配置文件最下面那一行的firefox改为chrome64(把default配置拷贝到user配置再修改)

Vintage:可以打开VIM模式,默认是安装了的,只需要用package control来enable一下即可

其他问题

1.Linux下Sublime text 3无法输入中文,参见<http://jingyan.baidu.com/article/f3ad7d0ff8731
609c3345b3b.html>,唯一需要注意的是,编译so文件之前得先安装gtk的dev,sudo apt-get install libgtk2.0-dev2

2.打开sublime的调试模式查看哪儿出错了: 在Preferences.sublime-settings里面添加”debug”:
true,这样重启后Ctrl+`即可查看启动中的错误信息

参考文章:http://blog.csdn.net/davidsky11/article/details/23023729

环境:Ubuntu14.04_server(Virtualbox虚拟机里面) + windows7 其中,windows7里面已经安装好了git for windows,且ubuntu里已经用apt-get方式安 装了git这个软件,还有就是已经能通过ssh访问虚拟机了。

具体步骤:

Step1:安装与配置几个软件

sudo apt-get install git git-core openssh-server python-setuptools

添加git用户

sudo groupadd git
sudo useradd git -g git -m
sudo passwd git

全局配置,这里的name和email可以随便设置不影响,因为生成key的时候是按照当前的linux登录帐号生成的

git config --global user.name "haofly"
git config --global user.email "haofly@server-pc"

安装gitosis,随便在哪个目录都行

git clone https://github.com/res0nat0r/gitosis.git
cd gitosis
sudo python setup.py install

Step2:服务器的配置

虽然是服务器的配置,但这里需要在主机windows上面配置一下(当然可以在同一台电脑上配置,但是为了不搞混,建议最好服务器和客户端分开)
在客户端,即git管理员的PC上,要先安装上git软件,windows就装上git for
windows即可,linux上git即可,在gitbash中,生成密钥:

ssh-keygen -t rsa

置于密钥保存在哪儿和密码的设置,默认即可。要记住路径,在我的PC上生成的密钥在**C:\Users\haofly.ssh**里面,该文件夹内有三个文件:
id_rsa, id_rsa.pub, known_hosts其中id_rsa.pub就是公钥,现在要把公钥上传到git服务器上(注意:如果PC与虚拟机必须
要有网络端口转发,那么git的端口是9418)。在gitbash输入(其中的IP地址是PC访问虚拟机里面服务的地址)

scp C:\\Users\\haofly.ssh\\rsa.pub git@169.254.217.173:/tmp/id_rsa.pub

然后,回到服务器里:

sudo chmod a+r /tmp/id_rsa.pub
sudo -H -u git gitosis-init < /tmp/id_rsa.pub

此时会提示(额,我电脑上是中文,忘了是什么了): Initialized empty Git repository in
/home/repo/gitosis-admin.git/ Reinitialized existing Git repository in
/home/repo/gitosis-admin.git/ 然后再改变权限

sudo chown git:git /home/git/repositories
sudo chmod 755 /home/git/repositories
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

Step3:建立测试仓库

在服务器上新建一个裸仓库

su git
cd
cd repositories
git init --bare test.git

此时虽然新建了一个仓库,但是是个裸仓库,不能被clone下来,需要让管理员为其分配权限。 在test.git文件夹内有如下重要文件:
HEAD文件:存放根节点的信息,Git采用这种树形结构来存储版本信息。 refs目录:存储当前版本控制目录下的各种不同引用,即各个分支树的信息,其下有hea
ds/remotes/stash/tags四个子目录,分别存储对不同的根、远程版本库、Git栈和标签的四种引用。
logs目录:根据不同的引用存储了日志信息。 test.git/object/pack:这里存放的就是我们上传的东西,但是被打包成了idx和pack结尾的文
件。所以如果上传了后发现找不到,其实是在这里面的。

Step4:修改gitosis配置文件

现在在管理员的PC上(就是刚刚上传公钥的那台机器上,我这里就是windows主机),把管理的仓库clone下来,找个地方,然后在gitbash里执行(如果不
行,试试全路径/home/git/repositories/gitosis-admin.git):

mkdir admin
cd admin
git clone git@169.254.217.173:gitosis-admin.git
cd gitosis-admin
vim gitosis.conf

clone下来会有两个东西,一个是keydir文件夹,里面存储了所有需要访问git服务器的用户的ssh公钥,比如我的keydir/haofly@HAOFLY
_PC.pub,另一个文件就是gitosis.conf,里面配置了各个仓库的访问权限,例如:

[gitosis]
    [group gitosis-admin]
        writable = gitosis-admin
        members = haofly@HAOFLY-PC
    [group team]
        writable = test
        members = haofly@ubuntu  haofly@HAOFLY-PC  pitter@PITTER-PC

这个配置文件很直白,有多个组,每个组的writable代表一个仓库,members表示具有读写权限的用户,用户的公钥必须在keydir文件夹内。
然后把配置文件push到服务器上去

git add .
git commit -m "add test and someusers"
git push origin master

Step5:测试

空仓库是不能clone的,需要一个具有write权限的人初始化一个版本,在客户端执行:

mkdir test
cd test
git init
echo "hehe" > hello
git add .
git commit -m "initial vesion"
git remote add origin git@169.254.217.173:test.git
git push origin master

如果push成功了,那么可以去服务器上看看,但千万不要妄图去找你库里面的文件,因为你上传的东西,git服务器会把它弄成idx和pack文件,我不大清楚git
的原理,反正是这里面的_**/home/git/repositories/test.git/objects/pack/ **_

原文中其它配置我还没试过。。。

其实官网已经有很详细的教程,但由于其方法太多,身为天秤座的
我还是喜欢用一个方法,所以在这里把它记录下来。

环境:Windows + wamp

Composer安装

点击下载,下载之后,直接安装即可,安装完成后,就可以在windows的文件窗口中就可以使用右键看到关于composer的几个菜单。

Laravel安装

首先,使用composer安装laravel的安装器

composer global require "laravel/installer"

然后再将其加入系统路径(在环境变量里添加如下目录):

C:\\Users\\haofly\\AppData\\Roaming\\Composer\\vendor\\bin

之后再打开终端检查是否安装成功,如果出现如下信息表示安装成功了

C:\\Users\\haofly>laravel
Laravel Installer version 1.2.0

Usage:
 [options] command [arguments]
 
Options:
 --help (-h)           Display this help message
 --quiet (-q)          Do not output any message
 --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output,
2 for more verbose output and 3 for debug
 --version (-V)        Display this application version
 --ansi                Force ANSI output
 --no-ansi             Disable ANSI output
 --no-interaction (-n) Do not ask any interactive question
 
Available commands:
 help   Displays help for a command
 list   Lists commands
 new    Create a new Laravel application.

之后就可以在wamp环境的www目录下执行如下命令即可建立新的项目了:

>> laravel new 项目名
Crafting application...
Generating optimized class loader
Compiling common classes
Compiling views
Application key [.......] set successfully.
Application ready! Build something amazing.

Apache配置

这里就是官网说的不大明显的地方了,害我之前做错了一步。 现在需要打开apache的mod_rewrite模式,打开apache的配置文件httpd.conf
(我的电脑是D:\wamp\bin\apache\apache2.4.9\conf\httpd.conf),把下面一行前面的注释去掉

LoadModule rewrite_module modules/mod_rewrite.so

此时重启wamp服务,就可以访问localhost/laravel/public的欢迎页了

测试环境

在我使用apache设置了虚拟目录后访问http://localhost:8080,即访问到laravel项目,laravel自带了一个登录的页面http://localhost:8080/home,当然要成功注册和的登录,必须先将默认的http://localhost:8080即访问到laravel项目,laravel自带了一个登录的页面http://localhost:8080/home,当然要成功注册和的登录,必须先将默认的数据库及数据表建立好) :

首先,在数据库的配置文件 learnlaravel5/.env里面填好数据库的基本信息

DB_HOST=localhost
DB_DATABASE=faxie
DB_USERNAME=root
DB_PASSWORD=mysql

然后执行前移数据库操作

php artisan migrate

如果能成功建立好数据库,那么就能够注册和登录了。

Laravel的基本配置

laravel的配置文件在app.php里(我的电脑是D:\wamp\www\laravel\app\config下的app.php),可以配置如下信息:

‘debug’ => false 可以改为true,需要注意的是在实际发布中千万不能使用true,不然可能被用户看到重要信息
如果要配置数据库,可以在下面对应的数据库里面选择并修改。