豪翔天下

Change My World by Program

0%

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

本书基本上是摘录整理自贺老师的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,不然可能被用户看到重要信息
如果要配置数据库,可以在下面对应的数据库里面选择并修改。

参考文章:http://www.lamp99.com/wirtualbox_centos_web.html

现象

使用putty的ssh功能登录虚拟机里的linux系统时出现这样的错误提示:

Network error: Connection refused.

原因

原因太多了,而且不同的网络连接方式,不同的虚拟机,不同的linux系统都会莫名其妙出现这个问题,所以在这里,我只能每次遇到问题就记录下解决方案,以后依次尝试
就行了。之所以要在这里记录下来,是因为不知道为什么每次我遇到的问题在网上都很难找到解决办法,不知道是不是因为我总是做一些奇葩的操作。。。

解决方案一:

来自红黑联盟 这个方法的状况是虚拟机和主机能够互相ping通,但就
是连不上ssh。虚拟机能够上网,使用的是网络地址转换(NAT)的连接方式。
首先在windows的命令行cmd中使用_ipconfig命令查看以太网适配器(VirtualBox Host-Only
Network)的IPv4地址。我的是192.168.56.101。 然后在虚拟机终端里面使用
ifconfig_查看内部网络地址,一般就是eth0
的nat地址,在centos里面是enp0s3的inet地址,我的是10.0.2.15。 最后在该虚拟机设置端口转发

像如下这样添加一条规则:

添加后就可以通过putty的ssh登录主机了,ip是192.168.56.101.(需要注意的是,如果虚拟网卡的IPv4是自动获取ip的那么每次都会改变ip
,在这里直接把两个IP都写成255.255.255.255即可)

作者:莫雨

这本书与其说是一本小说,不如说是作者自己奋斗历程的回忆录,书的全名叫:《那些年啊,那些事——一个程序员的奋斗史》。

这本书和《程序员法则》一样,是我计算机之路的启蒙之书,没有他们,或许我不会走上计算机这条路,因为有了他们,我才能走得更加积极,更加踏实。这本书和《程序员法则》不一样,其主人公段伏枥并不是什么天才,而是大四毕业了都还只是对计算机入门的一个毕业生,并且毕业的时候并没有找到什么工作,而是远走他乡,来到繁华的深圳。在经历了几个小公司,遇见了几个坑爹的老板,学习了大量的技术后最终磨练成了一个真正意义上的高手。

其实有时候我也想要有这样的人生,所以有时候会想快点离开学校,真正去社会闯荡。现在的我,社交不行,技术不行,每天都很努力的学习,但还是感觉进步不大,或许真正去企业实习才能学到我想要的东西。我知道社会上一定有很多很多的困难挫折,从小的教育告诉我,在学校不好好学习,在学校是绝对混不走的,哪怕我现在都还在坚信着自己能够承担那些苦,但,没人相信。进入大三的我,虽然对未来也有一定的迷茫和恐惧,但我还是会选择一步一步地踏踏实实的走下去,保持现有的信心。是坨屎,总会臭的!

在这里,有必要提出作者在书中所提到的关于程序员的一些观点。首先,程序员必须不断学习,这既是不幸的又是万幸的,我很喜欢这个行业,永远都有学不完的东西,有时候感觉自己脑袋里的东西不够用了,那就学呗,学习的资源和方法都多种多样。而且现在的我也坚信,我已经有了不低于段伏枥的学习能力,能够在短时间内学习一项新的技术。其次,程序员不像其它的行业一样,不用担心徒弟超过师傅,在什么都不会的时候,我们要虚心求教,在会了的时候,我们更要将学到的主动传授给不懂的人,就因为此,我才经常在QQ群里回答一些初学者的问题,并在回答的时候教会他们以后要怎样判断错误的位置以及如何自己处理错误,不过我不大逛贴吧和其它论坛的,因为我感觉里面高手都挺多,我也就没有发挥的地方了,呵呵。

最后,请所有程序员都能热爱这个行业,还记得当初向世界说的那句“我要做程序员”吗?

