Sunday, September 26, 2021

V2EX - 技术

V2EX - 技术


两份一模一样的文件,在两台一样的服务器上被压缩,压缩后的文件校验值会一样吗

Posted: 26 Sep 2021 06:16 AM PDT

如题 假设有两台一模一样的服务器,但是不在一个省,采用同样的参数不同时间压缩一份一模一样的文件,出来的压缩文件校验值会一样吗

看了 Django4.0 发行说明 感觉有点失望

Posted: 26 Sep 2021 06:13 AM PDT

Java 加一个字段很难吗?

Posted: 26 Sep 2021 06:12 AM PDT

传输数据 加一个字段非常麻烦, 甚至同一种结构,从 xml 换成 json 返回,就会改动非常大?

难道 java 就没用一种通用的 map 结构表示 字典吗? 加个东西总是有很大抵触?

例如 一个 map

{    .... } 

在使用的时候 按需取值
var a = map['a']
var b = map['b']
或者从页面 A 直接传一个 map,A 页面不需要关注到底 map 有什么(服务器返回) 到 B 页面, B 页面按需取用。

有加班处理个保法整改的老哥吗?你们方案是怎样的?

Posted: 26 Sep 2021 06:05 AM PDT

法务要求我们提供一个关闭选项,用户关闭后不能收集任何个人信息。

看似简单的需求,可是业务里面各种埋点,各种日志,还有各种依赖用户画像的功能,要改完简直相当于项目重构。

因此,我产生了一个大胆的想法

<button @click="alert(关闭成功)">禁用信息收集</button> 

我猜一定有人这么干吧🐶🐶用户又不可能上服务器检查,也不可能 review 我代码

弱鸡后端求问什么是前端工程化?

Posted: 26 Sep 2021 05:58 AM PDT

layui 官网终于还是要下线,对于 layui 还是比较有感情的,让我这个弱鸡后端也能做出可用相对美观的前端页面,奈何在时代的洪流下最终还是要隐退了。

求问一下前端大佬,到底什么是前端工程化?

除了考研,在职人员如何切换技术方向呢

Posted: 26 Sep 2021 05:06 AM PDT

尤其是由易到难的切换,比如从 web 业务开发换方向到 ai 、云计算等领域

3 年前端的求助

Posted: 26 Sep 2021 04:44 AM PDT

文章目的: 想要找一个前端经验丰富的人,解决我当前对于自己职业规划的问题。

个人基本情况: 前端开发。三年前端经验。vue 和 react 都熟悉使用,在杭州非一线大厂上班。如需详细了解可发简历。

最纠结问题: 目前个人能力可能与对应年份的一线大厂的技术水平具有一定差距,其余的普通的厂暂时也不考虑。面试准备的题目也有一段时间了,但是看得越多越迷茫,有种方向迷失的感觉,也不知道自己还缺什么要学习的。而且在 996 的工作时间中处理工作内容已经耗费过多精力,准备面试的效率在我个人身上来说比较差。在考虑要不要裸辞进行复习面试,或者报一个线上培训班之类的督促自己再沉淀半年。

解决方案: 想要找一个师傅,或者我付费找具有相关经验的人进行指导。大致进行一至两次沟通指导,大致指出一下方向就可以了。

wx:c2h1YWlkYTAwMg==

在 vue2 或 js 中,有一个 json 对象,赋值后数据却变了

Posted: 26 Sep 2021 04:32 AM PDT

请教个问题

在 vue2 中,有一个 json 对象,赋值后数据却变了,哪位高人熟手给指点下啥原因,拜谢!

