日记

能否日日记,我们走着瞧😉

01/03/2024

HAPPY NEW YEAR!

VSCode workspace settings change on its ownopen in new window

01/12/2023

纽时中文用OpenAI翻译吗?

读纽时的翻译文章,总觉得有点洋腔洋调。当前OpenAI非常牛逼,忍不住想测试一下它的翻译功能。

原文

We are entering the fourth year of the pandemic, believe it or not: Freshmen are now seniors, toddlers now kindergartners and medical students now doctors. We’ve completed two American election cycles and one World Cup cycle. Army volunteers are nearing the end of their active-duty commitment. It’s been a long haul but in other ways a short jump: Three years is not so much time that it should be hard to clearly remember what happened. And yet it seems to me, on many important points our conventional pandemic history is already quite smudged.

纽时的翻译

我们正在进入大流行的第四年,不管你信不信:当年的新生现在已经在毕业班,蹒跚学步的孩子现在已经在上幼儿园,医学院的学生现在已当上了医生。我们已经完成了两个美国大选周期和一个世界杯周期。陆军志愿兵即将完成承诺的服役期。这是一个漫长的过程,但在其他方面又是一个短暂的瞬间:三年的时间并没有长到让人难以清楚地记得发生了什么。然而,在我看来,在许多重要的方面,我们常规的大流行历史已经相当模糊了。

OpenAI的翻译

我们正在进入第四年的流行病,不管你信不信:新生现在是高年级学生,幼儿现在是幼儿园学生,医学院学生现在是医生。我们已经完成了两轮美国大选和一轮世界杯赛程。陆军志愿者即将结束他们的现役服役。这是一段漫长的旅程,但在其他方面,这是一次短暂的跳跃:三年并不是很长的时间,不应该很难清楚地记住发生了什么。然而,在我看来,在许多重要的方面,我们传统的流行病史已经相当模糊了。

Google的翻译

不管你信不信,我们正在进入大流行的第四个年头:新生现在是高年级学生,学步儿童现在是幼儿园学生,医学生现在是医生。 我们已经完成了两个美国选举周期和一个世界杯周期。 陆军志愿者的现役承诺即将结束。 这是一个漫长的过程,但在其他方面是一个短暂的跳跃:三年的时间并不足以让人们很难清楚地记住发生了什么。 然而在我看来,在许多重要的点上,我们传统的大流行历史已经被抹黑了。

你觉得纽时的小编是参考那个版本?

10/27/2022

MongoDB的备份和恢复open in new window 包括cronjob, 删除旧的备份,等,很不错的教程。

10/18/2022

关于数字和字符串相加的完美总结open in new window Javascript 真奇妙:数字加字符变成字符,但是顺序很重要!

console.log(1 + 5 + ''); // 👉️ 6

console.log('' + 1 + 5); // 👉️ 15

10/12/2022

好像非常基础,但是有时候会搞糊涂:

  • React的state在组件render前被初始化,之后如果没有被unmount,当组件重新渲染,state只是update。我们通常用到react-router,如果route变了,原组件的生命周期结束,新的组件生命周期开始(即,state初始化)
  • 父组件重新渲染,所有子组件跟着重新渲染,但是如果子组件是pure的,那么它会判断props(shallow compariion),如果没变,则不做渲染。
  • 如果加载子组件是用到“key”,那么子组件将被强制初始化(即state重设)

Pure component的演示open in new window

10/11/2022

当初始文件/文件夹已经被上传到git, 又想防止之后的本地改动不被上传,可以用以下的办法:

  • 假装文件没有改动
git update-index --assume-unchanged <file>
  • 没有假装文件夹没改动的参数,但是可以通过下面的命令:
git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')

来源:

10/04/2022

用SemanticUI好多年了,还是有很多东西不知道,比如:Menu

<Menu>
  <Menu.Item
    name="Internal"
    content="Secondary"
    active={activeItem === "Primary"}
    onClick={handleItemClick}
  >
    Primary
  </Menu.Item>
</Menu>;

我们可以在三个地方定义菜单的内容:

  • name // 内部值
  • content // 第二优先
  • children // 第一优先 也就是说,当三个值都被定义了,children的值被用用于显示。其他两个值可以通过onClick来传递,如下:
 handleAClick = (e, { name, content }) => this.setState({ activeA: name })

另外,name值会被_.startCase()处理,处理后,每个单词首字母大写,并且只有数字和字母会被留下。比如:

<Menu>
  <Menu.Item
    name="hello - world!"
    onClick={handleItemClick}
  />