语录

是坨屎总会臭的

作为一个程序员,其实是不幸的,同时也是幸运的:不幸在于,在这个行业中,一定要保持积极不倦的学习态度,不能倦怠,否则就会不适应技术的发展要求;幸运的是,做这行能够接触很多新鲜的东西,不会有别的行业一成不变的死气沉沉。更为有意思的是,经验在这行业中绝对不能生搬硬套,比如以前写DOS程序,限于内存的大小,编程的建议是在一个函数中尽可能一个变量复用;而到处理器和内存飞速发展的现在,却编程哪里用到变量才声明,并且最好给予不同用途的变量于不同的名称,这是因为一两个变量的大小相对于如今的内存容量已经是微乎其微,现在更看重的是代码的可读性。

其实对于程序员来说,绝对不能拘于形式。最重要的是明确自己的目标,需要达到什么样的目的,至于使用什么手段,这不是所关心的。

对于技术书籍,看了还有希望,不看就只剩下绝望。很多初学者开始看技术书籍的态度是不正确的,拿起一本书,翻几下,发现不懂,便放下了,心里想着等以后能看懂了再看。其实这是一个伪命题,如果都懂了,那还看这书干什么?其实陶潜所说的“好读书,不求甚解”是非常有道理的。对于一个初学者来说,当让开始一个从来没接触过的东西时,他绝对是一片茫然,无从下手,甚至于借助搜索引擎也不知道该用什么关键字;而如果以前有看过相关的书籍资料,虽然自己根本就没记住任何内容,但至少知道在哪里看过,这时候只要按照印象去搜寻,绝对比盲目搜索更为有效。

程序员是不幸的,因为只要还继续待在这行业,那么就必须一直在学习,永无止境;程序员又是幸福的,因为这行业永远不会有尽头,永远不会有学完东西的时候,只要不停下前进的不发,那么就不会担心被取代。

为什么俗话说一个成功的男人背后一定有一个女人?因为事业上有困难,有兄弟帮忙,一起度过难关;但如果心里不爽,需要找一个人倾诉,那绝对只能找一个女人,至少她不会一边听一边想打瞌睡。

对于一个人的感情来说,最可怕的并不是遇不到合适的而你,而是不知道遇上了合适的人。而这一切都因为这人不知道自己需要什么,既然不知道自己需要什么,那么一份美好姻缘摆在面前自然也是视而不见了。

以前不知道回来能干什么,而现在依然还是不知道,在自己生长的家乡居然不知道如何生存下去,真是个残酷的笑话。

这才是第一个项目,没想到就遇到这么多问题。这次的主要问题就是和小组成员分管不同的模块,但是每次进行迭代的时候都得把代码传过来传过去,而且虽然是不同的模块,但
难免会遇到修改同一个文件的问题,这时候不仅要自习地去寻找哪些文件有改动,还要去判断小组中其它成员改动的意图,还有就是小组中其它成员上网条件堪忧,只能用手机流
量进行上传下载,这样就造成了时间成本和物质成本的浪费。就目前来说,我们没有搭建SVN的条件,而且我本人也是非常推崇Git的,其与SVN的区别在这里就不详解了
,这里主要就是介绍一下eclipse中EGit插件的用法。

1.确认安装

最新的Eclipse IDE应该都自带了EGIT插件的,可以在首选项里面查看:

2.全局配置

在这里点击“Add Entry”里面输入在encoding.net申请的帐号的邮箱和用户名(如果是其它网站就换其它网站的帐号就行了)

3.克隆远程分支到本地

菜单栏–窗口–>打开透视图–>Git Repository Exploring,在该视图里选择Clone a Git
repository或者点击上面的克隆按钮都可:

然后会出现如下设置界面


其中URI就是项目的地址,可以从coding.net网站上该仓库的“代码”选项处获得,输入URI,会自动获得Host和Repository path,而下面
的User和Password则是该网站的用户名和密码,注意Connection的协议设置,git网站一般提供https和ssh两种方式,端口都是默认端口,这
里不用写。

