小编JW.*_*JW.的帖子

通过工厂方法将参数传递给特定的子类

比方说,我有一个抽象类饮料,以及选择的饮料(葡萄酒,啤酒等)的类型在运行时创建的工厂方法.

每个饮料都需要一些参数来正确初始化自己.其中一些是所有饮料的共同点; 例如,他们可能都需要DrinkConfig参数.

但每种饮料也可能有其独特的要求.也许Wine需要一个Sommelier辅助对象来初始化自己.啤酒不需要它,但它可能需要它自己的辅助对象.

那么我应该将什么传递给工厂方法呢?当我调用它时,我有所有可用的辅助对象,所以我可以将它们全部传递给工厂.但这最终可能会引发很多争论.有没有更好的方法来设计它?

编辑:我们假设我不能在工厂中创建辅助对象; 他们只能从来电者处获得.

oop factory subclass

8
推荐指数
1
解决办法
3104
查看次数

Chrome 堆快照——分离的节点没有颜色

我正在关注“使用堆快照发现分离的 DOM 树内存泄漏”下的本教程

当我搜索分离的节点时,我看到一堆“分离”元素。但是当我展开它们时,所包含的元素都不是红色或黄色的,如教程中所述。

这种行为改变了吗?我在 Mac 上使用 70.0.3538.77。

google-chrome-devtools

8
推荐指数
1
解决办法
1058
查看次数

查找PHP依赖项

是否有任何工具可以列出PHP文件使用的类的名称?

例如,如果我在此文件上运行它:

<?
class Test {
  public function __construct(Obj1 $x) {
    $y = new Obj2();
    $str = "Obj3";
    $z = new $str();
  }
}
?>
Run Code Online (Sandbox Code Playgroud)

它会报告"Obj1"和"Obj2".如果它真的很聪明,它也可能会报告"Obj3",但这并不重要.

我正在尝试打包一些代码,我想要一些帮助确保我没有错过任何依赖项.

有一种称为PHP_Depend的东西,它可以绘制依赖项的数量,但不能报告它们是什么.

更新:我没有找到真正的解决方案,但我想出了一些足够接近我的目的.您可以对文件进行标记,并搜索所有T_STRING标记.这将为您提供文件中提到的所有类名.它还会为您提供其他功能,如函数名称和常量.但如果您的类名易于区分(例如,他们有初始上限),那么这应该不是问题.

$contents = file_get_contents($path);
$tokens = token_get_all($contents);
foreach ($tokens as $token) {
  if (is_array($token) && $token[0] === T_STRING) {
    echo $token[1]."\n";
  }
}
Run Code Online (Sandbox Code Playgroud)

php dependencies

7
推荐指数
1
解决办法
4429
查看次数

使用CSS返回元数据

我有一个CSS样式表,它在服务器上动态创建,并通过<link>标签返回.是否可以使用此样式表返回任何元数据,我可以使用JavaScript阅读?

(用例:我返回的样式表是几个较小的样式表.我希望我的JavaScript代码能够检测出哪些较小的代码.)

我考虑过向元素添加一些自定义属性:

