从前,在一个遥远的国度里,有一位善良的老奶奶。她喜欢在自家的小花园里忙碌,为了给周围的人带来快乐和温暖。有一天,她从市场上回来,发现天空中下起了大雪。她担心那些没有温室保暖的动物们,于是她决定煮一锅热汤,给它们送温暖。
她穿上了最保暖的衣服,戴上了帽子和围巾,然后出发了。虽然雪花飘落在她的身上,但她依然兴高采烈地寻找着。
在森林里,老奶奶遇到了一只小松鼠,它正躲在一棵树下颤抖。老奶奶把银耳汤端给小松鼠,小松鼠激动得无法用语言表达。它用可爱的眼神看着老奶奶,仿佛在说:“谢谢您,善良的奶奶!”
接着,老奶奶遇到了一只小兔子,它也正为寒冷而发愁。老奶奶把银耳汤端给小兔子,小兔子感到一股暖意从心底冒出,它高兴地蹦了起来。
不久后,老奶奶又遇到了一只小狐狸。小狐狸以前从未见过如此美味的汤,它吃了一碗后,还想要更多。老奶奶心满意足地给了它一碗银耳汤,小狐狸感激地看着老奶奶,说:“谢谢您,亲爱的奶奶!”
动物们都品尝到了老奶奶煮的最好的银耳汤,感到非常开心。
从那以后,老奶奶煮的银耳汤传遍了这个国度。动物们都爱戴着老奶奶,它们知道,老奶奶用她的善良和爱,为它们带来了温暖和幸福。而老奶奶,也因为她的善良和关爱,被动物们称为“银耳汤奶奶”,成为了这个国度最受尊敬的人物。
原版原式电子书制作工具推荐:名编辑电子杂志大师
推荐理由:支持H5版本输出,效果还不错,支持添加音视频等富媒体资源。
缺点:使用中有一些bug,官方软件更新不积极。
配套:为了给使用这个软件的客户提供支持,我做了配套的音频切割工具,有需要的可以微信我了解。

软件功能:

PDF/图片转换成翻页电子杂志
基本任何格式的设计稿或文档都能输出为PDF或图片格式,直接导入名编辑,即可转换为精美的3D翻书式电子杂志。另外,名编辑对PDF的识别、分割、切割能力非常强,无需借助其他软件。

批量转换多个PDF文件
您可以同时批量转换多个PDF文件。导入PDF文件,设置需要导入的页面范围和选择模板、主题,然后能一口气生成多个电子书或者合并为一本电子杂志了。

添加多媒体文件
您可以在电子杂志里添加形状、文本、链接、图片、视频、flash或声音文件。

设置背景音乐
在名编辑中,您可以设置背景音乐,并且可以选择循环播放或单曲播放等多种播放模式。

添加图片播放器
当您有很多图片需要在某个页面展示时,您可以在翻页电子杂志的页面添加图片幻灯片播放器,展示您需要展示的图片。

自定义背景图片、颜色背景和flash动态背景
您可以设置任何您喜欢的背景图片,设置纯色背景或者渐变色背景。如果您觉得图片背景不够绚丽,您还可以用flash动态背景。名编辑电子杂志大师提供了许多免费的场景,同时也可以导入您自己的flash文件作为背景。

输出HTML/EXE/Zip/Mac App/手机版本
HTML用于上传网络;*.EXE和*.Zip可直接发给客户在自己电脑上阅读;*.App用于在苹果电脑本地离线阅读;手机版输出的HTML5格式可在手机在线阅读、离线阅读。另外也可录制到CD。

上传到网上在线阅读,支持手机/平板/电脑
当您用我们的电子杂志制作软件制作了HTML格式的电子杂志后,您可以通过FTP上传到服务器空间,同时支持手机、平板和电脑在线阅读。

在线上传功能
一键上传制作好的电子杂志,并生成链接以及二维码用于微信分享,微信公众号推广,提供书橱功能实现同一个链接页面上展示多本书(需另外付费)

离线阅读:支持电脑/iPad/iPhone/安卓apk
名编辑电子杂志能输出离线阅读的电子杂志:支持Windows电脑、苹果电脑、iPad、iPhone和安卓apk。

嵌入到网页
用名编辑电子杂志大师制作的翻页电子杂志能够很方便的嵌入到您的个人页面、公司页面或者政府公共页面。

