1作者: Nerd_Nest7 天前原帖
我注意到微软已经停产了Surface Laptop Studio 2,并且没有明确的Studio 3计划。同时,他们正在推出新的Surface型号,这些型号搭载了Snapdragon X Plus和Intel Core Ultra芯片,强调人工智能能力和电池续航。 此外,微软越来越关注Copilot+ PC和Surface for Business,但我在想:这是否意味着微软正在转向不那么注重性能、以创作者为中心的硬件,比如Studio系列?还是说这只是微软在人工智能时代对“性能”定义的转变?
1作者: neilv7 天前原帖
在我的最佳创业想法经历了一些波折之后(ChatGPT,以及我的联合创始人分别决定退出这场竞争),我开始寻找那些拥有好点子并准备快速原型开发和筹款的商业联合创始人。 目前,有两位潜在的联合创始人正在知名商学院和类似项目中学习。 到目前为止,我对此的一些思考: * 好处——他们通过学校获得培训和指导,这在某种程度上有助于孵化创业项目。 * 坏处——即使你确信他们在毕业后想追求这个创业项目,学校仍然是他们的优先事项。在他们不投入时间的情况下,你要么处于等待状态,要么全职投入到项目建设中,而他们不会很快准备好开始筹款。此外,如果这一阶段对他们的MBA贡献更大而不是对共享创业项目,那么这种动态就显得有些不平衡或不匹配。 现在我感到一些个人的时间压力,我听说的一个想法是找一份临时工作,同时在晚上和周末继续创业。但这与我的工作方式不兼容,我全身心投入到我所在公司的项目和团队中。我会从整体上考虑一家公司,任何闲暇时间都是为了保持在这家公司上的进度。(这不仅仅是面试时的说辞,而是我似乎天生如此,无论好坏。) 因此,我决定在一家现有公司中找到合适的角色。包括我之前担任过的一个角色,在这个角色中,我的思维和运作方式更像是技术联合创始人,但从一开始,钱就神奇地出现在我的银行账户里。 我仍然很好奇,是否有人愿意分享与仍在商学院的联合创始人合作的经验和想法。 例如,是否总是依赖于拥有足够的个人时间(或兼职工作),直到双方都认为时机合适,能够快速执行和筹款? 再比如,有没有人遇到过这样的情况:学生需要至少走过创业的形式以满足MBA项目的要求,但毕业后却想做其他事情?
2作者: alyt7 天前原帖
嘿,HN, 对于不熟悉的人:你可以使用 `#region My Region` 和 `#endregion` 注释将代码组织成可折叠的“区域”。 在构建这个扩展之前,我通常会把区域作为最后的选择,例如用于大型测试文件或不值得进一步拆分的类,或者根本无法拆分的代码。虽然它们在一定程度上有帮助,但由于缺乏工具支持,使用起来相当乏味。因此,我开发了 Region Helper,昨天发布的版本提供了: - 跳转/选择区域的命令和快捷键 - 模糊搜索(类似于“转到符号”,但针对区域) - “区域”树视图(交互式:点击导航,并自动高亮光标所在的活动区域) - “完整大纲”树视图:类似于内置的大纲,但包含区域(同样是交互式的) - 诊断:当有不匹配的 #region / #endregion 标记时,会出现蓝色波浪线警告 - 内置支持49种语言,可通过设置进行自定义 - 一个API,用于访问 Region Helper 的数据,以便开发者可以构建自己的区域扩展,而无需重新解析区域 - (新功能)展开/折叠所有树项的操作,并在会话间保持树项的折叠状态 即使在大型文件中,例如 TypeScript 的 ~50K LOC 的 `checker.ts`,它的性能也很出色。 如今,我个人更喜欢使用区域,并且在代码中更频繁地添加它们,因为它们在浏览文件时也充当了快速跳转点。当然,仍然很重要的是不要过度使用它们,但我发现它们并不像之前那样成为代码异味。 如果你特别好奇,可以查看 Region Helper 的源代码,看看我在构建这个扩展时使用区域的一些真实示例。 附言:如果你不知道,你的 VSCode 设置文件(例如 `settings.json`)是 JSONC 格式,并支持 `// #region` 和 `// #endregion` 标记。由于它们无法拆分成多个文件,区域是一种相当方便的组织方式。 欢迎分享你对区域的看法,以及你是否觉得它们有用,我总是很想听听别人的意见。
1作者: pgjones7 天前原帖
SQL-tString 是一个 SQL 构建器,利用最近通过的 PEP-750 中的 t-strings 来构建 SQL 查询。例如: ```python from sql_tstring import sql val = 2 query, values = sql(t"SELECT x FROM y WHERE x = {val}") assert query == "SELECT x FROM y WHERE x = ?" assert values == [2] db.execute(query, values) # 大多数数据库引擎支持这种用法 ``` 占位符 ? 可以防止 SQL 注入,但并非在所有地方都能使用。例如,列名不能作为占位符。如果尝试这样做,SQL-tString 将抛出错误: ```python col = "x" sql(t"SELECT {col} FROM y") # 抛出 ValueError ``` 要继续进行,您需要声明 col 的有效值是什么: ```python from sql_tstring import sql_context with sql_context(columns="x"): query, values = sql(t"SELECT {col} FROM y") assert query == "SELECT x FROM y" assert values == [] ``` 这样可以保护您免受 SQL 注入的攻击。 由于 t-strings 是格式字符串,您可以安全地格式化您希望作为变量传递的字面量: ```python text = "world" query, values = sql(t"SELECT x FROM y WHERE x LIKE '%{text}'") assert query == "SELECT x FROM y WHERE x LIKE ?" assert values == ["%world"] ``` 这在与 Absent 重写值一起使用时尤其有用。 SQL-tString 是一个 SQL 构建器,因此您可以使用特殊的 RewritingValues 在运行时修改和构建所需的查询。最好的例子是考虑一个查询,有时您想按列 a 搜索,有时按 b 搜索,有时两者都要: ```python def search( *, a: str | AbsentType = Absent, b: str | AbsentType = Absent ) -> tuple[str, list[str]]: return sql(t"SELECT x FROM y WHERE a = {a} AND b = {b}") assert search() == "SELECT x FROM y", [] assert search(a="hello") == "SELECT x FROM y WHERE a = ?", ["hello"] assert search(b="world") == "SELECT x FROM y WHERE b = ?", ["world"] assert search(a="hello", b="world") == ( "SELECT x FROM y WHERE a = ? AND b = ?", ["hello", "world"] ) ``` 具体来说,Absent(它是 RewritingValue.ABSENT 的别名)将移除它所在的表达式,如果移除后没有剩余的表达式,它还会移除该子句。 我包含的其他重写值处理了比较 NULL 的棘手情况,例如,以下代码是有效的,但可能不会按您预期的那样工作: ```python optional = None sql(t"SELECT x FROM y WHERE x = {optional}") ``` 相反,您可以使用 IsNull 来获得正确的结果: ```python from sql_tstring import IsNull optional = IsNull query, values = sql(t"SELECT x FROM y WHERE x = {optional}") assert query == "SELECT x FROM y WHERE x IS NULL" assert values == [] ``` 还有一个 IsNotNull 用于否定比较。 最后一个特性允许通过在现有的 t-string 中嵌套另一个 t-string 来构建复杂的查询: ```python inner = t"x = 'a'" query, _ = sql(t"SELECT x FROM y WHERE {inner}") assert query == "SELECT x FROM y WHERE x = 'a'" ``` 这个库可以在没有 Python 3.14 的 t-strings 的情况下使用,虽然有一些限制,您可以查看 [这里](https://github.com/pgjones/sql-tstring?tab=readme-ov-file#pre-python-314-usage)。我今年一直在这样做,欢迎您的想法和反馈。