Knowledge Gained from NZ Job Rotation
Author Archives: sysadmin
[翻译作品]数据科学笔记本变得真实了:JupyterLab已面向用户发行
作者:Andrew Brust 原文地址:http://www.zdnet.com/article/can-data-science-notebooks-get-real-jupyter-lab-releases-to-users/ 译者:首席IT民工 副标题:Jupyter 笔记本已经突破了他们“展示和讲解”的角色,正变得更适合数据工程师使用。JupyterLab 会把这些笔记本升级成一款企业级工具吗? 现如今,业内人士相信,数据和分析都可以借助人工智能的服务来完成。鉴于此,作为数据科学家看来最受欢迎的数据处理工具 — 笔记本, 相关的介绍很多。这一领域的巨头有 Apache Zeppelin,和更加著名的 Jupyter (前身是iPython)。如果你的工作平台是Databricks,通常你最后都会使用他们自有品牌的笔记本。即便如此,这些笔记本都和Jupyter兼容。 可以把笔记本看成是一个你存放代码并添加注释的地方。不过,也许更准确地说法是,笔记本是存放大量注释,并用代码加以修饰的地方。无论你想要多么尖锐,有了笔记本,你可以在Markdown格式的富文本中,穿插任意语言的代码,本地运行,然后以文本、表格或是图形的方式来查看结果。如果你足够细致的话,甚至可以把这些资产拼凑成某个穷人的仪表盘。 超越演示功能 笔记本的问题在于,相比于生产环境里的数据工程工作,它更适合实验性质的数据科学工作。虽然这只是我自己的看法,我却坚持这么认为。笔记本更多的是关于演示而非开发,而且缺少了很多IDE(集成开发环境)比如Eclipse, PyCharm, Visual Studio, RStudio的好的功能。 不过,凡事总有变化。Jupyter 笔记本起初是Python代码的专属工具,也是Anaconda的一部分。Anaconda包含了主要的Python发布,一直致力于通过JupyterLab增强Jupyter笔记本的功能,使其更像是一个IDE。本周早些时候,JupyterLab,这款受到长期吹捧的工具终于发布,可供开发者使用。考虑到这是个不大却很重要的里程碑事件,我决定下载JupyterLab,跑一跑,并看看怎么样。整体而言,我印象深刻。 JupyterLab,一个基于R语言的笔记本和它的几种可视化结果,显示在了同一个版面上 编码生产力 JupyterLab是包含了Jupyter(笔记本)的超集。所以,在Jupyter笔记本中能做的事情,在JupyterLab中都可以做。而且能做的事情更多。 首先,一些笔记本能够提供的,比如Tab键语法完成,Shift-Tab键查看对象工具的提示这些功能依然都在。比起独立的Jupyter 笔记本来说,JupyterLab的功能更强:在Tab键完成时,提供匹配条目的类型的额外信息;在工具提示中,也提供对象相关的更多信息。有了这种基于上下文的辅助功能,开发者不必老是切换上下文,以便把事情给想清楚。 开发者们也可以工作在偏命令行风格的编程模式下,即,在控制台(而不是笔记本)内交互地运行他们的代码。控制台是与Jupyter内核建立的实时会话(实际上语言解释器是在笔记本后台完成代码的执行),所以,开发者可以先在控制台环境中运行代码,然后在以文本和图形为主的文档(显示在笔记本中)中插入这些代码。 比笔记本更强大 然而,JupyterLab远远超越了笔记本的功能。它允许开发者打开多种格式的文件,这些文件中包含了他们可能用到的,或者由代码产生的数据和其他资源。文件类型包括:支持语言的源代码文件,纯文本、CSV(和其他分隔符的文本格式)、JSON、各类图片、甚至是PDF格式的文件。查看器和编辑器则包括:全功能的文本编辑器,图片查看器,表格数据查看器,带树形视图的JSON查看器,以及适用Vega, Vega-Lite和VDOM文件的查看器。 有时候,某些特定的文件适用于多个查看器。比如说,JSON和CSV文件都能以纯文本方式打开。不过其实,JSON也可以用树形视图查看器打开,CSV也可以用表格查看器打开。Jupyter支持用多个编辑器同时打开这样的文件,并且保持多个视图间的同步,以便在一个编辑器中所做的修改,显示在另一个编辑器中。 双重视图 多视图模型也适用于笔记本。比如,只要在笔记本内已显示的图像上单击右键,并从菜单中选择“为输出建立新视图”,多个图像就可以并排地以各自视图的方式显示出来,包括笔记本的传统视图。 一点点拖放就可以办到。支持在近似水平或垂直的区域中,显示多个笔记本、输出结果和文件查看器。区域之间用分隔列分开,每个区域容纳了多个标签文档,每个文档支持单独上下滚动。一旦你习惯于创建这种布局,你甚至能够排列出如上图所示的仪表盘风格的布局。 单文档,多语言 需要承认的是,这些养眼的东西有时候会让人分心。所以,JupyterLab支持用户在这种分块布局和单文档视图之间进行切换。在单文档视图中,活动文档会占据JupyterLab浏览器页或窗口的整个编辑区域。 JupyterLab支持Chrome,Firefox和Safari浏览器。据我有限的测试,除了单文档视图会导致严重的显示异常以外(我确认该异常在Chrome中不存在),JupyterLab在Windows 10 Edge浏览器中也运行良好。 JupyterLab启动器 类似Jupyter, JupyterLab支持多语言,前提是这些语言的内核已安装好。如上图所示,启动器允许用户选择一种语言来创建新的笔记本,或是控制台。默认已安装了Python内核。据我测试,我成功地安装了R和Node/JavaScript内核。 下图显示了一个基于Node.js的笔记本,以及其中一种显示结果的单独视图。 不需要讨厌的安装程序了,真的吗? 归功于其对多种技术的组合,JupyterLab的安装可以很复杂。首先,在你的系统上安装Anaconda Python,它会安装Jupyter的核心文件。接下来,安装R内核的支持文件。然后,你可以下载JupyterLab,分别安装其他语言和Jupyter内核。我是这么安装Node.js内核的,做了好几步才弄对。去掉范例笔记本则耗费了额外的研究时间,安装那些提供代码支持所必须的模块也是如此。 安装也许有些难度,但并不高深(不算数据科学)。我曾经做过程序员,现在依然爱倒腾各种工具,所以我对这些东西有种本能。但是,我的编码技能退化了,也不再是使用工具的好手了。如果我可以办到,那么任何有基本技能和对JupyterLab感兴趣的人也可能没什么问题。不过,耐心和空余时间还是需要的。如果有一个主要安装程序,则会减少很多麻烦。 云应用的红利 对于需要Jupyter用户来说,由于很多云服务(包括微软HDInsight,亚马逊SageMaker,及谷歌的Cloud DataLab)中已经包含了Jupyter,安装不成问题。不知道这些包含Jupyter的服务和产品中也会包含JupyterLab吗?但愿如此,因为这样做会让这些平台上的数据工程体验更好。 基于Web浏览器的开发工具富有创新性,但也有其局限性。对于这个难题,Jupyter是一个好榜样。JupyterLab有助于超越这些局限,又不失创新性和便利性。让我们希望它在生态系统中的应用越来越火。
[翻译作品]我2018年开始Django开发时踩过的坑
作者:Luan Nguyen 原文地址:https://peeomid.com/blog/2018-01-26-what-i-wish-i-knew-when-i-started-django-development-2018/ 副标题:Django – 当你开始一个新项目时要注意的地方 – 2018年更新 译者:首席IT民工 现在回想起来,如果在开始Django之旅的时候我注意了这几个地方,会省去我大量的时间和精力。 延伸阅读(Too Long To Read): 注意使用cookiecutter-Django 以便上手所提到的大部分东西。 当我开始做web开发时,我是一名普通的php程序员,不屑于老是看文档。经过努力,总能从搜索引擎中找到解决方法(嗯,现在仍然如此)。 让我很不爽的是,有时候各种东西搅和在一起,你很难读懂别人的代码,甚至是几个礼拜前自己写的代码。这一点不可小觑,阅读代码总是花很多时间。 Python(以及Django)的出现解救了我。第一次,我能够轻松地阅读别人的代码了(也不全是,哈哈)。阅读,变得更简单了。事实上,通过阅读别人的代码,我的技能提高了很多。然而,和其他人一样,一开始我犯了很多,尤其是Django相关的错误。 以下是我希望记录下来的东西,对于开始时踩过的那些坑,我会逐一添加。 Cookie cutter Django 每次当我开始一个项目时,总会创建一个什么都没有的空白项目。然后,反复地修改项目,直到出现我希望的设定/结构。 我原以为我只要为新项目建一个代码库,然后继续开发就好了,但实际上维护和更新这个代码库却占用了大量的时间。 cookiecutter-Django 是一个超棒的项目。有了它,你可以在开始项目时就应用很多人称“最佳实践”的东西。它也自带了一些有助于加速开发的常用组件。 Virtualenv 如果你已经看过一些Python文档,你应该见过这个东西。再怎么推荐都不为过啊。 一定要使用virtualenv来分开每个项目的开发环境。即使你开始的时候只有一个项目,不要都放在global里面,并且你很快就有更多的项目的。 当你创建一个新的环境时,可以这样指定Python版本: virtualenv env -p python3 另外,确保你查看一下 virtualenvwrapper,这篇文档能帮助你轻松地管理各种不同的虚拟环境: 在一个地方存储所有的虚拟环境 尽快进入虚拟环境,比如,只要运行workon awesome project就好了 设定好当你进出这些环境时所运行的脚本(简单的例子如:切换到项目所在目录,启动一些东西) 设定之结构 这是另一件重要的事情 — 我是认真的。 常规的开发流程是这个样子:你进行本地开发,然后推送到某种测试服务器,最后上线。 每个环境都有其自身的设定和配置(比方说,本地的数据库配置会不同于生产环境的配置)。 对于特定的东西,尤其是那些敏感信息,可以选择从环境变量来获取。 其他的东西,你可以为不同的环境准备不同的设定文件,如图所示: base.py 包含常见的环境设定;local.py 包含属于本地环境的设定 local.py, staging.py 和 production.py 会导入base.py的设定。你可以借助环境变量来决定要用哪个设定文件。 […]
[翻译作品]Python + Memcached: 在分布式应用程序中实现高效缓存
作者 Julien Danjou 原文地址:https://realpython.com/blog/python/python-memcache-efficient-caching 译者:首席IT民工 在开发Python程序时,实现缓存是重要的一环。缓存技术能够在很大程度上提升性能,从而避免数据的重复计算,或是数据库访问过慢的问题。 Python内置了实现缓存的技术,包括简单的字典和诸如functools.lru_cache之类更加完整的数据结构。后者可以利用“最近最少使用”算法限制缓存的大小,做到任意缓存。 然而,依照定义,这些数据结构仅限于Python进程内部使用。这可能对大规模分布式应用导致问题,因为当你的程序的多个副本在大规模平台上运行时,使用这种本地内存中的数据结构将不允许对所缓存的内容进行共享。 因此,如果你的系统是基于分布式网络的,就需要缓存也基于分布式网络。现如今大量的网络服务器提供了缓存能力–我们在how to use Redis for caching with Django (如何使用Redis实现Django缓存)一文中已经提到过。 在这篇教程中你将看到,memcached是实现分布式缓存的一个很好的选择。首先是对基本的memcached使用方法的简介,然后你会学习到一些高级方法,比如检查和设置(cache and set),以及使用后备缓存以避免传统的缓存性能问题。 安装memcached Memcached提供了[很多平台的版本](https://github.com/memcached/memcached/wiki/Install) : 如果你运行的是Linux,安装命令是 apt-get install memcached 或 yum install memcached 你既可以通过预构造的安装包安装,也可以从源文件安装 对于macOS,使用Homebrew安装是最简单的。只要有Homebrew包管理器,直接运行 brew install memcached 对于Windows, 你需要自行编译memcached,或者寻找预编译的版本 安装完毕后,运行memecached命令即可启动它: $ memcached 在正式使用memcached的功能之前,你还需要安装一个memcached的客户端库。下面介绍安装的方法,以及基本的缓存访问操作。 使用Python存储和检索缓存值 即便你从未使用过memcached,也很容易理解。基本来说,memcached提供了一个超大的网络字典。这个字典的几个属性不同于经典的Python字典: 键和值都必须是bytes(字节) 到了过期时间后,键和值将被自动删除 因此,与memcached交互的两个基本操作是:set和get。正如你可能猜到了,他们分别表示给某个键赋值,和从某个键取值。 我个人偏爱的与memcached交互的Python库是 pymemcache,推荐使用。它用pip就可以安装: $ pip install pymemcache 以下代码显示了如何连接memcached和如何在你的Python程序中将它用作网络分布式缓存: memcached网络协议十分简单,其实现运行起来也非常快,使得它在数据存储上很管用。换作其他技术,这些数据要么访问起来很慢,要么需要重新计算。 这个例子简单明了,却演示了键值的跨网络存储,以及程序的多个分布式副本如何来访问键值。很简单,却很强大。这是很棒的迈向程序优化的第一步。 缓存数据的自动过期 在memcached中存储数据时,你可以设置过期时间,即mecached保存键和值的最长时间,单位是秒。到期以后,memcached会自动从缓存中删除他们。 […]
I am an Escalation Engineer
What does a Microsoft Escalation Engineer do? “If an Enterprise has a problem with it, we are the ones that are the last level, code level support. We’re the last step between the Serviceability team within Windows that would then provide hot-fixes. One of the most rewarding things about this job is that it’s never […]
Outlook架构介绍与崩溃分析
http://www.365yg.com/item/6526810346978542087
A Brief Introduction of Outlook’s Architecture
When you are troubleshooting Outlook connectivity issues, you may be exposed to a lot of concepts, such as MAPI, RPC, etc. If you ever wonder what they are and how they fit together to make Outlook connectivity possible, you need to have a good understanding of Outlook’s architecture. In general, there are several layers when […]
深入Windows内核5分钟系列 Inside Show (2) 安装Windows SDK
http://www.365yg.com/item/6526467701387297294/
深入Windows内核5分钟系列 Inside Show 开篇
http://www.365yg.com/item/6517555730847891975/
怎么在Azure上搭建VPN服务器
转发两篇博客 英文版:https://blogs.msdn.microsoft.com/lighthouse/2013/07/30/how-to-deploy-sstp-and-l2tp-vpn-in-windows-azure-windows-server-2012/ 中文版:http://edi.wang/post/2014/3/9/setup-sstp-windows-azure 实现起来很简单,而且价格很便宜