跳转到内容
彼岸论坛

小天管理

管理员
  • 内容数

    15754
  • 注册日期

  • 最后上线

  • 得奖次数

    1

小天管理 发表的所有内容

  1. 过去 koolshare 被取缔以后,现在新版的 koolcenter 感觉是被朝廷招安以后的版本了,其发布的固件确定可信吗? 有没有相关消息报道过可信度的?
  2. 也许对在读大学的朋友会有一定的参考价值,顺手在这里贴一下,有兴趣可以参考。 https://wiki.0xffff.one/getting-started/ 主要是针对我过去学计算机到工作的困惑,与身边人的观念冲突,和身边朋友数年来的摸索之间,一步步想通后的一个方法总结。 形式上是一系列文章,整体比较务实和行动导向。主要讨论大学与中小学学习、以及不同大学之间的异同;在心态上如何平衡学校 title 的落差,从中小学填鸭教育过渡到大学的主动学习的策略;还有 CS 领域入门的一些关注点,关于个人电脑开发环境,知识管理体系的准备,以及最早期 Overview 的搭建等等。 这里也是 0xFFFF CS Wiki 的一部分,Wiki 本身除了这一系列指引外,其他内容目前还及其简陋,所以也希望可以吸纳一些新鲜血液一起来交流,沉淀一些东西。不知不觉我毕业也有好几年,自觉已经很难再从学生的视角去思考一些问题了😄
  3. 比如说,我想要个 图片分割并 zip 下载 的功能,但是我又不懂 canvas 也不知道浏览器能不能直接打包 zip 。只要告诉它: 生成一个 image splitter 组件,用户上传一张照片,选择行、列数量,点击按钮,就会自动分割,并打包成 zip 格式自动下载。 就会生成一个功能完整的组件: 'use client' import React, { useState } from 'react'; import JSZip from 'jszip'; import { saveAs } from 'file-saver'; const ImageSplitter = () => { const [image, setImage] = useState<File | null>(null); const [rows, setRows] = useState(3); const [cols, setCols] = useState(3); const handleImageUpload = (e: React.ChangeEvent<HTMLInputElement>) => { if (e.target.files && e.target.files[0]) { setImage(e.target.files[0]); } }; const handleSplitImage = async () => { if (!image) return; const img = new Image(); img.src = URL.createObjectURL(image); img.onload = async () => { const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); if (!ctx) return; const zip = new JSZip(); const { width, height } = img; const pieceWidth = width / cols; const pieceHeight = height / rows; for (let r = 0; r < rows; r++) { for (let c = 0; c < cols; c++) { canvas.width = pieceWidth; canvas.height = pieceHeight; ctx.drawImage( img, c * pieceWidth, r * pieceHeight, pieceWidth, pieceHeight, 0, 0, pieceWidth, pieceHeight ); const dataUrl = canvas.toDataURL('image/png'); const base64Data = dataUrl.split(',')[1]; zip.file(`piece_${r}_${c}.png`, base64Data, { base64: true }); } } const content = await zip.generateAsync({ type: 'blob' }); saveAs(content, 'image_pieces.zip'); }; }; return ( <div className="flex flex-col items-center justify-center p-4"> <div className="bg-white shadow-md rounded-lg p-6 w-full max-w-md"> <label className="block mb-2"> Upload an image: <input type="file" accept="image/*" onChange={handleImageUpload} className="mb-4 w-full p-2 border border-gray-300 rounded" /> </label> <label className="block mb-2"> Enter number of rows: <input type="number" value={rows} onChange={(e) => setRows(parseInt(e.target.value))} min="1" className="mb-4 w-full p-2 border border-gray-300 rounded" /> </label> <label className="block mb-2"> Enter number of columns: <input type="number" value={cols} onChange={(e) => setCols(parseInt(e.target.value))} min="1" className="mb-4 w-full p-2 border border-gray-300 rounded" /> </label> <button onClick={handleSplitImage} className="w-full bg-blue-500 text-white p-2 rounded hover:bg-blue-600 transition" > Split Image </button> </div> </div> ); }; export default ImageSplitter; 当然一开始样式有点丑,我补充了一句:使用 tailwind 优化一下样式,要现代感,柔色调 大体效果就出来了: https://imagesplitter.org/
  4. 这两天忽然出来个免费 nas 系统,尤其是我在的几个 qq 群基本是在同一两天内出现说免费 nas 系统好牛掰,尤其是影音多么多么牛掰之类的,体验吊打黑裙之类的,架不住都说的天花乱坠,虚拟机装了下体验了下,登录后的第一感觉是 好快,第二感觉是 就这?说好的吊打呢?说好的影音牛掰呢? 1 说应用:少,总共 25 个应用,11 个是矿神 SPK7 的,玩群晖的都懂。 [img][/img] [img][/img] 2 说备份:有点意思,差点意思。 [img][/img] 3 说设置:好听叫功能简洁,对小白友好。 [img][/img] 4 说 docker: 内置加速,其他没啥可说。 [img][/img] AdGuard Home fnOS 查询日志 [img][/img] 5 说远程访问:用他家的得注册懒得试,ddns 就 4 个。 [img][/img] [img][/img] 6 说影音:刮削挺快,但是你为啥要请求百度的域名?另外上传了个.wmv 的视频,无法播放,没然后了。 [img][/img] 自家服务器刮削就是快 [img][/img] [img][/img] 7 说系统:是 debian12 没错,还是清华源,虽然 fnOS 应用少,但是有 docker 啊,你甚至还可以 apt install. [img][/img] [img][/img] [img][/img] 因为是草草体验,找了半天没找到 demo,只能虚拟机体验下,加上本人很业余,也就用过群晖和 Pve ,所以上面所说都是非常片面小白的,很多方面理解不到位,还望担待。 截至现在,还有人在群里说:“fnOS 挺不错的” 我只能说:啊 对对对。
  5. 用 R2S Plus 做的主路由,用的是友善定制的 FriendlyWrt ,但其实就是 OpenWRT 。 下面是我用 iperf3 测出来的情况: 第一次用 OpenWRT ,不太懂怎么设置,不过可以确定的是无线设置没开客户端隔离。 网上搜不到相关问题,问客服也不知道怎么解决,所以来万能的 V2 问问。 因为不知道到底是什么问题也不懂,如果需要更多的信息还望老哥们提出来。
  6. 需求: 1. 便宜! 2. 体积小! 3. HDMI 插电视上运行,稳定性强,需要稳定运行 4 年以上。
  7. 2024 ,0826-0901 暑假结束了,天气凉快了,孩子终于要开学了。 8 月数据总结 最近一个多月都在全身心在新 App 上,所有的在架 App 都没有任何打理。 总得来看,下载量提升很多,App Store 和 Google Play 的收入没什么变化,但是国内安卓市场的收入大幅减少。 下载量(极简时钟) App Store ,增长 44% Google Play ,增长 19.30% 国内安卓市场,因为上个月的数据不全,就和 6 月份对比,增长了 18.7% 收入变化 App Store ,增长 2.2% Google Play ,增长 9.08% Admob ,增长 0.28% 国内安卓市场,减少 18.92% Ship-A-Ton 第三周 Ship-A-Ton 就剩 18 天了,感觉要砍掉一个大功能才能勉强提交了。 这周严重阻碍开发进度的就是黑神话·悟空!。每天都会玩到后半夜一点多,这就导致睡眠不足,严重影响到了白天的开发效率。 这周的番茄钟数量是 26 ,相比上周多了 4 个, 但也只是 4 个而已。开发速度太慢了,这让我又开始焦虑了。 这周有两个主要的进展,一是完成了第三个功能模块的原型,跑通了整个流程。这个模块经历了两次更名,一开始叫 Wishlist ,再后来叫 Goals ,最后定为 Desires 。 另一个进展就是和设计师顺利达成了合作,App 的 UI 终于有保证了。这一周的绝大部分开发时间都花在了 UI 上,和我之前自己瞎写的 UI 一对比,简直是云泥之别。专业的事情还是要交给专业的人来做。 [Vlog: Week 3 for Shipaton] 本周探索 监测 ScrollView 滚动状态 需要在新 App 里加入对 ScrollView 滚动状态的监测,看完了肘子哥的文章,# 如何判断 ScrollView 、List 是否正在滚动中。因为 App 是 iOS 17+ 的,还不能直接使用 iOS 18 的新 API , 直接就使用了肘子哥的 IsScrolling 。 单复数的文案本地化 App 里需要用的针对单词单复数的不同文案,所以就第一次使用了 SwiftUI 中 Text 对单复数的 API ,不用自己写 if else 判断,很优雅。# Pluralisation made simpler in SwiftUI SVG 转成 SF Symbols 我想要把 MasterGo/Figma 里面的切图导出后,放到 Xcode 中,然后通过 Image 和 foregroundStyle 给切图加上不同的颜色,就像 SF Symbols 那样。导出成 jpg 和 png 都无法做到,尝试导出 SVG 后才发现 SwiftUI 的 Image 还不支持 SVG 。 我就想着怎么能把 SVG 转成 SF Symbols ,找了两个工具 App ,都是收费的,连试用也没有,我就没敢直接付费。于是我就问了下 ChatGPT 怎么将 SVG 转换成 SF Symbols ,AI 的回答如下: 我就在这个回答里找到了解决方案:PDF !将 icon 导出为 PDF ,放到 Xcode 的 Asset 里,然后将图片设置为 Render as Template Image 就可以了。 生活 吃了两顿大餐,还发现了一家不错的面馆。 和许久没见的老同学见面,畅聊一晚。 直面天命,刚过第五回,下周肯定能通关了。 第三回,黄眉差一点初见过,我以为还有一个阶段变身,当时葫芦也没酒了,就摆烂打了。 第四回,晦月魔君确实恶心,我是天命人,不是修脚师傅! 第五回,死的最多次数居然是在铁球山路…… 最近因为玩游戏和写代码,尤克里里都生疏了,每天练习时间大大减少,甚至有一两天都没拿起来。花了将近一个月练习 Em 和弦终于成功了,录了 New Boy 。 [Vlog: Ukulele - New Boy] 视频内容还请移步到公众号文章里查看: https://mp.weixin.qq.com/s/OgBlZGfDmPtq7hFY7XLi9g
  8. 轻量化,最好开源,能支持私有部署,准备部署到公司内网 支持 webssh 和 文件下载 重点 支持通过按用户组指定登录授权,比如:管理组的用户使用 root 登录, 而程序组的用户使用 programer 用户登录 资产管理及权限控制,即: 特定的用户/用户组只能连接特定的 ssh 主机 jumpserver 太重了,完全不想去用 next-terminal 不支持第 3 条
  9. 一直没找到好用的 goole 居中的插件 让 Claud 实现了一个 几分钟就完事了 https://raw.githubusercontent.com/macong0420/Image/main/202409022058444.png
  10. https://peer-drop.real-tech.online/ 用聊天框的形式,支持传输文字和文件 目前只支持局域网 只要有浏览器就能互相通信,无论手机平板还是电脑
  11. 防止被 pua 找了些电子书 但是 很多好像没有中文版 和 pdf 下载 《精神控制的艺术》( The Art of Manipulation ) – 这本书探讨了操控和影响他人的技巧,虽然不一定是学术性,但提供了关于精神控制的实用见解。 《心理操控:如何识别和抵抗心理操控》( Mind Control: The Ultimate Guide to Understanding and Resisting Mind Control ) – 这本书详细解释了心理操控的机制,并提供了识别和抵抗这些操控的方法。 《社会工程学:黑客如何利用心理学进行攻击》( Social Engineering: The Science of Human Hacking ) – 克里斯·哈德( Chris Hadnagy )的书籍,探讨了如何通过操控人类行为来实现目的,虽然重点是社会工程学,但涵盖了心理操控的许多方面。
  12. 给大伙推荐一款高度可配置化的工作流系统,非常 nice,具体可以看图片或者访问下面的网址。 访问地址: http://106.54.16.175/ 账号/密码:vistor1/vistor1
  13. 最近一直也有在看 iPhone AI 相关的信息 国内目前看来是没办法用上,最近好像只解锁了港版 然后刚好晚上看到一个老哥在看日版的 自己手上现在是 15pro 春节期间大概率会去日本旅游或者香港旅游 各位大佬有什么建议么
  14. 软件名称】七猫免费小说 【软件语言】中文 【软件大小】100.65MB 【软件版本】7.46 【软件包名】com.kmxs.reader 【开发代号】74600 【系统版本】11 【特殊说明】免广告获得奖励 解锁会员 【软件简介】你在一个完全陌生的地方醒来,没有任何关于自己被敌对士兵包围的记忆。那是什么样的? 男主角得到了一个绰号尼莫,被迫调查一起残忍的罪行,以换取指挥官的赞助。为了破案,他加入了精锐的士兵小队,他需要得到战友的信任才能找到罪魁祸首。然而,如果谋杀案隐藏了更多的秘密,解开的谜团只会引发新的问题呢?他的新战友会成为他的伙伴还是敌人? 特征: ► 军事冲突的两个对立面 尼莫。一个失忆的人。在指挥官的保护下,他加入了一个年轻的士兵小队,进行间谍活动并调查犯罪。 留置权。战争之子。他害怕被黑人叛教者杀害,并渴望为亲人的死报仇雪恨,过着完全不同的生活。 ► 秘密侦查神秘犯罪,寻找线索 寻找线索,做出选择,然后跟随故事寻找罪魁祸首。 ► 两种不同流派的混合:视觉小说和指向与点击 在 Guilty Parade 中,您可以做出重要决定并在营地中独立移动,与物体和角色互动。 ► 有机会与古怪的角色建立牢固的友谊纽带 角色有很多独特的特征(喜剧和戏剧),习惯和他们的行为是不可预测的(角色简介)。 ► 很多有意义的选择会影响你得到的场景 尼莫不仅要调查犯罪,还要学会生活在未知的世界中,并决定他在军事冲突中站在哪一边。 【下载地址】https://pan.quark.cn/s/52199eeff9d0
  15. 最近把五年前写的一个弹幕库给重构了一下,本来两年前就想着做这件事,但是其中有一段工作时间压力很大,所以就搁置了,导致没有时间来做这件事情,最近周末 + 晚上花一些时间重构了下,并把文档好好写了一下。言归正传,这篇文章会介绍部分这个弹幕库有的能力,如果正好符合你的需求或者感兴趣,可以帮忙点点 star 来支持一下。 我们有哪些能力 我们提供了灵活调整轨道,自定义弹幕和容器样式,弹幕运动算法等能力,还在提供非常丰富的钩子来让用户处理自定义的行为,只要你想要的,都能做到,本文档会简单介绍一些能力和一些功能的实现。 在线 demo: https://imtaotao.github.io/danmu/ github: https://github.com/imtaotao/danmu?tab=readme-ov-file 官方文档: https://imtaotao.github.io/danmu/document/zh/ 快速开始 对于一个开箱即用的 demo ,可以非常简单的接入,如下所示: import { create } from 'danmu'; const manager = create(); manager.mount('#root'); manager.startPlaying(); // 发送弹幕 manager.push('弹幕内容') 对轨道进行调整 我们对支持类似 CSS calc 表达式的能力,一些位置/宽高等信息都可以用表达式来计算。所以对于轨道来说可以很方便的进行调整。 **number**:默认单位为 px。 **string**:表达式计算。支持(+, -, *, /)数学计算,只支持 % 和 px 两种单位。 // 例如,这里的 100% 是指容器宽度(如果是高度相关的配置 100% 就是容器的高度) manager.setGap('(100% - 10px) / 5'); 限制为顶部 3 条弹幕 // 如果我们希望轨道高度为 50px manager.setTrackHeight('100% / 3'); // 如果不设置渲染区域,轨道的高度会根据默认的 container.height / 3 得到, // 这可能导致轨道高度不是你想要的 manager.setArea({ y: { start: 0, // 3 条轨道的总高度为 150px end: 150, }, }); 限制为中间 3 条弹幕 manager.setTrackHeight('100% / 3'); manager.setArea({ y: { start: `50%`, end: `50% + 150`, }, }); 限制为几条不连续的轨道 限制为几条不连续的轨道,除了要做和连续轨道的操作之外,还需要借助 willRender 这个钩子来实现。 // 如果我们希望轨道高度为 50px ,并渲染 0 ,2 ,4 这几条轨道 manager.setTrackHeight('100% / 6'); // 设置容器的渲染区域 manager.setArea({ y: { start: 0, // 6 条轨道的总高度为 300px end: 300, }, }); manager.use({ willRender(ref) { // 高级弹幕和轨道不强相关,没有 trackIndex 这个属性 if (ref.trackIndex === null) return ref; // 如果为 1 ,3 ,5 这几条轨道就阻止渲染,并重新添加等待下次渲染 if (ref.trackIndex % 2 === 1) { ref.prevent = true; manager.unshift(ref.danmaku); } return ref; }, }); 自定义渲染 弹幕和容器都允许自定义的渲染样式,你可以很方便的做到。 自定义弹幕的样式 1. 通过 manager.setStyle 来设置 import { create } from 'danmu'; // 需要添加的样式 const styles = { color: 'red', fontSize: '15px', // . }; const manager = create(); // 后续渲染的弹幕和当前已经渲染的弹幕会设置上这些样式。 for (const key in styles) { manager.setStyle(key, styles[key]); } 2. 通过 danamaku.setStyle 来设置 import { create } from 'danmu'; // 需要添加的样式 const styles = { color: 'red', fontSize: '15px', // . }; // 初始化的时候添加钩子处理,这样当有新的弹幕渲染时会自动添加上这些样式 const manager = create({ plugin: { $moveStart(danmaku) { for (const key in styles) { danmaku.setStyle(key, styles[key]); } // 你也可以在这里给弹幕 DOM 添加 className danmaku.node.classList.add('className'); }, }, }); // 对当前正在渲染的弹幕添加样式 manager.asyncEach((danmaku) => { for (const key in styles) { danmaku.setStyle(key, styles[key]); } }); 自定义容器样式 import { create } from 'danmu'; // 需要添加的样式 const styles = { background: 'red', // . }; const manager = create({ plugin: { // 你可以在初始化的时候添加钩子处理 init(manager) { for (const key in styles) { manager.container.setStyle(key, styles[key]); } // 你也可以在这里给容器 DOM 添加 className manager.container.node.classList.add('className'); }, }, }); // 或者直接调用 api for (const key in styles) { manager.container.setStyle(key, styles[key]); } 高级弹幕的示例 本章节将介绍如何将弹幕固定在某一位置,以 top 和 left 这两个位置举例。由于我们需要自定义位置,所以我们需要使用高级弹幕的能力。 将弹幕固定在顶部 // 这条弹幕将会居中距离顶部 10px 的位置悬停 5s manager.pushFlexibleDanmaku('弹幕内容', { duration: 5000, direction: 'none', position(danmaku, container) { return { x: `50% - ${danmaku.getWidth() / 2}`, y: 10, // 具体容器顶部的距离为 10px }; }, }); 固定在顶部第 2 条轨道上 // 这条弹幕将会在第二条轨道居中的位置悬停 5s manager.pushFlexibleDanmaku('弹幕内容', { duration: 5000, direction: 'none', position(danmaku, container) { // 渲染在第 3 条轨道中 const { middle } = manager.getTrackLocation(2); return { x: `50% - ${danmaku.getWidth() / 2}`, y: middle - danmaku.getHeight() / 2, }; }, }); 将弹幕固定在左边 // 这条弹幕将会在容器中间距离左边 10px 的地方停留 5s manager.pushFlexibleDanmaku('弹幕内容', { duration: 5000, direction: 'none', position(danmaku, container) { // 渲染在第 3 条轨道中 const { middle } = manager.getTrackLocation(2); return { x: 10, y: `50% - ${danmaku.getHeight() / 2}`, }; }, }); 发送带图片的弹幕 要让弹幕里面能够携带图片,要在弹幕的节点内部添加自定义的内容,实际上不止图片,你可以往弹幕的节点里面添加任何的内容。 本章节的组件以 React 来实现演示。 开发弹幕组件 export function Danmaku({ danmaku }) { return ( <div> <img src="https://abc.jpg" /> {danmaku.data} </div> ); } 渲染弹幕 import ReactDOM from 'react-dom/client'; import { create } from 'danmu'; import { Danmaku } from './Danmaku'; const manager = create<string>({ plugin: { // 将组件渲染到弹幕的内置节点上 $createNode(danmaku) { ReactDOM.createRoot(danmaku.node).render(<Danmaku danmaku={danmaku} />); }, }, }); 编写一个插件 编写一个插件是很简单的,但是借助内核暴露出来的钩子和 API,你可以很轻松的实现强大且定制化的需求。由于内核没有暴露出来根据条件来实现过滤弹幕的功能,原因在于内核不知道弹幕内容的数据结构,这和业务的诉求强相关,所以我们在此通过插件来实现精简弹幕的功能用来演示。 编写一个插件 你编写的插件应当取一个 name,以便于调试定位问题(注意不要和其他插件冲突了)。 插件可以选择性的声明一个 version,这在你的插件作为独立包发到 npm 上时很有用。 export function filter({ userIds, keywords }) { return (manager) => { return { name: 'filter-keywords-or-user', version: '1.0.0', // version 字段不是必须的 willRender(ref) { const { userId, content } = ref.danmaku.data.value; console.log(ref.type); // 可以根据此字段来区分是普通弹幕还是高级弹幕 if (userIds && userIds.includes(userId)) { ref.prevent = true; } else if (keywords) { for (const word of keywords) { if (content.includes(word)) { ref.prevent = true; break; } } } return ref; }, }; }; } 注册插件 你需要通过 mananger.use() 来注册插件。 import { create } from 'danmu'; const manager = create<{ userId: number; content: string; }>(); manager.use( filter({ userIds: [1], keywords: ['菜'], }), ); 发送弹幕 ❌ 会被插件阻止渲染 manager.push({ userId: 1, content: '', }); ❌ 会被插件阻止渲染 manager.push({ userId: 2, content: '你真菜', }); ✔️ 不会被插件阻止渲染 manager.push({ userId: 2, content: '', }); ✔️ 不会被插件阻止渲染 manager.push({ userId: 2, content: '你真棒', }); 总结 本文档只是简单介绍了下现在的部分能力,更详细的文档在官网可以查看,如果对你的业务或者学习有帮助的,给个 star 支持一下作者,也欢迎大家评论探讨(不止弹幕,哈哈)。
  16. 想趁着这次家电补贴给家里领导换一台电脑,现在的 i7 确实烫手,她的日常工作就是聊天软件和 Excel 表格处理数据,用惯了 MAC 不想换 Windows 想问下 M2 芯片+16G 内存,以上工作是否能够撑个 3-5 年?
  17. 手机端在隐私与权限里倒是有清空个人词典选项
  18. 2022 年三月买的,马上快三年了,这电池就没撑住。
  19. 1.负责游戏服务端、虚拟币钱包、区块链的开发工作 2.负责项目的整体框架构建 3.通过数据分析项目系统性能,对整个系统进行深度优化,提高性能和稳定性 4.有区块链应用、Telegram 机器人、棋牌游戏服务端开发经验者优先 有意者可以联系发简历到邮箱: luluyaya@proton.me 简历留下你的 Telegram 如果合适会有专人联系你的
  20. 请做过游戏的大佬们帮我答疑解惑. 例如 PUBG, GTA 这类 3D 游戏, 经常会遇到一些情况: 比如角色或物品被压住, 如果是按真实的世界, 不管是尸体还是什么被压住就是被压住, 不会无限反弹. 两个物品之间的受力最终也会达到平衡而静止. 但是在一些 3D 游戏里就经常会看到角色或物品在与其他物品接触的时候会不断的抖动, 甚至抽搐变形. 严重的甚至可能会造成飞天 (例如鲁大能通过层叠车辆并炸飞导致了远超出直接炸飞所产生的效果) 诸位大佬能否从技术的角度说说这种情况是如何造成的? 什么原理?
  21. 我重装完去 chrome 应用商店下载,直接提示不兼容
  22. 某些 APP 的官方版太难用,巨卡务必, 如果想做一个它的第三方客户端,瘦身版, 原封不动的使用官方 app 的通讯接口, 只是想要界面和交互上自己重新设计, 这需要学习哪些知识? 需要怎样的学习路线图呢?
×
×
  • 创建新的...