正如上文所说,heStudio Authenticator是一个媲美于Google Authenticator的完全由我们(其实是我本人)开发的MFA令牌软件(小程序)。不同于其他类似软件,我们随着v1.1.0
的版本的推送同步带来了手表(Android)版本。我们利用手表的便携性,让你即使在未携带手机的情况下,也可以快速的通过随身佩戴的手表快速查看令牌。
正如上文所说,heStudio Authenticator是一个媲美于Google Authenticator的完全由我们(其实是我本人)开发的MFA令牌软件(小程序)。不同于其他类似软件,我们随着v1.1.0
的版本的推送同步带来了手表(Android)版本。我们利用手表的便携性,让你即使在未携带手机的情况下,也可以快速的通过随身佩戴的手表快速查看令牌。
我们很清晰自己产品的定位。为了不占用用户手机的空间,我们反其道而行之,不再开发手机APP版本,而转而使用微信小程序(其实是因为没有Mac电脑无法开发iOS版本)
但是,一些软件仅在Microsoft Store提供,我个人使用的就是LTSC的系统,如果要下载Minecraft的话就需要Microsoft Store。Microsoft Store提供了更严格的应用审核机制,可以保证安装的应用不会再你的电脑中乱搞。
下面介绍如何在LTSC版本的Windows上安装Microsoft Store
首先按下Windows+X,打开管理员模式的Windows Powershell
]]>但是,一些软件仅在Microsoft Store提供,我个人使用的就是LTSC的系统,如果要下载Minecraft的话就需要Microsoft Store。Microsoft Store提供了更严格的应用审核机制,可以保证安装的应用不会再你的电脑中乱搞。
下面介绍如何在LTSC版本的Windows上安装Microsoft Store
首先按下Windows+X,打开管理员模式的Windows Powershell
在命令框里面输入以下指令并运行
运行后会提示'C:\Windows\system32\ClipRenew.exe' 不是内部或外部命令,也不是可运行的程序或批处理文件。
但是通知中心已经提示了正在安装Microsoft Store.
首先,我们需要连接WiFi,连接WiFi就不用我说了吧。然后我们需要记住你的设备的IP地址,一会我们可以查到。
然后我们打开开发者设置,这对于日常搞机的一般问题不大(我小学五年级的表弟都会)。那不会也没关系,官方在文档里面已经给了详细的教程。
然后我们打开USB调试。
这就需要用到Web ADB技术了。该项目已经停止更新。
我们可以使用 https://adb.wearosbox.com/ 开启,该项目由FlyFish开发。隶属于Wear OS工具箱
首先我们需要打开手机上面的OTG开关(如果有),将OTG线与手机连接。用Chrome打开这个网页。
亲测部分手机(我的手机)在电量低于20%的时候无法连接OTG
需要用户在手表端授权允许使用ADB调试!!
这样就打开了WiFi调试,默认端口是5555
在刚才那个页面切换到IP查询,然后按照过程操作即可。
这里我使用Termux进行演示,你可以使用自己喜欢的工具。
打开Termux,使用该命令安装ADB工具包。
打开官网,下载安卓版本,复制下载路径。
刚才已经查看了IP地址,现在直接连接即可。
大功告成!!
]]>声明
该内容转载自 https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way
《提问的智慧》作者和翻译人员不提供该项目的服务支持!
原文:How To Ask Questions The Smart Way
翻译:王刚 yafrank@126.com
时间:2013年10月26日
声明
该内容转载自 https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way
《提问的智慧》作者和翻译人员不提供该项目的服务支持!
原文:How To Ask Questions The Smart Way
翻译:王刚 yafrank@126.com
时间:2013年10月26日
Thyrsus Enterprises
respond-auto@linuxmafia.com
版权©2001, 2006 Eric S. Raymond, Rick Moen
许多项目的网站在如何取得帮助的部分链接了本文,这没有关系,也正是我们想要的。但如果你是该项目生成此链接的网管,请在链接附近显著位置注明:我们不提供该项目的服务支持!
我们已经领教了没有此说明带来的痛苦,我们将不停地被一些白痴纠缠,他们认为既然我们发布了本文,那么我们就有责任解决世上所有的技术问题。
如果你是因为需要帮助正在阅读本文,然后就带着可以直接从作者那取得帮助的印象离开,那么 你 就不幸成了我们所说的白痴之一。 别向 我们 提问,我们不会理睬的。 我们只是在这教你如何从那些真正懂得你软硬件问题的人那里取得帮助,但 99.9% 的时间我们不会是那些人。除非你非常地 确定 本文的作者是你遇到问题方面的专家,请不要打搅,这样大家都更开心一点。
在 黑客 的世界里,你所提技术问题的解答很大程度上取决于你提问的方式与解决此问题的难度,本文将教你如何提问才更有可能得到满意的答复。
开源程序的应用已经很广,你通常可以从其他更有经验的用户而不是黑客那里得到解答。这是好事,他们一般对新手常有的毛病更容忍一点。然尔,使用我们推荐的方法,象对待黑客那样对待这些有经验的用户,通常能最有效地得到问题的解答。
第一件需要明白的事是黑客喜欢难题和激发思考的好问题。假如不是这样,我们也不会写本文了。如果你能提出一个有趣的问题让我们咀嚼玩味,我们会感激你。好问题是种激励与礼物,帮助我们发展认知,揭示没有注意或想到的问题。在黑客中,“好问题!” 是非常热烈而真挚的赞许。
此外,黑客还有遇到简单问题就表现出敌视或傲慢的名声。有时,我们看起来还对新手和愚蠢的家伙有条件反射式的无礼,但事情并不真是这样。
我们只是毫无歉意地敌视那些提问前不愿思考、不做自己家庭作业的人。这种人就象时间无底洞──他们只知道索取,不愿意付出,他们浪费了时间,这些时间本可用于其它更有趣的问题或更值得回答的人。我们将这种人叫做 “失败者(loser)” (由于历史原因,我们有时将“loser”拼写为“lusers” 。)
我们意识到许多人只是想使用我们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,计算机只是种工具,是种达到目的的手段而已。他们有自己的生活并且有更要紧的事要做,我们承认这点,也从不指望每个人都对这些让我们着迷的技术问题感兴趣。不过,我们回答问题的风格是为了适应那些真正对此有兴趣并愿意主动参与解决问题的人,这一点不会变,也不该变。如果连这都变了,我们就会在自己能做得最好的事情上不再那么犀利。
我们(大多数)是自愿者, 从自己繁忙的生活中抽时间来回答问题,有时会力不从心。因此,我们会毫不留情地滤除问题,特别是那些看起来象是失败者提的,以便更有效地把回答问题的时间留给那些胜利者。
如果你认为这种态度令人反感、以施惠者自居或傲慢自大,请检查你的假设,我们并未要求你屈服──事实上,假如你做了该做的努力,我们中的大多数将非常乐意平等地与你交流,并欢迎你接纳我们的文化。试图去帮助那些不愿自救的人对我们简直没有效率。不懂没有关系,但愚蠢地做事不行。
所以,你不必在技术上很在行才能吸引我们的注意,但你 必须 表现出能引导你在行的姿态──机 敏、有想法、善于观察、乐于主动参与问题的解决。如果你做不到这些使你与众不同的事情,我们建议你付钱跟别人签商业服务合同,而不是要求黑客无偿帮助。
如果你决定向我们求助,你不会想成为一名失败者,你也不想被看成一个失败者。得到快速有效回答的最好方法是使提问者看起来象个聪明、自信和有想法的人,并且暗示只是碰巧在某一特别问题上需要帮助。
(欢迎对本文指正,可以将建议发至 esr@thyrsus.com 或 respond-auto@linuxmafia.com。 请注意,本文不想成为一般性的 网络礼仪 指南,我一般会拒绝那些与引出技术论坛中有用的回答不特别相关的建议。)
在通过电邮、新闻组或论坛提技术问题以前,做以下事情:
提问时,请先表明你已做了上述事情,这将有助于建立你不是寄生虫与浪费别人时间的印象。最好再表述你从中 学到的东西 ,我们喜欢回答那些表现出能从答案中学习的人。
运用某些策略,比如用谷歌(Google)搜索你遇到的各种错误提示(既搜索 谷歌论坛,也搜索网页), 这样很可能直接就找到了解决问题的文档或邮件列表线索。 即使没有结果,在邮件列表或新闻组寻求帮助时提一句“我在谷歌中搜过下列句子但没有找到什么有用的东西” 也是件好事,至少它表明了搜索引擎不能提供哪些帮助。将搜索关键词与你的问题及可能的解决方案联系起来,还有助于引导其他有类似问题的人。
别着急,不要指望几秒钟的谷歌搜索就能解决一个复杂的问题。读一下常见问题文档。在向专家提问之前,先向后靠靠放松一下,再思考一下问题。相信我们,他们能从你的提问看出你做了多少阅读与思考,如果你是有备而来,将更有可能得到解答。不要将所有问题一股脑抛出,只因你的第一次搜索没有结果(或者结果太多)。
认真地思考,准备好你的问题。轻率的提问只能得到轻率的回答,或者压根没有。在提问时,你越是表现出在此前做过思考与努力去解决自己的问题,你越有可能得到真正的帮助。
注意别提错问题。如果提问基于错误的假设,某黑客多半会一边想 “愚蠢的问题……”,一边按将错就错的答案回复你,并且希望这种只是得到你自己“问的问题”而非真正所需的解答,给你一个教训。
永远不要假设你 有资格 得到解答。你没有这种资格,毕竟你没有为此服务付费。如果你能够提出有内容、有趣和激励思考的问题──那种毫无疑问能够向社区贡献经验,而不仅仅是消极地要求从别人那获取知识的问题,你将“挣到”答案。
另一方面,表明你有能力也乐意参与问题的解决是个很好的开端。“有没有人能指个方向?”,我这还差点什么?”,“我应该查哪个网站?”,通常要比 “请给出我可以用的完整步骤”更容易得到回复,因为你表明了只要有人能指个方向,你就很乐意完成剩下的过程。
要对在哪提问留心,如果你做了下述事情,多半会被一笔勾销或被看成“失败者”:
为保护通信的渠道不被无关的东西淹没,黑客会除掉那些没有找对地方的问题,你不会想让这种事落到自己头上的。
因此,第一步是找对论坛。谷歌和其它搜索引擎还是你的朋友,可以用它们搜索你遇到困难的软硬件问题最相关的项目网站。那里通常都有项目的常见问题(FAQ)、邮件列表及文档的链接。如果你的努力(包括 阅读 FAQ)都没有结果,这些邮件列表就是最后能取得帮助的地方。项目的网站也许还有报告Bug的流程或链接,如果是这样,去看看。
向陌生的人或论坛发送邮件极有可能是在冒险。譬如,不要假设一个内容丰富的网页的作者想充当你的免费顾问,不要对你的问题是否会受到欢迎做太乐观的估计──如果你不确定,向别处发或者压根别发。
在选择论坛、新闻组或邮件列表时,别太相信名字,先看看 FAQ 或者许可书以明确你的问题是否切题。发贴前先翻翻已有的帖子,这样可以让你感受一下那里行事的方式。事实上,张贴前在新闻组或邮件列表的历史文档中搜索与你问题相关的关键词是个极好的主意,也许就找到答案了。即使没有,也能帮助你归纳出更好的问题。
别象机关枪似的一次性“扫射”所有的帮助渠道,这就象大喊大叫一样会令人不快,温柔地一个一个来。
弄懂主题!最典型的错误之一是在某种致立于跨平台可移植的语言、库或工具的论坛中提关于 Unix 或 Windows 操作系统程序接口的问题。如果你不明白为什么这是大错,最好在搞清楚概念前什么也别问。
一般来说,在仔细挑选的公共论坛中提问比在私有论坛中提同样的问题更容易得到有用的回答。有几个道理支持这点,一是看潜在的回复者有多少,二是看论坛的参与者有多少,黑客更愿回答能启发多数人的问题。
可以理解,老练的黑客和一些流行软件的作者正在承受过多的不当消息。就象那根最后压垮骆驼背的稻草一样,你的加入也有可能使情况走向极端──已经好几次了,一些流行软件的作者退出了对自己软件的支持,因为伴随而来的涌入其私人邮箱的垃圾邮件变得无法忍受。
本地的用户组织或者你所用的 Linux 发行版也许正在宣传新手取得帮助的论坛或 IRC 通道(在一些非英语国家,新手论坛很可能还是邮件列表),这些地方是开始提问的好去处,特别是当你觉得遇到的也许只是相对简单或者很普通的问题时。经过宣传的 IRC 通道是公开邀请提问的地方,通常可以得到实时的回复。
事实上,如果出问题的程序来自某发行版(这很常见),最好先去该发行版的论坛或邮件列表中提问,再到程序本身的项目论坛或邮件列表,(否则)该项目的黑客可能仅仅回复“用 我们的 代码”。
在任何论坛发贴以前,先看看有没有搜索功能。如果有,就试着用问题的几个关键词搜索一下,也许就有帮助。如果在此之前你已做过全面的网页搜索(你应该这样去做),还是再搜索一下论坛,搜索引擎有可能没来得及索引此论坛的全部内容。
通过论坛或 IRC 通道提供项目的用户支持有增长的趋势,电子邮件交流则更多地为项目开发者保留。所以先在论坛或 IRC 中寻求与该项目相关的帮助。
当某个项目存在开发者邮件列表时,要向列表而不是其中的个别成员提问,即使你确信他能最好地回答你的问题。查一查项目的文档和主页,找到项目的邮件列表并使用它。采用这种办法有几个很好的理由:
如果一个项目既有 “用户” 也有“开发者”(或 “黑客”)邮件列表或论坛,而你又不摆弄那些代码,向“用户”列表或论坛提问。不要假设自己会在开发者列表中受到欢迎,那些人多半会遭受你的噪音干扰。
然尔,如果你 确信 你的问题不一般,而且在“用户” 列表或论坛中几天都没有回复,可以试试“开发者”列表或论坛。建议你在张贴前最好先暗暗地观察几天,至少看看最近几天保存的帖子,以了解那的行事方式(事实上这是参与任何私有或半私有列表的好主意)
如果你找不到一个项目的邮件列表,而只能查到项目维护者的地址,只管向其发信。即便在这种情况下,也别假设(项目)邮件列表不存在。在你的电子邮件中陈述你已经试过但没有找到合适的邮件列表,也提及你不反对将自己的邮件转发给他人(许多人认为,即使没什么秘密,私人电子邮件也不应该被公开。通过允许将你的电子邮件转发他人,你给了相应人员处置你邮件的选择)。
在邮件列表、新闻组或论坛中,主题是你在五十个或更少的字以内吸引有资格专家注意的黄金机会,不要用诸如 “请帮我” (更别提大写的 “请帮我!!!!”,这种主题的消息会被条件反射式地删掉)之类的唠叨浪费机会。不要用你痛苦的深度来打动我们,相反,要在这点空间中使用超级简明扼要的问题描述。
使用主题的好惯例是“对象──偏差”(式的描述),许多技术支持组织就是这样做的。在“对象”部分指明是哪一个或哪一组东西有问题,在“偏差”部分则描述与期望的行为不一致的地方。
愚蠢:
救命啊!我的笔记本视频工作不正常!
明智:
X.org 6.8.1 扭曲鼠标光标,MV1005 型号的某显卡芯片组
更明智:
使用 MV1005 型号的某显卡芯片组在 X.org 6.8.1 的鼠标光标被扭曲
编写 “对象──偏差”式描述的过程有助于你组织对问题的细致思考。是什么被影响了?仅仅是鼠标光标或者还有其它图形?只在 X.org 中出现?或只是在其 6.8.1 版中?是针对某显卡芯片组?或者只是其中的 MV1005 型号?一个黑客只需描一眼就能够立即明白什么是你遇到的问题,什么是你自己的问题。
更一般地,想象一下在一个只显示主题的文档索引中查找。让你的主题更好地反映问题,可以使下一个搜索类似问题的人能够在文档中直接就找到答案的线索,而不用再次发贴提问。
如果你想在回复中提问,确保改变主题以表明你是在问一个问题,一个主题象 Re: 测试
或者 Re: 新Bug
的消息不太可能引起足够的注意。同时,将回复中与新主题不甚相关的引用内容尽量删除。
对于列表消息,不要直接点击回复(按钮)来开始一个全新的线索,这将限制你的观众。有些邮件阅读程序,比如 mutt,允许用户按线索排序并通过折叠线索来隐藏消息,这样做的人永远看不到你发的消息。
仅仅改变主题还不够。mutt 和其它一些邮件阅读程序还要检查邮件头主题以外的其它信息,以便为其指定线索,所以宁可发一个全新的邮件。
在论坛,因为消息与特定的线索紧密结合,并且通常在线索之外不可见,好的提问方式略有不同,通过回复提问并不要紧。不是所有论坛都允许在回复中出现分离的主题,而且这样做了基本上没有人会去看。不过,通过回复提问本身就是令人怀疑的做法,因为它们只会被正在查看该线索的人读到。所以,除非你 只想 在该线索当前活跃的人群中提问,还是另起炉灶比较好。
以请向……回复
来结束问题多半会使你得不到回答。如果你觉得花几秒钟在邮件客户端设置一下回复地址都麻烦,我们也觉得花几秒钟考虑你的问题更麻烦。如果你的邮件客户端程序不支持这样做,换个好点的;如果是操作系统不支持所有这种邮件客户端程序,也换个好点的。
在论坛,要求通过电子邮件回复是完全无礼的,除非你确信回复的信息也许是敏感的(而且有人会为了某些未知的原因,只让你而不是整个论坛知道答案)。如果你只是想在有人回复线索时得到电子邮件提醒,可以要求论坛发送。几乎所有论坛都支持诸如留意本线索
、有回复发送邮件
等功能。
经验告诉我们,粗心与草率的作者通常也粗心与草率地思考和编程(我敢打赌)。为这些粗心与草率的思考者回答问题没有什么好处,我们宁可将时间花在其它地方。
清楚、良好地表达你的问题非常重要。如果你觉得这样做麻烦,我们也觉得注意(你的问题)麻烦。花点额外的精力斟酌一下字句,用不着太僵硬与正式──事实上,黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它 必须 很准确,而且有迹象表明你是在思考和关注问题。
正确地拼写、使用标点和大小写,不要将 its
混淆为 it's
,loose
搞成 lose
或者将 “discrete” 弄成 “discreet”。不要全部用大写,这会被视为无礼的大声嚷嚷 (全部小写也好不到哪去,因为不易阅读。Alan Cox [注:著名黑客,Linux 内核的重要参与者] 也许可以这样做,但你不行。)
一般而言,如果你写得象个半文盲似的傻子,多半得不到理睬。也不要使用即时通讯中的简写,如将 you
简化为 u
会使你看起来象一个为了节约二次击键的半文盲式的傻子。更糟的是,如果象个小孩似地鬼画桃符那绝对是在找死,可以肯定没人会理你(或者最多是给你一大堆指责与挖苦)。
如果在非母语论坛提问,你的拼写与语法错误会得到有限的宽容,但懒惰完全不会被容忍(是的,我们通常看得出其中的差别)。同时,除非你知道回复者使用的语言,请使用英语书写。繁忙的黑客一般会直接删除用他们看不懂语言写的消息。在互联网上英语是工作语言,用英语书写可以将你的问题不被阅读就被直接删除的可能性降到最低。
如果你用英语书写但它是你的第二语言,最好提醒潜在的回复者语言上可能的困难以便绕过这个问题,比如:
如果你人为地将问题搞得难以阅读,它多半会被忽略,人们更愿读易懂的问题,所以:
使用纯文本而不是 HTML(超文本标注语言)( 关闭HTML 并不难)
使用 MIME(多用途互联网邮件扩展)附件通常没有问题,前提是真正有内容(譬如附带的源文件或补丁),而不仅仅是邮件客户端程序生成的模板(譬如只是消息内容的拷贝)。
不要发送整段只是单行句子但多次折回的邮件(这使得回复部分内容非常困难)。设想你的读者是在80个字符宽的文本终端阅读邮件,设置你的行折回点小于 80 列。
但是,也 不要 用任何固定列折回数据(譬如日志文件拷贝或会话记录)。数据应该原样包含,使回复者确信他们看到的是与你看到的一样的东西。
在英语论坛中,不要使用'Quoted-Printable' MIME 编码发送消息。这种编码对于张贴非 ASCII 语言可能是必须的,但很多邮件程序并不支持。当它们分断时,那些文本中四处散布的 “=20”符号既难看也分散注意力,甚至有可能破坏内容的语意。
永远不要 指望黑客们阅读使用封闭的专用格式编写的文档,诸如微软公司的 Word 或 Excel 文件等。大多数黑客对此的反应就象有人将还在冒热气的猪粪倒在你门口时你的反应一样。即使他们能够处理,也很厌恶这么做。
如果你从使用视窗的电脑发送电子邮件,关闭问题颇多的微软“聪明引用”功能(在“工具” -> “自动纠正选项”的“输入时自动格式化”下去掉聪明引用的选框),以免在你的邮件中到处散布垃圾字符。
在论坛,勿滥用“表情符号”和“HTML”功能(当它们提供时)。一两个表情符号通常没有问题,但花哨的彩色文本倾向于使人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来象个傻笑的小姑娘。这通常不是个好主意,除非你只是对性而不是有用的回复更有兴趣。
如果你使用图形用户界面的邮件客户端程序(如网景公司的 Messenger、微软公司的 Outlook 或者其它类似的),注意它们的缺省配置不一定满足这些要求。大多数这类程序有基于菜单的查看源码
命令,用它来检查发送文件夹中的消息,以确保发送的是没有多余杂质的纯文本文件。
如果你认为是代码有问题,向黑客提供在可控环境下重现问题的方法尤其重要。当你这么做时,得到有用且及时回复的可能性将大大增加。
西蒙.泰瑟姆(Simon Tatham)写过一篇《如何有效报告Bug》的文章,我强烈推荐各位阅读。
你应该(写得)精炼且有内容,简单地将一大堆代码或数据罗列在求助消息中达不到目的。如果你有一个很大且复杂的测试样例让程序崩溃,尝试将其裁剪得越小越好。
至少有三个理由支持这点。第一,让别人看到你在努力简化问题使你更有可能得到回复。第二,简化问题使你更有可能得到 有用的
回复。第三,在提纯Bug报告的过程中,你可能自己就找到了解决办法或权宜之计。
当你在一个软件中遇到问题,除非你 非常、非常 的有根据,不要动辄声称找到了Bug。提示:除非你能提供解决问题的源代码补丁,或者对前一版本的回归测试表现出不正确的行为,否则你都多半不够完全确信。对于网页和文档也如此,如果你(声称)发现了文档的“Bug”,你应该能提供相应位置的替代文本。
记住,还有许多其它用户并未经历你遇到的问题,否则你在阅读文档或搜索网页时就应该发现了([你在报怨前已经做了这些,是吧 ?](#你在报怨前已经做了这些,是吧 ?))。这也意味着很有可能是你弄错了而不是软件本身有问题。
编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了Bug,也就置疑了他们的能力,即使你是对的,也有可能会使其中的部分人感到不快。(此外,)在主题中嚷嚷“Bug”也是特别不老练的。
提问时,即使你私下非常确信已经发现一个真正的Bug,最好写得象是 你 做错了什么。如果真的有Bug,你会在回复中看到这点。这样做的话,如果真有虫子,维护者就会向你道歉,这总比你弄砸了然后欠别人一个道歉要强。
有些人明白他们不应该粗鲁或傲慢地行事并要求得到答复,但他们退到相反的低声下气的极端:“我知道我只是个可怜的新丁,一个失败者,但……”。这既使人困扰,也没有用,当伴随着对实际问题含糊的描述时还特别令人反感。
别用低级灵长类动物的办法浪费你我的时间,相反,尽可能清楚地描述背景情况和你的问题,这比低声下气更好地摆正了你的位置。
有时,论坛设有单独的初学者提问版面,如果你真的认为遇到了肤浅的问题,到那去就是了,但一样别低声下气。
告诉黑客是什么导致了问题是没用的(如果你的诊断理论是了不起的东西,你还会向别人咨询求助吗?)。所以,确保只是告诉他们问题的原始症状,而不是你的解释和理论,让他们来解释和诊断。如果你认为陈述自己的猜测很重要,应清楚地说明这只是你的猜测并描述为什么它们不起作用。
愚蠢:
我在编译内核时接连遇到 SIG11 错误,怀疑主板上的某根电路丝断了,找到它们的最好办法是什么?
明智:
我组装的电脑(K6/233 CPU、FIC-PA2007 主板[威盛 Apollo VP2 芯片组]、Corsair PC133 SDRAM 256Mb 内存)最近在开机 20 分钟左右、做内核编译时频繁地报 SIG11 错,但在头 20 分钟内从不出问题。重启动不会复位时钟,但整夜关机会。更换所有内存未解决问题,相关的典型编译会话日志附后。
由于以上这点许多人似乎难以掌握,这里有句话可以提醒你:“所有的诊断专家都来自密苏里州”。美国国务院的官方座右铭则是“让我看看”(出自国会议员威勒德.D.范迪弗[Willard D. Vandiver]在1899年时的讲话:“我来自一个出产玉米、棉花、牛蒡和民主党人的国家,滔滔雄辩既不能说服我,也不会让我满意。我来自密苏里州,你必须让我看看。”)针对诊断者而言,这并不是怀疑,而只是一种真实而有用的需求,以便让他们看到与你看到的原始证据尽可能一致的东西,而不是你的猜测与总结。(所以,)让我们看看。
刚出问题之前发生的事情通常包含有解决问题最有效的线索。所以,记录中应准确地描述你、电脑和软件在崩溃前都做了什么。在命令行处理的情况下,有会话日志(如运行脚本工具生成的)并引用相关的若干(如20)行记录会非常有帮助。
如果崩溃的程序有诊断选项(如-v详述开关),试着选择这些能在记录中增加排错信息的选项。记住,“多”不等于“好”。试着选取适当的排错级别以便提供有用的信息而不是将阅读者淹没在垃圾中。
如果你的记录很长(如超过四段),在开头简述问题随后按时间先后罗列详细过程也许更有用。这样,黑客在读你的记录时就知道该注意哪些内容了。
如果你想弄清楚如何做某事(而不是报告一个Bug),在开头就描述你的目标,然后才陈述遇到问题的特定步骤。
经常出现这种情况,寻求技术帮助的人在脑袋里有个更高层次的目标,他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身有问题,结果要费很大的劲才能通过。
愚蠢:
我怎样才能让某图形程序的颜色拾取器取得十六进制的 RGB 值?
明智:
我正试着用自己选定数值的颜色替换一幅图片的色表,我现在知道的唯一方法是编辑每个表槽,但却无法让某图形程序的颜色拾取器取得十六进制的 RGB 值。
第二种提法是明智的,它使得建议采用更合适的工具以完成任务的回复成为可能。
黑客们认为问题的解决过程应该公开、透明,此过程中如果更有才能的人注意到不完整或者不当之处,最初的回复才能够、也应该被纠正。同时,作为回复者也因为能力和学识被其它同行看到而得到某种回报。
当你要求私下回复时,此过程和回报都被中止。别这样做,让 回复者 来决定是否私下回答──如果他真这么做了,通常是因为他认为问题编写太差或者太肤浅,以至于对其它人毫无意义。
对这条规则存在一条有限的例外,如果你确信提问可能会引来大量雷同的回复时,那么“向我发电邮,我将为论坛归纳这些回复”将是神奇的句子。试着将邮件列表或新闻组从洪水般雷同的回复中解救出来是非常有礼貌的──但你必须信守诺言。
漫无边际的问题通常也被视为没有明确限制的时间无底洞。最有可能给你有用答案的人通常也是最忙的人(假如只是因为他们承担了太多工作的话),这些人对于没有止境的时间无底洞极其敏感,所以他们也倾向于讨厌那些漫无边际的问题。
如果你明确了想让回复者做的事(如指点方向、发送代码、检查补丁或其它),你更有可能得到有用的回复。(因为)这样可以让他们集中精力并间接地设定了他们为帮助你需要花费的时间和精力上限,这很好。
要想理解专家生活的世界,可以这样设想:那里有丰富的专长资源但稀缺的响应时间。你暗中要求他们奉献的时间越少,你越有可能从这些真正懂行也真正很忙的专家那里得到解答。
所以限定你的问题以使专家回答时需要付出的时间最少──这通常与简化问题还不太一样。举个例,“请问可否指点一下哪有好一点的 X 解释?”通常要比“请解释一下 X”明智。如果你的代码不运行了,通常请别人看看哪有问题比叫他们帮你改正更明智。
别要求他人给你出问题的代码排错而不提及应该从何入手。张贴几百行的代码,然后说一声“它不能运行”会让你得不到理睬。只贴几十行代码,然后说一句“在第七行以后,本应该显示x,但实际出现的是y”非常有可能让你得到回复。
最精确描述代码问题的方法是提供一个能展示问题的最小测试样例。什么是最小测试样例?它是对问题的展现,只需要刚好能够重现非预期行为的代码即可。如何生成一个最小测试样例?如果你知道哪一行或哪一段代码会产生问题,将其复制并提供刚好够用的外围支撑代码以构成一个完整的样例(够用是指源码刚好能被编译器、解释器或任何处理它的程序所接受)。如果你不能将问题缩小到特定的段落,复制源码并去除那些与问题无关的代码段。你能提供的最小测试样例越小越好(参见 量不在多,精炼则灵 )。
生成一个非常小的最小测试样例并不总是可能,但尽力去做是很好的锻练,这有可能帮助你找到需要自己解决的问题。即使你找不到,黑客们喜欢看到你努力过,这将使他们更合作。
如果你只是想让别人帮忙审一下代码,在最开头就要说出来,并且一定要提到你认为哪一部分特别需要关注以及为什么。
黑客们善于发现“家庭作业”式的问题。我们中的大多数人已经做了自己的家庭作业,那是该 你 做的,以便从中学到东西。问一下提示没有关系,但不是要求完整的解决方案。
如果你怀疑自己碰到了一个家庭作业式的问题,但仍然无法解决,试试在用户组、论坛或(作为最后一招)在项目的“用户”邮件列表或论坛中提问。尽管黑客们 会 看出来,一些老用户也许仍会给你提示。
抵制这种诱惑,即在求助消息末尾加上诸如“有人能帮我吗?”或“有没有答案?”之类在语义上毫无意义的东西。第一,如果问题描述还不完整,这些附加的东西最多也只能是多余的。第二,因为它们是多余的,黑客们会认为这些东西烦人──就很有可能用逻辑上无误但打发人的回复,诸如“是的,你可以得到帮助”和“不,没有给你的帮助”。
一般来说,避免提“是或否”类型的问题,除非你想得到 “是或否”类型的回答。
这是你的问题,不要我们的。宣称“紧急”极有可能事与愿违:大多数黑客会直接删除这种消息,他们认为这是无礼和自私地企图得到即时与特殊的关照。而且“紧急”或其它有类似含义的主题有可能触发垃圾过滤规则,潜在的回复者可能永远看不到你的问题!
有一点点局部的例外,如果你是在一些知名度很高、会使黑客们激动的地方使用程序,也许值得这样去做。在这种情况下,如果你有期限压力,也很有礼貌地提到这点,人们也许会有足够的兴趣快一点回答。
当然,这是非常冒险的,因为黑客们对什么是令人激动的标准多半与你的不同。譬如从国际空间站这样张贴没有问题,但代表感觉良好的慈善或政治原因这样做几乎肯定不行。事实上,张贴诸如“紧急:帮我救救这个毛绒绒的小海豹!”肯定会被黑客回避或光火,即使他们认为毛绒绒的小海豹很重要。
如果你觉得这不可思议,再把剩下的内容多读几遍,直到弄懂了再发贴也不迟。
礼貌一点,使用 请
和 谢谢你的关注
或者 谢谢你的关照
,让别人明白你感谢他们无偿花时间帮助你。
坦率地讲,这一点没有语法正确、文字清晰、准确、有内容和避免使用专用格式重要(同时也不能替代它们)。黑客们一般宁可读有点唐突但技术鲜明的Bug报告,而不是那种有礼但含糊的报告。(如果这点让你不解,记住我们是按问题能教我们什么来评价它的)
然尔,如果你已经谈清楚了技术问题,客气一点肯定会增加你得到有用回复的机会。
(我们必须指出,本文唯一受到一些老黑客认真反对的地方是以前曾经推荐过的“提前谢了”,一些黑客认为这隐含着事后不用再感谢任何人的暗示。我们的建议是要么先说 提前谢了
,事后 再 对回复者表示感谢,要么换种方式表达,譬如用 谢谢你的关注
或 谢谢你的关照
)。
问题解决后向所有帮助过的人追加一条消息,让他们知道问题是如何解决的并再次感谢。如果问题在邮件列表或新闻组中受到广泛关注,在那里追加此消息比较恰当。
最理想的方式是向最初提问的线索回复此消息,并在主题中包含 已解决
、已搞定
或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见线索 问题 X
和 问题 X-已解决
的潜在回复者就明白不用再浪费时间了(除非他个人觉得“问题 X”有趣),因此可以利用此时间去解决其它问题。
追加的消息用不着太长或太复杂,一句简单的“你好──是网线坏了!谢谢大家──比尔”就比什么都没有要强。事实上,除非解决问题的技术真正高深,一条简短而亲切的总结比长篇大论要好。说明是什么行动解决了问题,用不着重演整个排错的故事。
对于有深度的问题,张贴排错历史的摘要是恰当的。描述问题的最终状态,说明是什么解决了问题,在此之后 才指明可以避免的弯路。应避免的弯路部分应放在正确的解决方案和其它总结材料之后,而不要将此消息搞成侦探推理小说。列出那些帮助过你的名字,那样你会交到朋友的。
除了有礼貌、有内容以外,这种类型的追帖将帮助其他人在邮件列表、新闻组或论坛文档中搜索到真正解决你问题的方案,从而也让他们受益。
最后,此类追帖还让每位参与协助的人因问题的解决而产生一种满足感。如果你自己不是技术专家或黑客,相信我们,这种感觉对于你寻求帮助的老手和专家是非常重要的。问题叙述到最后不知所终总是令人沮丧的,黑客们痒痒地渴望它们被解决。挠痒痒
为你挣到的信誉将对你下次再次张贴提问非常非常的有帮助。
考虑一下怎样才能避免他人将来也遇到类似的问题,问问自己编一份文档或 FAQ 补丁会不会有帮助,如果是的话就将补丁发给维护者。
在黑客中,这种良好的后继行动实际上比传统的礼貌更重要,也是你善待他人而赢得声誉的方式,这是非常有价值的财富。
有一个古老而神圣的传统:如果你收到 读读该死的手册
(RTFM) 的回复,发信人认为你应该去“读读该死的手册”。他或她多半是对的,去读一下吧。
“读读该死的手册”(RTFM)有个年轻一点的亲戚,如果你收到“搜搜该死的网络”(STFW)的回复,发信人认为你应该“搜搜该死的网络”。那人多半也是对的,去搜一下吧。(更温和一点的说法是“谷歌是你的朋友!”)
在论坛,你也可能被要求去搜索论坛的文档。事实上,有人甚至可能热心地为你提供以前解决此问题的线索。但不要依赖这种关照,提问前应该先搜索一下文档。
通常,叫你搜索的人已经打开了能解决你问题的手册或网页,正在一边看一边敲键盘。这些回复意味着他认为:
你不应该觉得这样就被冒犯了,按黑客的标准,回复者没有不理你就是在向你表示某种尊敬,你反而应该感谢他热切地想帮助你。
如果你看不懂回答,不要马上回复一个要求说明的消息,先试试那些最初提问时用过的相同工具(如手册、FAQ、网页、懂行的朋友等)试着搞懂回答。如果还是需要说明,展现你已经明白的。
譬如,假如我告诉你:“看起来象是某输入项有问题,你需要清除它”,接着是个 不好 的回帖:“什么是某输入项?”。而这是一个 很好 的跟帖:“是的,我读了手册,某某输入项只在 -z 和 -p 开关中被提到,但都没有涉及到如何清除它们,你指的是哪一个还是我弄错了什么?”
很多黑客圈子中看似无礼的行为并不是存心冒犯。相反,它是直接了当、一针见血式的交流风格,这种风格对于更关注解决问题而不是使别人感觉舒服而混乱的人是很自然的。
如果你觉得被冒犯了,试着平静地反应。如果有人真的做了过格的事,邮件列表、新闻组或论坛中的前辈多半会招呼他。如果这 没有 发生而你却光火了,那么你发火对象的言语可能在黑客社区中看起来是正常的,而 你 将被视为有错的一方,这将伤害到你获取信息或帮助的机会。
另一方面,你会偶而真的碰到无礼和无聊的言行。与上述相反,对真正的冒犯者狠狠地打击、用犀利的语言将其驳得体无完肤都是可以接受的。然尔,在行事之前一定要非常非常的有根据。纠正无礼的言论与开始一场毫无意义的口水战仅一线之隔,黑客们自己莽撞地越线的情况并不鲜见。如果你是新手或外来者,避开这种莽撞的机会并不高。如果你想得到的是信息而不是消磨时光,这时最好不要把手放在键盘上以免冒险。
(有些人断言很多黑客都有轻度的自闭症或阿斯伯格综合症,缺少用于润滑人类社会“正常”交往所需的脑电路。这既可能是真也可能是假。如果你自己不是黑客,兴许你认为我们脑袋有问题还能帮助你应付我们的古怪行为。只管这么干好了,我们不在乎。我们 喜欢 现在这个样子,并且一般都对病号标记有站得住脚的怀疑。)
在下一节,我们会谈到另一个问题,当 你 行为不当时会受到的“冒犯”。
在黑客社区的论坛中有那么几次你可能会搞砸──以本文描述或类似的方式。你会被示众是如何搞砸的,也许言语中还会带点颜色。
这种事发生以后,你能做的最糟糕的事莫过于哀嚎你的遭遇、宣称被口头攻击、要求道歉、高声尖叫、憋闷气、威胁诉诸法律、向其雇主报怨、忘了关马桶盖等等。相反,你该这样去做:
熬过去,这很正常。事实上,它是有益健康与恰当的。
社区的标准不会自己维持,它们是通过参与者积极而 公开 地执行来维持的。不要哭嚎所有的批评都应该通过私下的邮件传送,这不是事情运作的方式。当有人评论你的一个说法有误或者提出不同看法时,坚持声称受到个人攻击也毫无益处,这些都是失败者的态度。
也有其它的黑客论坛,受过高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称“如果你不想帮助用户就闭嘴”。有思路的参与者纷纷离开的结果只会使它们变成了毫无意义的唠叨与无用的技术论坛。
是夸张的“友谊”(以上述方式)还是有用?挑一个。
记着:当黑客说你搞砸了,并且(无论多么刺耳地)告诉你别再这样做时,他正在为关心你和他的社区而行动。对他而言,不理你并将你从他的生活中滤除要容易得多。如果你无法做到感谢,至少要有点尊严,别大声哀嚎,也别因为自己是个有戏剧性超级敏感的灵魂和自以为有资格的新来者,就指望别人象对待脆弱的洋娃娃那样对你。
有时候,即使你没有搞砸(或者只是别人想象你搞砸了), 有些人也会无缘无故地攻击你本人。在这种情况下,报怨倒是 真的 会把问题搞砸。
这些找茬者要么是毫无办法但自以为是专家的不中用家伙,要么就是测试你是否真会搞砸的心理专家。其它读者要么不理睬,要么用自己的方式对付他们。这些找茬者在给自己找麻烦,这点你不用操心。
也别让自己卷入口水战,大多数口水战最好不要理睬──当然,是在你核实它们只是口水战、没有指出你搞砸的地方,而且没有巧妙地将问题真正的答案藏于其中之后(这也是可能的)。
下面是些典型的愚蠢问题和黑客不回答它们时的想法。
问:我到哪可以找到某程序或 X 资源?
问:我怎样用 X 做 Y?
问:如何配置我的 shell 提示?
问:我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文档转为 TeX 格式吗?
问:我的{程序、配置、SQL 语句}不运行了
问:我的视窗电脑出问题了,你能帮忙吗?
问:我的程序不运行了,我认为系统工具X有问题
问:我安装 Linux 或 X 遇到困难,你能帮忙吗?
问:我如何才能破解超级用户口令/盗取通道操作员的特权/查看某人的电子邮件?
问:
我到哪可以找到某程序或 X 资源?
答:
在我找到它的同样地方,笨旦──在网页搜索引擎上。上帝啊,难道还有人不知道如何使用 谷歌 吗?
问:
我怎样用 X 做 Y?
答:
如果你想解决的是 Y,提问时别给出可能并不恰当的方法。这种问题说明提问者不但对 X 完全无知,也对要解决的 Y 问题糊涂,还被特定形势禁锢了思维。等他们把问题弄好再说。
问:
如何配置我的 shell 提示?
答:
如果你有足够的智慧提这个问题,你也该有足够的智慧去 “读读该死的手册”(RTFM),然后自己去找出来。
问:
我可以用 Bass-o-matic 文件转换工具将 AcmeCorp 文档转为 TeX 格式吗?
答:
试试就知道了。如果你试过,你既知道了答案,又不用浪费我的时间了。
问:
我的{程序、配置、SQL 语句}不运行了
答:
这不是一个问题,我也没有兴趣去猜你有什么问题──我有更要紧的事要做。看到这种东西,我的反应一般如下:
问:
我的视窗电脑出问题了,你能帮忙吗?
答:
是的,把视窗垃圾删了,装个象 Linux 或 BSD 的开源操作系统吧。
注意:如果程序有官方的视窗版或者与视窗有交互(如 Samba),你 可以 问与视窗相关的问题,只是别对问题是由视窗操作系统而不是程序本身造成的回复感到惊讶,因为视窗一般来说太差,这种说法一般都成立。
问:
我的程序不运行了,我认为系统工具 X 有问题
答:
你完全有可能是第一个注意到被成千上万用户反复使用的系统调用与库文件有明显缺陷的人,更有可能的是你完全没有根据。不同凡响的说法需要不同凡响的证据,当你这样声称时,你必须有清楚而详尽的缺陷说明文档作后盾。
问:
我安装 Linux 或 X 遇到困难,你能帮忙吗?
答:
不行,我需要亲手操作你的电脑才能帮你排错,去向当地的 Linux 用户组寻求方便的帮助(你可以在 这里 找到用户组列表)
注意:如果安装问题与某 Linux 发行版有关,在针对 它 的邮件列表、论坛或本地用户组织中提问也许是恰当的。此时,应描述问题的准确细节。在此之前,先用 “linux”和 所有 被怀疑的硬件 [作关键词] 仔细搜索。
问:
我如何才能破解超级用户口令/盗取通道操作员的特权/查看某人的电子邮件?
答:
想做这种事情说明你是个卑劣的家伙,想让黑客教你做这种事情说明你是个白痴。
最后,我将通过举例来演示提问的智慧。同样的问题两种提法,一种愚蠢,另一种明智。
愚蠢:我在哪能找到关于 Foonly Flurbamatic 设备的东西?
这个问题在乞求得到 “搜搜该死的网络”(STFW) 式的回复。
明智: 我用谷歌搜索过“Foonly Flurbamatic 2600”,但没有找到什么有用的,有谁知道在哪能找到这种设备的编程信息?
这个人已经搜索过网络了,而且听起来他可能真的遇到了问题。
愚蠢: 我不能编译某项目的源代码,它为什么这么破?
提问者假设是别人搞砸了,太自大了。
明智: 某项目的源代码不能在某 Linux 6.2 版下编译。我读了常见问题文档,但其中没有与某 Linux 相关的内容。这是编译时的记录,我做错了什么吗?
提问者已经指明了运行环境,读了常见问题文档(FAQ),列出了错误,也没有假设问题是别人的过错,这家伙值得注意。
愚蠢: 我的主板有问题,谁能帮我?
某黑客对此的反应可能是:“是的,还需要帮你拍背和换尿布吗?”,然后是敲下删除键。
明智: 我在 S2464 主板上试过 X、Y 和 Z,当它们都失败后,又试了 A、B 和 C。注意我试 C 时的奇怪症状,显然某某东西正在做某某事情,这不是期望的行为。通常在 Athlon MP 主板上导致某某事情的原因是什么?有谁知道我还能再试点什么以确定问题?
相反地,这个人看来值得回答。他或她展现了解决问题的能力而不是坐等天上掉馅饼。
在最后那个问题中,注意“给我一个回答”与“请帮我看看我还能再做点什么测试以得到启发”之间细微但重要的差别。
事实上,最后那个问题基本上源于 2001 年 8 月 Linux 内核邮件列表(lkml)上的真实事件,是我(Eric)当时提了那个问题,我发现 Tyan S2462 主板有神秘的死机现象,邮件列表成员给我提供了解决此问题的关键信息。
通过这种提问方式,我给了别人可以咀嚼玩味的东西。我设法使之对参与者既轻松又有吸引力,也表明了对同行能力的尊敬并邀请他们与我一起协商。通过告诉他们我已经走过的弯路,我还表明了对他们宝贵时间的尊重。
事后,当我感谢大家并评论这次良好的经历时,一个 Linux 内核邮件列表的成员谈到,他认为我得到答案并不是因为我的名字挂在列表上,而只是因为我正确的提问方式。
黑客们在某种方面是非常不留情面的精英分子。我想在这事上他是对的,如果我 表现得 象个不劳而获的寄生虫,不管我是谁都会被忽略或斥责。他建议将整个事件作为对其它人提问的指导,这直接导致了本文的编写。
如果得不到回答,请不要认为我们不想帮你,有时只是因为被问到的小组成员的确不知道答案。没有回复不等于不被理睬,当然必须承认从外面很难看出两者的差别。
一般而言,直接将问题再张贴一次不好,这会被视为毫无意义的骚扰。耐心一点,知道你问题答案的人可能生活在不同的时区,有可能正在睡觉,也有可能你的问题一开始就没有组织好。
还有其它资源可以寻求帮助,通常是在一些面向新手的资源中。
有许多在线与本地的用户组织,虽然它们自己不编写任何软件,但是对软件很热心。这些用户组通常因互助和帮助新手而形成。
还有众多大小商业公司提供签约支持服务,别因为要付点钱才有支持就感到沮丧!毕竟,如果你车子的汽缸垫烧了,你多半还得花钱找个修理店把它弄好。即使软件没花你一分钱,你总不能指望服务支持都是免费的。
象 Linux 这样流行的软件,每个开发者至少有一万个以上的用户,一个人不可能应付这么多用户的服务要求。记住,即使你必须付费才能得到支持,也比你还得额外花钱买软件要少得多(而且对封闭源代码软件的服务支持与开源软件相比通常还要贵一点,也要差一点)。
态度和善一点。问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。
对初犯者私下回复。 对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找 FAQ 都不知道。
如果你不确定,一定要说出来! 一个听起来权威的错误回复比没有还要糟,别因为听起来象个专家好玩就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。
如果帮不了忙,别妨碍。 不要在具体步骤上开玩笑,那样也许会毁了用户的安装──有些可怜的呆瓜会把它当成真的指令。
探索性的反问以引出更多的细节。 如果你做得好,提问者可以学到点东西──你也可以。试试将很差的问题转变成好问题,别忘了我们都曾是新手。
尽管对那些懒虫报怨一声“读读该死的手册”(RTFM)是正当的,指出文档的位置(即使只是建议做个谷歌关键词搜索)会更好
如果你决意回答,给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计,应推荐更好的工具,重新组织问题。
请回答真正的问题!如果提问者已经做了自己该做的研究,并且说明尝试过 X,Y,Z,A,B 与 C
都没有得到想要的結果,那么回复 试试 A 或 B
或者给出一个内容为 试一下 X,Y,Z,A,B 或 C
的链接将极其无益!
帮助你的社区从中学习。当回复一个好问题时,问问自己 如何修改相关文件或 FAQ 文档以免再次解答同样的问题?
,接着再向文档维护者发一份补丁。
如果你是在研究一番后才做出的回答,展现你的技巧而不是直接端出结果。毕竟“授人以鱼,不如授人以渔”。
如果需要个人电脑、Unix 和互联网如何工作的基础知识,参阅 Unix 和互联网工作的基本原理。
当你发布软件或补丁时,试着按 软件发布实践 操作。
伊夫林.米切尔(Evelyn Mitchell)贡献了一些愚蠢问题例子并启发了编写如何更好地回答问题
这一节,米哈伊尔.罗门迪克(Mikhail Ramendik)贡献了一些特别有价值的建议和改进。
failed to execute child process 'dbus-launch'
]]>failed to execute child process 'dbus-launch'
在我咨询Kali Linux社区后,得到这么一个解决方案
这里以Kali Linux为例,其他Linux发行版请选择对应的系统内置的等宽字体
我们依次打开 设置 -> 外观 -> 字体
]]>这里以Kali Linux为例,其他Linux发行版请选择对应的系统内置的等宽字体
我们依次打开 设置 -> 外观 -> 字体
这里我们可以发现,Kali Linux默认等宽字体系列是'Fira Code'
,后续我们需要在VSCode内将字体改为'Fira Code'
打开VSCode,打开设置,搜索font
关键字。
将 Terminal: Font Family
留空,将Editor: Font Family
改为对应的等宽字体。
再次使用就可以发现,终端和文本编辑器的字体已经恢复正常了。
]]>Chrome不支持Linux-arm64,这时候可以安装Chromium.
apt install chromium
Chrome不支持Linux-arm64,这时候可以安装Chromium.
部分root用户在安装后无法打开,是因为Chromium默认不允许在root用户状态下运行,可以通过一下方法修改。
打开后在最后一行加上
最后保存,然后就可以在root下使用了。
]]>grep: /proc/version: 权限不够
grep: /proc/version: 权限不够
You are trying to start Visual Studio Code as a super user which isn't recommended. If this was intended, please add the argument --no-sandbox
and specify an alternate user data directory using the --user-data-dir
argument.
grep: /proc/version: 权限不够
grep: /proc/version: 权限不够
You are trying to start Visual Studio Code as a super user which isn't recommended. If this was intended, please add the argument --no-sandbox
and specify an alternate user data directory using the --user-data-dir
argument.
VSCode默认不支持root用户启动,如果需要使用root用户启动,需在启动命令中加上--no-sandbox
阅读前提示
本文仅适合个人用户,商业用户使用该程序可能会面临法律风险!!!
建议有经济能力的读者支持正版。
知周所众,Windows和Office不是免费软件。如果是新购买的品牌机,则应该预装有正版的Windows家庭版,部分用户还附赠Office。但是,我相信我的读者一大部分用的是自己组装的电脑。
]]>像我一样的穷*用户应该有不少。
阅读前提示
本文仅适合个人用户,商业用户使用该程序可能会面临法律风险!!!
建议有经济能力的读者支持正版。
知周所众,Windows和Office不是免费软件。如果是新购买的品牌机,则应该预装有正版的Windows家庭版,部分用户还附赠Office。但是,我相信我的读者一大部分用的是自己组装的电脑。
像我一样的穷*用户应该有不少。
像我这样的经常赶稿的忠实的巨硬用户虽说讨厌巨硬,但是也不能不用啊!!
(软件仅支持windows,臣不得不用啊!!!)
然后再问一下,你们在遇到这种憋屈的情况都是怎么处理的??评论区见。
很想支持正版Windows和Office,但是经济实力不允许的个人用户看过来。
对于这种不得不用的软件,我们肯定得想办法。对于网上的kms工具,它们需要我们的管理员权限。有的带自动续期的(kms激活每180天验证一次)的又需要常驻后台。这在降低设备安全性(指不定给你塞什么东西 了)的前提下又影响设备性能,非常不划算。如果使用其他的kms服务器,又怕突然停服跑路。
有服务器的我们可以自己搭建一个kms服务器(免费的),这种自己的东西才用的放心。当然没有服务器可以用linux挂着用。
这里用到全球最大同性交友网站Github的一个开源项目vlmcsd项目地址是:https://github.com/Wind4/vlmcsd
为了保证我们服务器的稳定运行,我们将在Docker里运行这个项目。vlmcsd项目的Docker仓库在https://github.com/Wind4/vlmcsd-docker
官网给了我们运行的命令,我们跟着它一起完成。
首先,你的服务器需要安装Git,Docker,Docker-Compose,Vim(可选)。然后我们找一个合适的位置克隆仓库。
当然大陆服务器可能克隆不下来。我们可以借助镜像站克隆。
克隆完成后,我们进入该文件夹,会发现三个文件。此时如果你是境外的服务器,我们直接按照官网上的步骤进行。如果你是大陆服务器,请忽略这里,并查看图片底下的内容。
或者
当然你也可以借助宝塔面板等第三方管理工具进行管理。在利用第三方工具时需要开放1688的TCP端口。
如果你是大陆服务器,Github可能无法访问。我们还需要向上面那样修改为Github镜像。
打开后,我们将划线位置修改成图片的这样。
然后:wq
保存并退出,再执行
或者
当然你也可以借助宝塔面板等第三方管理工具进行管理。在利用第三方工具时需要开放1688的TCP端口。
现在程序应该启动了,但是部分云服务器需要到服务商的控制台开启安全组。查看如何使用KMS,请访问 https://www.hestudio.net/posts/how-to-use-kms.html
]]>暂无
之前安装过补丁的或者已经安装其他vnc的用户不要安装。
wget https://res.hestudio.net/kali_for_android/patch/ka_install_patch_230603 && bash ka_install_patch_230603
之前安装过补丁的或者已经安装其他vnc的用户不要安装。
[Process completed (signal 9) - press Enter]
,这是因为Android 12的PhantomProcesskiller限制了应用的子进程,最大允许应用有32个子进程。
这里以ColorOS 12.1为例(其他系统操作略有出入)
[Process completed (signal 9) - press Enter]
,这是因为Android 12的PhantomProcesskiller限制了应用的子进程,最大允许应用有32个子进程。
这里以ColorOS 12.1为例(其他系统操作略有出入)
没有Termux?点击这里安装
利用Android 12的功能,使Termux处于浮窗状态。
例如我的IP地址是192.168.0.103:45367
那么我应该输入
当显示Enter pairing code:
时,输入配对码链接。
比如我的IP地址是192.168.0.103:41249
,我应该输入
当输出
时,即代表已经链接成功。
65536
termux-x11 是Termux的一个图形化项目,官方是这么介绍的。
A Termux add-on app providing Android frontend for Xwayland.
termux-x11 是Termux的一个图形化项目,官方是这么介绍的。
我们需要在Termux和安卓系统上安装工具以成功的运行程序。
Termux官方组件
Xfce 是类 UNIX 操作系统上的轻量级桌面环境。虽然它致力于快速与低资源消耗,但仍然具有视觉吸引力且易于使用。
我们安装它的原因主要是因为它对Termux的适配性更好,在官方Github上也是使用xfce作为案例。在本文中将以xfce作为案例安装,但你也可以选择其他桌面环境。
你需要同时安装Termux和安卓的安装包。
上面我们说了,它是"A Termux add-on app providing Android frontend for Xwayland".所以我们首先安装xwayland
访问 https://github.com/termux/termux-x11/actions/workflows/debug_build.yml
选择最新的一个进入,在底部找到"Artifacts",下载并解压该文件。
我们需要apk
和deb
文件,先安装apk
文件。
记住文件目录,在Termux安装deb
文件
官方为xfce提供了命令以启动xfce,分别是:
我们为了启动方便,可以直接将它保存到一个shell文件里以供快速启动。
我这里以x11
作为快捷名称,你也可以使用其他的名称。在使用其他的名称时,相应的指令也要更改
在填写完之后我们要赋予其权限,
在里面填上上面的启动指令,以后将可以通过对应的指令启动。
此时功能已经可以使用。
但是这样使用体验感很糟,我们需要一些小设置。
在长按termux-x11的图标后会显示出来几个选项,我们选择"Preferences"
将框中的选项按照图示中的设置,并重新打开termux-x11
可以正常使用了!
]]>5900+X
作为版本号的。在重启后会继续向下一位分配版本号,这就意味着我们会经常修改vnc显示器的端口号。如果我们在运行的时候指定一个端口,那么实际上这个端口就固定了。
vncserver :1
5900+X
作为版本号的。在重启后会继续向下一位分配版本号,这就意味着我们会经常修改vnc显示器的端口号。如果我们在运行的时候指定一个端口,那么实际上这个端口就固定了。
在这种情况下vnc服务就会在5901
端口运行。如果你想要在其他端口运行,那么可以将1改成其他数值。
如果需要固定一个简便的方法,那么我们可以尝试创建一个脚本并通过脚本快速通过固定的端口启动。
其中:1
应当改为你需要的数值,vncserver-start
应当改为你想要的脚本名称(需要是非中文或特殊字符且不要和系统原有指令冲突)。然后以后可以通过脚本快速通过固定端口启动。
回复
酷
回复
酷
回复
UNetbootin
我的回复
被调用以创建一个新的 cls 类的实例。new() 是一个静态方法 (特殊情况下,所以你不需要把它声明为静态方法),它把请求实例的类作为它的第一个参数。其余的参数是传递给对象构造函数表达式的参数(对类的调用)。new() 的返回值应该是新的对象实例(通常是 cls 的一个实例)。
典型的实现是通过调用超类的 new() 方法来创建一个新的类的实例,使用 super().new(cls[, ...]) 并带有适当的参数,然后在返回之前对新创建的实例进行必要的修改。
如果 new() 在对象构造过程中被调用,并且返回 cls 的一个实例,那么新实例的 init() 方法将被调用,就像 init(self[, ...]) ,其中 self 是新实例,其余参数与传递给对象构造函数的参数相同。
如果 new() 没有返回 cls 的一个实例,那么新实例的 init() 方法将不会被调用。
new() 主要是为了允许不可变类型的子类 (像 int, str, 或 tuple) 定制实例的创建。它也通常在自定义元类中被重写,以便自定义类的创建。
翻译自 Python Docs
@yms 的回复
@404 Not Found 在 Python 中,不可变类型(如整数、字符串、元组等)的实例在创建后是无法修改的。这是因为 Python 的实现方式,它们的值被存储在对象中,并且对象的标识符在创建后不能更改。
当一个类继承一个不可变类型时,它的实例也应该是不可变的。因此,如果不重新定义 __new__
方法,那么这个类继承的不可变类型的 __new__
方法会返回一个不可变的实例,而这个实例无法修改。
为了解决这个问题,我们可以通过重新定义 __new__
方法来创建一个可变的实例。在 __new__
方法中,我们可以调用父类的 __new__
方法来创建一个不可变的实例,然后将其转换为可变类型的实例并返回。
以下是一个简单的例子,演示了如何继承 Python 中的不可变类型并重新定义 __new__
方法来创建可变实例:
在这个例子中,我们创建了一个 MutableTuple
类,它继承自不可变类型 tuple
。在 __new__
方法中,我们先调用了父类 tuple
的 __new__
方法来创建一个不可变的实例 obj
,然后将其转换为一个可变的列表,并返回这个列表。这样,我们就可以使用 MutableTuple
类来创建可变的元组了。
需要注意的是,虽然这种方法可以让我们创建可变的实例,但这些实例仍然具有不可变类型的特性,即一旦创建后,它们的值就不能被修改。因此,在继承不可变类型时,我们仍然需要遵循不可变类型的规则来使用它们。
回复
@AE86 我又不知道你下载哪里了,不会自己看吗,自己在这里问问题不了解一点基本知识吗,这种Linux基础百度都能找到的,在群里发牢骚不是咨询问题的好方法,尤其是这种问题。
回复
termux配合mt管理器
提示
运行端口在3000
提示
运行端口在3000
返回参数:
参数 | 说明 |
---|---|
title |
标题 |
返回参数:
参数 | 说明 |
---|---|
copyright |
版权信息 |
copyrightlink |
版权信息所对应的链接 |
详见 https://www.hestudio.net/docs/hestudio_bing_wallpaper_get.html
]]>但是在这之前,你需要准备一些东西,包括
本文参照 TWA踩坑记-从零到一让你的博客变成app并上架商店 编写,由于版本更迭的原因,原教程的方法已经不再完全可用。感谢 Harbor Zeng 老师的思路。
]]>但是在这之前,你需要准备一些东西,包括
本文参照 TWA踩坑记-从零到一让你的博客变成app并上架商店 编写,由于版本更迭的原因,原教程的方法已经不再完全可用。感谢 Harbor Zeng 老师的思路。
首先我们需要设置仓库。打开project目录的settings.gradle
,然后参考这样设置。
然后打开app目录的build.gradle
,设置Java8,这个库依赖Java8
并添加这个库
在保存文件后Android Studio会提醒你是否Sync,这时开始同步。
把上面的网站地址和域名都换成你自己的。
我们需要将应用链接到网站以进一步取消地址栏。我们就需要分别设置网站验证APP和APP验证网站。
打开/app/src/main/res/values/strings.xml
,插入以下代码
将site的网址改成自己的,然后再返回到AndfoidManifest.xml
,在activity
前面插入meta-data
你可以使用assetlinks.json
验证程序是否合法。那么你需要准备一些东西,包括签名证书。
.well-known
文件夹,并在里面新建assetlinks.json
最后,我们修改我们自己需要自定义的部分,经过测试后,打包后就可以发布使用。
]]>Git是一个强大的工具,这里罗列一下它的一些工具,相信看完这篇文章你也可以熟练的使用Git的命令行。
这里就不讲解安装方法了,关于Git的安装详见 起步 - 安装 Git
]]>Git是一个强大的工具,这里罗列一下它的一些工具,相信看完这篇文章你也可以熟练的使用Git的命令行。
这里就不讲解安装方法了,关于Git的安装详见 起步 - 安装 Git
在安装之后我们需要设置用户名和邮箱,Git通过这些信息判断提交代码的用户。
如果你安装Git只是为了拉取公共仓库,那通常不需要设置此项。
创建一个新的本地存储库
克隆存储库(代码仓库)
将存储库克隆到指定目录
将存储库克隆到指定目录,并指定分支
在工作目录中显示修改后的文件,为您的下一次提交暂存
暂存文件,准备提交
暂存所有更改的文件,准备提交
将所有暂存文件提交到版本化历史记录
将所有跟踪的文件提交到版本化历史记录
取消暂存文件,保留文件更改
将所有内容恢复到最后一次提交
已更改但未暂存内容的差异
已 commited 但尚未提交的内容的差异
在指定分支之前应用当前分支的任何提交
设置将附加到您的提交和标签的名称
设置将附加到您的提交和标签 tags 的电子邮件地址
启用 Git 输出的一些着色
在文本编辑器中编辑全局配置文件
显示本地 repo
配置设置
删除全局设置
列出所有本地分支
列出所有分支,本地和远程
切换到 my_branch
,并更新工作目录
创建一个名为 new_branch
的新分支
删除名为 my_branch
的分支
将分支 A
合并到分支 B
标记当前提交
从远程分支中创建并切换到本地分支
显示当前活动分支的提交历史
显示 branchA 上不在 branchB 上的提交
显示更改文件的提交,即使跨重命名
显示 branchA 中的内容与 branchB 中的内容的差异
以人类可读的格式显示 Git 中的任何对象
文件 .gitignore
指定了 Git
应该忽略的 未跟踪的 文件,在实际使用中可以避免提交缓存和已经生成的文件。
符号 | 作用 |
---|---|
行首 # |
全行注释,不支持行尾类注释 (转义 \# ) |
行首 ! |
否定模式 (转义 \! ) |
** |
匹配任意路径 |
* |
匹配任意多个字符 |
? |
匹配任意一个字符 |
doc/** |
匹配 doc 文件夹下的全部内容 |
doc/**/a |
匹配任意深度路径下的 a 文件或文件夹 |
/ |
表示路径分隔符,不区分操作系统 |
/ 结尾 |
仅会匹配文件夹,否则会匹配文件和文件夹 |
空行 | 不匹配任何文件 |
行尾空格 | 默认被忽略,可使用\ 进行转义 |
行首空格 | 被正常处理,不会被忽略 |
当前 .gitignore
文件定义规则的优先级高于上级路径 .gitignore
定义规则的优先级;后定义的规则优先级高于前面定义规则的优先级
从该 Git 远程获取所有分支
将远程分支合并到当前分支以使其保持最新状态
将本地分支提交传输到远程存储库分支
从跟踪远程分支获取并合并任何提交
将另一个分支的一个特定提交合并到当前分支
添加一个 git URL 作为别名
显示您设置的远程存储库的名称
显示远程存储库的名称和 URL
删除远程存储库
更改 git repo 的 URL
从项目中删除文件并暂存删除以进行提交
更改现有文件路径并暂存移动
显示所有提交日志,并指示任何移动的路径
new
按内容搜索更改
显示特定文件随时间的变化
打印出很酷的日志可视化
列出所有分支及其上游
快速切换到上一个分支
只获取所有远程分支
从另一个分支签出单个文件
删除本地存在远程不存在的分支
重写最后的提交信息
不再将文件的权限变化视作改动
也可以看看:更多别名
保存并退出,会弹出下面提示
抛弃本地所有的修改,回到远程仓库的状态
把所有的改动都重新放回工作区,并清空所有的 commit,这样就可以重新提交第一个 commit
了
输出工作区和暂存区的 different (不同)。
还可以展示本地仓库中任意两个 commit 之间的文件变动:
输出工作区、暂存区 和本地最近的版本(commit)的different(不同)。
或者在 push
时加上 -u
参数
关联之后,git branch -vv
就可以展示关联的远程分支名了, 同时推送到远程仓库直接:git push
,不需要指定远程仓库
blame
的意思为责怪
,你懂的。
新建一个分支,分支内容就是上面 git bundle create
命令导出的内容
相当于保存修改,但是重写 commit 历史
只会 clone
最近一次提交,将减少 clone
时间
关闭 track 指定文件的改动,也就是 Git 将不会在记录这个文件的改动
恢复 track 指定文件的改动
最新的放在最上面
通过 grep 查找,given-text: 所需要查找的字段
不添加参数,默认是 -mixed
username
需要改成自己的这里是排名前十,也可以更改排名
如果你修改过DNS设置,请不要进行安装,该补丁会覆盖DNS服务器设置。
wget https://res.hestudio.net/kali_for_android/patch/ka_install_patch_230107 && bash ka_install_patch_230107
如果你修改过DNS设置,请不要进行安装,该补丁会覆盖DNS服务器设置。
那么其实我们也可以自己做一个MFA验证器。本着只要网上有,绝不自己做的原则,我们将使用开源模块拼凑而成。
]]>那么其实我们也可以自己做一个MFA验证器。本着只要网上有,绝不自己做的原则,我们将使用开源模块拼凑而成。
相关信息
这里只讲解它的原理,图形方案交给你们设计。
首先我们需要安装pyotp
(获取动态口令)和heframework
(简化开发过程),这两个模块均可以通过pip
安装。上述模块需要在Python 3.6及以上版本才可以运行。
它首先可以获取动态口令,这是它最直接的功能。获取动态密码需要对应的Secure,所以它也需要管理Secure的功能。管理面板需要包含添加,删除这些基本操作。
所以我们计划使用json
文本交换格式作为Secure的存储介质,使用list
分别存储Secure及其对应的名称。
我们首先需要根据主程序图写出一个大纲,以准备后续填充代码。这里需要参考一下heframework的choose
模块用法
根据上面的内容,我们可以写出管理界面的选择器。
在这里就涉及到了json
的操作和文件的读写操作。我们还是继续使用heframework
作代码的简化。
这里代码执行的是顺序操作。首先需要用户录入令牌的名称和Secure。需要检验是否存在token.json
文件,如果不存在则新建一个。如果该文件存在则读取该文件,并确保不存在重复的值。
如果以上判断返回的值为true
,先将name
和secure
对应的list
读取到内存,将新增的值通过append()
写入,再将内存中的值重新写入json
文件中。
这里依旧使用顺序结构。将token.json
读取后,遍历列表。当用户选择后,通过del
对应的选项实现删除操作。
当然,最重要的东西要留在最后,这部分内容是这个程序最重要的部分。
我们使用pyotp
作token的运算,如果想了解这部分内容可以去搜索一下TOTP
pyotp
输出的6位数临时密码通常是几秒变化一次,通过我们的了解,其他同类软件的变化周期通常是30s
根据这些我们就可以写出一个动态密码显示器。
总结代码如下
我们需要准备PEM格式的证书文件。新建一个文档,将私钥放在上面,另起一行,在底下粘贴公钥部分。
]]>我们需要准备PEM格式的证书文件。新建一个文档,将私钥放在上面,另起一行,在底下粘贴公钥部分。
在服务器上执行
将刚才连接好的证书粘贴在上面。:wq
保存文件。登录宝塔面板,转到 软件商店 -> Pure-Ftpd 设置 -> 重启。
再次登录 FileZilla , 尝试连接后,报错消失了。
]]>这里以Termux为例,同时也适用与其他Linux版本
本篇教程都是以~/.bashrc
(bash)或~/.zshrc
(zsh)为基础的(小白可读),所以要学会编辑文件。
由于不同的终端对应不同的文件,所以需要查看你的终端类型。
]]>这里以Termux为例,同时也适用与其他Linux版本
本篇教程都是以~/.bashrc
(bash)或~/.zshrc
(zsh)为基础的(小白可读),所以要学会编辑文件。
由于不同的终端对应不同的文件,所以需要查看你的终端类型。
使用这个命令查看终端类型
例如,我这个终端就是zsh
然后使用下面的其中之一编辑对应的文件
或
:wq
退出vim:wq
退出vim运行效果如下
为当前用户设置专属的环境信息和启动程序,当用户登录时该文件执行一次。默认情况下,它用于设置环境变量,并执行当前用户的 .bashrc 文件。理念类似于 /etc/profile,只不过只对当前用户有效,也需要重启才能生效。(注意:Centos7系统命名为.bash_profile,其他系统可能是.bash_login或.profile
为当前用户设置专属的 bash 信息,当每次打开新的shell时,该文件被执行。理念类似于/etc/bashrc,只不过只对当前用户有效,不需要重启只需要打开新的shell即可生效。
]]>使用以下命令修改root密码
在Linux输入密码时不会显示,即使你已经输入完了。
这里以kali为例
其他linux系统的镜像源请自行百度。
把两条源地址添加在sources.list文件末尾,默认官方源是开启的只需要在“官方源”前面加【#】号就可以关闭。
以Debian系linux为例
以Debian系linux为例
基于Debian的Linux发行版,一般使用apt
作为软件包管理器,安装.deb
格式的软件包。 ↩︎
AtlasOS 是一个开源免费的项目,旨在为游戏玩家提供最合适用于运行游戏的操作系统。它基于 Windows 10 定制而来,“精简”删除了各种非必要的系统组件,剥离了众多的 Windows 后台进程,从而为游戏节省出大量的系统资源。
]]>AtlasOS 是一个开源免费的项目,旨在为游戏玩家提供最合适用于运行游戏的操作系统。它基于 Windows 10 定制而来,“精简”删除了各种非必要的系统组件,剥离了众多的 Windows 后台进程,从而为游戏节省出大量的系统资源。
所以我下载了一个来实际体验一下究竟有没有那么厉害。我下载的是它的20H2版本,也是他们推荐的版本。
它的下载源在Github上,所以有的时候会出现无法下载的情况。这时我们需要Watt Toolkit[1]。终于能下了,但是这速度有点...
终于下载好了!
官方推荐的工具是 Rufus ,也是需要Github下载。所以我改用微PE安装它。相信能看我的文章的人都会用PE装系统,这里就不一一讲解了。
在安装之后我们会发现他是英文的,而且它的语言设置无法安装中文。虽然说有办法安装语言包,但是总是没有原生的好用。而且由于它阉割了很多系统最基本的功能和驱动,导致我的Wi-Fi总是时不时的断开(因人而异)。
但是,它的系统资源消耗是真的低(这里忘了截图了)。随着系统资源消耗的降低带来的兼容性问题也是数不胜数(官方已经说明),最后只能换回原系统。
最后说一下,这个系统只适合在低配置的电脑打游戏的群体,并不适合作为生产力使用(更不适合装在主力机上还不懂英语的人)。如果你们要尝鲜的话建议使用虚拟机尝鲜。
阿,你已经可以关了,这里没有重要的东西。
上文中说的“装在主力机上还不懂英语的人”就是我。
我在我的电脑里找到了一个之前做的一个VHD虚拟磁盘,里面装的是企业版LTSC,想通过修改BCD文件建立引导。由于手头没有U盘,所以采用的是硬盘直装法。
由于心情原因,导致我把C盘给格式化了,而且BCD文件内的一个字母打错了,结果你懂得(仔细看截图上的日期和页首的发布时间)。
原Steam++,官网地址是 https://steampp.net ↩︎
相关信息
这里只讲解它的原理,图形方案交给你们设计。
通过查阅资料可知,切换电脑深浅色可以通过修改注册表实现,这里提供两串代码
因为从 Windows 10 v1903 开始,深色主题分为 Windows 模式(每个代码块上半部分)和应用模式(每个代码块下半部分),这时我们就需要判断Windows版本号。
我们打开cmd.exe
,通过执行ver
命令可以获取版本号。
我们需要的是22621
这部分内容,所以我们需要获取这部分内容,代码是
通过查阅资料可知,Windows 10 v1903 的版本号是10.0.18362.xxx
,所以我们可以通过以下代码判断
如果返回结果为True
那么就执行两个指令,否则执行一个指令。
那么,这部分的完整代码为
实现自动切换可以通过计划任务控制。为了方便展示原理,我这里直接用函数表示,在实际运用中,这里通常是可以变化的。
首先我们需要实时获取现在的时间
通过获取预设直接调用函数
当然,这里也可以实现自动切换壁纸,只需要在if
内的light()
或者dark()
的底下利用os.system()
执行对应的命令即可。有关切换壁纸的cmd命令,你可以在百度中查找。
最后将上面的代码总结一下
你可以自主设计一个前端,通过调用dark()
和light()
切换对应的模式。
]]>而且,听说Windows11在后续的更新中要加入快速切换的按钮。
launch.json
文件.vscode/launch.json
文件console
为externalTerminal
此步适用于Windows10/11,这里以Windows11为例
注意
本文中提供的并不是最新版本,如果出现链接问题,请尝试将电脑和手机上的App都更新到最新版本。电脑版本可以在Microsoft Store更新,而手机版本可以在Google Play Store更新。
查看通知,照片,发送短信,拨打电话(需要蓝牙),查看手机照片,快速修改手机设置
需要的工具:build(构建),twine(上传)
这个可以是任意内容,但必须要遵守Markdown格式,这个文件实际在pypi显示出来的效果是这样的。
这个文件用于告诉pip这个包的一些相关信息,如作者,描述文件等。
官方文档给出的示例是这样的
或者你可以参考一下我的项目中的是怎么写的。
这里 翻译 讲解一下各项的意义
name
是包的分发名称。这可以是任何名称。version
是包版本。有关版本的更多详细信息,请参阅版本说明符规范。一些构建后端允许指定它使用另一种方式,例如从文件或 git 标签。authors
用于标识包的作者。您指定一个名称,以及每位作者的电子邮件。description
是包的简短、一句话的摘要。readme
是显示在 PyPI 上的包详细信息页面上的描述文件。项目元数据规范中还描述了更高级的表形式。requires-python
提供您的项目支持的 Python 版本。像 pip 这样的安装程序会回顾旧版本的包,直到找到具有匹配 Python 版本的包。classifiers
为索引和点提供一些额外的元数据 关于您的包裹。在官方示例的这种情况下,该包仅兼容 Python 3,根据 MIT 许可证获得许可,并且独立于操作系统。你应该始终至少包括您的软件包适用于哪个版本的 Python, 您的软件包在哪个许可证下可用,以及哪些操作系统可以让您的软件包正常工作。有关classifiers的完整列表,请参阅 https://pypi.org/classifiers/。urls
允许您列出任意数量的额外链接以在 PyPI 上显示。 通常,这可能是针对源,文档,问题跟踪器等。它在pypi上是这样显示的。
如果你的项目包含多个文件夹,你可以使用它进行配置。这个是我的项目的文件,我提供出来作为示例。
其中,name
, version
, description
, author
, author_email
与pyproject.toml
一致,url
为你的项目的主页。
packages
用元组表示你的项目所包含的文件夹,在我的示例中,我所包含的文件夹从左到右依次是src
文件夹和项目根目录。在这个文件中,我们用空白项(如我的示例中的packages
的第二个)表示根目录。
我们已经在前面安装过了工具和写了配置文件,这个时候就可以开始构建项目了。
使用以下命令构建。
当出现 Successfully 的时候,就代表项目构建成功。此时,你的项目文件夹内会生成dist
文件夹,这个文件夹内就是你构建的文件。
你需要在 https://test.pypi.org/account/register/ 注册一个账号用于测试你的安装包。你需要验证你的邮箱。然后上传进行测试。这里我已经尝试过了,如果你需要看具体如何操作,请阅读正式上传的部分(在下面)
然后通过以下命令进行安装
其中example
是你的项目的名称,它应该为上文的name
的值。
是的,也就是通过我们熟知的pip
安装。
首先你需要注册一个pypi账号,并验证你的邮箱。pypi账号和testpipy账号是截然不同的两个体系。
然后通过以下命令上传。
最后,我们直接安装就可以。
其中example
是你的项目的名称,它应该为上文的name
的值。
然而,在手机上敲代码总是有一些别扭,所以这篇文章就教你怎么远程链接,也就是用ssh连接。
]]>然而,在手机上敲代码总是有一些别扭,所以这篇文章就教你怎么远程链接,也就是用ssh连接。
如果出现图片上的画面,则已经开启ssh服务
Termux的sshd只能通过密钥登陆,因此你需要在客户端上生成密钥对。
把客户端上的公钥加到Termux中的 .ssh/authorized_keys,这一步比较麻烦。因为你无法使用 ssh-copy-id,只能先把 id_rsa.pub 拷贝到手机上,再在手机上打开该文件,拷贝文件内容后在Termux中用 vi 打开 authorized_keys,并复制内容进去。
或者在电脑上将 id_rsa.pub 文件(是整个文件,不是复制文件内容)拖到文件传输助手中,在手机上用Termux打开,点击 EDIT ,然后打开termux
不过如果客户端上本身也开启了ssh服务的话,则会简单很多,可以在Termux上执行
就行了,其中clinet为客户端的地址,user为登陆用户.
在客户端上执行
把 127.0.0.1换成手机ip
手机IP可以在 设置 --> WLAN --> 高级设置 里查看
]]>最后一次更新:2022.11.1
提示
了解如何自己搭建一个KMS服务器请访问: https://www.hestudio.net/posts/build-a-kms-server-yourself.html
提示
了解如何自己搭建一个KMS服务器请访问: https://www.hestudio.net/posts/build-a-kms-server-yourself.html
相关信息
Windows和Windows Server的GVLK代码可以在这里获取:https://docs.microsoft.com/zh-cn/windows-server/get-started/kms-client-activation-keys
注意
这里的教程仅适用于Office 2016以后的版本,早于此版本的Office仍然可以使用这个KMS服务,但是这里不提供相关资料,需要自行摸索。
C:\Program Files\Microsoft Office\Office16\
文件夹内;如果是64位的计算机安装了32位的系统,那么它应该在C:\Program Files (x86)\\Microsoft Office\Office16\
相关信息
Office的GVLK代码可以在这里获取:https://docs.microsoft.com/zh-cn/deployoffice/vlactivation/gvlks
由于kali官方的Nethunter[2]的安装代码因为...无法访问,手头又没有一些受支持的机器[3],所以做了这个脚本,供大家使用。
由于kali官方的Nethunter[2]的安装代码因为...无法访问,手头又没有一些受支持的机器[3],所以做了这个脚本,供大家使用。
Waline 是一款从 Valine 衍生的带后端评论系统。可以将 Waline 等价成 With backend Valine.它的强大的自由度吸引力我。这里不多介绍,详细请浏览 https://waline.js.org
因为咱也是有服务器的人了,所以我们直接全私有部署。详细的方案如以下所示:
其他的部署方案请在waline官网查看,这里只讲述独立部署。
]]>Waline 是一款从 Valine 衍生的带后端评论系统。可以将 Waline 等价成 With backend Valine.它的强大的自由度吸引力我。这里不多介绍,详细请浏览 https://waline.js.org
因为咱也是有服务器的人了,所以我们直接全私有部署。详细的方案如以下所示:
其他的部署方案请在waline官网查看,这里只讲述独立部署。
我打算用docker-compose
部署到我们的服务器上,那么我们就需要准备docker-compose.yml
那么我们还需要填写环境,有关环境变量的相关内容因为篇幅太长,所以我直接放传送门 https://waline.js.org/reference/env.html
众所周知,HTTP是明文传输的,而HTTPS是密文传输。所以我们想要实现密文传输,就需要SSL证书和Nginx反向代理。
SSL证书我们使用Let's Encrypt即可,现在我们要设置的是Nginx反向代理。
这里以宝塔面板为例,
由于我们用的是MySQL,所以直接跳过传送门上面的内容,直接转到MySQL位置。
这里就有一个问题,就是你必须保证你的数据库在外部能访问,localhost
在这里无效(别问我怎么知道的),你需要打开权限才能保证你的数据库在外边能访问,下文主机地址需要填写你的公网IP或者域名(像www.hestudio.net
这样没有协议头和斜杠的纯域名)
注意
你的数据库在外部能访问,建议你不要用默认的数据库端口号(3306)
初次使用需要向MySQL数据库导入一段数据,将以下内容复制,另存为以.sql
为后缀的文件,然后导入数据库。
然后按照下面模板填写,以留备用
现在你需要部署到Docker,这里以宝塔面板为例,
服务端的最后一步,配置反向代理,这里还是以宝塔面板为例
最后,访问
并注册你的账号,如果注册成功即表示服务端的配置已经完成。
至此,服务端的配置就算告一段落了。下面开始客户端的配置,这里以hexo的fluid主题为例。
_config.yml
文件serverURL
为必填项,填写你的评论系统域名保存,部署。如果测试正常,就没有往下看的必要了。
当然,有的小伙伴遇到了虽然正确配置,但是网页底部的评论还是不显示,这个怎么办呢?因为向默认的CDN地址请求Hexo必须的waline.min.js
时找不到文件(404)。
以Hexo的fluid主题为例,将主题的_config.yml底部CDN配置的Waline改为heStudio的CDN,然后再次部署。
开发不易,多多支持 #点击支持#
注意
该 CDN 地址已经停更,非必要不推荐使用!