V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  secondwtq  ›  全部回复第 36 页 / 共 123 页
回复总数  2453
1 ... 32  33  34  35  36  37  38  39  40  41 ... 123  
2021-08-30 01:54:03 +08:00
回复了 MiketsuSmasher 创建的主题 问与答 Arch Linux 下使用 VMware 运行 Windows10 虚拟机如何提高性能
用 VMWare 比 KVM 有什么优势么 ...
2021-08-27 22:48:32 +08:00
回复了 James369 创建的主题 程序员 一个新的 CPU 架构会对上层产生多大的影响?
你指的是 ISA 还是 uArch ?
2021-08-27 22:46:40 +08:00
回复了 beginor 创建的主题 程序员 请问类似于 AnyDesk 的跨平台 UI 是怎么实现的?
AnyDesk 不知道,不过不用现成框架,自己封装 UI 的软件见过不少。

Adobe 系工具软件用的应该是自己的 UI 库,当然 Adobe 软件并不小,但是效果确实不错。特别提一句是因为我看过一个 Adobe 长者 Sean Parent 的”Better Code“系列 talk,感觉讲得很不错。其中有一次提到了他搞得一个叫做”property model“的东西,老实说这东西我现在搞不明白,但是他似乎 imply 了这东西在 Adobe 一些产品的 UI 中有应用。
Adobe 的竞品们也很有意思,比如 Affinity,也是支持 Win 和 Mac,好像也是用的自己的 UI 库(不一定是一个 PAL,可能是整个 UI 都是每个平台分别开发的)。而 Linux 一半 GUI 程序的妈 GTK+( 4.0 发布之后没 + 了)(虽然我发现我现在主要用的工具都是 Qt 写的),原名叫 GIMP Toolkit,是 GIMP 开发的副产品(尽管可能本站大多数人不认为 GIMP 构成 PS 的一个竞品,并且 GTK 现在在其他平台的表现也十分捉鸡)。

另外还有(自己做 UI 但是体积不小的)还有 Blender,Blender 应该是 DirectUI,自己还带了一堆特别魔幻的 skin,但是具体是怎么一个实现模式没研究过。说起来在最近的某次更新之前,Blender 的 CommonFile 操作是没有对话框的,直接在 main window 里面选文件,并且会把你当前的工作流打断。Dear imgui 这种草台班子 DirectUI 经常无视多窗口支持,不知道 Blender 是不是一样的情况。
Steam 也是 DirectUI,V 社直接把 Source 引擎里面的 UI 部分,叫做 VGUI 搬过来用了(游戏引擎大多都有自己的 in-house UI,好不好用和高不高效就两说了)。因为是 Source 的东西,所以你甚至可以找到开发文档(会找的话,更禁忌的东西也不是不能找到哦~),并且这东西有自己的 markup,就放在 Steam 目录下面,所以你可以自己给 Steam 换肤( Anyway.fm 听众狂喜)。当然周所众知 Steam 现在主要是 CEF,不过 Steam 有个 flag 可以直接强关 CEF,此时除了下载页面和 Steam 设置界面(游戏的 ”Properties“ 界面好像现在也是 CEF 了)之外,Steam 基本所有的功能都瘫痪了,吊诡的是,好友界面会 fallback 到 VGUI 版(理论上 overlay 应该也能用),另外还保留了一个轻量版的游戏列表,所以不需要喜加一(或者想控制下手)的时候还是可以当启动器用,不用开 CEF 省太多资源了。

一个本站接触比较少,但是可能是最相似的软件之一,REAPER DAW,开发者 Cockos 公司老板 Justin Frankel,这位老哥看起来很有 geek 风范。他之前做的公司叫 Nullsoft,做出过 Winamp 和 NSIS 。REAPER 既不是 FOSS 也不是 freeware,但是采用的分发方式很特别,并且除了 Win 和 Mac 之外,还支持 Linux,并且官网还特别提到 Win 在 Wine 上跑的效果也很不错。我把 tar 包下来看了一眼,Linux 版的 executable 大概不到 10M 。
虽然 REAPER 不开源,但是他们开源了一个 C++ 库叫 WDL,大概是 REAPER 用的一些基础库,其中的 LICE 模块可以做矢量绘图,而 virtwnd 模块声称可以“building of dynamic, complex UIs within OS hosted windows”。虽然我看了两眼代码感觉挺草台班子的,不知道 REAPER 用的是不是这玩意。

