小编Pau*_*aul的帖子

控制反转与依赖注入

根据Martin Fowler撰写论文,控制反转是程序控制流程被颠倒的原则:代替程序员控制程序流程,外部源(框架,服务,其他组件)控制它.这就像我们把东西塞进别的东西.他提到了一个关于EJB 2.0的例子:

例如,会话Bean接口定义ejbRemove,ejbPassivate(存储到辅助存储)和ejbActivate(从被动状态恢复).你无法控制何时调用这些方法,只是它们的作用.容器打电话给我们,我们不打电话给它.

这导致框架和库之间的区别:

控制反转是使框架与库不同的关键部分.库本质上是一组可以调用的函数,这些日子通常组织成类.每个调用都会执行一些操作并将控制权返回给客户端.

我认为,DI是IOC的观点,意味着对象的依赖性被颠倒了:相反,它控制着自己的依赖关系,生命周期......还有其他东西为你做.但是,正如你用手告诉我的DI,DI不一定是IOC.我们仍然可以有DI而没有IOC.

然而,在本文中(来自pococapsule,另一个IOC C/C++框架),它表明,由于IOC和DI,IOC容器和DI框架远远优于J2EE,因为J2EE将框架代码混合到组件中因此不能成为普通的旧Java/C++对象(PO​​JO/POCO).

除依赖注入模式之外的控制容器的反转(存档链接)

附加阅读以了解旧的基于组件的开发框架的问题是什么,这导致了上面的第二篇论文:为什么以及什么是控制反转(存档链接)

我的问题:IOC和DI究竟是什么?我很迷惑.基于pococapsule,IOC比仅仅反转对象或程序员和框架之间的控制更重要.

dependency-injection inversion-of-control

467
推荐指数
14
解决办法
26万
查看次数

Android:Dialog中的EditText不会拉起软键盘

所以我有一个似乎常见的问题,就是我的对话框中的EditText在获得焦点时不会显示出来.我已经看过几个解决方法,比如在这个帖子中,这一个这一个(还有更多),但我从来没有见过一个令人满意的解释,为什么这首先发生.

我更倾向于让Android使用自己的EditTexts默认行为,而不是构建我自己的行为,但似乎每个人(在那些线程中)已经接受了Dialogs中EditTexts的默认行为是只给光标而没有键盘.那为什么会这样?

为了记录,这些解决方法似乎都没有对我有用 - 我最接近的是强制键盘出现对话框下面(使用InputMethodManager.toggleSoftKeyboard(*)).我的特殊配置是API15,EditText显示在AlertDialog中ListView的页脚中.设置了EditText android:focusable ="true",onFocusChangeListener 正在接收焦点事件.

编辑:

根据要求,这是我正在使用的特定代码段.我不打算整个布局,但在这个特定的应用程序中,EditText响应于按下对话框上的按钮而出现(类似于动作视图).它包含在RelativeLayout中,默认情况下可见性"已消失":

 <RelativeLayout 
       android:id="@+id/relLay"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:visibility="gone"
       android:layout_marginTop="5dp"
       android:layout_marginBottom="5dp">

        <ImageButton
            android:id="@+id/cancelBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="@color/transparent"
            android:src="@drawable/cancelButton" 
            android:layout_margin="5dp"/>

        <ImageButton
            android:id="@+id/okBut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@id/cancelBut"
            android:background="@color/transparent"
            android:src="@drawable/okButton"
            android:layout_margin="5dp" />

        <EditText 
            android:id="@+id/editText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:focusable="true"
            android:layout_toLeftOf="@id/okBut"/>
   </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

构建它的代码将relativeLayout的可见性设置为"Visible"(并隐藏其他UI元素).根据我使用EditText的经验,这应该足以在EditText聚焦时拉起键盘.但是,出于某种原因,情况并非如此.我可以在onFocusChangeListener上设置以下内容:

    edit_text.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                // For whatever reason we need to request …
Run Code Online (Sandbox Code Playgroud)

