Interactive visualization¶
This tutorial introduces user interaction features of visualizer window.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | # examples/Python/Advanced/interactive_visualization.py
import numpy as np
import copy
import open3d as o3d
def demo_crop_geometry():
print("Demo for manual geometry cropping")
print(
"1) Press 'Y' twice to align geometry with negative direction of y-axis"
)
print("2) Press 'K' to lock screen and to switch to selection mode")
print("3) Drag for rectangle selection,")
print(" or use ctrl + left click for polygon selection")
print("4) Press 'C' to get a selected geometry and to save it")
print("5) Press 'F' to switch to freeview mode")
pcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
o3d.visualization.draw_geometries_with_editing([pcd])
def draw_registration_result(source, target, transformation):
source_temp = copy.deepcopy(source)
target_temp = copy.deepcopy(target)
source_temp.paint_uniform_color([1, 0.706, 0])
target_temp.paint_uniform_color([0, 0.651, 0.929])
source_temp.transform(transformation)
o3d.visualization.draw_geometries([source_temp, target_temp])
def pick_points(pcd):
print("")
print(
"1) Please pick at least three correspondences using [shift + left click]"
)
print(" Press [shift + right click] to undo point picking")
print("2) Afther picking points, press q for close the window")
vis = o3d.visualization.VisualizerWithEditing()
vis.create_window()
vis.add_geometry(pcd)
vis.run() # user picks points
vis.destroy_window()
print("")
return vis.get_picked_points()
def demo_manual_registration():
print("Demo for manual ICP")
source = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
target = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_2.pcd")
print("Visualization of two point clouds before manual alignment")
draw_registration_result(source, target, np.identity(4))
# pick points from two point clouds and builds correspondences
picked_id_source = pick_points(source)
picked_id_target = pick_points(target)
assert (len(picked_id_source) >= 3 and len(picked_id_target) >= 3)
assert (len(picked_id_source) == len(picked_id_target))
corr = np.zeros((len(picked_id_source), 2))
corr[:, 0] = picked_id_source
corr[:, 1] = picked_id_target
# estimate rough transformation using correspondences
print("Compute a rough transform using the correspondences given by user")
p2p = o3d.registration.TransformationEstimationPointToPoint()
trans_init = p2p.compute_transformation(source, target,
o3d.utility.Vector2iVector(corr))
# point-to-point ICP for refinement
print("Perform point-to-point ICP refinement")
threshold = 0.03 # 3cm distance threshold
reg_p2p = o3d.registration.registration_icp(
source, target, threshold, trans_init,
o3d.registration.TransformationEstimationPointToPoint())
draw_registration_result(source, target, reg_p2p.transformation)
print("")
if __name__ == "__main__":
demo_crop_geometry()
demo_manual_registration()
|
This script executes two applications of user interaction: demo_crop_geometry()
and demo_manual_registration()
.
Crop geometry¶
12 13 14 15 16 17 18 19 20 21 22 23 | def demo_crop_geometry():
print("Demo for manual geometry cropping")
print(
"1) Press 'Y' twice to align geometry with negative direction of y-axis"
)
print("2) Press 'K' to lock screen and to switch to selection mode")
print("3) Drag for rectangle selection,")
print(" or use ctrl + left click for polygon selection")
print("4) Press 'C' to get a selected geometry and to save it")
print("5) Press 'F' to switch to freeview mode")
pcd = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
o3d.visualization.draw_geometries_with_editing([pcd])
|
This function simply reads a point cloud and calls draw_geometries_with_editing
. This function provides vertex selection and cropping.
Note
Open3D has VisualizerWithEditing
class that inherits Visualizer
class. It adds graphic user interaction feature. Likewise examples in Customized visualization, VisualizerWithEditing()
can be explicitly used instead draw_geometries_with_editing([pcd])
.
Once a geometry is displayed, press Y
twice to align geometry with negative direction of y-axis. After adjusting viewing orientation, press K
to lock screen and to switch to the selection mode.
Tip
The practical step for selecting area is to align the geometry with arbitrary axis using orthographic projection model. This trick makes selection easier, because it avoids self-occlusion hassle due to perspective projection.
To select a region, use either mouse drag
(rectangle selection) or ctrl + left mouse click
(polygon selection). The below example shows a selected area using a polygon.
Note that the selected area is dark shaded. To keep the selected area and discard the rest, press C
. It pops up a dialog box to save cropped geometry. Cropping result is shown after saving.
To finish selection mode, press F
to switch to freeview mode.
Manual registration¶
Select correspondences¶
The following script register two point clouds using point-to-point ICP. It gets initial alignment via user interaction.
51 52 53 54 55 56 57 58 59 60 | def demo_manual_registration():
print("Demo for manual ICP")
source = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_0.pcd")
target = o3d.io.read_point_cloud("../../TestData/ICP/cloud_bin_2.pcd")
print("Visualization of two point clouds before manual alignment")
draw_registration_result(source, target, np.identity(4))
# pick points from two point clouds and builds correspondences
picked_id_source = pick_points(source)
picked_id_target = pick_points(target)
|
The script reads two point clouds, and visualize the point clouds before alignment.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 | def pick_points(pcd):
print("")
print(
"1) Please pick at least three correspondences using [shift + left click]"
)
print(" Press [shift + right click] to undo point picking")
print("2) Afther picking points, press q for close the window")
vis = o3d.visualization.VisualizerWithEditing()
vis.create_window()
vis.add_geometry(pcd)
vis.run() # user picks points
vis.destroy_window()
print("")
return vis.get_picked_points()
|
Function pick_points(pcd)
makes an instance of VisualizerWithEditing
. To mimic draw_geometries
, it creates windows, adds geometry, visualize geometry, and terminates. A novel interface function from VisualizerWithEditing
is get_picked_points()
that returns the indices of user-picked vertices.
To pick a vertex, press shift + left click
on a window. If a vertex is selected, the visualizer window overlays a sphere on a selected vertex. For example, after picking three vertices in the source point cloud, it shows:
This will print:
Picked point #58481 (2.14, 1.56, 1.53) to add in queue.
Picked point #77321 (2.86, 1.92, 1.09) to add in queue.
Picked point #42639 (3.28, 1.53, 1.45) to add in queue.
Press q
to close window. The next step is to pick the same correspondences in the target point cloud. The color of sphere helps to identify the same correspondence.
This will print:
Picked point #54028 (1.62, 1.81, 1.23) to add in queue.
Picked point #97115 (2.45, 2.19, 1.11) to add in queue.
Picked point #47467 (2.75, 1.71, 1.45) to add in queue.
Tip
To get a good registration result, try to pick more than three points that are well-distributed in the scene. Using a vertex on the corner region is a good way to easily pick the right correspondence.
Registration using user correspondences¶
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | assert (len(picked_id_source) >= 3 and len(picked_id_target) >= 3)
assert (len(picked_id_source) == len(picked_id_target))
corr = np.zeros((len(picked_id_source), 2))
corr[:, 0] = picked_id_source
corr[:, 1] = picked_id_target
# estimate rough transformation using correspondences
print("Compute a rough transform using the correspondences given by user")
p2p = o3d.registration.TransformationEstimationPointToPoint()
trans_init = p2p.compute_transformation(source, target,
o3d.utility.Vector2iVector(corr))
# point-to-point ICP for refinement
print("Perform point-to-point ICP refinement")
threshold = 0.03 # 3cm distance threshold
reg_p2p = o3d.registration.registration_icp(
source, target, threshold, trans_init,
o3d.registration.TransformationEstimationPointToPoint())
draw_registration_result(source, target, reg_p2p.transformation)
print("")
|
The later part of the demo computes an initial transformation based on the user-provided correspondences. This script builds pairs of correspondences using Vector2iVector(corr)
. It utilizes TransformationEstimationPointToPoint.compute_transformation
to compute the initial transformation from the correspondences. The initial transformation is refined using registration_icp
.
The registration result follows:


|
blmc_drivers
|
| ▼ src | |
| ▼ catkin | |
| ▼ hardware | |
| ▼ blmc_drivers | |
| ▼ demos | |
| const_torque_control.hpp | |
| demo_2_motors.cpp | |
| demo_3_motors.cpp | |
| demo_8_motors.cpp | |
| demo_single_board.cpp | |
| pd_control.cpp | |
| pd_control.hpp | |
| sine_position_control.hpp | |
| sine_torque_control.hpp | |
| ▼ include | |
| ▼ blmc_drivers | |
| ▼ devices | |
| analog_sensor.hpp | License BSD-3-Clause |
| can_bus.hpp | License BSD-3-Clause |
| device_interface.hpp | License BSD-3-Clause |
| leg.hpp | License BSD-3-Clause |
| motor.hpp | License BSD-3-Clause |
| motor_board.hpp | License BSD-3-Clause |
| ▼ utils | |
| os_interface.hpp | |
| ▼ src | |
| analog_sensors.cpp | This file defines a class to get access to analogue sensors |
| can_bus.cpp | This file defines classes that allow communication with a Can network |
| motor.cpp | |
| motor_board.cpp | This file implements the classes from "blmc_drivers/devices/motor_board.hpp" |


