我需要在RHEL上安装几个Python模块,我没有root访问权限.至少有一个模块也需要访问Python.h.
在这种情况下,我发现最好的方法是安装python及其依赖项~/local.它通常只是工作,但这次Python无法构建SSL模块(请参阅下面的详细信息).这是我正在做的事情的痕迹.
所以我下载了python 6源码然后关闭了我:
./configure --prefix=/home/fds/rms/local
make >& make.log
Run Code Online (Sandbox Code Playgroud)
对日志的检查显示ssl模块尚未编译,但没有提及原因(make或configure中没有其他ssl出现):
Failed to find the necessary bits to build these modules:
_bsddb _curses _curses_panel
_hashlib _sqlite3 _ssl <----------
Run Code Online (Sandbox Code Playgroud)
所以我想,python根本找不到任何ssl库(这很奇怪,但是嘿......).所以我下载openssl-0.9.8r和
./config --prefix=/home/fds/rms/local shared
make
make install
Run Code Online (Sandbox Code Playgroud)
现在回到Python,我./configure并重新制作.它失败了,但这一次有所不同:
Failed to build these modules:
_hashlib _ssl
Run Code Online (Sandbox Code Playgroud)
仔细检查日志文件可以发现:
gcc -pthread -shared build/temp.linux-x86_64-2.6/home/fds/rms/installers/Python-2.6.6/Modules/_ssl.o -L/home/fds/rms/local/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.6/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: libssl.so.0.9.8: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以现在它正在拿起图书馆,但不是很正确(文件应该在哪里):
$ find /home/fds/rms/local …Run Code Online (Sandbox Code Playgroud) 在Java中编写代码时,通过模拟协作对象,使用组合和依赖注入非常有帮助,从而可以轻松地进行纯单元测试.
我发现在Erlang中做同样的事情并不那么简单,而且代码更脏.
这可能是我的错,因为我对Erlang很新,并且对JUnit,EasyMock和java接口非常沉迷......
假设我有这个愚蠢的功能:
%% module mymod
handle_announce(Announce) ->
AnnounceDetails = details_db:fetch_details(Announce),
AnnounceStats = stats_db:fetch_stats(Announce),
{AnnounceDetails, AnnounceStats}.
Run Code Online (Sandbox Code Playgroud)
在单元测试时mymod,我只想证明details_db并stats_db使用正确的参数调用,并且正确使用了返回值.在其他地方测试details_db和stats_db生成正确值的能力.
为了解决这个问题,我可以这样重构我的代码:
%% module mymod
handle_announce(Announce, [DetailsDb, StatsDb]) ->
AnnounceDetails = DetailsDb:fetch_details(Announce),
AnnounceStats = StatsDb:fetch_stats(Announce),
{AnnounceDetails, AnnounceStats}.
Run Code Online (Sandbox Code Playgroud)
并以这种方式进行测试(基本上将调用直接存入测试模块):
%% module mymod_test
handle_announce_test() ->
R = mymod:handle_announce({announce, a_value}, [?MODULE, ?MODULE, ?MODULE]),
?assertEqual({details,stats}, R).
fetch_details({announce, a_value}) ->
details.
fetch_stats({announce, a_value}) ->
stats.
Run Code Online (Sandbox Code Playgroud)
它工作正常,但应用程序代码变脏了,我总是要随身携带那些丑陋的模块列表.
我尝试了几个模拟库(erlymock和(另一个),但我并不满意.
你如何对你的erlang代码进行单元测试?
谢谢!
我正在尝试在Intellij IDEA(最新的社区版本,最新的Scala插件)中运行scala flatspec测试,但我不断收到"空测试套件"错误.
我尝试右键单击使用正常的"运行"菜单,但它不起作用.我也尝试过创建一个新的ScalaTest配置,但是跑步者仍然没有接受测试.
我能够将JScalaTest与单元一起使用,但我更喜欢使用flatspec语法.
更新:注释类@RunWith(classOf[JUnitRunner])并没有帮助
谢谢!
class SampleTestSpec extends FlatSpec with ShouldMatchers {
"test" should "fail" in {
"this" should equal ("that")
}
}
Run Code Online (Sandbox Code Playgroud)
更新:从ScalaTest切换到Spec,解决了问题.我仍然更喜欢使用FlatSpec的ScalaTest,但这已经足够了.有效的代码:
import org.specs._
object SampleTestSpec extends Specification {
"'hello world' has 11 characters" in {
"hello world".size must be equalTo(113)
}
"'hello world' matches 'h.* w.*'" in {
"hello world" must be matching("h.* w.*")
}
}
Run Code Online (Sandbox Code Playgroud)
-TeO
在Erlang中有一种方式引用当前正在执行的函数)?
这对产生无限循环很有用:
spawn(fun() -> do_something, this_fun() end)
Run Code Online (Sandbox Code Playgroud)
在JavaScript arguments.callee中就是这样,请参阅MDC规范.
编辑回答'为什么你会这样做':主要是好奇心; 在prorotyping时定义一个计时器也很有用:
Self = self(),
spawn(fun() -> Self ! wake_up, receive after 1000 -> nil end, this_fun() end),
%% ...
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用应用程序域从控制台应用程序启动WPF应用程序,但是当我这样做时,我收到意外错误.
可以独立运行WPF应用程序.
这段代码也适用:
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var path = string.Format("{0}AddressbookDesktop.exe", baseDirectory);
var processInfo = new ProcessStartInfo(path, "");
Process.Start(processInfo);
Run Code Online (Sandbox Code Playgroud)
但是此代码失败并出现以下错误.错误似乎在构造函数中,该构造函数为空:
var addressbookDomain = AppDomain.CreateDomain("addressbookDomain");
addressbookDomain.ExecuteAssembly("AddressbookDesktop.exe");
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
System.Windows.Markup.XamlParseException: Cannot create instance of
'AddressbookMainWindow' defined in assembly 'AddressbookDesktop, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null'. Exception has been thrown
by the target of an invocation. Error in markup file 'AddressbookMainWindow.xaml' Line 1 Position 9.
---> System.Reflection.TargetInvocationException: Exception has been thrown by the
target of an invocation. ---> System.InvalidOperationException: The calling thread must
be STA, because many …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Scala编写性能测量库.我的想法是透明地"标记"部分,以便可以收集执行时间.不幸的是我无法按照我的意愿弯曲编译器.
一个公认的例子,说明了我的想法:
// generate a timing function
val myTimer = mkTimer('myTimer)
// see how the timing function returns the right type depending on the
// type of the function it is passed to it
val act = actor {
loop {
receive {
case 'Int =>
val calc = myTimer { (1 to 100000).sum }
val result = calc + 10 // calc must be Int
self reply (result)
case 'String =>
val calc = myTimer { (1 to 100000).mkString …Run Code Online (Sandbox Code Playgroud) 我们正在将仅限jsp的应用程序迁移到Spring-MVC.由于各种原因,我们无法更改当前页面的扩展名.(对login.jsp的调用需要由将使用jsp文件作为视图的spring控制器处理).
我们正在迭代地执行此操作,因此一些页面需要保留jsp文件(对welcome.jsp的调用将不会由控制器处理).
为此,我将DispatcherDervlet和HandlerMapping映射到*.jsp,并以标准方式配置JstlView.
不幸的是,如果我浏览到//login.jsp,我会收到错误消息
<No mapping found for HTTP request with URI [/<context>/WEB-INF/jsp/login.jsp] in DispatcherServlet with name 'spring'>
Run Code Online (Sandbox Code Playgroud)
如果我将.jsp更改为DispatcherServlet和HandlerMapping中的任何其他扩展名,则一切正常.
web.xml中:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
为spring-servlet.xml:
<!-- View resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- URL Mapping -->
<bean id="publicUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/login.jsp" value-ref="loginController"/>
</map>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
非常感谢.
更新:我刚刚验证过,如果我将.jsp文件重命名为其他东西(.jst)并相应地更新viewResolver,那么一切正常.显然,如果视图被解析为扩展名为.jsp的文件,spring会尝试将视图转发到另一个控制器.
我一遍又一遍地发现自己按照指南在C#中实现事件,然后当客户端代码不需要指南添加的任何好处时,回到使用Action的更简单的实现.
可以说,我将添加省略发送方对象,除非它实际需要是一件好事,因为它促进了触发器和处理程序的分离.更一般地说,我认为避免编写不需要的代码是一个好习惯.
我并不是说应该总是驳回指南,遵循它们会有好处(见下面的链接).我的问题是我是否应该一直遵循它.
下面的示例显示了如何将"天真事件"模式与指南模式进行比较.
// This is neat
class NaiveEvents
{
public event Action<string> OnAlert;
public void TriggerOnAlert(string message)
{
OnAlert(message);
}
}
// Is this bloated?
class ProperEvents
{
public event EventHandler<OnAlertEventArgs> OnAlertEvent;
public void TriggerOnAlert(string message)
{
OnAlertEvent(this, new OnAlertEventArgs(message));
}
public class OnAlertEventArgs : EventArgs
{
private readonly string _message;
public OnAlertEventArgs(string message)
{
_message = message;
}
public string Message { get { return _message; } }
} …Run Code Online (Sandbox Code Playgroud) 我有一个正在运行的erlang应用程序,使用此命令行启动
erl -boot start_sasl -config config/cfg_qa -detached -name peasy -cookie peasy -pa ./ebin -pa ./ebin/mochiweb -s peasy start
Run Code Online (Sandbox Code Playgroud)
如果我启动一个新节点并运行appmon:start(),即使使用相同的cookie,'peasy'节点也不会显示.webtool也是如此:start()
任何人?
我在erlang写了一个bittorrent跟踪器.鉴于服务的性质,我不需要绝对的一致性(即客户可以完全满意稍微过时的同行列表或torrent状态).
到目前为止,我的策略是在启用了disc_copies的情况下在RAM中创建mnesia表,以便在日志大小超过特定大小时让mnesia自动将内存转储到磁盘.
如果服务器崩溃,某些信息将丢失.没有大碍.
另一种方法是实例化两个表(仅一个ram和一个磁盘),并且每分钟左右都有一个从ram到磁盘的进程副本.这更天真,但是只允许转储内存中的一部分,减少整体磁盘开销,并可能完全避免使用日志(我实际上不确定这最后的语句).
我确信还有很多其他方法可以做到这一点.你的是啥呢?
-TeO
我正在使用Restlet 2.1与jackson构建一个json REST api.
当我使用预期的内容类型但是格式错误的主体发出请求时,我会收到415"Unsuppored Media Type"状态代码.我认为正确的错误代码应为400"错误请求".
显然,当杰克逊尝试并且无法解码垃圾时,混合就会发生.
我将尝试用一些代码使案例更清晰:
// java method mapping
@Post("json")
public Project create(Project project) {
Run Code Online (Sandbox Code Playgroud)
curl的服务调用
$ curl -i -XPOST -H 'content-type: application/json' -d '{xgarbage}' http://localhost:8080/projects HTTP/1.1 415 Unsupported Media Type
Run Code Online (Sandbox Code Playgroud)
并且堆栈跟踪的碎片记录在日志中:
Nov 29, 2010 9:51:56 PM org.restlet.ext.jackson.JacksonRepresentation getObject
WARNING: Unable to parse the object with Jackson.
org.codehaus.jackson.JsonParseException: Unexpected character ('x' (code 120)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: java.io.ByteArrayInputStream@693e4a5a; line: 1, column: 2]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:929)
Run Code Online (Sandbox Code Playgroud)
该服务的实际实现从未被命中,因此某处决定将乱码内容映射到415.
现在,我的问题是:这是正确的吗?如果我正确地阅读了"RESTful …
说我有
一个按钮,将触发这样的JavaScript
如果浏览器要显示内嵌pdf,按钮会显示"查看pdf",点击后会显示iframe
否则会说"下载pdf"
我找到了一种方法来检测pdf已经加载到iframe中:在onload触发后读取iframe.contentDocument.contentType,但是
谢谢 :)
erlang ×4
c# ×2
java ×2
scala ×2
unit-testing ×2
.net ×1
compilation ×1
content-type ×1
currying ×1
erlang-otp ×1
events ×1
jackson ×1
javascript ×1
jsp ×1
mnesia ×1
mocking ×1
openssl ×1
python ×1
rest ×1
restlet-2.0 ×1
scalatest ×1
spring ×1
spring-mvc ×1
tomcat ×1
wpf ×1