android dialog android-softkeyboard android-edittext

79
推荐指数
6
解决办法
4万
查看次数

修改`**kwargs`字典是否总是安全的?

使用Python函数语法def f(**kwargs),在函数kwargs中创建一个关键字参数字典,并且字典是可变的,所以问题是,如果我修改kwargs字典,是否有可能在函数范围之外产生一些影响?

根据我对字典解包和关键字参数打包如何工作的理解,我认为没有理由相信它可能不安全,而且在我看来Python 3.6中没有这种危险:

def f(**kwargs):
    kwargs['demo'] = 9

if __name__ == '__main__':
    demo = 4
    f(demo=demo)
    print(demo)     # 4

    kwargs = {}
    f(**kwargs)
    print(kwargs)   # {}

    kwargs['demo'] = 4
    f(**kwargs)
    print(kwargs)    # {'demo': 4}
Run Code Online (Sandbox Code Playgroud)

但是,这是特定于实现的,还是它是Python规范的一部分?我是否忽略了任何情况或实现(除非修改参数本身是可变的,如此kwargs['somelist'].append(3))这种修改可能是一个问题?

python dictionary scope function

48
推荐指数
2
解决办法
8732
查看次数

pandas.groupby的group_keys参数实际上做了什么?

pandas.DataFrame.groupby,有一个参数group_keys,我收集的应该做的事情与组密钥如何包含在数据框子集中有关.根据文件:

group_keys:布尔值,默认为True

调用apply时,将组键添加到索引以标识片段

但是,我真的找不到任何group_keys可以产生实际差异的例子:

import pandas as pd

df = pd.DataFrame([[0, 1, 3],
                   [3, 1, 1],
                   [3, 0, 0],
                   [2, 3, 3],
                   [2, 1, 0]], columns=list('xyz'))

gby = df.groupby('x')
gby_k = df.groupby('x', group_keys=False)
Run Code Online (Sandbox Code Playgroud)

它对输出没有影响apply:

ap = gby.apply(pd.DataFrame.sum)
#    x  y  z
# x         
# 0  0  1  3
# 2  4  4  3
# 3  6  1  1

ap_k = gby_k.apply(pd.DataFrame.sum)
#    x  y  z
# x         
# 0  0 …
Run Code Online (Sandbox Code Playgroud)

python pandas

22
推荐指数
2
解决办法
4842
查看次数

VLC使用Lua编写脚本:跳转到文件中的特定时间?

这似乎应该很简单,但我在这里空手而归.我正在尝试创建一个简单的VLC脚本来检查"随机"按钮是否打开,如果是,当它跳转到随机文件时,而不是从时间= 0开始,它会在随机时间开始.

到目前为止,它看起来像我应该是一个播放列表脚本,我可以从播放列表对象获取持续时间,但在这个文档页面或谷歌,我似乎无法找到任何方式跳转到特定时间在Lua脚本中.有没有人有更多使用Lua控制VLC播放的经验?

lua vlc

18
推荐指数
2
解决办法
9409
查看次数

使用向量作为矩阵的索引

我正在编写一个MATLAB函数来将数据读出到一个n维数组(可变维度大小).我需要能够访问Matrix中的特定点(例如,写入或读取它),但我不知道要指定多少索引.

目前我有一个current_point向量迭代指定每个索引的max_points向量,以及一个指定数组大小的向量.所以,例如,如果我想要一个大小为1000×15×3的三维数组max_points = [1000 15 3],并且current_point迭代[1, 1, 1][1000, 15, 3]([1, 1, 1]- > [1000, 1, 1]- > [1, 2, 1]- > [1000, 2, 1]- > ...).我希望能够做的是current_point作为矩阵的索引,如下所示:

output_matrix(current_point) = val
Run Code Online (Sandbox Code Playgroud)

