当我将一些代码转换为OTP应用程序时,我正在努力解决OTP开发模型.
我本质上是一个网络爬虫,我只是不知道在哪里放置实际工作的代码.
我有一个主管,开始我的工人:
-behaviour(supervisor).
-define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}).
init(_Args) ->
Children = [
?CHILD(crawler, worker)
],
RestartStrategy = {one_for_one, 0, 1},
{ok, {RestartStrategy, Children}}.
Run Code Online (Sandbox Code Playgroud)
在此设计中,Crawler Worker负责执行实际工作:
-behaviour(gen_server).
start_link() ->
gen_server:start_link(?MODULE, [], []).
init([]) ->
inets:start(),
httpc:set_options([{verbose_mode,true}]),
% gen_server:cast(?MODULE, crawl),
% ok = do_crawl(),
{ok, #state{}}.
do_crawl() ->
% crawl!
ok.
handle_cast(crawl}, State) ->
ok = do_crawl(),
{noreply, State};
Run Code Online (Sandbox Code Playgroud)
do_crawl产生了大量的进程和请求,用于处理通过http进行爬网的工作.
问题,最终是:实际抓取应该在哪里发生?从上面可以看出,我一直在尝试不同的触发实际工作的方法,但仍然缺少一些对于整合事物的方式至关重要的概念.
注意:为简洁起见,省略了一些OTP管道 - 管道就在那里,系统全部挂在一起
我正在运行GlassFish Server Open Source Edition 3.0.1(版本22).在我的开发环境(Mac OSX,4核和8GB RAM)和生产(Linux,2核,4GB)中,控制台启动都非常缓慢.
机器很大程度上是空闲的.什么是玻璃鱼呢?有什么需要调整才能让它更快启动?
更新1:
示例 - 我一直在尝试复制一些我在本地实现并测试到我的服务器的JDBC配置.我只是浪费了一小时试图复制配置因为我不能同时打开dev和prod glassfish控制台而没有其中一个超时.
我将打开开发控制台,然后最终生成一个,但是当我在开发窗口中单击它时它已经超时,现在尝试重新启动.
疯了吧.一小时复制一个简单的JDBC连接?有没有人真正成功地在生产中成功使用它?
更新:2
我发现两件事情产生了巨大的变化:
Glassfish UI的Ajax方面看起来非常脆弱.我打开了两个浏览器标签,一个打开,localhost:4848另一个打开localhost:9000.第一个选项卡是实际在localhost上运行的glassfish服务器.第二个是远程服务器,端口转发以通过ssh显示为本地服务器.通常这不是问题,但我怀疑它会混淆glassfish中的会话处理,以便在同一个"主机"上看到两个服务器,即使它们位于不同的端口上.
我将3.0更新为3.1.这似乎已经消除了很多启动延迟.
我希望这篇文章可以帮助别人不受这种创伤.谢谢大家的建议.
我们有一个模型关联,看起来像这样:
class Example < ActiveRecord::Base
has_many :others, :order => 'others.rank'
end
Run Code Online (Sandbox Code Playgroud)
rank列是整数类型.虽然我们发现其他模型之间的其他has_many关联存在同样的问题,但这些特定模型的细节并不重要.
我们还添加了Enumerable模块:
module Enumerable
def method_missing(name)
super unless name.to_s[0..7] == 'collect_'
method = name.to_s[8..-1]
collect{|element| element.send(method)}
end
end
Run Code Online (Sandbox Code Playgroud)
这会添加一个collect_id方法,我们可以使用它从ActiveRecord对象数组中获取记录ID数组.
因此,如果我们使用普通的ActiveRecord find:all,我们得到一个很好的数组,然后我们可以使用collect_id,但如果我们使用Example.others.collect_id,我们得到
NoMethodError: undefined method `collect_id' for #<Class:0x2aaaac0060a0>
Run Code Online (Sandbox Code Playgroud)
Example.others.class返回"数组",所以它是说谎还是混淆?
到目前为止,我们的解决方案一直是这样使用它:
Example.others.to_a.collect_id
Run Code Online (Sandbox Code Playgroud)
这有效,但这似乎有点奇怪.你为什么要那样做?
我们使用的是Ruby 1.8.7和Rails 2.3.4
我从他们的网站安装了Microsoft Scrum 1.0模板,安装时没有任何错误,但是当我尝试创建一个新的团队项目时,它没有显示在模板列表中.只有MSF Agile和MSF CMMI.
可能是什么导致了这个?
cortex M3处理器启动文件允许您指定专用于堆栈和堆的RAM量.对于c ++代码库,是否有一般的经验法则或者更明确的方法来确定堆栈和堆大小的值?例如,您是否会计算唯一对象的数量和大小,或者使用已编译的代码大小?
有人可以解释为什么以下代码将无法编译(格式奇怪,使其更容易看到问题):
ListView ^ listview = gcnew ListView();
listview->Items->AddRange( gcnew array<ListViewItem^> {
gcnew ListViewItem( gcnew array<String^> { L"red", L"fish" } ),
gcnew ListViewItem( gcnew array<String^> { L"green", L"eggs" } )
});
Run Code Online (Sandbox Code Playgroud)
这给出了编译错误
错误C2440:'初始化':无法从'const wchar_t [4]'转换为'System :: Windows :: Forms :: ListViewItem ^'
如果代码分为两行,如下所示,那么一切都很好:
ListView^ listview = gcnew ListView();
ListViewItem^ lvi1 = gcnew ListViewItem( gcnew array<String^> { L"red", L"fish" } );
ListViewItem^ lvi2 = gcnew ListViewItem( gcnew array<String^> { L"green", L"eggs" } );
listview->Items->AddRange( gcnew array<ListViewItem^> {
lvi1,
lvi2
});
Run Code Online (Sandbox Code Playgroud)
忽略为什么有人想制作一个单片的单行来填充ListView,为什么编译器在原始代码中设置ListViewItems有困难,以及如何编写这样的单行程序?
我正在使用第三方服务,该服务对我提供给他们的URL执行异步回调.所以我告诉他们使用http://www.mysite.com/Status/Incoming.这显然必须映射到我的StatusController上的Incoming()方法.
但是,我无法控制的是他们称之为URL的参数格式.例如,他们将进行回调,例如:http://www.mysite.com/Status/Incoming?param1 = val1¶m2 = val2¶m3 = val3
我想将此映射到我的action方法的参数:Incoming(string param1,string param2,int param3)
我该怎么做呢?
我发现了许多关于自定义路由的东西,但没有关于遗留的QueryString参数.
我一直在和这个争斗几天.我正在尝试写一个小的自定义评级栏.有一些自定义图像.当我检查我的HTC Desire上的图像时,图像看起来非常混乱.我尝试过使用不同的分辨率和不同的尺寸,仍然无法弄清楚什么样的分辨率/如何创造出好的质量.
我已经阅读了android网站上的指南,但无济于事.我认为我遇到的问题是在更高的dpi显示器上显示更低分辨率的图像.因此系统升级了图像.但我不知道如何解决这个问题.分辨率更高的图像 更大的图像?
任何建议都会很棒.
亚历克斯
之间的区别
const char *p
Run Code Online (Sandbox Code Playgroud)
和
char * const p?
Run Code Online (Sandbox Code Playgroud)
是拳头一个意思是不能改变char.后来一种方法无法改变指针.我对吗?谢谢!
我是Mathematica的新手,我在向数据表中添加列时遇到了严重的故障.我在Vista中运行Mathematica 7.在问这里之前我花了很多时间做RFD.
我有一个包含三列五行的数据表(mydata).我正在尝试向表中添加两个包含五个元素的列表(有效地向数据表添加两列).
这非常有效:
Table[AppendTo[mydata[[i]],myfirstlist[[i]]],{i,4}]
Run Code Online (Sandbox Code Playgroud)
打印出表格:mydata // TableForm显示添加的列.
但是,当我尝试添加我的第二个列表时
Table[AppendTo[mydata[[i]],mysecondlist[[i]]],{i,5}]
Run Code Online (Sandbox Code Playgroud)
无论是数学崩溃(!)或者,我得到的转换Part::partw和Part::spec错误说第5部分不存在.
但是,在所有错误消息(如果Mathematica没有崩溃)之后,再次打印出数据表:mydata // TableForm显示数据表有五列,就像我想要的那样.TableForm修订数据表上的所有格式选项都可以正常工作.
谁能告诉我我做错了什么?提前致谢!
android ×1
architecture ×1
arm ×1
asp.net-mvc ×1
associations ×1
c ×1
c++ ×1
c++-cli ×1
const ×1
cortex-m3 ×1
embedded ×1
erlang ×1
erlang-otp ×1
glassfish ×1
ruby ×1
scrum ×1
tfs ×1
tfs2010 ×1
uiimage ×1