Start

Version 117 (achristian, 01/27/2012 02:29 pm)

1 75 achristian
SIMON Main Wiki Page
2 75 achristian
3 2 admin
{{>toc}}
4 2 admin
5 1 admin
h1. Welcome to SIMON
6 1 admin
7 80 achristian
Welcome to the SIMON developer wiki. Here you will find all important information and files to get your project - powered by SIMON - running. 
8 1 admin
9 15 admin
I always recommend to read all from top to bottom. But If you are in a hurry: Select the topic you're interested in from the _table of contents_ on the top right. 
10 1 admin
11 1 admin
h2. What is SIMON?
12 1 admin
13 73 achristian
SIMON is a dual licensed Java(tm) API, that performs the object-oriented equivalent of "remote procedure call":http://en.wikipedia.org/wiki/Remote_Procedure_Call. With SIMON you are able to use Java objects, which are located in another "JVM":http://en.wikipedia.org/wiki/JVM on the current machine, on another machine in the local network or even on a servermachine somewhere on the internet. 
14 3 admin
15 88 achristian
h2. Who uses SIMON?
16 88 achristian
17 93 achristian
* GLP systems GmbH, http://systems.glp-med.com
18 89 achristian
* Archimedon Software und Consulting GmbH & Co. KG, http://www.archimedon.de
19 89 achristian
* Advolux GmbH, http://www.advolux.de
20 89 achristian
> Wir entwickeln eine plattformunabhängige Kanzleisoftware für Rechtanwälte. Um die Performance im Netzwerk zu erhöhen haben wir alle clientseitigen Zugriffe über ein Interface abgekoppelt und einen ApplicationServer entwickelt, der einen Teil der Geschäftslogik auf dem Server belässt (dafür benötigen wir SIMON).
21 89 achristian
* "Hochschule Bremen":http://hs-bremen.de, Medieninformatik, Projekt "Minerva", http://code.google.com/p/minerva-game/
22 103 achristian
** Weitere Links:
23 103 achristian
*** "Slides":https://docs.google.com/present/view?id=af8qnkj44t9p_149ckjh2cd3&pli=1
24 103 achristian
*** usea - unbelievable simon example application: http://code.google.com/p/usea/
25 90 achristian
> ... In einem ersten Schritt haben wir eine so genannte HotSeat-Version implementiert, welche das Spielen an einem Rechner ermöglichte. Für die spätere Client-/Server-Trennung haben wir einige Testszenarien mit RMI entwickelt, die wir allerdings frustriert verwerfen mussten. Mit SIMON war das anders! Wir haben innerhalb von einer halben Stunde einen Prototypen entwickelt, an welchem wir die SIMON-API kennenlernen und im Anschluss diese Erfahrung in das eigentliche Projekt übernehmen konnten. Mit Hilfe von SIMON war es uns möglich die gesamte Client-/Server-Trennung des Spiels innerhalb von zwei Tagen umzusetzen.
26 104 achristian
* siebnich.com - it.competence!, http://www.i-pex.de
27 104 achristian
> Wir haben die Kommunikation unserer Client - Komponenten mit den Servern von RMI zu SIMON portiert um damit die vielen Probleme, die beim Einsatz von RMI bei NAT, insbesondere Client - Callbacks, entstehen zu umgehen. Die Migration war innerhalb kurzer Zeit problemlos abgeschlossen.
28 109 achristian
* BIT-ON GmbH, http://www.bit-on.de
29 88 achristian
30 94 achristian
If you want to be added to the list (or removed), please drop me a mail: info[at]root1.de  
31 94 achristian
32 91 achristian
h2. Targets
33 1 admin
34 106 achristian
Sun's JRE/JDK already contains a technique for using remote objects. It's called "RMI (Remote Method Invocation)":http://en.wikipedia.org/wiki/Java_remote_method_invocation. Today, this implementation is really old but widely used in many (enterprise)applications. It works quite well, but it has some disadvantages that (partly) where not present in the early days of RMI: It's not that easy to use as it could be, and you run into troubles if you use it in a non LAN environment (say: the Internet ;-) ). So the intention of SIMON development was to provide an API which is small, flexible, really easy to use and integrates seamless into more complex network environments. You'd say that SIMON is _the_ RMI alternative for communicating via Internet.
35 1 admin
36 1 admin
h3. Comparison to RMI
37 1 admin
38 79 achristian
SIMON solves most of the issues RMI users complain about. Here is a comparison that shows the top most issues comparing Sun's RMI and SIMON.
39 1 admin
40 25 achristian
|_.|_.RMI|_.SIMON|  
41 10 admin
|*I/O technology*|=.Old Java IO implementation.|=.Apache MINA Framework which uses Java N(ew)IO.|
42 11 admin
|*Transparent network socket usage?*|=.No|=.Yes|
43 46 achristian
|*No. of used socket connections between client and server?*|=.At *least* one|=.At *most* one|
44 11 admin
|*No. of used threads on server side?*|=.Unknown. It depends among other things on the number of connected clients. It's not under your control.|=.A few. It depends on the used thread pool settings in the filter chain. You can serve, i.e. 1000 clients with only 50 threads. It's totally up to you.|
45 11 admin
|*Firewall/Router friendly?*|=.Yes, as far as no callbacks are used.|=.Yes|
46 11 admin
|*Connection via web proxy possible?*|=.Only via HTTP tunneling. This results in a very slow connection|=.Yes, if proxy supports the "CONNECT" command. For security, "basic authentication" is supported|
47 11 admin
|*Secure communication with SSL?*|=.Yes, with some extra effort|=.Yes|
48 11 admin
|*Protocol replaceable with own implementation?*|=.No|=.Yes|
49 11 admin
|*Performant file/data transfers*|=.No|=.Yes|
50 1 admin
51 1 admin
52 1 admin
h3. Features
53 1 admin
54 1 admin
  * Remote Procedure Call: client can call methods on server, server can call methods on client (callback)
