2024-11-22

23 篇热帖

1. 自已家的赣南脐橙开卖,给 v 友抽几箱

抽奖规则和去年一样取上证指数和最后指定日期最高楼。上一年的帖子/996196

今年取 2024-11-22 上证指数收盘价作为随机数种子,有效抽奖用户为 2024-11-22 帖子回复最高楼层前的所有所有人

去年的抽奖代码没有去重所有回复多个的用户中的概率高一点点,今年我用 ai 糊了一下。代码如下

const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36';

async function handleRequest(tid, num, seedParam, maxFloor) {
    if (!tid || isNaN(num)) {
        console.error('请提供有效的帖子 ID 和抽奖人数');
        return;
    }
    console.log(`Fetching OP for TID: ${tid}`);
    const op = await getOp(tid);
    console.log(`OP: ${op}`);
    console.log(`Fetching all users for TID: ${tid}`);
    const uniqueUserList = await getAllUser(tid, maxFloor);
    console.log(`Unique Users: ${uniqueUserList.join(', ')}`);
    const filteredUserList = uniqueUserList.filter(user => user !== op);
    console.log(`Filtered Users: ${filteredUserList.join(', ')}`);
    const userCount = filteredUserList.length;
    console.log(`User Count: ${userCount}`);
    const seed = seedParam !== null ? seedParam : userCount.toString();
    console.log(`Seed: ${seed}`);
    console.log(`Max Floor: ${maxFloor}`);
    const combinedSeed = `${seed}-${maxFloor}`;
    console.log(`Combined Seed: ${combinedSeed}`);
    const shuffledList = shuffle(filteredUserList, combinedSeed);
    console.log(`Shuffled Users: ${shuffledList.join(', ')}`);
    const result = `符合条件的用户共有 ${filteredUserList.length} 人
抽奖结果:
${shuffledList.slice(0, num).join('\n')}`;
    console.log(result);
}

async function getOp(tid) {
    const url = `https://www.v2ex.com/amp/t/${tid}`;
    console.log(`Fetching OP URL: ${url}`);
    const response = await fetch(url, { headers: { 'User-Agent': UA } });
    if (!response.ok) {
        console.log(`Failed to fetch OP: ${response.status} ${response.statusText}`);
        return null;
    }
    const text = await response.text();
    const match = /<div class="topic_author">[\s\S]*?<amp-img[^>]+alt="([^"]+)"[\s\S]*?<\/div>/.exec(text);
    console.log(`OP Match: ${match ? match[1] : null}`);
    return match ? match[1].trim() : null;
}

async function getUserList(url, startIndex, endIndex) {
    console.log(`Fetching User List URL: ${url}`);
    const response = await fetch(url, { headers: { 'User-Agent': UA } });
    if (!response.ok) {
        console.log(`Failed to fetch User List: ${response.status} ${response.statusText}`);
        return [];
    }
    const text = await response.text();
    const replyItemRegex = /<div class="reply_item">([\s\S]*?)<\/div>/g;
    let replyItemMatch;
    const users = [];
    let currentIndex = startIndex || 0;
    while ((replyItemMatch = replyItemRegex.exec(text)) !== null) {
        if (endIndex !== undefined && currentIndex >= endIndex) {
            break;
        }
        const replyItem = replyItemMatch[1];
        const altRegex = /<amp-img[^>]+alt="([^"]+)"[^>]*>/g;
        const altMatch = altRegex.exec(replyItem);
        if (altMatch) {
            users.push(altMatch[1]);
        }
        currentIndex++;
    }
    console.log(`Matches: ${users.join(', ')}`);
    return users;
}

async function getAllPages(tid) {
    const url = `https://www.v2ex.com/amp/t/${tid}`;
    console.log(`Fetching All Pages URL: ${url}`);
    const response = await fetch(url, { headers: { 'User-Agent': UA } });
    if (!response.ok) {
        console.log(`Failed to fetch All Pages: ${response.status} ${response.statusText}`);
        return [];
    }
    const text = await response.text();
    const pageCountMatch = /\u5171 (\d+) \u9875/.exec(text);
    const pageCount = pageCountMatch ? parseInt(pageCountMatch[1], 10) : 1;
    console.log(`Page Count: ${pageCount}`);
    const pages = [];
    for (let i = 1; i <= pageCount; i++) {
        pages.push(`${url}/${i}`);
    }
    return pages;
}