本站接触比较多的就是 Sublime Text,这东西只知道是自己写的 UI,细节暂时未知。
另外我之前别的主题里提过,Pascal 系的 Lazarus 现在可以跨平台,Beyond Compare 就是这么在 Linux 下面跑起来的,这东西和上面 Direct UI 不一样,应该是 native 的。当然这货在 Linux 下貌似会依赖 Qt 之类的,不过处理 GUI 的复杂性本来也不是 Lazarus 的工作,而且谁家 Linux 跑 GUI 应用不装他几十个框架啊 ... Windows 下大小和 VCL 一个级别,还是很美丽的。

还有虽然说 Electron 和类 Electron 框架一直被人诟病,但是一直有人试图继续进行改进,做 trimmed down 版本的 Electron 。比如有个叫 Ultralight 的,几年前叫 Awesomium,虽然用的应该是 WebKit 内核,现在貌似 80M 左右大小,而我 VSCode 用的这个 Electron,和 Steam 的 CEF 均大于 130M,这东西主要客户之一是游戏,这个大小在游戏中还能接受。其实说到 Web 和游戏,在游戏里面用 Web 界面的想法很早就有了,我知道 Awesomium 还是从 Overgrowth 这篇十几年前的博客来的 http://blog.wolfire.com/2009/07/a-webkit-primer-part-1,那时候 WebKit 估计也要瘦上一个数量级。再往前的时代,Flash 很火,SAGE 引擎用的所谓 APT,根据一些折腾过的人的描述,就是 Flash 技术,当时 Flash 还是 Macromedia 家的,直到 CC3 发布之后才改姓 Adobe 。
更小的是 Miniblink,声称“小巧”,大概 40M 吧。另一种思路是不用现成浏览器引擎,自己重新搞一个类似的,比如 libRocket,稍微复杂一点的有 sciter,上面有人提过了。虽然我还是觉得拿文档模型做应用不太合适,不如 WPF,Qt Quick 之类的。
除了大而全的 Qt 之类的库之外,也有一些小点的库,比如 FLTK,这货跟 GTK 貌似一个年纪,但是看样子可能永远地停留在了那个时代 ...
2021-08-27 20:01:23 +08:00
回复了 wangyzj 创建的主题 Windows windows 的 C 盘现在到底分多大合适?
我之前的看法也是一块硬盘只分一个区,不过最近我改变看法了。

比较实际的原因是因为穷,买不起盘,所以手头最好的 SSD 一般是 240-256G 级别的,正好做系统盘,其他大容量廉价 SSD,HDD 和 NAS 来存数据。这样多分区就是不可避免的一件事情,与其追求单一分区的“优雅”,不如学会适应现状。
另外用了 ZFS,比较灵活,分区随意很多,不像以前什么 fdisk 这么“仪式感”
https://www.akitio.com/images/information-center/fdisk_2.gif

另一个比较扯淡的原因是,都知道 Windows 磁盘 IO 慢,但好像没人研究过为什么慢,一般讨论到这种问题,既定的标准流程是直接甩锅微软垃圾。我有一天闲得蛋疼去搜了一下,在 WSL 的反馈里找到了微软官方的回应: https://github.com/Microsoft/WSL/issues/873#issuecomment-425272829

他提到 Windows IO 慢的一大原因是 Windows 的一些架构设计选择。比如 Windows 允许程序给 IO 操作挂 filter 来实现各种魔法,而 filter 本身也可能有 IO,后来这成了 dssq,IO 也就越来越慢了。所以:

> if you have a D: drive or partition, I recommend using that instead, since it likely has fewer filters attached

那么如果你没有 D: 分区的话就很糟糕了
2021-08-27 19:32:10 +08:00
回复了 niubee1 创建的主题 程序员 最新感悟,全栈开发不如共栈开发,省时省力效率高
这问题本来就不存在 ... 但是现在平台喜欢我即世界,喜欢钦定开发语言,才搞出这么多幺蛾子。
这一波的始作俑者应该算在 Web 头上,JavaScript 限得死死的,直到 WebAssembly 才有点起色。
但是其他人脸上也不怎么好看就是了,Apple 以前还有心搞兼容,现在好像没啥兴趣都给自家标准让路了。UNIX 和 C 本来就是双生子。Web 造成的遗毒,本来也不是 Web 的错,要不是各家平台这么乱,第三方又怎么会选择 Web 呢。