55 1 admin
  * Extremely scalable thanks to Java NIO and the use of thread pooling mechanism
56 1 admin
  * Proxy support: Let a client connect f.i. via a company proxy to your SIMON server
57 1 admin
  * SSL support: strong communication encryption with SSL
58 26 achristian
  * Transparency: SIMON uses only one bi-directional socket connection between server and client, even if you use more than one remote object and callbacks
59 26 achristian
  * Exchangeable protocol: You are not happy with the protocol SIMON uses? Then go ahead and create your own...
60 1 admin
  * Connection loss detection: Detect a broken connection in less time
61 1 admin
  * Connection statistics: Know at any time how many messages/bytes are sent/received
62 1 admin
  * RawDataChannel: Transfer raw data from client to server (and vice versa) without time consuming reflection and serialization overhead
63 1 admin
  * PublishService: Find SIMON servers automatically on a local LAN 
64 1 admin
65 1 admin
h3. Why SIMON is better than ....
66 1 admin
67 1 admin
... RMI for internet applications??? 
68 1 admin
69 58 achristian
As already mentioned above, RMI has problems in modern applications that communicate not only via LAN, but also via internet. On the internet we have obstacles like firewalls and routers. And it turned out that RMI has problems with that. Let me explain why. Have at look at the following figure:
70 1 admin
71 12 admin
!1_rmi_vs_simon_schema.png!
72 1 admin
73 76 achristian
As you can see, RMI uses more than one connection to call methods on both sides. The bad thing is that RMI by default opens an anonymous port on the client side which is used by the server to call methods on the client. With a "Custom Socket Factory":http://java.sun.com/j2se/1.4.2/docs/guide/rmi/socketfactory/index.html you can specify a port for this kind of callbacks. But then you still have the problem that the server's outgoing connection must pass the client's firewall or router.
74 1 admin
75 1 admin
A workaround would be, not to use callbacks and use a polling mechanism at the client side. But think of hundrets of clients polling all the time. Not a "good" solution. 
76 1 admin
77 100 achristian
Another solution would be a kind of blocking listener: The client calls a "listen" method on the server. The server blocks this call until there is some data to poll for the "listener".
78 26 achristian
This works, but is also not a simple and good solution. You need to have additional threads handling the listener and the blocking mechanism etc.
79 1 admin
80 1 admin
So let's have a look at how SIMON works:
81 1 admin
82 12 admin
!2_rmi_vs_simon_schema.png!
83 1 admin
84 26 achristian
There is only one connection between client and server which is established by the client. It is used for bi-directional method calling. You only have to allow the SIMON server port on the server's firewall or enable portforwarding on the server's router. That's all.
85 1 admin
86 41 achristian
h3. How it works
87 41 achristian
88 41 achristian
SIMON ist not just a copy of RMI. SIMON is doing many things different. At least internal. This is to give you an idea on what's going on internally...
89 41 achristian
90 42 achristian
* SIMON uses TCP to establish the connection between the client and the server
91 41 achristian
* This TCP connection is a statefull, permanent connection
92 41 achristian
* A client "opens" a connection to a server using the "lookup()" methods
93 41 achristian
* A client must "close" the connection by calling "release()" after it has finished using the remoteobject
94 1 admin
* SIMON reuses existing connections. Let's say you want to use two remote objects from one and the same server. Instead of opening two connections, one for each remote object, SIMON opens the first connection with the first object, and reuses the already existing connection for the second object. This does not have any negative impact on the performance. It's the other way around: You save the time that is required to open the connection as well as the additional socket-resource. Also on server side there does not need to be an additional socket and thus there is no additional effort for the socket selector.
95 43 achristian
* The connection from client to server actually get's closed, when the last remoteobject that used this connection is released.
96 43 achristian
* There is no automatic reconnect that brings a client back online after a connection interruption. This is due to the fact, that SIMON does not know anything about the context that exists between the client and the server. So reconnection and bringing back the last context has to be done on application level. 
97 43 achristian
98 41 achristian
99 41 achristian
100 1 admin
h2. Performance
101 1 admin
102 68 achristian
*Test-Case 1 ("Stress"):*
103 1 admin
104 67 achristian
  * Servermachine: Intel Core i7 4x2,8Ghz, 8GB RAM, Windows 7 Ultimate 64bit
