This section explains the preloaders that are used for JavaFX applications, and describes how to implement a custom preloader. Custom preloaders are not available for Java applications, however, the default preloader can be customized.
During the second phase of startup, a preloader application runs, either the default application in the JavaFX Runtime or a custom application that you supply. See Section 4.2, "Application Startup Process, Experience, and Customization" for information about how a preloader fits into the startup flow.
A custom preloader application is optional and can be used to tune the application loading and startup experience. For example, use of a preloader can help to reduce perceived application startup time by showing some content to the user earlier, such as a progress indicator or login prompt.
A preloader application can also be used to present custom messaging to the user. For example, you can explain what is currently happening and what the user will be asked to do next, such as grant permissions to the application, or you could create a preloader to present custom error messages.
Not every application needs a custom preloader. For example, if your application is small and does not have special requirements such as permissions, then it probably starts quickly and the default preloader is sufficient. Even for larger applications, the default preloader included with the JavaFX Runtime can be a good choice, because it is loaded from the client machine rather than the network.
This section contains the following topics:
See Section 4.2, "Application Startup Process, Experience, and Customization" for information about how to customize the default preloader.
For information on customizing the preloader for Java applications, see Chapter 14, "Customizing the Loading Experience."
A custom preloader is a specialized JavaFX application that extends the javafx.application.Preloader
class. Because the Preloader
class is an extension of javafx.application.Application
, a custom preloader has the same life cycle and can use all of the features of the JavaFX Runtime.
The preloader startup sequence is shown in relation to the application startup in Figure 13-1. The preloader application is started before the main application and gets notification of the progress of the loading application resources, application initialization, and startup, as well as of errors.
Figure 13-1 Preloader Startup Related to Application Startup
Example 13-1 shows a simple preloader that uses the ProgressBar
control to show the loading progress.
Example 13-1 Simple Preloader Using the ProgressBar Control
public class FirstPreloader extends Preloader { ProgressBar bar; Stage stage; private Scene createPreloaderScene() { bar = new ProgressBar(); BorderPane p = new BorderPane(); p.setCenter(bar); return new Scene(p, 300, 150); } public void start(Stage stage) throws Exception { this.stage = stage; stage.setScene(createPreloaderScene()); stage.show(); } @Override public void handleProgressNotification(ProgressNotification pn) { bar.setProgress(pn.getProgress()); } @Override public void handleStateChangeNotification(StateChangeNotification evt) { if (evt.getType() == StateChangeNotification.Type.BEFORE_START) { stage.hide(); } } }
As a regular JavaFX application, the FirstPreloader
class uses the start()
method to create a scene to display the loading progress. Updates on progress are delivered to the preloader using the handleProgressNotification()
method, and the FirstPreloader
implementation uses them to update the UI.
The preloader and main application have different Stage
objects, and the preloader must take care of showing and hiding its own stage when needed. In Example 13-1, the preloader stage is hidden after notification is received that the start()
method of the main application is about to be called.
The implementation of the FirstPreloader
class illustrates the main concept and works in many scenarios, but it does not provide the best user experience for all use cases. See Section 13.3, "Preloader Code Examples" for examples of how to improve the FirstPreloader
class.
Packaging applications with preloaders has some special requirements.
First, in most cases, the code for the preloader must be packaged into one or more JAR files that are separate from the rest of application. This enables faster loading when the application is deployed on the web. Using a single JAR file for both application and preloader code can be a good choice for some specialized cases, for example if the application is run in standalone mode only. In NetBeans IDE, the JAR files are packaged separately by creating two projects: one for the main application and a special JavaFX preloader project for the preloader. See Section 13.2.1, "Packaging a Preloader Application in NetBeans IDE."
Second, application deployment descriptors must include information about which class belongs to the preloader and where the preloader code is. The way to specify it depends on what tools you use for packaging. For more information about tools, see Section 5.3.1, "Java Packaging Tools."
All of the packaging tools produce a deployment descriptor that includes the preloader, as in Example 13-2. In this example, the main application is called AnimatedCircles
and the preloader application is called FirstPreloader
.
Example 13-2 Sample Deployment Descriptor for an Application with a Preloader
<?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="AnimatedCircles.jnlp"> <information> <title>AnimatedCircles</title> <vendor>Oracle</vendor> <description>Animated Circles</description> <offline-allowed/> </information> <resources> <j2se version="1.7_06+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="lib/FirstPreloader.jar" size="2801" download="progress" /> <jar href="AnimatedCircles.jar" size="13729" download="always" /> </resources> <applet-desc width="800" height="600" main-class="com.javafx.main.NoJavaFXFallback" name="AnimatedCircles" /> <jfx:javafx-desc width="800" height="600" main-class="animatedcircles.AnimatedCircles" name="AnimatedCircles" preloader-class="firstpreloader.FirstPreloader"/> <update check="background"/> </jnlp>
The manifest must also contain the class path to the preloader, shown in Example 13-3.
Example 13-3 Sample Manifest for an Application with a Preloader
Manifest-Version: 1.0 JavaFX-Version: 2.2 implementation-vendor: nhildebr implementation-title: AnimatedCircles implementation-version: 1.0 JavaFX-Preloader-Class: firstpreloader.FirstPreloader JavaFX-Application-Class: animatedcircles.AnimatedCircles JavaFX-Class-Path: lib/FirstPreloader.jar Created-By: JavaFX Packager Main-Class: com/javafx/main/Main Permissions: sandbox
If you are using NetBeans IDE, in the main application you can specify either another NetBeans project that contains the main preloader class, or a JAR file in which the preloader is packaged.
The following procedures show two ways to package a preloader in NetBeans IDE, depending on your project configuration. You can either create a new NetBeans project and choose a preloader option, or you can add a preloader to an existing NetBeans project. Both procedures use the preloader class from Example 13-1.
To create a new application with a preloader in NetBeans IDE:
On the File menu, choose New Project.
Select the JavaFX category and JavaFX Application as the project type. Click Next.
Enter FirstApp
as a project name and choose Create Custom Preloader. Click Finish.
Netbeans IDE creates two new projects for you: a FirstApp-Preloader project with basic implementation of a custom preloader, and FirstApp project with a sample JavaFX Application using your custom preloader.
Open the SimplePreloader
class in Source Packages in the FirstApp-Preloader project.
Replace the implementation of the SimplePreloader
class with the implementation of the FirstPreloader class, or any other sample from this page.
Be sure to fix imports if needed by going to the Source menu and choosing Fix Imports.
Select the FirstApp project and run Clean and Build to build both the sample application and the preloader.
The artifacts are placed in the dist
folder in the FirstApp project.
Test the artifacts by running them in Netbeans.
|
Tip: You can launch your application as standalone or in a browser by choosing a Run category in Project Properties, or you can directly open the build artifacts. |
Note that for standalone launch, the preloader might be not visible if it displays loading progress only, because there is nothing to load. Even when testing web launch from a local hard drive, the preloader might show up for only a very short time.
To add a preloader to an existing NetBeans project:
Create a separate NetBeans project of type JavaFX Preloader for the preloader class. In the example, the project name is FirstPreloader, which contains the firstpreloader package and the code for the FirstPreloader class.
In the Project Properties for the main application, click the Run category.
Select the check box Use Preloader, Click Browse, then choose the NetBeans project for the preloader. The Preloader Class field is populated by default, as shown in Figure 13-2.
|
Note: As an alternative to selecting a NetBeans project for the preloader, when you click Browse you have the option of selecting a preloader JAR file. |
Click OK to close the Project Properties dialog box.
Right-click the main application, and choose Clean and Build.
The main application files are created for deployment in the dist
directory, and the preloader JAR file is placed in a lib
subdirectory. All of the necessary JNLP and manifest entries are handled by the IDE.
Ant users must specify information about the preloader class and JAR files in both the <fx:jar> and <fx:deploy> tasks. Setting the proper parameters in the <fx:jar>
task ensures that the preloader is registered for standalone applications. Setting the proper parameters in the <fx:deploy>
task creates the configuration for web deployment.
Some settings are required in other parts of the Ant script. The preloader main class is specified as part of the <fx:deploy> element, as shown in Example 13-4.
Example 13-4 Specify the Preloader Class in <fx:application>
<fx:application id="app-desc" mainClass="sample.AppSample" preloaderClass="preloaders.SamplePreloader"/>
Preloader resources are marked with the requiredFor="preloader"
attribute in the description of application resources, nested under <fx:application>
, as shown in Example 13-5.
Example 13-5 Use the requiredFor Attribute of <fx:fileset>
<fx:application ... > <fx:resources> <fx:fileset id="preloader-files" requiredFor="preloader" dir="dist" includes="preloader.jar"/> <fx:fileset dir="dist" includes="myapp.jar"/> </fx:resources> </fx:application>
With the help of the refid
attribute creating a reference to an id
attribute, elements can be reused to reduce code duplication. The preloader settings for the <fx:jar>
and <fx:deploy>
tasks are shown in Example 13-6.
Example 13-6 Preloader Settings in <fx:jar> and <fx:deploy> Tasks
<fx:jar destfile="dist/application.jar"> <fx:application refid="app-desc"/> <fx:resources> <fx:fileset refid="preloader-files"/> </fx:resources> <fileset dir="build/classes/" include="**"/> </fx:jar> <fx:deploy width="600" height="400" outdir="app-dist" outfile="SampleApp"> <fx:info title="Sample application"/> <fx:application refid="app-desc"/> <fx:resources> <fx:fileset requiredFor="startup" dir="dist" include="application.jar"/> <fx:fileset refid="preloader-files"/> </fx:resources> </fx:deploy>
See Example 10-3 for another preloader configuration in a full Ant task. In that example, both the preloader and the main application JAR files are signed in the <fx:signjar> task. If the preloader JAR file is unsigned and the main application JAR file is signed, then a multipart deployment descriptor is needed. Packaging is similar to any other JavaFX application using a mix of signed and unsigned code. For more information, see Section 5.7.2, "Application Resources."
Note the following preloader-specific details:
The name of the preloader class is always specified in the main application descriptor, as in Example 13-4.
In most cases, it is a good idea to keep the preloader JAR files in the main application descriptor so they start loading sooner.
The reasoning for the last point is as follows. There are two <fx:deploy>
tasks to package this application, which generate two different JNLP files: one for the main application and another extension. The application starts from the link to the main JNLP, so whatever is referenced from the main JNLP file can start loading sooner, and is ready faster.
The following code examples demonstrate various uses of preloaders:
Section 13.3.4, "Using a Preloader to Display the Application Initialization Progress"
Section 13.3.5, "Cooperation of Preloader and Application: A Login Preloader"
Section 13.3.6, "Cooperation of Preloader and Application: Sharing the Stage"
If the application runs standalone or is loaded from the web cache, then the preloader does not get any progress notifications because there is nothing to load, and the application will likely start quickly.
Using the FirstPreloader
example as implemented in Example 13-1, users see only the preloader stage briefly with 0 percent progress. Unless the application is embedded in a browser, a window also pops up that is briefly visible. In this case, a better user experience is to show nothing until the first progress notification.
When the application is embedded in a web page, something needs to be shown to avoid having a gray box where the application will appear. One possible approach is to display the HTML splash screen until the preloader has something to display or, if the preloader does not get any events, until the application is ready. Another option is to show a simplified version of the preloader, and add a progress indicator after the first progress notification is received.
Example 13-7 shows how to improve the relevant parts of the FirstPreloader
implementation:
Do not show the progress indicator until the first progress notification.
If the preloader stage is not embedded, do not show the progress bar until the first progress notification.
Example 13-7 Example of Tweaking When the Preloader Appears
boolean isEmbedded = false; public void start(Stage stage) throws Exception { //embedded stage has preset size isEmbedded = (stage.getWidth() > 0); this.stage = stage; stage.setScene(createPreloaderScene()); } @Override public void handleProgressNotification(ProgressNotification pn) { if (pn.getProgress() != 1 && !stage.isShowing()) { stage.show(); } bar.setProgress(pn.getProgress()); }
See Section 13.3.3, "Using JavaScript with a Preloader" for an example of how to postpone hiding the splash screen.
The last state change notification received by the preloader before the application starts is StateChangeNotification.Type.BEFORE_START
. After the notification is processed, the application's start()
method is called. However, it can take time before the application is ready to display its stage after the start()
method is called. If the preloader stage is already hidden, then there could be a period of time when the application shows nothing on the screen. When the application is embedded in a web page, this can result in a hole in the web page effect.
For this and other reasons, hiding the preloader instantly might not be the best visual transition from preloader to application. One approach to improve the visual transition between preloader and application is shown in Example 13-8. If this FirstPreloader
example is used for an application embedded in a web page, it will fade out over a period of 1 second instead of hiding instantly.
Example 13-8 Make the Preloader Fade Out
@Override public void handleStateChangeNotification(StateChangeNotification evt) { if (evt.getType() == StateChangeNotification.Type.BEFORE_START) { if (isEmbedded && stage.isShowing()) { //fade out, hide stage at the end of animation FadeTransition ft = new FadeTransition( Duration.millis(1000), stage.getScene().getRoot()); ft.setFromValue(1.0); ft.setToValue(0.0); final Stage s = stage; EventHandler<ActionEvent> eh = new EventHandler<ActionEvent>() { public void handle(ActionEvent t) { s.hide(); } }; ft.setOnFinished(eh); ft.play(); } else { stage.hide(); } } }
If the preloader and application cooperate, then the transition is even smoother. See Section 13.3.6, "Cooperation of Preloader and Application: Sharing the Stage" for an example of a preloader that fades into the application.
If the application takes time to initialize, then it can be helpful to use a custom notification to initiate the transition from preloader to application when the application is ready. See Section 13.3.4, "Using a Preloader to Display the Application Initialization Progress" for further information.
Because a JavaFX application preloader has access to application features such as parameters and host services, the preloader can use JavaScript to communicate to the web page in which an application is embedded.
In Example 13-9, JavaScript access is used to create a preloader that displays the loading progress in the HTML splash screen and hides the splash screen only when the application is ready. The code uses the following two JavaScript methods, which must be provided by the web page:
hide()
to hide the HTML splash screen
progress(p)
to update the progress
It is assumed that there is a custom HTML splash screen that is not hidden by default.
Example 13-9 Use JavaScript from the Preloader
import javafx.application.Preloader; import javafx.stage.Stage; import netscape.javascript.JSObject; public class JSPreloader extends Preloader { public void start(Stage stage) throws Exception {} public void handleStateChangeNotification(StateChangeNotification evt) { if (evt.getType() == StateChangeNotification.Type.BEFORE_START) { JSObject js = getHostServices().getWebContext(); if (js != null) { try { js.eval("hide();"); } catch (Throwable e) { System.err.println("Ouch "+e); e.printStackTrace(); } } } } public void handleProgressNotification(ProgressNotification pn) { JSObject js = getHostServices().getWebContext(); if (js != null) { try { js.eval("progress("+ ((int) (100*pn.getProgress()))+");"); } catch (Throwable e) { e.printStackTrace(); } } } }
Example 13-10 shows a sample web page template that uses the preloader in Example 13-9. When this template page is processed during packaging, #DT.SCRIPT.URL#
and #DT.EMBED.CODE.ONLOAD#
will be replaced with code to embed the JavaFX application into the web page. For more information about templates, see <fx:template> in the JavaFX Ant reference.
Example 13-10 Web Page Template Containing JavaScript for Preloader

Test page for JS preloader sample

A JavaFX application can pass information about events to a preloader by using custom notifications. For example, the preloader can be used to display the application initialization progress.
Technically, any class implementing the Preloader.PreloaderNotification
interface can serve as a custom notification, and the application can send it to the preloader by using the Application.notifyPreloader()
method. On the preloader side, the application notification is delivered to the handleApplicationNotification()
method.
Example 13-11 is a variation of the FirstPreloader
example. It does not hide the preloader after notification of application startup is received. It waits for application-specific notifications, displays the progress notifications, and hides the splash screen after the application sends a state change notification.
Example 13-11 Preloader to Display Progress of Application Initialization and Loading
public class LongAppInitPreloader extends Preloader { ProgressBar bar; Stage stage; boolean noLoadingProgress = true; private Scene createPreloaderScene() { bar = new ProgressBar(0); BorderPane p = new BorderPane(); p.setCenter(bar); return new Scene(p, 300, 150); } public void start(Stage stage) throws Exception { this.stage = stage; stage.setScene(createPreloaderScene()); stage.show(); } @Override public void handleProgressNotification(ProgressNotification pn) { //application loading progress is rescaled to be first 50% //Even if there is nothing to load 0% and 100% events can be // delivered if (pn.getProgress() != 1.0 || !noLoadingProgress) { bar.setProgress(pn.getProgress()/2); if (pn.getProgress() > 0) { noLoadingProgress = false; } } } @Override public void handleStateChangeNotification(StateChangeNotification evt) { //ignore, hide after application signals it is ready } @Override public void handleApplicationNotification(PreloaderNotification pn) { if (pn instanceof ProgressNotification) { //expect application to send us progress notifications //with progress ranging from 0 to 1.0 double v = ((ProgressNotification) pn).getProgress(); if (!noLoadingProgress) { //if we were receiving loading progress notifications //then progress is already at 50%. //Rescale application progress to start from 50% v = 0.5 + v/2; } bar.setProgress(v); } else if (pn instanceof StateChangeNotification) { //hide after get any state update from application stage.hide(); } } }
In Example 13-11, note that the same progress bar is used to display the progress of both the application initialization and loading. For simplicity, 50 percent is reserved for each phase. However, if the loading phase is skipped, for example when the application is launched as standalone, then the entire progress bar is devoted to displaying the progress of the application initialization.
Example 13-12 shows the code on the application side. The longStart()
method is used to simulate a lengthy initialization process that happens on a background thread. After initialization is completed, the ready
property is updated, which makes the application stage visible. During initialization, intermediate progress notifications are generated. At the end of initialization, the StateChangeNotification
is sent, which causes the preloader to hide itself.
Example 13-12 Application Code to Enable the Progress Display
public class LongInitApp extends Application { Stage stage; BooleanProperty ready = new SimpleBooleanProperty(false); private void longStart() { //simulate long init in background Task task = new Task<Void>() { @Override protected Void call() throws Exception { int max = 10; for (int i = 1; i <= max; i++) { Thread.sleep(200); // Send progress to preloader notifyPreloader(new ProgressNotification(((double) i)/max)); } // After init is ready, the app is ready to be shown // Do this before hiding the preloader stage to prevent the // app from exiting prematurely ready.setValue(Boolean.TRUE); notifyPreloader(new StateChangeNotification( StateChangeNotification.Type.BEFORE_START)); return null; } }; new Thread(task).start(); } @Override public void start(final Stage stage) throws Exception { // Initiate simulated long startup sequence longStart(); stage.setScene(new Scene(new Label("Application started"), 400, 400)); // After the app is ready, show the stage ready.addListener(new ChangeListener<Boolean>(){ public void changed( ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { if (Boolean.TRUE.equals(t1)) { Platform.runLater(new Runnable() { public void run() { stage.show(); } }); } } });; } }
In this example, standard events are reused, but in general the application can send arbitrary data to the preloader. For example, for application loading, image collection notifications can include sample preview images and so on.
As part of StateChangeNotification
, the preloader receives a reference to the application, which enables the preloader to cooperate closely with the application.
The example in this section shows how to use this cooperation in a login preloader, which requests user credentials while the application is loading, then passes them to the application.
To cooperate, this preloader and application share the CredentialsConsumer
interface, which the preloader uses to pass credentials to the application. In addition to implementing a shared interface, the only other special thing in this sample is that the application does not show itself until it has both user credentials and a reference to a Stage
object.
Example 13-13 shows the application code for the login preloader.
Example 13-13 Enable the Login Preloader
public class AppToLogInto extends Application implements CredentialsConsumer { String user = null; Label l = new Label(""); Stage stage = null; private void mayBeShow() { // Show the application if it has credentials and // the application stage is ready if (user != null && stage != null) { Platform.runLater(new Runnable() { public void run() { stage.show(); } }); } } @Override public void start(Stage stage) throws Exception { this.stage = stage; stage.setScene(new Scene(l, 400, 400)); mayBeShow(); } public void setCredential(String user, String password) { this.user = user; l.setText("Hello "+user+"!"); mayBeShow(); } }
The preloader stage is displayed unconditionally, because the user must provide credentials. However, the preloader is not hidden when the application is ready to start unless there are credentials to pass to the application.
To pass credentials, you can cast a reference to the application from StateChangeNotification
to CredentialsConsumer
, assuming the application implements it.
In Example 13-14, the login pane UI from the previous example is simplistic, but it shows how to adapt it to execution mode. If there is no progress to display, then there is no point to adding a progress bar to the UI. Also, if the application has finished loading but is still waiting for user input, then the UI can be simplified by hiding unneeded progress.
Example 13-14 Login Preloader Code
public class LoginPreloader extends Preloader { public static interface CredentialsConsumer { public void setCredential(String user, String password); } Stage stage = null; ProgressBar bar = null; CredentialsConsumer consumer = null; String username = null; String password = null; private Scene createLoginScene() { VBox vbox = new VBox(); final TextField userNameBox = new TextField(); userNameBox.setPromptText("name"); vbox.getChildren().add(userNameBox); final PasswordField passwordBox = new PasswordField(); passwordBox.setPromptText("password"); vbox.getChildren().add(passwordBox); final Button button = new Button("Log in"); button.setOnAction(new EventHandler<ActionEvent>(){ public void handle(ActionEvent t) { // Save credentials username = userNameBox.getText(); password = passwordBox.getText(); // Do not allow any further edits userNameBox.setEditable(false); passwordBox.setEditable(false); button.setDisable(true); // Hide if app is ready mayBeHide(); } }); vbox.getChildren().add(button); bar = new ProgressBar(0); vbox.getChildren().add(bar); bar.setVisible(false); Scene sc = new Scene(vbox, 200, 200); return sc; } @Override public void start(Stage stage) throws Exception { this.stage = stage; stage.setScene(createLoginScene()); stage.show(); } @Override public void handleProgressNotification(ProgressNotification pn) { bar.setProgress(pn.getProgress()); if (pn.getProgress() > 0 && pn.getProgress() < 1.0) { bar.setVisible(true); } } private void mayBeHide() { if (stage.isShowing() && username != null && consumer != null) { consumer.setCredential(username, password); Platform.runLater(new Runnable() { public void run() { stage.hide(); } }); } } @Override public void handleStateChangeNotification(StateChangeNotification evt) { if (evt.getType() == StateChangeNotification.Type.BEFORE_START) { //application is loaded => hide progress bar bar.setVisible(false); consumer = (CredentialsConsumer) evt.getApplication(); //hide preloader if credentials are entered mayBeHide(); } } }
Note that close cooperation between the preloader and application is subject to mixed code restrictions unless both the preloader and application are in the same trust domain, in other words both are privileged or both are sandbox. See Chapter 27, "Mixing Privileged Code and Sandbox Code" for information.
This section demonstrates how to use cooperation between the preloader and the application to improve the transition from preloader to application.
Example 13-15 shows how the preloader and application share the same stage, and the preloader fades into the application when the application is ready. As in Example 13-14, the preloader and application need to share the SharedScene
interface.
Example 13-15 SharedScene Interface
/* Contact interface between application and preloader */ public interface SharedScene { /* Parent node of the application */ Parent getParentNode(); }
The Application
class implements it to provide the preloader with access to the application scene. The preloader later uses it for setup transition.
Now, the interface must be implemented. The code in Example 13-16 shows that the application is active during the transition.
Example 13-16 Implement the SharedScene Interface
public class SharedStageApp extends Application implements FadeInPreloader.SharedScene { private Parent parentNode; private Rectangle rect; public Parent getParentNode() { return parentNode; } public void init() { //prepare application scene rect = new Rectangle(0, 0, 40, 40); rect.setArcHeight(10); rect.setArcWidth(10); rect.setFill(Color.ORANGE); parentNode = new Group(rect); } public void start(Stage primaryStage) { //setup some simple animation to // show that application is live when preloader is fading out Path path = new Path(); path.getElements().add(new MoveTo(20, 20)); path.getElements().add(new CubicCurveTo(380, 0, 380, 120, 200, 120)); PathTransition pathTransition = new PathTransition(); pathTransition.setDuration(Duration.millis(4000)); pathTransition.setPath(path); pathTransition.setNode(rect); pathTransition.setCycleCount(Timeline.INDEFINITE); pathTransition.setAutoReverse(true); pathTransition.play(); } }
On the preloader side, instead of hiding the preloader stage, the code initiates a fade-in transition by inserting the application scene behind the preloader scene and fading out the preloader scene over time. After the fade-out is finished, the preloader is removed from the scene so the application can own the stage and scene.
Example 13-17 Preloader Use of Fade-Out for a Smooth Transition
public class FadeInPreloader extends Preloader{ Group topGroup; Parent preloaderParent; private Scene createPreloaderScene() { //our preloader is simple static green rectangle Rectangle r = new Rectangle(300, 150); r.setFill(Color.GREEN); preloaderParent = new Group(r); topGroup = new Group(preloaderParent); return new Scene(topGroup, 300, 150); } public void start(Stage stage) throws Exception { stage.setScene(createPreloaderScene()); stage.show(); } @Override public void handleStateChangeNotification(StateChangeNotification evt) { if (evt.getType() == StateChangeNotification.Type.BEFORE_START) { //its time to start fading into application ... SharedScene appScene = (SharedScene) evt.getApplication(); fadeInTo(appScene.getParentNode()); } } private void fadeInTo(Parent p) { //add application scene to the preloader group // (visualized "behind" preloader at this point) //Note: list is back to front topGroup.getChildren().add(0, p); //setup fade transition for preloader part of scene // fade out over 5s FadeTransition ft = new FadeTransition( Duration.millis(5000), preloaderParent); ft.setFromValue(1.0); ft.setToValue(0.5); ft.setOnFinished(new EventHandler<ActionEvent>() { public void handle(ActionEvent t) { //After fade is done, remove preloader content topGroup.getChildren().remove(preloaderParent); } }); ft.play(); } }
A preloader can also be used to customize messaging to the end user. For example, if the application cannot be started because the user declines to grant permissions, then a preloader can be used to provide better feedback, as shown in Example 13-18.
Example 13-18 Preloader with Error Messaging
@Override public boolean handleErrorNotification(ErrorNotification en) { // Display error Label l = new Label( "This application needs elevated permissions to launch. " + "Please reload the page and accept the security dialog."); stage.getScene().setRoot(l); // Return true to prevent default error handler to take care of this error return true; }
Note that the preloader cannot provide error messaging when the error affects the preloader itself. For example, if a user cannot run an application embedded in a web page because the Java proxy settings are incorrect, then the preloader code cannot be loaded and therefore cannot display an error message.
Because preloaders are displayed while the main application is loading, it is critical that they load quickly and run smoothly.
Use the following guidelines to ensure your preloaders perform well:
Put the preloader classes and resources in a separate JAR file from the main application and follow packaging instructions. See Section 13.2, "Packaging an Application with a Preloader."
Keep the preloader small.
Optimize visual assets for size to significantly reduce the size of JAR files.
Plan for achieving smooth transitions.
Take care of the transition both from the splash screen to the preloader and from the preloader to the application. Consider reducing the number of transitions, for example, by doing the following:
Show the preloader in HTML. See Section 13.3.3, "Using JavaScript with a Preloader."
Share the stage between the preloader and application. For an example, see Section 13.3.6, "Cooperation of Preloader and Application: Sharing the Stage."
Do not display a preloader. See Section 13.3.1, "Show the Preloader Only if Needed."
Ensure there is something to display before initiating a transition.
Both the application and the preloader itself may need some initialization time before they can display something on the screen. If this is the case, consider explicitly hiding the splash screen when the preloader is ready (see Section 13.3.3, "Using JavaScript with a Preloader") and hiding the preloader on custom notification from the application (see Section 13.3.4, "Using a Preloader to Display the Application Initialization Progress").
If application initialization takes time, use custom events to update the preloader on initialization progress. For example, see Section 13.3.4, "Using a Preloader to Display the Application Initialization Progress."
The following guidelines are applicable to both the main application and the preloader. See also Chapter 18, "Coding Tips" for general tips.
Avoid lengthy operations on the JavaFX application thread.
Avoid blocking the JavaFX thread, which pauses any UI updates and event processing. To avoid freezing the application UI, use the JavaFX Worker API and offload lengthy operations to other threads.
Keep the start()
method implementation lightweight.
Do more work in the init()
method to unclog the JavaFX application thread.
Enable embedding when packaging your application for web deployment.
Embedding a deployment descriptor (JNLP) and security certificates (if needed) reduces the time needed to collect all the information about the application and helps to start the preloader and application faster.


--- layout: post permalink: aletterfromsanta.html Tags: Array NameOfCoupon: A Letter From Santa Cash Back Summary: See our A Letter From Santa Coupon Code, A Letter From Santa Rebate, A Letter From Santa Promo Code, A Letter From Santa Discount, A Letter From Santa Coupon Cash Back Rebate here. MetaKeywords: A Letter From Santa Coupon Code, A Letter From Santa Rebate, A Letter From Santa Promo Code, A Letter From Santa Cash Back Rebate, A Letter From Santa Discount, A Letter From Santa Coupon Image: LinkURL: http://www.tkqlhce.com/click-4092138-10446083 affiliate_url_link: http://www.icouponblog.com/jane.php?id=4591 thesis_readmore: See the A Letter From Santa Coupon thesis_thumb: http://www.icouponblog.com/tn.php?merchantURL=santa-claus.com Title: Save 7.5% - A Letter From Santa Coupon Code for santa-claus.com. A Letter From Santa Rebate & Discount thesis_description: Our A Letter From Santa Discount Coupon Code for santa-claus.com. We have the best A Letter From Santa Rebate anywhere. thesis_keywords: A Letter From Santa, A Letter From Santa Coupon Code, A Letter From Santa Discount, A Letter From Santa Rebate product_name: A Letter From Santa hop_url: http://www.icouponblog.com/hop.php?id=4591 ---
This Christmas, give your children an exciting gift….a phone call from Santa Claus! Make your child’s Christmas especial…It will be a personal and a magical phone call from Santa Claus all the way from the North Pole. Watch the joy and excitement on your child’s face when he/she gets a personal telephone call from Noel himself! Only four hour notice is required. You can get Santa to call anywhere from Dec 14th onwards. (It is subject to availability) The conversation will be personalized based upon information provided by you. Santa Claus will be able to talk to and get a conversation going even with the shyest of kids. You can also choose to get a pre-recorded message or a personalized letter sent from Santa Claus. Visit www.santa-claus.com and see for yourself.
www.santa-claus.com is a great place to visit if you want to send your child a personalized letter or phone call from Santa Claus himself. Bring your children the amazing gift of happiness, excitement, exhilaration and delight. It is all very affordable and easy to order. Use our discount coupons to get a great deal. If you live in the U.S, U.K or Canada, you can send a personalized letter or phone call from Santa Claus to your children, grand children, nieces and nephews etc. Check it out online at www.santa-claus.com. It is a great, exciting service, available at an unbelievable price. Our discount coupons will make the deal, even more affordable.
A Letter From Santa will be a great present to give to a child. You can have the letter personalized. There will be many personal references and will have a stamp from the North Pole on the envelope. Whether you choose to have a personalized, letter, a personalized live or recorded phone call, your child will love it. They will also get a certificate from Santa Claus. Check it out.


Merhaba, ben İrem.İsmek sayesinde Patika ve Kodluyoruz ile tanıştım. Şuanda Front End öğreniyorum.
Guardian: The Lonely and Great God (Korean: 쓸쓸하고 찬란하神 – 도깨비; RR: Sseulsseulhago Challanhasin – Dokkaebi; lit. The Lonely Shining God – Goblin) is a South Korean television series starring Gong Yoo in the title role with Kim Go-eun, Lee Dong-wook, Yoo In-na, and Yook Sung-jae.
It was shown on the cable network tvN from December 2, 2016, to January 21, 2017. It was written by popular drama writer Kim Eun-sook.


Gecode::Int::Sorted::OfflineMinItem Class Reference
Detailed Description
Item used to construct the OfflineMin sequence.Definition at line 121 of file sortsup.icc.
Public Attributes | |
| int | root |
| Root node representing the set the vertex belongs to. | |
| int | parent |
| Predecessor in the tree representation of the set. | |
| int | rank |
| Ranking of the set given by its cardinality. | |
| int | name |
| Name or label of a set. | |
| int | iset |
| Initial set label. | |
| int | succ |
| Successor in the Offline-Min sequence. | |
| int | pred |
| Predecessor in the Offline-Min sequence. |
Member Data Documentation
Initial set label.
This label represents the iteration index and hence the index of an insert instruction in the complete Offline-Min sequence
Definition at line 138 of file sortsup.icc.
The documentation for this class was generated from the following file:
- gecode/int/sorted/sortsup.icc (Revision: 7290)


Navy Secretary says he did not threaten to resign
by ReutersHALIFAX, Nova Scotia (Reuters) - The U.S. Navy Secretary said on Saturday he did not threaten to resign amid a disagreement with President Donald Trump over whether a Navy SEAL convicted of battlefield misconduct should face a board of peers who may oust him from the elite force.
"Contrary to popular belief, I'm still here. I did not threaten to resign," Spencer said at a security conference in Halifax. The New York Times reported earlier on Saturday that Spencer had made the threat.
Spencer said Special Operations Chief Edward Gallagher should face a board of peers because "the process matters for good order and discipline," Reuters reported on Friday.
Last Friday, Trump intervened in the case, ordering the Navy to restore Gallagher's rank and pay, and clearing the way for him to retire on a full pension.


--- title: Members description: We've built an amazing team of developers, marketers, designers and sales people. image: https://source.unsplash.com/BcoGknSqlDc/2000x1322?a=.png ---


Re-Invent
Analytics
Contact
Nielsen-TCS Hackathon
"Innovate Recreate Rejuvenate"
Analytics
Get in Touch
Team Aryabhata


Below, type the element symbol (for example, Am) or element name (for example, Americium) to search for isotopes of the element. See wikipedia for more about Americium or the List of Nuclides from where this data was obtained.
| Symbol | Name | Protons | Neutrons |
|---|---|---|---|
| {{ isotope.a }}{{ isotope.sym }} | {{ isotope.name }}-{{ isotope.a }} | {{ isotope.z }} | {{ isotope.a - isotope.z }} |


acl acl2012 acl2012-204 acl2012-204-reference knowledge-graph by maker-knowledge-mining
Source: pdf
Author: Seung-Wook Lee ; Dongdong Zhang ; Mu Li ; Ming Zhou ; Hae-Chang Rim
Abstract: In this paper, we propose a novel method of reducing the size of translation model for hierarchical phrase-based machine translation systems. Previous approaches try to prune infrequent entries or unreliable entries based on statistics, but cause a problem of reducing the translation coverage. On the contrary, the proposed method try to prune only ineffective entries based on the estimation of the information redundancy encoded in phrase pairs and hierarchical rules, and thus preserve the search space of SMT decoders as much as possible. Experimental results on Chinese-toEnglish machine translation tasks show that our method is able to reduce almost the half size of the translation model with very tiny degradation of translation performance.


Relief Imaging
How much is it worth to get more customers to pay attention to you? What if you could let them touch and feel the unique value of what you offer?
Our relief image technology raises the content of your marketing printed materials in a way that triggers emotions, encouraging customers to buy from you. Because it is also digital you can customise printed offers, messages, designs and incentives for each individual customer, maximising relevance and effectiveness.

This marketing tool supports our main business objective – helping our customers maximise their investment when they buy from us.


About Superlotto
Multilotto.com allows you to participate in the biggest and most exciting lotteries worldwide from your computer and mobile phone. You don’t have to be present at a lottery retail store to buy a ticket. Make your dream come true. Play on Multilotto.com today.
Multilotto.com allows you to participate in the biggest and most exciting lotteries worldwide from your computer and mobile phone. You don’t have to be present at a lottery retail store to buy a ticket. Make your dream come true. Play on Multilotto.com today.
What is so good about Multilotto.com?
Multilotto.com allows you to participate in the biggest and most exciting lotteries worldwide from your computer and mobile phone. You don’t have to be present at a lottery retail store to buy a ticket. Make your dream come true. Play on Multilotto.com today.
What is so good about Multilotto.com?
Multilotto.com allows you to participate in the biggest and most exciting lotteries worldwide from your computer and mobile phone. You don’t have to be present at a lottery retail store to buy a ticket. Make your dream come true. Play on Multilotto.com today.


Professional Projects
{% include big-project-narrow.html
layout = "left"
title = "Biodose Tools"
image = "biodose-tools.png"
link = "https://github.com/biodosimetry-uab/biodose-tools/"
content = "In the frame of RENEB, we are developing Biodose Tools, an Open Source R Shiny application to help professionals and researchers on Biological Dosimetry to perform several computations and statistical analyses. We also aim to clarify and document the tests used and to propose those considered most appropriate."
%}


I’ve been using del.icio.us for a while now, not so much for the “social networking” aspects of it but because it’s a great way to keep track of all the useful and interesting stuff I find scattered around the Web. Not too long ago, Yahoo! debuted a similar service as part of its My Web 2.0 Beta. I gave it a try and found that it had a nice UI and a few enhancements like the ability to limit who can see your links, but also a few drawbacks (in particular, no option to rename an existing tag). All-in-all, I didn’t see any compelling reason to switch, especially since all my existing bookmarks are already saved in del.icio.us.
Now Yahoo has purchased del.icio.us, which begs the question of what the future holds for these two services. One thing is certain, Yahoo! doesn’t need two separate bookmark tagging services so something is bound to change. Which one will stay and which one will go? What new features will be added as the services are merged? I guess we’ll just have to wait and see.


|
Figure 1
|
Anthropogenic activities alter the natural water cycle and d ... |
|
Figure 2
|
Melbourne future water demand scenarios (see Table S2) and ... |
|
Figure 3
|
Reservoir water storage anomalies considering future climate ... |
|
Figure 4
|
( a) Melbourne’s average water storage deficit based on diff ... |


| Rank |
Age |
Total |
Discount |
Date |
| 1 | 25 | $5.95 | 22% | Jun 26, 2013 7:22 AM |
| 11 | 12 | $82.99 | 5% | Aug 21, 2013 12:21 PM |
| 12 | 51 | $99.29 | 18% | Oct 13, 2013 1:15 PM |
| 51 | 28 | $9.99 | 20% | Jul 6, 2013 8:14 AM |
| 21 | 33 | $19.99 | 25% | Dec 10, 2012 5:14 AM |
| 013 | 18 | $65.89 | 45% | Jan 12, 2013 11:14 AM |
| 005 | 45 | $153.19 | 45% | Jan 18, 2014 9:12 AM |
| 10 | 3 | $5.29 | 4% | Jan 8, 2013 5:11 PM |
| 16 | 24 | $14.19 | 14% | Jan 14, 2014 11:23 AM |
| 66 | 22 | $13.19 | 11% | Jan 18, 2013 9:12 AM |
| 100 | 18 | $55.20 | 15% | Feb 12, 2013 7:23 PM |
| 55 | 65 | $123.00 | 32% | Jan 20, 2014 1:12 PM |
| 9 | 25 | $22.09 | 17% | Jun 11, 2013 10:55 AM |
| 13 | 12 | $19.99 | 18% | Jan 20, 2014 7:45 PM |
| 73 | 58 | $129.19 | 39% | Jan 20, 2014 10:11 AM |


| Option name | Type | Default |
|---|---|---|
| enabled | Boolean | true |
| Enable or disable the point marker. | ||
| fillColor | Color | null |
| The fill color of the point marker. When null, the series' or point's color is used. | ||
| lineColor | Color | null |
| The color of the point marker's outline. When null, the series' or point's color is used. | ||
| lineWidth | Number | 0 |
| The width of the point marker's outline. | ||
| radius | Number | 0 |
| The radius of the point marker. | ||
| states | Array | |
| Interaction states for the point marker. | ||
| symbol | String | null |
| A predefined shape or symbol for the marker. When null, the symbol is pulled from options.symbols. Other possible values are "circle", "square", "diamond", "triangle" and "triangle-down". Additionally, the URL to a graphic can be given on this form: "url(graphic.png)". |


{% include head-en.html %}
{% include header-en.html %} {% include services-en.html %} {% include portfolio_grid-en.html %} {% include about-en.html %} {% include clients-en.html %} {% include contact-en.html %} {% include footer-en.html %} {% include modals-en.html %} {% include js.html %}


appdynamics
Businessmodel of AppDynamics
Customer Segments
AppDynamics provides products and services that are useful for businesses across multiple sectors, with customers spanning the education, financial services, retail, technology, logistics, healthcare, telecoms and gaming industries, among others.
Its customers are not limited geographically, serving clients across North America, Asia Pacific, Europe, the Middle East and Africa.
On its website AppDynamics lists a number of household names among its customers, including Hallmark, Expedia, eHarmony, Cisco, Macmillan Publishing and NASDAQ, as well as high-profile educational institutions such as Cornell University, Washington University and Missouri State University.
Value Propositions
AppDynamics’ greatest value is in the efficiency, usability and capability of its analytics software, which purports to enable users to identify potential performance issues well in advance and from one unified platform.
The Company provides real-time and continuous data monitoring, management and analytics services for public or private cloud-based applications.
Its prices are negotiable depending on the individual needs of its clients, with all products available as a free trial. AppDynamics offers flexible service options, providing cloud-based, on-site and hybrid platform delivery. AppDynamics also claims to provide enterprise-level security services and robust architecture for every one of its customers.
Channels
AppDynamics’ products can be accessed directly from its website at www.appdynamics.com through desktop or mobile browsers. The Company’s products are delivered either on a software-as-a-service basis, with AppDynamics hosting the platform software with users accessing it via the cloud, or through on-premises installation, where users deploy and host the product themselves.
Users may also access AppDynamics products via a hybrid service, comprising some on-site installation and cloud-based services. Products hosted by the Company can be accessed via the AppDynamics mobile apps for iOS and Android.
Customer Relationships
AppDynamics sells its products and services through online subscriptions. Users are able to set up an account and register for a free trial of any AppDynamics products on a self-service basis. Paid-for Pro subscriptions, however, must be routed through the AppDynamics sales team, which provides custom quotes depending on the individual requirements of each customer. Both free and paying users receive ongoing technical support, with Pro customers receiving access to round-the-clock assistance.
In addition to providing its users with webinars, FAQs and tutorials via its website, AppDynamics hosts a community forum where users can access discussions and special content – including access to user groups and training events – and the AppDynamics University, where users can take part in instructor-led training and interactive self-paced courses.
Key Activities
AppDynamics provides application intelligence and real-time business insights and analysis into application performance and user experience, primarily to corporate customers and website operators.
Its software allows businesses to monitor, manage, and optimise complex software platforms and applications with a view to identifying potential performance issues before they are realised.
The company’s software provides mobile, browser, synthetic and database solutions, as well as cloud migration and scaling, cloud monitoring, continuous delivery and troubleshooting services.
Key Partners
AppDynamics’ activities are supported by a network of partners, primarily companies operating in the technology space.
The Company maintains its Partner Ecosystem, with partners divided into three categories: Technology Partners, Service and Cloud Providers, and Solution Providers. Its Technology Partner category principally comprises software engineering and development companies that provide technical assistance to AppDynamics in serving customers with accurate, real-time business insights and analysis of application performance. AppDynamics’ Service and Cloud Providers primarily provide marketing and reselling services, while the Company’s solutions partners – mostly software and analytics companies – help to provide AppDynamics customers with tailored data monitoring and management solutions.
AppDynamics’ recent partners include IT and business consulting company Cognizant Technology Solutions, cloud solutions provider Trace3 and open source software company Red Hat.
Key Resources
Among AppDynamics’ key resources are its analytics platform, IT infrastructure and personnel. The Company, and its founder Bansal, have several applications filed with the US Patent and Trademark Office, including applications titled ‘Time series metric data modelling and prediction’ and ‘Automatic capture of detailed analysis information for web application outliers with very low overhead’.
AppDynamics employs an expert development and support team to ensure the efficiency and reliability of its platform and a sales team that is key to the Company’s customer management.
The Company also requires reliable IT infrastructure, notably server space, to host its platform.
Cost Structure
AppDynamics accrues costs through the development of its analytics platform, the retention of its personnel and maintenance of its IT infrastructure.
The Company must pay for the rental of server space and operational costs relating to its data centres, as well as other fixed costs concerning the management of its network of offices across the US, Europe, Asia and Australia.
AppDynamics also incurs costs relating to employee salaries and benefits, with recent reports stating that it employs more around 900 staff members across 12 countries.
Revenue Streams
AppDynamics operates on a freemium basis, providing a basic analytics and monitoring service free of charge, alongside more advanced offerings than come with greater functionality and support. AppDynamics offers a free Lite Plan and paid-for Pro Plans, which scale to support unlimited application deployments across an entire business. Pro Plans are quoted individually and are priced according to the number of apps covered by each product and on a per-unit basis, a unit being the metric that governs each product module. A unit could correspond to a set number of page views, a set number of monthly active users or a set number of CPU cores, depending on the service provided.
AppDynamics reportedly ended 2014 with $150 million in revenue under contract. The Company is reported to have grown further over the course of 2015 and is expected to post greater revenue figures going forward.


| asInteger {checkmate} | R Documentation |
asInteger
is intended to be used for vectors while asInt
is
a specialization for scalar integers and asCount
for scalar
non-negative integers.
Convertible are (a) atomic vectors with all elements NA
and (b) double vectors with all elements being within tol
range of an integer.
Note that these functions may be deprecated in the future.
Instead, it is advised to use assertCount
,
assertInt
or assertIntegerish
with
argument coerce
set to TRUE
instead.
asInteger( x, tol = sqrt(.Machine$double.eps), lower = -Inf, upper = Inf, any.missing = TRUE, all.missing = TRUE, len = NULL, min.len = NULL, max.len = NULL, unique = FALSE, sorted = FALSE, names = NULL, .var.name = vname(x) ) asCount( x, na.ok = FALSE, positive = FALSE, tol = sqrt(.Machine$double.eps), .var.name = vname(x) ) asInt( x, na.ok = FALSE, lower = -Inf, upper = Inf, tol = sqrt(.Machine$double.eps), .var.name = vname(x) )
x |
[any] |
tol |
[ |
lower |
[ |
upper |
[ |
any.missing |
[ |
all.missing |
[ |
len |
[ |
min.len |
[ |
max.len |
[ |
unique |
[ |
sorted |
[ |
names |
[ |
.var.name |
[ |
na.ok |
[ |
positive |
[ |
This function does not distinguish between
NA
, NA_integer_
, NA_real_
, NA_complex_
NA_character_
and NaN
.
Converted x
.
asInteger(c(1, 2, 3)) asCount(1) asInt(1)


# DASHBOARD
COMPONENTS
Patients In-House
13514.52% Since last month
PATIENTS IN-HOUSE:
This Stats Card displays the total number of patients that are undergoing treatment and have been admitted in the hospital.
Everytime a patient approaches the doctor for treatment, it automatically increments the PATIENTS IN-HOUSE value by one to signify the total number of patients currently admitted in the hospital.
It displays the overall performance (here 14.52%) by comparing last month's patient intake with the present month's intake.
It displays the overall performance (here 14.52%) by comparing last month's patient intake with the present month's intake.
Available Staff
253.48% Since last week
AVAILABLE STAFF:
This Stats Card displays the total number of staff members available in the hospital premises. If a new staff member is hired, then this value is incremented by 1.
It calculates the employment rate of the present month and compares it with employment rate of the previous month to determine the increase or decrease in rate of employment (here 3.48%).
It calculates the employment rate of the present month and compares it with employment rate of the previous month to determine the increase or decrease in rate of employment (here 3.48%).
Appointments
2712.48% Since last month
APPOINTMENTS:
As the name suggests, this Stats Card simply displays the upcoming appointments scheduled for the doctor this month. It fetches this information from the doctor's calendar so whenever a new appointment event is created, it increments this value by 1.
It displays the overall appointment booking rate (here 12.48%) by comparing the total appointments from last month with the present month.
It displays the overall appointment booking rate (here 12.48%) by comparing the total appointments from last month with the present month.
Recovery Rate
86.8%23.67% Since last week
RECOVERY RATE:
This Stats Card is of immence importance as it displays the percentage of leads successfully
converted out of all the leads that were in-progress in a week.
It displays the overall performance (here 23.67%) by comparing the total leads converted from last week with the present week.
It displays the overall performance (here 23.67%) by comparing the total leads converted from last week with the present week.
Growth
Patients Treated (yearly)
PATIENTS TREATED CHART:
This chart plots the graph for the total number of patients treated for every month of the year. Additionally, it also plots the same graph for the previous year as well. This enables us to allocate resources and make strategies based on the patients treated output for each month.
TIP #1: Hover your mouse cursor over the graph to see and compare the datasets for each month between the two years.
TIP #2: Click on the 2018 or 2019 box (index key) in the chart to disable the datasets of a specific year so as to focus on just one graph.
This chart plots the graph for the total number of patients treated for every month of the year. Additionally, it also plots the same graph for the previous year as well. This enables us to allocate resources and make strategies based on the patients treated output for each month.
TIP #1: Hover your mouse cursor over the graph to see and compare the datasets for each month between the two years.
TIP #2: Click on the 2018 or 2019 box (index key) in the chart to disable the datasets of a specific year so as to focus on just one graph.
Prioritized Patients
| No. | Patient name | Disease | Priority | Health Profile |
|---|---|---|---|---|
| 1 | Yash Jaiswal | Dengue | High | |
| 2 | Sneha Gupta | Typhoid | Medium | |
| 3 | Pooja Rai | Malaria | Medium | |
| 4 | Vivek Kumar | Chicken Pox | Medium | |
| 5 | Rishina Sharma | Common Cold | Low |
PRIORITIZED PATIENTS:
This priority table shows a prioritized list of patients. The priority is calculated by taking into consideration the severity of the disease of the patient as well as their daily health status (determined by the delta of difference between the general recovery trend and the patient's recovery trend).
This priority table shows a prioritized list of patients. The priority is calculated by taking into consideration the severity of the disease of the patient as well as their daily health status (determined by the delta of difference between the general recovery trend and the patient's recovery trend).


Thu May 8, 2008
DocTrain chugged along today and picked up some speed with a heavy emphasis on social media. As with yesterday’s post, I’ll give you the skinny and the slides on each presentation as well my pick for ‘what’s hot’.
Great people, good food, and leading-edge content. Kudos to the organizers and to the Marriott Pinnacle for hosting this terrific event. And a huge thanks also to the Westcoast STC for the opportunity to attend.
Here’s the best of the rest:
Document engineering in user experience design
Robert Glushko (University of California at Berkeley)
With little collaboration between designers (front end) and information architects (back end), the result is a poor user experience. A brilliant mind, Glushko coined a new term today: the content choreographer.
What’s hot: Doc or Die
| View | Upload your own
Social media 101: Now everyone’s a technical writer
Darren Barefoot (Capulet Communications)
From Youtube to Twitter to Facebook, social media is about two-way conversations, collaboration, sharing, community, transparency, and authenticity. It also means we have to relinquish control of our content.
What’s hot: Web 2.0 in plain English
Changing the rules of the game for the benefit of the user
Joe Sokohl (Keane, Inc.)
In his talk, Joe emphasized knowing your end user - especially when training customers. Qualitative research is the key to giving end users what they want, not what you think they want.
What’s hot: The Kobayashi Maru approach to solving problems
| View | Upload your own
How an author and editor used a wiki to write a book
Stewart Mader (Atlassian)
Stewart wrote his book using only a wiki. He found that communicating with his editors using a wiki was far more efficient than using email.
What’s hot: WriteRoom (Mac only…grrr!)
The many-armed starfish: today and tomorrow in social media
Darren Barefoot (Capulet Communications)
I can’t get enough of Darren - he’s a terrific speaker. He expanded on social media tools and explained which ones were most effective for use in marketing strategies.
What’s hot: Brightkite
What technical communicators need to know about flash
Sarah O’Keefe (Scriptorium Publishing)
Flash is finicky, but useful if you need to explain difficult concepts using animation. From motion to shape tweens, we got the basics in this tutorial.
What’s hot: Brain games
Living multiple lives: The new technical communicator
B. Noz Urbina (Mekon)
In the closing keynote, Urbina gave practical advice on how to create documents more efficiently and save your company money (the reason companies pay for employees to fly to these conferences in the first place).
What’s hot: Fly me to London
| View | Upload your own
That’s a wrap. Now go outside.


Research interests
- Theoretical hydrodynamics
- Wave impact on coastal structures
- Water exit of bodies
Recent publications
- Greenhow, MJL. and Md Noar, NAZ. (2015) 'Wave impacts on structures with rectangular geometries: Part 1. Seawalls'. Applied
Ocean Research, 53. pp. 132 - 141. ISSN: 0141-1187.
- Greenhow, MJL. (Accepted) 'Effective computer-aided assessment of mathematics; principles, practice and results'. Teaching
Mathematics and Its Applications.
- Greenhow, MJL. and Rajavaheinthan, R. (2014) 'Constant acceleration exit of two-dimensional free-surface-piercing bodies'.
Applied Ocean Research, 50. pp. 30 - 46.
Learn more..
↠


|
My Project
|
#include <Octree.h>
Classes | |
| class | Callback |
| class | Iterator |
| struct | OctreeNode |
| struct | Point |
Public Member Functions | |
| Octree (float min[3], float max[3], float cellSize[3]) | |
| virtual | ~Octree () |
| N & | getCell (const float pos[3], Callback *callback=NULL) |
| void | traverse (Callback *callback) |
| void | clear () |
| Iterator | getIterator () |
Protected Member Functions | |
| void | traverseRecursive (Callback *callback, const Point &currMin, const Point &currMax, OctreeNode *currNode) |
Protected Attributes | |
| Point | _min |
| Point | _max |
| Point | _cellSize |
| OctreeNode * | _root |
|
inline |
|
inlineprotected |
|
protected |


Rick Tesmond's Blog
Home
About
Linkedin
Github
Get to Know Rick
I'm a sports addict, both watching and playing. I swim, run, play football on the weekends, and am training for a marathon. Although it is difficult, I remain an avid Bengals and Reds fan.
Live a block off of Green Lake.
Works part time for Luxe Valet (see me if you want a day of free on-demand valet parking downtown!).


Sauti sol are a Kenyan afro pop band formed in Nairobi, Kenya by vocalist Bien-Aime Baraza, Willis Chimano and Savara Mudigi in 2005. Initially an a capella group, guitarist Polycarp Otieno joined before they named themselves
Band Members
Studio Albums
Follow them on their social media pages