友情链接

<h1 id="china-personal-it-blog">china-personal-it-blog</h1> <p>中国it从业者的个人博客</p> <h2 id="收录标准">收录标准:</h2> <ol> <li>原创文章占比超过90%</li> <li>HTTPS优先</li> </ol> <h2 id="列表">列表</h2> <ul> <li><a href="https://www.coolshell.cn">左耳朵耗子</a></li> <li><a href="https://www.lifesailor.me/">余晟</a></li> <li><a href="https://dingyu.me/">丁宇</a></li> <li><a href="https://blog.youxu.info/">徐宥</a></li> <li><a href="https://nicrosoft.net/">申旻</a></li> <li><a href="https://www.xiaohui.com/">小辉</a></li> <li><a href="https://techsingular.net/">冯冬</a></li> <li><a href="https://www.phodal.com/">Phodal Huang</a></li> <li><a href="https://www.watch-life.net/">70后中年大叔</a></li> <li><a href="https://xbeta.info/">善用佳软</a></li> <li><a href="https://blog.codingnow.com/">云风</a></li> <li><a href="https://codechina.org/">郝培强</a></li> <li><a href="http://mindhacks.cn/">刘未鹏</a></li> <li><a href="http://blog.yufeng.info">系统技术非业余研究</a> 阿里 阿里褚霸</li> <li><a href="http://www.laruence.com/">鸟哥</a> 鸟哥 PHP</li> <li><a href="https://www.ibm.com/developerworks/cn/">IBM开发者社区</a> IBM开发者社区</li> </ul> <h2 id="分类">分类</h2> <ul> <li> <p><a href="https://vimjc.com/">VIM教程网</a> 专注于Vim配置、插件、Vim命令和Vim教程</p> </li> <li> <p><a href="https://www.nndev.cn">技术人成长 – 聊技术,话成长</a></p> </li> <li> <p><a href="https://panqiincs.me/">辛未羊</a> 南方某小城市当大学教师</p> </li> <li> <p><a href="https://yuzhouwan.com/">宇宙湾</a> 关注人工智能算法</p> </li> <li> <p><a href="https://www.boatsky.com/">太空船</a> 专注前端</p> </li> <li> <p><a href="https://chinsyo.com/">王晨晓</a> IOS Mac</p> </li> <li> <p><a href="https://www.feidaoshuo.com/">飞刀说</a> 前端</p> </li> <li> <p><a href="https://www.testsmirk.com/">testsmirk</a> 一个Android开发工程师,半个iOS开发工程师</p> </li> <li> <p><a href="https://www.xujianhua.com/">许建华</a> 个人站长</p> </li> <li> <p><a href="https://greatdk.com/">王登科</a></p> </li> <li> <p><a href="https://laike9m.com/">laike9m</a> Python C++</p> </li> <li> <p><a href="https://macdavid313.xyz/">macdavid313</a> Lisp</p> </li> <li> <p><a href="https://zhang.ge/">张戈</a> Linux运维</p> </li> <li> <p><a href="http://www.haoservice.cn/">码农code之路</a> Java</p> </li> <li> <p><a href="https://blog.zeekling.cn/">ZEEKLING</a> Java</p> </li> <li> <p><a href="https://www.hjljy.cn/">弋超帆</a> Java</p> </li> <li> <p><a href="https://88250.b3log.org/">D的个人博客</a> 开源程序员,自由职业者</p> </li> <li> <p><a href="https://www.zhxiong.com/">张雄</a> Python</p> </li> <li> <p><a href="https://liulantao.com/">刘兰涛</a> Linux,Electron</p> </li> <li> <p><a href="https://www.kawabangga.com/">卡瓦邦噶</a> Linux知识,前端</p> </li> <li> <p><a href="https://www.dongwm.com/">小明明</a> Python</p> </li> <li> <p><a href="https://frostming.com/">frostming</a> Python</p> </li> <li> <p><a href="https://www.qtmuniao.com/">青藤木鸟</a> Java,Python</p> </li> <li> <p><a href="https://manjusaka.itscoder.com/">Manjusaka</a> Python</p> </li> <li> <p><a href="https://www.vimiix.com/">vimiix</a> golang</p> </li> <li> <p><a href="http://wklken.me/posts.html">wklken</a> Python,Golang</p> </li> <li> <p><a href="https://www.zlovezl.cn/">piglei</a> Python</p> </li> <li> <p><a href="https://lucumr.pocoo.org/">pocoo</a> Python</p> </li> <li> <p><a href="https://v3u.cn/">v3u</a> Python,Go,Linux</p> </li> <li> <p><a href="http://dtysky.moe/">dtysky</a> 前端,阿里</p> </li> <li> <p><a href="https://yanbin.blog/">隔叶黄莺</a> Java,VC,Golang,Python</p> </li> <li> <p><a href="https://jackzhou.co/">jackzhou</a> 前端</p> </li> <li> <p><a href="http://laker.me/">laker</a> 前端</p> </li> <li> <p><a href="https://pythonhunter.org/">捕蛇者说</a></p> </li> <li> <p><a href="https://yanhaijing.com/">颜海镜</a> 前端</p> </li> </ul>

2017/8/20
阅读更多

时机的重要性

<p>最近玩了一个月的饥荒,水平大概就是可以打过四季的boss,可以基本的完成生存,更难的boss没有挑战过。不过这个游戏的攻略里提到了一点就是每个季节要为下一个季节做准备,这就涉及到时间管理的问题了。具体来说,秋季开始,要为过冬的保暖做准备。冬季要为春天的下雨做准备,而春天要为夏天的过热做准备。其实这样的情况跟我们每个人的一生很像,每个阶段其实都在为下一个阶段做准备。</p> <p>游戏攻略可以更好的帮助我们度过新手期,在应对游戏中遇到的挑战的时候更加的从容,那么人生是不是也会有类似的攻略呢?我想是有的,比如每个成年人都要解决金钱管理的问题,不管是五百、五千、还是五万。每个人也都会跟陌生人的关系变成朋友或者敌人,也有可能仅仅是陌生人。那么也就是说金钱管理和人际关系的管理是每个人都要经历的,这样的技能训练能不能有攻略或者说从小开始练习呢。</p> <p>在游戏中,时间是没有办法保存下来的,尽管食物等资源可以保鲜,现实生活中也是一样的。所以从教育的角度来看,虽然教学楼、教师、教具很重要,但是更重要的是孩子投入的时间。所以我觉得好的家长应该注意到这一点,在可能的范围内,尽量的提高孩子的效率,优化孩子的路径,以达到节省时间的目的。</p> <p>以前有一句话叫做“秀才不出门,便知天下事”,说明信息是很重要的,游戏攻略便是前人的经验总结,用来提升游戏体验很好,毕竟玩游戏也是需要花费时间的。人生攻略其实也有,但是却藏在零散的历史里和人物的传记中,等待我们的去发掘。不过人生的意义更重要的是探索,在游戏中,在生活里都是如此。在饥荒中,我觉得在满足基本的四季生存以后,就可以自己的来探索了。因此我们的社会和家庭最重要的就是培养一个孩子在社会上独立生存的能力,这个能力包括能够挣钱满足基本的需求,能够内心富足度过不开心的时光,能够有自信来解决遇到的其他苦难等能力。</p> <p>我有这样的理解是意识到,在我成长的过程中,花费了太多的时间在很多不必要的问题上,不是问题不应该被解决,而是解决的方法成本太高了,以至于压缩了其他的探索路径。对于游戏和人生都是如此。人生的能力和自由是强烈相关的,而儿童时期的时间相对充裕,只是利用率太低了。</p>

2025/8/12
阅读更多

回答dayu博客的几个问题

<blockquote> <ol> <li>简单介绍下自己或者你的博客?</li> </ol> </blockquote> <p>我个人的博客叫做浮生笔记,主要记录的是自己的一些技术blog或者对于生活的思考。</p> <blockquote> <ol start="2"> <li>什么契机让你开始写博客?</li> </ol> </blockquote> <p>最开始在学校读书的时候,在CSDN上整理复习笔记,后来实习了以后,了解到博客园,就把工作中查找的一些资料放到博客园上了。就这样慢慢的有了写博客的习惯。</p> <blockquote> <ol start="3"> <li>你是如何完成创作的?</li> </ol> </blockquote> <p>我一般都是在脑子里有一个想法或者问题的思路,然后会反复的想这个问题,直到最后有一个比较清晰的思路,此时我会把这个问题的思考写下来。</p> <blockquote> <ol start="4"> <li>运营博客的过程中是否有失去过动力?如果有,是为什么恢复的?如果没有,请问您又是如何保持创作的激情?</li> </ol> </blockquote> <p>最开始我用wordpress来部署博客的时候,能够在后台看到浏览量,这个时候看到浏览量上升的的时候还是很高兴的,但是浏览量下降的时候还是会伤心。 后来想想,博客应该作为记录自己想法的一个地方,就没有那么伤心了。创作没有什么激情,想写就写,不想写就搁着。</p> <blockquote> <ol start="5"> <li>如何搭建博客,以及运营博客每年需要投入的资金?</li> </ol> </blockquote> <p>在阿里云买了一台服务器,大概是19年的时候吧,买了最便宜的配置,一共10年。花费大概500人民币左右。</p> <blockquote> <ol start="6"> <li>推荐 1 篇你博客中的文章,并推荐一个你喜欢读的博客,聊聊原因。</li> </ol> </blockquote> <p>推荐我自己的博客的一篇文章: <a href="https://www.dennisthink.com/post/2023/how-to-earn-money-my-understanding-of-business/">https://www.dennisthink.com/post/2023/how-to-earn-money-my-understanding-of-business/</a> 我喜欢读的一个博客 <a href="https://www.changhai.org/">https://www.changhai.org/</a></p> <blockquote> <ol start="7"> <li>推荐 1 个近期喜欢的事物?</li> </ol> </blockquote> <p>最近比较喜欢的书吧&mdash;&ndash;《左传》</p> <blockquote> <ol start="8"> <li>想做还没有做的事,或想尝试还没有尝试的主题?</li> </ol> </blockquote> <p>想建立一个知识论坛,类似于知乎这样的,但是论坛的人数更少一些。</p> <blockquote> <ol start="9"> <li>写到这里,闭上你的眼睛,深呼吸几分钟,或是出去溜达一圈,然后回来写任何你想写的东西。</li> </ol> </blockquote> <p>希望10年后,我再来读这段文字吧。</p>

2024/11/4
阅读更多

学会做选择

<p>在中国有一句古话,叫做“男怕入错行,女怕嫁错郎”。讲的就是做错了选择的话,要改变的代价很大,因此选择要慎重。而中国也有一句古话,叫做“熟能生巧”。这就是我们面临的现状,而选择在生活中是无处不在的,如果我们没有办法改变现状,那么我们唯有提高自己,学会做选择。</p> <h2 id="1-不要着急做选择">1. 不要着急做选择</h2> <p>在生活中我们经常会遇到购买一些商品的情况,而这些商品今天买和明天买的区别并不是特别的大,那么在面对销售推销的时候,我们可以考虑给自己留一点时间来考虑。在第二天的时候再做选择,也许结果会好一些。</p> <h2 id="2-回顾自己的做过的选择">2. 回顾自己的做过的选择</h2> <p>中国有句古话:&ldquo;前事不忘 后事之师&rdquo;。我们如果可以对自己之前的选择进行回顾,不断的分析当时做出选择的情况,同时分析客观环境的变化,就可以在下次要选择的时候,更好的做出选择。同时在回顾的时候,还可以对自己的情况进行分析,分析自己在之前的情况下,为什么做出了那样的选择。如果自己现在这样的情况再次选择,选择会不会有所改变。</p> <h2 id="3-从小训练自己做选择">3. 从小训练自己做选择</h2> <p>其实很多的选择是可以从小训练的,比如只有一个下午的玩耍时间,是选择打篮球,逛公园,还是打电动。手里只有50元钱,是选择吃牛排,吃汉堡包,还是肉夹馍。甚至和什么样的人交朋友和什么样的人聊天,都是需要选择的。</p> <h2 id="总结">总结</h2> <p>经过我们不断的锻炼自己的选择能力,来提高自己的选择的水平。希望大家可以不断的提高自己做选择的水平,做出更好的选择。</p>