这里点击下一步就会提示选择哪个分支(master就是默认的主分支),选择你需要的分支点击下一步

接下来就是项目在本地的一些设置

这里可以设置保存的目录,远程分支的名字(默认为origin),因为我们克隆的就是一个工程,所以可以选择“Import all existing
projects after clone finishes”,那么就会在下载完成后直接导入其中的工程(需要注意的是下载的地方不要放在工作空间里,不然不会导入
或导入失败)。最后在工作空间中就有该项目了:


可以看到git项目和其它项目不一样的是,凡是git会记录更改的文件或文件夹右下角都有一个圆柱体的东西。

4.对本地内容进行更改

下面尝试一下对本地内容进行修改然后提交的过程。
当更改了本地内容过后,需要在项目名称上,右键–>team–>commit将当前的更改提交到本地的上传任务中去(此时并没有上传到远程)
其中,“Commit message”可以写上你本次的提交信息,注意,提交信息也很重要,可以方便以后查看本次提交主要是提交了什么东西,查看你在这次提交中都做
了些什么,还可以让团队中其它成员大致了解其中的更改。 下面的Author和Committer默认即可 在下面的Files列表框里面就是选择本次需要提交的文件
,需要注意的是git会自动列出本次所有更改过的文件,只需要上传更改过的文件就行了。下面点击”Commit and
Push”(也可点击Commit再用push)![](http://7xnc86.com1.z0.glb.clouddn.com/eclipse-git-
coding-net_8.jpg)其中有一串奇怪的数字“6656cfcb”就是本次提交的commit
id(相当于版本号,方便以后进行回退的操作),此时在coding.net上面就可以看到刚才的提交了,此时还可在“代码”页面查看刚刚的文件是否已经完成了更改

5.提交合并求

当完成一个功能或者模块时,需要进行项目迭代,这时候就要向项目领导人提交合并请求,合并请求可以直接在网页端完成

先新建合并请求,注意源分支是你更改的分支,目标分支则是你要把你更改的分支合并到哪里去,这里就是master分支,即主分支。 merge
request标题和内容表示你提交本次合并请求的标题和内容,标题就写明你完成了什么,内容可以详细说明一下你做了什么。

要想看到自己改动的地方,可以通过最下面的改动明细查看,其中改动的地方用红色标识,红色的在本次提交中被替换成了绿色部分的内容

最后点击“提交”

此时,项目负责人那里会收到一封邮件(这功能挺贴心的)提示有了新的提交请求,OK,我只要点击同意合并就算完成了。

作者:Paul Graham(保罗·格雷厄姆)

翻译:阮一峰

关于本书

我一向不喜欢在文章里介绍作者以及译者,因为我的文笔及对他们的理解不可能会比他们自己的网站或者维基百科相近透彻,所以如果想了解他们可以直接点击他们的名字进入相应的网站。

第一次听说这本书还以为是讲黑客的,但之后在微博上书本上了解了这本书后就立马决定买下来,想一探究竟,这本书到底为什么会成为经典。本书的目标读者不仅仅是程序员,还有现实中的普通人、职员以及创业者。本书虽然是阮一峰翻译的,但不知道是不是因为我阅读外国著作的数量还不够还是怎么的,我始终感觉作者的话有很多累赘的地方,有时一个概念要用很多句话来解释(其实,在翻译一些外国文章的时候我也遇到过类似的问题,前后要么不搭边要么有点累赘要么没有过度语句)。在《代码的未来》里我也将两本书对比过,但其实我是先看《黑客与画家》再看《代码的未来》的,《黑客与画家》描述的是从计算机开始至二十一世纪初的一些互联网发展规律以及一些概念,从历史发展的角度来延伸到未来的计算机潮流,虽然具有一定的时代性,但此书一定能打开你的眼光,更好地看待现在的互联网世界。

书呆子?宅男吧!

