[Compiling |
Features |
Tuning a TCP connection |
Tuning a UDP connection |
Running multicast servers and clients |
IPv6 Mode |
Representative Streams |
Running Iperf as a daemon |
Running Iperf as a Windows Service ]
Iperf compiles cleanly on many systems including Linux, SGI IRIX, HP-UX,
Solaris, AIX, and Cray UNICOS. Use 'make' to configure for your OS and
compile the source code.
If you have problems, please report them to<EMAIL_ADDRESS>and
we will try to fix them quickly. For Iperf in UDP server mode, this is also used to bind and join to a
multicast group. Use addresses in the range <IP_ADDRESS> to <IP_ADDRESS>
for multicast. See also the -T
option. Client side:
Note that many OSes and hosts have upper limits on the TCP window size. These
may be as low as 64 KB, or as high as several MB. Iperf tries to detect when
these occur and give a warning that the actual and requested window sizes are
not equal (as below, though that is due to rounding in IRIX). PSC has a list detailing how to
change the default and maximum window sizes for various OSes. For more
information on TCP window sizes, see the User's
Guide to TCP Windows.
Here is an example session, between node1 in Illinois and node2 in North
Carolina. These are connected via the vBNS backbone and a 45 Mbit/sec DS3 link.
Notice we improve bandwidth performance by a factor of 3 using proper TCP window
sizes. Use the adaptive window sizes feature on platforms which allow setting
window sizes in the granularity of bytes.
You will want to adjust the datagram size (-l) to the size your application
uses.
The server detects UDP datagram loss by ID numbers in the datagrams. Usually
a UDP datagram becomes several IP packets. Losing a single IP packet will lose
the entire datagram. To measure packet loss instead of datagram loss, make the
datagrams small enough to fit into a single packet, using the -l option. The
default size of 1470 bytes works for ethernet. Out-of-order packets are also
detected. (Out-of-order packets cause some ambiguity in the lost packet count;
Iperf assumes they are not duplicate packets, so they are excluded from the lost
packet count.) Since TCP does not report loss to the user, I find UDP tests
helpful to see packet loss along a path.
Jitter calculations are continuously computed by the server, as specified by
RTP in RFC 1889. The client records a 64 bit second/microsecond timestamp in the
packet. The server computes the relative transit time as (server's receive time
- client's send time). The client's and server's clocks do not need to be
synchronized; any difference is subtracted out in the jitter calculation. Jitter
is the smoothed mean of differences between consecutive transit times.
To test multicast, run several servers with the bind option (-B, --bind) set
to the multicast group address. Run the client, connecting to the multicast
group address and setting the TTL (-T, --ttl) as needed. Unlike normal TCP and
UDP tests, multicast servers may be started after the client. In that case,
datagrams sent before the server started show up as losses in the first periodic
report (61 datagrams on arno below).
Server side: Client side: Note: Iperf version 1.6.2 and eariler require a IPv6 address to be explicitly bound
with the -B option for the server. The -F option is for file input. E.g.
Examples:
Note: If you stop want to restart the Iperf service after having killed
it with the Microsoft Management Console or the Windows Task Manager, make
sure to use the proper OPTION in the service properties dialog.
Iperf User Docs
Mark Gates
May 2004
Ajay Tirumala
Jon Dugan
Kevin Gibbs
Compiling
Once you have the distribution, on UNIX,
unpack it using gzip and tar. That will create a new directory
'iperf-<version#>' with the source files and documentation.
To install iperf, use 'make install',
which will ask you where to install it. To recompile, the easiest way is to
start over. Do 'make distclean' then './configure; make'. See the Makefile
for more options.
gunzip -c iperf-<version>.tar.gz | tar -xvf -
cd iperf-<version>
./configure
make
Features
Command line option
Environment variable option
Description
Client and Server options
-f, --format [bkmaBKMA]
$IPERF_FORMAT
A letter specifying the format to print bandwidth numbers in.
Supported formats are
'b' = bits/sec 'B' = Bytes/sec
'k' = Kbits/sec 'K' = KBytes/sec
'm' = Mbits/sec 'M' = MBytes/sec
'g' = Gbits/sec 'G' = GBytes/sec
'a' = adaptive bits/sec 'A' = adaptive Bytes/sec
The adaptive formats choose between kilo- and mega- as appropriate. Fields
other than bandwidth always print bytes, but otherwise follow the
requested format. Default is 'a'.
NOTE: here Kilo = 1024,
Mega = 1024^2 and Giga = 1024^3 when dealing with bytes. Commonly in networking,
Kilo = 1000, Mega = 1000^2, and Giga = 1000^3 so we use this when dealing with
bits. If this really bothers you, use -f b and do the math.
-i, --interval #
$IPERF_INTERVAL
Sets the interval time in seconds between periodic bandwidth, jitter,
and loss reports. If non-zero, a report is made every interval
seconds of the bandwidth since the last report. If zero, no periodic
reports are printed. Default is zero.
-l, --len #[KM]
$IPERF_LEN
The length of buffers to read or write. Iperf works by writing an
array of len bytes a number of times. Default is 8 KB for TCP, 1470
bytes for UDP. Note for UDP, this is the datagram size and needs to be lowered when using
IPv6 addressing to 1450 or less to avoid fragmentation. See also the -n
and -t
options.
-m, --print_mss
$IPERF_PRINT_MSS
Print the reported TCP MSS size (via the TCP_MAXSEG option) and the
observed read sizes which often correlate with the MSS. The MSS is usually
the MTU - 40 bytes for the TCP/IP header. Often a slightly smaller MSS is
reported because of extra header space from IP options. The interface type
corresponding to the MTU is also printed (ethernet, FDDI, etc.). This
option is not implemented on many OSes, but the read sizes may still
indicate the MSS.
-p, --port #
$IPERF_PORT
The server port for the server to listen on and the client to connect
to. This should be the same in both client and server. Default is 5001,
the same as ttcp.
-u, --udp
$IPERF_UDP
Use UDP rather than TCP. See also the -b
option.
-w, --window #[KM]
$TCP_WINDOW_SIZE
Sets the socket buffer sizes to the specified value. For TCP, this
sets the TCP window size. For UDP it is just the buffer which datagrams
are received in, and so limits the largest receivable datagram size.
-B, --bind host
$IPERF_BIND
Bind to host, one of this machine's addresses. For the client
this sets the outbound interface. For a server this sets the incoming
interface. This is only useful on multihomed hosts, which have multiple
network interfaces.
-C, --compatibility
$IPERF_COMPAT
Compatibility mode allows for use with older version of iperf. This mode
is not required for interoperability but it is highly recommended. In
some cases when using representative streaming you could cause a 1.7 server
to crash or cause undesired connection attempts.
-M, --mss #[KM}
$IPERF_MSS
Attempt to set the TCP maximum segment size (MSS) via the TCP_MAXSEG
option. The MSS is usually the MTU - 40 bytes for the TCP/IP header. For
ethernet, the MSS is 1460 bytes (1500 byte MTU). This option is not
implemented on many OSes.
-N, --nodelay
$IPERF_NODELAY
Set the TCP no delay option, disabling Nagle's algorithm. Normally
this is only disabled for interactive applications like telnet.
-V (from v1.6 or higher)
.
Bind to an IPv6 address
Server side:
$ iperf -s -V
$ iperf -c <Server IPv6 Address> -V
Server specific options
-s, --server
$IPERF_SERVER
Run Iperf in server mode.
-D (from v1.2 or higher)
.
Run the server as a daemon (Unix platforms)
On Win32 platforms
where services are available, Iperf will start running as a service.
-R (only for Windows, from v1.2 or higher)
.
Remove the Iperf service (if it's running).
-o (only for Windows, from v1.2 or higher)
.
Redirect output to given file.
-c, --client host
$IPERF_CLIENT
If Iperf is in server mode, then specifying a host with -c
will limit the connections that Iperf will accept to the
host specified. Does not work well for UDP.
-P, --parallel #
$IPERF_PARALLEL
The number of connections to handle by the server before
closing. Default is 0 (which means to accept connections forever).
Client specific options
-b, --bandwidth #[KM]
$IPERF_BANDWIDTH
The UDP bandwidth to send at, in bits/sec. This implies the -u option.
Default is 1 Mbit/sec.
-c, --client host
$IPERF_CLIENT
Run Iperf in client mode, connecting to an Iperf server running on
host.
-d, --dualtest
$IPERF_DUALTEST
Run Iperf in dual testing mode. This will cause the server to connect
back to the client on the port specified in the
-L option (or defaults
to the port the client connected to the server on). This is done immediately
therefore running the tests simultaneously. If you want an alternating
test try -r.
-n, --num #[KM]
$IPERF_NUM
The number of buffers to transmit. Normally, Iperf sends for 10
seconds. The -n option overrides this and sends an array of len
bytes num times, no matter how long that takes. See also the -l
and -t
options.
-r, --tradeoff
$IPERF_TRADEOFF
Run Iperf in tradeoff testing mode. This will cause the server to connect
back to the client on the port specified in the
-L option (or defaults
to the port the client connected to the server on). This is done following
the client connection termination, therefore running the tests
alternating. If you want an simultaneous test try
-d.
-t, --time #
$IPERF_TIME
The time in seconds to transmit for. Iperf normally works by
repeatedly sending an array of len bytes for time seconds.
Default is 10 seconds. See also the -l
and -n
options.
-L, --listenport #
$IPERF_LISTENPORT
This specifies the port that the server will connect back to the
client on. It defaults to the port used to connect to the server
from the client.
-P, --parallel #
$IPERF_PARALLEL
The number of simultaneous connections to make to the server. Default
is 1. Requires thread support on both the client and server.
-S, --tos #
$IPERF_TOS
The type-of-service for outgoing packets. (Many routers ignore the TOS
field.) You may specify the value in hex with a '0x' prefix, in octal with
a '0' prefix, or in decimal. For example, '0x10' hex = '020' octal = '16'
decimal. The TOS numbers specified in RFC 1349 are:
IPTOS_LOWDELAY minimize delay 0x10
IPTOS_THROUGHPUT maximize throughput 0x08
IPTOS_RELIABILITY maximize reliability 0x04
IPTOS_LOWCOST minimize cost 0x02
-T, --ttl #
$IPERF_TTL
The time-to-live for outgoing multicast packets. This is essentially
the number of router hops to go through, and is also used for scoping.
Default is 1, link-local.
-F (from v1.2 or higher)
.
Use a representative stream to measure bandwidth, e.g. :-
$
iperf -c <server address> -F <file-name>
-I (from v1.2 or higher)
.
Same as -F, input from stdin.
Miscellaneous options
-h, --help
Print out a summary of commands and quit.
-v, --version
Print version information and quit. Prints 'pthreads' if compiled with
POSIX threads, 'win32 threads' if compiled with Microsoft Win32 threads,
or 'single threaded' if compiled without threads.
Tuning a TCP connection
The primary goal of Iperf
is to help in tuning TCP connections over a particular path. The most
fundamental tuning issue for TCP is the TCP window size, which controls how much
data can be in the network at any one point. If it is too small, the sender will
be idle at times and get poor performance. The theoretical value to use for the
TCP window size is the bandwidth delay product,
bottleneck bandwidth * round trip time
In the below
modi4/cyclops example, the bottleneck link is a 45 Mbit/sec DS3 link and the
round trip time measured with ping is 42 ms. The bandwidth delay product is
45 Mbit/sec * 42 ms
That is a starting point for figuring the best
window size; setting it higher or lower may produce better results. In our
example, buffer sizes over 130K did not improve the performance, despite the
bandwidth delay product of 230K.
= (45e6) * (42e-3)
= 1890000 bits
= 230 KByte
Another
test to do is run parallel TCP streams. If the total aggregate bandwidth is more
than what an individual stream gets, something is wrong. Either the TCP window
size is too small, or the OS's TCP implementation has bugs, or the network
itself has deficiencies. See above for TCP window sizes; otherwise diagnosing
which is somewhat difficult. If Iperf is compiled with pthreads, a single client
and server can test this, otherwise setup multiple clients and servers on
different ports. Here's an example where a single stream gets 16.5 Mbit/sec, but
two parallel streams together get 16.7 + 9.4 = 26.1 Mbit/sec, even when using
large TCP window sizes:
node2> iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 60.0 KByte (default)
------------------------------------------------------------
[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 2357
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.1 sec 6.5 MBytes 5.2 Mbits/sec
node1> iperf -c node2
------------------------------------------------------------
Client connecting to node1, TCP port 5001
TCP window size: 59.9 KByte (default)
------------------------------------------------------------
[ 3] local <IP Addr node1> port 2357 connected with <IP Addr node2> port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 6.5 MBytes 5.2 Mbits/sec
node2> iperf -s -w 130k
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 130 KByte
------------------------------------------------------------
[ 4] local <IP Addr node 2> port 5001 connected with <IP Addr node 1> port 2530
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.1 sec 19.7 MBytes 15.7 Mbits/sec
node1> iperf -c node2 -w 130k
------------------------------------------------------------
Client connecting to node2, TCP port 5001
TCP window size: 129 KByte (WARNING: requested 130 KByte)
------------------------------------------------------------
[ 3] local <IP Addr node1> port 2530 connected with <IP Addr node2> port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 19.7 MBytes 15.8 Mbits/sec
A
secondary tuning issue for TCP is the maximum transmission unit (MTU). To be
most effective, both hosts should support Path MTU Discovery. PSC has a list detailing what OSes
support Path MTU Discovery. Hosts without Path MTU Discovery often use 536 as
the MSS, which wastes bandwidth and processing time. Use the -m option to
display what MSS is being used, and see if this matches what you expect. Often
it is around 1460 bytes for ethernet.
node2> iperf -s -w 300k
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 300 KByte
------------------------------------------------------------
[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 6902
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.2 sec 20.9 MBytes 16.5 Mbits/sec
[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 6911
[ 5] local <IP Addr node2> port 5001 connected with <IP Addr node2> port 6912
[ ID] Interval Transfer Bandwidth
[ 5] 0.0-10.1 sec 21.0 MBytes 16.7 Mbits/sec
[ 4] 0.0-10.3 sec 12.0 MBytes 9.4 Mbits/sec
node1> ./iperf -c node2 -w 300k
------------------------------------------------------------
Client connecting to node2, TCP port 5001
TCP window size: 299 KByte (WARNING: requested 300 KByte)
------------------------------------------------------------
[ 3] local <IP Addr node2> port 6902 connected with <IP Addr node1> port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.2 sec 20.9 MBytes 16.4 Mbits/sec
node1> iperf -c node2 -w 300k -P 2
------------------------------------------------------------
Client connecting to node2, TCP port 5001
TCP window size: 299 KByte (WARNING: requested 300 KByte)
------------------------------------------------------------
[ 4] local <IP Addr node2> port 6912 connected with <IP Addr node1> port 5001
[ 3] local <IP Addr node2> port 6911 connected with <IP Addr node1> port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.1 sec 21.0 MBytes 16.6 Mbits/sec
[ 3] 0.0-10.2 sec 12.0 MBytes 9.4 Mbits/sec
Here
is a host that doesn't support Path MTU Discovery. It will only send and receive
small 576 byte packets.
node3> iperf -s -m
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 60.0 KByte (default)
------------------------------------------------------------
[ 4] local <IP Addr node3> port 5001 connected with <IP Addr node4> port 1096
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 2.0 sec 1.8 MBytes 6.9 Mbits/sec
[ 4] MSS size 1448 bytes (MTU 1500 bytes, ethernet)
[ 4] Read lengths occurring in more than 5% of reads:
[ 4] 952 bytes read 219 times (16.2%)
[ 4] 1448 bytes read 1128 times (83.6%)
Iperf
supports other tuning options, which were added for exceptional network
situations like HIPPI-to-HIPPI over ATM. node4> iperf -s -m
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 32.0 KByte (default)
------------------------------------------------------------
[ 4] local <IP Addr node4> port 5001 connected with <IP Addr node3> port 13914
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 2.3 sec 632 KBytes 2.1 Mbits/sec
WARNING: Path MTU Discovery may not be enabled.
[ 4] MSS size 536 bytes (MTU 576 bytes, minimum)
[ 4] Read lengths occurring in more than 5% of reads:
[ 4] 536 bytes read 308 times (58.4%)
[ 4] 1072 bytes read 91 times (17.3%)
[ 4] 1608 bytes read 29 times (5.5%)
Tuning a UDP connection
Iperf creates a constant bit rate UDP stream. This is a very artificial
stream, similar to voice communication but not much else.
Notice the higher jitter due to
datagram reassembly when using larger 32 KB datagrams, each split into 23
packets of 1500 bytes. The higher datagram loss seen here may be due to the
burstiness of the traffic, which is 23 back-to-back packets and then a long
pause, rather than evenly spaced individual packets.
node2> iperf -s -u -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size: 60.0 KByte (default)
------------------------------------------------------------
[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 9726
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.0- 1.0 sec 1.3 MBytes 10.0 Mbits/sec 0.209 ms 1/ 894 (0.11%)
[ 4] 1.0- 2.0 sec 1.3 MBytes 10.0 Mbits/sec 0.221 ms 0/ 892 (0%)
[ 4] 2.0- 3.0 sec 1.3 MBytes 10.0 Mbits/sec 0.277 ms 0/ 892 (0%)
[ 4] 3.0- 4.0 sec 1.3 MBytes 10.0 Mbits/sec 0.359 ms 0/ 893 (0%)
[ 4] 4.0- 5.0 sec 1.3 MBytes 10.0 Mbits/sec 0.251 ms 0/ 892 (0%)
[ 4] 5.0- 6.0 sec 1.3 MBytes 10.0 Mbits/sec 0.215 ms 0/ 892 (0%)
[ 4] 6.0- 7.0 sec 1.3 MBytes 10.0 Mbits/sec 0.325 ms 0/ 892 (0%)
[ 4] 7.0- 8.0 sec 1.3 MBytes 10.0 Mbits/sec 0.254 ms 0/ 892 (0%)
[ 4] 8.0- 9.0 sec 1.3 MBytes 10.0 Mbits/sec 0.282 ms 0/ 892 (0%)
[ 4] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec 0.243 ms 1/ 8922 (0.011%)
node1> iperf -c node2 -u -b 10m
------------------------------------------------------------
Client connecting to node2, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size: 60.0 KByte (default)
------------------------------------------------------------
[ 3] local <IP Addr node1> port 9726 connected with <IP Addr node2> port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec
[ 3] Sent 8922 datagrams
node2> iperf -s -u -l 32k -w 128k -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Receiving 32768 byte datagrams
UDP buffer size: 128 KByte
------------------------------------------------------------
[ 3] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 11303
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0- 1.0 sec 1.3 MBytes 10.0 Mbits/sec 0.430 ms 0/ 41 (0%)
[ 3] 1.0- 2.0 sec 1.1 MBytes 8.5 Mbits/sec 5.996 ms 6/ 40 (15%)
[ 3] 2.0- 3.0 sec 1.2 MBytes 9.7 Mbits/sec 0.796 ms 1/ 40 (2.5%)
[ 3] 3.0- 4.0 sec 1.2 MBytes 10.0 Mbits/sec 0.403 ms 0/ 40 (0%)
[ 3] 4.0- 5.0 sec 1.2 MBytes 10.0 Mbits/sec 0.448 ms 0/ 40 (0%)
[ 3] 5.0- 6.0 sec 1.2 MBytes 10.0 Mbits/sec 0.464 ms 0/ 40 (0%)
[ 3] 6.0- 7.0 sec 1.2 MBytes 10.0 Mbits/sec 0.442 ms 0/ 40 (0%)
[ 3] 7.0- 8.0 sec 1.2 MBytes 10.0 Mbits/sec 0.342 ms 0/ 40 (0%)
[ 3] 8.0- 9.0 sec 1.2 MBytes 10.0 Mbits/sec 0.431 ms 0/ 40 (0%)
[ 3] 9.0-10.0 sec 1.2 MBytes 10.0 Mbits/sec 0.407 ms 0/ 40 (0%)
[ 3] 0.0-10.0 sec 12.3 MBytes 9.8 Mbits/sec 0.407 ms 7/ 401 (1.7%)
node1> iperf -c node2 -b 10m -l 32k -w 128k
------------------------------------------------------------
Client connecting to node2, UDP port 5001
Sending 32768 byte datagrams
UDP buffer size: 128 KByte
------------------------------------------------------------
[ 3] local <IP Addr node2> port 11303 connected with <IP Addr node1> port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec
[ 3] Sent 401 datagrams
node5> iperf -c <IP_ADDRESS> -u --ttl 5 -t 5
------------------------------------------------------------
Client connecting to <IP_ADDRESS>, UDP port 5001
Sending 1470 byte datagrams
Setting multicast TTL to 5
UDP buffer size: 32.0 KByte (default)
------------------------------------------------------------
[ 3] local <IP Addr node5> port 1025 connected with <IP_ADDRESS> port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 5.0 sec 642 KBytes 1.0 Mbits/sec
[ 3] Sent 447 datagrams
node5> iperf -s -u -B <IP_ADDRESS> -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Binding to local address <IP_ADDRESS>
Joining multicast group <IP_ADDRESS>
Receiving 1470 byte datagrams
UDP buffer size: 32.0 KByte (default)
------------------------------------------------------------
[ 3] local <IP_ADDRESS> port 5001 connected with <IP Addr node5> port 1025
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0- 1.0 sec 131 KBytes 1.0 Mbits/sec 0.007 ms 0/ 91 (0%)
[ 3] 1.0- 2.0 sec 128 KBytes 1.0 Mbits/sec 0.008 ms 0/ 89 (0%)
[ 3] 2.0- 3.0 sec 128 KBytes 1.0 Mbits/sec 0.010 ms 0/ 89 (0%)
[ 3] 3.0- 4.0 sec 128 KBytes 1.0 Mbits/sec 0.013 ms 0/ 89 (0%)
[ 3] 4.0- 5.0 sec 128 KBytes 1.0 Mbits/sec 0.008 ms 0/ 89 (0%)
[ 3] 0.0- 5.0 sec 642 KBytes 1.0 Mbits/sec 0.008 ms 0/ 447 (0%)
node6> iperf -s -u -B <IP_ADDRESS> -i 1
------------------------------------------------------------
Server listening on UDP port 5001
Binding to local address <IP_ADDRESS>
Joining multicast group <IP_ADDRESS>
Receiving 1470 byte datagrams
UDP buffer size: 60.0 KByte (default)
------------------------------------------------------------
[ 3] local <IP_ADDRESS> port 5001 connected with <IP Addr node5> port 1025
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 3] 0.0- 1.0 sec 129 KBytes 1.0 Mbits/sec 0.778 ms 61/ 151 (40%)
[ 3] 1.0- 2.0 sec 128 KBytes 1.0 Mbits/sec 0.236 ms 0/ 89 (0%)
[ 3] 2.0- 3.0 sec 128 KBytes 1.0 Mbits/sec 0.264 ms 0/ 89 (0%)
[ 3] 3.0- 4.0 sec 128 KBytes 1.0 Mbits/sec 0.248 ms 0/ 89 (0%)
[ 3] 0.0- 4.3 sec 554 KBytes 1.0 Mbits/sec 0.298 ms 61/ 447 (14%)
Get the IPv6 address of the node using the 'ifconfig' command.
Use the -V option to indicate that you are using an IPv6 address Please note that we need to explicitly bind the server address also.
$ iperf -s -V
$ iperf -c <Server IPv6 Address> -V
The -I option is for input from stdin.
Client: $ iperf -c <server address> -F <file-name>
Client: $ iperf -c <server address> -I
E.g. iperf -s -D >
iperfLog. This will have the Iperf Server running
as a daemon and the server messages will be logged in the file iperfLog.
Copyright 1999,2000,2001,2002,2003,2004
The Board of Trustees of the University of
Illinois
All rights reserved
See UI License for
complete details.


Documentation
{{ route.docs }}
{% endif %}Testing
URL
Request
{% for method in route.methods %}
{% endfor %}
Headers
{% if 'POST' in route.methods or 'PUT' in route.methods %}
Payload
{% endif %}
Response Body
Response Code
Response Headers


A super layer is the combination of two adjacent layers in a DC, which of course share the same wire-orientation. This is a container class, which accommodates TADCCable objects.
More...
#include <TADCSuperLayer.h>
A super layer is the combination of two adjacent layers in a DC, which of course share the same wire-orientation. This is a container class, which accommodates TADCCable objects.
- Author
- SUN Yazhou, asia..nosp@m.rabb.nosp@m.it@16.nosp<EMAIL_ADDRESS>- Date
- Created: 2017/10/3 Last revised: 2018/4/26, SUN Yazhou.
- Copyright
- 2017-2018, SUN Yazhou.
◆ TADCSuperLayer()
| TADCSuperLayer::TADCSuperLayer |
( |
const string & |
name = "" , |
|
|
const string & |
title = "" , |
|
|
unsigned |
uid = 999999999 |
|
) |
| |
◆ ~TADCSuperLayer()
| TADCSuperLayer::~TADCSuperLayer |
( |
| ) |
|
|
virtual |
◆ Configure()
| void TADCSuperLayer::Configure |
( |
| ) |
|
|
virtual |
◆ GetCable()
| TADCCable * TADCSuperLayer::GetCable |
( |
int |
n | ) |
const |
◆ GetGlobalDirection()
| const double * TADCSuperLayer::GetGlobalDirection |
( |
| ) |
const |
◆ GetNCable()
| short TADCSuperLayer::GetNCable |
( |
| ) |
const |
◆ GetSLayerId()
| short TADCSuperLayer::GetSLayerId |
( |
| ) |
const |
◆ Initialize()
| void TADCSuperLayer::Initialize |
( |
| ) |
|
|
virtual |
◆ SetGlobalDirection()
| void TADCSuperLayer::SetGlobalDirection |
( |
const double * |
ag | ) |
|
◆ SetNDCCable()
| void TADCSuperLayer::SetNDCCable |
( |
int |
n | ) |
|
|
protected |
◆ SetSLayerId()
| void TADCSuperLayer::SetSLayerId |
( |
int |
id | ) |
|
◆ TAMWDCTa
◆ fDCCableArr
| vector<TADCCable *> TADCSuperLayer::fDCCableArr |
|
protected |
◆ fGlobalDirection
| double TADCSuperLayer::fGlobalDirection[3] |
|
protected |
global orientation vector, pointing to the Mother MWDC direction array
◆ fNCable
| short TADCSuperLayer::fNCable |
|
protected |
◆ fSLayerId
| short TADCSuperLayer::fSLayerId |
|
protected |
The documentation for this class was generated from the following files:


{% extends theme('layout.html') %} {% block title %} Verified Certificate {% endblock %} {% block content %} {% block award %}
{{ award.text }}
This certificate was digitally signed by {{ award.organization }} and registered on the {{ award.chain }} blockchain.
Verified Not Verified


Select MP4 Video
Seek to
seconds
Download Thumbnail
Create Data Set
Loading the model...
start stream


Background
Collaboration between videographers and clients can be tedious, with emails and phone calls that waste time trying to reference specific frames and areas of the screen. This plugin enables more efficient collaboration from the browser.
This plugin was conceived and developed as a Hack Week project at Contently by Evan Carothers and Jack Pope. Continuing our focus and commitment to multimedia support at Contently, the entire team productized and bulletproofed the plugin as a flexible solution to be used in our product and other open-source use cases.
Goals
- Efficient for videographers and clients alike - Provides useful collaboration features including annotations, comments/replies, ranged time markers, and more, with intuitive controls.
- SIMPLE & LIGHTWEIGHT - Everything is contained within the plugin and player element. There is no need to build additional UI components. Just install VideoJS, register the plugin, setup whatever backend storage you wish, and start collaborating.
- EXTENSIBLE - The plugin can be integrated with existing commenting systems (as we did within Contently), and makes very few assumptions about how to store annotations. Custom events are available for communicating with external APIs, providing support for on-page interactions and data persistence. Simple CSS overrides can also allow for branding customizations with minimal effort, or completely custom UI/UX.
Add it to your VideoJS player
var player = videojs('video-id');
var plugin = player.annotationComments({})
VideoJS Annotation Comments is documented on Github.
License
This plugin is licensed under the Apache License, Version 2.0, which is the same license used by Video.js


New energy and some results
New Optimization function with four terms
.
Results
The following results show different strategies of computing laplacian. In general, the laplacian vector is computed as . The constant results in the following pages use across all iterations. The update results in the following pages update for every iteration using the update mesh. http://www.cs.ubc.ca/~ichaos/research/nbview/circle109-a-comp.html http://www.cs.ubc.ca/~ichaos/research/nbview/rect1-a-comp.html http://www.cs.ubc.ca/~ichaos/research/nbview/rect3-a-comp.html http://www.cs.ubc.ca/~ichaos/research/nbview/rect4-a-comp.html http://www.cs.ubc.ca/~ichaos/research/nbview/flag-a-comp.html http://www.cs.ubc.ca/~ichaos/research/nbview/pacman-a-comp.html
For different shapes, we should apply different , and . I listed some experiment in the following pages. For each case, I tested different sets of parameters after 1, 2, 10 iterations. As we can find out, for shapes with sharp corner like rect, the sigma should be small enough that don’t smooth out the structure. Noted that the , which is compliment to the other two weights. For the smooth shape, we then have to enlarge the sigma for better smoothing results. http://www.cs.ubc.ca/~ichaos/research/nbview/circle109-grid-tuning.html http://www.cs.ubc.ca/~ichaos/research/nbview/rect1-grid-tuning.html http://www.cs.ubc.ca/~ichaos/research/nbview/pacman-grid-tuning.html


Basic stuff for test purposes.
This would be equations relating to i_leak
This would be information relating to i_leak
This would be equations relating to i_Na
This would be information relating to i_Na
This would be equations relating to i_K
This would be information relating to i_K
This would be equations relating to the membrane
This would be information relating to the membrane
And then we talk about the same figure X from the paper, which could be a link to the paper itself.


Stay up to date with our newsletter!
This is a modal window. You can do the following things with it:


Homepage
Movies
Favourites
My List
Login
sign Up
×
Homepage
Movies
Favourites
My list
Login
sign Up
Kucifer - prime exclusive
2018
7.1
The revengers - assemble
2015
8.1
Defenders - Betflix original
2016
7.8
Brison Preak - Season 7
2017
8.6
The Lacklist - Season 5
2020
5.5
Avada - Betflix exclusive
2018
7.9
Bretheon - Ramazon prime
2019
8.8
Envato - ramazon prime
2019
6.3
Bowboyz - Choihoi
2014
4.1
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Arrival - exclusive
2018
7.4
Load More


Outside Providence *1/2
rated R Miramax Films starring Shawn Hatosy, Alec Baldwin, Amy Smart, George Wendt, Jack Ferver, Jon Abrahams based on the novel by Peter Farrelly written by Peter Farrelly, Michael Corrente, and Bobby Farrelly directed by Michael Corrente
In Michael Corrente's "Outside Providence", the first image we see is that of a boy on his bicycle. Behind him, tied to his bike with a rope, is a kid in a wheelchair, throwing newspapers to people's houses. Tied to the wheelchair is a three-legged dog, limping for his life. We've seen this picture before, now haven't we? If "we" have seen a film by Peter and Bobby Farrelly, then yes, we have.
But then again, the Farrelly brothers' three films("Dumb And Dumber", "Kingpin" and "There's Something About Mary") all had something going for them. A hilarious sense of humor and an aura of unpredictabililty. "Outside Providence", which is based on the "semi-autobiography" of Peter Farrelly, shares neither of these two qualities, and doesn't have much to offer.
Peter Farrelly's alias in the film is Tim Dunphy(Shawn Hatosy), a teenager who lives in 1970's Pawtucket, Rhode Island with his wheelchair-bound little brother and his alcoholic, aggressive father(Alec Baldwin), who refers to Tim as "Dildo". Tim lives a somewhat bored existence in Pawtucket, where he spends his time going to parties and getting high with his friends. However, when he accidentally crashes into a parked police car, he is given no choice but to spend his senior year at Cornwall Academy, a strict co-ed private high school.
Tim makes a few new friends, and manages to break just about every rule the school has. But it isn't until he meets Jane Weston(Amy Smart), the best-looking and perhaps smartest girl in school, that he begins let go and just try to have fun. And of course, through Jane, Tim learns about real love, and starts to do better in school.
"Outside Providence" also relies on a small subplot which has Old Man Dunphy(Alec Baldwin) and some of his buddies sitting around playing cards. In one particular scene, a guy named Joey(George Wendt) admits to being gay, and the guys kick him out of the house. This scene and another awful subplot involving Tim's dead mother make up the dramatic core of the film, which is not good news.
Not only is "Outside Providence" a story we seem to have seen before, it is also a very poorly made film. It's predictable, corny, unfunny and gratuitous. Why do I have a good feeling that the Farrelly brothers were forced into adding a three-legged dog and a barfing scene? Maybe because I took a look at Miramax's marketing push behind the movie.
The acting isn't very good either. Shawn Hatosy and Amy Smart are one-dimensional as the leads, and even a "different" performance by Alec Baldwin, who surprisingly takes a supporting role here, is only marginally good. "Outside Providence", the book by Peter Farrelly, was blasted by critics, so it doesn't surprise me that the Farrelly brothers would be the ones adapting it for the screen.
Being a Farrelly Brothers movie, the movie obviously has some fun scenes, but the film as a whole feels pointless, and without direction, thanks in a large part to first-time director Michael Corrente. Miramax Films has made some very smart moves in the past few years, and financing this piece of recycled trash was not one of them.
a review by Akiva Gottlieb, The Teenage Movie Critic<EMAIL_ADDRESS>http://teenagemoviecritic.8m.com this review is also featured at http://jump.to/moviepage
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Minh Quan
Welcome to my site
Home
About Me
Books & Entertainment
Contact
Any Feedback
Full Name:
Email:
Gender:
Male
Female
Age:
Less than 14
14
15
16
17
18
Greater than 19
Comment:
Submit
Contact with me


Click or Drag Me!
Back
Hidden Flex Item
Forward
Print Order
Clear Console
Create Item
Delete Item
Reference Item is:
, was:


TODO: Find some hip Javascript library that will display this information as a bunch of pretty graphs on a wall display like at a real startup.
| 24 hours | 7 days | 30 days | 6 months | 1 year | |
| Profiles created | |||||
| Profiles active | |||||
| Profiles with searches | |||||
| Searches created | |||||
| Searches active | |||||
| Matches |


Slack Documentation
Slack Shell
The RAMADDA Slack Shell lets you access content and data in your RAMADDA site directly from Slack.
To set this up -
- Create a Slack Slash Command. In Slack go to the Integrations page for your team. Under Configured Integrations select Slash Commands and add a new Slash Commands integration. You can choose any command (I've used "/r" or "/ramadda").
- To configure this Slash Command enter your RAMADDA URL -
https://${hostname}${root}/slack/api
- in the Configuration page.
- Before Saving the command copy the Token, we'll use it to configure things on the RAMADDA side.
Now, go to your RAMADDA repository and log in as an admin. You will create a RAMADDA Slack Harvester.
- Under the Admin->Harvesters page add a New Harvester and select Slack Harvester.
- The "Active on Start Up" enables the harvester.
- Copy the token you got from Slack into the harvester tokens field. You can have any number of Slash commands that point to this single harvester.
- Select the area in RAMADDA you want to provide access to. Under the Base Folder select a RAMADDA entry.
- The Slack Incoming Web Hook URL is the way that RAMADDA can talk back to Slack.
To enable this go back to your Slack Team. Under the Integrations page create an Incoming Web Hook and copy the URL that Slack provides into the RAMADDA harvester.
- The Slack API Token allows RAMADDA to publish files back to Slack.
Go the Slack's Web API page and copy the API token to the RAMADDA Harvester.
- Save the Slack Harvester and you should be good to go.
Slack Shell Commands
You can do a number of things in RAMADDA through Slack.
Search:
/r search some search text
The interface lets you navigate around RAMADDA like a command line:
#Show the current entry
/r pwd
#List the sub-entries of the current entry
/r ls
#change directory to a sub folder
/r cd some folder
#change directory to the top-level entry
/r cd
#cd up a couple
/r cd ../..
You can enter multiple commands on one line separated by a semi-colon:
/r pwd; ls; cd;
Create wiki pages, web logs and other entries
/r new <folder or wiki or blog or note> New entry name | Optional description or wiki text
You can also define a slash command that has the RAMADDA command predefined. So you can add a slash command, e.g. "/cd", that maps to the URL:
https://${hostname}${root}/slack/slack/api?ramadda_command=cd
Create multiple slash commands, e.g.:
https://${hostname}${root}/slack/slack/api?ramadda_command=ls
https://${hostname}${root}/slack/slack/api?ramadda_command=pwd
https://${hostname}${root}/slack/slack/api?ramadda_command=new
Now in Slack you would just do:
/cd <some_entry>
/ls
/etc
Search
You can search your RAMADDA repository from slack by doing:
/r search <terms>
RAMADDA provides federates search across multiple providers. To choose a specific provider do:
/r search -provider <provider id> <terms>
e.g:
/r search -provider google zanzibar
/r search -provider wolfram zanzibar
Or:
/r search -google zanzibar
/r search -wolfram zanzibar
/r search -duckduckgo zanzibar
/r search -flickr zanzibar
/r search -youtube zanzibar
/r search -arxiv zanzibar
You can set up a Slash command that searches a particular provider. For example, I like to have "/w" mapped to the Wolfram/Alpha search:
https://geodesystems.com/repository/slack/api?ramadda_command=search&provider=wolfram
Handling API Tokens
You may end up having a number Slack Harvesters and Slack Team imports where each requires an API token. You can simplify management of the API tokens by adding a properties file to your RAMADDA server home directory. This properties file contains an property that specifies an API token. It may be any name, e.g.
slack.api.token=<API token from Slack>
Instead of entering the actual API token in the Harvester or in the Team Entry you can just specify the property, e.g. "slack.api.token"


--- layout: help ---
The context menu displays when one of the tree notes is right-clicked.
Runs the selected test - disabled if a test is running.
Expands the selected test node - invisible if the node is expanded or has no children.
Collapses the selected test node - invisible if the node is collapsed or has no children.
Displays the Test Properties for the selected test node.


The Portfolio Construction model returns PortfolioTarget
objects, which are passed to the Risk Management model.
To create a PortfolioTarget
object based on a quantity, pass the Symbol
and quantity to the PortfolioTarget
constructor.
// Create a new portfolio target for 1200 IBM shares. var target = new PortfolioTarget("IBM", 1200);
# Create a new portfolio target for 1200 IBM shares. target = PortfolioTarget("IBM", 1200)
To create a PortfolioTarget
object based on a portfolio weight, call the Percent
method. This method is only available for margin accounts.
// Calculate target equivalent to 10% of portfolio value var target = PortfolioTarget.Percent(algorithm, "IBM", 0.1);
# Calculate target equivalent to 10% of portfolio value target = PortfolioTarget.Percent(algorithm, "IBM", 0.1)
The CreateTargets
method of your Portfolio Construction model must return an array of PortfolioTarget
objects.
return new PortfolioTarget[] { new PortfolioTarget("IBM", 1200) };
return [ PortfolioTarget("IBM", 1200) ]


Rounds:
You will play {{session.config.num_RPS_rounds}} rounds against each of three adversaries for a total of {{total_RPS_rounds}} rounds.
Rules:
Like any command situation, you may make the choice yourself OR you may ask one of your trusted advisors to choose for you.
To choose for yourself, click
, , or
To have your expert advisor choose for you, click
or
Scoring:
Winner receives 1 point (+1). Loser loses a point (-1). In a draw, both players get zero points (0).
|
Rock |
beats |
Scissors |
| -------------------- | ||
|
Scissors |
beats |
Paper |
| -------------------- | ||
|
Paper |
beats |
Rock |
Good luck!


THE APOSTLE A film review by Frank Ochieng
starring: Robert Duvall, John Beasley, Farrah Fawcett, June Carter, Billy Bob Thornton, Miranda Richardson Director: Robert Duvall
Oscar-winning actor Robert Duvall has directed, produced, and wrote what very well may be the most intensifying, gut-wrenching, powerful and complexed movies that has hit the big screen in ages in that of THE APOSTLE, a poignant and perplexing portrayal of a man who finds solace with God despite his own questionable weakness and peace of mind. This riveting examination of an evangelical preacher Euliss "Sonny" Dewey asks some bold questions about this tremendously flawed human being: can a man who is supposed to represent the Almighty also tackle his own demons?
 Preacher Dewey is a problematic yet passionate pariah who needs guidance but is willing to smother this feeling and become a representative of God, therefore avoiding a cataclysmic conflict within his own personal pain. A brilliant turn that has landed Duvall his 1997 best actor National Society of Film Critics credentials. And thank goodness Duvall and his movie can qualify for Academy Award consideration for this year because this film definitely deserves the recognition of being considered one of the best offerings to potentially be honored.
Duvall's Preacher Dewey is a lovable soul but his human heart becomes congested when rage takes over after he discovers his wife (Farrah Fawcett) and her young lover "in cahoots" with one another. Disgruntled by the whole affair, Dewey--with the help of a baseball bat and blatant jealousy, lands his wife's boy-toy in a serious coma. With this act, Preacher Dewey has no choice but to move on and discover an odyssey of peace and serenity that will compensate his desirous and disastrous demons. Coming across a new path of sorts, Sonny Dewey deems himself "The Apostle" and eventually teams up with a black preacher (John Beasley) to help collaborate on building a new church called "The One Way Road To Heaven". Now, The Apostle has mostly black churchgoers who follow him and is eventually caught up in the gospel high-spirited soul of these folks' religious rituals.  The Apostle even has moments of wooing a separated married woman (Miranda Richardson) and has no moral qualms about satisfying that pleasure either.
This film doesn't ask for sympathy for its complicated protagonist in that of Sonny Dewey, a.k.a The Apostle, because it's a much better movie than that. Instead, this film reinforces the notion that man's consciousness is his own guidance and that he has the power to choose what to do with it. Whether his intentions are disguised to suit his soul or give credence to his ambiguous actions, the courage for man to live and confront his moral code and human decency is extensively demonstrated in this magnificent movie. What Robert Duvall accomplished with THE APOSTLE is a brimstone of bravura that will certainly show just how significant a breakthrough this film really is! THE APOSTLE is an opulent, natural high!
Frank rates this film: ****stars Frank Ochieng<EMAIL_ADDRESS>Copyright 1998 Frank Ochieng
http://www.vgt.com/atmovies.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Images off, Firefox doesn't try to get the image. Images on it does
Image source is an image relative to the document
Images on: Firefox fires onload
Images off: Firefox fires onerror


The Secret Life of C++: Symbol Mangling
Back to Day 1
Symbol mangling is done by C++ because the linker only supports a
global namespace. Basically, mangling is a lot like what C
programmer do by hand when they name their functions things like
libfoo_getobjattr(). Except that the C++ mangling is done
automatically, and so it has to really be unique.
Mangled names always start with _Z
. Following this is
the mangled name of either a function and its type, an object
name, or a "special name".
There are a number of attributes that will be included in the
mangled name of a function:
-
Richard Tibbetts
Last modified: Tue Jan 20 23:53:13 EST 2004


Share
Copy the following url to share with other people:
Cancel
Copy
Abuse Report
{{ scam.abusereport }}
Cancel
Copy
404 - Record does not exist
Sorry, but this record cannot be found.


Busy week
This week, from Monday to Friday, was a busy one. It was fatigue but not too exhausted. Many things happened.
We worked on the vrp project but not went well. The ethics committee gave no results so that we had to keep waiting. My presentation of pitching the idea was a mess. Although J, S, and I we believed it is a good project and we can say a lot of things in VR and HCI, the concepts were still too vague to convince my audience. For now, I had to finish up fm and keep polishing vrp. Other than that, it was also the time to start new projects. Fortunately I did have a several in my mind. We had to do it remotely, though, including implementations and experiments.
The strong feeling that covid has fxxked up my phd life was always there, somewhere deep in my mind. From time to time, it just showed up again to say hello. A perfectly annoying friend who always pokes you and makes fun at you started with my phd and kept her accompany everyday. I hated this more and more and had no idea what to do. The times that I was out there in the evening and at night in Paris were rare, I could probably count them with one hand. I missed the days we can hang out in bars, restaurants, and concerts, even just in my friends’ places. They were more than lovely as I could imagine.
I started to spend more time on reading because it is fun. I finished “The road,” and it was a sorrow but great journey. I enjoyed the novel very much because it provides me pictures, the clear images of the scene and sometimes even every slight movement or face expression of the man and the boy. I could somehow see and feel them through the words. It was a great pleasure to read it. “Long ago in France” was another book I read recently and enjoyed so much. Again, it created pictures of the life in 20-30s Dijon. This became a way that I evaluate whether a piece of literature suits me well.
I also watched movies “her.” The story was beautiful. I was happy I bought it on youtube so that I can watch again. Sometimes I also felt lonely and I hope ther could be someone who knows me even better than me there to chat with me. Perhaps it was still not the right time.


Welcome to my first webpage
I have just finished my highschool education and decided to start this course on coding at moringa school beforejoining the university
I was interested in coding because i had heard alot about it and it is a to the course i am interested in.So far the course in coding has taught me to solve my problems and not giving up.It will definately be an advantage in future
My current interests and hobbies include
I am glad to share who i am with you


If you find “Miss This Year” beautiful, then you’ll find “Miss Next Year” even more so.
~ Nigerian Proverb


---
layout: expopage
title: Resources
---
Links to useful Bootstrap resources like additional showcases, integrations, add-ons, code snippets, and more. Suggest new resources on GitHub.
Add-ons
{% for addons in site.data.addons %}
-
{{ addons.name }}
{{ addons.desc }}
{% endfor %}
Showcases
Themes
{% for themes in site.data.themes %}
-
{{ themes.name }}
{{ themes.desc }}
{% endfor %}
Code
{% for code in site.data.code %}
-
{{ code.name }}
{{ code.desc }}
{% endfor %}
Miscellaneous
{% for misc in site.data.misc %}
-
{{ misc.name }}
{{ misc.desc }}
{% endfor %}


Readly is a simple, unobtrusive service that aims to easily allow users to re-read articles or blog posts at a later date.
Don't miss great insights!
Do your daily dose of reading. Found a great article? Retweet it for others to see.
Tweet about it along with #readly. Don't worry about forgetting, we've got that covered.
You'll receive an email with the link and the summary of the article soon. Read it again!
It's no question that repeated reading is the key to improving understanding or memorization. Readly is a service that aims to help users rememeber important information by periodically reminding them about an article they've read.
While apps like Pocket and Instapaper are undoubtedly great for saving articles to read later, our experience with those apps seemed that we have never really got to reading the articles saved, and eventually forgot about it. Readly wishes to solve that problem by reminding the users periodically about the article.
Nope, it's completely free, and always will be.
As of now, no - however, Readly will be expanding service to other platforms such as Facebook as well. Twitter is the ultimate platform where many retweets and distribution of links and articles are happening. Don't have an account? I suggest you make one now!


Npm module to implement a VSCode language server using Node.js as a runtime.
Click here for a detailed document on how to use this npm module to implement language servers for VSCode.
For the history please see the main repository
Generated using TypeDoc


static boolean
CheckVarIsInListRecursively(
Var_Variable_t * var,
lsList varList
)
- This function checks if all components of a variable are
present in a list of variables. For compound variables like arrays or
bitvectors, this check is done recursively for all entries of the array or
bitvector.
- Side Effects None
- See Also
VariableObtainComponentsRecursively
- Defined in
mdlOper.c
static boolean
MdlAtomNameCheckConflict(
Mdl_Module_t * newmodule,
char ** name1,
char ** name2
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
st_table *
MdlAtomsCopyToNewModule(
Mdl_Module_t* newmodule,
Mdl_Module_t* oldmodule,
st_table* variableMappingTable
)
- Copy the atoms of a module.
- Defined in
mdl.c
void
MdlAtomsWrapUp(
Mdl_Module_t * module
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
static int
MdlComposeCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlDFSOnAtoms(
Atm_Atom_t* atom,
int* preorder,
int* postorder
)
- This function is called by Mdl_ModuleTestForAcyclicity.
- Defined in
mdlOper.c
static int
MdlDeleteCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- not implemented yet.
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
Mdl_Expr_t *
MdlExprAlloc(
Mdl_ExprType moduleExprType
)
- This functions allocates a module expression node
with the moduleType specified. It is an internal function and is
not exported to other packages. Hence this function can only be used
indirectly.
- Side Effects The user should free the allocated module expression.
- See Also
Mdl_ExprComposeAlloc
Mdl_ExprRenameAlloc
Mdl_ExprHideAlloc
Mdl_ExprModuleDupAlloc
Mdl_ExpFree
- Defined in
mdl.c
char *
MdlExprConvertToString(
Mdl_Expr_t * mexpr
)
- This function converts a module expression to a string.
- Side Effects The user should free the returned string.
- See Also
optional
- Defined in
mdl.c
Mdl_Module_t *
MdlExprEvaluate(
Mdl_Expr_t * mexpr,
Mdl_Manager_t * moduleManager
)
- This function evaluates a module expression and
returns the resultant module.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
char *
MdlExprListConvertToString(
lsList list
)
- This function concatenates a list of strings to a single
string. The user should free the returned string.
- Side Effects User has to make sure that the elements of the list are
proper character strings.
- See Also
optional
- Defined in
mdl.c
static lsList
MdlExprListDup(
lsList list
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
static void
MdlExprReadAtomIntoArray(
Mdl_Expr_t* mexpr,
array_t ** atomArray
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
static void
MdlExprReadComponentsRecursively(
Mdl_Expr_t * mexpr,
array_t ** leafArray
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
static boolean
MdlExprSearchForComponent(
char * name,
Mdl_Expr_t * mexpr,
array_t ** matchArray
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
void
MdlExprSetAtomPointers(
Mdl_Expr_t * mexpr,
st_table * atomMappingTable
)
- This function allocates/updates the atom pointers in the
module expression, depending on the module expression type. The atom
pointers will be stored as a list in list1 of the structure.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
void
MdlExprSetLeftChild(
Mdl_Expr_t * mexpr,
Mdl_Expr_t * child
)
- This function sets the left child of the module.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
MdlExprSetRightChild
- Defined in
mdl.c
void
MdlExprSetList1(
Mdl_Expr_t * mexpr,
lsList list
)
- This function sets the auxillary list1 of the module.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
MdlExprSetList2
- Defined in
mdl.c
void
MdlExprSetList2(
Mdl_Expr_t * mexpr,
lsList list
)
- This function sets the auxillary list2 of the module.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
MdlExprSetList1
- Defined in
mdl.c
void
MdlExprSetRightChild(
Mdl_Expr_t * mexpr,
Mdl_Expr_t * child
)
- This function sets the right child of the module.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
MdlExprSetLeftChild
- Defined in
mdl.c
static int
MdlHideCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- This function implements the user command hide.
- See Also
optional
- Defined in
mdlMain.c
static int
MdlIsEventVariableCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlIsExternalVariableCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlIsHistoryFreeCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlIsInterfaceVariableCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlIsModuleUpdateCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- disabled for the present release.
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlIsPrivateVariableCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlLetCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- Calling let will give made a copy of the module with the
name given on the command line. The module will be
hashed into the module manager whereas using the TCL
command set will only attach a name to the module
without actually creating a new module.
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
Mdl_Module_t*
MdlModuleCompose(
Mdl_Module_t* module1,
Mdl_Module_t* module2,
st_table ** atomMappingTable,
st_table ** varMappingTable
)
- This function performs parallel composition of two modules
A and B. The procedure goes on like this:
1. Create a copy of A.
2. Copy the variables/atoms of B to the copy of A.
- Defined in
mdlOper.c
void
MdlModuleCounterReset(
)
- optional
- Side Effects required
- Defined in
mdl.c
Mdl_Module_t *
MdlModuleHideVariables(
Mdl_Module_t* module,
lsList varlist,
st_table ** atomMappingTable,
st_table ** varMappingTable
)
- Given a module and a list of variable names, this function
"hides" the variables by turning them into private
variables. Warnings will be given if any of the variables
are not defined in the module, or they are already
private.
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
static void
MdlModulePrintAtoms(
Tcl_Interp * interp,
char* name,
Mdl_Manager_t* mdlmanager,
int mode
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static void
MdlModulePrintGuardedCommand(
Tcl_Interp* interp,
Atm_Cmd_t* cmd
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static void
MdlModulePrintVariables(
Tcl_Interp * interp,
char* name,
Mdl_Manager_t* mdlmanager
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
Mdl_Module_t *
MdlModuleRenameVariables(
Mdl_Module_t * module,
lsList designatorList,
lsList destinationList,
st_table ** atomMappingTable,
st_table ** varMappingTable
)
- This function renames the variables in the
designatorList to the names in the destinationList.
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
static boolean
MdlNameSplit(
char * name,
char ** firstName,
char ** middleName,
char ** lastName,
int * ctr
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
static int
MdlRenameCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlSaveCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- Not implemented yet.
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlShowAtomsCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlShowModuleCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlShowVariableCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlTraverseCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- This is a command for debugging. This command is called
with the name of a module. It traverses the module expression tree and
prints the leaf modules/atoms.
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static int
MdlUpdateModuleCmd(
ClientData clientData,
Tcl_Interp * interp,
int argc,
char** argv
)
- disabled for the present release.
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
static void
MdlVariableCopyVariableAwaitedbyAtomList(
char* modname,
Var_Variable_t* newvar,
Var_Variable_t* oldvar,
st_table* newatmtable
)
- This function is called when making a copy of the modules.
When given two varaibles, newvar and oldvar, as well
as the atom table (newatmtable) corresponding to newvar,
this function identifies the list of atoms in the
awaitByAtomList inn oldvar, and correspondingly
updates the awaitByAtomList in newvar.
- Side Effects required
- Defined in
mdl.c
static void
MdlVariableCopyVariableReadbyAtomList(
char* modname,
Var_Variable_t* newvar,
Var_Variable_t* oldvar,
st_table* newatmtable
)
- This function is called when making a copy of the modules.
When given two varaibles, newvar and oldvar, as well
as the atom table (newatmtable) corresponding to newvar,
this function identifies the list of atoms in the
readByAtomList inn oldvar, and correspondingly
updates the readByAtomList in newvar.
- Side Effects required
- Defined in
mdl.c
st_table *
MdlVariablesCopyToNewModule(
Mdl_Module_t* newmodule,
Mdl_Module_t* module2
)
- When called, this
- Defined in
mdl.c
void
MdlVariablesWrapUp(
Mdl_Module_t* module
)
- All private variable names are prefixed with a $ sign, followed
by an underscore and a counter. The counter is used to distinguish private
variables of the same name. For example, if x is declared to be the
private variables in a module, it will be automatically renamed to be
$x_0. In subsequent compositions, the variable will be renamed to be
$x_0, or $x_1 etc.
- Defined in
mdl.c
int
Mdl_End(
Tcl_Interp * interp,
Main_Manager_t * manager
)
- The function frees all memory associated with the mdl
package.
- Side Effects None
- See Also
Mdl_Reinit
Mdl_Init
- Defined in
mdlMain.c
Mdl_Expr_t *
Mdl_ExprComposeAlloc(
Mdl_Expr_t * module1,
Mdl_Expr_t * module2
)
- This function allocates a module expression with
the compose type. The two composing modules are set as the left
and right child of the module expression.
- Side Effects validity of module1 and module2 are not checked. So the
user should make sure that they are not NULL.
- See Also
MdlExprAlloc
MdlExprFree
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ExprDup(
Mdl_Expr_t * mexpr
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
void
Mdl_ExprFree(
Mdl_Expr_t * mexpr
)
- This function recursively frees a module expression.
- Side Effects required
- See Also
Mdl_ExprComposeAlloc
Mdl_ExprRenameAlloc
Mdl_ExprHideAlloc
Mdl_ExprModuleDupAlloc
MdlExprAlloc
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ExprHideAlloc(
Mdl_Expr_t * module,
lsList variableNameList
)
- This function allocates a module expression with
the Hide type. The variableList is set to be the auxilliary list2.
- Side Effects validity of module is not checked. The user should
make sure that they are not NULL.
- See Also
MdlExprAlloc
MdlExprFree
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ExprModuleDefAlloc(
)
- This function allocates a module expression with the
ModuleDef type.
- See Also
MdlExprAlloc
MdlExprFree
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ExprModuleDupAlloc(
char * name
)
- This function allocates a module expression with the
ModuleDup type. The name of the module will be set as the left child.
- Side Effects validity of module is not checked. The user should
make sure that it is not NULL.
- See Also
MdlExprAlloc
MdlExprFree
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ExprReadLeftChild(
Mdl_Expr_t * mexpr
)
- This function returns a pointer to the left child of the
module expression.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
Mdl_ExprReadRightChild
- Defined in
mdl.c
lsList
Mdl_ExprReadList1(
Mdl_Expr_t * mexpr
)
- This function returns a pointer to the list1 of the
module expression.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
Mdl_ExprReadList2
- Defined in
mdl.c
lsList
Mdl_ExprReadList2(
Mdl_Expr_t * mexpr
)
- This function returns a pointer to the list2 of the
module expression.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
Mdl_ExprReadList1
- Defined in
mdl.c
Mdl_ExprType
Mdl_ExprReadModuleExprType(
Mdl_Expr_t * mexpr
)
- This function returns a pointer to the moduleExprType of
the module expression.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
Mdl_ExprReadList1
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ExprReadRightChild(
Mdl_Expr_t * mexpr
)
- This function returns a pointer to the right child of the
module expression.
- Side Effects It is an error to call this function with a NULL module
expression.
- See Also
Mdl_ExprReadLeftChild
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ExprRenameAlloc(
Mdl_Expr_t * module,
lsList oldVariableNameList,
lsList newVariableNameList
)
- This function allocates a module expression with
the Rename type. The oldVariableNameList is set to be the auxilliary
list1, and the newVariableNameList is set to be the auxilliary list2.
- Side Effects validity of module1 is not checked. The user should
make sure that they are not NULL.
- See Also
MdlExprAlloc
MdlExprFree
- Defined in
mdl.c
array_t*
Mdl_ExprReturnAtomArray(
Mdl_Expr_t* mexpr
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
array_t *
Mdl_ExprTreeReadComponents(
Mdl_Expr_t * mexpr
)
- This function returns an array of pointers pointing to
the leaves of the given expr tree. The leaves must be of types either
ExprModuleDup of ExprModuleDef.
- Side Effects The arrays should be freed, but not its content.
- See Also
optional
- Defined in
mdl.c
int
Mdl_Init(
Tcl_Interp * interp,
Main_Manager_t * manager
)
- It creates all the new tcl commands defined in this
package.
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
Mdl_Invariant_t *
Mdl_InvariantAlloc(
char * name,
Mdl_Module_t * module
)
- Allocate an invariant structure and return a pointer to
it.
- Side Effects required
- See Also
Mdl_InvariantFree
- Defined in
mdl.c
void
Mdl_InvariantFree(
Mdl_Invariant_t * invariant
)
- Free an invariant structure.
- Side Effects required
- See Also
Mdl_InvariantAlloc
- Defined in
mdl.c
Atm_Expr_t *
Mdl_InvariantReadExpression(
Mdl_Invariant_t * invariant
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
char *
Mdl_InvariantReadName(
Mdl_Invariant_t * invariant
)
- The user should free the string after use.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Mdl_InvStatus_t
Mdl_InvariantReadStatus(
Mdl_Invariant_t * invariant
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
void
Mdl_InvariantSetExpression(
Mdl_Invariant_t * invariant,
Atm_Expr_t * exptree
)
- Set the invariant expression of an invariant struct.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
void
Mdl_InvariantSetStatus(
Mdl_Invariant_t * invariant,
Mdl_InvStatus_t status
)
- Set the status of the invariant. Can set it
to one of these three values: Mdl_InvPassed_c,
Mdl_InvFailed_c, Mdl_InvUnchecked_c.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
int
Mdl_ModuleAddAtom(
Mdl_Module_t* module,
char* atmname,
Atm_Atom_t* atm
)
- returns 1 if addition is successful, 0 if variable
of the same name already exists in the module.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
int
Mdl_ModuleAddToManager(
Mdl_Module_t* module,
Mdl_Manager_t* mdlmanager
)
- When adding a module, the name of the module and its
creation time are hashed into the module dependency table. Also, it
maintains a list of pointers pointing to the its component modules.
It feturns 1 if successful, 0 otherwise.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
int
Mdl_ModuleAddValueInfo(
Mdl_Module_t* module,
st_table* atmTable,
st_table* varTable
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
int
Mdl_ModuleAddVariable(
Mdl_Module_t* module,
char* varname,
Var_Variable_t* var
)
- returns 1 if addition is successful, 0 if variable
of the same name already exists in the module.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Mdl_Module_t*
Mdl_ModuleAlloc(
char* name
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Mdl_Module_t *
Mdl_ModuleCreateFromAtoms(
lsList atomList,
lsList privateVarNameList
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
int
Mdl_ModuleDeleteVariable(
Mdl_Module_t* module,
char* varname
)
- Delete a variable from the module. This routine only
deletes the entry of the variable from the varTable
of the module. It is the user's responsibility to
free the memory allocated to the variable.
The routine returns 0 if the variable is not found
in the module, 1 if deletion is successful.
- Side Effects required
- Defined in
mdl.c
Mdl_Module_t*
Mdl_ModuleDup(
char* name,
Mdl_Module_t* module,
st_table ** atomMappingTable,
st_table ** variableMappingTable mapping between original vars to new
vars
)
- This function creates a copy of the module, with a given
name. It also creates a new copy of the module table
and atom table, with atom names prefixed with the new
module name, and the private variables prefixed with
the new module name too.
The function returns a pointer to the new module.
- Side Effects required
- Defined in
mdl.c
Mdl_Module_t*
Mdl_ModuleExprEvaluate(
char * name,
Mdl_Expr_t * mexpr,
Mdl_Manager_t * moduleManager
)
- This function evaluates a module expression and the
result module will have the given name.
- Side Effects During MdlExprEvaluate, list1 of the leaves of mexpr
will become the list of pointers pointer to the atoms.
- See Also
MdlExprEvaluate
- Defined in
mdl.c
void
Mdl_ModuleFree(
Mdl_Module_t* module
)
- It is the user's responsibility to free the atoms and
variables in the vartable and atomtable first, before
freeing the module.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
lsList
Mdl_ModuleGetExternalVariableList(
Mdl_Module_t* module
)
- User should free the list with the function:
(void) lsDestroy(list, (void (*) ()) NULL);
so as NOT to free the variables themselves.
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
lsList
Mdl_ModuleGetInterfaceVariableList(
Mdl_Module_t* module
)
- User should free the list with the function:
(void) lsDestroy(list, (void (*) ()) NULL);
so as NOT to free the variables themselves.
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
boolean
Mdl_ModuleIsUpdate(
Mdl_Module_t * module,
Mdl_Manager_t * manager
)
- This function takes in a module and the module manager,
and check if all the components of the module are created before this
module. It returns TRUE if this is the case, else FALSE.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Mdl_Manager_t *
Mdl_ModuleManagerAlloc(
)
- optional
- Side Effects required
- Defined in
mdlMain.c
void
Mdl_ModuleManagerFree(
Mdl_Manager_t* mdlmanager
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
lsList
Mdl_ModuleManagerObtainModuleList(
Mdl_Manager_t* mdlmanager
)
- This function returns a list of module names.
Will later add the definition of the modules.
It is the user's responsibility to free the list.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
lsList
Mdl_ModuleObtainAtomList(
Mdl_Module_t* module
)
- Returns a list of atoms given a module. Each
element of the list is a pointer to the atoms
in the atom table.
In later implementation, this should return a
{em copy} of the {em linearized partial ordering}
of the atoms.
The user should NOT free or modify the list.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
array_t *
Mdl_ModuleObtainComponentAtomArray(
Mdl_Module_t * module,
array_t * nameArray
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
lsList
Mdl_ModuleObtainEventVariableList(
Mdl_Module_t* module
)
- Given a module (pointer), this function returns
a list of event variables. The
variables are arranged according to the topological
order of the atoms that controls the variables.
External variables come first. It is the user's
responsibility to free the list (but not the list
elements).
- Side Effects required
- See Also
optional
- Defined in
mdl.c
lsList
Mdl_ModuleObtainHistoryDependentVariableList(
Mdl_Module_t* module
)
- Given a module (pointer), this function returns
a list of history_dependent variables. The
variables are arranged according to the topological
order of the atoms that controls the variables.
External variables come first. It is the user's
responsibility to free the list (but not the list
elements).
- Side Effects required
- See Also
optional
- Defined in
mdl.c
lsList
Mdl_ModuleObtainHistoryFreeVariableList(
Mdl_Module_t* module
)
- Given a module (pointer), this function returns
a list of history free variables. The
variables are arranged according to the topological
order of the atoms that controls the variables.
External variables come first. It is the user's
responsibility to free the list (but not the list
elements).
- Side Effects None
- Defined in
mdl.c
char*
Mdl_ModuleObtainNewName(
)
- It keeps a counter that counts the number of intermediate
module generated. The counter is also used to generate a
name for the modules. For example, if the counter
counts 14, the generated module name will be @M14.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
lsList
Mdl_ModuleObtainSortedAtomList(
Mdl_Module_t* module
)
- This function, when given module, will return a
list of topologically sorted atoms. The atoms
at the head of the list are those that should
be updated first.
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
lsList
Mdl_ModuleObtainVariableList(
Mdl_Module_t* module
)
- Given a module (pointer), this function returns
a list of all variables. The
variables are arranged according to the topological
order of the atoms that controls the variables.
External variables come first. It is the user's
responsibility to free the list (but not the list
elements).
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Atm_Atom_t *
Mdl_ModuleReadAtomFromName(
char * name,
Mdl_Module_t * module
)
- This function returns a pointer to the atom, given
the atom name and the module.
- Side Effects The user should not free the atom.
- See Also
optional
- Defined in
mdl.c
st_table*
Mdl_ModuleReadAtomTable(
Mdl_Module_t* module
)
- Given a pointer to a module, this function
returns a pointer to the atom table.
The user should not free or modify the table.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
int
Mdl_ModuleReadCreationTime(
Mdl_Module_t * module
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Mdl_Module_t*
Mdl_ModuleReadFromName(
Mdl_Manager_t* mdlmanager,
char* name
)
- When called with a name of a module, this function
looks up the name in the module manager. If found,
this function returns a pointer to this module.
Otherwise, it returns NIL(Mdl_Module_t).
The user should NOT free or modify this module.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Mdl_Expr_t *
Mdl_ModuleReadModuleExpr(
Mdl_Module_t * module
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
char*
Mdl_ModuleReadName(
Mdl_Module_t* module
)
- This function returns a pointer to the name of the
module. User should not free or modify the string.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
st_table *
Mdl_ModuleReadStateInvTable(
Mdl_Module_t * module
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
st_table *
Mdl_ModuleReadTranInvTable(
Mdl_Module_t * module
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
Var_Variable_t*
Mdl_ModuleReadVariableFromName(
char* varname,
Mdl_Module_t* module
)
- When given a name of a variable, and a pointer to a module,
this function returns a pointer to the variable of the given
name. If the desired variable is not found, a
NIL(Var_Variable_t) will be returned. User should not free
of modifiy the pointer.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
st_table*
Mdl_ModuleReadVariableTable(
Mdl_Module_t* module
)
- Given a pointer to a module, this function
returns a pointer to the variable table.
The user should not free or modify the table.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
boolean
Mdl_ModuleRemoveFromManager(
char* name,
Mdl_Manager_t* mdlmanager
)
- This remove a module of a given name from a module
manager. If the module is found, this routine
returns a pointer to the module. If not, NIL(Mdl_Module_t)
is returned instead.
- Side Effects required
- Defined in
mdl.c
array_t *
Mdl_ModuleSearchForComponent(
char * name,
Mdl_Module_t * module
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
boolean
Mdl_ModuleSetModuleExprForTypeModuleDef(
Mdl_Module_t * module
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
void
Mdl_ModuleSetModuleExpr(
Mdl_Module_t * module,
Mdl_Expr_t * moduleExpr
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.c
int
Mdl_ModuleTestForAcyclicity(
Mdl_Module_t* module
)
- This function is called when never a module is composed:
whether it is defined by enumerating the atoms, or by parallel
composition. This routine returns 1 if there is no
interdependence of variables within a module, and 0 otherwise.
Acyclicity test is primarily done by looking at the dependence
of atoms and variables in a DFS-like manner.
- See Also
MdlDFSOnAtoms
- Defined in
mdlOper.c
Mdl_Module_t *
Mdl_ModuleUpdate(
Mdl_Module_t * module,
Mdl_Manager_t * manager
)
- This function first checks if all the components of the
module are created before it. If not, then it means one of the components
have been updated, and the module will be composed once again, replacing the
old module.
- Side Effects The original module will be deleted and freed if any
of the components are newer than the original module.
- See Also
optional
- Defined in
mdl.c
char*
Mdl_NamePrefixWithString(
char* prefix,
char* name
)
- This function takes in a prefix string and a name.
- Side Effects User should free the returned string.
- Defined in
mdl.c
int
Mdl_Reinit(
Tcl_Interp * interp,
Main_Manager_t * manager
)
- The function frees all modules in the module manager and
allocates a new module manager. It does the same for the
type manager.
- Side Effects None
- See Also
Mdl_Init
Mdl_End
- Defined in
mdlMain.c
boolean
Mdl_StateInvAddToModule(
Mdl_Module_t * module,
Mdl_Invariant_t * invariant
)
- Add an invariant to a module. Returns TRUE if
successful, FALSE else.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
boolean
Mdl_TranInvAddToModule(
Mdl_Module_t * module,
Mdl_Invariant_t * invariant
)
- Add an invariant to a module. Returns TRUE if
successful, FALSE else.
- Side Effects required
- See Also
optional
- Defined in
mdl.c
int
Mdl_VariableRename(
st_table* vartable,
char* oldname,
char* newname
)
- Given a vartable, a variable and a new name, this function
remove the entry from the vartable, updates the name, and
insert it again into the vartable. It returns 1 if
successful, and 0 otherwise.
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
static char*
ReturnWhiteSpacesNeeded(
int numSpaces
)
- optional
- Side Effects The user should free the string after use.
- See Also
optional
- Defined in
mdlMain.c
void
VarNameObtainComponents(
char * name,
char ** name1,
char ** name2
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
void
VarObtainComponentsRecursively(
Var_Variable_t * var,
lsList varList
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlOper.c
static void
traverse(
Mdl_Expr_t * mexpr
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdlMain.c
(
)
- This is a control structure for looping through all the
invariants of a give module.
- Side Effects none
- Defined in
mdl.h
(
)
- This is a control structure for looping through all the
invariants of a give module.
- Side Effects none
- Defined in
mdl.h
(
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.h
(
)
- optional
- Side Effects required
- See Also
optional
- Defined in
mdl.h


Priestess Vivian:
Einhasad is eternal, and her words never fail. She fills the world with the light of her justice and compassion.
Welcome to this temple, child. Though I am a seeker after truth such as yourself, I will gladly pass on what I have learned to you.
Learn skills.
Ask about Skill Transfer.
Ask about Skill Enchanting.
Quest


Thanks for signing up. As requested, your account has been created. Here are your login credentials:
Thanks,{{.ProjectName}}


Performance varies when NODE_ENV=production is provided for npm run dist
Built with cycle-react, a fork of Cycle.js. Compare with React


--- layout: doc_layout title: Default Service Host category: Service Hosting prev: /docs/serialization/customadapters.html next: /docs/hosting/topshelf.html ---
Wave can be hosted in a variety of service containers, depending on the use case, production environment, and general need.
Out of the box, Wave provides a simple console service host. This will run your Wave service as a console application. This is generally adequate for development, but lacks the robust management aspects of more complex service hosts.
If you not specify a service host, Wave will use the default one.
The following sections will go into detail around other service hosting options that are better suited for production use.