</Menu>;

菜单显示成: Hello World

09/29/2022

Tomcat 不是我的菜,但是由于工作原因,不得不捣了它一下。记下几点:

  • Port8443在本地可以打开,但是再远端不行, 原因是

In Tomcat server.xml file change: protocol="org.apache.coyote.http11.Http11AprProtocol" To protocol="org.apache.coyote.http11.Http11NioProtocol"

  • 当然这么一改,安全证书要用.p12
  • netstat -a可以查看机器监听的端口
  • service install, 可能要改service用户,另外记得设置成自动启动。

09/22/2022

外头起风了,秋天应该不远了!

09/21/2022

上次PHP网站搬家有个遗留问题,之前服务器用了memcache, 我根据阿里云上面的一篇教程open in new window安装了php_memcached,结果发现不起作用。后来才发现,我之前用的是php_memcache (少一个"d"), 这个两个模块是不一样的。今天有点时间,把它修好了。提两点:

  • 不管是php_memcache 还是 php_memcached, 都只是php模块,必须要用memcached server, 这个要另外装,不同的linux版本安装还不一样,如果不清楚,请放狗搜搜。
  • 如果你也用php_memcached,我写了一个wrapper,你可以借用: php_memcached wrapperopen in new window

09/20/2022

文章丢失

诡异的事情发生,今天在英文栏目里加了两篇文章,但是不知哪里出错,VuePress无法运行,说是YAMLException, 错误如下:

YAMLException: can not read a block mapping entry; a multiline key may not be an implicit key at line 3, column 1:
    
    ^
    at generateError (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:167:10)
    at throwError (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:173:9)
    at readBlockMapping (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:1073:9)
    at composeNode (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:1359:12)
    at readDocument (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:1525:3)
    at loadDocuments (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:1588:5)
    at load (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:1614:19)
    at Object.safeLoad (****/Projects/61dh/node_modules/js-yaml/lib/js-yaml/loader.js:1637:10)
    at module.exports (****/Projects/61dh/node_modules/gray-matter/lib/parse.js:12:17)
    at parseMatter (****/Projects/61dh/node_modules/gray-matter/index.js:109:17)
error Command failed with exit code 1.

难点在哪里?错误信息没有说那个文件出问题。我猜是genIndex.php搞坏了某个文件,但是我就是找不到。所以干脆"discard all changes", 我特意保存了今天修改加的文件,但是不知咋滴,这些文件竟然丢失了,非常奇葩的,这里就不解释了。最终结果:

  • 恢复到上次的版本,VuePress启动没问题了。
  • 今天写的两篇文章找不到了,没时间重写,改天补上吧。

更新 昨天的这个问题出在下面这段:

---
description: "谁说不是呢?"用英文怎么说?
---

