|
From: Murphy, J. T. <jtm...@an...> - 2011-07-27 12:19:51
|
Kashif,
I'm glad your code is compiling.
Just by looking, I can't find an error in the code you've posted. I am
having trouble figuring out exactly what are the problems that you are
having. It looks like what you want to happen is:
-------------------------------------------
I) All patches are initially marked '-1' for the isTunnel variable
II) You then mark some of them with a '1' flag (code not shown)
III) The code you have sent is invoked for each agent of type 'AmI'; it:
A) Retrieves the set of all patches (which should include some that are
'-1' and a few that have been marked '1') called 'allPatches'
B) Uses 'withMax' to retrieve just the ones with isTunnel = 1, and place
them into 'somePatches'
C) Selects one of the patches from 'somePatches' using 'minOneOf'
D) Sets a pointer in the AmI agent to point to this patch
You say that there is a problem with 'B'; it actually returns a set with
patches that have isTunnel = -1. It seems likely that the problem is that
none of the patches that are retrieved by the 'A' actually has a value of
'1'. The first thing to check is whether any of the patches in
'allPatches' has a value of 1. I would just iterate through and print out
all their values as a first test. If the answer is no, and all of the
patches in 'allPatches' have a value of -1, then the next question is
whether the code where you try to set some of the values to '1' is working
correctly and is being called prior to this code. You might also check
whether the size of 'allPatches' is what you expect: it should be the
equal to the number of patches being managed by that process, but if it
excludes some patches (like the ones with -1), then that's a different
issue.
You also say that there is a problem with 'C'; you actually say that there
is an error here. Is this a run-time error that causes the program to
crash? If so, what is the output? Please include the entire text of the
error output.
You say "The error was generated at line: patchExt* selectedPatch =
somePatches.minOneOf(DistanceToPatch());, because somePatches never had
any patches." I don't know how to interpret this. If 'allPatches' had
patches in it (after step 'A'), then there should be patches in
'somePatches' in step B. Are you saying that 'somePatches' is empty (size
= 0) after step B? Even then, if somePatches is empty, step 'C' should not
cause an error; the error should be thrown at step D, I think.
As to your other question, the use of (0, false) in the implicit
construction of the AgentPackage (in the Zombies model) is fine- the
values are immediately overwritten if the agent is 'human' and ignored if
it is a 'zombie'. Possibly the 0 and false could be omitted, but it's good
form to include them.
Best,
John
--
John T. Murphy
Computational Postdoctoral Fellow
Decision and Information Sciences and
Argonne Leadership Computing Facility
Argonne National Laboratory
jtm...@an...
On 7/27/11 6:01 AM, "Kashif Zia" <ka...@pe...> wrote:
>Hello John and everyone
>
>There is one good and one bad news. Good one is that I have finally
>compiled
>and run the program (my program). Bad is that it is not doing what I
>intended.
>
>Actually the error was generated at the point when I wanted initialize the
>target patch in the setup. The intention was to save the patch (AgentId)
>in
>each of the agent type AmI; i.e. a patch with variable isTunnel set to 1
>(instead of default -1) and nearest to agent. The code of class
>responsible
>for that is:
>
>#include "InitializeTarget.h"
>
>#include "patchExt.h"
>AmI* d;
>struct DistanceToPatch {
> double operator()(const patchExt* patch) const {
> double dist;
> dist = d->distancexy(patch->xCor(), patch->yCor());
> return dist;
> }
>};
>
>int valGetter_is_Tunnel(patchExt* myPatch){ return myPatch->isTunnel();}
>
>void InitializeTarget::operator()(AmI* device) const {
> d = device;
> AgentSet<patchExt> allPatches = obs->patches<patchExt>();
> AgentSet<patchExt> somePatches;
>
> allPatches.withMax(&valGetter_is_Tunnel, somePatches);
> patchExt* selectedPatch = somePatches.minOneOf(DistanceToPatch());
>
> device->settargetPID(selectedPatch->getId());
>}
>
>The error was generated at line: patchExt* selectedPatch =
>somePatches.minOneOf(DistanceToPatch());, because somePatches never had
>any
>patches. allPatches has all patches with isTunnel = -1 (which should not
>have happen as well. Before I had set few patches where isTunnel = 1).
>After
>removing the culprit and just picking one of the patch, it worked:
>
>#include "InitializeTarget.h"
>
>#include "patchExt.h"
>AmI* d;
>struct DistanceToPatch {
> double operator()(const patchExt* patch) const {
> double dist;
> dist = d->distancexy(patch->xCor(), patch->yCor());
> return dist;
> }
>};
>
>int valGetter_is_Tunnel(patchExt* myPatch){ return myPatch->isTunnel();}
>
>void InitializeTarget::operator()(AmI* device) const {
> d = device;
> AgentSet<patchExt> allPatches = obs->patches<patchExt>();
> AgentSet<patchExt> somePatches;
>
> //allPatches.withMax(&valGetter_is_Tunnel, somePatches);
> //patchExt* selectedPatch =
>somePatches.minOneOf(DistanceToPatch());
> patchExt* selectedPatch = allPatches.oneOf();
>
> device->settargetPID(selectedPatch->getId());
>}
>
>However this is not the behavior I need.
>
>
>
>One more question: why in
>
> void provideContent(const repast::AgentRequest& request,
>std::vector<AgentPackage>& out);
> void provideContent(repast::relogo::RelogoAgent* agent,
>std::vector<AgentPackage>& out);
>
>the constructors are initialized with default values (0, false).
>
>AgentPackage content = { id.id(), id.startingRank(), id.agentType(), 0,
>false };
>
>Is it technically correct.
>
>
>
>Your feedback would be valuable.
>
>With Best Regards.
>
>
>
>---
>Kashif Zia
>
>PhD Candidate
>Institut für Pervasive Computing, Johannes Kepler Universität Linz,
>Altenberger Straße 69, A-4040 Linz
>Room: P105, Phone: +43-732-2468-9673, Fax: +43-732-2468-8426
>E-Mail: ka...@pe...
>
>
>-----Original Message-----
>From: Murphy, John T. [mailto:jtm...@an...]
>Sent: Tuesday, July 26, 2011 4:03 PM
>To: rep...@li...
>Subject: Re: [Repast-interest] Extending Patch class in Repast HPC
>
>Yes, this does look like a different error than before; it isn't giving
>very
>much information about what is happening, either.
>
>But (per my earlier e-mail) notice that you are invoking by:
>
>mpiexec zombie_model.exe config.props zombie.props
>
>but the proc.per.x and proc.per.y values in the properties file are 2 x 2,
>which means you need exactly 4 processes. Try:
>
>mpiexec /np 4 zombie_model.exe config.props zombie.props
>
>It is possible that this is the problem; try it and see what happens.
>
>Best,
>John
>
>--
>John T. Murphy
>Computational Postdoctoral Fellow
>Decision and Information Sciences and
>Argonne Leadership Computing Facility
>Argonne National Laboratory
>jtm...@an...
>
>From: Kashif Zia <ka...@pe...<mailto:ka...@pe...>>
>Date: Tue, 26 Jul 2011 08:51:18 -0500
>To: "Murphy, John T." <jtm...@an...<mailto:jtm...@an...>>,
>"rep...@li...<mailto:rep...@li...
>fo
>rge.net>"
><rep...@li...<mailto:rep...@li...
>fo
>rge.net>>
>Subject: RE: [Repast-interest] Extending Patch class in Repast HPC
>
>
>Zombie_model: So now the program is just crashing not even completing the
>setup:
>
>'zombie_model.exe': Loaded 'C:\Dokumente und Einstellungen\kashif\Eigene
>Dateien\Visual Studio
>2010\Projects\RepastHPC_Solution\RepastHPC\Debug\zombie_model.exe',
>Symbols
>loaded.
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\msmpi.dll'
>
>'zombie_model.exe': Loaded
>'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_
>x-
>ww_44262b86\msvcr80.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\secur32.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\mswsock.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\ws2_32.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\ws2help.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\msvcp100d.dll', Symbols
>loaded.
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\msvcr100d.dll', Symbols
>loaded.
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\dnsapi.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\iphlpapi.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\user32.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\imm32.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\lpk.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\usp10.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\winrnr.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\wldap32.dll'
>
>'zombie_model.exe': Loaded 'C:\Programme\Bonjour\mdnsNSP.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\hnetcfg.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\wshtcpip.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\msv1_0.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\cryptdll.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\rasadhlp.dll'
>
>'zombie_model.exe': Loaded 'C:\WINDOWS\system32\apphelp.dll'
>
>Unhandled exception at 0x005a9736 in zombie_model.exe: 0xC0000005: Access
>violation reading location 0x00000000.
>
>The command used is:
>
>mpiexec zombie_model.exe config.props zombie.props
>
>And the props files are:
>
>Zombie.props:
>
>#random.seed = 1284067381
>
>stop.at = 100
>
># per process
>
>human.count = 500;
>
>zombie.count = 5;
>
># world definition props
>
>min.x = -100
>
>min.y = -100
>
>max.x = 101
>
>max.y = 101
>
>grid.buffer = 2
>
># these must multiply to total number of processes
>
>proc.per.x = 2
>
>proc.per.y = 2
>
># named random number distributions
>
>distribution.zombie_move = int_uniform, 0, 2
>
>config.props:
>
># DEBUG, INFO, WARN, ERROR
>
>logger.root = INFO, R, stdout
>
>logger.repast.system = DEBUG, R, stdout
>
>
>
>appender.R = RollingFileAppender
>
>appender.R.MaxBackupIndex = 1
>
>appender.R.File = ./logs/repast.log
>
>appender.R.MaxFileSize=200
>
>
>Best,
>
>Kashif
>
>---
>
>Kashif Zia
>
>PhD Candidate
>
>Institut für Pervasive Computing, Johannes Kepler Universität Linz,
>Altenberger Straße 69, A-4040 Linz
>
>Room: P105, Phone: +43-732-2468-9673, Fax: +43-732-2468-8426
>
>E-Mail: ka...@pe...<mailto:ka...@pe...>
>
>-----Original Message-----
>From: Murphy, John T. [mailto:jtm...@an...]
>Sent: Tuesday, July 26, 2011 3:39 PM
>To:
>rep...@li...<mailto:rep...@li...
>or
>ge.net>
>Subject: Re: [Repast-interest] Extending Patch class in Repast HPC
>
>Kashif,
>
>Thanks for this; this makes some things a lot clearer.
>
>You are correct about Rumor Model; the graph network is initialized
>
>explicitly at startup and managed by RepastHPC through the course of the
>
>running simulation.
>
>You are also correct that there is no 'explicit' assignment of cells to a
>
>particular processor. ReLogo does this automatically and implicitly. It
>
>begins with the properties file: min.x, min.y, max.x, and max.y
>
>properties. These are the properties for the entire world that is being
>
>defined: the maximum and minimum extents of the x and y directions are
>
>given. Then it looks at the proc.per.x and proc.per.y properties. It uses
>
>these to create a grid that divides up the whole landscape into a
>
>cartesian grid. So, if:
>
>min.x = -100
>
>min.y = -100
>
>max.x = 101
>
>max.y = 101
>
>proc.per.x = 10
>
>proc.per.y = 5
>
>Then the space is 200 x 200, and it is divided up into a 10 x 5 Cartesian
>
>grid, with each of the 50 elements on this grid going on a different
>
>processor. This is why if proc.per.x = X and proc.per.y = Y, then the
>
>number of processors must be = X x Y (that is, x and y multiplied)- in
>
>this case /np 50. (Note: Usually the number of processes is a power of
>
>two. Also, I'll check on why '101' is used and not '100'... I'm following
>
>the model in the zombies property file here...)
>
>This means that a given cell (say, x = -25, y = 37) is on a specific
>
>processor depending on where it is on the processor Cartesian grid;
>
>RepastHPC handles this automatically. When agents move around on the grid
>
>they will move from processor to processor- also handled automatically.
>
>Generally your program should _not_ try to determine which process is
>
>controlling a given patch; the code should be written to manage whatever
>
>agents or patches are present, and otherwise rely on RepastHPC to manage
>
>what is going on under the hood.
>
>I am not sure whether indexing or iterating through an agent set is
>
>faster; under the hood an agent set is a vector, and iterators are more
>
>customarily used, but in terms of absolute performance, I don't know if
>
>there is an argument for one over the other. My hunch is that the iterator
>
>is slightly faster, but I haven't checked. A 'const' iterator may be able
>
>to be optimized by the compiler in ways that a normal one can't, and this
>
>can help.
>
>Best,
>
>John
>
>--
>
>John T. Murphy
>
>Computational Postdoctoral Fellow
>
>Decision and Information Sciences and
>
>Argonne Leadership Computing Facility
>
>Argonne National Laboratory
>
>jtm...@an...<mailto:jtm...@an...>
>
>
>
>
>On 7/26/11 8:09 AM, "Kashif Zia"
><ka...@pe...<mailto:ka...@pe...>> wrote:
>
>>John,
>
>>
>
>>What I mean by precompiled is the exe file in "example_bin" of the
>
>>distribution. And the other one is my compilation with VS. It means that
>
>>if
>
>>those programs were running then there must be something wrong with
>>system
>
>>specifications of mine. Most probably that is related with number of
>
>>processors available. However this is only valid for zombie not for
>
>>rumor.
>
>>
>
>>I am trying to get into rumor model now. Need some time. But what I have
>
>>seen there is that "probably" the graph network is explicitly distributed
>
>>between the processors and managed later on. Zombie is grid based and I
>
>>have
>
>>seen no explicit assignment of cells to a particular processor.
>
>>
>
>>Shortly I will send you the traces of the zombie model.
>
>>
>
>>Agentset iteration problem is solved. One question though: I have used
>
>>index
>
>>(someTurtles [i]) to get all agents in a for loop. I think it is working.
>
>>Is
>
>>there any performance issue comparing it with iterator mechanism?
>
>>
>
>>Best Regards.
>
>>
>
>>
>
>>---
>
>>Kashif Zia
>
>>
>
>>PhD Candidate
>
>>Institut für Pervasive Computing, Johannes Kepler Universität Linz,
>
>>Altenberger Straße 69, A-4040 Linz
>
>>Room: P105, Phone: +43-732-2468-9673, Fax: +43-732-2468-8426
>
>>E-Mail: ka...@pe...<mailto:ka...@pe...>
>
>>
>
>>
>
>>-----Original Message-----
>
>>From: Murphy, John T. [mailto:jtm...@an...]
>
>>Sent: Tuesday, July 26, 2011 2:48 PM
>
>>To:
>rep...@li...<mailto:rep...@li...
>or
>ge.net>
>
>>Subject: Re: [Repast-interest] Extending Patch class in Repast HPC
>
>>
>
>>Kashif,
>
>>
>
>>At this point we have tried a number of variations and revisions, and
>>it's
>
>>no longer clear to me which error goes with which problem (or even with
>
>>which model- the Zombies model or your new model) and under what
>
>>conditions each error occurs. I've lost track. The error that you are
>
>>getting for your 'simple_following_model' occurs during setup, but the
>
>>error that you were getting for the Zombies model occurs during a
>>'moveTo'
>
>>operation. They may have the same root cause, but for now let's work on
>
>>just one of them. I recommend the Zombies model first, because I have all
>
>>the code for it already.
>
>>
>
>>If you send me the full output you are getting when you run the Zombies
>
>>model, and the command line and the properties file that you use when you
>
>>get that specific error, I'm sure we can figure it out. Also, I'm not
>>sure
>
>>what you mean by 'the compiled form' vs. 'when you compiled it using VS';
>
>>do you have two different systems that you are using it on, and if so
>>what
>
>>are they?
>
>>
>
>>Best,
>
>>John
>
>>
>
>>--
>
>>John T. Murphy
>
>>Computational Postdoctoral Fellow
>
>>Decision and Information Sciences and
>
>>Argonne Leadership Computing Facility
>
>>Argonne National Laboratory
>
>>jtm...@an...<mailto:jtm...@an...>
>
>>
>
>>
>
>>
>
>>
>
>>On 7/26/11 3:29 AM, "Kashif Zia"
><ka...@pe...<mailto:ka...@pe...>> wrote:
>
>>
>
>>>Hello John
>
>>>
>
>>>I ran rumor model both in compiled form and when I compiled it using VS.
>
>>>It
>
>>>running perfect. For zombie_model, even the compiled example (with given
>
>>>props files) is giving the same access violation error.
>
>>>
>
>>>So it can be concluded that there is some problem with parallelism in
>
>>>zombie
>
>>>model when it is running on my system. I do not know what?
>
>>>
>
>>>With Best Regards.
>
>>>
>
>>>
>
>>>---
>
>>>Kashif Zia
>
>>>
>
>>>PhD Candidate
>
>>>Institut für Pervasive Computing, Johannes Kepler Universität Linz,
>
>>>Altenberger Straße 69, A-4040 Linz
>
>>>Room: P105, Phone: +43-732-2468-9673, Fax: +43-732-2468-8426
>
>>>E-Mail: ka...@pe...<mailto:ka...@pe...>
>
>>>
>
>>>
>
>>>-----Original Message-----
>
>>>From: Murphy, John T. [mailto:jtm...@an...]
>
>>>Sent: Tuesday, July 26, 2011 3:30 AM
>
>>>To:
>rep...@li...<mailto:rep...@li...
>or
>ge.net>
>
>>>Subject: Re: [Repast-interest] Extending Patch class in Repast HPC
>
>>>
>
>>>Kashif,
>
>>>
>
>>>You should be able to run with the /np 4 switch even on a machine with
>
>>>only
>
>>>two processors; the additional processes are run as separate threads. It
>
>>>won't be as fast as on a machine with 4 independent processors, but it
>
>>>should run.
>
>>>
>
>>>That said, the proc.per.x and proc.per.y properties in the Zombies model
>
>>>have to match the number of processes when they are multiplied, not
>
>>>added.
>
>>>The properties indicate the number of processes in the 'x' and 'y'
>
>>>directions in the model's space; 2 x 2 = 4, 2 x 4 = 8, etc., are valid,
>
>>>but
>
>>>the last settings you say you used, proc.per.x = 1, proc.per.y = 1, /np
>>>2
>
>>>are not.
>
>>>
>
>>>I'll have to check on the error tomorrow. There is no actual error shown
>
>>>in
>
>>>the text you sent. Could you re-send? Or you can wait until your cluster
>
>>>is
>
>>>installed and try again then.
>
>>>
>
>>>Best,
>
>>>John
>
>>>
>
>>>John T. Murphy, PhD, M.A. Ed.
>
>>>Computational Postdoctoral Fellow
>
>>>Argonne National Laboratory
>
>>>jtm...@an...<mailto:jtm...@an...>
>
>>>________________________________________
>
>>>From: Kashif Zia
>>>[ka...@pe...<mailto:ka...@pe...>]
>
>>>Sent: Monday, July 25, 2011 7:49 AM
>
>>>To: Murphy, John T.;
>rep...@li...<mailto:rep...@li...
>or
>ge.net>
>
>>>Subject: RE: [Repast-interest] Extending Patch class in Repast HPC
>
>>>
>
>>>Hello John
>
>>>
>
>>>My error remains there.
>
>>>
>
>>>About number of processors, it seems to be reason. Unfortunately I only
>
>>>can
>
>>>use my own system with 2 processors right now. With switch np = 4, the
>
>>>following error is generated:
>
>>>
>
>>>>
>
>>>>simple_following_model.exe!std::vector<double,std::allocator<double>
>
>>>>::size() Line 879 + 0x6 bytes C++
>
>>>
>
>>>simple_following_model.exe!std::vector<double,std::allocator<double>
>
>>>>::operator[](unsigned int _Pos=0) Line 914 + 0x8 bytes C++
>
>>>
>
>>>simple_following_model.exe!repast::Point<double>::operator[](unsigned
>>>int
>
>>>index=0) Line 206 C++
>
>>> simple_following_model.exe!repast::relogo::RelogoAgent::xCor()
>
>>>Line
>
>>>51 + 0xd bytes C++
>
>>> simple_following_model.exe!InitializeTarget::operator()(AmI *
>
>>>device=0x02544e00) Line 25 + 0x8 bytes C++
>
>>>
>
>>>simple_following_model.exe!repast::relogo::AgentSet<AmI>::apply<Initiali
>>>z
>
>>>e
>
>>>Ta
>
>>>rget>(const InitializeTarget & func={...}) Line 412 + 0x13 bytes
>
>>>C++
>
>>> simple_following_model.exe!FollowingObserver::initializeAmIDir()
>
>>>Line 56 + 0x34 bytes C++
>
>>>
>
>>>simple_following_model.exe!FollowingObserver::setup(repast::Properties
>
>>>props={...}) Line 92 C++
>
>>>
>
>>>simple_following_model.exe!repast::relogo::SimulationRunner::run<Followi
>>>n
>
>>>g
>
>>>Ob
>
>>>server,patchExt>(repast::Properties & props={...}) Line 117 C++
>
>>>
>
>>>simple_following_model.exe!runFollowing(std::basic_string<char,std::char
>>>_
>
>>>t
>
>>>ra
>
>>>its<char>,std::allocator<char> > propsFile="zombie.props") Line 35
>
>>>C++
>
>>> simple_following_model.exe!main(int argc=3, char * *
>
>>>argv=0x009860b8) Line 55 + 0x1f bytes C++
>
>>> simple_following_model.exe!__tmainCRTStartup() Line 555 + 0x19
>
>>>bytes C
>
>>> simple_following_model.exe!mainCRTStartup() Line 371 C
>
>>> kernel32.dll!7c817077()
>
>>> [Frames below may be incorrect and/or missing, no symbols loaded
>
>>>for
>
>>>kernel32.dll]
>
>>>
>
>>>simple_following_model.exe!std::_Vector_const_iterator<std::_Vector_val<
>>>A
>
>>>m
>
>>>I
>
>>>*,std::allocator<AmI *> > >::_Compat(const
>
>>>std::_Vector_const_iterator<std::_Vector_val<AmI *,std::allocator<AmI *>
>
>>>> >
>
>>>& _Right=...) Line 241 + 0x2 bytes C++
>
>>>
>
>>>
>
>>>I also tried it with /np 2 changing the 'proc.per.x = 1' and 'proc.per.y
>
>>>=
>
>>>1'. But it does not work.
>
>>>
>
>>>Our cluster facility is getting ready; installation etc. As soon as I
>>>get
>
>>>it
>
>>>running on that facility, I will let you know.
>
>>>
>
>>>Thanks for consistent support.
>
>>>
>
>>>Best Regards.
>
>>>
>
>>>
>
>>>---
>
>>>Kashif Zia
>
>>>
>
>>>PhD Candidate
>
>>>Institut für Pervasive Computing, Johannes Kepler Universität Linz,
>
>>>Altenberger Straße 69, A-4040 Linz
>
>>>Room: P105, Phone: +43-732-2468-9673, Fax: +43-732-2468-8426
>
>>>E-Mail: ka...@pe...<mailto:ka...@pe...>
>
>>>------------------------------------------------------------------------
>>>-
>
>>>-
>
>>>--
>
>>>--
>
>>>Magic Quadrant for Content-Aware Data Loss Prevention
>
>>>Research study explores the data loss prevention market. Includes
>
>>>in-depth
>
>>>analysis on the changes within the DLP market, and the criteria used to
>
>>>evaluate the strengths and weaknesses of these DLP solutions.
>
>>>http://www.accelacomm.com/jaw/sfnl/114/51385063/
>
>>>_______________________________________________
>
>>>Repast-interest mailing list
>
>>>Rep...@li...<mailto:Rep...@li...
>>>ef
>orge.net>
>
>>>https://lists.sourceforge.net/lists/listinfo/repast-interest
>
>>>
>
>>>
>
>>
>
>>
>
>>-------------------------------------------------------------------------
>>-
>
>>--
>
>>--
>
>>Magic Quadrant for Content-Aware Data Loss Prevention
>
>>Research study explores the data loss prevention market. Includes
>>in-depth
>
>>analysis on the changes within the DLP market, and the criteria used to
>
>>evaluate the strengths and weaknesses of these DLP solutions.
>
>>http://www.accelacomm.com/jaw/sfnl/114/51385063/
>
>>_______________________________________________
>
>>Repast-interest mailing list
>
>>Rep...@li...<mailto:Rep...@li...
>>fo
>rge.net>
>
>>https://lists.sourceforge.net/lists/listinfo/repast-interest
>
>>
>
>>
>
>
>--------------------------------------------------------------------------
>--
>--
>
>Magic Quadrant for Content-Aware Data Loss Prevention
>
>Research study explores the data loss prevention market. Includes in-depth
>
>analysis on the changes within the DLP market, and the criteria used to
>
>evaluate the strengths and weaknesses of these DLP solutions.
>
>http://www.accelacomm.com/jaw/sfnl/114/51385063/
>
>_______________________________________________
>
>Repast-interest mailing list
>
>Rep...@li...<mailto:Rep...@li...
>or
>ge.net>
>
>https://lists.sourceforge.net/lists/listinfo/repast-interest
>
>--------------------------------------------------------------------------
>--
>--
>Magic Quadrant for Content-Aware Data Loss Prevention
>Research study explores the data loss prevention market. Includes in-depth
>analysis on the changes within the DLP market, and the criteria used to
>evaluate the strengths and weaknesses of these DLP solutions.
>http://www.accelacomm.com/jaw/sfnl/114/51385063/
>_______________________________________________
>Repast-interest mailing list
>Rep...@li...
>https://lists.sourceforge.net/lists/listinfo/repast-interest
>
>
|