async function getAllUser(tid, maxFloor) {
    const pages = await getAllPages(tid);
    console.log(`Pages: ${pages.join(', ')}`);
    let allUsers = [];
    let currentFloor = 0;
    for (let page of pages) {
        const startIndex = currentFloor;
        const endIndex = maxFloor !== undefined ? maxFloor : undefined;
        const users = await getUserList(page, startIndex, endIndex);
        allUsers = allUsers.concat(users);
        currentFloor += users.length;
        if (endIndex !== undefined && currentFloor >= endIndex) {
            break;
        }
    }
    const uniqueUsers = [];
    const seen = new Set();
    for (const user of allUsers) {
        if (!seen.has(user)) {
            uniqueUsers.push(user);
            seen.add(user);
        }
    }
    console.log(`Unique Users: ${uniqueUsers.join(', ')}`);
    return uniqueUsers;
}

function shuffle(array, seed) {
    const rng = lcg(seed);
    console.log(`Shuffling with Seed: ${seed}`);
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(rng() * (i + 1));
        console.log(`Shuffling: i=${i}, j=${j}`);
        if (array[i] !== undefined && array[j] !== undefined) {
            [array[i], array[j]] = [array[j], array[i]];
        } else {
            console.log(`Error: array[i] or array[j] is undefined. i=${i}, j=${j}, array[i]=${array[i]}, array[j]=${array[j]}`);
        }
    }
    return array;
}

function lcg(seed) {
    let state = hashCode(seed);
    console.log(`LCG State: ${state}`);
    const a = 1664525;
    const c = 1013904223;
    const m = Math.pow(2, 32);
    return function() {
        state = (a * state + c) % m;
        console.log(`LCG Next: ${state / m}`);
        return state / m;
    }
}

