< ![CDATA[茱莉亚埃文斯]]> 2018-12-09T00:51:28+00:00 //www.jd-xw.com 茱莉亚·伊万斯 雨果 < ![CDATA[你如何用漫画记录一个技术项目?]] > 2018-12-09T00:51:28+00:00 https://www.jd-xw.com/blog/2018/12/09/how-do-you-document-a-tech-project-with-comics/ 我经常收到人们发来的邮件,基本上都是这样说的。嘿,朱丽亚!我们有一个开源项目!我们想用漫画/杂志/艺术来记录我们的项目!我们能雇用你吗?“. < / p > < p >剧透:答案是“不,你不能雇佣我–我不做佣金。但我确实认为这是个好主意,我经常希望我能够对人们说些更有用的话,而不是”不“,所以如果你'reinterested在这方面,这里有一些建议关于如何完成它!</p><h3 id="zine-drawing”Zin!=图< / h3 > < p >首先,术语上的区别我注意到一件奇怪的事,那就是人们经常把单独的技术图画称为““赞”.我认为这是由于我沟通不善,但是,图纸不是杂志!一本杂志是一本印刷的小册子。像一个小米加<强>杂志< /强>。你不会叫aphoto模型在时尚杂志!这本杂志有一百万页!个人绘画是绘画/漫画/图形/随便什么。只是澄清一下,因为我认为这会导致一些不必要的混淆。</p><h3 id="没有好信息的漫画是没有用的>漫画没有良好的信息是无用的< / h3 > < p >通常当人们问我“嘿,我们可以做一个漫画解释X”,他们似乎并不清楚自己到底想要传达什么信息,他们只是有一个模糊的想法,也许画一些漫画会很酷。这是有道理的——找出哪些信息是有用的告诉人们是非常困难的!!这是我制作漫画所花费时间的80%。</p><p>你应该像任何文档一样思考漫画——从你想传达的信息开始,你的目标观众是谁?你想如何发布它(twitter)?在你的网站上吗?亲自?)在:)之后找出如何说明它。信息是最主要的,不是艺术!一旦你对你想表达的意思有了清晰的了解,您可以开始考虑如何使用插图来表示它!</p><h3 id="集中注意力于那些不变的概念>关注概念,不改变< / h3 > < p >画漫画是一个更大的投资比编写文档(花费的时间长我5 x中相同的信息在一个漫画比写作)。所以明智地使用它!因为编辑并不容易,如果你想要制作一部喜剧,你需要把注意力集中在那些非常容易改变的概念上。因此,请谈谈项目中的核心思想,而不是它所采用的确切命令行参数!这里有几个关于如何使用漫画/插图来记录项目的选项!</p><h3 id="选项-1-a-.-.”>选项1:一个图形< / h3 > < p >一种格式你可能会想尝试是一个单,小图形解释你的项目是什么aboutand为什么人会感兴趣。例如: <href="https://twitter.com/b0rk/status/986444234365521920”>这zulip漫画< / > < / p > < p >这是一个短的,你可以贴在Twitter上或者把它作为一个小册子给打印出来。这里的信息内容可能基本上就是项目主页上的内容,但在爱慕有趣/兴奋道:)< / p > < p >你可以把一个非常小的数量的信息在一个漫画。带着祖利普的漫画,我挑出来的东西是:</p><ul><li>zulip有点松懈,但是它有线程</li><li>即使对话发生在几天内</li><li>也很容易跟踪线程,您可以更容易地选择性地赶上Zulip</li><li>zulip是开源的</li><li>有一个开放的zulip服务器,您可以试用</li>/ul><p>那不是很多信息!50个字:)。所以这实际上你需要distillyour项目到50个单词的方式仍然是有用的。它不容易!</p><h3 id="选项2-多漫画>选项2:许多漫画< / h3 > < p >你可以采取另一种方法就是做更深度的漫画/插图,像<href="https://cloud.google.com/kubernetes-engine/kubernetes-comic/”>谷歌的kubernetes指南</a>或<href="https://thenewstack.io/kubernetes-get-childrens-book/”>儿童插图指南</a>.</p><p>这样做,你需要一个比这更强大的概念休斯敦大学,我想解释一下我们的项目”-你想有一个明确的目标受众铭记!例如,如果我正在画一套多克漫画,我'dprobably关注那些想使用码头工人在生产。因此,我想讨论:</p><ul><li>将您的容器发布到公共/私有注册中心</li><li>用于标记您的容器</li><li>的一些最佳实践如何确保您的主机不会因为下载太多容器</li><li>而耗尽磁盘空间>如何使用层来节省磁盘空间/下载较少的内容</li><li>是否合理在生产中运行相同的容器&在dev</li></ul><p>这与我为那些只想使用Docker在本地开发的人编写的漫画集完全不同!</p><h3 id="option-3-a-printed-zine”选项3:打印的杂志</h3><p>主要区别于此许多漫画是杂志印出来的吗?正因为如此,为了让这个变得有意义,你需要有一个地方来分发打印的副本!也许你要在大会上介绍你的项目?也许你举办了关于你项目的研讨会,想把我们的杂志作为笔记发给研讨会的人?也许你想寄给别人?</p><h3 id="如何雇人帮你>如何雇用某人来帮助你</h3><p>雇用某人基本上有三种方法:</p><ol><li>雇用既懂(或能很快学会)你想记录的技术又能很好地说明的人。这些人很难找到,而且可能很贵(我肯定不会花不到10美元做这样的项目,即使我做过佣金,仅仅因为programmerscan通常收取很高的咨询率。我猜想的主要失效模式,是它可能是不可能的/很难找,它也许很贵。</li><li>与插画家合作为你画它。这里主要的失败模式是,如果你没有给插图画家清楚的解释你的工作技术,你…没有清晰而有用的解释。从我所看到的,大多数人投资不足为插画家写清楚的解释.</强>-我看过一些真正可爱的科技漫画,我一点用处也没有。我想看到更多的人做得更好。如果一个可爱的插图没有任何教益,那又有什么意义呢?:)</li><li>自己画吧:)这是我做的,很明显。棒状数字没关系!</li></ol><p>大多数人似乎使用方法#2.–实际上我并不知道有任何技术人员做过现成的漫画(虽然我肯定发生了!))。我认为方法#2是个不错的选择,我希望看到更多的人这样做。支付插图画家真是有趣!</P> < ![CDATA[C++析构者如何在使节中有用] ] > 2018-11-18T10:21:28+00:00 https://www.jd-xw.com/blog/2018/11/18/c——析构函数——非常有用/ 有一段时间,我一直在与一个C++项目(特使)合作,有时候我需要为此做出贡献,所以我的C++技能已经从“不存在的“真正最小的.我明白了aninitializer列表和一个方法从<代码> ~ < /代码>是一个析构函数。我几乎知道什么是ANLVALL和RUVE,但不是很好。</P>< P>但是,在编写C++代码的前几天,我发现了一些令人兴奋的关于如何使用我还没有意识到的析构函数的问题。(tl;博士的这篇文章了解c++的人是“朱莉娅终于明白RAII是什么,并且知道它是有用的:)</p><h3 id="“什么-s-a-析构函数”>什么是析构函数?<P> C++有宾语。当C++对象超出范围时,编译器插入一个叫itsdestructor。因此,如果您有一些代码,比如</p><pre><code>function do_.(){Thing x{};//这调用Thing构造函数return 2;}</code></pre><p>在<code>do_.</code>函数的末尾将调用x的析构函数。因此,C++代码生成看起来像:</P>UL> <LI>使新事物</L> < LI>调用新事物的析构函数</L> < LI>返回2 </LI> </UL> <P>显然析构函数是这样复杂的。他们需要被调用时areexceptions !手动有时他们被调用。还有很多其他原因。但are10几百万的东西了解c++和这不是我们今天所做的,我们只谈一件事。</p><h3 id="“在析构函数中发生什么”>在析构函数会发生什么呢?</h3><p>释放了大量的时间内存,这就是避免内存泄漏的方法。但这不是我们正在讨论这篇文章!我们正在谈论更有趣的事。我们重新感兴趣的特使断路器>我们感兴趣的事情:特使断路器</h3><p>所以我和特使一起工作了很多。3第二特使复习:这是一个HTTP代理,你的applicationmakes请求特使,然后,它将请求代理给应用程序想要与之通信的服务器。</p><p>Envoy有一个非常有用的特性,这就是所谓的断路器”.基本想法withis,如果应用程序500亿连接到服务,这可能会压倒服务。所以特使跟踪你已经取得了多少TCP连接到服务,如果达到极限,将阻止您提出请求。默认<code>max_.</code>.</p><h3 id="how-do-you-track-connection-count”>如何跟踪连接计数?< / h3 > < p >保持断路器在TCP连接的数量,这意味着你需要保持anaccurate数有多少TCP连接当前打开的!你是怎么做到的?好,itworks是维护一个<代码> < /代码>连接计数器和:< / p > < ul > <李>每次打开一个连接,每当连接被破坏时(因为复位/超时/无论如何),递增计数器</li><li>;当创建新连接时,递减计数器</li><li>,检查<code>.</code>计数器是否超过限制</li></ul><p>,仅此而已!和递增计数器,当创建一个新的连接是非常容易的。但是,当连接被破坏时,如何确保计数器<em>递减</em>呢?连接可以摧毁在很多方面(他们可以超时!他们可以由特使关闭!服务器可以关闭它们!也许我还没想到会发生什么事!而且似乎很容易意外地错过关闭它们的方法。</p><h3 id="正在营救的破坏者>解救的析构函数</h3><p>Envoy解决这个问题的方法是为每个连接在HTTP连接池中创建一个连接对象(称为<code>ActiveClient</code>)。https://github.com/envoyproxy/envoy/blob/200b0e41641be46471c2ce3d230aae395fda7./source/./http/http1/conn_pool.cc#L301”李> < / >代码)< / > <李>柜台的精神性的析构函数(< a href = "https://github.com/envoyproxy/envoy/blob/200b0e41641be46471c2ce3d230aae395fda7ded/source/common/http/http1/conn_pool.cc L315”李> < / >代码)< / > <李>检查柜台在创建新连接时(< a href = "https://github.com/envoyproxy/envoy/blob/200b0e41641be46471c2ce3d230aae395fda7./source/./http/http1/conn_pool.cc#L97”>code</a>)</li></ul><p>这样做的好处是,现在您不需要确保计数器在所有正确的地方都递减,现在只需要组织代码,以便在连接关闭时调用<code>ActiveClient</code>对象的sdestructor。</p><p>Envoy中在哪里调用<code>ActiveClient</code>析构函数?好,特使维护2个客户列表(<code>._client</code>和<code>busy_client</code>),当连接被关闭时,特使将客户从这些名单中删除。当它这样做的时候,它不需要做任何额外的清理!!在C++中,无论何时从列表中删除对象,它的析构函数被调用。所以<code>client.removeFromList(._.);</code>负责所有的清理工作。还有没有机会offorgetting递减计数器!!除非您意外地将对象留在这些列表之一,否则它肯定会一直发生,这将是一个错误,因为连接关闭:)< / p > < h3 id = "拉伊> RAII < / h3 > < p >这种模式特使正在使用这是一个非常常见的c++编程模式被称为“resourceacquisition初始化”.我发现这个名字很令人困惑,但这就是它的名字。它的工作方式基本上是:</p><ul><li>标识一个资源(如连接”当连接初始化/完成</li><li>为该连接创建一个类</li><li>将所有初始化/完成代码放入构造函数/析构函数</li><li>时,需要发生很多事情,确保在适当的时候调用对象的析构函数方法!(通过删除它从avector /离开作用域)< /李> < / ul > < p >之前我知道使用这种模式的明显的事情(确保所有memorygets析构函数释放,或者确保关闭文件描述符)。但是我没有意识到,对于稍微不那么明显的资源(比如)来说,它也是有用的。减量计数器”. < / p > < p >这种模式工作的原因是c++编译器/标准库做一堆工作确保析构函数被调用,当你完成了一个对象——编译器insertsdestructor调用结束时每个代码块,在例外之后,许多标准库集合确保在从集合中移除对象时调用析构函数。raii-gives-you-prompt-deterministic-and-hard-to-screw-up-cleanup-of-resources”> RAII给你提示,确定的,并且难以对资源进行清理</h3><p>这里令人兴奋的是,此编程模式为您提供了一种安排清理资源的方法,即:</p><ul><li>易于确保总是发生(当对象离开时,它总是发生的,即使有anexception !李李)< / > < >提示& determinstic(它马上发生,保证发生!</li></ul><h3 id="语言有赖> RAII什么语言?</H3> <P>可能其他语言。JavaPython,去吧,垃圾收集语言一般不会。在垃圾收集语言中,当对象是GC'd时,通常可以设置析构函数到berun。但是经常(就像这种情况,连接计数)当对象不再使用时,您希望立即清除<.>对象</.>,以后无论何时GC碰巧运行,都不存在不确定性。</p><p>Python上下文管理器是一个相关的概念,可以使用conn_pool..()作为conn:执行以下操作:</p><pre><code><h3 id="现在就这么说>到现在!< / h3 > < p > RAII希望这解释术语大多是有趣和正确的。感谢Kamal clarifyingsome RAII东西给我!</P> < ![CDATA[关于在生产中运行新软件的一些注释]> 2018 - 11 - 11 - t11:00:01 + 0 https://www.jd-xw.com/blog/2018/11/11/understand-the-software-you-use-in-production/ < p >我正在为12月kubecon谈话!我想说的一点是,在不引起严重事故的情况下,在生产中使用新软件需要花费大量的时间/投资,在我们使用Kubernetes时,情况如何。</p><p>开始,这篇帖子不是一纸空文。很多时候,仅仅使用软件是完全可以的,而不用担心<.>它到底如何工作。所以让我们先来谈谈什么时候投资是重要的。</p><h3 id="何时重要-99-99”>如果它很重要:99.99%</h3><p>如果您运行的服务SLO很低,比如99%,我认为理解您在生产中运行的软件并不重要。你一个月可以休息2个小时!如果有故障,只要修好,就可以了。</p><p>99.99%不一样。那是45分钟/年的停机时间,如果你在生产中第一次发现一个严重的问题,可能需要20分钟或恢复更改。这是你一年的正常运行时间预算的一半!</p><h3 id="当你重用的软件重要时>重要时:您正在大量使用的软件</h3><p>即使您运行的服务具有99.99%的SLO,是不可能建立一个超级deepunderstanding软件你用的每一块。例如,web服务可以使用:</p><ul><li>100库依赖项</li><li>文件系统(因此有linux文件系统代码!李李)< / > < >网络(linux网络代码!</li><li>数据库(如postgres)</li><li>代理(如nginx/haproxy)</li></ul><p>如果您只从磁盘读取像2个文件,您不需要深入研究Linux文件系统的内部结构,您只需要从磁盘读取文件。</p><p>在实践中,我尝试做的是识别我们依赖的组件(或者使用最常用的用例!))花时间去理解这些。这些通常很容易识别,因为它们是最容易引起问题的:)</p><h3 id="何时重要新软件>重要时:新软件</h3><p>了解您的软件对于较新/较不成熟的软件项目尤其重要,因为它很可能有bug,或者只是不够成熟,不能被大多数人使用,而不必担心。我最近花了很多时间和Kubernetes/Envoy在一起,这两个项目都是比较新的项目,它们都不属于哦,就行了,别担心.我花了很多小时调试这两个奇特的边缘情况,并学习如何以正确的方式配置它们。</p><h3 id="一本理解你的软件的剧本>用于理解您的软件的剧本</h3><p>用于理解在生产中运行的软件的剧本非常简单。这里是:</p><ol><li>开始以非关键容量在生产中使用它(通过向它发送一小部分流量,在一个不那么重要的服务,等一下)</li><li>让那烤几个星期。</li><li>遇到问题。</li><li>解决问题。进入步骤3。</li></ol><p>重复,直到您感觉自己很好地掌握了该软件的故障模式,并且能够轻松地在更关键的容量下运行它。让我们更详细地讨论一下,:< / p > < h3 id = "遇到bug的样子>遇到虫子是什么样子< / h3 > < p >为例,去年我花了很多时间与特使在一起。我们在此过程中遇到的一些问题是:(没有特定的顺序)</p><ul><li>其中一个默认设置导致重试和超时报头不被尊重</li><li>Envoy(作为客户端)不支持TLS会话恢复,因此,具有大量特使客户端的服务器通过TLS握手获得DDOSed</li><li>特使的活动健康检查意味着每个客户端都对您的服务进行健康检查。这基本可以,但是(再次)与许多客户机的服务可能被它淹没。</li><li>让每个客户机独立地健康检查每个服务器与重负载下的服务交互稍差,由于资源泄漏/内存安全问题</li><li>主机耗尽d>时,当给定错误的配置</li><li>它发生各种故障时,由于资源泄漏/内存安全问题</li><li>主机出现故障,特使默认情况下不重试失败的连接</li><li>它经常出现故障。我们之间的isk空间没有频繁地旋转Envoy日志文件</li></ul><p>其中很多都不是bug——它们只是我们期望默认配置能够完成一件事情的情况,它做了另一件事。这一切发生的时候,它会导致非常严重的事故。如何配置一个复杂的软件适当takesa很多时间,你必须对此负责。</p><p>特使是个很棒的软件!维护人员反应非常迅速,它们能够快速修复bug,并且性能良好。它总体相当稳定,在生产中做得很好。但仅仅是伟大的软件并不意味着你也不会遇到10或20相对seriousissues沿途需要以一种方式或另一种方式解决。在将软件置于一个非常关键的位置之前,理解那些<.>的问题是有帮助的。try-to-have-each-incident-only-once”我认为在生产中运行新软件不可避免地会导致事故。诀窍:</p><ol><li>确保事件不会太严重(通过首先将“生产”设置为不那么关键的系统)</li><li>无论何时发生事故(即使不是那么严重!)!!)花必要的时间来确切地理解为什么会发生,以及如何确保不再发生</li></ol><p>到目前为止,我的经验是,实际上相对来说完成任务是可能的。只发生过一次.当我们调查问题和实施补救措施时,通常这个问题<强>,永不再来< /强>。补救可以是:< / p > < ul > <李> < /李> <李>配置变化报告bug上游和修复它自己或等待修复< /李> <李>解决方案(“这个软件不工作10,000个客户?好啊,我们只是不会在现在有很多客户的地方使用它!“,“哦,内存泄漏?让我们每小时重新启动它知识共享在这里也很重要——当一个人在生产中发现问题时总是不幸的,修复它,但是没有向团队的其他成员解释这个问题,所以其他人后来又导致了同样的事件,因为他们没有听说起初的事件。</p><h3 id="理解什么可以打破什么不可以理解什么可以中断,什么不可以</h3><p>理解我在生产中运行的软件的另一个重要部分是理解哪个部分可以中断(又名)如果这个优惠,不会导致生产事故这让我<.>.</.>:我可以在一些组件周围放置大盒子并做出决定。好啊,如果这个破损没关系,所以我不会特别关注它例如,使用Kubernetes:</p><p>ok来中断:</p><ul><li>,任何无状态控制平面组件在任何时候都可能崩溃或被循环出来或下降5分钟。如果我们有95%的正常运行时间用于kubernetes控制飞机,那可能没问题,它只是需要大部分时间都在工作。</li><li>kubernetes网络(你给每个pod一个IP地址的系统)可以破坏所有需要的东西,因为我们决定不使用它来启动</li><ul><p>not ok:</p><ul><li>,如果etcd下降10分钟,没关系。如果它下降了2小时,不是启动时没有启动或崩溃的容器(iam问题,码头不启动集装箱,调度程序错误,其他控制器中的bug是严重的,需要立即查看</li><li>不能访问它们需要的资源的容器(因为权限问题,</li><li>pods被Kubernetes意外终止(如果配置kubernetes错误,则不能终止您的pods!李)< / > < / ul > < p >特使,如果特使控制飞机下降5分钟,故障情况就大不相同了:</p><p>ok可以中断:</p><ul><li>,很好(它会继续处理staledata)< /李> <李>这种错误在启动时由于配置错误是好的,因为他们体现earlyand他们可能惊喜我们(如果段错误不会发生第一次,不应该在200次)</li></ul><p>not ok:</p><ul><li>特使坠毁/断路器故障不好-如果坠毁,如果控制服务器提供的数据不正确或不完整,则网络连接不会发生</li><li>,这非常危险,并且可能导致严重的生产事故。(所以停机时间很好,但不提供错误数据!</li></ul><p>这两个列表都不完整,但他们就是我所指的例子理解你的软件. < / p > < h3 id = "共享-ok-to-break-not-ok-list-是有用的>共享ok以中断/非ok列表很有用</h3><p>我认为这些可以打破/“不好”列表对于共享非常有用,因为即使对于每个用户来说它们不是100%相同的,这些课程来之不易。我好奇的是听到yourbreakdown什么样的失败可以/不可以为软件你使用!< / p > < p >找出一款新软件的所有失效模式以及它们是如何应用于situationcan需要数月之久。(这就是为什么当你问数据库团队”嘿我们只可以使用新的数据库”他们看你如此痛苦)。所以我们可以做任何事情来帮助其他人更快的学习。 < ![CDATA[顺风:样式你的网站没有编写任何CSS !] > 2018-11-01T21:21:05+00:00 https://www.jd-xw.com/blog/2018/11/01/tailwind--write-css-without-the-css/ 你好!在过去的几天里,我为我的杂志建立了一个新的网站(<href="https://wizardzines.com”> https://wizardzines.com < / >)。为了制作这个网站,我需要写HTML和CSS。哎呀!!网页设计真的不适合我。我写普通的HTML/CSS大概有12年了,而且由于我在工作中根本不这么做,并且不努力改进,我平庸的CSS技能魔术般提高的机会是……不好。</p><p>但是!我有时候想做网站,现在是2018年!所有的网站都需要回应!所以,即使我做了一个相当简约的网站,它需要至少在手机和平板电脑的anddesktops与很多不同的屏幕尺寸。我知道CSS和flexboxes和媒体查询,但在实践中,把所有这些东西放在一起通常是一个巨大的痛苦。</p><p>我最终以<href=创建了这个网站。https://tailwindcss.com/docs/is-tail./”>顺风CSS < / >,它帮助我做了一个网站,我感到非常高兴我的最低CSS技能和仅仅2个晚上的工作!“尾风”的作者写了一篇名为“href”的博客。https://adamwa..me/css-.-classes-and-.-of-./”>CSS实用程序类和关注分离</a>,您应该阅读它,而不是这个:)</p><h3 id="css-zen-.-change-.-css-not-you-html”>CSS禅园:更改CSS,不是你的HTML < / h3 > < p >直到昨天,我之所以相信写好CSS,是因为我生活在2003年左右。http://www.csszen..com/”>CSS禅园</a>。CSS禅宗花园过去是(现在也是!还没完!(这个地方就像)大家好!!您可以使用CSS来设置网站的样式,而不是HTML表!Justwrite语义HTML,然后你可以用CSS完成你需要做什么!这太神奇了!“他们提供.<href =来炫耀。http://www.csszengarden.com/221/”> < / > < a href = "很多http://www.csszen..com/218/”> < / > < a href = "http://www.csszengarden.com/215/”> < / >设计网站不同,它们都使用完全相同的HTML。这真的很有趣,很有创意,而且它显然给我留下了深刻的印象,因为我记得它就像10年后。</p><p>,而且它很有意义!你应该写语义HTML,类似于:</p><pre><code>div class=”zen-resources”“=”zen-resources”>h3类="资源“>资源:</h3></code></pre><p>然后对这些类进行样式化。</p><h3 id="写作-css-is-not-real-work-me”>编写CSS实际上并不适合我</h3><p>尽管我相信CSS zen garden语义HTML理想,我觉得写CSS实际上对我个人来说并不起作用。我知道一些CSS的基本知识——我知道<code>字体大小</code>和<code>align</code>和<code>min-.</code>,甚至可以使用flexbox和CSS网格。我主要可以集中精力。我做了<href="https://rbspy.github.io/”>https://rbspy.github.io/</a>通过编写CSS进行响应。</p><p>但我可能只每4个月编写一次CSS,只适用于小型个人网站,和inpractive我总是得到一些媒体查询问题遗憾的是google”我如何集中跳水这是第500次。所有的东西最后都变得排列不整齐,最终我得到了一些有用的东西,藏在床底下。</p><h3 id="css-framework-where-you-not-write-css”>不编写CSS</h3><p>的CSS框架!有有趣的事情发生,现在有CSS框架,你没有写任何CSS使用它们!相反,您只需要添加许多CSS类来对eachelement进行样式化。它基本上与CSS禅宗花园相反——您只有一个CSS文件不更改,然后在HTML中使用100亿个类来设置站点的样式。https://wizardzines.com/zines/manager/”> https://wizardzines.com/zines/manager/ < / >。这段代码将覆盖率的图像并排放在内容表中。</p><pre><code><div class="挠性挠性行挠性包装调整中心><div类="md: w-1/2 md: pr-4”><img src='..png'></div><div class="md: w-1/2”> < class = "没有大纲href='/zines/manager/toc.png'><img src='toc.png'></a></div></div></code></pre><p>基本上外部div是flexbox-<code>flex</code>意味着<code>display:flex</code>,<code>flex-row</code>意味着<code>flex-.:row</code>,等。大多数(全部)?这些类中正好应用了一行CSS。</p><p>这是“购买”按钮:</p><pre><code><a class="text-xl圆形bg-橙色pt-1pb-1pr-4pl-4文本-白色悬停:文本-白色无下划线前导-松动HREF=https://gum.co/oh-shit-git”> 10美元买< / > < /代码> < / pre > < p >购买按钮分解为:< / p > < ul > <李> <代码> pt,铅、公关,pl < /代码>填充< /李> <李> <代码>设置,悬停:文本-白色</code>是文本颜色</li><code>无下划线</code>是<code>文本装饰:none</code></li><code>.-.</code>set<code>line-.:1.5</code></li><code>/ul><h3 id="为什么-有趣-容易-媒体查询>为什么很有趣:简单媒体查询< / h3 > < p >推动力与媒体查询,一个非常好的东西其中,如果添加类<code>lg:pl-4</code>,它的意思是“添加填充物,但只有在“大”或更大的屏幕上。</p><p>我喜欢这个因为实验真的很容易,而且我不需要通过我的中间人去寻找,以便在不同的屏幕尺寸上使东西看起来更好!例如,对于上面的图像示例,我想让图像并排显示,但只有较大的屏幕上。所以我只添加类<代码> md: w-1/2 > < /代码,这使得屏幕的宽度大于“.”的50%。md: w-1/2 md: pr-4”><img src='..png'></div></code></pre><p>基本上在Tailwind中有CSS,比如:</p><pre><code>@media屏幕和(最小宽度:800px){.md:w-1/2{.:50%;}</code></pre><p>我认为有趣的是,所有Tailwind媒体查询似乎都以<code>min-.</code>而不是<code>max-.</code>来表示。似乎没问题。</p><h3 id="why-it-s-fun-it-s-fast-to-iterate”>为什么很有趣:迭代很快!< / h3 > < p >通常当我写CSS类模糊语义的方式添加到我的代码,用CSS样式化它们,意识到我上错了课,并最终与怪异的div id”摔跤或者拼命地试图以某样东西为中心。</p><p>完全不必给出我的任何div样式或ID,只需集中精力考虑它们应该如何看起来,这感觉非常自由。我只有一种东西编辑!(HTML)。所以如果我想添加一些填充在左边,我只能添加一个<code>pl-2</code>类,这是完成了!</p><p><href="https://wizardzines.com/”> https://wizardzines.com/ < / >已基本没有CSS除了一个<代码> <链接的href = "https://cdn.jsdelivr.net/npm/tailwindcss/dist/tailwind.min.css”rel = "样式表></code>.</p><h3 id="这是什么不同于内联样式>为什么这与内联样式不同?< / h3 > < p >这些CSS框架有点奇怪,因为添加<代码> no-underline < /代码>类实际上是同一编写内联<代码>文字修饰:没有> < /代码。所以这只是基本上相当于usinginline CSS样式?它不是!这里有一些额外的功能有:< / p > < ol > <李>媒体查询。能够根据大小(<code>sm:text-orange md:text-.</code>)指定备用属性是非常棒的,能够如此快速地完成</li><li>Limits&.。使用普通CSS,我可以制作任何我想要的宽度的元素。对我来说,这不是一件好事!随着尾风,只有< a href = "https://tailwindcss.com/docs/.”< / > > 30伊什选择宽度,我发现这些限制让我更容易做出合理的CSS选择,让我的网站看起来像我想要的那样。不再<代码>宽度:300px;/ *我希望这看起来好我不知道帮助* / < /代码>的< a href = "https://tailwindcss.com/docs/.”>调色板</a>!它迫使您在<code>em</code>中执行所有操作,而不是使用我所理解的像素,即使我在编写CSS时从未实际执行过。为什么这样使用css有意义>为什么这样使用CSS有意义?< / h3 > < p >似乎还有一些其他的web开发的趋势,使这种方法比它可能在CSS makemore意义,说,我想知道这个方法现在更有意义的原因是,我们正在进行比2003年更多的HTML生成。在我的小例子中,这种方法CSS实际上并不介绍<强> < /强>复制到我的网站,因为所有的HTML都是由Hugo模板生成的,所以大多数样式最终只能指定一次。所以即使我需要写这荒谬的<代码> text-xlrounded bg-orange pt-1 pb-1 pr-4 pl-4设置盘旋:设置no-underline leading-loose > < /代码设置ofclasses按钮,我真的只需要写一次。</p><p>我不确定!</p><h3 id="其他类似css框架>其他类似的CSS框架</h3><ul><li><href="https://tachyons.io/”>快子</a></li><li><href="https://bulma.io/”>bulma</a></li><li><href="https://tailwindcss.com/”尾风</a></li><li>在某种程度上,年龄越大<href="https://getbootstrap.com/”>引导程序</a>,虽然当我使用Iultimately感觉我所有的网站看起来完全相同(“哦,另一个引导站点)这让我停止使用它。</li></ul><p>可能还有更多。我根本没有试过Tachyons或Bulma。它们看起来也很漂亮。utility-first-not-utility-only”>实用优先,不是工具只能< / h3 > < p >转顺风作者说,我认为是有趣的是顺风的目标是notactually你<强>从不< /强>编写CSS(尽管显然可以侥幸smallsites)。有一些更多的关于< a href = "https://news.ycombinator.com/item?id=18084013>这些HN注释</a>.</p><h3 id="每个人都应该使用这个想法每个人都应该用这个吗?不知道</h3><p>对于编写(或不写)CSS的“唯一真实方法”我没有立场。我不是前端开发人员,您绝对不应该听取我的建议。但是我发现这更容易比abouteverything以前我试过了,也许对你也有帮助。 < ![CDATA[什么时候教学与漫画工作好吗?] > 2018-10-28T09:13:41+00:00 https://www.jd-xw.com/blog/2018/10/28/.-do-.-with-comics-work-well/ < p >我在< a href = "https://letssketch..splasht..com/”让我们画技术草图吧!< / > 5月旧金山12月。我一直在考虑该谈什么(制作杂志的机制?)comicsskills不同于绘画的技能如何?自助出版业务?)。所以这里有一个有趣的问题:在什么情况下使用漫画教帮助?</p><h3 id="漫画有点魔力漫画是有魔力的</h3><p>我首先想到的地方是——漫画经常让我觉得<强>魔力</强>。我要上传一部漫画,举个例子,/proc,很多人会告诉我真的,我不知道这存在,这是souseful !“.很显然,用漫画来解释事情对很多人来说都很有效。但是漫画在什么情况下有用,就不那么清楚了!因此,这篇文章试图探索这个问题。</p><p>也参见<href="https://www.jd-xw.com/teach-.-with-cartoons/”>如何用卡通教技术概念</a>这更多是关于我使用的技术,而较少是关于"当它工作”. < / p > < h3 id = "学习风格如何>什么了”学习风格?“< / h3 > < p >一个可能的方法来回答这个问题”什么时候用漫画教好?“是好,有些人是视觉学习者,对于那些人来说,漫画工作得很好.这是基于不同的人有不同的想法学习风格而且,在使用自己喜欢的学习风格进行教学时,学习效率更高。</p><p>很明显,不同的人有不同的学习<.>.ces</.>(例如,我喜欢阅读文本,不喜欢看视频)。从我对维基百科的简短阅读中,人们在使用自己的喜好进行教学时,实际上学习得更有效似乎不太清楚。所以,这是否属实,我不怎么想我在这里做什么。</p><p>这是我读过的关于这个的所有内容(不是很多!)“:</p><ul><li><a href=”https://en.wikipedia.org/wiki/._.”>维基百科文章</a></li><li><href="http://www.learning..org/blog/2016/5/8/.-digest-9”>如何从学习科学博客</li><li><href=谈论学习风格</a>”http://www.learningscientists.org/blog/2017/5/25-1”>一篇关于可能具有更好证据的替代理论的博客文章</a></li><li><href="https://www.nytimes.com/2010/09/07/health/views/07mind.html?_r = 3 hp = &pagewanted =”《纽约时报》一篇关于学习技巧/学习方式的文章<a>http://journals.sagepub.com/doi/abs/10.1111/j.1539-6053.2009.01038.x”>学习风格研究</a>,没有发现证据表明学生更喜欢学习风格</li><li><href="https://prairieworldcomicsblog.wordpress.com/2017/05/04/.y-comic-.-./”>一个不错的漫画学习风格< / >(可能来自维基百科呢?</li></ul><h3 id="学习偏好仍然重要>学习偏好依然重要< / h3 > < p >你可以从这得出学习偏好并不重要,你应该justteach任何给定概念的最好方式,< em > < / em >概念。但是!!我认为学习偏好stillmatter,至少对我来说是这样。我不在教室里教书,我教谁感觉阅读'mwriting在互联网上!如果人们不想学习我教的东西是因为它们被呈现的方式,他们不会!例如< / p > < p >——我不观看视频学习。(这并不是说我不能从视频中学习,只是研究表明,我只是不看)。所以如果有人教很多发在YouTube上我想学习,我不会看他们!所以现在我读的语句是我是个视觉学习者作为值得注意的偏好:).</p><h3 id="时序漫画帮助图当漫画有帮助时:图表</h3><p>我工作的许多系统涉及许多交互系统。例如,与许多组件Kubernetes acomplicated系统。我花了几个月的时间才理解这些部件是如何装配在一起的。最终我明白答案是这个图:< / p > < div = "对齐中心“> < img src = "https://www.jd-xw.com/./kube-..png”></div><p>这个图的要点是所有Kubernetes的状态都生活在etcd中,其他Kubernetescomponent决定如何通过API服务器发出请求,并没有直接相互componentscommunicate(或etcd)。这些是了解库伯内特斯建筑最重要的事情,这就是它们在图表中的原因。</p><p>但并非所有的图表都是有用的!!我打算挑别人的Kubernetes图(<href=)https://x-team.com/blog/introduction-kubernetes-architecture/”>来源</a>,这完全正确,但我个人觉得没有多大帮助。</p><div align="中心“> < img src = "https://www.jd-xw.com/./sad-architecture-..png”> < / div > < p >我想这个图(和很多图!绘制为:</p><ul><li>为每个组件标识系统的组件</li><li>绘制框以及通信</li></ul><p>的组件之间的箭头。但就我个人而言,我发现它经常让我对这个系统的工作方式感到困惑。像这样的图表通常不会突出最重要的/不寻常的架构决策!我喜欢画图表的方法是,相反:</p><ul><li>找出人们需要理解以使用它的关键架构决策是什么</li><li>绘制图表,以说明那些架构决策(可能包括框和箭头)</li><li>省略了对于理解架构</li></ul><p>不是关键的部分,对于那个库伯内兹图,我省略了豆荚和苦行僧的角色,还有那些成员在什么地方(在主人身上?)是工人吗?)因为即使那些也是非常重要的,它们不是我的教学目标。</p><h3 id="when-comics-help-explaining-scenarios”>当漫画有帮助时:解释情景</h3><p>我发现真正有效的事情是快速解释一些关于某些非常复杂的事情的一些重要内容,比如如何运行kubernetes”或“分布式系统是如何工作的”.</p><p>通常在试图解释一个庞大的主题时,人们开始与概论(“让我解释一下什么是alinearizable系统!“)。我还有其他我喜欢的方法,我认为是场景从“方法,或“得到具体的!“.(这与给出闪电的最好方法相同——解释一件特定的有趣的事情而不是试图给出一个概览)。</p><p>这个想法是放大到一个你在现实生活中会遇到的常见的特定场景中。例如,当使用可线性化的分布式系统时,一个非常常见的情况是,由于领导者选举,该系统将周期性地不可用。当我开始使用分布式系统时,我不知道这是很常见的!!所以说"嘿,这是在实践中发生的一件事这里有两个我用这种风格创作的漫画例子:</p><div align="中心“> <https://www.jd-xw.com/./.-kubernetes.png”> < img src = "/图片/ operating-kubernetes.png”> < / > < a href = "https://www.jd-xw.com/./.s-..jpeg”> < img src = "/图像/场景分布.jpeg”></a></div><p>漫画非常适合说明这样的场景,因为通常存在某种类型的交互!(“你没看到我们正在举行领导人选举吗??“</p><h3 id="当漫画-帮助写作-简短的结构清单>当漫画有帮助时:写一个简短的结构化列表</h3><p>我最近开始使用漫画来解释命令行工具(例如<href=.)。https://gumroad.com/l/bite-size-command-line”>bitsizecommandlinezine</a>).</p><p>我最喜欢的漫画之一就是grep漫画。我喜欢这个漫画的原因是itliterally包括每一个我所使用grep命令行参数,除了少数几个,我认为似乎没什么用。而且我已经使用grep 15年了!我认为在这么小的空间里对grep进行有效的总结是令人惊讶的。</p><div align="中心“> <https://www.jd-xw.com/./grep.jpeg”> < img src = "/./grep.jpeg”> < / > < / div > < p >我认为重要的是在这种情况下,列表是<强>结构化< /强>在thislist——所有的东西都是一样的类型(“grep命令行参数)。我觉得漫画在这里很好用,因为你可以让这个列表多彩/有趣/有视觉吸引力。</p><h3 id="when-comics-help-explaining-a-simple-idea”>当漫画帮助:一个简单的想法解释< / h3 > < p > < a href = "我把大部分时间都花在了https://gum.co/bite-size-linux”>bitsizelinux</a>解释各种Linux想法。这里有一部我很喜欢的管道漫画!我认为这是有点像“画暗线–有一些关于管道的基本概念,我认为这些概念对理解是有用的,具体地说,管道具有缓冲区,如果缓冲区已满,则写入管道块。</p><div align="中心“> <https://www.jd-xw.com/images/pipes.jpeg”> < img src = "/图像/管道.jpeg”> < / > < / div > < p >我认为漫画适合这个只是因为你可以混合文本和小的图真的很容易,对于管道之类的东西,这些小图很有帮助。</p><h3 id="现在就这么说>现在所有的< / h3 > < p >我不认为这是“正确的”分类的“当漫画教学起作用时然而。但我thinkthis是一个比较准确的描述如何到目前为止我一直在使用他们。如果你对漫画何时有效(以及何时无效)还有其他想法!我很想听听。 < ![CDATA[新杂志:哦,狗屎,吉特!] > 2018-10-27T23:21:23+00:00 https://www.jd-xw.com/blog/2018/10/27/new-zine-oh-shit-git-/ 你好!上周https://twitter.com/ksylor”>凯蒂·西洛·米勒</a>,我出版了一本名为"哦,狗屎,吉特!“.它有许多常见的git错误以及如何修复它们!通过研究它,我学到了很多东西(比如<code>HEAD@{2}</code>的意思,并且您可以执行<code>my-.-name@{2}</code>以查看分支先前所指向的内容,以及更多使用<code>git diff</code>)</p><p>的方法,您可以在<href= 10美元买到https://gum.co/oh-shit-git”>哦,狗屎,吉特!</a>或在<href=的无发誓版本https://gum.co/dangit-git”> Dangit,吉特!</a>这是封面和目录表:(您可以单击目录使其更大)</p><div align=”中心“> <https://gum.co/oh-shit-git”><img宽度="“250px”SRC=https://www.jd-xw.com/./ohshit-.-bw.png”> < / > < a href = "https://www.jd-xw.com/./ohshit-toc.png”><img宽度="“250px”SRC=https://www.jd-xw.com/./ohshit-toc.png”></a></div><h3 id="为什么-这本杂志>为什么要买这本杂志?我已经想了好几年,写一本git杂志可能会很有趣,但是我没有办法去做。我和git在这个奇怪的地方,尽管我知道git确实令人困惑,我感觉好像忘记了被Git弄糊涂/害怕的感觉。我在我最近被这件事弄糊涂了,让我解释一下!!“. < / p > < p >然后!!我看到凯蒂Sylor-Miller了这愉快的网站叫做< a href = "https://ohshitgit.com/”哦,狗屎,吉特!< / >解释如何共同git的事故。我认为这方面才华横溢的因为很多东西,网站(“哦,狗屎,我致力于wrongbranch !“当我对git感到不舒服时,我记得有些事情真的很可怕!< / p > < p >所以我想,也许这对于大家做论文参考是有用的!也许我们可以用它做一本杂志!所以我给她发电子邮件,她同意和我一起工作。现在到了!:D。被引证为进行了第一次合作。</p><h3 id="什麽-s-new-in-the-oh-shit-git-zine”>这该死的新东西,吉特!锌?<h3><p>杂志与网站不同——我们决定添加一些关于Git如何工作的基本信息(提交是什么?)因为要真正有效地使用Git你至少需要知道一点关于如何提交和分支工作!并对部分解释进行了改进。杂志中大约50%的材料来自网站,50%是新的。</p><h3 id="几页范例>几个示例页< / h3 > < p >页面,这里有几个例子给你一个想法的杂志:< / p > < p > < img宽度= "100%“SRC=https://www.jd-xw.com/images/ohshit-commit.png”></p><p>和<code>git reflog</code>:</p><p><img.="100%“SRC=https://www.jd-xw.com/./ohshit-reflog.png”> < / p > < h3 id = "2018年,那本杂志可能就这么定了那也许是2018年的《杂志》!我不知道,但我不认为我写了几个月的杂志。到目前为止,已经5点了。!!(今年)linux咬大小,咬合大小命令行,救命!我有一个经理!,还有这个!.我对这个数字非常满意,并且非常感谢所有支持他们的人。</p><p>我现在对于杂志的想法包括:</p><ul><li>kubernetes</li><li>如何使用编程</li><li>“bite size neting”进行统计,在100亿个不同的命令行工具上,这些工具用于不同的网络事物</li><li>“bite size linux v2”,关于我在“bite size linux”</li></ul><p>中没有涉及到的更多核心linux概念,在写杂志和写博客之间有一个明确的折衷,写博客文章真的很有趣。也许我会试着朝那个方向往回走一会儿。</p> < ![CDATA[一些特使基本情况]] 2018-10-27T08:40:25+00:00 https://www.jd-xw.com/blog/2018/10/27/envoy-basics/ <p><href="https://www.envoyproxy.io/”>特使< / >是一个新兴的网络代理/网络服务器在同一个宇宙HAProxy nginx。当我firstlearned去年秋天,我被它弄糊涂了。</p><p>对于任何软件都有几个问题:</p><ul><li>如何使用它?李李< / > < >为什么有用?它在内部是如何工作的?</li></ul><p>我将在本帖中花费大部分时间你怎样使用它?“,因为我发现很多关于如何配置特使的基础知识在我开始时非常混乱。我会解释一些我起初感到困惑的特使行话(什么是SDS?XDS?光盘?EDS?广告?过滤器?集群?倾听者?救命!</p><p>还有一点它为什么有用?“而且内部没有任何问题。</p><h3 id="特使>特使是什么?特使是网络代理。你编译它,你把它放在服务器,你想要的,告诉它使用哪个配置文件,和你去!</p><p>这里可能是使用特使的最简单的例子。配置文件是<href="https://gist.githubusercontent.com/jvns/340e4d20c83b16576c02efc08487ed54/./1ddc3038ed11c31ddc70be038fd23ddfa13f5d3/envoy_config.json">要点</a>。此示例启动端口7777上的Web服务器,该服务器代理端口8000上的另一个HTTP服务器。</p><p>如果有Docker,现在可以尝试了——只需下载配置,这位特使dockerimage开始,和你去!先>先>先>先>先>先>代码>python-mSimpleHTTPServer&\\在端口8000端口启动HTTP服务器,得到https://gist.githuthu.githuthuthubusercercontontontontontent.com/jvns/340e4e4d20c83b20c83b16166c836c026c026262626262487ed54/./1ddc303038ed11c303036363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636r/local/bin/envoy-c/config/envoy_config.json</code></pre><p>此wi将启动特使HTTP服务器,然后你可以向特使提出要求!只要<code>curllocalhost:7777</code>,它将把请求代理到<code>localhost:8000</code>.</p><h3 id="envoy-basic-concepts-clusters-listeners-routes-and-filters”>特使基本概念:集群,听众,路线,过滤器</h3><p>这个小小的<href="https://gist.githubusercontent.com/jvns/340e4d20c83b16576c02efc08487ed54/./1ddc3038ed11c31ddc70be038fd23ddfa13f5d3/envoy_config.json">envoy_config.json</a>我们刚刚运行包含所有基本特使概念!首先,有一个< /强> <强>侦听器。这告诉特使绑定到一个港口,在这种情况下,7777:</p><pre><code>”听众“({)地址“:{ "套接字_地址”:{ "地址“:“127.0.0.1,“端口值7777}</code></pre><p>下一步,听众有< /强> <强>过滤器。过滤器告诉侦听器如何处理它接收的请求,你给Envoy一个过滤器数组。如果您正在执行一些通常很复杂的操作,那么您将对每个进入的请求应用普通过滤器。</p><p>有几种不同类型的过滤器(<href=)https://www.envoyproxy.io/docs/envoy/v1.8.0/api-v2/api/v2/listener/listener.proto#listener-filter”>参见TCP过滤器列表</a>),但是最重要的过滤器可能是<code>envoy.http_._manager</code>过滤器,用于代理HTTP请求。HTTP连接管理器有其应用的HTTP过滤器的进一步列表(<href=)https://www.envoyproxy.io/docs/envoy/v1.8.0/api-v2/config/filter/network/http_._manager/v2/http_._manager.proto#envoy-api-msg-config-filter-network-http-.-manager-v2-http filter”>参见HTTP过滤器列表</a>)。其中最重要的是<code>envoy.router</code>过滤器,它将请求路由到右后端。下面是我们如何配置过滤器。有一个TCP过滤器(<代码> envoy.http_connection_manager > < /代码)使用1 HTTP过滤器(<代码> envoy.router > < /代码)< / p > < pre > <代码>”过滤器“({)名称”:“http_._manager”,“配置“:{ "stat_prefix”:“in._http”,“http_filters”({)名称”:“路由特使,“配置“:{}},....</code></pre><p>下一步,我们来谈谈路线。您将注意到,到目前为止,我们还没有向<code>envoy.router</code>过滤器解释如何对它接收到的请求进行<.>do</.>。它应该在哪里代理它们?它应该匹配什么路径?在我们的例子中,这个问题的答案是“代理所有请求本地主机:8000<code>envoy.router</code>过滤器配置有路由数组。下面介绍如何在测试配置中配置它们。在我们的例子中,只有一条路线。</p><pre><code>。._config”:{ "虚拟主机:[{”名称”:“瞎说,““域”:“*”,“路线“:[{”“匹配”:{ "前缀:“/},““路线”:{ "集群:“香蕉}</code></pre><p>这给出了要匹配的域的列表(这些域与请求主机头匹配)。如果更改了<代码>”“域”:“*”</code>to<code>”“域”:“my.cool.service”< /代码>然后我们需要传递标题<code>Host:my...service</code>以获得响应。</p><p>如果您正在关注此配置正在进行的传奇,您将注意到端口<code>8000</code>在任何地方都没有被提及。只是<代码>”集群:“香蕉> < /代码。什么是集群?嗯,a<.>.</.>是作为服务后端的地址(IP地址/端口)的集合。例如,如果有8台机器运行HTTP服务,那么集群中可能有8个主机。每个服务都需要自己的集群。这个示例集群是很简单的:它是酒单IP /端口,在本地主机上运行。</p><pre><code>”集群”({)名称”:“香蕉,““类型”:“STRICT_DNS,“connect_timeout”:“1 s”,“主持人:[{”套接字_地址”:{ "地址“:“127.0.0.1,“端口值代码:8000}}]}]< / > < / pre > < h3 id = "tips-for-writing-envoy-configuration-by-hand”>手动编写特使配置的提示</h3><p>我发现从头编写特使配置非常耗时——特使存储库中有一些示例(<href=)https://github.com/envoyproxy/envoy”> https://github.com/envoyproxy/envoy < / >),但是,即使使用Envoy一年的基本配置之后,实际上我花了45分钟才弄对。这里有一些提示:</p><ul><li>Envoy有两个不同的API:v1和v2 API。许多新特性只在v2API中可用,我发现它的文档比较容易浏览,因为它是从协议缓冲区自动生成的。(例如,群集文档由<href=生成)https://github.com/envoyproxy/envoy/blob/master/api/envoy/api/v2/cds.proto”李> cds.proto < / >)< / > <李>几个好的起点特使API文档:< a href = "https://www.envoyproxy.io/docs/envoy/v1.8.0/api-v2/api/v2/lds.proto envoy-api-msg-listener”>听众</a>,<HREF=https://www.envoyproxy.io/docs/envoy/v1.8.0/api-v2/api/v2/cds.proto#.”>群集</a>,<HREF=https://www.envoyproxy.io/docs/envoy/v1.8.0/api-v2/api/v2/listener/listener.proto#envoy-api-msg-listener-filter”>过滤器</a>,<HREF=https://www.envoyproxy.io/docs/envoy/v1.8.0/api-v2/api/v2/route/route.proto envoy-api-msg-route-virtualhost”< / > >虚拟主机。要获得所需的所有信息,需要单击很多(例如,查看如何为需要开始的路由配置集群)虚拟主机单击._config->._hosts->.->.->.),但它有效。https://www.envoyproxy.io/docs/envoy/v1.8.0/./arch_overview/arch_overview”>架构概览文档</a>非常有用,并且给出一些Envoy东西是如何配置的总体说明。</li><li>可以使用json或yaml来配置Envoy。上面我已经使用了JSON.</li></ul><h3 id="您可以使用服务器配置特使”>您可以使用服务器</h3><p>配置Envoy,即使我们从磁盘上的配置文件开始,使Envoy与HAProxy或nginx真正不同的一点是,Envoy经常<.>没有配置文件</.>。您可以使用动态更改配置的一个或多个配置<.>server</.>来配置Envoy。</p><p>要了解为什么这可能有用:假设您使用Envoy来负载平衡请求50ish后端服务器,哪些是EC2实例,您需要周期性地进行轮换。所以< a href = "http://your-website.com”> http://your-website.com < / >请求去特使,并获得路由到一个集群特使< em > < / em >,需要列出这些服务器的50个IP地址和端口的列表。</p><p>但是如果这些服务器随时间变化怎么办?也许你正在发布新的或者它们被终止。您可以通过定期更改Envoy配置文件并重新启动Envoy来处理这个问题。或!!你可以设置一个集群发现服务”(或)光盘)例如,查询AWS API,并将后端服务器的所有IP返回给Envoy。</p><p>我不会详细讨论如何配置发现服务,但基本上看起来像这样(从< a href = "https://github.com/envoyproxy/envoy/blob/master/configs/envoy_service_to_service_v2.template.yaml”>此模板</a>)。告诉它刷新的频率和服务器的地址是什么。</p><pre><code>._resources: cds_config: api_config_source: ._.: -cds_._.esh_.: 30s...-名称:cds_.connect超时:0.25s类型:STRICT_DNS lb_policy:ROUND_ROBIN主机:-socket_address:-protocol:TCP地址:cds.yourcompany.net端口_value:80</code></pre><h3 id="四类特使发现服务>4种特使发现服务</h3><p>有4种资源可以为特使建立发现服务-路由("具有此HTTP头的群集应该请求什么)集群(“这个服务有什么后台吗?“)侦听器(端口)的过滤器,以及端点。这些被称为RDS,光盘LDS,EDS方面。<HREF=https://github.com/envoyproxy/data-plane-api/blob/master/XDS_PROTOCOL.md”>XDS</a>是总体协议。</p><p>从头开始编写发现服务的最简单方式可能是在Go中使用<href="https://github.com/envoyproxy/go-control-.”>运行控制平面</a>库。</p><h3 id="特使发现服务>一些特使发现服务< / h3 > < p >肯定可以写特使从头配置服务,但是还有其他一些开源项目实现特使发现服务。这是我知道的,虽然我确信还有更多:</p><ul><li>有一个名为<href=的开源特使发现服务。https://github.com/turbinelabs/.”>转子</a>,看起来很有趣。建造它的公司https://blog.turbinelabs.io/turbine-labs-is-shutting-down-and-our-team-is-joining-slack-2ad41554920c”几周前关闭<br/></li><li><href="https://istio.io/”>Istio</a>(据我所知)基本上是一个特使发现服务,它使用来自Kubernetes API(例如集群中的服务)的信息来配置特使/路由。它有自己的配置语言。https://www.hashicorp.com/blog/consul-1-2-service-mesh”>这篇文章< / >),虽然我不能完全理解那里的状态</li></ul><h3 id="服务网格>什么是服务网格?我经常听到的另一个术语是服务网格”.基本上服务网格”您将Envoy安装在与每个应用程序相同的计算机上,以及代理所有您的网络请求作为特使。</p><p>基本上它使您更容易控制一群不同的应用程序(可能编写不同的编程语言)如何彼此通信。</p><h3 id="为什么特使很有趣>为什么特使有意思?我认为特使的这些发现服务确实令人兴奋。如果所有网络流量都是通过Envoy代理的,并且您从中央服务器控制所有Envoy配置,这样你就有可能:</p><ul><li>使用<href="https://www.envoyproxy.io/docs/envoy/.t/./arch_overview/._breaking”>断路</a></li><li>路由请求到<href="https://www.envoyproxy.io/docs/envoy/.t/./arch_overview/load_.ing#.-.-routing”>仅关闭实例</a></li><li>加密网络流量端到端</li><li>运行受控的代码推出(希望仅将流量的20%发送到您所启动的新服务器?可以!</li></ul><p>而不必在任何地方更改任何应用程序代码。基本上,它是一个非常强大/灵活的集中式负载平衡器。</p><p>显然,设置一组发现服务并操作它们,并用它们以复杂的方式配置内部网络基础结构要比仅仅使用它们要复杂得多。编写annginx配置文件,别管它”,而且它可能比大多数人更复杂。我不会冒险进入告诉你谁应该或者不应该使用特使,但我的经验是,像Kubernetes,它既强大又复杂。</p><h3 id="other-exciting-things-about-envoy-timeout-headers-and-metrics”>关于Envoy的其他令人兴奋的事情:超时头和度量</h3><p>关于Envoy,我真正喜欢的事情之一是,您可以传递一个HTTP头来告诉它您的请求有多么的toretry/timeout!!这是令人惊奇的,因为实现超时/重试逻辑correctlyworks不同在每一个编程语言和人都搞错了。因此,能够仅仅传递一个报头是很好的。</p><p>超时和重试报头被记录<href="https://www.envoyproxy.io/docs/envoy/latest/configuration/http_filters/router_filter http-headers-consumed”> < / >,这是我最喜欢的:< / p > < ul > <李> <代码> x-envoy-max-retries < /代码>:重试多少次< /李> <李> <代码> x-envoy-retry-on < /代码>:这失败重试(如<代码> 5 xx < /代码>或<代码> connect-failure > < /代码)< /李> <李> <代码> x-envoy-upstream-rq-timeout-ms < /代码>:总超时< /李> <李> <代码> x-envoy-upstream-rq-per-try-timeout-ms < /代码>:超时/重试李< / > < / ul > < h3 id = "现在就这么说以上就是现在</h3><p>我对特使有很多想法(太多不能写在一个博客帖子里了!))也许我等会儿再说!</P> < ![CDATA[高级工程师的工作是什么?] > 2018 - 10 - 06 - t23:16:40 + 0 https://www.jd-xw.com/blog/高级工程师/ < p >有这个伟大的职位由约翰·Allspaw称为“<HREF=https://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/”>关于高级工程师</a>”.我最初读这本书是在4年前,当我开始现在的工作时,它确实影响了我对自己想走的方向的看法。</p><p>4年后重读,关于那篇博客文章,有一件事情对我来说真的很有趣,那就是,他正在解释同理心/帮助你的团队取得成功是成为资深创业者的一个重要部分。这当然是真的!但是,从我今天的立场来看,大多数(全部)?在我认识的高级工程师中,除了他们的个人编程工作之外,还承担着大量帮助其他人的工作。我看到我/我的同事们今天所面对的挑战并不多什么??我必须跟人吗??难以置信。”更多等等,我如何平衡所有这些领导工作与我的个人贡献/编程工作,以可持续的方式为我?有多少workshould我做什么?“.因此,与其谈论高级工程师从Allspaw的职位中得到的<.>属性</.>(我完全同意),相反,我想在这里谈谈亚斯尼奥工程师所做的.<强>工作.</强>。这个帖子是在描述什么>这篇文章描述的是什么</h3><p>”高级工程师做什么这是一个巨大的主题,这是一个小帖子。事情保持mindwhen阅读:< / p > < ul > <李>这是一个可能的描述的“高级工程师”能做的。有很多方法工作,这并不是绝对的。</li><li>我基本上只在一家公司工作,这只是我的经验,所以我的观点显然非常有限</li><li>显然有很多层次。高级工程师”在那里。这是针对某个地方aroundP3 / P4的< a href = "https://twitter.com/Gankro/status/1046438955439271936”>Mozilla梯子</a>(资深工程师/员工工程师),也许有点“员工”边.</li></ul><h3 id="工作内容>工作的一部分</h3><p>这些是我认为主要是高级工程师的工作,而不是经理的工作。尤其是创建新项目/将项目与业务优先级相关联)</p><p>将所有这些结合在一起的事情是,几乎所有这些工作基本上都是<强>技术</强>:帮助某人摆脱棘手的项目显然是一种人际互动,但是我们将共同解决的问题通常是计算机问题!(“也许如果我们simplifythis设计我们可以用这种方式早!“</p><ul><li><.>编写代码。</.>(显然)</li><li><.>执行代码评审。</.>(显然)</li><li><.>编写和审查设计文档。</.>与其他评审任务一样,我想审查设计文件为“再看一眼,这可能有助于改进设计当团队成员陷入困境时帮助他们。和对工作的支持!我不这么认为降落伞从天空和交付你的magicalknowledge人”和更多的“一起去理解他们试图解决的问题,看看两个大脑是否比一个好:)这也意味着和某人一起解决问题,而不是为他们解决问题。</li><li><.>保持人们高质量标准。</.>。质量”将意味着不同的事情不同的人(我的团队意味着可靠性/安全/可用性)。通常当某人做出对我有利的决定时,不是因为我知道他们不知道,就是他们知道我不知道!所以不要告诉别人”嘿,你做错了,你应该改做X,我试着给他们一些他们没有的额外信息,并且经常整理出来。Andpretty经常发现我少了一个,实际上他们的决定是totallyreasonable !在过去,我偶尔看到高级工程师通过越来越大声地重复他们的意见来实施质量标准,因为他们认为他们的意见是正确的,我个人没有发现这有什么帮助。</li><li><.>创建新项目。</.>软件工程团队不是一个零和的地方!我知道的最好的工程师不会为自己保留最有趣的工作,他们创造了新的有趣的/重要的工作,并为人们创造了做这项工作的空间。例如,有人在我的团队牵头rewriteof我们部署系统,是超级成功的和现在有一个整体的团队致力于newfeatures方式更容易构建post-rewrite !</li><li><.>计划项目的工作。</.>这是关于写下/传达您正在执行的项目的路线图,并确保人们理解计划。</li><li><.>主动沟通项目风险。与其他工程师/经理沟通,找出该做什么。</li><li><.>沟通成功!</.></li><li><.>执行对团队/公司有利的副项目</.>。我看到很多高级工程师偶尔会做一些小的高杠杆项目(比如构建开发工具/帮助制定政策),最终帮助很多人把工作做得更好。</li><li><.>注意项目与业务优先级的关系。</.>><li><.>决定什么时候停止做项目</.>。弄清楚何时停止/不开始某件事情出乎意料地困难:)</li></ul><p>我放写代码首先,因为我发现意外地让这事落在后面是很容易的:)</p><p>我遗漏了一件事作出估计.做评估是我仍然不太擅长的事情,而且我认为我不太了解(?)但我想每天花更多的时间是值得的。</p><p>这个列表感觉像很多东西,而且如果你一直尝试做这些事情,它将会占据所有可用的大脑空间。我认为总的来说可能意义开拓subsetand决定”现在我要集中讨论X Y Z,我想,如果我也试着做《公元前》的话,我的大脑会爆炸的。”. < / p > < h3 id = "what-s-not-part-of-the-job”>什么是不工作的一部分< / h3 > < p >这部分有点棘手。我不是说这不是高级工程师的感官工作。”我不会帮助我的团队创造一个良好的工作环境,你竟敢说这是我工作的一部分!!“.我认识的大多数高级工程师都花了大量的时间思考这些问题,并做了很多工作。</p><p>我认为在这里创建边界是有用的,因为每个和我一起工作的人都对团队/公司有强烈的所有权/责任感。需要这样做吗?好,肯定的是,我能做到!!“),我认为很容易,愿意做任何需要发生资金流进人不知所措劳累/无法取得的各种技术contributionsthat实际上是他们的核心工作。所以,如果你能围绕你的角色建立一些界限,那么在忙碌的时候就很容易决定要找什么样的工作来帮忙。实际边界youdraw当然取决于你/你的团队:)< / p > < p >大多数都是经理的工作。警告:经理做更多比这里列出的东西(例如“创建新的项目”)在一些公司,有些事情可能是高级工程师(如短跑管理)的工作。</p><ul><li>确保每个团队成员的工作得到认可培训新经理/帮助他们理解他们对他们的期望(虽然我认为资深IC通常最终会选择其中一些?对您没有从事的项目(我工作的地方)进行项目管理,whateverengineer领导的工作,项目)< /李> <李>是一个产品经理李< / > <李>做sprint管理/组织每个人的工作为里程碑/每周运行团队会议< /李> < / ul > < h3 id = "显式设置边界是有用的>显式地设置边界是有用的< / h3 > < p >我最近遇到了一个有趣的情况,我与经理谈论thingswere和不是我工作的一部分作为一个工程师,我们意识到我们有非常differentexpectations !我们谈到了,我想现在已经解决了,但它让我意识到,就期望值达成一致非常重要:)</p><p>当我刚开始做工程师时,我的工作是很简单的,我写的代码,试图着手进行有意义的项目,那很好。我的经理总是很清楚我的工作是什么,并不太复杂。现在情况不那么真实了!因此,现在我认为,定义一份工作,即:</p><ul><li>我可以做/对我来说是可持续的</li><li>我想做/那是总体上令人愉快的,并且符合我的个人目标</li><li>对团队/组织</li></ul><p>是有价值的,而且那份工作的确切形状对于不同的人来说是不同的(不是每个人都有相同的兴趣与长处,例如我实际上没有神奇的在代码审查!)我认为这使得协商/设定期望值变得更加重要。</p><h3 id="不要-不同意-工作-你不能-做-不想要>不要同意你不能做/不想做的工作<p>我认为,如果我被要求做我不能做的工作,或者我认为让我不快乐的长期工作很重要,就退缩!我发现它容易同意承担大量的工作,我知道我不非常喜欢(“哦,这对球队有好处!“,“嗯,需要有人去做!“)。但是,虽然Iobviously有时仅仅因为他们需要承担任务完成,我认为,对于团队健康来说,全面地做对他们来说是可持续的工作并且他们总体上享受工作是非常重要的。</p><p>所以我将承担一些只需要完成的小任务,但我认为重要的是我不要说”哦,当然,我会花很多时间去做我不擅长和不喜欢的事情,没有问题”:)如果“一个“需要这样做,也许这只是意味着我们需要雇佣起/火车一个新的人来填补这一缺口:)< / p > < h3 id = "我还有很多东西要学我还有很多东西要学!当我感觉自己开始理解这个的时候高级工程师”的事情都是关于(到目前为止我职业生涯7 yearsinto),我仍然觉得我有很多东西要学,我很感兴趣听别人如何定义边界的工作!</P> < ![CDATA[一些可能的职业目标]] 2018-09-30T23:55:07+00:00 https://www.jd-xw.com/blog/2018/09/30/一些可能的职业目标/ 今天早上,我正在考虑一个人的职业目标(作为软件开发人员),我突然想到,有很多可能的目标!所以我https://twitter.com/b0rk/status/1046456874856583173”>在Twitter</a>上询问人们一些可能的目标是什么,并得到了很多答案。</p><p>这个列表故意有大目标和小目标,以及不同方向的目标。Itdefinitely并不试图告诉你什么样的目标你< em > < / em >应该。我不确定是否有用,但这里只是以防万一:)</p><p>我把它们分成了一些非常粗略的分类。而且我觉得这个清单上还有很多缺失的地方,我很乐意听听失踪< a href = "https://twitter.com/b0rk/status/1046626447379509250”>在twitter</a>.</p><h3 id="技术目标”>技术目标</h3><ul><li>成为域/技术/语言(数据库)方面的专家,机器学习,Python)</li><li>达到这样的程度,您可以进入新的情况或技术,并迅速开始产生巨大的影响</li><li>做研究-y工作/一些以前从未做过的事情</li><li>满足您的智力上的好奇心,关于</li><li>舒适于使用真正大的代码库</li><li>li>在具有X规模/编译的系统上工作退出(每秒数百万请求,(等)</li><li>扩展一个项目超过它原来的设计目标</li><li>做一些工作,为公司节省大量金钱</li><li>做一个事故指挥官,并且运行事后调查</li><li>为开源项目</li><li>做出贡献,在某些技能上变得更好(测试/调试/编程语言/机器学习)ng)</li><li>成为重要OSS项目</li><li>的核心维护者,从头开始构建重要系统</li><li>从始至终参与产品/项目(超过几年)</li><li>理解复杂系统如何失效(以及如何使它们不失效)</li><li>能够快速构建原型,以获得新思想</li><ul><h3 id="“工作目标”>工作目标</h3><ul><li>得到你的第一份工作</li><li>通过编程面试</li><li>得到你的梦想的工作”(如果有的话)</li><li>在一家有声望的公司工作</li><li>在一家非常小的公司工作</li><li>在一家公司工作很长一段时间(看看事情如何随着时间发展)</li><li>在很多不同的公司工作(得到许多不同的观点)</li><li>得到加薪</li><li>成为经理</li><li>得到一个特定的头衔(“建筑师“,“高级工程师”,“首席技术官”,“开发人员传道者”,“总工程师在</li><li>工作的非营利组织/公司,你相信使命</li><li>工作在一个产品,你的家人/朋友会认识到</li><li>工作在许多不同的领域</li><li>工作在一个你关心的特定领域(过境,安全性,政府)</li><li>获得报酬,从事特定项目(如linux内核)</li><li>的学术工作,有稳定的资金来达到你的研究兴趣</li><li>成为一个面包师/完全从事其他工作:)</li></ul><h3 id="创业目标创业目标</h3><p>这个类别显然是相当大的(有很多创业相关的目标!我不打算详尽无遗。</p><ul><li>开始做自由职业者</li><li>成立咨询公司</li><li>进行你写的软件的首次销售</li><li>获得VC资金/开始创业</li><li>与你创办的公司达成X里程碑</li>>ul><h3 id="产品目标产品目标> < / h3 > < p >我认为之间的差别”技术目标”和“产品目标非常有趣——这更多的是关于你的程序对使用它们的人的影响,而不是那些程序在技术上由什么组成。</p><ul><li>按照你关心的特定<em>方式</em>来完成你的工作(例如,使网站变得可访问)</li><li>为你直接工作的人构建工具(这可以很有趣)。!</li><li>对你所关心的系统有很大影响(例如)网络安全做有助于解决一个重要问题(气候变化)的工作,etc)</li><li>在一个团队/项目中工作,其产品影响超过100万人</li><li>关于人们喜爱的产品</li><li>构建开发工具</li></ul><h3 id="人-领导-目标>人员/领导目标</h3><ul><li>帮助团队中的新人开始</li><li>帮助某人获得一份工作/机会,否则他们不会有</li><li>指导某人,并且看到他们随着时间的流逝而变得更好</li><li>>祝福别人,希望别人对你好成为工会组织者/促进工作公平</li><li>建立一个更具包容性的团队</li><li>建立一个对人们重要的社区(通过聚会或其他方式)</li><ul><h3 id="沟通社区目标>沟通/社区目标< / h3 > < ul > <李>写一个技术书< /李> <李>演讲(聚会,会议讲话,李李主旨)< / > < >一个非常著名的会议上做演讲/在你面前的人尊重李< / > <李>给研讨会你知道的东西很好< /李> <李> < /李> <李>会议开始编写一个受欢迎的博客/一篇文章让upvoted很多< /李> <李>授课(如高中/大学)< /李> <李>改变业内人思考的东西(如无可指摘的总结,机器学习公平性)</li></ul><h3 id="工作环境目标> < / h3 > < p >工作环境目标很多人谈到了灵活地选择自己的工作环境/小时(如“远程工作在</p><ul><li>获得灵活的工作时间</li><li>远程工作</li><li>在自己的办公室</li><li>工作的地方,你觉得被接受/包括</li><li>与和你有共同价值观的人一起工作(这包括知道你的价值观!):)</li><li>与经验丰富/技术熟练</li><li>有良好医疗保险/福利</li><li>挣X笔钱</li></ul><h3 id="其他目标>其他目标</h3><ul><li>像我第一次那样对编程保持好奇和热爱</li></ul><h3 id="没人能告诉你你的目标是什么没有人能告诉你你的目标是什么https://lethain.com/career-narratives/”这篇关于贵公司职业阶梯如何可能与你的目标不一致的博客文章</a>,追求下一次晋升可能不是实现这些目标的最佳方式。</p><p>我很幸运,我的许多基本目标都实现了。赚钱,“在工作中学到很多东西,“和善良、有能力的人一起工作)在那之后,我发现很难弄清楚这些里程碑中的哪一个对我真正有意义!有时我会achievea新目标,发现它并不感到非常满意。有时我会dosomething < em >,我没想到< / em >对我来说是一个巨大的,但事后真的感到很自豪。</p><p>所以写下这些东西并思考对我来说很有用。我真的想在FANCY_COMPANY工作吗?那感觉好吗?我在乎在非营利机构工作吗?我想学习如何构建很多人使用的软件产品吗?我想工作在一个应用程序,该应用程序servesa每秒百万请求吗?当我过去完成那个目标时,真的很令人感动吗,还是我真的不在乎?“</P> < ![CDATA[为什么卖杂志吗?] > 2018-09-23T10:21:24+00:00 https://www.jd-xw.com/blog/2018/09/23/why-sell-zines/ 你好!正如你可能已经注意到,我一直在写几本新杂志(它们全都在<href="https://www.jd-xw.com/zines”>https://www.jd-xw.com/zines</a>),而我的杂志过去是免费的(或付费提前获取然后免费之后),新的不是免费的!他们花了10美元!在这篇文章中,我想谈谈我为什么要切换,以及它目前进展如何。卖你的工作没关系>卖掉你的工作没关系</h3><p>我想先说一些显而易见的话——如果你决定卖掉你的工作而不是免费赠送,你不需要证明,(为什么你会吗?)。自从我开展了销售我的杂志,0人告诉我”朱丽亚你竟敢出卖自己的作品,和很多人说”你的工作很棒,我很高兴来支付它!这太棒了!“但是,我还是想谈谈这个,因为对于我来说,思考这个问题是一个相当令人困惑的折衷(我的目标是什么?)免费送东西还是卖东西能完成我的目标?</p><h3 id="我的目标是什么>我的目标是什么?<h3><p>我的博客/杂志没有非常清晰的目标,但是有一些:</p><ul><li>让人们接触到新的重要思想,否则他们可能从未听说过。我认为,如果你不认识正确的人,系统很难获得很多知识,我觉得那很愚蠢,我想在这方面做一点小小的改进。</li><li>用最简单的方法(但不是更简单)解释复杂的想法!!!)。很多事情一开始看起来很复杂,其实并不复杂,我想让人们知道。</li></ul><h3 id="免费工作容易分发>免费工作更容易分发</h3><p>最明显的优点是,如果某物是免费的,方法更容易,因为有更多的人来访问它,学习它。对我来说,这是最大的事情——我关心我写作的影响(只为自己写作是有用的,但理想情况下,我想帮助很多人!</p><p>这篇文章就是一个很好的例子https://sparcopen.org/.-./open-access-.-michael-nielsen-.-3-5m-./”>开放获取的影响:Michael Nielsen达到3.5 m读者对迈克尔·尼尔森的书< / > < a href = "http://neuralnetworksanddeeplearning.com/”>神经网络与深度学习</a>。350万读者可能被高估了,但他说:</p><blockquote><p>读者花费的总时间大约是250,000小时,或者大约有125个全职工作年。</p></blockquote><p>>那太多了!这是我长时间不卖杂志的最大原因——我担心我卖了杂志,相对于有多少人会下载免费版本,不会有多少人会购买。销售杂志使花钱和时间更容易>卖杂志更容易花钱(和时间)< / h3 > < p > < em >的一个巨大的优势销售< / em >杂志,虽然,也就是说,它使得投资高质量产品变得更加容易。我大概花了5000美元在平板电脑/印刷/软件/插画上制作杂志。因为我已经大大超过5000美元在这一点上(!!!)像这样的投资现在真的是一个容易的决定!我可以雇用超级有天赋的插画家,并支付他们公平的数额,而不用担心它!今年早些时候我决定买一台iPad(它使我的绘画杂志更容易,那支铅笔真神奇。而不是思考哦,不,这是昂贵的,我真的应该在这上面花钱吗?“我只能推理这是一个工具,将超过支付本身!我应该买下它!“. < / p > < p >,事实上,我从它的方式更容易赚钱花<强>时间< /强>锌带我给出的项目——每星期的晚上和周末,从日程表中挤出时间并不总是容易的!如果我能得到报酬,就更容易保持动力去做一些很棒的事情,而不是半生不熟的东西。</p><h3 id="人们更认真地对待他们付出的东西人们更认真地对待他们付的钱</h3><p>我对销售杂志感到兴奋的另一个原因是我觉得,因为我已经开始这样做了,并且投入了更多的钱在质量上,人们更加认真地对待这个项目了!</p><ul><li>”咬合大小的linux是一个<href="http://drablab.org/keithohara/cmsc - 226 - 2018 - f/logistics.shtml”>需要文本在大学课程!</a>这太令人高兴了。</li><li>一群在各公司工作的人买了一些杂志送给他们的同事/员工!我认为这个成本钱”发出信号的好方法实际上我在这方面花了时间,这是好的”. < / p > < h3 id = "people-are-actually-willing-to-buy-zines”>人们实际上愿意购买杂志</h3><p>刚开始我说过我担心如果我出售杂志,没有人会买,和sonobody会向他们学习,那太可怕了。这种担心有道理吗?好,实际上我有一些关于这方面的数据!!我唯一在网站上使用的统计数据就是有多少人下载我的杂志(我运行<href=)https://heapanalytics.com/”在<href=上堆</a>”https://www.jd-xw.com/zines”> https://www.jd-xw.com/zines < / >)。这里有一些数据:< / p > < ul > <李>我的下载量最多的杂志是“所以你想成为一名巫师5,李李000点击< / > < >我most-bought杂志是“咬合大小的linux3,销售额(!!!李)< / > < / ul > < p > 3,000年销售是令人难以置信的(谢谢大家!!!!我完全被很多人买这些杂志弄糊涂了。</p><p>这感觉就像卖杂志导致<.>more</.>人们阅读这本杂志,三,000年销售方式比5,000次点击,因为我认为那些买了4倍的杂志的人比那些点击PDF的人更容易阅读。(4x是完全不科学的任意数)。</p><h3 id="如何决定价格必威体育怎么样你们如何决定价格?必威体育怎么样< / h3 >必威体育怎么样 < p >定价。EEP。我发现考虑定价太令人困惑了。必威体育怎么样有多收钱叙述我在互联网看到很多基本上是:< / p > < ul > <李>领带无论你卖给别人的业务成果< /李> <李>收取他们相对于产品可以帮助他们赚多少钱,与建立</li></ul><p>的难度无关,我认为这是一个合理的模型,像这样的事情就是这样https://www.rails..com/”>导轨性能指南</a>是定价的。</p><p>我并不是这么想的,不过,我现在的方法只是收取我认为合理的/公平的价格,每份10美元。</p><p>我与<href=进行了一次非常有趣的对话。https://twitter.com/sehurlburt”>斯蒂芬妮·赫尔伯特< / >,虽然,她认为我应该收取更多的是出于不同的原因!她的论点是:< / p > < ul > <李>我们想要构建一个世界,艺术家/教育工作者可以得到相当的作品< /李> <李> 10美元/锌实际上并不是很多钱,只有可持续的茱莉亚因为茱莉亚bigaudience < /李> <李>如果我能找出如何收取更高的费用,我可以和其他人一起分享,创造一个小创造者更成功的世界。我发现这个论点很有说服力(我希望更多的人能从杂志上赚钱!))。但是我没有任何计划对个人杂志收取比10美元更高的费用,因为10美元对我来说似乎是个合理的价格,而且我知道对某些人来说已经太贵了,尤其是那些本国货币远低于美元的国家。experimenting-with-corporate-必威体育怎么样pricing”>尝试公司定价</h3><p>,虽然我非常不愿意为个人做10必威体育怎么样美元/锌的价格实验,尝试企业定价要容易得多!必威体育怎么样人们一般不会花自己的钱,所以,如果我提高公司购买杂志的价格,如果他们决定不要太多,也许他们不会买,但是它没有那么个人化,不会影响某人以同样的方式阅读杂志的能力。</p><p>现在,从我公司购买杂志原因2:< / p > < ol > <李>给员工来教人们有用的东西(我介于100 - > 600美元收取网站许可证现在)< /李> <李>发布他们在会议/其他事件(如微软< a href = "betway菲律宾https://twitter.com/mattjaffee/status/993601272971382785”>给杂志/海报我< / >今年的会议)。我刚刚开始做这个,但这似乎是一个超级有趣的方式来获得更多的杂志到世界!< /李> < / ol > < p >我< em > < / em >做了一些公司定价实验——寻求帮助!必威体育怎么样我有一个经理!我最短的价格提高到150美元,因为我认为它很有价值与theirmanagers帮助人们更好的工作。我们会看看会发生什么!</p><h3 id="why-not-patreon”>为什么不开张呢?</h3><p>作为侧栏——很多人建议我使用Patreon。现在我肯定不想使用Patreon/其他基于捐赠的模型,因为各种各样的原因(虽然我支持Patreonand的创造者,但我认为它很棒!)。我不想在这个帖子里谈这个,不过也许我改天再谈吧!对我来说,基本上是付10美元买一本杂志超级简单,我喜欢它,我也不想切换到Patreon:)</p><h3 id="叽叽喳喳喳喳喳喳喳喳喳喳喳喳21939>在免费和付费之间进行权衡:在Twitter</h3><p>上发布草稿——我现在做的是——我将在Twitter上发布我写在杂志上的几乎所有东西的草稿。这工作非常好,原因有很多:</p><ul><li>我很早就得到了关于某件事是否奏效的反馈——人们会在Twitt上建议很多重大的改进。er回答!李李< / > < >我看到是什么人——例如,共鸣这个< a href = "https://twitter.com/b0rk/status/1037186572234498048”>1:1左右的漫画</a>获得了2.5K的重发,真是太多了!知道人们发现那个页面真的很有用,帮助我决定把它放在杂志的哪个地方(在开始附近!)</li><li>那些可能买不起10美元这本杂志的人可以在Twitter上跟随,并且无论如何都能获得所有信息</li><li>显然这是很棒的广告——如果人们喜欢我在Twitter上发布的漫画,他们以后可能决定买这本杂志!例如,如果他们只想享受那些太棒的tweet,帮助的大部分页面!我有一个经理!在这儿https://twitter.com/i/moments/1043856976810315776”>twitter时刻</a>.</p><h3 id="有些事情进展得不好>一些事情进展得不好</h3><p>不是所有的事情都100%令人惊讶的在网上销售杂志!几件事情thathaven不顺利:< / p > < ul > <李>有些人没有信用卡/贝宝,所以不能把杂志!我真的非常喜欢解决这个问题的好办法。</li><li>Gumroad没有很好的电子邮件传输能力——有时候,当某人购买一本杂志时,它最终会变成垃圾邮件。这很容易解决(人们给我发电子邮件说他们没有得到它,而且它总是很容易马上修复)但我希望他们更好的在这。否则,Gumroad就是一个很好的平台。</li><li>在我的第一本杂志上,我没有把我的电子邮件地址在Gumroad页面,所以当遇到问题时,有些人不知道如何联系我,而有一个人却引发了争端。现在我把myemail地址Gumroad我认为已经修正!我给过去的杂志购买者发了一封关于Gumroad的更新邮件,说我买了一本新杂志,有个人回复说他们不喜欢被发电子邮件。我认为这里还有一点改进的余地——Gumroad自动将每个购买杂志的人登记到“更新”电子邮件发送者有点奇怪,并且感觉如果选择加入会更好。</li><li>有人把我的博客帖子发布到lobste.rs上,宣布了一本新的杂志,人们评论说他们认为在lobste.rs上发布非免费东西是不合适的。我同意这个观点,但是这个观点很难防止,因为我无法控制人们在科技新闻网站上发布的内容:)。我认为这没什么大不了的,但是感觉不是很好。</li></ul><p>我确信将来我会犯更多的错误,希望我能从中吸取教训:。我想这些,因为我很多担心犯错误当卖东西的人,但一旦我写下迄今为止的问题,他们都觉得非常可解决。大多数情况下,当别人有问题时,我只是尝试快速回复电子邮件,不是那么频繁。</p><h3 id="let-s-see-how-the-experiment-goes”让我们看看实验进展如何!到目前为止,销售杂志的感觉就像</p><ul><li>我最终拥有相当数量的读者(我认为没有太大的差别?我可以做出更高质量的东西(并且付更多的艺术家帮助我!))。人们更加认真地对待这项工作,人们对它非常积极和支持。这也许有助于建立一个世界,在这个世界上,更多的人可以得到报酬来写真正的教育材料</li><li><p>我很高兴将来尝试一些新的东西。(希望打印?)??)。我会试着继续写我所学的东西,因为如何做到这一点对我来说并不明显。我很想听听你的想法!< / p > < !不 < ![CDATA[新杂志:帮助!]我有一个经理!] > 2018 - 09 - 22 - t10:53:50 + 0 https://www.jd-xw.com/blog/2018/09/22/new-zine--help--i-.-a-manager/ < p >我刚刚发布了一个新的杂志!它被称为“救命!我有一个经理!“这本杂志是我职业生涯刚起步时希望有人告诉我的,没有想到我会和经理一起工作。一路上基本上我学到,即使我一个< em > < / em >经理,仍然有很多事情我可以做,以确保我们welltogether工作,主要是沟通清楚!所以这本杂志是关于如何做到这一点的。https://gum.co/manager-zine”> https://gum.co/manager-zine < / >。这是封面和目录:</p><div align="中心“> <https://gum.co/manager-zine”><img宽度="“250px”SRC=https://www.jd-xw.com/images/manager-cover.png”> < / > < a href = "https://www.jd-xw.com/images/manager-toc.png”><img宽度="“250px”SRC=https://www.jd-xw.com/images/manager-toc.png”></a></div><p>封面艺术是由<href="http://deiselino.tumblr.com/”>戴斯·利诺</a>。吨的人帮我写thiszine——感谢佳佳,布雷特松鸦,卡迈勒,麦琪,贾景晖马可,玛雅,威尔还有许多其他的。</p><h3 id="a-couple-of-my-favorite-pages-from-the-zine”>杂志上我最喜欢的几页<h3><p>我一直在张贴杂志上的几页<href="https://twitter.com/b0rk”在twitter上> < / >我一直投身于这部小说。下面是一些我认为特别有用的小贴士,这些小贴士甚至可以在1:1秒内完成,以及如何更好地请求反馈。中心“> <https://www.jd-xw.com/images/1:1s.jpeg”><img宽度="“300 px”SRC=https://www.jd-xw.com/images/1:1s.jpeg”> < / > < a href = "https://www.jd-xw.com/./.-..jpeg”><img宽度="“300 px”SRC=https://www.jd-xw.com/./.-..jpeg”> < / > < / div > < ![CDATA[构建不可能的程序]] 2018-09-18T17:55:38+00:00 https://www.jd-xw.com/blog/2018/09/18/build-.-./ 你好!我的演讲从今年的解构(< a href = "https://www.deco.uctconf.com/2018/julia-evans-build-.-.”>”构建不可能的程序</a>)起床了。这是关于我构建Ruby分析器的经验。这是我第二次谈到构建分析器——第一次(<href=)https://www..se.com/./lobetway菲律宾calhost-julia-evans”>构建Ruby剖析器</a>)更像是一个技术深度的潜水。这一个是我相信的做雄心勃勃的工作的神话,以及那些神话中有多少是不真实的。https://www.deco.uctconf.com/2018/julia-evans-build-.-.”>解构记录</a>。他们真的在逐渐地抬起头来。https://www.deconstructconf.com/2018”>解构2018年的其他会谈</a>,一般都很好。</p><h3 id="视频”>视频</h3><iframe宽度="540“身高=400“allowFullScreen="“框架顺序="0“莫扎罗全屏“SRC=https://..vimeo.com/./290376045”webkitAllowFullScreen = "“></iframe><h3 id="幻灯片”幻灯片</h3><p>像往常一样,这些天我用手画幻灯片。这很容易/更快,而且更有趣。</p><script异步类="speakerdeck-embed”数据ID=2 f0ba136493c428e8afc9085bca843f1”数据比率="1.77469670710572”SRC=//.erdeck.com/./..js”> < /脚本> < h3 id = "锌面钞票在《解构主义》杂志上发生的一件非常可怕的事情是,加里同意印制2300本杂志在会议上分发给大家。他们都被带回家了,这真是太好了:)</p> < ![CDATA[一个很棒的新的Python分析器:py-spy !] > 2018-09-08T13:09:05+00:00 https://www.jd-xw.com/blog/2018/09/08/an-awesome-new-python-profiler-py-spy-/ 前几天我了解到<href="https://twitter.com/benfrederickson”Ben Frederickson</a>已经编写了一个令人敬畏的新Python概要文件.<href="https://github.com/benfred/py-spy”> py-spy < / > !< / p > < p >需要类似的方法分析为< a href = "https://rbspy.github.io”> rbspy < / >,我今年早些时候使用的剖析器——它可以剖析任何正在运行的Python程序,它使用process_vm_readv来读取内存,它默认显示配置信息真正易于使用。< / p > < p >很明显,认为这是很酷。下面是剖析Python程序的样子:(gif从github README中获取)</p><p><img src=”https://..githubusercontent.com/benfred/py-spy/8ea64fae73b746a5167798d9dc469d395eb/./console_viewer.gif”></p><p>默认情况下,它具有这种伟大的顶级输出。默认UI有点类似于rbspy,butfeels对我更好的执行:)< / p > < h3 id = "你可以用pip安装它>你可以用pip安装它!</h3><p>他做的另一件非常好的事情是用<code>pip</code>使其可安装——您可以运行<code>pip installpy-spy</code>,并立即下载二进制文件!这是很酷的,因为尽管<code>py-spy</code>是一个Rust程序,显然,Python程序员习惯于安装带有<code>pip</code>而不是<code>cargo</code>的软件。https://github.com/benfred/py-spy”>README</a>他描述了在不要求用户安装Rust编译器的情况下用pip分发Rust可执行文件必须做的工作。</p><h3 id="pyspy-probably-is-more-stable-than-rbspy”比rbspy > pyspy可能更稳定!< / h3 > < p >的另一个好处<代码> py-spy > < /代码,我相信这只使用Python的publicbindings(如<代码> Python.h > < /代码)。我所说的“公共绑定”头文件你会发现在< a href = "https://packages.ubuntu.com/trusty/amd64/libpython2.7-dev/filelist”相比之下,libpython-dev</a>.</p><p>rbspy从Ruby解释器内部使用一组头文件。这是因为无论什么原因,Python在其头文件中都包含很多结构定义。</p><p>结果,如果你比较py-spy < a href = "https://github.com/benfred/py-spy/tree/master/src/python_bindings”>python绑定</a>到rbspy的<href="https://github.com/rbspy/rbspy/tree/master/ruby-structs/src”> < / > ruby绑定,您将注意到</p><ul><li>有办法减少Python绑定文件(Ruby为6vs 42)</li><li>每个文件要小得多(~30kbvsRuby为200kb)</li><ul><p>基本上我认为这意味着py-spy可能比rbspy更容易长期维护,因为rbspy依赖于不稳定的内部Ruby接口,即使它今天工作得相当好,Ruby的未来版本随时可能破坏它。</p><h3 id="一个生锈的生态系统的开始>Rust中剖析器生态系统的开始??:)</h3><p>我认为非常好的一点是rbspy&py-spy共享一些代码!这是<href="https://github.com/benfred/proc-map”>过程映射</a>从rbspy中提取并显著改进的板条箱。我认为这很棒,因为如果有人想为Perl或Javascript等其他语言创建一个py-spy/rbspy式的profilerin Rust,甚至更容易!原来是<href="https://github.com/adsr/phpspy/”> phpspy < / >是PHP,抽样分析器太!</p><p>我有一个秘密的梦想,我们最终可以拥有一套开源分析器,用于许多不同的编程语言,它们都有类似的用户界面。今天,每个分析工具都是不同的,而且很痛苦。</p><h3 id="还有-rbspy-has-windows-.-.”现在rbspy也支持窗口了!本还为<href=提供了Windows支持。https://github.com/rbspy/rbspy”> rbspy < / >,这是惊人的,py-spy从一开始就有Windows支持。</p><p>所以如果你想在Windows上配置Ruby或Python程序,你可以!</P> < ![CDATA[用Cloudflare workers编辑我的博客的HTTP头]]> 2018 - 09 - 03 - t09:55:19 + 0 http s://www.jd-xw.com/blog/2018/09/03/editing-my-blog-s-http-headers-with-cloudflare-./ 你好!过去6个月,我在这个博客上遇到了一个问题,每隔一段时间,一个页面就会像这样显示:</p><p><img src="/./blog-ugly.jpeg”宽度=150px></p><p>而不是呈现HTML,它只会显示HTML。并不是所有的时间,只是……有时候。</p><p>我从读者那里得到了很多关于这个的截图,这可不好玩!人们不想阅读原始HTML。我希望我的页面渲染!我终于(我认为)找到了解决办法,所以我想把我所做的写下来。缺失内容类型标题的神秘性>的神秘失踪的content - type头< / h3 > < p >基本上很明显这发生,原因是第一次有一个missingHTTP <代码> < /代码> content - type头。HTML页面的<code>Content-Type</code>应该设置为<code>Content-Type:text/html;charset=UTF-8</code>。您可以看到带有<code>curl-I</code>:</p><pre><code>$curl-I https://www.jd-xw.com/HTTP/1.1200OKDate:Mon的标题,03 2018年9月13:59:16GMTContent-Type:text/html;charset=UTF-8<===========这个oneContent-Length:0Connection:.-aliveCF-Cache-.:HITCache-Control:public,最大年龄=3600CF-射线:4548bc69fc6c3fb9-YULExpires:Mon,032018年9月14:59:16GMT.-.:Sun,02 2018年9月14:21:53 GMTStrict-Transport-Security:max-age=2592000Vary:Accept-EncodingVia:e4sX-Content-Type-Options:nosniffServer:cloudflare</code>/pre><p>但有时,内容类型标头将丢失。奇怪的!!!最令人困惑的是,这种事很少发生,并且通常一次只在一页上,这使调试变得非常困难。</p><p>我没有太多的精力来调试它,因为尽管我认为调试奇怪的计算机联网bug非常有趣,我最后一直在工作中做的是调试计算机网络缺陷,因此我也没有那么大的动力在家里做。这就是为什么这种情况持续了6个月:)</p><h3 id="why-is-the-content-type-header-missing”>为什么缺少Content-Type头部?因此,为什么content - type头有时失踪?我真的不知道!我的网站是bynearlyfreespeech.net和Cloudflare缓存,所以它在某处。:< / p > < ul > <李>我的高手写不是服刑的content - type头有时(没有多大意义)< /李> <李> CDN是删除content - type报头(更有意义)< /李> < / ul > < p >这不是第一次这样的事情发生了——2017年,<代码>内容编码:gzip < /代码>头< a href = "https://www.jd-xw.com/blog/2017/05/10/a-small-website-bug-story/”>神秘地消失了</a>,我从来没发现为什么会这样。但是!即使我不知道<em>为什么</em>这种情况正在发生,而且我对此没有任何了解,我仍然可以尝试修复它!</p><h3 id="things-i-tried”在讨论我认为有效的最新解决方案之前,我尝试了一些方法,这里有一些事情我triedthat不工作:< / p > < ul > <李>清理我Cloudflare缓存很多次(这将暂时解决这个问题,但是稍后它就会再次出现)</li><li>在我的主机上升级到一个新的“领域”,希望有一个不好的Apache服务器,或者一些我可以远离的</li><li>确保<code><!DOCTYPE html></code>是在我所有的HTML的开始,以防帮助浏览器弄清楚它是HTML(它没有)</li><li>从近乎自由的语言中切换出来免费测试带宽李李计划< / > < >电子邮件Cloudflare的支持,看看他们知道任何关于这李< / > <李>赚了很多<代码> < /代码>旋度直接请求高手写,看看我可以复制它(我不能)< /李> < / ul > < p >这些事情工作。关于这个问题,最令人恼火的是我不能可靠地复制它,所以很难向我的网络主机报告嘿,我定期遇到这个问题,但是你不能观察它,你只要相信我的话就行了,你能做些什么吗?“)< / p > < p >最明显的尝试,我还没试过的东西:< / p > < ul > <李>改变web主机S3或者Github页面(改变web主机是耗时的烦人!</li><li>不使用CDN,这样就不会缓存不好的HTTP响应(由于各种原因,我想继续使用CDN:)</li></ul><h3 id="what-worked-cloudflare-workers”工作内容:Cloudflare的工作人员</h3><p>在某个时候,Cloudflare有人非常友好地提出帮助我解决奇怪的问题,Cloudflare andsuggested我使用一个新功能:< a href = "https://www.cloudflare.com/products/cloudflare-workers”>cloudflare.</a>.</p><p>基本上Cloudflare.rs允许您在他们的服务器上为修改HTTP响应的每个HTTP请求运行自定义的Javascript位。开始的费用是每月5美元。这是有用的因为我< em > < / em >知道我想总有一个内容类型头。因此,如果我可以编写一些Javascript,如果没有Content-Type报头,则对响应报头进行编码,我可以解决这个问题!!!今天早上我醒来时,一群人发推给我说这个问题又出现了。我过去曾尝试过使用Cloudflare workers,但未能完全实现,但是自从我能在我的笔记本电脑上看到问题之后(非常好,如果我想测试后缀!!)我决定再试一次。my-javascript代码> < / h3 > < p >我的Javascript代码和今天早上我得到了Cloudflare工人努力修复<代码> < /代码> content - type头!!!所以许多小机器人让事情变得更好。</p><p>这是我的Javascript代码!它基本上只是检查<code>Content-Type</code>头是否丢失,如果是,创建一个新的不同的响应对象包含一个<代码> < /代码> content - type头。因此,我不仅修改了标题,还发现您不能修改aResponse对象上的标题,所以我需要创建一个新的。</p><p>为了调试目的,我还添加了一个<code>x-julia-test</code>头,因此,我知道任何带有<code>x-julia-test</code>的响应都会编辑它的<code>Content-Type</code>报头。event=>{event.respond.(handleRequest(event.request))}/***@param{Request}request*/async function handleRequest(request){const.=await fetch(request)=const content_type=..headers.get("内容类型如果!content_type){var headers=new Headers();for(..headers.entries()的var kv){headers.append(kv[0],KV〔1〕;}const url=request.url console.log("失踪的url内容类型”,url)headers.set(“内容类型,get_content_type (url)) headers.set (“x-茱莉亚试验,“编辑的标题!“..headers=headers,返回新的Response(..body,{status:..status,statusText: response.statusText,headers:headers}}return.}函数get_content_type(url){if(url.ends.(".”)){回报”图像/ svg + xml”}否则,如果(url.ends.(". png”)){回报”图像/ png”}否则,如果(url.ends.("JPG)){回报”图像/JPG}否则,如果(url.ends.("CSS“)){回报”文本/ CSS}否则,如果(url.ends.("“PDF”)){回报”应用程序/pdf”}否则{返回”文本/ HTML;charset=UTF-8}</code></pre><p>编写这个Javascript是一次非常愉快的经历——它们看起来就像一个Chromeconsole,您可以使用它来运行和预览代码。</p><h3 id="结果就是工作>结果:它工作!< / h3 > < p >现在,Cloudflare的缓存版本<href="https://www.jd-xw.com/blog/2018/09/01/.-.-you-can-./”>https://www.jd-xw.com/blog/2018/09/01/.-.-you-can-./</a>缺少它的Content-Type头部(尽管在本帖子上升时:)在安装新的Content-Type报头和我的测试<code>x-julia-test</code>报头之后,以下是我<code>curl</code>网站时的样子!</p><pre><code>$curl-I https://www.jd-xw.com/blog/2018/09/01/.-.-you-can-./HTTP/1.1200OKDate:Mon,2018年9月3日14:20:11 GMTContent-Type: text / html;charset=UTF-8<===我添加了这个!连接:.-aliveSet-Cookie:u cfduid=d837320682d5cd76dc435ad3be07487ae1535984411;到期=周二,03-9月19日14:20:11格林尼治标准时;路径=domain=.www.jd-xw.com;HttpOnlyCF缓存状态:HITCache-Control:public,信息= 3600 cf-ray: 4548 db09caf63f95-yuletag: W /”46 d9 - 574 e4257a46f6”expect-ct:信息= 604800,报告https://.-uri.cloudflare.com/cdn-cgi/.on/.-ct”到期:Mon,2018年9月3日15:20:11 GMTstrict-transport-security:信息= 2592000不同:Accept-Encodingvia: e2sx-content-type-options: nosniffx-julia-test:编辑标题!< = = = =我说这个!服务器:cloudflare < /代码> < / pre > < p >,如果我在Firefox加载这个页面,我可以看到,这些头是由我的Cloudflare工作者编辑的(参见底部的<code>x-julia-test</code>头)。整洁!< / p > < p > < img src = "/./firefox-headers.png”> < / p > < p >,最重要的是,网站显示正常,而不是一堆原始HTML,这就是重点。太神了!</p><h3 id="记录-http-requests-.”>记录HTTP请求和响应</h3><p>我还尝试通过将向其发出的所有POST请求都记录到其他服务器来向请求工作者添加一些日志记录,跟随(<href=)https://developers.cloudflare.com/./write-./debugging-tips/”>这里的指令</a>).</p><p>当工人看到200缺少Content-Type报头时,我正在记录所有请求和响应。(还有大约304个响应缺少Content-Type报头,但这'snormal !)。还没发现什么,但是也许最终会出现一些东西!</p><h3 id="云火工人整洁> cloudflare工人整洁的< / h3 > < p >我通常不谈论在这个博客上付费服务和这些工人肯定不是免费的(theycharge 5美元/月1000万请求/月)。但这对我来说是有用的,我认为这'sreally酷能够编写任意Javascript代码,修改我的博客所有的httpresponse !</p><p>这绝对是黑客——在每个HTTP请求上运行定制的javascript是解决某个地方可能出现的某种服务器配置问题的极端方法。但它帮助我解决问题,直到我决定花时间迁移网络主机或者其他,所以我happywith。支付60美元/年绝对值得我去解决问题,不必现在就花时间迁移到不同的主机:)</p><p>查看CDN总体情况,Fasty提供了一个看似相似的特性,称为<href="https://www.fastly.com/products/edge-sdk”>边缘SDK</a>,允许您编写VCL("清漆配置语言)。不过我还没用过。 < ![CDATA[谁支付教育开发人员?] > 2018 - 09 - 01 - t15:10:44 + 0 https://www.jd-xw.com/blog/2018/09/01/who-payto-.-developer-/ 我一直在考虑开发人员教育(还有,具体地说,对已经工作了几年的专业开发人员的教育)大约在去年。在上一篇文章中我谈到了.<href="https://www.jd-xw.com/blog/2018/09/01/.-.-you-can-./”>如何教自己艰苦的事情</a>,这是我学到很多事情。< / p > < p >但是!即使你自己学习,你依赖各种各样的资源!Someexamples地方我学到的东西是:< / p > < ul > <李>一些真正伟大的编程书< /李> <李> < /李> <李>会议谈判数以百计的博客文章(我订阅< a href = "https://gist.github.com/jvns/4bf4113d6480d181b2d3d491c1126f25”>数十个编程博客</a></li><li>Twitter</li><li>meetups</li><li>Slackgroup</li></ul><p>所有这些东西(tweet,博客文章,会议谈话,等)需要时间,还有很多是免费赠送的。谁支付所有这些工作呢?这是一个粗略的分类法!如果你还有更多需要补充的(或者你认为正在从事适合这些范畴的伟大教育工作的人的例子!))我很想听听。https://twitter.com/b0rk”>在twitter</a>.</p><h3 id="产品销售公司>销售产品</h3><p>的公司,向人们传授编程知识的一种常见的赚钱方法是developeradvocate”.我认为这是一个很酷的东西!基本上,许多公司已经意识到,销售技术产品的一个好方法是向人们解释产品背后的技术概念,让他们能够真正理解。一个很好的例子就是谷歌云Kubernetes——很多谷歌开发者将写博客文章/ explainingKubernetes给伟大的会谈。不管你最终是否使用Googleproducts,这些谈话通常都是很有帮助的。但是,Google从中得到的是——如果更多的人理解Kubernetes,然后作为副作用,他们也理解谷歌的Kubernetes-a s-a-service平台,而且他们可能对使用它的优点更加兴奋。</p><p>就我个人而言,我认为这是伟大的——开发人员的拥护者通常是伟大的程序员和伟大的学员,他们得到报酬去做他们关心的事,他们能得到关于各种复杂技术事物的免费、高质量的信息。太棒了!不过,也有一些缺点,例如,Google Cloud开发者的拥护者显然会关注与Google Cloud相关的主题:)</p><h3 id="个人-在暴露中得到报酬的人个人博客帖子/会议讨论所属于的类别。这就是经济学——你整理了一些很棒的博客/谈话,也许你所在行业的人现在认可/尊重你,并且更可能想雇用你!<p><p>我创建这个博客的初始动机,5年前,我是不是想找一份比以前更好的工作?为了吸引读者,我向黑客新闻发布了很多文章。我认为这很有帮助!无论如何,我现在确实找到了更好的工作:)</p><p>显然,这些还不是我的动机——也许我一直在这里写作的主要原因是,当人们告诉我我的博客帖子帮助他们学到了一些东西时,我发现这是值得的。但这不是唯一的原因!一些副作用:< / p > < ul > <李>对我来说更容易得到问题的答案我对科技< /李> <李>我知道对我来说会更容易得到面试未来的工作,令人放心的是,在会议上发表演讲帮助我建立了一个大家网络,我可以从</li></ul><p>提问/了解这个行业,所有这些对我的职业生涯都是非常有用的!例如,就在上周有人读我blogemailed我的关于一个超级有趣的工作,我们有一个很棒的谈话,对我新东西的种类存在于计算机网络的工作!如果我没有把我所学的知识写在博客上,那肯定不会发生:)</p><p>所以写博客/在技术领域演讲是对你未来工作机会的长期投资,而且是可以得到回报的!</p><h3 id="companies-who-make-money-through-recruiting”>那些通过招聘</h3><p>来赚钱的公司,我指的是<href="https://.se.com”>递归中心</a>一直。他们不直接制作教育材料,但是他们最有趣的地方之一,作为一名开发人员,我深知水平。免费参加,他们通过招聘赚钱。我找到了我现在的工作,公司聘请了我他们第一年工资的25%支付。我什么也没付给他们。如果你要雇用善于学习的人,我建议通过RC招聘——你可以在<href=找到更多。https://www..se.com/.)”>https://www..se.com/.)</a></p><h3 id="向开发商推销教育的公司>向开发人员销售教育的公司</h3><p>下一桶是直接向开发人员销售教育材料的公司。</p><p>我认为这种情况的各种例子都很有趣:</p><ul><li><href="https://lwn.net/”>Linux周报</a>,它提供每月7美元的订阅费来获取最新的图片。我真的推荐订阅。太棒了。</li><li><href="https://launchschool.com/”开办学校</a>有一个每月200美元的课程,目的是让你获得更好的软件工作。</li><li>href="http://sfpc.io/”>诗歌计算学院</a>,这是纽约市艺术与技术交汇处的一所很酷的学校。10周的课程大约要5000美元。</li><li><href="https://egghead.io/”>egghead.io</a>,一组Javascript视频教程,每月40美元</li><li>O'Reilly的书和视频https://www.safaribooksonline.com/”>狩猎</a>).</li><li><href="https://www.lynda.com/”>琳达</a>,<HREF=https://www.udacity.com/”>Udacity</a>,<HREF=https://www.udemy.com/”>Udemy</a>,<HREF=https://www.coursera.org/”>Coursera</a>都有在线课程</li><li>所有各种编码训练营</li></ul><h3 id="向开发商推销教育的个人>向开发人员销售教育的个人</h3><p>我将从向开发商出售教育的公司因为thesebusinesses似乎是不同的。O ' reilly /琳达/ Udacity / Udemy basicallyeverything相关信息卖给编程。通常个人窄得多专注,很酷。</p><ul><li><href="https://www.rails..com/”>Nate Berkopec</li><li><href=的《钢轨性能完整指南》</a>。https://www.rubytapas.com/”>Ruby Tapas</a>,Avdi Grimm</li><li><a href="https://mwl.io/nonfiction”> < / >的书,迈克尔·卢卡斯的系统他自行出版的许多作品有</li><li><href="https://www.destroyall..com/screencasts”>销毁所有软件</a>加里·伯恩哈特</li><li><href="https://shop.bubble..io/”>气泡分类杂志</a>,的计算机科学杂志的艾米Wibowo < /李> <李>出版书< a href = "https://compilerbook.com/”>用Go</a>或其他许多</li></ul><p>编写编译器,自助出版绝对属于这一类!在2018年,这似乎是一种比传统出版物更有效的从教学中赚钱的方法。的编程书籍”>编程书籍</h3><p>我将主要不讨论传统出版商的编程书籍,因为即使思想也很重要,他们似乎生活在一个复杂的地方免费借书证和“赚钱”我不完全明白。例如<href="https://..com/@rothgar/the-.-of-.-a-.-book-689d0c12fe39”>写一个技术书的经济学< / >作者说他约23美元/小时500小时的工作。我不知道这是否是典型的。</p><p>如果人们通过与传统出版商合作出版编程书籍,实际上赚的钱比每小时20美元还多,我很想知道!这件事我还不太了解。</p><h3 id="sell-training-to-companies”将培训卖给公司</h3><p>将培训卖给<em>公司</em>是一种非常符合逻辑的模式——个人可能不愿意花2000美元来上课,但是公司可能愿意支付2000美元/人10-personin-person类!这里有一些我在这方面知道的例子:</p><ul><li><href="https://heptio.com/services/./”>Heptio出售Kubernetes培训</a></li><li><href="https://jepsen.io/services”>Jepsen</a>提供<href="https://github.com/aphyr/distsys-class”> < / >分布式系统培训,李李看起来惊人的< / > < > < a href = "https://www.sandimetz.com/./”>Sandi Metz</a>教一个面向对象的设计类</li></ul><p>这里可能还有很多我不知道的东西。</p><h3 id="我应该为更多的学习材料付费我应该付更多的学费吗?所以!反思一下,我们看过的类别是:< / p > < ol > <李>开发者想要学习支付(投资于他们的知识)< /李> <李>开发者想要教支付(分享知识/建立他们的网络/构建专家著称)< /李> <李>公司支付(教育员工)< /李> <李>公司销售产品支付(教育他们的未来客户)< /李> < / ol > < p >基本上所有的自由生活在类别# 2或4号,这是我读到的大部分内容。那真的是我想做的,但是呢?一样我喜欢所有的博客我读我觉得乐在其中有点奇怪,我主要学习自由的来源,而且那里的激励结构与制作真正优秀的学习材料并不一致。</p><p>我最近最喜欢学习的来源之一是书<href="http://man7.org/tlpi/”>linux编程接口</a>,不是免费的http://man7.org/tlpi/purchase.html”>70美元左右</a>)。与阅读有关Linux的Stack Overflow的答案相比,它是一个更加可靠、有用和有效的来源。但是,并非我买的所有书都善于利用时间阅读,所以我觉得这有点棘手。</p><h3 id="on-writing-for-free-writing-for-money”>关于免费写作/为钱写作</h3><p>我在考虑的另一个原因,很明显,就是我https://www.jd-xw.com/zines”>开始销售我的一些杂志< / >最近,我试图弄清楚我是否想要改变我到底适合整个生态系统的位置。我对我现在所处的位置相当满意(写博客很有趣!我会遇到很酷的人!在网上写文章,任何人只要点击一个链接就可以阅读,这很棒!)所以更改是ofinteresting /吓人。我们会看看会发生什么!</P> < ![CDATA[如何教自己艰苦的事情]] 2018-09-01T10:32:00+00:00 https://www.jd-xw.com/blog/2018/09/01/.-.-you-can-./ 这个博客主要是关于学习计算机编程/系统的。这些帖子中大概有70%是以某种方式讲述我学到的东西,以及为什么它们令人兴奋。</p><p>但是你如何教自己一些艰苦的事情呢?我在前面已经谈论过关于< a href = "https://www.mindsetworks.com/science/”>增长心态</a>,这是关于取代信仰我不擅长X”用“我还没学过X”积极的态度真的很重要,但IMO本身并不足以学习艰苦的东西。学习是一种技能,需要很多工作要做好。所以这篇博文是关于我长期从事的特殊学习技巧的。:< / p > < ol > <李>确定哪些你不理解(可能是最重要的一个)< /李> <李>有信心在你的知识< /李> <李> < /李> <李>提问做研究李< / > < / ol > < h3 id = "“学什么就学什么样”学习如何学习是什么样子的?在我们开始之前,我想谈谈学习如何学习会是什么样子。我不爱吃东西,但我觉得以下几点对我很有帮助:</p><ul><li>,我做了7年的数学课程叫做< a href = "https://www.kumon.com/about-kumon/kumon-method/self-learning”>Kumon</a>,它真正专注于独立学习数学。我学会了所有的小学和高中数学。(从乘法代数,微积分)。我认为这很重要,我要感谢我的妈妈(她已经帮助孩子们独立学习超过20年了!)!为了确保我小时候学得很好。</li><li>取得了纯数学学位,在那里,对于我了解的和不理解的东西有一个清晰的感觉是超级重要的</li><li>去了href="https://www..se.com/”>递归中心</a>,它是一个由自我指导学习者组成的社区</li><li>,我是一名程序员,当我们知道自己教学新事物是一个重要的技巧:)< /李> < / ul > < p >我想其他方法人经常得到更好地教学本身是:< / p > < ul > <李>做博士学位(也是必要的)< /李> <李>是在家上学/去学校学习更self-led < /李> < / ul > < p >似乎有点奇怪把”学习一些数学独立当你8”旁边攻读博士学位但是,我独自计算分数感觉就像是一个探索新想法的成年研究员一样有用的心理纪律。</p><p>我将在本文的其余部分避免谈论数学,因为今天我大部分时间都在学习编程思想,不是数学思想。让我们来谈谈学习技巧吧!</p><h3 id="学习-技能-识别-你不理解的学习技能:识别你不懂的东西</h3><p>我认为这是最重要的学习技能。这就是翻译的技巧我很困惑,我不明白“我有一个关于X的具体问题例如,去年冬天我学习锈病的时候,我对参考书和借书感到很困惑。我花了一段时间才弄明白为什么,但最终我意识到我不知道下面这些问题的答案https://www.jd-xw.com/blog/2017/11/27/rust-ref/”《锈》中有什么参考书?< / >)< / p > < ul > <李>的<代码>和< /代码>符号铁锈到底意味着什么?李李< / > < >我怎么能告诉如果一个变量在堆栈和堆上分配是生锈?它总是可能说出来吗?我怎样才能避免一生都在我的锈蚀结构上?< /李> < / ul > < p >一旦我明白的答案,我对如何使用引用和借用有更强的理解,并且对于如何编写Rust代码不再感到困惑。</p><h3 id="identifying-what-you-don-t-understand-is-important-but-hard”识别你不理解的东西很重要(但是很难)</h3><p>擅长这可是一件大事!如果我不善于弄清楚我困惑的是什么,然后我要么需要:</p><ul><li>找个人为我识别那些东西<.>这不太可能发生。</li><li>找一个课程/博客帖子/书,其中有人已经把令人困惑的东西分解成适合我的部分</li><li>只是决定不去学习/困惑的东西(这将是一场灾难!)!李)< / > < / ul > < p >,尽管我认为我现在很好,我还是觉得身体不舒服我困惑于X”对X需要工作到具体问题。例如,我只想到这些问题aboutRust引用3年之后我第一次使用生锈。之所以花了这么长时间,是因为我不得不决定坐下来,注意我发现的困惑,把注意力放在弄清楚我困惑的事情上。那需要时间!但是,我确实认为这是随着时间推移你可以变得更好的东西。与过去相比,我更擅长于分解那些让我对编程感到困惑的东西,并且更擅长于解开自己。</p><h3 id="学习技能,对自己的知识有信心学习技能:对自己的知识有信心</h3><p>确定自己<强>做什么</强>理解是IMO,这与确定自己不了解的内容同样重要。例如,我不太了解网络。我100%知道的一件事是这里有65535个TCP端口。这绝对是事实。TCP报头中的src /桌子端口字段are16位(2 ^ 16 = 65536),因此,没有空间容纳更多的端口。</p><p>在试图解决棘手的问题时,拥有我真正有信心的知识片段非常重要。例如,想象一个程序打印出来1823832港在一个日志。这并不是因为有秘密的港口号码可以大于65535,我刚才误解了!那是因为程序中有一个bug,没有端口1823832。这是一个愚蠢的例子,但是,我需要一直调试复杂的问题,而且要花大量的时间来猜测我确实知道的事情。</p><p>花一点额外的时间来获取您非常肯定的知识。有65535个端口,维基百科是这么说的并使它完全铁化("这是因为端口字段TCPheader只有16位”)“超级有用,因为有很大的区别我97% surethis是真的”和“我对此百分之百肯定,我再也不需要质疑了。”.据我所知,100%正确的东西更容易让人信赖。</p><h3 id="学习技能问问题学习技能:提问</h3><p>下一个技能是问问题.这是关于采取你已经确定的东西,你混淆(.)TLS 1.3和1.2有什么区别?“然后把它们变成一个人的问题。</p><p>这里我将链接到一个我以前写过的帖子,叫做<href="https://www.jd-xw.com/blog/good-questions/”>如何问好的问题</a>.</p><p>对我来说,问问题的最难的部分实际上是弄清楚我做了什么,不知道什么。我认为,这里还有一些有趣的技巧:</p><ul><li>查找松弛组/IRC频道/电子邮件列表,它们可以帮助您</li><li>邮件列表礼仪</li><li>在堆栈溢出上提问(我从未成功过)</li><ul><h3 id=。学习技能做研究学习技能:做研究!这是关于:</p><ul><li>擅长Googling</li><li>了解你所在地区最好的文档在哪里</li><li>阅读邮件列表档案</li><li>拥有/查找有你需要的信息的书籍。并非所有信息都是关于StackOverflow的!如果我对Linux概念感到困惑,我经常会想到<href="http://man7.org/tlpi/”>linux编程接口</a>而不是Googling.</li><li>在Google/./docs无法回答您的问题时读取源代码</li></ul><p>我不知道任何好的技术研究指南,虽然我认为这可能是一件非常有趣的事情——关于不同领域的信息可以在戏剧性的不同地方(手册页?书吗?邮件列表?并且一些文档比其他文档要好得多。你如何了解你所在地区信息的分布情况?</p><h3 id="学习-技能-识别-被困惑-意味着-你-将要-再学习-某事”学习技巧:认识到困惑意味着你将要学习一些东西</h3><p>最后一件对我来说很重要的事情就是当我对某些东西感到困惑时要意识到,而不是感觉不好哦不!我不知道这个东西!灾难!“)认识到这是一种正常的感觉,它仅仅意味着我要学习一些东西!我喜欢学习!真有趣!如果我感到困惑,这通常是件好事,因为这意味着我不会停滞不前。这就是我的方法:</p><ul><li>认识到我困惑了</li><li>找出我所困惑的主题是</li><li>把这种困惑变成具体的问题</li><li>问某人或研究以得到答案</li><li>我学到了新东西!!万岁!当然,我不做,< em > < / em >时间我困惑——有时我只是注意”啊,我对X感到困惑,也许我会弄清楚总有一天但不是今天.也没关系!学习是一项终身工程:)</p><h3 id="在学习技能上努力会产生巨大的差异>学习技能能产生巨大的差异</h3><p>如果我不投资于学习新事物,我真的不认为我能有程序员的职业。几乎我所做的一切在我的日常工作是我自己学的东西,我最近学会的大多数东西(最近2-3年)。因此,继续努力提高学习能力对我来说是有意义的。一些学习技巧我想更好地是:< / p > < ul > <李>找出适当的时候使用邮件列表来问一个问题,问rightquestions < /李> <李>把一块大/复杂的开源文档和决定哪些信息是init,什么不是李< / > <李>使用开源松弛/ IRC组织有效的< /李> <李>发现伟大的参考书,我可以依靠< /李> < / ul > < ![CDATA[我开了一家公司!] > 2018-08-14T07:34:06+00:00 https://www.jd-xw.com/blog/2018/08/14/i-started-a-company-/ 我释放后<href="https://gum.co/bite-size-linux”< / > >咬大小Linux今年5月,出乎意料的是,它的销量比我想象的要多!(截止今天,2600份!!!)。如果你买了,谢谢您!这太鼓舞人心了,让我想写出更有趣的杂志点子:)你们当中已经有1300人买了<href="https://gum.co/bite-size-command-line”>比特大小命令行</a>,这同样令人吃惊。</p><p>卖东西的唯一缺点是——赚钱很复杂!我需要跟踪收入,以便缴纳所得税,我需要为加拿大的销售缴纳销售税!跟踪费用reallyannoying !因此,我决定成立一家公司(就在一边,我仍然在同一个地方工作,管理逻辑学。我对此非常兴奋,所以我想解释一下原因。参与创业的公司创办一家公司涉及什么?< / h3 > < p >我想简要使用< a href = "https://stripe.com/atlas”>Stripe Atlas</a>(这是一个很酷的方法,可以很容易地成立一家美国公司),但我住在加拿大,所以我决定成立一家加拿大公司。我雇了一个律师和一个会计做所有的文书工作。现在我有: </p><ul><li>一家加拿大公司!李李< / > < >销售税和QST号码给我用来支付销售税!法人银行账户和信用卡!< /李> < / ul > < p >即使我聘请了一位律师/会计师帮助我,从开始到结束用了8个星期,主要是因为我在旅行/忙。</p><h3 id="容易付钱的人>更容易支付人!< / h3 > < p >公司拥有一个最令人兴奋的事情之一是,它更容易雇佣人来帮助那么我的杂志!我可以用公司的钱费用各种各样的东西。例如:</p><ul><li>我喜欢和别人合作并为他们的工作付钱。这让事情变得容易了——美妙的凯蒂·西洛·米勒和我刚刚宣布了一项合作,我们在这里说明<href="https://ohshitgit.com/”哦,狗屎,吉特!</a></li><li>它简化了为我的封面雇用插画家(也许我可以得到更多的事情说明?)!李李)< / > < >我和税收可以聘请会计师为< /李> <李>更易于也许打印&船杂志的人(因为它简化了诸如潜在kickstarter税),如果有必要,我可以聘请一位知识产权律师来咨询有关知识产权/版权的建议。李李< / > < >我可以更容易地投资于设备(如,我想再买一个花哨的彩色激光打印机甚至一台机器帮我主要杂志)< /李> < / ul > < h3 id = "it-s-easier-to-keep-track-of-money”>跟钱比较容易!<h3><p>之前,我所有的杂志收入都和我的个人收入混在一起了。没事的时候,没关系,但是现在有更多的地方可以分开了。能够用公司信用卡购买公司物品,我非常兴奋。</p><h3 id="加a公司杂志费率>为杂志添加公司费率</h3><p>另外一件让我兴奋的事情是——对于我最后的两本杂志,我添加了一个”公司法人它允许你花100美元在工作中使用一本杂志。到目前为止,已有47家公司买下了它(多谢),这真是太神奇了。还有一家公司购买了500美元的版本,用于公司1000名员工!< / p > < p >我应该增加那些价格有可能在未来,但这是一个开始!</p><h3 id="some-questions-about-running-a-zine-business”>关于经营一家杂志企业的问题</h3><p>销售杂志还有很多方面是我将来感兴趣的——将写作杂志重新定义为小生意”而不仅仅是有趣”提出各种有趣的问题,比如:</p><ul><li>如果我出售我的杂志,人们阅读我的杂志会多于或少于免费阅读我的杂志吗?销售杂志会不会因为存在制造更普遍利益的东西的动机而更难制造奇特的利基杂志?有兼职工作容易做高质量的工作吗?李李< / > < >人们更看重工作如果不是免费的吗?我现在卖10美元的杂志,但是,对于许多人来说(无论是在美国还是在美国之外),10美元都是一大笔钱。我怎么让他们访问?李李< / > < >有更好的方式向企业出售杂志吗?免费赠送真正好的作品是否规范了工作的观念应该给予免费吗?这是否会损害那些出售自己作品的人?</li></ul><p>在<href=可以找到的所有现有杂志https://www.jd-xw.com/zines”>https://www.jd-xw.com/zines</a>将保持免费,当然可以:)我不太确定更新的杂志。我在做实验!(<HReF=)https://gum.co/bite-size-linux”>咬大小Linux < / >和< a href = "https://gum.co/bite-size-command-line”>比特大小命令行</a>都不是免费的)关于那些问题的更多信息,正如我了解到的:)</p> < ![CDATA[一些最近的播客]] 2018 - 08 - 11 - t09:05:17 + 0 https://www.jd-xw.com/blog/2018/08/11/a-.-.-podcasts/ < p >在过去几个月我在几个播客。也许你会喜欢他们!<李> < / p > < ul > < a href = "https://softwareengineering..com/2018/06/05/profilers-with-julia-evans/”>软件工程日报</a>,谈论rbspy以及如何使用profiler</li><li><href="https://twit.tv/shows/floss-weekly/episodes/487”< / >棉花>每周,再说一遍关于rbspy。他们告诉梅的客人问< em > < / em >最的问题,我把它当作赞美:)</li><li><href="https://hanselminutes.com/643/learning-how-to-be-a-wizard-programmer-with-julia-evans”>与Scott Hanselman Hanselminutes < / >写杂志/教学/学习< /李> <李> < a href = "https://www.codenewbie.org/podcast/how-does-the-internet-work”>CodeNewbie</a>关于计算机网络和互联网的工作原理(3月份起)</li></ul><p>我发现播客有点可怕——我的主要媒介是博客/写作,当我以一种令人困惑的方式说话时,它让我编辑出来。在播客上也不能那样做!他们似乎已经outokay无论如何,我认为练习即兴谈话主题是有用的:)< / p > < p >一个令我惊讶的事播客是播客都非常关心您使用什么recordingequipment,这很有道理!结果证明音质很重要。</p><p>我玩得很开心——播客比谈话更容易组织(没有旅行!)现在我有了一个漂亮的播客麦克风。这意味着,如果我愿意,将来我可以记录更多的东西。我梦想着制作有趣的动画视频,但那可能不会很快实现。 < ![CDATA[新杂志:比特大小命令行!]] > 2018-08-05T07:56:00+00:00 https://www.jd-xw.com/blog/2018/08/05/new-zine--bite-size-command-line/ 我上周发行了一本新杂志!它被称为“咬大小命令行”,它解释了basicsof很多Unix命令行工具!通过写作,我学到了一些有用的新东西,我希望你也一样。你可以在<href=10美元买到https://gum.co/bite-size-command-line”>https://gum.co/bite-size-command-line</a>。这是<href=的续集https://gum.co/bite-size-linux”>Bite Size Linux</a>,我在四月份发布的。</p><p>如果你想了解其中的内容,我一直在Twitter上发布正在进行的漫画。你可以<href="https://twitter.com/i/moments/1026078161115729920”>在Twitter上看到其中的一些</a>.</p><p><href="https://gum.co/bite-size-command-line”> < img src = "https://www.jd-xw.com/./bite-size-command-line-..png”> < / > < / p > < p >目录:< / p > < p > < a href = "https://gum.co/bite-size-command-line”> < img src = "https://www.jd-xw.com/./bite-size-command-line-toc.png”> < / > < / p > < h3 id = "why-i-m-excited-about-this-zine”>我为什么对这本杂志</h3><p>感到兴奋?我觉得没有那么刺激——我想无论如何,我知道命令行工具,我一直在使用Linux 15年”. < / p > < p >,我学会了不少有趣的新把戏!我了解到:</p><ul><li>bash进程替换(<code>diff<(ls)(ls-a)</code>),它允许您避免创建临时文件</li><code>.-h</code>("人类的那种”它允许您对<code>du-sh</code>的输出进行正确排序</li><li>选项<code>w</code>到ps将显示所有命令行参数,和f <代码> < /代码>将向您展示一个进程树(!!</li><li>还有一堆更好看的小道消息!</li></ul><h3 id="教unix命令行少试错>以较少的尝试和错误来教unix命令行</h3><p>,但我特别高兴的是,这可能有助于<.>初学者</.>学习Linux!大多数命令行工具都有一个TON命令行参数,和通常很难告诉readingthe手册页哪些是重要的知道哪些几乎没人使用。我认为很多这种说法经常被口头传承下来,这使得它更难学习如果你不知道manycommand线用户。(如果这是你,<HREF=https://tldr.sh/”>https://tldr.sh/</a>也是一个很酷的资源!因此,这本杂志的目标基本上就是帮助你,更有经验的朋友是usingthese工具,可以告诉你哪个部分是最重要的。< / p > < ![CDATA[IP地址和路由]]> 2018-07-24T20:35:47+00:00 https://www.jd-xw.com/blog/2018/07/24/ip-addresses-routing/ 你好!明天我将在工作场所举办一个关于简陋IP地址的研讨会,下面是一些关于IP地址和Linux上的IP路由如何工作的注释!之所以出现这种情况,是因为我的团队中有人指出,IP地址实际上有很多,尽管这看起来是一个简单的概念,他们说他们想学更多。此行!这篇文章只是关于IPv4,因为我还没有使用过IPv6。</p><h3 id="IP报头中的内容在IP报头>是什么?</h3><p>几乎计算机发送和接收的每个数据包(除了某些例外,如<href="https://en.wikipedia.org/wiki/Address_Reso._Protocol”>ARP分组</a>)具有IP报头。</p><p>有<href="https://en.wikipedia.org/wiki/IPv4#Header”> 14 IP报头字段< / >。大多数人唯一需要了解的3个重要信息是:</p><ul><li>源IP地址</li><li>目的地IP地址</li><li>TTL(参见:<href=)。https://www.jd-xw.com/blog/2013/10/31/day-20-scapy-and-traceroute/”>traceroute是如何工作的</a>)</li></ul><p>您将注意到,在IP报头中有一个端口.<.>不是</.>!haveports TCP和UDP协议,但生活在一个不同的网络层。(为什么TCP端口8080和UDP端口8080不同港口,可以运行不同的服务!</p><p>还有一个“protocol”字段告诉您协议(如TCP/UDP)。</p><h3 id=”what-s-a-subnet”>什么是子网?<h3><p>IP地址通常被分组成<.>子网</.>。了解子网最有用的事情是理解CIDR符号.——.<code>168.23.0.0/8</code>的意思”所有与分组<code>168.23.0.0</code>具有相同前8位的分组.在本例中,这将是<code>168.*.*.*</code>,或者从168开始的任何分组(因为IP地址中的4个数字中的每个是8位)。</p><h2 id="当我在计算机上创建数据包时,会发生什么>当我在计算机上创建包时,怎么了?假设您创建了一个IP地址为1.2.3.4的包。它去哪里?事实证明,这不是一个超级简单的问题——可能有至少3系统能够影响你的包< / p > < h3 id = "system-1-the-.-table”>系统1:路由表</h3><p>最可能影响目的地为<code>1.2.3.4</code>的新数据包的系统是<.>路由表</.>。OnLinux您可以使用<code>ip路由列表表查看路由表。以下是我笔记本电脑上的可路由器看起来的样子:</p><前>>代码>$ip路由列表表默认通过192.168.1.1dev wlp3s0 192.168.1.1dev wlp3s0原型静态度量600169.254.0.0.0/16dev docker0 dev docker0范围链接度量1000连接172.17.1.0/16dev docker0 dev docker0原内核链接1000链接1000链接172.172.17.17.0.0.0/16dev docker0原内核范围链接172.0.16dev docker0.16dev docker0原内核范围链接172.1.16dev docker0.16dev docker0.16dev docker0原内核范围链接172.16dev docker0.16192.168.1.170公制600广播127.0.0.0.0dev lo表本地原内核作用域链接src 127.0.0.1本地127.0.0.0/8dev lo表本地原内核作用域主机src 127.0.0.1</code>/pre><p>这些路由中的每一个都有:</p><ul><li>a<.>子网</.>(127.0.0.0.0.0/8,172.17.0.0/16,etc)</li><li>a<.>网络设备</.>(我的无线卡<code>wlp3s0</code>,虚拟回送设备<code>lo</code>,virtualdocker设备<code>docker0</code>,etc)</li><li>可能类似于<code>通过192.168.1.1</code>,这意味着将所有这样的数据包发送到IP192.168.1.1的MAC地址,恰好是茱莉亚的路由器”</li><li>一堆我不太理解的东西(<code>metric 600</code>,<code>作用域链接</code>,<代码> protokernel > < /代码,等)。不了解这些东西意味着什么还没有伤害到我。</li></ul><p>需要注意的主要事情是子网和网络设备。所以<代码> 192.168.1.0/24 devwlp3s0 > < /代码的意思是“发送数据包的<代码> 192.168.1.0/24 > < /代码范围的<代码> wlp3s0 < /代码>网络设备。那是notso复杂!如果您正在进行容器联网,那么了解一点Linux计算机路由表是很有用的,因为使用容器,您将得到一个或多个虚拟网络设备(如<code>docker0</code>),这些数据包最终将被发送到.</p><p>路由表就是这样!</p><h3 id="system-2-iptables”>系统2:iptables</h3><p>已经阅读了上述内容,您可能认为分组的路由方式是:</p><ol><li>它们进入您的计算机</li><li>Linux查看路由表,并决定将哪个网络设备发送到</li><li>这就是</li><ol><p>这通常是正确的,但不总是!!两步之间有一大堆秘密。预路由,“输出“,“postrouting)”Linux)说:“嘿,iptables,要更改这个packethere吗?“.当这种情况发生时,iptables可以将数据包上的源或目的地IP地址更改为不同的地址。</p><p>我使用这个命令的两个主要原因是<.>DNAT</.>(?)目的地NAT”)和<强> SNAT < /强> (“NAT源”</p><p><.>目标NAT</.></p><p>让我们从目标NAT开始!这里显示的一个地方是这个名为<href="的程序中。https://github.com/jtblin/kube2iam”>kube2iam</a>。kube2iam是在主机上运行的程序,它假装是AWS元数据端点(<code>169.254.169.254</code>)。为什么你现在想要这个并不重要,但是,kube2iam怎么能假装成这个IP地址呢?这将产出我们需要神奇地把这些包吗?怎么用?< / p > < p >原来169.254.169.254发送的数据包不得不去别的地方是totallypossible !iptables规则,他们建议使用:< / p > < pre > <代码> iptables \——附加PREROUTING \协议tcp \——目的地169.254.169.254 \——dport 80 \界面docker0 \表nat——跳DNAT \ \,到目的地YOUR_IP_ADDRESS:美元8181 < /代码> < / pre > < p >通常iptables规则让我想躲在沙发上,但是去年我已经有点怕他们。下面是这个程序的运行情况:</p><ul><li>它只适用于来自<code>docker0</code>接口(<code>--protocol tcp</code>)的169.254.169.254端口80的tcp包,<代码>——dport 80 > < /代码,<代码>——目的地169.254.168.254 > < /代码,<code>--接口内docker0</code>)</li><li>它发生在预路由阶段(在分配网络接口之前)</li><li>it(<code>--跳转DNAT</code>,<code>-表nat</code>,<代码>,到目的地YOUR_IP_ADDRESS美元:8181 > < /代码)< /李> < / ul > < p >这DNAT的事情是什么?基本上,这意味着Linux不会仅仅将数据包重写为169.254.169.254:80到$LOCAL_IP:8081,它还将修改应答数据包从LOCAL_IP美元:8081让他们似乎来自169.254.169.254。因此,从应用程序接收回复的角度来看,它不知道它没有与IP 169.254.169.254通信。谎言!!!< / p > < p >做所有这些工作,Linux需要跟踪连接状态和记住”嘿,这个回复包是这个DNATed连接的一部分,所以我需要重写它< / p > < p >唷。希望这有任何意义。</p><p><.>源NAT</.></p><p>源NAT类似于目的地NAT,除了改写目的地IP地址之外,它改写源IP地址!</p><p>我以前使用过源NAT的地方也用于容器材料——如果您有一组带有奇怪的虚拟容器IP地址的容器,将数据包发送到外部世界,你不能让他们使用这些IP地址!!外部世界(比如谷歌)对你的容器IP一无所知,并且无法回复这些数据包。所以你需要假装他们来自你的主人。</p><p>如果这是你,你可能想要一个iptables规则这样的在您的主机:< / p > < pre > <代码> iptables - t nat - POSTROUTING - o eth0 - j化装< /代码> < / pre > < p > <代码>化妆舞会< /代码>是一个混乱的说法”使用源NAT,并假装数据包来自该站点的IP地址.这个规则的作用是重写每个数据包上的源IP地址,以假装来自主机的IP。</p><h3 id="system-3-ipsec”>系统3:IPsec < / h3 > < p >我不会讲这么多(我写了< a href = "https://www.jd-xw.com/blog/2018/07/11/netdev-day-1--ipsec/”>那天IPsec < / >),但是,第三种方式是如果使用IPsec,那么包最终会到达奇怪的地方。您可以通过<code>ip xfrm</code>命令了解发生了什么。事实证明<代码> xfrm > < /代码代表“变换. < / p > < h3 id = "some-notes-on-aws-networking”>关于AWS网络的一些注释</h3><p>许多这些概念(路由表,NATIPSec)将它们的AWS网络模拟放在<href="https://aws.amazon.com/vpc/”> AmazonVirtual私有云(VPC) < / >——就像你可以控制如何packetsget路由到达时在您的Linux计算机上,您可以使用这些AWS工具来控制在VPC中从实例发送数据包时的情况。我看了看< a href = "https://aws.amazon.com/vpc/faqs/”今天VPC FAQ</a>非常好。</p><p>这里有一些非常粗糙的映射</p><ul><li>路由表:<href="https://docs.aws.amazon.com/AmazonVPC/.t/User./VPC_Route_Tables.html”>VPC路由表</a>,whichcontrols如何路由数据包在VPC < /李> <李> iptables / NAT来源:< a href = "https://docs.aws.amazon.com/AmazonVPC/.t/User./vpc-nat-gateway.html”>NAT网关</a>或<href="https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html”>互联网网关</a>。如果你变得AWS实例没有公共IP地址,您需要使用源NAT(出于与之前关于容器的.alked相同的原因)来与公共互联网进行通信。这在AWS中的工作方式是设置一个NATgateway/internet网关,它将为您重写数据包。</li><li>IPsec: <href="https://docs.aws.amazon.com/AmazonVPC/.t/Peering./Wel..html”>VPC对等</a>。这不是真的一样(对等连接只加密区域交通),但它确实给了你建立两个不同VPC之间私有联系的方法,我认为它在一些相同的VPC中有用。