书中所说的书呆子,其实就是现在所说的宅男。“为什么他们不受欢迎?因为他们把心思都放在了别的地方。”宅,就要宅出技术。技术宅,他们不善交际,他们不爱参加公共活动,他们不乱花钱(钱只花在数码产品上),技术宅与普通宅不同,技术宅不是因为别的,而是因为热衷于技术才那么宅,他们可能为了钻研某个技术而几天几夜不出门,他们可能为了修改某个bug而茶不思饭不想,但总归来说他们是为了技术,为了自己所热爱的技术。我对这种生活还是很向往的,但是现在貌似这样不行了,还是应该出去锻炼一下自己的社交能力的,这点我不多说,相信现代人都能够理解,因为这已经不是那个“酒好不怕巷子深”的年代了。

黑客与画家

我很赞同书中所提到的黑客伦理,诚然,我对黑客的理解从来都不是媒体眼中的那样,而就是作者这样的,”黑客不服从管教,具有叛逆精神“,这句话是对的,但绝不是贬义的,因为黑客就是自由的象征,hacker not blacker。黑客总会以自己的方式去捍卫自己的权利,实现自己的想法。他们会因为政府的某些不公而去攻击政府网站,会因为自己的某个新奇的想法而日夜编码,为了自由,他们发明了Linux,发明了RSS,发明了社交网站……

黑客应该与画家一样,是创造艺术的一群人,而不是搞破坏的一群人。只有懂得艺术精华的人才能像黑客那样写出伟大的程序。在此书的影响下,我现在也在有意无意地提高自己在其他方面的理解,比如会话、歌曲等。

黑客并不神秘,他们可能就是你身边的书呆子!

关于创业

随着90后的崛起,书中所提到的创业观念我觉得有些也应该值得商榷,现在的创业观念和以前不大一样了。作者所说,要创业就要让对手无法理解你的技术,无法复制你的商业模式,但现在这个知识爆炸的年代,这一点绝对是难上加难。正确的创业应该是利用大家都知道的技术,但只有你最先想到把那项技术用到可以发挥其长的地方,并能迅速推广,那么你就是赢家,即使是大公司来复制,也难以复制第一批的客户。

黑客伦理(Hacker ethic)

  1. Access to computers–and anything that might teach you something about the way the world work–should be unlimited and total. Always yield to the Hands-On Imperative!: 使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制。任何事情都应该亲手尝试
  2. All information should be free.: 所有信息应该都是自由的
  3. Mistrust Authority–Promote Decentralization: 不信任权威,提倡去中心化
  4. Hackers should be judged by their hacking, not bogus criteria such as degrees, age, race, or position :判断一名黑客的水平应该看他的技术能力,而不是看他的学历、年龄或低位等其他标准
  5. You can create art and beauty on a computer: 你可以用计算机创造美和艺术
  6. Computers can change your life for the better: 计算机使生活更美好

语录

为什么书呆子不受欢迎?他们的心思在别的地方

致富的最好方法就是为社会创造财富。创造财富的最好方法就是创业

**正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好能把文档说明写得像编程语言规范那样清晰 **

程序写出来是给人看的,附带能在机器上运行

毕竟生命只有一次,你可能想用它来做一些伟大的事情

公民自由真的是国家富强的原因,而不是结果吗?

你开办创业公司不是单纯地为了解决问题,而是为了解决那些用户关心的问题

以永不过时作为目标是一种帮助自己找到最佳答案的方法:如果你不愿别人的答案取代你的答案,你就只好自己做出最佳答案

作者:松本行弘

松本行弘,编程大师,Ruby语言的发明者

关于本书

此书与《黑客与画家》风格类似,都是作者的个人优秀作品集,《代码的未来》只是其中的一篇文章。他从编程语言的本质出发探索和发现未来程序世界的可能发展。动态语言的不断涌现、大数据的持续火热、多核时代的到来,身处浪潮之巅的新一代程序员,我们到底该如何面对?从第一篇文章开始我就发现这一本书和以往的概念性书籍完全不一样,特别是语言方面,非常朴实,没有令人深刻的概念,如果有很难懂的东西要么就简单地讲,要么就干脆不讲。《黑客与画家》是属于上个世纪程序员的,而《代码的未来》则是给我们这一代程序员看的,书中介绍了很多最新的技术知识,当然不会深入讲解,但也可以带领我们来到时代变革的那扇门前。