function hashCode(str) {
    l
![]( https://i.v2ex.co/VlpwI4y5.jpeg)
et hash = 0;
    for (let i = 0; i < str.length; i++) {
        const char = str.charCodeAt(i);
        hash = ((hash << 5) - hash) + char;
        hash |= 0;
    }
    return Math.abs(hash);
}

// Example usage:
handleRequest('123456', 3, seed123, 10);
这里的 '123456' 是帖子 ID ,3 是抽奖人数,'seed123' 是种子(可选),10 是最大楼层(可选)。
在 V2EX 网站里用浏览器 consele 运行就可以

为了方便 v 友进行类似抽奖我糊了一个 cloudflare work 来使用直接请求 https://v2ex.240801.xyz/?tid=12345&num=10&seed=12345&maxFloor=11(大佬别打,刚装上访问不了可能 cf 路由没设置好)这里的参数说明为 tid 为帖子 id num 为中奖人数 seed 为随机数种子 maxFloor 为最高楼层

下面是橙子链接请大家按需购买

ps 甜度不用担心,今年我们县的都甜。现摘现发没有清洗打腊,只要老家不下雨一般下单第二天就发货。室温 20 度以内还是很耐放的两三个星期没啥问题。有个卖橙子的微信群想加的加我微信 console.log(atob('enF3MjAwOA=='))拉群

2. 如果不进外企、不接外包、不读外语文献、不润、不出国旅行,学外语还有什么用处吗?
如题,时不时能看见有人说什么外语很重要之类的话,但是举的例子往往就是什么润啊接 remote 啊什么的。

但是就我的感觉来说,对于普通人来讲:

一、润或者进外企,外语从来不是最大的阻碍(甚至不是主要的)。相对于其他门槛来说,外语完全可以说是水到渠成的存在;

二、在国内,平时工作需要读外语文献,情况同上;

三、学习或者高效搜索,确实有些东西得用英文日文才能搜到,但是现在 ai 完全能替代简单的外语搜索了;

感觉对于普通人来说,外语也就剩一个娱乐的用途了,赶在字幕组出资源之前看点生肉,或者直接下场去和外网网民对线。
3. [公司辞退] 公司取消岗位,但是未给出辞退通知,请问我应该怎么样保护自己的利益
[背景铺垫]
1. 我是从 22 年 6 月 6 日入职的当前公司
2. 人事于今年 10 月 24 日告知技术部所有人需要签署一份新合同, 我因为提出需要一份工龄延续的补充协议所以没签字,部门其他人均已签字。

[时间线]
1. 11 月 13 日中午,HR 主管喊我谈话, 质问我为什么不签新合同, 我告知需要补充一份工龄延续协议才能签。HR 主管表示所有人都签了,只有你没签,只能说你"不服从管理",合作只能到此。

2. 11 月 13 日下午 5 点,公司通过企微单独给我发了一份取消部分开发岗位的通知,下午 6 点将我踢出钉钉,企微架构

3. 11 月 14 日上午,我于公司总经理,HR 主管,部门主管进行了沟通,谈判无果。公司不承认辞退,但告知不允许我继续上班, 我表示我还没进行交接,自己还有半天调休未休,总经理表示,工资,社保给你算到 14 号当天。 至于辞退含义,他们表示这些不属于辞退,我有问题可以去找第三方来判断

4. 会后, 我在工位打通了法律咨询热线,那边人告知我需要公司出示一份书面的辞退报告。我问如果没有的话,是不是继续待工位上班,回复是的。于是我继续找了总经理,公司并不提供离职报告,我也继续在公司

[补充]
1. 总经理不承认辞退并说告知我不能继续上班的原因是:岗位取消。
2. 事情发生到现在,我都是在使用 水印相机打卡
3. 新公司主体,法人与旧公司不同

[疑问]
1. 我查询了一些资料, 逻辑好像是这么定义:只有公司出书纸面辞退通知才是构成违法辞退的前提,公司要是不出示书面的说明,那就只能继续耗着到公司拖欠工资(也就是 12 月 15 日)走被迫离职。 在仲裁胜利的前提下,违法辞退是 2N , 被迫离职是 N 。 这个逻辑正确吗?

2. 基于我目前的情况,我最优的办法是什么, 有没有可能我现在的证据已经形成了辞退闭环,不需要在这边耗着了,还是说需要继续待在公司,下个月走被迫离职?

3. 如果是走被迫离职的话,我现在每天的打卡记录需不需要发送公司,还是直接等下个月工资条发下来之后直接去劳动局申请仲裁?
4. 虽然我知道 iPhone 信号差,但这情况我有点理解不了了。有没有老哥有相似问题?

22 年 9 月首发买的 14Pro 。

今年 8 月份电池健康掉到 80%以下,去天才吧换了新电池。 从今年 9 月份开始经常性的在坐地铁过程中主 SIM 卡经常性变成“无服务”状态。

最离谱的时候,我刚发现“无服务”后,打开 - 关闭飞行模式,就又无服务了。1 个小时地铁,我得切换 10 多次。

10 月电话咨询 Apple 支持,让我更新到 IOS18 (控制中心真是一坨,昨天看到论坛的帖子已经把控制中心删的只剩一页了),更新后,“无服务”出现的情况缓解,至少是在地铁上没这么高频了。

11 月,最近想减肥,就骑车上下班,路上导航时不时会断,然后发现,一路上又非常高频的出现了。

今天,刚更新到 18.1.1 ,在打这篇帖子的时候,手机在旁边放着,它又“无服务”了。

补充说明:

  1. 为了控制变量,在上个月( 10 月份)咨询 Apple 支持之前先去营业厅换了新的 SIM 卡。
  2. 会是因为换电池导致的么?

想问: 有遇到跟我类似情况的么? 怎么解决的?

5. 发明对乙酰氨基酚的人配享太庙。
这几天感冒发烧,头晕+喉咙痛,全靠它救我狗命,一颗下去半小时见效,八小时有效。只要不过量,基本无副作用,儿童和孕妇也能吃。感谢现代医学。
6. 国内还有免费的网页脱管吗, html+js 的网页

抓实时公交 API 写了个简单的网页,给父母用,脱管到 github pages ,有时候很慢。有免费方案吗?就一个 html+js 文件,也可以把 js 合并到 html 文件中做个单 html 文件。

7. 各位 Linux 运维的巨佬工作用 mac 吗

各位 Linux 运维的巨佬用 mac 的多吗,工作使用各类工具符合需求吗

8. 服了,安卓打电话都有广告

怎么会有 5G 视频彩铃这么恶心的东西啊

9. 没想过真的会因为家长不同意分手,哎遗憾
10. v 友们,人生的第一个相机,主要想用来配景,直接上索尼的 a7c2 会不会有点奢侈
12. Magic Mouse 妙控鼠标用了快 11 年了,很喜欢


翻了一下购物记录,最早一个 Magic Mouse 还是 2014 年 1 月买的,
那时候还是要换电池的款式,记得电量用的飞快一天到晚要换电池。

后来陆续用过单独的黑色 2 代、白色 2 代、iMac M1 附带的绿色 2 代,共计三个吧应该。
后面两个现在还在用,白色这支左右两侧的金属表层已经都磨掉露出铝原色了……

无论内网外网,提到这个鼠标都是罪大恶极反人类,我却已经用了接近 11 年😂
是真心的觉得好用,并不是为了装或者啥的
我是不是一个人?其它喜欢妙控鼠标的粉丝在哪里?让我看见你们的双手好吗?[滑稽]

Ps.现在用的键盘也是带 Touch ID 和小数字的 Magic Keyboard 妙控键盘,机械键盘有好多颜值种草的,但觉得着实太吵+割舍不掉 Touch ID
13. 我有个朋友生二胎了,取名字随姓问题很困扰

一胎儿子,随父亲姓;二胎女儿,目前存在争议。 孩子父亲认为二胎依然需要随父亲姓,这样对孩子好,不会有隔阂,属于传统做法,改变姓氏长远看影响家庭和睦,必须当即立断不可犹豫; 孩子母亲认为二胎需要随母姓,因为孩子是她辛苦怀胎十月生的。而且小夫妻都是独生子女,认为两个孩子各随一个没什么问题。 正常婚姻,双方条件基本上门当户对。 大城市打拼安家,市区小两房首付各出一半贷款已清,房本两人名字。 欢迎各位发表看法

14. 阿里云开小灶出来卖货? 非常邪乎的灵车 claw

因为黑五需要进货对大陆优化的服务器,遂开始不断挖坟寻找合适的产品

看到有人在推 claw 这家的 aff https://v2ex.com/t/1077098

名字起得很有 affman 的味道Claw - 阿里云青春版,同款香港线路 1C1G 仅需 $3.5/月,$8.4/季,BUG 款限量抢

白菜价的 HK 三网优化 1Gbps/1T 只要 10$/月,而且还是独占核心的 vds ,更是用的阿里云的网络和机房。这也太奇怪了趴。

所以也去购买了一台,测试...额,确实是阿里云!

附 looking glass 地址
8.219.195.163 https://lg.ap-southeast-1.claw.cloud/ 新加坡
47.74.34.123 https://lg.ap-northeast-1.claw.cloud/ 日本东京
47.238.150.244 https://lg.cn-hongkong.claw.cloud/ 中国-香港
8.209.70.255 https://lg.eu-central-1.claw.cloud/ 德国-法兰克福
47.253.157.212 https://lg.us-east-1.claw.cloud/ 美国东部-北弗吉尼亚州
47.251.75.195 https://lg.us-west-1.claw.cloud/ 美国西部-北加利福尼亚州

这个帖子说出它是使用阿里云的 ECS 方案。 “阿里云元信息共享,可以证明不是拿一台阿里云同机房/线路的物理机虚拟化出来的”

# curl http://100.100.100.200/latest/meta-data/instance/instance-type
ecs.e
# curl http://100.100.100.200/latest/meta-data/vpc-id
vpc-t4n0gsteapt**********

我去阿里官网比对了一下 HK 这个带宽的价格,相同配置下 ECS 200Mbps 香港优化线路是 40000CNY/月,更别说 1Gbps 了,这和官方价格差了不止 100 倍...

昨天,带着疑惑的态度,拨通了阿里商务的电话,当把详情跟商务说了之后,商务也表示非常不解,这个价格连商务也动心想买,我留下这个网站网址和 looking glass 地址后,商务表示联系产品调查一下回复我。

今天我得到了回复,概括如下:

1 、ip 和服务器确实是在阿里的机房 2 、调查结果和中国站阿里云没有任何关系,可能和国外站合作,因国内站是两个产品线无法继续调查了 3 、按 claw 这个价格卖,100%是要亏钱的

15. [开源][量化] 如果你相信 BTC, 这将是你的第一个永赚量化策略

这是一个融合了平均成本法与长期持有策略的加密量化策略, 在主流交易所[币安]上实现, 其思想同样适用于其他核心资产, 如纳指, 黄金等

  1. 只需要填写 API 即可开启自动化交易, 目前支持币安, 只支持现货 BTC/USDT, 支持多账户
  2. 程序初始时, 请保证你的现货账户中不持有任何 BTC, 并且现货或理财账户中拥有足够的 USDT
  3. 核心思想是平均成本与屯币, 如果价格上涨, 将在固定盈利点卖出, 并将盈利部分转移至资金账户进行屯币, 如果价格下跌, 将不断补仓, 拉低成本
  4. 策略将会利用你现货账户中的 USDT 和 BTC, 以及理财账户中的 USDT, 而理财账户中的 BTC 会被忽略, 以便您手动将资金账户中的 BTC 转移至理财账户
  5. 如果所有资金都买入了 BTC 导致报错 DCA InsufficientFunds, 这时候 BTC 处于历史低位, 应该从其他地方划转 USDT 到交易所

https://github.com/gochendong/dca-holder

赢利点在哪?

基于平均成本法, 只要持仓的总体盈利达到一定幅度, 就会止盈, 并且止盈部分是 BTC, 并屯币至资金账户不再参与后续量化

真的可以永赚?

只要 btc 能不断接近新高, 就能够不断盈利

没有缺点吗?

  1. 如果 BTC 下跌后长期不能反弹到一个高位, 你将不能止盈, 只能通过剩余的 USDT 理财获取收益
  2. 如果你的 SHARES 拆分的太少, 而 BTC 价格下跌了很多, 导致没资金补仓, 程序无法继续运行, 需要从交易所外部转移 USDT

这不是马丁策略吗?

不算是, 策略的核心是相信 BTC 的长期价值, 而不是投机, 长期运行之后, 你的资金账户会累积很多 BTC, 这部分 BTC 不会参与策略的后续运行, 而且补仓资金永远保持不变, 而不是不断增加

策略交流可以来在线聊天室: https://chat.bulita.net

16. 终于花巨资 成为了尊贵的理想 L6 车主

终于花巨资 成为了尊贵的理想 L6 车主,这个冬天 不再冷了

17. 和家里打了个电话有点不舒服

23 年结婚我在老家市里买了一套婚房,贷款贷了 64 万,首付出了 55 万,前天我提前还了 35 万,因为觉得在手里放的也没有任何收益,还不如还了,给手里留了十来万作为备用金就行,今天和家里打电话,我把这个消息告诉了他们,因为他们一直让我提前还点,压力小。得知消息后他们挺开心,说剩下的你们基本上和没贷款差不多了,看到他们开心我也开心,但是后来他们问我现在工资多少了,我从来不和别人讨论工资,因为这样的讨论只会让双方其中一方不太舒服,我一直不在互联网公司工作,所以工资不是很高,我说两万三,然后他们说:“好吧,我听邻居说在北京每个月低于三万过的都挺有压力的”,我听到后只能说还好吧,没觉得,可能是我物欲低吧,然后他们也说那就好,知足常乐就行。 虽然我知道他们是问工资是在关心我,但是心里还是有一点不舒服,可能是因为没有达到他们期望吧,不知道…… 还是努力吧……

18. 不懂就问,终身会员买了要是对方跑路了怎么办。
一些 app 有限时推出终身会员制,要是开发商跑路了,或者不维护了。数据是不是没了
19. 2024 年, C++ 开发机选择: Mac 远程还是 Ubuntu 本地?

目前车端 C++ 开发,因为之前应用开发一直使用 Mac ,但是现在没法在 Ubuntu 编译,所以只能使用 vscode 远程开发,目前两种方式都使用了一段时间,目前优劣势比较,V 站大佬们都是怎么考虑和选择的:

Mac

优势

  • 操作习惯更熟悉,软件支持、显示界面、操作都更流畅

劣势

  • Vscode 远程开发已经接近本地,但是仍然有些痛点:
    • 文件传输挂载到 mac 下,传输还是比较耗时,总感觉不是那么舒服
    • 有部分工具 Ubuntu 下用的更舒服,直接本地就可以。mac 下需要起 docker ,还没有那么及时获取到

Ubuntu

优势

  • 所有都是在本地,一致的开发体验

劣势

  • 界面实在是难看,用起来没有那么丝滑,有时候感觉 Vscode 本地还没远程舒适
  • 快捷键啥的也很乱,用了改建,但是部分软件改的也没那么好
  • 编译有时候卡的本地没法进行其他操作
21. 以后上班是不是越来越难了?
社会保险缴费基数与承担费用计算说明
一、缴费基数确定方式:
1.职工月缴费基数为本人上年度工资总额的月平均数。
2.职工缴费基数低于政府公布的缴费基数下限的按照下限缴费,高于缴费基数上限的按照上限缴费。
目前我省 2024 年度缴费基数下限为 4416 元,上限为 22078 元
二、职工上年度月平均收入计算方式:
1.收入合计查看方式:
登录个人所得税 APP---收入纳税明细--选择 2024 年度点击查询--收入合计
2.职工上年度月平均收入=收入合计金额/12 个月
三、职工个人承担部分计算方式:
个人承担金额 = 参保职工个人缴费基数(依据本人上年度月平均工资收入确定)× 10.3%(其中养老保险 8%,失业保险 0.3%,医疗保险 2%)
企业承担金额 = 参保职工个人缴费基数(依据本人上年度月平均工资收入确定)× 25.6%(其中养老保险 16%,失业保险 0.7%,工伤保险 0.9%,医疗保险 8%)
四、公司将从 2025 年 1 月 1 日起按照国家相关规定执行社保计算、缴纳。
22. 微信偷摸读取用户照片,并使用内容识别扫描照片进行分类!

刷 IT 之家的时候看到了这个微信 8.0.54 的更新日志,IT 之家详细介绍了一个新功能。

微信 8.0.54 更新日志: https://www.ithome.com/0/812/399.htm

11.. 发送图片界面改动 这处改动在之前解析测试版更新的推文中小编就讲述了,在给好友发送图片时,“图片和视频”界面有一处改动,右上角新增了一个放大镜样式的符号。 点击后,上方搜索栏中显示“搜索照片、事物、地点...”;下方则会根据照片的类型分类。 示意图

简单说一下:在发送图片页面右上角有个搜索图标,点进去是微信帮你分类好的照片。这个分类有时间、地点还有内容识别和人脸识别。

我看到这个时直接懵了,虽然说国内不注重隐私,但腾讯大厂都不避人了吗??? 不管哪家的相册使用内容识别都会询问用户,并且可关吧。

我试了一下,我的微信确实也有分类,而且还有人物分类,最离谱的是有个人物标签还有真实姓名。微信扫描分类可以理解,这个姓名他是怎么获得的啊。

我查了一下,安卓系统也没有提供带分类的照片 api 。

23. 如何畅快地在 Linux 系统下使用代理进行内容下载?

国内使用 linux 经常出现无法下载外链资源的情况,请问有什么优雅的方法能够在 linux 下使用协议代理吗?

不希望再去更新内容源了,要看国内源的质量,真不顺手。