跳转到内容
View in the app

A better way to browse. Learn more.

彼岸论坛

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

小天管理

管理员
  • 注册日期

  • 最后上线

小天管理 发表的所有内容

  1. 各位数字游民和 YouTube 爱好者们,一个不太好的消息来了。2024 年 9 月 20 日凌晨,YouTube 开始大规模清退来自尼日利亚、土耳其等低价区的 Premium 会员。这次行动规模之大、范围之广,让许多用户措手不及。让我们一起来了解这次事件的来龙去脉,以及对我们这些跨区订阅用户的影响。 2024 年 9 月 20 日凌晨 3 点,我的 Gmail 邮箱突然收到一封来自 YouTube 官方发来邮件:Sign up for YouTube Premium again to maintain your membership (翻译:再次注册 YouTube Premium 以保留您的会员资格)。内容包含:由于我们认为注册国家/地区“尼日利亚”不准确,因此您的 YouTube Premium 会员资格已被取消。 这是我其中一个跨尼区 YouTube 会员被清退 的邮件通知, 其它几个账号暂未收到清退邮件,但预计也即将遭遇同样的情况。博客文章写于凌晨 4 点,相信大家在一觉醒来后,会是一片凄苦连天的景象 时间点:2024 年 9 月 20 日凌晨 3 点左右 受影响区域:主要包括尼日利亚、土耳其等低价区 清退原因:YouTube 方面称”注册国家/地区信息不准确” 哥博客 导航菜单 突发消息!尼日利亚、土耳其油管会员遭遇大面积清退 2024 年 9 月 20 日资讯 各位数字游民和 YouTube 爱好者们,一个不太好的消息来了。2024 年 9 月 20 日凌晨,YouTube 开始大规模清退来自尼日利亚、土耳其等低价区的 Premium 会员。这次行动规模之大、范围之广,让许多用户措手不及。让我们一起来了解这次事件的来龙去脉,以及对我们这些跨区订阅用户的影响。 文章目录 [显示] 事件详情 2024 年 9 月 20 日凌晨 3 点,我的 Gmail 邮箱突然收到一封来自 YouTube 官方发来邮件:Sign up for YouTube Premium again to maintain your membership (翻译:再次注册 YouTube Premium 以保留您的会员资格)。内容包含:由于我们认为注册国家/地区“尼日利亚”不准确,因此您的 YouTube Premium 会员资格已被取消。 这是我其中一个跨尼区 YouTube 会员被清退 的邮件通知, 其它几个账号暂未收到清退邮件,但预计也即将遭遇同样的情况。博客文章写于凌晨 4 点,相信大家在一觉醒来后,会是一片凄苦连天的景象 😭 。 时间点:2024 年 9 月 20 日凌晨 3 点左右 受影响区域:主要包括尼日利亚、土耳其等低价区 清退原因:YouTube 方面称”注册国家/地区信息不准确” 尼日利亚油管会员被清退邮件通知 用户反馈 事情发生在凌晨 3 点,从其它论坛和频道均发现不少“受害者”。 合租群油管会员清退消息 事件分析 YouTube 清退力度加大: 相比 2024 年 6 月的小规模清退,此次行动范围更广 清退速度加快,短时间内影响大量用户 低价区会员优势逐渐消失: 土耳其等传统低价区频繁涨价 数字游民可选择的低价区域越来越少 对用户影响 即时影响: 会员资格被取消,无法继续享受 Premium 服务 需要重新订阅,可能面临更高的价格 长期影响: 跨区订阅难度增加,风险提高 可能需要寻找新的替代方案或接受本地区价格 此次,中国大陆用户被清退的案例已经不在少数。相信 YouTube 正在逐步加大清退低价区力度。 话说回来,其实迟早会有这么一天,低价区的羊毛迟早要终结。以前的低价神话“土耳其”,各个会员低价频繁遭遇涨价,虽然数字游民的活动区间越来越小,但毕竟还有选择的余地(越来越小)。苦了的是真正的“土耳其人”。 这次 YouTube Premium 的大规模清退行动,无疑给许多习惯于跨区订阅的用户敲响了警钟。你们遇到清退了吗?欢迎在评论区分享你的经历和看法。
  2. 目前只发生一次,看了下流量监控没有异常 火绒全局查杀了下也没发现问题,大佬们还有其他方法吗
  3. 没有就算了 在用 musish 原帖 https://v2ex.com/t/881024
  4. iOS 设备,用了很多年的原生键盘,准备转微信键盘了。 一是,经常复制的东西需要暂存一下,之前一直用的 Pin 这个软件,弄个小组件在负一屏,使用起来很麻烦,但也用了几年了; 二是,Apple 设备的之间的复制并不是很稳定,微信键盘的跨设备复制稳定很多诶。 就。。这样叛变了😂
  5. 遇到普遍问题是各种卡顿,16g 内存固态硬盘用个三四年还是卡顿最夸张是打开腾讯视频要好几分钟。把 ccleaner 等各种工具试一遍效果一般,除了重装系统各位大佬有什么优化建议。
  6. 我在商场里看了几家体验店,小米 vivoOPPO 三星,只有 vivo 的热点共享里不包含以太网网络共享这个功能,其他几家都有,无论是低端机还是旗舰机。
  7. 我自已有台 j4105 电脑,发现开一个 QQ ,每天十几个群都有消息,还有微信聊天工具,谷歌浏览器开 15 个窗口,CPU 就经常 80%了,再配合一个 todesk 远程控制,经常 100%。 想问一下怎么才知道自已需要买几核 CPU 才能满足这样的性能,当时我知道买 8 核,10 核肯定能解决,只是价格问题,还有功耗比较高,我需要的是性价比,刚好满足,又不会性能浪费。有无什么网址可以直接测,在运行多少个软件情况下,有跑分对比
  8. RT ,现在用的是 AOC U27U2DS ,使用起来算是能满足要求吧。 打算双十一换个显示器,看了一圈满足 mac+KVM 的 4K 显示器好像还是没啥选择。 看了雷鸟 U8 ,感觉色彩是个问题。 也想过试试酷优客 5k ,但是没有 KVM 。 最后还是得傻多戴么?有没有什么其他的推荐?想着换个显示器至少分辨率或者刷新率得有些升级?
  9. Tab 选关注的时候出现的是节点列表 Tab 选节点的时候出现的是主题列表 然后还有翻页的时候经常出现上一页的主题 第三页 第四页 我更好奇难道没有人遇到过这个问题吗
  10. 大伙有没有推荐的移动数据监测 app 呀。想设置一个流量预警,运营商是电信
  11. 按照 v 友=菜市场大妈的逻辑,现在“悲观清醒的人”还非常多,大家不妨拿住就是。
  12. 最近跑步的时候瞎想,在间歇训练总想着以一个稳定的平均速度在操场跑圈,但是普通的手表没有办法让我非常及时、直观的知道当前的配速与目标配速的差距。 联想到基普乔格破 2 时行动时,前方有一辆投射投影的配速车 还有田径比赛的时候跑道侧有移动的灯光标识。 感觉如果有这样一个东西在足够便宜的前提下,会让人操场跑圈跑间歇的时候可能更舒服的? 来请教一下,有没有比较成熟且不会很贵的方案。 抖音上刷到一家类似的(但是产品线功能更全的),报价 7 位数开始,有点恐怖了。 叠甲:跑间歇的时候快个几秒慢的几秒当然不会很影响到训练效果,只是在想有没有什么可以更有趣的方式
  13. 可以打出很长的句子,感觉更加智能了,仿佛有了云词库的感觉(实际上只是本地引擎算法) GitHub 地址: https://github.com/gaboolic/rime-frost
  14. 做数据库应用开发多年,有这方面的远程工作吗
  15. 最近有很多朋友咨询如何开通港卡及券商开户。我就整理了下之前的办理的过程, 📝 行前准备 预约:联系了开户行支行的工作人员帮忙预约,超级方便! 材料准备:身份证、港澳通行证必不可少,还有保留好过关小票,还有可能用到地址证明 充电宝:这个真的太重要了,请一定要带! 🚄 行程安排 我是周五晚上从长沙出发,坐高铁到深圳,第二天一大早就开启了我的香港之旅: 07:53 到达香港西九龙 08:40 左右抵达永隆银行(德辅道中) 小贴士:建议大家也选择中环附近办理,因为银行分行集中,超级方便! 🏦 开户历程 招商永隆 & ZA Bank 刚到永隆银行门口时还没开门,我就去附近吃了个早餐。回来后已经有人排队了,但还好只有两三位。 等待的时候,我顺便在线申请了 ZA Bank 的账户。小伙伴们注意啦,用我的邀请码 JYU7T6 会获得最高 500HKD 奖赏券哦! 永隆银行的开户过程超级顺利,大概半小时就搞定了。他们会问问开户原因,可能需要看下流水,整体氛围很轻松。 中国银行 永隆办完直接去了附近的中银分行。等待时间不长,但开户过程稍微久了点,大约 1 小时。 需要下载两个 App:中银香港和 BoC Pay 。银行职员超级 nice,全程帮我操作,我只需要填写必要信息。 ⚡小插曲:隔壁小哥因为收不到验证码放弃了开户。所以一定要提前开通漫游! 💡 实用小贴士 充电宝:可以在 7-11 借用 ChargeSPOT 移动充电宝。 电话卡:同样在 7-11 可以买到 clubsim 卡。 🌃 回程 下午大概 5 点多坐地跌到福田口岸,行程有点赶。 此外,到香港后,也可以在线上开通中国银行,不需要到中国银行的业务网网点。还有就是朋友有朋友开通过程遇到柜员 更多情况看博文:一日港卡开户亲身经历
  16. GPT 说用 SIGNAL 或 win32api 捕捉关闭信号,但是我试了一下都只能在用 Ctrl+C 关闭的时候能成功触发。我想要能在直接把 python 的窗口关掉的时候也能执行这个功能
  17. 价格直逼松哥的中号虾。 gap10 年,感觉饭要吃不起了~
  18. Magician-Concurrent Magician-Concurrent 是一个并发编程工具包,当你需要并发执行某些代码的时候,不需要自己创建和管理线程,除此之外里面还提供了生产者与消费者模型 初始化配置 导入依赖 <dependency> <groupId>com.github.yuyenews</groupId> <artifactId>Magician-Concurrent</artifactId> <version>1.0.0</version> </dependency> 并发处理任务 MagicianConcurrent.getConcurrentTaskSync() .setTimeout(1000) // 超时时间 .setTimeUnit(TimeUnit.MILLISECONDS) // 超时时间的单位 .add(() -> { // 添加一个任务 // 在这里可以写上任务的业务逻辑 }, (result, e) -> { // 此任务处理后的回调 if(result.equals(ConcurrentTaskResultEnum.FAIL)){ // 任务失败,此时 e 里面有详细的异常信息 } else if(result.equals(ConcurrentTaskResultEnum.SUCCESS)) { // 任务成功,此时 e 是空的 } }) .add(() -> { // 添加一个任务 // 在这里可以写上任务的业务逻辑 }, (result, e) -> { // 此任务处理后的回调 if(result.equals(ConcurrentTaskResultEnum.FAIL)){ // 任务失败,此时 e 里面有详细的异常信息 } else if(result.equals(ConcurrentTaskResultEnum.SUCCESS)) { // 任务成功,此时 e 是空的 } }) .start(); 添加进去的任务会并发执行,但是在它们执行完之前,这整个代码块会同步等待在这,一直等到所有任务执行完或者超时才会继续往下走。 这里面的超时时间就是用来设置同步等待多久的。 如果设置为 0 表示一直等到所有任务完成为止 设置为大于 0 的时候,表示只等待这么久 并发处理 List ,Set 等所有 Collection 类的集合里的元素 同步执行 // 假如有一个 List 需要并发处理里面的元素 List<String> dataList = new ArrayList<>(); 每个元素并发执行 // 只需要将他传入 syncRunner 方法即可 MagicianConcurrent.getConcurrentCollectionSync() .syncRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 // List 里的元素是什么类型,这个 data 就是什么类型 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); 这个方法会将传进去的集合分成若干组,每组的大小由参数指定。 这些组会排队执行,但是每一组在执行的时候都是并发的,里面的每一个元素都会由单独的线程去处理。 需要等一组处理完了,才会处理下一组,但是有时候我们不想这么死板的等待,所以可以设置一个超时时间,超过了这个期限就不等了,直接进行下一组,所以这里的最后两个参数就是用来设置这个期限的。 每一组并发执行 // 也可以用 syncGroupRunner 方法 MagicianConcurrent.getConcurrentCollectionSync() .syncGroupRunner(dataList, data -> { // 这里可以拿到每一组的元素,进行处理 // 这个 data 就是每一组 List ,可以自己迭代处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); 这个方法会将传进去的集合分成若干组,每组的大小由参数指定。 每一组由单独的线程处理。 会一直同步等待在这里,直到所有组都处理完了才会进行下一步,但是有时候我们不想这么死板的等待,所以可以设置一个超时时间,超过了这个期限就不等了,直接执行下一步。所以这里的最后两个参数就是用来设置这个期限的。 异步执行 其实就是将上面 [同步处理] 的代码放到了一个线程里,内部处理依然是上面 [同步处理] 的逻辑,但是这整个代码块将会异步执行,不需要等在这。所以个别相同的参数就不再重复解释了。 // 假如有一个 List 需要并发处理里面的元素 List<String> dataList = new ArrayList<>(); 每个元素并发执行 // 只需要将他传入 asyncRunner 方法即可 MagicianConcurrent.ConcurrentCollectionAsync( 1, // 核心线程数 1, // 最大线程数 1, // 线程空闲时间 TimeUnit.MINUTES // 空闲时间单位 .asyncRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); ConcurrentCollectionAsync 里的参数其实就是线程池的参数,除了上面这种写法,还可以这样写。 每调用一次 asyncRunner 都会占用一个线程,而这些线程都是由一个线程池在管理。 ConcurrentCollectionAsync concurrentCollectionAsync = MagicianConcurrent.ConcurrentCollectionAsync( 1, // 核心线程数 1, // 最大线程数 1, // 线程空闲时间 TimeUnit.MINUTES // 空闲时间单位 ); concurrentCollectionAsync.asyncRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); concurrentCollectionAsync.asyncRunner(dataList2, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); concurrentCollectionAsync.asyncRunner(dataList3, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); 用这个方法可以管理线程池 // 关闭线程池 concurrentCollectionAsync.shutdown(); // 立刻关闭线程池 concurrentCollectionAsync.shutdownNow(); // 获取线程池 ThreadPoolExecutor threadPoolExecutor = concurrentCollectionAsync.getPoolExecutor(); 每一组并发执行 // 也可以用 asyncGroupRunner 方法,每个参数的具体含义可以参考文档 MagicianConcurrent.ConcurrentCollectionAsync( 1, // 核心线程数 1, // 最大线程数 1, // 线程空闲时间 TimeUnit.MINUTES // 空闲时间单位 .asyncGroupRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 同上 并发处理所有 Map 类的集合里的元素 Map 的逻辑跟 Collection 一模一样,只不过是传入的集合变成了 Map ,就不再累述了,感谢理解。 同步执行 每个元素并发执行 // 假如有一个 Map 需要并发处理里面的元素 Map<String, Object> dataMap = new HashMap<>(); // 只需要将他传入 syncRunner 方法即可 MagicianConcurrent.getConcurrentMapSync() .syncRunner(dataMap, (key, value) -> { // 这里可以拿到 Map 里的元素,进行处理 System.out.println(key); System.out.println(value); }, 10, 1, TimeUnit.MINUTES); 每一组并发执行 // 也可以用 syncGroupRunner 方法 MagicianConcurrent.getConcurrentMapSync() .syncGroupRunner(dataMap, data -> { // 这里可以拿到每一组 Map 进行处理 System.out.println(data); }, 10, 1, TimeUnit.MINUTES); 异步执行 每个元素并发执行 // 假如有一个 Map 需要并发处理里面的元素 Map<String, Object> dataMap = new HashMap<>(); // 只需要将他传入 asyncRunner 方法即可 MagicianConcurrent.getConcurrentMapAsync( 1, 1, 1, TimeUnit.MINUTES ).asyncRunner(dataMap, (key, value) -> { // 这里可以拿到 Map 里的元素,进行处理 System.out.println(key); System.out.println(value); }, 10, 1, TimeUnit.MINUTES); 每一组并发执行 // 也可以用 asyncGroupRunner 方法 MagicianConcurrent.getConcurrentMapAsync( 1, 1, 1, TimeUnit.MINUTES ).asyncGroupRunner(dataMap, data -> { // 这里可以拿到每一组 Map 进行处理 System.out.println(data); }, 10, 1, TimeUnit.MINUTES); 生产者与消费者 这是一个多对多的模型,多个生产者可以给多个消费者推送不同类型的数据, // 创建一组生产者与消费者,而这样组可以创建无限个 // 每一组的生产者都只会把数据推送给同一组的消费者 MagicianConcurrent.getProducerAndConsumerManager() .addProducer(new MagicianProducer() { // 添加一个生产者(可以添加多个) /** * 设置 ID ,必须全局唯一,默认是当前类的全名 * 如果采用默认值,可以不重写这个方法 * @return */ @Override public String getId() { return super.getId(); } /** * 设置 producer 方法是否重复执行,默认重复 * 如果采用默认值,可以不重写这个方法 * @return */ @Override public boolean getLoop() { return super.getLoop(); } /** * 设置 是否等消费者全部空闲了才继续生产下一轮数据,默认 false * 如果采用默认值,可以不重写这个方法 * @return */ @Override public boolean getAllFree() { return super.getAllFree(); } /** * 当生产者启动后,会自动执行这个方法,我们可以在这个方法里生产数据,并通过 publish 方法发布给消费者 * * 这边举一个例子 * 假如我们需要不断地扫描某张表,根据里面的数据状态去执行一些业务逻辑 * 那么我们可以在这个方法里写一个查询的逻辑,然后将查询到数据发送给消费者 */ @Override public void producer() { // 根据上面的例子,我们可以查询这张表里符合条件的数据 List<Object> dataList = selectList(); // 然后将他推送给消费者 // 可以推送任意类型的数据 this.publish(dataList); /* * 如果你只需要执行一次,那么到此就结束了,这个生产者也可以被回收掉了 * * 但是如果你需要不断地执行上述操作,来维护这张表里的数据,这个时候你有两种做法 * 第一种:加一个 while 循环 * 但是这种方式有个问题,如果消费者的消费速度跟不上,那么就很容易造成消费者队列积压,出现内存问题。 * 而数据积压太久又会影响时效性,可能你推送给消费者的时候,这条数据需要处理,但是等到被消费的时候又不需要处理了,这样容易出现数据错乱的问题。 * * 第二种:等消费者把你推给他的数据消费完了,再推送下一轮,而我们就是采用的这种 * 如果你想用这种方式,那么你不需要再写其他的任何逻辑,只需要将上面提到的 getLoop 方法重写一下,并返回 true 即可 * 当你设置为 true 以后,生产者在推送完一轮后会不断地监视消费者,当发现了空闲的消费者才会推送下一轮数据,并且数据只会推送给这个空闲的消费者 * * 如果你想等所有消费者都空闲了以后再推送下一轮,而不是发现一个空闲的就推送一轮 * 那么你可以重写上面提到的 getAllFree 方法,返回 true 即可 */ } }) .addConsumer(new MagicianConsumer() { // 添加一个消费者,可以添加多个 /** * 设置 ID ,必须全局唯一,默认是当前类的全名 * 如果采用默认值,可以不重写这个方法 * @return */ @Override public String getId() { return super.getId(); } /** * 心跳通知,消费者每消费一个任务,都会触发一下这个方法 * 我们可以根据他触发的频率来判断这个消费者的活跃度 * * 注意!!! * 这个方法里不可以有耗时的操作,不然会将消费者阻塞的 * 如果一定要加耗时的操作,那么务必在新线程里搞 * @param id */ @Override public void pulse(String id) { new Thread(()->{ // 如果你需要在这个方法里搞一些耗时的操作,那么务必要像这样开启一个新线程 // 不然消费者会被阻塞的 }).start(); } /** * 消费频率限制,默认 10 毫秒,取值范围:0 - long 的最大值,单位:毫秒 * * 如果任务执行的耗时小于 execFrequencyLimit ,则等待 execFrequencyLimit 毫秒后再消费下一个任务 * * 首先这是一个生产者和消费者多对多的模型结构,我们以一个生产者对多个消费者来举例 * 生产者生产的数据只有一份,但是他会推送给多个消费者 * 而我们之所以要配置多个消费者,是因为需要他们执行不同的业务逻辑 * 多个消费者执行的业务逻辑不同,也就意味着他们需要的数据大概率会不同 * * 比如消费者 A 需要处理男性的数据,消费者 B 需要处理女性的数据 * 如果生产者刚好连续推送了几批男性的数据,那么这会导致消费者 B 筛选不到女性数据,那么他就不会处理业务逻辑了 * 这么一来,消费者 B 就会无限接近空转,而空转会引起 CPU 占用率过大,所以必须加以限制 * * 千万不要小看这个问题,本人曾经在实战中亲测过,做不做这个限制,CPU 的占有率会达到 10 倍的差距 * 当然了,这跟消费者的业务逻辑还是有一定关系的,具体情况具体看待 * 如果你的消费者几乎不会出现空转,那么这里可以设置为 0 * */ @Override public long getExecFrequencyLimit() { return super.getExecFrequencyLimit(); } /** * 这个方法会接收到生产者推送过来的数据 * 在里面执行相应的业务逻辑即可 * @param data */ @Override public void doRunner(Object data) { // data 可以是任何类型 // 因为能给他推送数据的消费者是固定的,所以 data 有可能收到的类型也是固定的 // 所以我们可以在这里自己判断,然后转化即可 // 为什么不用泛型?这是为了兼容多个生产者,因为他们推送的数据类型可能会不同 } }) .start(); } 项目官网:https://magician-io.com
  19. 什么牌子的剃须刀好用,现在用的手动剃须刀,1-2 次就得换刀片, 太不耐用了
  20. claude 3.5 sonnet 有多强?我把 github.com/suniw/fhash 这个仓库地址扔给模型,(c++)源码,让它帮我翻译成 xcode 代码。一次成功,我没增改一行代码,程序员你慌不慌? 效果展示 https://i.imgur.com/Ae6jryg.mp4 佩服佩服!!!!

Account

导航

搜索

搜索

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.