V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 8 页 / 共 177 页
回复总数  3521
1 ... 4  5  6  7  8  9  10  11  12  13 ... 177  
272 天前
回复了 rabbbit 创建的主题 C++ C++ 如何在函数中获取作为参数的数组的长度?
@GeruzoniAnsasu #11 应该这样做可以改进可执行文件大小:

void foo(int *array, size_t length);

template <size_t length>
void foo(int (&array)[length])
{ foo(array, length); }

最终结果里面 foo 模板的实例应该都会内联从而完全消除。如果要支持实参传递则要实现为 functor……
>虽然他是一个网页,但是它所有代码都是在你的浏览器里运行的,所以他是单机的。

这个说法很怪,一般认为浏览存储在远程计算机上的静态网站也属于非单机活动。

亲自演示即可证明楼主需要表达的,比如新建一个文件并重命名为 a.htm ,在里面写个 aaa 或者用 script 包裹一段调用 alert 的代码,然后双击这个文件,那当然就会在浏览器里打开并且看到,此时很明显是非联机。也可以用 Word 另存为 HTML 之类的。
275 天前
回复了 mmddisa 创建的主题 Windows Windows txt, docx(doc), xlsx(xls) 文件不显示缩略图
最后,txt 文件在默认状态下没有 IExtractImage——这可以用 IQueryAssociations 发现,或者查看注册表 HKCR\.txt 以及 HKCR\txtfile 以及 HKCR\SystemFileAssociations\text 里面都没有 IExtractIcon, IExtractImage, IThumbnailProvider 的注册。OneDrive 会提供 .txt 的缩略图。
275 天前
回复了 mmddisa 创建的主题 Windows Windows txt, docx(doc), xlsx(xls) 文件不显示缩略图
多嘴一句,为什么云文档需要特供的缩略图等 shell 功能?因为云文件不一定已经下载到本地,而为了显示缩略图或者文件预览下载文件是大忌,所以云文档的缩略图由云存储提供商准备。

参考阅读 https://devblogs.microsoft.com/oldnewthing/20170503-00/?p=96105 另外提示链接里文章的 online 和 offline 的意思和当今常见的一种用法相反。
275 天前
回复了 mmddisa 创建的主题 Windows Windows txt, docx(doc), xlsx(xls) 文件不显示缩略图
OneDrive 有缩略图是因为是 cloud file provider API 提供的,见 https://learn.microsoft.com/en-us/windows/win32/cfapi/build-a-cloud-file-sync-engine

Word 文档必须保存缩略图才能被 IExtractImage 接口( Word 的实现是 CLSID = {355822FC-86F1-4BE8-B5F0-A33736789641})提取缩略图,开启这个功能有两种主要方法。

第一种:在 Word 里随便新建一个文档,点功能区 File 选项卡,再点左侧的 Info 选项卡,再点 Properties 下来列表,点 Advanced Properties ,在 Summary 选项卡选中 Save Thumbnails for All Words Documents 复选框,点 OK 。

第二种:在 Word 里按 F12 ,在 Save As 对话框里选中 Save Thumbnail 复选框,然后保存。
>异步方法中根本没办法使用锁, 顶多用用信号量 Semaphore 来代替锁.
>貌似也没法仅对非异步代码进行加锁, 因为同步异步代码是混杂在一块的, 没法单独对非异步代码进行加锁.

规则是 lock 里面不可以有 await (可以实现,但是几乎总是错误的,因此语言层面拒绝这样做),在 async 方法中 lock 是完全 OK 的。

ConcurrentDictionary 已经确保每次访问它的成员都是原子的,然而这不代表对它的访问逻辑就已经线程安全,比如一段代码里连续访问它的成员两次,那么在中途其他线程可能已经修改过了这个字典。说这点是预防针,楼主在 #14 提到这是为了确保 Device 存在 devices 里面的引用安全。

要保证每个 Device 实例线程安全,最简单的思路是细粒度,比如操作每个 device 的时候 lock 之。如果操作过程需要异步,那么我想象中楼主说有多个线程查看 devices 并做一些事,意思是如果 A 线程处理了 device1 则 B 线程应该跳过并处理 device2 ,这种情况下因为 device 被占用时无需等待,所以可以用 interlocked operation 实现:

1. 在 device 上加上一个 int 字段 InUse ,表示目前是否在处理它,初始化为 0 。
2. 要访问一个 device ,先用 Interlocked.Exchange 查看 InUse 并设置为 1 ,如果 InUse 之前也是 1 ,则跳过。
3. 否则 InUse 之前是 0 并且被原子设置为 1 ,此时当前方法认为自己接管该 device 并开始异步硬件 API 操作,在 await 结束、处理完 device 后,重新 Exchange 把 InUse 还原为 0 。
输入给系统还是那个(安装)程序其实区别不大,因为最终效果包括(安装)程序以高权限运行。通常来说一旦一个程序以高权限运行一次,它就可以固化这一权力,比如把自己变成高权限自启动服务,甚至修改系统。因此纠结这个问题在主流的桌面系统安全模型下意义不大,必须首先信任(安装)程序才可以(向系统)输入密码。

主要的担忧应该是:如何识别输入密码对话框是某个特定程序(自己或者通过系统)发起的?假设有一个恶意程序反复检查是否有安装程序将要提权,发现时率先显示假的凭据窗口,则输入密码会导致安全问题。

在受限用户下输入密码提权是很难确保安全的,即使考虑 Windows 的“要求输入凭据之前按 Ctrl+Alt+Delete”,也需要配合公钥体系才能较好解决这个问题。恶意程序可以率先发起提权请求,于是用户按了 CAD 之后再输入密码,虽然密码不能被恶意程序读取,但还是会被恶意程序截获权限。公钥体系可以确保提权对话框提示目标程序的签名,因而避免一切未经根证书间接信任的恶意程序。

标准操作是使用快速用户切换,完全切换到已经是高权限的环境下去运行受信任的(安装)程序。登录之前,可以先按 CAD 确保是系统的登录对话框而不是别的程序假冒的。
@drymonfidelia #5
@zanjie1999 #6

不算,因为开源包括任意使用的自由,对比案例是 JSON 初版要求“不得用于邪恶之事”,以及 996 ICU 协议要求“压榨工人的资本家不能使用”,以及 Meta 的 Llama 有奇怪的商业使用限制,都属于非开源且非自由。开源包括在除了对自由的保护的限制外无限制使用代码的自由,所以禁止受权人在另一软件里使用 50% 代码也属于非开源且非自由。

软件名字是商标的问题,不是版权(软件许可)的问题,所以要求改名是 OK 的。

“开源软件”“自由软件”是 OSI 和 FSF 定义的,除了 FSF 几乎没人会谴责非自由软件,没有必要非沾上这俩词。同时,我觉得使用这两个词的时候也应该力求准确。结论就是:可以自己写一个协议作出那些要求,不应该称之为开源,其他人会根据他们对协议的接受程度选择使用或者不使用、如何使用这些软件。
280 天前
回复了 dtla 创建的主题 程序员 一道 Java 八股,检测 AI 智商
How do you deal with the error?
How do you deal with error?
How do you deal with the Error?
How do you deal with Error?

四句话意思不同:1 的意思是“如何处理那个错误”; 2 是“如何处理错误”,但 2 听起来不悦耳,应该用复数 errors 或者加不定冠词 an ; 3 的意思是“如何处理那个特定的 Error (对象或者某个子类)”; 4 的意思是“如何处理 Error (一般地,该类和子类和对象)”。在 Error 上可以用复数,3 的意思会变成特定的几个 Error/它的子类/对象,4 的意思无变化。

4 对应楼主希望提问的八股问题,不需要冠词是因为 Error 是所指的名字(等同于 John Doe 不需要加冠词)。1 、3 单独作为一句话出现的时候是无意义的,因为没有上下文表明是哪个错误/Error 。

在口语里面无法区分 Error 和 error ,所以需要额外说明,例如 the Error class 或者 programming errors 。即使是在 Java 的语境里,在没有其他的上下文时,发音 error 指 Error (类)还是(一般意义的)错误依然是不明确的。
赞,不过没有许可协议的仓库包含的代码不是开源的,请参考 https://choosealicense.com/ 并给你的仓库选择一个合适的协议(如果你希望它是开源的话)
是 Win32 禁止使用 AUX 等 DOS 设备名作为文件名,另外这个从 MS-DOS 时代就有了。关于为什么加任意扩展名、在任意目录都不行,参考 https://devblogs.microsoft.com/oldnewthing/20031022-00/?p=42073
286 天前
回复了 journalist 创建的主题 Windows Windows 缩略图和图片查看器的性能问题
用时间排序的问题可能是 Windows 想用 JPEG 文件里的元数据的时间排序,而不是文件系统的时间,于是会导致大量读盘并提取元数据。