105 67 achristian
  * One single clientmachine: Intel Core2Duo 2x2,13Ghz, 4GB RAM, Ubuntu 10.10 AMD64
106 67 achristian
  * 100Mbit network via SOHO desktop-switch 
107 67 achristian
  * Server provides simple remote object with method:
108 67 achristian
  ** @public void testMethod1(String aString, int aInt);@
109 78 achristian
  * One testclient instance runs 50 threads, each calling testMethod1 with arguments @"aString"@ and @Integer.MAX_VALUE@ as fast as possible (forever-loop, no extra delay). SIMON is configured for cached thread pool
110 67 achristian
  * Server implementation simply discards the method arguments and returns
111 67 achristian
112 71 achristian
_Test-Case 1 results:_
113 67 achristian
114 67 achristian
  * ~7950 method invocations per second
115 67 achristian
  * Servermachine: ~20% CPU load over 4 out of 8 (CPU supports HT) cores
116 67 achristian
  * Clientmachine: ~60% CPU load over both cores
117 67 achristian
  * Client-to-Server network performance: ~1MiB/s TX, ~980kiB/s RX
118 67 achristian
119 68 achristian
*Test-Case 2 ("Some more stress"):*
120 67 achristian
121 67 achristian
  * Same setup as in Test-Case 1, but now with 2 testclient instances running on the client machine
122 67 achristian
123 68 achristian
_Test-Case 2 result:_
124 67 achristian
125 101 achristian
  * ~ 11700 method invocations per second in total on serverside
126 67 achristian
  * Servermachine: ~22% CPU load over 4 out of 8 (CPU supports HT) cores
127 67 achristian
  * Clientmachine: ~68% CPU load over both cores
128 67 achristian
  * Client-to-Server network performance: ~1.5MiB/s TX, ~1.3MiB/s RX
129 67 achristian
130 68 achristian
*Test-Case 3 ("Some more real test ..."):*
131 67 achristian
132 67 achristian
  * Same hardware setup as in Test-Case 1, but now with 20 testclient instances running on the client machine
133 67 achristian
  * Server provides simple remote object with method:
134 67 achristian
  ** @public void testMethod1(String aString, int aInt);@
135 67 achristian
  ** @public Object testMethod2(ArrayList<Object> aList);@
136 67 achristian
  ** @public boolean testMethod3(byte[] aByteArray);@
137 67 achristian
  * Each testclient instance runs 50 threads, each calling one testmethod after another with 1sec delay -> should result in ~50 invocations per second per instance
138 67 achristian
  ** testMethod1 with arguments @"aString"@ and @Integer.MAX_VALUE@
139 67 achristian
  ** testMethod2 with a list of 100 POJOs containing an integer value, a String with length=3 and a long value
140 67 achristian
  ** testMethod3 with a byte array with 512 bytes
141 67 achristian
  * Serverimplementation:
