谁用飘云阁 abbyy给个邀请码啊

第三方登录:Sina Visitor System404 Not Found
404 Not Found&p&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-0bc9eb9d5d9d1c76cdef49feade4f294_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&703& data-rawheight=&258& class=&origin_image zh-lightbox-thumb& width=&703& data-original=&https://pic3.zhimg.com/50/v2-0bc9eb9d5d9d1c76cdef49feade4f294_r.jpg&&&/figure&&p&&br&&/p&&p&今天分享一个Python 3里的技巧:&b&快速容易地处理Windows、Mac 和Linux系统中文件路径问题&/b&。&/p&&p&编程中有个比较烦人的事情,Windows系统在文件名中间用的是反斜杠字符,而几乎所有其它计算机系统都是用的斜杠字符:&/p&&div class=&highlight&&&pre&&code class=&language-text&&Windows文件名:
C:\some_folder\some_file.txt
大部分其它操作系统:
/some_folder/some_file.txt
&/code&&/pre&&/div&&p&&br&&/p&&p&这事儿最早要追溯到上世纪80年代。第一版的MS-DOS系统使用的是斜杠字符来指明命令行选项。当微软在MS-DOS 2.0系统中添加对文件夹的支持时,由于已经使用了斜杠字符,所以他们就用了反斜杠字符。结果就是30多年后的今天,我们还在被迫忍受这种不一致。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-063b9edb19f1bd7_b.jpg& data-size=&normal& data-rawwidth=&550& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic4.zhimg.com/50/v2-063b9edb19f1bd7_r.jpg&&&figcaption&第一版MS-DOS&/figcaption&&/figure&&p&如果你想让你的Python代码在Windows、Mac和Linux系统都能运行,那你就得处理好这种平台特定问题。幸好,Python 3 里有个叫pathlib的新模块,能让我们轻松应对文件问题。&/p&&p&我们下面就看看在Python 3中处理文件名路径的不同方式,看看pathlib如何能让你的编程生活更美好更轻松!&/p&&p&&br&&/p&&p&&b&错误方法:手动创建文件路径&/b&&/p&&p&比如说,你有一个数据文件夹,包含一个你想在Python程序中打开的文件:&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-fe0f97bbbeb1a20dbe49de7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&798& data-rawheight=&214& class=&origin_image zh-lightbox-thumb& width=&798& data-original=&https://pic4.zhimg.com/50/v2-fe0f97bbbeb1a20dbe49de7_r.jpg&&&/figure&&p&如果你用以下Python代码,其实是不对的:&/p&&div class=&highlight&&&pre&&code class=&language-text&&data_folder = &source_data/text_files/&
file_to_open = data_folder + &raw_data.txt&
f = open(file_to_open)
print(f.read())
&/code&&/pre&&/div&&p&&br&&/p&&p&注:上面代码由于是在Mac系统上编写,因此使用的是Unix风格的斜杠字符。用Windows的朋友消消气。&/p&&p&从技术上讲,代码在Windows上仍然能够运行,因为Python有个很厉害的功能,当你在Windows系统中调取open()的时候,可以识别出来用的是哪种斜杠。但是即便如此,我们也不能常年靠这个。如果你在错误的操作系统上使用了错误的斜杠符号,有些Python库可能就不凑效了,特别是这些库和其它外部程序和库通过接口相连的时候。&/p&&p&而且Python只在Windows系统上支持识别出混合的斜杠字符,如果是在Mac系统上,代码中用了反斜杠符号的话,就完全不行了:&/p&&div class=&highlight&&&pre&&code class=&language-text&&data_folder = &source_data\\text_files\\&
file_to_open = data_folder + &raw_data.txt&
f = open(file_to_open)
print(f.read())
# 在Mac上,代码会引发异常:
# FileNotFoundError: [Errno 2] No such file or directory: 'source_data\\text_files\\raw_data.txt'
&/code&&/pre&&/div&&p&由于以上以及其它原因,使用硬编码路径字符串写代码,会让其它程序员觉得不太靠谱。不管怎么说,应当避免这种情况。&/p&&p&&br&&/p&&p&&b&传统解决方法:Python的os.path模块&/b&&/p&&p&Python的os.path模块中有很多工具可以处理这种特定操作系统的文件问题。&/p&&p&&b&你可以用os.path.join()来创建一个路径字符串,确保针对当前操作系统使用正确的斜杠字符&/b&:&/p&&div class=&highlight&&&pre&&code class=&language-text&&import os.path
data_folder = os.path.join(&source_data&, &text_files&)
file_to_open = os.path.join(data_folder, &raw_data.txt&)
f = open(file_to_open)
print(f.read())
&/code&&/pre&&/div&&p&&br&&/p&&p&这样代码不管是在Windows还是Mac系统上都能完美运行。问题是用这种方法实在太痛苦了。写出来os.path.join(),把路径的每个部分作为一个独立的字符串来传递,实在是又麻烦又不直观。&/p&&p&由于os.path模块里的大部分函数用起来都比较烦人,所以很多开发者常常“忘记”用它们,哪怕比较熟悉。这就造成了很多跨平台bug,让用户很恼火。&/p&&p&&br&&/p&&p&&b&更好的解决方法:Python 3的pathlib!&/b&&/p&&p&&br&&/p&&p&Python 3.4介绍了一种全新的标准库pathlib,用于处理文件和路径问题,而且效果很棒!&/p&&p&使用pathlib时,你只需用斜杠符将路径或文件名传入一个新的Path()对象,剩下的交给它就可以了:&/p&&div class=&highlight&&&pre&&code class=&language-text&&from pathlib import Path
data_folder = Path(&source_data/text_files/&)
file_to_open = data_folder / &raw_data.txt&
f = open(file_to_open)
print(f.read())
&/code&&/pre&&/div&&p&&br&&/p&&p&这里注意两点:&/p&&ul&&li&你应当在pathlib函数中使用斜杠符号。Path()对象会将斜杠符转换为适用于操作系统的正确斜杠符号。挺好!&br&&/li&&li&如果你想添加路径,你可以在代码中直接使用/operator。再也不用一遍一遍的写os.path.join(a,b)了。&/li&&/ul&&p&除了这之外,pathlib还有很多其它不错的功能:&/p&&p&例如,我们可以读取text文件的内容,再也不用担心搞混打开文件和关闭文件:&/p&&div class=&highlight&&&pre&&code class=&language-text&&from pathlib import Path
data_folder = Path(&source_data/text_files/&)
file_to_open = data_folder / &raw_data.txt&
print(file_to_open.read_text())
&/code&&/pre&&/div&&p&&br&&/p&&p&在上面的代码中,原来是有点问题的,因为打开的文件一直没有关闭,而pathlib则完全避免了这个问题。&/p&&p&实际上,pathlib能够很快很容易的做出大多数标准的文件操作:&/p&&div class=&highlight&&&pre&&code class=&language-text&&from pathlib import Path
filename = Path(&source_data/text_files/raw_data.txt&)
print(filename.name)
# prints &raw_data.txt&
print(filename.suffix)
# prints &txt&
print(filename.stem)
# prints &raw_data&
if not filename.exists():
print(&Oops, file doesn't exist!&)
print(&Yay, the file exists!&)
&/code&&/pre&&/div&&p&你甚至可以用pathlib准确地将Unix路径转换成Windows格式的路径:&/p&&div class=&highlight&&&pre&&code class=&language-text&&from pathlib import Path, PureWindowsPath
filename = Path(&source_data/text_files/raw_data.txt&)
# 将路径转换为 Windows 格式
path_on_windows = PureWindowsPath(filename)
print(path_on_windows)
# prints &source_data\text_files\raw_data.txt&
&/code&&/pre&&/div&&p&如果你真的想在代码中安全地使用反斜杠符号,可以将路径声明为Windows格式,pathlib会将它转换为适用当前操作系统的格式:&/p&&div class=&highlight&&&pre&&code class=&language-text&&from pathlib import Path, PureWindowsPath
# 由于已明确声明路径在Windows格式中,因此可以用斜杠符号
filename = PureWindowsPath(&source_data\\text_files\\raw_data.txt&)
# 将路径转换为适用当前操作系统的正确格式
correct_path = Path(filename)
print(correct_path)
# 在Mac和Linux上打印 &source_data/text_files/raw_data.txt&
# 在Windows上打印&source_data\text_files\raw_data.txt&
&/code&&/pre&&/div&&p&如果你想更酷一点,也可以用pathlib解决相对文件路径,解析网络分享路径和生成file://urls等这些问题。这里举个例子,只需两行代码就能让你在浏览器上打开一个本地文件:&/p&&div class=&highlight&&&pre&&code class=&language-text&&from pathlib import Path
import webbrowser
filename = Path(&source_data/text_files/raw_data.txt&)
webbrowser.open(filename.absolute().as_uri())
&/code&&/pre&&/div&&p&&br&&/p&&p&当然这些只不过是pathlib中的一部分功能而已,它能取代很多以往应用于不同Python模块中的文件相关的功能。点击这里详细查看:&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//docs.python.org/3/library/pathlib.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&docs.python.org/3/libra&/span&&span class=&invisible&&ry/pathlib.html&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&也许你还感兴趣:&/b&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&如何学习Python,以及新手如何入门?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&Python 有哪些黑魔法?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&一行 Python 能实现什么丧心病狂的功能?&/a&&/p&&blockquote&&i&参考资料:&/i&&br&&a href=&//link.zhihu.com/?target=https%3A//medium.com/%40ageitgey/python-3-quick-tip-the-easy-way-to-deal-with-file-paths-on-windows-mac-and-linux-11a072b58d5f& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&medium.com/@ageitgey/py&/span&&span class=&invisible&&thon-3-quick-tip-the-easy-way-to-deal-with-file-paths-on-windows-mac-and-linux-11a072b58d5f&/span&&span class=&ellipsis&&&/span&&/a&&/blockquote&&hr&&p&这里还有个神秘链接等着你:&a href=&//link.zhihu.com/?target=https%3A//h5.youzan.com/v2/goods/1ya9wqql1ow4c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【0625期开售】人工智能-从零开始到精通&/a&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-1bee91f179d78cc406d4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic2.zhimg.com/50/v2-1bee91f179d78cc406d4_r.jpg&&&/figure&&p&&/p&
今天分享一个Python 3里的技巧:快速容易地处理Windows、Mac 和Linux系统中文件路径问题。编程中有个比较烦人的事情,Windows系统在文件名中间用的是反斜杠字符,而几乎所有其它计算机系统都是用的斜杠字符:Windows文件名:
C:\some_folder\some_file.txt
&figure&&img src=&https://pic4.zhimg.com/v2-bfef0d4b22e41eece20f241_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-bfef0d4b22e41eece20f241_r.jpg&&&/figure&&p&作为程序员,你经常会发现自己是某些网站的永久访问者。它们可以是教程、参考或论坛。因此,在这篇文章中,让我们看看给程序员的最佳网站。&/p&&h2&&b&W3Schools&/b&&/h2&&p&&a href=&http://link.zhihu.com/?target=https%3A//www.w3schools.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&W3Schools&/a& 是为初学者和有经验的 Web 开发人员学习各种编程语言的最佳网站之一。你可以学习 HTML5、CSS3、PHP、 JavaScript、ASP 等。&/p&&p&更重要的是,该网站为网页开发人员提供了大量资源和参考资料。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-dee741f431ff951a01526_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&550& data-rawheight=&110& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic3.zhimg.com/v2-dee741f431ff951a01526_r.jpg&&&/figure&&p&&br&&/p&&p&&i&w3schools logo&/i&&/p&&p&你可以快速浏览各种关键字及其功能。该网站非常具有互动性,它允许你在网站本身的嵌入式编辑器中尝试和练习代码。该网站是你作为网页开发人员少数需要经常访问的网站之一。&/p&&p&(LCTT 译注:有一个国内网站 &a href=&http://link.zhihu.com/?target=http%3A//www.w3school.com.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&www.w3school.com.cn&/a& 提供类似的中文内容,但二者似无关系。)&/p&&h2&&b&GeeksforGeeks&/b&&/h2&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.geeksforgeeks.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GeeksforGeeks&/a& 是一个主要专注于计算机科学的网站。它有大量的算法,解决方案和编程问题。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b86e80a2bf8b7cf37009c7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&550& data-rawheight=&152& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic4.zhimg.com/v2-b86e80a2bf8b7cf37009c7_r.jpg&&&/figure&&p&&br&&/p&&p&&i&geeksforgeeks programming support&/i&&/p&&p&该网站也有很多面试中经常问到的问题。由于该网站更多地涉及计算机科学,因此你可以找到很多编程问题在大多数著名语言下的解决方案。&/p&&h2&&b&TutorialsPoint&/b&&/h2&&p&一个学习任何东西的地方。&a href=&http://link.zhihu.com/?target=https%3A//www.tutorialspoint.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TutorialsPoint&/a& 有一些又好又简单的教程,它可以教你任何编程语言。我真的很喜欢这个网站,它不仅限于通用编程语言。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c3a699ddf4c022c0c3e353_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&311& data-rawheight=&89& class=&content_image& width=&311&&&/figure&&p&&br&&/p&&p&你可以在这里上找到几乎所有语言框架的教程。&/p&&h2&&b&StackOverflow&/b&&/h2&&p&你可能已经知道 &a href=&http://link.zhihu.com/?target=https%3A//stackoverflow.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&StackOverflow&/a& 是遇到程序员的地方。你在代码中遇到问题,只要在 StackOverflow 问一个问题,来自互联网的程序员将会在那里帮助你。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-2efa1c4d59a20de40d0e948c059b233c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&550& data-rawheight=&178& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic1.zhimg.com/v2-2efa1c4d59a20de40d0e948c059b233c_r.jpg&&&/figure&&p&&br&&/p&&p&&i&stackoverflow linux programming website&/i&&/p&&p&关于 StackOverflow 最好的是几乎所有的问题都得到了答案。你可能会从其他程序员的几个不同观点获得答案。&/p&&h2&&b&HackerRank&/b&&/h2&&p&&a href=&http://link.zhihu.com/?target=https%3A//www.hackerrank.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HackerRank&/a& 是一个你可以参与各种编码竞赛并检测你的竞争能力的网站。&/p&&p&&br&&/p& &p&&br&&/p&&p&&i&hackerrank programming forums&/i&&/p&&p&这里有以各种编程语言举办的各种比赛,赢得比赛将增加你的分数。这个分数可以让你处于最高级别,并增加你获得一些软件公司注意的机会。&/p&&h2&&b&Codebeautify&/b&&/h2&&p&由于我们是程序员,所以美不是我们所关心的。很多时候,我们的代码很难被其他人阅读。&a href=&http://link.zhihu.com/?target=https%3A//codebeautify.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Codebeautify&/a&可以使你的代码易于阅读。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-6f8cbb8faf597dd4d9ebe4b67cffca64_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&180& data-rawheight=&180& class=&content_image& width=&180&&&/figure&&p&&br&&/p&&p&该网站有大多数可以美化的语言。另外,如果你想让你的代码不能被某人读取,你也可以这样做。&/p&&p&这些是我选择的一些最好的程序员网站。如果你有经常访问的我没有提及的网站,请在下面的评论区让我知道。&/p&&hr&&p&via: &a href=&http://link.zhihu.com/?target=http%3A//www.theitstuff.com/best-websites-programmers& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&theitstuff.com/best-web&/span&&span class=&invisible&&sites-programmers&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&作者:&a href=&http://link.zhihu.com/?target=http%3A//www.theitstuff.com/author/reevkandari& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Rishabh Kandari&/a& 选题:&a href=&http://link.zhihu.com/?target=https%3A//github.com/lujun9972& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lujun9972&/a& 译者:&a href=&http://link.zhihu.com/?target=https%3A//github.com/geekpi& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&geekpi&/a& 校对:&a href=&http://link.zhihu.com/?target=https%3A//github.com/wxy& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&wxy&/a&&/p&&p&本文由 &a href=&http://link.zhihu.com/?target=https%3A//github.com/LCTT/TranslateProject& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LCTT&/a& 原创编译,&a href=&http://link.zhihu.com/?target=https%3A//linux.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux中国&/a& 荣誉推出&/p&
作为程序员,你经常会发现自己是某些网站的永久访问者。它们可以是教程、参考或论坛。因此,在这篇文章中,让我们看看给程序员的最佳网站。W3Schools 是为初学者和有经验的 Web 开发人员学习各种编程语言的最佳网站之一。你可以学习 HTML5、CSS3、…
&figure&&img src=&https://pic3.zhimg.com/v2-a6f5a717d25ab88a66e845bad0d2b22d_b.jpg& data-rawwidth=&520& data-rawheight=&292& class=&origin_image zh-lightbox-thumb& width=&520& data-original=&https://pic3.zhimg.com/v2-a6f5a717d25ab88a66e845bad0d2b22d_r.jpg&&&/figure&&blockquote&这些简单的幻灯片创建工具可以无缝地使用 Markdown,可以让你的演示添加魅力。&/blockquote&&p&假设你需要做一个 &i&演示(presentation)&/i&。在准备的过程中,你想到“我需要写几张幻灯片”。&/p&&p&你可能倾向于简洁的&a href=&http://link.zhihu.com/?target=https%3A//plaintextproject.online/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&纯文本&/a&,认为 LibreOffice Writer 这样的软件对你要做的事情而言像是杀鸡用牛刀。或者你只是遵从你内心深处的极客意识。&/p&&p&将 &a href=&http://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Markdown& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Markdown&/a& 格式的文件转换为优雅的演示幻灯片并不困难。下面介绍可以完成这项工作的四种工具。&/p&&h2&&b&Landslide&/b&&/h2&&p&在这些工具中,&a href=&http://link.zhihu.com/?target=https%3A//github.com/adamzap/landslide& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Landslide&/a& 具有更高的灵活性。它是一个命令行工具,可以将 Markdown、&a href=&http://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/ReStructuredText& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&reStructuredText&/a& 或 &a href=&http://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Textile_%28markup_language%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Textile&/a& 格式的文件转换为基于 &a href=&http://link.zhihu.com/?target=https%3A//github.com/skaegi/html5slides& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google HTML5 幻灯片模板&/a&的 HTML 文件。&/p&&p&你要做的不过是编写 Markdown 格式的幻灯片源文件,打开一个终端窗口并运行 &code&landslide&/code& 命令即可,其中命令参数为 Markdown 文件的文件名。Landslide 会生成 &code&presentation.html&/code&,可以在任何 Web 浏览器中打开。简单吧?&/p&&p&但不要被简易的操作误导你。Landslide 提供了不少有用的特性,例如增加注记以及为幻灯片增加配置文件。为何要使用这些特性呢?按照 Landslide 开发者的说法,这样可以汇聚不同演示中的源文件目录并重用。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-9c3066fce29f87b436a7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&625& data-rawheight=&422& class=&origin_image zh-lightbox-thumb& width=&625& data-original=&https://pic4.zhimg.com/v2-9c3066fce29f87b436a7_r.jpg&&&/figure&&p&&br&&/p&&p&&i&在 Landslide 演示中查看演示者注记&/i&&/p&&h2&&b&Marp&/b&&/h2&&p&&a href=&http://link.zhihu.com/?target=https%3A//yhatt.github.io/marp/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Marp&/a& 仍处于开发中,但值得期待。它是 “Markdown Presentation Writer” 的简写。Marp 是一个基于 &a href=&http://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Electron_%28software_framework%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Electron&/a& 的工具,让你在一个简单的双栏编辑器中编写幻灯片:在左栏编写 Markdown,在右栏中预览效果。&/p&&p&Marp 支持 &a href=&http://link.zhihu.com/?target=https%3A//guides.github.com/features/mastering-markdown/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub 风格 Markdown&/a&。如果你需要一个使用 GitHub 风格 Markdown 编写幻灯片的快速教程,可以参考 &a href=&http://link.zhihu.com/?target=https%3A//raw.githubusercontent.com/yhatt/marp/master/example.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&示例项目&/a&。GitHub 风格 Markdown 比基础 Markdown 更加灵活。&/p&&p&Marp 只自带两个基础主题,但你可以为幻灯片增加背景图片、调整图片大小以及增加数学表达式。不足之处,目前只支持 PDF 格式导出。老实说,我很好奇为何不一开始就提供 HTML 格式导出。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-28ee5b23e55bf5e5a017_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1316& data-rawheight=&742& class=&origin_image zh-lightbox-thumb& width=&1316& data-original=&https://pic4.zhimg.com/v2-28ee5b23e55bf5e5a017_r.jpg&&&/figure&&p&&br&&/p&&p&&i&使用 Marp 编辑简单的幻灯片&/i&&/p&&h2&&b&Pandoc&/b&&/h2&&p&你可能已经知道 &a href=&http://link.zhihu.com/?target=https%3A//pandoc.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&pandoc&/a& 是一种支持多种 &i&标记语言(markup languages)&/i&相互转换的神奇工具。但你可能不知道,pandoc 可以将 Markdown 格式文件转换为 &a href=&http://link.zhihu.com/?target=https%3A//www.w3.org/Talks/Tools/Slidy2/Overview.html%23%281%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Slidy&/a&、&a href=&http://link.zhihu.com/?target=http%3A//goessner.net/articles/slideous/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Slideous&/a&、&a href=&http://link.zhihu.com/?target=http%3A//paulrouget.com/dzslides/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DZSlides&/a& 和 &a href=&http://link.zhihu.com/?target=https%3A//revealjs.com/%23/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reveal.js&/a& 等演示框架支持的优雅 HTML 幻灯片。如果你使用 &a href=&http://link.zhihu.com/?target=https%3A//www.latex-project.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LaTeX&/a&,可以使用 &a href=&http://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Beamer_%28LaTeX%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Beamer 软件包&/a&输出 PDF 格式的幻灯片。&/p&&p&你需要在幻灯片中&a href=&http://link.zhihu.com/?target=https%3A//pandoc.org/MANUAL.html%23producing-slide-shows-with-pandoc& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用特定格式&/a&,但可以通过&a href=&http://link.zhihu.com/?target=https%3A//pandoc.org/MANUAL.html%23variables-for-slides& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&变量&/a&控制其效果。你也可以更改幻灯片的外观与风格,增加幻灯片之间的暂停,添加演示者注记等。&/p&&p&当然,你需要在你的主机上安装你喜欢的演示框架,因为 Pandoc 只生成原始幻灯片文件。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ffbebd3cc8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1103& data-rawheight=&795& class=&origin_image zh-lightbox-thumb& width=&1103& data-original=&https://pic1.zhimg.com/v2-ffbebd3cc8_r.jpg&&&/figure&&p&&br&&/p&&p&&i&查看使用 Pandoc 和 DZSlides 创建的幻灯片&/i&&/p&&h2&&b&Hacker Slides&/b&&/h2&&p&&a href=&http://link.zhihu.com/?target=https%3A//github.com/jacksingleton/hacker-slides& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hacker Slides&/a& 是一个 &a href=&http://link.zhihu.com/?target=https%3A//sandstorm.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sandstorm&/a& 和 &a href=&http://link.zhihu.com/?target=https%3A//oasis.sandstorm.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sandstorm Oasis&/a& 平台上的应用,基于 Markdown 和 &a href=&http://link.zhihu.com/?target=https%3A//revealjs.com/%23/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reveal.js&/a&幻灯片框架。生成的幻灯片可以比较朴素,也可以很炫。&/p&&p&在浏览器的两栏界面中编写幻灯片,左栏输入 Markdown 文本,右栏渲染效果。当你制作完成后,可以在 Sandstorm 中演示,也可以生成分享链接让其它人演示。&/p&&p&你可能会说,你不使用 Sandstorm 或 Sandstorm Oasis 怎么办?不要担心,Hacker Slides 提供了可以在桌面或服务器上运行的&a href=&http://link.zhihu.com/?target=https%3A//github.com/msoedov/hacker-slides& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&版本&/a&。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-cb34fb742b1d7e62a161b6c36ff230ec_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&688& data-rawheight=&355& class=&origin_image zh-lightbox-thumb& width=&688& data-original=&https://pic1.zhimg.com/v2-cb34fb742b1d7e62a161b6c36ff230ec_r.jpg&&&/figure&&p&&br&&/p&&p&&i&在 Hacker Slides 中编辑幻灯片&/i&&/p&&h2&&b&两点特别补充&/b&&/h2&&p&如果你使用 &a href=&&i&&&http://jupyter.org/&&Jupyter 笔记本(Notebooks)&/a& (参考社区版主 Don Watkins 的&a href=&http://link.zhihu.com/?target=https%3A//linux.cn/article-9664-1.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&文章&/a&)发布数据或指令文本,你可以使用 &a href=&http://link.zhihu.com/?target=https%3A//github.com/datitran/jupyter2slides& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter2slides&/a&。该工具基于 Reveal.js,可以将笔记本转换为一系列精美的 HTML 幻灯片。&/p&&p&如果你倾向于托管应用,试试 &a href=&http://link.zhihu.com/?target=https%3A//gitpitch.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitPitch&/a&,支持 GitHub、GitLab 和 Bitbucket。只需在将幻灯片源文件推送到支持的代码仓库中,在 GitPitch 中指向该仓库,这样你就可以在 GitPitch 网站上看到你的幻灯片了。&/p&&p&你有最喜欢的基于 Markdown 的幻灯片生成器吗?留下评论分享吧。&/p&&hr&&p&via: &a href=&http://link.zhihu.com/?target=https%3A//opensource.com/article/18/5/markdown-slide-generators& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&opensource.com/article/&/span&&span class=&invisible&&18/5/markdown-slide-generators&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&作者:&a href=&http://link.zhihu.com/?target=https%3A//opensource.com/users/scottnesbitt& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scott Nesbitt&/a& 选题:&a href=&http://link.zhihu.com/?target=https%3A//github.com/lujun9972& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lujun9972&/a& 译者:&a href=&http://link.zhihu.com/?target=https%3A//github.com/pinewall& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&pinewall&/a& 校对:&a href=&http://link.zhihu.com/?target=https%3A//github.com/wxy& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&wxy&/a&&/p&&p&本文由 &a href=&http://link.zhihu.com/?target=https%3A//github.com/LCTT/TranslateProject& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LCTT&/a& 原创编译,&a href=&http://link.zhihu.com/?target=https%3A//linux.cn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux中国&/a& 荣誉推出&/p&
这些简单的幻灯片创建工具可以无缝地使用 Markdown,可以让你的演示添加魅力。假设你需要做一个 演示(presentation)。在准备的过程中,你想到“我需要写几张幻灯片”。你可能倾向于简洁的,认为 LibreOffice Writer 这样的软件对你要做的事情而言像是…
&p&可以通过下面这张图做个小测试,看看自己更适合哪种编程语言。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-ecc08a2b1ba2b4c0f358b710fcb0a5f9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&660& data-rawheight=&361& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&https://pic4.zhimg.com/50/v2-ecc08a2b1ba2b4c0f358b710fcb0a5f9_r.jpg&&&/figure&&p&下面的图对比了最流行的9种编程语言,来帮初学者选择最适合自己的。&/p&&figure&&img src=&https://pic2.zhimg.com/50/59f47c31ddf7f33f8fe92126deed9fdb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&2097& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/50/59f47c31ddf7f33f8fe92126deed9fdb_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/50/7b44d36ce76ab7e451b7e34_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&2390& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic1.zhimg.com/50/7b44d36ce76ab7e451b7e34_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/e958981aafcf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&2133& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/e958981aafcf_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/5ba4793caf323a7db8395_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&1942& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/5ba4793caf323a7db8395_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/43bb51a3e5c6869cc6cfd9be803fe202_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&2146& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/43bb51a3e5c6869cc6cfd9be803fe202_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/9aacea4f1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&2677& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/9aacea4f1_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/12c6fee22c7f7f44556edad624d7f194_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&1680& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/12c6fee22c7f7f44556edad624d7f194_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/78cc1f2c2136cdb721e324dd42ba9670_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&2003& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic2.zhimg.com/50/78cc1f2c2136cdb721e324dd42ba9670_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/dca8fd7abbf8f1f13a0c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&2032& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/dca8fd7abbf8f1f13a0c_r.jpg&&&/figure&&p&&br&&/p&&p&原文:&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//byrslf.co/should-you-learn-python-c-or-ruby-to-be-a-top-coder-infographic-188a5bdc9f54& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Should You Learn Python, C, or Ruby to Be a Top Coder? (Infographic)-Medium&/a&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//carlcheo.com/startcoding& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Which Programming Language Should I Learn First?&/a&&/p&&p&翻译:麻瓜编程&/p&&p&&br&&/p&&p&---&/p&&p&想看更多适合编程小白的优质文章,可以关注微信公众号「麻瓜编程」&/p&
可以通过下面这张图做个小测试,看看自己更适合哪种编程语言。下面的图对比了最流行的9种编程语言,来帮初学者选择最适合自己的。 原文:
给大家安利下:&br&&blockquote&&a href=&//link.zhihu.com/?target=http%3A//www.ifanr.com/app/700210& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&最优雅的 Chrome 截图插件,你想要的功能它都有&/a&&/blockquote&&br&上个月才介绍了「不只是优秀截图软件! Snipaste 用贴图创造多工神器」,不过 Snipaste 严格来说不是最完整的截图软件,它的截图只是为了要创造多工环境的一个手段。当然 Snipaste 绝对是近期最有创意的工具之一,但我还是想要再找一款更好用的截图工具。&br&&br&于是就看到了这款 Smartshot ,这是一个 Chrome 的插件,它免费且跨平台,不只能抓网页,也一样可以抓电脑软件视窗。而第一眼使用的印象,就是觉得这款截图软件「很优雅」。&br&&br&优雅来自于两点,第一点是 Smartshot 的界面很有质感,在众多截图软件中显得突出,并且它的标注工具品质有那么一点 Skitch 的味道,效果颇精致。第二点是 Smartshot 的抓图、标注、上传一气呵成,没有多余视窗或按钮干扰,让人觉得截图流程一体成形。&br&&br&1. 完整截图功能&br&&br&截图软件也需要好看的操作界面,有质感的注解工具,以及抓图、标注、上传一气呵成的顺畅感,这个跨平台又免费的 Smartshot 确实做到了一个优雅的截图软件质感。&br&&br&在 Google Chrome 安装 Smartshot 插件,首先点击工具列的 Smartshot 截图按钮,可以看到选单里提供了多样化的截图功能,每个功能有漂亮的按钮图示,其中常见的目前网页截图、长网页截图、选择画面截图还提供了快捷键。&br&&br&你也可以直接上传自己的图片,把 Smartshot 当作图片注解工具来使用。&br&&br&&figure&&img src=&https://pic3.zhimg.com/50/2ecf13bdf9e9bd298a16e21_b.jpg& data-rawwidth=&654& data-rawheight=&344& class=&origin_image zh-lightbox-thumb& width=&654& data-original=&https://pic3.zhimg.com/50/2ecf13bdf9e9bd298a16e21_r.jpg&&&/figure&&br&&br&2. 支持长网页储存&br&&br&Smartshot 的长网页截图效果很棒,只要点击「 Capture entire page 」,几秒钟内就会打开撷取好的长网页图片分页。&br&&br&这里可以看到 Smartshot 会将截图结果直接用浏览器新分页开启,并且在图片上显示出标注工具列,这个过程很顺畅,也不用离开浏览器与打开新视窗。&br&&br&&figure&&img src=&https://pic4.zhimg.com/50/a1ddf07a6ae1ce357076cbb6f83986a0_b.jpg& data-rawwidth=&1000& data-rawheight=&562& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic4.zhimg.com/50/a1ddf07a6ae1ce357076cbb6f83986a0_r.jpg&&&/figure&&br&&br&3. 延迟截图&br&&br&Smartshot 也支持延迟截图( Delay Capture ),开启延迟截图,预设会倒数三秒钟,网页右上方会显示漂亮的倒数数字,我们可以赶快去进行一些操作。&br&&br&你也可以到 Smartshot 设定中将延迟秒数设定为五秒。&br&&br&&figure&&img src=&https://pic4.zhimg.com/50/9553ed1ddeb591c503fda45be571dd52_b.jpg& data-rawwidth=&1000& data-rawheight=&562& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic4.zhimg.com/50/9553ed1ddeb591c503fda45be571dd52_r.jpg&&&/figure&&br&&br&4. 撷取电脑屏幕视窗&br&&br&虽然是 Chrome 插件,但 Smartshot 也支持撷取电脑视窗的画面,只要开启「 Capture Desktop 」,就会呼叫 Chrome 的屏幕共享功能,让 Smartshot 可以撷取电脑上的视窗。&br&&br&这个技术和我之前推荐过的屏幕录影 Chrome 插件 Screencastify 一样。&br&&br&&figure&&img src=&https://pic1.zhimg.com/50/8b55e5df5c616dbdd6213_b.jpg& data-rawwidth=&661& data-rawheight=&489& class=&origin_image zh-lightbox-thumb& width=&661& data-original=&https://pic1.zhimg.com/50/8b55e5df5c616dbdd6213_r.jpg&&&/figure&&br&&br&5. 优秀标注工具&br&&br&值得一提的是, Smartshot 吸引我的很大一个因素是它的标注工具,不只从画线、箭头、文字都一应具全,更棒的是箭头还有曲线功能,以及还不错的荧光笔工具,而且标注效果看起来也算有质感。&br&&br&&figure&&img src=&https://pic2.zhimg.com/50/a7fcbaf40fbf20be86188da4_b.jpg& data-rawwidth=&1000& data-rawheight=&584& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic2.zhimg.com/50/a7fcbaf40fbf20be86188da4_r.jpg&&&/figure&&br&&br&6. 云端转存 Google Drive&br&&br&完成截图、标注后,就会转入上传下载图片的页面,左方的[ Download ]可以把截图下载 Google Drive。&br&&br&或是你可以选择将截图上传到 Google Drive 等服务,速度都很快。&br&&br&&figure&&img src=&https://pic2.zhimg.com/50/dc8eed7e5bdcfb_b.jpg& data-rawwidth=&1000& data-rawheight=&585& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic2.zhimg.com/50/dc8eed7e5bdcfb_r.jpg&&&/figure&&br&&br&7. 顺畅的流程&br&&br&我很喜欢 Smartshot 呈现出来的一气呵成操作流程,按下截图、转入标注网页、进入上传画面只需几个点击,速度快、界面好看。&br&&br&还有一个贴心之处,就是它的网页截图都会「自动把网页标题当作图片文件名」,这也省下一些整理的时间。&br&&br&&figure&&img src=&https://pic3.zhimg.com/50/e0f3e5e9f02a13d35af309fbdccdb6c2_b.jpg& data-rawwidth=&629& data-rawheight=&358& class=&origin_image zh-lightbox-thumb& width=&629& data-original=&https://pic3.zhimg.com/50/e0f3e5e9f02a13d35af309fbdccdb6c2_r.jpg&&&/figure&&br&&br&如果你需要一款网页截图工具,而且喜欢好的界面,那么推荐试试看 Smartshot。&br&&br&&i&P.S.获取更多创业者访谈和大咖精彩分享报道(内容/设计/产品/运营)欢迎关注我专栏哦:&a href=&https://zhuanlan.zhihu.com/mindstore& class=&internal&&MindStore 官方博客 - 知乎专栏&/a&&/i&
给大家安利下:
上个月才介绍了「不只是优秀截图软件! Snipaste 用贴图创造多工神器」,不过 Snipaste 严格来说不是最完整的截图软件,它的截图只是为了要创造多工环境的一个手段。当然 Snipaste 绝对是近期…
&p&写这篇文章的初衷是大部分私信我的朋友都想了解&b&如何入门/转行机器学习&/b&,搭上人工智能这列二十一世纪的快车。再加上这个问题每隔一阵子就会在知乎时间线上出现一次,因此想写一篇文章来“一劳永逸”的分享我的观点。&/p&&ul&&li&原作者: &a class=&member_mention& href=&//www.zhihu.com/people/e3faa07c05b0b9e6dc537& data-hash=&e3faa07c05b0b9e6dc537& data-hovercard=&p$b$e3faa07c05b0b9e6dc537&&@阿萨姆&/a&&/li&&li&原链接:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&&span class=&invisible&&https://&/span&&span class=&visible&&zhuanlan.zhihu.com/p/29&/span&&span class=&invisible&&704017&/span&&span class=&ellipsis&&&/span&&/a& &/li&&li&原出处:知乎&/li&&/ul&&hr&&p&&b&文章的宗旨是:&/b&&/p&&ul&&li&指出一些自学的误区 &/li&&li&不过多的推荐资料 &/li&&li&提供客观可行的学习表 &/li&&li&给出进阶学习的建议&/li&&/ul&&p&&b&这篇文章的目标读者是计划零基础自学的朋友,对数学/统计基础要求不高,比如:&/b&&/p&&ul&&li&在读的学生朋友&/li&&li&非计算机行业的读者&/li&&li&已经工作但想将机器学习/数据分析和自己的本职工作相结合的朋友&/li&&/ul&&p&&b&因此,这篇文章对于已经身处机器学习领域可能帮助不大。同时再次声明这只是我的个人看法,请大家有选择的性阅读,探索适合自己的学习方法。&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-1cdfe6bca209eedefedcc02_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&361& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/50/v2-1cdfe6bca209eedefedcc02_r.jpg&&&/figure&&h2&&b&1. 自学机器学习的误区和陷阱&/b&&/h2&&p&&b&1.1. 不要试图掌握所有的相关数学知识再开始学习&/b&&/p&&p&在很多&a href=&https://www.zhihu.com/question//answer/& class=&internal&&相关的回答&/a&中,我都一再强调不要试图补足数学知识再开始学习机器学习。一般来说,大部分机器学习课程/书籍都要求:&/p&&ul&&li&线性代数:矩阵/张量乘法、求逆,奇异值分解/特征值分解,行列式,范数等&/li&&li&统计与概率:概率分布,独立性与贝叶斯,最大似然(MLE)和最大后验估计(MAP)等&/li&&li&优化:线性优化,非线性优化(凸优化/非凸优化)以及其衍生的求解方法如梯度下降、牛顿法、基因算法和模拟退火等&/li&&li&微积分:偏微分,链式法则,矩阵求导等&/li&&li&信息论、数值理论等&/li&&/ul&&p&一般人如果想要把这些知识都补全再开始机器学习往往需要很长时间,容易半途而废。而且这些知识是工具不是目的,我们的目标又不是成为运筹学大师。&b&建议在机器学习的过程中哪里不会补哪里,这样更有目的性且耗时更低。&/b&&/p&&p&&b&1.2. 不要把深度学习作为入门的第一门课&/b&&/p&&p&虽然很多人都是冲着深度学习来的,但把深度学习作为机器学习第一课不是个好主意。原因如下:&/p&&ul&&li&深度学习的黑箱性更加明显,很容易学得囫囵吞枣&/li&&li&深度学习的理论/模型架构/技巧还在一直变化当中,并未尘埃落定&/li&&li&深度学习实验对硬件要求高,不太适合自学或者使用个人电脑进行学习&/li&&/ul&&p&更多讨论可以看我的回答:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&阿萨姆:深度学习的教学和课程,与传统 CS 的教学和课程有什么区别?&/a&&/p&&p&&b&1.3. 不要收集过多的资料 & 分辨资料的时效性&/b&&/p&&p&机器学习的资料很多,动辄就有几个G的材料可以下载或者观看。而很多朋友都有“收集癖”,一下子购买十几本书的人我也常常能够看到。&/p&&p&机器学习的发展和变化速度很快。在入门期间,&b&建议“小而精”的选择资料,选择近期出版的且口碑良好的书籍&/b&。我不止一次的提到这个例子:&/p&&blockquote&在很多深度学习的教科书中,尤其是10年以前的教科书中都还依然把Sigmoid当作默认的激活函数。但事实上,整流函数(ReLu)以及其拓展变形函数,如Leaky&br& ReLu早就成为了主流的深度学习激活函数。但因为知识的滞后性,很多课程/书籍甚至都没有介绍ReLu的章节。&/blockquote&&p&一般来说,我比较推荐近5年内出版的书籍,或者10年以后出版的书籍。有些书籍虽然是经典,比如Tom Mitchell的《机器学习》,但因为其出版已经超过20年,还是不建议大家购买。&/p&&p&在这篇文章中我所推荐的书籍和课程都相对比较经典,同时属于紧跟时代潮流的。入门阶段我推荐了1门课程和2本书,进阶阶段推荐了1本书,深度学习推荐了1门课程一本书,高级阶段推荐了2本额外书籍。&/p&&h2&&b&2. 机器学习的一些前期准备&/b&&/h2&&p&&b&2.1. 硬件选择&/b&&/p&&p&另一个大家常问的问题是:是否可以用自己的笔记本电脑进行机器学习。答案是肯定的,大部分市面上的数据集都可以放到你的内存中运行。在入门阶段,我们很少会用到非常大的数据集,一般最大也就是MNIST,完全可以使用个人笔记本电脑进行运行。&/p&&p&请不要打着学习的名义重新购买机器...&/p&&p&&b&2.2. 软件选择&/b&&/p&&p&如果要做深度学习,Linux还是首选,因为其对很多学习模型支持比较好(主要是深度学习的Library)。但即使你使用的是Windows系统,也可以用虚拟机装Ubuntu来进行学习。小型的深度学习模型足够了,大型的深度学习我们很少在本地/个人计算机上运行。&/p&&p&至于编程语言,首推Python,因为其良好的拓展支持性,主流的工具包都有Python版本。在特定情况下,选择R作为编程语言也是可以的。其他可能的语言还包括C++、Java和Matlab,但我个人不大推荐。&/p&&p&此处也想额外提一句,因为编程属于机器学习基本要求之一,所以推荐大家可以自学一些基础编程的知识(如Python),在文中不再赘述。&/p&&p&&b&2.3. 语言能力&/b&&/p&&p&学好英语,至少打下阅读和听力的基础。&b&虽然人工智能领域中国现在已经做得很不错,但主流的书籍、期刊和会议,资料都是英文的&/b&。我们可以接受翻译版,但最好的方法还是自己有能力直接阅读。即使你将来不做机器学习,英文阅读能力还是会有很大的帮助。&/p&&h2&&b&3. 机器学习课程表&/b&&/h2&&h2&3.1. 第一阶段:基础入门(3-6个月)&/h2&&p&入门的第一步是学习一些经典课程并配套经典书籍,一般来说这个过程在半年之内比较合适。在这个部分我介绍的课程和书籍都属于难度非常低的,对数学和编程都没什么太大的要求。&/p&&p&&b&3.1.1. 吴恩达Cousera机器学习课程&/b&&/p&&p&Andrew Ng的机器学习课程(&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&)是很多人的启蒙课程,难度适中且完全免费。Coursera上总共有49285个人给出了评分,平均得分4.9分,满分5分。据我个人观察,大部分Coursera上的课程评分处于4-4.5分之间,能做到4.9分的课程寥寥无几。另一个值得关注的是,这门课有接近五万人给出评分,统计学知识告诉我们这个样本较大所以评分应该趋近于其真实值,比较可信。根据Freecodecamp的&a href=&//link.zhihu.com/?target=https%3A//medium.freecodecamp.org/every-single-machine-learning-course-on-the-internet-ranked-by-your-reviews-3c4a7b8026c0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&统计&/a&,这门课是所有在线Machine Learning课程中最受到大家好评的课程。另一个比较直接的观察是如果大家在知乎上搜索“机器学习如何入门?”,大部分答案都提到了Andrew的这门入门课程,所以这是一门绝对的口碑课程。&/p&&p&&b&3.1.2. Python机器学习 & Introduction to Statistical Learning with R&/b&&/p&&p&在学习吴恩达的在线课程时,推荐同时阅读相关的机器学习书籍&b&补充理论知识&/b&。我再次推荐这两本非常好的入门书籍,在我的专栏也有对于这两本书的介绍。&/p&&ul&&li&&b&Python机器学习&/b&:这本书出版于2015年并多次再版,在亚马逊中国上我们可以找到影印版和翻译版。这本书去掉了大量的数学推导的部分,仅保留了机器学习的核心应用。阅读本书可以快速对如何使用Python机器学习框架Sklearn有一个基本的了解,可以很快上手开始工作。本书涉及的内容很广泛,虽然只有400多页,但内容涉及了数据预处理(Data&br& Preprocessing), 维度压缩和核函数(Dimension Reduction & &br&Kernel),评估方法如交叉验证,集成学习,情感分析,聚类,甚至还包括了神经网络和Theano。更多介绍:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&带你读机器学习经典(三): Python机器学习(Chapter 1&2)&/a&&/li&&li&&b&Introduction to Statistical Learning with R(ISL)&/b&:相信正在机器学习苦海中遨游的朋友们肯定都听过大名鼎鼎的The&br& Element of Statistical Learning, &br&这本频率学派的统计学习“圣经”被大家叫做ESL。而ISL正是基于满足更广大阅读人群的目的而推出的;ISL是ESL的入门版,不仅大量的去除了繁复的数学推导,还加入了R编程的部分,方便大家可以尽快上手。&b&这本书是我推荐书单第一名&/b&:ISL的电子版是免费的:&a href=&//link.zhihu.com/?target=http%3A//www-bcf.usc.edu/%7Egareth/ISL/ISLR%2520First%2520Printing.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&点击下载&/a&。更多介绍:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&带你读机器学习经典(一): An Introduction to Statistical Learning (Chapter 1&2)&/a&&/li&&/ul&&p&&b&3.1.3. 周志华《机器学习》&/b&&/p&&p&周志华老师的《机器学习》也被大家亲切的叫做“西瓜书”。虽然只有几百页,但内容涵盖比较广泛。然而和其他人的看法不同&b&,我建议把西瓜书作为参考书而不是主力阅读书&/b&。西瓜书因为篇幅的限制,涵盖了很多的内容但无法详细的展看来讲,对于初学者自学来说实际阅读很大。这本书更适合作为学校的教材或者中阶读者自学使用,入门时学习这本书籍难度稍微偏高了一些。&/p&&p&我个人建议的用法是在学习网课和阅读ISL遇到疑惑时可以参考西瓜书的相关章节,但入门阶段没有必要一章一章的阅读,建议在这个阶段只阅读前十章即可。&/p&&h2&3.2. 第二阶段:进阶学习(3-6个月)&/h2&&p&在这个阶段,你已经对机器学习有了基本的了解。如果你认真的阅读了ISL并上完了吴恩达的课程,我相信你已经在理论上明白了什么是线性回归,什么是数据压缩,对特征工程以及简单的回归/预测问题有了理论上的基础。这个时候最重要的就是进行实践!&/p&&p&&b&3.2.1. Kaggle挑战赛/练习&/b&&/p&&p&Kaggle(&a href=&//link.zhihu.com/?target=https%3A//www.kaggle.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Your Home for Data Science&/a&)在数据分析领域早已大名鼎鼎,甚至可以说是数据分析第一社区,前一阵子刚刚被谷歌收购。Kaggle上有很多很好的数据集和挑战赛,你可以尝试这些挑战取得名次,甚至拿到奖金,对于将来找工作也非常有帮助。而且Kaggle的另一大优势是网友会分享他们的经验和看法,你也可以提出问题让大家来帮你提出一些修正方法。&/p&&p&国内也有类似的平台,比如天池大数据竞赛,其他类似的平台还包括DataCastle。&/p&&p&&b&使用Kaggle的目的主要是将技能落在实处,防止练就一身屠龙之技。机器学习最大的幻觉就是觉得自己什么都懂了,但等到真的使用时发现并不奏效&/b&,而Kaggle是一个低成本的应用机器学习的机会。&/p&&p&&b&3.2.2. Sklearn文档学习&/b&&/p&&p&Sklearn(&a href=&//link.zhihu.com/?target=http%3A//scikit-learn.org/stable/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&scikit-learn: machine learning in Python&/a&)是Python上最流行的机器学习/数据科学工具包,上文介绍的Python&br& Machine &br&Learning书中就大量使用Sklearn的API。和使用Kaggle的目的一致,学习的Sklearn的文档也是一种实践过程。比较推荐的方法是把主流机器学习模型Sklearn中的例子都看一遍。&/p&&p&Sklearn的文档是少数写的跟教程一样的技术文档,很具有阅读价值。举个简单的例子,假设你想学习Python中使用逻辑回归,就可以参考: &a href=&//link.zhihu.com/?target=http%3A//scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html%23sphx-glr-auto-examples-linear-model-plot-iris-logistic-py& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Logistic Regression 3-class Classifier&/a&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-a22ac489e184ca380bb6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&400& data-rawheight=&300& class=&content_image& width=&400&&&/figure&&p&Sklearn的文档不仅提供了练习数据、sklearn的相关代码实例,还提供了可视化图。&/p&&p&&b&3.2.2. 周志华机器学习&/b&&/p&&p&再次提到周老师是因为西瓜书是值得常常翻看的一本书,在kaggle挑战和阅读Sklearn文档的过程中你还会时不时的遇到一些新的名词,比如流形学习(manifold learning)等。这个时候你会发现西瓜书真的是一本中级阶段大而全的书籍:)&/p&&h2&3.3. 第三阶段(可选*):深度学习(3-6个月) &/h2&&p&因为深度学习是当下的热点,很多公司都在寻找深度学习人才。虽然深度学习只是机器学习的一个子集,但有兴趣朝这个方向发展的朋友可以在完成以上学习后单独学习一下深度学习。&/p&&p&&b&3.3.1. 吴恩达深度学习课程&/b&&/p&&p&吴恩达在八月份的时候通过Deeplearning.ai和Coursera平台推出了最新系列的五门深度学习课程(&a href=&//link.zhihu.com/?target=https%3A//www.deeplearning.ai/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&deeplearning.ai&/a&)。有条件的朋友可以通过Coursera学习获得证书,最近网易云课堂也上线了这门课的翻译版。如果想要上其中的课程,需要先注册报名「深度学习工程师微专业」 &a href=&//link.zhihu.com/?target=http%3A//mooc.study.163.com/smartSpec/detail/.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深度学习工程师微专业 - 一线人工智能大师吴恩达亲研-网易云课堂 - 网易云课堂&/a&,之后就可以分别点开每门课单独进行学习。和Coursera上的DL同步,现在云课堂也上线了五门中的前三门课程,而卷积网络(CNN)和循环网络(RNN)还未开放。&/p&&p&更多关于网易云课堂上深度学习课程的介绍可以看:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&阿萨姆:如何评价网易云课堂上线的吴恩达Deep Learning课程?&/a&&/p&&p&&b&3.3.2. Deep Learning -
by IanGoodFellow&/b&&/p&&p&深度学习这本书是由当下深度学习领域的几位领军人物所著,包含三大巨头之一的Bengio,还有教父Hinton来作序推荐。这本书的中文本翻译由张志华教授团队负责,在github上免费放出了翻译版本,印刷版也可以从亚马逊中国上买到。&/p&&p&英文版:&a href=&//link.zhihu.com/?target=http%3A//www.deeplearningbook.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Deep Learning&/a&&/p&&p&中文版:&a href=&//link.zhihu.com/?target=https%3A//github.com/exacity/deeplearningbook-chinese& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&exacity/deeplearningbook-chinese&/a&&/p&&p&这本书的阅读建议:&/p&&ul&&li&为了补充基础可以阅读第1-5章其中也包含了一些数学知识&/li&&li&只关注主流神经网络知识可以阅读6-10章,介绍了DNN/CNN/RNN&/li&&li&需要进一步了解一些调参和应用技巧,推荐阅读11和12章&/li&&/ul&&p&第13-20章为进阶章节,在入门阶段没有必要阅读。其实比较实际的做法是吴恩达的课程讲到什么概念,你到这本书里面可以阅读一些深入的理论进行概念加深,按章节阅读还是比较耗时耗力的。&/p&&h2&3.4. 第四阶段:深入研究&/h2&&p&恭喜你!如果你已经完成了上面的计划表,代表你已经有了相当的机器学习能力。这个阶段,最重要的就是不要贪多嚼不烂。如果你浏览知乎,会发现大家都说你必须读Elements&br& of Statistical Learning, &br&MLAPP之类的大部头。我承认阅读这样的书会有帮助,但在你有了一定的基础知识后,相信你已经知道自己需要接着做什么了也有了志同道合的朋友,我希望把选择权交还给你,而不是继续推荐成堆的课程和书籍。当然,如果你希望继续深入的话,中文可以继续阅读周志华老师的《机器学习》和李航老师的《统计学习基础》,英文可以入手《Elements&br& of Statistical Learning》。&b&在这个阶段,重点要形成成体系的知识脉络,切记贪多嚼不烂,切记!&/b&&/p&&p&从阅读论文角度来说,订阅Arxiv,关注机器学习的顶级会议,如ICML/NIPS等,相关的方法在知乎上可以很容易搜索到,不在此赘述。&/p&&h2&&b&4. 实践经验&/b&&/h2&&p&&b&4.1. 研究经历&/b&&/p&&p&如果你还是学生,尝试尽早接触科研,进实验室。一般来说,大三的时候你应该已经有了基本的机器学习知识,尽管还比较浅。这个时候可以向老师/学长/学姐毛遂自荐进实验室,即使是无偿劳动和做基本的苦力活。进实验室有两个明显的好处:&/p&&ul&&li&&b&对某个小方向会有比较深入的了解&/b&。一般实验室做纯理论的不大需要本科生,做机器视觉或者自然语言处理(NLP)等小方向的比较需要本科生,所以这是很好的深入了解一个方向的机会。&/li&&li&补充了研究经历也可以明白自己是否适合这个领域。如果运气好的话,你也有可能成为论文的作者之一,甚至可以去开会(公款旅游顺道见一下业内大佬)。&b&这对于继续深造和去国外继续学习都很有帮助,有科研经历和论文是很大的筹码,对于找工作来说也绝对有利无害。&/b&&/li&&/ul&&p&&b&4.2. 企业实习&/b&&/p&&p&上文提到过,机器学习光说不练假把式,最好的方法还是要实践。&b&因此,应该先试着做科研,再尝试工业界实习。对待科研机会,有则就上,没有也不是太大的遗憾。&/b&我建议大部分做机器学习的朋友尽早实习,主要出于以下几个考量:&/p&&ul&&li&&b&打破幻想,了解工业界的主流模型&/b&。在其他很多答案中我都提到过,其实工业界用的大部分技术并不酷炫,你很少能看到深度强化学习那种AlphaGo一样酷炫的模型。不夸张的说,广义线性模型(generalized&br& linear &br&models)还是占据了大壁江山,这要归功于其良好的解释能力。从神经网络角度出发,一般也逃不过普通任务深度网络、视觉任务卷积网络CNN、语音和文字任务LSTM的套路。&/li&&li&&b&补上学术界忽视的内容,比如可视化和数据清洗&/b&。工业界的最终目的是输出商业价值,而获得商业洞见的过程其实是非常痛苦的,比如第一步就是令人深恶痛绝的数据清洗。毫不夸张的说,工业界百分之六十的时间都在清理数据,这和学术界干净且规则化的现成数据完全不同。没有在工业界体验过的人,无法真的了解原来机器学习从头到尾有那么多陷阱,泛化能力只是终极目标,而往往我们连规整的数据都无法得到。&/li&&li&&b&了解技术商业化中的取舍,培养大局观&/b&。做技术的人往往一头扎进技术里面,而忽视了从全局思考。举个例子,模型A的准确率95.5%,每次训练时间是3天,需要6台有GPU的服务器。而模型B的准确率是百分之95.2%,但只需要一台普通的macbook训练4个小时就可以了。从学术角度出发我们往往追求更好的模型结果选A,而工业界还要考虑到训练开销、模型可解释性、模型稳定度等。到工业界实习不仅可以培养大家的宏观掌控能力,对将来自己带学生控制开销或者选题也大有帮助&/li&&/ul&&p&&b&4.3. 在本职工作中使用机器学习&/b&&/p&&p&对于大部分已经工作的朋友来说,重新回到学校攻读学位并不现实,进研究室进行学习更是缺少机会。那么这个时候,你就可以试着把机器学习应用到你自己的工作当中。&/p&&p&已经有了工作/研究经验的朋友,要试着将自己的工作经历利用起来。举例,不要做机器学习里面最擅长投资的人,而要做金融领域中最擅长机器学习的专家,这才是你的价值主张(value&br&&br&proposition)。最重要的是,机器学习的基本功没有大家想的那么高不可攀,没有必要放弃自己的本专业全职转行,沉没成本太高。通过跨领域完全可以做到曲线救国,化劣势为优势,你们可能比只懂机器学习的人有更大的行业价值。&/p&&p&举几个我身边的例子,我的一个朋友是做传统软件工程研究的,前年他和我商量如何使用机器学习以GitHub上的commit历史来识别bug,这就是一个很好的结合领域的知识。如果你本身是做金融出身,在你补足上面基本功的同时,就可以把机器学习交叉运用于你自己擅长的领域,做策略研究,我已经听说了无数个“宣称”使用机器学习实现了交易策略案例。虽不可尽信,但&b&对特定领域的深刻理解往往就是捅破窗户的那最后一层纸,只理解模型但不了解数据和数据背后的意义,导致很多机器学习模型只停留在好看而不实用的阶段&/b&。&/p&&h2&&b&5. 写在最后&/b&&/h2&&p&虽然人们曾说二十一是生物的世纪,但现在还是人工智能的世纪。欢迎大家来试试机器学习,体验数据分析的魅力。&/p&&p&就像我曾在很多回答中提到,机器学习领域应该要敞开大门,让每个人都可以尝试将机器学习知识应用于他们原本的领域,摒弃人为制造的知识壁垒。唯有这样,机器学习技术才能在更多的不同领域落地,从而反哺机器学习研究本身。&/p&&p&科技日新月异,追逐热点是好的。但在这个浮躁的时代,&b&不管选择什么方向最重要的就是独立思考的能力,和去伪存真的勇气。因此,看了这么多入门教程和经验分享后,我最希望的是你既不要急着全盘接受,也不要因为不对胃口全盘否定。慢下来,好好想想,制定适合自己的计划,这大概才是做科学工作的正确态度。&/b&&/p&&p&&b&在思考之后,拒绝外界的噪音,无论是鼓励还是嘲笑。抱着“不撞南山不回头”的信念,继续朝机器学习的高峰攀登。&/b&&/p&&p&&b&或许,科技领域正因为有了我们这群“书呆子”才显得尤为可爱 &/b&?o?o?&/p&&p&&b&注:&/b&希望继续在IT行业突破提升自己的各位朋友,欢迎加群,不管你自我感觉牛不牛B。 &/p&
写这篇文章的初衷是大部分私信我的朋友都想了解如何入门/转行机器学习,搭上人工智能这列二十一世纪的快车。再加上这个问题每隔一阵子就会在知乎时间线上出现一次,因此想写一篇文章来“一劳永逸”的分享我的观点。原作者: 原链接:…
计算机网络,作为计算机的一个分支,主要解决二三层的问题,二三层目前已经被以太网、IP网络所垄断,所以基本又等同于研究并解决Ethernet、IP问题。&br&&br&而Ethernet目前有三种帧格式:&br&&br&Ethernet II&br&Ethernet SAP&br&Ethernet SNAP&br&&br&它们之间的本质差别是如何区分上层协议,这其实很简单。&br&&br&加上一个用于区分VLAN的802.1Q,也只有4个字节,即使是QinQ,也只有8个字节。&br&&br&IP,如果不包含Option,一共就20个字节,就研究这20个字节还不简单吗?背也背得出。&br&&br&但学完这些,并不能解决什么实际问题,别人问你PPP怎么回事?PPPoE又是怎么回事?&br&&br&所以要去学,顺带学一下LCP、IPCP、PAP、Chap、EAP。&br&&br&但这些依然不够,用户使用的是EPON/GPON上网,还使用PPPoE 拨号,这中间谁是物理层、谁是链路层?上行、下行如何传输?对称吗?&br&&br&但依然不够,用户使用无线AP,物理层是啥,链路层是啥?AP如何认证电脑,如何绑定AP,如何DHCP给电脑分配IP等上网参数?如何将单播加密key、广播加密key推送到电脑?&br&&br&这里已经牵扯到安全认证、安全加密了,附带要看看802.1x。&br&&br&既然有了IP,如何找到网关,需要理解什么是同网段、不同网段的通信,这又需要知道网络掩码、子网掩码。&br&&br&用户IP包是如何在运营商网络路由到目的地,需要理解并掌握OSPF/BGP路由协议。&br&&br&而为了保护OSPF/BGP,又需要安全认证,这里又需要知道 shared secret / MD5 / SHA /TCP Option。&br&&br&为了保证快速检测路由路径的失效,通常需要部署第三方检测协议BFD。&br&&br&通常,公司会将全国、全球、私有云的场点连接起来,需要建立隧道传输,但不加密不安全,需要使用IPSec 、DMVPN、Open VPN 建立安全隧道,这需要知道IKE、DH、NAT Transversal、NHRP、ESP、AES、HMAC、Nonce、IV、ICV。&br&&br&如果公司不差钱,可以用二层、三层MPLS VPN互联各场点,需要知道这些原理背后支撑协议,LDP、MP-BGP、OAM、VRF。&br&&br&随着安全深入人心,目前互联网的绝大多数流量需要安全保护,保护https网页流量、smtp/IMAP邮件流量、即时通信流量,而实现这个安全的协议是TLS,自然需要熟练掌握TLS协议。&br&&br&TLS协议又会牵扯到PKI、CA、数字证书、数字签名/指纹、公钥加密、ECC、DH、RSA、DSA、AES-GBC、SHA256。&br&&br&学完这些,再研究一点http、hsts、HPKP、Mixed Content、Same Origin Policy、Cache、Transparent Proxy、DNSSEC。&br&&br&学完以上内容,差不多可以解释生活中关于网络、安全的疑问,比如bitcoin 、block chain。&br&&br&至于那些书需要推荐,只要把我所有回答都看完,肯定能找到答案,因为我曾经推荐过,不会再这里重复。&br&&br&&b&学海无涯,唯有持续学习才是唯一正途…&/b&
计算机网络,作为计算机的一个分支,主要解决二三层的问题,二三层目前已经被以太网、IP网络所垄断,所以基本又等同于研究并解决Ethernet、IP问题。 而Ethernet目前有三种帧格式: Ethernet II Ethernet SAP Ethernet SNAP 它们之间的本质差别是如何区分上…
一个是回车键的键值,一个是换行符。&br&getch()函数是返回你按下的键的键值,它会设置控制台(你的那个黑色的cmd窗口)为无回显、无缓冲模式,当按了一个键时,getch()函数会立刻返回键值(无缓冲),不会显示你输入的字符(无回显)。&br&scanf()、getchar()之类的函数,使用的是标准输入模式,按什么键,屏幕上就会显示相应字符,在你按回车键时,控制台会将你输入的回车换成换行符,存入输入缓冲区,让这些函数取出来。&br&你按了什么键, 输入了什么字符,输出了什么内容,主要是由控制台的工作模式决定。&br&&br&&b&为什么Ctrl+J返回的是'\n'?&/b&&br&这是控制台提供的一种直接输入换行符的方法,不用纠结为什么非要是Ctrl+J才能输入换行符;&br&貌似getch()函数不能获取ctrl、shift之类的按键的键值,而设计者为了能够输入'\n',就恰好选择了让Ctrl+J组合键能够输入'\n'。
一个是回车键的键值,一个是换行符。 getch()函数是返回你按下的键的键值,它会设置控制台(你的那个黑色的cmd窗口)为无回显、无缓冲模式,当按了一个键时,getch()函数会立刻返回键值(无缓冲),不会显示你输入的字符(无回显)。 scanf()、getchar()之…
&p&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-e422c3ed2bf165cf5d2c8d_b.jpg& data-caption=&& data-rawwidth=&2732& data-rawheight=&2048& class=&origin_image zh-lightbox-thumb& width=&2732& data-original=&https://pic2.zhimg.com/50/v2-e422c3ed2bf165cf5d2c8d_r.jpg&&&/figure&&p&&br&&/p&&p&初见 DuckDuckGo 的人恐怕都会第一眼被它那古怪的 logo 所吸引:一只鸭子傻乎乎地张着大嘴,挂着一副人畜无害的表情,两撮鸭毛在头顶戏谑地翘起,脖子上不合时宜地挂着一副与红色背景格格不入的绿色领结。这样一副似乎是从搞笑漫画中走出来的形象,与页面下方那句严肃的标语「The search engine that doesn't track you(不会追踪你的搜索引擎)」形成了鲜明的对比——这只鸭子真的没有跑错片场吗?&/p&&p&DuckDuckGo 创立于 2008 年,创始人是毕业于麻省理工的 Gabriel Weinberg。谈到这个奇怪的网站名字,Weinberg 表示是受启发于儿童玩的追逐游戏「duck, duck, goose」,并没有其他深意或隐喻。&/p&&p&在自己的&a href=&//link.zhihu.com/?target=https%3A//duckduckgo.com/traffic.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&流量统计页面&/a&上,DuckDuckGo 特别标出了几个重要的发展节点:2011 年 1 月,DuckDuckGo 在旧金山架起一幅巨型户外广告牌,内容直指 Google 的追踪行为——「Google tracks you. &b&We don’t.&/b&」,一举吸引众多关注;一年后,Google 宣布更新隐私政策,决定在其各个在线服务中搜集用户信息,DuckDuckGo 借此迎来了一次流量激增;2013 年,棱镜门事件爆发,再次引发了公众对网络隐私的担忧,DuckDuckGo 的日均使用量在一年之内翻了一倍以上;2014 年,Safari 和 Firefox 浏览器宣布将 DuckDuckGo 作为可选的搜索引擎,进一步促进了其用户量增长。&/p&&p&经过近十年的发展,DuckDuckGo 如今已有每天 1600 多万次的搜索量。虽然这比起 Google 每天动辄 30 多亿次的搜索只是九牛一毛,但想到其完全依靠社区支持,背后没有任何巨头推动,也是一个相当可喜的成绩。科技圈内也有许多名人表达过对 DuckDuckGo 的赞许和支持,如著名博主 John Gruber 就曾多次表示&a href=&//link.zhihu.com/?target=https%3A//daringfireball.net/linked//duckduckgo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&已转用 DuckDuckGo 为默认搜索引擎&/a&。&/p&&p&我了解到 DuckDuckGo 是在 2015 年底,摆弄 Safari 浏览器设置时,无意从内置的搜索引擎列表中发现了这个陌生而古怪的名字。从那以后,我逐渐尝试和探索了 DuckDuckGo 诸多独特的功能;现在,它已经成为了我每天使用的主力搜索引擎。下文将介绍 DuckDuckGo 的主要功能和特色,并给出一些具体的应用场景实例。&/p&&p&&b&说明:&/b&&/p&&ol&&li&DuckDuckGo 目前无法在国内直接访问,因此体验时请自行准备相应条件;&/li&&li&DuckDuckGo 提供包括中文在内的多语言支持,但其中文翻译存在很多影响理解的明显错误,故后文在介绍时仍将以英文界面为准;&/li&&li&Safari 和 Firefox 可直接将 DuckDuckGo 设为默认搜索引擎,Chrome 浏览器可使用其&a href=&//link.zhihu.com/?target=https%3A//chrome.google.com/webstore/detail/bkdgflcldnnnapblkhphbgpggdiikppg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方插件&/a&,DuckDuckGo 另提供&a href=&//link.zhihu.com/?target=https%3A//duckduckgo.com/app& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&手机 app&/a& 和短网址 &a href=&//link.zhihu.com/?target=https%3A//sspai.com/post/dgg.gg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ddg.gg&/a& 。&/li&&/ol&&h2&2. DuckDuckGo 的主要功能&/h2&&h2&2.1 搜索&/h2&&h2&2.1.1 基础搜索与 URL 参数&/h2&&p&DuckDuckGo 最基础的搜索功能与其他主流产品别无二致,对常见的 OR、-、site:、filetype: 等&a href=&//link.zhihu.com/?target=https%3A//duck.co/help/results/syntax& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&语法&/a&也有良好支持,搜索结果页亦支持通过语言、更新时间等参数进一步过滤结果,不会给从其他搜索引擎切换来的用户施加额外的学习成本。&/p&&p&对于进阶用户,DuckDuckGo 也支持通过在 URL 上附加参数(parameter)的方式进行高级搜索。例如,下面的 URL:&/p&&div class=&highlight&&&pre&&code class=&language-text&&https://duckduckgo.com/?q=wikipedia&kp=0&kl=cn-zh
&/code&&/pre&&/div&&p&将会发起一次关键词为「wikipedia」(q=wikipedia)、不过滤搜索结果(kp=0)、地区范围为中国(kl=cn-zh)的搜索。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-bf8b3c2b24acc0466f0d_b.jpg& data-caption=&& data-rawwidth=&2732& data-rawheight=&1528& class=&origin_image zh-lightbox-thumb& width=&2732& data-original=&https://pic4.zhimg.com/50/v2-bf8b3c2b24acc0466f0d_r.jpg&&&/figure&&p&&br&&/p&&p&但与 Google 等具备类似功能的搜索引擎不同的是,DuckDuckGo 不仅支持通过 URL 参数定义搜索的&b&方式&/b&,而且支持定义搜索页面的&b&行为&/b&(如是否在新标签页中打开链接)和&b&外观&/b&(如主题背景)。(可以在 DuckDuckGo 的&a href=&//link.zhihu.com/?target=https%3A//duckduckgo.com/params& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&文档&/a&中找到全部可用的参数。)&/p&&p&这就进一步提高了使用自定义搜索引擎或启动器 app 调用 DuckDuckGo 时的灵活性。举一例以抛砖引玉:使用 iOS 上的 Workflow 调用 DuckDuckGo 搜索时,只要加上一个基于当前时间的 if 判断,当运行时间为夜间时,在打开的搜索 URL 尾部附加上 &kae=d(意为启用暗色主题)这一参数,就可以达到自动「夜间模式」的效果。&/p&&h2&2.1.2 隐私保护&/h2&&p&前已述及,DuckDuckGo 认为自己区分于其他所有搜索引擎的关键特征就在于重视维护用户隐私。那么,它具体做了哪些努力呢?要回答这个问题,首先要知道搜索引擎在哪些环节可能泄露我们的隐私。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-01bbfee0bfe73f79d69e5bc_b.jpg& data-caption=&& data-rawwidth=&2732& data-rawheight=&1528& class=&origin_image zh-lightbox-thumb& width=&2732& data-original=&https://pic1.zhimg.com/50/v2-01bbfee0bfe73f79d69e5bc_r.jpg&&&/figure&&p&&br&&/p&&p&一方面,搜索引擎通常会搜集并记录你的各种信息,包括但不限于你的 IP 地址、地理位置、搜索历史等。这么做的目的在于给用户「画像」——如果搜索引擎能更了解你的居所、身份、偏好,就能更为精准地给你投放推广信息,使你更有可能对其感兴趣并点击访问,从而提高其广告收益。另外,更令人担忧的可能是用户信息被转卖和窃取的潜在危险,类似的事件在近年来早已屡见不鲜。&/p&&p&对此,DuckDuckGo 的承诺是:它既不会记录你的 User Agent(用户识别符,用于识别你所用的浏览器)、IP 地址、搜索关键词等被动传来的信息,也不会主动通过 Cookies(网页存储在本地的缓存)等机制识别你的身份。&/p&&p&另一方面,使用搜索引擎还会将你的搜索行为披露给第三方网站。一般地,当你在搜索结果页面 A 点击一个网站 B 的链接时,由于 HTTP 协议的机制,网站 B 将可以从 HTTP 表头的&a href=&//link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/HTTP_referer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&来源地址(referrer)&/a&字段中知道你是从 A 页面跳转而来的。又因为从搜索页面的 URL 中可以看出关键词,网站 B 也就知道了用户是通过什么搜索关键词找到自己的。不仅如此,既然搜索引擎可以通过前文所述的方法追踪并识别用户,只要它将用户的身份信息披露给第三方网站(出于推广营利目的,它很可能乐于这么做),网站 B 还能进一步知道&b&是你&/b&发起了这次搜索。即便我们假定网站 B 是善意的,多一个人知道你的信息,也就意味着多一重信息泄露的风险。&/p&&p&DuckDuckGo 同样考虑到了这种风险。为此,它在转发你的访问时,会对请求进行处理,使得第三方网站无法知道你是从其搜索结果页跳转而来——在后者看来,你就像是在地址栏中输入其网址直接访问一样。另外,DuckDuckGo 还会自动修改一些主要站点索引的 URL,在你点击访问时指向它们的 HTTPS 地址,以进一步提高安全性。&/p&&p&此外,对于那些追求极致隐私保护的用户,DuckDuckGo 还提供了更多增强安全性的工具。&/p&&p&例如,它允许用户通过 POST 方法而非 GET 方法发送搜索请求。&a href=&//link.zhihu.com/?target=http%3A//www.w3school.com.cn/tags/html_ref_httpmethods.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&两者技术上的区别&/a&在此不赘;仅从现象上而言,启用该选项后,从浏览器地址栏的 URL 中将无法看出你的搜索关键词,因而搜索历史也不会呈现在历史记录中,实现了类似于「隐身模式」的效果,在公用设备上有利于进一步保护隐私。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-ed4bbf66a168a83cf073a078_b.jpg& data-caption=&& data-rawwidth=&2732& data-rawheight=&1066& class=&origin_image zh-lightbox-thumb& width=&2732& data-original=&https://pic4.zhimg.com/50/v2-ed4bbf66a168a83cf073a078_r.jpg&&&/figure&&p&&br&&/p&&p&再如,DuckDuckGo 是少有的提供 Tor 站点的搜索引擎。如果你能够访问 Tor 网络(洋葱路由,俗称「暗网」),则可以通过访问 &a href=&//link.zhihu.com/?target=https%3A//sspai.com/post/3g2upl4pq6kufc4m.onion& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3g2upl4pq6kufc4m.onion&/a& 来使用 DuckDuckGo,并获得端到端的匿名和加密。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-65eebf8bdf0e_b.jpg& data-caption=&& data-rawwidth=&2732& data-rawheight=&2048& class=&origin_image zh-lightbox-thumb& width=&2732& data-original=&https://pic4.zhimg.com/50/v2-65eebf8bdf0e_r.jpg&&&/figure&&p&&br&&/p&&p&综上所述,DuckDuckGo 确实远比其他主流搜索引擎更为注重用户隐私。当然,任何收益都是有成本的,隐私保护的代价就是你无法在 DuckDuckGo 中得到其他服务中那种「私人订制」的搜索结果,HTTPS 连接的响应通常更慢,而启用 POST 方法将会影响「返回」按钮的正常功能。但在笔者看来,在隐私面前,这些小小的妥协都是值得的。&/p&&h2&2.1.3 Instant Answers 与搜索结果准确度&/h2&&p&必须承认,对于一个搜索引擎而言,功能多寡和隐私保护说到底都只是锦上添花的要素;能不能吸引用户使用,最终还要取决于其搜索结果的质量,换言之,用户能不能用 (a) &b&最短的时间&/b&找到 (b) &b&最准确的结果&/b&。&/p&&p&对于需求 (a),即提供答案的效率,DuckDuckGo 提出的解决方案是 Instant Answers。简言之,当你搜索特定关键词时,DuckDuckGo 将识别出你的需求,直接在结果页顶端将答案呈现给你。虽然目前大多数搜索引擎都提供类似的功能,但 Instant Answers 的优势在于它是一个完全&a href=&//link.zhihu.com/?target=https%3A//docs.duckduckhack.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferre}

我要回帖

更多关于 飘云阁论坛 的文章

更多推荐

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

点击添加站长微信