内置模板、主题和动态背景
为了更方便用户制作精美的翻页电子杂志,名编辑电子杂志大师软件自带了许多主题模板和动态背景,用户可以双击主题应用不同的电子杂志风格。

导入PDF中的超链接
在导入PDF文件的同时,PDF里面的内容也可以一并导入到翻页电子书中,包括文本、图片、书签和PDF中的网页链接、页面链接、邮箱链接等内容。

保存编辑文件
在制作电子杂志过程中,如果没编辑完成,或是因为有其他的事情不得暂时不终止杂志制作,用户可以把设置中的杂志导出为工程文件(FLB),下次可以导入再继续编辑。

预览效果
您在制作电子杂志的过程中,可以预览电子杂志输出后的效果。

设置电子杂志厚度、边缘大小、页面阴影
在名编辑电子杂志大师中,您可以设置电子杂志的厚度、边缘大小、页面阴影,让您的电子杂志外观以及翻页效果看起来更真实。

设置硬皮封面
根据自己的需要,设置成硬皮的封面,电子杂志外观看起来就更真实了。

设置多语言浏览界面
名编辑提供了英语,意大利,阿拉伯语,日语,韩语等十几种语言,您设置一种语言或者多种语言让您的读者可以自由切换。

定义电子杂志页面清晰度
在名编辑电子杂志大师中,有5个清晰度档次供您选择:超清、高清、清晰、普清和一般。用户可以根据自己的需求,自行选取导入页面的画质。

渲染引擎功能
设置不同的渲染引擎可以避免一些特定PDF在转换中变形、扭曲。如果您在导入PDF过程整出现了PDF导入失败,PDF导入信息有丢失或者PDF导入不完整,您可以尝试修改PDF导入渲染引擎。

导入PDF中的目录
如果您的PDF文件已经设置了目录,可以通过选取导入目录选项导入到电子杂志中,如果源PDF文件未设置目录,可以用软件新建目录。

添加标签书签功能
标签书签不同于目录,它不能从PDF页面中直接导入,但是您可以制作一个类似于书签按钮。点击标签按钮,就可以直接进入标签指定页面。

自动分割一个页面为两个页面
您之前制作的PDF书籍,可能是两个页面并列为一个页面,名编辑可以探测导入的PDF页面宽度,自动分割为两个页面。

添加密码保护
您可以给整本电子杂志添加密码,或者给单独几页、多少页之后的内容添加密码。读者需要输入密码才能继续阅读。

搜索功能
导入PDF中的文字,文字信息就能够被搜索,以及可以定义最低搜索字符。

设置工具栏图标
如果您觉得我们软件默认的工具栏图标不好看,您可以自己上传图标,设置自己喜欢的图标。

添加水印功能
添加文字,图片,动态日期等水印到电子杂志页面。

添加图片或者SWF水印文件到打印页面
添加这个功能后,用户在浏览电子杂志时页面不会出现水印,但是如果要打印出来,则打印出来的东西都会带有水印。这样可以保护您的版权。

添加带链接的Logo等信息
您可以在翻页电子杂志窗口中添加图片或者swf格式的Logo、标题、作者等个人信息,从而树立公司形象,标注版权。并且可以添加链接,点击进入指定链接页面。

添加功能按钮
您可以通过页面管理器功能中的添加按钮选项,在电子杂志一些页面添加功能按钮,指定按钮的功能为打开链接、跳至某一页面、调用Javascript 脚本、打开弹出窗口播放flash/视频、打开幻灯片等等。

设置右翻书或者左翻书的阅读模式
阿拉伯或者中国古书就是向左翻页的模式。

放大、缩小、全屏
我们提供了放大、缩小和全屏浏览模式,来提高用户在阅读时候的体验。可以通过双击翻页书页面来进行放大和缩小,或者通过放大、缩小、全屏功能按钮来进行操作。

卡通人物解说员助手功能
在电子杂志窗口显示卡通人物解说员助手,您可以直接插入或者录制声音给解说员在相应的页面配音。

设置页码展示以及开始页面
在电子杂志浏览界面窗口设置页码展示效果,以及设置电子杂志开始页面。

设置下载,打印,分享等功能

可选择分享某个页面
可以分享整本书(也就是别人打开后第一页开始阅读),也可以分享某个页面开始阅读(别人打开后就能直接看到这个页面)
北京的电动车
这里的电动车说的是电动自行车,我的第一辆电动车是2008年在武汉买的圣宝龙,车很好骑,算是电摩吧,武汉发大水的时候,可以在没了车上的水里畅行无阻,后来在光谷鲁巷广场附近被偷了,那会儿比较流行偷车。第二辆我去买了一个油电两用的车,发动机是杂牌子,老坏,底盘低,在过减速带的时候撞坏了漏了机油拉缸,去修车花了400,那次修车跟修车师傅聊天倒是有些收获,他说武汉当年去北京的学生老多了,有一个四百人的碑,都是没回来的,每年孩子们的家长们都去祭奠,我没去找这个碑。
后来这个油电两用车还被我托运到了北京,遇到警察叔叔就关掉发动机,改用电,发动机是隐藏的,排气筒也是隐藏的,不仔细看的话看不到,躲过了几次检查,后来又老坏,我就懒得修了,买了汽车,就不骑了,最后搬家的时候也没有带那个车架子,就算是扔了。
今年暑假去镇远古城,那个地方就是一条步行街,汽车不让进,可以骑电动车,所以各个旅店都租电动车,我们也租了一辆,老婆坐后面,被老婆抱着的感觉很好,我被种草了。
这两天在闲鱼上研究各种电动自行车,才发现这真是一个大江湖。便宜的有几百块的,贵的有一两万的。总体来讲,用车的人是三大类,一个是外卖员,一个是上班族和玩家,一个是接送孩子的。外卖员基本上用不了新国标的车,太慢,以至于大火了一种外卖专用新国标电动车,这种车虚标严重,不过这个虚标是标低,1500w的电机标称400w,以应付上牌,其他各项配置也远高于一线品牌,可称是物美价廉,只是毕竟是假国标,非外卖员一般不买。第二类是上班族和玩家,因为停汽车不方便或者根本弄不到牌子,只好骑电动车,不愿意亏待自己,所以很多人去买高价的小牛之类,进而还有很多改装,四五千的车能改成一万两万。第三类是接送孩子的,可以选最便宜的,新车一千多,二手也就几百,跟自行车差不多,只有一个大梁,没有车壳,轮胎也比较窄,没有什么美观度可言,也可以选雅迪之类的三四千的车,带壳子,这两年出的壳子还比较漂亮。
我盯了好几天,收藏了几十辆车,差不多有一半的车已经卖掉了。大部分都是个人出的,也有个别是电动车专卖店置换的二手车,开始我比较回避这种车,后来看看感觉也可以,但他们手上的车一般相对旧一些。网上看车的信息一个是看总里程,一个是看购买时间,像小牛这种可能不太容易篡改里程,其他的可以直接重置里程。
总结下来,出手最快的是新车,6个月以内的,要的钱又不算高的,可以直接按型号比价,盯了好几个,都是一犹豫就有人出手。最后买定了一个开了三百多公里的雅迪DQ6,车体是银色,车座是红色,样子比较讨喜。比新车便宜一千二。
Inkscape是一个免费开源的矢量图形编辑软件
Inkscape是什么?
Inkscape是一个免费开源的矢量图形编辑软件,它适用于GUN/Linux,Windows或MacOS X系统平台。Inkscape提供了一套丰富的功能,被广泛用于艺术和技术插图中,例如:卡通,剪贴画,logo,排版,图表和流程图。不同于像素图,Inkscape使用的是矢量图,因此并不会被固定的像素所限制的,从而可以得到无限尺度清晰的打印输出和渲染。Inkscape使用标准化的SVG格式作为其主要文件格式(许多应用都支持SVG格式,包括网页浏览器)。
Inkscape支持导入和导出多种文件格式,包括SVG,AI,EPS,PDF,PS和 PNG。它有着全面的功能、简单的界面,支持多种语言并被设计为可扩展的;用户可以用附加组件定制自己的Inkscape的功能。
Inkscape项目有着不断增长的全球性用户社区。有许多学习资料 可以帮助你开始自己的创作。帮助和支持是由社区提供的,如果你想帮助Inkscape项目变得更好,这里有许多方式可以供你参与进来 。
Inkscape是Software Freedom Conservancy(一个 美国501(c)(3)非盈利组织)中的一员。在美国,对Inkscape的贡献可以免税。
谁创造了Inkscape?
Inkscape是由许多作者共同创造的,每个作者都保留自己的版权,这些作者们也同样地参与了Inkscape技术和项目目标的设定。此外,还有许多非编程类的贡献者,他们也是Inkscape项目的重要一部分。
如果你想提及Inkscape的创作者或组织,你可以分别用 “Inkscape的贡献者们”和”Inkscape项目” 来区分Inkscape项目和Inkscape软件。
山河大学衡水分校校长孟繁永简介
孟繁永,男,汉族,1984年出生,河北衡水人。现任山河大学衡水分校校长,全面负责学校的教育教学、科研和管理工作。
孟繁永毕业于武汉大学,获文学学士学位。后赴美国纽约州立大学石溪分校学习,获硕士学位。他曾在河北工业大学工作,担任过河北工业大学环境学院副院长、环境科学系主任等职务。2023年,他加入山河大学,担任山河大学环境学院副院长,负责学院的教学和科研工作。2023年,他被任命为山河大学衡水分校校长,全面负责衡水分校的教育教学、科研和管理工作。
在校期间,孟繁永始终保持对教育事业的激情和热情,始终坚持以学生为本的教育理念,为学生的成长和发展做出了不懈努力。他注重加强学科建设和师资队伍建设,推动学院的教育教学质量不断提高。他深入了解学生的需求和个性,关注学生的心理健康,为学生提供个性化的教育服务,得到了学生和家长的广泛好评。
孟繁永十分注重国际交流与合作,促进学校与国外高校的合作交流,提高了学校的国际影响力。他积极参与国内外学术会议,与国际知名专家、学者进行深入学术交流,促进了学术研究的快速发展。同时,他充分发挥学校的优势,与国内外多家知名企业合作,为学生提供实习和就业机会,为学校的发展和就业市场做出了积极贡献。
在担任衡水分校校长期间,孟繁永坚持以教学为中心,以改革为动力,全面负责衡水分校的教育教学、科研和管理工作。他加强了对学科建设和师资队伍的建设,促进了学校的教育教学质量提高。他注重对学生的关爱和关注,深入基层,了解学生的需求和困难,为学生提供个性化的教育服务,使得衡水分校的学生在学业、生活和心理等方面都得到了很好的发展。
在教学方面,孟繁永倡导“以学生为中心”的教学理念,注重培养学生的创新意识和实践能力。他带领团队开展了一系列教学改革,深入推进课程改革和教学资源建设,使得学生的学习效果得到了显著提高。他注重启发式教学,鼓励学生积极参与课堂互动,激发学生的学习兴趣和主动性。同时,他注重培养学生的实践能力,积极组织学生进行实验、实习和项目合作等实践活动,提高了学生的实践能力和综合素质。
在科研方面,孟繁永一直致力于环境科学领域的创新研究。他积极参与学术会议和国际合作交流,与国际知名学者保持密切联系,不断推动学术研究的国际化进程。他带领团队开展了一系列具有影响力的科研项目,取得了显著的成果,为环境保护和可持续发展做出了重要贡献。
在校园文化建设方面,孟繁永注重发挥校园文化的引领作用,积极引导师生树立正确的价值观和人生观。他倡导“团结协作、追求卓越”的校训精神,营造良好的校园氛围,促进了学校的发展和进步。
在孟繁永的带领下,衡水分校在教学、科研和校园文化建设等方面取得了卓越的成绩。他的卓越才华和务实精神,赢得了师生们的广泛赞誉和信任。在未来的日子里,我们将继续关注孟繁永校长的工作,为衡水分校的发展贡献我们的力量。
【以上内容来自ChatGML2】
山河大学出版社简介
山河大学出版社成立于2023年,是一家依托于山河大学的专业出版机构。山河大学是一所具有悠久历史和良好声誉的高等学府,致力于培养优秀的人才,拥有广泛的学科领域和强大的科研实力。作为山河大学出版社,我们致力于为读者提供高质量、实用的图书,为学术研究和人才培养做出自己的贡献。
山河大学出版社是一家以图书、杂志、教材等出版物为主要业务的公司。我们的出版品种涵盖了各个学科领域,包括社会科学、自然科学、医学、工程技术、农业、经济、管理、教育等。我们的图书内容丰富,形式多样,既包括了传统的纸质出版物,也包括了数字化出版、在线阅读等现代出版形式。我们致力于为读者提供最全面、最丰富、最优质的服务,以满足读者的不同需求。
作为一家新的出版社,我们深知自己的责任和使命。我们坚持以读者为中心,以质量为根本,以服务为宗旨,努力为读者提供更好的阅读体验和更丰富的知识储备。我们的出版作品都将经过严格的审核和编辑,确保品质和内容的准确性。同时,我们也将积极引进和出版国外的优秀图书,推动文化交流和知识共享。
在未来的发展中,山河大学出版社将继续秉承“团结协作、开拓创新、质量第一、服务读者”的理念,努力为读者和社会做出更大的贡献。我们将进一步加强与各学科领域专家的合作,打造更多优秀的学术作品。同时,我们也将不断创新数字出版等现代出版形式,开拓新的业务领域,提升出版物的传播和推广效果。
此外,山河大学出版社还将积极参与社会公益活动,将出版物的利润部分用于社会公益事业,为推进教育、科学和文化事业做出自己的贡献。我们坚信,只有和社会各界共同努力,才能让读者享受到更好的阅读体验和更丰富的知识储备。
山河大学出版社将秉承“团结协作、开拓创新、质量第一、服务读者”的理念,为读者提供更多优质的图书和服务,为学术研究和人才培养做出贡献。我们期待与广大读者和社会各界共同努力,共创美好未来!
【以上文字来自于ChatGLM2】
jenkins FATAL: Failed to install https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.gz
> git rev-list --no-walk 7756bc509c8ed181c19b8b725a3b395e13ee7539 # timeout=10
FATAL: Failed to install https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.gz to /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs16.4.2
java.net.SocketTimeoutException: connect timed out
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.base/java.net.Socket.connect(Socket.java:609)
at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:305)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:507)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:602)
at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:266)
at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:373)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:207)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:193)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:168)
at hudson.FilePath.installIfNecessaryFrom(FilePath.java:993)
Caused: java.io.IOException: Failed to install https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.gz to /var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs16.4.2
at hudson.FilePath.installIfNecessaryFrom(FilePath.java:1067)
at hudson.FilePath.installIfNecessaryFrom(FilePath.java:980)
at jenkins.plugins.nodejs.tools.NodeJSInstaller.performInstallation(NodeJSInstaller.java:145)
at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:70)
at hudson.tools.ToolLocationNodeProperty.getToolHome(ToolLocationNodeProperty.java:109)
at hudson.tools.ToolInstallation.translateFor(ToolInstallation.java:221)
at jenkins.plugins.nodejs.tools.NodeJSInstallation.forNode(NodeJSInstallation.java:95)
at jenkins.plugins.nodejs.NodeJSBuildWrapper.setUp(NodeJSBuildWrapper.java:158)
at jenkins.tasks.SimpleBuildWrapper.setUp(SimpleBuildWrapper.java:294)
at hudson.model.Build$BuildExecution.doRun(Build.java:158)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526)
at hudson.model.Run.execute(Run.java:1900)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44)
at hudson.model.ResourceController.execute(ResourceController.java:101)
at hudson.model.Executor.run(Executor.java:442)
Finished: FAILURE
我的服务器环境是在docker中跑的jenkins,幸会我是把jenkins_home绑定到宿主机了。
jenkins:
image: jenkins/jenkins:${JENKINS_VERSION}
container_name: jenkins
volumes:
- ${JENKINS_HOME_DIR}:/var/jenkins_home
- ${JENKINS_CERTS_DIR}:/certs/client
- ${SOURCE_DIR}:/www/:rw
- ${TOMCAT_WEBAPPS_DIR}:/webapps/:rw
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
ports:
- "${JENKINS_HTTP_PORT}:8080"
- 50000:50000
privileged: true
user: root
restart: always
environment:
TZ: "$TZ"
JAVA_OPTS: '-Djava.util.logging.config.file=/var/jenkins_home/log.properties'
JENKINS_OPTS: '--prefix=/jenkins'
networks:
- default
根据错误提示,我可以确定需要哪个文件,以及要放到什么地方。那我就从别的地方下载https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.gz,然后解压到/var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/nodejs16.4.2这个目录,实际上这个目录对应的是我宿主机的某个文件夹,这样也方便操作。
没想到他们连nodejs都要封。
完美解决wsl+docker的二级代理上网问题
继续上一篇,基于wsl2的docker-desktop创建fast-whisper无法正常运行,错误日志如下:
2023-07-06 17:10:29 Traceback (most recent call last):
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/gradio/routes.py", line 394, in run_predict
2023-07-06 17:10:29 output = await app.get_blocks().process_api(
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/gradio/blocks.py", line 1075, in process_api
2023-07-06 17:10:29 result = await self.call_function(
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/gradio/blocks.py", line 884, in call_function
2023-07-06 17:10:29 prediction = await anyio.to_thread.run_sync(
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/anyio/to_thread.py", line 31, in run_sync
2023-07-06 17:10:29 return await get_asynclib().run_sync_in_worker_thread(
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
2023-07-06 17:10:29 return await future
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/anyio/_backends/_asyncio.py", line 867, in run
2023-07-06 17:10:29 result = context.run(func, *args)
2023-07-06 17:10:29 File "app.py", line 103, in transcribe_webui_simple_progress
2023-07-06 17:10:29 return self.transcribe_webui(modelName, languageName, urlData, multipleFiles, microphoneData, task, vadOptions,
2023-07-06 17:10:29 File "app.py", line 197, in transcribe_webui
2023-07-06 17:10:29 result = self.transcribe_file(model, source.source_path, selectedLanguage, task, vadOptions, scaled_progress_listener, **decodeOptions)
2023-07-06 17:10:29 File "app.py", line 280, in transcribe_file
2023-07-06 17:10:29 process_gaps = self._create_silero_config(NonSpeechStrategy.CREATE_SEGMENT, vadOptions)
2023-07-06 17:10:29 File "app.py", line 368, in _create_silero_config
2023-07-06 17:10:29 self.vad_model = VadSileroTranscription()
2023-07-06 17:10:29 File "/opt/whisper-webui/src/vad.py", line 437, in __init__
2023-07-06 17:10:29 self._initialize_model()
2023-07-06 17:10:29 File "/opt/whisper-webui/src/vad.py", line 445, in _initialize_model
2023-07-06 17:10:29 self.model, self.get_speech_timestamps = self._create_model()
2023-07-06 17:10:29 File "/opt/whisper-webui/src/vad.py", line 449, in _create_model
2023-07-06 17:10:29 model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad', model='silero_vad')
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/torch/hub.py", line 537, in load
2023-07-06 17:10:29 repo_or_dir = _get_cache_or_reload(repo_or_dir, force_reload, trust_repo, "load",
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/torch/hub.py", line 180, in _get_cache_or_reload
2023-07-06 17:10:29 repo_owner, repo_name, ref = _parse_repo_info(github)
2023-07-06 17:10:29 File "/usr/local/lib/python3.8/dist-packages/torch/hub.py", line 133, in _parse_repo_info
2023-07-06 17:10:29 with urlopen(f"https://github.com/{repo_owner}/{repo_name}/tree/main/"):
2023-07-06 17:10:29 File "/usr/lib/python3.8/urllib/request.py", line 222, in urlopen
2023-07-06 17:10:29 return opener.open(url, data, timeout)
2023-07-06 17:10:29 File "/usr/lib/python3.8/urllib/request.py", line 525, in open
2023-07-06 17:10:29 response = self._open(req, data)
2023-07-06 17:10:29 File "/usr/lib/python3.8/urllib/request.py", line 542, in _open
2023-07-06 17:10:29 result = self._call_chain(self.handle_open, protocol, protocol +
2023-07-06 17:10:29 File "/usr/lib/python3.8/urllib/request.py", line 502, in _call_chain
2023-07-06 17:10:29 result = func(*args)
2023-07-06 17:10:29 File "/usr/lib/python3.8/urllib/request.py", line 1397, in https_open
2023-07-06 17:10:29 return self.do_open(http.client.HTTPSConnection, req,
2023-07-06 17:10:29 File "/usr/lib/python3.8/urllib/request.py", line 1357, in do_open
2023-07-06 17:10:29 raise URLError(err)
2023-07-06 17:10:29 urllib.error.URLError: <urlopen error [Errno 111] Connection refused>
2023-07-06 17:10:29 Traceback (most recent call last):
2023-07-06 17:10:29 File "/usr/lib/python3.8/urllib/request.py", line 1354, in do_open
2023-07-06 17:10:29 h.request(req.get_method(), req.selector, req.data, headers,
2023-07-06 17:10:29 File "/usr/lib/python3.8/http/client.py", line 1256, in request
2023-07-06 17:10:29 self._send_request(method, url, body, headers, encode_chunked)
2023-07-06 17:10:29 File "/usr/lib/python3.8/http/client.py", line 1302, in _send_request
2023-07-06 17:10:29 self.endheaders(body, encode_chunked=encode_chunked)
2023-07-06 17:10:29 File "/usr/lib/python3.8/http/client.py", line 1251, in endheaders
2023-07-06 17:10:29 self._send_output(message_body, encode_chunked=encode_chunked)
2023-07-06 17:10:29 File "/usr/lib/python3.8/http/client.py", line 1011, in _send_output
2023-07-06 17:10:29 self.send(msg)
2023-07-06 17:10:29 File "/usr/lib/python3.8/http/client.py", line 951, in send
2023-07-06 17:10:29 self.connect()
2023-07-06 17:10:29 File "/usr/lib/python3.8/http/client.py", line 1418, in connect
2023-07-06 17:10:29 super().connect()
2023-07-06 17:10:29 File "/usr/lib/python3.8/http/client.py", line 922, in connect
2023-07-06 17:10:29 self.sock = self._create_connection(
2023-07-06 17:10:29 File "/usr/lib/python3.8/socket.py", line 808, in create_connection
2023-07-06 17:10:29 raise err
2023-07-06 17:10:29 File "/usr/lib/python3.8/socket.py", line 796, in create_connection
2023-07-06 17:10:29 sock.connect(sa)
2023-07-06 17:10:29 ConnectionRefusedError: [Errno 111] Connection refused
很明显是github无法访问,我首先想到的是docker无法走系统的代理,wsl也不行,通过在docker和wsl中运行curl https://www.google.com可以测试。(fast-whisper镜像不像whiper那样把东西都放进去了,每次运行时还要加载东西,造成这个问题。也就是说whisper官方镜像可以全脱网运行,fast-whisper则不行。)
那么怎么让没有开通局域网共享功能的梯子来分享网络呢?通过一阵子检索,终于发现了二级代理和链式代理这个概念,最终确定用gost试一试。
1 在windows上找到当前的代理
打开网络连接的“网络和Internet设置”,打开设置中的“代理”。如果你安装了某个代理程序,则这里应该能够看到设置的端口。比如地址:http://localhost,端口:15236。
注意,这里的localhost很重要,因为收费的代理不希望你局域网共享,所以限制只能通过localhost访问。如果没有这个限制,那就简单了,直接把代理设置为主机的IP和端口就行了。
2 安装gost作为二级代理
由于我的梯子是在win10上的,所以需要让gost也在win上运行,所以安装了win版的go,然后安装/build这个gost,目录下就有gost.ext了,运行:
.\gost -L=:15230 -F=localhost:15236
二级代理就启动了,最直接的是在另外一台电脑上设置这个IP加端口15230试试,发现代理成功。试了一下,必须是localhost,不能是127.0.0.1。
为了方便,我把这个设置了自动启动,在gost.exe所在目录增加一个名为gost.ps1的文件,内容如下:
.\gost.exe -L=:16236 -F=localhost:15236
同样在这个目录再增加一个gost.bat,内容如下:
Powershell.exe -executionpolicy remotesigned -File ./gost.ps1
然后在gost.bat上右键创建一个快捷方式,把这个快捷方式放到开机启动目录C:\Users\PS\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
可以通过徽标键+R打开shell:startup
3 在wsl中配置代理的启用
然后可以借鉴WSL2配置代理 – Leaos – 博客园 (cnblogs.com)来设置wsl2中的代理。
还有个问题,DNS也要先加上8.8.8.8,不然域名解析被污染了,依然无法访问github。
一个更方便的方法,在wsl的用户主目录增加一个文件proxy.sh,内容如下:
#!/bin/sh
# hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
hostip='192.168.0.200'
wslip=$(hostname -I | awk '{print $1}')
port=16236
PROXY_HTTP="http://${hostip}:${port}"
PROXY_SOCKS5="socks5://${hostip}:${port}"
set_proxy(){
export http_proxy="${PROXY_HTTP}"
export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"
export HTTPS_proxy="${PROXY_HTTP}"
export ALL_PROXY="${PROXY_SOCKS5}"
export all_proxy="${PROXY_SOCKS5}"
git config --global http.https://github.com.proxy ${PROXY_HTTP}
git config --global https.https://github.com.proxy ${PROXY_HTTP}
echo "Proxy has been opened."
test_setting
}
unset_proxy(){
unset http_proxy
unset HTTP_PROXY
unset https_proxy
unset HTTPS_PROXY
unset ALL_PROXY
unset all_proxy
git config --global --unset http.https://github.com.proxy
git config --global --unset https.https://github.com.proxy
echo "Proxy has been closed."
}
test_setting(){
echo "Host IP:" ${hostip}
echo "WSL IP:" ${wslip}
echo "Current https_proxy:" $https_proxy
echo "Current all_proxy:" $all_proxy
echo "Try to connect to Google..."
resp=$(curl -I -s --connect-timeout 5 -m 5 -w "%{http_code}" -o /dev/null www.google.com)
if [ ${resp} = 200 ]; then
echo "Proxy setup succeeded!"
else
echo "Proxy setup failed!"
fi
}
if [ "$1" = "set" ]
then
set_proxy
elif [ "$1" = "unset" ]
then
unset_proxy
elif [ "$1" = "test" ]
then
test_setting
else
echo "Unsupported arguments."
fi
注意,其中的hostip我没有用其他文档给的方法,因为不确定一定对,我改成了本机的固定IP。
然后在.bashrc文件结尾增加
alias proxy="source ~/proxy.sh set"
alias unproxy="source ~/proxy.sh unset"
这样,在source ~/.bashrc之后,就可以直接在shell中输入proxy来启用,或者输入unproxy来停用了。
再进一步,想要在打开shell时自动配置,可以新建一个autoproxy.sh
#!/bin/sh
# hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
hostip='192.168.0.200'
wslip=$(hostname -I | awk '{print $1}')
port=16236
PROXY_HTTP="http://${hostip}:${port}"
PROXY_SOCKS5="socks5://${hostip}:${port}"
export http_proxy="${PROXY_HTTP}"
export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"
export HTTPS_proxy="${PROXY_HTTP}"
export ALL_PROXY="${PROXY_SOCKS5}"
export all_proxy="${PROXY_SOCKS5}"
git config --global http.https://github.com.proxy ${PROXY_HTTP}
git config --global https.https://github.com.proxy ${PROXY_HTTP}
echo "Proxy has been opened."
然后在.bashrc中增加
if [ -f "/home/yourusername/autoproxy.sh" ]; then
. "/home/yourusername/autoproxy.sh"
fi
win10部署fast-whisper实测最佳方案
因为不喜欢win10上的shell,一直都比较喜欢在wsl中的ubuntu中跑服务,结果轮到fast-whisper的时候发现容器中无法加载模型,因为无法利用宿主机的代理,又不太方便把模型下载完放进去。
还有个情况是,无法用到GPU,导致用CPU跑超慢。
win10上的docker-desktop也是基于wsl的,但是创建容器的时候发现有个区别,一种是在powershell中跑命令,那么创建的容器可以走代理,下载模型顺利,而在wsl中的ubuntu跑创建docker命令创建的容器则不行,目前没有资料证实是否这样,没有太多时间再去研究这个网络。
最后实测最佳方案是,在powershell中运行:
docker run -d --gpus all -p 7860:7860 --name fast-whisper --mount type=bind,source=$(pwd)/.cache/whisper,target=/root/.cache/whisper --mount type=bind,source=$(pwd)/.cache/huggingface,target=/root/.cache/huggingface --restart=on-failure:15 registry.gitlab.com/aadnk/whisper-webui:latest app.py --input_audio_max_duration -1 --server_name 0.0.0.0 --auto_parallel True --default_vad silero-vad --default_model_name large-v2
另外,打开Word Timestamps – Highlight Words以后,效果似乎更棒一些,还加上了标点符号,准确度很高。
格力空调夏天制冷发臭解决方案
每次关空调之前改成制热,把蒸发器的水分吹干,再关,时间自己掌握一下,估计两三分钟就行。
格力空调发臭的问题估计是出在蒸发器的质量上,冷凝水聚集吸附无法排出,停机温度一上来就臭了。