问题代码 test() {         const data ='{     "code":200,     "message":"获取成功",     "data":{         "list":[             {                 "id":4,                 "parent_id":0,                 "title":"WHWHWHWHWHWHWHWH",                 "xxx_pri":"0.95",                 "xxx_pri":"0.98",                 "state":1             },         ],         "count":"1"     } }'         const d = JSON.parse(data)         console.log(d.data.list)    //此时 list[0].state=1                 this.type_list = d.data.list         console.log(this.type_list) //此时 list[0].state=0,       }, 

如在赋值之前,加入语句,强制 int 转 string 则可以。

  //加入转换  d.data.list.forEach((element) => {           element.state = element.state.toString()  })   

百思不得其解,哪位给指点一二

�� React Suite 5 发布了

Posted: 26 Sep 2021 04:23 AM PDT

距离 v4 的第一个版本已经有接近两年的时间了,在这段时间里 v4 一共迭代了 30 多个版本,新增了许多特性。有越来越多的开发者开始使用 React Suite,并且参与功能开发与改进。还有一直对我们提出宝贵建议的开发者们,我们再次表示感谢。希望 React Suite 能够陪伴您的产品持续成长,同时也希望能够服务到更多的开发者。

React Suite 5 提升了组件可访问性以及提供了更丰富可定制化的组件。以下将详细介绍新增特性以及如何从 4.x 升级到 5.0

主要功能 ✨

提升可访问(Accessibility)

我们的希望可以让更多的用户在 React Suite 开发的产品上无障碍的使用。我们会在键盘操作、读屏设备等多个场景去改善 React Suite 提供的每一个组件。

无障碍设计

React Suite 遵循 WAI-ARIA 标准,对所有组件进行了重构,均具有开箱即用的适当属性和键盘交互功能。

新增一套高对比度主题

在 React Suite v4 我们参照 《 Web Content Accessibility Guidelines (WCAG) 》标准对颜色对比度的要求,对组件做了很大的改进,可以满足大多数用户。 我们还是希望在此基础上进行提升,并照顾到一小部分在视力上存在障碍的人群。 目前 React Suite 官方一共提供了 3 套主题 (light 、dark 、high-contrast)

采用 SVG Icon 代替 Icon font

Icon font 存在存在一些渲染上问题,导致图标模糊,需要载入字体文件,内容区域闪烁等问题。 为了更好的可访问性(Accessibility),我们决定优先采用 SVG Icon 。 并且能够友好的兼容第三方的图标资源。

import GearIcon from "@rsuite/icons/Gear";  render(<GearIcon />);  // output <svg>   <path d="M11.967 ..."></path>   <path d="M8 10a2 2 0 10.001-3.999A2 2 0 008 10zm0 1a3 3 0 110-6 3 3 0 010 6z"></path> </svg>; 

支持 CSS 变量

当前主流的浏览器都已经支持 CSS 变量,我们计划提供一套组件 CSS 变量配置,可以更方便的做主题自定义,主题切换。

采用函数组件重构

我们采用函数组件重构大部分的组件,采用 React Hooks 所带来的新特性,提升开发体验。

按需加载

在 v4 中导入组件的时候需要区分是 cjs 还是 esm 。 在 v5 中这是自动的。

// v4: cjs import Button from "rsuite/lib/Button"; // v4: esm import Button from "rsuite/es/Button";  // v5 import Button from "rsuite/Button"; 

对 Form 表单的改进

  • 改进 Form 在纯文本视图的效果。
  • 对组件进行重命名。
`FormGroup` 重命名为 `Form.Group` `FormControl` 重命名为 `Form.Control` `ControlLabel` 重命名为 `Form.ControlLabel` `ErrorMessage` 重命名为 `Form.ErrorMessage` `HelpBlock` 重命名为 `Form.HelpText` 
  • 表单校验支持对象结构。
const model = SchemaModel({   username: StringType().isRequired("Username required"),   tags: ArrayType().of(StringType("The tag should be a string").isRequired()),   role: ObjectType.shape({     name: StringType().isRequired("Name required"),     permissions: ArrayType().isRequired("Permissions required"),   }), });  const checkResult = model.check({   username: "foobar",   tags: ["Sports", "Games", 10],   role: { name: "administrator" }, });  console.log(checkResult); 

输出的数据结构:

{   username: { hasError: false },   tags: {     hasError: true,     array: [       { hasError: false },       { hasError: false },       { hasError: true, errorMessage: 'The tag should be a string' }     ]   },   role: {     hasError: true,     object: {       name: { hasError: false },       permissions: { hasError: true, errorMessage: 'Permissions required' }     }   } }; 

详细的使用教程请阅读: 表单校验Schema

Avatar 新增支持 srcSet 、sizes 、imgProps 属性

  • srcSet: <img> 元素的 srcSet 属性。 使用此属性进行响应式图像显示。
  • sizes: <img> 元素的 sizes 属性。
  • imgProps: 如果该组件用于显示图像,则应用于 <img> 元素的属性。

Slider 和 RangeSlider 支持 onChangeCommitted

onChangeCommittedonChange 不同的点在于,onChange 是每一次值的改变都会触发,而 onChangeCommitted 是在 mouseup 事件触发后并且值发生了改变而触发的的回调。

DatePicker 和 DateRangePicker 功能改进

  • DatePicker 与 DateRangePicker 支持键盘输入。 C392D1BC-AD67-4692-BAC0-A273A74DC564

  • DateRangePicker 之前只能选择日期,在 v5 中可以选择时间。

<DateRangePicker format="yyyy-MM-dd HH:mm:ss" /> 

Badge 支持 color 属性

color 属性设置徽标提示点样式

<Badge color="red">Red</Badge> <Badge color="orange">Orange</Badge> <Badge color="yellow">Yellow</Badge> <Badge color="green">Green</Badge> <Badge color="cyan">Cyan</Badge> <Badge color="blue">Blue</Badge> <Badge color="violet">Violet</Badge> <Badge color="red" /> <Badge color="orange" /> <Badge color="yellow" /> <Badge color="green" /> <Badge color="cyan" /> <Badge color="blue" /> <Badge color="violet" /> <Badge color="blue" content="99+" /> <Badge color="violet" content="NEW" /> 
895ED4F3-F258-4A98-B48A-857F964A0EA0

对 Table 的改进

  • 重构 Table

使用 react hooks 重构了 Table, 并改进了表格滚动时的性能。 废弃了 onDataUpdatedbodyRef 属性

对于一些要在表格内部渲染的组件,之前可以通过 bodyRef 获取表格的 body 容器。 现在我们可以通过 Tableref 直接获取容器。

// v4 const bodyRef = useRef(); return (   <>     <Table       bodyRef={(body) => {         bodyRef.current = body;       }}     />     <CheckPicker container={() => bodyRef.current} />   </> );  // v5 const ref = useRef(); return (   <>     <Table ref={ref} />     <CheckPicker container={() => ref.current.body} />   </> ); 
  • 支持 rowSpan 合并行

image

const data = [   {     city: "New Gust",     name: "Janis",     rowspan: 2,   },   {     city: "New Gust",     name: "Ernest Schuppe Anderson",   },   {     city: "Maria Junctions",     name: "Alessandra",     rowspan: 3,   },   {     city: "Maria Junctions",     name: "Margret",   },   {     city: "Maria Junctions",     name: "Emiliano",   }, ]; return (   <Table data={data}>     <Column       width={100}       verticalAlign="middle"       rowSpan={(rowData) => {         return rowData.rowspan;       }}     >       <HeaderCell>Name</HeaderCell>       <Cell dataKey="city" />     </Column>     <Column width={100}>       <HeaderCell />       <Cell dataKey="name" />     </Column>   </Table> ); 

新增 TagInput 组件

对 Input 的增强,支持输入标签,管理标签。

import TagInput from "rsuite/TagInput";  return (   <TagInput     defaultValue={["HTML", "CSS"]}     trigger={["Enter", "Space", "Comma"]}   /> ); 
TagInput

对 Carousel 的改进

<Carousel> 组件上支持 onSelect, onSlideEnd, onSlideStart 属性。

  • onSelect: 活动项更改时触发的回调
  • onSlideEnd: 幻灯片过渡结束时触发的回调
  • onSlideStart: 幻灯片过渡开始时触发的回调

从 v4 升级到 v5 🚀

接下来将为您提供指导,从而能够迅速的从 v4 升级到 v5 。

准备工作

  • React 升级到 16.8 以上版本。
  • 确保您当前的 rsuite 版本是 4.*, 否则请先迁移到 v4

运行 codemods

对于大型项目来说升级组件的过程往往是痛苦的,我们准备了 codemods 来简化您的迁移体验 。

使用说明

npx rsuite-codemod <transform> <path> [...options] 
  • transform - 转换的名称
  • path - 要转换的文件或目录。
  • 使用 --dry 选项进行试运行,并使用 --print 打印输出以进行比较。

不兼容的变更

不再对 IE 10 进行兼容支持

我们将在 v5 版本中不再支持 IE 10,如果您需要继续在 IE 10 浏览器上使用请继续使用 v4 版本。

- last 2 versions or > 1% or ie >= 10 + last 2 versions or > 1% and not ie <11 

采用 SVG Icon 代替 Icon font

使用 SVG Icon,使用前您需要安装 @rsuite/icons

npm i @rsuite/icons 
// for rsuite v4 import { Icon } from "rsuite";  return <Icon icon="gear" />;  // for rsuite v5 import GearIcon from "@rsuite/icons/Gear";  return <GearIcon />; 

移除了 size 属性,采用 fontSize 代替。

// for rsuite v4 return <Icon icon="gear" size="3x" />;  // for rsuite v5 return <GearIcon style={{ fontSize: "3em" }} />; 

size 属性值及其对应的 fontSize 值关系如下:

  • lg : 1.3333em
  • 2x : 2em
  • 3x : 3em
  • 4x : 4em
  • 5x : 5em

date-fns 升级 v2

在 React Suite 中使用了 date-fns 工具用于对日期格式、计算等等。基于 Unicode 标准,用于格式功能的新格式字符串有变更

// for rsuite v4  return (   <>     <DatePicker format="YYYY-MM-DD" />     <DateRangePicker format="YYYY-MM-DD" />   </> );  // for rsuite v5  return (   <>     <DatePicker format="yyyy-MM-dd" />     <DateRangePicker format="yyyy-MM-dd" />   </> ); 

废弃 Alert 组件,用 toaster.push(<Message>) 代替

所有的弹出的通知消息,都使用新的 API toaster 进行管理。Alert 组件将会被废弃,替代的方式是通过 toaster 与 Message 组合使用。 例如:

// for rsuite v4 Alert.info("description");  // for rsutie v5 toaster.push(   <Message type="info" closable>     description   </Message> ); 

删除一个消息或者清空消息

// Remove message const key = toaster.push(   <Message type="info" closable>     description   </Message> ); toaster.remove(key);  // Clear all messages toaster.clear(); 

修改 Notification 使用方式

// for rsuite v4 Notification.info({   title: "info",   description: "description",   duration: 4500,   placement: "topStart", });  // for rsuite v5 toaster.push(   <Notification type="info" header="info" duration={4500}>     description   </Notification>,   { placement: "topStart" } ); 

Form 相关组件重命名

  • FormGroup 重命名为 Form.Group
  • FormControl 重命名为 Form.Control
  • ControlLabel 重命名为 Form.ControlLabel
  • ErrorMessage 重命名为 Form.ErrorMessage
  • HelpBlock 重命名为 Form.HelpText

所有组件的 componentClass 属性重命名为 as

// for rsuite v4 return <Button componentClass="span" />;  // for rsuite v5 return <Button as="span" />; 

默认关闭所有 Picker 的 virtualized

所有的 Picker 的 virtualized 的默认值为 false。如果您希望继续在项目中使用,需要设置为 true

<SelectPicker virtualized /> 

改进异步更新子级的方式

为了方便异步更新子节点,新增了一个 getChildren 属性。受影响的组件:

  • Cascader
  • MutilCascader
  • TreePicker
  • CheckTreePicker
getChildren:(node: ItemDataType) => Promise<ItemDataType[]> 
function fetchNodes(id) {   return new Promise((resolve) => {     // fetch the child node data async     resolve(childrenNodes);   }); }  return (   <>     <Cascader getChildren={(node) => fetchNodes(node.id)} />   </> ); 

删除 Table.Pagination, 并增强 Pagination

Table.Pagination 组件在本次更新中删除,请使用 Pagination 代替,新增了 layout 属性,用于自定义布局。

// for rsuite v4 return (   <Table.Pagination     lengthMenu={[       { value: 50, label: 50 },       { value: 100, label: 100 },     ]}     activePage={1}     displayLength={20}     total={100}     onChangePage={handleChangePage}     onChangeLength={handleChangeLength}   /> );  // for rsuite v5 return (   <Pagination     limit={50}     limitOptions={[50, 100]}     layout={["total", "-", "limit", "|", "pager", "skip"]}     total={100}     activePage={1}     onChangePage={handleChangePage}     onChangeLimit={handleChangeLimit}   /> ); 

使用 CustomProvider 替换 IntlProvider

// for rsuite v4 import { IntlProvider } from "rsuite"; import zhCN from "rsuite/lib/IntlProvider/locales/zh_CN";  return (   <IntlProvider locale={zhCN}>     <App />   </IntlProvider> );  // for rsuite v5 import { CustomProvider } from "rsuite"; import zhCN from "rsuite/locales/zh_CN";  return (   <CustomProvider locale={zhCN}>     <App />   </CustomProvider> ); 

废弃 <Sidenav> 组件的 activeKeyonSelect 属性

<Sidenav> 组件总是和 <Nav> 组件配合使用。 您应当使用 <Nav> 组件的 activeKeyonSelect 属性。

// for rsuite v4  return (   <Sidenav activeKey={activeKey} onSelect={setActiveKey}>     <Sidenav.Body>       <Nav>         <Nav.Item>Nav item</Nav.Item>         <Dropdown title="Dropdown">           <Dropdown.Item>Dropdown item</Dropdown.Item>         </Dropdown>       </Nav>     </Sidenav.Body>   </Sidenav> );  // for rsuite v5  return (   <Sidenav>     <Sidenav.Body>       <Nav activeKey={activeKey} onSelect={setActiveKey}>         <Nav.Item>Nav item</Nav.Item>         <Dropdown title="Dropdown">           <Dropdown.Item>Dropdown item</Dropdown.Item>         </Dropdown>       </Nav>     </Sidenav.Body>   </Sidenav> ); 

按需加载

导入组件

// v4 import Button from "rsuite/lib/Button"; import "rsuite/lib/Button/styles/index.less";  // v5 import Button from "rsuite/Button"; import "rsuite/Button/styles/index.less"; 

导入本地化语言包

// v4 import ruRU from "rsuite/lib/IntlProvider/locales/ru_RU";  // v5 import ruRU from "rsuite/locales/ru_RU"; 

全局导入样式

// v4 import "rsuite/lib/styles/index.less"; // less import "rsuite/dist/styles/rsuite-default.css"; // css  // v5 import "rsuite/styles/index.less"; // less import "rsuite/dist/rsuite.min.css"; // or css import "rsuite/dist/rsuite-rtl.min.css"; // or rtl css 

废弃 <Dropdown> 组件的 renderTitle 属性

废弃 renderTitle,取而代之的是 renderToggle

//v4 return (   <Dropdown     renderTitle={() => (       <IconButton appearance="primary" icon={<Icon icon="plus" />} circle />     )}   >     ...   </Dropdown> );  //v5 return (   <Dropdown     renderToggle={(props, ref) => (       <IconButton         {...props}         ref={ref}         icon={<PlusIcon />}         circle         appearance="primary"       />     )}   >     ...   </Dropdown> ); 

open/close 代替 show/hide

在 v4 版本中组件的属性命名同时存在 open/closeshow/hide 的使用。在 v5 中将命名统一起来。

// v4  <Modal show="{true}" onShow="{...}" onHide="{...}" /> <Drawer show="{true}" onShow="{...}" onHide="{...}" /> <Whisper delayHide="{1000}" delayShow="{1000}" />  // v5 <Modal open="{true}" onOpen="{...}" onClose="{...}" /> <Drawer open="{true}" onOpen="{...}" onClose="{...}" /> <Whisper delayClose="{1000}" delayOpen="{1000}" /> 

支持 React Suite

如果您喜欢 React Suite,可以通过以下方式支持我们:

  • Star 这个项目。
  • 如果您在您的项目中使用了 React Suite,欢迎在这里留言
  • OpenCollective 上赞助我们。

Python 操作 Oracle 报错 ORA-12715,但 NLS 已经设置过了

Posted: 26 Sep 2021 02:41 AM PDT

一些用了很久的脚本需要迁移到 windows server 2012 R2,但运行操作 Oracle 时候都会报错 ORA-12715,网上搜到的解释都指向 NLS_LANG

不过我检查了一下这不配置过了吗

SIMPLIFIED CHINESE_CHINA.ZHS16GBK 

另外这台机器上的 navicat 访问 Oracle 是正常的,sublime 和 jupyter notebook 会报错

Error while trying to retrieve text for error ORA-12715 (Background on this error at: https://sqlalche.me/e/14/4xp6) Traceback (most recent call last):   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\base.py", line 3212, in _wrap_pool_connect     return fn()   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 307, in connect     return _ConnectionFairy._checkout(self)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 767, in _checkout     fairy = _ConnectionRecord.checkout(pool)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 425, in checkout     rec = pool._do_get()   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\impl.py", line 146, in _do_get     self._dec_overflow()   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\langhelpers.py", line 72, in __exit__     with_traceback=exc_tb,   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_     raise exception   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\impl.py", line 143, in _do_get     return self._create_connection()   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 253, in _create_connection     return _ConnectionRecord(self)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 368, in __init__     self.__connect()   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 611, in __connect     pool.logger.debug("Error on connect(): %s", e)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\langhelpers.py", line 72, in __exit__     with_traceback=exc_tb,   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_     raise exception   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\pool\base.py", line 605, in __connect     connection = pool._invoke_creator(self)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\create.py", line 578, in connect     return dialect.connect(*cargs, **cparams)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\default.py", line 584, in connect     return self.dbapi.connect(*cargs, **cparams) 

请问下各位大佬 Android 如何共享 cookie.

Posted: 26 Sep 2021 02:40 AM PDT

请问下各位大佬 Android 如何共享 cookie.
就是手机浏览器的 cookie 我自己写个 app 也能读取到.浏览器与 App cookie 共享
或者 app 能读取到浏览器的 cookie
不要说不行,目前有个别已经实现了.

家人们,快升级到 IntelliJ IDEA 2021.3 EAP

Posted: 26 Sep 2021 02:27 AM PDT

vscode 变更编码的问题

Posted: 26 Sep 2021 12:53 AM PDT

有一份文件以 gkb 打开,复制,然后更换编码为 utf8,然后在粘贴覆盖。这时通过终端可以正常运行,但是通过输出运行就会报错,请问这是因为复制粘贴带来的还是因为本地编问题造成的报错?(顺便问一下为什么 windows 下通过属性-安全得到的文件路径复制粘贴不能直接使用,每次都需要把头两个符号删掉重新输入才行)

求一个 nginx 配置

Posted: 26 Sep 2021 12:09 AM PDT

求一个 nginx 配置,需求如下:网站的目录结构是 /html/年 /栏目名 /稿件 id,现在需要屏蔽,地址类似: https://example.com/html/2016/news/1.html,现在需要屏蔽 2016 年整年的稿件,除了某个栏目的,就是: https://example.com/html/2016/news/1.html 不能打开,但是 https://example.com/html/2016/ok/2.html 可以打开,就是要匹配到栏目名称是 ok 的,可以打开

红米 K40 刷 LineageOS 18.1 之后的余下几个遗憾/疑问

Posted: 25 Sep 2021 11:46 PM PDT

1.自带的( AOSP ?)相机貌似不支持副摄像头。K40 有 2 个背面副摄像头(加上主摄一共 3 个背面摄像头),一个超广角一个微距。
到 XDA 上逛了逛,看到有人推荐 Nikita's Gcam NGCam_7.4.104-v2.0: https://www.celsoazevedo.com/files/android/google-camera/f/changelog1497/
一开始一脸懵逼,光是按照帖子的说明在路径 /sdcard/Gcam/Configs7/下面粘贴 XML 格式的配置文件,副摄像头就能用了。
然后发现,貌似未必需要 XML 配置文件,自己在这个 Gcam 的高级设置里也可以直接开启副摄像头。
另外,加入到这个 Gcam 作者的 TG 群里,还被提醒:
(1)其实可以用 CameraIDs 查看可用的相机 ID ;
(2)再有就是,在录像模式貌似存在不能直接切换副摄像头的 bug (会黑屏、无法录像)。解决办法是:在设置的 Lib Patcher 里勾选"使用重启",然后切换副摄像头时,整个 app 貌似就会重启,这样就可以正常用副摄像头录像了。

但是说实话我不太明白……这个"移植谷歌相机"是哪来的?难道是把谷歌相机(应该是闭源?)的 apk 拿来重打包魔改出来的?

2.换了 Nikita's Gcam 之后,虽然副摄像头可用了,但超广角副摄像头的畸变貌似没有修正的选项。MIUI 自带相机是有这个选项的。哎,没有就没有吧,本来 MIUI 这个也是软件修正吧,实在不行我也找别的软件修正呗。

3.不是说 K40 的主摄分辨率是 48MP 么?我好像没看到有 48MP 的选项,无论是 LOS 自带相机还是 Nikita's Gcam 好像都只有 12MP 。我看 dev check 这个 app 里提示可能跟像素合并有关,但我不太明白像素合并( Pixel Binnig ?)是咋回事,难道就是直接缩小图片?
哎算了,手机摄像头本来也不指望多厉害,我想,像素数看着高也不代表成像效果好吧,于是把图缩小省一些像素可能也不是坏事呢?

4.MIUI 里(我记得)拖动 QQ 的消息通知气泡,可以直接作为小窗打开,于是如果是在全屏看视频玩游戏之类就可以不用全部切出来,而且稍微扫一眼 QQ 的内容后可以直接上拉小窗下边缘来关闭小窗。当时没感觉到这个功能有多厉害,但刷到 LOS 后,虽然设置选项里也有自由小窗,但貌似不至于这么方便一步到位,于是我现在还是每次都切出来……
(可能单纯只是我姿势不对不太会用?)

5.MIUI 的自带的视频 /游戏息屏挂机 /听剧,貌似是开启后手机就锁屏了,但 app 还保持后台运行。这个算 MIUI 的特色功能吧,LOS 里应该是没有的。于是我下载了 Proximity Service 这个开源的 app,但使用体验不太好,本来预想这个 app 像通话一样通过距离传感器判断息屏,但用起来好像特别不舒服,各种不听话,想让它息屏的时候它不息屏,想让他亮屏的时候它不亮屏,或者就是延迟好多秒钟什么的(貌似不仅仅靠距离传感器控制,可能还参考了重力传感器?不知道是不是这样,如果是,感觉有点画蛇添足)。

6.口袋防误触模式,也就是如果距离传感器被遮挡,就进一步要求必须按住音量键+电源之类的操作才能解锁,防止误触。貌似在 LineageOS 里我也没找到。有通知亮屏后在口袋里好像就有可能误触。

(最后,之前我也水过一贴说信号强度貌似有下降: /t/801170 现在我更相信其实并没有下降,只是通知栏里的图标显示不满格而已)

vscode 怎么设置代理,让测试的 axios 也能够自动使用该代理?

Posted: 25 Sep 2021 11:39 PM PDT

我们使用了一个第三方的库,这个库是用 axios 访问 dropbox 的 API, 比如 https://api.dropboxapi.com/oauth2/token, 但是 dropbox 被墙了,大家都知道。

现在我在操作系统 windows 10 network setting 里面,设置了代理。然后在 vscode 的 config 里面,也设置了 "http.proxy": "http://xxx.com:8080" 和 "http.proxyStrictSSL": false

但是,调用该库的时候,还是返回 not authenticated.的。

我用浏览器网页试过了,通过该代理是能够访问 dropbox 的。

谢谢!

p.s. axios 好像是可以直接设置代理的,但我们调用的是第三方的库,这个库里面使用的 axios,我没有办法直接改代码。

升级主机多了个 256G 的 M2 硬盘, 想做个钱包, 有什么教程吗?

Posted: 25 Sep 2021 11:36 PM PDT

单纯做移动硬盘用不上, 但做个钱包还是可以. 比如比特币 /ETH, 但没找到教程.

在 WSL2 下运行 GitHub Actions 导致吃满宿主机内存的问题以及解决方案

Posted: 25 Sep 2021 11:11 PM PDT

想用 Docker Desktop 来运行 GitHub Actions,结果就跑了个最简单的脚本,就吃掉了 4GB 的宿主机内存。

去谷歌上搜,发现这个问题早就存在,linux 有占满内存的倾向,WSL 不会释放缓存,但是在 2019 年 10 月,已经通过打补丁的方式实现了归还内存。

但实际上在上述场景下,这个问题仍然存在。

最粗暴的方法是在配置文件中限制 WSL2 资源,可是这不是个好的办法,因为有的时候真的需要跑高资源占用的程序。

后来意识到可能是因为 Docker Desktop 本身有问题,然后就勾掉了启用 WSL2 的选项,换用 Hyper-V,结果问题就成功解决了!

目前看来 WSL2 和 Hyper-V 要方案各有优势,虽然 Docker Desktop 建议使用 WSL2,但选用 Hyper-V 方案也不是什么太大的问题。

在 PowerShell 为什么[String]可读性那么差?有个深层原因……

Posted: 25 Sep 2021 10:49 PM PDT

PowerShell 对象至少有三种获取字符串的方法,[String]Out-String.toString(),前者的可读性很差,如果是输入文件数组的话,那么只是用空格简单的将那些路径分开。

为什么会这样设计?我曾经有过这样的疑问,但是并没有去查询相关的内容。

今天在用 Pandoc 突然发现通配符是没用的,搜索之后才发现这个地方是不能用*的,因为 PowerShell 不会对本机命令的 glob 进行扩展,那么是需要用表达式的。

这才意识到原因,为了兼容 Bash 的通配符展开,才用空格分隔路径的。

pandoc *.mdpandoc (get-item *.md).FullName

Google plans to bring Android's kernel closer to the Linux upstream

Posted: 25 Sep 2021 10:48 PM PDT

win10 有没有办法在开机之前选择用户

Posted: 25 Sep 2021 10:29 PM PDT

比如系统有两个用户 a 和 b.
win10 每次开机会自动加载上次登录的用户比如 a,可是我这次要登录 b.
而且 a 加载时间最慢要 67 分钟,b 只要几十秒。
难道只能干等几分钟再切换?有没有开机之前选择的办法?

iOS 有没有可能实现纯内网 IM

Posted: 25 Sep 2021 10:20 PM PDT

服务端没有外网出口
手机端只有连内网 WiFi 才可使用
App 通过企业证书内网部署下载

现在的问题是如何解决后台推送提示?不通过 Apple store 分发,是否有私有 API 可以后台保持一个 TCP(Websocket)链接?

有什么好用的切片工具吗?求交集、差集的

Posted: 25 Sep 2021 10:19 PM PDT

APM 系统调研问题,美团 CAT/Pinpoint/Zipkin/Sentry/SkyWalking 有没有生产在用的同学讨论下

Posted: 25 Sep 2021 10:15 PM PDT

目前主要以 spring cloud 服务为主,本来想选 cat,貌似不维护了,后面的 skywalking/sentry 网上实践资料也蛮少。请教下各位

求一个获取 lambda 对象源代码的方法

Posted: 25 Sep 2021 08:07 PM PDT

我先说一下我试过的方法,以及为什么不行:

  • inspect.getsource:这玩意只能获取第一行,比如定义一个多行的 lambda 它也只能拿到第一行。并且如果 lambda 前面还有东西,它会一并拿回来,这部满足我的需求,我只想要从 lambda 关键词开始到整个 lambda 结束的定义,是不是原有格式我不在乎,只要完整且不多余就行。
  • lambda_object.__code__.co_firstlineno:这个同上,实际上 inspect.getsource 就是用这个值去拿的。这个值只能标识第一行所在,却不能标识开始的横轴位置以及最后的坐标。

我能想到的解决方式是直接拿到 lambda 对象的字节码,从字节码反编译到 Python 源代码,但是我需要 2.7 和 3.9 、3.10 三个版本同时兼容的……我对字节码反编译不太熟悉,目前找到的都是以文件为单位的反编译,不知道有没有以对象为代码的反编译库。

我想做一个把类似于 User.filter(lambda user: user.age > 18) 这样的语句翻译到 SQL 的玩意。但是卡在了这里。

问一个群晖数据恢复问题~

Posted: 25 Sep 2021 06:26 PM PDT

数据无价,数据数据,我是傻子

前因是这样的,之前的黑裙突然崩了,然后搜网上的教程开始重装

硬件是一个 U 盘作为引导,一个 32G 的 SSD 作为系统盘,然后一个 10T 的机械

格式化了每个硬盘的第一个分区,第一个分区粉红色的是系统,数据在后面的分区? 应该是这样理解(对这个教程存疑目前,因为我失败了)

然后重装了系统,重装系统又遇到提示"无法安装此文件,文件可能已损毁。( 13 )",然后我把 10T 的机械拔出来,格式化了 32G 的固态,重新安装了 DSM

按网上的教程重装完系统把 10T 的机械硬盘装回去,应该会提示硬盘有问题,然后修复完事才对

然而...静悄悄,群晖压根没有提示所谓的修复,倒是能识别到 10T 的硬盘,但是显示未初始化,只能新增存储池,而且会提示格式化硬盘全部数据

这咋整,我麻了

发帖前我大概搜索了一下,有挂载到其他 linux 下然后复制文件出来的抢救办法

但是问题来了,我没另外一个 10T 那么大的硬盘来腾笼换鸟,有没有什么办法可以直接恢复数据而不用格式化掉的吗

目前的样子,下面那个 10T 的显示未初始化

https://www.hualigs.cn/image/614f36b12ff84.jpg

12306 的候补机制感觉越活越回去了

Posted: 25 Sep 2021 02:20 PM PDT

之前大家都是用各大软件平台抢票入携程、美团、去哪、智行等等
现在 12306 出来候补机制好几年了,说真的丝毫没有让我感觉有比以往更方便的感觉,丝毫没有
1. 候补机制由具体人数,变为较少、中等、较多后,我根本无从判断较少是我前面有 1 个人还有 20 个人还是更多,这让我根本没办法做计划(和原来抢票也没有什么变化)
2. 候补机制预占了部分购票金额(和原来抢票没有半点变化)
3. 根据知乎一些平台感觉候补机制会为了利益最大化偏向全程票的买家,这就相当于并不是完全的先到先得(公平么?)
今年候补了从武汉到北京的票,显示较少,又担心补到最后没补上,唉,坑啊,真想把这个产品经理 sha 了祭天

强迫症求助, vscode 有插件分类分组 的插件吗

Posted: 25 Sep 2021 02:03 PM PDT

插件太多太乱了 想要一个分组分类管理功能

如何分辨页面上的一段 HTML 是富文本编辑器生成的还是直接用 html 的语法书写的?

Posted: 25 Sep 2021 10:51 AM PDT

富文本编辑器能将一段普通文本形成对应的 HTML 标签,有什么特征可以分辨出这段 html 是富文本编辑器生成还是直接用 html 的语法书写的?

例如这张页面框中的这部分,是如何形成的呢: https://developer.mozilla.org/zh-CN/docs/Learn

今天碰上了一个数据库问题没解决。有点感觉自己是南郭先生了。

Posted: 25 Sep 2021 09:31 AM PDT

oneplus 9 pro 连 mbp16 识别不了

Posted: 25 Sep 2021 06:51 AM PDT

用的自带的红色线,两头都是 typeC 的,连 mbp16,只是能充电,adb 识别不了。感觉是线的问题,试了很多线,都不行。

但是之前用过一款旧的 usb-typeC 的线,adb 可以识别。

这太莫名其妙了,新的不如旧的,难到是哪里没操作么?求解。

居家远程工作两年的分享与思考

Posted: 25 Sep 2021 06:36 AM PDT

因为疫情前东家倒闭,正好北京的房子也到期,就直接回家了,休息不到一个月,在朋友推荐下获得一个远程工作,五险一金也是有的,在公司所在地缴纳。

工作流程其实和驻场开发有一些区别,可能很多人担心沟通成本问题,其实当远程岗位多了以后,大家会为了降低沟通成本,想出很多办法,这个办法其实没有普适性,每个团队有自己的基因,如果各位有幸找到远程工作会渐渐明白。

我们在对接一个需求的时候会开差不多一天的视频会议,我习惯直接用投影看桌面分享,推荐一下。

真的要说远程和驻场的区别,可能就是太爽了,不会再找驻场开发的工作。

No comments:

Post a Comment