body {
  -my-custom-prop1:0;
  -my-custom-prop2:0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试阅读这些时:

window.getComputedStyle(document.body)['-my-custom-prop1']
Run Code Online (Sandbox Code Playgroud)

他们没有回来.还有其他想法吗?

编辑:我最终采取了略微不同的方法.<link>我没有添加标签,而是制作了一个AJAX请求来获取样式表,并将其文本添加到<style>标签中.这样我就可以使用HTTP响应头来包含元数据.当然,这不会像跨<link>标签一样跨域工作.

javascript css metadata

7
推荐指数
1
解决办法
836
查看次数

CSS选择最近的后代?

使用CSS,有没有办法选择与某个选择器匹配的元素最近的后代?

<div class="foo"> <!-- if we're inside this -->
  <div>
    <br />
    <div class="bar"> <!-- match this -->
      <div class="bar"> <!-- but not this -->
        <div class="bar"> <!-- or this -->
        </div>
      </div>
    </div>
    <div class="bar"> <!-- I don't really care whether we match this -->
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

也就是说,可以.bar在任何内容中选择第一个.foo(无论中间有多少个子元素或兄弟元素),而不是第二个或第三个元素.bar.

css css-selectors

7
推荐指数
1
解决办法
2万
查看次数

Virtualbox/Vagrant共享文件夹:OS X和Linux上的区分大小写问题

我在Mac OS X主机上运行VirtualBox,并使用CentOS客户端.我正在使用Vagrant设置共享文件夹,以便我可以在主机和guest虚拟机上使用代码.

问题是主机的文件系统不区分大小写,但客户端不是.所以,如果我在客人身上运行一些东西:

cd /shared-folder
mkdir foo
mv foo Foo
Run Code Online (Sandbox Code Playgroud)

它会失败,因为它看到Foo已经存在于主机上.这是一个简化的例子,但我有真实的情况,我试图在客户端使用git,它最终做了类似的事情.

有什么方法可以避免这种情况吗?我更愿意提出适用于所有主机操作系统(Windows,Mac和Linux)的东西.

(一个选项可能是将主机的文件rsync到guest虚拟机,但我希望避免这种情况.)

macos virtualbox vagrant

7
推荐指数
1
解决办法
1908
查看次数

具有Touch ID的OAuth2应用

第三方应用程序可以通过任何方式在逻辑上使用Touch ID来验证使用OAuth2的Web服务吗?

假设我拥有一个需要使用OAuth2进行身份验证的Web服务。它支持隐式和授权代码授予(尽管我可以在必要时添加对其他授予的支持)。

第三方有一个使用此Web服务的移动应用程序。它打开一个本地Web视图进行身份验证,然后在其中加载我的身份验证URL。用户在我的域上输入他们的用户名/密码,然后我将OAuth令牌返回给应用程序。

如果此应用想要实现Touch ID以加快身份验证,是否有一种方法可以对OAuth2有意义?

我的理解是,OAuth2隐式和auth-code授予的目的是防止父级应用访问用户的凭据。它只能访问生成的OAuth令牌,并且仅在有限的时间内有效。

使用Touch ID,通常可以使用Keychain Services来存储密码。因此,这显然要求您有权访问密码。

我想他们可以将OAuth令牌存储在钥匙串中而不是密码中,但是那只在短时间内有效。

oauth-2.0 touch-id

7
推荐指数
1
解决办法
811
查看次数

禁用tsserver for Visual Studio代码?

在Visual Studio Code(1.28.2,Mac OS 10.14,禁用所有扩展)中编辑React项目时,整个系统通常会缓慢进行爬网。目前尚不清楚是什么触发了此操作,但似乎只是普通的文本编辑。

通常,当我查看VSCode的Process Explorer时,该electron_node tsserver.js进程使用的CPU最多。

是否可以禁用使此过程运行的任何功能?我不介意失去功能;我只希望能够编辑文件。

typescript visual-studio-code

7
推荐指数
2
解决办法
2305
查看次数

根据多个循环中更改的结果运行Ansible处理程序

我有一个Ansible变量,包含一个Web服务器列表(全部在同一主机上):

servers:
  - foo
  - bar
  - baz
Run Code Online (Sandbox Code Playgroud)

并且任务更改其配置文件,并将结果注册到变量中:

- name: create server configs
  template: ...
  with_items: "{{ servers }}"
  notify: restart changed servers
  register: servers_changed
Run Code Online (Sandbox Code Playgroud)

还有一个处理程序,它只重新启动运行该任务时更改的服务器:

- name: restart changed servers
  command: restart-my-server {{ item.item.name }}
  when: item.changed
  with_items: "{{ servers_changed.results }}"
Run Code Online (Sandbox Code Playgroud)

我的问题是,我现在需要多个任务,如上面的那个,它们会改变不同的配置文件.但如果我这样做,他们将覆盖servers_changed变量,因此只会使用最后一个变量.

我可以在每个任务中注册不同的变量,但是每个任务都需要一个不同的处理程序.这会变得混乱.有没有更好的办法?

ansible ansible-playbook

6
推荐指数
2
解决办法
3180
查看次数

是否可以通过编程方式使用 Chrome 实时字幕?

Chrome 89 具有实时字幕功能,可以在播放音频/视频时转录英文文本。它甚至可以离线工作,因此它不会联系谷歌的服务器。

有没有办法以编程方式使用此功能,例如为其提供音频文件并捕获转录文本?

编辑: 这个人写了一些代码可以让你做到这一点。但你需要自己弄清楚如何反汇编和修补 Google 的 libsoda。不过我确实让它工作了。

google-chrome voice-recognition

6
推荐指数
1
解决办法
1827
查看次数