2024-04-22

17 篇热帖

1. 提前还房贷,引发的家庭矛盾.

年初手上有点闲钱,想着提前还点房贷 40 个,本来挺高兴的事,老婆把这件事和她妈说了,她妈说他辛苦了,给了她 2w 。老婆把这件事给我说了,让我也和我父母说下,意思很明确,让我父母也拿点。

我和她说了,我爸妈去年给我小弟结婚买房,没钱了,我妈也和我说过,因为给我小弟买房的事,手上没钱了,

我老婆非要让我去要,然后就吵架了。关键这不是吵一次,每次她有点不高兴,就会拿这个事情来说,说我家里怎么怎么不好,我父母对她不好。

给的钱也是老婆自己拿。

本来很高兴的事...现在几个月下来,一地鸡毛

2. 逆天!干了 3 年的同事用 base64 编码做 token 并且把密码也放了进去

最近做项目,他搞了用户登陆和状态保持。

当时存的时候他跑过来问我密码要不要用 base64 加密存。
我说这和明文没啥区别把,区别就是比明文多浪费1/3空间。不如直接加盐然后存 md5 。

当我看到 token 的时候,我人直接傻了。

这就是 token YWRtaW58cGFzczEyMzQ1NnwxNzEzNzcxNzg4

我相信只要干过开发的人一眼就能认出来这是什么东西。 我本来以为这已经够逆天了。解码出来的内容才真的让人窒息。

admin|pass123456|1713771788

数据库的 user 表里面的用户名和密码也都是base64 编码存储的。

我本以为这种最基本的常识问题,只可能在一个实习生身上发生,但是这个同事至少在这里干了 3 年了

在他的知识库里 base64 编码=加密