PADME : Get to your ships!
The PILOTS and ARTOO UNITS run for the Naboo fighter craft stacked in the
hanger bay. ONE OF THE PILOTS jumps into a fighter right above where ANAKIN
is hiding.
FIGHTER PILOT : Better find a new hiding place, kid. I'm taking this ship.
The ship begins to levitate out of the hanger. BATTLE DROIDS fire at it as
it falls in behind five other fighters. ARTOO whistles to ANAKIN from a
second fighter not far away. ANAKIN runs and jumps into the second fighter
to hide.
Two Naboo starfighters exit the main hanger. A tank fires at them, hitting
one of them, which causes it to pinwheel into the ground and EXPLODE.
CAPTAIN PANAKA, SABE and NABOO TROOPS rush into the hanger and overwlm the
few remaining BATTLE DROIDS.
PADME, OBI-WAN, and QUI-GON join forces with
CAPTAIN PANAKA.
PADME : My guess is the Viceroy is in the throne room.
She looks to QUI-GON.
QUI-GON : I agree.
They start to head for the exit, on the way passing the fighter where
ANAKIN is hiding. ARTOO whistles a greeting as ANAKIN peeps out of the
cockpit.
ANAKIN : Hey! Wait for me.
QUI-GON : No, Annie, you stay there. Stay right where you are.
ANAKIN : But, I...
QUI-GON : Stay in that cockpit.
They head for the exit. As they are about to go through the door, suddenly
everyone scatters, revealing DARTH MAUL standing in the doorway. CAPTAIN
PANAKA, PADME, and HER TROOPS back away. QUI-GON and OBI-WAN step forward.
QUI-GON : (Cont'd) We'' handle this...
The TWO JEDI take off their capes and ignite their laser swords. DARTH MAUL
takes off his cape, and ignites his laser sword. Both ends of the sword
light up.
At the far end of the hanger, SIX WHEEL DROIDS roll in and transform into
their battle position. ARTOO calls ANAKIN's attention to the DROIDS.
The
JEDI begin to fight the Sith Lord.
ANAKIN : Oh, no...
The DROIDS begin to advance and start firing on PADME and HER TROOPS.
ANAKIN : (Cont'd) We gotta do something, Artoo.
ARTOO whistles a reply. Suddenly, the ship's systems go on, and the ship
begins to levitate.
ANAKIN : (Cont'd) All right, thanks Artoo! Great idea! I'll take over. Let's see...
ANAKIN steers the ship toward the DROIDS.
He pushes a button, and the ship
begins to shake.
ANAKIN : (Cont'd) Where's the trigger? Oops, wrong one... Maybe this one...
ANAKIN pushes a second button, and the lasers begin to fire, wiping out
several DESTROYER DROIDS.
ARTOO whistles a cheer.
ANAKIN : (Cont'd) Yeah, all right. "Droid blaster." Yeah!
The JEDI are engaged in a fierce sword fight with DARTH MAUL.
They have
moved into the center of the hanger. While the WHEEL DROIDS are momentarily
distracted by ANAKIN, CAPTAIN PANAKA, PADME, and HER TROOPS exit into a
palace hallway.
The WHEEL DROIDS start firing at ANAKIN.
There are EXPLOSIONS all around
him.
ANAKIN : (Cont'd) Oops... shield up! Always on the right... shields always on the right.
ANAKIN flips several switches, and the after-burner ignites.
ANAKIN : (Cont'd) I know we're moving.
The fighter rockets out of the hanger. ARTOO and ANAKIN hold on for dear
life.
ANAKIN : (Cont'd) Oops!! Wrong one.
ARTOO beeps.

ARTOO beeps.
ANAKIN : (Cont'd) I know... I didn't push anything.
The SITH LORD's moves are incredible. He is fighting the TWO JEDI at once,
flipping into the air, outmaneuvering them at every turn.
The Naboo fleet leaves the planet and heads toward the space station.
RIC OLIE : Bravo Flight A, take on the fighters. Flight B, make the run on the transmitter.
BRAVO TWO : Roger, Bravo Leader.
The fleet approaches the space station. Many Federation fighters exit the
hangers and attack.
RIC OLIE : Enemy fighters straight ahead!
JAR JAR's clumsiness works for him in the battle. He gets caught up in the
wiring of a blasted DROID, dragging the torso around with him, the DROID's
gun firing randomly, accidently blasting SEVERAL DROIDS in one process.
OOM-9 decides to send in the WHEEL DROIDS and gives the signal. HUNDREDS OF
WHEEL DROIDS roll out of the transports and head down toward the battle.
They slowly roll through the deflector shields, then transform themselves
once they get on the other side. The GUNGANS blast the WHEEL DROIDS with
energy balls. The DESTROYER DROIDS blast many GUNGANS.
A giant dogfight ensues. ANAKIN's fighter flies into space above Naboo.
ARTOO beeps a worried concern.
ANAKIN : The Autopilot is searching for what other ships?
ARTOO beeps and whistles.
ANAKIN : (Cont'd) There is no manual override, Artoo. You'll have to rewire it or something.
ARTOO chirps that he's trying.
ANAKIN : (cont'd) Look! There they are! That's where the autopilot is taking us.
ANAKIN's fighter flies toward the Federation Battleship.
The SITH LORD drives the JEDI out of the hanger and nto the power generator
area next door.
Three swords are crossed in an intense display of swordmanship. The JEDI
and the SITH LORD fight their way across the narrow bridge of the Theed
power generator. DARTH MAUL jumps onto the bridge above them. The JEDI
follow, one in front of the SITH LORD and one behind. They continue their
sword fight.
PADME, CAPTAIN PANAKA, EIRTAE, SABE and THIER TROOPS are trapped in a
hallway by BATTLE DROIDS.
PADME : We don't have time for this, Captain.
CAPT. PANAKA : Let's try the outside stairway.
CAPTAIN PANAKA blasts a hole in the window, and they make their way outside
the building onto a ledge about six stories above a raging waterfall. SABE,
EIRTAE and about TWENTY NABOO SOLDIERS stay in the hallway to hold off the
BATTLE DROIDS.
PADME, CAPTAIN PANAKA, and about TEN OTHER NABOO SOLDIERS are lined up
along the edge. They have pulled small attachments out of their pistols and
fire at a ledge about four stories above them. Thin cables shoot out of the
pistols and are embedded into the ledge. PADME, CAPTAIN PANAKA, and the
OTHERS begin to climb up the wall.
The GUNGAN ARMY is no match for the DESTROYER DROIDS.
JAR JAR tries to run
from the BATTLE DROIDS.
GENERAL CEEL : Retreat! Retreat!
The GUNGANS begin to turn and run, on foot, on their kaadu, and in wagons.
 JAR JAR scrambles to avoid being hit by one of the
balls. FOUR DESTROYER DROIDS aren't so lucky. They get blasted by the
energy balls.
The GUNGANS renew their attack on the DROID ARMY.
JAR JAR's bumbling
destroys several more DESTROYER DROIDS.
ANAKIN finds himself in the middle of the space battle. A ship explodes
behind him (over his left shoulder).
ANAKIN : Whoo, boy! This is tense!
He looks forward to see enemy ships approaching head on.
ANAKIN : (Cont'd) : Oops! Artoo, get us off Autopilot!
ARTOO screams a reply.
ANAKIN : (Cont'd) I've got control?
ANAKIN fips switches.
ANAKIN : (Cont'd) Okay, let's go left!
He moves the controls left and the ship responds, turning left.
ANAKIN : (Cont'd) Yes... I've got control. You did it, Artoo!
ARTOO beeps
ANAKIN : (Cont'd) Go back!?! Qui-Gon told me to stay in this cockpit and that's what I'm gonna do. Now c'mon!
An enemy fighter comes into his sights. ANAKIN pushes the controls and
instead of firing, his fighter accelerates past the enemy ship.
ANAKIN : (Cont'd) Oops! Whoa!
Now the enemy ship is on his tail. He tries evasive maneauvers.
ANAKIN : (Cont'd) I'll try spinning, that's a good trick.
ANAKIN rolls the ship as ARTOO screams desperately.
ANAKIN : (Cont'd) I know we're in trouble! Hang on! The way out of this mess is the way we got into it.
ARTOO beeps a reply.
ANAKIN : (Cont'd) Which one? This one?
ANAKIN yanks on the reverse thrusters and the ship slows instantly- the
enemy fighter shoots past and explodes against the space station.
The SQUADRON attacks the space station.
RIC OLIE : Bravo flight... go for the central bridge.
BRAVO TWO : Roger, Bravo Leader.
The attack is fruitless.
RIC OLIE : Their deflector shield is too strong. We'll never get through it.
Meanwhile, ANAKIN is being chased by another fighter. ARTOO shrieks.
ANAKIN : I know, Artoo! This isn't Podracing!
The enemy ship fires and hits ANAKIN's fighter, sending it into a spin.
ARTOO screams.
ANAKIN : (Cont'd) We're hit!
ANAKIN regains control as his ship enters the space station hanger.
ANAKIN : (Cont'd) Great gobs of bantha poo-doo!
ANAKIN's ship dodges parked transport ships and other obstacles. A huge
bulkhead blocks his way. ARTOO beeps.
ANAKIN : (Cont'd) I'm trying to stop! I'm trying to stop! Whoa!
ANAKIN hits the reverse thrusters and the ship skids to a stop on the
hanger deck. ARTOO givesout a worried whistle.
ANAKIN : (Cont'd) All right! All right! Get the system started!
ANAKIN ducks down to adjust a control panel.
ANAKIN : (Cont'd) Everything's overheated. All the lights are red.
ARTOO sees DROIDS appraoching, and beeps frantically.
The laser sword battle continues on the small catwalk around the vast power
pit. DARTH MAUL kicks OBI-WAN off one of the ramps and he falls several
levels. QUI-GON knocks the DARK LORD off another ramp, and he lands hard on
a ramp two levels below. QUI-GON jumps down after him. The DARK LORD backs
away along the catwalk into a small door. QUI-GON follows as OBI-WAN runs
to catch up.
 DARTH MAUL makes it down several
walls of deadly rays before they close. QUI-GON is one wall away from the
DARK LORD.
OBI-WAN is just starting into it and is five walls way from
DARTH MAUL.
The JEDI must wait until the next pulse to advance down the corridor.
OBI-WAN is impatient and paces, waiting for the wall of rays to open.
QUI-GON sits and meditates. The SITH LORD tries to patch up his wounds.
A window in the hallway blasts apart. PADME, CAPTAIN PANAKA, and HER
SOLDIERS climb into the hallway. They head for the door to the throne roo.
 PADME turns
around and sees TWO MORE appear at the far end of the hallway, trapping
them in the middle.
PADME throws down her pistol and turns to CAPTAIN PANAKA.
PADME : Throw down your weapons. They win this round.
CAPT. PANAKA : But we can't...
PADME : Captain, I said throw down your weapons.
CAPTAIN PANAKA and HIS MEN throw down their weapons.
A DESTROYER DROID blasts one of the shield generators, causing it to
EXPLODE.
The protective shield begins to weaken and fall apart.OOM-9 sees
the shield weaken and orders his tanks forward. The GUNGAN GENERAL signals
a retreat as the tanks enter the battle.
The GUNGANS flee as fast as they can. JAR JAR is blown off his KAADU and
lands on one of the tank guns.  JAR JAR is afraid.
JAR JAR hangs from the tank barrel as it moves along. Finally, he jumps
onto a KAADU behind a GUNGAN WARRIOR.
EXPLOSIONS from the tank fire are
everywhere. It is chaos.
The electric rays cycle as QUI-GON sits meditating. The wall of the deadly
rays turn away, and OBI-WAN starts running toward QUI-GON and the DARK
LORD.
When the wall between QUI-GON and DARTH MAUL opens, QUI-GON is in a
split second fighting the DARK LORD with a ferocity not seen before. They
move into the area at the end of the corridor called the melting pit, a
small area that is mostly made up of a deep hole.
The electron ray gates begin to close. OBI-WAN tries to make it to the
melting pit but is caught one gate short. He slides to a stop just before
he hits the deadly electron field.
QUI-GON and DARTH MAUL battle around the melting pit as a frustrated
OBI-WAN watches.
DARTH MAUL cathces QUI-GON off guard. The SITH makes a quick move, bashes
his lightsaber handle into QUI-GON's chin, and runs him through. QUI-GON
slumps to the floor in a heap.
The GUNGANS have beeb overrun. Some flee into the hills, chased by BATTLE
DROIDS on STAPS.
Many OTHERS are herded into groups by BATTLE DROIDS and
DESTROYER DROIDS.
JAR JAR and GENERAL CEEL are held in a small group with OTHER OFFICERS.
JAR JAR : Dissa bad, berry bombad.
GENERAL CEEL : Mesa hopen dissa working for da Queen.
PADME, CAPTAIN PANAKA, and SIX OTHER OFFICERS are brought by TEN BATTLE
DROIDS before NUTE and RUNE and FOUR NEIMOIDIAN COUNCIL MEMBERS.
 Time for you to sign the treaty... and end this pointless debate in the Senate.
SADBE dressed like the Queen appears in the doorway with SEVERAL TROOPS.
Several destroyed battle droids can be seen in the distance.
SABE : I will not be signing any treaty, Viceroy, because you've lost!
NUTE and THE OTHERS are stunned to see a SECOND QUEEN.
NUTE yells at the TEN GUARDS in the room.
NUTE : After her! This one is a decoy!
SIX OF THE DROIDS rush out of the throne room after SABE.
NUTE turns to PADME.
NUTE : (Cont'd) Your Queen will not get away with this.
PADME slumps down on her throne and immediately hits a security button that
opens a panel in her desk opposite CAPTAIN PANAKA.
PADME grabs two pistols, tosses one of the to CAPTAIN PANAKA and one to an
OFFICER.
She takes a third pistol and BLASTS the last of the BATTLE DROIDS.
The OFFICERS rush to the door control panel as PADME hits the switch to
close the door. The OFFICER at the door jams the controls. CAPTAIN PANAKA
throws more pistols to the OTHER GUARDS.
The NEIMOIDIANS are confused and
afraid.
PADME : Now, Viceroy, this is the end of your occupation here.
NUTE : Don't be absurd. There are too few of you. It won't be long before hundreds of destroyer droids break in to rescue us.
OBI-WAN screams as the pulsing electron gate opens, and the SITH LORD
attacks him. The DARK LORD is relentless in his assault on the young JEDI.
OBI-WAN and DARTH MAUL use the Force to fling objects at each other as they
fight. DARTH MAUL seems to have the upper hand as OBI-WAN grows weary.
DARTH MAUL catches OBI-WAN off guard, and the JEDI slips into a melting
pit. He is barely able to hold onto a nozzle on the side of the pit. DARTH MAUL
grin evilly at OBI-WAN as he kicks OBI-WAN's lightsaber down the
endless shaft.
The SITH LORD smiles as he goes in for the kill. At the last moment,
OBI-WAN jumps up out of the pit, calls QUI-GON's lightsaber to hi, throwing
DARTH MAUL off. The young JEDI swings with a vengeance, cutting the SITH
down. DARTH MAUL falls into the melting pit to his death.
OBI-WAN rushes over to QUI-GON, who is dying.
OBI-WAN : Master! Master!
QUI-GON : It is too late... It's...
OBI-WAN : No!
QUI-GON : Obi-Wan promise... promise me you'll train the boy...
OBI-WAN : Yes, Master...
QUI-GON : He is the chosen one... he will... bring balance... train him!
QUI-GON dies. OBI-WAN cradles his Master, quietly weeping.
ANAKIN peeks over the edge of the cockpit to see BATTLE DROIDS surrounding
the ship. He ducks back down.
ANAKIN : Uh oh. This is not good.
He looks at the dashboard to see red lights.
ANAKIN : (Cont'd) The systems are still overheated, Artoo.
The BATTLE DROID CAPTAIN walks up to the ship and sees ARTOO.
BATTLE DROID CAPTAIN : Where's your pilot?
ARTOO beeps a reply.
BATTLE DROID CAPTAIN : (Cont'd) You're the pilot?
ARTOO whistles.
BATTLE DROID CAPTAIN : (Cont'd) Let me see your identification!
ANAKIN sees the dashboard lights go from red to green.
ANAKIN : Yes... we have ignition.
He flips the switch and the engine starts.
BATTLE DROID CAPTAIN : (seeing Anakin) You! Come out of there or we'll blast you!
ANAKIN : Not if I can help it! Shields up!
ANAKIN flips a switch and the ship levitates, knocking over the BATTLE
DROID CAPTAIN.
The OTHER DROIDS shoot, but the lasers are deflected by
ANAKIN's shields. ARTOO beeeps.
ANAKIN : (Cont'd) This should stop them.
ANAKIN fires lasers as the ship begins to rotate.
ANAKIN : (Cont'd) ...and take this!
He presses a button and launches two torpedos which miss the DROIDS.
ANAKIN : (Cont'd) Darn... I missed!
The two torpedos fly down a hallway and explode inside the reactor room.
ANAKIN : (Cont'd) Let's get out of here!
ANAKIN's ship roars through the hanger deck, bouncing over the DROIDS.
ANAKIN : (Cont'd) Now, this is Podracing! Whoopee!
TEY HOW turns to CAPTAIN DOFINE.
TEY HOW : Sir, we're losing power... There is some problem with the main reactor...
DOFINE : Impossible!! I don't...
The bridge explodes.
RIC OLIE watches in amazement as the Federation battleship starts to
explode from the inside out.
BRAVO TWO : What's that?? It's blowing up from the inside.
RIC OLIE : I don't know, we didn't hit it.
BRAVO THREE : Look! One of ours! Outta the main hold!!
Suddenly, all of the DROIDS begin to shake upside down, run around in
circles, then stop. The GUNGANS carefully move out to inspect the FROZEN
DROIDS.
JAR JAR pushes one of the BATTLE DROIDS, and it falls over.
JAR JAR : Wierdind...
ANAKIN and ARTOO follow the squad of yellow Naboo starfighters into the
main hanger.
RIC OLIE and the OTHER PILOTS gather around as thye exit their ships.
BRAVO TWO : He flew into the hold, behind the deflector shield and blasted the main reactor...
BRAVO THREE : Amazing... They don't teach that in the academy.
ANAKIN's ship skids to a stop behind the other Naboo starfighters. RIC
OLIE, BRAVO TWO, the OTHER PILOTS, and GROUND CREW rush to his ship.
RIC OLIE : We're all accounted for. Who flew that ship?
ANAKIN sheepishly opens the cockpit and stands up. All the PILOTS stare in
amazement.
ANAKIN : I'm not going to get into trouble, am I?
ARTOO beeps. oh. oh.
The large, grand cruiser of the Supreme Chancellor lands in the courtyard
of the main hanger. CAPTAIN PANAKA and TWENTY TROOPS guard NUTE GUNRAY and
RUNE HAAKO.
OBI-WAN, the QUEEN, and her HANDMAIDENS stand before the
NEIMOIDIANS.

The main ramp of the cruiser is lowered as OBI-WAN and CAPTAIN PANAKA lead
the VICEROY and HIS ASSISTANT toward the ship. The GRAND CHANCELLOR
PALPATINE and SEVERAL REPUBLIC GUARDS descend the walkway, followed by YODA
and SEVERAL OTHER JEDI MASTERS.
The CHANCELLOR PALPATINE is greeted by the QUEEN.
AMIDALA : Congratulations on your election, Chancellor. It is so good to see you again.
PALPATINE : It's good to be home. Your boldness has saved our people, Your Majesty. It is you who should be congratulated. Together we shall bring
peace and prosperity to the Republic.
OBI-WAN greets YODA and the OTHER JEDI as CAPTAIN PANAKA takes the
NEIMODIANS onto the cruiser.
The sun streams into the multi-windowed room at a low angle. It is not
quite sunset. YODA paces before OBI-WAN, who is kneeling in the center of
the room.
YODA : Confer on you, the level of Jedi Knight the Council does. But agree on you taking this boy as your Padawan learner, I do not.
OBI-WAN : Qui-Gon believed in him. I believe in Qui-Gon.
YODA : The Chosen One the boy may be; nevertheless, grave danger I fear in his training.
OBI-WAN : Master Yoda, I gave Qui-Gon my word. I will train Anakin. Without the approval of the Council if I must.
YODA : Qui-Gon's defiance I sense in you. Need that, you do not. Agree, the council does. Your apprentice, young Skywalker will be.
QUI-GON's body goes up in flames as the JEDI COUNCIL, the QUEEN, SIO
BIBBLE, CAPTAIN PANAKA, the HANDMAIDENS, and ABOUT ONE HUNDRED NABOO
TROOPES, TWENTY OTHER JEDI, PALPATINE, OBI-WAN (standing with ANAKIN), JAR
JAR, BOSS NASS, and TWENTY OTHER GUNGAN WARRIORS watch. There is a drum
roll that stops. Doves are released, and the body is gone. ANAKIN looks to
OBI-WAN.
OBI-WAN : He is one with the Force, Anakin... You must let go.
ANAKIN : What will happen to me now?
OBI-WAN : I am your Master now. You will become a Jedi, I promise.
To one side, MACE WINDU turns to YODA.
MACE WINDU : There is no doubt. The mysterious warrior was a Sith.
YODA : Always two there are. No more... no less.
MACE WINDU : But which one was destroyed, the master or the apprentice?
They give each other a concerned look.
CHILDEREN SING and throw flowers on the passing GUNGAN SOLDIERS.
The CROWDS
CHEER.
It is a grand parade.
QUEEN AMIDALA stands next to the SUPREME CHANCELLOR PALPATINE, ANAKIN,
OBI-WAN, SIO BIBBLE, and the JEDI COUNCIL.
ARTOO stands in front of the
QUEEN'S HANDMAIDENS and whistles at the parade. QUEEN AMIDALA and PALPATINE
smile at one another
In the parade are BOSS NASS and his GUARDS, JAR JAR and GENERAL CEEL.
The
GUNGANS ride KAADU.
 EVERYONE CHEERS.
The parade marches on.
|


Testing
Hiding
Tags
Delete This Page
Save
x
Delete this page?
(Note: you cannot delete the only page.)
Delete
Cancel
Title
Save
Delete
This is a text area. [[Hiding]]
Title
Edit
Delete
This is a text area.
Hiding
+
Accept
Cancel
textArea
FileSaver.js, saveDocument.js, searchBar.js, textArea.js, textile.js, utilities.js, elementAdder.js, initElement.js
Hiding^^Testing
1
testing
testing
Title
Save
Delete
This is a text area.
Title
Edit
Delete
This is a text area.


Task module for the RTOS Porting Interface. More...
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
Data Structures | |
| struct | TaskP_Params_s |
| Basic SemaphoreP Parameters. More... | |
Macros | |
| #define | OS_TICKS_IN_MILLI_SEC 1 /* 1000us tick */ |
| Number Ticks by OS in 1 millisecond. | |
Typedefs | |
| typedef enum TaskP_Status_e | TaskP_Status |
| Status codes for TaskP APIs. | |
| typedef void * | TaskP_Handle |
| Opaque client reference to an instance of a TaskP. More... | |
| typedef struct TaskP_Params_s | TaskP_Params |
| Basic SemaphoreP Parameters. More... | |
Enumerations | |
| enum | TaskP_Status_e { TaskP_OK = 0, TaskP_FAILURE = (-(int32_t)1) } |
| Status codes for TaskP APIs. More... | |
Functions | |
| TaskP_Handle | TaskP_create (void *taskfxn, const TaskP_Params *params) |
| Function to create a task. More... | |
| TaskP_Status | TaskP_delete (TaskP_Handle *handle) |
| Function to delete a task. More... | |
| void | TaskP_Params_init (TaskP_Params *params) |
| Initialize params structure to default values. More... | |
| void | TaskP_sleep (uint32_t timeout) |
| Function for Task sleep in units of OS tick. More... | |
| void | TaskP_sleepInMsecs (uint32_t timeoutInMsecs) |
| Function for Task sleep in units of msecs. More... | |
| void | TaskP_setPrio (TaskP_Handle handle, uint32_t priority) |
| Function for Task sleep. More... | |
| TaskP_Handle | TaskP_self (void) |
| Function returns the Task handle of current task. | |
| TaskP_Handle | TaskP_selfmacro (void) |
| Function returns the Task handle of current task.This is an inline function. | |
| void | TaskP_yield (void) |
| Function Yield processor to equal priority task. | |
| uint32_t | TaskP_isTerminated (TaskP_Handle handle) |
| Check if task is terminated. More... | |
Task module for the RTOS Porting Interface.
============================================================================
| typedef void* TaskP_Handle |
Opaque client reference to an instance of a TaskP.
A TaskP_Handle returned from the TaskP_create represents that instance and is used in the other instance based functions
| typedef struct TaskP_Params_s TaskP_Params |
Basic SemaphoreP Parameters.
Structure that contains the parameters are passed into TaskP_create when creating a TaskP instance.
| enum TaskP_Status_e |
| TaskP_Handle TaskP_create | ( | void * | taskfxn, |
| const TaskP_Params * | params | ||
| ) |
Function to create a task.
| taskfxn | Function pointer of the task. |
| params | Pointer to the instance configuration parameters. |
| TaskP_Status TaskP_delete | ( | TaskP_Handle * | handle | ) |
Function to delete a task.
| handle | A TaskP_Handle returned from TaskP_create |
| uint32_t TaskP_isTerminated | ( | TaskP_Handle | handle | ) |
Check if task is terminated.
Typically a task MUST be terminated before it can be deleted.
| void TaskP_Params_init | ( | TaskP_Params * | params | ) |
Initialize params structure to default values.
| params | Pointer to the instance configuration parameters. |
| void TaskP_setPrio | ( | TaskP_Handle | handle, |
| uint32_t | priority | ||
| ) |
Function for Task sleep.
| handle | A TaskP_Handle returned from TaskP_create. |
| priority | New priority to be set. |
| void TaskP_sleep | ( | uint32_t | timeout | ) |
Function for Task sleep in units of OS tick.
| timeout | sleep ticks. |
| void TaskP_sleepInMsecs | ( | uint32_t | timeoutInMsecs | ) |
Function for Task sleep in units of msecs.
| timeoutInMsecs | sleep in units of msecs. |


Train with me!
NASM Certified Personal Trainer, NASM Certified Nutrition Coach (in progress)
***Pricing: $40/month or $10/week
Thanks for visiting! If interested, DM @jaceylifts on Instragram for a personalized monthly workout program! Please leave a like and have a great day:)
This work is licensed under a Creative Commons Attribution 4.0 International License.


General Information
I love talking with developers and people learning to code! Please feel free to reach out to me :)
Please only use phone contact for urgent inquiries. Otherwise, Twitter and email are the best ways to reach me.
I love talking with developers and people learning to code! Please feel free to reach out to me :)
Please only use phone contact for urgent inquiries. Otherwise, Twitter and email are the best ways to reach me.


WITNESS LIST
Licensing & Administrative Procedures Committee
March 15, 2011 - 8:00 AM
For:
Burdette, Scott (FACT)
Hearne, Richard Brian (FACT- Foundation Appraiser Coalition of TX)
Jones Oates, Sara (Self; Foundation Appraiser's Coalition of Texas)
Levy, Lori (TX Assoc. of Realtors)
Against:
Davis, Johnnie (Self; Lender's e-amc, LLC)
On:
Oldmixon, Douglas (TX Appraiser Licensing & Certification Board)
Registering, but not testifying:
For:
Gonzalez, Daniel (Texas Association of Realtors)
Massingill, Gavin (Foundation Appraisers Coalition of Texas)
Against:
Embrey, Celeste (Texas Bankers Association)
Fleming, John (Texas Mortgage Bankers)
Roberts, Jack (Bank of America)
Rodgers, Kelly (Wells Fargo Bank)
For:
Choate, Elizabeth (Texas Veterinary Medical Association)
Epstein, Louise (Self)
Guerra Jr., Joseph (Houston Humane Society)
Hardy, Monica (Texas Humane Legislation Network)
Jantzen, Charles (Houston SPCA)
Morton, John (Texas Veterinary Med. Ass.)
Roberts, Tammy (The Humane Society of North Texas)
Spence, Alan (Texas Academy of Animal Control Officers)
Against:
Beard, Daniel (Self)
Bishea, Kandee (Self)
Brisco, Dwight (Self)
Burnett, Raymond (Sherriff's Assn of Texas)
Carter, Terry (Self)
Collins, Dr. Dwayne (Self)
Epperson, Steve (Professional Canine Breeders Association)
Gardner, Wes (Self)
Hammonds, Gary (Endangered Breeds Assn & SELF & A.D.B.A. American Dog Breeders
1
WITNESS LIST
Against:
Assn.E.B.A.)
Holibaugh, Tonia (Self)
Hopper, Renee (Self)
Huslig, Martine (Responsible Pet Owners Alliance Briard Club of America)
Kralik, Martin (Self; Responsible Pet Owners Alliance)
Lewis, Gib (Self; Texas Wildlife Assoc Responsible Pet Owners Assoc)
Lundberg, Tom (Endangered Breeds Association)
Maddox, Michael (Pet Industry Joint Advisory Council Texas Pet Industry Coalition)
Martenson, Dale (Self)
Nelson, Jean (Caddo Kennel Club Canine Animal Rescue Effort)
Palmer, Stephanie (East TX Dog Lovers Club)
Tapley, David (Animal Owners Association of Texas)
Turner, Elizabeth (Self)
Whittington, Sara (Lonestar Borzoi Club)
Yarnall, Robert (American Canine Association)
On:
Kuntz, William (Texas Department of Licensing & Regulation)
Registering, but not testifying:
For:
Alsup, Angela (Self)
Belanger, Brooke (Self)
Chapman, Marge (Lowrider Dachshund Kennel)
Coker, Diane (Self)
Covey, Julie (Fox Terrier Rescue of Central & North Texas)
Dell Prette, Lexa (Self)
Ducran, Lesley (Self)
Dukett, Kelsey (Self)
Dwyer, Kelley (Self)
Embrey, Celeste (Self)
Fahy, Nancy (Self)
Ferguson, Sherry (Houston Humane Society)
Ferguson, Taylor (Self)
Flatt, Christen (Self)
Forsythe, Andrew (Self)
Fourmigue, Suzanne (Self)
Friedman, Kimberly (Self)
Garcia, Patricia (Self)
Gauthier, Mary Gwynne (Self)
Godfrey, Shelley (Self)
Guha-Castle, Sudeshua Jasmine (Self)
Hansen, Kristy (Self)
Hays, Sheryl (Self)
Herzog, Jan (Self)
2
WITNESS LIST
For:
Herzog, Vance (Self)
Hightower, Susan (Self)
Hoffman, Alice (Self)
Holloway, Cile (Texas Humane Legislation Network)
Johnson, Audra (Self)
Jonon, Frances (Austin Humane Society)
Kemptner, Sara (Trevor Rees Jones Family)
King, Danielle (Self)
Kuehl, Carrie (Self)
Lehe, Denise (Self)
Marquette, Christine (Self)
McCullough, Missy (Self)
McIntyre, William (Self)
Michel, Michelle (Self)
Murphy, Wendy (Self)
Noel, Adele (Self)
Nordyke, Patt (Texas Federation of Animal Care Societies)
Oneil, Jeanne (Self)
Oppenheimer, Carol (Self)
Paquette, Nicole (Humane Society of the United States)
Peterson, Darren (Self)
Peterson, Kay (Self)
Pollard, Nancy (Self)
Potts, Tara (Self)
Quintana, Leah (Self)
Randall, Joan (Self)
Randall, Mary (Self)
Reynolds, Diana (Self)
Roberts, Melissa (Self)
Rodgers, Kelly (Self)
Rush, Lisa (Self)
Russell, Megan (Self)
Ruston-Smith, Shana (Self)
Ruth, Joy (Self)
Samson, Scott (Self)
Samudio, Ernest (Self)
Schuelke, Stacy (Houston Humane Society)
Scott, Yvette (Self)
Sheridan, Mary Lou (Self)
Smith, Stacy (Humane Society of Flower Mound)
Soliz, David (Self)
Starr, Lisa (Self)
Thomas, Jacqueline (Self)
Thune, Asha (Self; Emancipet)
Trimble, Skip (Self; Texas Humane Legislation Network)
3
WITNESS LIST
For:
Valls, Patricia (Self)
Verret, Timothy (Self)
Weinstein, Jonathan (Self)
Whitehouse, Rebecca (Self)
Whitley, Tracey (Self)
Against:
Barnett, Bobbie (Self)
Boggs, Janell (Self)
Carter, Mary P. (Self; Swedish Vallhund Club of America)
Collins, Cynthia (Self)
Darby, Mike (East Texas Dog Lovers Assn. Animal Owners Assn. of Texas)
Favia del Core Borromeo, Marida (Self; Exotic Wildlife Association)
Gandee, Debbie (Self)
Gonzalez, Veronica (Self)
Hernandez, Dominick (Self)
Homer, Mark (Responsible Pet Owners Alliance)
Kosanda, Stephen (Self)
Lundberg, Elise (Self)
McDowra, Cae (Self)
Nelson, Paul (Myself)
Reeder, Margaret (Greyhound Rescue Austin)
Senff, Cyndy (Self; Mike Mobley)
Smith, Andy (Self)
Tidwell, Vicki (Self)
Turner, Bob (Texas Poultry Federation Texas Sheep & Goat Raisers Assn)
Turner, John (Self)
Whitaker, Prue (Self)
For:
Stabler, Lonnie (Self; Texas Sign Association)
Registering, but not testifying:
For:
Bennett, Joey (Texas Business Advertising Alliance)
On:
Kuntz, Bill (Texas Department of Licensing & Regulation)
HB 1637 - Committee Substitute (Thompson)
For:
Levy, Lori (TX Assoc. of Realtors)
4
WITNESS LIST
Registering, but not testifying:
For:
Gonzalez, Daniel (Texas Association of Realtors)
On:
Oldmixon, Douglas (TX Real Estate Commission)
For:
Hooser, Greg (Texas Surplus Lines Association)
Registering, but not testifying:
For:
Dover, Alicia (Associated Plumbing-Heating-Cooling Contractors of Texas)
Shelley, Dan (Plumbing Heating and Air Conditioning, Association)
For:
Finucane, James (Texas Fire Sprinkler Contractors Assoc. and Western States Fire Prot)
McCain, Carol (Membership of Texas Fire Sprinkler Contractors Association)
Speight, Calvin (Plumbers Local 68)
Against:
Briers, Stanley (Self; TX Plumb, A/C, & Mech. Cont. Assoc.)
Registering, but not testifying:
For:
Smith, Billy (Local Union 669)
Smolka, Douglas (Self)
On:
Lockerman, Mark (Texas Department of Insurance- State Fire Marshal)
Maldonado, Paul (Texas Department of Insurance- State Fire Marshal)
For:
Knight, Joe (Texas Association of Realtors)
Against:
Kincaid, Mark (Texas Trial Lawyers Ass'n)
Longley, Joe (Self; Policyholders of America. Org)
Maxwell, Philip (Self)
Registering, but not testifying:
For:
Gonzalez, Daniel (Texas Association of Realtors)
Against:
Wendell, Ware (Texas Watch)
5
WITNESS LIST
For:
Woller, Joseph (Foundation Appraisers Coalition of Texas FACT)
On:
Oldmixon, Douglas (TX Appraiser Licensing & Certification Board)
For:
Briers, Stanley (Self; TX Plumbing, Air Conditioning & Mechanical Contractors Association)
Registering, but not testifying:
For:
Dover, Alicia (Associated Plumbing Heating Cooling Contractors of Texas)
Shelley, Dan (Plumbing, Heating and Air Conditioning, Ass)
6


|
Logged in as =$employee['name'];?> |
Logout
|
||
AccountAdmin Section |
Member since: =$interval;?> daysTotal fares completed: =$rides->num_rows;?>Total Earned: =floatval($amount['sum(fare)']);?>Average Rating: =floatval($employees['rating']);?>ActionDelete | Edit |
|
| About | Terms | Privacy |


Dear Friend, First, I must apologise to you for using this medium to communicate to you about this project. I am a highly placed official of Government of Nigeria and also a founding member of the ruling party in Power now,the Peoples Democratic Party(PDP).My committee - The Niger Delta Development Corporation(NDDC)-which is in charge of managing and supervising the disbursement of oil sales revenues for the Nigerian government which covers payment to foreign and local contractors who has executed contracts for our country.The revenues under our control runs into several hundred of millions of dollars monthly.Myself and other colleagues in the NDDC are currently in need of a foreign partner with whose bank account we shall transfer the sum of Forty Nine Million Five Hundred Thosand United States Dollars($49.5m).This fund was accrued from various over invoicing of foreign contractors payments made over the years. The Total fund is presently waiting in the Government Account named CBN/FGN INDEPENDENT REVENUE account number 400-939134 with J.P.MORGAN CHASE BANK,New York.You can do your independent verification of this. However, by virtue of our position as civil servants and members of the NDDC, we cannot acquire this funds in our name. This is because as top civil servants, we are not allowed by law of the land to own or operate bank accounts outside our country for now. I have been delegated as a matter of trust by my colleagues, to look for an overseas partner in whose account we would transfer the fund Hence the reason for this mail.We shall be Transferring the money to your account with your company as the beneficiary and you are been paid for a contract which you executed for our country through the NDDC and any other Federal Ministry that we decide to use to siphon the funds through. For your support and partnership,please reply me to negotiate your fees or the percentage you wish to be paid when the funds arrive your bank account.You must however note that this transaction, withregards to our disposition to continue with you, is subject to these terms. Firstly, our conviction of your transparency. Secondly, that you treat this transaction with utmost secrecy and confidentiality. Finally and above all, that you will provide an account that you have absolute control over. The transaction, although discrete, is legitimate and there is no risk or legal disadvantages either to ourselves or yourself now or in the future as we have put in place perfect mchineries that will ensure a hitch free transfer into your account upon acceptance. The transfer will be effected to your account within ten-fourteen (10-14) working days as soon as we reach an agreement and you furnish me with a suitable bank account and company name and address with all your contact numbers including fax number. I am looking forward to doing business with you and do solicit your confidentiality in this transaction, Please mail your response to me. Yours faithfully, Dr. Femi Petersen.


import _ from 'lodash';
import initialState from './initialState';
import { reducer as runBuildReducer } from './runBuild';
import { reducer as runTestReducer } from './runTest';
import { reducer as clearTestOutputReducer } from './clearTestOutput';
import { HOME_FETCH_PROJECT_DATA_SUCCESS } from '../../home/redux/constants';
import { reducer as checkTestCoverageReducer } from './checkTestCoverage';
const reducers = [
runBuildReducer,
runTestReducer,
clearTestOutputReducer,
checkTestCoverageReducer,
];
export default function reducer(state = initialState, action) {
let newState;
switch (action.type) {
// Handle cross-topic actions here
case HOME_FETCH_PROJECT_DATA_SUCCESS:
return {
...state,
runBuildRunning: !!_.get(action.data, 'bgProcesses.runningBuild'),
runTestRunning: !!_.get(action.data, 'bgProcesses.runningTest'),
};
case 'REKIT_PORTAL_OUTPUT':
if (action.data.type === 'build') {
return {
...state,
runBuildOutput: [...state.runBuildOutput || [], ...action.data.output],
};
} else if (action.data.type === 'test') {
return {
...state,
runTestOutput: [...state.runTestOutput || [], ...action.data.output],
};
}
break;
case 'REKIT_TOOLS_BUILD_FINISHED':
return {
...state,
runBuildRunning: false,
};
case 'REKIT_TOOLS_TEST_FINISHED':
return {
...state,
runTestRunning: false,
};
default:
newState = state;
break;
}
return reducers.reduce((s, r) => r(s, action), newState);
}
|


Security
Our safety measures
The platform is designed to meet both the Cloud Security Principles and the common security needs of data classified as ‘official’:
- data in transit is protected by HTTPS from the client to the platform
- IPSec secures data when routing traffic across the platform to your application
- connections from your application to backing services require TLS
- we host on Amazon Web Services (AWS) - their physical security procedures are robust and audited
- data in backing services can be encrypted at rest
- separation between users of the platform is enforced by Cloud Foundry’s internal authentication and access control system
- Linux containers provide the boundary between running application instances
- the platform relies on robust operational security and processes (see below)
- it’s possible to change and revoke your team members’ permissions and roles to manage the service (tenants will be able to add new users later in 2018)
- we use 2-factor authentication, short-lived credentials and IP restriction policies for identity and access management to protect AWS resources
- shared credentials are rotated to minimise risk of unauthorised access
- Amazon Cloudtrail audits and monitors AWS activity
- the CloudFoundry events API provides audit information about the use of your service
How we manage change, vulnerabilities and incidents
The platform is built and maintained by a government team within the Government Digital Service, and these are the established working practices:
- everyone with production access has Security Check (SC) clearance
- code changes are approved by team members who haven’t worked on the feature
- we do pair programming whenever possible
- system configuration and access privileges are under source code control and so is documentation
- control changes to the production platform are overseen by civil servants
- we code in the open and our code is available in the alphagov project on GitHub - search for the ‘paas’ repositories
- we have a tried and tested incident management approach
- reports of incidents are published and available on our status page
- external penetration tests (IT Health Checks) of the platform are carried out annually and it’s our policy to address all issues discovered with a CVSS score of medium or above
- when security updates become available, we start working on them within one working day, prioritising fixes to critical severity vulnerabilities
If you need more information, contact us at:
<EMAIL_ADDRESS>Who’s responsible for what
| Your responsibility | Our responsibility |
|---|---|
| Security of the application design and code | Security of the platform |
| Applying security updates to application dependencies | Applying security updates to the platform including the underlying operating system |
| Updating custom buildpacks (if you use them) | Updating system buildpacks |
| Applying security updates to your Docker images (if you use them) | Applying security updates to backing services |
| Applying security updates to your Docker images (if you use them) | Applying security updates to backing services |
| Telling us if you experience any security breaches | Telling you if the platform experiences any security breaches |
| Performing penetration testing on your applications | Performing penetration testing on the platform |
| Setting defaults that optimise for security |


The year is 2146. The increasing effects of climate change have led to rising global temperatures. In addition to wide areas of equatorial land becoming too hot to support life, the ice caps and glaciers across the world have all melted, resulting in vast coastal submersions of cities and civilizations. Following on from the widespread deaths, riots and panics caused by devastating weather conditions: tornadoes, tidal waves, and endless droughts; mankind has started to regroup and rebuild. While some populations have withdrawn to a higher, protected ground, other groups have decided to exploit the seas, now adjusting to the changed salinity and higher levels, and providing a rich source of food and energy.
With several regions still unsafe to re-occupy due to radiation remaining from nuclear power station meltdowns, the majority of the world’s energy is now sourced from renewable sources. Most oceanic energy comes from geothermal sources deep in the ocean beds, harvested in highly pressurized, protected dome facilities. This energy fuels industry and business, while residential energy is generated from tidal power farms and massive floating solar arrays.
The older nations have fragmented and recombined, creating new joint oceanic nations. Their populations are distributed across a network of pressurized undersea cities – domes on the ocean floor, mainly given over to power generation and heavy industry; residential habitats based underwater and some distance offshore, to minimize the effects of the continuing storm patterns – these habitats also are generally linked with aquatic food farming and service industries.
Finally, on the surface, clinging to the final remnants of island archipelagoes, or the ruins of the great coastal cities of the past, are the frontiers of the new civilizations - trading posts with the remaining land-bound populations, centres for land-based agriculture, and offering tourism and heritage sites highlighting the best (and worst) of the old world. Piracy and black markets are rife in these frontier communities that survive through creative repurposing of salvage in the face of a humanitarian crisis. Civil unrest is common, and there is an active insurgency.
Given the nature of these new nations, high-speed and reliable transport systems have become an essential part of the infrastructure. The lower populations coupled with clean renewable energy sources mean that the habitats have been linked with high-speed mag-lev lines, protected within high-tensile transparent tubes that allow the passengers to look out at the surrounding ocean as they pass through and above it.
The joint oceanic nations have developed new currencies that celebrate their heritage and indicate their aspirations for the future. Some banknotes have been in continuous use for many years, and the marks of wear and use are evident. The Complex-Maglev International Subsea Transport network (C-MIST) requires passengers to carry swipe cards (C-MIST Cards) giving access to services, and, due to ongoing unrest.
Currency, travel and ID transactions also take place digitally using portable electronic media devices (e-me). Public areas such as the undersea maglev terminals display prominent motion posters (mo-po) and print media (prim) as a way to mobilise support for subsea settlement and advertise tourism and heritage sites. The insurgency factions see this as propaganda activity and culture jamming is common.
The nation regions are:
- A: Forth Collective (Edinburgh / North Sea)
- B: Eastern Seaboard (New York / Boston)
- C: Concordian Union (Buenos Aires / Paraguay River Basin)
- D: Johor Coalition (Singapore / Malaysia)
- E: Nile Kingdom (Cairo / Nile River Delta)
- F: Ingermanmore (St Petersburg / Baltic)
- G: Khambat Pradesh (Mumbai Coast)
- H: Yangtze Archipelago (Shanghai)
- I: Meldelaide (Melbourne / Adelaide)
For this assignment, I was assigned to the Eastern Seaboard.


+0123 456 70 90
Toggle navigation
Home
About Us
Online Webinar
Donation
Home Remedies
Counsulting
Appointment Form
Please fill in the form below.
Full Name
*
Prefix
First Name
Last Name
Address
*
Street Address
Street Address Line 2
City
State / Province
Postal / Zip Code
Please Select
United States
Afghanistan
Albania
Algeria
Canada
Cape Verde
Cayman Islands
Central African Republic
Chad
Chile
China
Christmas Island
Cocos (Keeling) Islands
Colombia
Comoros
Congo
Cook Islands
Costa Rica
France
French Polynesia
Gabon
Iceland
India
Indonesia
Iran
Iraq
Ireland
Israel
Italy
Jamaica
Japan
Jersey
Morocco
Mozambique
Myanmar
Nagorno-Karabakh
Namibia
Nauru
Nepal
Zambia
Zimbabwe
Other
Country
Phone Number
*
-
Area Code
Phone Number
E-mail
*
Description
Submit Form
Should be Empty:


tests package¶
Submodules¶
tests.browser_tests module¶
-
class
tests.browser_tests.
BrowserDriverTests
(methodName='runTest')[source]¶ Bases:
unittest2.case.TestCase
-
classmethod
log_directory
(create_not_found=True)[source]¶ Returns the directory where the log file should be stored
create_not_found being True will create the directory if it doesn’t exist
-
classmethod
setUpClass
()[source]¶ Hook method for setting up class fixture before running tests in the class.
-
tearDown
()[source]¶ A set of actions to be used by all unittest2.TestCase.tearDown() methods. This will enable functionality such as leaving the browser open if the test failed (and we are running with the browser visible). This is a clean-up method to standardize across all tests.
- Args:
- test_case is an instance of unittest2.TestCase
- Example:
- class myTests(unitests2.TestCase):
- def tearDown(self):
- helper_selenium_functions.py.tear_down(self)
-
test_browser_Firefox
()[source]¶ Test that a Firefox browser can be used. Test the name is not case sensitive.
-
test_checkboxes
()[source]¶ Ensures checking a box, unchecking it, and toggling the state work as expected.
-
test_click_not_in_view
()[source]¶ This test ensure the box can be clicked even if it is not initially in the viewable screen area
-
test_find_element_by_link_text
()[source]¶ Tests that the browser can find an element using a partial link text.
-
test_find_element_by_partial_link_text
()[source]¶ Tests that the browser can find an element using a partial link text.
-
test_find_element_by_xpath
()[source]¶ Tests that the browser can find an element using an xPath statement.
Tests that the browser navigates to a page.
-
classmethod


@import controllers.Application.DurationAirportRequest @(form: Form[DurationAirportRequest])(implicit messages: Messages) @main("Airport Top Carriers")("airportCarriers") {
Select the duration and the airport you want to calculate the ranking from.
A week is calculated as every 7 days in the year (e. g. 01.01 - 07.01 is first week, 08.01 - 14.01 second, etc.).
@helper.form(action = routes.Application.airportTopCarriers()) { @helper.input(form("yearFrom")) { (id, name, value, args) =>


An editorially independent, student-run media outlet serving Ohio University, Athens and Athens County, The Post, provides coverage of campus, city, state, sports, features, national and international issues while serving the purpose of educating its readership and its student employees.
The Post was founded at Ohio University in 1911 as The Green & White. Through the past century, the newspaper has undergone countless metamorphoses, but it has always been student-run and its content has remained independent from the university. Roughly 100 student editors, reporters, graphic designers, copy editors and photographers work out of 325 Baker University Center to publish the newspaper every week classes are in session, as well as create consistent daily online content for thepostathens.com. Its coverage includes campus, local, entertainment and sports news, in addition to original features, multimedia and more.
Our alumni can be found in newsrooms across the globe, including The Washington Post, The New York Times, The Wall Street Journal, the Associated Press, Business Insider, TIME, Sports Illustrated, The Columbus Dispatch and many more. Come be a part of one of the most innovative student newsrooms in the country!
Baker Center, Room 325
(740) 593-4010
© Copyright 2019, The Post, Athens, OH


HEALTH-TEST
Home
About Us
Test
Contact Us
Below are some local hospitals and clinics you can contact for medical assistance:
Hospitals:
The Mater Hospital
The Nairobi Hospital
Kenyatta National Hospital
M.P Shah Hospital
The Karen Hospital
The Aga Khan University Hospital
CARE Hospital
Nairobi South Hospital
Clinics:
Avenue Healthcare
CURE Kenya
Mediplan Clinic
Iran Medical Clinic
Medanta Africare
AAR Healthcare


Progressive enhancement is a technique used by web developers to ensure that their pages are accessible to as wide an audience as possible while at the same time trying to take advantage of the latest browser enhancements to provide the best user experience for their users. The basic idea behind progressive enhancement is to start off by creating a basic version of your page that contains your content and semantic markup that is supported by the lowest common denominator browser you intend to target. Once you are done, you can then alter the display and behavior of elements on the page with the use of technologies such as CSS, JavaScript, and Flash.
By designing your pages in this manner, the user and any assistive technologies they use, or search engine spiders, should be able to access your page content, even in the absence of CSS, JavaScript and Flash.
This document will give examples of how to use the various components within Spry in a progressive enhancement scenario and introduce some techniques and utilities that will hopefully make it easy:
Here is a very basic example that illustrates progressive enhancement with JavaScript. Given the following basic markup:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Basic Markup</title>

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

We can progressively enhance it so that each time the user's cursor is over the content, it turns a different color:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Basic Markup</title>

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.

directions...

In the example above, onmouseover and onmouseout attributes were added to the
 with the id of "event". The value of each of those attributes is some JavaScript that the browser will execute anytime the user's cursor enters or exits the "event"
. While this is a very trivial example, it illustrates the addition of a behavior to the basic page. With JavaScript on, users will see this new behavior as they move the cursor around on the page, but, with JavaScript off, all of the content on the page is still accessible.
Because Spry Effects and Widgets both work on elements that *must* be present within the page, they are well suited for use with progressive enhancement. For example, given this basic semantic markup:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Basic Markup</title>

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to see a live version of the example above.)
We can progressively enhance this markup with CSS and some JavaScript behaviors that turn it into a collapsible panel:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Progressively Enhanced Markup</title>  <link href="css/sample.css" rel="stylesheet" type="text/css" />

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to see a live version of the example above.)
In the example above, SpryCollapsiblePanel.js was included to enable support for a collapsible panel. We also includes a stylesheet that has some rules that make the "event" div look like a collapsible panel. At the very bottom of the document is a script block which attaches the collapsible panel behaviors to the "event" element and some of its descendants.
If you load the example above into your browser, you'll notice that the page displays a collapsible panel tab. If you click on this tab, it animates to reveal additional content. If you turn off CSS and JavaScript support in your browser and re-load this same example, you will notice that the content is entirely accessible, just as it is in the basic example.
Here's an example of progressively enhancing the same basic source with an effect that highlights the content as you mouse over its header:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Progressively Enhanced Markup</title>

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to see the sample above in a browser.)
As with the previous example, if you turn off CSS and JavaScript in your browser, the content is still accessible.
Before integrating support for Spry data sets and regions into your existing pages, take a moment to think about how and where within your site this support will be surfaced, and about the potential impact this may have on the accessibility and search engine indexing of your site. For some folks, after playing with some of the Spry demos and samples, their first inclination is to externalize all of the content from their existing pages so they can use data sets and regions to swap out the page contents without full page refreshes. For example, they start using pages that look like this throughout their site:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Page With No Content Sample</title>

{name}

{location}

{date}

{description}
 directions...

(Click here to see the sample above in a browser.)
Although it looks fine and renders with content in a browser when JavaScript is turned on, it renders without content when JavaScript is turned off:
(Click here to see the example above in a browser.)
This means the content is not accessible to users and screen readers when running in an environment where JavaScript must be turned off. This is also what most search engine web crawlers will see, which means your content will not be found and indexed.
The only way to solve this problem is to follow the progressive enhancement methodology, and start with a basic page that actually contains static content.
Over the last few releases, the Spry team has been steadily introducing new features within the framework that will allow the developer to progressively enhance their pages to load content dynamically. These features include the use of the spry:content attribute within regions, the HTML Data Set, Spry.Utils.updateContent() utility method, and the HTML Panel Widget.
Below are some samples of how to use various features within Spry to progressively enhance your static pages so they can dynamically load new content.
Each feature comes with a set of requirements, so which feature you decide to use depends on what it is you are trying to accomplish. For example, if you are trying to make a page dynamically load and display *existing* HTML content without resorting to modifying or creating any server-side scripts to serve up fragments of your existing pages, you may want to use an HTML Data Set or the HTML Panel since they both have the ability to extract HTML fragments out of existing pages. Or, if you want to take a server side approach and serve up HTML fragments embedded within XML/JSON or some other format, along with instructions on where to insert them on the page, perhaps using a data set, suited to the particular format being served (XML, JSON, etc), with or without regions is a better approach.
The samples below all start with a page that contains static content, and links that take you to other pages with static content. They are then progressively enhanced with JavaScript to intercept clicks on links to prevent the browser from following the link and instead trigger some code we added to dynamically load content and replace portions of the page without a full page refresh. If this concept sounds familiar to some folks, its because it is the same approach described by the Hijax methodology.
The Spry.Utils.updateContent() utility function allows developers to easily load HTML fragments into a specific element on the page. You simply call it with the node or id of the element who's content you want to replace, and the URL to the HTML fragment and it does the rest. Unlike some of the other methods for dynamically loading content mentioned in this document, Spry.Utils.updateContent() is a no-frills implementation that uses the XMLHttpRequest object under the hood to load the HTML fragment off the network, and the innerHTML property of the element it was given to insert the fragment into the document.
The Spry.Utils.updateContent() function takes an optional callback function as an argument. If supplied, this callback will be called *after* the HTMLFragment is inserted into the document. It does *not* provide a mechanism for examining the content received by the server before it is inserted into the document. Also, unlike the HTMLPanel widget, Spry.Utils.updateContent() does *not* have the ability to extract a fragment out of a larger HTML document. It will always insert *everything* it receives into the document.
Spry.Utils.updateContent() is well suited for pages that need a quick way to interact with a server application that can deliver raw HTML fragments to minimize page refreshes.
Here's an example of a basic page that contains links that take you to other pages:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the example above.)
Here is that same page progressively enhanced to intercept a click on a link so that an HTML fragment can be loaded directly into an element on the page:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the example above.)
In the example above, onclick attributes were added to override the default link behavior. When JavaScript is enabled, and the user clicks on a link, the onclick code will call Spry.Utils.updateContent() with the id of the element on the page to update, and the URL to the HTML fragment to load. As you click on the links in this example, pay attention to the URL displayed by the browser. When JavaScript is on, the URL never changes because fragments of HTML are being loaded dynamically and replacing content on the page. When JavaScript is off, clicking on the links actually take you to a different page so the URL displayed by the browser changes.
Here's a version of the previous example that has been enhanced to use a fade transition whenever the content changes:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the example above.)
As with the previous example, the example above uses the same onclick attribute on links technique to override the default link behavior. In this particular example instead of calling Spry.Utils.updateContent() directly, an intermediate function is called which fires of an effect to fade out the current content within the "event" element. Once that effect completes, it fires off a call to Spry.Utils.updateContent(), but notice that in this example a 3rd argument is passed into the updateContent() call. This is a callback which will fade the content back in after updateContent() has finished loading and updating the "event" element's content.
The HTML Panel widget is a JavaScript object that is bound to a specific element container on the page, and has the ability to load a remote HTML fragment, or a piece of an existing HTML page into that element container. Developers can register observers on the HTML Panel Widget to hook into the pre/post load of the HTML fragments, and pre/post update of the element container processes. The HTML Panel widget also introduces the concept of states and provides automatic class name addition/removal for styling different states, and the ability to automatically swap in content provided by the developer during specific panel states.
The HTML Panel is well suited for pages that have well defined areas of the page that can be replaced dynamically. Although it can be used in scenarios that interact with a server application that can deliver raw HTML fragments, the HTML Panel also has the ability to extract out a portion of a full HTML page, based on an element id you give it. This makes it ideal for use in sites where there are lots of pages that differ slightly in well defined areas, for example the main content area, or the header of the page.
Here's an example of progressively enhancing a basic page:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the example above.)
to use an HTML Panel widget to load event data directly into the element with the id of "event":
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the example above.)
In the example above, an HTML Panel widget is created and bound to the element that has an id of "event". An observer function is then added to the HTML Panel so that it gets called anytime the HTML Panel is told to load a URL. This observer function is used to automatically modify the URL in some way to let the server know that we want a fragment instead of a full HTML page.
hp.addObserver(function(notificationType, notifier, data)
{
// We are about to load some content for the panel, make sure we modify
// the URL so that the server knows we want a fragment.
if (notificationType == "onPreLoad")
data.url = data.url.replace(/\.html/, "Frag.html");
});
In this particular case, we are modifying the URL so that it loads a file that is named the same as the one in the URL, except it ends with Frag.html, but you can imagine that in a real-world scenario we might do something like add an extra query param to the url:
hp.addObserver(function(notificationType, notifier, data)
{
// We are about to load some content for the panel, make sure we modify
// the URL so that the server knows we want a fragment.
if (notificationType == "onPreLoad")
data.url = data.url + "?frag=true";
});
Next, onclick attributes were added to the links on the page to override their default action. When JavaScript is enabled, and the user clicks on a link, the onclick code will call the loadContent() function on the HTML Panel we created, passing it the href for the link that was just clicked. This results in our observer function being invoked, which then transforms the URL into a request for an HTML fragment instead of an entire page. After the URL is transformed, the HTML Panel then loads the transformed URL. When the HTML Panel receives the fragment from the server, it automatically replaces the content underneath the "event" element, with the content in the fragment.
When running the example above, as you click the links, pay attention to the URL displayed by the browser. When JavaScript is on, the URL never changes because fragments of HTML are being loaded dynamically and replacing content on the page. When JavaScript is off, clicking on the links actually take you to a different page so the URL displayed by the browser changes.
The following example builds on the previous one to show the use of state content and observers:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title> <link href="../../../widgets/htmlpanel/SpryHTMLPanel.css" rel="stylesheet" type="text/css" />
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski | Non-Existent File

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

Loading ...

Failed to load content!

(Click here to view the example above.)
With the example above, anytime the user clicks on a link, the HTML Panel will clear its content area and display the string "Loading ...". Once the fragment is received from the server, the HTML Panel will insert the fragment into the panel and then trigger a Yellow Fade Technique (YFT) effect to draw the user's attention to the panel. Should an error occur while loading the HTML fragment, the HTML Panel will automatically show the string "Failed to load content!". An extra link to a non-existent file was added to the example to demonstrate the failure to load content.
Note that because the actual fragments being loaded by the panel are small, some browsers may actually load the fragment and update the panel contents so fast that you don't actually see the "Loading ..." string appear.
To get the HTML Panel to automatically show the "Loading ..." and "Failed to load content!" content at the appropriate times, all that was necessary was to add the content and tag each one with either the "HTMLPanelLoadingContent" or "HTMLPanelErrorContent" class and include the SpryHTMLPanel.css file.
To implement the YFT effect, the observer we added in the previous example was modified to listen for onPreUpdate and onPostUpdate notifications. On the onPreUpdate notification, it set the background color of the HTML Panel to yellow, and on the onPostUpdate notification, it simply triggers a highlight effect which gradually sets the background-color of the HTML Panel back to white.
As with the previous example, if JavaScript is turned off, clicking on any of the links simply take you to another page to show you the appropriate content.
This last example demonstrates the HTML Panel's ability to extract a fragment out of an existing HTML page:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title> <link href="../../../widgets/htmlpanel/SpryHTMLPanel.css" rel="stylesheet" type="text/css" />
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski | Non-Existent File

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

Loading ...

Failed to load content!

(Click here to view the example above.)
In the example above, we made 2 small tweaks to the previous example. First, for each of the links in our page, we modified the loadContent() function call so that we passed in an option object, that contained an id property, that told the panel that we want to extract a fragment out of the content it is about to load with the given URL. The last change was the removal of the code that was listening for onPreLoad messages within our HTML Panel observer. Since the HTML Panel is now loading full pages, there is no need to modify the URL, we'll let the HTML Panel load the href in the link and pull out the fragment we need from it.
With JavaScript on, clicking on a link causes the HTML Panel to load the page referred to by the links href. After it loads the page, it searches through the page for an element with the specified id. If it finds one, it then extracts the content inside that element, and then inserts it into the panel.
When JavaScript is turned off, clicking on a link causes the browser to follow the link.
Some developers like the idea of using a data set as a mechanism for automatically loading and parsing data, but don't like the idea of using regions because it uses name spaced attributes and/or requires the embedding of the actual region template markup within the page.
It is possible to use data sets to load data and/or HTML fragments for selective page updates, without the use of regions, with a tiny bit of code that inserts the data/HTML fragments into the document manually.
Because data sets require the use of a transport format (XML, JSON, etc), in a progressive enhancement scenario this approach would require the duplication of your HTML content. That is the HTML content would appear in the original static page, and embedded within the XML, or other transport format used by the data set. This approach would make the most sense when you're taking a server side approach where you have a server-side application that is able to serve up the same content within full pages or as fragments.
What's particularly nice about using data sets, is it allows the developer to define what delivery format (XML, JSON, CSV, etc) to use, *and* the structure of the data within that format. For example, the developer could define the data format so that each time the URL on the data set is changed, the server sends back a single set of fragments that contain information on what parts of the page to update:
<?xml version="1.0" encoding="utf-8"?> <update> Aquo-Thon <content><![CDATA[
Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions... ]]> </content> </update>
In the sample XML above, the developer has designed things so that the names of the tags underneath the <update> node actually correspond to the id of an element within the HTML page to update. So in the sample above the child content of the element with the id of "header" would be replaced with the word "Aquo-Thon", likewise, the child content of the element with the id of "content" would be replaced with the HTML markup that gave information about the "Aquo-Thon" event. What's great about this particular scheme, is that it allows the server to decide what portions of the page need to be updated for a particular request.
Alternatively, the developer could define a data format where a group of page updates were sent with a single request (batched) to minimize the number of requests made to the server:
<?xml version="1.0" encoding="utf-8"?> <updates> <update> Aquo-Thon <content><![CDATA[
Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions... ]]> </content> </update> <update> Aquo Swing <content><![CDATA[
Sacramento, CA

June 10th

Watch these uber talented couples swing the night away at Sacramento's most famous dance hall.
 directions... ]]> </content> </update> <update> Aquo Ultra Marathon <content><![CDATA[
Whistler, British Columbia

June 22nd

Get ready to admire the amateur runners pace themselves for the annual Aquo Ultra Marathon.
 directions... ]]> </content> </update> <update> Aquo Extreme Ski <content><![CDATA[
Jackson Hole, WY

December 17th

Extreme skiing has never been so intense. Join thousands of spectators and watch the industry's most daring extreme skiers take on the mountain.
 directions... ]]> </content> </update> </updates>
The next 2 examples show how a developer can progressively enhance the following markup, to consume the 2 data formats above:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the sample above.)
In the scenario where the server sends back a single set of page updates, we could progressively enhance the markup in the following manner:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the example above.)
In the example above, an observer function called dsUpdateObserver() is placed on the dsUpdate data set. Any time the data changes in the data set, the dsUpdateObserver() function will be triggered. Since the tag names of our XML data are the ids of elements on our page, the dsUpdateObserver function simply enumerates the column names (aka. xml tag names) of the data set, it then finds the corresponding element on the page that has an id equivalent to a given column name. If an element is found, it inserts the content in that column underneath the element.
The links on the page are enhanced with onclick attributes that override the default link behavior. Anytime the user clicks on a link, the LoadURL() function is called with the value of the link's href attribute. The LoadURL() function then has a chance to modify the URL in some way to tell the server that we want fragments. In this particular example we swap the .html extension of the URL with .xml, but you could easily imagine that if your pages were coming from a server side script that you could also append query params to the URL that told the server side script to serve up frags dynamically. After modifying the URL, the LoadURL() function simply tells the dsUpdate data set to load it. When the dsUpdate data set receives the data from the server, the dsUpdateObserver() function is automatically triggered, and the page gets updated.
To support the scenario where the server sends back a set of page updates, a slight tweak to the previous example needs to be made:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to view the example above.)
In the example above, a URL is specified at the time the dsUpdate data set is created. This allows the page to pre-load multiple sets of updates ahead of time so when the user clicks on a link on the page, the updates can happen instantly without hitting the server again. As with the previous example, onclick attributes are added to the links to override the default behavior, but this time, the links simply set the current row of the data set which triggers dsUpdateObserver() to update the parts of the page that have data specified in the new current row of the data set.
The spry:content attribute is a processing instruction for the Spry dynamic-region processing code, which tells it to replace the static data, currently contained underneath that element, with the data represented by the data reference in the spry:content attribute value, when there is data in the data set the region is bound to.
Using spry:content with regions is analogous to the method shown in the "Data Sets without Regions" section above, except that it leverages the existing region mechanism within Spry to automatically update elements with a spry:content attribute on them.
Because regions rely on data sets, and data sets require the use of a transport format (XML, JSON, etc), in a progressive enhancement scenario this approach would require the duplication of your HTML content. That is the HTML content would appear in the original static page, and embedded within the XML, or other transport format used by the data set. This approach would make the most sense when you're taking a server side approach where you have a server-side application that is able to serve up the same content within full pages or as fragments.
The following examples will progressively enhance this basic markup:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

There are actually 2 ways to use the spry:content attribute with a Spry region. The first is to place the attribute on the same element that contains the spry:region or spry:detailregion attribute:

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

When used in this manner, all of the static content underneath the region element will be replaced with dynamic content from the "event" column of the data set the region is bound to, whenever new data is loaded, or when the current row of the data set changes. In this particular example, the data in the "event" column can be fully formatted HTML content:
<?xml version="1.0" encoding="utf-8"?> <events> <event><![CDATA[
Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...
 ]]></event> <event><![CDATA[
Aquo Swing

Sacramento, CA

June 10th

Watch these uber talented couples swing the night away at Sacramento's most famous dance hall.
 directions...
 ]]></event> <event><![CDATA[
Aquo Ultra Marathon

Whistler, British Columbia

June 22nd

Get ready to admire the amateur runners pace themselves for the annual Aquo Ultra Marathon.
 directions...
 ]]></event> <event><![CDATA[
Aquo Extreme Ski

Jackson Hole, WY

December 17th

Extreme skiing has never been so intense. Join thousands of spectators and watch the industry's most daring extreme skiers take on the mountain.
 directions...
 ]]></event> <event><![CDATA[
Aquo Baja 400

San Filipe, Baja California

October 3rd

Come south of the border and watch the dirt fly. This Baja 400 promises to be the best yet, with all the top seeds being there.
 directions...
 ]]></event> <event><![CDATA[
Big Wave Challenge

Mavericks, CA

November 8th

Watch the worlds best big wave surfers take on the legendary break at Mavericks.
 directions...

Aquo Classic
 ]]></event> <event><![CDATA[

Carlsbad, CA

August 15th

Join us for the 10th annual Aquo Classic at Alvaro Pines in sunny Carlsbad California.
 directions...
 ]]></event> </events>
Here's the full source for a progressively enhanced page that uses spry:content in this manner:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to see a working example.)
In the example above, an XMLDataSet is used to preload several sets of updates. After the data set loads all regions that are bound to that data set are told to re-generate their content. Because our detail region has a spry:content attribute on the region container, all of the content of the region will be replaced with whatever value is in the "event" column of the data set, which in this particular example, is HTML markup.
The links on the page were modified with onclick attributes to override the default link behavior. When a user clicks on a link the setCurrentRowNumber() is called on the data set to change its current row. This triggers the detail region to update, and the contents of the "event" column for the current row to be inserted into the region container.
In this particular example, the order of the updates embedded in the XML is known so it was convenient to use of setCurrentRow() to trigger the correct update, but you can also set the current row based on the value of a particular column, or you could even trigger the data set to load new content.
Make sure you run the example with JavaScript on and off, to see how the behavior of the page changes, but the content is still accessible. With JavaScript on, clicking on the links changes only the region containing the event content, and you remain on the same page. With JavaScript off, clicking on the links take you to different pages that have the same content.
The 2nd way to use spry:content, is within a spry:region or spry:detailregion:

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

You can use spry:content in this manner if you want to let the markup for the static content you start out with, dictate how your data will be formatted. So for example, if you had XML data for each event that was delivered in this format:
<?xml version="1.0" encoding="utf-8"?> <events> <event> <photo path="i/photo_events_aquothon.jpg" desc="Aquo-Thon" /> <name>Aquo-Thon</name> <location>Whistler, British Columbia</location> <date>May 26th</date> <description>Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.</description> <directions url="#"><![CDATA[directions...]]></directions> </event> <event> <photo path="i/photo_events_swingsacramento.jpg" desc="Aquo Swing" /> <name>Aquo Swing</name> <location>Sacramento, CA</location> <date>June 10th</date> <description>Watch these uber talented couples swing the night away at Sacramento's most famous dance hall.</description> <directions url="#"><![CDATA[directions...]]></directions> </event> <event> <photo path="i/photo_events_ultramarathon.jpg" desc="Aquo Ultra Marathon" /> <name>Aquo Ultra Marathon</name> <location>Whistler, British Columbia</location> <date>June 22nd</date> <description>Get ready to admire the amateur runners pace themselves for the annual Aquo Ultra Marathon.</description> <directions url="#"><![CDATA[directions...]]></directions> </event> <event> <photo path="i/photo_events_extremeski.jpg" desc="Aquo Extreme Ski" /> <name>Aquo Extreme Ski</name> <location>Jackson Hole, WY</location> <date>December 17th</date> <description>Extreme skiing has never been so intense. Join thousands of spectators and watch the industry's most daring extreme skiers take on the mountain.</description> <directions url="#"><![CDATA[directions...]]></directions> </event> </events>
It would automatically be "poured" into the markup used by the original static content. Here's the full source for a progressively enhanced page that uses spry:content in this manner:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aquo Events</title>
 Aquo-Thon | Aquo Swing | Aquo Ultra Marathon | Aquo Extreme Ski

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

(Click here to see a working example.)
In this example, clicking on a link causes the Spry region to replace the data references within the static markup with the appropriate data. When JavaScript is turned off the clicking on the links take you to pages with the appropriate content.
The HTML Data Set allows developers to use content within an HTML document or fragment, as a data source. This content can be embedded within your page, or retrieved from an external data source (file, web app, etc). To read more about the HTML Data Set, checkout the HTML Data Set Overview and samples.
Unlike other data sets, in a progressive enhancement scenario there is no duplication of HTML content because the HTML Data Set extracts its data directly from HTML documents or fragments. This means that the HTML Data Set can work with static HTML files, without the need for a server side application.
In a progressive enhancement scenario, the HTML Data Set can be used to present static content in a whole new way. For example, we can take a page with static content that looks something like this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <title>Aquo Energy Drink - Events</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

 ...

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

Aquo Swing

Sacramento, CA

June 10th

Watch these uber talented couples swing the night away at Sacramento's most famous dance hall.
 directions...

 ...

 ...

(Click here to view the example above and see the full source.)
then transform it into something completely different by progressively adding an HTMLDataSet and a couple of dynamic regions:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   <title>Aquo Energy Drink - Events</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link type="text/css" rel="stylesheet" href="css/global.css" media="screen" /> <link type="text/css" rel="stylesheet" href="css/events.css" media="screen" /> <link type="text/css" rel="stylesheet" href="css/basic.css" media="screen" />

 ...

Aquo-Thon

Whistler, British Columbia

May 26th

Join us in Whistler as Extreme Mountain bikers take on the hills and curves of British Columbia.
 directions...

Aquo Swing

Sacramento, CA

June 10th

Watch these uber talented couples swing the night away at Sacramento's most famous dance hall.
 directions...

 ...

Select an Event

 Event	 Location

  {name}
 {displaydate} 	 {location}

{eventimage}

Event Information

{description}

 ...

(Click here to view the example above and see the full source.)
In the example above, an HTML Data Set is used to extract data from the
 with the "staticContent" id within the page. Some markup containing regions was added at the bottom of the page. This markup starts off as display:none so that it doesn't show up if JavaScript is turned off, and is made visible by the


On 6 November 2017, 9 new articles were published in 7 journals.
Sweet Spots For Hot Spots? A Cost-Effectiveness Comparison of Two Patrol Strategies
Pecunia Non Olet? Legal Norms and Anti-Corruption Judicial Frameworks of Preventive Confiscation
Business Unusual: Collective Action Against Bribery in International Business
Europe’s “Democratic Culture” in the Fight Against Corruption
A Typological Approach to Studying Policing
School Resource Officer Perceptions and Correlates of Work Roles