142 67 achristian
  ** testMethod1: discard arguments and simply returns
143 67 achristian
  ** testMethod2: return the first item in the list provided by client
144 67 achristian
  ** testMethod3: return true if argument is not null and size>0, otherwise return false
145 67 achristian
146 68 achristian
_Test-Case 3 results:_
147 67 achristian
148 101 achristian
  * ~1000 method invocations per second in total on serverside, 50 on each testclient instance
149 69 achristian
  * Servermachine: ~5% CPU load (yes, only _five_) over 4 out of 8 (CPU supports HT) cores
150 67 achristian
  * Clientmachine: ~30% CPU load over both cores
151 1 admin
  * Client-to-Server network performance: ~1.1MiB/s TX, ~150kiB/s RX
152 70 achristian
153 70 achristian
154 70 achristian
*Test-Case 4 ("Extreme load ..."):*
155 70 achristian
156 70 achristian
  * Servermachine: Intel Core i7 4x2,8Ghz, 8GB RAM, Windows 7 Ultimate 64bit
157 70 achristian
  * 4 different client machines, running multiple testclient instances. In total, there are 13 testclient instances connected to server.
158 70 achristian
  * 100Mbit network via multiple switches (SOHO desktop-switchs + managed cisco switches)
159 70 achristian
  * Server provides simple remote object with method:
160 70 achristian
  ** @public void testMethod1(String aString, int aInt);@
161 78 achristian
  * Each testclient instance runs 50 threads, each calling testMethod1 with arguments @"aString"@ and @Integer.MAX_VALUE@ as fast as possible (forever-loop, no extra delay). So in total we have 650 (!!!) threads (13*50) distributed over 4 machines calling methods on the server. *SIMON is configured for thread pool with 10 worker threads*
162 70 achristian
  * Server implementation simply discards the method arguments and returns
163 70 achristian
164 71 achristian
_Test-Case 4 results:_
165 70 achristian
166 102 achristian
  * *~37900 (!!!)* method invocations per second in total on serverside. That's *0.026ms* per method invocation!
167 70 achristian
  * Servermachine: ~60% CPU load in total
168 72 achristian
  * server side network performance: ~1.2MiB/s TX, ~3MiB/s RX
169 1 admin
170 1 admin
h2. License
171 1 admin
172 32 achristian
SIMON is dual-licensed and offers licenses for two distinct purposes - closed source and open source development.
173 1 admin
174 1 admin
If you want to use the GPL version, you'll have to put your own program under the GPL as well. This means you'll also have to release your source code along with your binary version, which may in turn be altered and re-released. If you choose the Commercial License instead, you're allowed to release your software without making the source public.
175 1 admin
176 111 achristian
  * [[LCL_root1de_010|root1.de Library Commercial License 1.0 (2012/01/17)]]
177 16 admin
  * [[license_gplv3|GPL v3 Open Source License]]
178 1 admin
179 115 achristian
If you go for the GPL license, I would be glad about an donation: !https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif!:https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QX7ZYQEADWK5Q
180 115 achristian
181 36 achristian
h3. Prices for Commercial License
182 34 achristian
183 114 achristian
I don't ask for millions, but SIMON is not free of charge for GPL incompatible use. The following price table applies to _root1.de Library Commercial License_ as described above:
184 33 achristian
185 105 achristian
  * Developer License (1 developer): 79.- EUR
186 105 achristian
  * Team License (5 developers): 359.- EUR
187 105 achristian
  * Workgrop License (25 developers): 1599.- EUR
188 105 achristian
  * Enterprise License (100 developers): 5499.- EUR
