nanomsg server 如何与 普通tcp tcpsocketsaeaserver连接

Socket connection between C (nanomsg) and Python (non-nanomsg) - Stack Overflow
to customize your list.
This site uses cookies to deliver our services and to show you relevant ads and job listings.
By using our site, you acknowledge that you have read and understand our , , and our .
Your use of Stack Overflow’s Products and Services, including the Stack Overflow Network, is subject to these policies and terms.
Join Stack Overflow to learn, share knowledge, and build your career.
or sign in with
I created a socket server in C (using nanomsg) which shall communicate with a Python script (using standard 'Socket' implementation) via TCP:
C-Code (without error handling):
#include &nanomsg/nn.h&
#include &nanomsg/pair.h&
char buf[23];
socket = nn_socket(AF_SP, NN_PAIR);
nn_bind(socket, "tcp://127.0.0.1:xxxxx");
nn_recv(socket, buf, sizeof(buf), 0);
nn_shutdown(socket, endpoint_id);
Python-Code:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", xxxxx))
s.send('Hello C this is Python')
There is no error in Python when connecting to the socket (if the C app is running). However, the C script is idling in method nn_recv and doesn't get any data at all. What am I doing wrong?
First I start the C code in a shell (it idles in method nn_recv). Then I start Python in another shell and expect the C application to receive the data. Both scripts execute without error.
The issue is that nanomsg socket type is not a plain, standard, TCP type. The protocols do not match. You cannot send TCP message to a nanomsg socket and expect that nn_recv will work since the message will not conform to the defined nanomsg SP protocol requirements.
See nanomsg SP protocol header:
0 1 2 3 4 5 6 7
8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
First four bytes of the protocol header are used to make sure that the peer's protocol is compatible with the protocol used by the local endpoint.
If the protocol header received from the peer differs, the TCP connection MUST be closed immediately.
That means that any raw TCP send to the nanomsg socket will kill the connection since it does not confirm to the SP protocol.
For more info consult the sp-tcp-mapping-01.txt document
4,06712135
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Post as a guest
Post as a guest
Post Your Answer
By clicking &Post Your Answer&, you acknowledge that you have read our updated ,
and , and that your continued use of the website is subject to these policies.
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabled后使用快捷导航没有帐号?
查看: 5210|回复: 4
转:nanomsg源码阅读(一)
论坛徽章:35
nanomsg是zeromq作者Martin Sustrik用C重写的一套具有可扩展协议的一套通信框架,具体nanomsg与zeromq的不同与改进之处及为什么要用C重写在这里有详细的描述,个人感觉C的代码风格和目录结构组织都看着舒服多了,:),另外Martin Sustrik博客( )里面的每篇文章感觉都挺不错的,推荐关注订阅!
因为nanomsg还处于开发测试阶段,代码量还不是十分庞大,文档和注释也不够全面,于是想通过这一系列博客,一方面记录下我对nanomsg当前源码()的阅读过程,同时也学习下一个好的开源项目的代码组织及开发过程。
首先看下nanomsg的src目录:
nn.h*& && && && && &&&#nanomsg对外暴露的接口api
transport.h*& && && & #通信层定义,,目的应该是想暴露给用户以实现可扩展,但目前还包含utils下头文件……
inproc.h*& && && && & #一种transport,安装到include/nanomsg下
ipc.h*& && && && && & #一种transport,安装到include/nanomsg下
tcp.h*& && && && && & #一种transport,安装到include/nanomsg下
protocol.h*& && && &&&#协议层定义,目的应该是想暴露给用户以实现可扩展,但目前还包含utils下头文件……
reqrep.h*& && && && & #一种protocol,安装到include/nanomsg下
pubsub.h*& && && && & #一种protocol,安装到include/nanomsg下
bus.h*& && && && && & #一种protocol,安装到include/nanomsg下
pair.h*& && && && && &#一种protocol,安装到include/nanomsg下
pipeline.h*& && && &&&#一种protocol,安装到include/nanomsg下
survey.h*& && && && & #一种protocol,安装到include/nanomsg下
utils/& && && && && & #实用工具包,包含基本数据结构(list,queue,hash)互斥及原子操作(mutex,atomic)等
transports/& && && &&&#通信层实现,包括(inproc:进程内通信;ipc:进程间通信;tcp:tcp通信)
protocols/& && && && &#协议层实现,包括(REQ/REP:请求/应答;PUB/SUB:发布订阅等.)
core/& && && && && &&&#generic code,glue between the pieces
aio/& && && && && && &#线程池模拟的异步操作,带状态机的事件驱动
CMakeLists.txt*& && & #cmake编译文件
pkgconfig.in*& && && &#pkconfig工具配置文件
README*& && && && && &#readme
其中nanomsg对外暴露的接口api定义在nn.h中:
NN_EXPORT int nn_socket (int domain, int protocol);
NN_EXPORT int nn_close (int s);
NN_EXPORT int nn_setsockopt (int s, int level, int option,
& && && && && && && && && &&&const void *optval, size_t optvallen);
NN_EXPORT int nn_getsockopt (int s, int level, int option,
& && && && && && && && && &&&void *optval, size_t *optvallen);
NN_EXPORT int nn_bind (int s, const char *addr);
NN_EXPORT int nn_connect (int s, const char *addr);
NN_EXPORT int nn_shutdown (int s, int how);
NN_EXPORT int nn_send (int s, const void *buf, size_t len, int flags);
NN_EXPORT int nn_recv (int s, void *buf, size_t len, int flags);
NN_EXPORT int nn_sendmsg (int s, const struct nn_msghdr *msghdr, int flags);
NN_EXPORT int nn_recvmsg (int s, struct nn_msghdr *msghdr, int flags);
NN_EXPORT int nn_device (int s1, int s2);
熟悉posix socket接口api的人应该对这些接口不陌生(除了后面三个函数,以后会介绍), 所以一个简单的服务端应答程序大致是这样的:
char buf[10];
int s = nn_socket(AF_SP, NN_REP);
nn_bind(s, &tcp://*:5555&);
nn_recv(s, buf, 10, 0);
nn_send(s, &World&, 5, 0);
nn_close(s);
对应的客户端请求程序大致为:
char buf[10];
int s = nn_socket(AF_SP, NN_REQ);
nn_connect(s, &tcp://localhost:5555&);
nn_send(s, &Hello&, 5, 0);
nn_recv(s, buf, 10, 0);
printf(&Hello %s\n&, buf);
nn_close(s);
对nanomsg接口及代码框架了解后,不妨让我们深入下细节,探探究竟。
论坛徽章:35
看起来nanomsg的编程模型还是挺简单的
金牌会员, 积分 2215, 距离下一级还需 785 积分
论坛徽章:32
nanomsg有啥新功能出现,又有啥优势!
高级会员, 积分 714, 距离下一级还需 286 积分
论坛徽章:13
都研究上源码了,C语言功底应该很强
中级会员, 积分 429, 距离下一级还需 71 积分
论坛徽章:9
比较晦涩,但是还是非常值得学习。
dataguru.cn All Right Reserved.嵌入式软件
nanomsg框架简介
1、nanomsg概述
nanomsg是一个socket library,它提供了几种常见的通信模式,为了能使网络层快速、可扩展并且能易于使用。用C实现,且适用于广泛的操作系统,几乎不需要依赖。这里的通信模式(也称为“可扩展性协议”)是构建分布式系统的基本框架。通过组合它们,可以创建广泛的分布式应用程序。
目前可用的可扩展性协议有:
PAIR - 简单的一对一沟通
BUS - 简单的多对多通信
REQREP - 允许构建无状态服务集群来处理用户请求
PUBSUB - 将消息分发给订阅消息的用户
PIPELINE - 汇总来自多个来源的消息,并在许多目的点之间进行负载平衡
SURVEY - 允许一次查询多个应用程序的状态
可扩展性协议分层在传输层之上的网络堆栈中,目前nanomsg library支持以下传输机制:
INPROC - 进程内的传输(线程,模块等之间)
IPC - 在单个机器上的进程间传输
TCP - 通过TCP的网络传输
该库向应用程序公开了一个类似BSD的套接字C API。
2、nanomsg源码
nanomsg/src/
nn.h:nanomsg对外暴露的api接口
transport.h:通信层定义,主要是为了暴露给用户以实现扩展,但目前包含了utils下的相关头文件,其中inproc.h/ipc.h/tcp.h是对应的transport
protocol.h:协议层定义,也是为了暴露给用户以实现扩展,其中reqrep.h/pubsub.h/bus.h/pair.h/pipeline.h/survey.h是对应的protocol
utils/:实用工具包,包含基本数据结构(list/queue/hash)、互斥及原子操作(mutex/atomic)等
transports/:通信层实现,包括(inproc:进程内通信;ipc:进程间通信;tcp:tcp通信)
protocols/:协议层实现,包括(REQREP:请求响应;PUBSUB:订阅发布等)
core/:通用代码
aio/:线程池模拟的异步操作,带状态机的事件驱动等
CMakeLists.txt:cmake编译文件
pkgconfig.in:pkgconfig工具配置文件
nanomsg/src/nn.h
NN_EXPORT int nn_socket (int domain, intprotocol);
domain:AF_SP(标准稳定的SP Socket);AF_SP_RAW(原始套接字省略了AF_SP套接字中的端到端功能,因此可用于在SP拓扑结构中实现中间设备)
protocol:相应的6种可扩展性协议对应的socket types
注:1)所有SP sockets是基于消息的,所以其忽略了类型定义,这里都是SOCK_SEQPACKE(有序分组套接字)类型的;
2)nn_socket函数返回的文件描述符不是标准描述符,如果与系统函数一起使用时将呈现为无法定义的行为,可能会发生冲突。
1)EAFNOSUPPORT:指定address family不支持;
2)EINVAL:未知的protocol;
3)EMFILE:达到打开的SP Socket或OS限制的最大的文件描述符;
4)ETERM:library终止。
NN_EXPORT int nn_close (int s);
EBADF:提供的socket是无效的
EINTR:操作被某个信号打断,socket不能完全关闭,调用nn_close()函数能重新启动操作
注:关闭socket,任何未被应用程序接收的入站缓冲的消息将被丢弃,同时该库将传输出站消息并指定NN_LINGER socket选项。
NN_EXPORT int nn_setsockopt (int s, intlevel, int option,
const void *optval, size_t optvallen);
NN_EXPORT int nn_getsockopt (int s, intlevel, int option,
void *optval, size_t *optvallen);
NN_EXPORT int nn_bind (int s, const char*addr);
NN_EXPORT int nn_connect (int s, const char*addr);
NN_EXPORT int nn_shutdown (int s, int how);
NN_EXPORT int nn_send (int s, const void*buf, size_t len, int flags);
NN_EXPORT int nn_recv (int s, void *buf,size_t len, int flags);
NN_EXPORT int nn_sendmsg (int s, conststruct nn_msghdr *msghdr, int flags);
NN_EXPORT int nn_recvmsg (int s, struct nn_msghdr*msghdr, int flags);
NN_EXPORT int nn_device (int s1, int s2);
3、pubsub模式
4、reqrep模式
5、参考链接
没有更多推荐了,&p&让我来分享一个很不快速(需耗时一年),但包你从零基础学到昏厥的学习教程吧:统计、SQL、R、Python、Tableau、Excel、Forecasting & Machine Learning&/p&&p&&br&&/p&&h2&&b&1. 统计&/b&&/h2&&p&&br&&/p&&p&统计需要掌握的姿势:&/p&&ul&&li&Descriptive Statistics&/li&&li&Probability Concepts and Probability Distributions&/li&&li&Sampling Distributions and the Central Limit Theorem&/li&&li&Confidence Intervals&/li&&li&Hypothesis Testing&/li&&li&Analysis of Variance&/li&&li&Chi Square and Nonparametric Tests&/li&&li&Simple and Multiple Regression&/li&&/ul&&p&&br&&/p&&p&想躲过统计???&/p&&figure&&img data-rawheight=&216& src=&https://pic4.zhimg.com/50/v2-2bafdf34f4a_b.jpg& data-size=&normal& data-rawwidth=&233& class=&content_image& width=&233&&&/figure&&p&&br&&/p&&p&入门课收好,Coursera上阿姆斯特丹大学的Basic Statistics,卡通配图教学,和萌萌哒的你最配!!&/p&&ul&&li&&b&University of Amsterdam:&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/basic-statistics& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Basic Statistics | Coursera&/a&&/b& (旁听免费)&/li&&/ul&&p&&br&&/p&&p&喏,还有一本简洁易懂的step by step英文教材,也是我们课上用的教材~&/p&&ul&&li&&b&Basic Business Statistics by Mark L.Berenson & Others&/b&&/li&&/ul&&p&&br&&/p&&h2&&b&2. SQL&/b&&/h2&&p&&br&&/p&&p&常用语句来来回回就那么几个,但是要熟,要熟,要熟!&/p&&p&简历上有SQL技能,很重要!!!很重要!!!&/p&&p&&br&&/p&&p&常用语句总结:&b&&a href=&//link.zhihu.com/?target=https%3A//www.w3schools.com/sql/sql_quickref.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SQL Quick Reference From W3Schools&/a&&/b&&/p&&p&&br&&/p&&p&再送你一门超好,超好,超好的MySQL课!Coursera!杜克大学!我太喜欢教课的那个温柔美丽的大姐姐了~&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/analytics-mysql& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Managing Big Data with MySQL | Coursera&/a&&/b& (旁听免费)&/li&&/ul&&p&&br&&/p&&h2&&b&3. R&/b&&/h2&&p&R和Python谁才是数据分析一哥,江湖上已经争论很多年了,至今没有定论...... 事实大概是Python的主要功能是编程,除了单纯的数据分析,在很多领域还有广泛利用,所以就业市场上对Python的需求是远大于R。&/p&&p&R主要侧重统计功能,在统计方面显示出了很多的优势,用R做单纯的数据分析还是妥妥的稳稳的。但是往数据科学方向走的话,R就有点顶不住了,轮到Python扬眉吐气了......&/p&&p&这两门语言我都渣,只能说个大概,大家还需要自己去摸索这两门语言的美~&/p&&p&我学R上的课是Coursera上Johns Hopkins University的经典R课程和在Data Application Lab实习的时候上的商业分析师培训课。Coursera的那门课我上得不太走心,默默吐槽一下课程莫名散发着浓浓的时代感,老师有点面无表情,比较打击我的学习激情...... 好吧,我知道我作......&/p&&figure&&img data-rawheight=&225& src=&https://pic2.zhimg.com/50/v2-fdea6a17e93af6fba6ddc4_b.jpg& data-size=&normal& data-rawwidth=&225& class=&content_image& width=&225&&&/figure&&p&后来实习的时候上公司的培训课,教R的是个讲话干脆利落的小姐姐,才让我重新喜欢上R......&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/r-programming& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&R Programming | Coursera&/a&&/b& (旁听免费)&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.dataapplab.com/course/bacn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&商业分析师 - Data Application Lab&/a&&/b&&/li&&/ul&&p&&br&&/p&&p&作为一名主观上比较站Python的小粉丝,我目前学过的R就这么多啦!!大体了解了R的语言思维,碰到不会的问题再Google找代码就差不多了~&/p&&p&&br&&/p&&p&另外,我在Udemy上找到一门R的课,看课程设置觉得还是挺不错的,想学R的可以试试~ 关于Udemy上课程的价格补充一句,原价是吓人的,常年打折,但是打折力度经常变来变去的,最便宜的时候一般是10-20块的价格可以买到好课...... BTW,下面这门课目前15刀。&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/r-programming/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&R Programming A-Z(TM): R For Data Science With Real Exercises!&/a&&/b& &/li&&/ul&&figure&&img data-rawheight=&861& src=&https://pic3.zhimg.com/50/v2-961d8fab14c93995bdf6e596f2c1d1b8_b.jpg& data-size=&normal& data-rawwidth=&958& class=&origin_image zh-lightbox-thumb& width=&958& data-original=&https://pic3.zhimg.com/50/v2-961d8fab14c93995bdf6e596f2c1d1b8_r.jpg&&&/figure&&p&&br&&/p&&h2&&b&4. Python&/b&&/h2&&p&Python 是一门可以让人浑然忘我的语言......&/p&&p&这辈子学过韩语、日语、英语,和一丢丢R,但Python是我学得最有激情的......&/p&&p&最沉浸的那段时间里,不管几点回家,晚上睡觉前一定要看一点Python爬虫才能安心睡下,晚上做梦也是爬虫代码......&/p&&figure&&img data-rawheight=&350& src=&https://pic4.zhimg.com/50/v2-bdef_b.jpg& data-size=&normal& data-rawwidth=&350& class=&content_image& width=&350&&&/figure&&p&我最开始接触Python的时候上的课是Coursera上University of Michigan的经典系列:Python for Everybody,里面包含五门专项课,除了最后一门Capstone,其他四门都刷过(没写作业)。&/p&&p&这门课非常实在,内容非常赞,上课的是个亲切的老爷爷,学下来有助于你系统了解Python的功能~ 个人感觉 Using Python to Access Web 对于纯小白来说可能有点难度~&/p&&p&提醒一下,如果你搜Python for Everybody,会发现...... 要交钱上啊!!!省钱小tip就是在搜索栏里一门一门搜专项课,进入专项课的页面就可以免费旁听了...... 同理适用于Coursera很多其他的系列课程。&/p&&p&&br&&/p&&p&&b&University of Michigan:&/b& &b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/specializations/python& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python for Everybody | Coursera&/a&&/b&&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/python& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Programming for Everybody (Getting Started with Python) | Coursera&/a&&/b&&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/python-data& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python Data Structures | Coursera&/a&&/b&&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/python-network-data& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Using Python to Access Web Data | Coursera&/a&&/b&&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/python-databases& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Using Databases with Python | Coursera&/a&&/b&&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/python-data-visualization& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Capstone: Retrieving, Processing, and Visualizing Data with Python | Coursera&/a&&/b&&/li&&/ul&&p&&br&&/p&&p&密西根大学还出了Python的数据科学进阶课,包含了数据分析、画图和机器学习等内容:&/p&&ul&&li&&b&University of Michigan:&/b& &b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/specializations/data-science-python& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Applied Data Science with Python | Coursera&/a&&/b&&/li&&/ul&&figure&&img data-rawheight=&346& src=&https://pic3.zhimg.com/50/v2-f56aba091ffc_b.jpg& data-size=&normal& data-rawwidth=&400& class=&content_image& width=&400&&&/figure&&p&&br&&/p&&p&另外,我还追过大神 &a class=&member_mention& href=&//www.zhihu.com/people/fd165ce69c8edd9e753533& data-hash=&fd165ce69c8edd9e753533& data-hovercard=&p$b$fd165ce69c8edd9e753533&&@秦路&/a& 的&a href=&https://zhuanlan.zhihu.com/qinlu& class=&internal&&运营大湿兄&/a&知乎专栏,从“&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&开始Python的新手教程&/a&” 到“&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&用Python分析用户消费行为&/a&”,一共六篇文章,超快速入门Python数据分析。&/p&&p&&br&&/p&&p&Udemy上也有一门很棒的Python数据分析课,我目前在上,觉得好棒棒~&/p&&p&教numpy、pandas、画图、带着练三个数据小项目,至此觉得内容量已经很良心了,老师竟然还教机器学习!!!20个机器学习视频,用SciKit Learn这个包!还有还有!11个统计视频!还没完还没完!还有几个SQL和Web Scraping的小视频!满满的良心学习大礼包~&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/learning-python-for-data-analysis-and-visualization/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learning Python for Data Analysis and Visualization&/a&&/b&&/li&&/ul&&figure&&img data-rawheight=&848& src=&https://pic1.zhimg.com/50/v2-9adb75dace7bcad0046cd28_b.jpg& data-size=&normal& data-rawwidth=&1175& class=&origin_image zh-lightbox-thumb& width=&1175& data-original=&https://pic1.zhimg.com/50/v2-9adb75dace7bcad0046cd28_r.jpg&&&/figure&&figure&&img data-rawheight=&198& src=&https://pic2.zhimg.com/50/v2-3e5b99c5c531a4a543bc055ddec7dcfc_b.jpg& data-size=&normal& data-rawwidth=&254& class=&content_image& width=&254&&&/figure&&p&&br&&/p&&p&想必还有很多盆友们对爬虫充满了兴趣......&/p&&p&学爬虫当然要看崔庆才大神的系列教程啊!!!&/p&&p&&br&&/p&&p&文字版教程免费,使用的是Python 2.7版本↓&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=http%3A//cuiqingcai.com/1052.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python爬虫学习系列教程 | 静觅&/a&&/b&&/li&&/ul&&p&&br&&/p&&p&视频教程499软妹币,之前有过折扣,印象中270多~&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=http%3A//cuiqingcai.com/4320.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python3爬虫视频学习教程 | 静觅&/a&&/b&&/li&&/ul&&p&&br&&/p&&p&如果你只是比较随意,不想玩那么高深,或者你真的和我一样穷,可以看看文字版教程,了解urlib库、Requests库、BeautifulSoup库、Selenium库以及正则表达式后,跟着崔大神的三个免费case练一遍~ 我觉得对于小白来说就差不多了~&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//edu.hellobi.com/course/156& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python3爬虫三大案例实战分享&/a&&/b&&/li&&/ul&&p&&br&&/p&&p&对于数据分析师来说,会爬虫不属于必备技能,那么学爬虫的意义是什么呢?大神 &a class=&member_mention& href=&//www.zhihu.com/people/6d23d8e16eb481ebb5898a4& data-hash=&6d23d8e16eb481ebb5898a4& data-hovercard=&p$b$6d23d8e16eb481ebb5898a4&&@董伟明&/a&在他接近满分的&a href=&https://www.zhihu.com/lives/861184& class=&internal&&“爬虫从入门到进阶”&/a&的Live简介中说得直戳心坎~&/p&&figure&&img data-rawheight=&195& src=&https://pic2.zhimg.com/50/v2-c1a2b63c29f0d0959472_b.jpg& data-size=&normal& data-rawwidth=&440& class=&origin_image zh-lightbox-thumb& width=&440& data-original=&https://pic2.zhimg.com/50/v2-c1a2b63c29f0d0959472_r.jpg&&&/figure&&p&&br&&/p&&figure&&img data-rawheight=&458& src=&https://pic3.zhimg.com/50/v2-28aaa8c941f1ea9e5cebc554_b.jpg& data-size=&normal& data-rawwidth=&705& class=&origin_image zh-lightbox-thumb& width=&705& data-original=&https://pic3.zhimg.com/50/v2-28aaa8c941f1ea9e5cebc554_r.jpg&&&/figure&&p&Hello World,醒醒啊!!!你的女神来了!!!&/p&&p&&br&&/p&&h2&&b&5. Tableau&/b&&/h2&&p&终于,数据分析界的女神出场了!!!让我们大声喊出她的名字:&b&T! A! B! L! E! A! U!&/b&&/p&&p&读作“Tab-low”!!!&/p&&p&我身边很多学Tableau的孩纸们,反应不是酱紫的,&/p&&figure&&img data-rawheight=&446& src=&https://pic2.zhimg.com/50/v2-29c2c1aa64f800bcb4a54725dddcce65_b.jpg& data-size=&normal& data-rawwidth=&450& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&https://pic2.zhimg.com/50/v2-29c2c1aa64f800bcb4a54725dddcce65_r.jpg&&&/figure&&p&就是酱紫的......&/p&&figure&&img data-rawheight=&344& src=&https://pic3.zhimg.com/50/v2-ca77ddbbd010dc21d86b4ec_b.jpg& data-size=&normal& data-rawwidth=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/50/v2-ca77ddbbd010dc21d86b4ec_r.jpg&&&/figure&&p&纷纷表示在这个看脸的时代,要好好学习女神软件......&/p&&figure&&img data-rawheight=&619& src=&https://pic1.zhimg.com/50/v2-d01bec031c628_b.jpg& data-size=&normal& data-rawwidth=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/50/v2-d01bec031c628_r.jpg&&&/figure&&p&&i&(Source: Best Practices for Designing Efficient Tableau Workbook)&/i&&/p&&p&&br&&/p&&p&凭借着打娘胎起就异于常人的颜值,Tableau迅速蹿红,逐渐渗透进业界和美国高校。对于在美帝的数据分析师来说,Tableau也是简历上必备的技能之一。&/p&&p&我目前觉得学习Tableau的最好方式,还是去Coursera上上杜克大学的那门课,基本涵盖入门到中高级操作,墙裂打call,墙裂推荐!!!真的好喜欢教课的杜克大姐姐......&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/analytics-tableau%23& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Data Visualization and Communication with Tableau | Coursera&/a&&/b&&/li&&/ul&&p&另外,Tableau为了推广自家软件,在免费培训方面也是做得很拼......&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.tableau.com/learn/training& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tableau Training & Tutorials&/a&&/b& (中英文都有)&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.tableau.com/learn/live-training-resources& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Live Training Resources&/a&&/b&&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.tableau.com/learn/webinars& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Webinars&/a&&/b&&/li&&/ul&&p&还有很多很棒的Tableau使用者的case展示~&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//public.tableau.com/en-us/s/gallery& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Gallery&/a&&/b&&/li&&/ul&&p&还有Moveover Monday Project,每周一po一个数据集和数据分析展示~&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=http%3A//www.makeovermonday.co.uk/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A weekly social data project&/a&&/b&&/li&&/ul&&p&至于有些人说,下载都这么贵,土豪才学得起吧...... 只要你乖乖去上Coursera杜克大姐姐的课,会有惊喜......&/p&&p&&br&&/p&&h2&&b&6. Excel&/b&&/h2&&p&无论你多喜欢Excel或者多不喜欢Excel...... 作为数据分析师,简历上有Excel技能也是必备......&/p&&p&最重要的当然是会Pivot Tables~&/p&&p&我也是通过DAL的&a href=&//link.zhihu.com/?target=https%3A//www.dataapplab.com/course/bacn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&商业分析培训课&/a&学的Pivot Tables,如果你只想学Pivot Tables,可以去Udemy上这门↓&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/data-analysis-with-excel-pivot-tables/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Microsoft Excel - Data Analysis with Excel Pivot Tables&/a&&/b&&/li&&/ul&&p&当然,还有一个免费的学习神器,YouTube啊~ 哈哈,Pivot Tables一搜一大把~&/p&&figure&&img data-rawheight=&600& src=&https://pic1.zhimg.com/50/v2-7fcd94a123d16fe8b91609c_b.jpg& data-size=&normal& data-rawwidth=&1440& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&https://pic1.zhimg.com/50/v2-7fcd94a123d16fe8b91609c_r.jpg&&&/figure&&p&我真的非常热爱YouTube,基本没有YouTube不到的姿势......&/p&&p&&br&&/p&&h2&&b&7. Forecasting&/b&&/h2&&p&预测/时间序列也是我们数据分析僧要掌握的技能,不过学得比较浅显,大概了解几个预测模型的原理和会用软件操作就行了。我们用过的教材是Business Forecasting,有中文版,不过我相信你不会想看的......&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject/1896141/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&商业预测 (豆瓣)&/a&&/b&&/li&&/ul&&p&Udemy上依旧有药!介绍Moving Average, Simple Exponential Smoothing, Double Exponential Smoothing / Holts, Winters / HoltWinters等模型以及在R和Tableau中的操作。&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/forecasting-time-series-using-xlminer-r-and-tableau/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Data Science-Forecasting/Time series Using XLMiner,R&Tableau&/a&&/b&&/li&&/ul&&p&&br&&/p&&p&如果你对Tableau女神是真爱!可以去上Udemy新课,目前评价4.7分,感觉还挺不错的样子,反正是安利到我了~&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/forecasting-and-time-series-analysis-in-tableau/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Forecasting and Time Series Analysis in Tableau&/a&&/b&&/li&&/ul&&figure&&img data-rawheight=&593& src=&https://pic3.zhimg.com/50/v2-e381a38e1aa0b411a0b7f_b.jpg& data-size=&normal& data-rawwidth=&994& class=&origin_image zh-lightbox-thumb& width=&994& data-original=&https://pic3.zhimg.com/50/v2-e381a38e1aa0b411a0b7f_r.jpg&&&/figure&&p&&br&&/p&&h2&&b&8. Data Mining and Machine Learning&/b&&/h2&&p&想当年,刚接触数据时,我还是个蠢萌的宝宝,在听说“Machine Learning”这个东东的时候,内心是下面那样的......&/p&&figure&&img data-rawheight=&400& src=&https://pic2.zhimg.com/50/v2-d7afbecccac27de4f441_b.jpg& data-size=&normal& data-rawwidth=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic2.zhimg.com/50/v2-d7afbecccac27de4f441_r.jpg&&&/figure&&p&何方的妖魔鬼怪,尼玛听名字就不明觉厉......&/p&&p&入坑数据分析一年,但才刚接触机器学习一个月(网课加这学期修的数据挖掘专业课),感觉难度明显拔高了一级,但越学越刺激,越学越稀饭~&/p&&figure&&img data-rawheight=&226& src=&https://pic2.zhimg.com/50/v2-f02bfc8b935c3_b.jpg& data-size=&normal& data-rawwidth=&223& class=&content_image& width=&223&&&/figure&&p&目前还是个渣渣,不敢瞎说,就大概罗列一下机器学习入门需要掌握的知识点和网上的学习资源吧:&/p&&ul&&li&Linear Regression&/li&&li&Logistic Regression&/li&&li&Decision Trees&/li&&li&k-Nearest Neighbors&/li&&li&Naive Bayes Classification&/li&&li&Discriminant Analysis&/li&&li&Neural Nets&/li&&li&Support Vector Machines&/li&&li&Cluster Analysis&/li&&li&Random Forest&/li&&li&Natural Language Processing&/li&&/ul&&p&&br&&/p&&p&如果没听说过吴恩达男神的机器学习王牌课程,那你一定是假的数据猿......&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/machine-learning& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Machine Learning | Coursera&/a&&/b&&/li&&/ul&&p&说实话,没上男神的Machine Learning前,我还挺不理解为什么这个看上去其貌不扬的大叔,有这么多死忠信众...... 每次大叔的动向更新,都跟地震一样...... 娶的老婆还是跟他智商一样上天高的女神大牛!约翰霍普金斯的CS博士......&/p&&figure&&img data-rawheight=&413& src=&https://pic3.zhimg.com/50/v2-e731bc7d0_b.jpg& data-size=&normal& data-rawwidth=&620& class=&origin_image zh-lightbox-thumb& width=&620& data-original=&https://pic3.zhimg.com/50/v2-e731bc7d0_r.jpg&&&/figure&&p&如果你和曾经的我一样迷惑,请去Coursera上课...... 顺带必须提一句,男神还是Coursera的联合创始人啊!!!我的前半生没有Coursera,但是后半生必须要跟Coursera紧紧相依......&/p&&figure&&img data-rawheight=&304& src=&https://pic3.zhimg.com/50/v2-6e7cac81b89bd450f1be8aa56af81e1f_b.jpg& data-size=&normal& data-rawwidth=&550& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic3.zhimg.com/50/v2-6e7cac81b89bd450f1be8aa56af81e1f_r.jpg&&&/figure&&p&反正现在的我是痛哭流涕着入吴恩达教了......&/p&&figure&&img data-rawheight=&225& src=&https://pic3.zhimg.com/50/v2-f927f13c96dbb964fd44ab_b.jpg& data-size=&normal& data-rawwidth=&225& class=&content_image& width=&225&&&/figure&&p&之前我在Python部分介绍的Udemy的Python数据分析课中,也涉及一部分机器学习的内容:&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/learning-python-for-data-analysis-and-visualization/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learning Python for Data Analysis and Visualization&/a&&/b&&/li&&/ul&&figure&&img data-rawheight=&904& src=&https://pic4.zhimg.com/50/v2-5b2a_b.jpg& data-size=&normal& data-rawwidth=&774& class=&origin_image zh-lightbox-thumb& width=&774& data-original=&https://pic4.zhimg.com/50/v2-5b2a_r.jpg&&&/figure&&p&&br&&/p&&p&内容设置很赞,也很系统的数据科学课程还有:&/p&&ul&&li&&b&University of Michigan:&/b& &b&&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/specializations/data-science-python& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Applied Data Science with Python | Coursera&/a&&/b&&/li&&/ul&&hr&&p&以上就是我总结的一些数据分析经典姿势~ 其实还有Decision Analysis(主要讲概率)和Optimization,大家就自行去YouTube吧,视频很多~&/p&&p&一年前的今天,我没开始刷网课,不会SQL,不会R,不会Python,不会Tableau,不懂Forecasting,更不知道机器学习是什么鬼...... 就修了两门专业课,统计和Optimization(Excel Modeling),仅此而已......&/p&&p&按照这份教程一点点啃完,其实你也可以在家DIY出半个名校学生(如果不提名校的校友资源和networking机会等的话)~&/p&&p&大家可以再参考一下几个美国出名的数据分析项目的课程设置:&/p&&ul&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.mccombs.utexas.edu/Master-of-Science-in-Business-Analytics/Academics/Curriculum& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&University of Texas -Austin | MS in Business Analytics&/a&&/b&&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//www.marshall.usc.edu/programs/specialized-masters-programs/master-science-business-analytics/curriculum& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&USC | MS in Business Analytics&/a&&/b&&/li&&li&&b&&a href=&//link.zhihu.com/?target=https%3A//grahamschool.uchicago.edu/academic-programs/masters-degrees/analytics/curriculum& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&University of Chicago | MS in Analytics&/a&&/b&&/li&&/ul&&p&&br&&/p&&p&最后再来个励志的故事,我最新关注的一个YouTuber,&a href=&//link.zhihu.com/?target=https%3A//www.youtube.com/user/sentdex/featured& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Harrison Kinsley&/a&。小哥毕业于Sam Houston State University(懵逼脸),专业是Philosophy and Criminology(茫然脸),毕业后就开始创业,自学python编程,并在网上po免费python教程,还创立了一个&a href=&//link.zhihu.com/?target=https%3A//pythonprogramming.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&python学习网站&/a&,YouTube上目前有27万多粉丝。&/p&&p&如果你好奇小哥怎么赚钱存活?小哥说,他一周就能接好几个offer...... 你们没听过的公司一堆一堆的,全宇宙人民都听过的大公司&b&Facebook&/b&和&b&Apple&/b&的offer他都有...... 另外他还做咨询赚钱,生计完全不愁......&/p&&figure&&img data-rawheight=&240& src=&https://pic3.zhimg.com/50/v2-51dbd0b31ff968f9e8c4_b.jpg& data-size=&normal& data-rawwidth=&240& class=&content_image& width=&240&&&/figure&&p&&br&&/p&&p&既然你都读到这儿了,看来也是数据的真爱,那就一起学到昏厥吧!&/p&&hr&&p&感谢大家的厚爱点赞~看了评论区讨论,想补充一些:&/p&&p&1.这个工程量的确蛮大的,因为我目前是学生,除了学习也没啥事干...如果图快的话,先挑重点的学,&b&统计&/b&(看个人基础)+&b&MySQL&/b&(只需要一周,快的话1-2天都不是没可能)+&b&R&/b&(熟悉语言思维+熟悉几个常用包+会google/度娘搜代码怎么写,也花不了太长时间,深入的内容以后慢慢补)。&b&Tableau初到中级操作&/b&和&b&Excel&/b&都属于甜点级别的,相对轻松。&b&Python的数据分析&/b&这块儿也不难,学过R以后很快也能上手Python分析,国内不清楚,在美国基本R或Python二选一就能找数据分析的入门工作。&/p&&p&&b&机器学习/数据挖掘/Python数据科学方向的操作&/b&,就需要有点功底了,会碰到比较基础的线性代数和微积分,我现在也在机器学习阶段跪着,等我顺利通关了再跟大家继续分享...但是我觉得比功底更重要的是,对数据的兴趣!!!我大学学韩语,连微积分和线性代数都没修过,现在也是在一点点补...吴恩达的机器学习网课,我刚上完Week 3,Week1-Week3的内容我刷了三遍,边刷边补微积分,才明白了大半。。。只要有热情,有耐心,不会的东西反复啃,就当用训练机器的方式来训练自己的大脑...这个过程也挺有意思的,哈哈。&/p&&p&2.还有很多人说,这个教程的重点是,英语要好... 这个有那么两丢丢道理... &/p&&p&那就推荐一个国内的培训课,人大经济论坛的&a href=&//link.zhihu.com/?target=http%3A//www.cda.cn/%3Futm_source%3Dshichangbu-zhihu-lzsj/question//answer/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CDA数据&/a&分析师,课程内容还是比较全面的,统计、R、SQL、Python、SPSS、Hadoop等等都有,大家可以根据大哥划过的数据分析重点合理安排自己的学习。&/p&&p&3.推荐的课里面,Coursera都是可以&b&免费旁听&/b&的,Udemy的课10-20刀。&/p&&p&4.欢迎关注我的知乎专栏哟,不定期,看心情写数据干货&b&&a href=&https://zhuanlan.zhihu.com/liangzidata& class=&internal&&聂大哥有药&/a&&/b&。我是一枚大脑洞的数据媛,略略略~&/p&
让我来分享一个很不快速(需耗时一年),但包你从零基础学到昏厥的学习教程吧:统计、SQL、R、Python、Tableau、Excel、Forecasting & Machine Learning 1. 统计 统计需要掌握的姿势:Descriptive StatisticsProbability Concepts and Probability Distribu…
正好我最近弄过,班门弄斧一下,亲测可行。&br&&br&&b&主要参考博客&/b&:&a href=&//link.zhihu.com/?target=http%3A//tonghuashuo.github.io/blog/latex-with-sublime-text.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用Sublime Text编写LaTeX&/a&&br&&br&主要内容:&br&&ol&&li&准备工作&/li&&li&安装LaTeXTools&/li&&li&配置LaTeXTools&/li&&li&配置编译器&/li&&li&配置SumatraPDF&/li&&li&使用&/li&&/ol&&br&&b&&i&&u&准备工作&/u&&/i&&/b&&br&首先我们需要安装并下载一些东西:&br&&ul&&li&MiKTeX (Windows 平台下的 LaTeX 工具套件,包含了 TeX 以及相关的程序,&a href=&//link.zhihu.com/?target=http%3A//www.miktex.org/download& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&下载地址&/a&)&br&&/li&&li&Subline Text (我用的2,&a href=&//link.zhihu.com/?target=http%3A//www.sublimetext.com/2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&下载地址&/a&)&br&&/li&&li&LaTeXTools (后面会有安装说明,建议使用Package Control 安装,这里也提供一个离线安装包地址,&a href=&//link.zhihu.com/?target=https%3A//github.com/SublimeText/LaTeXTools& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&下载地址&/a&)&br&&/li&&li&Sumatra PDF (LaTeXTools 默认使用它来预览生成的 PDF,&a href=&//link.zhihu.com/?target=http%3A//www.sumatrapdfreader.org/download-free-pdf-viewer.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&下载地址&/a&)&/li&&/ul&&br&&b&&i&&u&安装LaTeXTools&/u&&/i&&/b&&br&&ul&&li&首先需要安装Package Control&br&&/li&&/ul&按 ctrl+`,然后将下面的代码输入,按enter即可&br&Sublime Text 3:&br&&div class=&highlight&&&pre&&code class=&language-text&&import urllib.request,os, h = 'e5ee549c' + '8bc59f460fa163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
&/code&&/pre&&/div&Sublime Text 2:&br&&div class=&highlight&&&pre&&code class=&language-text&&import urllib2,os, h = 'e5ee549c' + '8bc59f460fa163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else N urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else N print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')
&/code&&/pre&&/div& 安装好了之后看以看到下面的选项:Preference-&Package Control&br&&figure&&img src=&https://pic4.zhimg.com/50/bc471c5c_b.jpg& data-rawwidth=&594& data-rawheight=&308& class=&origin_image zh-lightbox-thumb& width=&594& data-original=&https://pic4.zhimg.com/50/bc471c5c_r.jpg&&&/figure&&br&&ul&&li&安装LaTeXTools插件&br&&/li&&/ul& 安装好 Package Control 之后,按组合键 Ctrl+Shift+P,然后再输入 install,选择 Package Control: install package。进入库后,搜索所需的包,然后选择安装就好了。我们需要使用的包是 LaTeXTools。&br&&figure&&img src=&https://pic4.zhimg.com/50/21b3cf36de566d82e007_b.jpg& data-rawwidth=&441& data-rawheight=&428& class=&origin_image zh-lightbox-thumb& width=&441& data-original=&https://pic4.zhimg.com/50/21b3cf36de566d82e007_r.jpg&&&/figure&&br&&b&&i&&u&配置LaTeXTools&/u&&/i&&/b&&br&打开 Sublime Text,按下快捷键 Ctrl+Shift+P,调出 Package Control,搜索“LaTeXTools: Reconfigure and migrate settings”并回车即可。这一步实际上在User目录下创建了名为“LaTeXTools.sublime-settings”的配置文件。(Very Important!!!)&br&&br&&b&&i&&u&配置编译器&/u&&/i&&/b&&br&将前面的LaTeXTools.sublime-settings文件用Sublime Text 2打开,配置&texpath&选项,将MikTex的路径添加进去就可以了,如下图所示。&sumatra&选项不用配置,添加到系统PATH中更方便。&br&&figure&&img src=&https://pic4.zhimg.com/50/334e34ddedabd1_b.jpg& data-rawwidth=&977& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&977& data-original=&https://pic4.zhimg.com/50/334e34ddedabd1_r.jpg&&&/figure&&br&&b&&i&&u&配置SumatraPDF&/u&&/i&&/b&&br&第一步:将 SumatraPDF 的主程序目录添加到环境变量PATH,这一步很重要,否则下一步会无法进行。&br&第二步:打开命令提示符,执行以下命令:(将其中的安装路径替换成你实际的安装路径)&br&&div class=&highlight&&&pre&&code class=&language-text&&sumatrapdf.exe -inverse-search &\&C:\Program Files\Sublime Text 3\sublime_text.exe\& \&%f:%l\&&
&/code&&/pre&&/div&&br& (配置反向搜索)&br&&br&&b&&u&&i&使用&/i&&/u&&/b&&br&进行到现在,理论上应该就已经配置好了。以后就可以用 Sublime Text 写 LaTeX 了。写完之后保存(新建的文件一定要先保存,否则 build 是无效的),然后按下快捷键 Ctrl+B,Sublime Text 就会自动调用 LaTeXTools 的 build 系统来进行编译,然后自动打开 SumatraPDF 进行预览。之后每次修改后只要 Ctrl+B 一下,SumatraPDF 里的内容就会自动更新。&br&同时在SumatraPDF 中双击相应的内容,会调到Sublime Text 2中对应的位置。&br&&br&最后推荐一个总结Sublime Text快捷键不错的,用快捷键确实比较顺畅:&br&&a href=&//link.zhihu.com/?target=http%3A//dengo.org/archives/970& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&sublime text 3解放鼠标的快捷键总结&/a&
正好我最近弄过,班门弄斧一下,亲测可行。 主要参考博客: 主要内容: 准备工作安装LaTeXTools配置LaTeXTools配置编译器配置SumatraPDF使用 准备工作 首先我们需要安装并下载一些东西: MiKTeX (Windows 平台下的 LaTeX 工具套…
曾经一个人生活很多年,分享一些我知道好玩且不贵的方式吧。&br&其实很简单,分成两类,一种是找对地方,一种是找对组织。&br&找对地方指:看电影、吃饭、逛街、艺术馆等等。&br&找对组织是说,持续提供有趣活动的组织,比如各国文化中心,登山、潜水、格斗、手工协会等等。&br&&br&………………………………………………………&br&&b&1:专业且有趣的运动。(去正确的地方找组织)&/b&&br&这是同伴颜值最高的一种方式了。尤其是攀岩圈,养眼的男男女女,非常多。&br&一个人跑步容易放弃,可选个喜欢群体运动学下去:格斗、攀岩、徒步等等。&br&每个城市都有相应团体,&b&越专业越小众的运动,里面狂热分子概率越高&/b&,越容易学得专业,而且同伴素质高,玩得更开心。&br&(以上翻译白话就是:里面很少熊孩子,少有没礼貌的人。大部分人更宽容有爱自律)&br&记得那时候攀岩玩儿,有攀岩国家队人教你爬,大家一起相约去杭州等地方野攀,当时没觉得怎样,离开圈子后再回忆,真是不可多得的时光。&br&尤其是上海、北京、杭州这样的大城市,有趣运动只会多不会少。&br&&a href=&//link.zhihu.com/?target=http%3A//www.hyclimbing.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&上海恒毅攀岩馆&/a&、&a href=&//link.zhihu.com/?target=http%3A//www.rockdancing.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&上海岩舞攀岩馆&/a&。&a href=&//link.zhihu.com/?target=http%3A//www.urbanmonkey.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&北京城市猴子跑酷俱乐部&/a&,等等。这些是我知道有高手潜伏的地方。&br&报班跟师傅学习前,可通过网络查他们获奖经历等,这比用粉丝数量判断靠谱多了。&br&如果是学格斗等等,多比较几家再决定,大部分可以试课。&br&看看教学方式,看看其他同学状态,好老师+好环境,学得更愉快,也能多一个朋友圈。&br&&br&另外,也有收费俱乐部,带你周末去户外游。有向导,有保险,有车接送,且路线难度事先标注出来,腐败游,摄影游,拉练游,休闲游等。车费门票等,费用AA,事先有全程预算。&br&某次跟俱乐部人聊天,他说到个很有趣事情,讲活动促成很多人成为情侣并结婚。&br&这种户外活动里,女性数量常常高于男性。&br&这些大多发布在类似于:&a href=&//link.zhihu.com/?target=http%3A//www.lvye.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&绿野户外网&/a&, &a href=&//link.zhihu.com/?target=http%3A//travel.sanfo.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&三夫户外旅行&/a& ,&a href=&//link.zhihu.com/?target=http%3A//www.1qa.org/forum.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&北京绳索技术协会论坛&/a& 之类的网站上。&br&某些爱好者赞助协会,组织收费非常低廉,而且培训人员基于爱好来做事,特别专业。&br&某些俱乐部收费贵,但是雇佣了专业向导,配备救援装备,也是物有所值。&br&又贵又坑爹的也不少。建议了解一些户外知识后,再跟团,更容易判断,那些团靠谱。&br&&br&这里我特意说,&b&去正确地方找组织意思是&/b&,你要找对组织。&br&靠忽悠过日子的不少,跟一个专业严谨且自己够专业的前辈学习,才能走得长远,玩得愉快。&br&另外各项运动有不少礼仪潜规则,若没前辈教导,容易犯了众怒而不自知。那些规则有助于科学友善的持续玩这项运动。&br&&figure&&img src=&https://pic2.zhimg.com/50/2fd857c9ac217e9eaaf1_b.jpg& data-rawwidth=&737& data-rawheight=&490& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic2.zhimg.com/50/2fd857c9ac217e9eaaf1_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/a198de678c53bccecd2e32f_b.jpg& data-rawwidth=&737& data-rawheight=&490& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic1.zhimg.com/50/a198de678c53bccecd2e32f_r.jpg&&&/figure&&br&………………………………………………………&br&&b&2:美术馆、图书馆、艺术中心。(找对地方就行)&/b&&br&城市里面的美术馆、博物馆等等,基本都是免费的,但大部分人不知道。偶尔几个收费,也就10块钱样子。&br&你试试标注你住处附近的美术馆,没事可以去溜达。展览过一段时间会换个主题的,可以多溜达几次。我经常去炎黄艺术馆溜达,里面好多国画展,非常有趣。&br&大城市的图书馆也都非常赞,可以多去溜达,&b&不要浪费你缴纳的税金&/b&。&br&而且同主题区,很容易遇到相同兴趣的人。&br&&br&其次就是,特色建筑、小巷、公园、夜景等等。这些在旅游景点推荐上看一次,能了解八九不离。&br&另外还可以看英文的景点介绍,老外喜欢去的地方,一般也不会差。他们景点推荐里面,不少冷门特色小店等等。&br&………………………………………………………&br&&br&&b&3:听讲座,向牛人提问。&/b&&br&城市另一个好处是,有很多高质量讲座,且大多免费。&br&而且线下活动常有现场提问机会,你可以直接提问大牛。你的疑惑,更容易被解开。想直接跟傅盛、雷军、各大创业项目C某O沟通,都可以从线下活动找到机会。包括投资人和天使。&br&学习国画时候,我遇到不少疑惑,跟QQ群里面讨论,并无结论。&br&拿这个疑惑去问了老树画画,也问了美国的中国水墨艺术家Ross Lewis,他们从不同角度的回答,解开了心中疑惑。&br&尤其是老树画画,他很详细的解释,并且旁征博引,让我和国画心结彻底打开了。&br&真心是眼泪汪汪的感谢。&br&同一个问题,放知乎上邀请,大牛未必有时间有心情来回答。跑去参加线下活动,争取到提问机会,就能得到高质量回答了。&br&为嘛我要说高质量?因为不但回答给你听,而且回答给现场所有人听,他的答案对得起自己专业。&br&唔,记得提问前,心里过一遍,减少歧义和精简句子,现场活动一般严格控制时间,提问太长会耽误后面的人。&br&&br&上海和北京,各个领事馆的文化中心经常举办活动,&b&北京的美国文化中心,活动质量很高&/b&,且经常更换主题,值得关注。&br&对了文化中心的活动,&b&所有人都可以参加&/b&。美国文化中心门口特意打印说明说,欢迎所有中国人参加。带身份证件过安检,不要带太大包入场就行。&br&如果你不熟,可以用&a href=&//link.zhihu.com/?target=http%3A//beijing.douban.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&豆瓣同城&/a&搜索,另外每个城市都有推荐活动的微信账号等。&br&等你去了几次了解了,活动有私下有邮件通知的,也有微信通知的,适当关注就好。&br&&br&对了……突然想起来有次某文化中心搞活动,做了好多!好多!吃的。大量泡菜和寿司之类,吃不完,最后组织者几乎是哀求大家打包带走,避免浪费食物。&br&(我也不知道为嘛突然想起这个了……)&br&………………………………………………………&br&&b&4:加入有趣组织。&/b&&br&每个城市都有大量组织等待加入,&b&你可以找到志同道合的人,并且为这个团体做一些事情。&/b&&br&如下是我曾经去过的组织:&br&北京有LGBT合唱团 &a href=&//link.zhihu.com/?target=http%3A//site.douban.com/beijing-queer-chorus/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&北京酷儿合唱团 Beijing Queer Chorus的小站 &/a&&br&非LGBT也可以加入,跟他们一起唱歌,很好玩。&br&我还参加过学手语的活动,但想不起来是那个协会了。&br&包括周日做慈善、户外救援、反歧视、环保主题等等,都有相应组织,能找到一群人。&br&&figure&&img src=&https://pic4.zhimg.com/50/b8fd8f5f9dd44c5a55bf332_b.jpg& data-rawwidth=&737& data-rawheight=&490& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic4.zhimg.com/50/b8fd8f5f9dd44c5a55bf332_r.jpg&&&/figure&我推荐有空的青年,加入Google Developer Group,这个在大部分城市都有组织。&br&我加入过上海GDG和北京GDG,他们会举办很多跟技术有关活动,分享各种有用知识,都是免费的,很多活动不但免费,还提供食品饮料和额外小礼物。&br&加入这个,不需要你是工程师,你感兴趣,&b&愿意提供时间来协助活动&/b&就可以了。&br&有时候还有额外福利,比如Google IO门票之类,IO门票抽中的概率真心很低……&br&&b&如果你有额外时间,且的确喜欢技术,&/b&可以考虑加入这个组织。&br&&a href=&//link.zhihu.com/?target=http%3A//chinagdg.org/about/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&关于 GDG - 谷歌开发者社区(ChinaGDG)&/a&&br&只是想获取活动信息,关注即可:&a href=&//link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA5MDg3MjczMg%3D%3D%26mid%3Didx%3D1%26sn%3D4bc579cdbf3a7b16a85189%26scene%3D1%26key%3Dcab95d25b2ef2c86c4cffbdd56c30bf13cebef1a602dascene%3D0%26uin%3DMjU5Nzc1NzgwMA%253D%253D%26devicetype%3DiMac%2BMacBookPro11%252C1%2BOSX%2BOSX%2B10.10.4%2Bbuild%%26version%3Dpass_ticket%3DE22mEA6SdUgbHRLuEnOoxyVGTtfFEc6G84wk4OzqYNZwWAzs8FzY%252FaB8qEnnCDBI& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何关注北京GDG&/a&,&a href=&//link.zhihu.com/?target=http%3A//gdgshanghai.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GDG Shanghai&/a&&br&各大城市应该都有这个组织,如果没有,你可以写信给总部开办你城市里面的GDG组织。&br&其实动起手来一点都不难,因为会得到大量帮助,忙过初建的前一阵后,城市里面技术爱好者就能经常在一起玩了。&br&&figure&&img src=&https://pic1.zhimg.com/50/fac1cc2aa0c12c_b.jpg& data-rawwidth=&737& data-rawheight=&490& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic1.zhimg.com/50/fac1cc2aa0c12c_r.jpg&&&/figure&这是一场很小型20人以下的技术分享。&br&有超大型活动,也有轻松随意的小型技术交流。主题很多,经常请到行业一线工程师来讲解。&br&&figure&&img src=&https://pic4.zhimg.com/50/baab5db2ab75a2d33f1ce07db8fe2810_b.jpg& data-rawwidth=&982& data-rawheight=&651& class=&origin_image zh-lightbox-thumb& width=&982& data-original=&https://pic4.zhimg.com/50/baab5db2ab75a2d33f1ce07db8fe2810_r.jpg&&&/figure&如果是刚毕业新鲜人,可以在举办活动,组织会议,邀请讲师里锻炼很多,跟你一起合作完成任务的,大多是各个IT公司工程师等等,能互相学到不少。&br&邀请的讲师和管理者,常常是C某O,资历够,熟悉后换工作也很方便。&br&我用最俗气的方式介绍这个组织,希望大家都能参与到里面,大概因为心怀感激吧。&br&很多年前我在上海,传统行业,用诺基亚,根本不懂互联网,自卑且内向。&br&有次上海线下活动(因为他们写了免费学编程包学会我才去),遇到Sting,他鼓励我参与活动,并且建议我做活动主持,简直吓蒙了…… &br&活动完成之后,我开始想,如果不那么内向,其实挺好的。&br&后来参加其他线下活动,我都会尽量跑前面去坐,提问我疑惑的内容。&br&尝试很多很多之后,世界慢慢变更大,但一切的开始是Sting跟我说,哎呀,不如你来主持吧?不行了我再补上。&br&后来真的去IO现场,也去Google参观,虽然没继续学Python,但已经改行去另一个行业。这一切都源于最初活动。真心对Sting满心感激。&br&&figure&&img src=&https://pic4.zhimg.com/50/896a8d8ea23bd1f5ce5d6f_b.jpg& data-rawwidth=&737& data-rawheight=&490& class=&origin_image zh-lightbox-thumb& width=&737& data-original=&https://pic4.zhimg.com/50/896a8d8ea23bd1f5ce5d6f_r.jpg&&&/figure&好了,如果想加入呢,可以写邮件他们,&br&&b&北京可以写的:han.guokai#Gmail邮箱
&/b&&br&&b&上海写给:stingchen#Gmail邮箱
&/b&&br&格式随便,但讲明擅长领域,空闲时间,联络方式会更好。&br&我是XXX,专业是XXX,擅长于XXXX,在XXXX应该可以帮忙,XXXX的时间都方便的。&br&希望加入你们。&br&我的微信是:XXX,手机是:XXX。&br&&br&其他各个城市戳这个link找组织:&a href=&//link.zhihu.com/?target=http%3A//chinagdg.org/gdg-china/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ChinaGDG 大家庭&/a&&br&其他说明见:&a href=&//link.zhihu.com/?target=http%3A//www.chinagdg.com/thread-.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GDG社区是什么?&/a&&br&英文版见:&a href=&//link.zhihu.com/?target=https%3A//developers.google.com/groups/start/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google Developer Groups&/a&&br&………………………………………………………&br&&b&5:一个人旅行。(合理安排时间和费用,接下来,找对地方就行)&/b&&br&可以选周五晚上出发的卧铺,去附近城市玩2天,周一继续上班。&br&那时候利用这个零碎时间,把附近不少城市都溜达了一遍。&br&一个人在晃晃悠悠火车上醒来,在另一个城市街道闲逛,多有意思。&br&有折扣机票时候,周末游玩还能更远。&br&总之我曾经一个人去了好多好多地方,那种自由自在的心情,现在再也没有了。&br&一个人旅行,真的也很有趣。&br&&figure&&img src=&https://pic1.zhimg.com/50/79fbcaee434ee4b8abcba764_b.jpg& data-rawwidth=&1600& data-rawheight=&1200& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic1.zhimg.com/50/79fbcaee434ee4b8abcba764_r.jpg&&&/figure&&b&这里慎重提醒一次,以上一切信息,并不是标准套餐。&/b&&br&&b&花会谢,树会被砍,人会变,任何组织和机构,都有坏人存在,虽然比例不同。&/b&&br&&b&请谨慎参考,多用智慧判断行事。遇到疑惑多搜索多问问朋友,切勿冲动。&br&&/b&&br&-------------------------------------------&br&6:看戏剧、舞蹈、电影、演唱会、杂技、相声等等。&br&有看戏的时间,也有看戏的心情,一切刚刚好。大麦网等等,有大量数据。&br&&figure&&img src=&https://pic3.zhimg.com/50/efe223b10d012aeb351d82c0d4ddddd5_b.jpg& data-rawwidth=&976& data-rawheight=&639& class=&origin_image zh-lightbox-thumb& width=&976& data-original=&https://pic3.zhimg.com/50/efe223b10d012aeb351d82c0d4ddddd5_r.jpg&&&/figure&单身的人,更容易问这个问题。&br&唔,珍惜单身时光,使劲使劲玩吧。&br&----------------&br&高兴就转发吧,不用问我了。不修改,保留作者名就行了。&br&答案算抛砖引玉,提供一个新思路解决问题,每个城市不一样,不用全盘复制。&br&若你也有好玩方式,欢迎分享给我:)
曾经一个人生活很多年,分享一些我知道好玩且不贵的方式吧。 其实很简单,分成两类,一种是找对地方,一种是找对组织。 找对地方指:看电影、吃饭、逛街、艺术馆等等。 找对组织是说,持续提供有趣活动的组织,比如各国文化中心,登山、潜水、格斗、手工协…
谢邀.&br&&br&作为一个数年C/Java/Python混合开发者, 我谈谈我的感受.&br&&br&我认为C, Java跟Python都是非常成功的语言, 具体选哪种看你的场景.&br&&br&言归正传,来对比一个Python跟Java.&br&&br&&b&Python:&/b&&br&&b&优点 ( 知乎怎么不能把这行字变大点??):&/b&&br&&br&&br&语法简洁优美, 功能强大, 标准库跟第三方库灰常强大, 应用领域非常广: &a href=&//link.zhihu.com/?target=https%3A//github.com/vinta/awesome-python& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&vinta/awesome-python · GitHub&/a&(跟PHP形成宣明对比!)&br&&br&语言方面, 举几个例子:&br&&br&&b&一切都是对象!!!&/b&&br&类(class本身)/函数/类方法是callable的对象&br&因为是对象,所以你当然可以传来传去啦. 比如:&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&k&&class&/span& &span class=&nc&&A&/span&&span class=&p&&:&/span&
&span class=&k&&def&/span& &span class=&nf&&__init__&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span& &span class=&s&&&init A&&/span&
&span class=&k&&def&/span& &span class=&nf&&run&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span& &span class=&s&&&run A&&/span&
&span class=&n&&threading&/span&&span class=&o&&.&/span&&span class=&n&&Thread&/span&&span class=&p&&(&/span&&span class=&n&&target&/span&&span class=&o&&=&/span&&span class=&n&&A&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&start&/span&&span class=&p&&()&/span& &span class=&c&&#: 在另一个线程执行A()&/span&
&span class=&n&&a&/span& &span class=&o&&=&/span& &span class=&n&&A&/span&&span class=&p&&()&/span&
&span class=&n&&threading&/span&&span class=&o&&.&/span&&span class=&n&&Thread&/span&&span class=&p&&(&/span&&span class=&n&&target&/span&&span class=&o&&=&/span&&span class=&n&&a&/span&&span class=&o&&.&/span&&span class=&n&&run&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&start&/span&&span class=&p&&()&/span& &span class=&c&&#: 在另一个线程执行a.run() ... &/span&
&span class=&c&&# 惊呆没有,这是怎么做到的?? 也许你该看看描述符的概念&/span&
&/code&&/pre&&/div&&br&&br&&b&List表达式&/b&(其他好多语言也有,但是我最喜欢python的写法):&br&把&1023&变成 [1, 2, 3]&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&p&&[&/span& &span class=&nb&&int&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&)&/span& &span class=&k&&for&/span& &span class=&n&&x&/span& &span class=&ow&&in&/span& &span class=&s&&&1023&&/span& &span class=&k&&if&/span& &span class=&n&&x&/span& &span class=&o&&!=&/span& &span class=&s&&&0&&/span& &span class=&p&&]&/span&
&/code&&/pre&&/div&(当前你可以用Lisp风格的: map(int, filter(lambda x: x != &0&, &1024&)))&br&&br&对dict也是类似:&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&n&&adict&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&&span class=&s&&&a&&/span&&span class=&p&&:&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&s&&&b&&/span&&span class=&p&&:&/span&&span class=&mi&&2&/span&&span class=&p&&}&/span&
&span class=&p&&{&/span&&span class=&n&&k&/span&&span class=&p&&:&/span& &span class=&n&&v&/span&&span class=&o&&*&/span&&span class=&mi&&2&/span& &span class=&k&&for&/span& &span class=&n&&k&/span&&span class=&p&&,&/span& &span class=&n&&v&/span& &span class=&ow&&in&/span& &span class=&n&&adict&/span&&span class=&o&&.&/span&&span class=&n&&items&/span&&span class=&p&&()&/span& &span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&b&yield关键字:&/b&&br&当你需要返回很多东西然后一个一个用的时候, 你可以一次返回一个&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&k&&def&/span& &span class=&nf&&xrange&/span&&span class=&p&&(&/span&&span class=&n&&n&/span&&span class=&p&&):&/span&
&span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&k&&while&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&n&&n&/span&&span class=&p&&:&/span&
&span class=&k&&yield&/span& &span class=&n&&i&/span&
&span class=&n&&i&/span& &span class=&o&&+=&/span& &span class=&mi&&1&/span&
&span class=&err&&用法&/span&&span class=&p&&:&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&nb&&xrange&/span&&span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&):&/span&
&span class=&k&&print&/span& &span class=&n&&i&/span&
&/code&&/pre&&/div&&br&&b&装饰器@:&/b&&br&把something_heavy()返回的结果缓存起来(以函数名+args为缓存的键值,只缓存最近使用的10条)&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&nd&&@functool.lru_cache&/span&&span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&)&/span&
&span class=&k&&def&/span& &span class=&nf&&something_heavy&/span&&span class=&p&&(&/span&&span class=&n&&args&/span&&span class=&p&&):&/span&
&span class=&c&&#各种耗时操作.....&/span&
&span class=&k&&pass&/span&
&/code&&/pre&&/div&&br&&b&运算符重载:&/b&&br&试试numpy, 你会惊呆的, 操作向量/矩阵跟基本类型一样方便&br&&br&&b&缺点:&/b&&br&&br&&b&慢&/b&&br&目测python是最慢的脚本语言,比V8上的JS还慢不少. (研究一下描述符,你会发现python调用对象方法的开销好大!)&br&&br&但是python创始人说了, 一般程序的瓶颈在于20%的代码, 所以你可以把那20%的代码用C重写(而python是胶水语言,用C重写部分代码当然很easy啦)&br&&br&同时,你可以试试PyPy, 引入了JIT技术&br&&br&&b&动态类型&/b&&br&有人说: 动态类型写时爽, 重构起来是灾难(原谅我记不得原话..).&br&&br&对于不写unittest, 不做代码覆盖率测试的人来说, 动态语言当然是危险的, 拼写错误都可能被隐藏, 重构?别捣乱!&br&&br&python创始人有话说: &如果你认为编译器可以帮你解决所有问题,那你一定干编程没多久& (鄙人深有体会,曾经年少轻狂的我非常鄙视javascript), &不管什么程序,都需要写testcase, 既然要写testcase, 那么动态类型不是问题!&&br&&br&在此推荐大家两个工具: py.test python-coverage&br&&br&&b&Java:&/b&&br&&br&&br&&b&优点&/b&&br&&br&用几个词形容一下Java语言: 优美, 严谨, 健壮,不易出错.&br&&br&当然, 使用也非常的广泛: 常年盘踞编程人员数量排行榜第一名!&br&各种库也灰常多: &a href=&//link.zhihu.com/?target=https%3A//github.com/akullpp/awesome-java& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&akullpp/awesome-java · GitHub&/a&&br&同样的代码, 相比C++(甚至python), Java代码出BUG的概率要小点(当然,写的时候一般会比python长). &br&&br&Java从语言设计上尽量避免了程序员犯错, 比如自动垃圾回收, 抛弃无符号类型, 安全的枚举, 编译期泛型检查(Java1.5之后加入的泛型,但是只是用来做编译器检查,运行时跟以前一样), 强制的异常处理(遇到异常必须catch或者申明throws) 等等(当然,某些特性python也有.)&br&&br&Java标准库和好多第三方代码都充斥着浓浓的设计感!!!, 各种设计模式到处可见. 从下面的语句可以看出一点来:&br&&div class=&highlight&&&pre&&code class=&language-text&&new BufferedInputStream(new FileInputStream(new File(&somepath&)))
&/code&&/pre&&/div&尼玛, 好多字, 看我的:&br&C:&br&&div class=&highlight&&&pre&&code class=&language-text&&fopen(&somepath&, &r&)
&/code&&/pre&&/div&Python:&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&nb&&open&/span&&span class=&p&&(&/span&&span class=&s&&&somepath&&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&Java代码多,但是API可复用行更强,选择更多(我想一次读完文件,不要buffer呢?)&br&&br&因为健壮安全,所以Java成了企业级后台的标准. 想想银行后台, 关键地方出点bug可不得了.&br&&br&&b&缺点:&/b&&br&&br&&br&&b&要敲好多代码, 参考上面的例子...&/b&&br&&br&&br&&b&没有Python那些奇葩特性, 灵活性不足,怎么写你还是Java, 而Python可以写的像Javascript/Lisp/Matlab.....&/b&&br&&br&&br&&br&&b&简单来说, Python是给人设计的(人生苦短,请用Python), C/C++更像是为机器设计的,&br&而Java则介于两者之间.&/b&&br&&br&如果你是高手, 写出的代码没什么bug, 也不用怎么调试, 那推荐你用python(前提是他的慢你能忍受.
当然,高手眼里, 他会的就是最好的....)&br&如果你写的代码bug多,大部分时间在调试代码,你可能需要了解一下Java, 或者写足够多的testcase.
谢邀. 作为一个数年C/Java/Python混合开发者, 我谈谈我的感受. 我认为C, Java跟Python都是非常成功的语言, 具体选哪种看你的场景. 言归正传,来对比一个Python跟Java. Python: 优点 ( 知乎怎么不能把这行字变大点??): 语法简洁优美, 功能强大, 标准库跟第三…
&figure&&img src=&https://pic2.zhimg.com/v2-1f845bd78b7fb4a0926228bcc97d0eb9_b.jpg& data-rawwidth=&1240& data-rawheight=&698& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&https://pic2.zhimg.com/v2-1f845bd78b7fb4a0926228bcc97d0eb9_r.jpg&&&/figure&&p&知乎:&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&搭建深度学习主机与环境(TensorFlow+1080Ti):(一)硬件选购与主机组装&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&搭建深度学习主机与环境(TensorFlow+1080Ti):(二)Win10&Ubuntu双系统与显卡驱动安装&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&搭建深度学习主机与环境(TensorFlow+1080Ti):(三)CUDA与CUDNN安装&/a&&/p&&p&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&搭建深度学习主机与环境(TensorFlow+1080Ti):(四)基于Anaconda的TensorFlow安装&/a&&/p&&p&简书:&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.jianshu.com/p/df72e25928c0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&(一)硬件选购与主机组装&/a&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.jianshu.com/p/c0f3a503df69& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&(二)Win10&Ubuntu双系统与显卡驱动安装&/a&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.jianshu.com/p/973b25abd851& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&(三)CUDA与CUDNN安装&/a&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.jianshu.com/p/1c8f07354b3b& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&(四)基于Anaconda的TensorFlow安装&/a&&/p&&p&---------------------------------------------------------------------------------------------------------------------------&/p&&p&&br&&/p&&p&网上安装双系统的教程不少,但多数教程所使用的硬件以现在的眼光看来显得有些过时;另外,其原有所使用的方法,对于新的硬件也不再合适。本教程写于2017年7月,希望能够给大家提供些许帮助,避免重走弯路。&/p&&p&目前安装双系统的主要基于两种构架:&b&&i&BIOS+MBR&/i&&/b& 和 &b&&i&UEFI+GPT&/i&&/b&,可以简单的理解为EFI是新一代的BIOS,GPT是新一代的分区方式。基本上目前市面上的新机器,都是以UEFI+GPT构架为主。需要注意的是,对于 UEFI固件,一般还是沿用之前的称呼:BIOS,在查询相关资料的时候需要注意,可能BIOS指的就是UEFI。
BIOS即Basic Input/Output System,翻成中文是“基本输入/输出系统”,是一种所谓的“固件”,负责在开机时做硬件启动和检测等工作,并且担任操作系统控制硬件时的中介角色。&/p&&blockquote&新型UEFI,全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。
可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的 BIOS 的继任者。
GUID磁碟分割表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。它是可拓展固件接口(EFI)标准的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表。&/blockquote&&p&通常使用BIOS+MBR构架的双系统需要使用EasyBCD软件来添加启动项,使用EFI并不需要,两种方法我都尝试过,最后当然选择UEFI+GPT,更新更简单。&/p&&h2&1. 安装前准备&/h2&&ul&&li&U盘(最低8G),用于制作启动盘&/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//go.microsoft.com/fwlink/%3FLinkId%3D691209& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Win10安装软件&/a& &/li&&/ul&&figure&&img src=&https://pic1.zhimg.com/v2-2b5c74875ddcc7a47b83d0_b.png& data-rawwidth=&1240& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&https://pic1.zhimg.com/v2-2b5c74875ddcc7a47b83d0_r.jpg&&&/figure&&p&&i&选择第二项:立即下载工具&/i&&/p&&p&&br&&/p&&ul&&li&&a href=&http://link.zhihu.com/?target=http%3A//cn.ubuntu.com/download/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ubuntu 16.04 LTS(长期支持)版本&/a&,建议使用16.04版本,以获取长期支持保持系统稳定。&/li&&/ul&&h2&2. BIOS(UEFI)设置(系统性能)&/h2&&p&此次BOIS设置为系统基本设置,主要和系统硬件性能相关。包括XMP内存超频设置,风扇管理设置,电源管理设置。总之,使系统能够在保正稳定的情况下,实现较高的性能和较为安静的运行。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b03ffcf7dfb06a51_b.png& data-rawwidth=&1240& data-rawheight=&736& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&https://pic2.zhimg.com/v2-b03ffcf7dfb06a51_r.jpg&&&/figure&&p&&i&UEFI设置&/i&&/p&&p&&br&&/p&&ul&&li&左一为X.M.P设置选项,通常只有一个文档可以选择,选择之后保存内存即可超频。&/li&&li&右上为主板性能选项,感觉是一个比较笼统的设置,可以先将这个选项设置为高性能,再设置X.M.P以免影响内存频率的设置。&/li&&li&右中为启动顺序选项,插入启动盘后会有多个选项,直接用鼠标拖拽排序即可更改启动顺序,SSD放在HDD之前。实际上HDD作为仓储盘,BIOS和系统安装过程中都不必任何操作。&/li&&li&右下为启动菜单选项,点开后会将所有可能的启动选项(分区)列出来,点击可以直接启动,所以不用设置启动顺序,需要启动哪个分区,直接点击即可。注意点击启动之前先保存之前更改的设置。&/li&&li&更多高级设置请参考主板说明书。&/li&&/ul&&h2&3. 安装Windows10&/h2&&p&Win10安装建议参考如下视频:&/p&&ul&&li&&a href=&http://link.zhihu.com/?target=http%3A//www.zealer.com/post/816& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ZEALER:「TECHMAN」最详细的 Win10 系统安装教程 E01&/a&&/li&&/ul&&p&此次配置深度学习主机,以512G SSD为主存储空间,2T HDD作为仓储盘可以在Win10和Ubuntu之间共同使用(相当于一个移动硬盘),用来保存数据。
Win10与Ubuntu分别占用200G和312G SSD空间,两者内部均不再分区。&/p&&ul&&li&Win10安装之后可以自动更新相关硬件驱动,美滋滋。当然,最好再打开一下设备管理器查看是否所有的硬件都更新好驱动。&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-ad3c24fceac1ffeb073f7_b.png& data-rawwidth=&792& data-rawheight=&576& class=&orig

我要回帖

更多关于 serversocket tcp udp 的文章

 

随机推荐