倒是 Windows 很有意思,官方策略就是多语言共存,VS 至今都为罗(B)马(A)尼(S)亚(I)语(C)留着一份。(另外微软的 PL Research 也很出彩)当然代价就是随机用三个拉丁字母组合,就有相当的概率 hit 到一个微软的开发框架 :)
2021-08-22 22:03:11 +08:00
回复了 nnd 创建的主题 Go 编程语言 go 程序员, 第二门语言选择 c++ 还是 rust?
如果你非要在这俩中间挑一个的话,建议先 C++,不必“精通”,至少了解了解。主要是你不知道 C++ 哪里做得不好,就不能理解 Rust 哪里做得好(以及他们俩哪里都做得不好 :) )。所以 C++ 是 Rust 的 prerequisite 。

如果你不想学这俩的话,后端不知道,但 Python 和前端都值得继续学。
2021-08-22 21:57:11 +08:00
回复了 nowheretoseek 创建的主题 问与答 误用了 git commit -amend, git log 中的日期显示错误
> 发现 commit 列表显示的最近一次的日期是刚才 vim 修改 message 的时间,即它跟 git log 中 Date 行显示的并不一样。

根据发帖时间推算,你这个 “提交时间:2021 年 8 月 22 日 15:05:21” 对应的应该是你说的“刚才 vim 修改 message 的时间”,而“git log 中 Date 行”显示的应该是“日期:2021 年 8 月 20 日 23:05:02”,即“上一次的提交日期”。
Git 每个 commit 有两个日期,一个 AuthorDate,一个 CommitDate,git log 默认只显示 AuthorDate,用 git log --pretty=fuller 可以全部显示。你可能把这两个搞混了。

我没用过 git commit -c,但是 man 中对 git commit -c 的描述是:
> -C <commit>, --reuse-message=<commit>
> Take an existing commit object, and reuse the log message and the authorship information (including the timestamp) when creating the commit.
> -c <commit>, --reedit-message=<commit>
> Like -C, but with -c the editor is invoked, so that the user can further edit the commit message.
不知道你是怎么查到的,这个意思应该是你运行 git commit -c --amend 时,其实改的依然是 HEAD,只不过把 HEAD~1 的部分元数据搬了过来。

Git 和区块链一样都是类 Merkle Tree,也就是一个 commit 会递归地依赖于之前的所有 commit 。要想在 branch tip 之后的地方动刀子就必须重新生成中间的所有 commit ( commit message,author 和 commit 的元数据都会被放在一起做 hash )。所以直接改后面的 commit message 应该不太靠谱。
2021-08-22 21:38:49 +08:00
回复了 byzf 创建的主题 程序员 闲来无事,求推荐点三个月左右能入门的兴趣爱好、技术方向
玩 CG 啊,就 Blender 就行,最近发展不错,不用花钱。

你看思聪也 Blender: https://zhuanlan.zhihu.com/p/399450992
斯诺登也 Blender: https://twitter.com/snowden/status/1416774441539936259
再不 Blender 就被社会淘汰了
2021-08-22 21:07:07 +08:00
回复了 pocarisweat 创建的主题 程序员 看到「学什么新语言」这个问题,推荐这本书
楼主确实有点来错地方的意思。
和“编程语言”打交道的人并不全是一样的,至少可以分成两类非常不同的人:
一种人接触编程语言是为了解决某个和编程语言没太大关系的问题。
另一种人接触编程语言就是为了折腾编程语言。