但显然output_matrix([1 2 3]) = val会有类似的东西outputmatrix(1:3) = 30.我不能只使用虚拟变量,因为有时矩阵需要3个索引,其他时间4,其他时间2等,所以我需要一个可变长度的矢量.是否有一种简单的方法可以将矢量用作索引中的点?

indexing matlab matrix

16
推荐指数
2
解决办法
5万
查看次数

Matplotlib:更改数学字体大小

我正在用matplotlib制作一些图,我遇到了TeX渲染的问题.似乎mathtext x-height比正常的比特流Vera Sans小一点.请参阅以下示例:

x = linspace(0, 30, 300);
y = 0.5*rand(300)+20/(numpy.power(x-15, 2)+4);
xlabel(r'$\omega$ (rad$\cdot$Hz)');
ylabel(r'Intensity$^2$');
title(r'Why is $mathtext$ so much smaller than normal text?');
Run Code Online (Sandbox Code Playgroud)

描述该问题的一些随机数据的图.

正如您所看到的,希腊字母和数字尤其引人注目.理想情况下,我可以定义一些缩放因子,只会使每个字体大小的数学文本更大一些.有什么方法可以做到这一点吗?我希望简单地用现代计算机无处不在.我也不想编译新的Tex数学字体,如果可能的话.

使用的一个解决方案是使用sans-serif字体作为希腊字母和数字,但无论出于何种原因,matplotlib忽略了对这些字体的格式:

title('Why does $mat\mathsf{plot}lib$ ignore formatting for $\mathsf{2}$ ($\mathsf{two}), $\mathbf{2}$ ($\mathbf{two}) and $\mathsf{\omega}$?')
Run Code Online (Sandbox Code Playgroud)

标题改变了

我认为这与这些东西排版的性质有关,但是有什么方法可以解决它吗?

python numpy matplotlib

16
推荐指数
1
解决办法
6513
查看次数

使用javascript:void(0); angularjs unsafe ng-href;

我对这篇文章有类似的问题.

但添加"javascript"答案中提出的内容并没有解决我的问题:

$compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|javascript):/);
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像:

<a ng-href="{{var1 ? '/home' : 'javascript: void(0);'}}" ng-bind="var2"></a>
Run Code Online (Sandbox Code Playgroud)

但是在网址中,它产生了一个 unsafe:javascript: void(0);

angularjs

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

在SPARQL中选择一些不同的和一些不同的标记

我正在尝试查询DBPedia以获取与本体中给定类相关的属性列表,但由于人类可读的"标签"并不总是清晰,我还想提供数据库中的示例.问题是,虽然我想选择所有不同的属性,但我只想要每个属性的一个例子.以下是我的查询在不捕获示例的情况下的外观:

SELECT DISTINCT ?prop ?title WHERE {
    ?thing ?prop [].
    ?thing a <http://dbpedia.org/ontology/Currency>.
    ?prop rdf:type rdf:Property.
    ?prop rdfs:label ?title.
} ORDER BY DESC(COUNT(DISTINCT ?thing))
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

如果我以这种方式更改它,我开始为?prop获取重复值:

SELECT DISTINCT ?prop ?title ?example WHERE {
    ?thing ?prop ?example.
    ?thing a <http://dbpedia.org/ontology/Currency>.
    ?prop rdf:type rdf:Property.
    ?prop rdfs:label ?title.
} ORDER BY DESC(COUNT(DISTINCT ?thing))
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

我一般都非常习惯使用SPARQL和数据库查询,因此我不清楚如何执行此操作.理想情况下,我有类似DISTINCT(?prop)?title?example的内容,它为prop选择每个唯一值,并返回其标题和示例.

rdf distinct sparql dbpedia

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

Numpy:为什么"a + = aT"不起作用?

如scipy讲义中所述,这将无法按预期工作:

a = np.random.randint(0, 10, (1000, 1000))
a += a.T
assert np.allclose(a, a.T)
Run Code Online (Sandbox Code Playgroud)

但为什么?视图如何影响此行为?

python numpy

12
推荐指数
2
解决办法
430
查看次数