189 33 achristian
190 62 achristian
For purchasing the commercial license, please get in contact with me -> _info[at]root1.de_ 
191 1 admin
192 57 achristian
If you have the feeling that the price for the above mentioned licenses is inappropriate, please have a look at what "Ohloh":http://www.ohloh.net/p/root1_simon calculates:
193 55 achristian
194 1 admin
!http://www.ohloh.net/p/341384/widgets/project_partner_badge.gif!:http://www.ohloh.net/p/root1_simon
195 1 admin
196 62 achristian
If you then still believe that the price is improper, please drop me a mail -> _info[at]root1.de_  
197 62 achristian
198 62 achristian
h3. How to purchase a commercial license
199 62 achristian
200 62 achristian
Send me an email at _info[at]root1.de_ which answers the following questions:
201 62 achristian
202 62 achristian
# Which License do you want to order?
203 84 achristian
# Which SIMON version you want the license for?
204 62 achristian
# Which address should be noted on invoice?
205 62 achristian
206 62 achristian
If no questions are open from both sides, you will be provided with an invoice plus the current commercial license. As soon as the invoice is paid, the license is valid.
207 62 achristian
208 62 achristian
h3. What about updates for commercial licensed SIMON?
209 62 achristian
210 66 achristian
If, for instance, you order a license for SIMON 1.0.0, you are permitted to use any SIMON 1.0.x version which has been released. Means: You order version 1.0.0 and can update to version 1.0.1, 1.0.2, 1.0.3, ... for free.
211 116 achristian
If you want to upgrade to a later version (i.e. 1.1.x, 1.2.x, 1.3.x, 2.1.x, ...), a paid upgrade is necessary. In this case, please get in contact with me: _info[at]root1.de_
212 61 achristian
213 1 admin
h2. Get SIMON
214 1 admin
215 1 admin
h3. Sourcecode
216 1 admin
217 1 admin
Access the source code repository for this project in one of following ways:
218 1 admin
219 85 achristian
    * "Browse source code online":http://dev.root1.de/projects/simon/repository to view this project's directory structure and files.
220 21 admin
    * Check out source code with a Subversion client using the following _svn_ command.<code>svn checkout http://svn.root1.de/svn/simon/trunk simon</code>
221 1 admin
222 13 admin
If you are new to Subversion, you may want to visit the "Subversion Project website":http://subversion.tigris.org and read "Version Control with Subversion":http://svnbook.red-bean.com.
223 1 admin
224 1 admin
h3. Compile from Source
225 1 admin
226 27 achristian
You can easily build the project by using Maven. But first, you have to have a working Maven Environment. If you are new to Maven, you may want to visit the "Maven Project website":http://maven.apache.org for more details.
227 1 admin
228 1 admin
h3. Binaries
229 1 admin
230 27 achristian
If you don't want to build SIMON yourself you can download pre-compiled binaries. You can choose between the latest release and the latest development snapshot.
231 1 admin
232 1 admin
*Release*
233 1 admin
234 1 admin
Visit this link for downloading latest release: 
235 27 achristian
236 27 achristian
Direct Download: http://dev.root1.de/projects/list_files/simon
237 40 achristian
Maven Repository: http://nexus.root1.de/content/repositories/releases/de/root1/simon/
238 1 admin
239 1 admin
*Snapshot*
240 1 admin
241 1 admin
Visit this link for downloading latest snapshot:
242 108 achristian
http://jenkins.root1.de/job/SIMON%20-%20trunk/lastStableBuild/de.root1$simon/
243 1 admin
244 28 achristian
h3. Maven Site, JavaDoc, ...
245 28 achristian
246 29 achristian
With each deployment of SIMON to the maven repository, also a project site is generated. The site contains f.i.
247 28 achristian
248 28 achristian
* JavaDoc 
249 28 achristian
* Reports like test coverage
250 28 achristian
* Dependency Information
251 28 achristian
* ...
252 28 achristian
253 28 achristian
Please follow this link:
254 28 achristian
255 30 achristian
http://dev.root1.de/project-sites/simon/
256 1 admin
257 1 admin
h2. Setup your project
258 1 admin
259 1 admin
Depending on your IDE, there are different steps for setup your project to work with SIMON:
260 1 admin
261 17 admin
  * [[setup_eclipse|Eclipse]]
262 17 admin
  * [[setup_eclipsemaven|Eclipse incl. Maven2]]
263 48 achristian
  * [[setup_netbeansmaven|Netbeans incl. Maven2]]
264 1 admin
265 1 admin
266 1 admin
h2. Help
267 1 admin
268 1 admin
You need help on using SIMON? You do not know how to start? In this section you will find a first "hello world" sample and usefile tips on how to do <whatever>, explained with simple codesnippets. And if you have a more complex question, do not hesitate to post in the support forum. Help is provided in english and german language. 
269 1 admin
270 1 admin
h3. Samples/Howtos
271 1 admin
272 117 achristian
  * Simon 1.0.0 - SimonRemote Interface *!! Obsolete - Please use 1.1.x instead !!*
273 1 admin
  ** [[sample_helloworld|First "Hello World" sample]]