至于这两种人的事情对另一种人有什么好处,这个现在还很不好说。但是可以肯定的是当两种人碰到一起讨论编程语言时必然会出现各种鸡同鸭讲的状况。目前看来本站前者居多。
2021-08-22 20:39:56 +08:00
回复了 nannanziyu 创建的主题 C++ Windows 一分钟使用 C++ 发送 Http 请求
这标题起得太俗了,建议改成“三句 C++ 让 Windows 给我发送 HTTP 请求”
2021-08-18 01:47:43 +08:00
回复了 passer9527 创建的主题 问与答 一个疑惑:为啥很多初创公司不选择最主流的技术栈?
没在“初创公司”呆过(虽然前公司自称“永远都是 startup”),更没在“不选择最主流的技术栈”的“初创公司”呆过。不过个人网上的观察:

* 有些“不选择最主流的技术栈”的“初创公司”是真的相信他们选择的技术栈更适合他们的场景。至于到底是不是我不做评论。不如换个角度讲,楼主认为:Java SpringCloud,行。Go,不行。现在某公司认为:Go,行。Java SpringCloud,不行。凭什么楼主就一定是对的,某公司就一定是错的呢?或者凭什么某公司就一定是对的,楼主就一定是错的呢?为什么 Java SpringCloud 一定没有坑,Go 一定坑很多呢?或者为什么 Go 一定没有坑,Java SpringCloud 一定坑很多呢?当然楼主可能会说:Java SpringCloud 用的人多,“成熟”,“主流”,但是楼主不知道有句话讲:“真理往往掌握在少数人手中”么?这个逻辑左右都说得通。
楼主凭什么居高临下评价 Go ?楼主是 Gopher 么?楼主用过 Go 么? Golang,不吃楼主这一套!
什么楼主用过 Go ?那么楼主有没有在某公司用过 Go ?有没有亲自体验过某公司的场景? Golang,还是不吃楼主这一套!
正经地说,有很多试图解释技术和开发效率之间关系的尝试(包括一些量化的思路),但是目前没有哪个真的能服众,楼主只是相信了其中的一个流派,就是“最主流的一定是最好的”而已。我的观点,这个问题暂时还没有绝对的对与错。

* 当然还有个人的 preference 问题。如果如同第一点一样,排除了对技术的优劣判断之后,个人偏好就会成为很大的因素。云风的公司就用 Lua 硬撸 3D 引擎,Yaron Minsky 的公司就用 OCaml 写交易系统。当然他们都能拉出一大堆理由来 justify 他们的选择,但是按第一点的意思,别人不一定认。所以最理性的解释是“有个人偏好是非常正常的事情”。或者也可以用统计学解释,有 N 个技术,M 个人,每个人选一个技术,既然没有绝对的标准谁好谁坏,那就是某种随机选择,样本足够大的话不可能全选择同一个技术。

* 有些公司不仅仅是单纯选择技术栈,选择一个技术栈,同样也选择了这个技术栈背后的 implication 。一个技术栈往往 imply 了相当多的东西,比如像隔壁帖子 v2ex.com/t/795881 有人说“Java 背后的群体代表的就是不思进取,故步自封的保守派”,就是这个意思。这并不是说每个 Java 用户都是“不思进取,故步自封的保守派”,也不是说“不思进取,故步自封的保守派”该被消灭,而是如果一个 CTO 不希望构建“不思进取,故步自封的保守”的文化的话,那么避开 Java 是一个可能有效的 heuristic 。上面还有人说可以过滤培训班,应该也有这个效果,虽然我之前没想到。在有些技术的圈子里偶尔会碰到什么“用这个技术的开发效率倍儿高”“用这个技术的人都很聪明”之类的话,道理跟什么“在简历上留 QQ 邮箱的负面效果”是一样的,heuristic 而已。虽然我看大多数都逃不过草台班子定律。

* 用新技术,可以成为招聘广告的亮点!亮点!楼主说“从本站的各种招聘帖子,以前别的地方的招聘帖子发现,很多 ...”,这个“很多”可能并不真的是“很大一部分”,而只是“在楼主的视野里格外显眼”而已,因为写的技术“非主流”,所以留下的印象更深。这个道理是这样的:根据草台班子理论,大多数人的工作是比较无聊的,为了排解这种无聊,除了刷 V 站之外,使用不一样的技术(倒不一定是“新技术”,但是这种情况下新技术更受欢迎)也是一种方案(虽然都不解决根本问题)。有使用新技术的机会,那自然会成为亮点。
另外,开发者和 CTO 一样会有个人偏好,CTO 表达偏好的方式是开个用这个技术的公司,而普通开发者表达偏好的方式则是选择用这个技术的公司。依然是统计学,“非主流”技术用的人少,用的公司也少,只要不是非主流到样本实在太小的程度,没有理由说非主流技术比主流技术招人更难。