“自带的图片查看器”是指“照片”还是 Windows 7 风格的“照片查看器”?我的经验是前者慢,后者速度还可以,但后者似乎是有预加载下一张功能的,但 webp 和 heic 可能显示效果错误。“预览分辨率”是指什么,是 Alt+P 打开的“预览窗格”里图片的大小吗?对于 JPEG 后者实际上是缩略图而不是预览,不能调整;可以尝试安装带有 IPreviewHandler 的程序。
本地 *nix Bash 上运行 cat 并把 stdout 作为 export 的参数,只需要 export $(cat blah)"。让远程 *nix Bash 运行 cat 之后把 stdout 当作远程计算机上的 export 的参数,直接

ssh user@remote "export $(cat blah)"

就好,于是只要用 VBS 执行上面的命令。

另外 netsh 的效果应该是长期的,所以单独运行就行了。要让 ssh 无交互登录,应该考虑使用密钥对验证,而不是密码。

楼主最开始的代码,如果打开 cmd.exe 后 5 秒后,焦点不在 cmd.exe ,那会失败,很不稳定。
290 天前
回复了 vituralfuture 创建的主题 Linux Linux 是如何隐藏`DIR`结构体定义的
举个例子:

// a.c
#include<malloc>
typedef struct a { int b; } a;
a *foo(void)
{
return (a *)malloc(sizeof(a));
}

编译 a.c 之后得到 a.obj ,删去 a.c

// b.c
typedef struct a a;
a *foo(void);
int main(void) { foo(); }

编译 b.c 并和 a.obj 链接。结果是 b 可以正常执行,在 b 产生的时候不需要 a.c 的存在。

现在的状况就是 opendir 在别人写的 a.c 里面,但别人没有提供 a.c 而是提供了 a.obj ,而别人提供的 .h 是上面 b.c 的前两行。
290 天前
回复了 vituralfuture 创建的主题 Linux Linux 是如何隐藏`DIR`结构体定义的
C 语言不要求所有 struct 都有定义,只要声明之后就可以使用指针。(当然用 sizeof 作用,或者定义该类型对象或数组,是需要该结构体的定义的。)所谓它是 opaque 就是说不提供定义。

从 C 的 ABI 的角度,结构体指针和 void 指针没啥区别。实现 opendir 的人可能知道 DIR 的定义,并分配好内存、填充好数据返回给调用者。
第一个问题就是你是否有足够的磁盘空间,如果有的话,完全可以先排完序再说。

假设你使用 64 位操作系统,先分别排序两个 csv ,这样做:

1. 把 x.csv 映射到虚拟内存。
2. 扫描一次,计算行数 n 。
3. 建立一个长度是 8n 字节的文件 x.dat ,映射到内存,把它看成长度是 n 的 uint64 数组 index 。
4. 扫描 x.csv ,在 index[i] 放置第 (i-1) 行开始的位移。
5. 对 index 的元素 z 按 x.csv 从 z 处提取出的字符串升序排序。
6. 保存 x-sorted.csv 。

上述操作需要 O(n log n) 的时间。

然后同时把 a.csv, a.dat, b.csv, b.dat 映射到虚拟内存,并用有序合并算法计算需要的三个结果,这需要 O(n) 的时间。

额外的磁盘空间复杂度是 O(n),具体来说,显然不会超过 20 GB 。
294 天前
回复了 CNM47589 创建的主题 Windows Windows 竟没有一个匹敌 downie 的下载软件
看了楼主的提问才发现 flvcd 已经停止服务了,一个时代的落幕。Downie 跟 IDM 是同价位的,另外就是下载视频和音轨之后可以用 ffmpeg 合成,下载可以用 youtube-dl 实现。
295 天前
回复了 jeesk 创建的主题 git git 版本管理中历史搜索
取决于你说的“提交的代码”是什么意思——严格来说每个 git commit 记住的是当时所有的文件,因此同一段代码通常会出现在数个 commits 里面,这大概不是楼主想要的。

如果是要搜索 diff patch text 里面的内容,可以用 git log 的 -G 。

如果你要找的代码片段存在于一个已知的 commit 里面,可以在那个 commit 上 git blame 那个代码文件,发现那段代码被 Git 认为最后一次修改的 commit 。
297 天前
回复了 KIMI360 创建的主题 PowerShell 求助:如何阻止 Powershell 生成 tmp 文件
你说的“不管是在 wt 或者 powershell 中”,后面一种是指 conhost.exe 里与 PowerShell 交互吗?卸载 Windows Terminal 会发生什么?
1 ... 4  5  6  7  8  9  10  11  12  13 ... 177  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3533 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 41ms · UTC 04:49 · PVG 12:49 · LAX 20:49 · JFK 23:49
Developed with CodeLauncher
♥ Do have faith in what you're doing.