text:
GlassFish Vee(gri)zzly(v3): Unofficial benchmarks results
We are still working hard on GlassFish v3 and will soon release a new technology preview (JavaOne is coming :-)). What about its performance? As you may know, in v3 we have cleaned up the noise by using a modular approach (thanks Jerome!). In Quebecois (French peoples are probably using some English world to say the same ;-), we say "Faire le Grand Menage"
What about Grizzly-In-V3? In v3, the monster is now integrated using its framework module (no http pollution like in v2, just NIO:-)). So when v3 starts, part of its startup logic is done on top of Grizzly (using 184.108.40.206 runtime). Does it make a difference at startup and more important, at runtime? It make a huge one because now, with the modular nature of v3 there is no longer modules that add noise in Grizzly. So let's benchmark the static resources (.html) performance using Faban (see Scott's blog about it what is Faban) by using
java -classpath fabandriver.jar:fabancommon.jar -server
-Xmx1500m -Xms1500m com.sun.faban.driver.ab -c 2000 http://xxx:8080/index.html
This command runs 2000 separate clients (each in its own thread), each of which continually requests index.html with no think time. The common driver reports three pieces of information: the number of requests served per second, the average response time per request, and the 90th percentile for requests: 90% of requests were served with that particular response time or less. Let's focus on the number of operations per seconds for now by running the test against Grizzly Http 1.0.20, Grizzly Http 1.7.3, v2 and v3:
Grizzly_1.0 Grizzly_1.7 GlassFish_v2 GlassFish_v3
5739.025 5979.917 5432.300 5882.808
Hey hey v3 is almost as fast as Grizzly 1.7.3. Why? It really because v3 run on top of Grizzly directly, without any noise in between. Now let's compare the dynamic resource performance using a very simple Servlet
public void doPost(HttpServletRequest request, HttpServletResponse response){
PrintWriter wrt = response.getWriter();
for (int i = 0; i < 1 ; i++) {
wrt.write("Hello world");
Yes, its a dummy Servlet!
Grizzly_1.7 GlassFish_v2 GlassFish_v3
3621.600 3256.775 2998.225
v3 is a little slower here……most probably because of the container's mapping algorithm. What is that? With v3, a tcp/udp port can handle any type of web applications (jruby, groovy, servlet, phobos, etc. (all build on top of Grizzly http :-)). So when a request comes in, v3 inspects and dispatch it to the proper container. That code introduces overhead and I suspect it is part of the regression. But a lot of changes has been made in v3, so I might be wrong…still, I consider the number very impressive as we have now a modular architecture which required a lot of changes.
But wait a minute. Grizzly 1.7 has a Servlet Container? Naaa not a real one. I'm just experimenting a tiny Servlet container, with great help from the Grizzly community. But forget Grizzly for now and look at the number :-) The goal for our v3 official release is set: We want to be better than Grizzly, which I'm sure we will :-). We need to improve the Grizzly extension in v3…in case you want to learn how to write such extension, just stop by us at JavaOne!
_uacct = "UA-3111670-1″;
Writing a Comet web application using GlassFish
This blog describes how to write Comet enabled web application using GlassFish's Comet Engine.
A couple of months ago, I've blogged about the technical details of the GlassFish's Comet support. Since then, I've got a lot of feedbacks on the blog and also privately. Surprisingly, a lot of peoples have started using the API and an asked for a blog describing a basic example. So here it comes … a basic Chat Servlet :-)
First, to enable Comet Support in GlassFish, add the following in ${glassfish.home}/domains/domain1/config/domain.xml
<http-listener acceptor-threads="1" address="0.0.0.0"
blocking-enabled="false" default-virtual-server="server"
enabled="true" family="inet" id="http-listener-1" port="8080"
security-enabled="false" server-name="" xpowered-by="true">
<property name="cometSupport" value="true"/>
Next, add in you web.xml:
OK now the interesting parts. The first things to decide when writing a Comet enabled web app is the component that will get polled. For this example, I will use a Servlet. First, the Servlet needs to register to the CometEngine:
48 public void init(ServletConfig config) throws ServletException {
49 super.init(config);
50 contextPath = config.getServletContext().getContextPath() + "/chat";
51 CometEngine cometEngine = CometEngine.getEngine();
52 CometContext context = cometEngine.register(contextPath);
53 context.setExpirationDelay(60 * 1000);
54 }
The important part to define first is the context path that will be considered for Comet processing (or polling). All requests that takes the form of http://:/context/chat will be considered for polling. The context.setExpirationDelay() will determine how long a request will be polled. For this example, I've set the expiration delay to 60 seconds. After 60 seconds, the polled connection will be closed.
Next, you need to define a Comet request Handler which will get invoked every time the CometContext is updated. For the Chat, the handler will be created after the user has entered its user name (by issuing http://…/login.jsp)
71 if ("login".equals(action)) {
72 String username = request.getParameter("username");
73 request.getSession(true).setAttribute("username", username);
75 if (firstServlet != -1){
76 cometContext.notify("User " + username
77 + " from " + request.getRemoteAddr()
78 + " is joinning the chat.",CometEvent.NOTIFY,
79 firstServlet);
80 }
82 response.sendRedirect("chat.jsp");
83 return;
84 } else if ("post".equals(action)){
85 String username = (String) request.getSession(true)
86 .getAttribute("username");
87 String message = request.getParameter("message");
88 cometContext.notify("[ " + username + " ] "
89 + message + "
");
90 response.sendRedirect("post.jsp");
91 return;
92 } else if ("openchat".equals(action)) {
93 response.setContentType("text/html");
94 CometRequestHandler handler = new CometRequestHandler();
95 handler.clientIP = request.getRemoteAddr();
96 handler.attach(response.getWriter());
97 cometContext.addCometHandler(handler);
98 String username = (String) request.getSession(true)
99 .getAttribute("username");
100 response.getWriter().println("
Welcome "
101 + username + "
");
102 return;
After the user has logged in, the browser will be redirected to the chat.jsp page, which will sent the action="openchat". The CometHandler (the class that will update the chat message box) implementation looks like:
134 public void onEvent(CometEvent event) throws IOException{
135 try{
137 if (firstServlet != -1 && this.hashCode() != firstServlet){
138 event.getCometContext().notify("User " + clientIP
139 + " is getting a new message.",CometEvent.NOTIFY,
140 firstServlet);
141 }
142 if ( event.getType() != CometEvent.READ ){
143 printWriter.println(event.attachment());
144 printWriter.flush();
145 }
146 } catch (Throwable t){
147 t.printStackTrace();
148 }
149 }
152 public void onInitialize(CometEvent event) throws IOException{
156 }
Every time the user will post a new message, the CometHandler.onEvent(…) will be invoked and the Chat message pushed back to the browser.
On the client side, the chat.jsp page looks like
26 <frameset>
27
28
29 </frameset>
You can download the application (which include the src) here.
Note that the application described here is really to give an example. I would never recommend the use of static variables like I did in the example.
Before I forgot, one interesting feature I've recently added (was requested on first blog on Grizzly's Comet) is the ability to update a single CometHandler (or a single polled request). When calling cometContext.addCometHandler(..), the returned value can be later re-used to push datas only to that cometHandler by doing:
cometContext.notify(String message, int type, String cometListenerID);
See the API for more info. For the Chat example, I've added a pop up window where a chat moderator receives all the chat messages, who is connected and from where:
138 event.getCometContext().notify("User " + clientIP
139 + " is getting a new message.",CometEvent.NOTIFY,
140 firstServlet);
That's it. Very simple, is it? No needs to spawn a thread anywhere on the Servlet side, no special Servlet operations, etc.
Once I've a chance, I will try to use AJAX and improve the client. Any help is appreciated on that side :-) As usual, thanks for all the feedbacks sent by emails!
_uacct = "UA-3111670-1″;
Extending GlassFish's WebContainer
The GlassFish WebContainer is based on the Tomcat Servlet implementation called Catalina. The Catalina architecture, introduced in Tomcat 4.x, was designed to easily allow developer to extends it. There is several interception point in Catalina that can be extended:
- Valve: A Valve is a request processing component associated with a particular virtual-server(host) or web-module (servlet). A series of Valves are generally associated with each other into a Pipeline. Developer will usually inject their valves in order to have access to the Catalina internal objects, and manipulate the request/response object before filters or servlets are invoked. As an example, the access logging mechanism in GlassFish is implemented as a Valve.
- ContainerListener: A listener for significant Container generated events. As an example, every time a WAR is deployed, a ContainerListener implementation will be notified for every new created Servlet, TagLib or Filter.
- InstanceListener: A listener for significant events related to a specific servlet instance. An implementation of this interface will get notified everytime a Servlet is about to be invoked or when some operations are made on the Servlet (like when calling its ServletContextListeners).
- LifecycleListener: A listener for significant events (including "virtual server start" and "web module stop") generated by a component that implements the Lifecycle interface. An implementation of this interface will get notified by mostly all internal objects when an it is started|stopped (like when a new virtual-server is created). As an example, we are using this interface internally to notify the other GlassFish's containers.
Virtual server supports the injection of Valve, ContainerListener and LifecycleListener. Web module supports the same as the virtual server with the addition of the InstanceListener.
Once you have your extension implemented, you need to install it in GlassFish. To install an extension:
For virtual-server
- Add your classes into a jar file (ex: glassfish-ext.jar)
- Place your jar under ${glassfish.home}/lib
- Edit ${glassfish.home}/domains/domain1/config/domain.xml, locate the virtual-server element, and add <property name="type" value="fully qualified class name"> where type can be valve_ or listener_, with a unique number allowing you to define more than one type.
Ex: <property name="valve_1″ value="org.apache.catalina.valves.RequestDumperValve"/>
For web-module
- Same as for virtual-server, but under the web-module element of domain.xml. Except you can bundle your implementation under WEB-INF/lib or WEB-INF/classes (easier to deploy to several GlassFish installations)
Ex: <property name="listener_1″ value="org.glassfish.MyServletListener"/>
Very easy, is it :-). This is supported starting in GlassFish v2 build 17.
_uacct = "UA-3111670-1″;
technorati: web container glassfish
Enabling CGI support in GlassFish
Wants to execute CGI in GlassFish? The GlassFish CGI support is disabled by default, and it is based on the Tomcat implementation. Two ways to enable it: only inside your web application or for all web applications deployed in GlassFish. I strongly recommend you enable it inside your application only for security reason, but if you control the applications deployed in GlassFish, then enabling it to all web applications might be simpler. For your web application, you will add the information in your WEB-INF/web.xml. To enable it globally, you will add it in $glassfish.home/domains/domain1/config/default-web.xml.
First, define the CGI Servlet:
                         <servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet>
Then define the servlet mapping:
<servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping>
If you added this info in default-web.xml, you gonna need to restart GlassFish. Then in you web application, creates a folder under
and drop you CGI under than folder, then deploy your application. You will be able to execute your CGI by doing:
technorati: grizzly cgi glassfish
_uacct = "UA-3111670-1″;
Enabling WebDav in GlassFish
It is very easy to enable WebDav in GlassFish, but you can't enable it the way you usualy do it using Tomcat. The reason is when you define, in defaul-web.xml, the WebDav servlet, you can't protect it because GlassFish lack of support for a default-sun-web.xml, where you usualy define your security constraints mapping. You certainly don't want to enable WebDav without protecting the functionality with a security constraint, because if not protected, then everybody will be able to make modification to your content.
First, enable the WebDav Servlet in your web-xml:
<servlet-name>webdav</servlet-name> <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
Then define the servlet mapping associated with your WebDav servlet:
You are now ready to use any WebDav client by doing connecting to:
As an example, I did using Office 2003:
File > Open > http://192.168.0.101:8080/glassfish-webday/webdav/index.html
and changed the index.html page. Next step is to protect the WebDav support because everybody can now make modifications to your content:
<web-resource-name>Login Resources</web-resource-name>
and then define, in your sun-web.xml:
Next, create you user and password.
asadmin create-file-user --user admin --host localhost --port 4848 --terse=true --groups Admin --authrealmname default admin
You are now ready to use WebDav with GlassFish
technorati: grizzly webdav glassfish
_uacct = "UA-3111670-1″;
Can a Grizzly run faster than a Coyote?
Un coyote court t-il plus vite qu'un grizzly? Or can an NIO based HTTP connector be as fast as a traditional IO HTTP Connector or a C HTTP Connector? The next couple of lines will compare Tomcat 5.5.16, both the Coyote HTTP11 and the Tomcat Native (version 1.1.2) connector (aka APR) with the GlassFish Grizzly NIO powered HTTP Connector. Grizzly is an NIO extension of the HTTP11 implementation.
But don't be fooled by the numbers I'm gonna publish. My goal here is to clarify the myth that NIO non-blocking sockets cannot be used along with the HTTP protocol. This blog is not against Tomcat, and I'm still part of the Tomcat community (although I'm not helping a lot those days, but very interested by Costin works on NIO). OK enough rant…..
First, if my numbers aren't matching your real life application, I will be interested to hear about it. If you like APR/OpenSSL functionalities and think they should be included in GlassFish, I will be more than happy to port them in GlassFish. But let waits for the numbers before saying yes :-)
Oh…BTW some Grizzly numbers has already been published as part of the SJSAS PE 8.2 specJ2004 results. All results can be found here.
Passons maintenant aux choses serieuses….
Differences between Tomcat and GlassFish
First, in order to compare the two, let's explore the differences between the products. Since GlassFish is a J2EE Container, the bundled WebContainer has to support more extensions than Tomcat. Those extensions mainly consist of supporting EJB and the JavaTM Authorization Contract for Containers. Both extensions have an impact on performance because internaly, it means extra events notification needs to happen (In Catalina, in means LifecycleEvent).
A perfect integration will means no performance regressions when extensions are added, but unfortunaly having to support EJB is adding a small performance hit. Fortunalty, JavaTM Authorization Contract for Containers isn't impacting performance. Hence the best comparison would have been to compare JBoss and GlassFish, or Tomcat with Grizzly in front of it. But I'm too lazy to install JBoss….
Out-of-the-box difference
The main difference are:
+ GlassFish has Single Sign On enabled, Tomcat doesn't
+ GlassFish has Access Logging enabled, Tomcat doesn't
+ GlassFish starts using the java -client, Tomcat doesn't set any.
Let's turn off the differences in GlassFish, by adding, in domain.xml:
<property name="accessLoggingEnabled" value="false" />
<property name="sso-enabled" value="false" />
and starts both product using java -server. For all the benchmarks I'm using Mustang:
Java(TM) SE Runtime Environment (build 1.6.0-beta2-b75)
Java HotSpot(TM) Server VM (build 1.6.0-beta2-b75, mixed mode)
Also, Grizzly has a different cache mechanism based on NIO, where Tomcat cache static file in memory using its naming implementation. Grizzly Cache is configured using:
<http-file-cache file-caching-enabled="true" file-transmission-enabled="false" globally-enabled="true" hash-init-size="0" max-age-in-seconds="600" max-files-count="1024" medium-file-size-limit-in-bytes="9537600" medium-file-space-in-bytes="90485760" small-file-size-limit-in-bytes="1048" small-file-space-in-bytes="1048576"/>
And I've turned off the onDemand mechanism:
to fully starts GlassFish.
Envoyons de l'avant nos gens, envoyons de l'avant!
ApacheBench (ab)
Let start with a well know stress tool called ab (google ApacheBench if you don't know it). I will use ab to compare performance of:
+ small, medium, and very large gif files (large & medium gives similar results)
+ basic Servlet
+ basic JSP (the default index.jsp page from Tomcat)
I'm gonna compare Tomcat HTTP11, Tomcat APR and GlassFish. I have tried to comes with the best configuration possible for Tomcat. I got the best number with:
<Connector useSendFile="true" sendfileSize="500" port="8080" maxHttpHeaderSize="8192" pollerSize="500" maxThreads="500" minSpareThreads="25" maxSpareThreads="250" enableLookups="false" redirectPort="8443" acceptCount="5000" connectionTimeout="20000" disableUploadTimeout="true" />
I'm putting more threads than the expected number of simultaneous connections (300) here so HTTP11 can be tested properly (since HTTP11 is one connection per thread). I've also try adding:
firstReadTimeout="0" pollTime="0"
but the result wasn't as good as with the default.
For Grizzly, I've used:
<http-listener id="http-listener-1" ... acceptor-thread="2" .../>
<request-processing header-buffer-length-in-bytes="4096" initial-thread-count="5" request-timeout-in-seconds="20" thread-count="10" thread-increment="10"/>
Yes, you read it it correctly. Tomcat needs 500 threads where Grizzly needs only 10. NIO non-blocking is facinating, is it?
The ab command I've used is:
% ab -q -n1000 -c300 -k http://perf-v4.sfbay.sun.com:8080/XXX
Ready to see numbers? Not yet, here is the machine setup:
OS : Red Hat Enterprise Linux AS release 4 (Nahant Update 2)
ARCH : x86
Type : x86
CPU : 2x3.2GHz
Memory : 4 GB
OS : RedHat Enterprise Linux AS 4.0
ARCH : x86
ype : x86
CPU : 2x1.4GHz
Memory : 4GB
OK, now the numbers. For each test, I've run 50 times the ab command and took the means (for large static resource, I've ran between 10 and 13 because it takes time). The number aren't changing if I remove the ramp up time for every Connector, so I decided to not remove them.
Small static file (2k)
% ab -q -n1000 -c300 -k http://perf-v4.sfbay.sun.com:8080/tomcat.gif
Grizzly: 4104.32 APR: 4377.2 HTTP11: 4448.08
Here HTTP11 is doing a very good job, where Grizzly seems to be hunting and maybe servicing requests. Why? My next blog will explain a problem I'm seeing with MappedByteBuffer, small files and FileChannel.transferTo.
Medium static file (14k)
% ab -q -n1000 -c300 -k http://perf-v4.sfbay.sun.com:8080/grizzly2.gif
Grizzly: 746.27 APR: 749.63 HTTP11: 745.65
OK here Grizzly is better (thanks MappedByteBuffer).
Very large static file (954k)
% ab -q -n1000 -c300 -k http://perf-v4.sfbay.sun.com:8080/images.jar
Grizzly: 11.88 APR: 10.5 HTTP11 10.6.
Hum… here APR has connections errors (means 10) as well as HTTP11 (means 514) and keep-alive hasn't been honored for all connections. Grizzly is fine on that run.
Simple Servlet
% ab -q -n1000 -c300 -k http://perf-v4.sfbay.sun.com:8080/tomcat-test/ServletTest
Grizzly: 10929.93 APR: 10600.71 HTTP11: 10764.67
Interesting numbers…but can't say if it's the Connector or Catalina (Servlet Container). GlassFish Catalina is based on Tomcat 5.0.x (plus severals performance improvement)).
Simple JSP
% ab -q -n1000 -c300 -k http://perf-v4.sfbay.sun.com:8080/index.jsp
Grizzly: 1210.49 APR: 1201.09 HTTP11: 1191.57
The result here is amazing because Tomcat supports JSP 2.0, where GlassFish supports JSP 2.1. Kin-Man, Jacob and Jan (to name a few) doesn't seems to have introduced performance regressions :-).
One thing I don't like with ab is it doesn't measure the outliers, meaning some requests might takes 0.5 seconds, some 5 seconds. All requests are counted, whatever they took to be serviced. I would prefer a Connector that avoid outlier (or at least I don't want to be the outlier when I log on to my bank account!). Let see what the second benchmarks can tell:
Real world benchmark
The purpose of my second benchmark is to stress the server with a real world application that contains complex Servlet, JSP and Database transaction. I think ab is good indicator of performance but focus more on throughput than scalability. The next benchmark simulates an e-commerce site. Customers can browse through a large inventory of items, put those items into shopping carts, purchase them, open new accounts, get account status: all the basic things you'd expect. There is also an admin interface for updating prices, adding inventory, and so on. Each customer will execute a typical scenario at random; each hit on the website is counted as an operation.
The benchmark measures the maximum number of users that the website can handle assuming that 90% of the responses must come back within 2 seconds and that the average think time of the users is 8 seconds. The result are:
Grizzly: 2850 APR: 2110 HTTP11: 1610
Note: I have try APR with 10 threads, 1000 threads and the best results was obtainned using 500 threads.
Do your own conclusion ;-) My goal here was to demonstrate that NIO (using non blocking sockets) HTTP Connector are ready for prime time. I hope the myth is over….
Once I have a chance, I would like to compare Grizzly with Jetty (since Jetty has an NIO implementation). I just need to find someone who knows Jetty and can help me configuring it properly :-)
Finally, during this exercise I've found a bug with the 2.4 kernel and the performance was really bad. Also, it is quite possible you run benchmarks where Tomcat perform better. I would be interested to learn about the way Tomcat was configured…..
// <![CDATA[// technorati: grizzly tomcat glassfish
Running GlassFish with Apache httpd
Quick blog to update the way you can front GlassFish with Apache httpd. Starting with build 41, all Jakarta Commons classes has been renamed from org.apache.* to com.sun.org.apache.* . Since mod_jk uses some of those classes, you need to add a couple of Jakarta Commons packages to make it works. Let's do it steps by steps:
(1) First, install mod_jk
Next steps is to configure httpd.conf and worker.properties. For example, add in /etc/httpd/conf/httpd.conf:
LoadModule jk_module /usr/lib/httpd/modules/mod_jk.so
JkWorkersFile /etc/httpd/conf/worker.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel debug
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send all jsp requests to GlassFish
JkMount /*.jsp worker1
# Send all glassfish-test requests to GlassFish
JkMount /glassfish-test/* worker1
The add in your /etc/httpd/conf/worker.properties
# Define 1 real worker using ajp13
# Set properties for worker1 (ajp13)
Start httpd.
(2) Copy, from a fresh Tomcat 5.5.16 installation
cp $CATALINA_HOME/server/lib/tomcat-ajp.jar
Next, copy commons-logging.jar and commons-modeler.jar from the Jakarta Commons site under to $GLASSFISH_HOME/lib/.
(3) Then enable mod_jk by adding:
$GLASSFISH_HOME/bin/asadmin create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK=8009
Then start GlassFish. That's it!
technorati: httpd glassfish
_uacct = "UA-3111670-1″;
Grizzly part III: Asynchronous Request Processing (ARP)
As described in part II, it is possible to extend the Grizzly Http Engine by writting Pipeline, Algorithm, Handler and AsyncHandler. By default, every HTTP connection are executed synchronously, e.g the request is parsed, the servlet executed and the response flushed to the browser. There is situation where this model doesn't work, e.g. when a business process is calling out to another one over a slow protocol, or if there is a work flow interruption, like the "manager approval email" case. Fortunately, it is possible in Grizzly to implement asynchronous request processing (ARP) using the AsyncHandler interface. But not only in Grizzly ;-)
Next couple of paragraphs will discuss the set of interfaces available, describe the default implementation and conclude with a Servlet which execute only when a new message is available inside a Gmail account. The Servlet can be seen as HTTP Gmail notifier. But first, what's the goal or supporting ARP?
The goal is to be able to build, on top of Grizzly and NIO, a scalable ARP implementation that doesn't hold one thread per connection, and achieve as closer as possible the performance of synchronous request processing (SRP).
Available Interfaces
Grizzly currently expose three interfaces that can be used to implement ARP. They are:
AsyncHandler: This interface is the main entry point. When ARP is enabled, Grizzly will delegate the request processing execution to this interface. Instead of executing a Task, the Task execution will be delegated to the AsyncHandler implementation. This interface is mandatory.
AsyncExecutor: This interface implementation will usually decide when a Task needs to be interrupted, under which conditions (using AsyncFilter), and when the Task needs to be resumed. A Task is interrupted when the conditions required for its execution aren't meet. An AsyncExecutor must have one or more AsyncFilter. If no AsyncFilter are defined, the SRP model will happens. This interface isn't mandatory, but recommended.
AsyncFilter: Implementation of this interface will determine if the current request meet its execution conditions, e.g. does the request need to be executed or be interrupted. An AsyncFilter who decide to allow all requests to be executed without being interrupted will simulate the SRP mode.
The Default implementation
GlassFish ship with a default ARP implementation. The default implementation consist of a DefaultAsyncHandler, a DefaultAsyncExecutor and a new Task called AsyncProcessorTask. The new AsyncProcessorTask is a wrapper around a ProcessorTask, which contains all the code for executing an HTTP request and used with the SRP mode. Mainly, ARP happens when:
1. The request execution is delegated to the DefaultAsyncHandler
2. In DefaultAsyncHandler, the Task is wrapped with an AsyncProcessorTask
3. The AsyncProcessorTask is executed. Its execution consist of delegating the request processing to an DefaultAsyncExecutor.
4. AsyncProcessorTask will first invoke DefaultAsyncExecutor.preExecute(). preExecute() will parse the request line and its headers.
5. Second, AsyncProcessorTask will invoke DefaultAsyncExecutor.interrupt(). interrupt() will execute all defined AsyncFilter(s).
6. An AsyncFilter will validate its execution conditions. If the conditions aren't meet, the Task will be interrupted and added to a Scheduler that will re-execute it once the conditions are meet. It is important to note here that the AsyncFilter thread will not be locked or interrupted, but will be returned to the Pipeline (Grizzly Thread Pool Wrapper). This is the beauty of non blocking NIO, where the one thread per socket paradigm doesn't apply.
7. Once the AsyncFilter determine the execution conditions are meet, the Task will be removed from the interrupted queue and executed. This is usually where a Servlet/JSP are executed.
8. DefaultAsyncExecutor.postExecute() will flush the response to the client.
Note that DefaultAsyncExecutor.preExecute/interrupt/postExecute always delegate the execution to a set of ProcessorTask methods, thus requests are always executed the same way, independently of ARP or SRP.
It is important to note that the default implementation isn't locking the thread when a Task is interrupted. The default Scheduler only have one thread to hold all SelectionKey associated with all interrupted requests.
OK that's it for the theory. Let's work on a real application using GlassFish.
The Gmail Servlet Notifier
Would it be nice if we can have a way to have a Gmail Notifier similar functionalities using HTTP? Not to say there is no Unix version. Of course you can always log in your account and refresh the page, but I don't want to refresh every minutes or so. You can probably do something similar using AJAX…but I want to do it in Grizzly :-)
What we need is a Servlet that execute only when new emails are available in a Gmail account. Not only to Gmail, but to any POP3 account. In this case, the execution conditions would consist of connecting to the account, look for new emails. If new emails are available, then execute a Servlet that list all new emails (or display a flashing flag). Whatever the Servlet does, the goal here to to execute it only when its execution conditions are meet.
The solution is simple. We just need to define an AsyncFilter who does:
1. Connect to our Gmail account
2. Look for new emails. If emails are available, execute the Task.
3. If no news emails, interrupt the Task (ARP), wait a couple of seconds (here 10 seconds), then re-evaluate if new emails are in. If new emails has come, then execute the Servlet.
Fortunately we can use JavaMail for (1), and Grizzly default ARP implementation for (2) and (3), and by adding a new AsyncFilter implementation. Then, we just have to:
1. Starts Grizzly using ARP mode.
2. Create a JavaMail Session for Gmail to be used by the AsyncFilter.
2. Deploy the Gmail war file. All the account information (username, password, server url, port, etc.) are included inside web.xml (I agree the password shouldn't be there).
3. Use a browser to invoke the Servlet. The browser will keep the connection openned until you receive a new email.
4. When new emails are read, the Servlet will be executed and your email information (headers, text) will be displayed.
The implementation just consist of:
+ JavaMailAsyncFilter: this is the AsyncFilter than will determine if ARP or SRP is used.
+ JavaMailAsyncFilterHandler: This interface need to be implemented by the Servlet. Via this interface, the JavaMailAsyncFilter will be able to determine if the execution conditions are meet or not.
+ JavaMailAsyncFilterEvent: this object contains context information about the current execution conditions. This object is shared between the JavaMailAsyncFilter and the Servlet implementation.
+ EmailNotifierServlet: the Servlet that will be interrupted unless new emails are available.
You can find the basic implementation here. Make sure you read the README.TXT which explain how to build and deploy in GlassFish. Since ARP is not a default feature, it is a little complicated to setup (feel free to post here for help). I've tested with my local POP3 provider and my Gmail account and it worked fine.
When testing with Gmail, I selected Settings > Forwarding and POP. In the POP Download, I've picked "Enable POP only for mail that arrives now on". Thus my first request to the Servlet will not meet the execution conditions, and the Servlet will be interrupted until I send an email to myself.
Of course the Gmail implementation is far from perfect, and can be greatly improved (improvement are more that welcome!). My goal here was to demonstrate how you can extend Grizzly and start supporting ARP. As always, contributions are welcome.
That's it. Next time I will try to give some NIO tricks and tips (specially when it time to deal with OP_WRITE).
P.S Thanks to Andrea Egloff for his useful feedback on the default ARP implementation.
_uacct = "UA-3111670-1″;
technorati: grizzly nio asynchronous request processing glassfish
Grizzly NIO Architecture: part II
First, see part I here.
Second, Sun published specJ2004 using the upcoming SJSAS 8.2 PE, which contains a similar Grizzly version than the current one available in GlassFish. I think it is the first ever NIO implementation that got benchmarked :-) I suspect it's our best score ever, but I didn't look at all the results.
OK enough marketing, and let see how Grizzly looks like under the hood. The next couple of lines will describe the main components in Grizzly, why they exists and how they can be customized. All the classes decribed in the text are available here
The main entry point is the Pipeline. I don't know why I've picked that name from Tomcat's Catalina, since everybody confuse Catalina Pipeline with Grizzly Pipeline. I guess I should have picked ThreadPoolWrapper or something along that line, because a Grizzly Pipeline component is really a Thread Pool Wrapper. A Pipeline is reponsible of the execution of a Task implementation. There is currently three Pipeline implementation included in the code base:
(1) LinkedListPipeline: thread pool based on a linked list
(2) ThreadPoolExecutorPipeline: thread pool based on java.util.concurrent.ThreadPoolExecutor
(3) ExecutorServicePipeline: based on java.util.concurrent.Executors
Surprisingly, all benchmarks perform better when (1) is used, hence the default. It seems the park()/unpark() uses in (2)(3) are slower that a simple lock.
The main entry point in Grizzly is the SelectorThread. The SelectorThread is where the NIO selector is/are created. It is possible to use more than one Selector, based on the number of cpu GlassFish is installed on. When processing a request, the SelectorThread always create instances of Task, and pass the instance to the Pipeline. The SelectorThread can pass three type of Task:
AcceptTask to handle NIO event OP_ACCEPT
ReadTask|AsyncReadTask|ReadBlockingTask to handle OP_READ
ProcessorTask to handle the request processing, and OP_WRITE
The SelectorThread is configurable and can create one Pipeline per Task, or share a Pipeline amongs Tasks. The best performance I've measured as of now is when OP_ACCEPT is executed on the same thread as the SelectorThread (so outside a Pipeline), OR_READ and OP_WRITE on the same thread using a Pipeline. Note that during that time, I've faced that strange bug, which is now fixed in 5.0 ur7 and 6.0. Make sure you are using the right VM version if you plan to play with Grizzly.
The ReadTask is mainly responsible for pre-processing the request bytes. By pre-processing, I means to decide when we think we have enough bytes to start the processing of the request. Different strategy can be used to pre-process the request, and a strategy can be implemented using the StreamAlgorithm interface.
The ReadTask always do the first read on a socketChannel, and then delegate the work to a StreamAlgorithm implementation. Grizzly has three StreamAlgorithm implementation:
(1) StateMachineAlgorithm: this algorithm reads the request bytes, and seek for the HTTP content-length header. The strategy here is to find the content-length and reads bytes until the requests headers and the body is fully read (because with NIO, you can't predict if you have read all the bytes or not). Once all the bytes are read, the algorithm tells the ReadTask it can pass the processing to the ProcessorTask. The algorithm only supports HTTP 1.1, and GET/POST/HEAD/OPTIONS (but not PUT). But performance is quite impressive, but you must always cache the request in memory, which is bad for PUT or large POST body.
(2) ContentLengthAlgorithm: same as (1), except supports all HTTP method and HTT 0.9/1.0/1.1. This Algorithm is based on Coyote HTTP/11 connector way of parsing the request, and perform very well.
(3) NoParsingAlgorithm: this algorithm doesn't pre process the requests bytes. The processing of the bytes will be delayed until the ProcessorTask is executed. The strategy here is to assume we have read all the bytes, and if bytes weren't all read, let the ProcessorTask decide when/how to read the missing bytes. This is achieved by the ByteBufferInputStream class, which internally use a pool of Selectors to register the socketChannel and waits for more bytes.
(3) is the current default startegy.
The ReadTask also manage the life cycle of the SelectionKey (if you aren't familiar with NIO, consider a SelectionKey == Socket). To avoid holding a thread when processing a persistent connection (keep-alive), like most of the current Java HTTP Server implementation, the ReadTask implement a strategy where threads aren't used in between request. The strategy used is:
(1) If the request is completed, but keep-alived, release the thread and register the SelectionKey for IO event
(2) if the request isn't completed, release the thread but keep the ReadTask attached to the SelectionKey, to keep the connection state/history.
(3) if the request is completed and not keep-alived, release the thread and the SelectionKey.
This strategy prevent one thread per request, and enable Grizzly to server more that 10 000 concurrent users with only 30 threads. Note that (2) happens when a StreamAlgorithm fail to properly parse the request (ex: by not predicting properly the end of the stream). By default, (2) is never executed, and shouldn't. But I'm still exploring strategy, so the functionality is still available.
ReadTask also implement the missing socket.setSoTimeout() functionality which was dropped in J2SE when a socketChannel is non blocking. I don't know what was the rational behind not supporting this API, but it is pretty bad because every NIO implementation will have to implement that mechanism.
Currently, the implementation reside in KeepAlivePipeline, which internally uses a java.util.concurrent scheduler to simulate socket.setSoTimeout. Performance wise, I have to admit Grizzly perform better when this mechanism is turned off. But since setSoTimeout() is crucial when parsing HTTP requests (to detect DOS, attack, etc.), the implementation is turned on by default. I'm still trying to find a better way to implement it, as I really don't like the current implementation, event if the Rule architecture looks promising, specialy when application resource allocation (ARA) is used. I will soon discuss what ARA does, but you can take a look at the code here
Next, the ProcessorTask mainly operates on the request bytes, parsing the request line and headers. Once parsed, it pass the request to an adapter, which is configurable (the current adapter is the entry point inside the Servlet Container). The ProcessorTask can execute synchronously the request, or delegate the request processing to an AsyncHandler implementation (I will discuss asynchronous request processing in my next blog, which I hope isn't in 6 months ;-))
ReadTask and ProcessorTask can be configured with Handler, which can be used to intercept the state of the processing. Current Handler implementation include a new static resource cache, which serve static resources (html, gif, etc.) using NIO MappedByteBuffer, without delegating the call to the Catalina Default Servlet. Only static resources that aren't protected by a filter or a security constraint are candidate to the FileCache.
Handler are always associated with a StreamAlgorithm, and execute at the ByteBuffer level.
Ouf…I should blog more often, so my blogs are shorter :-). To recap, here is the current interfaces available in Grizzly that can be customized:
1. Pipeline: Thread Pool Wrapper, entry point for Task
2. StreamAlgorithm: The parsing strategy used.
3. Handler: Manipulating the requests before it get parsed.
4. AsyncHandler: The entry point for implementing asynchronous request processing system.
In my next blog, I would like to cover the OP_WRITE headache we had in Grizzly, specially when executing on a win32 platform. I would also like to introduce the Asynchronous Request Processing hooks available in Grizzly, e.g. the ability to serve a request over a long period of time without forcing the entire state to be kept around (e.g. when a business process is calling out to another one over a slow protocol, or if there is a work flow interruption, like the "manager approval email" case).
That's it for now. Let me know what you think. I'm very interested about improving the setSoTimeout implementation, and to explore more performant StreamAlgorithm implementation.
_uacct = "UA-3111670-1″;
technorati: grizzly nio asynchronous request processing glassfish
Grizzly: An HTTP Listener Using Java Technology NIO
Writing scalable server applications in Java technology has always been difficult. Before the advent of NIO, thread management issues made it impossible for an HTTP server to scale to thousands of users. I'm gonna start blogging on Grizzly, the HTTP Connector based on NIO shipped in GlassFish.
First, the truth: This is my first ever blog, I'm Quebecois and do a lot of typos (and speak with an ugly accent)..and I'm tempted to write in french…so there is still time to hit the back button of your browser!
For my first blog ever (and hopefully not the last), I will describe a new HTTP Connector based on NIO, called Grizzly on which I'm working on. Grizzly is currently the HTTP front-end for SJSAS PE 8.1 (throttled version), and included in the GlassFish project.
Grizzly has been designed to work on top of the Apache Tomcat Coyote HTTP Connector. The Coyote Connector is used in Tomcat 3/4/5 and has proven to be a highly performant HTTP Connector when it is time to measure raw throughput. But as other Java based HTTP Connector, scalability is always limited to the number of available threads, and when keep-alive is required, suffer the one thread per connection paradigm. Because of this, scalability is most of the time limited by the platform's maximum thread number. To solve this problem, people usually put Apache in front of Java, or use a cluster to distribute requests among multiple Java server.
With NIO available in 1.4, I've started thinking about exploring a new HTTP connector based on NIO. Grizzly started as a side project and based on throughput performance number I surprisingly got (I wasn't scare about scalability), I've replaced Coyote with Grizzly. At the time, I didn't find any open source framework I can rely on to start my work, so I started to write my own framework (couple of weeks after I started, Mike Spille blogged about EmberIO). EmberIO looked promising but seems little activities occurred since then.
Another reason I started the work was because I was tired of hearing that NIO wasn't appropriate for HTTP, without seeing a single real implementation. I wanted to see real stuff, not judgments peoples have. If performance wasn't there, I would have never bloged about Grizzly…
Grizzly differ from Coyote in two areas. First, Grizzly allow the pluggability of any kind of thread pool (three are currently available in the workspace). I will not give details now, but will blog later with the result I'm getting with those threads pools, and why you may want to change the default one based on what you are doing with GlassFish. Second, Grizzly supports two modes: traditional IO and non blocking IO. Why? the main reason is SSL. At the time I've started, SSL non blocking wasn't available, so I needed to use Coyote SSL implementation (which is quite good). I should soon add support for SSL non blocking.
OK enough words. Let me try to explain Grizzly architecture. The problem with NIO non blocking and HTTP is your never know when all the bytes have been read (this is how non blocking works). With blocking, you just wait on the socket's input stream. With non-blocking, you cannot wait on the socket input stream because it will return as soon as you have read all the available data. But that doesn't means you have received all the request bytes. Technically, you have no guarantee than all the bytes has been read from the socket channel:
count = socketChannel.read(byteBuffer));
This may not read the entire stream bytes, and may require several extra read operations. Unfortunately, this situation occurs frequently when reading HTTP requests. I've explored several strategies (which I will details in my next blog) and kept the most performant one, which consist of a state machine used to parse the content-length header and predict the end of the stream.
Having to support several strategies and several IO modes, I did design Grizzly in such a way it is easy to integrate new strategy within the framework. A Task based architecture has been used, each task representing an operation when manipulating the request:
+ AcceptTask for managing OP_ACCEPT
+ ReadTask for managing OP_READ
+ ReadBlockingTask for managing blocking IO operation.
+ ProcessorTask for parsing/processing the byte stream.
Every task can execute on their own thread pool or use a shared one. By default, one thread handle OP_ACCEPT and the Selector.select() operation, and a thread pool all others operations. This is how I'm getting the best performance number when running internal benchmarks. Designed to measure scalablity and throughput simultaneously, our benchmarks look for how many concurrent clients can we support, with the following criteria:
+ Avg. client think time is 8 seconds
+ 90% response time is 3 seconds
+ Error rate < .1%
Plug : But I will not discuss the numbers here, because I keep the numbers for my JavaOne session on June 28 :-)
Well, that's it for today. Next time I will gives more details about the strategies I have explored (with code, not words so less typos) and the characteristics of every threads pools available in Grizzly. And sorry if it was boring…at least I'm exercising my english writting skills :-)
P.S BTW, even if I use "I", I've developed Grizzly with Charlie Hunt(Netbeans team), Scott Oaks (Performance team) and Harold Carr (Corba team).
P.P.S Grizzly is far from perfect, so patches and strategies are more than welcome!
_uacct = "UA-3111670-1″;


text:
We are less than 20 days away to the next US qualifier in Honduras. Thought it would a good time for TSG to take a few minutes to re-watch the June 6th USA-Honduras match on June 6th in Chitown and re-ignite the fervor and dialogue among the USMNT fanbase.
Did I mention I love ESPN360.com? What a great product.
It's always fun to go back and watch USMNT tape months later to see the player changes and play progressions.
First Bob Bradley came out with an even more defensive on his home turf starting Ricardo Clark and Pablo Mastroeni in the midfield with Connor Casey pairing Altidore upfront.
The backline is probably what you should see on 10/10: Bornstein, Boca, Gooch and Spector. However, Cherundolo's name, with his experience and continued playing time overseas might see him back in the line-up at the expense of Spector.
Some observations in retrospect:
- I loved the aggression the US came out with at the whistle. The Yanks really looked to link and score. Actually come to think of it, they may just have been only mildy aggressive however holding that June 6 match up against the light with the T&T one, the aggression is magnified that much more.
- That aggression was helped by Honduras playing defense to the U.S.'s strengths. Honduras played an extremely narrow midfield with their wing defenders collapsing inward. This allowed Pablo Mastroeni, of all players, to just keep milking the easy pass to the wing for the US to migrate (with Landon and Clint) nearly unchallenged up the pitch. Will Honduras stay as narrow in the rematch? Mastroeni literally looked like a qb hitting the running back out of the backfield for dump-and-swing passes all day long.

subset: commoncrawl


text:
Week 10 is in the books and Dave Dameshek targets the Manning brother's interception problem and Clay Matthews' real life transformation into the mythical comic book hero Thor. Check out who else finds their way under Dave's white light of shame.
The Shek Report: Week 10
November 13, 2013 | Posted in Shek Report and tagged Clay Matthews, Eli Manning, Green Bay Packers, Peyton Manning, Thor. Bookmark the permalink.


text:
From: $148,843Sage top features include: Spacious dining area; Open great room; 13'4" x 14'4" owner's retreat with private bath and walk-in closet
See our privacy policy
Visit this
4312 Burchard Dr. , Raleigh, North Carolina 27616
See phone number and office hours
877-891-3287 - Hours: M:10:00-6:00,Tu:10:00-6:00,W:1:00-6:00,Th:10:00-6:00,F:10:00-6:00,Sa:10:00-6:00,Su:1:00-6:00
Highland Creek Townhomes features include: 11,000-Sq.Ft. Resident's Lodge; Jr. Olympic Pool; Kiddie Pool with Slide and Splash Zone; State-of-the-Art Fitness Center; 2.5 Miles of Sidewalks and Biking Trails; Park with Soccer Field; Playground ; Sports Courts Including Tennis and Basketball; Recreation Room Featuring Pool, Card, Ping-Pong and Foosball Tables; Community Social ClubsFree brochure
Actual schools may vary. Contact the builder for more information.
From I-540: Take I-540 to Exit 18; Head North on Hwy 401N / Lousiburg Rd.; Follow 3 miles and Hihgland Creek will be on your left
Highland Creek Townhomes
by Centex Homes
4312 Burchard Dr.
Raleigh, North Carolina 27616
Save and share
More sharing options
Get more info
Want to keep looking?
While Builders Digital Experience seeks to ensure that all of the information concerning new homes and new home communities, as well as other data on the site is current and accurate, we do not assume any liability for inaccuracies. It is your responsibility to independently verify information on the site.
Yahoo! Inc. does not collect or receive any personal information submitted through this site.


text:
Wildcat freshman corner reacts to getting singled out against UNLV.
The University of Southern California pitching staff stifled
the Arizona offensive attack, and Omar Cotto Lozado delivered a walk-off single
with two down in the bottom of the 12th inning to hand the Trojans a
series-clinching victory Friday evening at Dedeaux Field.
A somewhat sloppy game turned into a battle of bullpens in the late stages with
Arizona's Bobby Dalbec and USC's Kyle Twomey squaring off. The Wildcats'
right-hander turned in 5.1 innings of relief, while the Trojans lefty more than
matched him with 5.2 shutout innings and just one hit allowed.
Twomey (W, 1-2) retired the final 14 batters he faced, which
bought enough time for the Trojans to mount their game-winning rally.
Jeremy Martinez was 4-for-6 on the night, including a key
single to open the decisive bottom of the 12th.
USC (19-17, 8-9 Pac-12) looked to advance pinch-runner
Frankie Rios to second with AJ Ramirez, a late-inning replacement, at the
plate. Ramirez squared around to bunt, but pulled the bat back and chopped a
ball out in front of the plate. The eventual throw to first was not in time,
putting two on with no out after the infield hit.
The Trojans again tried the slash play with Blake Lacey, who advanced both
runners on a ground out to third base. That brought up pinch-hitter Kyle Davis,
but Dalbec racked up his second strikeout and was one out away from escaping
the jam.
That did not happen as Cotto Lozado slapped an opposite-field single through
the left side of the infield to drive in Rios with the game winning run. Cotto
Lozado finished the night 3-for-6 with a pair of runs scored.
Dalbec (L, 2-3) took the loss despite some gritty relief pitching in a
career-long outing. However, his defensive miscue in the bottom of the eighth
blew what was, at the time, a save opportunity.
With Arizona leading 4-3, Dalbec struck out Bobby Stahel to lead off the
eighth, but the third strike was wide of catcher Riley Moore, and Stahel
reached on a wild pitch.
Instead of bunting the potential tying run to second, the
Trojans let Cotto Lozado pull the bat back and he slashed a one-hopper to the
mound. Dalbec, thinking he had a chance to turn a double play, fielded cleanly
but fired wildly into centerfield, putting runners at the corners with no outs.
Vahn Bozoian followed with a safety squeeze that brought home Stahel with the
game-tying run.
Arizona (17-22, 6-11 Pac-12) seemed to gain momentum with a two-run seventh
inning to wrestle the lead away from the Trojans. Trailing 3-2, Tyler Krause
belted his first career home run to left field, tying the game to lead off.
Kenny Meimerstorf followed with a single and he was bunted to second by Joseph
Maggi, which marked the end of starter Brent Wheatley's night. Reliever James
Guillen then surrendered an RBI single to Zach Gibbons, which put the Wildcats
ahead 4-3.
Twomey immediately took over with Gibbons on second base following an error.
The lefty induced a pop out to Trent Gilbert and then intentionally walked
Kevin Newman.
The Wildcats opted to pinch-hit for Willie Calhoun, who was
0-for-1 with a walk, and called upon Scott Kingery. Sidelined by an injury,
Kingery entered hitting a team-best .390 but had yet to play in the series. His
only at-bat resulted in an inning-ending pop out leaving a pair of runners on
The timely hits eluded the Wildcats much of the night – as did any kind of
hits. USC out-hit Arizona, 16-5, in the game, but the Wildcats struggled to a
1-for-10 clip with runners on base. Meanwhile, the Trojans scored three times
with two outs on 6-for-17 hitting in such situations.
USC took the initial lead with a run on two hits in the second following Reggie
Southall's safety squeeze bunt to score Cotto Loazdo, who earlier doubled.
Arizona responded with a two-run fourth inning despite the benefit of a hit.
Wheatley issued consecutive walks to Gilbert and Newman, and Calhoun bunted
both into scoring position. Dalbec drove in a run with a sacrifice fly, before
Moore lifted a pop fly on the infield that was dropped by Lacy, the third
baseman, allowing Newman to score from second.
The Trojans struck for single runs in the fifth and sixth frames, respectively,
taking 3-2 lead. Martinez delivered the game-tying RBI hit in the fifth, and
Bozoian added a run-scoring single an inning later.
Arizona starter Cody Hamlin did not factor in the decision, but was solid
despite scattering 10 hits and a walk over 6.1 innings. He was charged with
three earned runs.
USC's starter, Wheatley, also went 6.1 innings and did not factor in the
decision. The right-hander gave up four runs – three earned – on three hits and
four walks.
The series concludes on Saturday evening at 7 p.m. (PDT) and will be televised
live on the Pac-12 Network. A live radio broadcast is also available on 1290 AM
in Tucson, Ariz.
Copyright 2014 Arizona Athletics. All rights reserved.
7831 N. Business Park Drive
Tucson, AZ 85743
(520) 744-1313
FCC Public File
EEO Report
Closed Captioning
FCC Public File
EEO Report
Closed Captioning
FCC Public File
EEO Report
Closed Captioning


text:
Tintern Abbey
par Paul Mears
Loading ...
Photo panoramique par Paul Mears Pris 22:33, 25/11/2012 - Views
Tintern Abbey
'Inside' the ruins of Tintern Abbey. I was lucky to get such nice weather during my visit, with so fe...
Quaint little church hiding in the Forest of Dean. You only know it's there when the clock chimes the...
Go to my website if you want to see more Panoramas from England.
Go to my website if you want to see more Panoramas from England.
Raglan Castle (in Welsh: Castell Rhaglan) is a late medieval castle located just north of the village...
Wales (Cymru in the Welsh language) is part of the United Kingdom of Great Britain and Northern Ireland. The major cities are Cardiff, Swansea, Newport and Bangor. The city of St. Davids is the smallest city in the UK with a population around 2000. Wales itself has a population of around 3 million. The Welsh language is spoken by around 20% of the population.


text:
Merits & Demerits Book One is a 5-inch-by-8-inch, 120-page book. It's a book which absorbingly presents the pros and cons of some of society's hottest and most controversial topics and issues.
It's a book for everyone – the questioner, the policy-maker, the debater, the examiner, the teacher, the student, the Christian, the Bible teacher, the modernist, the traditionalist, etc.
The book educates, informs and entertains simultaneously. I am sure you will fall in love with this little book. You will not only enjoy reading it, you will also gladly recommend it to your family and friends.
Links of my other books:
1. http://www.blurb.com/bookstore/detail/1593006
2. http://www.blurb.com/bookstore/detail/892404


text:
Account closed by site administrator
This profile has been removed for a possible violation
of the site's terms of use.
Please help us to maintain a friendly and secure environment by reporting requests for money or any other inappropriate conduct by our members. Your enjoyment and success are our highest priorities. Thank you for being a member of AfroRomance.com.
If you have any questions please contact us.
Customer Service Manager


text:
Ale's Bachelorette Entourage in Las Vegas! by Bachelorette_Party - about 5 years ago
"This picture was taken outside the Mirage Casino in Las Vegas Nevada. The purpose of this event was to celebrate my sister Ale's Bachelorette Party. Our shirts said "Ale's Bachelorette Entourage-Cuz Girls Just Wanna Have Fun! June 4-7, 2009. We had a great time wearing these shirts. There was a lot of attention! Customink did a great job. They are fast, cheap and the shirts are great quality."


text:
Carbohydrates give our bodies at least half the energy they need each day. Our bodies turn different carbohydrates into blood glucose at different rates. The glycaemic index (GI) is how we measure this.
Low-GI diets are especially important for children and adults with diabetes. Minimising fluctuations in blood sugars helps keep diabetes under control.
Carbohydrates are natural substances that contain oxygen, hydrogen and carbon – we need these substances to 'get up and go'.
Carbohydrates are the only fuel that the brain and red blood cells can use, and the main source of energy for our muscles.
We get our carbohydrates from starchy foods like bread, pasta, rice, cereals, biscuits and potato. Sugars – such as table sugar or the natural sugars in fruit – are also sources of carbohydrate. No matter what your carbohydrate source is, your body will use it for energy.
When we eat carbohydrates, our digestive system breaks them down into glucose. The glucose then travels in our blood to the cells of our body. Our cells use this glucose to produce energy.
Different carbohydrates are turned into glucose at different rates. This means that different carbohydrates – that is, different foods – cause blood glucose levels to go up and down at different rates.
The glycaemic index (GI) ranks foods on a scale from 0-100, based on what effect the food has on blood glucose levels:
Here's a diagram that shows the difference between low-GI and high-GI foods.
(Source: Professor Jennie Brand-Miller, University of Sydney)
The following is a guide only to some foods and their GI values. Different brands of food can have different GI values, so it's best to speak to a dietitian or check the label on the food. Many foods are now marked with the glycaemic index symbol. To qualify for the symbol, foods must be low GI and meet strict criteria for energy, fat, saturated fat, sodium, fibre and calcium content.
Benefits of a low-GI diet include:
Many low-GI foods can be found in a healthy diet. If you're planning a low-GI diet for your family, you can think about what foods to include, as well as how much and how often to eat them during the day.
Getting a balance of high and low GI
The rapid rise and fall in blood sugar levels that comes from eating high-GI foods can leave your child with low blood sugar. One consequence of low blood sugar is that your child will then feel hungry, which might lead to overeating.
It's OK to eat some higher-GI foods. The trick is to make sure each meal and snack also has low-GI food on offer. This way you can moderate the effects of high-GI foods. High-GI foods and low-GI foods combine in your body for a medium GI – they balance each other out.
Quantity matters
When you're choosing which carbohydrate foods to offer your family, it's important to think about not just the GI rating, but how much you're eating of the different kinds of food.
A big serving of a high-GI food, such as potato, will have a big impact on blood glucose levels. So you might consider including high-GI foods in smaller amounts, with larger serves of low-GI foods to get more of the benefits of low-GI foods.
When to eat your carbohydrates
To get the benefits of a low-GI diet, it's worth thinking about when to eat your carbohydrates each day.
The ideal is to eat three regular meals (and possibly snacks), with an even spread of carbohydrates throughout the day. This will lead to more even blood glucose levels and provide fairly steady energy levels. This is essential for people with diabetes, but it's also important for people who want to keep up good health.
Your child's carbohydrate needs will depend on how much physical activity she gets and her age.
Switching to a low-GI diet is easy – chances are your family won't even notice the difference.
By swapping at least half your carbohydrate food choices for lower-GI options, the whole family can reap the benefits.
What if my child doesn't like low-GI foods?
Not all of your child's food needs to be low GI. Low-GI and high-GI foods combine in your child's body for a medium GI – they balance each other out.
Try to find out which low-GI foods your child's happy with and make these the ones you have at home. Ideally, at least half of your child's carbohydrate foods will come from the low-GI foods he enjoys.
Chocolate has a low-GI value. Does this make it a good food choice?
Many foods high in fat have a low-GI value – chocolate's a good example of this. A low-GI diet doesn't cancel out the problems of a high-fat diet. So you still need to keep foods such as chocolate for treats.
Does eating too much sugar cause diabetes?
There's no link between eating sugar and developing diabetes. But eating too much sugar can lead to tooth cavities and weight problems.
What's the best food for my child to eat before sport?
Carbohydrate foods are the best source of energy before sport. Low-GI foods – such as porridge, wholegrain toast or sandwiches, milkshakes, fruit smoothies or a banana – will give your child sustained energy on the day of the game. High-GI foods, such as sweet drinks, can be handy for instant energy immediately before or after heavy physical activity. This is because they give your child carbohydrates and fluids at the same time.
Raising Children Network would like to thank Dr Heather Gilbertson, Advanced Accredited Practising Dietitian, for her contribution to this article.
Brand-Miller, J., Hayne, S., Petocz, P., & Colagiuri, S. (2003). Low-glycemic index diets in the management of diabetes: A meta-analysis of randomized controlled trials. Diabetes Care, 26(8), 2466-2468.
Brand-Miller, J., McMillan-Price, J., Steinbeck, K., & Caterson, I. (2009). Dietary glycemic index: Health implications. Journal of the American College of Nutritionists, 28, 446S-449S.
Choice (2009). Glycaemic index. Retrieved July 15, 2011, from http://www.choice.com.au/Reviews-and-Tests/Food-and-Health/Food-and-drink/Nutrition/Glycaemic-Index/Page/Can%20a%20low%20GI%20diet%20fight%20flab.aspx.
Gilbertson, H.R., Thorburn, A.W., Brand-Miller, J.C., Chondros, P., & Werther, G.A. (2003). Effect of low glycemic index dietary advice on dietary quality and food choice in children with type 1 diabetes. American Journal of Clinical Nutrition, 77(1), 83-90.
Thomas, D., & Elliott, E.J. (2009). Low glycaemic index, or low glycaemic load, diets for diabetes mellitus (Review). The Cochrane Collaboration, 3, 1-31.


text:
Please use the buttons below to see more information on Leicester Tigers and matches between Wasps and Tigers over the years.
London Wasps suffered only their second defeat in two seasons at Adams Park on Sunday, out muscled by 19-13 by a well drilled Leicester Tigers side.
There was little to choose between the sides at half time, the sides going in a 10-10, but in the second half Wasps lacked penetration and the boot of Ian Humphreys was enough to ensure Leicester the win.
The opening 20 minutes was pretty end to end stuff, as first Wasps and then Leicester enjoyed some good attacking moments. Alex King missed a sitter of a drop goal in the third minute after Wasps started brightly, and therefore it was Leicester first on the scoreboard, courtesy of Humphreys penalty after 11 minutes.
His kick was delayed however, as Wasps centre Ayoola Erinle was stretchered from the pitch with a suspected broken leg. He was replace by Jeremy Staunton, who brought Wasps level with his own three pointer 5 minutes later, and Alex King added Wasps only try shortly after. The score came after James Haskell, Wasps Man of the Match, bashed up the middle, and as the ball squirted over his shoulder in the contact, Staunton plucked it from the air and offloaded to King who, half tackled just short of the line, was not held and managed to scramble over for the score.
Leicester were making chances of their own however. Humphreys was looking bright at ten and was finding gaps for himself and centre Daryl Gibson and Dan Hipkiss in the Wasps midfield that kept Edd Thower busy in defence.
In the 25th minute Humphrey changed the direction of play with a switch behind the scrum that opened up a big hole for Shane Jennings. Tackled by Thrower he offloaded to Gibson, who was scragged by Dallaglio just metres out.. Jennings followed up to scoop the lose ball over the line for a try, though Dallaglio was in no doubt that the ball had gone forward out of the tackle. The try stood however, and Humphreys conversion took the score to 10-10.
Both teams had further chances before half time, Buckland spilling the ball with the try line in front of him, and Thrower swallowed up as the defence were unphased by his dummy and hauled him down short of the line. Tigers were beginning to assert themselves up front however, and a huge driving maul made them at least 20 metres before Ellis broke away blind, only Alex King's tap tackle stopping him from a score.
After half time Thrower did cross the line in the left corner, only for referee David Rose to disallow the try for a forward pass. The score had come after Thrower had tried for a drop goal. His kick bounced off a Leicester player and into the grateful arms of Haskell, who set off into the Tigers 22 before giving the erroneous pass to Thrower for the score.
Haskell's back row partner, Tom Rees was also getting into the action with some barnstorming runs up the middle, but Wasps could not build any momentum as they were being driven off the ball fairly consistently by a stronger looking Leicester pack. Jeremy Staunton had a chance to put Wasps ahead in the 45minute, but was of target. Humphreys however made not mistake ten minutes later to give the visitors the lead.
Wasps were lucky not to go further behind, as Humphreys capitalised on a Wasps handling error, putting boot to ball to set up a race for the line between Alex King and Tom Varndell. There was no doubt that Varndell had the gas to overhaul the Wasps man, but his circuitous route around the post as the ball bounced into the dead ball area allowed the more wily King to nip in and steal the touchdown.
Peter Bracken was shown a yellow card on the hour for a high tackle on centre Hipkiss and, with the subsequent penalty, Humphreys stretched the Leicester lead. His side were now establishing some dominance, and another penalty in the 71st minute put Leicester nine points ahead. This seemed to spur Wasps into action and they spent the last ten minutes pretty much camped in Leicester's 22. Buckland was sent to the sin bin for killing the ball after Thrower and Sackey had combined to take Wasps to within arms length of the try line, but Staunton was wide the with penalty that followed.
In another wave of attack, substitute Cipriani's great offload threatened to open up the gap for a score, but time was not on the hosts' side and therefore King chose to drop into the pocket and take the three points whilst they were available, his drop goal ensuring Wasps took a bonus point from an otherwise disappointing display.
Ian McGeechan's appraisal of the game afterwards was suitably pragmatic.
'It the poorest we've been since I've been here, and I am disappointed. In the contact area we were poor, and we very rarely got on the front foot. When we did, in the last five minutes, it looked very different, but for most of the game that wasn't the case. If we were doing that every week, I'd be worried. I don't want to repeat it.'
Referee: David Rose
Man of the Match: James Haskell


text:
Cordova was dealt a second straight lopsided loss. Hamilton's offense proved too much for the Blue Devils in a 34-13 win.
The Aggies connected on three touchdown passes, all longer than 40 yards, in the first half and built a 27-7 halftime lead. Garrett Woods scored on an 8-yard touchdown reception in the second quarter to put Cordova on the board.
He also added the Blue Devils second score — on a 3-yard run — in the fourth quarter.
The Blue Devils (0-2, 0-1) will try to pick up their first win of the season in their home opener next week against region foe Vinemont.
Bibb County 47, Carbon Hill 6
Bibb County opened up an early lead and pulled away from Carbon Hill in a 47-6 Class 4A, Region 4 victory Friday night at Centerville.
Carbon Hill dropped its 12th straight game dating back to last season. The Bulldogs have now been outscored 89-20 in losses to Curry and Bibb County.
Carbon Hill got on the scoreboard in the fourth quarter when Hunter NeSmith hit Evan Castle for a touchdown strike.
The Bulldogs (0-2, 0-1) now head home for three straight games — Jemison, Oak Grove and Winston County.


text:
Definición de networker en inglés:
networkerSaltos de línea: net|work¦er
Pronunciación: /ˈnɛtwəːkə /
1A person who works from home or from an external office via a computer network.
Más ejemplos en oraciones
- Office networkers are protected by network firewalls and virus checkers which are absent in the home.
- Most doctors don't even touch a PC unless they have to and the vast array of different computers, terminals, servers, what-have-you throughout the service is a networker's nightmare.
- Still, right now, Linux is a specialized operating system catering to developers, networkers and IT professionals.
2A person who uses a network of professional or social contacts to further their career: she is an ambitious networker, closely plugged in to politics
Más ejemplos en oraciones
- Lee is a very remarkable guy, and a great networker.
- He's a charismatic networker and a man with high political ties stemming back to his days in the Australian Labor Party.
- Fortunately, Leri is the ultimate networker, with a Palm handheld that contains 4,200 names and counting.
Definición de networker en:
- el diccionario Inglés de EE.UU.
Obtener más de Oxford Dictionaries
Subscribirse para eliminar anuncios y acceder a los recursos premium


text:
To be incredibly excited, eager, and/or anxious.
Dude, I was so geeked about the MSI concert, I almost creamed all over myself.
by starfuxxer January 07, 2004
the state of being extremely high on cocaine
man, me and Justin got geek'ed off a 8 ball of this shit last night-that why were still awake
by BRiaNFreakin #2 April 11, 2006


text:
Whether you celebrate Hanukkah, Christmas, Kwanzaa or the winter solstice, chances are you've been getting together with friends and family to celebrate. And chances are you'd like to use your camera to capture some moments from the holidays in the coming days.
And maybe, this year, you'd like to go beyond the group photo in front of the tree—especially if it ends up being more tree than group, like mine does—and tell a story with your photos.
Fear not—we've solicited tips on taking holiday pictures from Amy Drucker, a Katonah-based photographer and owner of Amy Drucker Photography, which has a boutique school portrait division called Soulshine Studio. Drucker, 42, specializes in lifestyle photography, which she describes as "going beyond the portrait" and creating a narrative that tells a story.
"The differences between a snapshot and a portrait lie in the details," she said. "There's skill and craft in making the image look the way you want. And to achieve that, you need lighting, composition and a connection to your subject."
While it would be nice to hire a pro like Drucker to hang around the house for a day snapping away, with her tips in mind, the average shutterbug can achieve better results this holiday season.
(Extra memory cards? Check. Charged batteries? Check. Connection to your subject? Check—isn't that what the holidays are all about?)
The Group Shot
While not her favorite, Drucker said people love to take them as a way to commemorate the occasion and all of its participants. Her approach?
Take it at the beginning of the celebration, when guests have all arrived and people are excited and smiling. It's not so much about getting kids before they've become untucked, but more about capturing the anticipation and festive mood.
Don't worry about getting it all in. If you're shooting a group photo in front of a tree, focus on a wide shot that includes everyone's heads, feet and tree, zoom in. Walk closer or zoom in with your telephoto lens. Worry less about getting every detail including the star on top. It's better to get expressions on faces.
Take multiple shots. The bigger the group, the more pictures you need to take. Someone will be blinking, yawning or trying to crawl away, so take at least five versions, or more.
Arrange the group. Ask your family and friends to get closer and touch each other. An arm over a shoulder, a hand on a knee—anything to reduce the space between people. You can also stagger everyoone so they don't appear to be standing in a row, have some sit, some stand, some in laps. You could try for a more triangular shape to the group. Make sure you can see everyone's face. Use a tripod or a timer and get in the photo yourself!
Gift opening
Be ready. While this mantra could apply to your whole holiday celebration, it's especially true when you want to capture your kids opening presents, Drucker said. Have the camera up and ready to shoot when the wrapping paper comes off. "I recommend shooting in burst mode, which on some cameras looks like a little sports icon," she said. "And worry less about getting every detail but fill the frame with your subject. It's not so much about the legos, it's your child's expression when he opens them."
Tell the story of your holidays
Never say "cheese." That's Drucker's motto—if you direct your friends and family to look at the camera every time, you're not capturing real moments. "Take pictures that, on their own might not tell the whole story but in a book would tell a story," she said. These might include the kids coming downstairs in their pajamas, or a closeup of hands—wrapping gifts, setting the table, putting cookies out, hanging an ornament.
And watch for quiet moments. "It's exciting to capture the opening of gifts, but watch for opportunities when it's all over. Kids playing with toys, laying their head down, grandpa watching—these are very sweet moments."
Capturing the lights of the season
Whenever possible, force the flash off. To avoid a washed-out inside look, try taking shots without the flash. To ensure you have enough light for your subject, you may need to turn on more lights in the room or get your subject closer to lights—as Drucker did in the photo posted with this story. You can also play with your camera's settings—increasing the ISO or using shutter priority or sports mode. Lastly, using a tripod to steady the camera in low light helps.
Take outside shots at sunset. In the daylight you won't see holiday light displays, but when it's completely dark you only see the lights and few other details. The trick, said Drucker, is to balance the ambient light with holiday lights—and that's best achieved around 4/4:30 p.m. these days. You can also use night mode or set your camera to tungsten white balance.
For more on Drucker's photography, visit her websites: amydrucker.com and soulshinestudio.com.
This story was originally published in Dec. 2011. -Ed.


text:
There are a lot of factors to consider when calculating the overall cost of a vehicle. The main consideration is Manufacturer's Suggested Retail Price (MSRP). The Porsche 911 will definitely make more of a dent in your wallet than the Chevrolet Corvette, which has a much lower MSRP. Another consideration is the Destination Charge, which is a standard charge for transporting the vehicle to the dealer from where it's built. The Porsche 911 and the Chevrolet Corvette have similar Destination Charges.
Since the Porsche 911 is much slimmer than the Chevrolet Corvette, it'll be much easier to find a wide enough space in a crowded parking lot. When looking at overall length, the Porsche 911 takes up about the same amount of space in your garage as the Chevrolet Corvette.
The Porsche 911 has much less torque than the Chevrolet Corvette, which generally means that it won't feel as fast or powerful.
The Porsche 911 has a smaller turning radius than the Chevrolet Corvette, allowing you to more easily maneuver in and out of tight spots.
In terms of horsepower, it's basically a tie between the Porsche 911 and the Chevrolet Corvette.
The Porsche 911 offers greater seating capacity than the Chevrolet Corvette, making it a better choice for those who find themselves chauffeuring others around. The Porsche 911 has a roomier cargo area for holding your bags or other items than the Chevrolet Corvette.
You'll have greater peace of mind with the more generous basic warranty of the Porsche 911 than that of the Chevrolet Corvette.
Compare the 2015 Porsche 911 and the 2013 Chevrolet Corvette.
2015 Porsche
2013 Chevrolet
|Cash Back Rebate:
|Visit Rebate Center
|Visit Rebate Center
|Low APR Loan:
|As low as 2.49%
|Lease Incentive:
|As low as 3.60%
|City MPG:
|15 - 16
|Highway MPG:
|24 - 26
|Seating Capacity:
|4 - 4
|2 - 2
|Basic Warranty:
|4 years/50,000 miles
|3 years/36,000 miles
|$49,686 - $69,092
Days on Lot measures the average number of days a model sits on a dealer's lot before it's sold. This is one predictor of a dealer's willingness to negotiate.
Monthly Trend for:
2015 Porsche 911
Monthly Trend for:
2013 Chevrolet Corvette
No Data
Use Car Chooser from NewCars.com to narrow your new car search by body type, price, make, fuel economy and much more!
Compare your contenders side by side and review the details of each new car you've filtered down to. See available styles, options, rebates and incentives for the models you're looking at.
There's no other tool quite like it!
*MSRP and Invoice prices displayed do not include applicable gas taxes or destination charges.


text:
Savannah city officials announced three hours of free parking on Thursdays and Fridays to try luring more holiday shoppers downtown.
WTOC-TV reports that 177 people were mistakenly told to pay $5 to park at garages in Savannah's downtown historic district on Thursday.
Brett Bell, a city spokesman, told the television station a parking attendant made an honest mistake, and that refunds will be distributed to anyone who was mistakenly asked to pay.
Officials ask downtown visitors who paid to park Thursday to present their ticket stubs for a cash or check refund.
Copyright 2012 The Associated Press. All rights reserved. This material may not be published, broadcast, rewritten or redistributed.
Firefighters are calling a man a hero after he helped save a family from a burning home in DeKalb County.
WTTG FOX 5 & myfoxdc5151 Wisconsin Ave. NWWashington, DC 20016Main Number: (202) 244-5151Newsroom: (202) firstname.lastname@example.com


text:
Scott Obrien 12:00 AM - 1:00 AM
On Air Now.
On Air Now.
Read More »
Read More »
Check out Duncan Lou Who of Panda Paws Rescue . Video of his first trip to the beach is winning the interwebs: I can't...Read More »
Is old age creeping up on your pet? If they are in pain, they can't tell us the problem. Perhaps it's subtle like licking the sam...Read More »
"Slowly. Sloooooowly. This... Is... Going... To... Be... Legend... Wait... For... It...."Read More »
It's mean...but it's also pretty entertaining. Mean magician Jose Ahonen shows dogs tempting treats, and then uses slight of han...Read More »
Who Knew Dogs Could Fly?Read More »
The Most Incredible Look At A Dog Drinking Water You've Ever Seen - I Had No Idea It Looked Like This! This footage is from a longe...Read More »


text:
Well I've had my Cub for around 10 years now and been putting off rebuilding the engine for the past 3. I'm looking for some reasonable sources for the parts I'll need to do the job. Appreciate hearing from anyone that's had good success with a particular supplier.
Also wondering if anyone besides Woods is producing replacement skids for the CL42 mower deck. The cost is $40.00 each at my local Woods dealer.


text:
The day Phil Jackson to speak out … It is definitely the man of the moment, the most sought after in the NBA and American sports in general. The causes of the breakdown of negotiations with Los Angeles Lakers continue to flow into the U.S. media, but if someone has to explain his not signing with Los Angeles Lakers, this is Phil Jackson. That if you do not want to continue to keep looking like a real tyrant.
First there were reports in ESPN, where the reasons pointed frustrated signing of Phil Jackson by Los Angeles Lakers wielding, among other reasons, that Jackson wanted a high salary and fewer years of the contract he was offered, complete control of the team and availability to choose or not to travel to certain movements. Read more »


text:
- Mobile site
- E-Newsletters
- News feed
- Find us on Twitter
Food & feature writer Katherine MacAlister
Music Editor Tim Hughes
Oxford United from Oxford Mail
Oxford Mail on Twitter
Follow our Features Editor on Twitter
- Find us on Facebook
Oxford Mail
Like and follow us on Facebook
Cutting charity cash will have 'devastating effect' (From Oxford Mail)
Get involved: send your photos, videos, news & views by texting OXFORD NEWS to 80360 or email us
Cutting charity cash will have 'devastating effect'
Updated 12:02pm Saturday 7th December 2013 in News
Buy this photo Parents, children and staff at the Donnington Doorstep Family Centre celebrate the news that children's centres in the county are to be saved. Picture: OX64038 Ric Mellis
CUTS in support for charities, theatres, arts centres and advice services could lead to closures, managers have warned.
As part of the savings outlined by the county council, funding for some organisations will be cut.
Yesterday it was revealed that the council, which this year had a total budget of £586m, would be axing more than £64m over the next four years.
The Rose Hill and Donnington Advice Centre is one of eight advice organisations which will have its county council funding scrapped in 2015.
The £14,000 given to the centre each year by County Hall may not seem that much in the context of a budget of hundreds of millions of pounds, but its removal could have a devastating effect, according to the centre's manager Carol Roberts.
Ms Roberts said: "That funding is worth one and a half members of staff to us, and we only have four in total including me.
"For health and safety reasons we have to have two people working here at all times, so if you factor in holiday and sickness, we could close.We will have to go out and find other sources of funding. The money we get from the county council is small compared to the £64,000 we get from the city council, but it is important to us."
As part of the proposals, Berinsfield Information and Volunteer Centre will lose £4,000 annually, Blackbird Leys Neighbourhood Support Scheme will stop getting £15,000 and the Oxford Citizens' Advice Bureau will have funding of £25,000 withdrawn.
The council will withdraw its annual £50,000 funding for the Oxfordshire Advocacy Development Group, £25,000 from the Oxfordshire Chinese Community and Advice Centre and £117,000 from the Oxfordshire Community Work Agency.
West Oxfordshire Citizens' Advice Bureau will also lose its £25,000 annual funding.
Meanwhile, news that children's centres will be protected from closure has been hailed as a victory for a campaign to save the services.
Almost 16,000 people signed a petition organised by the Save Oxfordshire Children's Centres group, and the county's MPs all called for centres to be protected.
It was feared that up to 37 of the 44 children's centres would shut, but county council leader Ian Hudspeth has said he does not envisage any closures.
However, the council will cut £3m from its budget for children's centres, early intervention hubs and children's social care through more efficient working.
Mum-of-one Sally Bolton, 36, from East Oxford, takes her three-year-old son to the Donnington Doorstep and Florence Park children's centres regularly.
She said: "I am delighted and I think it shows the council has listened to the very strong opinions we have expressed through our very campaign.
"A lot of people have shown they really value the services, and I think this decision is a real victory for us because the council clearly was proposing to close the vast majority of the centres in order to make significant cuts."
Mr Hudspeth said: "The response has been mainly positive so far, and I have had emails from campaigners thanking us for the work we are doing to protect children's centres and early intervention hubs.
"This is a draft budget, and it will be going to scrutiny committee on December 16. In previous years they have said scrutiny has been a silent body, but it will be interested to see what it is like now it is chaired by opposition councillors."
Oxford East MP Andrew Smith said: "These cuts will hit services which many of the most vulnerable members of our community depend on, whether they are people with learning difficulties, the elderly and frail or people who rely on advice from centres like the CAB or Rose Hill and Donnington Advice Centre. It is good news that there is respite for the children's centres, although absorbing a £3m cut isn't going to be easy."
Oxford West and Abingdon MP Nicola Blackwood said: "Like other local authorities and Government departments, the county council has had to make some very tough decisions in this budget and all services need to play their part.
"However, as I have made clear in recent weeks I believe children's centres are hubs offering a host of essential services and that closing them would have been a false economy. So I am very pleased OCC listened to parents and staff and will keep these centres open."
Comments (4)
Please log in to enable comment sorting
9:38am Sat 7 Dec 13
valentim99 says...
12:40pm Sat 7 Dec 13
Man on the Green says...
But the greatest savings have been made by cutting out underperforming staff and layers of bureaucracy.
On all the evidence, the OCC chief exec is quite simply neither up to the job, nor doing enough to justify even a fraction of the excessive sum she is being paid. The same is true of the head of legal (one only has to look at the succession of files on which he has given councillors clearly incompetent advice, such as over the Cogges Link Road).
Both should be given their marching orders, which would generate immediate savings approaching £0.5million (even allowing for over-generous pension payments - better still would be dismissal on the grounds of their very real incompetence, with loss of pension rights). Either way, that money would go a long way to making up for some of these deeply divisive cuts.
2:12pm Sat 7 Dec 13
DoctorBob says...
2:40pm Sat 7 Dec 13
Donnington Doorstep says...
This week we received great news that the threats to Oxfordshire's Children's Centre funding have been reduced. Doorstep staff are so pleased and relieved to know that we will be able to continue to deliver our many services which are so highly valued by local families. The strength of support for Children's Centres across Oxfordshire was highlighted by the amazing parent run campaign which has had such a huge influence on the decision.
However it is difficult to celebrate when we know that other vital services our families rely on - advice centres, services for children with disabilities, early years education support, adult support services - are at risk. Cuts to these services will have a dramatic impact on vulnerable people in our communities and we need to do all we can to work in partnership to protect them.
Anna Thorne - Manager
Comments are closed on this article.


text:
Emergency risk management for health
WHO supports countries in building national capacity in risk reduction and emergency preparedness, and to assist the health sector in Member States in reducing the adverse public health consequences for communities in terms of mortality, morbidity, disability and damage to health care delivery services resulting from emergencies, disasters and other crises.
Priority areas
- Assessing and monitoring baseline information on the status of risk reduction and emergency preparedness in the health sector at regional and country levels.
- Institutionalizing risk reduction and emergency preparedness programmes in ministries of health and establishing an effective all-hazard/whole-health programme for this purpose
- Encouraging and supporting community-based risk reduction and emergency preparedness programmes
- Improving knowledge and skills in risk reduction and emergency preparedness and response in the health sector.
WHO strategy in risk reduction and emergency preparedness is based on an "All-Hazard / Whole-Health" approach.
- Multi-agency: facilitate partnerships among agencies, institutions and individuals which contribute to health risk reduction.
- Multi-sectoral: reflect that health and other sectors work together to manage the health emergency risks caused by the interaction of the vulnerability and resilience of people, hazards or agents, and their social, cultural, natural and built environments.
- Multi-disciplinary: take account of the contributions of many disciplines in health and other fields required to manage the risks to health.
- All-hazard: address risks of emergencies from all sources, including natural, technological, biological and societal hazards.
- Risk management: adopt a risk management approach, with a focus on proactive measure to manage risk, including risk assessment, prevention, and preparedness and associated functions such as policy development, communication, monitoring and evaluation, and capacity development. Risk reduction should also be integrated into disaster response, recovery and rehabilitation by strengthening communities, institutions and systems to reduce future risks.
- Disaster Risk Reduction: The conceptual framework of elements considered with the possibilities to minimize vulnerabilities and disaster risks throughout a society, to avoid (prevention) or to limit (mitigation and preparedness) the adverse impacts of hazards, within the broad context of sustainable development (source ISDR).
- Emergency preparedness: Activities and measures taken in advance to ensure effective response to the impact of hazards, including the issuance of timely and effective early warnings and the temporary evacuation of people and property from threatened locations (source ISDR).


text:
Croatian sport clubs SRK Alba and SD Trickeri organize from 11 to 13 April 2014 the 2nd edition of 100 Miles of Istria, ultra trail race across the Istrian peninsula.
As the director of the event, it is a great pleasure to welcome all who wish to participate in this trail running event. In the previous edition, 237 athletes from 14 different nationalities participated, which made us very happy and proud!
It is for us, without a doubt, a huge honor to organize this event on the Istrian peninsula that, beyond it's recognized touristic attributes, offers excellent conditions for practicing this sport.
Once again we tried to introduce ceratin innovations, so, going against the expectations of many trailers, and instead of the traditional two courses, we offer three (100 miles – 105 kilometers – 65 kilometers).
Due to logistic matters and many requests, we changed the direction of the race, now starting in Labin (100 miles), Lovran (105 kilometers) and Buzet (65 kilometers) and finishing on the western part of the peninsula, in Umag, which is located 30 minutes from the border with Slovenia and has a wide range of hotel accommodation nearby.
The big news has to do precisely with the offer of 100 miles, a race with more distance and elevation than its predecessor. It keeps a large part of the profile of the previous 100 miles, but with a loop around Botonega lake leading through some pretty old towns in central Istria. This race demands good conditioning, only advisable to 'tough squad' athletes with a high endurance capacity.
The 105 kilometers is also a crossing, but with less elevation gain and loss than the 100 miles, and aims to be as straight as possible towards Umag. A race that demands a high level of preparedness, only advisable for athletes with some background experience.
60 kilometers, the shortest race, will start in Buzet and follows the 100 kilometers race route. The athletes require some specific training.
We strongly believe that this event will have all the brilliance expected and be an extra incentive to all who are here to stay a while longer or, perhaps, to return one day.
Welcome to the 2nd edition of 100 Miles od Istria!


text:
Mission Statement: We are an educational family striving to provide a safe and positive learning environment where all students will be well-rounded, life-long learners.
We celebrate the successes of all members of the Wilson community, taking pride in every achievement.
P - Positive - I have a positive attitude!
R - Respect - I respect myself and others!
I - Integrity - I stand up for what is right!
D - Dependable - I am dependable and ready to learn!
E - Excellence - I always do my best!
Wilson Elementary School is honored to be designated a 4-Star School by the Idaho State Department of Education!
Click here for our school report card.
400 E Linden St.
Caldwell, ID 83605
Phone: 208-455-3313
Fax: 208-454-0050
Principal: Tabitha Bruegeman
Secretary: Janine Blank
Office Hours: 8:00am - 4:00pm
School Day: 9:00am - 3:30pm
AM Kindergarten: 9:00am - 11:50pm
PM Kindergarten: 12:40pm - 3:30pm


text:
News about Odors, including commentary and archival articles published in The New York Times.
City Smells Confound Flower-Seeking Moths
A study found that car exhaust and other urban fumes can hurt moths' ability to find flowers.
July 1, 2014, Tuesday
MORE ON ODORS AND: Science (Journal) , Smells and Odors , Butterflies and Moths , Air Pollution
Don't Turn Up Your Nose at the City in Summer
Sure, New York reeks in the heat. But it's all useful data — so breathe.
June 24, 2014, Tuesday
MORE ON ODORS AND: New York City , Smells and Odors
What Good Taste Smells Like
It's no longer enough to look nice. A well-designed interior now needs an interesting scent built into it.
June 19, 2014, Thursday
MORE ON ODORS AND: Smells and Odors , Perfumes and Fragrances , Interior Design and Furnishings
Asparagus, Revisited
Why does eating asparagus make one's urine smell funny?
June 17, 2014, Tuesday
MORE ON ODORS AND: Asparagus , Smells and Odors
Regulator Wants to Know How Con Ed Is Handling an Increase in Reports of Gas Leaks
The complaints have risen since a deadly explosion in Harlem, and officials are asking what expenses the company is cutting to compensate.
May 21, 2014, Wednesday
Reports of Gas Odors Surge After East Harlem Blast
The number of calls to Consolidated Edison has led to a backlog of pipe repairs nearly twice as big as state regulators consider acceptable.
May 16, 2014, Friday
MORE ON ODORS AND: New York City , East Harlem Explosion (March 2014) , Smells and Odors , Consolidated Edison Inc , Explosions (Accidental) , Natural Gas , East Harlem (Manhattan, NY)
Sriracha Factory Irritates Some California Noses, but Entices Politicians
The pungent aroma of chiles has set off a dispute in Irwindale, Calif., where officials are considering whether to declare the hot sauce plant a public nuisance.
May 14, 2014, Wednesday
MORE ON ODORS AND: Relocation of Business , Irwindale (Calif) , Sauces , Tran, David , Suits and Litigation (Civil) , Smells and Odors , Factories and Manufacturing , Huy Fong Foods Inc , Chili Peppers
Scent Messaging Wafts In
Users of oNotes will be able to deliver olfactory delights to be produced by a device, the oPhone, via text, tweet or email.
May 6, 2014, Tuesday
MORE ON ODORS AND: Edwards, David , Smells and Odors , Mobile Applications
Who Made That Antiperspirant?
Odo-ro-no and other early solutions to the perspiration problem.
March 2, 2014, Sunday
MORE ON ODORS AND: Inventions and Patents , Sweating , Deodorants , Smells and Odors
Earwax's Smell Influenced by Ethnicity
The earwax of Caucasian men contains more volatile organic compounds than that of East Asian men, researchers at the Monell Chemical Senses Center in Philadelphia found.
February 18, 2014, Tuesday
MORE ON ODORS AND: Medicine and Health , Ears and Hearing , Smells and Odors
Rss Feeds On Odors
Subscribe to an RSS feed on this topic. What is RSS?
Get Alerts On Odors
Receive My Alerts e-mails on topics covered on this page.More Alerts >>


text:
These perfect warm weather sandals are glam enough to wear to dinner but won't look out of place for a light lunch pool side. Delicate straps of suede and patent are adorned with chunky gold nuggets.
US Standard FREE
(2-8 working days, NY 2-3)
US Express $20 (1-3 working days, NY 1-2)
New York same day $25
(order by 2pm EST)
Canada $20 (1-3 working days)
Americas $30 (2-7 working days)
Shop with confidence with free returns.
See full delivery and returns information.
Email Customer Care
or call us on (toll free):+1 877 955 2466
Italian sizing. Fits true to size. View Size Guide
Jimmy Choo shoes are in Italian sizing