2024/10/8
阅读更多

我理想的城市

<p>从马来西亚回来,其实有很多的感想,但是不知道怎么说,经过这几天的整理,我把我的感想写下来,做个分享。</p> <h2 id="1-我生活过的城市">1. 我生活过的城市</h2> <ol> <li>临汾</li> </ol> <p>我的家乡在山西省临汾市,是中国中部地区一个典型的资源型城市。支柱产业主要是煤炭冶炼和钢铁冶炼,我们县城有一个煤炭冶炼工厂,就曾经给上海宝钢供应焦炭。家乡曾经有一所大学叫做山西师范大学,后来也搬到省会太原了。对于学校的老师和同学来说当然是好事,但是从某一个侧面来说也代表我的家乡又衰落了。而且我肉眼可见的是,我村里的小学已经没有学生了,初中也经历了合并。不知道再过几年,家乡会是一个什么样的情况.</p> <ol start="2"> <li>西安</li> </ol> <p>我是在西安上的大学,我们大学有两个校区,我就读的校区在临潼。</p> <ol start="3"> <li>北京</li> </ol> <h2 id="2-我">2. 我</h2>

2024/9/22
阅读更多

如何选择一个适合的城市

<p>记得以前写过一篇文章,说的是租房的时候需要考虑哪些条件,我从小到大,上学,工作,也经历了很多的城市,再加上网络的加持,我来说说我是如何选择一个城市的。</p> <h2 id="1-地理位置">1. 地理位置</h2> <p>地理位置是一个城市的固有属性,不会改变,而由地理位置带来的交通、气候,等其他属性也相对比较难改变。比如我的家乡临汾是一个典型的内陆北方城市,所以冬季会下雪,并且没有海滩。天津是一个典型北方沿海城市,所以冬季会下雪而且可以看到海。而深圳是典型的南方沿海城市,所以冬季不下雪,而且可以看海。沿海城市或者沿大河的城市,一般都会有轮船作为交通工具,而内陆城市,如果想坐船,就只能去公园的湖里坐小船了。而沿海带来的港口优势,也会在一定程度上促进当地的发展。上海作为长江的入海口,广州作为珠江的入海口,都有这样的优势。沿海城市还可以发展海洋养殖业,渔业等。例如深圳的发展在一定程度上就依赖于毗邻香港,否则惠州离深圳很近,也没有发展起来。</p> <h2 id="2-历史传承">2. 历史传承</h2> <p>一个城市的历史传承,代表了在科技不够发达的古代,人们依然选择这座城市,那么城市的发展和兴盛对于科技的依赖程度就不是很高。当然随着科技的进步,新的城市总会出现,但是在历史上存在时间很久的城市,也需要很久才能落后以至于消失。</p> <h2 id="3-教育">3. 教育</h2> <p>教育的终极在于大学,大学的终极在于投入,在中国这片土地上,因为政策的原因,大学的集中效应非常的明显。大学会带动周围的相关经济的发展,最起码孩子找个家教容易一些。所以其实很多适合生活的城市,就是有很多大学的省会城市。</p> <h2 id="4-多语言多种族">4. 多语言/多种族</h2> <p>我去马来西亚最吃惊的事情是,我的马来西亚的华人朋友会讲五种语言,流利程度就是可以购物,吃饭、问路没有问题。中文,英文和马来文应该是在学校学习的,而广东话和福建话就是生活中学习的。我体会到多语言应该从小学起,是在我开始西班牙的时候,因为开始学习一门语言太难了。而多种族虽然会有一定的文化冲突,但是也会开拓孩子们的视野,让他们从小就见到世界的多样性。</p> <p>我当时选择在西安读书,是因为西安是除了北京和上海以外,大学最多的城市。后来去北京是因为北京的经济在全国排名靠前,好公司多。而现在来到深圳,是因为深圳是大陆地区距离香港最近的城市。以后可能会去槟城,是因为槟城是马来西亚华人最多的城市之一,并且还有USM这个大学。</p>

2024/4/22
阅读更多

马来西亚游记

<h1 id="马来西亚游记">马来西亚游记</h1> <p>从3月10日到3月19日共9天,我去了马来西亚旅游,虽然提前做了一些准备,但是还是遇到一些情况,今天就把这些天的经历写下来,会是一个很好的体验。</p> <h2 id="1-从深圳到香港">1. 从深圳到香港</h2> <p>因为深圳湾口岸离香港的国际机场比较近,所以我这次到香港选择的是深圳湾口岸。我从深圳的住处坐车到了深圳湾口岸,因为这次时间超过了7天,所以选择了用护照进入香港。在经过深圳海关的时候,因为要去马来西亚,并且提前认识了马来西亚的网友,被海关的警察大哥和警察大姐大概盘问了30分钟。海关的工作人员还提到了厄瓜多尔,还好我对这个国家不熟悉。因为已经买好了机票,所以只有祈祷能够顺利过关吧。幸运的是,我顺利的通过了海关的检查,可以入境香港。</p> <h2 id="2-从香港岛吉隆坡">2. 从香港岛吉隆坡</h2> <p>过了口岸以后,就可以搭乘B3X到香港了,中间再转车一次就可以到机场。香港有一个地方做的非常的好,就是免费的Wi-Fi覆盖比较全面。也是借用着免费的Wi-Fi,我跟妈妈视频通话,让她看了看香港。后来还跟香港的朋友聊了聊,买了给马来西亚朋友带的奇华饼干,坐车到了香港国际机场。因为是夜里的飞机,所以我在飞机上基本上就是睡觉了。不过有一说一,香港机场的国际乘客是真的多,虽然我也去过北京的大兴机场和深圳的宝安机场。如果有其他的朋友看到的跟我不一样,非常欢迎您的分享。</p> <h2 id="3-在吉隆坡的三天">3. 在吉隆坡的三天</h2> <p>3月11日的凌晨,我顺利达到吉隆坡,在凌晨5点的时候,乘坐机场到市区的MRT(地铁)。因为在小红书看了攻略,所以没有选择直达市区的方法,而是选择在中间换乘,整个路线一共分为两段,从机场到换乘站大约9.4马币,然后再花费大约4.2马币就到我住的地方了。9.4马币的票可以刷支付宝,4.2马币的票是一个福建的大哥帮我买的。所以大家出去玩,一定要提前换一些当地的货币。我到了离住的地方不远的MRT站,就在等朋友来接我了。因为MRT站离住的地方不是很远,所以我们是走过去的。他平常出门都是开车,所以整个过程都是我在看地图。到了青旅,简单的放下了行李,我们就开始了第一天的行程。</p> <ol> <li> <p>第一天 第一天是吉隆坡本地的朋友带我逛的,所以从一个地方到另一个地方我全程都很懵。我们先去茨厂街吃了东西,算是早餐。是福建那边的食物,名字我倒是忘记了。价格是12马币,可能是肚子饿了,我觉得很好吃。然后我们去了当地的一个艺术馆,不过大部分都是卖旅游纪念品,朋友买了几个明信片。然后我们去了四爷庙,听朋友说他小时候经常和妈妈来拜拜。后来他带我打卡了双子塔,在双子塔前面有一个广场,布置的是印度人的一个节日。因为马来西亚是三大种族的组成的一个国家,马来人、印度人、华人。所以每次到了不同种族的节日,广场前面的装饰都会改变。后来我们逛了购物中心的电影院,发现电影院排片不是很多,而且好看的电影也不多,可能是因为人还不够多吧。后来我们逛了书店,一个是日本开的一个书店,一个是台湾的诚品书店。在这两个书店逛的时候,我发现他们的书的非常的多,各种语言,各种类型的书非常的丰富,而且整个店面的面积非常大。和西单的图书大厦相差无几,但是图书的种类要丰富很多。并且在这两个书店几乎没有发现学生的辅导书籍,后来问了朋友。朋友告诉我说考试的辅导书籍在专门的书店才有卖的,如果有机会,一定要再去看看。</p> </li> <li> <p>第二天 我第二天主要去了马来西亚的独立广场周边,独立广场就是类似于天安门广场的一个地方,不过面积比天安门广场要小很多,周围都是一些历史相关的建筑。不过大部分都没有开放参观,去马来西亚之前虽然做了攻略,但是很多地方还是没有去。在独立广场周围都是一些邮局,清真寺,国家历史博物馆之类的建筑。从建筑的外表看,都很有年代感。不过让我感到新奇的是,中午在广场上有两个仪仗队装扮的人骑着马。而且在独立广场上也有个别乞讨的人,独立广场周边也见到几个。在独立广场旁边有一座建筑,被改造为了类似于图书馆的建筑。在一楼有一个关于马来西亚历史的介绍。其他的部分就像图书馆,阅读区域分为儿童阅读区域和成年人阅读区域。还有部分区域开放出来,作为办公室提供给灵活办公的人员。让我吃惊的是,在四楼有一个房间,可以用来玩PS5,这是让我非常吃惊的。下午我坐车去逛了UM(马来亚大学),从市区到学校还是很远的。在学校能看到各个种族和肤色的学生,学校的很多说明都是马来语,有英语的可以大概看懂,没有英语就比较麻烦了。UM大学的校门我没有找到,也可能没有,整个校园很大,可以看到有校车。学校的食堂对外开放,我吃了一顿花了10马币,非常的实惠。让我感到惊奇的是在学校的一个凉亭有插座,我试了一下竟然是有电的。而那个凉亭看上去不是经常有人去。UM的校园非常的大,我逛了一会儿,实在太累了,就坐车回去了。</p> </li> <li> <p>第三天</p> </li> </ol> <p>计划坐KTM(火车)从吉隆坡到槟城,但是我在网络上没有办法买到票(没有visa的银行卡),所以我只好到售票处买票.如何现场买票的攻略我是从小红书上看到的。经过看攻略和问人,我终于顺利的买到票了。在这个过程中,发现把英语学好真的太重要了。因为买票的地方是火车站和地铁站的交汇处,有一个购物中心,我就去逛了逛。发现三星虽然在中国大陆没有销售了,但是在马来西亚的还是有卖,而且销量还可以。逛购物中心可以看到好多游客也来买东西,感觉吉隆坡的旅游事业很发达。购物中心逛完了,我就坐车去了吉隆坡的旧火车站那边,建筑还是显示出了历史感。后来又逛了国家清真寺,需要脱鞋、穿长裤,景点会提供一个长袍。不过这个地方的视野确实很好,市中心的很多建筑都可以看到非常适合拍照。而且里面还有矿泉水卖,1马币1瓶,感觉非常适合用来募捐。清真寺逛完我顺着马路穿过了吉隆坡市区的鸟类公园,有一说一,是真的太晒了。到最后打了一个grab坐车回家。</p> <h2 id="4-从吉隆坡到槟城">4. 从吉隆坡到槟城</h2> <p>来马来西亚的第四天,我收拾好物品从青旅出发,去KL Sentrel坐KTM去槟城。在候车室跟妈妈视频聊了一会儿,发现了马来西亚因为天气炎热的原因,车站等地都有空调和风扇,用来降温。在候车室里看到很多来旅游的,有亚洲面孔、也有欧洲和美洲的面孔。因为办理了无限流量的卡,所以上车以后,也给妈妈做了直播。在车上遇到一个退休以后来旅游的阿姨团,应该是体制内吧,因为年纪也就不到60的样子。到了槟成以后,还需要搭轮渡从北海到乔治城。下了渡轮以后,airbnb的老板顺路把我接到了住的地方,天气很热,在屋子里休息了一会儿,就出去吃饭了。</p> <h2 id="5-在槟城的3天">5. 在槟城的3天</h2> <ol> <li> <p>第一天 今天晚上沿着槟城比较靠近海边的路转了转,遇到一个叫做WOU的大学,但是不让进去参观。在一个靠近海的美食城吃了一份炒果条,味道对得起价格,比较适合我。后来沿着海边的一个广场散步,遇到有人钓鱼,有人跑步,有人跟我一样散步。大家都比较悠闲,而且人相对少了很多。最后我在离海边不远的街角的一个美食城吃了晚饭,就走路到住的地方了。在街上我最大的感受是汽车非常多,偶尔有摩托车,但是几乎没有行人。我能想到的就是前不见古人,后不见来者。</p> </li> <li> <p>第二天</p> </li> </ol> <p>第二天到了槟城的ICT,搭乘猫巴士把槟城逛了逛,逛了槟城的一个独立纪念馆的海边,以及银行街。在纪念馆旁边的马路上,我不但看到了鸽子,还看到了公鸡。是的,这是槟城比较繁华的地方,竟然有公鸡在马路上。有一说一,那天槟城的海确实很漂亮。后来转到了巴士总站,搭乘302前往了USM。在USM的Securty处登记了就可以进入校园参观了,午饭的时候遇到了两个中国留学生,带我去食堂吃了饭。不得不说USM食堂的饭是好吃又便宜,看来以后去大学蹭饭总是没错的。吃过午饭就在校园里逛了,USM因为在槟城靠近山里的地方,校园非常的大。而且我发现USM的校园里还有其他的别墅,写着出租或者出售。比较好奇校园里为什么还有这样的地方,有懂的朋友可以告诉我。槟城的太阳很大,我逛校园的结果就是手臂变成了两种颜色,分界处非常的明显。因为天气热温度高,手机的温度也升高了,我才发现苹果手机无法充电了,屏幕提示不是正常的温度,因此无法充电。解锁了高温无法充电的成就。终于走到了学校的前门,来到了公交站。才发现槟城的公交很随性,在公交站整整等了一个小时,302路终于来了。我坐着公交回到了市区。等下车才发现被拉到了码头。好在住的地方离码头不太远,我就顺路逛了一下槟城的中国城。中国城的建筑大部分都是两层楼高,极少数的有3层或者4层。基本都是房子面前一个小院子这样的形式。很多都是店面了,但是招牌很具有民国时代的风格,并且大部分都显得不新了。新的招牌都看起来很有网红店的风格,</p> <ol start="3"> <li>第三天</li> </ol> <p>在App上看没有KTM的票了,我只好决定坐大巴会吉隆坡。在小红书上看了攻略说可以买KKKL的巴士,但是说大巴的出发时间不准,为了能够顺利上车,我去了KKKL的一个上车点,问了KKKL的司机。在我不好的英文沟通下,确定了上车地点在之前的购物广场,就买了票。票买完以后没有事情,就去逛了一下槟城的购物中心。看到了一个中文图书促销活动,价格很便宜,不过都是我不喜欢的书,还看到了许家印老板有关的书。希望马来西亚的华人也少看吧,真的不好。后来陆续的逛了一些商店,衣服什么的都比较便宜,最便宜的10马币。在槟城的华人比较多,所以很多的菜单和招牌都有汉字,如果中文不好,又想去马来西亚玩,槟城是一个不错的选择。在这个购物中心也发现了电脑城、手机城类似的地方,也有对应的美食城,生活在这里还是比较方便的,特别是物价比较低,适合退休养老。后来天气太热,我就回去了。不过傍晚的时候天气凉爽了很多,我趁着吃晚饭的时候又逛了逛,有一说一,是真的小。</p> <h2 id="6-从吉隆坡回槟城">6. 从吉隆坡回槟城</h2> <p>没有想到KKKL的票买的上车地点不对,第二天到了之前的地方才发现,好在司机和售票员给力,直接拉着我到了吉隆坡。大巴上的空调开的很大,穿着防晒长袖都感觉到有点冷。</p> <h2 id="7-在吉隆坡休息一天">7. 在吉隆坡休息一天</h2> <p>在基隆坡休息的一天顺便去了拉曼大学,因为朋友在那边摆摊卖冷饮。</p> <h2 id="8-从吉隆坡到香港">8. 从吉隆坡到香港</h2> <h2 id="9-从香港到深圳">9. 从香港到深圳</h2> <h2 id="10-其他的一些体会">10. 其他的一些体会</h2> <ol> <li>出门在外,还是要注意安全,因为遇到一个中国的女孩子,护照和钱都被偷了。</li> <li>在马来西亚,还是需要会英文,沟通会方便很多。所以学好英文很重要。</li> <li>支付宝在马来西亚的很多地方可以使用,但是现金也同样重要,所以去马来西亚玩还是要带现金。</li> <li>马来西亚路上的车非常多,除了吉隆坡以外其他的城市没有MRT,所以可能打grab是出行不错的选择。</li> <li>马来西亚的陌生人还是比较友好的,遇到问题可以向别人求助,大家都会帮忙的。</li> <li>吉隆坡的国际化不错,在书店里可以看到不同语言的书籍,街上也会遇到很多国家的人。</li> <li>如果你在旅游的过程中,想认识不同国家的朋友,国外的青旅是一个不错的选择。</li> <li>马来西亚的网络真好,既可以上微信,也可以上WhatsApp。</li> <li>马来西亚的户外真的很晒,所以出门的时候,一定要做好防晒。</li> </ol>

2024/3/22
阅读更多

回首2023,展望2024

<h1 id="回首2023展望2024">回首2023,展望2024</h1> <p>2023年是躺平的一年,大部分时间都在家呆着,看电影,看电视或者打游戏。书没有怎么读,程序也没有怎么写。每天的主要任务就是刷twitter和youtube,然后就是刷B站。可能3个比较大的改变是(1)学英语 (2)去香港 (3) 玩小红书。</p> <p>(1)学英语 为了学英语口语,我下载了HelloTalk,在这个App上认识了一个菲律宾的男生,也是从他那里了解到了很多有关菲律宾的情况。所以菲律宾也被列入了我出国考虑的一个计划之中。因为在这个App上可以认识到很多其他国家的朋友,也了解到了很多对于自己的要求不能用来要求别人。算是一个多元文化碰撞的例子,也打开了我想了解其他国家的想法。</p> <p>(2)去香港 在方块的建议下,我在2023年10月份去深圳和香港玩了几天。发现香港真的是一个国际化的城市,在中环遇到了很多国际友人,也去油麻地警署打卡。另外一个重要的成果就是在香港买到了金瓶梅的评注本,可以好好的看一年了。</p> <p>(3)玩小红书 最开始玩小红书是为了去深圳和香港玩做攻略,后来发现小红书还可以认识世界各地的人,还能学习英语。所以我通过小红书认识了几个台湾的朋友,也了解到了一些台湾好玩的地方,以及台湾和大陆很多的相同点和不同点。</p> <p>以上就是2023年的主要经历了,接下来说一下2024的主要计划。</p> <p>(1) 去马来西亚、菲律宾、新加坡、台湾旅游。</p> <p>如果台湾的个人签证可以办理下来一定要去台湾转一圈,争取跟台湾当地的人聊一聊,这比网络上了解到的要真实很多。至少去马来西亚或者菲律宾旅游一次,泰国没有考虑在内,是因为没有认识泰国的朋友,马来西亚和菲律宾可以去,马来西亚可以讲中文,菲律宾刚好练习英语,而且都做了攻略,新加坡离马来西亚不远,刚好可以过去玩。</p> <p>(2) 搬去深圳</p> <p>因为12月份北京下了雪,真的是太冷了。深圳虽然也冷,但是会好一点。而且深圳离香港近,可以方便的去香港玩。深圳离海边也近,也可以去海边游泳。</p> <p>(3) 找到工作开始挣钱,有机会让父母来深圳看看海</p> <p>爸爸去过上海了,应该看过海了,妈妈还没有坐过飞机,也没有看过海,等我去深圳了,请他们看海吧。</p>

2023/12/24
阅读更多

从ChatGPT聊起

<h1 id="从chatgpt聊起">从ChatGPT聊起</h1> <p>AI很有可能会引领下一代的科技发展,但是在这个时候我担心生成式文本,可能会带来一些问题,那么就聊聊我对于ChatGPT的理解和展望吧。</p> <ol> <li>从钱钟书的一句话说起</li> </ol> <p>钱钟书说过:&ldquo;不识字的人被识字的人骗,识字的人被出版物骗&rdquo;,现在可以接一句 &ldquo;出版物被ChatGPT骗&quot;了。ChatGPT并非基于逻辑,而是基于概率,这就决定了很多时候,ChatGPT会输出一些没有逻辑的内容,所以看到这样的输出,还需要逻辑判断来确定这是否是正确的。因此被骗很有可能并不是chatGPT的主观意愿,而是由于他的逻辑和算法决定了就这样了。所以有时候理解内在逻辑,才能理解外在表现。</p> <ol start="2"> <li>从一部电影说起</li> </ol> <p>记得以前看过一部电影《Her》,讲的是一个人工智能聊天功能的程序,跟一个男主角聊天的过程的。在男主角孤独的时候,她就跟男主角聊天,所以男主角对她就有依赖性了。当那个人工智能程序下线的时候,男主角慌了。从这部电影我看到了,其实人工智能程序有机会发展出这样的功能,就是成为一个尊重隐私并且非常有耐心的心理医生或者树洞。但是用户的隐私和程序的算力是需要考虑的问题,这个应该可以比较容易解决。</p> <ol start="3"> <li>从语言学习看ChatGPT 语言学习是一个存在的需求,所以多邻国发展起来了。而生成式AI会在聊天的过程钟让人不会产生跟机器聊天的感觉,而且AI比人更加有耐心,所以运用生成式AI,经过调整或者适配,来做语言学习的伙伴。会解决很多人学习语言的问题,而且在翻译领域,生成式AI的翻译的翻译相对于之前的翻译会更通顺。</li> </ol> <p>以上就是我对于ChatGPT的一些想法,分享给大家。</p>

2023/12/18
阅读更多

菲律宾旅游攻略笔记

<h1 id="菲律宾旅游攻略笔记">菲律宾旅游攻略笔记</h1> <p>在HelloTalk上认识了一个菲律宾男生,他邀请我去菲律宾玩。正好我有一个计划要出国玩,那么选择菲律宾作为第一站也是不错的选择。</p> <p>因为之前作去香港旅游的攻略的时候,是从小红书找的攻略,所以这次依葫芦画瓢,也从小红书上找攻略,就有了新的发现。在找攻略的过程中,我是以菲律宾为关键字进行搜索的,所以文章中提到菲律宾或者IP在菲律宾的我都会关注。有了以下几点发现</p> <ol> <li> <p>简体中文网络特别是百度搜索引擎,关于菲律宾的资料很少。 在百度搜索菲律宾,关于菲律宾这个国家的介绍很少,主要都是新闻内容。而新闻内容大部分都是跟South Sea相关的,关于菲律宾本地的介绍很少。所以我选择了在马蜂窝等旅游网站找关于菲律宾的情况,大部分也都是一些旅游景点的介绍,这个对于做旅游攻略的同学非常的友好。</p> </li> <li> <p>小红书游学和菠菜 我在小红书查找一些菲律宾有关的帖子,主要是三类人在发.(1) 菲律宾的游学项目 (2) 在菲律宾的店铺老板 (3)菠菜行业。(4) 工签代办。 (1) 游学项目 因为菲律宾以前是美国的殖民地,而且官方语言也是英语,所以很多的菲律宾学校做游学的项目。就是去当地的学校学习一个月到半年不等,来提高自己的英语成绩,因为菲律宾的工资水平相对较低。所以那边的学费也不贵,大概一个月1.3万人民币左右,包含食宿。所以很多人去那边学习,包括日本人,韩国人,中国人等,是一个挺大的产业链了。也是一个非常适合想去国外工作的朋友考虑的一个岗位。</p> </li> </ol> <p>(2) 在菲律宾的店铺老板。 因为在菲律宾有很多中国人以及华人,所以就有面向这些人的饭店、理发店和超市等。这些老板为了吸引用户,会在小红书上打广告。不过我通过他们的群,也能了解到在菲律宾的一些情况,算是白嫖了。</p> <p>(3) 菠菜行业 因为菠菜在中国不合法,但是在菲律宾合法,所以就有很多中国人去菲律宾开菠菜公司,也就形成了以菠菜为业务的产业链。</p> <p>(4) 工签代办。 因为有很多人想去菲律宾工作,而很多菠菜公司没有办法给员工办理签证,所以有了工签代办。并且是一个非常大的行业,但是良莠不齐,需要仔细甄别。</p>

2023/11/11
阅读更多

深圳游记

<h1 id="深圳游记">深圳游记</h1> <p>因为看到方块去香港玩,所以我也想去香港,顺便买点书和办张电话卡,所以就有了这次香港之行。</p> <p>这里就按照整个过程进行流水帐式的描写吧。</p> <h2 id="1-办理相关手续">1. 办理相关手续</h2> <ol> <li> <p>办理港澳通行证 因为之前办理了港澳通行证,并且通行证还在有效期,所以就没有再次办理。因为现在通行证可以异地办理了,所以通行证问题不大。</p> </li> <li> <p>兑换港币 在香港游玩,有一些地方是支持支付宝或者微信支付的,但是并非全都支持。因此建议提前兑换一些港币,以备不时只需。并且提前兑换有汇率优惠,所以建议提前兑换。数额比较大的话,可能需要提前预约,不过建议直接去银行,可以兑换的话最好,不可以就下次再兑换好了。</p> </li> <li> <p>确认签注日期 因为我的香港通行签证过期了,所以到深圳以后在自助签注机交15元就可以完成通行证的签注了。</p> </li> <li> <p>购买机票 开始尝试了几家航空公司官方的App发现不太好用,所以这里建议大家使用飞猪、携程、去哪儿等App比价后购买机票。</p> </li> <li> <p>准备行李 因为深圳的气温相对比较高,所以带一件长袖、一件长裤作为降温时的准备就好了。香港的充电电压和内地的不一样,所以要带好充电宝。南方多雨,建议带雨伞。如果要去海边游玩,建议自带泳衣,以节省费用。</p> </li> <li> <p>预订住宿的地方 如果预算不足,可以考虑住在青旅等花费比较少的地方。如果预算充足,还是建议住酒店,可以休息好。</p> </li> </ol> <h2 id="2-乘坐飞机到达深圳">2. 乘坐飞机到达深圳</h2> <p>相关手续准备完以后,就可以坐飞机出发了,因为机场的安检和飞机的安全考虑的问题,所以含有蓄电池的物品建议随身携带。到达深圳机场以后,接收行李,就可以入住提前预订的地方了。</p> <h2 id="3-深圳city-walk">3. 深圳city-walk</h2> <p>因为我没有提前做深圳的攻略,所以对于深圳的地方都是采用随机walk的方式游玩的。那么我就描述一下我在深圳city-walk的经历吧。</p> <ol> <li> <p>气候 可能因为地处南方沿海的原因,深圳的空气比北京要湿润,而且空气质量比北京好。 因为南方多雨,所以空气湿度相对较高,在中午或者气温较高的时候,身上的汗液无法蒸发,因此会有黏糊糊的感觉。</p> </li> <li> <p>道路 不知道是否因为南方多雨的原因,深圳的道路相比北京来说,要显得干净。也有可能是因为深圳水资源相对丰富,所以我多次看到有环卫工人使用水枪清洗道路。 深圳的行道树一般都比较高,所以很多道路在太阳大的时候,是可以作为林荫道路的。 深圳的十字路口很多都是分段红绿灯的,所以会看到有一部分人在马路中间等着过红绿灯。 深圳的外卖小哥相对比较遵守交通规则,我只看到有零星的小哥有抢红灯的做法,闯红灯和逆行的暂时没有看到。 深圳的很多人上下班是骑电动车的,我在华强北附近看到的电动自行车的摆放都很整齐,不知道深圳是如何做到的。</p> </li> <li> <p>建筑 可能北京的高楼也比较多,但是因为我租房的附近高楼不多,所以感觉北京高楼少。来深圳最大的感觉就是深圳的高楼特别多,而且特别高。很多住宅楼也是这样的,我住的地方在深圳罗湖口岸附近,也是一座比较高的住宅楼,每天等电梯都好辛苦。</p> </li> <li> <p>居住 参观了深圳的城中村,发现真的跟北京的城中村差别很大。我一共看了五六个城中村,分别是罗湖村、上梅林村、湖贝新村、下沙村、向西新村。这几个城中村都是改造过的了。 首先深圳的城中村里的道路都是衡平竖直的,虽然有些比较窄,但是都时硬化道路,都有排水口。其次,城中村的楼都比较高,我看得这几个村子都在6层以上了,房间的采光肯定不好。接着,楼的间距非常的近,以前听说握手楼,不太理解什么意思,现在懂了,楼的间距真的可以握手,站在路口就是一线天。</p> </li> </ol> <h2 id="4-深圳大梅沙">4. 深圳大梅沙</h2> <p>因为深圳靠海,所以这次来深圳还有一个目的就是去海边玩和看海。在朋友的建议和我查资料综合考虑的情况下,选择了大梅沙作为最终的决定。早上6:30起床,从罗湖坐1号线转9号线,再转一次公交就道大梅沙了。在海滩公园附近吃了早餐,一种包了糖的点心。大梅沙公园早上7:30左右开门,旺季需要提前预约。早点去人比较少,可以看海和游泳,海滩有存包柜,25元一天,可以多次存取。 作为北方人的我,第一次看到大海非常的激动,海浪大的时候,在水中要非常的小心,很容易被冲倒。在沙滩上可以看到海中的船,以及偶尔跳出海面的鱼儿。看到海,会对平静的海面底下往往波涛汹涌、大浪淘沙等有更好的感受。不过说实话,海水真的是又苦又咸。海边拍照还是很美的,如果可以最好约上好朋友一起来。要不像我这样的社恐,只有厚着脸皮请其他人帮忙拍照了。</p> <h2 id="结束">结束</h2> <p>香港游记单列一篇</p>

2023/10/16
阅读更多

香港游记

<h1 id="香港游记">香港游记</h1> <p>这次来深圳主要就是为了去香港,所以在10.12日办好手续之后,我就决定在10.13去香港,接下来我就把去香港的见闻和感受写一下,以作记录。</p> <h2 id="1-出海关">1. 出海关</h2> <p>早上六点就起床,吃过早饭就去罗湖口岸排队了。因为前一天没有提前把路线确定好,导致走错了地方,所以提前确定路线很重要。进入海关区域以后,有标志提示禁止拍照,所以很多东西都是靠记忆来写的,有不准确的地方还希望大家指出来。罗湖口岸过海关的时候,会人工核查港澳通行证,并记录指纹,然后会给一个通行凭证,有公交卡一半大小的纸。然后就是通过香港那边的海关了,通过香港海关的检查以后,就可以去坐地铁了。坐地铁之前要先去自动售票机用港币购买地铁票。地铁票比较贵,建议大家多准备一点港币。</p> <h2 id="2-上水">2. 上水</h2> <p>罗湖站的下一站时上水,所以我选择在上水下车。下车以后先找7-11购买了一张八达通。第一次购买的时候,售货员告诉我这个不能退押金,让我去地铁站那边买。我去了以后发现找不到,也没有好意思问别人,就另外找了一家7-11买了。顺便在7-11也买了一张ClubSim的卡,因为搞错了激活用的二维码,所以费了好长时间才激活。在上水的一家早茶店吃了早餐,花了38港币,买了一份双拼三明治,带一小杯咖啡,顺便蹭了一会儿网。在上水地铁站附近看到有一部分楼非常的低,也就2层到3层,而且特别破旧。与我之后在油麻地和中环附近看到的楼相差巨大。经后来询问一个香港的朋友,知道因为香港的土地私有,所以这部分的旧楼没有拆迁。</p> <h2 id="3-油麻地">3. 油麻地</h2> <p>在上水吃完早餐以后,我选择了乘坐双层巴士前往油麻地。坐在双层巴士的第二层,可以较为清晰的看到香港街上的景色。南方地区的树相对北方地区的树来说,长得比较高。我坐巴士到达旺角附近下下车的,然后徒步前往油麻地。在路上找到一家医院上厕所,有个发现。厕所里贴了一则告示,在上厕所之前使用纸张和消毒液对马桶座进行消毒,然后再使用。这样的一个方法既避免了部分细菌或者病毒因为马桶盖而传播,又不需要清洁工对马桶盖进行经常的清理,节约了费用,是一个非常好的制度。在前往油麻地警局的路上,我观察两边的建筑,不管是写字楼还是住宅楼都比较的高,但是也有油麻地果栏这样类似于菜市场的地方,不过果栏的水果也不便宜,一个猕猴桃要10港币。在油麻地附近还参观了百老汇电影中心的一家书店,观察图书发现,有很多的外文书籍。后来去油麻地警署打卡以后,就步行准备去坐天星小轮了。在油麻地还看到一座天后庙,香火很盛。在寸土寸金的香港,这是一种非常奢侈的做法了。在街上走可以看到不同肤色和不同口音的人,大家非常匆忙而又非常有礼貌的走在路上,偶尔还能看到操作电动轮椅的人在街上。在路上还有一个马来西亚的女生作问卷调查,问卷结束以后就要请求捐款了。可能是怕调查员克扣吧,捐款采用的是银行卡捐款,因为我只有现金,没有银行卡,所以就没有捐钱。不过实话实说,马来西亚人的普通话讲的是真好,口音很少。在路上我还遇到了一个清真寺,又很多的阿拉伯人在附近。我没有进入参观,也没有拍照,只是路过看了一眼。后来在中途遇到了商务出版社的一个书店,在书店里问了店员有没有《JPM》卖,因为顾客较少,店员直接把我带到了书柜前,我根据网上的资料选择了一个版本,进行了付款。背着书籍路过了重庆大厦,因为听说里面比较乱,就没有进去。不过在十字路口附近看到有阿sir在执勤,所以白天应该还好吧。在往前不远就到天星码头了,我就去作坐天星小轮。</p> <h2 id="4-中环">4. 中环</h2> <p>乘坐天星小轮到达对面以后,就进入香港的中环了。这是香港最繁华的地段,映入眼帘的都是摩天大楼。在中环主要参观了三联书店,书店分为上下两层,有简体中文图书、繁体中文图书和外文图书。书店的人不是很多,但是图书的种类比较全,书店支持的支付方式也比较多。我在这家书店看到了很多版本的JPM,可惜已经提前买了,早知道不买,就可以少背一段路了。书店参观完以后,就在中环的街上步行,目的地是轩尼诗道。香港中环附近的路比较窄,基本上就是双车道。在路上几乎没有骑自行车的,偶尔有一两个骑摩托车的。大部分人都是开车、坐巴士或者步行。因为人比较多,深切的体会了什么叫做摩肩接踵。中环附近主要都是一些商业银行的总部和投资机构的总部大厦,其中遇到过一座两层的建筑是香港的高级法院。在街上还看到了轩尼诗道小学的小朋友的画,放在街道上的相框里。轩尼诗道上的餐厅也比较多,有比较高级的,也有类似于大陆盖饭套餐性质的,套餐的价格在20-40港币不等,我买了一杯冰可乐,花了6港币,考虑道香港的物价以及中环的房价,这个价格在可以接受的范围内。在香港的一座天桥下,还看到了几个周易八卦的摆摊大师。看来风水学在香港还是有一定的影响力的。步行到达维多利亚港口以后,看了一下香港的夜景。虽说高楼让人感到压抑,但是夜景还是非常的美丽。</p> <h2 id="5-未完待续">5. 未完待续</h2>

2023/10/16
阅读更多

怎样赚钱----我理解的商业模式

<h1 id="怎样赚钱----我理解的商业模式">怎样赚钱&mdash;-我理解的商业模式</h1> <p>所谓赚钱就是把一种物品或者服务卖给对方,并从对方那里获取金钱的一种行为。而要产生这样的行为,需要买卖双方都达到一些要求。</p> <h2 id="1-需要满足的条件">1. 需要满足的条件</h2> <p>对于买方来说,需要满足三个条件:</p> <ol> <li>要有购买需求。 比如人饿了,就会有吃饭的需求,那么就会产生购买食物的需求。</li> <li>要有购买能力。 一个人想要买食物充饥,那么他就要有可以用来交换的物品或者服务,比如他可以出钱买,或者用劳动交换。如果不满足,那么他就无法得到食物。</li> <li>要符合法律规定。 即使一个人有能力和有需求要购买食物,也要符合相关的法律规定。比如不能购买国家保护动物来作为食物,这是不对的。</li> </ol> <p>对于卖方来说,也需要满足三个条件:</p> <ol> <li>要有提供意愿。 比如说你有十二把扇子,别人想买,但是你不想卖,那么这个生意就谈不成。</li> <li>要有提供能力。 比如你只有三个苹果,但是别人想从你这人买30个,那么这个生意也谈不成。</li> <li>符合法律规定。 比如你是一个医生,可以接触到麻醉药,别人想购买,但是你不能卖,因为这个不对。</li> </ol> <h2 id="2-从需要满足的条件展开来">2. 从需要满足的条件展开来</h2> <p>从上网看电影、电视、综艺的需求来分析一下,分为视频观看方和内容提供方。</p> <ol> <li>购买需求 视频观看方:不管在世界上的任何一个地方,大家都有看视频的需求。比如中国用户刷抖音,美国用户刷tiktok。</li> <li>购买能力 视频观看方:因为不同地区的发展水平不同,所以不同地区的视频用户购买能力不同,也就是大家支付会员费的水平不同。因为美国的经济发展水平相对更好的一些,所以奈飞在美国的收入会比爱优腾在中国的收入好一些。</li> <li>提供意愿 内容提供商:因为在不同地区,提供同样的视频,付出的成本和获取的收益不同,所以内容提供方在不同的地方,提供视频服务的意愿也不同。</li> <li>提供能力 内容提供方:受限于网络状况,内容生产能力的不同,不同的内容服务方,可以提供的视频内容也是不同的。</li> <li>符合法律 内容提供方,视频观看方:因为不同的地方,相应的法律规定也不同,所以可以提供和观看的内容也是不同的,但是大家都要遵守法律。</li> </ol> <h2 id="3-经营模式的相似">3. 经营模式的相似</h2> <ol> <li>以爱彼迎和途家为例,这两家做的都是把私人的闲置房屋收集起来,以提供给在不同的地方,有居住需求的人。</li> <li>以滴滴和Uber为例,这两家做的都是把私人的运输人的能力收集起来,然后在分配出去,满足大家的同行需求。</li> <li>以美团外卖为例,这家公司做的就是把一部人的时间拿出来,解决食物从餐厅到餐桌上的运输成本。</li> </ol> <h2 id="4-商业模式的前提">4. 商业模式的前提</h2> <ol> <li> <p>以爱彼迎和途家为例,因为他们提供的都是住宿功能,所以这两家能够盈利的前提是大家有旅游需求,而且可以到处去旅游。在2020-2023之间的三年里,因为大家没有办法很好的出去玩,所以这两家的生意都受到很大的影响。</p> </li> <li> <p>滴滴和Uber都是使用汽车来运输乘客,所以这两个公司在大城市的营收比小城市要好,而美国个人拥有汽车相对比中国要多,所以滴滴中国比Uber美国的营收要好。</p> </li> </ol> <h2 id="未完待续----想到什么再补充吧">未完,待续&mdash;-想到什么再补充吧</h2>

2023/9/19
阅读更多

用户界面与跨平台

<p>因为个人的原因,我把工作环境切换到了Ubuntu下,发现没有一个好用的邮件客户端,后来安装了Windows虚拟机,用Foxmail也不太方便。在使用hotmail邮箱的时候,发现了Chrome浏览器可以安装应用,所以我就安装了Outlook的PWA英语,发现在Ubuntu下这个太好用了。既可以像网页一样更新,又可以像本地应用一样建立快捷方式,而且卸载也非常的方便,解决了我的燃眉之急。下面我就说说我的体会。</p> <ol> <li> <p>跨平台之操作系统</p> </li> <li> <p>跨平台之应用</p> </li> <li> <p>跨平台之程序</p> </li> <li></li> </ol>

2023/8/23
阅读更多

使用telnet通过IMAP协议读取QQ邮箱

<h1 id="使用telnet通过imap协议读取qq邮箱">使用telnet通过IMAP协议读取QQ邮箱</h1> <h2 id="1-连接到qq邮箱的imap服务器">1. 连接到QQ邮箱的IMAP服务器</h2> <p>在命令行窗口执行:</p> <blockquote> <p>telnet imap.qq.com 143</p> </blockquote> <p>Server:</p> <blockquote> <ul> <li>OK [CAPABILITY IMAP4 IMAP4rev1 ID AUTH=PLAIN AUTH=LOGIN AUTH=XOAUTH2 NAMESPACE] QQMail XMIMAP4Server ready</li> </ul> </blockquote> <p>看到上面这条消息证明连接成功。</p> <h2 id="2-获取服务器能力">2. 获取服务器能力</h2> <p>Client:</p> <blockquote> <p>A01 CAPABILITY</p> </blockquote> <p>Server:</p> <blockquote> <ul> <li>CAPABILITY IMAP4 IMAP4rev1 XLIST MOVE IDLE XAPPLEPUSHSERVICE AUTH=PLAIN AUTH=LOGIN AUTH=XOAUTH2 NAMESPACE CHILDREN ID UIDPLUS <br> A01 OK CAPABILITY Completed</li> </ul> </blockquote> <h2 id="3-无操作指令可以用来保持或者测试连接状态">3. 无操作指令,可以用来保持或者测试连接状态</h2> <p>Client:</p> <blockquote> <p>A02 NOOP</p> </blockquote> <p>Server:</p> <blockquote> <p>A02 OK NOOP Completed</p> </blockquote> <h2 id="4-登录imap服务器">4. 登录IMAP服务器</h2> <p>Client:</p> <blockquote> <p>A03 LOGIN {USERNAME} {PASSWORD}</p> </blockquote> <p>Server:</p> <blockquote> <p>A03 OK Success login ok</p> </blockquote> <h2 id="5-选择inbox目录">5. 选择INBOX目录</h2> <p>Client:</p> <blockquote> <p>A04 SELECT INBOX</p> </blockquote> <p>Server:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span><span style="color:#f92672">*</span> <span style="color:#ae81ff">6</span> EXISTS </span></span><span style="display:flex;"><span><span style="color:#f92672">*</span> <span style="color:#ae81ff">0</span> RECENT </span></span><span style="display:flex;"><span><span style="color:#f92672">*</span> OK [UNSEEN <span style="color:#ae81ff">6</span>] </span></span><span style="display:flex;"><span><span style="color:#f92672">*</span> OK [UIDVALIDITY <span style="color:#ae81ff">1375069811</span>] UID validity status </span></span><span style="display:flex;"><span><span style="color:#f92672">*</span> OK [UIDNEXT <span style="color:#ae81ff">5258</span>] Predicted next UID </span></span><span style="display:flex;"><span><span style="color:#f92672">*</span> <span style="color:#a6e22e">FLAGS</span> (<span style="color:#960050;background-color:#1e0010">\</span>Answered <span style="color:#960050;background-color:#1e0010">\</span>Flagged <span style="color:#960050;background-color:#1e0010">\</span>Deleted <span style="color:#960050;background-color:#1e0010">\</span>Draft <span style="color:#960050;background-color:#1e0010">\</span>Seen) </span></span><span style="display:flex;"><span><span style="color:#f92672">*</span> OK [<span style="color:#a6e22e">PERMANENTFLAGS</span> (<span style="color:#960050;background-color:#1e0010">\</span><span style="color:#f92672">*</span> <span style="color:#960050;background-color:#1e0010">\</span>Answered <span style="color:#960050;background-color:#1e0010">\</span>Flagged <span style="color:#960050;background-color:#1e0010">\</span>Deleted <span style="color:#960050;background-color:#1e0010">\</span>Draft <span style="color:#960050;background-color:#1e0010">\</span>Seen)] Permanent flags </span></span><span style="display:flex;"><span>A04 OK [READ<span style="color:#f92672">-</span>WRITE] SELECT complete </span></span></code></pre></div><h2 id="6-检查inbox目录">6. 检查INBOX目录</h2> <p>Client:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-c" data-lang="c"><span style="display:flex;"><span>A05 examine inbox </span></span></code></pre></div><p>Server:</p> <pre tabindex="0"><code>* 6 EXISTS * 0 RECENT * OK [UNSEEN 6] * OK [UIDVALIDITY 1375069811] UID validity status * OK [UIDNEXT 5258] Predicted next UID * FLAGS (\Answered \Flagged \Deleted \Draft \Seen) A05 OK [READ-ONLY] EXAMINE completent flags permitted </code></pre><h2 id="7-获取inbox目录下所有邮件的索引">7. 获取INBOX目录下,所有邮件的索引</h2> <p>client:</p> <pre tabindex="0"><code>A07 SEARCH ALL </code></pre><p>Server:</p> <pre tabindex="0"><code>* SEARCH 1 2 3 4 5 6 7 A07 OK SEARCH completed </code></pre><h2 id="8-读取索引为7的邮件的内容">8. 读取索引为7的邮件的内容</h2> <p>Client:</p> <pre tabindex="0"><code>A08 FETCH 7 RFC822 </code></pre><p>Server:</p> <pre tabindex="0"><code>* 7 FETCH (RFC822 {4017} Received: from T450 ([222.130.94.131]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 504964A2; Sun, 14 May 2023 07:20:04 +0800 X-QQ-mid: xmsmtpt1684020004tsjq8n518 Message-ID: &lt;tencent_7ADAD39ED07339CC684E84837C5A41E85F0A@qq.com&gt; X-QQ-XMAILINFO: NSmesZGuqQTY17aUZ8AZFBaBNkfzqAVW2PB7scl3MGXfj2icXzR0eII5KrsNTZ 2758kdgq0Bgx79diXqb3Ru5rEXeQypaS9aUBPug1YbzgWbFpDviJ7t5uqSn4nV0UXUNOKs4K56R 9j90VYNvxXn2Gg19tEJIZoM/KF40Zlly2ypJQMMCJLX0RDzPjdZIFwe50Z2+i7G35fGZrsJUCNU oVg6f/FjwCH/AHI9gfBk+rj9+BNSwQfUNZmBk6vHfqvgJeWdcbpyKTlk1tWAJoWGPVXXzbUqg+m 4D/rDwvM5a6cR+45mrRyanOpUHa5+Zcvtl/L+06KSjyAq79t/ecPSvprBJL3sidqLyepi7Hwaib hlfZCUUcomVxEJiDLOQ3klrMYDo3nbfIuMmeGl41aLWtlIAw/73ZP1D2jag7ABp4g0UE3WjiTMo JDJZfhxJG/yjf8WUxoYzAQ4EcjP4SQmM5aUZD4bZz2uFdphBfupEAlAM9DBuHINagKuaKGD4do3 0IFBJcBfOx5qHsvXfBMbi7O4B/zVDDGU1xlMvvLLYPXpMHbLfQHivaE2uyE7clh+KmV7GOjw6Z8 lDrZwfpc+OQ1QlmxUbuWgoeUzJQbEF3E6PzrdVOg5NjVMqs3/SLJaqu8WPJm8j3Dsh7XKU/JL5U mAoixj2V8Bb+M1eMAd6CLOPKeALXubZ4Xb8zhL7ti+/sZzLCHcDad2nA1cj/Pa2QTC+BKs7a3Sk FwBaltUjXuMsrC4zkuEkKQUTKQZDNHb/YkzaV8Gw2LN4IWE0aR6agPEPewCwQ+Jm+jmfjlQLX3E YvgqLAb8ETVnM2GKTOwSN89Z9gSi5NYiAJhs7imE2J+VvNoqJc3QU55AwHNYNr0L5PKDcLz27nK DClQebd7rQay7a8uZjrEYYFsw0ULF79jZNlf7Lync01HUFNBZj3XG1zNon2KGnww8tY/tFKPDyQ T2BPa9zuzXAgMTFuSc/Fy0SOBOj4+bxaM6k622/ipCmGXODdVKxuwhgZ87MR4ispl4NJXP4zqoz X0zwj7ww== Date: Sun, 14 May 2023 07:20:04 +0800 From: &#34;dennis_miyanhui@foxmail.com&#34; &lt;dennis_miyanhui@foxmail.com&gt; To: 2475027682 &lt;2475027682@qq.com&gt; Subject: =?GB18030?B?u9i4tDogVEVTVA==?= References: &lt;tencent_1E6B64666C220EA4C88A5E3FC4DEE3A48F05@qq.com&gt; X-Priority: 3 X-GUID: F98C10F4-FBD7-44F6-B6DE-65EA1186AD44 X-Has-Attach: no X-Mailer: Foxmail 7.2.25.179[en] Mime-Version: 1.0 X-OQ-MSGID: &lt;202305140720041245570@foxmail.com&gt; Content-Type: multipart/alternative; boundary=&#34;----=_001_NextPart376544028536_=----&#34; This is a multi-part message in MIME format. ------=_001_NextPart376544028536_=---- Content-Type: text/plain; charset=&#34;GB18030&#34; Content-Transfer-Encoding: base64 DQp0ZXN0IGVtYWlsIGZvciB0ZXN0LmRvIG5vdCByZXBseQ0KDQoNCmRlbm5pc19taXlhbmh1aUBm b3htYWlsLmNvbQ0KIA0Kt6K8/sjLo7ogw9fR5bvUDQq3osvNyrG85KO6IDIwMjMtMDQtMTcgMTY6 MDcNCsrVvP7Iy6O6IDI0NzUwMjc2ODINCtb3zOKjuiBURVNUDQp0aGlzIGlzIHRoZSB0ZXN0DQo= ------=_001_NextPart376544028536_=---- Content-Type: text/html; charset=&#34;GB18030&#34; Content-Transfer-Encoding: quoted-printable &lt;html&gt;&lt;head&gt;&lt;meta http-equiv=3D&#34;content-type&#34; content=3D&#34;text/html; charse= t=3DGB18030&#34;&gt;&lt;style&gt;body { line-height: 1.5; }blockquote { margin-top: 0px= ; margin-bottom: 0px; margin-left: 0.5em; }div.FoxDiv20230514071947815668 = { }body { font-size: 14px; font-family: &#34;Segoe UI&#34;; color: rgb(0, 0, 0); l= ine-height: 1.5; }&lt;/style&gt;&lt;/head&gt;&lt;body&gt;=0A&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;/div&gt;=0A&lt;= div&gt;test email for test.do not reply&lt;/div&gt;&lt;hr style=3D&#34;width: 210px; heigh= t: 1px;&#34; color=3D&#34;#b5c4df&#34; size=3D&#34;1&#34; align=3D&#34;left&#34;&gt;=0A&lt;div&gt;&lt;span&gt;&lt;div st= yle=3D&#34;MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt&#34;&gt;&lt;div&gt;dennis_mi= yanhui@foxmail.com&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;=0A&lt;blockquote style=3D&#34;margin-= Top: 0px; margin-Bottom: 0px; margin-Left: 0.5em; margin-Right: inherit&#34;&gt;&lt;= div&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=3D&#34;border:none;border-top:solid #B5C4DF 1.0pt;p= adding:3.0pt 0cm 0cm 0cm&#34;&gt;&lt;div style=3D&#34;PADDING-RIGHT: 8px; PADDING-LEFT: = 8px; FONT-SIZE: 12px;FONT-FAMILY:tahoma;COLOR:#000000; BACKGROUND: #efefef= ; PADDING-BOTTOM: 8px; PADDING-TOP: 8px&#34;&gt;&lt;div&gt;&lt;b&gt;=B7=A2=BC=FE=C8=CB=A3=BA&lt;= /b&gt;&amp;nbsp;&lt;a href=3D&#34;mailto:dennis_miyanhui@foxmail.com&#34;&gt;=C3=D7=D1=E5=BB=D4= &lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;=B7=A2=CB=CD=CA=B1=BC=E4=A3=BA&lt;/b&gt;&amp;nbsp;2023-04-17&amp;nbsp;= 16:07&lt;/div&gt;&lt;div&gt;&lt;b&gt;=CA=D5=BC=FE=C8=CB=A3=BA&lt;/b&gt;&amp;nbsp;&lt;a href=3D&#34;mailto:247= 5027682@qq.com&#34;&gt;2475027682&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;=D6=F7=CC=E2=A3=BA&lt;/b&gt;&amp;nbsp;TE= ST&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=3D&#34;FoxDiv20230514071947815668&#34;&gt;&lt;div&gt;th= is is the test&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;=0A&lt;/body&gt;&lt;/html&gt; ------=_001_NextPart376544028536_=------ ) A08 OK FETCH Completed </code></pre><h2 id="9列出所有目录">9.列出所有目录</h2> <p>Client:</p> <pre tabindex="0"><code>A06 LIST &#34;&#34; * </code></pre><p>Server:</p> <pre tabindex="0"><code>* LIST (\NoSelect \HasChildren) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;INBOX&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;Sent Messages&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;Drafts&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;Deleted Messages&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;Junk&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-/QQ&amp;kK5O9ouilgU-&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-/1143456295@qq.com&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-/dennismi@163.com&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-/Github&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-/&amp;kdF7Gw-&#34; * LIST (\HasNoChildren) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-/HR&#34; A06 OK LIST completedn) &#34;/&#34; &#34;&amp;UXZO1mWHTvZZOQ-/&amp;lj+RzE6R-&#34; </code></pre><h2 id="10-退出">10. 退出</h2> <p>Client:</p> <pre tabindex="0"><code>A09 LOGOUT </code></pre><p>Server:</p> <pre tabindex="0"><code>* BYE LOGOUT received A09 OK LOGOUT Completed </code></pre>

2023/5/13
阅读更多

信息成本-----从ChatGPT到情报学

<p>随着ChatGPT更新到了4.0版本,百度的文心一言也推出了,阿里也推出了通义千问,人工智能再一次火了。计算机技术的发展,计算能力的提升了带来了信息处理的进步,但是我们真的需要这么多的信息吗?</p> <h2 id="1-早期信息阶段----口耳相传">1. 早期信息阶段&mdash;-口耳相传</h2> <p>在文字没有诞生以前,人类的知识都是通过口耳相传的。那么此时因为信息没有办法大规模的传递,所以信息的造假成本和传递成本都非常的高。</p> <h2 id="2-信息初期阶段----文字出现">2. 信息初期阶段&mdash;-文字出现</h2> <p>在文字出现以后,信息实现了跨空间和跨时间的传播,但是此时由于掌握文字的人比较少,并且编写书籍的成本比较高,所以信息造假的成本较高,信息传递的成本比较高。</p> <h2 id="3-网络时代的信息----信息数字化">3. 网络时代的信息&mdash;-信息数字化</h2> <p>进入信息时代以后,信息的传递成本变得非常的低,并且在教育普及之后,创造信息的成本也变得比较低了,这两者叠加的效果就是信息造假成本低,信息传递成本低,两者叠加,会造成虚假信息增多。</p> <h2 id="4-人工智能时代的信息----信息ai化">4. 人工智能时代的信息&mdash;-信息AI化</h2> <p>进入人工智能时代以后,信息的生产成本变得非常的低,更可怕的是,信息的辨别成本变得非常的高,如果此时AI生产大量的非真实信息甚至是虚假的信息,就会让我们浪费非常多的时间来辨别信息是否为真。</p>

2023/4/10
阅读更多

买断制到订阅制----兼谈消费频次

<p>最早引起这个话题的是,在知乎上看到notability从买断制变为订阅制而引起的一系列风波。之前由看到EdrawMax被万兴收购,到去理发,想到了这个经济规律在不同领域的效果。</p> <h2 id="1-买断制-vs-订阅制">1. 买断制 vs 订阅制</h2> <p>买断制的本质含义是一次购买,终身使用,一般来说价格比较贵,主要是在用户确定有这样的需求以后才会进行。订阅制的本质是用多少买多少,不用不买,一般来说价格相对买断制要便宜。但是notability的操作确实让很多的老用户伤心了,所以有部分用户转入GoodNotes的怀抱。买断制是一次性的大量现金流,订阅制是持续性的小现金流,两种不同的方式而已。但是对于软件来说,一般版本的主要功能开发完成以后,主要的任务就是修复一些bug和维护现有的代码保证在操作系统升级时兼容性,还有就是开发新的功能。但是很多时候现有的功能对于用户就够用了,所以很多用户可能不会为新的功能买单,这样对于软件公司来说,要想持续的盈利就必须不断的增加用户,而很多时候,用户的量是由天花板的,因此软件公司就会陷入收入降低的程度,在不愿意裁员的情况下,就只有想办法把订阅制转为付费制了。</p> <h2 id="2-消费频次">2. 消费频次</h2> <p>在消费领域里有高频消费和低频消费的说法,举个例子来说,我假设每个人每个月理一次发,每个人每天吃三顿饭。那么一个1W人的城镇,每年只有12<em>1W=12W次的理发需求(理发消费),3</em>1W*365=1095次的消费需求(就餐消费)。那么对于餐馆来说,就可以考虑薄利多销,因为消费的量够大,但是理发店就不能这样了,因为消费量的天花板就已经决定了只有12W。所以可以分析出理发的从业人员一定比餐饮的从业人员要少,在工资差别不是很大的情况下。即使工资的差别比较大,也会因为竞争的关系,达到一个平衡。</p>

2023/1/11
阅读更多

我眼中的CSDN

<p>得知邹欣老师加盟了CSDN,我心里吃了一惊。在确定事实无误以后,决定写篇文章来聊聊我的感想。</p> <h3 id="1-我认识的csdn">1. 我认识的CSDN</h3> <p>我是在2011年左右注册CSDN的,那个时候还在上大学,主要是用来在浏览论坛和查找资料的。记得当时在网站上看完了两篇小说《疯狂的程序员》,《那些年,那些事&mdash;-一个程序员的奋斗史》。也在上面写一些课程的学习笔记,不是很多。最近总结了一下,大概十篇吧。12年冬天实习的时候,了解到了博客园这个网站,之后的笔记就都在博客园了。因为在CSDN上传过一些资源,后来发现要用到但是没有积分下载,就请认识的有积分的同行帮忙下载了。之后因为CSDN的广告太多,就没有在CSDN更新blog了。</p> <h4 id="2-我了解到的邹欣老师">2. 我了解到的邹欣老师</h4> <p>因为邹欣老师的书《构建之法》,通过编辑周筠认识了邹欣老师,不过我跟邹老师的交流并不多。唯一的一次微信语言是关于“软件工程”课程助教的问题,从那次的语音交流中,我感觉邹老师是一个比较有理想,而且脾气比较好的人。他最开始推“软件工程”的blog作业是在博客园,所以大家今天在博客园的主页面可以看到一个班级的Menu,这个就是邹老师推动的。</p> <h3 id="3-csdn和博客园的对比">3. csdn和博客园的对比</h3> <p>csdn成立于1999年,博客园成立于2004年,两个网站成立的时间差的不是很多。但是目前网络上对于博客园的评价相对比较好,对于csdn的评价就不太客气了。博客园问题是页面风格怀旧,但是比较精简,广告少,阅读体验好;csdn的广告就比较多了,而且博客的内容抄袭严重,对搜索引擎的污染也比较重。在我看来网站运营的成本主要有服务器和人工,而博客类的功能不需要赶工开发,服务器数量又跟浏览量正相关,浏览量和广告收入正相关,所以两者的成本压力应该差别不大,所以造成目前状况的原因应该就是创始人风格的问题了。</p> <h3 id="4-预测">4. 预测</h3> <p>陆奇博士加入百度一年多就离开了,不知道邹欣老师可以在csdn待多久,让我们拭目以待吧。</p>

2023/1/11
阅读更多

迁移博客内容到静态博客

<h1 id="迁移博客内容到静态博客">迁移博客内容到静态博客</h1> <p>2023年的第一件事就是将博客从wordpress迁移到了hugo,也就是从动态博客迁移到了静态博客。还有就是把之前在csdn和cnblogs的内容也顺便迁移了过来。接下来写一下我为什么要迁移到原因以及走过的一些弯路。</p> <h2 id="1-为什么要迁移">1. 为什么要迁移</h2> <p>记得之前在思考RSS没落的时候,分析了新浪博客、msn空间、博客巴士等的过程,决定开始自建博客。所以在2019年的时候申请了www.dennisthink.com这个域名,也开始使用wordpress来搭建博客,也买了阿里云的主机来部署博客。不过我购买的阿里云的主机的配置比较低,所以经常会遇到数据库服务内存不足,从而导致无法访问的情况。而且每次wordpress迁移数据也比较麻烦,所以开始考虑搭建静态博客。经过简单的考察,决定使用hugo来生成。因为Hugo支持markdown,所以博客的内容可以完整的保存在本地和github以及其他的地方。而且因为Markdown是纯文本的格式,比较方便以后使用其他的方式来发布和修改。</p> <h2 id="2-走过的弯路">2. 走过的弯路</h2> <p>在迁移到过程中,我是先把原有的站点的数据备份了,然后就开始了新的站点的安装工作。这样带来的问题就是因为原有数据是保存在数据库的,为了恢复部分的数据,我不得不重新搭建wordpress,其实更好的做法是在新的站点数据制作完成以后,再下架原有的站点。</p> <p>在把数据从csdn和cnblogs迁移到过程中,因为在使用sed的时候,没有考虑到部分命令的副作用,导致代码中的&lt;和&laquo;都被替换掉了,在后来的恢复中为了把代码中丢失的符号补回去,又浪费了很长的时间,而且因为把之前保存的仓库给删了,所以也没有办法通过文件对比的方式恢复。</p> <p>经验就是所有的改变一定要一步一步来,不要步子迈的太大了。</p>

2023/1/10
阅读更多

Hugo使用Jane主题支持搜索实现

