Dagger / Vert.x
In this post I want to show a proof of concept project that makes use of Eclipse Vert.x 4.0.3 and Dagger 2.35.1 dependency injection. The PoC project contains a modularized Vert.x application that is using Maven modules and dependency injection. Vert.x is a project which provides libraries that can be used to create reactive applications on the JVM. The PoC contains a simple HTTP server.
Next I’ll walk you through the individual maven modules starting with the API and at the end we’ll reach the main method that starts the example project.
API
The api
module contains the API classes of the application which have no Vert.x dependency.
In this PoC it contains the ServerOption
POJO and RESTServer
interface which will be implemented within the rest
maven module.
public interface RESTServer {
Completable start();
Completable stop();
}
The server interface is very simple. It only defines the start and stop methods. We’ll implement this interface in the rest
module.
BOM
The bom
module is used to manage the application maven dependency versions. Using a BOM is a good practice when working with a multi-module maven project.
It lists dagger, vert.x, project and test dependencies that are needed for the project.
Other module pom.xml
files contain the needed dependencyManagement
section to import the BOM dependency definitions.
Modules like common
, rest
, api
and server
which make use of this do not need to specify the dependency version in the dependencies
section.
…
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.metaloom.poc</groupId>
<artifactId>poc-vertx-dagger-bom</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
…
Common
The common
module is the first module which makes use of dagger.
Dependencies
It thus contains the following dependencies:
…
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger</artifactId>
</dependency>
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-compiler</artifactId>
<optional>true</optional>
</dependency>
…
The first dependency provides the dagger annotations that can be used within the code.
The second dependency is used for the maven-compiler-plugin
.
Compile Time DI
Dagger does not handle dependency injection during runtime like this is typically done for DI libraries like Guice or Spring DI.
Instead of runtime DI dagger will use compile-time
DI.
This means that the needed DI code is generated during the compilation of the project.
The dagger-compiler
dependency thus needs to be added to the maven-compile-plugin
.
This will enable annotation processing for the compiler that generates new sources that are needed for the dependency injection mechanism.
…
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
<verbose>false</verbose>
<compilerVersion>11</compilerVersion>
<source>11</source>
<target>11</target>
</configuration>
<dependencies>
<dependency>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-compiler</artifactId>
<version>${dagger.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</plugin>
…
When using Eclipse IDE you want to install the m2e-apt plugin to enable processing within the IDE. See SO for details.
|
Vert.x + Dagger
Next we need to tell dagger how to provide Vert.x dependencies when they are requested in other modules.
In this PoC I choose to create a dagger module which is a class that defines how to provide needed non-dagger dependencies.
…
@Module
public class VertxModule {
@Provides
@Singleton
public Vertx vertx() {
return Vertx.vertx();
}
@Provides
@Singleton
public io.vertx.reactivex.core.Vertx rxVertx(Vertx vertx) {
return new io.vertx.reactivex.core.Vertx(vertx);
}
…
Since the Vert.x
instance itself should only be instantiated once we use the @Singleton
annotation on the vertx
method.
I also added a reactive rxVertx(…)
variant to the module. We can request the non-rx variant of Vert.x via the argument of the method since we have already made it injectable via the vertx()
method.
The PoC also makes use of Vert.x Web which provides additional functionality for HTTP handling.
@Module
public class VertxWebModule {
@Provides
public Router rxRouter(Vertx rxVertx) {
return Router.router(rxVertx);
}
}
The VertxWebModule
contains a single method to provide the needed reactive variant of the Vert.x Web Router
. Note the lack of the @Singleton
annotation. This will make it possible to inject new instances of the router across the application. Sometimes it can be useful to create multiple routers (e.g. for multiple API servers or subrouting)
REST
We now have our RESTServer
interface and made Vert.x injectable. Now we can implement the server.
@Singleton
public class RESTServerImpl implements RESTServer {
private final HttpServer rxHttpServer;
private final Router rxRouter;
@Inject
public RESTServerImpl(HttpServer rxHttpServer, Provider<Router> rxRouterProvider) {
this.rxHttpServer = rxHttpServer;
this.rxRouter = rxRouterProvider.get();
}
@Override
public Completable start() {
rxRouter.route("/hello").handler(rc -> {
rc.response().end("world");
});
return rxHttpServer
.requestHandler(rxRouter)
.rxListen()
.toCompletable();
}
@Override
public Completable stop() {
return rxHttpServer.rxClose();
}
}
The RESTServerImpl
injects the needed dependencies via the constructor. It is also possible to inject dependencies into fields but those need to be set to public
. The benefit of using dagger is also that you write code which is easier to be used in combination with mocking frameworks. This is at least my experience.
Since we omitted the @Singleton
annotation for the provider of Router
we now need to inject the dependency using a Provider
. This allows us to invoke the get
method which will in turn create a new instance of the Router
.
The implementation of the start
, stop
method follows the basic Vert.x Web server usage.
Server
We now have the REST implementation, Vert.x DI and API. Now we need to create a Dagger component to prepare the dependency graph.
Dagger Component
The Component
is the main entry point of a dagger dependency setup. It defines the list of modules which provide injectable dependencies.
@Singleton
@Component(modules = { VertxModule.class, PocBindModule.class })
public interface ServerComponent {
RESTServer restServer();
/**
* Builder for the main dagger component.
*/
@Component.Builder
interface Builder {
/**
* Inject the options.
*
* @param options
* @return
*/
@BindsInstance
Builder configuration(ServerOption options);
/**
* Build the component.
*
* @return
*/
ServerComponent build();
}
}
The @Component(modules = { VertxModule.class, PocBindModule.class })
line defines the dagger modules that need to be used.
Dependencies can however also be injected from outside of the dagger dependency mechanism. This is done using the Component.Builder
and the @BindsInstance
method.
Later we’ll see how to create the DI graph and this definition will allow us to inject the ServerOption
POJO from outside of the the whole dagger DI mechanism.
Bind Module
The second module we have not yet seen is the PocBindModule
. This module now tells dagger what implementation should be used when a RESTServer
should be injected.
This injection is actually implicitly being done within the ServerComponent
interface by adding the method RESTServer restServer();
.
@Module
public abstract class PocBindModule {
@Binds
abstract RESTServer bindRESTServer(RESTServerImpl e);
}
The bind module would not be needed when directly injecting RESTServerImpl but I recommend to inject interfaces instead to keep the code clean.
|
Main Method
Finally we can now create the runner for our PoC.
public class ServerRunner {
public static void main(String[] args) {
ServerOption options = new ServerOption();
options.setPort(8888);
// Inject the options and build the dagger dependency graph
ServerComponent serverComponent = DaggerServerComponent
.builder()
.configuration(options)
.build();
// Start the server
serverComponent.restServer().start().subscribe(() -> {
System.out.println("REST server started");
System.out.println("Now connect to http://localhost:8888/hello");
}, err -> {
err.printStackTrace();
});
}
}
The DaggerServerComponent
class will be auto-generated by dagger and contains the builder which we defined in the ServerComponent
interface.
The builder contains the configuration
method which is used to inject the ServerOption which was instantiated outside of the Dagger scope.
Since we defined the restServer
method in the interface of the component we can now access the instance via serverComponent.restServer()
.
Shading
Lastly I want to point out that the server
maven module contains the maven-shade-plugin
which will generated a fatjar that can be executed after building the project.
…
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<!-- Run shade goal on package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>io.metaloom.poc.server.ServerRunner</mainClass>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
</transformers>
</configuration>
</execution>
</executions>
</plugin>
…
The mainClass
section references the ServerRunner in order to create the correct manifest in the jar file.
The server can be started after building the project using:
java -jar server/target/poc-vertx-dagger-server-1.0.0-SNAPSHOT.jar
Final words
The whole PoC sources can be found here https://github.com/metaloom/poc-vertx-dagger
Personally I prefer Dagger over Spring DI since it does not involve classpath scanning. One application I build a while ago was previously using Spring DI and had performance issues during startup since the JVM was busy scanning the rather large classpath for DI. I assume this could have been solved by using package prefixes for DI scanning but I switched to Dagger instead and I don’t regret the decision.
Dagger however can also sometimes be a bit picky. Previously I had issues with the generated code when using @Inject
on public fields. Sometimes the generated constructor argument order would not match up and dagger was not happy.
Additionally at least when using Eclipse IDE you sometimes need to re-compile/re-generate the dagger sources if you change DI related code. This may however be related to the m2e-apt
plugin.
I hope you enjoyed this quick introduction. If you want to learn more about Dagger I can recommend the documentation.


-
Roch
- Roch(robot platform for commecial and home) integrated multiple different RGBD cameras and lidars like Microsoft's Kinect, Asus' Xtion Pro, Intel' Realsense 200 and Slamtec' Rplidar A1/A2 etc. Mainly used for business and family.
- Robot View
-
Sleo
- SLEO is an excellent outdoor mobile robot platform with complete topography. The ROS robot operating system based on open source is convenient for users to conduct secondary software development. Multiple reserved extension interfaces can be integrated with the mechanical arm and other accessories.
- Robot View


This command defines a climatological variable, which is year-independent. varname is a defined grid. There are two options for type:
seasonal
- For creating
monthly or multi-monthly climatologiesdiurnal
- For creating
climatologies over a time period less than a day
Say you have a 50-year timeseries of monthly mean sea surface temperatures (a variable named sst with 600 time steps) and you want to create a climatology and then look at the monthly anomalies. First, set the time range for 1 to 12, to span a complete year. Second, define the variable "sstclim" which will contain the January mean in the first time step, the February mean in the second time set, etc. Then use 'modify' to turn 'sstclim' into a climatological variable. This means that the calendar year associated with 'sstclim' (the first year in the original sst data set) becomes a wild card. Then you can define the anomaly by subtracting the climatology from the original time series. The commands are as follows:
'set t 1 12'
'define sstclim = ave(sst, t+0, t=600, 12)'
'modify sstclim seasonal'
'set t 1 last'
'define anom = sst - sstclim'


RD.SceneNode Class
SceneNode class to hold an scene item
Constructor
RD.SceneNode
()
Item Index
Methods
- addChild
- clear
- configure
- findNode
- fromMatrix
- getAllChildren
- getDistanceTo
- getGlobalMatrix
- getGlobalPoint
- getGlobalPosition
- getGlobalRotation
- getGlobalVector
- getLocalMatrix
- getLocalPoint
- getLocalVector
- getVisibleChildren
- propagate
- removeChild
- resetTransform
- rotate
- scale
- serialize
- setChildIndex
- setMesh
- setPivot
- setTexture
- translate
- updateGlobalMatrix
- updateLocalMatrix
- updateMatrices
Methods
clear
()
Remove all childs
configure
-
o
Configure this SceneNode to a state from an object (used with serialize)
Parameters:
-
o
Objectobject with the state of a SceneNode
findNode
-
id
Searchs the node and returns the first child node with the matching id, it is a recursive search so it is slow
Parameters:
-
id
Stringthe id of the node
Returns:
result node otherwise null
fromMatrix
-
m
-
[is_global=false]
updates position, rotation and scale from the matrix
Parameters:
-
m
Mat4the matrix
-
[is_global=false]
Bool optionalif the matrix is in global or local space
getAllChildren
-
result
Recursively retrieves all children nodes (this doesnt include itself)
Parameters:
-
result
Array[Optional] you can specify an array where all the children will be pushed
Returns:
all the children nodes
getDistanceTo
-
position
Returns the distance between the center of the node and the position in global coordinates
Parameters:
-
position
Vec3the point
Returns:
result
getGlobalMatrix
()
Mat4
Get transform global matrix (concatenating parents) (its a reference)
Returns:
matrix44
getGlobalPoint
-
v
-
[result=vec3]
Returns a point multiplied by the global matrix
Parameters:
-
v
Vec3the point
-
[result=vec3]
Vec3 optionalwhere to store the output
Returns:
result
getGlobalPosition
-
[result=optional]
-
[fast=optional]
Returns the node position in global coordinates
Parameters:
-
[result=optional]
Vec3 optionalwhere to store the output
-
[fast=optional]
Boolean optionaluses the current global amtrix without recomputing it, is faster but if the current matrix hasnt been updated the result will be wrong
Returns:
result
getGlobalRotation
-
[result=quat]
Get global rotation (concatenating parent rotations)
Parameters:
-
[result=quat]
Quat optionalquaternion to store the result
Returns:
resulting rotation in quaternion format
getGlobalVector
-
v
-
[result=vec3]
Returns a point rotated by the global matrix
Parameters:
-
v
Vec3the point
-
[result=vec3]
Vec3 optionalwhere to store the output
Returns:
result
getLocalMatrix
()
Mat4
Get transform local matrix
Returns:
matrix44
getLocalPoint
-
v
-
[result=vec3]
Returns a point multiplied by the local matrix
Parameters:
-
v
Vec3the point
-
[result=vec3]
Vec3 optionalwhere to store the output
Returns:
result
getLocalVector
-
v
-
[result=vec3]
Returns a point rotated by the local rotation
Parameters:
-
v
Vec3the point
-
[result=vec3]
Vec3 optionalwhere to store the output
Returns:
result
getVisibleChildren
-
[result=[]]
Recursively retrieves all children nodes taking into account visibility (flags.visible)
Parameters:
-
[result=[]]
Array optionalyou can specify an array where all the children will be pushed
Returns:
all the children nodes
propagate
-
method
-
params
calls a function in child nodes
Parameters:
-
method
Stringname
-
params
Arrayarray containing the params
removeChild
-
node
Remove a node from its children list
Parameters:
-
node
SceneNode
resetTransform
()
clears position, rotation and scale
rotate
-
angle_in_rad
-
axis
-
in_local
Rotate object (supports local or global but doesnt takes into account parent)
Parameters:
-
angle_in_rad
Number -
axis
Vec3 -
in_local
Booleanspecify if the axis is in local space or global space
scale
-
v
Scale object
Parameters:
-
v
Vec3
serialize
()
Object
Returns an object that represents the current state of this object an its children
Returns:
object
setChildIndex
-
child
-
index
Change the order inside the children, useful when rendering without Depth Test
Parameters:
-
child
RD.SceneNode -
index
Number
setMesh
-
mesh_name
sets the name of the mesh to be used to render the object
Parameters:
-
mesh_name
String | Meshalso it accepts a mesh itself
setPivot
-
pivot
Set the pivot point, 0,0,0 by default (WARNING: use flags.pivot = true to enable the use of the pivot)
Parameters:
-
pivot
Vec3local coordinate of the pivot point
setTexture
-
channel
-
texture
Sets the name of the mesh to be used to render the object
Parameters:
-
channel
Stringwhich channel to use (the texture will be uploaded to the shader with the name "u_" + channel + "_texture"
-
texture
Stringtexture name (textures are retrieved from the renderer.textures
translate
-
delta
Translate object in local space
Parameters:
-
delta
Vec3
updateGlobalMatrix
-
[fast=false]
-
[update_childs=false]
recomputes _global_matrix according to position, rotation and scaling
Parameters:
-
[fast=false]
Boolean optionalskips recomputation of parent, use it only if you are sure its already updated
-
[update_childs=false]
Boolean optionalupdate global matrix in childs too
updateLocalMatrix
()
recomputes _local_matrix according to position, rotation and scaling
updateMatrices
-
[fast=false]
recompute local and global matrix
Parameters:
-
[fast=false]
Bool optionaluses the global matrix as it is in the parent node instead of crawling all the ierarchy
Properties
color
Vec4
The color in RGBA format
Default: [1,1,1,1]
id
String
A unique identifier, useful to retrieve nodes by name
opacity
Number
This number is the 4� component of color but can be accessed directly
parentNode
SceneNode
The parent node where this node is attached
position
Vec3
The position relative to its parent in vec3 format
rotation
Quat
The orientation relative to its parent in quaternion format
scaling
Vec3
The scaling relative to its parent in vec3 format (default is [1,1,1])
scene
Scene
The scene where this node is attached
shader
String
the name of the shader in the shaders manager
texture
String
name of texture to use in the color channel (the same as SetTexture("color", name ))
uniforms
Vec3
The position relative to its parent


A Simple Explanation of HTML5
byHTML5 is big news right now. Web developers have been developing sites with it for the past few years, but awareness among the business community and the general public is really just starting up.
This is great! HTML5 is a major step forward in web development.
As awesome as this is, I’ve had a few conversations with non-developers who think HTML5 is a magic bullet. Most talk about it as something that they should be doing without fully understanding what it actually is.
While some web developers may be frustrated by the misunderstanding, part of their job is to explain to clients and employers what’s good and bad about new technologies, and without a lot of tech terms. So I’m going to take a stab at providing a simple HTML5 explanation.
And for the record: I think we should be using HTML5 when creating sites, but only in a way that helps us carry through our content strategy.
Here are the topics for this article:
- What Is HTML5 Exactly?
- Where Did HTML5 Come From?
- Semantic Markup
- Web Applications
- Mobile Web Development
- Making The Site Look Pretty
- How Is HTML5 Being Used As of This Article?
- How Can Businesses Use HTML5 & HTML5 Related-Technologies Right Now?
What Is HTML5 Exactly?
The 25-word answer is:
“HTML5 is a major update to HTML that brings excellent new features to both websites and web applications, but also highlights an important older feature.”
Expanding on this definition, the four key things to know about HTML5 are:
- it creates better semantic markup (the important older feature).
- it allows for the creation of more robust web applications.
- it allows for top-notch mobile web development.
- creating websites and web applications with HTML5 is a best practice but, in all honesty, not a requirement.
Where Did HTML5 Come From?
Created in 1990, HTML has always been a programming language that creates a website’s basic structure. To build a website, HTML “frames” it first, then things like copy and images are added to complete the job.
HTML updates are overseen by the World Wide Web Consortium, or, the W3C. When they began work on the next update in 2004, a group of outside companies spoke out against the direction the W3C was taking it.
The update was great for websites, the companies said, but not so great for the new web applications that were starting to appear. Also, the W3C’s suggested update wasn’t backwards-compatible with older versions of HTML, which would cause developers a ton of problems.
The companies felt that the W3C weren’t evolving HTML beyond a structural language, so they formed a separate group called the Web Hypertext Application Technology Working Group, or WHATWG (pronounced “what-wig”) to do just that. Their goal was to build a new HTML that worked well for both websites and web applications and would also be backwards-compatible with the old HTML.
In 2007, the W3C agreed with WHATWG’s point of view. The two groups remained separate but worked together on creating a new version of HTML, naming it “HTML5.”
The two groups are still working together as the HTML5 specification isn’t finalized as of this article, but it’s still possible to use it to create websites and web applications…as many do.
Semantic Markup
Semantic markup is HTML written in a way that gives site content specific meaning. Semantic markup is not a new a concept: it existed well before HTML5.
HTML5 does create excellent semantic markup though…better than earlier HTML versions. Metaphorically speaking, the semantic markup of earlier versions tells the world, “this is some site content” while HTML5 semantic markup tells the world, “this is some site content, now let me give you some detailed information about it.”
Sites written with semantic markup are easier to read on a multitude of devices: desktops, laptops, smartphones, screen-readers for the disabled, gaming consoles, just to name a few. But search engines also like semantic markup…so much so that web designer Jeffrey Zeldman said it best in 2009:
“Client who saves $5,000 buying cut-rate non-semantic HTML will later spend $25,000 on SEO consultant to compensate”
Correct! Site content wrapped in non-semantic markup is tough for search engines to understand; therefore, it’s tough for search engines to rank and list in their search results.
Hiring an SEO company to fix this is costly. If your site is coded with semantic markup at the beginning, this cost can be, at the very least, reduced.
To be clear: semantic markup up will not improve a site’s search engine ranking. It just makes it easier for search engines to understand a site’s content, which in turn, makes it easier to rank in search resullts.
Think of site content as a pirate’s treasure chest full of gold. Semantic markup gives search engines an awesome treasure map.
One last note on the subject: sites written with semantic markup are said to be “following web standards.” Web developers have been coding with web standards for years, but too many haven’t. A push for all developers to use web standards has always existed, but HTML5 has strengthened this push more than ever before.
Web Applications
A website is a site that gives people information, but doesn’t offer a lot in terms of interaction. People may be able to fill out a form of some sort while visiting the site, but the interaction won’t go much beyond that.
A web application is a site that gives people information and offers a lot in terms of interaction. Some interaction examples are:
- adding copy, images & videos.
- removing copy, images & videos.
- editing copy, images & (sometimes) videos.
- writing product reviews.
- sending messages to people.
- letting people know your current location.
Looking at this list, Facebook, Twitter, FourSquare, and Yelp are great examples of web applications.
Other web application examples include: Hotmail, Yahoo Mail, Gmail, Google Docs and Google Maps.
HTML5′s role in web application development is a bit tricky to describe: start with understanding that there’s “HTML5″ and there’s “HTML5-related technology.”
The following is an incomplete list of things that are part of HTML5:
- Video: playing video on a website without needing things like Flash.
- Audio: playing audio on a website without the need for plugins.
- Canvas: using code to automatically draw stuff on a website.
- Drag & Drop: dragging and dropping stuff on a website.
- Application Cache: storing website content, such as images, on a device, making the site run faster.
The following is an incomplete list of things that are HTML5-related technologies:
- WebGL: creates 3D graphics on a website.
- Web Workers: a method of running and storing website code behind the scenes.
- Geolocation: lets websites know where site visitors are geographically located.
HTML5 and HTML5-related technologies can be combined with other technologies to create compelling web applications.
For the sake of easy explanations, I called these things “HTML5-related technologies” but I can’t stress enough that they’re not HTML5. They’re “HTML5-related” at best and even that’s a stretch of the terminology.
Many don’t care about this the proper term usage but do not be surprised if a real stickler comments on this article, telling me that calling these things “HTML5-related” is a no-no. If you want the techie details on this, visit MDN’s HTML5 page and take note of the section called “Technologies often called part of HTML5 that aren’t.”
Mobile Web Development
The web browsers pre-installed in the majority of mobile devices released in the past two years support HTML5: both websites and web applications.
First, understand that there are native applications and there are mobile web applications. Native applications are what are commonly called “apps” or “native apps;” small applications that you download from places such as Apple’s App Store or Google’s Android Market. Mobile web applications are applications that run inside a mobile web browser such as Safari Mobile or Opera Mini; they’re called “mobile web apps” nowadays.
So if you’re on an iPhone, you can open the Safari Mobile web browser (a native app) and go to Facebook’s mobile site (a mobile web app). Or, you can open the App Store (another native app) and download the Facebook application (yet, another native app) and use Facebook from there.
The good thing about native apps is they have more functionality than mobile web apps. The good thing about mobile web apps is that they’re less expensive to create than native apps.
A native app that lives on your smartphone can use other native apps to aid in a particular task…the camera, the address book, directional apps like the compass and the maps, etc. Except for very few instances, mobile web apps can’t do any of this as of this article; therefore, native apps have more functionality.
But it’s always a good idea to make your app to work on as many devices as possible, and doing so can be expensive. The current cost for creating an app that works on just iPhones and Androids is in the five-figure range. Mobile web apps are coded to work on mobile web browsers, which practically every mobile device has. So a mobile web app will work on almost any mobile device, and will be cheap to create when compared to the cost for creating a native app for every device.
HTML5 is well-suited for mobile web apps for a lot a reasons, a big one being the above-mentioned application cache.
When combined with certain HTML5-related technologies, application cache allows mobile web apps to work on devices even if the device doesn’t have an internet connection! These apps would probably need a connection to work as fully intended, but they can still do lots of things offline.
Best of all mobile web browsers support many HTML5 features already. Non-mobile browsers are catching up, but the mobile browsers adopted them first and are ahead in the race as a result.
Because of their offline functionality and early adoption rate among mobile devices, lots of web developers are promoting HTML5 mobile web apps as a viable alternative to native apps. Mobile web apps will need to be able access things like the camera if they expect to beat the native guys, but I believe they’ll have access to many of these things eventually.
Making The Site Look Pretty
There are some HTML5 things that can make sites look good, but very little. And again, these things don’t work in many desktop browsers, which are still used more than mobile browsers.
So to make a site look good in as many browsers as possible, these three things are currently the best tools to do so:
- CSS3: applies pictures, colors and few cool effects to websites.
- JavaScript: creates interactivity on a website.
- JavaScript-related technologies: jQuery is the biggest one of these right now.
These things are not HTML5, but you will see them used in both HTML5 websites and web applications.
How Is HTML5 Being Used As of This Article?
In many ways…
- HTML5 games make up a bulk of the HTML5 web apps being created: Facebook is very committed to HTML5 games.
- Web designers are excelling at creating sites with semantically correct HTML5 markup and making them look pretty. The Boston Globe is one of the most celebrated of these sites but HTML5 Gallery also provides some nice samples.
- Web applications are popping up everywhere. One of my favorites is TweetDeck Web.
- There are a few mobile web apps out there. Some use a lot of HTML5 and its related technologies, some use just a little of it. jQuery Mobile Gallery is site that uses a fair amount of HTML5 stuff; the sites they display use HTML5 to varying degrees.
How Can Businesses Use HTML5 & HTML5 Related-Technologies Right Now?
I can’t stress the importance of web standard semantic markup enough. Businesses that don’t have it in their sites need to get it in there sooner, not later. They should either edit their current site and add the markup, or plan a site redesign that will include such markup.
If businesses go with the redesign, they can also make it look pretty at that point using CSS, JavaScript and JavaScript-related technologies.
As for web applications and mobile web development, I have to refer to a previous statement…creating websites and web applications with HTML5 is a best practice but, in all honesty, not a requirement.
For example: Facebook and Twitter’s desktop browser applications converted to HTML5 only recently, but millions of people were using them as web apps before that. And both have robust mobile web applications, each one created with an older version of HTML. This is also true for CNN, Fox News, Sephora, ESPN, Ford, Dollar General…I can probably go on and on.
So there’s no clear path here: using HTML5 certainly helps but it seems that not using it doesn’t hurt. Regardless of this, I believe that all sites and web apps from here on in, should be created with HTML5.
I also believe that deciding whether to use HTML5 should not be the first task of a business-that should be focusing on delivering high quality content.
I’m basing this opinion on what I learned at the mobile promotion panel during Social Media Week 2011. Over and over again, the panelists stress how the mobile web was a better promoter than the native app and that we should spend more time developing an effective content strategy instead of following tech trends. Not one panelist mentioned HTML5 and there were many developers working with it at that time.
So my HTML5 suggestions for business don’t have that much to do with HTML5. They are:
- Confirm that your web developer or agency will create your site with HTML5 semantic web standard markup: Most do, but double-check anyway.
- Remember that HTML5 isn’t the only thing that makes your site look good: The CSS3 and JavaScript stuff is very important here.
- Develop your content strategy first: doing so will help you decide what parts of your content are the most important.
- Don’t think you need to create an HTML5 app: You may find that you don’t need it after you devise your content strategy and that a website will do the job just fine.
In closing, HTML5 is a highly discussed and debated subject right now and some may agree or disagree with what’s being said here. So please feel free to comment on this article and post your opinions.


Before Change
if method in ("mean", "median"):
// welch-style spectrum (mean/median of STFT)
if nperseg is None:
if isinstance(window, (str, tuple)):
// window is a string or tuple, defaults to 1 second of data
nperseg = int(fs)
else:
// window is an array, defaults to window length
nperseg = len(window)
else:
nperseg = int(nperseg)
if noverlap is not None:
noverlap = int(noverlap)
// Calculate the short time fourier transform with signal.spectrogram
freqs, t_axis, spg = signal.spectrogram(sig, fs, window, nperseg, noverlap)
// Pad data to 2D
if len(sig.shape) == 1:
After Change
if method in ("mean", "median"):
// Calculate the short time fourier transform with signal.spectrogram
nperseg, noverlap = _check_settings(fs, window, nperseg, noverlap)
freqs, t_axis, spg = signal.spectrogram(sig, fs, window, nperseg, noverlap)
// Pad data to 2D
if len(sig.shape) == 1:


Teaching Assistant
- Phonetics II (UG course) 2018 Spring
- Language testing (M.A. course) 2016 Spring
- Linguistic Research (M.A. course) 2015 Fall
- Teaching Chinese as a Second Language (M.A. course) 2015 Spring
- Foundations II: syntax and semantics (M.A. course) 2014 Fall
Workshops
- Workshop on ultrasound imaging techniques and forced alignment in linguistic studies.
Department of Linguistics and Modern Languages, Chinese University of Hong Kong. June, 2017.
- Workshop on DMDX. LING1002 Phonetics II.
Department of Linguistics and Modern Languages, Chinese University of Hong Kong. April, 2014.
Guest lecture
- "Technology in L2 pronunciation instruction" at ENGE5620 Acquisition and Teaching of L2 Pronunciation, CUHK.


This section describes how to use the defined name in code. The ``Syntax'' description for a generic function describes the lambda list of the generic function itself, while the ``Method Signatures'' describe the lambda lists of the defined methods. The ``Syntax'' description for an ordinary function, a macro, or a special operator describes its parameters.
For example, an operator description might say:
F x y &optional z &key k
This description indicates that the function F has two required parameters, x and y. In addition, there is an optional parameter z and a keyword parameter k.
For macros and special operators, syntax is given in modified BNF notation; see Section <IP_ADDRESS> (Modified BNF Syntax). For functions a lambda list is given. In both cases, however, the outermost parentheses are omitted, and default value information is omitted.
<IP_ADDRESS>.1 Special ``Syntax'' Notations for Overloaded Operators
<IP_ADDRESS>.2 Naming Conventions for Rest Parameters
<IP_ADDRESS>.3 Requiring Non-Null Rest Parameters in the ``Syntax'' Section
<IP_ADDRESS>.4 Return values in the ``Syntax'' Section


JSONdb is a RESTful JSON storage service that you can
use to quickly develop your mobile and web app, without
the need of any backend.
POST /storage create a new JSON entry
GET /storage/{id} read a JSON entry
PUT /storage/{id} update a JSON entry
You can also host JSONdb on your own server, or a free
Heroku dyno, visit: https://github.com/huytd/jsondb-rs/
for more detail.


{{ range sort $.Site.Data.keynotes "speakers" }}
{{ partial "talk_preview.html" . }}
{{ end }}
{{ range sort $.Site.Data.talks "speakers" }}
{{ partial "talk_preview.html" . }}
{{ end }}
Workshops/break-out sessions
{{ range sort $.Site.Data.workshops "speakers" }}
{{ partial "talk_preview.html" . }}
{{ end }}
More talks are being added as we receive confirmation from speakers...


Intranuclear targeted delivery of functional NF-kappaB by 70 kDa heat shock protein.
Abstract
The 70 kDa heat shock protein (Hsp70) is a highly conserved, ubiquitous protein involved in chaperoning proteins to various cellular organelles. Here we show that when added exogenously to cells, Hsp70 is readily imported into both cytoplasmic and nuclear compartments in a cell-type-specific fashion. We exploited this ability of Hsp70 to deliver NF-kappaB, a key transcriptional regulator of inflammatory responses. We demonstrate that a fusion protein composed of a C-terminal Hsp70 peptide and the p50 subunit of NF-kappaB was directed into the nucleus of cells, could bind DNA specifically, and activated Igkappa expression and TNFalpha production. We therefore propose that Hsp70 can be used as a vehicle for intracytoplasmic and intranuclear delivery of proteins or DNA to modulate gene expression and thereby control immune responses.


Guard Bright:
Have you found the Mark of Fertility that you sought?
Mother's recipe
...? Well, I'm not sure if there are any side-effects... I hope that this recipe may be of help to you.


Many of the immigrants that get sent back to Honduras claim that all they were looking for was more opportunities to earn more money and provide a better future for themselves and for their families bellow you can see a graph that shows the years with the highest unemployment rates in Honduras, the data were obtained from a report published by The World Bank. 2014 stands out the most.
Click on this link for access to more data from The World Bank.
Governments can’t prevent citizens from leaving Honduras nor prevent them from peacefully assembling and marching away. Doing so could be a fundamental violation of citizens’ rights and internationally recognized human rights. Also, the costs to mobilize any troops to defend blind stops on the borders is very controversial, and would be ineffective with substantial costs involved.


To protect the integrity of exams and other assessments, faculty may require students to turn on their webcams in order to monitor the assessment, however faculty must notify students of their intent to record the assessment at least three days in advance of any recording and, due to PA Wiretap Act, must be remind students of the plan to record immediately before any recording takes place. Students should, if possible, find a location in which they can access a webcam or create a secure location. If students do not have access to a camera or have concerns that prevent them from being able to use a camera, the student must make the faculty member aware of these concerns at least 48 hours before the time of the assessment. In such cases, faculty must work with the student to provide an alternate exam. Screensharing can also be an option to monitor student work if students are in separate Zoom rooms.
Students who now are in remote classes did not have an expectation that they would be recorded, and we therefore need to be more sensitive to this and strike a balance between protecting the integrity of the examination process, student privacy, and access to resources. There are differences between the use of a proctoring tool, such as Examity, and Zoom. With a proctoring tool, only the live proctor reviews the video. If prompted by specific behaviors that may indicate academic dishonesty, the faculty member may further review the video at a later date. When students enroll in online classes, they are made aware that webcams and other technologies are part of the course delivery. This also includes a notice of recording and use of webcams (due to PA Wiretap Act) when it comes to online proctoring.
For semesters beyond Spring 2020, students will know before enrolling that classes will be delivered virtually and that such technologies will be used, so expectations around the use of webcams would be communicated in advance. However, faculty will still need to carefully balance the use of webcams with student privacy and access to resources and will need to make accommodations for student who cannot access webcams for such reasons.


Coronation Street's Peter Ash shares a photo of son as he wins medals at swimming festival
Peter has a son named Ayden
by Charlotte RodriguesPeter Ash, who plays Paul Foreman in Coronation Street, has shared a photo of his son Ayden as he won medals in a swimming festival.
The actor posted a picture of his lad proudly holding up his medals and certificate.
 #ProudDad."
Friends and fans rushed to congratulate Ayden.
One wrote: "Well done."
A second commented: "Great achievement."
A third said: "Well done Ayden! What a lad!"
Peter, who joined Corrie last year, often shares pictures to his Instagram of his girlfriend Amy and behind-the-scenes snaps from the soap.
Read More: Coronation Street's Julia Goulding announces birth of first child
Currently, Peter's character Paul is in the middle of a huge historic sex abuse storyline.
After his mum Bernie and twin sister Gemma reunited with his former stepdad Kel, it was soon revealed that Kel had sexually abused Paul when he was a child.
When Paul was a young teenager, Kel groomed him into believing they were in a loving relationship.
But when Paul tried to kiss Kel as an adult, he was horrified to realise that the security guard didn't find him attractive older.
Read More: Coronation Street boss defends controversial shooting storyline
Recently Bernie and Gemma found out about Kel abusing Paul when they broke into his flat and found Polaroids of young shirtless boys, which included Paul.
Learning Kel wasn't being charged for his abuse of Paul, Bernie has been determined to make sure her ex is brought to justice.
This week, Bernie will pretend to be an underage boy named "Alfie" and begins messaging Kel.
Will Kel fall for it and incriminate himself, or will he realise he's about to be set up?
Leave us a comment on our Facebook page @EntertainmentDailyFix and let us know what you think!


My name is Lassana Konate, I am an undergraduate Information Technology student at Point Park University in Pittsburgh, Pennsylvania. I like innovating things and I am interested in sport, science, technology, robotic and artificial intelligence. The courses I am currently taking include Advance Programming, Server management, Business law2, principle of management and Introduction to art of poetry.


This site features some random thoughts about computer science and technology, and gives an overview of my profile.
This is my personal webpage. The opinions expressed here represent my own.
{{ "Recent posts:" }}
{% include pagination-newer.html %}
{{ content }}
{% for post in paginator.posts %}


V
- the type of elements in this graphW
- the type of edge weights in this graphpublic class WeightedHashGraph<V,W> extends java.lang.Object implements WeightedGraph<V,W>
Graph.Edge<V>
| Constructor and Description |
|---|
WeightedHashGraph()
Constructs an empty, directed WeightedHashMapGraph.
|
WeightedHashGraph(boolean isDirected)
Constructs an empty WeightedHashMapGraph.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
addEdge(V tail,
V head)
Adds an edge from the specified tail element to the specified head
element if the edge does not already exist.
|
boolean |
addEdge(V tail,
V head,
W weight)
Adds an edge with the specified weight from the specified tail element to
the specified head element if the edge does not already exist.
|
boolean |
addVertex(V elem)
Adds the specified element to this graph as a vertex.
|
void |
clear()
Removes all of the elements from this graph.
|
boolean |
containsEdge(V tail,
V head)
Returns true if this graph contains an edge from tail to head.
|
boolean |
containsVertex(V elem)
Returns true if this graph contains the specified element.
|
java.util.Set<V> |
getAdjacentElements(V elem)
Returns a set containing all elements that are adjacent to this element.
|
int |
getNumberOfEdges()
Returns the number of edges in this graph.
|
int |
getNumberOfVertices()
Returns the number of elements (vertices) in this graph.
|
java.util.Set<V> |
getVertices()
Returns the set of elements (vertices) in this graph.
|
W |
getWeight(V tail,
V head)
Returns the weight of the edge from tail to head if the edge exists and
has an associated weight, or null otherwise.
|
boolean |
isEmpty()
Returns true if this graph contains no elements (i.e., number of vertices
is 0).
|
W |
setWeight(V tail,
V head,
W weight)
Sets the weight of the edge from tail to head to the specified weight.
|
public WeightedHashGraph(boolean isDirected)
isDirected
- value to specify if this graph is directed (true) or
undirected (false)public WeightedHashGraph()
public boolean addEdge(V tail, V head)
public boolean addEdge(V tail, V head, W weight)
addEdge
in interface WeightedGraph<V,W>
tail
- the tail vertexhead
- the head vertexweight
- the weight of the edgepublic boolean addVertex(V elem)
public void clear()
public boolean containsEdge(V tail, V head)
containsEdge
in interface Graph<V>
tail
- the tail vertex of the edge who presence in this graph is to
be testedhead
- the head vertex of the edge who presence in this graph is to
be testedpublic boolean containsVertex(V elem)
containsVertex
in interface Graph<V>
elem
- the element whose presence in this graph is to be testedpublic java.util.Set<V> getAdjacentElements(V elem)
getAdjacentElements
in interface Graph<V>
elem
- the element whose neighbors we wantpublic int getNumberOfEdges()
getNumberOfEdges
in interface Graph<V>
public int getNumberOfVertices()
getNumberOfVertices
in interface Graph<V>
public java.util.Set<V> getVertices()
getVertices
in interface Graph<V>
public W getWeight(V tail, V head)
getWeight
in interface WeightedGraph<V,W>
tail
- the tail vertexhead
- the head vertexpublic boolean isEmpty()
public W setWeight(V tail, V head, W weight)
setWeight
in interface WeightedGraph<V,W>
tail
- the tail vertexhead
- the head vertexweight
- the weight of the edge to set


form-for(controller, disable, formFor, service, submitComplete, submitError, submitWith, validationRules)
This directive should be paired with an Angular ngForm object and should contain at least one of the formFor field types described below. At a high level, it operates on a bindable form-data object and runs validations each time a change is detected.
Parameters:
| Name | Type | Description |
|---|---|---|
controller |
Object | Two way bindable attribute exposing access to the formFor controller API. See below for an example of how to use this binding to access the controller. |
disable |
Boolean | Form is disabled. (Note the name is disable and not disabled to avoid collisions with the HTML5 disabled attribute). This attribute is 2-way bindable. |
formFor |
Object | An object on $scope that formFor should read and write data to. To prevent accidentally persisting changes to this object after a cancelled form, it is recommended that you bind to a copied object. For more information refer to angular.copy. |
service |
String | Convenience mehtod for identifying an $injector-accessible model containing both the validation rules and submit function. Validation rules should be accessible via an attribute named validationRules and the submit function should be named submit. |
submitComplete |
function | Custom handler to be invoked upon a successful form submission. Use this to display custom messages or do custom routing after submit. This method should accept a "data" parameter. See below for an example. (To set a global, default submit-with handler see FormForConfiguration.) |
submitError |
function | Custom error handler function. This function should accept an "error" parameter. See below for an example. (To set a global, default submit-with handler see FormForConfiguration.) |
submitWith |
function | Function triggered on form-submit. This function should accept a named parameter data (the model object) and should return a promise to be resolved/rejected based on the result of the submission. In the event of a rejection, the promise can return an error string or a map of field-names to specific errors. See below for an example. |
validationRules |
Object | Set of client-side validation rules (keyed by form field names) to apply to form-data before submitting. For more information refer to the Validation Types page. |
- Source:
Methods
-
(static) controller.registerFormField(formFieldScope, fieldName)
-
All form-input children of formFor must register using this function.
Parameters:
Name Type Description formFieldScope
$scope $scope of input directive
fieldName
String Unique identifier of field within model; used to map errors back to input fields
- Source:
-
(static) controller.registerSubmitButton(submitButtonScope)
-
All submitButton children must register with formFor using this function.
Parameters:
Name Type Description submitButtonScope
$scope $scope of submit button directive
- Source:
-
(static) controller.resetErrors()
-
Resets errors displayed on the
- Source:


public enum Events extends java.lang.Enum<Events>
| Enum Constant and Description |
|---|
Accepting
In this state, a bill is being received through the acceptor.
|
BillCasetteRemoved
(controlled by the bill acceptor) When the cassette is present,
this bit will be set to a logic high.
|
BillJammed
The acceptor can not stack a bill or return the bill due to an
error.
|
BillRejected
A bill will be returned to the patron because the acceptor found
it to be invalid.
|
Cheated
If the acceptor perceives a bill as being manipulated, this event
reports it.
|
CommunicationFailure
Serial communication is broken.
|
Credit
A valid credit message has been received.
|
Escrowed
The bill is valid and in sitting inside the bill acceptor.
|
Failure
If this state has been reported, the acceptor is implying that
a condition exists that prevents the bill acceptor from accepting
any more currency.
|
Generic
Fall back event in the event that we know something happened but
we're not quite sure what.
|
Idling
The bill acceptor has not processed a bill and is
waiting for a bill to be inserted.
|
InvalidCommand
An invalid command or message was sent by the slave.
|
PowerUp
The unit is just powering up and is not ready to accept bills.
|
Returned
When the master tells the slave to return a bill
(After an Escrowed message), this message is sent after the bill
has been successfully returned to the patron.
|
Returning
This state is set for the purpose of returning a bill to the
patron.
|
SerialData
Raised whenever serial data is sent or received
|
Stacked
After the bill has been successfully stacked into the cashbox,
this event is reported.
|
StackerFull
If this state has been reported, the acceptor can no longer
accept any bills.
|
Stacking
The acceptor remains in this state as it transports the bill
from the escrow position toward a secure position past all the
bill acceptors internal sensors, as well as the stacking
mechanism sensors.
|
| Modifier and Type | Method and Description |
|---|---|
int |
getIntId() |
static Events |
valueOf(java.lang.String name)
Returns the enum constant of this type with the specified name.
|
static Events[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final Events Idling
public static final Events Accepting
public static final Events Escrowed
public static final Events Stacking
public static final Events Stacked
public static final Events Returning
public static final Events Returned
public static final Events Cheated
public static final Events BillRejected
public static final Events BillJammed
public static final Events StackerFull
public static final Events BillCasetteRemoved
public static final Events PowerUp
public static final Events InvalidCommand
public static final Events Failure
public static final Events Credit
public static final Events SerialData
public static final Events CommunicationFailure
public static final Events Generic
public static Events[] values()
for (Events c : Events.values()) System.out.println(c);
public static Events valueOf(java.lang.String name)
name
- the name of the enum constant to be returned.java.lang.IllegalArgumentException
- if this enum type has no constant with the specified namejava.lang.NullPointerException
- if the argument is nullpublic int getIntId()


| Unmitigated epidemic (most severe)
*
|
No action is taken and R
0 is 2.3.
|
No action is taken and R
0 is 2.7.
|
No action is taken and R
0 is 1.7 overall (range of 1.5–1.8, depending on country).
|
| Social distancing |
Population-level social distancing, i.e. the maximum reduction in the final scale of the epidemic that can be achieved through a uniform reduction in the rate at which individuals contact one another, short of suppression (for South Africa, e.g., this equates to a 37–48% reduction in social contacts). |
Population-level social distancing, i.e. the maximum reduction in the final scale of the epidemic that can be achieved through a uniform reduction in the rate at which individuals contact one another, short of suppression (for all countries, this equates to a 20% reduction in social contacts). |
Not modelled. |
| Enhanced social distancing interventions (least severe) |
Population-level social distancing as above, with individuals aged 70 years old and older additionally reducing their social contact rates by 60%. |
Shielding of 60% of those aged 60 years old and older with a 60% reduction in transmission in addition to a 20% reduction in contacts outside the household and a 25% reduction in transmission from symptomatic individuals. |
Not modelled. |


SPECTRUM ,Technical society of COLLEGE OF ENGINEERING AND TECHNOLOGY, BHUBANESWAR,a place for all technical enthusiasts to learn, discover and innovate new things in the field of Technology and Design. The name of the club " SPECTRUM ", a contribution of our alumni of 2015 batch, is particularly used to describe the characteristic colors of visible light after passing through a prism, similarly students of CET consist of different skills within them and Spectrum acts like a prism, Spectrum recognises their skills helps them to strengthen it. This club was established by " Bikram Keshari Panda (2015 batch) ".Spectrum got its recognition in the year 2016 and got its workspace, funding and other facilities. Primarily this was his idea to have an electronics society in our college but with the efforts of other members we established two other wings - Software and Design.The other seniors who had their valuable contribution for this initiative were: Ankit Mishra, Zighnesh Biswal, Abhishek Dash, Avinash Nayak, Tapan Kumar Pal, Krutikesh Sahoo, Abhilash Das.


Set of hydrological functions including an R implementation of the hydrological model TOPMODEL, which is based on the 1995 FORTRAN version by Keith Beven. From version 0.7.0, the package is put into maintenance mode.
| Version: | 0.7.3 |
| Imports: | methods |
| Published: | 2018-02-01 |
| Author: | Wouter Buytaert |
| Maintainer: | Wouter Buytaert <w.buytaert at imperial.ac.uk> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | http://paramo.cc.ic.ac.uk/topmodel_tutorial |
| NeedsCompilation: | yes |
| In views: | Environmetrics |
| CRAN checks: | topmodel results |
| Reference manual: | topmodel.pdf |
| Package source: | topmodel_0.7.3.tar.gz |
| Windows binaries: | r-devel: topmodel_0.7.3.zip, r-release: topmodel_0.7.3.zip, r-oldrel: topmodel_0.7.3.zip |
| OS X binaries: | r-release: topmodel_0.7.3.tgz, r-oldrel: topmodel_0.7.3.tgz |
| Old sources: | topmodel archive |
| Reverse depends: | EcoHydRology |
| Reverse imports: | dynatopmodel |
Please use the canonical form https://CRAN.R-project.org/package=topmodel to link to this page.


We built a co-author network from ACM CHI and IEEE TVCG publications from the DBLP computer science bibliography. This network has 34,384 nodes and 45,347 edges.
We constructed a pathway network from KEGG pathways. It describes interactions of genes and metabolites. We also load additional mRNA expression and copy-number variation data from Cancer Cell Line Encyclopedia. This network has 11,355 nodes and 71,093 edges.


×Stay in Touch Contact the Bloom. team @TheBloomTeamNY on twitter ♥
Our Mission
The purpose of Bloom is to empower individuals. It is meant to operate as not only a source of information, but as a reminder that you are in control of your own body, and there is not one "normal" human experience. The Bloom team hopes to equip you with the tools to live your best life. Scroll down to meet us!
- The Bloom Team
Meet the Bloom Team!
Anwen Burns
Rising Junior at Bard High School Early College
I love history, and am learning to love coding!
<EMAIL_ADDRESS>Mica Tonge
Rising Senior at Midwood Highschool
In the midst of figuring myself out and it starts with coding!
<EMAIL_ADDRESS>Hope Koiki
Rising Junior at The Mary Louis Academy
I love a little bit of everything because my personality is different everyday!
<EMAIL_ADDRESS>Carolina Cortes-Rivera
Rising senior at Columbia Secondary School
I love animals and am developing a passion for coding!


A flavour is a group of templates for a specifc output like html, xhtml, xml, atom, rss, etc.
A flavour consists of at least the following templates:
See Flavours and Templates for more details.
A template specifies a specific portion of the output.
For example, here’s a head template for an html flavour:
<html>
<head>
<title>My blog</title>
</head>
<body>
See Flavours and Templates for more details.


Browse and connect with developers
{{ profile.status }} {{ profile.company && "at " + profile.company }}
{{ profile.location }}


public class OtpEpmd
extends java.lang.Object
Nodes wishing to contact other nodes must first request information from Epmd
before a connection can be set up, however this is done automatically by
OtpSelf.connect()
when necessary.
The methods publishPort()
and
unPublishPort()
will fail if an Epmd
process is not running on the localhost. Additionally
lookupPort()
will fail if there is no Epmd
process running on the host where the specified node is running. See the
Erlang documentation for information about starting Epmd.
This class contains only static methods, there are no constructors.
| Modifier and Type | Method and Description |
|---|---|
static java.lang.String[] |
lookupNames() |
static java.lang.String[] |
lookupNames(java.net.InetAddress address) |
static java.lang.String[] |
lookupNames(java.net.InetAddress address,
OtpTransportFactory transportFactory) |
static java.lang.String[] |
lookupNames(OtpTransportFactory transportFactory) |
static int |
lookupPort(AbstractNode node)
Determine what port a node listens for incoming connections on.
|
static boolean |
publishPort(OtpLocalNode node)
Register with Epmd, so that other nodes are able to find and connect to
it.
|
static void |
unPublishPort(OtpLocalNode node)
Unregister from Epmd.
|
static void |
useEpmdPort(int port)
Set the port number to be used to contact the epmd process.
|
public static java.lang.String[] lookupNames() throws java.io.IOException
java.io.IOException
public static java.lang.String[] lookupNames(java.net.InetAddress address) throws java.io.IOException
java.io.IOException
public static java.lang.String[] lookupNames(java.net.InetAddress address, OtpTransportFactory transportFactory) throws java.io.IOException
java.io.IOException
public static java.lang.String[] lookupNames(OtpTransportFactory transportFactory) throws java.io.IOException
java.io.IOException
public static int lookupPort(AbstractNode node) throws java.io.IOException
java.io.IOException
- if there was no response from the name server.public static boolean publishPort(OtpLocalNode node) throws java.io.IOException
node
- the server node that should be registered with Epmd.java.io.IOException
- if there was no response from the name server.public static void unPublishPort(OtpLocalNode node)
This method does not report any failures.
public static void useEpmdPort(int port)


Juventus star addresses future as Manchester United transfer talks gain pace
by HarigovindAmidst ongoing interest from Manchester United, Juventus star Emre Can has revealed that he is frustrated due to the lack of game time under Maurizio Sarri.
“I’m just an ambitious guy who always wants to compete at the highest level, but I’m also learning from this tough time when things are not going the way I was hoping,” Can told Kicker.
“I’m not playing games from the start, so I’m not happy, but I will stay strong and keep working on myself.”
“I’m often in the gym before or after training, doing extra shifts. I want to be ready,” he further added, before concluding:
“A lot can always happen in football.”
The German midfielder joined the Bianconeri from Liverpool in 2018, on a free transfer. Although he made 37 appearances for them in the 2018-19 season, he has been restricted to just four appearances – all four of them coming in the Serie A – so far in the ongoing 2019-20 season.
And on Monday, it was reported that the 25-year-old could be offloaded to Manchester United, as part of a player-plus-cash deal for superstar midfielder Paul Pogba.
It has also been understood that Bundesliga clubs Bayern Munich and Borussia Dortmund are interested in him as well.
Quotes via Express.


Michael Jackson's son Prince Michael gushes over 'gorgeous sister' Paris
Prince Michael has spoken out about how proud he is of his younger sister Paris Jackson as pop superstar Michael Jackson's kids get ready for Motown's 60th birthday
by James Brinsford, https://www.facebook.com/james.brinsfordMichael Jackson's children Prince Michael and Paris Jackson have shown how close they are as brother and sister.
Prince Michael, 22, has spoken in glowing terms about his sister Paris, 21, as they glammed up for the 60th birthday celebrations of Motown records.
The King of Pop's offspring gave a rare insight into their lives as they let the cameras follow them as they got ready.
Prince Michael and Paris spoke candidly about their sibling relationship and it became clear that there was plenty of love and a little rivalry between the pair.
Posting a pic of them on Instagram , Prince Michael wrote: "I don’t always dress up…but when I do it’s with my gorgeous sister @parisjackson. Stay classy my friends."
Model Paris soon responded to the Loyola Marymount University graduate and she was equally as sentimental with her reply.
Paris wrote: “i love this so much!! you are so handsome and did such an amazing job on stage, i get more proud of you each day. i love that we get to do these things together and so excited for what’s to come!! love you.”
As the pair got ready for the Motown event, they used a throwback to their father to help them with Rushka Bergman. He was the personal stylist for Michael Jackson and was also the creative consultant and costume designer for his This Is It concerts in London.
Paris was pleased with the pampering as she dressed in a bridal inspired gown.
She declared: “I feel like a princess. I never actually went to prom. I, uh, skipped it to go see Metallica so this feels nice. I would want my prom dress to look like this.”
Prince was also in reminiscing mode as he looked back at his childhood.
He spoke warmly about seeing Rushka with his father: “Growing up I got to see Rushka style my dad and put on jackets like this, you know? So it kind of comes full circle for me to be donning the robe, so to say.”
Hollywood Life has reported that since graduation, Prince has been spending his time with his charity Heal, in Los Angeles.
A source told the media outlet the charity is aimed “at raising money to help fight child hunger and homelessness in L.A.
Do you have a story to sell? Get in touch with us at<EMAIL_ADDRESS>or call us direct 0207 29 33033.


Prototype of an e-commerce app that allows you to share bulk purchases with other people in your neighbourhood.
View MoreA static, responsive website of a fictional yoghurt company that includes a database.
View MorePrototype of an app that aims to help encourage the community to bond through community gardening.
View MoreMobile and desktop mockup designs of a content heavy website for a fictional school named “Nu Vision Academy”.
View MoreAn interactive installation on the risks of climate change. VR and desktop versions are available.
View MoreVarious illustrations for various types of media based on the client’s concept and specifications that stick to brand guidelines.
View MoreHave any enquiries? Interested in collaborating? Drop an email and i’ll get back to you asap :)
Let's Talk


Class: Aws::SSM::Types::SendCommandRequest
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | (unknown) |
Overview
When passing SendCommandRequest as input to an Aws::Client method, you can use a vanilla Hash:
{
instance_ids: ["InstanceId"],
targets: [
{
key: "TargetKey",
values: ["TargetValue"],
},
],
document_name: "DocumentARN", # required
document_hash: "DocumentHash",
document_hash_type: "Sha256", # accepts Sha256, Sha1
timeout_seconds: 1,
comment: "Comment",
parameters: {
"ParameterName" => ["ParameterValue"],
},
output_s3_region: "S3Region",
output_s3_bucket_name: "S3BucketName",
output_s3_key_prefix: "S3KeyPrefix",
max_concurrency: "MaxConcurrency",
max_errors: "MaxErrors",
service_role_arn: "ServiceRole",
notification_config: {
notification_arn: "NotificationArn",
notification_events: ["All"], # accepts All, InProgress, Success, TimedOut, Cancelled, Failed
notification_type: "Command", # accepts Command, Invocation
},
}
Instance Attribute Summary
-
#comment ⇒ String
rw
User-specified information about the command, such as a brief description of what the command should do.
. -
#document_hash ⇒ String
rw
The Sha256 or Sha1 hash created by the system when the document was created.
-
#document_hash_type ⇒ String
rw
Sha256 or Sha1.
. -
#document_name ⇒ String
rw
Required.
-
#instance_ids ⇒ Array<String>
rw
Required.
-
#max_concurrency ⇒ String
rw
(Optional) The maximum number of instances that are allowed to execute the command at the same time.
-
#max_errors ⇒ String
rw
The maximum number of errors allowed without the command failing.
-
#notification_config ⇒ Types::NotificationConfig
rw
Configurations for sending notifications.
. -
#output_s3_bucket_name ⇒ String
rw
The name of the S3 bucket where command execution responses should be stored.
. -
#output_s3_key_prefix ⇒ String
rw
The directory structure within the S3 bucket where the responses should be stored.
. -
#output_s3_region ⇒ String
rw
(Optional) The region where the Amazon Simple Storage Service (Amazon S3) output bucket is located.
-
#parameters ⇒ Hash<String,Array<String>>
rw
The required and optional parameters specified in the document being executed.
. -
#service_role_arn ⇒ String
rw
The IAM role that Systems Manager uses to send notifications.
-
#targets ⇒ Array<Types::Target>
rw
(Optional) An array of search criteria that targets instances using a
Key
,Value
combination that you specify. -
#timeout_seconds ⇒ Integer
rw
If this time is reached and the command has not already started executing, it will not execute.
.
Instance Attribute Details
#comment ⇒ String
(rw)
User-specified information about the command, such as a brief description of what the command should do.
#document_hash ⇒ String
(rw)
The Sha256 or Sha1 hash created by the system when the document was created.
Sha1 hashes have been deprecated.
#document_hash_type ⇒ String
(rw)
Sha256 or Sha1.
Sha1 hashes have been deprecated.
Possible values:
- Sha256
- Sha1
#document_name ⇒ String
(rw)
Required. The name of the Systems Manager document to execute. This can be a public document or a custom document.
#instance_ids ⇒ Array
<String
> (rw)
Required. The instance IDs where the command should execute. You can specify a maximum of 50 IDs.
#max_concurrency ⇒ String
(rw)
(Optional) The maximum number of instances that are allowed to execute the command at the same time. You can specify a number such as “10” or a percentage such as “10%”. The default value is 50. For more information about how to use MaxConcurrency
, see Executing a Command Using Systems Manager Run Command.
#max_errors ⇒ String
(rw)
The maximum number of errors allowed without the command failing. When the command fails one more time beyond the value of MaxErrors
, the systems stops sending the command to additional targets. You can specify a number like “10” or a percentage like “10%”. The default value is 50. For more information about how to use MaxErrors
, see Executing a Command Using Systems Manager Run Command.
#notification_config ⇒ Types::NotificationConfig (rw)
Configurations for sending notifications.
#output_s3_bucket_name ⇒ String
(rw)
The name of the S3 bucket where command execution responses should be stored.
#output_s3_key_prefix ⇒ String
(rw)
The directory structure within the S3 bucket where the responses should be stored.
#output_s3_region ⇒ String
(rw)
(Optional) The region where the Amazon Simple Storage Service (Amazon S3) output bucket is located. The default value is the region where Run Command is being called.
#parameters ⇒ Hash
<String
,Array
<String
>> (rw)
The required and optional parameters specified in the document being executed.
#service_role_arn ⇒ String
(rw)
The IAM role that Systems Manager uses to send notifications.
#targets ⇒ Array
<Types::Target> (rw)
(Optional) An array of search criteria that targets instances using a Key
,Value
combination that you specify. Targets
is required if you don't provide one or more instance IDs in the call. For more information about how to use Targets
, see Executing a Command Using Systems Manager Run Command.
#timeout_seconds ⇒ Integer
(rw)
If this time is reached and the command has not already started executing, it will not execute.


Additional Inherited Members | |
| Public Attributes inherited from A_CO_DB | |
| $access_object | |
| $class_description | |
| $error | |
| $table_name | |
| Protected Member Functions inherited from A_CO_DB | |
| _create_read_security_predicate () | |
| _create_write_security_predicate () | |
| _create_security_predicate ( $write=false) | |
| Protected Attributes inherited from A_CO_DB | |
| $_pdo_object | |
| $_existing_record_objects | |
This is the base class for the security database. It assumes that it will have logins and Security ID table rows.
Definition at line 39 of file co_security_db.class.php.
| CO_Security_DB::__construct | ( | $in_pdo_object, | |
$in_access_object = NULL |
|||
| ) |
This is the initializer.
| $in_pdo_object | The PDO instance for this database. |
| $in_access_object | The access object (if any) for this login. |
Reimplemented from A_CO_DB.
Definition at line 45 of file co_security_db.class.php.
| CO_Security_DB::add_personal_token_from_current_login | ( | $in_to_id, | |
| $in_id | |||
| ) |
This adds a personal token, from one record, to the IDs of another record. This is a somewhat dangerous call, as it does not use a security predicate. That's deliberate, as we need to be able to change the security IDs of an item without necessarily being allowed to affect it.
| $in_to_id | The ID of the object we are affecting. |
| $in_id | The ID (personal token) to be added. |
Definition at line 119 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::count_all_login_objects_with_access | ( | $in_security_token | ) |
You give a security ID, and you will get a count of all login objects that have that token in their list (or are of that ID).
This is not restricted, and will count logins that we don't otherwise know about.
It does not count the "God" admin, which always has access.
| $in_security_token | An integer, with the requested security token. |
Definition at line 835 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::get_all_login_ids | ( | ) |
This returns all of the login IDs in the database.
This should only be called from the ID fetcher in the access class, as it does not do a security predicate.
Definition at line 374 of file co_security_db.class.php.
References A_CO_DB\execute_query().
Referenced by is_this_a_login_id().
| CO_Security_DB::get_all_login_objects | ( | $and_write = false | ) |
This is a security-vetted search for all login objects (visible to the current user).
| $and_write | If true, then we only want ones we have write access to. |
Definition at line 710 of file co_security_db.class.php.
References A_CO_DB\_create_security_predicate(), A_CO_DB\_instantiate_record(), and A_CO_DB\execute_query().
| CO_Security_DB::get_all_login_objects_with_access | ( | $in_security_token, | |
$and_write = false |
|||
| ) |
You give a security ID, and you will get all login objects that have that token in their list (or are of that ID).
This is restricted to use security vetting, so only logins visible to the current login.
| $in_security_token | An integer, with the requested security token. |
| $and_write | If true, then we only want ones we have write access to. |
Definition at line 755 of file co_security_db.class.php.
References A_CO_DB\_create_security_predicate(), A_CO_DB\_instantiate_record(), and A_CO_DB\execute_query().
| CO_Security_DB::get_all_personal_ids_except_for_id | ( | $in_id = 0 | ) |
This returns just the "personal" IDs for ALL logins, EXCEPT for the given ID.
This should only be called from the ID fetcher in the access class, as it does not do a security predicate.
| $in_id | The integer ID of the row we want exempted. If not specified, then all IDs are returned. |
Definition at line 247 of file co_security_db.class.php.
References A_CO_DB\execute_query().
Referenced by is_this_a_personal_id().
| CO_Security_DB::get_all_tokens | ( | ) |
This returns the entire list of IDs in the Security Database.
It should only ever be called by the "God" admin.
Definition at line 494 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::get_all_user_objects_with_access | ( | $in_security_token | ) |
You give a security ID, and you will get an array, with the user objects, associated with login objects that have that token in their list (or are of that ID).
This is security restricted, and will not return users that we don't otherwise know about.
| $in_security_token | An integer, with the requested security token. |
Definition at line 878 of file co_security_db.class.php.
References A_CO_DB\$access_object, and A_CO_DB\execute_query().
| CO_Security_DB::get_all_visible_logins | ( | ) |
This is an extremely simple function that gets the ID, Login ID (string), and name of logins visible to the current login. It's goal is to be extremely fast and result in a relatively small response.
Definition at line 517 of file co_security_db.class.php.
References A_CO_DB\_create_read_security_predicate(), and A_CO_DB\execute_query().
| CO_Security_DB::get_credentials_by_api_key | ( | $in_api_key | ) |
This is a special "raw" function for getting login credentials from an API key.
| $in_api_key | The API Key of the element. |
Definition at line 573 of file co_security_db.class.php.
References A_CO_DB\_instantiate_record(), and A_CO_DB\execute_query().
| CO_Security_DB::get_initial_record_by_id | ( | $in_id | ) |
This is a very "raw" function that should ONLY be called from a special check from the access class.
It has no security screening, as this is just for checking.
| $in_id | The ID of the element. |
Definition at line 604 of file co_security_db.class.php.
References A_CO_DB\_instantiate_record(), and A_CO_DB\execute_query().
| CO_Security_DB::get_initial_record_by_login_id | ( | $in_login_id | ) |
This is a very "raw" function that should ONLY be called from the access instance __construct() method (or a special check from the access class).
It is designed to fetch the current login object from its string login ID, so we can extract the id.
It has no security screening, as it needs to be called before the security screens can be put into place.
| $in_login_id | The login ID of the element. |
Definition at line 549 of file co_security_db.class.php.
References A_CO_DB\_instantiate_record(), and A_CO_DB\execute_query().
| CO_Security_DB::get_logins_that_have_any_of_my_ids | ( | ) |
This returns IDs that have our personal IDs.
Definition at line 293 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::get_logins_with_personal_ids | ( | ) |
This returns IDs that have personal IDs. This only works for the God admin.
Definition at line 341 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::get_multiple_records_by_login_id | ( | $in_login_id_array, | |
$and_write = false |
|||
| ) |
This is a security-screened multiple login fetcher.
Definition at line 647 of file co_security_db.class.php.
References A_CO_DB\_create_security_predicate(), A_CO_DB\_instantiate_record(), and A_CO_DB\execute_query().
Referenced by get_single_record_by_login_id().
| CO_Security_DB::get_personal_ids_for_id | ( | $in_id | ) |
This returns just the "personal" IDs for the given ID.
This should only be called from the ID fetcher in the access class, as it does not do a security predicate.
| $in_id | The integer ID of the row. |
Definition at line 208 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::get_security_ids_for_id | ( | $in_id, | |
| $no_personal | |||
| ) |
This returns just the security IDs (including the item ID, itself) for the given ID.
This should only be called from the ID fetcher in the access class, as it does not do a security predicate.
| $in_id | The integer ID of the row. |
| $no_personal | This is optional. If we DO NOT want personal tokens included, this should be set to true. |
Definition at line 63 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::get_single_record_by_login_id | ( | $in_login_id, | |
$and_write = false |
|||
| ) |
This is a security-screened method to fetch a single instance of a record object, based on its ID.
| $in_login_id | The login ID of the requested login object. |
| $and_write | If this is true, then we need the item to be modifiable. |
Definition at line 627 of file co_security_db.class.php.
References get_multiple_records_by_login_id().
| CO_Security_DB::i_have_all_ids | ( | $in_id | ) |
This method will check a given security record (indicated by its ID), and make sure that we have COMPLETE access to it. This means that we check ALL the ids, as well as the record's write (not read) token.
This is not "security-vetted," in order to make sure that we are looking at the complete record.
| $in_id | This is the ID of the record to check. |
Definition at line 460 of file co_security_db.class.php.
References A_CO_DB\execute_query().
| CO_Security_DB::is_this_a_login_id | ( | $in_id | ) |
This checks an ID, to see if it is a login ID.
| $in_id | The ID we are checking. Must be greater than 1. |
Definition at line 436 of file co_security_db.class.php.
References get_all_login_ids().
| CO_Security_DB::is_this_a_personal_id | ( | $in_id | ) |
This checks an ID, to see if it is a personal ID.
| $in_id | The ID we are checking. Must be greater than 1. |
Definition at line 415 of file co_security_db.class.php.
References get_all_personal_ids_except_for_id().
| CO_Security_DB::remove_personal_token_from_this_login | ( | $in_to_id, | |
| $in_id | |||
| ) |
This removes a personal token, from one record. This is a somewhat dangerous call, as it does not use a security predicate. That's deliberate, as we need to be able to change the security IDs of an item without necessarily being allowed to affect it.
| $in_to_id | The ID of the object we are affecting. |
| $in_id | The ID (personal token) to be removed. |
Definition at line 160 of file co_security_db.class.php.
References A_CO_DB\execute_query().


Use google maps to find the location of military conflicts between China and India, searching "Pangong Tso" gets a pin around 33.755517N 78.665208E
The lake gets it's Chinese name pronounced as Pangong Tso, the highland water surface is above sea level as high as 4425 meters. The water has salts, it freeze during winters, the ice spread 5KM to north and 134KM from west to east that cross over military conflict zone. We can enjoy the wonderful view around the lake for a little while and understand where it's going to happen, if the war isn't avoidable.
Over the 4225 meters above the Indian Ocean far south, the highland push young soldiers to his/her limits even if they are during strong age, lack of oxygen, hard to rescue if anything happened, men can't get his daily supply easily, but the view is really good, the sky is deep blue covering mountains, tourists enjoy the white clouds put down a little dark over snow top of mountains, icy water flow quietly through valley. It's not hard to think with common sense that people should keep themselves outside the water, which can bring a man to consciousless within 4 minutes due to hypothermia.
Back to the question: why Chinese come here to fight? CCP would talk like it's their ancient families land.
On the satellite map of Google Maps, there are many pictures. Most of them belong to Indian tourists, one can learn the outdoor condition from these pictures, view it anytime, it's on google.com.
But there are not so many pictures on China side, CCP block internet access to Google. Just like the great wall seperate their ancient anemies from their north, the Great FireWall seperate today's Chinese from understanding the rest world. They always like to build walls so they always complain outsiders who supposed to be eager to rob them.
On such highland, the normal combat mode would be: the tactical aircraft jets from both sides fight to control the air, then the winner start to attack on the land, after missiles exploding the key military equipments, helicopters fly over enemy head to clear the field, actually when helicopters come enemy soldiers would look like lambs waiting for slaughting.
In the same time, pilots and soldiers in military aircrafts can be supplied with extra oxygen and might be equiped with night-vision searching their counterparts in valleies.
On terrain like this, China military can not expect to fight like Battle of Triangle Hill during Korean War, or fight like vietnam soldier attack in dark forest like it during Vietnam War.
If Indian need new weapons to fight the war, Both US and Russian is selling weapons to Inida, France in Europe and even Isreal in middle East is doing the same. We'd kindly mention China that Australia just talked a military agreement of logistic mutual supply with India early this year.
Why it get a centralized pushing toward Beijin from geopolitical view of points?
There are 5 powers on Euro-Asia continent, Russian from the north, EU from the west, Arabian from the Middle East, and Inida from the south, all of them crashing toward China who is on the East Aisa. Beside that, the first island chain in west Pacific get from Japan to Taiwan, Phillipine and most countries in ASEAN support the rights of free and open navigation of the South China Sea. It happends because China CCP looks like they are anti-human civilization.
US would improve it's entity list against China, after push down the super manufacturer of telecommunication company Huawei, next step would be work against the silicon chip manufacturer SMIC. Currently the highest tech. make chips with 5nm, which is improving volume of production, while CCP get it from SMIC with 14nm possible. If ten year later CCP can luckily get 10nm chip production by themselves, the world shall be using 1nm then.
Yes, it's possilbe to use even 28nm to build missiles, but how to compare 28nm chipped missile to 5nm missile? Let's think about iPhone 6 to iPhone 12.
Beside the hardwares CCP can get for it's Army, software going to be another problem, which is at least not less harder than chips and hardwares.
So, if they go to war, CCP should get weaker and weaker technically, but this' not the only advantage on Indian side, India get the most advantage from Indian Ocean.
If they get a degree of agreement from the Union of India-Pacific Ocean, the Navy of India can easily shutdown CCP's supply route through the Strait of Malacca, which in turn shutdown China's oil supply and foreighn trade.
我同时用中文和英文写这一篇分析， 因为我相信多一个人来看，少一个人去死。 I use both English and Chinese because I hope that one more people learn the truth, one less go to the false war.


Geometry Models Sky Light Fog Balls
mediaAudio Image Video 360 Video Screen SVG
user interfaceText Button Icons Splash Dropdown Slider Overlay Radial
inputGamepad Haptics Touch Hands Accelerometer Gyroscope Compass
physicsBasic Car Terrain Jenga Chairs
animate locomotion misc


Hacklab Cosenza / Centro di Ricerca su Tecnologia e Innovazione
OSPF achieves better scalability than other routing protocols by supporting the split of all the AS’ routers into multiple areas, although it can also run in single-area mode (called backbone area or area 0).
To enable OSPFv2 on a router, use:
Router(config)# router ospf [process_id]
OSPF needs every router to have its own router ID, which can be set manually with:
Router(config-router)# router-id [a.b.c.d]
We use the network
command to enable OSPF on a specific interface:
Router(config-router)# network [address] [wildcard] area [area_id]
The Area ID must be the same for all the router belonging to the Single-Area we are configuring. It is advisable to use the value of 0.
To achieve better accuracy for the metric on faster interfaces, we can adjust the reference bandwidth with:
Router(config-router)# auto-cost reference-bandwidth [mbps]
This new reference has to be equal on all routers, otherwise we would have inconsistent cumulative costs for routes.
To display all of the adjacencies of an OSPF router:
Router# show ip ospf neighbor
If a neighbor isn't shown, it could be that the adjacency could not be formed. The two following commands:
Router# show ip protocols
Router# show ip ospf
displays OSPF process and router IDs. The first is mostly about routing (advertised networks, neighbours, default AD), the other with the SPF process and area information.
Router# show ip ospf interface
Router# show ip ospf interface brief
These two commands provide detailed and summary information, about router interfaces active in OSPF routing.
Aside from the ipv6
keyword in verification commands, the most notable difference is that there is no network
command, because OSPFv3 is enabled directly in interface configuration mode.
R1(config)# ipv6 unicast-routing
R1(config)# ipv6 router ospf 10
%OSPFv3-4-NORTRID: OSPFv3 process 10 could not pick a router-id,
please configure manually
R1(config-rtr)# router-id <IP_ADDRESS>
R1(config-rtr)# auto-cost reference-bandwidth 10000
R1(config-rtr)# interface f0/0
R1(config-if)# ipv6 ospf 10 area 0
Simplest possible interconnection between OSPF routers: just two, with nothing else on the link. Typical configuration for WANs.
Multiple OSPF routers are interconnected in an Ethernet (hence a multi-access and broadcast-capable medium) network.
Typically those OSPF router would be all connected to the same switch and members of the same VLAN.
Not every multi-access medium also allows broadcast. An example is Frame Relay.
In such networks endpoints must rely on Unicast communication to reach any other point in the network, and therefore musk know its address.
In a NBMA network, OSPF can be configured to operate in a hub-and-spoke fashion, with a "collection" of PtP links between a central router (hub) and all the others (spokes).
A virtual network that interconnects non-adjacent areas in a multi-area OSPF configuration.
A multi-access medium with n OSPF routers, would generate n(n-1)/2 adjancencies, exponentially growing with n.
Since LSAs are sent to every neighbour, the unnecessary adjancencies established on a multi-access network would cause extensive flooding.
The OSPF solution to this problem is to elect a Designated Router (DR) that will have the task to collect and distribute all the LSAs.
A Backup designated Router (BDR) is also elected to provide redundancy. All the other adjacent routers become DROTHERS.
A full adjancency is only formed between DROTHERS and DR/DBR. LSAs are only sent to DR/BDR by using the <IP_ADDRESS> multicast IP address (all-DR-routers). Only the DR will then flood the LSA to the <IP_ADDRESS> multicast IP (all-OSPF-routers).
To verify the role an OSPF router is playing in the multi-access network it belongs to, we can use, on the interface connecting to the multi-access network:
Router# show ip ospf interface
GigabitEthernet0/0 is up, line protocol is up
Internet address is <IP_ADDRESS>/24, Area 0
Process ID 1, Router ID <IP_ADDRESS>, Network Type BROADCAST, Cost: 1
Transmit Delay is 1 sec, State DROTHER, Priority 1
Designated Router (ID) <IP_ADDRESS>, Interface address <IP_ADDRESS>
Backup Designated Router (ID) <IP_ADDRESS>, Interface address <IP_ADDRESS>
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello due in 00:00:07
Index 1/1, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 1, maximum is 1
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 2, Adjacent neighbor count is 2
Adjacent with neighbor <IP_ADDRESS> (Designated Router)
Adjacent with neighbor <IP_ADDRESS> (Backup Designated Router)
Suppress hello for 0 neighbor(s)
From boot to convergence, OSPF undergoes several stages.
Router# show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
<IP_ADDRESS> 1 FULL/ BDR 00:00:32 <IP_ADDRESS> GigabitEthernet0/0
<IP_ADDRESS> 2 FULL/ DR 00:00:38 <IP_ADDRESS> Serial0/0/0
Normally a state other than FULL indicates a problem in forming an adjancency. However, 2-WAY is normal in multi-access networks.
2-WAY indicates that a DROTHER router still recognizes other DROTHER as its neighbors on the multi-access network, but will only keep the exchange of Hello packets in place, without flooding link-state advertisement.
Routers in an OSPF network elect the router with the higher priority as the DR, whith the second highest electing the BDR.
Priority ranges from 0 to 255 and can be tuned. If set to 0, a router cannot become DR. It is set to 0 by default on serial interfaces and 1 on multiaccess interfaces.
If priorities are equal, the routers with the two higher router IDs are elected as DR/BDR.
The router ID used in the election is, in order of preference, the one manually set, the higher IP on a loopback interface, the higher IP on another interface.
The election process lasts only a couple of seconds, so it's possible that a router with a lower router ID becomes the DR if not every OSPF router has completed the boot.
When a router with an higher router ID joins the network, it doesn't trigger a new election. Roles are fixed until:
In each case the BDR steps up as DR and the new BDR needs to be elected. A router with a priority higher than the newly-elected DR won't displace it, and will "settle" to be BDR.
The DR/BDR election process can be altered by configurations.
In the case where priorities are equal on all OSPF routers, DR election can be influenced by manipulating router IDs.
Manipulating the election process with the router ID is only feasable where they have been assigned with a rigorous criteria and it's difficult on large networks.
It's better to use priorities, which unlike the router ID are a per-interface value that allows an OSPF router to have different roles on different links.
To set the OSPF priority for an interface, use
Router(config-if)# ip/ipv6 ospf priority [0-255]
for OSPFv2 and v3, respectively.
If priority is changed after the election took place, the administrator must either
clear ip ospf process
and re-enabling to trigger a new election.To propagate a default static router with OSPFv2, first configure one on the edge router and then include it in the OSPF link-state updates:
Router(config)# ip route <IP_ADDRESS> <IP_ADDRESS> {next_hop | exit_iface}
Router(config)# router osf [process_id]
Router(config-router)# default-information originate
In the show ip route
output this propagated default router will appear with the codes O (learned through OSPF routing), * (candidate as default), and E1/E2 (external route of type 1 or 2).
Type 1 and 2 external routes differs in how the cost is computed: the first includes the internal, OSPF cost, to reach the edge router, while the other reports only the external cost.
It's the same for OSPFv3/IPv6 default routes ("ipv6
" versions of the commands and their output).
Hello and Dead intervals are per-interface values. The defaults are based on best practices and should be altered only after careful consideration. To modify them, use
Router(config-if)# ip/ipv6 ospf hello-interval [seconds]
Router(config-if)# ip/ipv6 ospf dead-interval [seconds]
Current values are included in the output of the show ip ospf interface [id]
command. By default Dead Interval is set to be 4x the value of the Hello Interval.
Broadly speaking, routing protocols can be attacked by broking adjancencies and falsifying routing informations included in routing updates. Consequences could be:
To mitigate attacks on routing protocols, we can sign and authenticate routing updates.
Each router verify each received routing update, and only updates verified as coming from neighbors knowing the authentication key are used to alter the routing table.
OSPFv2 supports 3 methods of authentication:
Router(config-if) ! GLOBALLY
Router(config-if)# ip ospf message-digest-key [key_id] md5 [pwd]
Router(config-router)# area [area_id] authentication message-digest
Router(config-if)! PER-INTERFACE
Router(config-if)# ip ospf message-digest-key [key_id] md5 [pwd]
Router(config-if)# ip ospf authentication message-digest
They can be enabled simultaneously, but mind that the interface configuration overrides the global one.
Passwords have to be same between 2 neighbours, but not across an entire OSPF area.
OSPFv3 use the authentication capabilities mandated by the IPv6 protocol, namely the IPSec standard, enabled with the ipv6 ospf authentication ipsec spi
command.
OSPF routing simply cannot behave correctly if correct adjancencies are not formed. Common issues when forming adjacencies between two neighbors are:
network
command.


Mourinho's arrival could reactivate some star's renewals!
by BeSoccerJose Mourinho's arrival has generated an earthquake in Tottenham. The signing of the Portuguese to manage the team may have caused footballers such as Eriksen, Alderweireld and Vertonghen to change their minds and now renew their contracts with the team.
Despite all the controversy he has caused, if there is one thing Mourinho guarantees in his teams, it is character and competitivity, something which footballers often like.
The Portuguese coach has unleashed madness after his signing for Tottenham and his arrival could have an affect on the sporting level beyond imagination.
Mauricio Pochettino's presence as the coach made a number of players reluctant to continue in the ranks of the London team, but the hiring of the Portuguese has totally changed the situation.
Featured links
- Mourinho replaces Pochettino at Tottenham
- The latest football transfers news and rumours
- Wales, golf, Madrid... in that order
- Luis Enrique returns to Spain national team
According to the 'Daily Mirror', Mourinho's signing has been well received by Christian Eriksen, Toby Alderweireld and Jan Vertonghen, three of the team's big players.
The information indicates that this group of players would now consider a renewal by the English team, because they think they can be important with the Portuguese and hope that this raises the level of the club.


This paragraph will not be shown in Full-Screen mode, so it will not be matched.
This paragraph along with button located below will be shown in Full-Screen mode.


To support people, fight climate breakdown and save wildlife. The Arctic Sunrise ship is sailing to the heart of the Indian Ocean to document biodiversity on the Saya de Malha Bank, this area is home to unique ecosystems which a strong Global Ocean Treaty would help protect. We will provide updates throughout the expedition.
Open the map


☰ menu
0 cup(s)
Water
0 cup(s)
Tea
0 cup(s)
Coffee
0 cup(s)
Yogurt
0 cup(s)
Juice
0 cup(s)
Wine
×
Profile
Input
Game


The following submissions have received a checkpoint prize.
{{CD.checkpointData.generalFeedback}}
{{result.feedback && result.feedback.length > 0 ? result.feedback : 'N/A'}}


Kogi microdosing la croix ramps brunch, intelligentsia photo booth gentrify. Swag four loko poke, actually deep v enamel pin affogato pitchfork schlitz cloud bread before they sold out. Fingerstache migas iPhone church-key yr thundercats listicle sustainable +1. Lumbersexual direct trade selfies portland. Etsy la croix squid kale chips. Asymmetrical irony next level, tote bag fanny pack tumblr kogi live-edge chartreuse snackwave. Green juice pork belly af, tote bag gochujang post-ironic listicle fingerstache fam plaid freegan umami polaroid echo park VHS. Vegan polaroid mustache, lumbersexual twee meggings four dollar toast slow-carb viral fixie tattooed mixtape schlitz drinking vinegar fam. Man bun iceland art party jean shorts godard, narwhal gentrify health goth hoodie salvia portland air plant chicharrones. Cliche tilde authentic intelligentsia. Health goth poke taiyaki gluten-free williamsburg ennui jianbing, narwhal fingerstache actually messenger bag pug unicorn asymmetrical. Thundercats tousled +1 cray tattooed viral, franzen you probably haven't heard of them. Meh man braid pour-over, photo booth four dollar toast echo park man bun swag tattooed. Viral yr keffiyeh, meditation helvetica kinfolk vaporware pork belly vape af sartorial thundercats.


Gerardo Santana
Curriculum Vitae(CV) - Download
I am a recently graduated software engineer. I worked as intern in two companies during my last year of studies, developing different kinds of software solutions. Motivated to develop my skills and grow professionally.


--- layout: archive title: Zulip Chat Archive permalink: /stream/179818-Lean-Together-2019/topic/Further.20mathlib.20maintainers.html ---
Quick thought: One of the suggested topics is “Further mathlib maintainers”. I suggest having this discussion as early as possible, so that we can reap potential benefits during the remainder of the workshop, and so that there is the possibility of live apprenticeship.
It will be easy enough to shift these discussions around later. We can talk on Monday.
Which organisation would fund post docs whose job it was to help maintain mathlib? Would MS?
Because of this issue I've been enquiring around potential sources of funding in the UK but no luck yet
currently no one does, I volunteered because I have strange tastes
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC