日记

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

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的办法,比如“☂“ 就是一把雨伞☂!
  • .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