请注意⚠️: 我在description后面用了半角引号("), 这个就是出错的原因。可能是js-yaml的特殊规定,把它改成全角引号(“)或者取消,就解决问题了。

如何防止这种事情再次发生

  • git stash, 后者刚才commit
  • 如果在本地拷贝,不要乱按cmd+z (undo)

09/19/2022

Google Analytics

我用GA好多年,之前一直用的旧版,也就是UA(Universal Analytics), 这一两年,谷歌推出GA4, 号称:

  • 机器学习(这年头,神马都要挂个AI) - 新的人工智能驱动的“洞察”功能自动推送对营销人员有用的信息。
  • 更全面地了解跨设备的客户旅程。
  • GA4 以“数据流”为卖点,而不是旧版GA属性使用的视图和细分。
  • GA4 可以自动跟踪用户的交互事件,例如: 点击,页面滚动等。

对与我这种兼职搞市场营销的开发人员,旧版的GA似乎更好用。刚刚开始使用GA4的时候,我甚至连跟踪代码都找不到。但是UA快要寿终正寝了,官网说支持到 July 1, 2023。所以到时不转也得转。今天GA4又挂了,不知道的人还以为自己的网站挂了 - 实时图没有任何生命迹象。可恨的是他们的官网和Twitter压根没有提及宕机事件,好像啥事没发生,没有一点大厂的风范啊!

网络赚钱

我的经验: 如果你的网站一天1千个人访问都不到,就不用挂广告来骚乱你的读者了。谷歌广告可能一天给你1-2美元意思意思;而亚马逊的联盟计划呢?估计几个星期都收不到一颗米,千万别听有人忽悠,什么做亚马逊affiliate躺赚佣金。

另外,亚马逊的联盟网站是又老又慢,again,没有一点大厂的风范! 好了,今天就牢骚这么多了!

09/18/2022

为什么又跌了???

苦闷啊!为什么我一买,它就跌?以太坊合并是好事啊,怎么搞的跟办丧事一样。

PHP

趁着周末,把一个很老很老的PHP网站挪了一个便宜的窝。记录一下:

  • 不得不说RAMHOST是一个优质的VPN供应商,虽然网站设计老土,但是土的让人觉得有信任感。用了10年,记得就down3次,速度也快!搬家的原因
    • PHP升级 (v5 -> v8)
    • OS也蛮老了,换ubuntu 20.04
    • 最主要,有点贵了,15美刀一个月,换一个一年50美刀,还挂着好几个网站呢!
  • PHP下装mongodb很蛋疼,几个重点
    • 先装php-pearsudo apt-get install php-pear
    • 然后,装一堆的module (我用的php8.1), sudo apt-get update & sudo apt-get install php8.1-fpm libapache2-mod-php8.1 php8.1-mysql php8.1-xml php8.1-dev
    • 接着,装芒果 sudo pecl install mongodb
    • 最后,加上extension=mongodb.so 我的php配置文件在/etc/php/8.1/apache2/php.ini/etc/php/8.1/cli/php.ini (这个是名令行)
  • 调试的时候,记得把错误信息打印出来,不然给你一个空白页,真不知道发生什事了。
error_reporting(E_ALL);
ini_set('display_errors', 'Off');
  • PHP8.1下,下面这个写法行不通了!
error_reporting(E_ALL | E_STRCT);
  • 安装memcached - alibabaCloud上的这篇文章open in new window不错
  • file_get_contents(”香港网站的xml文件url“) 乱码, 加个前缀搞定: file_get_contents("compress.zlib://".$url)

09/16/2022

VuePress部署站点的基础路径

Vuepress很友好地提供了一个配置选项叫base, 如果你准备把网站部署Github Pages,那么你需要把base设置成子路径,比如:https://deniapps.github.io/vns/, 那么base应该被设为/vns/,通常这个子路径的名称和你的代码库名称是对应的。

更贴心的是VuePress在大部分时候,都可以自动帮我们把base加上,比如,在一个文档里,你加了一个内部链接如下:

[试试看](/demo/inner-demo/README.md)

当文档加载后,链接会自动修改为:/vns/demo/inner-demo/ (注意:生成静态文件后,README.md变成了index.html)

需要特别注意的是,我们写链接的时候,一定要指定到文件,不能只是文件夹,不然VuePress不会把base加上, 例如,把内部链接写出这样:

[试试看](/demo/inner-demo/)

当文档加载后,链接就不被修改,从而404发生。

09/15/2022

数字币在过去的一年里,真是一塌糊涂!好久都没有碰它们了。这几天以太坊的合并的新闻在币界十分火爆。或许你不明白什么是proof-of-work(PoW)和proof-of-stake(PoS),但是简单粗暴地地说: 合并后,挖矿比以前减少 99.95% 的能源消耗。你一定不会不觉得这是件大好事!另外还有传言说Bank of America也可能采用以太坊。真好消息不断啊!想一年前,价位那么高,大家都争着买,如今“大甩卖”,大家却躲得远远。真正懂的投资的人一定不能用普通人的大脑来思考。心血来潮,下了几单:

  • ETH @1,500
  • SOL @33.33
  • ADA @0.4333

没什么策略,挑几个吉利的数字而已。希望多年以后,回来看帖,能够得意地笑 😏

09/14/2022

VNS 上线

今天办成一件大事,VNSopen in new window上线了。👏 ➕ ❤️

09/13/2022

VNS - VuePress Next Starter

准备把61DH用到的vuepress开源出来,其实其核心不过是根据vuepress next的文档运行几条命令生成的。考虑到这世界懒人比较多,就想弄一个VuePress Next Starter,我管它叫懒人包。好处就是git pull就可以用。 package.json用的是弄61dh时生成的,我记得很清楚当时运行的是yarn add -D vuepress@next, 可是保存的是带版本号的,如下:

 "devDependencies": {
    "@vuepress/plugin-google-analytics": "^2.0.0-beta.51",
    "@vuepress/plugin-search": "^2.0.0-beta.51",
    "vuepress": "^2.0.0-beta.51",
    "vuepress-plugin-sitemap2": "^2.0.0-beta.97"
  },

问题是在新的repo里,运行yarn install+yarn dev, 网页却起不来了(http://localhost:8080是个空白页)。浏览器的console里出现以下错误信息:

useThemeLocaleData() is called without provider.

Google了几下,大概是某些依赖项的版本不兼容。灵机一动,把devDependencies的版本改为“next“, 如下:

"devDependencies": {
    "@vuepress/plugin-google-analytics": "next",
    "@vuepress/plugin-search": "next",
    "vuepress": "next",
    "vuepress-plugin-sitemap2": "next"
  },

之后,从新运行yarn install+yarn dev, 搞定了。但是不是很明白,为什么之前的yarn add -D vuepress@next写入的是具体版本号?

09/12/2022

VuePress Build Error

今天把本地的NODE升级了一下从V14升到V16。后来发现vuepress build docs出错了,错误信息诡异:

Error: 
You installed esbuild on another platform than the one you're currently using.
This won't work because esbuild is written with native code and needs to
install a platform-specific binary executable.

好在咱是老程序员了,很快反应到应该和NODE升级有关。重新yarn install一下,立马搞定!

第一次掏钱买股票

选了3支:

  • GOOG / Limit@106.66
  • UPST / Limit@26.66
  • NFLX / Limit@233.33

Good Luck!

09/10/2022

中秋节快乐!

moon2022_2016
上面一张是昨天拍的,下面一张是2016年拍的。时隔6年,月亮还是那个月亮!

09/09/2022

  • vuepress 好像没有自动生成索引页的功能,每次在一个文件夹里添加一篇文章,都要手动的加到索引页太麻烦了,晚上自己写了一个。我的第一语言PHP发挥功效了。👍
  • 在文章里加入一个图标字符,你可能想到用emoji,这里介绍一个用html代码open in new window的办法,比如“&#9730;“ 就是一把雨伞☂!
  • .vuepress/dist本来是被上传的GitHub的,但是我是直接部署到自己的服务器上,所以没有必要传到GitHub里。由于cache,把.vuepress/dist加到gitignore不管用。运行一下这条命令就可以搞定git rm -r --cached docs/.vuepress/dist
  • 发现现在靠Google Adsense赚钱真的是越来越难了。我有个网站的Page RPM是$0.27,还都是美国的流量了。😢。整天盯着报告看,钱也不会变多,时间倒是浪费了不少。现在开始一个月都不去看。

09/08/2022

昨天居然没有写日记?!(太忙了,忘记了 😢)

Vuepress Sitemap

不弄个sitemap,Google要花好长时间才可以找到你。我想vuepress应该考虑到这一点,上网一搜,果然有一个plugin,而且还是v2版,v2还是beta,plugin的作者真给力! vuepress-plugin-sitemapsopen in new window 怎么使用,他们的文档说的非常清楚,看看效果吧:61dh.com/sitemapopen in new window

血型可能会预测你在60岁之前中风的风险

研究人员一直在探索,我们就半信半疑吧。

Blood type A had a 16 percent higher risk of having an early stroke and blood type O had a 12 percent lower risk of having a stroke than people with other blood types.

与其他血型的人相比,A 型血的人患早期中风的风险要高 16%,而 O 型血的人患中风的风险要低 12%。 O型血的我,暗暗地高兴了一把 😃

原文open in new window

Markdown Emoji

到vscode的extensions里搜搜看,这两个必须装上:

  • :emojisense:👍 //suggesions/autocomplete
  • Markdown Emoji //add preview

09/06/2022

🎉 61DH上线

经过几天的本地测试,61dh上线了!❤️ 秀一下我的部署脚本,真是太完美了!

#!/bin/sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run build

# 进入生成的文件夹
cd docs/.vuepress/dist

# 上传的服务器
scp -r * adam@lamp.dnx:/var/www/61dh/.

⚠️: 最后一步需要做一些预设,有点麻烦,我改天补个教程。

微型刷牙机器人

早上看到一则新闻,宾夕法尼亚大学的研究人员正在发明一款可以自动刷牙和清洁牙齿的微型刷牙机器人open in new window,往嘴里扔一个微型机器人,它可以自动治疗和去除导致蛀牙的牙菌斑和细菌。

微型刷牙机器人工作原理图Image Credit: Melissa Pappas/Penn Engineering

“Routine oral care is cumbersome and can pose challenges for many people, especially those who have a hard time cleaning their teeth,” says Hyun (Michel) Koo, a professor in the Department of Orthodontics and divisions of Community Oral Health and Pediatric Dentistry at Penn’s School of Dental Medicine and co-corresponding author on the study. “You have to brush your teeth, then floss your teeth, then rinse your mouth; it’s a manual, multi-step process. The big innovation here is that the robotics system can do all three in a single, hands-free, automated way.”

这个估计还不能替代深度洗牙,那个是需要打麻药的。但机器人可以替代牙刷,牙线达到常规口腔护理的作用,这对那些牙齿不整的人来说,用处还是很大的。

Apple的老档案 - Shell 脚本入门

我懂一些shell script,但是非常基础,今天想找一个苹果系统下shell script的教程充充电,就发现了这篇老档案open in new window。为什么说是老档案?你看看就知道,不仅撰写时间久远(最后更新:2014-03-10),而且页面非常不苹果。

但是开篇太精彩了:

Writing a shell script is like riding a bike. You fall off and scrape your knees a lot at first. With a bit more experience, you become comfortable riding them around town, but also quickly discover why most people drive cars for longer trips.

09/05/2022

VuePress Next (V2+) Sidebar

VuePress 提供4种侧边栏

  • false - 没有侧边栏
  • auto - 侧边栏会根据页面标题自动生成
  • SidebarConfigArray - 所有页面会使用相同的侧边栏
  • SidebarConfigObject - 不同子路径下的页面会使用不同的侧边栏

通常我们希望子路径下的文件可以自动添加到侧边栏,但是VuePress并没有自动添加这个功能。要实现这个,我们需要自己写一个,我根据awesome bookmarksopen in new window的对应函数改写了一个(原来的版本不支持VuePress2.0) 改天分享给大家。

VuePress Hot Module Replacement

通过vuepress dev docs启动VuePress是支持热更新的(HMRopen in new window), 我昨天刚刚帮它吹牛过,热更新飞快,但是今天发现它突然出问题了,要么不工作,要么延迟厉害,过了好几秒才看到:

info page diary/README.md is modified
4:00:39 PM [vite] hmr update /@fs/Users/Adam/Projects/61dh/docs/.vuepress/.temp/pages/diary/index.html.js
4:00:39 PM [vite] hmr update /@fs/Users/Adam/Projects/61dh/docs/.vuepress/.temp/pages/diary/index.html.vue

试着关闭plugins,清除.cache.temp, 重启服务器,重启vscode都不行。最后重启机器,终于恢复了。一个很诡异的bug!

09/04/2022

关于61dh的那点事

61dh是我人生中拥有的第一个域名,大概是07/31/2008年注册的吧(不好!暴露年龄了)其实我也不记得了,这个日期是在whoisxmlapi.comopen in new window上查到的。那时网址站好像还有些人用,idea是做一个给孩子们用的网址站:61(儿童节)+ dh(导航)很有创意吧?网站是搭起来了,简单的几个页面,但是几乎没人用。记得当时还弄了一个博客(blog.61dh.com),还起了个简单朴实的名字:网址开发日志,那时jQuery很火,写了好多篇相关文章,还有一些人知道,但是后来不知何故,不了了之了。之后,61dh转型了好多次,这个以后慢慢聊。

这几天一直琢磨着给61dh找个家, 转了一圈回来,还是想到网址站,刚好3个孩子目前分别上小学,初中,高中,想让他们一起搞一个K-12的分类网址大全。到Github上找模版,找到一个Repository - awesome-bookmarksopen in new window, fork来用了一下,很不错。和孩子们分享了想法,但是大家都没什么干劲。

算了,自己来吧!下面是目前的计划:

  • 把浏览器里杂乱无章的bookmarks整理到网站上
  • 做个英文版块
  • 做个摄影板块
  • 日记(所学和所想)

VuePress

一直用React,虽然Vue很早就听说,但是从来没用过。接触了awesome-bookmarks才知道有VuePress这东西,玩了两天,发现awesome-bookmarks用的是v0版本的VP,最新的版本已经是v2了。要用当然用新的 (一个显而易见的新功能是"开光灯") 看了看代码和教程,要从v0升级到v2还有点难度 (其中requireimport就比较头疼)于是决定从新开始,按着VuePress教程open in new window快速做一遍,就有了现在的网站。我知道VP有好多功能我还很陌生,就先说几个亮点吧:

  • Markdown - 如果你是搞前端的,一点要试试看,比wysiwyg的编辑器好多了,直接在vscode里写。如果一定要加tag,比如iframe,或者styled div等,直接写html code,VuePress会帮你转地好好的。
  • yarn dev 启动本地开发模式(localhost:8080) - 支持热更新,更新速度飞快!
  • yarn build 一个静态网址几秒内生成。(当然,具体时间和你的页面数有关)

存档

Last Updated:
Contributors: Adam C