CF号出租用的自动上号软件的登入页面源代码下载代码怎么做出来的?就是那个登入页面源代码下载javascript:;代码CDKEY,不是兑换CDKEY

&p&我大二半个学期就把算导主要的算法全写了一遍
&a href=&///?target=https%3A///JimChengLin/JimCollection& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - JimChengLin/JimCollection: Algorithms and Other Things&i class=&icon-external&&&/i&&/a&
但每次无论是拿我的AsyncDB还是拿我算导的代码, 好像所有人都不知道这有什么意义?&/p&&p&初入社会, 去了一家杭州做征信的企业.
一开始, 所有人都当我是菜鸟. 之后, 3个月从零开始用React Native顺利写完了一个还算复杂的App并上架. 这个我认为最简单的任务, 反而让很多人很厉害.&/p&&p&再然后, 我辞职了. 薪资方面有些矛盾, 我在那家公司干了4个月, 总共拿到手的钱没到1万. &/p&&p&在那边, 我算法上有两个成就.
第一, 用Myers算法重写了文档比较逻辑. 第二, 设计了带权重的Pagerank算法(没来得及实装).&/p&&p&我有时候也慢慢能体会到, 其实程序员在国内和那些推销保险的临时工差不多. 只是个螺丝钉而已. 你走了, 机器还是照样转. 大部分的互联网企业还是以运营为核心的, 并不真的怎么重视技术. 你文档比较速度快个50%, 有什么意义呢?&/p&&p&不过, 我写程序主要还是为了兴趣多一点, 希望不忘初心!&/p&&p&最近在写一个正则引擎加强版! 技术人员总要有点骄傲(傲娇)吧!&/p&
我大二半个学期就把算导主要的算法全写了一遍
但每次无论是拿我的AsyncDB还是拿我算导的代码, 好像所有人都不知道这有什么意义?初入社会, 去了一家杭州做征信的企业.
一开始, 所有人都当…
&img src=&/v2-58b16cd81f217e41bea9_b.jpg& data-rawwidth=&931& data-rawheight=&324& class=&origin_image zh-lightbox-thumb& width=&931& data-original=&/v2-58b16cd81f217e41bea9_r.jpg&&&p&&b&注意:网站已有变化,但后续没有再跟进,代码需要自行调整。&/b&&/p&&p&&b&本文首发于审判研究,内容略有不同。&/b&&/p&&p&&b&引:&/b&&/p&&p&曾听一个理科同学说他同事的逸事。这位同事对占用时间超过5秒,不必用脑又必须做的事情,都会写个小程序替他解决。工作邮件来往就不用说了,连在讨论项目的工作群里,也是自动处理。检测到某人说话、内容与自己工作相关、又或是有人@了自己之类后,连接一个语句库自动回复。&/p&&p&听过之后甚是羡慕,如果我们司法人员也会一点编程技巧,将可以节省大量时间。比方说把填入办案系统、摘录证据等事交给电脑,既可以节省时间,又可以减少错误,还可以省下时间好好分析下证据材料和法律关系。&/p&&p&带着对程序员的艳羡,再加上各种机缘巧合,我开始了自己的Python之旅。现在稍微尝到了点编程的好处,比方说我们工作中要查询很多法律文件和文书,如果只是一两份我们在网页上直接下载就可以,但如果有很多份需要操作,将很不方面。而爬虫功能,可以很方便地替我们实现这一需求,而且还可以顺带删除掉各种广告和无关内容。&/p&&p&下面以法律人都会接触到的裁判文书网为例,简单介绍下爬虫功能的实现。&/p&&p&&b&正文:&/b&&/p&&p&&b&一、准备工作&/b&&/p&&p&开始前,先简单介绍下Python和一些基础问题。&/p&&p&Python是一种语法简单、模块多的电脑语言,可以很方便地实现很多功能;而且不用去操心具体如何实现,只要找到合适的模块,告诉它去做就可以,很适合非程序员入手。比如说从网上抓取数据,如果用别的语言来写程序,要很多行,但如果用Python,可以几行就解决问题。&/p&&p&再选择Python之后,有语言版本和模块两个问题。语言版本方面,主要有2.7和3两种。2.7的优势是有历史“悠久”,可以用的模块多;3的优势是它是未来的发展方向,而且大多数我们用得上的模块都已经支持3,并且3对中文的支持要好得多。所以,个人建议用直接上3。当然,这些对我们外行人来说并不是很重要,两者都差不多,能用就行,不要卷入程序员之间的口水战。&/p&&p&除此之外就是模块问题。模块就像日常工作中的笔墨纸砚之类的工具,它省去我们自己去“造工具”的时间。这里推荐Anaconda,它像普通软件一样,大家只要在Google一下就它的官方网址进行下载安装,你的电脑就可以用Python一样进行编程了。我们用得上的模块,它都已经一起打包安装,省去了我们去找模块、装模块和处理模块之间兼容性的时间,可以说是工具的工具。&/p&&p&总结一下,准备工作就是一句话,搜索Anaconda,下载,安装,DONE!&/p&&p&&b&二、上手爬虫&/b&&/p&&p&互联网是网,而在网上替我们搜索资料的程序,就是爬虫。&/p&&p&我们要动手的裁判文书网跟一般的网站复杂一点,无法直接用网址进行抓取。因此,我们首先弄明白两个问题,一是网上显示的文书内容是哪发过来的,二是网站要满足什么条件才会向我们发送这些内容。&/p&&p&&b&1.
跟踪网页&/b&&/p&&img src=&/v2-c36d5b6c4dde0ecddad133_b.png& data-rawwidth=&573& data-rawheight=&39& class=&origin_image zh-lightbox-thumb& width=&573& data-original=&/v2-c36d5b6c4dde0ecddad133_r.png&&&p&直接搜索“执行”两个字,这是我们在浏览器上可以看到的网址,但直接抓不到内容,需要用软件网页进行跟踪。这个软件不用安装,无论是IE,还是Chrome,你按F12的话,这个软件都会蹦出来。下面以chrome为例。&br&&/p&&img src=&/v2-de237e0e61c925c12023ccab26887e8e_b.png& data-rawwidth=&569& data-rawheight=&312& class=&origin_image zh-lightbox-thumb& width=&569& data-original=&/v2-de237e0e61c925c12023ccab26887e8e_r.png&&&p&按F12后,右边就弹出了软件的界面。选中上面的network的大项,刷新下网页。浏览器与网站的所有交互内容,就出现在下面的name小项中,里面就藏着我们要的内容。在这个网页里,内容藏在划圈的Listcontent项下。&br&&/p&&p&我们选中Listcontent,从右边Headers的详情可以看到,请求方式是POST,而Request URL后跟着的,就是真正的内容请求地址。&/p&&p&下面我们解决第二个问题,我们要发送什么内容,这个网址才会返回我们需要的信息?同样在这个界面下,我们继续往下翻,可以看到Form Data内容(如下图)。&/p&&img src=&/v2-9e98b1fd6e3fb9fd4beb92_b.png& data-rawwidth=&423& data-rawheight=&427& class=&origin_image zh-lightbox-thumb& width=&423& data-original=&/v2-9e98b1fd6e3fb9fd4beb92_r.png&&&p&我们可以看到,信息内容分别是:搜索条件“全文检索:执行”,Index:1(第一页),Page:5(每页出现5个文书,最大值为20,我们可以直接在程序里设为20),order:法院层级(按法院层次来排序),最后一个参数是解码的,照抄即可。也就是说,我们给网页必发送的检索要求是:全文内容含有“执行”二字,如果有符合条件的按这个格式给网页发送内容,就可以取得我们想要的资料了。&/p&&p&&b&2.代码&/b&&/p&&p&知道用什么格式发送信息、发送到哪之后,就该写代码了。下面我们打开刚刚提到的软件Anaconda项下的Spyder。两者的关系就好比Anaconda是win系统,spyder是记事本。Spyder是负责写编码的工具。&/p&&img src=&/v2-e6c8c1da5d37e_b.png& data-rawwidth=&420& data-rawheight=&461& class=&content_image& width=&420&&&p&就会出现下面这个界面。&/p&&img src=&/v2-c1212eee240d5e738d697ee_b.png& data-rawwidth=&571& data-rawheight=&299& class=&origin_image zh-lightbox-thumb& width=&571& data-original=&/v2-c1212eee240d5e738d697ee_r.png&&&p&在左侧,我们就可以开始自己写代码了。在进入具体代码前针对初学者再啰嗦两句。&br&&/p&&ul&&li&l
一是心理问题。初学者一般有两个问题,1)会不由自主地想为什么这么写?这样写的“法理基础”是什么?这种问题是程序员中的精英考虑的,一般的程序员都没琢磨明白。我们非专业人员奉行的应该是拿来主义,能用就行。法律主业搞好了,还有兴趣再研究不迟。2)想搞懂一个例子里涉及的所有问题,这种钻究态度是好的,但在初上手时会成为你的障碍。学编程其实就是学语言,只不过是跟电脑说的语言。想想我们在初学一门外语时是怎么做的?背!所以,初学编程,最简单有效地办法是,我们先把代码一个字不差的,一行一行的自己敲进电脑里。敲完了,你就懂了。&br&&/li&&li&l
二是技术问题。也是两个:1)“#”后跟的是注释,用来给大家解释代码,无须输入电脑,输入了也会被电脑忽略掉,不影响程序运行。2)代码这东西,错一个地方电脑就不认,特别是符号不能错,格式不能错。①所有的符号,除了被英文单引号、双引号包起来的内容,都必须是英文输入法下的符号;②所有代码顶格写,但如果有从属关系,注意在空四个空格(下面要讲的代码涉及到一个while的循环语句就涉及这个问题,我会在代码里进一步解释)。如果有一句太长了可以回车,电脑看得懂,不影响程序运行。&br&&/li&&/ul&&p&现在开始上正菜,以下代码的作用是,搜索全文含有“执行”二字的案件,并将其时间、案号、案件名称提取出来放在excel表里。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#到&&&之前这一段是打开spyder的界面就会自动添加的内容,一般不用去动。
#这一句是告诉电脑解码方式是UTF-8码,我们可以简单地理解为可以在代码里加中文,建议每次编程都加上。
# -*- coding: utf-8 -*-
&&&)包起来的这一部分电脑也是忽略掉的,主要是给人看的部分,分别是代码首次编写时间和作者,属于可写可不写的部分。
Created on Sun Jul 24 23:11:55 2016
@author: 检
#这里是导入模块,以下模块分别用于抓取网页、数据处理保存、时间、正则表达式
import requests as req
import pandas as pd
import time
#这是刚才我们通过F12查找到的网页
url='http://wenshu./List/ListContent'
#这是页数、程序休息时间的定义和三个空的列表用来装筛选后的数据。
SleepNum = 3
#循环模块,因为有很多页,当小于这个数时,不断地传数据,相当于点下一页的功能。最后一句的意思是每执行一次,index加1,就是翻到下一页。具体页数也可以用变量实现。
while Index & 123:
#这是请求头,伪装成浏览器访问网站,以免被网站屏蔽
my_headers={'User-Agent':'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.95 Safari/537.36 Core/1.50.',}
#这一行就是我们搞定的搜索条件,可以按自己要求设置,比如:“法院名称:北京市人
民法院,案件类型:执行案件,裁判日期: TO ”。
#如果实在不会设置,可以在文书网上搜索好,再通过F12查看到的内容复制粘贴到代码中'Param':后即可。
data={'Param':'全文检索:执行', 'Index': Index,'Page':'20','Order':'裁判日期','Direction':'asc'}
#将网址、请求头、搜索条件等数据上传并取得内容
r=req.post(url, headers=my_headers, data = data)
#用 json解码取得的网页内容
raw=r.json()
#用正则表达式将我们需要的内容提取出来,正则表达式真的很有用,要想真正用好westlaw等数据库,这一关也得过
#大意是定义筛选标准,把(“裁判日期”:)后,(')前的内容截取出来。
pattern1 = re.compile('&裁判日期&:&(.*?)&', re.S)
date = re.findall(pattern1,raw)
pattern2 = re.compile('&案号&:&(.*?)&', re.S)
num = re.findall(pattern2,raw)
pattern3 = re.compile('&案件名称&:&(.*?)&', re.S)
title = re.findall(pattern3,raw)
#把筛选出的数据添加到开始的三个空列表里
dates+=date
titles+=title
#这一行是让程序休息,做事留点余地比较好。通过网页编码可知,文书网是有验证码功能的,如果你抓的太狠中招莫怪。
time.sleep(SleepNum)
Index += 1
#这里我们可以看到,从while开始到此,所有的代码都缩进了四个空格。这是因为要告诉电脑,这一段代码构成一个相对独立的组,当index小于123时,不断地从这个组第一句代码执行到最后一句代码,而不涉及到本文涉及的其他代码。
#这里代码又是顶格写。
#用pandas模块将筛选出的内容转成dataframe格式,并保存到Excel。
df=pd.DataFrame({'时间':dates,'案号':nums, '案件名称':titles})
df.to_excel('C:\\result.xlsx')
&/code&&/pre&&/div&&br&&p&好,工作结束,保存一下,点击软件界面上的绿色小三角形或者按F5运行下,过一会我们就会发现在C盘里安静地躺着一个名称为result的excel表,里面存放着我们想要的资料。以后我们都不用打开编程软件Spyder,把代码另存为放在桌面上,双击一下,它就会自动的按设定的搜索条件把相关的文书案号找好,保存为excel,不用再登陆那个响应缓慢的文书网了,是不是很方便?&/p&&p&如果只是想要结果的话,直接粘贴到Spyder左侧的框里就可以直接运行。(但是如果你看完本文后对编程想进一步学习的话,个人强烈不建议这样做。因为很多细节你不自己输入进去,是注意不到的。比方说刚提到的while语句,在回车下一行之前是有个“:”号,光看代码是很容易忽略掉的。当然,Spyder这个编程软件很智能,会替我们补全,但我们不能依赖机器对吧。)&/p&&p&&b&其他的补充:&/b&&/p&&p&首先,编程的益处很多。它可以提高我们工作的效率(像上文中的代码,运行2、3分钟,可以下载几千份的法律文书);而且因为编程很像教一个什么都不懂的小孩怎么做事,有一个前提没交代清楚,它就做不下去了,所以它的逻辑性很强,可以反哺法律工作,比方说分析法律关系时,编程的思维方式可以帮助我们意识到自己忽略掉的隐含前提。&/p&&p&其次,编程并不难。这种层次的编程,不用考虑机器怎么会明白我写的是什么意思这种问题,更像是在做游戏的高级设置选项,多数代码直接就是英文单词,可以看成是写一篇英文小作文。我们的困难主要在于不习惯,绝不是理解不了,多敲几遍代码就可以解决这个问题。&/p&&p&最后,如果这篇文章有幸激起了你学Python的兴趣,可以到&a href=&/?target=http%3A///wiki/958fa6d3a2e542c000& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这个网站&i class=&icon-external&&&/i&&/a&学习下基础知识,通俗易懂,每一小节还随带小练习,很适合初学者(课后练习一定要做啊,写出来才是真的会了)。&/p&
注意:网站已有变化,但后续没有再跟进,代码需要自行调整。本文首发于审判研究,内容略有不同。引:曾听一个理科同学说他同事的逸事。这位同事对占用时间超过5秒,不必用脑又必须做的事情,都会写个小程序替他解决。工作邮件来往就不用说了,连在讨论项目…
这个回答本是为另外一个问题写的,但是也适合这个问题。所以放上。&br&&br&-------------------------------------------------------------------------------------------------------------------------------------&br&&b&说2个创业这些年遇到过的事情吧。也是对我行事风格影响比较大相信也能影响很多人的2个故事。&/b&&br&&br&14年的时候,那会我刚开始和合伙人成立了个新公司,做APP开发业务。遇到的第一个客户是一个浙江嵊州的老板,称为L总吧,L总年龄大概五六十岁。项目是L总侄子介绍给我们的。我们第一次去他们公司谈的时候,在事情八字还没一撇的时候这个老板就对我们非常客气。我看他桌上的烟都是和天下,冬虫夏草,利群(休闲)之类的。然后给我们发烟都是发一包,不是发一根。。。&br&当时我还不知道和天下属于什么档次的烟,在此之前我印象里最贵的烟就是软中华。。回去查了一下这个烟的价格就感觉真豪。。&br&这个老板跟我们谈话的时候丝毫架子都没有,非常之坦诚客气,思路也非常清晰。对软件细节需求的描述和细节把控比一般人强得多,我当时很惊讶一个五六十岁的老头能有这水平。。&br&谈的差不多的时候每次吃饭都安排他们公司的美女去陪,丝毫没有让我感觉自己是在给别人干活而已,而是充分让我感觉到尊重。这时候心里会暗发决心这个项目要尽精力给他好好做!&br&后来大家达成初步合作意向的时候,一起去饭店吃饭。包厢门口站着2个服务员,他一条和天下拆开又是一个人一包,连门口站着的服务员也都一个人发了一包。。。&br&晚上大家吹完牛吃完饭,他们派人安排我们去酒店(也是他们出钱),当时挑的是嵊州据说最大的一家酒店,看装修就是非常好,酒店是啥名字不记得了。总之每次去嵊州跟他们谈,都是好吃好喝好招待,让我有一种是去旅游的感觉。。 &br&&br&还有一次是15年年初的时候,也是个浙江的老板,这个称他为J总。不过这次是温州的,当时是做一个物联网项目,APP控制一个智能硬件,我们负责APP部分。J总一直很忙,所以约了他好几次来我们公司面谈,他也一直没时间来。后来他约我们过去他那里谈,等我们到了温州后,他的司机已经在动车站等着了。看到他司机的车是进口的大奔,司机带着个很沉的大金链子。司机拉着我们大概过了1个小时到了个大厦楼下,我以为这是目的地,结果过了会J总下来了。说我们找个安静的地方谈谈。&br&&br&我以为是去找个咖啡厅茶馆啥的,结果是一路开到一个类似于乡下的地方。进去后发现这里是一套非常豪华的别墅区,别墅的建筑密度很稀疏,环境做的非常好。进了别墅后发现里面装修非常豪华,他别墅院子的草坪上大白天的开着十几个灯,&b&院子外面是个非常大的人工湖(这个湖应该是属于这个别墅区的,反正湖大的一眼望不到边),湖上面还有个人工岛,岛上全是白鹭之类的鸟。&/b&&br&&br&我们谈项目的时候,他的司机给我们泡了一壶毛尖,这个毛尖在水里感觉跟刚摘下来一样还是很翠绿的,不是很懂茶但是感觉喝起来不错应该不便宜。然后J总边跟我们讲项目需求在纸上画原型图的时候,无意间漏出了他的表,我一看是&b&江诗丹顿&/b&。。。就是不认识是哪一款。。。&br&&br&等下午谈完项目,大家去吃饭。饭桌上他司机掏出来2000块钱,J总对我们说,你们来一趟辛苦了,我很欣赏你们做事的风格。这次事情不管成不成,这些钱你拿着,当成是路费我给你们报销了,其实路费只花了1000多一点。&br&晚上4个人吃饭一桌也吃了小千把块,等吃完饭也是他司机安排好了酒店送我们过去。当然这个项目最后也是成了。&br&&br&这2年多我也遇到过N多大老板,年龄从二十多岁到五六十岁不等,其中最多的还是三四十岁的。一般三十四岁左右的老板如果身家有个几千万到上亿的,大部分都会有种龙傲天的气息扑面而来,找你做事你就真只是个做事的,不管你做的再好他也觉得是理所当然,对人呼之即来挥之即去。&br&可能三十四岁,有个几千万和上亿已经算是年少有为了。所以大部分都自命不凡。&br&&br&而我更多时候喜欢跟五六十岁的老头子打交道,他们对人对事的理解,能让你足够的感觉到自己被尊重,也能让你愿意付出百分百的感激和心血来给他做事。&br&&b&对于我来说,我站在乙方,他们站在甲方的立场上。如果是龙傲天找我做事,我本分的工作也会做好,给1块钱我做1块钱的事,但是和J总和L总这种人合作,给100块钱,我愿意做120块钱的事。。。&/b&&br&&br&从这以后,我在找别人帮忙的时候,尽管我的身份是甲方,是花钱的,是雇主,我也会尽量保证对他人的尊重和感激。很多我感觉对方报价不是很贵的,我会主动要求多给一点,语气和招待上也是尽量客气。&br&因为我知道,如果你只是把他当成个做事的,那他真只是个做事的,保不齐有些坏人还在背后里偷工减料坑你害你。而如果你把他当兄弟当朋友处,要100给200,那起码大部分人基于感激不会给你偷工减料,或许也有意外的情况的白眼狼,但是我做好自己能尽量增加事情做完美的概率。。。
这个回答本是为另外一个问题写的,但是也适合这个问题。所以放上。 ------------------------------------------------------------------------------------------------------------------------------------- 说2个创业这些年遇到过的事情吧。也是对我行…
&img src=&/v2-1fd88bbe11ec52a2d31d_b.png& data-rawwidth=&900& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&/v2-1fd88bbe11ec52a2d31d_r.png&&3个月以前在知乎上回答一个问题&a href=&/question//answer/& class=&internal&&【有哪些能集实用,装逼于一身的冷门网站?】&/a&得到很多小伙伴的喜爱,一直到现在都还陆陆续续收到大家的赞,谢谢大家。&p&于是,我就想,现在有了专栏,干脆把这个回答写成一篇文章吧,当然肯定不是原封不动的摘抄过来,我会再添加一些比较小众但很实用的网站,希望可以给大家一些参考和帮助。&/p&&p&---&/p&&br&&br&以下是我在该问答下的回答,共分享了8个网站:&br&&br&啊,看到上面分享了好多比较酷炫的网站,好多都放进我的收藏夹了,(*^__^*) 嘻嘻……看的我也忍不住想分享了,因为是IT行业,所以分享几个我收集的比较实用而且酷炫的网站O(∩_∩)O~&br&&br&&b&1.&a href=&/?target=https%3A///apps/helloworldcollection/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&“Hello World”大全&i class=&icon-external&&&/i&&/a&&/b&&br&&br&网站一共收集了大约481种“Hello World”程序,差不多涵盖了目前已知的所有编程语言,比较有趣好玩,很多语言可能都没有听过。&br&&img src=&/d7bd509bb9f49dd5b8cd64a6290cfb33_b.png& data-rawwidth=&1553& data-rawheight=&914& class=&origin_image zh-lightbox-thumb& width=&1553& data-original=&/d7bd509bb9f49dd5b8cd64a6290cfb33_r.png&&&br&&b&2.&a href=&/?target=https%3A//fontawesome.io/cheatsheet/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Font Awesome Cheatsheet&i class=&icon-external&&&/i&&/a&&/b&&br&&br&Font Awesome图标,不多说,开发和设计都会用到。&br&&img src=&/ca15bd6c726e16733eaf5_b.png& data-rawwidth=&1175& data-rawheight=&888& class=&origin_image zh-lightbox-thumb& width=&1175& data-original=&/ca15bd6c726e16733eaf5_r.png&&&br&&b&3.&a href=&/?target=https%3A///courses/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实验楼 - 国内领先的IT技术实训平台&i class=&icon-external&&&/i&&/a&&/b&&br&&br&一个拥有在线开发环境的IT学习网站,各种在线开发环境啊!!各种在线开发环境啊!!各种在线开发环境啊!!&br&&img src=&/9d8cdceba478417dca19b5b_b.png& data-rawwidth=&1919& data-rawheight=&915& class=&origin_image zh-lightbox-thumb& width=&1919& data-original=&/9d8cdceba478417dca19b5b_r.png&&&br&&b&4.&a href=&/?target=http%3A///post/pathfinding.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&动画展示各种路径搜索算法&i class=&icon-external&&&/i&&/a&&/b&&br&&br&我觉得还蛮有趣的,直观的感受路径搜索算法;&br&&img src=&/e32beadabd9_b.png& data-rawwidth=&1877& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1877& data-original=&/e32beadabd9_r.png&&&br&&b&5.&a href=&/?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Most Exclusive Website&i class=&icon-external&&&/i&&/a&&/b&&br&&br&网站每次只允许一个人访问,而且只能访问网站60秒,已经有超多人排队了,你可以试试~当然这个可能并不一定实用,但是还觉得蛮好玩的。&br&&img src=&/d9a411addb3bbb56b373_b.png& data-rawwidth=&1178& data-rawheight=&850& class=&origin_image zh-lightbox-thumb& width=&1178& data-original=&/d9a411addb3bbb56b373_r.png&&&br&&b&6.&a href=&/?target=https%3A//www./& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IT eBooks - Free Download&i class=&icon-external&&&/i&&/a&&/b&&br&&br&可以下载IT电子书籍的网站,英文;&br&&img src=&/f3ad44a09aa1f93f2c3fa4_b.png& data-rawwidth=&1019& data-rawheight=&889& class=&origin_image zh-lightbox-thumb& width=&1019& data-original=&/f3ad44a09aa1f93f2c3fa4_r.png&&&br&&b&7.&a href=&/?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Collecting all the cheat sheets&i class=&icon-external&&&/i&&/a&&/b&&br&&br&这个网站可以查询到所有与编程相关的各种技术,并给出详细的知识点;&br&&img src=&/28e25b2bdb436c3b686d06c8e25d0e8b_b.png& data-rawwidth=&941& data-rawheight=&857& class=&origin_image zh-lightbox-thumb& width=&941& data-original=&/28e25b2bdb436c3b686d06c8e25d0e8b_r.png&&&br&&b&8.&a href=&/?target=https%3A//devdocs.io& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DevDocs API Documentation&i class=&icon-external&&&/i&&/a&&br&&/b&&br&这是一份综合类的在线API列表,很全,方便查找。&br&&img src=&/ae624f795ee7afd331b50_b.png& data-rawwidth=&1305& data-rawheight=&913& class=&origin_image zh-lightbox-thumb& width=&1305& data-original=&/ae624f795ee7afd331b50_r.png&&&br&---&br&&br&下面再添加一些比较小众,但也比较有趣或者有用的网站。&br&&br&&b&1.&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&i class=&icon-external&&&/i&&/a&&/b&&br&&br&一个在线模拟黑客工作的虚拟桌面系统,提供多种黑客工作的场景,就像是我们在电影里看到的黑客是如何操作电脑和进行代码录入的。伪装成黑客的网站啊,不一定有用但肯定有趣,我想所有程序员都想试试吧,毕竟成为一个黑客还是很酷炫的啊。&br&&img src=&/v2-6bceea386db2e_b.png& data-rawwidth=&1915& data-rawheight=&934& class=&origin_image zh-lightbox-thumb& width=&1915& data-original=&/v2-6bceea386db2e_r.png&&&b&2.&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&codewars&i class=&icon-external&&&/i&&/a&&/b&&br&&br&Codewars是一个刷题网站,使用者可选择所学技术领域不断实战答题挑战,而且它的奖励系统激励程序员们像打游戏升级一样地做习题。&br&&img src=&/v2-229dc629ed75415efc0a2e_b.png& data-rawwidth=&1726& data-rawheight=&879& class=&origin_image zh-lightbox-thumb& width=&1726& data-original=&/v2-229dc629ed75415efc0a2e_r.png&&&br&&b&3.&a href=&/?target=https%3A///justjavac/free-programming-books-zh_CN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&免费的计算机编程类中文书籍&i class=&icon-external&&&/i&&/a&&/b&&br&&br&其实这个算不上小众,但是我认为非常有用,免费的中文书籍诶,随时可以看,所以也放进来了。&br&&img src=&/v2-25de3b6f02e134e8be5db5_b.jpg& data-rawwidth=&531& data-rawheight=&842& class=&origin_image zh-lightbox-thumb& width=&531& data-original=&/v2-25de3b6f02e134e8be5db5_r.jpg&&&br&这里还有英文的:&br&&br&&b&4.&a href=&/?target=https%3A///vhf/free-programming-books/blob/master/free-programming-books.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&free-programming-books&i class=&icon-external&&&/i&&/a&&/b&&br&&br&分享了大量免费的编程书籍,比上面分享的中文版的编程书籍要全要多,不过都是英文的;&br&&img src=&/v2-932ccc5be0e718f88fba75e_b.png& data-rawwidth=&302& data-rawheight=&757& class=&content_image& width=&302&&&br&&br&&b&5.&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The World's Most Exclusive Website&i class=&icon-external&&&/i&&/a&&/b&&br&&br&一个独特神秘的网站。基本上,该网站允许用户访问的级别是基于你在Twitter上的追随者有多少。它一共拥有10个房间。要进入“室1”,你需要是一个经过验证的Twitter用户。要进入“室2”,你需要有至少5000个追随者。级别越高,要求也就越高。也是世界上最容易被破解的。我们技术娴熟的一个读者甚至无需登录Twitter,只花费了不到60秒的时间便查看到该网站的所有页面。&br&&img src=&/v2-99c97e193df5ffc0ea416b6f1c151169_b.png& data-rawwidth=&1117& data-rawheight=&824& class=&origin_image zh-lightbox-thumb& width=&1117& data-original=&/v2-99c97e193df5ffc0ea416b6f1c151169_r.png&&&b&6.&a href=&/?target=http%3A///programming/free/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&oreilly Free Programming Ebooks&i class=&icon-external&&&/i&&/a&&/b&&br&&br&ORielly 的免费电子书,有需要的童鞋可以免费下载,虽说免费的书籍文章前面已经有过介绍了,但是书籍嘛,还是免费的,是很有用的。&br&&img src=&/v2-fdc2c5cdfb56bcc40847_b.png& data-rawwidth=&851& data-rawheight=&902& class=&origin_image zh-lightbox-thumb& width=&851& data-original=&/v2-fdc2c5cdfb56bcc40847_r.png&&&b&7.&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Python Challenge&i class=&icon-external&&&/i&&/a&&/b&&br&&br&是一个基于Python语言的闯关挑战游戏,每一关给出一个Python相关的图片,闯关者需要解答问题之后才能跳转到下一个关卡,还蛮有趣的,Python学习者可以看看。&br&&img src=&/v2-1ed328ff4a1b_b.png& data-rawwidth=&793& data-rawheight=&904& class=&origin_image zh-lightbox-thumb& width=&793& data-original=&/v2-1ed328ff4a1b_r.png&&&b&8.&a href=&/?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Regexper&i class=&icon-external&&&/i&&/a&&/b&&br&&br&一个正则表达式的可视化开源工具,直接输入正则表达式就能用可视化显示出来,只需要把你的表达式输入进去,就有可视化的图形。&br&&img src=&/v2-779ba7a9b09c4d922df85_b.png& data-rawwidth=&1910& data-rawheight=&391& class=&origin_image zh-lightbox-thumb& width=&1910& data-original=&/v2-779ba7a9b09c4d922df85_r.png&&---&br&&br&以上了就是我整理的16个相对来说比较小众,但是对程序员来说却有趣或者有用的网站,如果你还有其他相关网站,评论出来啊,我随时更新上来,大家共同学习嘛。
3个月以前在知乎上回答一个问题得到很多小伙伴的喜爱,一直到现在都还陆陆续续收到大家的赞,谢谢大家。于是,我就想,现在有了专栏,干脆把这个回答写成一篇文章吧,当然肯定不是原封不动的摘抄过来,我会再添…
本人码农,从六月开始正式接触机器学习(其实五年前的本科毕设就是在生物信息领域应用神经网络的项目,但是非常浅薄),深吸一口气,先要声明“人之患在好为人师”,我用的步骤只是适合我,下面的内容仅供参考。&br&&br&&b&第一步:复习线性代数。&/b&(学渣的线代忘了好多-_-||)&br&&ul&&li&懒得看书就直接用了著名的——&a href=&///?target=http%3A///special/opencourse/daishu.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&麻省理工公开课:线性代数&i class=&icon-external&&&/i&&/a&,深入浅出效果拔群,以后会用到的SVD、希尔伯特空间等都有介绍;&/li&&li&广告:边看边总结了一套笔记 &a href=&///?target=https%3A///zlotus/notes-linear-algebra& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - zlotus/notes-linear-algebra: 线性代数笔记&i class=&icon-external&&&/i&&/a&。&/li&&/ul&&b&第二步:入门机器学习算法。&/b&&br&&ul&&li&还是因为比较懒,也就直接用了著名的——&a href=&///?target=http%3A///special/opencourse/machinelearning.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&斯坦福大学公开课 :机器学习课程&i class=&icon-external&&&/i&&/a&,吴恩达教授的老版cs229的视频,讲的非常细(算法的目标-&数学推演-&伪代码)。这套教程唯一的缺点在于没有介绍最近大火的神经网络,但其实这也算是优点,让我明白了算法都有各自的应用领域,并不是所有问题都需要用神经网络来解决;&/li&&li&多说一点,这个课程里详细介绍的内容有:一般线性模型、高斯系列模型、SVM理论及实现、聚类算法以及EM算法的各种相关应用、PCA/ICA、学习理论、马尔可夫系列模型。课堂笔记在:&a href=&///?target=http%3A//cs229.stanford.edu/materials.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS 229: Machine Learning (Course handouts)&i class=&icon-external&&&/i&&/a&,同样非常详细。&/li&&li&广告:边看边总结了一套笔记 &a href=&///?target=https%3A///zlotus/notes-LSJU-machine-learning& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - zlotus/notes-LSJU-machine-learning: 机器学习笔记&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&第三步:尝试用代码实现算法。&/b&&br&&ul&&li&依然因为比较懒,继续直接使用了著名的——&a href=&///?target=https%3A//www.coursera.org/learn/machine-learning/home/welcome& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&机器学习 | Coursera&i class=&icon-external&&&/i&&/a& ,还是吴恩达教授的课程,只不过这个是极简版的cs229,几乎就是教怎么在matlab里快速实现一个模型(这套教程里有神经网络基本概念及实现)。这套课程的缺点是难度比较低,推导过程非常简略,但是这也是它的优点——让我专注于把理论转化成代码。&/li&&li&广告:作业参考 &a href=&///?target=https%3A///zlotus/Coursera_Machine_Learning_Exercises& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - zlotus/Coursera_Machine_Learning_Exercises: Machine Learning by Andrew Ng from Coursera&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&第四步:自己实现功能完整的模型&/b&——进行中。&br&&ul&&li&还是因为比较懒,搜到了cs231n的课程视频 &a href=&///?target=https%3A///playlist%3Flist%3DPLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CS231n Winter 2016 - YouTube&i class=&icon-external&&&/i&&/a& ,李飞飞教授的课,主讲还有Andrej Karpathy和Justin Johnson,主要介绍卷积神经网络在图像识别/机器视觉领域的应用(前面神经网络的代码没写够?这门课包你嗨到爆~到处都是从零手写~)。这门课程的作业就更贴心了,直接用Jupyter Notebook布置的,可以本地运行并自己检查错误。主要使用Python以及Python系列的科学计算库(Scipy/Numpy/Matplotlib)。课堂笔记的翻译可以参考 &a href=&/p/& class=&internal&&智能单元 - 知乎专栏&/a&,主要由知友杜客翻译,写的非常好~&/li&&li&在多说一点,这门课对程序员来说比较走心,因为这个不像上一步中用matlab实现的作业那样偏向算法和模型,这门课用Python实现的模型同时注重软件工程,包括常见的封装layer的forward/backward、自定义组合layer、如何将layer组成网络、如何在网络中集成batch-normalization及dropout等功能、如何在复杂模型下做梯度检查等等;最后一个作业中还有手动实现RNN及其基友LSTM、编写有助于调试的CNN可视化功能、Google的DeepDream等等。(做完作业基本就可以看懂现在流行的各种图片风格变换程序了,如 &a href=&///?target=https%3A///cysmith/neural-style-tf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cysmith/neural-style-tf&i class=&icon-external&&&/i&&/a&)另外,这门课的作业实现非常推崇computational graph,不知道是不是我的幻觉……要注意的是讲师A.K的语速奇快无比,好在YouTube有自动生成解说词的功能,准确率还不错,可以当字幕看。&/li&&li&广告:作业参考 &a href=&///?target=https%3A///zlotus/cs231n& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - zlotus/cs231n: CS231n Convolutional Neural Networks for Visual Recognition (winter 2016)&i class=&icon-external&&&/i&&/a& (我的在作业的notebook上加了一些推导演算哦~可以用来参考:D)&/li&&/ul&&br&因为最近手头有论文要撕,时间比较紧,第四步做完就先告一段落。后面打算做继续业界传奇Geoffrey Hinton教授的&a href=&///?target=https%3A//www.coursera.org/learn/neural-networks/home/welcome& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Neural Networks for Machine Learning | Coursera&i class=&icon-external&&&/i&&/a&,再看看NLP的课程 &a href=&///?target=http%3A//cs224d.stanford.edu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Stanford University CS224d: Deep Learning for Natural Language Processing&i class=&icon-external&&&/i&&/a&,先把基础补完,然后在东瞅瞅西逛逛看看有什么好玩的……&br&&br&PS:一直没提诸如TensorFlow之类的神器,早就装了一个(可以直接在conda中为Tensorflow新建一个env,然后再装上Jupyter、sklearn等常用的库,把这些在学习和实践ML时所用到的库都放在一个环境下管理,会方便很多),然而一直没时间学习使用,还是打算先忍着把基础部分看完,抖M总是喜欢把最好的留在最后一个人偷偷享受2333333(手动奸笑&br&&br&PS**2:关于用到的系统性知识,主要有:&br&&ul&&li&线性代数,非常重要,模型计算全靠它~一定要复习扎实,如果平常不用可能忘的比较多;&br&&/li&&li&高数+概率,这俩只要掌握基础就行了,比如积分和求导、各种分布、参数估计等等。(评论中有知友提到概率与数理统计的重要性,我举四肢赞成,因为cs229中几乎所有算法的推演都是从参数估计及其在概率模型中的意义起手的,参数的更新规则具有概率上的可解释性。对于算法的设计和改进工作,概统是核心课程,没有之一。答主这里想要说的是,当拿到现成的算法时,仅需要概率基础知识就能看懂,然后需要比较多的线代知识才能让模型高效的跑起来。比如最近做卷积的作业, 我手写的比作业里给出的带各种trick的fast函数慢几个数量级,作业还安慰我不要在意效率,岂可修!)&/li&&/ul&需要用到的编程知识也就是Matlab和Numpy了吧,Matlab是可以现学现卖的;至于Python,就看题主想用来做什么了,如果就是用来做机器学习,完全可以一天入门,如果想要做更多好玩的事,一天不行那就两天。(贴一个Python/Numpy的简要教程:&a href=&///?target=http%3A//cs231n.github.io/python-numpy-tutorial/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python Numpy Tutorial&i class=&icon-external&&&/i&&/a&,是cs231n的课堂福利。)&br&&br&我感觉机器学习的先修就这么点,记得Adobe的冯东大神也说过机器学习简直是21世界的黑科技——因为理论非常简单但是效果惊人的好。&br&&br&====&br&&br&既然提到好玩的,墙裂推荐 &a href=&///?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Kaggle: Your Home for Data Science &i class=&icon-external&&&/i&&/a&,引用维基上的介绍:&br&&blockquote&Kaggle是一个数据建模和数据分析竞赛平台。企业和研究者可在其上发布数据,统计学者和数据挖掘专家可在其上进行竞赛以产生最好的模型。这一众包模式依赖于这一事实,即有众多策略可以用于解决几乎所有预测建模的问题,而研究者不可能在一开始就了解什么方法对于特定问题是最为有效的。Kaggle的目标则是试图通过众包的形式来解决这一难题,进而使数据科学成为一场运动。&/blockquote&
本人码农,从六月开始正式接触机器学习(其实五年前的本科毕设就是在生物信息领域应用神经网络的项目,但是非常浅薄),深吸一口气,先要声明“人之患在好为人师”,我用的步骤只是适合我,下面的内容仅供参考。 第一步:复习线性代数。(学渣的线代忘了好…
别的行业不了解,我就说说嵌入式C这一块。&br&&br&我加过一个群,搞嵌入式的,部分聊天的截图,你们感受一下:&br&&br&补充强调一下,&b&这个群是有门槛的&/b&,搞一种特定的东西,基本没有学生之类的进来。&br&&br&&b&关于BSP的讨论(注:搞开发的可以百度到关于BSP的东西)&/b&:&br&&br&&img src=&/v2-60ebb13a4ff5a315ddbb59af52825acd_b.png& data-rawwidth=&349& data-rawheight=&537& class=&content_image& width=&349&&&img src=&/v2-fb8152bcfe6bb56f17f72546a7edf22a_b.png& data-rawwidth=&282& data-rawheight=&99& class=&content_image& width=&282&&&br&&br&&b&代码里的基本错误(注:看编译警告就能发现问题):&/b&&br&&br&&img src=&/v2-79cbcd02a7449a2_b.png& data-rawwidth=&743& data-rawheight=&342& class=&origin_image zh-lightbox-thumb& width=&743& data-original=&/v2-79cbcd02a7449a2_r.png&&&br&&b&不知道怎么操作编译器参数(注:百度一下):&/b&&br&&br&&img src=&/v2-5f6fddbaec051474aaecef_b.png& data-rawwidth=&404& data-rawheight=&140& class=&content_image& width=&404&&&br&-------------------------------------&br&&br&这就是这几天的聊天记录,我还没往前翻,前面还有。&br&&br&总结一下就是:&br&&br&1. 码农确实很多,干这行的确实很多,但肯动脑的人不多。&br&2. 不仅动脑的人少,连动手的人都少,很多人基本上就是伸手党,有些东西连百度一下就能知道的东西自己不肯解决。&br&3. 基本的工具不会用,找API不会找,给源码不知道怎么看。&br&&br&我还遇到过:拿着开发板(还挺贵的)不知道uboot是什么东西的,遇到过不会在不同的.c文件里引用全局变量的(不会用extern关键字)……&br&&br&如果是刚毕业,能理解,问题是很多人都干这行有一阵了,还这样就让我无法理解了。可以不懂具体的技术,但起码知道通过什么途经了解,会用搜索工具以及代码工具,有最基本的概念。&br&&br&但很多人连这个都达不到。&br&&br&当然了,慢慢这些人很多都会被淘汰掉,我们大学班级就是计算机专业的,30多个人里现在还在一线开发的不到十个人,可能5-6个人左右吧。&br&&br&别看学计算机的这么多,真正能干好这一行的不多,而且&b&学计算机也不等于编程&/b&。&br&&br&我大学本科班级在大四的时候能正确写出冒泡排序的人&b&大概也就十个人左右吧&/b&(985学校)。&br&&br&----------------------------&br&&br&想知道普通学计算机的人水平怎么样,去混百度知道就可以了,可以感受一下有多少学计算机的人肯动手动脑。&br&&br&----------------------------&br&&br&再多说点吧,很多人觉得写不出冒泡这件事很震惊。这很正常,动手能力差的人可能换个开发工具就不知道怎么动手了。并且C是大一学的,&b&到大四不动手的基本上都忘的差不多了&/b&。&br&&br&况且,考研的人会没事写代码吗?专业课又不是只考C语言。&br&&br&不会写排序的人C语言怎么过的?一个冒泡排序,最多15分,考试成绩占60%也就没多少,平时作业按时交就可以了。况且考试时候写个for基本上就要给1-2分吧,考试又不是ACM online,不是说AC了才给分,满分和零分之间有很大的空间。&br&&br&动手能力跟考试成绩没啥关系,懂不懂算法跟能不能写出C语言程序也没啥关系。
别的行业不了解,我就说说嵌入式C这一块。 我加过一个群,搞嵌入式的,部分聊天的截图,你们感受一下: 补充强调一下,这个群是有门槛的,搞一种特定的东西,基本没有学生之类的进来。 关于BSP的讨论(注:搞开发的可以百度到关于BSP的东西): 代码里的基…
我感觉,最简单的应该是从爬美女图片入手吧,直接上例子。&br&&div class=&highlight&&&pre&&code class=&language-python3&&&span class=&c&&#!/usr/bin/env python&/span&
&span class=&c&&#-*-coding:utf-8-*-&/span&
&span class=&kn&&import&/span& &span class=&nn&&urllib.request&/span&
&span class=&kn&&import&/span& &span class=&nn&&os&/span&
&span class=&kn&&import&/span& &span class=&nn&&re&/span&
&span class=&k&&def&/span& &span class=&nf&&url_open&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&):&/span&
&span class=&n&&req&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&Request&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&)&/span&
&span class=&n&&req&/span&&span class=&o&&.&/span&&span class=&n&&add_header&/span&&span class=&p&&(&/span&&span class=&s&&'User-Agent'&/span&&span class=&p&&,&/span& &span class=&s&&'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36'&/span&&span class=&p&&)&/span&
&span class=&n&&response&/span& &span class=&o&&=&/span& &span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&urlopen&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&)&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&response&/span&&span class=&o&&.&/span&&span class=&n&&read&/span&&span class=&p&&()&/span&
&span class=&k&&return&/span& &span class=&n&&html&/span&
&span class=&k&&def&/span& &span class=&nf&&get_totalpages&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&):&/span&
&span class=&c&&#通过版块地址获得该版块所有页数(每页有50个系列),返回值为数字&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&url_open&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&decode&/span&&span class=&p&&(&/span&&span class=&s&&'gbk'&/span&&span class=&p&&)&/span&
&span class=&n&&reg&/span& &span class=&o&&=&/span& &span class=&s&&r'共 &strong&(.*?)&/strong&页'&/span&
&span class=&n&&totalpages&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&reg&/span&&span class=&p&&,&/span&&span class=&n&&html&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&k&&return&/span& &span class=&nb&&int&/span&&span class=&p&&(&/span&&span class=&n&&totalpages&/span&&span class=&p&&)&/span&
&span class=&k&&def&/span& &span class=&nf&&get_sercoverurl&/span&&span class=&p&&(&/span&&span class=&n&&pageurl&/span&&span class=&p&&):&/span&
&span class=&c&&#通过页面地址获得该页面下所有系列的封面地址,返回值为列表&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&url_open&/span&&span class=&p&&(&/span&&span class=&n&&pageurl&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&decode&/span&&span class=&p&&(&/span&&span class=&s&&'gbk'&/span&&span class=&p&&)&/span&
&span class=&n&&reg&/span& &span class=&o&&=&/span& &span class=&s&&r'&p&&a href=&(.*?)&'&/span&
&span class=&n&&sercoverurl&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&reg&/span&&span class=&p&&,&/span& &span class=&n&&html&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&sercoverurl&/span&
&span class=&c&&#各个系列的封面 列表&/span&
&span class=&k&&def&/span& &span class=&nf&&get_serurl&/span&&span class=&p&&(&/span&&span class=&n&&sercoverurl&/span&&span class=&p&&):&/span&
&span class=&c&&#通过封面获得该系列的所有图片所在的页面地址 (每个页面有一张图片,其地址待下一步获取)&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&url_open&/span&&span class=&p&&(&/span&&span class=&n&&sercoverurl&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&decode&/span&&span class=&p&&(&/span&&span class=&s&&'gbk'&/span&&span class=&p&&)&/span&
&span class=&c&&#&/span&
&span class=&n&&reg1&/span& &span class=&o&&=&/span& &span class=&s&&r'&li&&a&共(.*?)页'&/span&
&span class=&n&&totalsheets&/span& &span class=&o&&=&/span& &span class=&nb&&int&/span&&span class=&p&&(&/span&&span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&reg1&/span&&span class=&p&&,&/span& &span class=&n&&html&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&])&/span&
&span class=&c&&# 获得该系列图片总张数&/span&
&span class=&n&&serurls&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&n&&serurls&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&sercoverurl&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&eachsheet&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&n&&totalsheets&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&):&/span&
&span class=&n&&serurl&/span& &span class=&o&&=&/span& &span class=&n&&sercoverurl&/span&&span class=&p&&[:&/span&&span class=&o&&-&/span&&span class=&mi&&5&/span&&span class=&p&&]&/span& &span class=&o&&+&/span& &span class=&s&&'_'&/span& &span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&eachsheet&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&n&&sercoverurl&/span&&span class=&p&&[&/span&&span class=&o&&-&/span&&span class=&mi&&5&/span&&span class=&p&&:]&/span&
&span class=&n&&serurls&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&serurl&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&serurls&/span&
&span class=&k&&def&/span& &span class=&nf&&get_picurl&/span&&span class=&p&&(&/span&&span class=&n&&serurl&/span&&span class=&p&&):&/span&
&span class=&n&&html&/span& &span class=&o&&=&/span& &span class=&n&&url_open&/span&&span class=&p&&(&/span&&span class=&n&&serurl&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&decode&/span&&span class=&p&&(&/span&&span class=&s&&'gbk'&/span&&span class=&p&&)&/span&
&span class=&n&&reg&/span& &span class=&o&&=&/span& &span class=&s&&r&&img src='(.*?)'&&/span&
&span class=&n&&picurl&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&findall&/span&&span class=&p&&(&/span&&span class=&n&&reg&/span&&span class=&p&&,&/span&&span class=&n&&html&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&k&&return&/span& &span class=&n&&picurl&/span&
&span class=&c&&#只有一个地址,即封面地址&/span&
&span class=&k&&def&/span& &span class=&nf&&download_cl&/span&&span class=&p&&(&/span&&span class=&n&&folder&/span& &span class=&o&&=&/span& &span class=&s&&'爬虫youmzi'&/span&&span class=&p&&):&/span&
&span class=&c&&#主程序&/span&
&span class=&k&&try&/span&&span class=&p&&:&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&mkdir&/span&&span class=&p&&(&/span&&span class=&n&&folder&/span&&span class=&p&&)&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&chdir&/span&&span class=&p&&(&/span&&span class=&n&&folder&/span&&span class=&p&&)&/span&
&span class=&k&&except&/span&&span class=&p&&:&/span&
&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&chdir&/span&&span class=&p&&(&/span&&span class=&n&&folder&/span&&span class=&p&&)&/span&
&span class=&n&&url&/span& &span class=&o&&=&/span& &span class=&s&&'/meinv.html'&/span&
&span class=&n&&totalpages&/span& &span class=&o&&=&/span& &span class=&n&&get_totalpages&/span&&span class=&p&&(&/span&&span class=&n&&url&/span&&span class=&p&&)&/span&
&span class=&nb&&print&/span&&span class=&p&&(&/span&&span class=&n&&totalpages&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&eachpage&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&n&&totalpages&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&):&/span&
&span class=&n&&pageurl&/span& &span class=&o&&=&/span& &span class=&n&&url&/span&&span class=&p&&[:&/span&&span class=&o&&-&/span&&span class=&mi&&5&/span&&span class=&p&&]&/span& &span class=&o&&+&/span& &span class=&s&&'_'&/span&&span class=&o&&+&/span& &span class=&nb&&str&/span&&span class=&p&&(&/span&&span class=&n&&eachpage&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&n&&url&/span&&span class=&p&&[&/span&&span class=&o&&-&/span&&span class=&mi&&5&/span&&span class=&p&&:]&/span&
&span class=&nb&&print&/span&&span class=&p&&(&/span&&span class=&n&&pageurl&/span&&span class=&p&&)&/span&
&span class=&n&&sercoverurl&/span& &span class=&o&&=&/span& &span class=&n&&get_sercoverurl&/span&&span class=&p&&(&/span&&span class=&n&&pageurl&/span&&span class=&p&&)&/span&
&span class=&c&&#获得系列的封面地址 列表&/span&
&span class=&nb&&print&/span&&span class=&p&&(&/span&&span class=&n&&sercoverurl&/span&&span class=&p&&)&/span&
&span class=&k&&for&/span& &span class=&n&&eachsercover&/span& &span class=&ow&&in&/span& &span class=&n&&sercoverurl&/span&&span class=&p&&:&/span&
&span class=&n&&serurl&/span& &span class=&o&&=&/span& &span class=&n&&get_serurl&/span&&span class=&p&&(&/span&&span class=&n&&eachsercover&/span&&span class=&p&&)&/span&
&span class=&c&&#返回系列的所有地址 列表&/span&
&span class=&k&&for&/span& &span class=&n&&oneser&/span& &span class=&ow&&in&/span& &span class=&n&&serurl&/span&&span class=&p&&:&/span&
&span class=&n&&picurl&/span& &span class=&o&&=&/span& &span class=&n&&get_picurl&/span&&span class=&p&&(&/span&&span class=&n&&oneser&/span&&span class=&p&&)&/span&
&span class=&nb&&print&/span&&span class=&p&&(&/span&&span class=&n&&picurl&/span&&span class=&p&&)&/span&
&span class=&n&&filename&/span& &span class=&o&&=&/span& &span class=&n&&picurl&/span&&span class=&o&&.&/span&&span class=&n&&split&/span&&span class=&p&&(&/span&&span class=&s&&'/'&/span&&span class=&p&&)[&/span&&span class=&o&&-&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span&
&span class=&n&&urllib&/span&&span class=&o&&.&/span&&span class=&n&&request&/span&&span class=&o&&.&/span&&span class=&n&&urlretrieve&/span&&span class=&p&&(&/span&&span class=&n&&picurl&/span&&span class=&p&&,&/span& &span class=&n&&filename&/span&&span class=&p&&)&/span&
&span class=&k&&if&/span& &span class=&n&&__name__&/span& &span class=&o&&==&/span& &span class=&s&&'__main__'&/span&&span class=&p&&:&/span&
&span class=&n&&download_cl&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&
我感觉,最简单的应该是从爬美女图片入手吧,直接上例子。 #!/usr/bin/env python
#-*-coding:utf-8-*-
import urllib.request
def url_open(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (…
&h1&翻译前言&br&&/h1&&p&在很多互联网公司的算法相关部门(例如搜索、推荐、广告)里,都有“做算法的”和“做工程的”两个工种。这个看似天经地义的分工方式是否就是最优的方式?这似乎还是存在一些争议的。&/p&&p&这篇文章阐述了一种当前较为普遍合作模式下的问题,译者觉得说得很在点上。更宝贵的是,作者同时也提出了一种可能会更好的合作模式,能够解决这些问题。&/p&&p&需要提前说明的一点,文中的“数据科学家”可理解为我们常说的偏算法的工程师,而文中的“工程师”或者“数据工程师”可理解为我们常说的偏工程或者偏架构的工程师。&/p&&p&本文的英文原文请见:&a href=&/?target=http%3A///blog//engineers-shouldnt-write-etl/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Engineers Shouldn’t Write ETL: A Guide to Building a High Functioning Data Science Department&i class=&icon-external&&&/i&&/a&&/p&&h2&正文开始&/h2&&p&“你的团队和数据科学家们[1]之间的关系是怎样的”?毫无疑问,这是我作为面试官,面试数据平台工程师[2]时最常被问到的一个问题。这在面试过程中是一个很正常的问题,属于求职者评估新机会的必要流程。而我也经常很乐于回答这个问题。但是我希望我不需要回答,因为这个问题的背后,折射出的是怀疑和恐惧。&/p&&p&为什么呢?如果你阅读一下硅谷科技公司里数据科学与算法开发部门的招聘启事,你或许会相信数据科学家和工程师之间的关系是高度协作、有机并且富有创造性的。&/p&&p&但是,行业里的真实情况却并非如此。大多数场景下,这两者的关系其实是介于“不存在”[3]和“高度功能失调”之间的。&/p&&h2&一个典型的数据科学部门&/h2&&p&大多数公司将他们的数据科学部门划分为三个组:&/p&&ul&&li&数据科学家:这些家伙就是那些“工程比统计学家好&统计比工程师好”的人。也就是所谓的“思考者”。&/li&&li&数据工程师:这些人构建数据通道,将数据“喂”到数据科学家“嘴里”,然后从数据科学家手里拿到idea并且实现它们。也就是所谓的“执行者”(Doer)。&/li&&li&架构工程师:这些人维护Hadoop集群以及其他大数据平台架构。也就是所谓的“水管工”[4]&br&。&/li&&/ul&&p&数据科学家们经常不爽的是,工程师们实现算法的速度太慢,以及他们之间的工作流程,路线图以及动机总是同步不到位。当他们想法的版本1进入ABTest的时候,版本2和版本3早就已经排好队了。他们的失望和不爽是非常可以理解的。&/p&&p&数据工程师们经常不爽的是,数据科学家们给出的代码总是效率低下,代码丑陋,几乎从不考虑可维护性和工程化问题,而且会提出一些不现实的功能需求,结果是破坏了工程实现方案,但也没有得到什么好处。这种问题继续下去还有很多,但是相信你已经懂了问题在哪里。&/p&&p&而架构工程师们对他们都不爽,因为他们总是将集群上塞满任务,将硬盘里塞满数据。而且他们常常与数据科学家和工程师们都离得比较远,这意味着他们从来不知道集群是在什么场景下被如何使用的,也不知道集群被用来解决什么业务或技术问题。这让他们在很难摆脱当前不爽的境地。所以,他们的应对方法就是对集群做更严格的限制,这样做的结果,就是其他人都开始对他们感到不爽。&/p&&p&这显然是个恶性循环。&/p&&h2&哪里错了?&/h2&&p&我们都知道这样做是不对的,那我们为什么不解决这样的问题呢?为什么每个数据科学和算法开发部门似乎都会滑落到这样“功能失调”的模型中?&/p&&p&我将这其中的症结归于两件事情,在这里用一些观察来做出阐述。&/p&&h3&你或许并没有“大数据”&/h3&&p&数据处理的工具和技术在过去五年间发生了巨大的进步。除非你要处理几个P级别的数据,或者每天需要消费千亿级的事件,那么大多数技术现在都可以轻松扩容到你所需要的规模。&/p&&p&除非你有试探这些技术的极限的需求,你或许并不需要一只高度专业的专业工程师团队来在其基础上构建解决方案。如果你雇佣了这些人,他们会感到无聊。如果他们感到无聊,他们就会离你而去,去到他们的专业技能更能发挥作用的地方,例如Google,Facebook等等。如果他们不感到无聊,那么他们的技能很可能非常平庸。平庸的工程师最擅长的事情,就是构建巨大无比、过于复杂、难以使用的垃圾,然后称之为“解决方案”。而垃圾往往需要更多的维护工作。&/p&&h3&每个人都想做“思考者”&/h3&&p&因为这听起来更酷!你可以整天坐在那里,思考做事情更好的方式,然后把你的思考结果甩给那些急于将它们工程化的工程师们。大街上每个人都会喜欢这个职位的!数据科学家们,尤其是那些刚刚工作、对行业了解不多的,对这样的职位尤其喜欢。&/p&&p&这些都是我们引导的结果,而一些大公司更要为此负责,尤其是那些在大数据疯狂之前就已经有了数据智能部门的公司。&/p&&p&一个传统的数据智能部门包括三种角色:ETL工程师,报告工程师(report developer),以及DBA。ETL工程师把数据转移到数据仓库中。报告工程师的主要工作是在特定工具(例如MicroStrategy)中设计报告,这些人是领域内的专家。DBA(和其他工具管理团队)的工作就是让这一切都流畅运行。&/p&&p&这里的问题在于,ETL工程师,报告工程师还有DBA全部是执行者,所以,当十年前“大数据”和“数据科学家”这些词汇刚刚兴起的时候,这些传统的BI部门面临着执行者太多,而缺乏思考者的问题。所以他们制造了“思考者”这样一个职位。我们向数据科学家许下承诺,承诺他们可以随便折腾数据,进而改变世界。但事实上并非如此。这些数据科学家有时会创造出一些很酷并且有用的方案,但是在大多数时间里,他们做的工作并不比报告工程师高明多少。&/p&&p&但是这个职位听起来很酷,而且比较容易招聘。所以就诞生了当代传统的数据科学部门:数据科学家(以前的报告工程师,现在的“思考者”),数据工程师(以前的ETL工程师,现在的“执行者”),以及架构工程师(以前的DBA,现在的“水管工”)。&/p&&p&呵呵,看起来数据智能(BI)部门从来就没有改变,我们只是加了个Hadoop集群然后换了个新名字。&/p&&h2&真的那么糟糕吗?&/h2&&p&这个问题取决于我们的目的是什么。如果你同意上面的观点,那么你得承认,自从BI兴起之日,很多公司使用这样的模式使用了很多年。但是如果你希望你的数据科学团队能够产出PPT以外的更多成果,那么我认为这是一个非常低效率的模型。&/p&&p&上面的“思考者”+“执行者”模式想要成功的一个基本假设是:需要有一群出色的工程师,他们没有自己的灵魂,只是积极地将“思考者”的想法实现落地。但是,这样的工程师,会是出色的工程师吗?&/p&&p&在这个模型中,执行者们需要为其他人思想的实现和失败负责,而思考者则因为成功而受到奖赏。这就是团队中争论和嫌隙的核心。&/p&&p&如果你希望为数据工程师岗位招聘到有天赋的优秀人才,你需要一些更大规模的、更NB的问题来让他们解决,好让他们的工作中不只是毫无灵魂地实现别人的想法。你需要的是大数据催生的大规模问题,但问题是,你并没有大数据。&/p&&p&所以,你只能雇到中庸的工程师。他们会制造出大量的烂摊子,进一步加重问题,让你走上恶性循环。最终的结果,就是数据科学家并不比传统的报告工程师厉害多少,因为他们缺乏一个创新、坚固的数据平台支持。进一步,如果你把他们定位为报告工程师,数据科学家们就该跑路了,&strong&毕竟,他们可是“思考者”,不是“执行者”!&/strong&&/p&&h2&一种不同的数据科学部门&/h2&&p&在这个问题上,我们不应该去一味地效仿那些大公司的做法,而是应该想办法去革新这个模型。别再试图去设计更快的马了[5]&/p&……&p&几年以前,当我我加入Stitch Fix也正是这个原因。在Stitch Fix,我们努力在算法和分析方面做到世界最好。我们的方法是通过输出来领导行业,而不是把结果简单地告知(inform)[6]&/p&。所以要想达到目的,必须从心底认为当前的模式是不对的,这样才能全身心投入地创造更好的新模式。&p&在见证了过去两年中我们部门发展壮大的过程后,我有信心将这些与大家分享。既然我们的目的是通过输出来领导,而不是告知,我希望分享一种我认为更好的数据科学部门的组织方式。这是一种完全“自治”的角色,一种从头到尾负责到底的责任感和ownership,并且要为结果负责。这是一种更加适合快速发展和迭代的公司的做法。&/p&&h3&让每个人都成为最好的&/h3&&p&让我们忘掉传统角色的分别,来思考一下工作中真正让人兴奋的地方。&/p&&p&不管什么角色,普通和优秀之间最大的差异之一就是对创新的渴望和能力。优秀的人能够识别并创造性地解决普通人无法解决的问题,他们更适合,也更渴望一种自治、ownership和专注的环境。&/p&&p&从数据科学家到工程师的流水线完全是这种环境的反方向(事实上数据科学家们也不喜欢如此依赖“执行者”)。所以诀窍就在于为每个人都创造足够自治、ownsership和专注的环境。&/p&&p&但需要注意的是,能让数据科学家和工程师们兴奋的点是完全不一样的:&/p&&h4&数据科学家&/h4&&p&数据科学家们喜欢的问题是与业务紧密相关,能够通过自己努力直接影响项目或者组织的成败的。他们对某些事情或者流程进行优化,或者从头创造一个东西。这些都是针对性很强的问题,所以他们的solution也会是这样。这些solution涉及到各种商业逻辑的混合,对运行流程的深入思考,以及大量的创造性。因此,这需要对业务逻辑中某个部分的深刻理解,以及对业务过程的纵向深入参与。&/p&&h4&工程师&/h4&&p&工程师们擅长将问题抽象、泛化,然后找到优雅有效的解决方案。与数据科学家们感兴趣的问题不同,这些问题一般都是横向的,也就是说,他们在被广泛应用时能够发挥最大作用。这需要对业务运转整体流程的整体深入理解,由于这些解决方法都是高度抽象的,因此并不要求工程师对业务的某一部分有非常深入的了解和参与度。&/p&&p&(译者注:我觉得这个概括非常的好,说出了两种工作的一个非常本质的区别)&/p&&h3&知行合一(Hybrid Thinker-Doer)&/h3&&p&数据工程师们最害怕的事,就是尽管你的JD写得非常炫酷,但是你心中真正想要招的,还是ETL工程师。&/p&&p&如果你还没有意识到,那我可以告诉你:&strong&没有人喜欢简单地编写和维护数据管道或者ETL&/strong&。这是这个行业里最烫手的山芋。因此,这个职位成为孕育平庸的温床也就不足为奇了。&/p&&p&&strong&工程师不应该写ETL&/strong&。这不应该是一个专门的职位,没有什么比编写、修改、维护、支持一堆自己从来不用的ETL更让人沮丧的了。&/p&&p&相反,应该将工作整体的端到端的所有权交给员工。对于数据科学家来说,这意味着对ETL的所有权,对分析和最终产出的所有权。数据科学家们工作的最好产出应该是面向机器的,而不是面向人的。最好的产出物不是PPT或者报告,而是一个算法的API,可以通过调用这些API来改变业务。自治权同时也意味着对代码的所有权。&em&从开始开发一直到生产上线&/em&。他们应该可以独立部署应用,并对其性能、效果和其他支持负责。&/p&&p&但是数据科学家们一般来说在软件开发方面并不是非常专业,最多算是合格。所以他们可能会在工程方面制造很多混乱。这也是为什么数据的ETL和算法的落地开发通常都会交给专业工程师来做。这些任务本质上都是垂直(纵向)聚焦的,&strong&但有天赋的工程师们最擅长的往往是应用的横向扩展[7]&/strong&。&/p&&p&那么在这种场景下,工程师的职责应该是什么呢?综合来说,他们需要部署平台、服务、框架,使得数据科学家们可以自主的快速开发、部署他们的想法。可以将这些工作类比为乐高积木:工程师们设计乐高积木块,数据科学家们通过组装这些积木块来实现新的想法。这样做的好处非常明显:&/p&&ul&&li&工程师们的工作变成了完全横向的。这让他们可以专注于设计开发能够横跨多种算法应用的技术。这样做可以将工程技术的输出最大化。&/li&&li&工程师们可以专注于他们最擅长的:抽象、泛化,然后构建有效的,可扩展的技术方案。&/li&&li&工程师们可以自主工作。这样运作的工程团队工作起来就像变魔术,数据科学家们所期待的所需要的东西全部是可以提前预料到的,扩展性和健壮性全部交给了平台、服务和框架,而这些正是工程师们的工作。&/li&&li&为了让这套机制能够正常运转,大多数时候工程师们需要能预料到数据科学家们的需求,他们需要提前提前若干步进行开发。&/li&&li&对于有天赋的工程师和数据科学家来说,这显然有趣多了。&/li&&/ul&&h2&所以,所有的工作都被数据科学家们干了吗?&/h2&&p&完全不是。相反,工程师们在这个系统中承担的职责要比传统方式中更加具有挑战性,也更加被需要,对于数据科学家来说也是一样。我们这套机制并不是在优化效率,而是在强调自治性。这套机制的产物是明确的自治权和对结果负责的明确责任。&/p&&p&这对富有创业精神的人来说是非常有吸引力的。它打开了快速开发和颠覆式创新(disruptive innovation)的大门。但它的代价是一定程度的专业度,也就是一定的效率。&/p&&p&我们并不期待数据科学家们忽然变成有天赋的工程师,我们同样也不希望工程师们完全不了解业务逻辑,丢掉垂直深入的主动性。事实上,团队合作(partnership)才是这个模型可以工作的核心。工程师们应该将自己看作“钢铁侠的裁缝”,他们的使命是建造出强大的钢铁战衣,防止数据科学家们落入方案不可扩展或者方案不可靠的陷阱。&/p&&h2&一条极富挑战性的路&/h2&&p&看到这里,你或许在怀疑这样的机制能否真正建立起来。但是这样做带来的收益完全值得去冒险。下面是一些可能会阻碍这个甚至会逆转这个过程的问题:&/p&&p&&em&人们不愿意改变。&/em&人们总是倾向于重建他们习惯的环境,这会导致他们倾向于返回到传统的思考者-执行者模型。新雇佣的人更容易习惯新的组织架构。当发生问题时应该尤其警觉,例如当API出了问题或者算法效果不好。&/p&&p&人们会坚持认为工程师应该为此负责,但是他们往往说的只是症状,而不是问题本身。工程师们应该做的是为平台提供更好的支持、可视化、抽象以及健壮性。同时应该认识到,工程师本来就有可能破坏东西,没人可以保证不犯错误,不破坏任何东西。&/p&&p&&em&平台工程师们一定要走在数据科学家们前面。&/em&团队里需要非常敏锐的工程师,能够提前预料到数据科学家们需要哪些服务、框架和功能。数据科学家不再把想法交给工程师来实现的一个后果就是,工程师们不再能够针对数据科学家的需求来做出反应,因此就需要能够提前预判。&/p&&p&记住,工程师们是在建造乐高积木,而数据科学家们是在组装积木。如果数据科学家们没有合适的积木可用,他们就会找出其他的解决方案。他们要么会使用错误的积木(在圆形的洞里填一个方形的积木),要么会自己造一个。通常来讲,由于这种自己造轮子的过程缺乏系统性和全局性考虑,所以会造成一团混乱。而这种混乱一旦被创造出来就很难收拾,正所谓覆水难收。&/p&&h2&不要惧怕效率问题&/h2&&p&鼓励数据科学家肩负如此广阔任务栈的后果之一,就是他们可能无法生产出和专业工程师一样专业高效的代码和方案。我们是在用效率来交换速度和自治性。对这个复杂权衡的认识是非常重要的。&/p&&p&但与此同时,这种端到端的自治性也有一些不那么明显的高效之处。在他们所实现的领域,数据科学家们是专家,所以他们能够做出一些需求和技术代价之间的权衡。例如,他们可以决定在某些合适的地方使用抽样数据,或者近似方法,他们可以决定砍掉一些实现和维护代价很高,但是收益有限的功能。这些在传统的思考者-执行者模型中是基本不会发生的,即使发生了,也是以反复沟通谈判为代价的。&/p&&p&综合来说,我们希望这种自治性带来的效率和创新会大于数据科学家“全栈开发”带来的一些低效。&/p&&h2&未来&/h2&&p&我不会声称我们发现了组织数据科学部门的最好方式,或者说这就是最适合你所在的组织的方式。但是这一定不是一种试图建造“更快的马”的尝试,而且我觉得这是更加适合我们的一种方式。&/p&&p&我真诚地希望,通过分享我们的尝试,能够鼓励其他非传统数据科学部门做出同样的尝试;能够激发正在组建新部门的负责人的灵感,让他们能够脑洞大开,挑战传统;能够告诉被传统组织架构所“伤害”的工程师和数据科学家们,还有其他可以工作的模式和环境存在。&/p&&h2&广告时间&/h2&&p&&strong&转转推荐搜索团队诚招靠谱算法工程师:转转是58集团旗下的专业二手交易平台,现在正在高速发展中,拥有干净的海量数据,独一无二的挑战性问题,更拥有广阔的发展空间和一群靠谱的小伙伴,无论你是希望快速成长还是希望建功立业,这里都是你最好的选择。有意者请发简历到。&/strong&&/p&&br&&ol&&li&&p&本文中的“数据科学家”可对应到国内更常用的“算法工程师”或“算法研究院”的角色。 &a href=&#fnref1& data-editable=&true& data-title=&?&&?&/a&&/p&&/li&&li&&p&本文中的“工程师”、“数据工程师”或“数据平台工程师”可对应到国内更常用的“偏工程”或“偏架构”的工程师角色。 &a href=&#fnref2& data-editable=&true& data-title=&?&&?&/a&&/p&&/li&&li&&p&问一下你的(数据平台工程师)面试官,他知不知道数据科学家坐在哪里(或者反之)。如果他们不知道,你就赶紧跑吧……
&a href=&#fnref3& data-editable=&true& data-title=&?&&?&/a&&/p&&/li&&li&&p&因为这些人的主要工作是保证数据通道的畅通,就像管道工人一样。 &a href=&#fnref4& data-editable=&true& data-title=&?&&?&/a&&/p&&/li&&li&&p&福特汽车的创始人福特曾经说过一句话:“如果(发明汽车时)去问人们想要的是什么的话,他们会说想要的是更快的马”。比喻默守陈规,在既有框架下做改进。 &a href=&#fnref5& data-editable=&true& data-title=&?&&?&/a&&/p&&/li&&li&&p&这里的通知(inform)指的是在传统的行业中,BI很多时候只是将自己分析的结果告诉、通知业务部门,但是是否采纳并还是由业务部门决定,这也反映出了传统BI部门略显尴尬的地位。 &a href=&#fnref6& data-editable=&true& data-title=&?&&?&/a&&/p&&/li&&li&&p&“横向”指的是开发具有可扩展性,高可复用性的应用或者组件。 &a href=&#fnref7& data-editable=&true& data-title=&?&&?&/a&&/p&&/li&&/ol&
翻译前言 在很多互联网公司的算法相关部门(例如搜索、推荐、广告)里,都有“做算法的”和“做工程的”两个工种。这个看似天经地义的分工方式是否就是最优的方式?这似乎还是存在一些争议的。这篇文章阐述了一种当前较为普遍合作模式下的问题,译者觉得说…
&p&说说我学习深度学习的经历吧,从开始学习到现在大概有4个月,只能算新手,刚好可以回答新手问题。&/p&&br&&p&先说编程:自认会用C++, 熟悉Python&/p&&br&&p&英语水平:中等,能很快读懂英文科学文献&/p&&br&&p&最开始对人工智能/深度学习感兴趣是因为想用它试一试自然语言生成,后来想到一个物理方面的题目,预计可以用深度学习技术解决,开始接触深度神经网络。记录一下学习历程,&/p&&br&&p&1. 安装 Tensorflow(google 开源的深度学习程序), 尝试里面最简单的例子MNIST 获得激励。&/p&&p&2. 之后尝试通过读书(看视频)理解最简单的全连接神经网络&/p&&p&
先搜索找到答案:为什么要Go Deep?&/p&&p& (1)神经网络中输入层,隐藏层,输出层之间矩阵乘积的维度变化。&/p&&p& (2)Weight, Bias 这些是什么,改变它们有什么结果。&/p&&p& (3)激励函数是什么,有什么作用,有哪些常用的激励函数&/p&&p& (4)误差如何向后传递,网络如何通过最小化误差函数更新,有哪些常用的优化方法&/p&&p&
以上这些在一本交互式电子书中可以找到答案:&/p&&p&&a href=&///?target=http%3A///index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Neural networks and deep learning&i class=&icon-external&&&/i&&/a&&/p&&p&
如何对权重正规化,L1, L2, BatchNormalization, (这些在以后真正应用的时候再看)&/p&&p&&a href=&///?target=http%3A//www.deeplearningbook.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Deep Learning&i class=&icon-external&&&/i&&/a& chapter 7 for L1, L2 regulation. &/p&&p&&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (2015)&i class=&icon-external&&&/i&&/a& original paper for BN&/p&&p&&a href=&///?target=https%3A///Why-does-batch-normalization-help& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&why does batch normalization help?&i class=&icon-external&&&/i&&/a& Quora&/p&&p&&a href=&///?target=http%3A//blog.csdn.net/happynear/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Note for BN in Chinese&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A///implementing-batch-normalization-in-tensorflow.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Implementing Batch Normalization in Tensorflow&i class=&icon-external&&&/i&&/a& from R2RT&/p&&p&&a href=&///?target=https%3A//arxiv.org/pdf/v1.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Layer normalization (2016)&i class=&icon-external&&&/i&&/a& Replace Batch Normalization in RNN&/p&&p&&a href=&///?target=http%3A//www.jmlr.org/papers/volume11/erhan10a/erhan10a.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Why Does Unsupervised Pre-training Help Deep Learning?&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&///?target=http%3A//www.stat.cmu.edu/%7Eryantibs/journalclub/deep.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Summary and discussion on pre training&i class=&icon-external&&&/i&&/a&&/p&&br&&p&3. 选择一种比较比较底层的神经网络开源库,tensorflow 或 theano, &/p&&p&
(1) 读官方文档 &a href=&///?target=https%3A//www.tensorflow.org/versions/r0.11/tutorials/index.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&tensorflow.org/versions&/span&&span class=&invisible&&/r0.11/tutorials/index.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&
(2) 看周莫凡的网络教程 &a href=&///?target=https%3A///user/MorvanZhou& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/user/Morvan&/span&&span class=&invisible&&Zhou&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/p&&p&
(3) 重复敲代码,重复实现例子程序&/p&&p&4.
开始理解各种不同神经网络架构所能处理的问题&/p&&p&
(1) CNN 图像识别,图像处理,语音处理&/p&&p&
RNN,LSTM 自然语言理解与生成&/p&&p&
增强学习,玩游戏 :)&/p&&p&5.
尝试各种开源的有意思的神经网络项目,新手可以从下面这个列表开始&/p&&p&
(1)&a href=&///?target=http%3A//karpathy.github.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Andrej Karpathy blog&i class=&icon-external&&&/i&&/a& char-rnn, Deep Reinforcement Learning: Pong from Pixels&/p&&p&
&a href=&///?target=https%3A///anishathalye/neur}

我要回帖

更多关于 小程序登入php代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信