Python+Selenium爬坑记录——煮机网爬虫

现在的目标是使用Python+Selenium完成一个本体指导智能爬虫的工具。目标网站为煮机网。

流程如下:
1、把煮机网上所有文章爬取下来,一共2000篇,对每篇文章进行爬取、分词、存储工作。
2、对文章进行打分
3、对打好分的文章进行排序
4、人工分析,多少分以上的文章是可靠的,设定分数标准,将低于标准的文章删除
分词使用的是结巴分词器,使用方法如下:
import jieba
header_mode = jieba.cut(header)
对于怎么创建、写入文档,也找了一下方法,最后发现以下代码可以实现:
f = open(header,"w")
f.write(str(content_mode))
f.close()
在第二行,一开始写的是f.write(content_mode),出现报错:TypeError: expected a string or other character buffer object
网上搜了一下,是类型问题,要写入的话必须是str类型的,转换一下就OK了。
但是打开看了一下,并没有成功写入,文档里只有一行:<generator object cut at 0x00000000037B1870>
不知道是什么错,尝试改成f.write(str(content)),出现新报错:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-32: ordinal not in range(128)
在其他人的博客(http://wangye.org/blog/archives/629/)里找到了答案,似乎是因为编码问题,Unicode编码与ASCII编码不兼容,通过以下三行代码可以解决:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
同时,再去文档里看,已经解决,文本内容可以成功写入文档。
实现了以上基本的动作,现在我考虑把功能连起来。首先我在想,如何把一整个页面的10篇文章内容都download下来。
这里我写了一个函数,专门用来获取页面上的文本并下载。
def download_text():
    elements = driver.find_elements_by_class_name("entry-title")
    for element in elements:
        element.click()
        sleep(2)
        header = driver.find_element_by_class_name("entry-title").text
        content = driver.find_element_by_class_name("entry-content").text
        header_mode = jieba.cut(header)
        content_mode = jieba.cut(content)
        print(" ".join(header_mode))
        print(" ".join(content_mode))
        sleep(2)
        f = open(header, "w")
        f.write(str(content))
        f.close()
在寻找的方法的时候,发现煮机网上,每篇文章都是存在“下一页”按钮的,可以直接跳转到下一篇文章,大大简化了爬虫步骤,在方法里加个下一步就可以了。于是我把访问第一页和下载文档分开来,这时download_text方法改成了下面的样子:
def download_text():
    header = driver.find_element_by_class_name("entry-title").text
    content = driver.find_element_by_class_name("entry-content").text
    header_mode = jieba.cut(header)
    content_mode = jieba.cut(content)
    print(" ".join(header_mode))
    print(" ".join(content_mode))
    f = open(header, "w")
    f.write(str(content))
    f.close()
煮机网因为快要倒闭(。。。)所以页面结构比较简单,class单一好爬,所以我定位直接用class_name了。
然后写了个循环:
next_page = driver.find_element_by_class_name("nav-title-icon-wrapper")
while (next_page):
    next_page.click()
    sleep(5)
    download_text()
    sleep(5)
    next_page = driver.find_element_by_class_name("nav-title-icon-wrapper")
 到这里可以实现把煮机网上所有文章都爬下来的功能了,不过如果网络不太好的话就会停止爬虫了,比较麻烦,后期再考虑怎么改了。

台湾大学机器学习——课程笔记(5~8)

从这里开始有所深入,会涉及到很多数学公式的推倒,有一定的难度,也难免费心,有的部分需要反复多看几次。

————————————————————————————————

第五章:

5-1训练和测试的过程到底有什么不一样

Learning在某些情况下是可行的
为什么机器可以学到东西?
Learning流程图:
如果hypothesis不是很大,Ein和Eout就可以很相近
选一个Ein最低的,如果很接近0的话,那么Eout也可以很接近0,这样我们就达到了Learnig的效果
必须保证:Ein要很接近0
两个核心问题:要保证,拿一个新的资料去验证我们已经学习过的模型,可以保持一个比较吻合的状态
这里我们把learning拆成了两个问题:
1、Ein和Eout到底会不会接近
2、有连接的话,如何让Ein变得越小越好
问:M(hypothesis的大小)和这两个问题有什么关系
1、M相对比较小:选择太少了,但是坏事情发生的几率也可以很小
2、M相对比较大:选择多了,但是坏事情发生的几率也增加了
结论:M很重要,选择正确的M是与我们Learning的效果有关系
无限多的M显然是不好的
我们要想办法解决无限大的M到底发生什么事
我们要把M换成有限的数量(不一定可以换)
如果可以换的话,我们就可以用m(一个有限的数量)来替代M
m和M有很类似的角色,来告诉我们未来该怎么选择hypothesis
目标:有学习的效果
5-2 M是如何推倒来的
union bound连级
问题:当我们加无限多个项的时候,有可能就会跑去无限大的数字去
这个bound到底出了什么问题?
原理:坏事情不太会重叠
若我们今天有两个很接近的hypothesis,他的Ein和Eout就会很接近
那么坏事情就会很接近,叠起来,可是我们使用union bound的时候,我们没有考虑叠加的情况,所以导致我们无法处理无限大的情况
解决:我们要找出重叠的部分
我们能不能把无限多的hypothesis分类,然后去找哪些部分有重叠。
只有一个点的情况:这直接上只有两种线,一种说x1是圈圈,另一种说x1是叉叉
有两个点的情况:有四种线
有三个点的情况:八种线
若把三个点放在同一条线上:只有六种线
四个点:14种(最多)
用有限的数字取代N,当你的N够大的时候,坏事发生的几率会很接近0,
Ein和Eout很接近,可以说学习成功了
5-3 
hypothesis和dichotomy的区别:
D是对特定动作的区别
H:可能有无线多条
D:代表有几种不一样的组合(最多就是2的n次方那么多种)
想要移除对x的依赖
mh(将要取代M,与hypothesis有关)
我们到底能不能写出函数
设定一个门槛值Positive Ray:决定了hypothesis
可以切出多少种不一样的dichotomy:N+1
用竖线切出N+1个区块
想象hypothesis是一维的输入 ->Positive Interval
成长函数:
 5-4 Break Point
我们想要用m取代M
我们的成长函数到底是多项式,还是指数?
找出成长函数里面第一个看起来有希望的点,这个点就是Break Point
convex sets没有Break Point
是不是Break Point有一线曙光的时候,成长函数成长的速度和函数一样快
——————————————————————————————————
第六章:
6-1 举一反三的理论

如果M跑到无限大去,我们就无法实现学习了,所以我们在找m
我们希望m增长缓慢,能够取代掉长得很快的M
m成长函数最多能够产生多少种dichotomy
positive rays:一维
成长函数在2个点的时候只能产生3中可能性 break point在2
positive intervals:不能处理叉叉在中间,圈圈在外面的情况,break point在3
convex set:在二维平面上,在凸的集合里面是圈圈,外面是叉叉,没有break point
2D perceptrons:四个点对称对望,break point 在4
只要一开始是break point,那之后的k+1,k+2。。。都是break point
约定:任意两个点不能shatter
6-2 Bounding Fuction
不想成长函数到底什么样子,而去思考排列组合上到底可以有多少种
证明:B(N,k)<=
N:有几个点
k:break point漏出一线曙光的地方
当N和k的值一模一样的时候,B(N,k) = 2`N – 1
6-3 
想办法把B(4,3)和B(3,?)找出联系
橘色的解都是放闪光的(成双成对)
还有三个是形单影只的
B(4,3) = 11 = 2α + β
α+β:dichotomies on (x1,x2,x3)
任意三个点不能shatter,最多最多B(3,3)
B(N,k) <= B(N-1,k) + B(N-1,k-1)
从成长函数,到上限函数,到上限的上限
 成长函数会被上限函数Bound住,上限函数,会被上限的上限函数Bound住……
6-4 A Pictorial Proof
Ein只有有限个(和data有关)。Eout是无限多个。
现在想做的就是将Eout也变成有限多个。
Eout什么时候会是有限多个?
把Eout换成Ein`
————————————————————————————————
第七章:
7-1 VC Dimension

复习:举一反三的学说 Theory of Generalization
成长函数会被上限函数Bound住,上限函数会被多项式函数Bound住,多项式的最高项是N的k-1次方
VC Bound:坏事情的几率很小很小
不管我们的演算法作了什么选择,都可以说我们的演算法做的选择受支配
我们可以把成长函数代换成上限的上限函数
本来我们就假设N够大,k要>=3
如果k比3小,那就不能用N的k-1次方这个Bound
几个条件让我们Learning做得到
1、要有个好的成长函数
2、要N足够大
3、一个好的演算法
VC Dimension(VC维度)是什么呢?
给最大的非break point的昵称
如果break point不存在,那么VC Dimension就是无限大
四种不同的VC Dimensions分析:
一个好的hypothesis,Ein和Eout会接近,并且和你选择的演算法是没有关系的
和你的资料有什么distribution产生没有关系
和你的目标长什么样子也没有关系

7-2 VC Dimension的感知器
在多维的情况,演算法发生了什么事情?
一维:dVC = 2
二维:dVC = 3
d维:dVC = d+1
一组特别的资料,有d+1笔
反矩阵存在,且唯一
给任意一种排列组合,y都能做到X*w之后取正负号等于y
如果2,3是圈,1是×,那x4一定大于0
线性依赖的关系会限制dichotomy
对于一般的资料:
d+2这个向量一定是正的
前面都会限定了,那么最后一个也会被限定
7-3 有效二元分类自由度
两个老问题:
1、Ein和Eout是否够接近
2、Ein是否足够小
small M:坏事情几率很小,但是Ein没有办法做到很小
large M :Ein很小,但是坏事情发生的几率变大啦
small dVC:坏事情几率很小,但是Ein没有办法做到很小
large dVC:自由度很高,我们可以选到一个比较小的Ein,但是坏事情发生几率变大
7-4
有很高的机会,Ein和Eout的差别会被限制在这个根号里面:
 model complexity:随着dVC变大,越来越大
out-of-sample error:先下降,后上升,最好的Ein在中间
VC Bound -> Sample Complexity
资料越多,坏事情发生的几率越小
VC Bound到底有多宽松
我们使用了Union Bound在最差的地方
虽然VC Bound非常宽松,但是要做到和VC Bound一样的话,很难很难
对于所有hypothesis,宽松的程度是差不多的
VC Bound背后的哲学意义到底是什么?
————————————————————————————————
第八章
8-1杂讯和错误

如果在图里加上了noise会不会有影响?
例如:
noise in y:一个好的顾客,但是没给信用卡
noise in y:两个一样的顾客,但是没给其中一个人信用卡
noise in x:顾客的资料不精准
VC Bound的核心是什么?
我们有一个罐子,但是我们不知道罐子里有多少橘色的弹珠->我们犯错误的地方
想象:罐子中有变色龙弹珠,有的时候会变来变去
y也是取样来的
目标分布:告诉我们,对每一个点,mini-target是多少
PLX:常常会被simple到
8-2 错误的评估
怎么样说服人家,相信我们的g和f是很像的
到底我们要怎么打分数
g的特性:
out-of-sample:在样本之外吻合的情况
pointwise:我们可以在每一个x上面衡量,做抽样的平均
classification:我们做的到底对还是不对
zero-one:0,1的错误方式,不是0就是1
squared error:很多时候我们做的错误衡量可以和之前一样,考虑每个点上的正确还是错误,然后做了一个在out-of-sample上的平均
每个点上错误的方式
用err来做代表
in-sample:我们在每个点上衡量错误的状况
out-of-sample:在有noise的状况上,衡量g和y的差别
在未来课程中我们还是会采用这种err的方式,集中在Pointwise的方式
1、0/1分布
2、squared error平方的错误:预测的y和我们想要的y到底差多远->隔得越远,跑得越快,通常用在预测实数的问题。使用错误的距离和错误距离的平方
错误衡量会影响到我们最好的那个f长什么样子
错误衡量会用来看看g好还是不好
结论:错误衡量是很重要的部分
8-3 错误衡量的算法
错误衡量哪里来?
想象:你要做一个指纹辨识的应用
分类器:+1:是你  -1:不是你
分类器可能会犯两种错误:
1、 false accept
2、 false reject
应用:在超市里通过指纹决定要不要给顾客打折
false reject:让顾客不高兴,损失未来的效益
false accept:失去一点点盈利,留下指纹
应用2:CIA辨识某个人可不可以进入系统查看机密
false reject:非常严重的失误
false accept:员工不太高兴,但是没什么损失
结论:不同的错误会想要不同的错误衡量
设计算法的时候就要想办法把不同的错误衡量方式用进去
用替代的方式:找一些有意义的错误衡量
杂讯的量很少,
平方:高斯的杂讯——平方项会在中间出现,找出最小的高斯杂讯
采用friendly:采用比较好设计演算法,寻求Ein会越来越小
err hat(err上面带个帽子)对演算法是很重要的
err是我们真正的应用程式的目标
8-4 衡量分类
每个case都有不同的配分
成本矩阵(错误矩阵、损失矩阵)
难题:我们要让Ein越来越小,加上VC可以用的话,我们就可以相信Eout会和Ein越来越接近
问题:对加权的Ein来说,它理论上的保障可靠与否
修改pocket演算法,让它和原来的pocket有一样的保证
问题:如果-1有错,就算他1000倍错误,+1有错就算他1倍错误
想象:拿到另外一组资料,+1,不管,-1的话,复制1000倍
想办法在新的办法上把每一种错误都收一块钱的方法做好(0/1)
考虑权重的pocket方法
拜访权重高的点的几率要增加

台湾大学机器学习——课程笔记(1~4)

为了监督自己专心理解视频课,会在看视频课的同时使用为知笔记。

台大的机器学习课程可能是目前国内用户最好理解的机器学习课程(别的推荐课程基本上都是英文讲述),林教授非常可爱,台湾腔特别萌(大概是我一直看下去的动力)

基础理论课程一共16章,所以我分四次发布笔记,算是自己的一个记录,也算是对其他观看这套课程的同学一点微小的辅助。

PS:不太完整的地方,大概是我犯困或者分心了orz

——————————————————————————————————

第一章:

1-1

红色代表危险,蓝色代表不危险(什么时候使用机器学习是危险的or不危险的)

机器学习:理论与实用相结合
1-2 我们什么时候要用机器学习
问:什么是学习? ——看书、上课、模仿    共通性:从观察出发
观察到的东西:资料
将资料拿来,应用,变成自己的东西的过程
机器学习就是在模仿这个过程
技巧是什么?增进某一种表现的增进
从资料出发,通过机器学习,最终得到某一种表现的增进
为什么要使用机器学习?
 
机器学习的三个关键:
1、有某一种效能/表现可以增进,有潜藏的模式可以学 ->目标
2、不知道怎么把规则写下来
3、要有资料
1-3机器学习在哪些领域有应用
吃:评判在这家餐厅吃会不会食物中毒(卫生状况如何)
穿:推荐顾客要怎么样搭配好看(通过衣服的销售数据,和顾客的评价)
住:通过之前的资料,预测房子的耗能状况
行:让汽车辨识交通灯,协助自动驾驶
教育:从学生答题的历史记录判断学生的程度如何,是否能答对下一题
娱乐:推荐系统——分析用户喜欢什么样的电影,并推荐。
一个可能的机器学习的模型:我们怎么样决定我们喜不喜欢一个电影?
有特征的化圈圈就很大,然后作一个内积,由得出的值判断
1-4 机器学习具体长什么样子
要喂给机器的资料:x
想要机器告诉我们的答案:y
可能可以学到的东西:f(目标函数)
资料:D={x1,y1  x2,y2 x3,y3….}
假说:g (经过机器学习得到的结果)
机器学习的演算法:A
希望g代表某一种效能的增进,也就是说,和f越接近越好
注意:f 我们是不知道的, 但是我们希望 g 和 f 很像
从看到的资料里面,从集合里,选一个最好的出来
把g可能的长相,放在集合H里面
H(模型)里面可能有好的,可能有不好的,拿出一个最好的作为g
learning model = A and H
机器学习是我们从资料出发,让机器学习演算法算出一个g,让g接近我们心里最渴望的那个f
1-5 机器学习和我们知道的一些相关领域的关系
KDDCUP 资料探勘:希望能够用资料找出一些有趣的事情
资料探勘与机器学习:非常相像,但是有一点点不一样
两个领域密不可分
机器学习与人工智能:让机器会预测
两个方式:
1、我们设计演算法,让机器自己去分析
2、我们设计演算法,让机器从资料中学到怎样工作
机器学习与统计:两个都使用资料
统计使用资料来推论一些事情
在机器学习中,g实际上就是一个推论的结果,我们想要的目标f是我们不知道的事情
统计实际上是实现机器学习的一种方法
统计学从数学出发
总结:机器学习就是从资料出发,希望找出一个函数,和目标最接近
核心:演算法,资料,函数g
——————————————————————————————————
第二章

2-1从假说的集合里面选出一个最优的g

资料从哪里来:我们想学
从所有H里选一个g出来,g和f越接近越好
H到底长什么样子?
 
模型:把每一个使用者用向量来表示
把维度综合的算起来,给使用者一个分数,超过一个标准的话,就算是通关
维度*重要性(正相关,负相关)
希望电脑自动告诉我们给信用卡是不是正确的选择
好:+1
不好:-1

h:感知器(用w算出来的分数,减去门槛值)

w:权重weight
简化:把门槛值也当成一个特殊的w
w也能表示成一个高高的向量
我们在处理x顾客的资料,有第0维

现在变成w和x的内积
h(x) = sign(w0 + w1x1 + w2x2)
线性分类器:用一条线来代表分类器
2-2 怎么样设计演算法从所有的线里面选出一条最好的线
我们唯一知道的是,我们的资料是从f产生的
先在所有线里面选一条,这条线能满足,和已知资料的匹配
选一条线,可能有错误,那么我们就开始修正错误
我们会一开始的时候,从一条线g0出发,用w0来代表一开始的线,想办法让我们的线一次比一次更好
PLA:感知器学习算法——知错能改
cycle PLA:绕圈圈的做
如果停下来了,就意味着,和已经的资料全部相吻合了。
但是也可能不会停下来。
2-3 PLA什么时候会停下来
线性可分 linear separable
假设,有一条线,为D
这条线是我们的目标
数学上这代表,每一个都大于0
PLA每次都选一个点,我们选到的错误的点也会满足这个形式。
wf和wt的关系是什么,是否接近
分析两个向量接不接近,可以作内积,内积越大,越接近
内积越来越大,就代表两个向量越来越接近
看似越来越接近,但是我们还要处理长度的问题
PLA最重要的性质:我们有错才更新
两个正规化之后向量的内积,代表越来越靠近
两个向量最大的内积为1
2-4
线性可分+每次能挑一个错=PLA会停下来
坏处:首先我们要假设PLA是线性可分的
假设:需要提前知道wf
ρ是用wf算出来的
资料里面可能存在杂讯
就算我们原来的f是一条线,我们拿到的资料也不一定会是线性可分
杂讯是比较小的
小的状况下,y和f有一定的对应程度
找一个和f很相像的g,我们看到的y和g的标签也要非常的相像
我们要找一条犯错误最小的线,当成g ->很难 NP-hard
贪心(口袋)算法:把觉得最好的先放在手上
——————————————————————————————————
第三章

3-1各式各样不同的机器学习问题

是非题
二元分类问题的应用:要不要放信用卡,是不是垃圾邮件,学生会不会答对这一题
Multiclass Classification:多元分类
应用:视觉or听觉辨识
回归分析Regression
应用:预测股市、预测天气
特点:输出是一个实数
Structured Learning结构化学习
我们要的输出空间有某一种结构在里面,希望电脑想办法去学到这些结构
3-2机器学习不一样的变性
从分辨不一样的铜板出发
监督式学习:我给你铜板,我还告诉你铜板是什么
对所有的输入都有想要的输出
非监督式学习:我不告诉你铜板具体是什么,机器自己想办法分类(分群)
密度分析
目标分散,演算法种类很多,会对应到监督式学习的演算法
Semi-supervised半监督式学习:很多照片,有一部分是已经标记好的,机器要通过已经标记好的资料分析那些没有分析的资料
另一种学习的方法:从如何训狗开始思考
用奖励or惩罚
没有实际上要什么,但是我们有一些其他的标记
类比监督机器学习:Reinforcement Learning 增强式学习
3-3 不同模型下的学习
线上学习
Reinforcement Learning也是一笔一笔的输入资料
每一轮我们都会得到一个单一的g,我们希望每一轮的g会越变越好
Batch(最常见):类似填鸭式教育
Online:像是老师在教书,循序渐进
在这两个设定里面,从机器的角度来说,都是被动的
一个新的设定:希望机器能问问题 —— active
希望机器通过有技巧的问问题,得到提高(主动学习)
应用:取得label很贵的场合(label比较稀有,难以取得)
我们怎样用不同的方式让机器学习
3-4 输入不同的时候将发生的变化
假设资料非常的具体,和我们想做的事情有一定的关系
我们相信这些资讯和我们想要的输出有一定的关系
输入:input / feature
手写数字的辨识:多类别,批次的问题
问题:喂给机器什么东西当做x?
是否对称/密度如何
Concrete Feature 非常具体的数据
每一个数字就是一个256位的向量
越抽象代表对机器来说,这个问题越困难。
要让机器把抽象的数据变成较为容易识别的特征
让机器来做:feature industy
深度学习:希望有大量的资料,去学,抽取非常具体的特征
帮每个使用者抽取特征,再用这些特征去学习
特征有一部分是人想的,有一部分是机器去学的
例如:我有使用者的id,那我能做什么事情?
比原始的数据更抽象一点,难度更大
越抽象,机器就要花更大的力气去学习,困难也会越大
我们假设有的,都是具体的方式
如果没有的话,就需要人或者是机器去想办法去抽取特征去学习(比较难,后期讲)
——————————————————————————————————
第四章

4-1 机器学习是不可能的吗?

规则是随人说的
想象:我们的输入只有两种情形,正确或者错误
在这种情况下,我给了你五笔资料,你使用某一种演算法,然后告诉我,这个g是什么样子
总共输入的情况你有2的3次方,就是8种
让机器学习演算法选一个g,在五笔我们已知的资料上,都会一模一样(PLA)
问:在这种情况下,是好还是不好?
在刚刚设计的情况,确保了g和f一模一样,但是在资料之外,就会不同
我们想要的是,在我们没有看过的资料里面,和f的吻合度到底怎么样
我们想要的是资料以外的部分
No Free Lunch 天下没有白吃的午餐
4-2 推论的可能性
我们想要知道罐子里面到底有多少弹珠(或者从罐子里拿出橘色弹珠的几率是多大)
有很大的几率:sample里面的比率会和整体的比率接近
罐子里都是橘色:μ很大
橘色很少:μ很小
霍夫丁的不等式
我今天想要v和μ一模一样,这句话大概是对的
probably approximately correct(PAC):我今天想要做这个估计,直接说罐子里面有多少橘色
风险:大概,差不多,是对的
你需要容忍多少的误差:和μ无关——你根本不需要知道μ
设一个比较大的融合度,坏事发生的几率就会看起来变小了

如果我们的样本够大的话,我们大概可以推论说μ的值和我们抽样起来的μ的值是一样的

4-3 学习的连接 
我们不知道的是 target f
如果有一个新的顾客,会不会和f是一样的
把我们罐子里的弹珠,想成x,橘色的弹珠,h和f讲得有没有一样
如果是一样的,就涂成橘色
不一样,就涂成绿色
首先,我们要有一个固定的h在手上
然后我们就可以把h专属的罐子里头的弹珠涂成橘色或者绿色
如果我们今天从这个罐子里抓了100个弹珠出来,那就意味着我们拿了100个x出来
如果我们在一个监督式学习的状态下,相对应的y在f上面衡量的情况。
你能不能知道你手上的资料是橘色的但是还是绿色的弹珠
如果你假设data是假设独立,随机的,那么这个资料就代表了一把橘色或者绿色的弹珠
所以你只要检查,h在这个资料上的表现,有几笔和资料上的不一样
我们需要将这个比率估计
我们需要抓一把够多的弹珠,独立的抽弹珠出来
我们可以大概说,h和f不一样的几率到底是多少(整个罐子里面)
从我们可以看得到的资料里面说
我们有一个几率,从罐子里面取样,首先,我们取样产生了资料
然后我们用同样的几率去衡量整个罐子里面到底一样不一样
h是从H里挑选出来的。
Ein:手上样本的错误率
Eout:样本之外的错误率
f和p我们都不需要知道
由Ein推论到Eout
如果Ein和Eout很接近,Ein很小,这时候我们就可以保证和f很接近
Verfication:不是学习,是验证,验证h的表现好不好
4-4真实学习的连接
把手上的硬币丢五次,记录,有几次正面,有几次反面
至少有一个人丢了五次全部都是正面的几率是99%
霍夫丁公式告诉我们,不好的事情几率很小
我们发现,有选择的时候,选择会恶化不好的事情
什么是不好的资料:Ein和Eout差得很远(比h来得远)
有几率变成很好的事情,也有几率变成不好的事情。
资料有无限多种可能,记录下来,判断谁是好的谁是不好的(判断依据:Ein和Eout是不是相差很远)
把所有的资料穷举出来
你有很多的h,是为了让演算法作选择
不好的资料:演算法没有办法自由自在的做选择
好的资料:演算法选什么都对,只要照着自由意识去选择就可以了
Hoeffding告诉我们的是,一行一行BAD的几率很小
Bound of BAD Date:
只要对某一个人不好,那就是不好的
如果我今天的H有无限多种选择,无论我们怎么选,都会是正确的选择
如果我的演算法Ein是最小的,Eout也很小,我有一个函数用来测试,来产生我们的资料
H要是有限的,N要够大,这样的话机器学习就是有可能做得到的
有限条的H是可以推理出来的

八爪鱼应用教程:京东商品信息采集图解

考虑到毕业设计的题目涉及到WEB数据,经过向前辈的咨询,学习了一个目前最简单也是最常用的爬虫工具——八爪鱼,以获得互联网上的数据。

虽然官方给出了视频教程,但是考虑到视频教程比较费时,反复参考起来也比较复杂,所以决定制作该图解教程。

第一步:确认要采集数据的网址。这里我选择了京东商城中的JAVA分类,可以看到一共有85页,记录下此时地址栏中的地址。QQ截图20170227134637

第二步:在左侧【我的任务栏】右键新建任务组,自定义名称,确定完成之后,右键该任务组,新建任务(高级模式),并自定义任务名,有必要的话可以在此处稍微记录一下采集数据的网址,以备日后方便查询。QQ截图20170227133839QQ截图20170227134402

第三步:点击右上方的按钮【下一步】,跳转至设计工作流程页面。选中流程框左侧第一个【打开网页】,并拖入流程框中。QQ截图20170227134919

在右侧url框中粘贴刚刚复制好的数据源网址,点击保存,软件就会在下方自动跳转到该地址。QQ截图20170227135235

第四步:首先必须知道,我们要采集的不仅仅只是我们看到的这一个页面,例如示例的这85个页面,我们都需要采集。所以我们必须先为工具设定好循环翻页这一任务。将视线转移至软件正下方,也就是刚刚打开url的页面,拖动右侧滚轮,找到位于商品底部的翻页栏,对着【下一页】按钮,右键,就会跳出对话框,选择【循环点击下一页】。这样,就是完成了为工具设定翻页操作。QQ截图20170227135928 QQ截图20170227135937

第五步:由于我们要采集的是每一个商品的信息,所以我们不能简单的获取现在这个页面上的文字信息,需要一个打开链接的过程。选择该页中的第一个商品,对准文字描述,右键,在弹出的任务框中选择【创建一个元素列表以处理一组元素】QQ截图20170227142541

此处要注意,要把层次改到【A】,点击【A】就可以了。然后点击下方的【添加到列表】,将刚刚选中的链接加入列表中。

QQ截图20170227142559

添加之后,不要着急点击完成,因为还要为之后的几十个链接加入列中,所以在这里点击【继续编辑列表】

QQ截图20170227142613

回到最底部的页面,对着该页面中最后一个商品的链接右键,还是跳出列表元素窗口。这里要注意一下,我们要统一列表的层次,所以还是把层次改到【A】。随后再点击【添加到列表】

QQ截图20170227142634

点击之后就会发现,整个页面上所有的商品链接名都被添加了进来。这时候点击【创建列表完成】,接着点击【循环】,于是八爪鱼就可以循环的打开该页面上的每一个链接了。

QQ截图20170227142647 QQ截图20170227142656

第六步:完成了上一步之后,就会自动跳转到商品链接页面,于是我们可以开始抓取数据了。点击页面上一些常用的数据,例如商品名称、商品价格等,然后选择【抓取这个元素的文本】,于是,该文本就加入了字段队列。在抓取了几项之后,我们可以修改默认的字段名,以方便我们的理解。QQ截图20170227150315 QQ截图20170227150347

如果要抓取商品图片的话,我们就要用另外一种方法。首先,我们找一下商品图片所在的层级,如下图所示,一整片蓝色区域覆盖的位置就是该图片所处于的层级,右键,在跳出的对话框中选择【抓取这个元素的OuterHtml】。在这段Html的代码中,我们可以轻易的找到商品图片的地址。

QQ截图20170227150402 QQ截图20170227150443

点击字段下方的“小齿轮”,也就是【自定义数据字段】,点击【添加】,接着选择【格式化数据】,再选择【正则表达式匹配】

QQ截图20170227150457 QQ截图20170227150509 QQ截图20170227150534

这里少截了一张图,在选择【正则表达式匹配】之后,弹出来的对话框中左下方有一行红字【……试试正则表达式工具】,点击,进入正则表达式工具,找到图片的url,然后设定开始和结束,设置完成之后,依次点击【生成】-【匹配】-【应用】

QQ截图20170227152324

如果我们需要直接下载或打开图片的话,刚刚采集到的url是无法直接打开的,所以我们这里要用到【替换】。在完成上一步之后,再点击一次【添加】,然后在任务框中选择【替换】,把“//”替换成“http://”。

QQ截图20170227152405 QQ截图20170227152426 QQ截图20170227152513

第七步:最顶部的数据采集完了,我们还需要采集一些藏在下一级页面的数据,由于京东这里的数据位置是不固定的,例如出版社这个选项,在某件商品中排第一位,在另外一个商品中就可能排在别的位置,所以不能通过固定位置来提取数据。这里还是用到刚刚抓取图片的方法,从Html代码中找到我们需要的信息。

QQ截图20170227152623 QQ截图20170227152640 QQ截图20170227153345

检查一下我们需要的字段是否齐全,检查完毕就可以点击下一步了。

QQ截图20170227153529

由于我使用的是免费版,相较正式版少了一些功能,所以在【设置执行计划】这里没有太多能更改的地方。再在下一步中选择【启动单机采集】

QQ截图20170227153637

QQ截图20170227155647

成功采集到京东页面上指定关键词的商品数据,接下来怎么用就看你的啦。

QQ截图20170227155731

软弱的人才需要鸡汤加持

是的,我的朋友圈时不时就转发鸡汤,更甚,我自己还偶尔写写鸡汤。

可能在独立份子看来,我这样的鸡汤王傻到原地爆炸,简直是朋友圈的一股泥石流。毕竟他们不需要太多的意志,要么是光凭天分就可以左右人间的高水平选手,要么是家境殷实无需自虐的享乐人间仙,再或是本身无欲无求的冷淡者……这些人在看到鸡汤的时候可能,心里的态度大抵四个字——妈的智障。

回顾我的成长史,大抵我这么爱喝鸡汤,也是和从小异地上学有关。爸妈在上海工作,我一出生就在上海,念上海的幼儿园,小学,初中。大部分人比较了解的是,被父母抛下在原籍的留守儿童的生活——黑洞洞的屋子里一双渴望学习的眼睛。但大部分人一定没了解过像我这样在父母身边一同漂泊的子女,我不苦于生活,但确确实实苦于内心。

小学的时候我是中队长,比较听话,很快就成了班主任的“得力助手”,通俗的说,就是跑腿。我送过作业,开过门,还给班主任的女儿送过牛奶、外套。映像最深的一次,班主任大概是习惯了,直接用上海话对我说,“帮我把钥匙拿来”。那时候的我只能听懂一部分上海话,对钥匙这个词非常陌生,在原地愣了很久,不知所措。过了几秒,我小心翼翼的问,“yaosi”是什么,她差不多是翻了个白眼,用普通话字正腔圆的说了一遍,钥匙。于是我带着羞辱和几分难过,悻悻的跑去办公室帮她拿来钥匙。那一年,我8岁。

之后我加大力度看上海话节目,包括那时候的红茶坊,老娘舅,开心公寓,每一集我都不落,光凭着这样,我就做到了理解无障碍的程度。但是我不想说,我不说福建方言,也不说上海话,因为我对这两个地方,都没有归属感。我从不认为和哪一边的人说一样的腔调,就能成为哪一边的人了。我只能是我自己,一个落地无根的人。

三年级的时候秋游,去东方绿洲,攀攀爬爬很有意思,我本身比较大大咧咧,胆子又大,在大部分女生都嘤嘤躲在一旁不愿攀爬的对比下,显得格外“奇葩”。路过班主任和副班主任身边,听到她们用上海话对话。“这小姑娘蛮厉害的嘛 ,这么高都敢爬的啦”“她家里是外地的呀,没玩过,大力玩才能玩回本”我没敢回头看,但是心里已经失落了一大截。她们可能以为,外地小孩都听不懂上海话吧。

爸妈从小不管我,做生意很忙,我也谅解,不吵不闹。过了小学一年级,他们就再也没看过我的作业本了。因为嫌梳辫子麻烦,妈妈让我留短发,我也没有抵抗。一年级的第二个学期,我就会背起有我三分之一个人高的书包,自己坐公交车去上学了。某天早上下雨,拥挤的车厢内氧气稀薄,我突然缺氧,快要昏厥过去,一屁股突兀的坐在人群中间,旁边的阿姨看不下去,把我拉扯到自己位子上休息。下车之后,我解开红领巾就哇哇大哭,好难受啊,真的难受。

“一个人在童年时最缺少什么,他就会在成年之后越想要得到什么”,多年之后我看到这句话,第一反应,那我应该是最缺爱吧。只要别人对我有一点好,我就恨不得十倍百倍的奉还,也就是这样才容易被渣男骗到,被同伴戏称是“渣男收割机”。如果以后我有女儿,我一定会好好爱她,让她明白,其实爱,不是那么稀有的东西,你回过头,妈妈就能给你。

大概我10岁的时候,家里境况好起来了,全款在上海买了套商品房。再之后的十几年里,买了店铺,买了车子,买了别墅……可我依旧自卑。我有个哥哥,所以我知道这些都不是我的——福建人受传统观念影响,财产传男不传女。哥哥他大专毕业之后工作一年嫌累便不愿工作,回家啃老。但是我不能,我知道,如果自己不努力,不仅可能要被强迫去嫁给自己不喜欢的人,还可能一无所有。所以我总是像打了鸡血一样,在各种活动里披荆斩棘,不甘人后,计较输赢,分数不如我所想我就会自责和难过很久。我在别人看来很折腾的模式下度过一天又一天,从每一个小小的成就感中找到自我价值的证明。

所以回到主题,到底什么样的人需要常常给自己灌鸡汤呢?没错,就是我这样软弱的人啊。当一个人的能力无法满足他的欲望,戾气就会不请自来。于是,他们只能不断的在“打鸡血——失败——懊悔——打鸡血”这样的循环中,庸庸碌碌度过一生了。鸡汤的作用,就是一巴掌给你打醒,底子不如人,家境不如人,智商不如人,还想过得更好?不好意思,除了做梦,你只能乖乖努力了。接着转发,评论上两句认同的话,再关掉手机,干正事儿去。恭喜,原文作者得到了一次不错的推广。

是的,这样的人看起来傻毙了,我也经常回过头来嘲笑自己,然后一条条的删动态。然而,每一个过去的我,每一个卯足了劲儿傻逼极了的我,都是让我坚持走到现在的,珍贵的回忆。今后的我,恐怕还是要像个智障一样,边喝鸡汤边去奋斗了。撞墙很可怕,但是没头破血流过,我怎么知道,这里不能撞呢。

最后还是写了一篇没有重点的流水账,也罢,开心就好。

《自控力》:知道自己为何失控,才能自控

大概是在三月份的时候,加入了熊猫书院计划。计划内容为,十个月,通过卡片式阅读,看书,一个月4本,7月份正式开始。第一本书就是今天的主角——《自控力》。其实说起来,这个计划本身意义不大,因为写卡片的人事带着自己的理解,难免会有偏差,但是可以起到一个大致的引导。比如,读《自控力》卡片的时候,我就隐约觉得这本书不错,所以决心去看整本。但是第三本书,《精进》,光看卡片,给我的感觉就是无脑成功学励志鸡汤书,于是我就不会选择去看这本书。而且这本书,还是目前唯一一本,熊猫书院计划策划方发了通知,表示和出版社沟通,说是自身不盈利,卖实体书给学员……抱歉,这样的俗鸡汤我没有很想收藏。

我把《自控力》作为睡前读物和偶尔出门时地铁上的时间消遣,花了两个星期慢慢悠悠的看完了,自我感觉比看卡片时受益提高了许多。卡片是把精华归纳,告诉你,科学研究表明的结论是如何,但是却没有告诉你这个结论具体是怎么来的,所以作为一个卡片的读者,你所能理解的这本书内容就是,哦,好,我知道了,但是我可能不一定会这么做。回到书本,其实这是一本论述方法很有趣的书,一开始,作者要读者想象自己身处大草原,被剑齿虎穷追不舍,由此进入到探索内心真实感受的旅程,这一路上,有抗拒甜甜圈的节食者,有渴望戒烟的烟民,还有自控力胜于大学生的黑猩猩和渴望被电击的小白鼠……一个接一个的自控力实验,会让你反思,自己平时某一些做法,很大程度上其实也是因为文中类似的原因。情不自禁我也开始留意起商家为了促进消费者多巴胺的小把戏,借此成功控制了自己的购买欲(时常我会忍不住为了赠品买一点没用的东西回家)。我会在焦躁的时候开始学着做深呼吸或者冥想,面对诱惑,我也渐渐明白了,放远一点,再等十分钟。

我一直深知自己不是一个拥有强自控力的人,爱哭爱笑,喜怒溢于言表,更糟糕的是,偶尔会忍不住对身边亲近的人发脾气。我会在减肥期间,给自己阶段性奖励,结果又开始暴饮暴食。认真工作的时候,总是忍不住看手机的消息。也是深知自己的缺点,才更想通过做些什么来改变现状。虽说极度自控会带来反效果,自控力也会消耗,那么就全力把自控的精神,带去效率最高的地方吧www

写在《软件开发管理》之后

Final Presentation,最后一个问题是景新问的:
“为什么你们能提前完成”
我抖机灵抢着回答了一句:
“因为我们有天总呀”
但是事后,我总是不经意间想起这段对话,有些反思,所以才有了今天这篇日志。

天总这位老司机(雾)的指引的确是至关重要的,但是如果其他组员没有一起努力的心,放任的去抱天总大腿,我想剧情大概就回到了上学期数据库课设的状态:天总一个人码完了所有的代码,剩下三个人在努力配置完环境后稀里糊涂去答辩,结果老师直接让当场加功能,结果可想而知。

这次的分组我依然是粘着天总,顺带着吃饭小分队,有了一次愉快的合作。全组里只有我一个人是不写项目代码的(测试那一点点太少了不算),出于对技术的敬仰,不写代码的我总想着要多做一点,杂活没人做的时候尽量主动一点自己做了,毕竟其他三个人写代码很辛苦,能多分担一点是一点。后来发现写报告也不是那么轻松的,全英文,从找模板开始,凭着Google的快速检索能力,我们愉快的找到了模板,开始套,看不懂就翻译,不会表达就翻译,直译不通畅?自己加个定从状从修正修正。报告里总是有很多名词要解释,定从就上来了。想要强调方法的重要性?Only倒桩句。所以这次考六级,写作文的时候基本无停顿,我真的是太爱写定语从句了。。。总想一言不合就上which解释解释,这样不好,不好。

这次我们组的任务应该是所有组里面最重的一个,我们是唯一一个要完成两个产品的组,一个Web前端,一个中间件,同时我们还咨询过老师,我们需要为这两个产品分别写两份报告。没错,也就是说,别的组交给老师的(具体指发到老师邮箱,不包括TFS中内容)只上传一份Detail Design,一份Test Plan,一份Summary Report,但是这些,对于我们组来说,都是乘以二来上交的。

如我在Presentation里Key Meeting那页所表述的那样,面对面的讨论是非常重要的,这能很快的确立产品目标,同时给团队打鸡血,时刻意识到Task的重要性。第0次会议是在3月14号,我们确认了分工和合作形式,天总给我们大致介绍了一下几个技术概念,让我们自己去找资料了解。第1次会议是在3月30号,我们设计出了Web前端的UI草图,确认了前端的功能和大致的操作步骤,同时确认了时间表,顺便决定了第一次Presentation的内容。在5月26号,我们讨论如何展开测试,前端和中间件这时候基本完成对接。5月29号,我们号召问答系统大组里的其他组参加对接会议,提前发布了对接文档,但是可能他们的进度还没有到对接,所以本来是交流&答疑会议,在演示了一遍如何用我们自己的假后端接上中间件后,草草收场。最后一次会议是6月6号,我们决定了一次Presentation的形式和内容。6月21日,我和曹嘉玲先后完成了两份Summary Report。至此,项目正式结束。

时刻关注时间表是很重要的。团队里的大家会主动的在群里互相询问进度,我把时间表记在日程本上,到了差不多日期大概会问一问,然后催一催,大家基本就启动计划开始做。这也是保证进度很重要的一步,自觉性和相互督促。

天总对我们的要求很高,前端组被找出的Bug和设计缺陷被天总狠狠训了一顿。我们在知识和阅历上的确是赶不上天总,但是态度要端正,犯错没关系,但是要改。

做中间件测试的时候,我和总裁一时半会儿不懂到底要怎么测并发,一脸懵逼。天总坚持要测,我和总裁就哭天喊地的堕入了黑暗的几天。那几天我们俩的对话基本上就是:

“有想法吗?”“没有。。。”

“你装好了吗?”“没有。。。”

“怎么我的和你不一样。。。”“不知道啊。。。”

“你试一下”“好好好”

“你看看这个”“好好好”

“你能运行吗,我的电脑跑不动”“我试试”

“怎么办啊。。。”“我也不知道。。。”

在不断失败和反复爬起来的试错之后,我们配好了环境,装上了PyCharm,终于知道怎么接假后端了,会改假后端里的代码了。然后我们经历了非常蠢的一步:开了6个前端,3个后端,通过中间件的连接,同时工作,在每个前端都发了至少3000个POST之后,我们记录数据,开心的拿给天总看——

“天总天总!你看这样可以吗!”“至少开300个前端吧,不然怎么叫高并发”“怕电脑跑不动。。”“。。。开多线程,每个线程里发HTTP POST”

“怎么办,你会吗”“不会啊。。。”“那我还是再看看测试工具。。。”“好。。。”

临睡前,我又返回聊天记录看天总说的那句话,脑子突然开窍了一样,欢天喜地的跑去跟总裁说,查一下JAVA里怎么发HTTP POST,这学期做操作系统课设的时候我学的JAVA多线程,还是会写的!然后我们马上就搜到了代码,开始拼装,总裁改HTTP POST,我写线程,第二天一大早,我们就成功完成了并发的测试。这种历经磨难之后的获得的成功,着实是一个非常棒的人生体验。当时我们的心情大概是:

“好开心啊我好想叫出来!”“叫叫叫!”“不行,室友还在。。。”

又牢骚了一大段,不知道各位看客是否能理解这其中的心情。总之我要表述的是,不会没关系,但是要去尝试,万一会了呢!所以不到最后关头,绝对不要说放弃。

在观看别的组做Presentation的时候,看到大家对于测试这块做得都非常薄弱,测并发了吗?没有。测安全性了吗?没有。那你们测了什么?能跑通就好。

“????”

诚如老师最后总结的那样,社会上的贫富差距很大,但是没想到一个课堂里学生的水平差距也那么大。所以有的时候,没钱没出息,不要怪社会,那是你自己付出的精力不够,总有比你认真努力的人,会踩着你的尸体往上走。(最后一句是我的臆想)

总而言之,这门课给我的收获很大,推荐学弟学妹们下学期踊跃抢课(微笑)

《挪威的森林》——论如何成为一只泰迪属性男主

我本来想起一个很文艺范的名字,但是,恕我肤浅…

早有耳闻这本书,提不起兴趣去看,直到某天在网易云音乐上,一个歌单的简介里写着:

“最最喜欢你,绿子。”
“什么程度?”
“像喜欢春天的熊一样。”
“春天的熊?”绿子再次扬起脸,“什么春天的熊?”
“春天的原野里,你一个人正走着,对面走来一只可爱的小熊,浑身的毛活像天鹅绒,眼睛圆鼓鼓的。它这么对你说到:‘你好,小姐,和我一块打滚玩好么?’接着,你就和小熊抱在一起,顺着长满三叶草的山坡咕噜咕噜滚下去,整整玩了一大天。你说棒不棒?”
“太棒了。”
“我就这么喜欢你。”

看着这种描述,少女心都化了(嗯?

于是,找了本电子书,三天看掉了。

看的经过大概是:怎么死了?—>怎么就滚床单了?—>怎么又死了?—>干嘛滚床单?—>啥?你在说啥?—>你们干嘛???咦????

恕我肤浅。。。

男主是一个脾气性格比较超然于世外的人,所有跟他认真相处过的人,不论性别,基本都会喜欢他(不一定是爱情那种喜欢)。所以一开始的木月喜欢他,在自杀前还跟他相约一次台球,却没去见自己青梅竹马的女朋友直子。他们三个人在高中时代总是一起玩,恕我直言,这是一个诡异的三角。

直子和木月是一类人,他们都活在自己的世界里,有些偏激。木月在十七岁选择了死亡,直子就算自己活下来,也无法独活,因为他们的关系实在是太紧密了,注定直子会追随木月的步伐。所以虽然直子在生日当晚会湿润,但是她并没有真正的去爱男主。她人生所有片段里都是木月的影子,就算有男主代替了木月的位置,但是那也不是木月。

绿子是个很灵动的姑娘,她可以大庭广众说黄色笑话,拉男主去看情色电影,但是也可以自己承担家务事,面对亲人的离世,她早已能够处理的熟练。在她看似俏皮可人的外表下,其实深藏着一刻渴望被爱的心。也许是自己总是在做道义上理所应当的付出,却没有感受过真正的爱。我不知道男主是什么时候爱上绿子的,因为我总是觉得他心里一直挂念着直子,绿子对他来说好像只是现实世界的一瞥。(嗯,我心里在骂他渣)

总得来说,我更喜欢绿子。似乎男生都会偏好直子一点,几个描写直子的片段都太美了,比如疗养院那段,月光下,男主不知道自己到底是做梦还是醒着,就看到直子站在窗边,接下来的画面就不可描述了。(???

看完之后,其实我对这本书好感度一般,直到我看了电影版——然后我的心情就如右边括号(。。。)

直子的脸这么大,没有美感。。。绿子的脸这么僵,是不是玻尿酸。。。为什么直子开始吼叫了啊,像个疯子一样Orz。。。人家是抑郁不是精神病啊救救我QAQ

去豆瓣读书逛了一圈,大家似乎都很有深度的样子。。。我可能需要反思。

愿随着时光的流逝,哪一天有个瞬间,我被击中,回想起书中的某一幕,然后再如雷灌顶的醒悟过来。

所以是啥时候呢?

你猜呀。

健身小白养成记

从去年十月份开始接触KEEP,再到今年三月份开始坚持每天运动,不知不觉已经过去三个月了,期间也动摇过,咬牙忍痛熬过,想写个短篇纪念一下这三个月的健身历程。

首先是运动装备:

一双舒适的跑鞋是必要的,特别打算跑长距离的,舒适是第一生产力。

对于女生,运动内衣是重中之重,我在知乎上也探索了一段时间,很多人推荐Moving Comfort Juno,价格算是比较高的,我也纠结了一段时间,最后还是咬牙买了。好在,听前辈的话总是没错的,一件运动内衣的好坏不仅影响舒适度,还可能影响自己的身体(比如下垂。。。)。现在在纠结的是,一直穿同一件,已经有了明显的老化,势必需要再入一件(摸摸钱包,委屈的哭了起来

运动服装的话,舒适为主,不要纯棉,纯棉吸汗之后会变得很重,而且有捂汗的感觉。要买速干衣,这样身上的汗很快就可以排掉,不影响长距离跑步。

既然是走低成本路线,寝室里的装备也不能少啦,必备的是健身垫,便宜,好使。我不推荐新手直接购入瑜伽垫,因为专业瑜伽垫很贵,除非真的是专门练瑜伽,不然一块厚实的健身垫,垫在地上,有效防止膝盖等关节的损伤,enough。

进阶之后需要:哑铃、弹力带、跳绳。具体练到再说。

运动的主要节奏还是跟着KEEP走。它主要功能还是提供一些现有的课程,协助训练。里面的一些HIIT课程,有效提升心率,加速燃脂效果。但是对于女生来说,负面影响是,手臂、肩膀和大腿的肌肉也会长得比较快,这之中涉及到的动作有:深蹲、俯卧撑。所以我的策略是,感受到身体肌肉含量过多,就果断开始长跑计划。因为我已经练到了十公里的水平,所以纯长跑我都是跑满十公里。长跑非常好的一点是,超过40分钟就开始消耗肌肉,配合全身的拉伸,第二天醒来之后就会明显感觉身体轻盈很多,屡试不爽。所以我现在的感觉是,日常的KEEP课程表帮助我打造核心之类的内部肌肉,而跑步这样的长时间有氧运动帮助我消除浮游在身体表面的脂肪,两者配合,刷脂一级棒~

对于饮食,我坚持了两个月的不吃晚饭,到了后期特别痛苦,已经不仅是想吃晚饭,而是希望每一顿都暴饮暴食。再加上宅在实验室让我的生活作息变得非常懒,食堂去的比较少,外卖高油高脂高盐,危害是很大的。在看了硬派健身的那本新书之后,我明白了不能再采取低摄入的策略,吃要讲道理的吃,不然伤害的基础代谢率真的很难回来。我曾经一度是1300+的代谢率,现在掉到1200+,无论我怎么增肌,都很难看到基础代谢率的提升。

最后一点是关于心理。

很多人不能坚持都是源自心魔。今天觉得不太对,想要运动了,好,运动。第二天,累到了,又不想动了,躺在床上刷手机无所事事又度过一点,然后再发条状态:要开始减肥啦!

不得不承认,这在我之前人生的20年里也循环了多次。但是现在我的改变,我认为还是应该归功于“习惯”二字。

刚开始的时候,我每次训练都会截图发在社交网络上,提醒自己,也算是做个纪念。因为受到了一些人的鼓舞,所以还是很开心的继续发力。不过更重要的一点还是因为被好基友损了,心里有气,每次锻炼的时候嘲讽我的话语就会在脑海里浮现。虽然我是个大度的人,不会明着记仇,但是心里会一直记着,就靠着这奇怪的赌气,我竟然也度过了养成习惯的那21天,逐渐把每天的锻炼时间融入于生活。

后来我在知乎分享减肥经验,意外收获了1.5k的赞,非常的惊喜。同时,在与知乎er的各种交流中,也更坚定了我坚持下去的决心,日复一日,竟然,也成瘾啦~

经历这三个月,也对心智的成长有了很大的帮助。健身时候的枯燥乏味都忍下来了,对于读书和工作,好像我也没有以前那么浮躁了。我会在跑步的时候,反思最近一些行为,那些事情是让我后悔的,那些事情是让我骄傲的,好像脑子里每次都能有一整本小说似的。所以我突然就理解了那时候大美玲在奇葩说里说的话,现代人生活节奏那么忙,那么容易被各种冗余社交影响,真的会缺少和自己对话的机会。那么,健身的时候,就是跟自己对话的好时机。

暂时就这样啦,今晚练了背有点酸,先躺着去~

纪念:一波N折的博客搬家!

敲下回车看到熟悉界面的那一瞬间,真的是眼泪都要掉下来了QAQ

前段时间博客不能访问了,想着可能是主机商(263云)日常当机,就没有太在意。直到好像很久,很久,很久…都一直打开不了博客的时候,我意识到,是真的上不去了。。。

我都懒得去联系原主机商,因为他们主机的质量真的太差了,当机好像也不是什么太奇怪的事情(冷静如我),所以我决定直接搬家了,用天总推荐的主机壳。

可是其实并不能这么帅气的说走就走,当我想要去把数据备份回来转移的时候,我发现主机的DA后台进不去了,也就是说,我无法备份出我的数据。

接着我去联系了客服,客服也很冷静,此乃第一波:

  • 我 :你好,我的站已经很久很久都上不去了,到底啥毛病
  • 客服 :是这个机器的链接有问题,等晚上你联系一下这个QQ备份一下程序给你换个服务器吧
  • 我 :好的。
  • ——晚上
  • 我 :下午的客服让我来联系你换服务器
  • 客服 :IP给我
  • 我 :好
  • 我 :备份好了吗?
  • 我 :????

是的,晚上的客服要完我的主机IP地址,就消失了。。。

第二天我非常生气,就让老王帮我去要备份,因为我怕我去要的话会气到颤抖,对方说会在当天帮我备份出来,但是失败了。

第三天:

  • 我:你好,昨天我拖朋友来找你们要我网站的备份,请问现在备份好了吗?
  • 客服:还没
  • 我:我想问一下现在是怎么样的一个情况
  • 客服:现在在和机房联系让他们把数据给迁移到别的服务器上面,到时候下载备份
  • 我:那和机房联系上了吗?为什么到现在还没有好呀
  • 客服:她们也给我说尽快处理,我这也在等消息
  • 我:那你能大概预判一下吗,现在我这儿因为要用网站,所以挺着急的
  • 客服:大概预测2天左右
  • 我:那好吧,明天我再来要备份
  • 客服:这个并不是我给你拖延时间,解决方法已经找到,就等机房给转移一下了,希望您能谅解

我不谅解也没办法啊。。。总不能朝你吐瓜子壳儿吧。。。(并不

第四天:终于拿到备份了!然后我愉快的到主机壳买了主机,开始搬家工作。

然而要是有这么顺利就好了(望天)搬家过程中我发现,他们给我发的数据库文件我没有办法用phpMyAdmin导入。我去联系了主机壳的客服,他们看了一下表示里面只有frm格式的文件,没有.myd表数据和.myi索引文件,这样是无法导入的。所以我又回去找263云的客服:

  • 我:你好,我前几天来要过网站的备份,现在打算用phpmyadmin导入数据库上去,可是一直传不上去,会乱码。我查了一下,需要.SQL格式的数据库文件才行,我想问一下能备份出来吗,我这边依旧打不开后台,很难办
  • 我:又不回我了
  • 我:上次也是,晚上找你们都不回我,哼
  • 客服:我吃完饭 等等先
  • 我:。。。行,你先吃啊

我一直等到10点,对面客服都没有再回复我。那一刻,我明白了,晚上的客服,可能,是临时工。

于是等到第五天,我继续找客服交涉:

  • 我:在嘛在嘛
  • 我:我有问题我有问题
  • 客服:说
  • 我:就是原来你们不是给了我个备份吗。。。数据库的备份不能用。。要.SQL格式的才行。。。
  • 客服:这个你直接让他给你导入数据库里面就是
  • 我:他试过了,就是导不进去。。。
  • 客服:放到你的数据库,data里面,那个不是导入的,是直接放进去就行
  • 我:啊?
  • 客服:我发你的不是数据库,是所有的表,SQL比较麻烦
  • 客服:你现在放在哪里呢,也是虚拟空间吗
  • 我:对啊。。
  • 客服:要是虚拟空间的话你门自己操作不了,联系一下空间商,让他们帮忙放进去
  • 我:那我再去问问看,谢谢
  • 客服:我这边还没给你换服务器吧
  • 我:是啊。。。我后台还是进不去,这样就很尴尬
  • 客服:我给你换个服务器,换完服务器还是用我们这边的就行。

首先,作为一个小白,我真没注意到他发给我不是数据库是表。接着,他好像两天前就说要给我换服务器的啊,为啥今天才想起来没给我换啊。。。(对称懵逼.jpg)

总之还是给我换好了服务器,并且他说已经帮我把备份的数据库放进去了,我一脸智障的跟他说完谢谢就自己找数据库去了。

进到后台,phpMyAdmin。。。

为什么。。。我的数据库。。。

还是空的呢。。。

这时候,作为智障小白的我,点到了另外一个数据库,名为information_schema。。。

我不知道这个是干嘛的,只是单纯的,看到的这里面有表,我天真的认为这是客服帮我放进去的数据,我开心的导出了,非常兴奋的去尝试导入主机壳那边的数据库,失败之后,还非常激动的去联系了主机壳的客服让他们帮忙。。。

然后。。。他们告诉我。。。

“您好,我这边只看到了information_schema.sql,这个是mysql自身的信息。需要导出网站使用的数据库。”

。。。

当天晚上,我又去找263的客服了:

  • 我:下午你说帮我把备份的数据库放进去了,可是我自己去看的时候还是空的呀
  • 客服:放进去了,里面不是有好多表
  • 我:没有,直接显示没有在数据库中找到表
  • 客服:不对呀,放进去了呢
  • 我:可真的没有嘛,我这里看都是空的
  • 我:不然我应该能看到很多wp开头的表才对
  • 我:你又不回我了。。是不是又去吃饭啊
  • 我:下午的人都会回我的,哼

我又明白了一件事。

激将法都不会激出晚上的客服。

所以,他应该,真的是,临时工。

我等到今天上午才又去联系了263云的客服:

  • 我:昨天你说帮我把数据库放进去了。。。可是我自己去看数据库的时候,nutllwhy这个数据库里还是空的呀。。那些wp的表也都不在里面,为什么呀
  • 客服:(截了一张从他那边看,所有表都已经放进去的截图)好奇怪
  • 我:是吧我也觉得很奇怪。。。为什么从phpMyAdmin里面看数据库就是空的
  • 客服:你把数据库文件发我一下,我换到别的服务器试试
  • 客服:我去看了一下初始的空间的数据库和你刚才给我那个是一样的,我去那边又对比了一下,大小都一样,应该是没有内容
  • 我:。。。那也就是,其实帮我备份出来的就是个空的?
  • 客服:应该不是备份的事,我去看的最原始的就是这样的
  • 我:现在的服务器已经不是原来的服务器了,那数据库还是一样的吗?
  • 客服:是的
  • 我:我也用了快半年这个服务器呀,文章都起码10篇了,不该是空的呀。。。
  • 客服:是啊,我也奇怪了,如果说sql导出可能有指令错误,这个去复制黏贴不可能会少东西
  • 我:不不不,现在的问题不是少东西,是从phpMyAdmin里面看的话,nutllwhy这个数据库,一个表都没有啊。。。
  • 客服:我看了一下,确实是没备份错,和主机上的数据库是一样,这个没有必要说假的,如果备份不一样的话我们也不会发给你
  • 我:你现在看的主机上的数据库有没有可能不是原来的数据库啊。。。毕竟换过主机了,不然nutllwhy这个数据库里面应该是有东西的才对,一个表都没有不正常啊,所以说明了数据库也一起换了?虽然从你那边看是有东西的。。。但是这个也是后来的客服从后台帮我放进去的,也就是说原来没有?
  • 客服:我等下问问技术这边

这个时候我基本上是心如死灰,觉得基本上我的数据找不回来了。虽然写的文章很烂也没什么水准,但也好歹是我从二月份到现在断断续续的记录啊QAQ

我安慰安慰自己,这个结果早就准备,而且我这两个月的学习记录都有写在为知笔记里,所以,要优雅,不要方。

可是还是很难过啊QAQ!!!!!!!!!!!!!!!!!!!!!!

————————————————————————————

终于。。。六个小时后,客服给我发来一份SQL文件,这才是我真的数据库备份。。。

导入。

成功。

大呼一口气。。。

接下来又能愉快的写文章了呢!