小编Lea*_*lia的帖子

如何告诉ProGuard将所有内容保存在特定包中?

我的应用程序有很多活动,也使用本机库.使用Eclipse生成的默认ProGuard配置ProGuard删除了很多东西--OnClick方法,静态成员,我的本机库使用的回调方法......是否有一种简单的方法来指示ProGuard不从我的包中删除任何东西?删除东西只能节省大约2.5%的应用程序大小,但会完全破坏我的应用程序.在ProGuard配置中逐类配置,测试和维护它将是一件痛苦的事.

android proguard

49
推荐指数
3
解决办法
5万
查看次数

Smalltalk字节码优化值得付出努力吗?

考虑类中的以下方法Juicer:

Juicer >> juiceOf: aString
    | fruit juice |
    fruit := self gather: aString.
    juice := self extractJuiceFrom: fruit.
    ^juice withoutSeeds
Run Code Online (Sandbox Code Playgroud)

它生成以下字节码

25 self                     ; 1
26 pushTemp: 0              ; 2
27 send: gather:
28 popIntoTemp: 1           ; 3
29 self                     ; 4
30 pushTemp: 1              ; 5
31 send: extractJuiceFrom:
32 popIntoTemp: 2           ; 6 <-
33 pushTemp: 2              ; 7 <-
34 send: withoutSeeds
35 returnTop
Run Code Online (Sandbox Code Playgroud)

现在请注意,32和33取消了:

25 self                     ; 1
26 pushTemp: 0              ; 2 …
Run Code Online (Sandbox Code Playgroud)

smalltalk squeak pharo

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

图像处理和计算机视觉

我想使用Smalltalk(Pharo)来更好地重构我的图像处理和用其他语言编写的计算机视觉代码/算法.我没有在网上找到很多使用Smalltalk处理图像(或视频帧)的例子.我想知道是否

i)有一个opencv /图像/计算机视觉库可用于Smalltalk,易于安装或

ii)有人可以举例说明如何访问图像中的像素数据并使用Smalltalk对其进行阈值处理.

smalltalk image-processing pixels computer-vision pharo

9
推荐指数
1
解决办法
664
查看次数

将小叶标记放在圆周上的参数方程不精确?

我正在开发一个应用程序,我有一个圆心和半径,我在Leaflet的帮助下绘制圆圈.

我在圆周的最北端放置了一个标记,使其可以拖动.

var circle = L.circle(coords, radius).addTo(map);

convertRadiusToLatitude = parseInt(response.radius)/111111;

var coordsOnRadius = [parseFloat(response.lat) + convertRadiusToLatitude, parseFloat(response.long)];
var markerOnRadius = L.marker(coordsOnRadius, {draggable: true}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

现在,这将标记添加到圆周,现在我希望它只能在我使用参数方程的圆周上拖动.

参数方程

x = Xc + R * cos(theta)
y = Yc + R * sin(theta)
Run Code Online (Sandbox Code Playgroud)

拖动代码

markerOnRadius.on('drag', function(e){

    bearing = marker.getLatLng().bearingTo(markerOnRadius.getLatLng());

    var markerOnRadiusX = parseFloat(response.lat)  + ((0.000009 * parseFloat(response.radius)) * Math.cos( toRad(bearing) ));
    var markerOnRadiusY = parseFloat(response.long) + ((0.000009 * parseFloat(response.radius)) * Math.sin( toRad(bearing) ));

    markerOnRadius.setLatLng([markerOnRadiusX, markerOnRadiusY]);
});
Run Code Online (Sandbox Code Playgroud)

bearingTo方法:

L.LatLng.prototype.bearingTo = function(other) {
    var …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm math leaflet mapbox

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

从块内部返回确保块的语义是什么?

假设我们有以下方法序列:

m1
    self m2: [^1]

m2: block
    self m3: block.
    Processor := nil "crash!"

m3: block
    [block value] ensure: [^2]
Run Code Online (Sandbox Code Playgroud)

问题是什么是价值anObject m1

换句话说,语义是否被[ˆ2]定义为一个确定的块?有两种可能性:

  1. 在确保的块中忽略块的返回:在这种情况下m1将返回1.
  2. 块中的返回在确保的块中得到尊重:在这种情况下,图像将崩溃.

请注意,我不会问会发生什么.我对执行流程的定义很感兴趣.


编辑

COROLLARY 1(Lukas在下面的回答中证实):编程风格不是很好!

smalltalk

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

为什么某些块闭包优化是好的和有效的?

在2001 年的一篇非常有趣的文章中,Allen Wirfs-Brock解释了如何在不重新启动(本机)堆栈的情况下实现块闭包.

从他揭露的许多想法出发,有一个我不太了解的想法,我认为在这里提出这个想法是个好主意.他说:

在块的生命周期中永远不能分配的任何变量(例如,封闭方法和块的参数)不需要放在环境中,而是在创建变量时将变量的副本放在闭包中

有两件事我不确定我是否理解得很好:

  1. 为什么使用只读变量的两个副本比将变量移动到环境更快?是因为封闭上下文访问堆栈中的(原始)变量会更快吗?
  2. 我们如何确保两个变量保持同步?

问题1必须有另一个原因.否则我没有看到增益(与实施优化的成本相比.)

对于问题2,取一个在方法中而不是在块中分配的非参数.为什么存储在堆栈中的oop在块的生命周期内保持不变?

我想我知道Q2的答案:因为块的执行不能与方法的执行交织在一起,即,当块存在时,封闭的上下文不会运行.但是,当块处于活动状态时,是否有任何方法可以临时修改堆栈?

smalltalk

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

如果进程终止,是否可以执行整个ensure块?

今天我在Pharo中了解到执行:

[v := 1] ensure: [self halt. v := 2]
Run Code Online (Sandbox Code Playgroud)

v = 2,即使我们在halt窗口放弃过程(!),也会结束设置.

我发现这个值得商榷.对我来说,语义#ensure:意味着序列

self halt. v := 2
Run Code Online (Sandbox Code Playgroud)

必须执行,无论接收器块的情况如何,都不管参数块的逻辑如何.由于逻辑#halt包括终止过程的事件,我发现它对第二句的顽固评价具有侵扰性.

接下来我尝试了以下内容:

[v := 1] ensure: [1 / 0. v := 2]
Run Code Online (Sandbox Code Playgroud)

ZeroDivide异常弹起我关上了调试器,仍然值v2(同用#halt.)

最后,我评估了:

[v := 1] ensure: [n := 1 / 0. v := v + n]
Run Code Online (Sandbox Code Playgroud)

并在ZeroDivide异常上关闭调试器.这次的价值v是,1但我v + n无法评估无法评估的事实.换句话说,错误继续无声.

所以我的问题是.这种行为背后的理性是什么?该过程是否应该在"正常"情况下终止,即没有#ensure:涉及?

smalltalk pharo

5
推荐指数
1
解决办法
109
查看次数

在GNU Smalltalk中导入文件

我是GNU Smalltalk的新手.我知道在大多数编程语言中,有一个import/ #include/ require命令可以让一个源文件访问另一个源文件的内容.我的问题是,如何在GNU Smalltalk中将一个文件导入另一个文件?任何帮助,将不胜感激.谢谢!

import smalltalk gnu-smalltalk

5
推荐指数
1
解决办法
768
查看次数

Pharo:如何使 Cmd+d(“do it”)默认执行整个多行语句,而不仅仅是当前行

假设我有一个像这样的多行语句:

1 to: 5 do: [:i|
  Transcript show: i.
  Transcript cr].
Run Code Online (Sandbox Code Playgroud)

目前,当我将文本光标放在某行上(不选择任何内容)并按 Cmd+d 时,Pharo 会尝试执行当前行。但如果默认情况下(当没有选择任何内容时)Pharo 会执行当前语句(即所有这三行语句),而不仅仅是当前行,这对我来说会更方便。因为这是比“我想执行语句内的这一特定行”更常见的情况(“我想执行整个语句”)(在大多数情况下,这在语法上没有意义,因为第一行和第三行这里)。在这些后面的情况下(当我需要在语句中执行一行时)我会手动预先选择该行。

我怎样才能实现这个目标?

smalltalk pharo

5
推荐指数
1
解决办法
253
查看次数

How to understand this EBNF Pascal Definition

I'm implementing a Pascal parser from this EBNF defintion. There is something I don't understand in the following specifications:

variable
   entire-variable | component-variable | referenced-variable 

entire-variable
   variable-identifier | field-identifier

component-variable
   indexed-variable | field-designator | file-buffer

field-designator
   record-variable "." field-identifier 
Run Code Online (Sandbox Code Playgroud)

Assume we want to apply the variable production on a.b[0]. Since a conforms to the entire-variable production, this will prevent component-variable from detecting the field-designator a.b and therefore the . following a will stop the parser.

pascal ebnf

5
推荐指数
1
解决办法
116
查看次数