274 1 admin
  ** [[howto_proxy|How to use a proxy]]
275 1 admin
  ** [[howto_rawchannel|How to transfer files]]
276 1 admin
  ** [[howto_publishservice|How to detect server(s) in LAN]]
277 1 admin
  ** [[howto_ssl|How to use SSL]]
278 1 admin
  ** [[howto_statistics|How to get statistics from client and/or server]]
279 1 admin
  * Simon 1.1.0 - SimonRemote Annotation
280 1 admin
  ** [[sample_helloworld110|First "Hello World" sample]]
281 1 admin
  ** [[sample_session_pattern|Session Pattern: Users can log in, and server get's informed when users leave]]
282 107 achristian
  * Simon 1.2.0
283 107 achristian
  ** [[debug_logging|Enable debug logging]]
284 1 admin
285 1 admin
h2. Outdated licenses
286 1 admin
287 1 admin
  * [[license_root1de|root1.de Commercial License Version 1.0 (2009/06/15)]]
288 113 achristian
  * [[license_root1de_1.1|root1.de Commercial License Version 1.1 (2011/01/26)]]
289 82 achristian
290 82 achristian
h2. History
291 82 achristian
292 82 achristian
|_.Date|_.Log|
293 82 achristian
|2007/12|started SIMON development|
294 82 achristian
|2008/01/18|presented SIMON 0.1 alpha on www.java-forum.org|
295 82 achristian
|2008/02/11|SIMON is able to make use of SimonRemote interface instead of extending a existing SimonRemote class|
296 82 achristian
|2008/02/15|added callback functionality now works without problems|
297 86 achristian
|2008/06/25|started working on a Java NIO implementation to overcome the one-thread-per-client issue with the blocking-io of Java IO|
298 82 achristian
|2008/07/01|First NIO version is ready to be tested|
299 99 achristian
|2008/07/25|release of "SIMON 0.1 beta":http://dev.root1.de/versions/show/1, based on Java NIO with non-blocking-io. SIMON now scales a lot better than with standard Java IO|
300 98 achristian
|2008/08/01|"SIMON 0.2 RC":http://dev.root1.de/versions/show/2 released. Several bugs fixed.|
301 98 achristian
|2008/10/15|"SIMON 0.2 stable":http://dev.root1.de/versions/show/3 released. In the meantime investigated into Apache MINA framework.|
302 98 achristian
|2008/10/26|"SIMON 0.3 alpha":http://dev.root1.de/versions/show/4 released. First MINA powered SIMON version!|
303 98 achristian
|2009/01/12|"SIMON 0.3 beta":http://dev.root1.de/versions/show/5 released. It's getting stable now ...|
304 98 achristian
|2009/05/07|"SIMON 0.3 RC1&2":http://dev.root1.de/versions/show/6 released. There's some light at the end of the tunnel ...|
305 98 achristian
|2009/06/03|SIMON "mavenized". New version number "1.0.0-RC1":http://dev.root1.de/versions/show/8 , based on 0.3 RC2|
306 98 achristian
|2010/02/01|"SIMON 1.0.0 RC2":http://dev.root1.de/versions/show/12 released|
307 98 achristian
|2010/02/01|"SIMON 1.0.0 stable":http://dev.root1.de/versions/show/7 released. First stable SIMON version based on MINA and created by MAVEN2|
308 98 achristian
|2011/01/02|"SIMON 1.1.0":http://dev.root1.de/versions/show/10 stable released.|
309 97 achristian
|2011/03/15|"SIMON 1.1.1":http://dev.root1.de/versions/show/14 released.|
310 97 achristian
|2011/07/01|"SIMON 1.1.2":http://dev.root1.de/versions/show/15 released. |
311 96 achristian
312 1 admin
313 1 admin
h2. Supporter
314 1 admin
315 1 admin
SIMON is supported by:
316 1 admin
317 20 admin
**YourKit Java Profiler**
318 20 admin
YourKit is kindly supporting open source projects with its full-featured Java Profiler.
319 20 admin
YourKit, LLC is creator of innovative and intelligent tools for profiling
320 20 admin
Java and .NET applications. Take a look at YourKit's leading software products:
321 20 admin
"YourKit Java Profiler":http://www.yourkit.com/java/profiler/index.jsp and "YourKit .NET Profiler":http://www.yourkit.com/.net/profiler/index.jsp.