photo of a male warrior, modelshoot style, (extremely detailed CG unity 8k wallpaper), full shot body photo of the most beautiful artwork in the world, medieval armor, professional majestic oil painting by Ed Blinkey, Atey Ghailan, Studio Ghibli, by Jeremy Mann, Greg Manchess, Antonio Moro, trending on ArtStation, trending on CGSociety, Intricate, High Detail, Sharp focus, dramatic, photorealistic painting art by midjourney and greg rutkowski
neg prompt
1
canvas frame, cartoon, 3d, ((disfigured)), ((bad art)), ((deformed)),((extra limbs)),((close up)),((b&w)), weird colors, blurry, (((duplicate))), ((morbid)), ((mutilated)), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))), out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck))), Photoshop, video game, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, mutation, mutated, extra limbs, extra legs, extra arms, disfigured, deformed, cross-eye, body out of frame, blurry, bad art, bad anatomy, 3d render
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:
#1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
[sudo] password for lcr: % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 379 100 379 0 0 1237 0 --:--:-- --:--:-- --:--:-- 1238
接着,安装xrdp和gnome相关的软件包
1 2 3 4 5 6 7 8 9 10 11 12
$ sudo dnf in xrdp gnome-terminal gdm neofetch ... Total 1.2 MB/s | 358 MB 05:05 Copr repo for xrdp owned by mywaaagh_admin 7.0 kB/s | 1.0 kB 00:00 Importing GPG key 0xA893D75B: Userid : "mywaaagh_admin_xrdp (None) <mywaaagh_admin#xrdp@copr.osinfra.cn>" Fingerprint: 945E 21A6 D982 49A7 A61A E62A 026A 219C A893 D75B From : https://eur.openeuler.openatom.cn/results/mywaaagh_admin/xrdp/pubkey.gpg Is this ok [y/N]: y ...
for i:=0; i<l; i++ { if max > i { p[i] = min(p[2*id - i], max - i) } else { p[i] = 1 } for ;i >= p[i] && i + p[i] < l && tmp[i-p[i]] == tmp[i+p[i]]; { p[i] += 1 } if p[i] + i > max { max = p[i] + i id = i } if maxlen < p[i] { maxlen = p[i] mxpos = i } } return s[(mxpos+1-maxlen)/2:(mxpos-1+maxlen)/2] }
#__file__ = 'bitbake/lib/bb/server/process.py' defmain(self): # Ignore SIGINT within the server, as all SIGINT handling is done by # the UI and communicated to us self.quitin.close() signal.signal(signal.SIGINT, signal.SIG_IGN) whilenot self.quit: try: if self.command_channel.poll(): # 检测是否有命令数据 command = self.command_channel.recv() self.runCommand(command) if self.quitout.poll(): self.quitout.recv() self.quit = True # 若无数据可读,执行注册的idle命令 self.idle_commands(.1, [self.event_queue._reader, self.command_channel, self.quitout]) except Exception: logger.exception('Running command %s', command)
ifnot params.observe_only: params.updateFromServer(server) params.updateToServer(server) cmdline = params.parseActions() ifnot cmdline: print("Nothing to do. Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.") return1 if'msg'in cmdline and cmdline['msg']: logger.error(cmdline['msg']) return1
ret, error = server.runCommand(cmdline['action']) if error: logger.error("Command '%s' failed: %s" % (cmdline, error)) return1 elif ret != True: logger.error("Command '%s' failed: returned %s" % (cmdline, ret)) return1
(blog)[root@localhost waaagh]# pelican-quickstart Welcome to pelican-quickstart v3.5.0. This script will help you create a new Pelican-based website. Please answer the following questions so this script can generate the files needed by Pelican. > Where do you want to create your new web site? [.] . > What will be the title of this web site? waaagh!!! > Who will be the author of this web site? lichaoran > What will be the default language of this web site? [en] zh > Do you want to specify a URL prefix? e.g., http://example.com (Y/n) yes > Do you want to specify a URL prefix? e.g., http://example.com (Y/n) yes > What is your URL prefix? (see above example; no trailing slash) pkking > Do you want to enable article pagination? (Y/n) y How many articles per page do you want? [10] ▽ Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n) y > Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n) y > Do you want to upload your website using FTP? (y/N) n > Do you want to upload your website using SSH? (y/N) y > What is the hostname of your SSH server? [localhost] > What is the port of your SSH server? [22] > What is your username on that server? [root] pkking > Where do you want to put your web site on that server? [/var/www] > Do you want to upload your website using Dropbox? (y/N) n > Do you want to upload your website using S3? (y/N) n > Do you want to upload your website using Rackspace Cloud Files? (y/N) n > Do you want to upload your website using GitHub Pages? (y/N) y > Is this your personal page (username.github.io)? (y/N) Done. Your new project is available at /root/blog/blog
完成后,目录结构如下:
yourproject/
├── content
│ └── (pages)
├── output
├── develop_server.sh
├── fabfile.py
├── Makefile
├── pelicanconf.py # Main settings file
└── publishconf.py # Settings to use when ready to publish
Linux 扭转了许多我认为我已知道的观念。多年来我一直宣扬使用小工具集、快速原型及快速开发的 UNIX 福音。但我也相信对于有一定复杂度的程序必需使用集中和有经验的方法来开发,我相信最重要的软件(操作系统以及庞大的工具程序如 Emacs)必须如建造一座教堂般,由个别的高手或一小群专家在光辉的孤立中小心翼翼地精雕细琢,时机未到之前,不会发布测试版。
Linus Torvald[2] 的软件开发风格(尽早并经常发布新版本,授权每一件作者可以委托的事,不拒绝几乎到混乱程度的程序)的出现如同一个惊奇,没有令人肃然起敬的教堂,甚至 Linux 的同好们似乎组成了一个有不同流程和不同方式的大市集(Linux 的档案网站就是它适切的象征,每个人都服从着自由的规则),以这个风格开发出来的 Linux 既一致又稳定,表面上看来真是一连串的奇迹。
接下来在这篇文章中我将陈述这个项目的故事,并且以它为例提出关于有效地利用开源模式来开发软件的格言,这些法则并非都是我在 Linux 中第一次学到,但我们可以看到 Linux 的世界是怎么赋予它们特别的意义。如果我是对的,那么这些格言将会帮你真确地了解是什么促成 Linux 社群成为好软件的原创者,并且帮助你变得更具生产力。
第二章 信一定要寄到
自 1993 年起,我一直担任一家提供免费上线的小型 ISP 的技术人员,这家 ISP 叫做 County InterLink(CCIL),位于宾夕凡尼亚州的 West Chester。(我本身参与捐款设立 CCIL,并写了我们独一无二的多人布告栏软件,你可以用 telnet 连线至 locke.ccil.org 一探究竟。目前它共有三十条线,可提供近三千位的用户上网。)这个工作让我可以一天二十四小时透过 CCIL 56K 的线路上网。事实上,我的确非常需要它!
网络原生的 SMTP(Simple Mail Transfer Protocol)转信功能在这里帮不上忙,因为我个人的机器并不是时时都和网络连结着而且它也没有固定的 IP 位址。我所需要的程序是这样的︰它可以间歇地连线把我的电子邮件都抓回来并放在我的机器。我知道有这样的程序,它们大部份都使用一个简单的网络应用协议叫 POP(Post Office Protocol)。目前 POP 是最通用的邮件客户端协议,但当时我使用的邮件读取端却没有这个协议。
其实我认为 Linus 在技术上最聪明和最重大的贡献并不在于写出 Linux 的核心程序,而在于发明 Linux 的开发模式。在一次和他的会面中,我提出了这点见解,他微笑着,并重复他常说的一句话︰「基本上我是一个非常懒的人,因其他人在 Linux 上真正的努力,而感到与有荣焉。」懒惰就像狐狸一样地精明,或者就如同 Rober Heinlein 曾说︰「因为太懒所以成功了。」
回顾过去的例子,在 GNU Emacs 的 Lisp 程序库及其 Lisp 代码的资源库中,我们可以看到 Linux 模式所用的方法和所得的成功。相对于 Emacs 中用 C 语言写的核心部分及自由软件基金会其他的工具(这都是以建造教堂的模式开发),Emacs Lisp 代码库非常地用户导向并且更新很快,好的点子和原型在最后成熟稳定前常常都已重写过三或四次,藉由互联网而来的非紧密合作进行得很频繁,就像 Linux 一样。
但一年之后,Linux 已受到四方的瞩目,也带来不同而且更健康的观点,Linus 的开放性发展策略和「建造教堂」非常不同。当时 Linux 的两大资源库 sunsite 和 tsx-11 正在萌芽,有许多版本在交流着,Linux 核心系统发布新版本的频繁程度前所未有。
Linus 以最有效的方法,视用户为协同开发者︰
格言7︰尽早,经常发布新版本,并且倾听用户的意见。
Linus 的创新并不完全在此(这在 UNIX 世界是行之有年的传统了),而在于提高这个做法效力的层次,使其能匹配他在开发的系统的复杂度。早期在 1991 年左右,许多人都知道他一天内发布一次以上 Linux 核心程序的新版本。因为他善用互联网和协同开发者们合作更胜于其他人。
他能我也能吗?还是只有像他这样的天才才办得到?
我并不认为如此,虽然 Linus 是一位很厉害的高手(在我们之间,有多少人能够完整地写出一个具有商品品质的操作系统核心呢?),但 Linux 并不是一个空前跃进的观念,Linus 也并非(或者说至少目前还不是)如 Richard Stallman 或 James Cosling(NeWS 和 Java 的创始者)这样的天才创新者,而我个人认为他是一位天才工程师,他有避免程序错误及避免程序开发掉入死胡同的第六感,和找到两点间最省力路径的技巧。事实上,整个 Linux 的设计中,我们可以看到 Linus 表现出的品质和他保守而简单的设计取向。
Linus 也在这种方式上下了赌注。因为程序都会有错误,Linux 核心程序以一种特别的方式来定出版本号码,让用户可以选择要用上一个比较稳定的版本,还是选择错误风险比较高的新版来使用新功能。这个策略尚未正式为大部分的 Linux 高手所採行,但是它也显示出一个事实,就是用户可做选择使得这两种版本都更有吸引力[8]。
项目进行的第一个月,我简单地依循着 Carl 原来基本设计的用意,第一个重大的改变是我加入 IMAP 协议的支持,我重构原来处理协议的程序,改成一个较为通用的驱动程序再加上三个驱动它的方法表(即 POP2,POP3 和 IMAP)。这个改变阐释了一个广义的原则,特别在像 C 这种先天上未提供动态类型的程序语言,程序员们最好谨记在心︰
所以我相信 fetchmail 项目的成功部分的原因是我防止设计上「聪明」的倾向,这个论点(至少)已经反驳了设计上的创意是市集模式项目成功的基本条件。以 Linux 来说,假设 Linus Torvalds 在开发程序的过程中,试图在操作系统的基本设计上力求创新,那么我们现在已有的 Linux 内核程序会如此稳定和成功吗?
「许多人同心协力」(severe effort of many converging wills)正是像 Linux 这样的项目所需要的 ―― 「命令法则」(principle of command)并不适用于被我们称为因特网的无政府主义者志愿者,为了更有效的运作和竞争,想要领导与他人合作的项目的电脑黑客,必须学习如何吸引和激励有兴趣的社群,并且是在 Kropotkin 所建议的「共识法则」(principle of understanding)的模式下进行,他们也必须要学习去使用「Linus法则」[19]。
稍早我提及「Delphi效应」是因为它可能可以解释「Linus法则」,但在生物学和经济学中的自适应系统中,有更多类似的地方可以更有力地印证它,Linux 的世界从许多方面看来,像是一个自由的市场或生态,由一群个体所组成,这些个体以一种自发性的自我更正程序,试着去发挥他最大的功用,所发挥出来的功用比起集中式的规划要来得更精巧,更有效率,这种方式正是在寻求「共识法则」(principle of understanding)。
Linux 黑客们最大化的实际利益不是典型的经济价值,而是在黑客中得来无形的自我满足和荣誉,(你也许可以认为他们的动机是「利他」,但这忽略了一项事实,就是利他主义只是利他主义者自我满足的一种形式),以这种方式进行的志愿者文化并非真的不寻常,就我长期参加的一个科幻小说俱乐部来说,它不像电脑黑客俱乐部那么明显地以「egoboo」(ego-boosting 或在同好圈里增强某人的信誉)做为驱动志愿者的力量。
Linus 在 Linux 项目中,成功地坐上项目守门员的位置(这个项目大部份的工作都由其他人所完成),也成功地培养项目的利基,直到它可以自我维持,这显示 Linus 精确地抓住 Kropotkin 所说「建立共识」的精神,用这个像经济学的观点来看 Linux 的世界,让我们知道共识是如何作用的。
许多人(尤其是在政治上不信任自由市场的)以为重视自我的个体文化会造成分裂,自扫门前雪,浪费,私密,和敌对,只要举一个简短的实例,就可以很明显地证明这个看法是错的,这个例子就是 Linux 相关的说明文档的多样,品质,和深度都相当令人惊讶,程序员不喜欢写说明文档似乎是金科玉律,但 Linux 的黑客们是如何写出这么多的文件呢?很明显地,Linux 重荣誉的自由市场运作得要比商业软件生产者重金投资的说明文档撰写公司好。
Fetchmail 和 Linux 这两个项目都展示出藉由适当地回报许多黑客,优秀的开发者或协调者能利用因特网,获得许多协同开发者,但不致让项目因混乱而失败,所以针对 Brooks 定律,我提出以下的反驳︰
这个答案通常伴随一点声明︰我们对开源社群能完成工作的信赖,源自于「性感」的吸引力或者技术上的喜悦,缺乏这两个要素的工作,如果不是没人做,就是做得很糟,除非有经理挥动鞭子,驱使不自由的受雇者去搅局,我在<Homesteading the Noosphere>这篇文章中已经由心理和社会的因素去质疑这个论点。然而就现在的目的而言,我想︰点出接受这种说法背后的意义会更为有趣。
8.实验版与稳定版 Linux 可以对冲彼此的风险。这分裂形成另一个问题︰截止日的死亡。当两边都有一个不可变动的功能清单与截止日,品质荡然无存且会形成大混乱。我输钱给哈佛商业评论的 Marco Iansiti 与 Alan MacCormack,因为他们向我展示了证据,就是鬆绑其中一的规定可以让排程可行。
截止日固定但功能清单可变动,放弃到截止日仍为完成的功能,这是一个可行的办法;稳定版 Linux 核心就是如此,Alan Cox(稳定版的维护者)相当准时的发布新版本,但不保证特定臭虫何时被修正,或是从实验版引进什么新功能。
另一个办法是设定想要的功能名单,并只在全部完成后发布;这是实验版 Linux 核心的作法。De Marco 与 Lister 指出这样的排程政策(完成后叫醒我)不只品质最好,而且平均来说,跟务实与激进的排程相比,发布的时间间隔也较短。
我怀疑在这论文的早期(2000 年初),我严重低估「完成后叫醒我」对社群的生产力与品质的影响。1999 年发布的 GNOME 1.0 带来的经验是,对未成熟产品的压力会抵销一般开放源代码产品应有的品质。
透明的过程、完成后叫醒我与开发者自我选择,这三者是对开放源代码的品质一样重要。 ↩