我再尝试把“样本实在太小”这个 edge case 的坑填上:我知道有一些公司用的是这类非主流技术(也许我现在公司也算?不过是大公司),这种情况可能会有另一个 buff:就是因为招聘者和求职者都难找,所以(理论上)会更加珍惜已有的机会——我实在想用某技术,但是实在找不到对应的工作,能有用这个技术的工作那简直就是奥丁下凡啊!别的我都不在乎,只要打败波兰,啊不,能用这个技术就算是成功了!
2021-08-17 23:39:11 +08:00
回复了 GKCY 创建的主题 C++ 请教大家一个 C++内存分配后对象初始化的问题
是,你得先分配内存,然后再调用构造函数,才算初始化完成。(参考“把大象放进冰箱里”的流程)

我认为你这个代码的问题:
> Key* keys = allocator.alloc(sizeof(key) * 10);

在于,allocator 只知道分配的内存块的大小,别的什么信息都不知道,所以虽然是个 C++ 的函数调用(当然也可能是个 C 函数指针),但是没法调用相应的构造函数。
要想方便地完成整个分配过程,就得让函数获得你分配的对象的类型信息,然后用这个类型 sizeof 就能得到大小信息。C++ 里面传递类型信息是使用 template 。就是像 #8 那样写一个 wrapper (当然 #8 的代码有一点问题)。

你也可以直接重载 new 和 delete operator,这样编译器会自动帮你生成调 ctor 的代码,什么 std::make_unique 之类的标准库功能默认也会用你的 allocator 。对于“偏 C 语言”的项目应该是比较简单的方法。或者把你这个 allocator 对象包装成一个符合 C++ 标准 Allocator 的对象,也可以达到相同效果。不过这样就不够“C with Classes”了~

Anyway,思路都是一样的。对于“丑陋”的代码,通用的手段就是抽象和封装,最常用也最通用的工具就是函数。C++ 相对于 C 的最大好处就是提供了更强的抽象能力,在这个问题里就是你可以通过一个函数来封装你觉得很“丑陋”的初始化循环。
2021-08-17 22:57:12 +08:00
回复了 perpetually 创建的主题 生活 看了几个迷茫贴,我陷入了沉思
标准答案不是“定体问”么
好像楼主说的也差不多
2021-08-17 22:51:13 +08:00
回复了 DopaminePlz 创建的主题 编程 不懂就问:实现这些功能需要学习哪些知识?
这个我来做可能会用垃圾佬的思路来做

比如我的服务器的登录功能,目前是使用 nginx 配置 HTTP Basic Authentication + HTTPS 实现的,因为需求简单(只有我一个人用),所以用着感觉还蛮好 :)

执行命令可以用大便系统 nginx-extras 包里面带的 Lua 和 Perl 之类的脚本。或者 Python 标准库 http.server 模块简单糊一个。反正只要提供 HTTP 服务肯定得装 nginx,Python 也肯定有。

前端简单写个 HTML,CSS 都不用,框架也不用。数据 fetch 回来直接 document.getElementById("xxx").innerText =

日志就不太清楚了。

主要是因为懒,懒得写各种 boilerplate,写完了还不一定安全。
2021-08-17 22:16:06 +08:00
回复了 lcj2class 创建的主题 分享发现 EmacsTalk 007. 编辑器专家的 Emacs 世界
看到“DelphiNew”这个名字就知道这老哥有年头了
2021-08-17 22:08:34 +08:00
回复了 James369 创建的主题 程序员 有没有比“正则表达式” 更简单直观的匹配技术?
Parser Combinator
不仅简单,还不比正则弱。
2021-08-17 21:54:33 +08:00
回复了 Cbdy 创建的主题 Java Why do so many people become Java haters?
@CRVV
> 比如 checked exception,要在 finally 里面写一个 try catch 来包住 file.close,结果是非常多层的嵌套。当然现在已经有新的写法了。
checked exception 确实是 Java 比较奇怪的设定。但是我的体验是每种技术都有自己奇怪的角落。你后面提到 C++,C++ 奇怪的东西不少么?