然后只有这种格式的才叫json。(用一对花括号包裹{}

{
    "test": 1
}

这种不叫json,更别说其他的值类型的被叫json

[
    "abc",
    "def"
]
3. 为什么那么多人吐槽日系车?我吐槽的只是日系车主开的慢
经常看到吐槽日系车的帖子,现在日系也很便宜了,为啥还在吐槽?马云早就不是首富了,那些吐槽马云的也没看登上富豪榜啊?
那些吹爆国产的都买过几辆国产?买过几辆日系才有必要吐槽日系?不会连驾照都没有吧?
我开过日系三大妈,同价位来说太棒了。作为国产车主,以后会换日系。
4. 你们最长 gap 多久?

楼主 gap 有点久了,对找工作都有点没信心了。想了解下你们 gap 过多久。

5. 铁路的卖票是不是在贩卖焦虑?
遇到过的情况:
1.同一趟列车,长途票卖,短途票不卖,必须等到快发车几天才放短途票
2.发售日就不放票

对于第一种,是不是过于功利了?早想着买票的还可能会买不到
对于第二种,你不放票你告诉 XX 日 xx 时开始放票干啥?

对于出行都比较有计划的人来说很不友好,候补也不一定能候补到
而且如果真的所有空位都卖光,那么一定会有人没买到票
6. 有过有一天墙倒了,会发生什么事情

会有什么影响,会产生怎样的冲击

不知道这种话题能不能讨论,大家点到为止

7. 五一马上到了,几个我去过的人少景美的地方可以参考

最近三年的五一自驾路线,给大伙做个参考:

  1. 环千岛湖自驾,节假日去千岛湖的很多,但很少有去环湖自驾的,所以人不是特别多,风景也不错
  2. 皖浙一号公路,千岛湖一段也算是皖浙一号公路一部分,从浙江到皖南,浙江段都很漂亮,安徽段新安江段是精华,这条路线相对小众,我 2021 年五一去自驾的,几乎没人
  3. 环太湖自驾,一路沿着太湖在驾驶,风景/感觉都不错,这两年环太湖自驾也逐渐有了热度,建设配套也都十分成熟了
  4. 浙西天路自驾,浙西第一高峰太子尖,山峦叠嶂,跟看到的浙江境内大部分山峰都不太一样,经过徽杭古道,对徒步感兴趣的也可以去徽杭古道徒步
  5. 溧阳彩虹公路,溧阳境内的彩虹公路总长有 365 公里,沿途经过很多村镇,风景都还不错,只要不是热门的打卡点,人也不是很多

还有其他一些线路,太热门了,就不推荐五一自驾了,例如:皖南 318每到节假日都堵车,四明山自驾也不错,不过应该车也很多,容易堵车。就不推荐城市出行了吧,江浙沪所有的城市有一个算一个人都超级多,尤其是那这能叫出来名字的城市:苏州杭州南京等等人多到爆炸,注重旅行体验的尽量避开

对于不同旅行形式,自驾旅行群体毕竟小很多,所以不是特别热门的路线,路上人都不会特别多

最后想问问喜欢自驾的大伙五一准备去哪?发一下,我做个参考,毕竟到现在,我还没确定五一去哪呢,不过确定的是一定会出去,继续自驾

8. 一个好的简约博客大概是什么样的呢?

我看网上很多博客设计,都不是很好看,前几天看到 V 站一个大佬开源的产品,然后看到他的个人博客,感觉挺好看的,https://xblog.io/,这种简约博客我感觉就非常喜欢,有没有其他的类似的博客页面可以参考下呢?

9. 求推荐适合下雨天穿的鞋

要能够防水,防滑,轻便,休闲,之前在 tb 买了一双号称防水的运动鞋,结果根本没用,雨稍微大点鞋里一样湿

10. 日常作为口粮的茶、咖啡等饮品终究还是会坠入口味越来越重的漩涡里?各位对于饮品的选择到哪一个阶段了呢?

两年之前在社区发了个帖子,请教各位 v2er 们日常都喝什么冻干咖啡。

/t/873897 - 各位有什么速溶或冻干黑咖啡推荐,作为工位口粮

托各位的分享,我的口味已经从刚毕业时的 立顿茶包/雀巢咖啡 => 龙井茶/冻干黑咖啡 => 咖啡店的美式或者奶咖 => 浓普洱茶/澳白(FlatWhite +1 shot) 了。

最近又扒拉上家里晒的陈皮和小青柑普洱,可谓是一去不复返,口味越来越重,又或者说口味越来越挑剔?有种人到中年就开始挑剔充电头参数和捣鼓 nas 保存照片的感觉。各位对于饮品的选择到哪一个阶段了呢?

之前上一天班光买咖啡都得花个二三十,起码这回,泡陈皮和小青柑普洱不费钱了。作为新会陈皮原产区附近的家庭,这应该算花式啃老?😂

https://i.imgur.com/yBIXM7n.jpeg

11. 什么工作越老越吃香

现在的情况程序员感觉跟卖肉的差不多,都是吃青春饭。

那么什么工作不会随年龄增长而薪水不会缩水或被淘汰的呢?

(或者说工作经验越丰富而越受尊重?)

现状 IT 就是 35 岁左右滚蛋的多!

12. 传统爬虫 还是 AI 辅助爬虫?该怎么选?

前言

在数据抓取领域,传统爬虫与 AI 辅助爬虫各有千秋。传统爬虫基于规则进行数据抓取,适用于结构稳定、规则明确的网站。然而,随着网站结构的频繁变动和复杂化,传统爬虫逐渐暴露出其局限性。相比之下,AI 辅助爬虫借助人工智能技术,能够智能解析网页、自适应变化,展现出更高的灵活性和准确性。那么,面对不同的抓取需求,我们该如何选择呢?本文将深入探讨传统爬虫与 AI 辅助爬虫的特点与优劣,为您提供决策参考。

传统爬虫 和 AI 辅助爬虫 分别是什么

传统爬虫

传统爬虫主要依赖于固定的规则或模式来抓取网页数据。它们通常通过识别网页中的特定元素,如类名、标签或结构,来定位和提取所需信息。然而,这种方式的局限性显而易见。一旦网站进行更新,改变了原有的类名、标签或结构,传统爬虫就会因为无法识别新的元素而失效,导致数据抓取失败或错误。

AI 辅助爬虫

AI 辅助爬虫能够智能地分析和理解网页内容,从而更准确地定位并提取所需信息。通过自然语言处理等技术,它们能够理解网页的语义信息,从而更精确地定位所需数据,即使网站进行了更新,AI 辅助爬虫也能继续有效地抓取数据。

示例

选用大家熟悉的豆瓣来进行示范,而爬虫则是用 x-crawl

  • 传统爬虫,通过网页中的特定元素获取豆瓣电影排行榜的电影信息
  • 爬虫 + AI ,爬虫搭配 AI 获取豆瓣电影排行榜的电影信息

传统爬虫

传统爬虫,通过网页中的特定元素获取豆瓣电影排行榜的电影信息

import { createCrawl } from 'x-crawl'

// 创建爬虫应用
const crawlApp = createCrawl()

// crawlPage 用于爬取页面
crawlApp.crawlPage('https://movie.douban.com/chart').then(async (res) => {
  const { page, browser } = res.data

  // 等待元素出现在页面中
  await page.waitForSelector('#wrapper #content .article')
  const filmHandleList = await page.$$('#wrapper #content .article table')

  const pendingTask = []
  for (const filmHandle of filmHandleList) {
    // 封面链接(picture)
    const picturePending = filmHandle.$eval('td img', (img) => img.src)
    // 电影名(name)
    const namePending = filmHandle.$eval(
      'td:nth-child(2) a',
      (el) => el.innerText.split(' / ')[0]
    )
    // 简介(info)
    const infoPending = filmHandle.$eval(
      'td:nth-child(2) .pl',
      (el) => el.textContent
    )
    // 评分(score)
    const scorePending = filmHandle.$eval(
      'td:nth-child(2) .star .rating_nums',
      (el) => el.textContent
    )
    // 评论人数(commentsNumber)
    const commentsNumberPending = filmHandle.$eval(
      'td:nth-child(2) .star .pl',
      (el) => el.textContent?.replace(/\(|\)/g, '')
    )

    pendingTask.push([
      namePending,
      picturePending,
      infoPending,
      scorePending,
      commentsNumberPending
    ])
  }

  const filmInfoResult = []
  let i = 0
  for (const item of pendingTask) {
    Promise.all(item).then((res) => {
      // filmInfo 是一个电影信息对象,顺序在前面就决定好了
      const filmInfo = [
        'name',
        'picture',
        'info',
        'score',
        'commentsNumber'
      ].reduce((pre, key, i) => {
        pre[key] = res[i]
        return pre
      }, {})

      // 保存每个电影信息
      filmInfoResult.push(filmInfo)

      // 最后一次的处理
      if (pendingTask.length === ++i) {
        browser.close()

        // 整理,根据数量决定是多还是单
        const filmResult = {
          element: filmInfoResult,
          type: filmInfoResult.length > 1 ? 'multiple' : 'single'
        }

        console.log(filmResult)
      }
    })
  }
})

AI 辅助爬虫

爬虫 + AI ,让爬虫和 AI 获取豆瓣电影排行榜的电影信息

import { createCrawl, createCrawlOpenAI } from 'x-crawl'

// 创建爬虫应用
const crawlApp = createCrawl()

// 创建 AI 应用
const crawlOpenAIApp = createCrawlOpenAI({
  clientOptions: { apiKey: process.env['OPENAI_API_KEY'] },
  defaultModel: { chatModel: 'gpt-4-turbo-preview' }
})

// crawlPage 用于爬取页面
crawlApp.crawlPage('https://movie.douban.com/chart').then(async (res) => {
  const { page, browser } = res.data

  // 等待元素出现在页面中, 并获取 HTML
  await page.waitForSelector('#wrapper #content .article')
  const targetHTML = await page.$eval(
    '#wrapper #content .article',
    (e) => e.outerHTML
  )

  browser.close()

  // 让 AI 获取电影信息 (描述越详细越好)
  const filmResult = await crawlOpenAIApp.parseElements(
    targetHTML,
    `这是电影列表, 需要获取电影名(name), 封面链接(picture), 简介(info), 评分(score), 评论人数(commentsNumber)。使用括号的单词作为属性名`
  )

  console.log(filmResult)
})

两个示例的结果

两个示例最终展示的电影信息

{
  "elements": [
    {
      "name": "老狐狸",
      "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900908599.webp",
      "info": "2023-10-27(东京国际电影节) / 2023-11-24(中国台湾) / 白润音 / 刘冠廷 / 陈慕义 / 刘奕儿 / 门胁麦 / 黄健玮 / 温升豪 / 班铁翔 / 杨丽音 / 傅孟柏 / 高英轩 / 庄益增 / 张再兴 / 许博维 / 管罄 / 钟瑶 / 游珈瑄 / 郑旸恩 / 戴雅芝 / 姜仁 / 萧鸿文...",
      "score": "8.1",
      "commentsNumber": "29211 人评价"
    },
    {
      "name": "机器人之梦",
      "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2899644068.webp",
      "info": "2023-05-20(戛纳电影节) / 2023-12-06(西班牙) / 2024(中国大陆) / 伊万·拉班达 / 阿尔伯特·特里佛·塞加拉 / 拉法·卡尔沃 / 何塞·加西亚·托斯 / 何塞·路易斯·梅地亚维拉 / 加西埃拉·莫利娜 / 埃斯特·索兰斯 / 西班牙 / 法国 / 巴勃罗·贝格尔...",
      "score": "9.1",
      "commentsNumber": "64650 人评价"
    },
    {
      "name": "白日之下",
      "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2904961420.webp",
      "info": "2023-06-11(上海国际电影节) / 2023-11-02(中国香港) / 2024-04-12(中国大陆) / 姜大卫 / 余香凝 / 林保怡 / 梁仲恒 / 陈湛文 / 周汉宁 / 梁雍婷 / 龚慈恩 / 宝珮如 / 朱柏谦 / 朱栢康 / 许月湘 / 胡枫 / 鲍起静 / 高翰文 / 彭杏英 / 罗浩铭 / 谭玉瑛...",
      "score": "8.0",
      "commentsNumber": "36540 人评价"
    },
    {
      "name": "可怜的东西",
      "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2897662939.webp",
      "info": "2023-09-01(威尼斯电影节) / 2023-12-08(美国) / 艾玛·斯通 / 马克·鲁弗洛 / 威廉·达福 / 拉米·尤素夫 / 克里斯托弗·阿波特 / 苏西·本巴 / 杰洛德·卡尔迈克 / 凯瑟琳·亨特 / 薇琪·佩珀代因 / 玛格丽特·库里 / 汉娜·许古拉 / 杰克·巴顿...",
      "score": "7.0",
      "commentsNumber": "130113 人评价"
    },
    {
      "name": "完美的日子",
      "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2898894527.webp",
      "info": "2023-05-25(戛纳电影节) / 2023-12-21(德国) / 2023-12-22(日本) / 役所广司 / 柄本时生 / 中野有纱 / 山田葵  / 麻生祐未 / 石川小百合 / 三浦友和 / 田中泯 / 大下浩人 / 犬山犬子 / 牧口元美 / 长井短 / 研直子 / 茂吕师冈 / 县森鱼 / 片桐入 / 芹泽兴人...",
      "score": "8.3",
      "commentsNumber": "33562 人评价"
    },
    {
      "name": "新威龙杀阵",
      "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905374090.webp",
      "info": "2024-03-08(西南偏南电影节) / 2024-03-21(美国网络) / 杰克·吉伦哈尔 / 康纳·麦格雷戈 / 杰西卡·威廉姆斯 / 比利·马格努森 / 丹妮拉·曼希沃 / 吉米索拉·艾库美罗 / 卢卡斯·盖奇 / 特拉维斯·范·文克 / 达伦·巴内特 / 乔昆姆·德·阿尔梅达...",
      "score": "6.3",
      "commentsNumber": "9980 人评价"
    },
    {
      "name": "首尔之春",
      "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905204009.webp",
      "info": "2023-11-22(韩国) / 黄政民 / 郑雨盛 / 李星民 / 朴解浚 / 金成畇 / 朴勋 / 安世镐 / 郑允荷 / 丁海寅 / 南允皓 / 全秀芝 / 韩国 / 金成洙 / 141 分钟 / 首尔之春 / 剧情 / 金成洙 Sung-su Kim / 韩语",
      "score": "8.8",
      "commentsNumber": "171858 人评价"
    },
    {
      "name": "金手指",
      "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2901830629.webp",
      "info": "2023-12-30(中国大陆) / 梁朝伟 / 刘德华 / 蔡卓妍 / 任达华 / 方中信 / 陈家乐 / 白只 / 姜皓文 / 太保 / 钱嘉乐 / 袁咏仪 / 周家怡 / 岑珈其 / 李靖筠 / 吴肇轩 / 柯炜林 / 冯泳贤 / 杜曜宇 / 李建城 / 古永锋 / 中国香港 / 中国大陆 / 庄文强...",
      "score": "6.1",
      "commentsNumber": "135956 人评价"
    },
    {
      "name": "美国小说",
      "picture": "https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2902166424.webp",
      "info": "2023-09-08(多伦多国际电影节) / 2023-12-15(美国) / 杰弗里·怀特 / 翠西·艾利斯·罗斯 / 约翰·奥提兹 / 伊萨·雷 / 斯特林·K·布朗 / 埃里卡·亚历山大 / 莱斯利·格塞斯 / 亚当·布罗迪 / 凯斯·大卫 / 迈拉·卢克利希亚·泰勒 / 雷蒙德·安东尼·托马斯...",
      "score": "7.7",
      "commentsNumber": "26223 人评价"
    },
    {
      "name": "利益区域",
      "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2899514583.webp",
      "info": "2023-05-19(戛纳电影节) / 2023-12-15(美国) / 克里斯蒂安·富里道尔 / 桑德拉·惠勒 / 约翰·卡特豪斯 / 拉尔夫·赫尔福特 / 弗雷娅·克罗伊茨卡姆 / 马克斯·贝克 / 伊摩根·蔻格 / 斯蒂芬妮·佩特罗维茨 / 拉尔夫·齐尔曼 / 玛丽·罗莎·提特言...",
      "score": "7.4",
      "commentsNumber": "24875 人评价"
    }
  ],
  "type": "multiple"
}

比较

传统爬虫提取信息所需的步骤

const pendingTask = []
for (const filmHandle of filmHandleList) {
  const picturePending = filmHandle.$eval('td img', (img) => img.src)
  const namePending = filmHandle.$eval(
    'td:nth-child(2) a',
    (el) => el.innerText.split(' / ')[0]
  )
  const infoPending = filmHandle.$eval(
    'td:nth-child(2) .pl',
    (el) => el.textContent
  )
  const scorePending = filmHandle.$eval(
    'td:nth-child(2) .star .rating_nums',
    (el) => el.textContent
  )
  const commentsNumberPending = filmHandle.$eval(
    'td:nth-child(2) .star .pl',
    (el) => el.textContent?.replace(/\(|\)/g, '')
  )

  pendingTask.push([
    namePending,
    picturePending,
    infoPending,
    scorePending,
    commentsNumberPending
  ])
}

const filmInfoResult = []
let i = 0
for (const item of pendingTask) {
  Promise.all(item).then((res) => {
    const filmInfo =
      ['name', 'picture', 'info', 'score', 'commentsNumber'].reduce <
      any >
      ((pre, key, i) => {
        pre[key] = res[i]
        return pre
      },
      {})

    filmInfoResult.push(filmInfo)

    if (pendingTask.length === ++i) {
      const filmResult = {
        element: filmInfoResult,
        type: filmInfoResult.length > 1 ? 'multiple' : 'single'
      }
    }
  })
}

依靠固定的类名和结构,过程还是比较繁琐的。

AI 辅助爬虫提取信息所需的步骤

const filmResult = await crawlOpenAIApp.parseElements(
  targetHTML,
  `这是电影列表, 需要获取电影名(name), 封面链接(picture), 简介(info), 评分(score), 评论人数(commentsNumber)。使用括号的单词作为属性名`
)

一句话的事。


  • 传统爬虫 需要依靠 “固定的类名”“各种繁琐的操作” 来获取数据,如果网站更新频繁,那么网站更新后类名或结构的改变可能导致传统的爬虫抓取策略失效,需要重新获取最新的类名以及更新各种操作才能爬取数据。
  • AI 辅助爬虫 只需要 “一段话” 就能够更加高效、智能和便捷获取到所需的数据。甚至可以将整个 HTML 传给 AI 帮我们操作,由于网站内容更加复杂需要更准确描述要取的位置,并且会消耗大量的 Tokens ,但即使网站后续的更新导致类名或结构发生改变也能正常爬到数据,因为我们可以不再依赖于固定的类名或结构来定位并提取所需信息,而是让 AI 理解并解析网页的语义信息,从而更高效、智能和便捷提取所需数据。

如果所需的内容更多,那么传统爬虫所做的步骤也就更多,而 AI 辅助爬虫只需增加几句话就能搞定,并且不用担心网站更新后的类名和结构是否会发生改动。

总结

传统爬虫主要依赖于预设的规则或模式来抓取网页数据,它们对于结构稳定、规则明确的网站表现出色。然而,随着网络技术的飞速发展和网站结构的频繁更新,传统爬虫面临着越来越多的挑战。一旦网站结构发生变化,传统爬虫通常需要重新调整规则,甚至可能导致抓取失败,这大大降低了其效率和准确性。

相比之下,AI 辅助爬虫结合了人工智能技术,能够智能地解析网页结构和语义,自适应网站的变化。通过机器学习和自然语言处理等技术,AI 辅助爬虫可以识别并学习网页中的特征,从而更准确地定位和提取所需数据。这使得 AI 辅助爬虫在面对复杂多变的网站结构时,能够保持高效的抓取能力。

总的来说,传统爬虫和 AI 辅助爬虫各有其适用场景。对于结构稳定、规则明确的网站,传统爬虫可能是一个更经济、更直接的选择。然而,对于结构复杂、频繁更新的网站,AI 辅助爬虫则展现出了更高的灵活性和准确性优势。在选择时,我们需要根据具体的抓取需求、网站特点以及资源投入等因素进行综合考虑。

资源

文中示例中所用到的爬虫都是来自 x-crawl ,不管是传统爬虫还是 AI 辅助爬虫它都可以满足您,并且还拥有很多好用的功能。

x-crawl

x-crawl 是一个灵活的 Node.js AI 辅助爬虫库。灵活的使用方式和强大的 AI 辅助功能,使爬虫工作变得更加高效、智能和便捷。

它由两部分组成:

  • 爬虫:由爬虫 API 以及各种功能组成,即使不依靠 AI 也能正常工作。
  • AI:目前基于 OpenAI 提供的 AI 大模型,让 AI 简化很多繁琐的操作。

特征

  • 🤖 AI 辅助 - 强大的 AI 辅助功能,使爬虫工作变得更加高效、智能和便捷。
  • 🖋️ 写法灵活 - 单个爬取 API 都适配多种配置,每种配置方式都各有千秋。
  • ⚙️ 多种用途 - 支持爬动态页面、静态页面、接口数据以及文件数据。
  • ⚒️ 控制页面 - 爬取动态页面支持自动化操作、键盘输入、事件操作等。
  • 👀 设备指纹 - 零配置或自定义配置,避免指纹识别从不同位置识别并跟踪我们。
  • 🔥 异步同步 - 无需切换爬取 API 即可进行异步或同步的爬取模式。
  • ⏱️ 间隔爬取 - 无间隔、固定间隔以及随机间隔,决定是否高并发爬取。
  • 🔄 失败重试 - 自定义重试次数,避免因短暂的问题而造成爬取失败。
  • ➡️ 轮换代理 - 搭配失败重试,自定义错误次数以及 HTTP 状态码自动轮换代理。
  • 🚀 优先队列 - 根据单个爬取目标的优先级可以优先于其他目标提前爬取。
  • 🧾 爬取信息 - 可控的爬取信息,会在终端输出彩色字符串信息。
  • 🦾 TypeScript - 拥有类型,通过泛型实现完整的类型。

如果您觉得 x-crawl 对您有所帮助,或者您喜欢 x-crawl ,可以在 GitHub 上给  x-crawl 存储库  点个 star 。您的支持是我们持续改进的动力!感谢您的支持!

x-crawl GitHub: https://github.com/coder-hxl/x-crawl

x-crawl 文档: https://coder-hxl.github.io/x-crawl/cn/

13. 有没有二阳/三阳/多阳的 V 友交流下症状啊

RT 上周五、周六的时候浑身肌肉酸痛,腰酸,浑身无力,躺了两天基本上好了,然后昨天晚上开始头部剧痛,一度以为是要脑溢血了,晚上吃了必理痛稍微好点,但是一晚上基本上没睡好,早上起来还是微微痛。

在一些兄弟群交流了,也有跟我这个症状一样的,就是不知道是不是阳了,这种情况要不要去医院查下,要查的话这玩儿算啥科啊

14. 为家里老人看电视进行的一些尝试

在电视家软件失效之后,一系列电视直播应用亦随之无法使用。经历几款软件的试用,最终决定采用 TvBox 并自行配置直播源以满足家中长辈的电视观看需求。然而,老人们反馈 TvBox 的操作过程过于复杂,期望能实现以下简化功能:

  1. 应用启动后即刻播放电视直播。
  2. 仅保留中央 1 、2 、3 台等常用频道。
  3. 支持遥控器数字键 1 至 9 直接切换频道,或利用频道增减键进行换台。

鉴于 TvBox 为开源项目,我对其进行了定制化修改,既简化了用户交互,又精简了配置文件。您可访问以下链接获取修改后的代码及应用安装包:

尽管如此,使用过程中发现 TvBox 所依赖的直播源稳定性欠佳,往往数日后便无法正常播放,需要频繁寻找新的直播源。 大家有什么获取稳定直播源的方法,希望能告知一下,主要是 cctv1.

为解决这个问题,注意到可通过央视官方网站https://tv.cctv.com/live/cctv1/在线观看直播。于是,我开发了一款 APP ,通过浏览器访问上述直播网页,并执行 JavaScript 脚本将播放器界面全屏显示,从而提供更便捷的观看体验。相关资源如下:

该 APP 在一段时间内运行顺畅,有效解决了直播源不稳定的问题。然而,自 4 月中旬起,因 CCTV 的政策调整,此方案遭遇新的挑战。具体表现为:

  • CCTV1 频道在白天播放电视剧时段出现“由于播出安排变更,暂不支持播放该时段内容”的提示,导致无法正常观看。
  • 自 4 月中旬起,晚 8 点档的电视剧同样受到该提示影响,无法播放。

大家有稳定看直播的软件或网页地址可以分享一下。

15. 给家人用的(大流量,带通话)长期套餐的移动、联通手机卡推荐?
给家人用的,主要需求是:
1 、大流量,也就是月 90g+
2 、必须带通话,最低 100 ,最好是 200 或+
3 、长期套餐,至少能用 2-3 年的
4 、少操作折腾的,流量通话直给,不用比如还得找渠道返现充值,还得去 app 领流量、通话等等,家人不会操作
5 、最好是本地归属地
6 、预算 20 及以下
16. Redis 几乎每小时都出现大量超时,求助

报错信息是 Timeout awaiting response (outbound=1KiB, inbound=0KiB, 5728ms elapsed, timeout is 5000ms), command=SET, next: EVAL, inst: 0, qu: 0, qs: 15, aw: False, bw: SpinningDown, rs: ReadAsync, ws: Idle, in: 76, in-pipe: 0, out-pipe: 0, serverEndpoint: 127.0.0.1:6379, mc: 1/1/0, mgr: 10 of 10 available, clientName: AppProductionEnvServer1(SE.Redis- v2.5.43.42402), IOCP: (Busy=0,Free=10000,Min=9000,Max=10000), WORKER: (Busy=236,Free=32531,Min=10000,Max=32767), POOL: (Threads=236,Queueditems=50,Completeditems=8751117254), v: 2.5.43.42402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)