<p>操作系统:Windows7 64Bit Ultimate版本。</p> <h2 id="1-安装hugo">1. 安装Hugo</h2> <p>从hugo官网下载Hugo并安装。</p> <p><a href="https://gohugo.io/">Hugo官网</a></p> <h2 id="2-添加hugoexe-到path路径">2. 添加Hugo.exe 到PATH路径</h2> <p>测试</p> <p>执行:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>hugo version </span></span></code></pre></div><p>显示:</p> <p><img alt="Hugo_version.png)" src="https://www.dennisthink.com/image/2023/01/Hugo_version.png"></p> <h2 id="3-新建站点">3. 新建站点</h2> <p>例如在目录 Github/searchLast下建立search,其中search是你网站的名字。</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>hugo new site search </span></span></code></pre></div><p>执行完成后使用tree命令查看文件路径:</p> <pre tabindex="0"><code>tree </code></pre><p>显示:</p> <p><img alt="Hugo_new_site_folder_show.png" src="https://www.dennisthink.com/image/2023/01/Hugo_new_site_folder_show.png"></p> <h2 id="4-安装jane主题">4. 安装jane主题</h2> <p>执行下列的命令安装</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>git clone https://github.com/xianmin/hugo-theme-jane.git themes/jane </span></span></code></pre></div><p>执行命令显示:</p> <p><img alt="Install_jane_theme.png" src="https://www.dennisthink.com/image/2023/01/Install_jane_theme.png"></p> <p>安装成功显示:</p> <p><img alt="Install_jane_theme_succeed.png" src="https://www.dennisthink.com/image/2023/01/Install_jane_theme_succeed.png"></p> <h2 id="5-将githubsearchlastsearchthemesjaneexamplesite目录下的configtoml拷贝到githubsearchlastsearch目录">5. 将GitHub\searchLast\search\themes\jane\exampleSite\目录下的config.toml拷贝到GitHub\searchLast\search\目录</h2> <p>执行 hugo server <img alt="Run_hugo_server_first.png" src="https://www.dennisthink.com/image/2023/01/Run_hugo_server_first.png"></p> <p>访问主页面 <img alt="Jane_site_demo.png" src="https://www.dennisthink.com/image/2023/01/Jane_site_demo.png"></p> <h2 id="6--在themesjanelayouts目录下添加indexjson内容如下">6. 在themes/jane/layouts/目录下添加index.json,内容如下</h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{<span style="color:#960050;background-color:#1e0010">{-</span> <span style="color:#960050;background-color:#1e0010">$.Scratch.Add</span> <span style="color:#f92672">&#34;index&#34;</span> <span style="color:#960050;background-color:#1e0010">slice</span> <span style="color:#960050;background-color:#1e0010">-</span>}<span style="color:#960050;background-color:#1e0010">}</span> </span></span><span style="display:flex;"><span>{<span style="color:#960050;background-color:#1e0010">{-</span> <span style="color:#960050;background-color:#1e0010">range</span> <span style="color:#960050;background-color:#1e0010">.Site.RegularPages</span> <span style="color:#960050;background-color:#1e0010">-</span>}<span style="color:#960050;background-color:#1e0010">}</span> </span></span><span style="display:flex;"><span> {<span style="color:#960050;background-color:#1e0010">{-</span> <span style="color:#960050;background-color:#1e0010">$.Scratch.Add</span> <span style="color:#f92672">&#34;index&#34;</span> <span style="color:#960050;background-color:#1e0010">(dict</span> <span style="color:#e6db74">&#34;title&#34;</span> <span style="color:#960050;background-color:#1e0010">.Title</span> <span style="color:#e6db74">&#34;tags&#34;</span> <span style="color:#960050;background-color:#1e0010">.Params.tags</span> <span style="color:#e6db74">&#34;categories&#34;</span> <span style="color:#960050;background-color:#1e0010">.Params.categories</span> <span style="color:#e6db74">&#34;contents&#34;</span> <span style="color:#960050;background-color:#1e0010">.Plain</span> <span style="color:#e6db74">&#34;permalink&#34;</span> <span style="color:#960050;background-color:#1e0010">.Permalink)</span> <span style="color:#960050;background-color:#1e0010">-</span>}<span style="color:#960050;background-color:#1e0010">}</span> </span></span><span style="display:flex;"><span>{<span style="color:#960050;background-color:#1e0010">{-</span> <span style="color:#960050;background-color:#1e0010">end</span> <span style="color:#960050;background-color:#1e0010">-</span>}<span style="color:#960050;background-color:#1e0010">}</span> </span></span><span style="display:flex;"><span>{<span style="color:#960050;background-color:#1e0010">{-</span> <span style="color:#960050;background-color:#1e0010">$.Scratch.Get</span> <span style="color:#f92672">&#34;index&#34;</span> <span style="color:#960050;background-color:#1e0010">|</span> <span style="color:#960050;background-color:#1e0010">jsonify</span> <span style="color:#960050;background-color:#1e0010">-</span>}<span style="color:#960050;background-color:#1e0010">}</span> </span></span></code></pre></div><h2 id="7-在githubsearchlastsearch目录的configtoml文件末尾增加">7. 在GitHub\searchLast\search\目录的config.toml文件末尾增加</h2> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>[outputs] </span></span><span style="display:flex;"><span> home = [&#34;HTML&#34;, &#34;RSS&#34;, &#34;JSON&#34;] </span></span></code></pre></div><h2 id="8-在githubsearchlastsearchthemesjanelayouts_default目录下添加searchhtml内容如下">8. 在GitHub\searchLast\search\themes\jane\layouts_default\目录下添加search.html,内容如下</h2> <p>search.html</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span><span style="color:#75715e">&lt;!DOCTYPE html&gt;</span> </span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">html</span> <span style="color:#a6e22e">lang</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ $.Site.LanguageCode | default &#34;</span> <span style="color:#a6e22e">en</span><span style="color:#960050;background-color:#1e0010">&#34;</span> <span style="color:#960050;background-color:#1e0010">}}&#34;</span> <span style="color:#a6e22e">itemscope</span> <span style="color:#a6e22e">itemtype</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;http://schema.org/WebPage&#34;</span>&gt; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">head</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">charset</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;utf-8&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">meta</span> <span style="color:#a6e22e">http-equiv</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;X-UA-Compatible&#34;</span> <span style="color:#a6e22e">content</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;IE=edge&#34;</span>&gt; </span></span><span style="display:flex;"><span> {{ partial &#34;head.html&#34; . }} </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">header</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;header&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;header container&#34;</span>&gt; </span></span><span style="display:flex;"><span> {{ partial &#34;header.html&#34; . }} </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">header</span>&gt; </span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">head</span>&gt; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">body</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;mobile-panel&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">main</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;main&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;main bg-llight wallpaper&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;content-wrapper&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;content&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;content container&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">article</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;post bg-white&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">section</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">div</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;search-results&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">h3</span> <span style="color:#a6e22e">style</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text-align:center&#34;</span>&gt;Matching pages&lt;/<span style="color:#f92672">h3</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">div</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">div</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">section</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;search-result-template&#34;</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/x-js-template&#34;</span>&gt; </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">section</span><span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">hr</span> <span style="color:#a6e22e">align</span><span style="color:#f92672">=</span><span style="color:#a6e22e">center</span><span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary-${key}&#34;</span><span style="color:#f92672">&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;${link}&#34;</span> <span style="color:#a6e22e">style</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;color:red&#34;</span><span style="color:#f92672">&gt;&lt;</span><span style="color:#a6e22e">u</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">title</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/u&gt;&lt;/a&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">snippet</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/p&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">$</span>{ <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">tags</span> }<span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">Tags</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">tags</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/p&gt;${ end }&lt;p&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">$</span>{ <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">categories</span> }<span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">Categories</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">categories</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/p&gt;${ end }&lt;p&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/div&gt;</span> </span></span><span style="display:flex;"><span> <span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/section&gt;</span> </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">script</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/js/jquery-3.3.1.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.0/fuse.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">script</span> </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://cdnjs.cloudflare.com/ajax/libs/mark.js/8.11.1/jquery.mark.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ &#34;</span><span style="color:#a6e22e">js</span><span style="color:#960050;background-color:#1e0010">/</span><span style="color:#a6e22e">search</span><span style="color:#960050;background-color:#1e0010">.</span><span style="color:#a6e22e">js</span><span style="color:#960050;background-color:#1e0010">&#34;</span> <span style="color:#960050;background-color:#1e0010">|</span> <span style="color:#a6e22e">absURL</span> <span style="color:#960050;background-color:#1e0010">}}&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">article</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">div</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">div</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">main</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">footer</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;footer&#34;</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;footer&#34;</span>&gt; </span></span><span style="display:flex;"><span> {{ partial &#34;footer.html&#34; . }} </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">footer</span>&gt; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;back-to-top&#34;</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;back-to-top&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">i</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;iconfont&#34;</span>&gt; </span></span><span style="display:flex;"><span> {{/* icon up */}} </span></span><span style="display:flex;"><span> {{ partial &#34;svg/up.svg&#34; }} </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">i</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">div</span>&gt; </span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">div</span>&gt; </span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">body</span>&gt; </span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">html</span>&gt; </span></span></code></pre></div><h3 id="9-修改-githubsearchlastsearchthemesthemesjanepartials目录下的headerhtml">9. 修改 GitHub\searchLast\search\themes\themes/jane/partials/目录下的header.html</h3> <p>添加如下内容到<code>{{ if .Site.Params.search.google.enable }}</code>前面</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">li</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;menu-item&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">a</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;menu-item-link&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">form</span> <span style="color:#a6e22e">action</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/search&#34;</span> <span style="color:#a6e22e">method</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;GET&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;search&#34;</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;s&#34;</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;search-query&#34;</span> <span style="color:#a6e22e">placeholder</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;&#34;</span>&gt; </span></span><span style="display:flex;"><span> &lt;<span style="color:#f92672">button</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;submit&#34;</span>&gt;search&lt;/<span style="color:#f92672">button</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">form</span>&gt; </span></span><span style="display:flex;"><span> &lt;/<span style="color:#f92672">a</span>&gt; </span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">li</span>&gt; </span></span></code></pre></div><h3 id="10-在githubsearchlastsearchcontent目录下增加searchmd内容如下">10. 在GitHub\searchLast\search\content目录下增加search.md,内容如下</h3> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-m" data-lang="m"><span style="display:flex;"><span><span style="color:#f92672">---</span> </span></span><span style="display:flex;"><span>title<span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;搜索功能&#34;</span> </span></span><span style="display:flex;"><span>sitemap<span style="color:#960050;background-color:#1e0010">:</span> </span></span><span style="display:flex;"><span> priority <span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#ae81ff">0.1</span> </span></span><span style="display:flex;"><span>layout<span style="color:#960050;background-color:#1e0010">:</span> <span style="color:#e6db74">&#34;search&#34;</span> </span></span><span style="display:flex;"><span><span style="color:#f92672">---</span> </span></span></code></pre></div><h3 id="11-在-githubsearchlastsearchthemesjanestaticjs目录下增加searchjs">11. 在 GitHub\searchLast\search\themes\jane\static/js/目录下增加search.js</h3> <p>内容如下:</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-js" data-lang="js"><span style="display:flex;"><span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">=</span><span style="color:#ae81ff">60</span>; </span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">fuseOptions</span> <span style="color:#f92672">=</span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">shouldSort</span><span style="color:#f92672">:</span> <span style="color:#66d9ef">true</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">includeMatches</span><span style="color:#f92672">:</span> <span style="color:#66d9ef">true</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">threshold</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0.0</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">tokenize</span><span style="color:#f92672">:</span><span style="color:#66d9ef">true</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">location</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">distance</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">100</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">maxPatternLength</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">32</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">minMatchCharLength</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">1</span>, </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">keys</span><span style="color:#f92672">:</span> [ </span></span><span style="display:flex;"><span> {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;title&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.8</span>}, </span></span><span style="display:flex;"><span> {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;contents&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.5</span>}, </span></span><span style="display:flex;"><span> {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;tags&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.3</span>}, </span></span><span style="display:flex;"><span> {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;categories&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.3</span>} </span></span><span style="display:flex;"><span> ] </span></span><span style="display:flex;"><span>}; </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">searchQuery</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">param</span>(<span style="color:#e6db74">&#34;s&#34;</span>); </span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">searchQuery</span>){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#34;#search-query&#34;</span>).<span style="color:#a6e22e">val</span>(<span style="color:#a6e22e">searchQuery</span>); </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>(<span style="color:#e6db74">&#34;Search:&#34;</span>,<span style="color:#a6e22e">searchQuery</span>) </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">executeSearch</span>(<span style="color:#a6e22e">searchQuery</span>); </span></span><span style="display:flex;"><span>}<span style="color:#66d9ef">else</span> { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-results&#39;</span>).<span style="color:#a6e22e">append</span>(<span style="color:#e6db74">&#34;&lt;p&gt;Please enter a word or phrase above&lt;/p&gt;&#34;</span>); </span></span><span style="display:flex;"><span>} </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">executeSearch</span>(<span style="color:#a6e22e">searchQuery</span>){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">getJSON</span>( <span style="color:#e6db74">&#34;/index.json&#34;</span>, <span style="color:#66d9ef">function</span>( <span style="color:#a6e22e">data</span> ) { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">pages</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">data</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">fuse</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">Fuse</span>(<span style="color:#a6e22e">pages</span>, <span style="color:#a6e22e">fuseOptions</span>); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">fuse</span>.<span style="color:#a6e22e">search</span>(<span style="color:#a6e22e">searchQuery</span>); </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>({<span style="color:#e6db74">&#34;matches&#34;</span><span style="color:#f92672">:</span><span style="color:#a6e22e">result</span>}); </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">result</span>.<span style="color:#a6e22e">length</span> <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">populateResults</span>(<span style="color:#a6e22e">result</span>); </span></span><span style="display:flex;"><span> }<span style="color:#66d9ef">else</span>{ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-results&#39;</span>).<span style="color:#a6e22e">append</span>(<span style="color:#e6db74">&#34;&lt;p&gt;No matches found&lt;/p&gt;&#34;</span>); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> }); </span></span><span style="display:flex;"><span>} </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">populateResults</span>(<span style="color:#a6e22e">result</span>){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">each</span>(<span style="color:#a6e22e">result</span>,<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">key</span>,<span style="color:#a6e22e">value</span>){ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">contents</span><span style="color:#f92672">=</span> <span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">contents</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">snippet</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#34;</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">snippetHighlights</span><span style="color:#f92672">=</span>[]; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">tags</span> <span style="color:#f92672">=</span>[]; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>( <span style="color:#a6e22e">fuseOptions</span>.<span style="color:#a6e22e">tokenize</span> ){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">snippetHighlights</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">searchQuery</span>); </span></span><span style="display:flex;"><span> }<span style="color:#66d9ef">else</span>{ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">each</span>(<span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">matches</span>,<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">matchKey</span>,<span style="color:#a6e22e">mvalue</span>){ </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">key</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;tags&#34;</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">key</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;categories&#34;</span> ){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">snippetHighlights</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">value</span>); </span></span><span style="display:flex;"><span> }<span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">key</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;contents&#34;</span>){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">start</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>]<span style="color:#f92672">-</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">&gt;</span><span style="color:#ae81ff">0</span><span style="color:#f92672">?</span><span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>]<span style="color:#f92672">-</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0</span>; </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">end</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">1</span>]<span style="color:#f92672">+</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">length</span><span style="color:#f92672">?</span><span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">1</span>]<span style="color:#f92672">+</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">:</span><span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">length</span>; </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">snippet</span> <span style="color:#f92672">+=</span> <span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">substring</span>(<span style="color:#a6e22e">start</span>,<span style="color:#a6e22e">end</span>); </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">snippetHighlights</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">substring</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>],<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">1</span>]<span style="color:#f92672">-</span><span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>]<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>)); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> }); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">snippet</span>.<span style="color:#a6e22e">length</span><span style="color:#f92672">&lt;</span><span style="color:#ae81ff">1</span>){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">snippet</span> <span style="color:#f92672">+=</span> <span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">substring</span>(<span style="color:#ae81ff">0</span>,<span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">*</span><span style="color:#ae81ff">2</span>); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> <span style="color:#75715e">//pull template from hugo templarte definition </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">templateDefinition</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-result-template&#39;</span>).<span style="color:#a6e22e">html</span>(); </span></span><span style="display:flex;"><span> <span style="color:#75715e">//replace values </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">output</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">render</span>(<span style="color:#a6e22e">templateDefinition</span>,{<span style="color:#a6e22e">key</span><span style="color:#f92672">:</span><span style="color:#a6e22e">key</span>,<span style="color:#a6e22e">title</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">title</span>,<span style="color:#a6e22e">link</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">permalink</span>,<span style="color:#a6e22e">tags</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">tags</span>,<span style="color:#a6e22e">categories</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">categories</span>,<span style="color:#a6e22e">snippet</span><span style="color:#f92672">:</span><span style="color:#a6e22e">snippet</span>}); </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-results&#39;</span>).<span style="color:#a6e22e">append</span>(<span style="color:#a6e22e">output</span>); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">each</span>(<span style="color:#a6e22e">snippetHighlights</span>,<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">snipkey</span>,<span style="color:#a6e22e">snipvalue</span>){ </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#34;#summary-&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">key</span>).<span style="color:#a6e22e">mark</span>(<span style="color:#a6e22e">snipvalue</span>); </span></span><span style="display:flex;"><span> }); </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> }); </span></span><span style="display:flex;"><span>} </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">param</span>(<span style="color:#a6e22e">name</span>) { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> decodeURIComponent((<span style="color:#a6e22e">location</span>.<span style="color:#a6e22e">search</span>.<span style="color:#a6e22e">split</span>(<span style="color:#a6e22e">name</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#39;=&#39;</span>)[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">||</span> <span style="color:#e6db74">&#39;&#39;</span>).<span style="color:#a6e22e">split</span>(<span style="color:#e6db74">&#39;&amp;&#39;</span>)[<span style="color:#ae81ff">0</span>]).<span style="color:#a6e22e">replace</span>(<span style="color:#e6db74">/\+/g</span>, <span style="color:#e6db74">&#39; &#39;</span>); </span></span><span style="display:flex;"><span>} </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">render</span>(<span style="color:#a6e22e">templateString</span>, <span style="color:#a6e22e">data</span>) { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">conditionalMatches</span>,<span style="color:#a6e22e">conditionalPattern</span>,<span style="color:#a6e22e">copy</span>; </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">conditionalPattern</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">/\$\{\s*isset ([a-zA-Z]*) \s*\}(.*)\$\{\s*end\s*}/g</span>; </span></span><span style="display:flex;"><span> <span style="color:#75715e">//since loop below depends on re.lastInxdex, we use a copy to capture any manipulations whilst inside the loop </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#a6e22e">copy</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">templateString</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">while</span> ((<span style="color:#a6e22e">conditionalMatches</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">conditionalPattern</span>.<span style="color:#a6e22e">exec</span>(<span style="color:#a6e22e">templateString</span>)) <span style="color:#f92672">!==</span> <span style="color:#66d9ef">null</span>) { </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">1</span>]]){ </span></span><span style="display:flex;"><span> <span style="color:#75715e">//valid key, remove conditionals, leave contents. </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#a6e22e">copy</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">copy</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">0</span>],<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">2</span>]); </span></span><span style="display:flex;"><span> }<span style="color:#66d9ef">else</span>{ </span></span><span style="display:flex;"><span> <span style="color:#75715e">//not valid, remove entire section </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#a6e22e">copy</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">copy</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">0</span>],<span style="color:#e6db74">&#39;&#39;</span>); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">templateString</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">copy</span>; </span></span><span style="display:flex;"><span> <span style="color:#75715e">//now any conditionals removed we can do simple substitution </span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">key</span>, <span style="color:#a6e22e">find</span>, <span style="color:#a6e22e">re</span>; </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span> (<span style="color:#a6e22e">key</span> <span style="color:#66d9ef">in</span> <span style="color:#a6e22e">data</span>) { </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">find</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;\\$\\{\\s*&#39;</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">key</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#39;\\s*\\}&#39;</span>; </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">re</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> RegExp(<span style="color:#a6e22e">find</span>, <span style="color:#e6db74">&#39;g&#39;</span>); </span></span><span style="display:flex;"><span> <span style="color:#a6e22e">templateString</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">templateString</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#a6e22e">re</span>, <span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">key</span>]); </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">templateString</span>; </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>从网络上下载 <em><strong>jquery-3.3.1.min.js</strong></em> ,并将其拷贝到 GitHub\searchLast\search\themes\jane\static/js/目录下。</p> <h3 id="11-重新启动hugo-server">11. 重新启动hugo server</h3> <p>访问: <a href="http://127.0.0.1:1313/">测试页面</a></p> <p>页面显示: <img src="https://www.dennisthink.com/image/2023/01/Add_Search_button_succeed.png"></p> <h3 id="12-增加两篇文章">12. 增加两篇文章</h3> <p>在 GitHub\searchLast\search 目录 执行</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>hugo new post/first.md </span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-console" data-lang="console"><span style="display:flex;"><span>hugo new post/second.md </span></span></code></pre></div><h3 id="13-修改firstmd的-draft-true-为-draft-false-并在文件末尾增加">13. 修改first.md的 draft: true 为 draft: false 并在文件末尾增加</h3> <p>this is my first blog</p> <h3 id="13-修改secondmd的-draft-true-为-draft-false-并在文件末尾增加">13. 修改second.md的 draft: true 为 draft: false 并在文件末尾增加</h3> <p>this is my second blog</p> <h3 id="14-执行-依次执行-hugo-和-hugo-server">14. 执行 依次执行 hugo 和 hugo server</h3> <h3 id="15-访问-httplocalhost1313post">15. 访问 http://localhost:1313/post/</h3> <p>查找first <img alt="prepare_search.png" src="https://www.dennisthink.com/image/2023/01/prepare_search.png"></p> <p>显示查找结果 <img alt="Search_result_show.png" src="https://www.dennisthink.com/image/2023/01/Search_result_show.png"></p>

2023/1/2
阅读更多