text:
1 Installing GNUnet. A Tutorial for GNUnet 0.10.x (C version) Christian Grotho Bart Polot Matthias Wachs July 29, Obtaining a stable version
- Kevin Bailey
- 3 years ago
- Views:
1 A Tutorial for GNUnet 0.10.x (C version) Christian Grotho Bart Polot Matthias Wachs July 29, 2014 This tutorials explains how to install GNUnet on a GNU/Linux system and gives an introduction how GNUnet can be used to develop a Peer-to-Peer application. Detailed installation instructions for various operating systems and a detailed list of all dependencies can found on our website at Please read this tutorial carefully since every single step is important and do not hesitate to contact the GNUnet team if you have any questions or problems! Check here how to contact the GNUnet team: https: //gnunet.org/contact_information 1 Installing GNUnet First of all you have to install a current version of GNUnet. You can download a tarball of a stable version from GNU FTP mirrors or obtain the latest development version from our Subversion repository. Most of the time you should prefer to download the stable version since with the latest development version things can be broken, functionality can be changed or tests can fail. You should only use the development version if you know that you require a certain feature or a certain issue has been xed since the last release. 1.1 Obtaining a stable version You can download the latest stable version of GNUnet from GNU FTP mirrors: ftp://ftp.gnu.org/gnu/gnunet/gnunet-0.10.x.tar.gz You should also download the signature le and verify the integrity of the tarball. ftp://ftp.gnu.org/gnu/gnunet/gnunet-0.10.x.tar.gz.sig To verify the signature you should rst import the GPG key used to sign the tarball $ gpg --keyserver keys.gnupg.net --recv-keys 48426C7E And use this key to verify the tarball's signature $ gpg --verify gnunet-0.10.x.tar.gz.sig gnunet-0.10.x.tar.gz After successfully verifying the integrity you can extract the tarball using $ tar xvzf gnunet-0.10.x.tar.gz $ mv gnunet-0.10.x gnunet # we will use the directory "gnunet" in the remainder of this document $ cd gnunet 1.2 Installing Build Tool Chain and Dependencies To successfully compile GNUnet you need the tools to build GNUnet and the required dependencies. Please have a look at for a list of required dependencies and for specic instructions for your operating system. Please check the notes at the end of the congure process about required dependencies. For GNUNet bootstrapping support and the http(s) plugin you should install libcurl. For the lesharing service you should install at least one of the datastore backends mysql, sqlite or postgresql. 1
2 1.3 Obtaining the latest version from Subversion The latest development version can obtained from our Subversion ( svn) repository. To obtain the code you need Subversion installed and checkout the repository using: $ svn checkout After cloning the repository you have to execute $ cd gnunet $./bootstrap The remainder of this tutorial assumes that you have SVN HEAD checked out. 1.4 Compiling and Installing GNUnet First, you need to install at least libgnupgerror version and libgcrypt version $ wget ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.12.tar.bz2 $ tar xf libgpg-error-1.12.tar.bz2 $ cd libgpg-error-1.12 $./configure $ sudo make install $ cd.. $ wget ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt tar.bz2 $ tar xf libgcrypt tar.bz2 $ cd libgcrypt $./configure $ sudo make install $ cd.. Assuming all dependencies are installed, the following commands will compile and install GNUnet in your home directory. You can specify the directory where GNUnet will be installed by changing the --prefix value when calling./configure. If you do not speciy a prex, GNUnet is installed in the directory /usr/local. When developing new applications you may want to enable verbose logging by adding --enable-logging=verbose: $./configure --prefix=$prefix --enable-logging $ make $ make install After installing GNUnet you have to add your GNUnet installation to your path environmental variable. In addition you have to create the.gnunet directory in your home directory where GNUnet stores it's data and an empty GNUnet conguration le: $ export PATH=$PATH:$PREFIX/bin $ echo export PATH=$PREFIX/bin:\\$PATH >> ~/.bashrc $ mkdir ~/.gnunet/ $ touch ~/.gnunet/gnunet.conf 1 ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.12.tar.bz2 2 ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt tar.bz2 2
3 1.5 Common Issues - Check your GNUnet installation You should check your installation to ensure that installing GNUnet was successful up to this point. You should be able to access GNUnet's binaries and run GNUnet's self check. $ which gnunet-arm should return $PREFIX/bin/gnunet-arm. It should be located in your GNUnet installation and the output should not be empty. If you see an output like: $ which gnunet-arm $ check your PATH variable to ensure GNUnet's bin directory is included. GNUnet provides tests for all of it's subcomponents. Run $ make check to execute tests for all components. make check traverses all subdirectories in src. For every subdirectory you should get a message like this: make[2]: Entering directory `/home/mwachs/gnunet/contrib' PASS: test_gnunet_prefix ============= 1 test passed ============= If you see a message like this: Mar 12 16:57: resolver-api ERROR Must specify `HOSTNAME' for `resolver' in configuration! Mar 12 16:57: test_program ERROR Assertion failed at resolver_api.c:204. /bin/bash: line 5: Aborted (core dumped) $dir$tst FAIL: test_program double check the steps performed in Background: GNUnet Architecture GNUnet is organized in layers and services. Each service is composed of a main service implementation and a client library for other programs to use the service's functionality, described by an API. This approach is shown in gure 1a. Some services provide an additional command line tool to enable the user to interact with the service. Very often it is other GNUnet services that will use these APIs to build the higher layers of GNUnet on top of the lower ones. Each layer expands or extends the functionality of the service below (for instance, to build a mesh on top of a DHT). See gure 1b for an illustration of this approach. The main service implementation runs as a standalone process in the operating system and the client code runs as part of the client program, so crashes of a client do not aect the service process or other clients. The service and the clients communicate via a message protocol to be dened and implemented by the programmer. 3
4 User Interface API API API API API API Network Protocol Service Service API API API API Service Service Service API API API API API API API Service Service Service (a) Service with API and network protocol (b) Service interaction 3 First Steps with GNUnet 3.1 Congure your peer Figure 1: GNUnet's layered system architecture First of all we need to congure your peer. Each peer is started with a conguration containing settings for GNUnet itself and it's services. This conguration is based on the default conguration shipped with GNUnet and can be modied. The default conguration is located in the $PREFIX/share/gnunet/config.d directory. When starting a peer, you can specify a customized conguration using the the c command line switch when starting the ARM service and all other services. When using a modied conguration the default values are loaded and only values specied in the conguration le will replace the default values. Since we want to start additional peers later, we need some modications from the default conguration. We need to create a separate service home and a le containing our modications for this peer: $ mkdir ~/gnunet1/ $ touch peer1.conf Now add the following lines to peer1.conf to use this directory. For simplied usage we want to prevent the peer to connect to the GNUnet network since this could lead to confusing output. This modications will replace the default settings: [PATHS] GNUNET_HOME = ~/gnunet1/ # Use this directory to store GNUnet data [hostlist] SERVERS = # prevent bootstrapping 4
5 3.2 Start a peer Each GNUnet instance (called peer) has an identity (peer ID) based on a cryptographic public private key pair. The peer ID is the printable hash of the public key. So before starting the peer, you may want to just generate the peer's private key using the command $ gnunet-peerinfo -c ~/peer1.conf -s You should see an output containing the peer ID similar to: I am peer `0PA02UVRKQTS2C.. JL5Q78F6H0B1ACPV1CJI59MEQUMQCC5G'. GNUnet services are controlled by a master service the so called Automatic Restart Manager (ARM). ARM starts, stops and even restarts services automatically or on demand when a client connects. You interact with the ARM service using the gnunet-arm tool. GNUnet can then be started with gnunet-arm -s and stopped with gnunet-arm -e. An additional service not automatically started can be started using gnunet-arm -i <service name> and stopped using gnunet-arm -k <servicename>. 3.3 Monitor a peer In this section, we will monitor the behaviour of our peer's DHT service with respect to a specic key. First we will start GNUnet and then start the DHT service and use the DHT monitor tool to monitor the PUT and GET commands we issue ussing the gnunet-dht-put and gnunet-dht-get command. Using the monitor line given below, you can observe the behavior of your own peer's DHT with respect to the specied KEY: $ gnunet-arm -c ~/peer1.conf -s # start gnunet with all default services $ gnunet-arm -c ~/peer1.conf -i dht # start DHT service $ cd ~/gnunet/src/dht; $./gnunet-dht-monitor -c ~/peer1.conf -k KEY Now open a separate terminal and change again to the gnunet/src/dht directory: $ cd ~/gnunet/src/dht $./gnunet-dht-put -c ~/peer1.conf -k KEY -d VALUE # put VALUE under KEY in the DHT $./gnunet/src/dht/gnunet-dht-get -c ~/peer1.conf -k KEY # get key KEY from the DHT $ gnunet-statistics -c ~/peer1.conf # print statistics about current GNUnet state $ gnunet-statistics -c ~/peer1.conf -s dht # print statistics about DHT service 3.4 Starting Two Peers by Hand Setup a second peer We will now start a second peer on your machine. For the second peer, you will need to manually create a modied conguration le to avoid conicts with ports and directories. A peers conguration le is by default located in /.gnunet/gnunet.conf. This le is typically very short or even empty as only the dierences to the defaults need to be specied. The defaults are located in many les in the $PREFIX/share/gnunet/config.d directory. To congure the second peer, use the les $PREFIX/share/gnunet/config.d as a template for your main conguration le: $ cat $PREFIX/share/gnunet/config.d/*.conf > peer2.conf Now you have to edit peer2.conf and change: ˆ SERVICEHOME under PATHS 5
6 ˆ Every (uncommented) value for PORT (add 10000) in any section (the option may be commented out if PORT is prexed by "#", in this case, UNIX domain sockets are used and the PORT option does not need to be touched) ˆ Every value for UNIXPATH in any section (e.g. by adding a "-p2" sux) to a fresh, unique value. Make sure that the PORT numbers stay below From now on, whenever you interact with the second peer, you need to specify -c peer2.conf as an additional command line argument. Now, generate the 2nd peer's private key: $ gnunet-peerinfo -s -c peer2.conf This may take a while, generate entropy using your keyboard or mouse as needed. Also, make sure the output is dierent from the gnunet-peerinfo output for the rst peer (otherwise you made an error in the conguration) Start the second peer and connect the peers Then, you can start a second peer using: $ gnunet-arm -c peer2.conf -s $ gnunet-arm -c peer2.conf -i dht $ ~/gnunet/src/dht/gnunet-dht-put -c peer2.conf -k KEY -d VALUE $ ~/gnunet/src/dht/gnunet-dht-get -c peer2.conf -k KEY If you want the two peers to connect, you have multiple options: ˆ UDP neighbour discovery (automatic) ˆ Setup a bootstrap server ˆ Connect manually To setup peer 1 as bootstrapping server change the conguration of the rst one to be a hostlist server by adding the following lines to peer1.conf to enable bootstrapping server: [hostlist] OPTIONS = -p Then change peer2.conf and replace the SERVERS line in the [hostlist] section with Restart both peers using: $ gnunet-arm -c peer1.conf -e # stop first peer $ gnunet-arm -c peer1.conf -s # start first peer $ gnunet-arm -c peer2.conf -s # start second peer Note that if you start your peers without changing these settings, they will use the global hostlist servers of the GNUnet P2P network and likely connect to those peers. At that point, debugging might become tricky as you're going to be connected to many more peers and would likely observe trac and behaviors that are not explicitly controlled by you How to connect manually If you want to use the peerinfo tool to connect your peers, you should: ˆ Remove hostlist from DEFAULTSERVICES (to not connect to the global GNUnet) ˆ Start both peers running gnunet-arm -c peer1.conf -s and gnunet-arm -c peer2.conf -s 6
7 ˆ Get HELLO message of the rst peer running gnunet-peerinfo -c peer1.conf -g ˆ Give the output to the second peer by running gnunet-peerinfo -c peer2.conf -p '<output>' Check that they are connected using gnunet-core -c peer1.conf, which should give you the other peer's peer identity: $ gnunet-core -c peer1.conf Peer `9TVUCS8P5A7ILLBGO6JSTSSN2B44H3D2MUIFJMLKAITC0I22UVFBFP1H8NRK2IA35VKAK16LLO0MFS7TAQ9M1KNBJ4NGCHP3JPVULDG ' 3.5 Starting Peers Using the Testbed Service GNUnet's testbed service is used for testing scenarios where a number of peers are to be started. The testbed can manage peers on a single host or on multiple hosts in a distributed fashion. On a single aordable computer, it should be possible to run around tens of peers without drastically increasing the load on the system. The testbed service can be access through its API include/gnunet_testbed_service.h. The API provides many routines for managing a group of peers. It also provides a helper function GNUNET_TESTBED_test_run() to quickly setup a minimalistic testing environment on a single host. This function takes a conguration le which will be used as a template conguration for the peers. The testbed takes care of modifying relevant options in the peers' conguration such as SERVICEHOME, PORT, UNIXPATH to unique values so that peers run without running into conicts. It also checks and assigns the ports in congurations only if they are free. Additionally, the testbed service also reads its options from the same conguration le. Various available options and details about them can be found in the testbed default conguration le src/testbed/testbed.conf. With the testbed API, a sample test case can be structured as follows: #include <unistd.h> #include <gnunet/platform.h> #include <gnunet/gnunet_util_lib.h> #include <gnunet/gnunet_testbed_service.h> #include <gnunet/gnunet_dht_service.h> /* Number of peers we want to start */ #define NUM_PEERS 20 static struct GNUNET_TESTBED_Operation *dht_op; static struct GNUNET_DHT_Handle *dht_handle; static GNUNET_SCHEDULER_TaskIdentifier shutdown_tid; /** *Closure to 'dht_ca' and 'dht_da' DHT adapters. */ struct MyContext /** *Argument we pass to GNUNET_DHT_connect. */ 7
8 int ht_len; ctxt; /** *Global result for testcase. */ static int result; /** *Function run on CTRL-C or shutdown (i.e. success/timeout/etc.). *Cleans up. */ static void shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) shutdown_tid = GNUNET_SCHEDULER_NO_TASK; if (NULL!= dht_op) GNUNET_TESTBED_operation_done (dht_op); /* indirectly calls the dht_da() for closing down the connection to the DHT */ dht_op = NULL; dht_handle = NULL; result = GNUNET_OK; GNUNET_SCHEDULER_shutdown (); /* Also kills the testbed */ /** *This is where the test logic should be, at least that *part of it that uses the DHT of peer "0". * cls closure, for the example: NULL op should be equal to "dht_op" ca_result result of the connect operation, the *connection to the DHT service emsg error message, if testbed somehow failed to *connect to the DHT. */ static void service_connect_comp (void *cls, struct GNUNET_TESTBED_Operation *op, void *ca_result, const char *emsg) 8
9 GNUNET_assert (op == dht_op); dht_handle = ca_result; /* Service to DHT successful; here we'd usually do something with the DHT (ok, if successful) */ /* for now, just indiscriminately terminate after 10s */ GNUNET_SCHEDULER_cancel (shutdown_tid); shutdown_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10), &shutdown_task, NULL); /** *Testbed has provided us with the configuration to access one *of the peers and it is time to do "some" connect operation to *"some" subsystem of the peer. For this example, we connect *to the DHT subsystem. Testbed doesn't know which subsystem, *so we need these adapters to do the actual connecting (and *possibly pass additional options to the subsystem connect *function, such as the "ht_len" argument for the DHT). * cls closure cfg peer configuration (here: peer[0] NULL on error, otherwise some handle to access the *subsystem */ static void * dht_ca (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) struct MyContext *ctxt = cls; /* Use the provided configuration to connect to service */ dht_handle = GNUNET_DHT_connect (cfg, ctxt->ht_len); return dht_handle; /** *Dual of 'dht_ca' to perform the 'disconnect'/cleanup operation *once we no longer need to access this subsystem. * cls closure op_result whatever we returned from 'dht_ca' */ 9
10 static void dht_da (void *cls, void *op_result) struct MyContext *ctxt = cls; /* Disconnect from DHT service */ GNUNET_DHT_disconnect ((struct GNUNET_DHT_Handle *) op_result); dht_handle = NULL; /** *Main function inovked from TESTBED once all of the *peers are up and running. This one then connects *just to the DHT service of peer 0. * cls closure h the run handle peers started peers for the test num_peers size of the 'peers' array links_succeeded number of links between peers that were created links_failed number of links testbed was unable to establish */ static void test_master (void *cls, struct GNUNET_TESTBED_RunHandle *h, unsigned int num_peers, struct GNUNET_TESTBED_Peer **peers, unsigned int links_succeeded, unsigned int links_failed) /* Testbed is ready with peers running and connected in a pre-defined overlay topology */ /* do something */ ctxt.ht_len = 10; /* connect to a peers service */ dht_op = GNUNET_TESTBED_service_connect (NULL, /* Closure for operation */ peers[0], /* The peer whose service to connect to */ "dht", /* The name of the service */ service_connect_comp, /* callback to call after a handle to service is opened */ NULL, /* closure for the above callback */ dht_ca, /* callback to call with peer's configuration; 10
11 this should open the needed service connection */ dht_da, /* callback to be called when closing the opened service connection */ &ctxt); /* closure for the above two callbacks */ shutdown_tid = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &shutdown_task, NULL); int main (int argc, char **argv) int ret; result = GNUNET_SYSERR; ret = GNUNET_TESTBED_test_run ("awesome-test", /* test case name */ "template.conf", /* template configuration */ NUM_PEERS, /* number of peers to start */ 0LL, /* Event mask -set to 0 for no event notifications */ NULL, /* Controller event callback */ NULL, /* Closure for controller event callback */ &test_master, /* continuation callback to be called when testbed setup is complete */ NULL); /* Closure for the test_master callback */ if ( (GNUNET_OK!= ret) (GNUNET_OK!= result) ) return 1; return 0; The source code for the above listing can be found at After installing GNUnet, the above source code can be compiled as: $ export CPPFLAGS="-I/path/to/gnunet/headers" $ export LDFLAGS="-L/path/to/gnunet/libraries" $ gcc $CPPFLAGS $LDFLAGS -o testbed-test testbed_test.c -lgnunettestbed -lgnunetdht -lgnunetutil The CPPFLAGS and LDFLAGS are necessary if GNUnet is installed into a dierent directory other than /usr/local. All of testbed API's peer management functions treat management actions as operations and return operation handles. It is expected that the operations begin immediately, but they may get delayed (to balance out load on the system). The program using the API then has to take care of marking the operation as done so that its associated resources can be freed immediately and other waiting operations can be executed. Operations will be canceled if they are marked as done before their completion. An operation is treated as completed when it succeeds or fails. Completion of an operation is either conveyed as events through controller event callback or through respective operation completion callbacks. In functions which support completion notication through both controller event callback and operation completion callback, rst the controller event callback will be called. If the operation is not marked as done in that callback or if the callback is given as NULL when creating the operation, the operation completion callback will be called. The API documentation shows which event are to be expected in the controller event notications. It also documents any exceptional behaviour. 11
12 Once the peers are started, test cases often need to connect some of the peers' services. Normally, opening a connect to a peer's service requires the peer's conguration. While using testbed, the testbed automatically generates per-peer conguration. Accessing those congurations directly through le system is discouraged as their locations are dynamically created and will be dierent among various runs of testbed. To make access to these congurations easy, testbed API provides the function GNUNET_TESTBED_service_connect(). This function fetches the conguration of a given peer and calls the Connect Adapter. In the example code, it is the dht_ca. A connect adapter is expected to open the connection to the needed service by using the provided conguration and return the created service connection handle. Successful connection to the needed service is signaled through service_connect_comp_cb. A dual to connect adapter is the Disconnect Adapter. This callback is called after the connect adapter has been called when the operation from GNUNET_TESTBED_service_connect() is marked as done. It has to disconnect from the service with the provided service handle (op_result). Exercise: Find out how many peers you can run on your system. Exercise: Find out how to create a 2D torus topology by changing the options in the conguration le. a Then use the DHT API to store and retrieve values in the network. a See 4 Developing Applications 4.1 gnunet-ext To develop a new peer-to-peer application or to extend GNUnet we provide a template build system for writing GNUnet extensions in C. It can be obtained as follows: $ svn checkout $ cd gnunet-ext/ $./bootstrap $./configure --prefix=$prefix --with-gnunet=$prefix $ make $ make install $ make check The GNUnet ext template includes examples and a working buildsystem for a new GNUnet service. A common GNUnet service consists of the following parts which will be discussed in detail in the remainder of this document. The functionality of a GNUnet service is implemented in: ˆ the GNUnet service (gnunet-ext/src/ext/gnunet-service-ext.c) ˆ the client API (gnunet-ext/src/ext/ext_api.c) ˆ the client application using the service API (gnunet-ext/src/ext/gnunet-ext.c) The interfaces for these entities are dened in: ˆ client API interface (gnunet-ext/src/ext/ext.h) ˆ the service interface (gnunet-ext/src/include/gnunet_service_service.h) ˆ the P2P protocol (gnunet-ext/src/include/gnunet_protocols_ext.h) In addition the ext systems provides: 12
13 ˆ a test testing the API (gnunet-ext/src/ext/test_ext_api.c) ˆ a conguration template for the service (gnunet-ext/src/ext/ext.conf.in) 4.2 Adapting the Template The rst step for writing any extension with a new service is to ensure that the ext.conf.in le contains entries for the UNIXPATH, PORT and BINARY for the service in a section named after the service. If you want to adapt the template rename the ext.conf.in to match your services name, you have to modify the AC_OUTPUT section in configure.ac in the gnunet-ext root. 5 Writing a Client Application When writing any client application (for example, a command-line tool), the basic structure is to start with the GNUNET_PROGRAM_run function. This function will parse command-line options, setup the scheduler and then invoke the run function (with the remaining non-option arguments) and a handle to the parsed conguration (and the conguration le name that was used, which is typically not needed): #include <gnunet/platform.h> #include <gnunet/gnunet_util_lib.h> static int ret; static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) /* main code here */ ret = 0; int main (int argc, char *const *argv) static const struct GNUNET_GETOPT_CommandLineOption options[] = GNUNET_GETOPT_OPTION_END ; return (GNUNET_OK == GNUNET_PROGRAM_run (argc, argv, "binary-name", gettext_noop ("binary description text"), options, &run, NULL))? ret : 1; 13
14 5.1 Handling command-line options Options can then be added easily by adding global variables and expanding the options array. For example, the following would add a string-option and a binary ag (defaulting to NULL and GNUNET_NO respectively): static char *string_option; static int a_flag; //... static const struct GNUNET_GETOPT_CommandLineOption options[] = 's', "name", "SOMESTRING", gettext_noop ("text describing the string_option NAME"), 1, &GNUNET_GETOPT_set_string, &string_option, 'f', "flag", NULL, gettext_noop ("text describing the flag option"), 0, &GNUNET_GETOPT_set_one, &a_flag, GNUNET_GETOPT_OPTION_END ; string_option = NULL; a_flag = GNUNET_SYSERR; //... Issues such as displaying some helpful text describing options using the help argument and error handling are taken care of when using this approach. Other GNUNET_GETOPT_-functions can be used to obtain integer value options, increment counters, etc. You can even write custom option parsers for special circumstances not covered by the available handlers. To check if an argument was specied by the user you initialize the variable with a specic value (e.g. NULL for a string and GNUNET_SYSERR for a integer) and check after parsing happened if the values were modied. Inside the run method, the program would perform the application-specic logic, which typically involves initializing and using some client library to interact with the service. The client library is supposed to implement the IPC whereas the service provides more persistent P2P functions. Exercise: Add a few command-line options and print them inside of run. What happens if the user gives invalid arguments? 5.2 Writing a Client Library The rst and most important step in writing a client library is to decide on an API for the library. Typical API calls include connecting to the service, performing application-specic requests and cleaning up. Many examples for such service APIs can be found in the gnunet/src/include/gnunet_*_service.h les. Then, a client-service protocol needs to be designed. This typically involves dening various message formats in a header that will be included by both the service and the client library (but is otherwise not shared and hence located within the service's directory and not installed by make install). Each message must start with a struct GNUNET_MessageHeader and must be shorter than 64k. By convention, all elds in IPC (and P2P) messages must be in big-endian format (and thus should be read using ntohl and similar functions and written using htonl and similar functions). Unique message types must be dened for each message struct in the gnunet_protocols.h header (or an extension-specic include le) Connecting to the Service Before a client library can implement the application-specic protocol with the service, a connection must be created: 14
15 struct GNUNET_CLIENT_Connection *client; client = GNUNET_CLIENT_connect ("service-name", cfg); As a result a GNUNET_CLIENT_Connection handle is returned which has to used in later API calls related to this service. The complete client API can be found in gnunet_client_lib.h GNUnet Messages In GNUnet, messages are always sent beginning with a struct GNUNET_MessageHeader in big endian format. This header denes the size and the type of the message, the payload follows after this header. struct GNUNET_MessageHeader ; /** *The length of the struct (in bytes, including the length field itself), *in big-endian format. */ uint16_t size GNUNET_PACKED; /** *The type of the message (GNUNET_MESSAGE_TYPE_XXXX), in big-endian format. */ uint16_t type GNUNET_PACKED; Existing message types are dened in gnunet_protocols.h A common way to create a message is: struct GNUNET_MessageHeader *msg = GNUNET_malloc(payload_size + sizeof(struct GNUNET_MessageHeader)); msg->size = htons(payload_size + sizeof(struct GNUNET_MessageHeader)); msg->type = htons(gnunet_my_message_type); memcpy(&msg[1], &payload, payload_size); // use 'msg' Exercise: Dene a message struct that includes a 32-bit unsigned integer in addition to the standard GNUnet MessageHeader. Add a C struct and dene a fresh protocol number for your message. (Protocol numbers in gnunet-ext are dened in gnunet-ext/src/include/gnunet_protocols_ext.h) Sending Requests to the Service Any client-service protocol must start with the client sending the rst message to the service, since services are only notied about (new) clients upon receiving a the rst message. Clients can transmit messages to the service using the GNUNET_CLIENT_notify_transmit_ready API: static size_t transmit_cb (void *cls, size_t size, void *buf) 15
16 //... if (NULL == buf) /* handle error here */; return 0; GNUNET_assert (size >= msg_size); memcpy (buf, my_msg, msg_size); //... return msg_size; //... th = GNUNET_CLIENT_notify_transmit_ready (client, msg_size, timeout, GNUNET_YES, &transmit_cb, cls); //... The client-service protocoll calls GNUNET_CLIENT_notify_transmit_ready to be notied when the client is ready to send data to the service. Besides other arguments, you have to pass the client returned from the connect call, the message size and the callback function to call when the client is ready to send. Only a single transmission request can be queued per client at the same time using this API. The handle th can be used to cancel the request if necessary (for example, during shutdown). When transmit_cb is called the message is copied in the buer provided and the number of bytes copied into the buer is returned. transmit_cb could also return 0 if for some reason no message could be constructed; this is not an error and the connection to the service will persist in this case. Exercise: Dene a helper function to transmit a 32-bit unsigned integer (as payload) to a service using some given client handle Receiving Replies from the Service Clients can receive messages from the service using the GNUNET_CLIENT_receive API: /** *Function called with messages from stats service. * cls closure msg message received, NULL on timeout or fatal error */ static void receive_message (void *cls, const struct GNUNET_MessageHeader *msg) struct MyArg *arg = cls; // process 'msg' //... GNUNET_CLIENT_receive (client, 16
17 //... &receive_message, arg, timeout); It should be noted that this receive call only receives a single message. To receive additional messages, GNUNET_CLIENT_receive must be called again. Exercise: Expand your helper function to receive a response message (for example, containing just the GNUnet Message- Header without any payload). Upon receiving the service's response, you should call a callback provided to your helper function's API. You'll need to dene a new 'struct' to hold your local context (closure). 5.3 Writing a user interface Given a client library, all it takes to access a service now is to combine calls to the client library with parsing command-line options. Exercise: Call your client API from your run method in your client application to send a request to the service. For example, send a 32-bit integer value based on a number given at the command-line to the service. 6 Writing a Service Before you can test the client you've written so far, you'll need to also implement the corresponding service. 6.1 Code Placement New services are placed in their own subdirectory under gnunet/src. This subdirectory should contain the API implementation le SERVICE_api.c, the description of the client-service protocol SERVICE.h and P2P protocol SERVICE_protocol.h, the implementation of the service itself gnunet-service-service.h and several les for tests, including test code and conguration les. 6.2 Starting a Service The key API denitions for starting services are: typedef void (*GNUNET_SERVICE_Main) (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *cfg); int GNUNET_SERVICE_run (int argc, char *const *argv, const char *servicename, enum GNUNET_SERVICE_Options opt, GNUNET_SERVICE_Main task, void *task_cls); Here is a starting point for your main function for your service: static void my_main (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *cfg) 17
18 /* do work */ int main (int argc, char *const*argv) if (GNUNET_OK!= GNUNET_SERVICE_run (argc, argv, "my", GNUNET_SERVICE_OPTION_NONE, &my_main, NULL); return 1; return 0; Exercise: Write a stub service that processes no messages at all in your code. Create a default conguration for it, integrate it with the build system and start the service from gnunet-service-arm using gnunet-arm -i NAME. 6.3 Receiving Requests from Clients Inside of the my_main method, a service typically registers for the various message types from clients that it supports by providing a handler function, the message type itself and possibly a xed message size (or 0 for variable-size messages): static void handle_set (void *cls, struct GNUNET_SERVER_Client *client, const struct GNUNET_MessageHeader *message) GNUNET_SERVER_receive_done (client, GNUNET_OK); static void handle_get (void *cls, struct GNUNET_SERVER_Client *client, const struct GNUNET_MessageHeader *message) GNUNET_SERVER_receive_done (client, GNUNET_OK); static void my_main (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *cfg) static const struct GNUNET_SERVER_MessageHandler handlers[] = &handle_set, NULL, GNUNET_MESSAGE_TYPE_MYNAME_SET, 0, &handle_get, NULL, GNUNET_MESSAGE_TYPE_MYNAME_GET, 0, NULL, NULL, 0, 0 ; GNUNET_SERVER_add_handlers (server, handlers); 18
19 /* do more setup work */ Each handler function must eventually (possibly in some asynchronous continuation) call GNUNET_SERVER_receive_done. Only after this call additional messages from the same client may be processed. This way, the service can throttle processing messages from the same client. By passing GNUNET_SYSERR, the service can close the connection to the client, indicating an error. Services must check that client requests are well-formed and must not crash on protocol violations by the clients. Similarly, client libraries must check replies from servers and should gracefully report errors via their API. Exercise: Change the service to handle the message from your client (for now, by printing a message). What happens if you forget to call GNUNET_SERVER_receive_done? 6.4 Responding to Clients Servers can send messages to clients using the GNUNET_SERVER_notify_transmit_ready API: static size_t transmit_cb (void *cls, size_t size, void *buf) //... if (NULL == buf) handle_error(); return 0; GNUNET_assert (size >= msg_size); memcpy (buf, my_msg, msg_size); //... return msg_size; //... struct GNUNET_SERVER_TransmitHandle *th; th = GNUNET_SERVER_notify_transmit_ready (client, msg_size, timeout, &transmit_cb, cls); //... Only a single transmission request can be queued per client at the same time using this API. Additional APIs for sending messages to clients can be found in the gnunet_server_lib.h header. Exercise: Change the service respond to the request from your client. Make sure you handle malformed messages in both directions. 7 Interacting directly with other Peers using the CORE Service One of the most important services in GNUnet is the CORE service managing connections between peers and handling encryption between peers. One of the rst things any service that extends the P2P protocol typically does is connect to the CORE service using: #include <gnunet/gnunet_core_service.h> 19
20 struct GNUNET_CORE_Handle * GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, void *cls, GNUNET_CORE_StartupCallback init, GNUNET_CORE_ConnectEventHandler connects, GNUNET_CORE_DisconnectEventHandler disconnects, GNUNET_CORE_MessageCallback inbound_notify, int inbound_hdr_only, GNUNET_CORE_MessageCallback outbound_notify, int outbound_hdr_only, const struct GNUNET_CORE_MessageHandler *handlers); 7.1 New P2P connections Before any trac with a dierent peer can be exchanged, the peer must be known to the service. This is notied by the CORE connects callback, which communicates the identity of the new peer to the service: void connects (void *cls, const struct GNUNET_PeerIdentity *peer) /* Save identity for later use */ /* Optional: start sending messages to peer */ Exercise: Create a service that connects to the CORE. Then start (and connect) two peers and print a message once your connect callback is invoked. 7.2 Receiving P2P Messages To receive messages from CORE, services register a set of handlers (parameter *handlers in the GNUNET_CORE_connect call that are called by CORE when a suitable message arrives. static int callback_function_for_type_one(void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_MessageHeader *message) /* Do stuff */ return GNUNET_OK; /* or GNUNET_SYSERR to close the connection */ /** *Functions to handle messages from core */ static struct GNUNET_CORE_MessageHandler core_handlers[] = &callback_function_for_type_one, GNUNET_MESSAGE_TYPE_MYSERVICE_TYPE_ONE, 0, 20
SMTP-32 Library. Simple Mail Transfer Protocol Dynamic Link Library for Microsoft Windows. Version 5.2
SMTP-32 Library Simple Mail Transfer Protocol Dynamic Link Library for Microsoft Windows Version 5.2 Copyright 1994-2003 by Distinct Corporation All rights reserved Table of Contents 1 Overview... 5 1.1More information
Design of a Social Messaging System Using Stateful Multicast
Design of a Social Messaging System Using Stateful Multicast Gabor X Toth University of Amsterdam Faculty of Science System and Network Engineering Master thesis Supervisor: Christian Grothoff, TU MünchenMore information
3.5. cmsg Developer s Guide. Data Acquisition Group JEFFERSON LAB. Version
Version 3.5 JEFFERSON LAB Data Acquisition Group cmsg Developer s Guide J E F F E R S O N L A B D A T A A C Q U I S I T I O N G R O U P cmsg Developer s Guide Elliott Wolin firstname.lastname@example.com Carl Timmer email@example.com information
COMP3331/9331 Computer Networks and Applications Assignment for Session 2, 2015
COMP3331/9331 Computer Networks and Applications Assignment for Session 2, 2015 Version 1.1 Due: 11:59pm Friday, 23 October 2015 (Week 12) Please read the plagiarism policy carefully. We compare submissionMore information
Implementing and testing tftp
CSE123 Spring 2013 Term Project Implementing and testing tftp Project Description Checkpoint: May 10, 2013 Due: May 29, 2013 For this project you will program a client/server network application in C onMore information
sqlite driver manual
sqlite driver manual A libdbi driver using the SQLite embedded database engine Markus Hoenicka firstname.lastname@example.com sqlite driver manual: A libdbi driver using the SQLite embedded database engineMore information
Lab 5: BitTorrent Client Implementation
Lab 5: BitTorrent Client Implementation Due: Nov. 30th at 11:59 PM Milestone: Nov. 19th during Lab Overview In this lab, you and your lab parterner will develop a basic BitTorrent client that can, at minimal,More information
FioranoMQ 9. High Availability Guide
FioranoMQ 9 High Availability Guide Copyright (c) 1999-2008, Fiorano Software Technologies Pvt. Ltd., Copyright (c) 2008-2009, Fiorano Software Pty. Ltd. All rights reserved. This software is the confidentialMore information
A Revocable Backup System (extended abstract)
A Revocable Backup System (extended abstract) Dan Boneh Richard J. Lipton 3 email@example.com firstname.lastname@example.com Department of Computer Science Princeton University Princeton, NJ 08544 Abstract WeMore information
Setting up PostgreSQL
Setting up PostgreSQL 1 Introduction to PostgreSQL PostgreSQL is an object-relational database management system based on POSTGRES, which was developed at the University of California at Berkeley. PostgreSQLMore information
Advanced Computer Networks Project 2: File Transfer Application
1 Overview Advanced Computer Networks Project 2: File Transfer Application Assigned: April 25, 2014 Due: May 30, 2014 In this assignment, you will implement a file transfer application. The applicationMore information
Lab 2 : Basic File Server. Introduction
Lab 2 : Basic File Server Introduction In this lab, you will start your file system implementation by getting the following FUSE operations to work: CREATE/MKNOD, LOOKUP, and READDIR SETATTR, WRITE andMore information
Guideline for setting up a functional VPN
Guideline for setting up a functional VPN Why do I want a VPN? VPN by definition creates a private, trusted network across an untrusted medium. It allows you to connect offices and people from around theMore information
Highly Available AMPS Client Programming
Highly Available AMPS Client Programming 60East Technologies Copyright 2013 All rights reserved. 60East, AMPS, and Advanced Message Processing System are trademarks of 60East Technologies, Inc. All otherMore information
Partek Flow Installation Guide
Partek Flow Installation Guide Partek Flow is a web based application for genomic data analysis and visualization, which can be installed on a desktop computer, compute cluster or cloud. Users can accessMore information
ELEN 602: Computer Communications and Networking. Socket Programming Basics
1 ELEN 602: Computer Communications and Networking Socket Programming Basics A. Introduction In the classic client-server model, the client sends out requests to the server, and the server does some processingMore information
Packet Sniffing and Spoofing Lab
SEED Labs Packet Sniffing and Spoofing Lab 1 Packet Sniffing and Spoofing Lab Copyright c 2014 Wenliang Du, Syracuse University. The development of this document is/was funded by the following grants fromMore information
Hands On Activities: TCP/IP Network Monitoring and Management
Hands On Activities: TCP/IP Network Monitoring and Management 1. TCP/IP Network Management Tasks TCP/IP network management tasks include Examine your physical and IP network address Traffic monitoringMore information
Socket Programming in C/C++
September 24, 2004 Contact Info Mani Radhakrishnan Office 4224 SEL email mradhakr @ cs. uic. edu Office Hours Tuesday 1-4 PM Introduction Sockets are a protocol independent method of creating a connectionMore information
Appendix. Web Command Error Codes. Web Command Error Codes
Appendix Web Command s Error codes marked with * are received in responses from the FTP server, and then returned as the result of FTP command execution. -501 Incorrect parameter type -502 Error gettingMore information
Danware introduces NetOp Remote Control in version 7.01 replacing version 7.0 as the shipping version.
Release notes version 7.01 Danware introduces NetOp Remote Control in version 7.01 replacing version 7.0 as the shipping version. It s available as a free downloadable upgrade to existing version 7.0 customersMore information
TivaWare Utilities Library
TivaWare Utilities Library USER S GUIDE SW-TM4C-UTILS-UG-1.1 Copyright 2013 Texas Instruments Incorporated Copyright Copyright 2013 Texas Instruments Incorporated. All rights reserved. Tiva and TivaWareMore information
Release Notes for Epilog for Windows Release Notes for Epilog for Windows v1.7/v1.8
Release Notes for Epilog for Windows v1.7/v1.8 InterSect Alliance International Pty Ltd Page 1 of 22 About this document This document provides release notes for Snare Enterprise Epilog for Windows releaseMore information
Workflow Templates Library
Workflow s Library Table of Contents Intro... 2 Active Directory... 3 Application... 5 Cisco... 7 Database... 8 Excel Automation... 9 Files and Folders... 10 FTP Tasks... 13 Incident Management... 14 SecurityMore information
PROFESSIONAL. Node.js BUILDING JAVASCRIPT-BASED SCALABLE SOFTWARE. Pedro Teixeira WILEY. John Wiley & Sons, Inc.
PROFESSIONAL Node.js BUILDING JAVASCRIPT-BASED SCALABLE SOFTWARE Pedro Teixeira WILEY John Wiley & Sons, Inc. INTRODUCTION xxvii CHAPTER 1: INSTALLING NODE 3 Installing Node on Windows 4 Installing onMore information
Virtuozzo Virtualization SDK
Virtuozzo Virtualization SDK Programmer's Guide February 18, 2016 Copyright 1999-2016 Parallels IP Holdings GmbH and its affiliates. All rights reserved. Parallels IP Holdings GmbH Vordergasse 59 8200More information
RecoveryVault Express Client User Manual
For Linux distributions Software version 4.1.7 Version 2.0 Disclaimer This document is compiled with the greatest possible care. However, errors might have been introduced caused by human mistakes or byMore information
NRPE Documentation CONTENTS. 1. Introduction... a) Purpose... b) Design Overview... 2. Example Uses... a) Direct Checks... b) Indirect Checks...
Copyright (c) 1999-2007 Ethan Galstad Last Updated: May 1, 2007 CONTENTS Section 1. Introduction... a) Purpose... b) Design Overview... 2. Example Uses... a) Direct Checks... b) Indirect Checks... 3. Installation...More information
Apache Thrift and Ruby
Apache Thrift and Ruby By Randy Abernethy In this article, excerpted from The Programmer s Guide to Apache Thrift, we will install Apache Thrift support for Ruby and build a simple Ruby RPC client andMore information
µtasker Document FTP Client
Embedding it better... µtasker Document FTP Client utaskerftp_client.doc/1.01 Copyright 2012 M.J.Butcher Consulting Table of Contents 1. Introduction...3 2. FTP Log-In...4 3. FTP Operation Modes...4 4.More information
File Transfer And Access (FTP, TFTP, NFS) Chapter 25 By: Sang Oh Spencer Kam Atsuya Takagi
File Transfer And Access (FTP, TFTP, NFS) Chapter 25 By: Sang Oh Spencer Kam Atsuya Takagi History of FTP The first proposed file transfer mechanisms were developed for implementation on hosts at M.I.T.More information
1. Product Information
ORIXCLOUD BACKUP CLIENT USER MANUAL LINUX 1. Product Information Product: Orixcloud Backup Client for Linux Version: 4.1.7 1.1 System Requirements Linux (RedHat, SuSE, Debian and Debian based systems suchMore information
Socket Programming. Request. Reply. Figure 1. Client-Server paradigm
Socket Programming 1. Introduction In the classic client-server model, the client sends out requests to the server, and the server does some processing with the request(s) received, and returns a replyMore information
TECHNICAL NOTES. Security Firewall IP Tables
Introduction Prior to iptables, the predominant software packages for creating Linux firewalls were 'IPChains' in Linux 2.2 and ipfwadm in Linux 2.0, which in turn was based on BSD's ipfw. Both ipchainsMore information
Online Backup Client User Manual Linux
Online Backup Client User Manual Linux 1. Product Information Product: Online Backup Client for Linux Version: 4.1.7 1.1 System Requirements Operating System Linux (RedHat, SuSE, Debian and Debian basedMore information
Online Backup Linux Client User Manual
Online Backup Linux Client User Manual Software version 4.0.x For Linux distributions August 2011 Version 1.0 Disclaimer This document is compiled with the greatest possible care. However, errors mightMore information
Online Backup Client User Manual
For Linux distributions Software version 4.1.7 Version 2.0 Disclaimer This document is compiled with the greatest possible care. However, errors might have been introduced caused by human mistakes or byMore information
Introduction to Synoptic
Introduction to Synoptic 1 Introduction Synoptic is a tool that summarizes log files. More exactly, Synoptic takes a set of log files, and some rules that tell it how to interpret lines in those logs,More information
http://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm SQLITE C/C++ TUTORIAL Copyright tutorialspoint.com Installation Before we start using SQLite in our C/C++ programs, we need to make sure that we haveMore information
CS 103 Lab Linux and Virtual Machines
1 Introduction In this lab you will login to your Linux VM and write your first C/C++ program, compile it, and then execute it. 2 What you will learn In this lab you will learn the basic commands and navigationMore information
Forming a P2P System In order to form a P2P system, the 'central-server' should be created by the following command.
CSCI 5211 Fall 2015 Programming Project Peer-to-Peer (P2P) File Sharing System In this programming assignment, you are asked to develop a simple peer-to-peer (P2P) file sharing system. The objective ofMore information
Release Notes LS Retail Data Director 3.01.04 August 2011
Release Notes LS Retail Data Director 3.01.04 August 2011 Copyright 2010-2011, LS Retail. All rights reserved. All trademarks belong to their respective holders. Contents 1 Introduction... 1 1.1 What sMore information
Simple Network Management Protocol
CHAPTER 4 This chapter gives an overview of (SNMP). It contains the following sections: Overview, page 4-1 SNMP Versioning, page 4-2 SNMP and Cisco Unified CM Basics, page 4-3 SNMP Basic Commands, pageMore information
Network Licensing. White Paper 0-15Apr014ks(WP02_Network) Network Licensing with the CRYPTO-BOX. White Paper
WP2 Subject: with the CRYPTO-BOX Version: Smarx OS PPK 5.90 and higher 0-15Apr014ks(WP02_Network).odt Last Update: 28 April 2014 Target Operating Systems: Windows 8/7/Vista (32 & 64 bit), XP, Linux, OSMore information
RTI Database Integration Service. Getting Started Guide
RTI Database Integration Service Getting Started Guide Version 5.2.0 2015 Real-Time Innovations, Inc. All rights reserved. Printed in U.S.A. First printing. June 2015. Trademarks Real-Time Innovations,More information
Unix System Administration
Unix System Administration Chris Schenk Lecture 08 Tuesday Feb 13 CSCI 4113, Spring 2007 ARP Review Host A 220.127.116.11 00:0B:DB:A6:76:18 Host B 188.8.131.52 00:11:43:70:45:81 Switch Host C 22.214.171.124More information
Chapter 17. Transport-Level Security
Chapter 17 Transport-Level Security Web Security Considerations The World Wide Web is fundamentally a client/server application running over the Internet and TCP/IP intranets The following characteristicsMore information
CS 557- Project 1 A P2P File Sharing Network
Assigned: Feb 26, 205 Due: Monday, March 23, 205 CS 557- Project A P2P File Sharing Network Brief Description This project involves the development of FreeBits, a file sharing network loosely resemblingMore information
Integrating VoltDB with Hadoop
The NewSQL database you ll never outgrow Integrating with Hadoop Hadoop is an open source framework for managing and manipulating massive volumes of data. is an database for handling high velocity data.More information
CommandCenter Secure Gateway
CommandCenter Secure Gateway Quick Setup Guide for CC-SG Virtual Appliance and lmadmin License Server Management This Quick Setup Guide explains how to install and configure the CommandCenter Secure Gateway.More information
Installation and User Guide
MANJRASOFT PTY LTD Aneka 3.0 Manjrasoft 5/13/2013 This document describes in detail the steps involved in installing and configuring an Aneka Cloud. It covers the prerequisites for the installation, theMore information
Introduction Object-Oriented Network Programming CORBA addresses two challenges of developing distributed systems: 1. Making distributed application development no more dicult than developing centralizedMore information
DiskPulse DISK CHANGE MONITOR
DiskPulse DISK CHANGE MONITOR User Manual Version 7.9 Oct 2015 www.diskpulse.com firstname.lastname@example.com 1 1 DiskPulse Overview...3 2 DiskPulse Product Versions...5 3 Using Desktop Product Version...6 3.1 ProductMore information
Using RADIUS Agent for Transparent User Identification
Using RADIUS Agent for Transparent User Identification Using RADIUS Agent Web Security Solutions Version 7.7, 7.8 Websense RADIUS Agent works together with the RADIUS server and RADIUS clients in yourMore information
Application Notes for Microsoft Office Communicator Clients with Avaya Communication Manager Phones - Issue 1.1
Avaya Solution & Interoperability Test Lab Application Notes for Microsoft Office Communicator Clients with Avaya Communication Manager Phones - Issue 1.1 Abstract These Application Notes describe theMore information
Application Protocols for TCP/IP Administration
Application Protocols for TCP/IP Administration BootP, TFTP, DHCP Agenda BootP TFTP DHCP BootP, TFTP, DHCP, v4.4 2 Page 60-1 BootP (RFC 951, 1542, 2132) BootP was developed to replace RARP capabilitiesMore information
Documentum Content Distribution Services TM Administration Guide
Documentum Content Distribution Services TM Administration Guide Version 5.3 SP5 August 2007 Copyright 1994-2007 EMC Corporation. All rights reserved. Table of Contents Preface... 7 Chapter 1 IntroducingMore information
Symbian User Guide for Cisco AnyConnect Secure Mobility Client, Release 2.4
Symbian User Guide for Cisco AnyConnect Secure Mobility Client, Release 2.4 Updated: May 31, 2011 Contents This document describes the Cisco AnyConnect Secure Mobility Client 2.4 for devices running Symbian.More information
Job Reference Guide. SLAMD Distributed Load Generation Engine. Version 1.8.2
Job Reference Guide SLAMD Distributed Load Generation Engine Version 1.8.2 June 2004 Contents 1. Introduction...3 2. The Utility Jobs...4 3. The LDAP Search Jobs...11 4. The LDAP Authentication Jobs...22More information
Universal Event Monitor for SOA 5.2.0 Reference Guide
Universal Event Monitor for SOA 5.2.0 Reference Guide 2015 by Stonebranch, Inc. All Rights Reserved. 1. Universal Event Monitor for SOA 5.2.0 Reference Guide.............................................................More information
Lab 4: Socket Programming: netcat part
Lab 4: Socket Programming: netcat part Overview The goal of this lab is to familiarize yourself with application level programming with sockets, specifically stream or TCP sockets, by implementing a client/serverMore information
Cache Configuration Reference
Sitecore CMS 6.2 Cache Configuration Reference Rev: 2009-11-20 Sitecore CMS 6.2 Cache Configuration Reference Tips and Techniques for Administrators and Developers Table of Contents Chapter 1 Introduction...More information
Bit Chat: A Peer-to-Peer Instant Messenger
Bit Chat: A Peer-to-Peer Instant Messenger Shreyas Zare email@example.com https://technitium.com December 20, 2015 Abstract. Bit Chat is a peer-to-peer instant messaging concept, allowing one-to-oneMore information
SSL Tunnels. Introduction
SSL Tunnels Introduction As you probably know, SSL protects data communications by encrypting all data exchanged between a client and a server using cryptographic algorithms. This makes it very difficult,More information
Flight Workflow User's Guide. Release 12.0.0
Flight Workflow User's Guide Release 12.0.0 Copyright 2015 Signiant Inc. All rights reserved. Contents CHAPTER 1 Flight Introduction 4 FlightUploadReference 4 FlightDownloadReference 4 Cloud Storage ConfigurationMore information
ODBC Client Driver Help. 2015 Kepware, Inc.
2015 Kepware, Inc. 2 Table of Contents Table of Contents 2 4 Overview 4 External Dependencies 4 Driver Setup 5 Data Source Settings 5 Data Source Setup 6 Data Source Access Methods 13 Fixed Table 14 TableMore information
Application Layer. CMPT371 12-1 Application Layer 1. Required Reading: Chapter 2 of the text book. Outline of Chapter 2
CMPT371 12-1 Application Layer 1 Application Layer Required Reading: Chapter 2 of the text book. Outline of Chapter 2 Network applications HTTP, protocol for web application FTP, file transfer protocolMore information
Wireless Mesh Networks under FreeBSD
Wireless Networks under FreeBSD Rui Paulo firstname.lastname@example.com The FreeBSD Project AsiaBSDCon 2010 - Tokyo, Japan Abstract With the advent of low cost wireless chipsets, wireless mesh networks became muchMore information
Command Line Interface User Guide for Intel Server Management Software
Command Line Interface User Guide for Intel Server Management Software Legal Information Information in this document is provided in connection with Intel products. No license, express or implied, by estoppelMore information
CA Data Protection. Content Provider Development Guide. Release 15.0
CA Data Protection Content Provider Development Guide Release 15.0 This Documentation, which includes embedded help systems and electronically distributed materials (hereinafter referred to as the DocumentationMore information
Managing large sound databases using Mpeg7
Max Jacob 1 1 Institut de Recherche et Coordination Acoustique/Musique (IRCAM), place Igor Stravinsky 1, 75003, Paris, France Correspondence should be addressed to Max Jacob (email@example.com) ABSTRACTMore information
1. The Web: HTTP; file transfer: FTP; remote login: Telnet; Network News: NNTP; e-mail: SMTP.
Chapter 2 Review Questions 1. The Web: HTTP; file transfer: FTP; remote login: Telnet; Network News: NNTP; e-mail: SMTP. 2. Network architecture refers to the organization of the communication processMore information
CNT5106C Project Description
Last Updated: 1/30/2015 12:48 PM CNT5106C Project Description Project Overview In this project, you are asked to write a P2P file sharing software similar to BitTorrent. You can complete the project inMore information
EVault for Data Protection Manager. Course 361 Protecting Linux and UNIX with EVault
EVault for Data Protection Manager Course 361 Protecting Linux and UNIX with EVault Table of Contents Objectives... 3 Scenario... 3 Estimated Time to Complete This Lab... 3 Requirements for This Lab...More information
F-Secure Messaging Security Gateway. Deployment Guide
F-Secure Messaging Security Gateway Deployment Guide TOC F-Secure Messaging Security Gateway Contents Chapter 1: Deploying F-Secure Messaging Security Gateway...3 1.1 The typical product deployment model...4More information
Code and Usage Description. A.Konstantinov
NORDUGRID NORDUGRID-TECH-9 25/9/2009 THE HTTP(S,G) AND SOAP SERVER/FRAMEWORK Code and Usage Description A.Konstantinov email@example.com Contents 1 Introduction 3 2 Classes 3 2.1 HTTPS_Connector............................................More information
User Migration Tool. Note. Staging Guide for Cisco Unified ICM/Contact Center Enterprise & Hosted Release 9.0(1) 1
The (UMT): Is a stand-alone Windows command-line application that performs migration in the granularity of a Unified ICM instance. It migrates only Unified ICM AD user accounts (config/setup and supervisors)More information
Version of this tutorial: 1.06a (this tutorial will going to evolve with versions of NWNX4)
Version of this tutorial: 1.06a (this tutorial will going to evolve with versions of NWNX4) The purpose of this document is to help a beginner to install all the elements necessary to use NWNX4. ThroughoutMore information
Tutorial on Socket Programming
Tutorial on Socket Programming Computer Networks - CSC 458 Department of Computer Science Seyed Hossein Mortazavi (Slides are mainly from Monia Ghobadi, and Amin Tootoonchian, ) 1 Outline Client- serverMore information
Network Interface Failover using FONA
Network Interface Failover using FONA Created by Adam Kohring Last updated on 2014-10-20 12:30:12 PM EDT Guide Contents Guide Contents Overview Prerequisites Wiring Raspberry Pi to Fona ifacefailover ServiceMore information
Make a folder named Lab3. We will be using Unix redirection commands to create several output files in that folder.
CMSC 355 Lab 3 : Penetration Testing Tools Due: September 31, 2010 In the previous lab, we used some basic system administration tools to figure out which programs where running on a system and which filesMore information
WebSphere Application Server security auditing
Copyright IBM Corporation 2008 All rights reserved IBM WebSphere Application Server V7 LAB EXERCISE WebSphere Application Server security auditing What this exercise is about... 1 Lab requirements... 1More information
Lecture 03 Bits, Bytes and Data Types
Lecture 03 Bits, Bytes and Data Types In this lecture Computer Languages Assembly Language The compiler Operating system Data and program instructions Bits, Bytes and Data Types ASCII table Data TypesMore information
/* File: blkcopy.c. size_t n
13.1. BLOCK INPUT/OUTPUT 505 /* File: blkcopy.c The program uses block I/O to copy a file. */ #include main() { signed char buf[100] const void *ptr = (void *) buf FILE *input, *output size_tMore information
Centers for Medicare and Medicaid Services. Connect: Enterprise Secure Client (SFTP) Gentran. Internet Option Manual 2006-2007
Centers for Medicare and Medicaid Services Connect: Enterprise Secure Client (SFTP) Gentran Internet Option Manual 2006-2007 Version 8 The Connect: Enterprise Secure Client (SFTP) Manual is not intendedMore information
Napster and Gnutella: a Comparison of two Popular Peer-to-Peer Protocols. Anthony J. Howe Supervisor: Dr. Mantis Cheng University of Victoria
Napster and Gnutella: a Comparison of two Popular Peer-to-Peer Protocols Anthony J Howe Supervisor: Dr Mantis Cheng University of Victoria February 28, 2002 Abstract This article presents the reverse engineeredMore information
AlienVault Unified Security Management (USM) 4.x-5.x. Deploying HIDS Agents to Linux Hosts
AlienVault Unified Security Management (USM) 4.x-5.x Deploying HIDS Agents to Linux Hosts USM 4.x-5.x Deploying HIDS Agents to Linux Hosts, rev. 2 Copyright 2015 AlienVault, Inc. All rights reserved. AlienVault,More information
z/tpf FTP Client Support
z/tpf EE V1.1 z/tpfdf V1.1 TPF Toolkit for WebSphere Studio V3 TPF Operations Server V1.2 IBM Software Group TPF Users Group Fall 2006 z/tpf FTP Client Support Name: Jason Keenaghan Venue: Main Tent AIMMore information
GlobalSCAPE DMZ Gateway, v1. User Guide
GlobalSCAPE DMZ Gateway, v1 User Guide GlobalSCAPE, Inc. (GSB) Address: 4500 Lockhill-Selma Road, Suite 150 San Antonio, TX (USA) 78249 Sales: (210) 308-8267 Sales (Toll Free): (800) 290-5054 TechnicalMore information
Plesk 11 Manual. Fasthosts Customer Support
Fasthosts Customer Support Plesk 11 Manual This guide covers everything you need to know in order to get started with the Parallels Plesk 11 control panel. Contents Introduction... 3 Before you begin...More information
ProxyCap Help. Table of contents. Configuring ProxyCap. 2015 Proxy Labs
ProxyCap Help 2015 Proxy Labs Table of contents Configuring ProxyCap The Ruleset panel Loading and saving rulesets Delegating ruleset management The Proxies panel The proxy list view Adding, removing andMore information
Remote login (Telnet):
SFWR 4C03: Computer Networks and Computer Security Feb 23-26 2004 Lecturer: Kartik Krishnan Lectures 19-21 Remote login (Telnet): Telnet permits a user to connect to an account on a remote machine. A clientMore information
Dell SupportAssist Version 2.0 for Dell OpenManage Essentials Quick Start Guide
Dell SupportAssist Version 2.0 for Dell OpenManage Essentials Quick Start Guide Notes, Cautions, and Warnings NOTE: A NOTE indicates important information that helps you make better use of your computer.More information
Change Color for Export from Light Green to Orange when it Completes with Errors (31297)
ediscovery 5.3.1 Service Pack 8 Release Notes Document Date: July 6, 2015 2015 AccessData Group, Inc. All Rights Reserved Introduction This document lists the issues addressed by this release. All knownMore information
NAT TCP SIP ALG Support
The feature allows embedded messages of the Session Initiation Protocol (SIP) passing through a device that is configured with Network Address Translation (NAT) to be translated and encoded back to theMore information
WebSphere Business Monitor V7.0: Clustering Single cluster deployment environment pattern
Copyright IBM Corporation 2010 All rights reserved WebSphere Business Monitor V7.0: Clustering Single cluster deployment environment pattern What this exercise is about... 2 Exercise requirements... 2More information
Enterprise Remote Control 5.6 Manual
Enterprise Remote Control 5.6 Manual Solutions for Network Administrators Copyright 2015, IntelliAdmin, LLC Revision 3/26/2015 http://www.intelliadmin.com Page 1 Table of Contents What is Enterprise RemoteMore information
Enabling SSL and Client Certificates on the SAP J2EE Engine
Enabling SSL and Client Certificates on the SAP J2EE Engine Angel Dichev RIG, SAP Labs SAP AG 1 Learning Objectives As a result of this session, you will be able to: Understand the different SAP J2EE EngineMore information
ODBC Driver User s Guide. Objectivity/SQL++ ODBC Driver User s Guide. Release 10.2
ODBC Driver User s Guide Objectivity/SQL++ ODBC Driver User s Guide Release 10.2 Objectivity/SQL++ ODBC Driver User s Guide Part Number: 10.2-ODBC-0 Release 10.2, October 13, 2011 The information in thisMore information
Spectrum Technology Platform. Version 9.0. Administration Guide
Spectrum Technology Platform Version 9.0 Administration Guide Contents Chapter 1: Getting Started...7 Starting and Stopping the Server...8 Installing the Client Tools...8 Starting the Client Tools...9More information


text:
Steveashworth has not written "about me".
Where do i get some birch tree and alder seeds to grow in pots and what soil type...
Asked on 5 Jun, 2010
1 reply
How do you take birch tree cuttings to grow on and how big can they be
Asked on 4 Jun, 2010
4 replies
we have planted out this years begonia sahara bedding plants but this year after...
Asked on 31 May, 2010
2 replies
Joined in May
Country: United Kingdom
Grows on You is a community for gardeners. Record the plants in your garden, share your photos, and make like-minded friends.

subset: commoncrawl


text:
Call us Today !Ph: 1-800-522-3836
Online ShoppingLogin
Combine Internet access via G.SHDSL, security, and wireless services onto a single, secure device. The Cisco 888 Integrated Services Router offers broadband speeds and simplified management to small businesses, enterprise small branches, and teleworkers.
The Cisco 880 Series provides:
Available options on the Cisco 888 Integrated Services Router include:
© Copyright 2012. All Rights Reserved.


text:
Temporary Crowns & Dentures
A temporary crown is a provisional, short term restoration used in dentistry. Usually the temporary crown is constructed from a chemical-cure composite, although alternative systems using aluminum crown forms are occasionally used by practitioners.
The temporary material is shaped by the dentist to form a tooth shape that protects the prepared tooth, prevents damage to the periodontal tissues (gums) and disguises the prepared tooth to a degree until the final, definitive restoration can be made by a dental technician.
Prepared teeth are very sensitive to cold, so temporary crown also act as an isolator and greatly increases patients comfort in the period while the permanent crowns/bridges are finished.
A temporary crown will usually be cemented in place with a soft temporary dental cement. This allows for easy removal when fitting the definitive restoration.
Temporary dentures are ideal for those people who are waiting to get their permanent dentures, but do not want to have holes in their mouth for that time being. Temporary dentures are not very expensive, and the results are immediate and short-term.Temporary dentures are made before the natural teeth are removed so that they can immediately be installed after tooth extraction. A mold is taken of the teeth and gums, and the mold is then sent away to be made into Temporary dentures. This should not take more than two visits to your dentist. When the Temporary Dentures are ready, you can make an appointment with your dentist to get your teeth extracted. After the natural tooth is extracted, the prefabricated tooth is put into the socket. This is painless since the area is still numb from extraction. Because the gum is swollen from the extraction, the denture should fit well in the mouth. As the swelling goes down, the gum and bone shrink and even change shape, which then keeps the denture in place.
These temporary dentures only last for about three to six months, at which time the more permanent set of dentures will be put in place of the temporary ones.


text:
The Kommersant business daily wrote about a new scandal involving commercial structures of Russia's Defense Ministry. The main department for troops development GUOV terminated contracts with Stroiimpuls SMU-1 owned by diseased businessman from St. Petersburg Sergei Amelin and tries to return over 9 billion rubles in advance payments through court action, the daily wrote. Some of these funds had already been used to buy property earlier owned by armed forces from Oboronservis defense property services company.
The Investigative Committee is looking into these deals.
Stroiimpuls SMU-1 owned by Sergei Amelin, who died of heart attack on January 20, was one of GUOV's biggest contractors. It reconstructed and built over 100 facilities for the armed forces, including Presidential Cadet Corps in Tyumen, the Defense Ministry's central archive in Podolsk, campus of the Defense Ministry's general headquarters in Moscow and the S.M. Budenny Military Academy of Communications in St. Petersburg.
According to GUOV, in 2010-2012 Stroiimpuls received 17.2 billion rubles in advance payments, of them 10.2 billion rubles have not been worked out. At the same time Teorema company, which was also controlled by Amelin, got 2.4 billion rubles from GUOV as a loan to buy buildings and land plots that were earlier owned by the Defense Ministry.
GUOV's new management (the previous one was sacked last spring) decided to terminate contracts with Stroiimpuls and applied to courts demanding collection of advance payments.
United States modernizing Tajikistan's army
On Tuesday Tajik President Emomali Rakhmon held talks with commander of the United States Central Command, General Lloyd James Austin to discuss modernization of the Central Asian republic's armed forces and Afghan-Tajik border strengthening. The talks took place two days ahead of Rakhmon's visit to Russia.
It turns into practice, when a U.S. representative pays a visit to Dushanbe accurately ahead of the Russian-Tajik talks, Nezavisimaya Gazeta wrote. Rakhmon's yesterday talks and his upcoming visit to Moscow are overburdened with the upcoming presidential election in Tajikistan. In the conditions of a deep social and economic crisis that hits the republic Rakhmon hopes for the Kremlin's support.
However, it will not dump support of Washington, if the latter stretches a helping hand, the daily noted. The more so this concerns the defense sector. The subject of talks remains unknown. On the one hand, this is the presence of Russia's military base 201 in Tajikistan, which should be given an opportunity to use the Aini military airfield. On the other hand, this is the withdrawal of the military base, which is being pushed forward, and the handing over of the Aini airfield to the United States and NATO - possibly, through India's mediation - and deployment of other military facilities of the Alliance's member-states on Tajikistan's territory.
Several years ago the U.S. opened its first training centre in Tursunzade, 45 kilometers of Dushanbe. It trains personnel for Tajikistan's armed forces. At the same time the Central Asian republic's army remains the region's most purely equipped. Experts say combat readiness of Tajikistan's armed forces is so low that they are unable to repel external threats on their own.
At the previous meeting with his Russian counterpart Vladimir Putin on the sidelines of the CSTO informal summit in Bishkek Emomali Rakhmon concerned over possible threat that would emanate from Afghanistan after the pullout of NATO's troops requested Moscow to speed up the issuance of a 200-million-dollar loan. The latter promised to give it for the Tajik army's modernization. But having received no prompt answer from Russia, Rakhmon started talks with the U.S.
At the meeting with U. S. General Lloyd James Austin the Tajik leader discussed regional security and the strengthening of the Afghan-Tajik border that the U.S. had de-facto been improving since 2005. He also focused on material and technical support for Tajikistan's military and special units.
An expert for Central Asia and the Middle East, Alexander Knyazev, told Nezavisimaya Gazeta that "it appears that President Rakhmon has not grasped that the multi-vector policy is for strong and clever, while this does not concern his regime."
The political scientist believes that Moscow should refrain from providing any guarantees to the Tajik president. "A real focus on Russia has not been seen in his policy for fifteen years, soon after Moscow helped him to come to power, to establish a truce with the opposition and to stop civil war," he said. "It seems that the Russian side should work more with the Tajik opposition, the more so it has much more opportunities for this than Washington or London. But a circle of these opportunities is rapidly narrowing."
Knyazev noted that Russia's policy in relation to Tajikistan that strongly reminds the situation with neighboring Kyrgyzstan remains one-sided. "May be, Rakhmon will win this election through the use of force and administrative resource, but this does not mean that he will retain his presidential office for the whole seven-year period," he said. "If Russia directly or indirectly demonstrates its support for Rakhmon, it will lose the Tajik society and this time, probably, forever."


text:
Search the Archive
Search the National Gallery Archive containing records of the Gallery's activities from its foundation in 1824 to the present day. Find out more about the National Gallery Archive.
Record NGA26/1/23
Up to parent record NGA26/1 No child record
|Archive reference number
Letter from New Scotland Yard to Hugh Courts acknowledging his letter
|30 Jul 1965
Copy of the letter is listed under NGA26/1/19
|Record type
Your list will only be saved temporarily. Inactivity of more than an hour could result in the loss of your list. If you would like to keep a record of your list, we suggest you email it to yourself.
Your list of records will be sent to us if you request an appointment, and a summary will be included in your appointment email notification.
© 2018 The National Gallery, Trafalgar Square, London WC2N 5DN


text:
A Building Surveyor provides a professional service and advice on all aspects of construction work ranging from Architectural Design, New Build & Extension
Projects to Building Defect Analysis.
UK Surveyors Ltd are a totally independent family run business with over forty years of experience in 'Commercial' and 'Residential Planning' as well as the construction industry.
We specialise in Architectural Design as well as Cad Drafting which is all completed in house for all market sectors.
Our friendly team will manage your project from the initial consultation, design and throughout the planning process until a decision is reached by the Local Authority.
We also off the service for preparation and submission of Building Regulations, again we will manage this through the whole process.
UK Surveyors company aim is to remove all the stress and obstacles for our clients throughout the design and planning process.
We also have 10 years experience producing Premises Licence Plans for all market sectors
Service Provided
Planning Applications include:
Residential Planning Applications Include:
Our Other Services Include:
Free help and advice is just a phone call away; our team of professionals are here to work with you and provide the solutions to your proposals.


text:
2128 N. Halsted St., Chicago, IL
Built in 1890 as a Chicago Police Station, the lower level space was renovated to accommodate a pilates studio based out of San Francisco. As base renovation architect of record, KMA created a layout to incorporate a barre studio, pilates studio, reception area, and restrooms. Prior to renovation, there were remnants of steel bars from jail cells, no entry from Halsted, and the original lightwell windows were masonry infilled. KMA designed a new exterior open stairway and partially reopened the windows to allow natural light down into this once dark lower level space.


text:
November 30, 2010
A Grief Observed
C.S. Lewis is brutally honest and extremely raw with his emotions towards God about the suffering and death of his beloved wife.
The book helped me a lot.
Lewis helped me understand its ok to have questions and even anger towards God in these situations as long as you have respect for Him.
When everything is said and done God will always be God and we can't make Him who we want Him to be.
We may never understand the ways of God, but we can always trust Him.
Subscribe to: Post Comments (Atom)


text:
New Zealanders have worked hard over the last 8 years; working to build a more confident and more robust country.
This year's budget is about delivering more of the public services, the infrastructure, the resilience, and the incomes that Kiwis need to get ahead and provide for their families.
Investing in a Growing Economy - $1 Billion
We want to raise wages and create more jobs for hardworking Kiwis. In the last 5 years our economy has grown 14% and in the past 3 years we've created over 200,000 jobs. We have had real growth but we cannot take that for granted. The Government will continue to invest $1 billion over the next four years under the Business Growth Agenda to keep our economy growing.
Public Services for a Growing Country - $7 Billion
Our biggest fiscal priority is to invest in the public services necessary for a growing country. New Zealanders deserve public services that they can rely and depend on. Investing in public services like Social Housing, Health, and Education will ensure that New Zealand is meeting the challenges of growth.


text:
Welcome to InCo Projects
Working to bring transparency to construction projects.
We currently provide a focused selection of services that all relate to each other and as such can be carried out collectively as Construction Management, or as individual appointments to supplement department needs.
Our core service is Construction Management which is supported by:
Planning & Programming Services inc. Programme Delay Analysis & 4D VR Planning
Project Management Services
Quantity Surveying & Cost Management Services
We believe clients and stakeholders need the industry to be more open and transparent in the way we run projects and we are working towards becoming the benchmark in delivering projects with transparency and collaboration.
A big part of this is working towards changing the way construction projects are procured and delivered. We want to serve clients who would like more transparency in their projects and this is where we can offer value.


text:
Terug naar overzicht Printervriendelijk versie
Krajicek takes familiar path
The Dutch player has more pressure than most as she strives to reach the quarter-finals and live up to her name
It could have been one of the most extraordinary double acts in Wimbledon history: the 1996 mens champion with the half-sister who is almost half his age. But first Michaella Krajicek sustained an injury and then it was her more famous brother Richard who had to bow to his creaking bones.
Still, they have not given up hope - even though he retired from the sport in 2003 - but should the pair get it together on the famous lawns of SW19, Little Kraai, as she is fondly known, will take to the court with a reputation which is growing match by match.
Naturally not quite to the level of her brother, who won the mens title with a straight-sets defeat of Malivai Washington 11 years ago, a match of great significance because it interrupted the reign of Pete Sampras.
But whenever she plays, you do not need to be a tennis aficionado to know the background. Equally, it is understandable that the pressure will grow on her the quicker she progresses up the rankings, though she made sure she dealt with that here at Wimbledon when she played in the junior championships four years ago when she was 14.
I just kept thinking, Its Wimbledon, its Wimbledon, and it was all too much, she said. Because my brother won here it put a bit of pressure on me and I couldnt really play my best. Wimbledon is very special but I am trying to treat it as just another big tournament.
But when she broke onto the scene, she could not escape the name. When she competed in her first WTA tournament in 2003 in the Netherlands, the expectation was huge.
She said: I was 14 and everybody was like, I think you can win a few rounds. But they just dont know how difficult it is to win the first round. The whole stadium was full. All the people were there and cameras and everything. I was really nervous then I lost so badly. She is here for her second Wimbledon in the main tournament. Twelve months ago she was knocked out in the first round but her progress has seen her seeded No 31 and tomorrow - weather permitting - she will meet American Laura Granville in round four.
Her status has grown after she beat Russias No 8 seed Anna Chakvetadze in the previous round after previously ending domestic hopes in the womens tournament with a 6-0 6-1 defeat of British No 1 Katie OBrien.
Now is the time for Krajicek to make her own mark, even though it was not solely the achievements of her brother which took her into the game.
Richard is 35. Michaella and him have the same father and though she represents the Netherlands where she lives, they are of Czech descent.
She lives in Almere in the north of the Netherlands, a country which became their home after their father Petr emigrated there to escape the revolution of 1968.
Richard now advises her, though she is hardly living in his shadow.
Krajicek progressed to the become the worlds No 1 junior in 2004 and her highest ranking on the WTA tour was 33 last month.
The third round seems to have been her stumbling block after she failed to progress further than that stage both at the French Open in Paris last month and at the Australian Open in Melbourne last year.
But there is no doubt that she is in the form of her life and she remains one of the best outsiders to carry on what she has achieved here so far.
She is on her way, still harbouring hopes of playing alongside her brother in the doubles here one year but for now progressing alone. With a powerful serve, and a champion in her family, she has a stature which could take her a long way.


text:
Although we don't believe in timing the market or panicking over market movements, we do like to keep an eye on big changes -- just in case they're material to our investing thesis.
What: Shares of Apollo Group (NASDAQ:APOL) were getting an A from investors today, gaining as much as 25% after the company flew past expectations in its fourth-quarter earnings report.
So what: The University of Phoenix parent said adjusted earnings per share came in at $0.55, well ahead of estimates at $0.25, while revenue fell 15% to $845 million, but that also topped the analyst consensus at $823.1 million. For-profit educators have seen declining enrollment numbers lately amid a crackdown by the government and a sense of consumer fatigue for the industry, so a smaller drop than expected is still a positive. Enrollment was sharply down in the quarter, falling 18.1% overall, while new student enrollment, often seen as the lifeblood of the industry, dropped 22.3%, indicating that a bottom on enrollment still seems far away.
Now what: Apollo sees a similar drop in revenue next year, as its projecting sales of $2.95 billion to $3.05 billion, down more than 20% from $3.7 billion this year, and below analyst estimates of $3.2 billion. Still, the company actually expects modest growth in adjusted operating income next year due to cost-cutting initiatives, which it said would trim $300 million in expenses. That prediction seemed to reassure investors since the company still managed to deliver an adjusted per-share profit of $3.16 this year, making the stock look cheap. I'm skeptical that for-profit education will reach its former heights, but Apollo has easily beat earnings estimates in its last four quarters, despite the negative growth. Its management seems to understand how to optimize a declining business.
Fool contributor Jeremy Bowman has no position in any stocks mentioned. The Motley Fool has no position in any of the stocks mentioned. Try any of our Foolish newsletter services free for 30 days. We Fools may not all hold the same opinions, but we all believe that considering a diverse range of insights makes us better investors. The Motley Fool has a disclosure policy.


text:
Sculptor Erik Blome to restore Rosa Parks statue on Thursday
MONTGOMERY - Noted sculptor Erik Blome will visit the Rosa Parks Museum on the Troy University Montgomery Campus on Thursday Nov. 19, to restore his statue of Rosa Parks seated on the bus bench. The restoration work will take place in the loading dock area behind the Museum. Entrance to the loading dock is off of Moulton Street. Mr. Blome will be available for interviews at 11 a.m. as he works on the statue.
The statue, currently on display in the museum's gallery, will be relocated to the museum's atrium once the work is complete. Blome's statue has been a popular attraction for visitors since the museum opened in 2000.


text:
The World Cup started last week, and many of this year's competitors happen to be huge forces in the world of energy. Leaving soccer aside for the moment, how would you rank their strengths and weaknesses? The United States may have the most productive regulatory environment, but can it compete with Russia's pure mineral wealth?
In the following video, Motley Fool energy analysts Taylor Muckerman and Joel South, inspired by a tweet from @BoredElonMusk, discuss their picks for the top global-energy superpower.
Try any of our Foolish newsletter services free for 30 days. We Fools may not all hold the same opinions, but we all believe that considering a diverse range of insights makes us better investors. The Motley Fool has a disclosure policy.


text:
Health And Fitness, Health Tips, Exercises & Exercise Tips, Food regimen & Wellness
That's the place individuals like her and myself come in the image, now we have an understanding of health and wellness in a approach that is not taught in an schooling system. When a person makes the choice to have a healthy life-style, it really is a JOURNEY, a wellness path that's endless. In mild of another current research which found that Vitamin D deficiency could cause prostate cancer amongst black males, this examine supplies further evidence that vitamin D plays a significant function in staying healthy. Will Apse, I simply noticed a swim spa with a hot tub built proper next to it! My two favorites multi function! Forgive the pun but I believe this would be the new wave of the future. Fabulous article. Very well performed. Voted up!
Laser therapies have various techniques relying on the procedure chosen or how it will be used by the surgeon. An example is in the course of the tumor remedy where the endoscope is inserted inside your physique and used for locating and aiming on the tumor to be hit by the laser to destroy or shrink it. In the meantime, a direct utility in your skin is done during beauty procedures.
What hey usually are not telling us is that they are busy rehashing and plagiarizing Apartheid and trying to present their spin to us being these great regulation-makers and thinkers of the type never ever seen earlier than , even throughout Apartheid. But all what they've ben doing up to now, is to try to apr if not copycat Boer Doctrines, and stealing some from the West. We have been gypped; offered hyped so-called success bamboozled; taken; had; taken for a journey; and used and abused in all aspects of our decrepit existence by our personal supposedly African … Read More ...


text: The Good Fashion Show is London Fashion Week's largest off-schedule event. The one-day event features an amazing eco-ethical fashion emporium with 30 international and U.K. labels; a unique shopping experience; milestone keynotes on fashion, ethics, aesthetics and sustainability; a dedicated marketplace offering organic and fair-trade delicacies from across the globe; and a stunning makeover and champagne bar. Visitors will also enjoy an exhibition of over 100 unique and provocative artworks ranging from fashion photography and illustrations to video installations and pieces of fine art. Plus, the spectacular evening runway show "Transformations" featuring Nancy Sorrell and live performances from the founder of classic nu-soul, Omar and other world class artists.


text:
property services
Renovating in Croatia
Our services
Our services for purchasers and owners of property include:
- Sourcing a property for you.
- Advising you about purchasing options: whether you buy as an individual or establish a Croatian company.
- Overseeing and ensuring completion of the conveyancing and legal processes.
- Project management for renovations.
- Rental accommodation management.
We have details of properties for sale in Croatia, Montenegro and Bulgaria.
Please email or call us for more information.
Our experience with renovating in Croatia has been very positive. We have good relationships with local project managers, contractors and suppliers. During four weeks in September/October 2009 we made what we considered to be excellent progress renovating a small apartment in the UNESCO listed town of Trogir on the Dalmatian Coast. The work is of a very high standard. All contractors take great pride in delivering a quality product and service. For a brief summary of our works and the time frames please click on the following link. Renovating in Croatia
Salona, Subiceva 12, Trogir
May 2012 - we have almost completed a full renovation of a beautiful stone home in the centre of the old town of Trogir, Croatia.
Photos taken in 2009 - pre renovation when we purchased the property.
for sale in Dalmatia
The ground floor is currently used as a cafe and the business also has a designated area for tables and chairs overlooking the water.
The property is located in the old town of Trogir just inside the main gate. This is a prime location only 30 metres from the promenade where yachts dock daily.
This property is ideally suited for redevelopment as a small hotel. If you are looking for a business or property that will provide you with international exposure, you should arrange an inspection.
Opportunities to purchase such a unique property in a UNESCO listed town are rare (anywhere in the world).
The first and second floors of the property overlook the main gate which leads to the promenade .
Please call us for further details.