关于编程

何谓编程?“创造出一种人类和计算机都能够理解的语言(编程语言),并通过这样的语言将人类的意图传达给计算机,这样的行为就叫做编程。”这只是作者所引用的一个观点而已,但他并不大赞同,我也这样觉得,我认为,编程本身是一个创造的过程,而且是一个创造生命的过程,现在我们编程和上一辈人的编程目的不大一样,虽然都是为了让机器能读懂,但我们更着眼于未来,更着眼于代码所给人类带来的实际好处。编程的本质在于“思考”。正如林纳斯·托瓦兹所说:“Just for fun”。码农、程序猿。。。有时候我很喜欢这些称谓,因为这些称谓不是别的行业给我们起的,而是我们自己对自己的一种嘲讽,嘲讽中带有一丝与众不同,这正是现代程序员的乐趣。程序员无疑是互联网上最会自嘲的一群人,但苦只有自己知道,乐也只有自己知道。

关于编程语言

大一时候的我,刚学完C语言就迫不及待去学习C++语言,以为从面向过程到面向对象就算是编程世界里最重要的一道坎,殊不知,在C和C++大门之外,世界上还有那么可爱、好用、强大、简洁的编程语言。通过微博和Github我学习了Python语言,真太美了,原来强大的语言不一定要C/C++那么严谨复杂,它也可以做得很简洁。从那以后,我就爱上了动态语言,爱上了脚本语言。很多人说动态语言虽然简洁,但性能上太差,呵呵,那只是曾经,现在的动态语言不仅本身进行了足够的性能优化,而且自己要是主动去进行优化,那性能绝对比得上C和C++写出来的程序。

Go、Dart、CoffeeScript、Lua、Lisp,虽然很多我都听过,而且也看到很多人在用,但由于目前我精力有限,暂时没有学习新语言的打算。作者的Ruby语言,我也未曾接触过,看完本书,我对其有了一定的认识,很强大,但我学过Python,我觉得世界上没有比Python更简洁的语言了,而且Python很重要的一个特性是强制缩进,所以看看网上的Python代码,几乎不会看见某些人所写的C/C++那种格式混乱的代码。在未来,如果有一门新的语言诞生并得到很好的发展,那么他一定是吸收了众多语言的优点,并在此基础之上拥有了自己独一无二的特性,比如垃圾回收,比如异常处理等。

关于未来

元编程、云计算、大数据、多核时代,挑战MySQL的NoSQL,随着摩尔定律渐渐地被颠覆,新的时代已经到来了。我们不可能掌握所有的技能,但所有技能我们都应该去学习一下

时代在召唤~~~~~~~~~

补充一下在书中所看到的我以前并未接触过的知识点:

  • DSL(Domain Specific Language,特定领域语言):XML、JASON、SQL、正则表达式等都属于外部DSL,而内部DSL是在现有语言中实现DSL,Programming is a rocess of designing DSL for your own application(编程就是为自己的应用程序设计DSL的过程)
  • 元数据:描述数据所具有的结构的数据,也就是关于数据本身的数据
  • 元编程:用程序来编写程序
  • Roma(Rakuten On-Memory Architecture):一种键-值存储数据库这种数据库把所有的数据都存放在内存中,采用环状的分布式架构,在运行中可自由增减节点
  • C10K问题:在同时连接到服务器的客户端数量超过10000个的环境中,即便是硬件性能足够,依然无法正常提供服务,这是“想当然编程”的副产品数据库的
  • ACID特性:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)
  • NoSQL:是一种数据库的总称,主要代表有ROMA(Rakuten On-Memory Architecture)这样的键-值存储型数据库和MongoDB这样的面向文档数据库(存储的是拥有结构的文档)