出错的时候看了下也就三百多并发,比较怀疑是下面这段代码引起的:

   while (!await redis.GetDatabase().LockTakeAsync($"PlaceOrder:{user.UserId}", "1", TimeSpan.FromSeconds(180)))
        {
            await Task.Delay(1);
        }

作用是确保同一用户只有一个订单未写入数据库(系统下单逻辑涉及几十个函数,全是一些莫名奇妙的判断逻辑,混淆后可读性大幅提升的那种(当然是开玩笑的)),屎山作者已经跑路了,没人能看懂他代码,一个用户下多个订单数据会混乱。更牛逼的这套系统除了性能极差,运行 3 年没出错一次。一次调用 API 只能下一单,客户端随硬件交付,已经写死了,不能更新,然后客户端一次多少个订单就多少并发调用 API 提交,没有队列功能。目前要求 500 订单 10 秒内全部下单完成返回订单号(单独提交的话每个订单 0.01 秒左右能写入完数据拿到订单号)。

预分配订单号行不通,不运行一遍这部分屎山代码不能确定这个订单能不能提交,返回订单号就代表这个订单提交成功了,不能取消。目前打算改造成 Sub/Pub ,不知道能不能提升性能,或者 V 友有没有更好的改造方案?只要能让这屎山跑起来就行,代码多脏都没关系,改动需要尽可能小,不能把系统改炸。目前加硬件到 256GB 内存都没解决。

17. 窗户隔音方案讨论。

目前租的房子,窗户隔音不好。 早上车声,人声啥的太吵了,影响睡觉。有什么隔音方案推荐吗,隔音窗户不考虑,成本太高,主要是租的房子。隔音窗帘不靠谱。目前想了飘窗上塞满海绵 和 在屋子里弄一个隔音舱的方案。