> 比如 Java 很喜欢标榜自己没有指针,还造了个词“引用”。但 Java 的引用是 C++ 的指针,C++ 的引用在 Java 里面不存在。这是让人很不爽的用词方式。
我觉得如果一个东西在汉语里面叫“冷烤馒头”,在英语里面不一定要叫"Cold roasted bread"或者“LKMT”。
维基百科上有一张图: https://en.wikipedia.org/wiki/File:Germany_Name_European_Languages.svg 画的是“德国” (.de) 在不同欧洲语言中如何称呼,日耳曼也是德国,德意志也是德国,阿勒曼尼也是德国。
如果 Java 的设计者认为“引用”的名字更合适,那自然可以用“引用”这个名字,更何况两者不是一个东西,比如 Java 不支持 pointer arithmetic 。

> 中文的 Java 资料里面类似的情况更多,比如“内存模型”,中文说的内存模型和 wikipedia 的 memory model 说的是完全不相关的两件事。
Java 中文的内存模型就是 JMM (Java Memory Model) 啊,我看 wikipedia 的 Memory model 也提到了 JMM,没感觉有啥不相关的。

> 比如有个 Azul C4 GC,号称 pauseless,但如果你去翻它一篇 pdf 的像论文一样的东西,里面会说其实有那么大概 1 ms 的 pause,但这种重要信息从来不会出现在好找的地方,所有地方都说 pauseless 。我从来没在其它语言上见过这种销售话术。

我倒是觉得这个很常见。
比如 Rust 声称自己 Empowering EVERYONE to build reliable and efficient software,但是觉得 Rust 门槛高的应该不在少数。
Rust 声称自己 guarantee memory-safety and thread-safety,然而 Rust 至今连个像样的 spec 都没有。
另外你的 C4 GC 是第三方 Azul 做的,并不代表官方态度,上面 Rust 的 claim 是官方的,要找非官方的更多。还是 Rust 的例子:
最近 GitHub 上火了个项目 https://github.com/mTvare6/hello-world.rs ,这项目很明显是揶揄 Rust,其实应该主要是一些 Rust 项目的“销售话术”的。
实际上就算不涉及商业利益,你到任何一个圈子里面,看到最多的都是对其主题的吹捧。比如我看过两眼 BSD 圈子,都是吹 BSD 如何如何优雅啊,这个好那个也好啊,最喜欢跟 Linux 比较,然后说 Linux 虽然很多人用,但是就是不如 BSD——这种现象的部分原因应该是 BSD 的阳光下的地盘(划掉)生存空间被 Linux 严重挤压。不过你到 Linux 圈子里面,也能看到 Linux 比 Windows 好的大量吹捧——大概也是类似的原因。这个应该也能部分解释主题所说现象。

其实我觉得最牛逼的“销售话术”还是 Haskell 的: Avoid success at all costs. (顺便,Haskell 圈子里面吹捧一点不少)
2021-08-17 21:02:18 +08:00
回复了 littlerainer 创建的主题 问与答 计算机体系结构与芯片的联系?
我最近在看一个 Arch 的公开课,楼主可以翻翻内容:
https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkXmi5CxxI7b3JCL1TWybTDtKq
2021-08-17 20:57:26 +08:00
回复了 LokiSharp 创建的主题 生活 看了算账的兄弟的帖子,感觉有点迷茫了
我主要是好奇
> 而且我最近开始有了健身和护肤的开销
健身就算了,是多高端的护肤能成为 non-trivial 的开销
2021-08-17 20:52:40 +08:00
回复了 LxExExl 创建的主题 Steam 迫于有了台式机,有啥休闲大作游戏吗?
欧陆风云 4 。
买完 DLC 就不用氪金了。
只需要点点鼠标,随时可以暂停,没有星际那种复杂的微操。
引擎非常先进,能体现 CPU 单核性能,单核性能!!!! 111

(捡起来玩容易,能不能放下就两说了)
1 ... 32  33  34  35  36  37  38  39  40  41 ... 123  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 64ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
Developed with CodeLauncher
♥ Do have faith in what you're doing.