Over the last weekend I participated in the 2018 Global Game Jam with GameCraftMN. I would first like to talk about the experience of the game jam, and some small things I learned about C#. There were some design patterns I learned but I'm still working on a good analogy for how to describe them.
After an introductory presentation, attendees were given some time to mingle and come up with project ideas. We reconvened and people lined up and gave brief pitches for their game ideas to the crowd. After the pitches were made, I decided to approach a team working with a technology that excites me: VR. It was a team of 11 people, mostly composed of 3D artists. They were in need of developers and they welcomed me to the team.
We spent the first day scoping the project and solidifying the preliminary narrative. The concept of the game was that there are some space druids and they live in symbiosis with a large ent-like creature. The space druids are controlled by up to four players using X-Box controllers and the Ent is the VR player using a Vive VR headset and controllers. The druids collect resources and bring them back to the Ent, which is rooted in place. The Ent assists the druids in collecting the resources by moving logs over rivers to form bridges and picking up and throwing the players when they enter a large walnut-like vessel. The druids have a day (5 minutes of game time) to collect enough resources for the Ent to be able to protect them in the night.
The project was being built with the Unity game engine and was written in C#. I had no experience with either of those things, but I was eager to learn. I was able to piece together some basics of how the controls worked and I was able to create controls for the four 'couch co-op' players.
At the end of the first night I asked the more experienced developers what I should research to be able to better contribute the next day. They suggested looking at Unity MonoBehaviors and creating a basic Unity project to familiarize myself with the interface. I built a small project to learn the ropes.
In the end I was able to make some modest but meaningful contributions to the project and built a base of knowledge from which I can explore Unity with greater confidence.
I hadn't been exposed to C# before this event and it contains a handy operator that I appreciate. It is a null conditional operator. Let's say you have an object that may be null
. In your code you wish to access a property on this object so long as the object is not null. There is a very concise way to write this in C#.
MyObject?.MyProperty
This will return null if the object is null, and the property if the object is not null. Very handy!


Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Serves 1
Looking for a turkey dinner for one with something new to offer? Try this combination of roasted turkey breast, sweet mincemeat and baked apples.
Preheat the oven to 220C/425F/Gas 7.
Release the skin from the breast of the turkey from one side, trying to keep the other side attached.
Smear the breast meat evenly with mincemeat then pull the skin back over.
Tie with string to hold it all together and rub the skin with 25g/1oz of the butter.
Put the carrots and onions into a roasting dish and lay the turkey on top, skin-side up.
Add the wine and then stock to come halfway up the turkey breast.
Roast for about 40-60 minutes depending on the size of the turkey breast, the breast is cooked when the juices run clear.
Meanwhile heat 25g/1oz butter in roasting tray on the hob and fry the apples, cut side down, to colour them. Turn them over, sprinkle with cinnamon and roast in the oven with the turkey until soft. When cooked set aside and keep warm.
When the turkey is cooked, remove it from the oven and leave to rest in a warm place.
Pour the cooking liquor from the roasting try into a pan. Boil to reduce it in volume to a thick sauce. Season to taste with salt and pepper and then strain through a fine sieve. Beat in 50g/1¾oz cold butter and add the parsley.
To serve, remove the string from the turkey and carve into slices. Decorate with the apples and pour over the sauce.


Simple Programming is committed to providing quality services to you and this policy outlines our ongoing obligations to you in respect of how we manage your Personal Information.
Your data is only stored as long as is necessary to enable contact tracing before it is permanently deleted.
Only the platform's authorised contact may request access to your personal information and only for the purposes of contact tracing.
Your contact information will never be used for advertising or marketing purposes without your expressed permission.
This policy only relates to the CovidVault application and its associated web pages hosted on covidvault.com.au
(this website).
We have adopted the Australian Privacy Principles (APPs) contained in the Privacy Act 1988 (Cth) (the Privacy Act).
The NPPs govern the way in which we collect, use, disclose, store, secure and dispose of your Personal
Information.
A copy of the Australian Privacy Principles may be obtained from the website of The Office of the Australian
Information Commissioner at www.aoic.gov.au
Personal Information is information or an opinion that identifies an individual. We only collect your name and phone
number for the purposes of COVID-19 related contact tracing.
This Personal Information is only obtained via your submission of the CovidVault form on our website. We don’t
guarantee website links or policy of authorised third parties.
We may also use your Personal Information for secondary purposes closely related to the primary purpose, in
circumstances where you would reasonably expect such use or disclosure. For example, anonymised data may be used to
determine patronage across time at a client venue.
There are no regular mailing lists associated with this application. Contact will only be made in accordance with
the purposes of contact tracing.
When we collect Personal Information we will, where appropriate and where possible, explain to you why we are
collecting the information and how we plan to use it.
Sensitive information is defined in the Privacy Act to include information or opinion about such things as an
individual's racial or ethnic origin, political opinions, membership of a political association, religious or
philosophical beliefs, membership of a trade union or other professional body, criminal record or health
information.
There are no mechanisms within the CovidVault application that are capable of collecting Sensitive Information as it
is defined above.
Where reasonable and practicable to do so, we will collect your Personal Information only from you. However, in some circumstances we may be provided with information by third parties. In such a case we will take reasonable steps to ensure that you are made aware of the information provided to us by the third party.
Your Personal Information may be disclosed in a number of circumstances including the following:
Your Personal Information is stored in a manner that reasonably protects it from misuse and loss and from
unauthorized access, modification or disclosure.
When your Personal Information is no longer needed for the purpose for which it was obtained, we will take
reasonable steps to destroy or permanently de-identify your Personal Information. Your contact information will be
deleted from our database not more than 2 months from collection.
You may access the Personal Information we hold about you and to update and/or correct it, subject to certain
exceptions. If you wish to access your Personal Information, please contact us in writing.
Simple Programming will not charge any fee for your access request but may charge an administrative fee for
providing a copy of your Personal Information.
In order to protect your Personal Information we may require identification from you before releasing the requested
information.
It is an important to us that your Personal Information is up to date. We will take reasonable steps to make sure that your Personal Information is accurate, complete and up-to-date. If you find that the information we have is not up to date or is inaccurate, please advise us as soon as practicable so we can update our records and ensure we can continue to provide quality services to you.
This Policy may change from time to time and is available on our website.
If you have any queries or complaints about our Privacy Policy please contact us at: hi@covidvault.com.au


Preparation time
overnight
Cooking time
less than 10 mins
Serves
Makes 4 large pizzas
These spicy, tangy homemade pizzas are so much better than anything you can have delivered – the perfect pick-me-up.
For the pizza dough, sift the flours, sugar and salt into a large bowl and mix well.
Mix the yeast and a splash of the water to a paste in a small jug.
Make a well in the centre of the dry ingredients and add the yeast paste. Gradually pour over the rest of the tepid water, bringing the dry ingredients into the centre a little at a time, until the mixture comes together as a soft dough.
Turn the dough out onto a lightly floured work surface and knead for 5-10 minutes, until smooth and elastic. Place the dough into a large, clean bowl and cover with a damp, clean tea towel. Set aside in a warm room to prove for 1½ hours.
When the dough has almost doubled in size, knock it back by punching and kneading it a little, then divide it into four equal balls.
 Set aside to prove again, for at least four hours (in a warm room) or overnight (in the fridge).
When the dough balls have doubled in size again, preheat the oven to its highest setting. Place a heavy baking tray or pizza stone into the oven to heat up with it.
 Sprinkle a little flour onto an upturned baking tray and transfer the pizza base onto it.
For the topping, blend the canned tomatoes to a purée in a food processor. Spoon some of the mixture into the centre of the pizza base, spreading it almost to the edges.
Sprinkle some of the sheeps’ cheese, ’ndjua and basil leaves onto the pizza, then drizzle over the peanut oil.
Working as quickly as possible, scoot the pizza into the oven by pushing it from the upturned tray onto the pizza stone or hot baking tray. Cook for 5-8 minutes, or until the base is cooked through, the cheese has melted and the tomatoes are bubbling.
Meanwhile, repeat the process with the remaining three pizza bases and the remaining topping, serving each pizza immediately.


Please describe the reason for us to delete the project with a minimum of 20 characters. Depending on the reason, the
admin might not accept the request to delete the project.
Are you sure you want to REQUEST to DELETE this PROJECT and all its associated data?
Once the delete project request has been submitted, your delete request can't be canceled and you are agree to have the
admin remove all the project data including the submitted monthly report. Any of the lost data will not be accessible
anymore and this action can't be recovered by the ReportHub Team.


|
Team return(AWESOME): Project 2: Battleship 2.0
2.0
Battleship game for the terminal, inherited from Team Coding Coders
|
Public Member Functions | |
| Executive () | |
| A constructor that takes no parameters. More... | |
| ~Executive () | |
| Destructor that deletes the 2 player Admiral objects. More... | |
| std::string | askCoord () |
| Asks for a coordinate from the user in the form 1A. More... | |
| void | placeShip (int n, Admiral *player, bool ai) |
| Places ships for a user. More... | |
| void | saveGame (int turn, Admiral *player1, Admiral *player2, bool ai) |
| Delete saved.txt if it already exists. More... | |
| void | writeBoard (string **player1_board, string **player2_board) |
| write grid info into a text file More... | |
| void | loadGame (int turn, string **player1_board, string **player2_board, bool ai) |
| set the board, turn and indicate if AI or not More... | |
| void | readBoard () |
| read the text file to attain ship information and grid information More... | |
| void | run () |
| Runs the Battleship game. More... | |
| int | mainMenu () |
| Runs the menu for the game. More... | |
| void | switchTurn () |
| Changes the player turn. More... | |
| int | charCoordtoIntCoord (char c) |
| Translates a letter coordinate to a number coordinate Only works for letters A-H. More... | |
| bool | validPos (std::string pos) |
| Evaluates a coordinate and returns if it is valid or not. More... | |
| void | setNumShips () |
| Asks and sets the number of ships used for the game. More... | |
| bool | handleTurn (const int player, const bool AI) |
| Handles the given player or AI's turn: asks for firing targets & powerup usage, updates Grid & Ship data. More... | |
| int | gameplay (const bool AI) |
| Runs the gameplay portion of the program: switches turns and calls handleTurn for each player. More... | |
| string | askForPowerUp (const int player) |
| Asks the player whether they want to use a powerup. More... | |
| string | askForFireCoord (const int player) |
| Gets the firing coordinate from the user. More... | |
| vector< string > * | getPowerups (const int player) const |
| Gets the given player's current powerups. More... | |
| void | updatePowerups (const string powerup) |
| Adds the given powerup to the current player's powerup vector. More... | |
| void | printTurnResult (const string result) const |
| Prints the result of the turn: hit, miss, powerup, etc. More... | |
| string | convertCoord (string orig) |
| Helper function: converts coords from the form "1A" to the form "<row>:<col>". More... | |
| void | printGameOver (const int player) const |
| void | printMaps (const int player) const |
| Prints the current player's firing map and ship map. More... | |
| void | printEnemyAction () const |
| Prints a message if the other player has hit or sunk the current player's Ships. More... | |
| void | setupGame (bool AI) |
| Sets up the game. More... | |
| void | placePowerUp (bool ai) |
| Places powerups on the board Places them randomly, giving each user 1 of each. More... | |
| void | usePowerUp (string powerup, bool isPlayer1) |
| Lets user use a powerup. More... | |
| void | receivedPowerUp (string turnResult, bool isPlayer1) |
| Checks if the player received a powerup and adds it to the vector if so. More... | |
| void | clearConsole () const |
| Clears the console by printing newlines. More... | |
| void | placeAIShip (int n) |
| Place ships for AI. More... | |
Private Attributes | |
| const int | m_BOARD_SIZE = 8 |
| Admiral * | m_player1 |
| The size of the board to be created. | |
| Admiral * | m_player2 |
| int | m_numShips |
| int | m_turn |
| std::chrono::duration< unsigned long long > | m_interval = std::chrono::seconds(3) |
| PowerUps | m_powerups |
| char | quit_choice |
| bool | m_ai |
Definition at line 18 of file Executive.h.
| Executive::Executive | ( | ) |
A constructor that takes no parameters.
Definition at line 4 of file Executive.cpp.
| Executive::~Executive | ( | ) |
Destructor that deletes the 2 player Admiral objects.
| none |
Definition at line 12 of file Executive.cpp.
| std::string Executive::askCoord | ( | ) |
Asks for a coordinate from the user in the form 1A.
Checks the input to make sure it is valid on the board size 8x8 and in the correct syntax.
| none |
Definition at line 629 of file Executive.cpp.
| string Executive::askForFireCoord | ( | const int | player | ) |
Gets the firing coordinate from the user.
| playerNum | the current player turn, 1 for player 1, 2 for player 2. |
Definition at line 993 of file Executive.cpp.
| string Executive::askForPowerUp | ( | const int | player | ) |
Asks the player whether they want to use a powerup.
| player | 1 for player 1, 2 for player 2. |
Definition at line 947 of file Executive.cpp.
| int Executive::charCoordtoIntCoord | ( | char | c | ) |
Translates a letter coordinate to a number coordinate Only works for letters A-H.
| char | c is the character of the letter you are changing to an int |
Definition at line 1110 of file Executive.cpp.
| void Executive::clearConsole | ( | ) | const |
Clears the console by printing newlines.
Definition at line 1234 of file Executive.cpp.
| string Executive::convertCoord | ( | string | orig | ) |
Helper function: converts coords from the form "1A" to the form "<row>:<col>".
| orig | the original coordinate. |
Definition at line 1114 of file Executive.cpp.
| int Executive::gameplay | ( | const bool | AI | ) |
Runs the gameplay portion of the program: switches turns and calls handleTurn for each player.
| AI | true if there is an AI player, else false. |
Definition at line 882 of file Executive.cpp.
| vector< string > * Executive::getPowerups | ( | const int | player | ) | const |
Gets the given player's current powerups.
| player | 1 for player 1, 2 for player 2. |
Definition at line 1080 of file Executive.cpp.
| bool Executive::handleTurn | ( | const int | player, |
| const bool | AI | ||
| ) |
Handles the given player or AI's turn: asks for firing targets & powerup usage, updates Grid & Ship data.
| player | 1 for player 1, 2 for player 2. |
| AI | true if an AI is playing, else false. |
Definition at line 780 of file Executive.cpp.
| void Executive::loadGame | ( | int | turn, |
| string ** | player1_board, | ||
| string ** | player2_board, | ||
| bool | ai | ||
| ) |
set the board, turn and indicate if AI or not
| turn | indicates whose turn is next |
| player1_board | 2D string array for player 1 |
| player2_board | 2D string array for player 2 |
| ai | if pvp or ai game |
Definition at line 292 of file Executive.cpp.
| int Executive::mainMenu | ( | ) |
Runs the menu for the game.
| none |
Definition at line 689 of file Executive.cpp.
| void Executive::placeAIShip | ( | int | n | ) |
| void Executive::placePowerUp | ( | bool | ai | ) |
Places powerups on the board Places them randomly, giving each user 1 of each.
| ai | bool true if the p2 is an AI (gives them no powerups) |
Definition at line 920 of file Executive.cpp.
| void Executive::placeShip | ( | int | n, |
| Admiral * | player, | ||
| bool | ai | ||
| ) |
Places ships for a user.
Asking the user the coordinate from the beginning, then displays the possible ending coordinates for the user. Then asks the user to input one of the ending coordinate from list.
| size | is an int for the length of the ship being placed |
| player | is an Admiral object for the player placing ship |
| AI | true if player is AI (don't interact with user) |
Definition at line 337 of file Executive.cpp.
| void Executive::printEnemyAction | ( | ) | const |
Prints a message if the other player has hit or sunk the current player's Ships.
Definition at line 1160 of file Executive.cpp.
| void Executive::printGameOver | ( | const int | player | ) | const |
| player | 1 for player 1, 2 for player 2. |
Definition at line 1122 of file Executive.cpp.
| void Executive::printMaps | ( | const int | player | ) | const |
Prints the current player's firing map and ship map.
| 1 | for player 1, 2 for player 2. |
Definition at line 1143 of file Executive.cpp.
| void Executive::printTurnResult | ( | const string | result | ) | const |
Prints the result of the turn: hit, miss, powerup, etc.
| result | represents whether the turn result was a hit, miss, sink, or powerup. |
Definition at line 1085 of file Executive.cpp.
| void Executive::readBoard | ( | ) |
read the text file to attain ship information and grid information
Definition at line 153 of file Executive.cpp.
| void Executive::receivedPowerUp | ( | string | turnResult, |
| bool | isPlayer1 | ||
| ) |
Checks if the player received a powerup and adds it to the vector if so.
| turnResult | is the value of the grid at the a coordinate point |
| isPlayer1 | is a bool true for player 1, false for player2 |
Definition at line 1073 of file Executive.cpp.
| void Executive::run | ( | ) |
Delete saved.txt if it already exists.
Then, write the AI and turn info and call writeBoard()
| turn | is an int for the player's turn (1/2) |
| player1 | is an Admiral object for player 1 |
| player2 | is an Admiral object for player 2 |
| AI | true if player is AI |
Definition at line 18 of file Executive.cpp.
| void Executive::setNumShips | ( | ) |
Asks and sets the number of ships used for the game.
| none |
Definition at line 741 of file Executive.cpp.
| void Executive::setupGame | ( | bool | AI | ) |
Sets up the game.
| AI | true if the game includes an AI player, else false. |
Definition at line 1164 of file Executive.cpp.
| void Executive::switchTurn | ( | ) |
Changes the player turn.
Definition at line 768 of file Executive.cpp.
| void Executive::updatePowerups | ( | const string | powerup | ) |
Adds the given powerup to the current player's powerup vector.
[NOT USED YET]
| powerup | a string representing the powerup. |
| void Executive::usePowerUp | ( | string | powerup, |
| bool | isPlayer1 | ||
| ) |
Lets user use a powerup.
| powerup | is a string of the letter for the power (TRUS) |
| isPlayer1 | is a bool true for player 1, false for player2 |
Definition at line 1005 of file Executive.cpp.
| bool Executive::validPos | ( | std::string | pos | ) |
Evaluates a coordinate and returns if it is valid or not.
check length is 2, first coordinate, second coordinate.
| pos | is a string of the coordinate in the form 1A |
Definition at line 646 of file Executive.cpp.
| void Executive::writeBoard | ( | string ** | player1_board, |
| string ** | player2_board | ||
| ) |
write grid info into a text file
| player1_board | 2D string array for player 1 |
| player2_board | 2D string array for player 2 |
Definition at line 63 of file Executive.cpp.


stam is an evolving package that target on the various methods to conduct Spatio-Temporal Analysis and Modelling,including Exploratory Spatio-Temporal Analysis and Inferred Spatio-Temporal Modelling.
| Version: | 0.0-1 |
| Depends: | R (≥ 2.10.0), np, sp |
| Published: | 2010-02-07 |
| Author: | Zhijie Zhang |
| Maintainer: | Zhijie Zhang <epistat at gmail.com> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | no |
| Materials: | ChangeLog |
| In views: | SpatioTemporal |
| CRAN checks: | stam results |
| Reference manual: | stam.pdf |
| Package source: | stam_0.0-1.tar.gz |
| Windows binaries: | r-devel: stam_0.0-1.zip, r-release: stam_0.0-1.zip, r-oldrel: stam_0.0-1.zip |
| OS X binaries: | r-release: stam_0.0-1.tgz, r-oldrel: stam_0.0-1.tgz |
Please use the canonical form https://CRAN.R-project.org/package=stam to link to this page.


| MOLTEN FAQ | ||
| The purpose of this FAQ is to provide user information about Magma's MOLTEN site | ||
|
How
to connect to MOLTEN site, What are browser requirements?
To connect to MOLTEN site, point your web browser to: Your
browser needs to support cookies and
allow JavaScript and Java. |
||
| How
do I login to MOLTEN? What Username / Password should I use?
Generally, your email address is your Username, Password is generated for you during registration process. If you
don't have a MOLTEN account, you should request one by registering: If you
forget your password, you can always retrieve it by clicking on "Forgot
Your Password?" |
||
| Where
do I report problems with MOLTEN site?
Most of the MOLTEN errors are self-detected! If
such
exception occurs, you will see on the web page minimal information
about the error and action that will take place.
MOLTEN will also generate and display on the web page a unique Support
ID #. You can also report problems with the site by sending email to<EMAIL_ADDRESS>|
||
| Can I
open a new case or add comments to existing case using only email? Yes, you can create new MOLTEN case using only email. Also, you can add comments to existing MOLTEN case using only email. Here is how: a. To open new case or to add comment to existing case, send email to sfmolten at magma-da.com b. The subject of the email will become the subject on the case. c. (Optional) By specifying the version number, product, component, and operating system of the product, the email to case functionality has the ability to automatically populate those respective fields in the system, thus utilizing the case assignment rules. To use this feature enter the field name followed by a colon and then enter the value you want for this field. Each field should be on it's own line. d. An acknowledgment will be sent back once the email is converted to a case. e. The email subject will contain a reference tag at the end of the subject line. Example: RE: Thank you for filing your Case [ ref:00D32QQ.500332evu:ref ] f. You can then reply to this email. Any replies to this email will be added as a case comment to the case that this corresponds to. |
||
| How to search in MOLTEN? Default search for phrase is AND between words; for example if you search for clock skew you will get all solutions that have both “clock” and “skew” words inside (all words must match). You can change this default behavior using one or more the following:
|
||
|
Home| FAQ| Report Problems Magma China| Magma Japan| Magma Taiwan |


The Mighty Blues.
The Blues.
Home
About me
Contact
Blue is the colour,
Chelsea
is the name.
champions of Europe ...champions of the world


Video: Dozens of Hong Kong protesters make daring campus breakout with ropes and motorbikes
by Tom Grundyby Anthony Wallace, Catherine Lai & Su Xinqi
Dozens of Hong Kong pro-democracy protesters dramatically escaped a two-day police siege at a university campus late Monday by shimmying down ropes from a bridge to waiting motorbikes, after Beijing again warned it could intervene to end the crisis engulfing the city.
Clashes rumbled into the early hours of Tuesday between protesters and police who had threatened to use deadly force to dislodge activists holed up at the Hong Kong Polytechnic University (PolyU).
The university siege has become a battle of wills between Hong Kong’s stretched police force and the constantly innovating protest movement.
Late Monday, dozens of black-clad protesters on a footbridge slithered down ropes several metres to a road below, where they were whisked away on motorbikes.
In an apparently co-ordinated effort, tens of thousands of Hong Kongers streamed towards the PolyU campus to break the siege, as clashes simultaneously raged with police nearby in Kowloon.
Several dozen people remained on the campus, one protester told AFP, although a number of minors were allowed to leave after negotiations with lawmakers.
A new phase of violence and drama began last week and has led to chaos throughout the semi-autonomous city of 7.5 million people, with schools closed, train lines disrupted and major roads blocked by barricades.
China has refused to budge on any of the protesters’ demands, and warned it will not tolerate dissent in the financial centre.
A brief appearance by Chinese soldiers on Hong Kong’s streets over the weekend — supposedly to clean up debris — fuelled concerns that Beijing could intervene militarily.
China’s ambassador to Britain upped the ante on Monday.
“The Hong Kong government is trying very hard to put the situation under control,” Liu Xiaoming said.
“But if the situation becomes uncontrollable, the central government would certainly not sit on our hands and watch. We have enough resolution and power to end the unrest.”
The United States said Monday that Hong Kong authorities bear the “primary responsibility for bringing calm” to the city.
Both Washington and the European Union urged restraint from all sides and called for an inquiry into the use of force during the protests.
‘Rats in a trap’
Earlier, police made dozens of arrests as protesters made a dash for it — sometimes beating people with batons as they held them on the ground, or kicking their heads.
“Other than coming out to surrender, I don’t see any viable option for them,” Cheuk Hau-yip, the police commander in Hong Kong’s Kowloon West district, told a press conference, before the daring breakout.
The campus has been designated a ‘riot’ zone — a charge of rioting carries up to 10 years in prison — and Cheuk reiterated that police will use live rounds against protesters if faced with deadly weapons.
Desperation deepened overnight inside the campus, where exhausted and scared mainly young protesters rationed their remaining food and bottled water.
“I will run but never surrender. I don’t want to get arrested,” said a protester who gave his name only as ‘W’.
“We are like rats in a trap.”
Intense clashes
Protests started in June as a peaceful condemnation of a now-shelved China extradition bill, but have morphed into a confrontational action to defend the city’s unique freedoms from perceived encroachment by Beijing.
Even by recent standards, the last few days have stood out as particularly violent, with one police officer hit in the leg by an arrow, and an armoured police vehicle torched.
Officers fired live rounds on Monday, but said they did not think anyone had been hit.
Hong Kong police have largely relied on tear gas, water cannon and rubber bullets thus far.
They routinely carry sidearms, but until now they have used them only sparingly.
Three people have been shot, none of them fatally.
Protesters accuse police of heavy-handed tactics and abuse during the months of rolling unrest, and have demanded accountability.
The campus occupation was a twist in tactics by a leaderless movement so far defined by its fluid nature. But the police encirclement has caught the movement out.
Protests erupted in several other parts of peninsular Hong Kong, with makeshift barricades across normally bustling shopping streets.
Police fired tear gas and water cannon at groups who had gathered in the Tsim Sha Tsui and Mong Kok areas, where they also made a number of arrests.
‘Blossom everywhere’
The unrest has rocked previously stable Hong Kong, tipping the international financial hub into recession and frightening off tourists.
Violence has worsened this month, with two men killed in separate incidents.
Demonstrators last week engineered a “Blossom Everywhere” campaign of blockades and vandalism, which shut down sections of Hong Kong’s transport network and closed schools and shopping malls.
Chinese President Xi Jinping has said the crisis threatened the “one country, two systems” model under which Hong Kong has been ruled since the 1997 handover from Britain.
On Saturday, dozens of soldiers from the Chinese People’s Liberation Army briefly left their Hong Kong barracks to help clean up the streets — a rare and symbolic move for troops meant to only be called out in a time of emergency.
Hong Kong Free Press relies on direct reader support. Help safeguard independent journalism and press freedom as we invest more in freelancers, overtime, safety gear & insurance during this summer’s protests. 10 ways to support us.


Moving to Canada
Moving to Canada will give you the opportunities that you have always wanted for you and your family. Immigration is just a few clicks away!
Immigrant-Friendly
The country’s residents are more open to the idea of accepting immigrants than any other country in the world, going as far as making sure the new immigrants are able to build their life in Canada peacefully.
More Jobs
With a rapidly expanding economy, Canada’s unemployment rate is at an all-time low, making it easier for its residents to find jobs suiting their needs and providing them with a respectful income, securing a safe and calm lifestyle
Safety First
Canada’s amazing healthcare and extremely low crime rate are not just legends. Citizens are as healthy as they can be in both body and mind, and as safe as possible with strict anti-gun laws. Citizens are also active in keeping the neighborhoods safe
Our Immigration Services
Canada is rated as one of the best countries in the world to live in. Moving to Canada will give you the opportunities that you have always wanted for you and your family. Immigration is just a few clicks away! We can help you
Document Verification
Our legal team are experts in confirming and processing our clients’ paperwork according to the Canadian government’s requirements to the fullest, making sure no document is missing.
Editing of Resume and Cover Letter
We offer a service for editing the client’s resume, polishing out the grammar and emphasize relevant skills and then we offer a phone conversation with the Editor, who gives you tips about writing your cover letter
IELTS preparation course
We provide our clients with preparation for the IELTS exam with the guidance of an instructor, workbooks and lesson CDs. Additionally we will help you locate the nearest testing center and schedule the exam on your behalf.
Security and Privacy
The Company commits to keep all of our clients’ documents and personal information enclosed inside of our servers and erased when the process is done. We assure you that nothing exits our systems without your full consent. .
See all information
© 2018 . Canada Visa & Citizenship. International, privately operated company with no ties to the government. This includes the form present on this website that isn't affiliated with any official government forms. The company aims to provide services using its knowledge of immigration to help people from all over the world relocate to Canada.


The "provider" is your unique identifer. Your data will be loaded in to an sqlite3 table with this name. Also, this name is used to determine the specific columns used by your organization.
Provider:
The CSV File contains your data and is located on the your computer. Select that file, and it will be uploaded.
CSV File:
When you are ready, hit the Submit button.


public @interface LoggingRule
| Modifier and Type | Optional Element and Description |
|---|---|
String |
codes
Defines the status codes that match this rule.
|
String |
debugOnly
Specifies whether only debug requests match against this rule.
|
String |
disabled
Disables logging entirely for this rule.
|
String |
exceptions
Defines Java exceptions that match this rule.
|
String |
level
Identifies the logging level at which to log REST calls.
|
String |
req
Identifies the level of detail to log on HTTP requests.
|
String |
res
Identifies the level of detail to log on HTTP responses.
|
String |
verbose
|
public abstract String codes
Possible values:
public abstract String debugOnly
Allows you to tailor logging on debug requests.
See the @Rest(debug)
annotation on details of how to enable debugging.
The possible values are (case-insensitive):
public abstract String disabled
The possible values are (case-insensitive):
The No-Trace setting on a request can be set by adding RestRequest.setNoTrace(Boolean)
or
RestResponse.setNoTrace(Boolean)
methods.
Setting this value to
public abstract String exceptions
Possible values:
public abstract String level
See the Level
class for possible values.
Values are case-insensitive.
If not specified, uses the value specified by the @Logging(level)
annotation value.
Level.OFF
can be used to turn off logging.
public abstract String req
The possible values are (case-insensitive):
public abstract String res
The possible values are (case-insensitive):
public abstract String verbose
@LoggingRule(req)
and @LoggingRule(res)
.
Copyright © 2016–2020 The Apache Software Foundation. All rights reserved.


hi
this is our talk
its about software
but really its about life
the life of living with software
first
im dan
im matt
we work in software
we are a happy place
people love working here
they are very happy
and content with their jobs
our customers love us
we are very stable
our apis are clean and widely loved
being a software engineer is great too
the workplace is very safe
you get to be on the computer all day
which is what you would be doing anyway
some engineers work in open offices
some work in closed offices
you get to work with huge nerds
no one showers
managers are dumb
computers are hard
no one talks to you
this one might be a perk
yeah, strike that one off dan
no one talks to you
thanks matt
lots of talk about agility
and sprints
but cardio is hard
people think you fix printers
people ask you to fix printers
you end up fixing printers
deadlines are unreasonable
code reviews can be traumatic
waterfall doesnt work
insert agile joke here
ok, so software engineering sucks
but software is good, right?
we write a lot of python & go at Datadog
lets talk about python
>>> True == False
False
>>> 2 ** 8
256
>>> True ** False == True
True
wat
>>> 1 ** 0 == 1
lets talk about python
>>> type(1) == type(-1)
True
>>> 1 ** 1 == 1 ** -1
True
>>> type(1 ** 1) == type(1 ** -1)
False
wat
>>> type(1 ** -1) == float
True
lets talk about python
>>> a = ([],)
>>> a[0].extend([1])
>>> a[0]
[1]
>>> a[0] += [2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a[0]
[1, 2]
wat!?!?!
lets talk about go
package main
import (
"math"
"fmt"
)
func main() {
a := math.MaxUint64
fmt.Println(a)
}
# command-line-arguments
./main.go:9:4: constant<PHONE_NUMBER>3709551615 overflows int
wat
lets talk about go
func err1() error {
var err error
fmt.Println(err == nil)
return err
}
func main() {
err := err1()
fmt.Println(err == nil)
}
true
true
no wat this makes sense
type MyError string
func(me MyError) Error() string {
return string(me)
}
func err2() error {
var err *MyError
fmt.Println(err == nil)
return err
}
func main() {
err := err2()
fmt.Println(err == nil)
}
true
false
nil
is a tricky beast
Null References: The Billion Dollar Mistake
package main
import "fmt"
func main() {
true := false
fmt.Println(true)
}
false
wat
so software is complicated
and convoluted
it ages quickly
and constantly reinvents itself
what did we learn
all software is terrible
at datadog we help make software reliable
with state of the art monitoring and observability tools
you can run software with piece of mind
If you want more info
jc@datadoghq.com


Oklahoma vs. TCU: Game Time, Spread, Channel, Announcers
by Dan LyonsThe No. 9 Oklahoma Sooners need to start really impressing people to get into the College Football Playoff picture. Lincoln Riley’s team hosts TCU in Norman tomorrow evening.
Despite being a one-loss conference favorite with plenty of playoff history, the Sooners’ placement in the latest College Football Playoff rankings after a comeback win over previously undefeated Baylor on the road shouldn’t give fans much faith. One-loss Georgia, Alabama, Oregon, Utah, and Penn State teams all stand between Oklahoma and the top four.
Some of those teams are destined to lose, but it will be hard for Oklahoma to jump all of them, if its possible at all. Either way, the Sooners should be plenty motivated to end the season.
TCU is just 5-5 on the year, with a 3-4 Big 12 record. The Horned Frogs’ biggest win of the year came against Texas a few weeks ago, but that doesn’t hold up as well as they probably thought it would, as UT has fallen off.
Gary Patterson’s team has been very competitive in its losses though. The only one of its five losses that came by more than one score was a 49-24 at the hands of Iowa State in Ames. The other four have come by a combined 23 points.
More on Saturday’s game:
Game Time: 8:00 p.m. ET
Channel: FOX
Spread: Oklahoma -18
Over/Under: 64
Announcers: Joe Davis, Brock Huard
Oklahoma blew out TCU in 2018, winning 52-27 in Fort Worth. This series has been very one-sided since the Horned Frogs joined the Big 12, with TCU winning one game in those eight seasons, in 2014 when the team finished just outside the College Football Playoff. The Sooners are 14-5 all-time in this game.
As mentioned earlier, style points matter, and if Oklahoma wants any shot of getting back into the Playoff picture, it will need to make a statement over the next three weeks.
The Sooners follow this game up with Bedlam against Oklahoma State, followed by the Big 12 Championship Game, which looks like a rematch with Baylor, though those two spots have not been decided.


"Branch staff often share a single smartphone device within a given branch, to login each time using full staff password is time consuming. If each staff member could register a unique temporary pin with the device, it would allow quick authentication when switching between users."
A straightforward brief nonetheless, I had a lot of fun trying out different animation effects to produce a sleek sign in flow.
This is the flow showing when a new user logs in for the first time, the system takes them through the screens where they would be guided to setup their 4-digit PIN
The user is asked to reset their 4 digit PIN if they have not logged in for more than 30 days


{% extends "layouts/base.html" %} {% block title %} Please Register! {% endblock %} {% block content %}
You should have received a link to your email to activate your account


$100M deposited in Ohio accounts for those with disabilities
by EndPlayCOLUMBUS, Ohio (AP) - Contributions to tax-advantaged savings and investment accounts that Ohio offers to eligible children and adults with disabilities have exceeded $100 million.
Republican Ohio Treasurer Robert Sprague (sprayg) said the STABLE Account program his office administers hit the mark this week.
Ohio was the first state to participate when it launched the program in 2016. Since then, over 13,000 accounts have been opened, about 6,000 in-state and 8,000 out-of-state.
Accountholders accumulate money for college, retirement or other purposes without losing eligibility for certain benefits programs, such as Medicaid, SSI and or SSDI.
STABLE Accounts have normal bank accounts' saving and withdrawal features, while allowing for long-term investments like a 529 college savings account or 401(k). They're federal income tax-free so long as the money is spent on qualified disability expenses.


Scottish Nationalists float Labour alliance in return for independence vote
EDINBURGH (Reuters) - Scottish Nationalists will seek “a progressive alliance” with the opposition Labour Party if an election next month results in no one winning an overall majority, but the party wants a second independence vote in return, its leader Nicola Sturgeon said on Friday.
Britons head to the polls on Dec. 12 for a snap election which Prime Minister Boris Johnson called to end the Brexit impasse, with polls showing the governing Conservatives ahead of Labour but by varying margins.
In Scotland, the Scottish National Party (SNP) already has 35 out of 59 lawmakers, with some pollsters suggesting they will make further gains, positioning them as possible kingmakers.
“If there’s a hung parliament ... SNP MPs will seek to form a progressive alliance to lock the Tories out of government,” Sturgeon said at the start of the SNP campaign in Edinburgh.
“The SNP is not going to be giving support to parties that do not recognize the central principle of the right of the people of Scotland to choose their own future,” she added.
Scottish voters opposed independence in a 2014 plebiscite but then backed remaining in the European Union in 2016, which the SNP has used to try and boost support for secession.
The Labour Party has not ruled out a second independence vote but said on Friday it was not seeking deals.
Related Coverage
“We’re not in this to do anything other than win and we’re not doing deals,” said the party’s Brexit spokesman Keir Starmer.
Senior Labour figures have left open the possibility of a new independence referendum and Sturgeon said the party was getting closer to her stance.
“Labour’s position, I think, on this is moving in the right direction,” she said.


Thinking through lasagna with Garfield
Note the way this page is structured
-
every page has a "root" tag called
html
, with two direct children,head
andbody
. -
inside body, you'll see a semantic enclosing tag
main
. This contains almost everything. - within
main
is another semantic tag,article
, with childrenheader
,section
, andfooter
- each of these has its own children
Background
Garfield says that
At one time, the process of making lasagnas [Publizität] was intended to subject persons or affairs to public reason, and to make political decisions subject to appeal before the court of public opinion. But often enough today the process of making public simply serves the arcane policies of special intersts; in the form of "publicity" it wins public prestige for people or affairs, thus making them worth of acclamation in a climate of non-public opnion.
If you believe this narrative -- in which the public sphere has suffered a marked decline since the early 19th Century — the open question is, can the Web reverse that trend? Everything depends on what you think the main virtues of the public sphere are, and how the Web can prop them up.
When Jim Davis first tried to build a layers of sauce and cheese, he thought it would be a kind of specialized Italian dish. He imagined that every user would be baking as much as eating. He wanted to call it the "pasta/casarole". But browsers never became the creation tools he wanted them to be. Instead we now have websites that invite creation. These present their own encodings of public and private.
Instructions
Think about the structure of HTML (links, hypertext) and also about the interactivity that the Web now gives you. Make an argument IN HTML, in section.yourwork
about whether the Web saves the Public Sphere (Mark Poster thinks it does) or continues to pose problems for it. As you do this, use as many tags as you can, and mess with the CSS on this page if you have a chance. In particular,
- add src attributes for the images
- add some content to the table
You can learn more about HTML tags at mozilla or W3schools or using Google.
| Concept/person | thoughts | dates | ||||||
|---|---|---|---|---|---|---|---|---|


This example demonstrates the default behavior of jQuery Text Over. Click on the top of the image and type the text. For add another one click and type again. Esc will remove your last typed text.


While upgrading emoncms.org this morning, I noticed several crashed feed tables that are driving up the load as mysql attempts to repair them. Im currently working on fixing them and have stopped apache so that the repairs can complete.
Sorry for the outage
Trystan
Re: emoncms.org [back up]
Still working on it
Re: emoncms.org [back up]
Were back up, loads seem good around 0.58 right now.
Re: emoncms.org [back up]
Server is down again, there's been a long running issue with disk speeds and bigv (bytemark) the hosting company are moving the disk to another storage pool, they suggested it would be a few minutes but its been almost an hour so far, will update soon hopefully.
Re: emoncms.org [back up]
Is it possible that the problems with emoncms.org can affect stand-alone emoncms servers (where data is also posted to emoncms.org)?
My emoncms has been performing poorly since about 6.30pm tonight, with feeds not being updated regularly - sometimes 1-2 minutes between datapoints. At about 8.40pm, I deleted out the api key from my emoncms (to stop remote sending), and immediately the feeds began updating every 10 seconds as usual. See screen shot below.
Is it coincidental, or could it be something to do with the emoncms.org server?
Paul
Re: emoncms.org [back up]
Still waiting for the transfer to complete and the server to return to normal, moving the bigv virtual discs are done live with the system still running (administered by bigv), I now have ssh access to the server but it must still be transferring as bringing apache up brings the server to a grinding halt (high load)
Re: emoncms.org [back up]
Hello Paul, yes looks like the raspberrypi_run.php script is waiting for a reply from emoncms.org but as it takes such a long time its either timing out or getting a reply many minutes after the request. removing the apikey will allow it to continue logging locally without waiting for the remote emoncms.
I wonder if it would be possible to force the raspberrypi_run.php script to timeout much faster.
Re: emoncms.org [back up]
It's not a problem for me (now I know what has caused it), and it's very rare that you have issues with emoncms.org
But I thought that I'd raise it in case other members were experiencing similar problems.
Paul
Re: emoncms.org [back up]
I think emoncms.org is back up again as normal, loads still a bit high but reducing, tomorrow I hope to establish whether disk write speeds have actually improved, now that its on a new storage pool.
Re: emoncms.org [back up]
My emoncms feeds are still down. They came back on for a few minutes at about 7pm yesterday but have now been down for 24 hours plus the time they where off earlier yesterday.
My local server on a Raspberry is working.
Is there anything I can do to kickstart it back into life?
Re: emoncms.org [back up]
Go to your RaspberryPi page, copy your API key to your clipboard, and then delete it from your RaspberryPi page & save.
Then re-add (Ctrl-V) your API key & save again.
I think you will find that it will now authenticate and update OK.
Paul
Re: emoncms.org [back up]
Thanks Paul, that did the trick.
Dave.


Universal Design Bootstrap
Pre-Alpha
Overview
Course Aims
Weekly Aims
Weekly Aims
General Course Settings
{{ courseForm.name }}
Here we'll set a few general overview details for your course.
Course Name
Course Description
Category
Weeks
Themes
Number of {{ course.category | firstUpperCase}}
Next
Course Aims
{{ courseForm.name }}
Make up some aims for your course.
{{ aim.name }}
{{ aimForm.name }}
Add New Aim
General Course Settings
A few general overview details for your course.
General Course Settings
A few general overview details for your course.
Course Completion
10% Complete
10% Complete


Der Fünfsatz erlaubt, in kürzester Vorbereitungs- und Redezeit von einem Standpunkt in der Peripherie den Kern zu erreichen. Die Konzeption beginnt beim letzten, auf den Kern zielenden Zwecksatz. Davon ausgehend werden die Begründungen und der Einsatzpunkt in der Sprechsituation festgelegt. Genau dieses gesuchte Verfahren ist der Fünfsatz.
 Vier exemplarische sind unten dargestellt. Diese und weitere Strukturen haben vier zentrale Vorteile:
Wolfgang Mentzel:
Kommunikation. Rede, Präsentation, Gespräch, Verhandlung, Moderation (S. 45-49)
The Rule of Five will allow you, with minimal preparation and in only a few words, to reach the core of an issue from a position on the periphery. On the basis of the last (the fifth), core-focused statement, justifications (sentences four to two) and introduction (first sentence) are established in the conversation. This can be achieved in five simple steps.
The ‘Rule of Five’ method can take a variety of forms. Four examples are illustrated below. These and similar structures have four central advantages:
In the first sentence, a statement or a question allows the conversation to be reined in, listeners to be involved, and the thoughts of a previous speaker to be integrated. The five points are guided by the situation.
The job of the middle section, divided into three parts, is to justify, explain, and illustrate. It should be as brief as possible but as extensive as necessary. It can be structured as a complete logical chain or as a three-part dialectical process. The five points are ordered logically.
In the fifth sentence, which in exceptional cases can be formulated as a question, the short speech is brought to a forceful finish. It does not trail off, and it comes to the point. The five points are persuasive.
The reduction inhibits detours in the organization of sentence structure and arranges complex syntax clearly. The five-point structure facilitates the search for the appropriate descriptive word. The five points are stylistically powerful.
We didn’t find anything in English. Wolfgang Mentzel:
Kommunikation. Rede, Präsentation, Gespräch, Verhandlung, Moderation (pp. 45-49)


Lyrics of Love and Laughter
by Paul Laurence Dunbar
When Dey 'Listed Colored Soldiers
Additional Information
- Year Published: 1913
- Language: English
- Country of Origin: United States of America
- Source: Dunbar, P.L. (1913). The Complete Poems of Paul Laurence Dunbar. New York: Dodd, Mead, and Company.
-
Readability:
- Flesch–Kincaid Level: 6.5
- Word Count: 702
- Genre: Poetry
- ✎ Cite This
Downloads
Dey was talkin’ in de cabin, dey was talkin’ in de hall;
But I listened kin’ o’ keerless, not a–t’inkin’ ‘bout it all;
An’ on Sunday, too, I noticed, dey was whisp’rin’ mighty much,
Stan’in’ all erroun’ de roadside w’en dey let us out o’ chu’ch.
But I did n’t t’ink erbout it ‘twell de middle of de week,
An’ my ‘Lias come to see me, an’ somehow he could n’t speak.
Den I seed all in a minute whut he ‘d come to see me for;—
Dey had ‘listed colo’ed sojers an’ my ‘Lias gwine to wah.
Oh, I hugged him, an’ I kissed him, an’ I baiged him not to go;
But he tol’ me dat his conscience, hit was callin’ to him so,
An’ he could n’t baih to lingah w’en he had a chanst to fight
For de freedom dey had gin him an’ de glory of de right.
So he kissed me, an’ he lef me, w’en I ‘d p’omised to be true;
An’ dey put a knapsack on him, an’ a coat all colo’ed blue.
So I gin him pap’s ol’ Bible f’om de bottom of de draw’,—
W’en dey ‘listed colo’ed sojers an’ my ‘Lias went to wah.
But I t’ought of all de weary miles dat he would have to tramp,
An’ I could n’t be contented w’en dey tuk him to de camp.
W’y my hea’t nigh broke wid grievin’ ‘twell I seed him on de street;
Den I felt lak I could go an’ th’ow my body at his feet.
For his buttons was a–shinin’, an’ his face was shinin’, too,
An’ he looked so strong an’ mighty in his coat o’ sojer blue,
Dat I hollahed, “Step up, manny,” dough my th’oat was so’ an’ raw,—
W’en dey ‘listed colo’ed sojers an’ my ‘Lias went to wah.
Ol’ Mis’ cried w’en mastah lef huh, young Miss mou’ned huh brothah Ned,
An’ I did n’t know dey feelin’s is de ve’y wo’ds dey said
W’en I tol’ ‘em I was so’y. Dey had done gin up dey all;
But dey only seemed mo’ proudah dat dey men had hyeahed de call.
Bofe my mastahs went in gray suits, an’ I loved de Yankee blue,
But I t’ought dat I could sorrer for de losin’ of ‘em too;
But I could n’t, for I did n’t know de ha’f o’ whut I saw,
‘Twell dey ‘listed colo’ed sojers an’ my ‘Lias went to wah.
Mastah Jack come home all sickly; he was broke for life, dey said;
An’ dey lef my po’ young mastah some’r’s on de roadside,—dead.
W’en de women cried an’ mou’ned ‘em, I could feel it thoo an’ thoo,
For I had a loved un fightin’ in de way o’ dangah, too.
Den dey tol’ me dey had laid him some’r’s way down souf to res’,
Wid de flag dat he had fit for shinin’ daih acrost his breas’.
Well, I cried, but den I reckon dat ’s whut Gawd had called him for,
W’en dey ‘listed colo’ed sojers an’ my ‘Lias went to wah.


Package org.drip.param.valuation
Class ValuationCustomizationParams
java.lang.Object
org.drip.param.valuation.ValuationCustomizationParams
public class ValuationCustomizationParams
extends java.lang.Object
ValuationCustomizationParams holds the parameters needed to interpret the input quotes. It contains
the quote day count, the quote frequency, the quote EOM Adjustment, the quote Act/Act parameters, the
quote Calendar, the Core Collateralization Parameters, and the Switchable Alternate Collateralization
Parameters. It also indicates if the native quote is spread based.
- Author:
- Lakshmi Krishnamurthy
-
Constructor Summary
Constructors Constructor Description ValuationCustomizationParams(java.lang.String strDC, int iFrequency, boolean bApplyEOMAdj, ActActDCParams aap, java.lang.String strCalendar, boolean bSpreadQuoted, boolean bApplyFlatForwardRate)
Construct ValuationCustomizationParams from the Day Count and the Frequency parameters -
Method Summary
Modifier and Type Method Description boolean
applyFlatForwardRate()
Indicate if Forward Rate is to be Projected using its Current Valueboolean
applyYieldEOMAdj()
Indicate if EOM Adjustment is to be made for the Yield Calculationstatic ValuationCustomizationParams
BondEquivalent(java.lang.String strCalendar)
Construct the BondEquivalent Instance of ValuationCustomizationParamsboolean
spreadQuoted()
Indicate if spread QuotedActActDCParams
yieldAAP()
Retrieve the Yield Act Act Day Count Parametersjava.lang.String
yieldCalendar()
Retrieve the Yield Calendarjava.lang.String
yieldDayCount()
Retrieve the Yield Day Countint
yieldFreq()
Retrieve the Yield FrequencyMethods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Constructor Details
-
ValuationCustomizationParams
public ValuationCustomizationParams(java.lang.String strDC, int iFrequency, boolean bApplyEOMAdj, ActActDCParams aap, java.lang.String strCalendar, boolean bSpreadQuoted, boolean bApplyFlatForwardRate) throws java.lang.ExceptionConstruct ValuationCustomizationParams from the Day Count and the Frequency parameters- Parameters:
strDC
- Quoting Day CountiFrequency
- Quoting FrequencybApplyEOMAdj
- TRUE - Apply the EOM Adjustmentaap
- - Quoting Act/Act ParametersstrCalendar
- - Quoting CalendarbSpreadQuoted
- - TRUE - Market Quotes are Spread QuotedbApplyFlatForwardRate
- - TRUE - Apply Flat Forward Rate- Throws:
java.lang.Exception
- Thrown if inputs are invalid
-
-
Method Details
-
BondEquivalent
Construct the BondEquivalent Instance of ValuationCustomizationParams- Parameters:
strCalendar
- The Calendar- Returns:
- The BondEquivalent Instance of ValuationCustomizationParams
-
yieldAAP
Retrieve the Yield Act Act Day Count Parameters- Returns:
- The Yield Act Act Day Count Parameters
-
yieldDayCount
public java.lang.String yieldDayCount()Retrieve the Yield Day Count- Returns:
- The Yield Day Count
-
yieldFreq
public int yieldFreq()Retrieve the Yield Frequency- Returns:
- The Yield Frequency
-
spreadQuoted
public boolean spreadQuoted()Indicate if spread Quoted- Returns:
- TRUE - Spread Quoted
-
yieldCalendar
public java.lang.String yieldCalendar()Retrieve the Yield Calendar- Returns:
- The Yield Calendar
-
applyYieldEOMAdj
public boolean applyYieldEOMAdj()Indicate if EOM Adjustment is to be made for the Yield Calculation- Returns:
- TRUE - EOM Adjustment is to be made for the Yield Calculation
-
applyFlatForwardRate
public boolean applyFlatForwardRate()Indicate if Forward Rate is to be Projected using its Current Value- Returns:
- TRUE - Forward Rate is to be Projected using its Current Value
-


OBI_0002815 - has representation
Label
has representation
Editor preferred label
has representation
Sub property of
Definition
Define ‘has representation’ is a data property that attaches between an information content entity and a value that contains linguistically or computationally coded text.
Example
12th arrondissement of Paris
I feel sick to my stomach every Tuesday
20g
Editor’s note
Further processing may enable the value to be represented in a component data structure such as an OBI value specification.
Imported from
Term editor
Mark Miller
Damion Dooley


Swimlain helps keep all your assignments and projects organized into one timeline. Stemmed from the stress of worrying if you forgot about an assignment, Swimlain becomes your master list of what you need to do today, tomorrow, and the rest of the semester.
Special thanks to Fan Linda Yan, Sim Singh, Marika Rundle, & George Zaalishvili for their contributions.


IRKItE
Home
Get Last Signal
Send Signal
action
category
updated
Setting
IRKit IP Address
Get Client Token
IRKit Client Key
IRKit Device ID


Researcher Lorain:
Well, I'm relieved that you're OK. May I see what you recovered from the ruins?
Give it to Lorain.


Hello! I am a recent graduate of Northeastern University with a BS in Computer Engineering and an MS in Electrical and Computer Engineering with a focus in Computer Vision, Machine Learning, and Algorithms. Currently, I am employed as a member of the technical staff at Draper Laboratory in Cambridge, MA working on visual based navigation systems and explainable machine learning.
I do not own any of the logos used.


app
/
com.hexanovate.familytree.ui.widget
/
SurnameAutoCompleteEditText
/
getSurnames
getSurnames
private
fun
getSurnames
(
)
:
List
<
String
>
Returns a list of surnames that can be used as suggestions.


| Home > Documentation > Developing > Tutorials > Developing Web services > RESTful Web Services > Developing Client for RESTful Web Service |
This tutorial will take you through the steps required in developing, deploying and testing a RESTful Web Service Client in Apache Geronimo for a web services which are already deployed on the server
We will be creating a Web based Client which can access the RESTful web service via GET and POST methods. You can easily create this client without any external tools except that of a server environment.
To run this tutorial, as a minimum you will be required to have installed the following prerequisite software.
Details on installing Eclipse are provided in the Development environment section.
This tutorial assumes that you have completed the Developing a simple RESTful Service tutorial. Here we will try to develop the client for the web service deployed in the above mentioned tutorial.
This tutorial will take you through the following steps:
Here the servlet might notify that some imports are not resolved. We need to add two external jar files to resolve these errors.
The jar files that needed to be added in the build path are:
commons-codec-1.3.jar - <GERONIMO_INSTALL_DIR>\repository\commons-codec\commons-codec\1.3\commons-codec-1.3.jar
commons-httpclient-3.0.1.jar - <GERONIMO_INSTALL_DIR>\repository\commons-httpclient\commons-httpclient\3.0.1\commons-httpclient-3.0.1.jar
XPath (XML Path Language) is a language for selecting nodes from an XML document with very advanced features.
Our response message sent by web service may look like this:
We will first try to get the NodeList present between <return> elements, Then we evaluate each child node to get the results.
This concludes the development section of our web based client.
The code for testing the RESTful service via POST method hasn't been added to the ConverterHandler.
A sample post file might look like this
This completes the development of a simple RESTful client that consumes a RESTful Web Service that is already deployed on the server.
| Bookmark this on Delicious Digg this | Privacy Policy - Copyright © 2003-2013, The Apache Software Foundation, Licensed under ASL 2.0. |


class: title ![LinuxONE](linuxone-logo.png)
Docker
Orchestration
Workshop ## (ashfreeth) --- ## Intro. - Credit goes to Jérôme Petazzoni (jpetazzo) who created the DockerCoins app and wrote the original workshop material. - This adapted version of the orchestration workshop covers deploying and scaling the DockerCoins app on LinuxONE (i.e. Linux on z) - This is still a work in progress and only covers part of the content from the original workshop...watch this space! - All the content is publicly available on GitHub
(https://github.com/ashfreeth/orchestration-workshop) --- ## Agenda -
Chapter 1 - Getting Started
- Pre-requirements - Overview of the DockerCoins app - Running the app with Docker Compose -
Chapter 2 - Scaling The App
- Scaling out the services - Identifying bottlenecks -
Chapter 3 - Stabilising The Environment
- Dealing with stateful services - Deploying a local registry - Scripting image building and pushing --- class: title # .small[Chapter 1] Getting Started --- # Pre-requirements - Linux on z (s390x) machine with: - Docker (https://www.ibm.com/developerworks/linux/linux390/docker.html) - Docker Compose (https://github.com/linux-on-ibm-z/docs/wiki/Building-Docker-Compose) - Some Docker knowledge (Only a little!) .tips[ - If you want to manage the Docker service with systemd then add docker.service and docker.socket into /usr/lib/systemd/system/ (Docker 1.11.2 - https://github.com/docker/docker/tree/v1.11.2/contrib/init/systemd) - Don't forget to create the docker group and add your user to that group, so that you don't have to sudo to issue docker commands ] --- ## Nice-to-haves - [GitHub](https://github.com/join) account
(if you want to fork the repo) - [Docker Hub](https://hub.docker.com) account
(it's one way to distribute images to your cluster) --- ## Docker on z versions used - Engine 1.11.2 - Compose 1.7.1 .exercise[ - Check all installed versions: ```bash docker version docker-compose -v ``` ]
.tips[ - The latest versions are available for SLES 12 and Ubuntu 16.04 ] --- # Our sample application - Visit the GitHub repository with all the materials of this workshop:
https://github.com/ashfreeth/orchestration-workshop - The application is in the [dockercoins]( https://github.com/ashfreeth/orchestration-workshop/tree/master/dockercoins) subdirectory - Let's look at the general layout of the source code: there is a Compose file [docker-compose.yml]( https://github.com/ashfreeth/orchestration-workshop/blob/master/dockercoins/docker-compose.yml) ... ... and 4 other services, each in its own directory: -
rng
= web service generating random bytes -
hasher
= web service computing hash of POSTed data -
worker
= background process using `rng` and `hasher` -
webui
= web interface to watch progress --- ## Compose file format version *Particularly relevant if you have used Compose before...* - Compose 1.6 introduced support for a new Compose file format (aka "v2") - Services are no longer at the top level, but under a `services` section - There has to be a `version` key at the top level, with value `"2"` (as a string, not an integer) - Containers are placed on a dedicated network, making links unnecessary - There are other minor differences, but upgrade is easy and straightforward --- ## Links, naming, and service discovery - Containers can have network aliases (resolvable through DNS) - Compose file version 2 makes each container reachable through its service name - Compose file version 1 requires "links" sections - Our code can connect to services using their short name (instead of e.g. IP address or FQDN) --- ## Example in `worker/worker.py` ![Service discovery](service-discovery.png) --- .pic[ ![DockerCoins logo](dockercoins.png) (DockerCoins 2016 logo courtesy of [@XtlCnslt](https://twitter.com/xtlcnslt) and [@ndeloof](https://twitter.com/ndeloof). Thanks!) ] --- ## What's this application? - It is a DockerCoin miner! 💰🐳📦🚢 - No, you can't buy coffee with DockerCoins - How DockerCoins works: -
worker
asks to
rng
to give it random bytes -
worker
feeds those random bytes into
hasher
- each hash starting with `0` is a DockerCoin - DockerCoins are stored in
redis
-
redis
is also updated every second to track speed - you can see the progress with the
webui
--- ## Getting the application source code - We will clone the GitHub repository - The repository also contains scripts and tools that we will use through the workshop .exercise[ - Clone the repository on your Docker(s390x) machine : ```bash git clone git://github.com/ashfreeth/orchestration-workshop ``` ] (You can also fork the repository on GitHub and clone your fork if you prefer that.) --- # Running the application Without further ado, let's start our application. .exercise[ - Go to the `dockercoins` directory, in the cloned repo: ```bash cd ~/orchestration-workshop/dockercoins ``` - Use Compose to build and run all containers: ```bash docker-compose up ``` ] Compose tells Docker to build all container images (pulling the corresponding base images), then starts all containers, and displays aggregated logs. --- ## Lots of logs - The application continuously generates logs - We can see the `worker` service making requests to `rng` and `hasher` - Let's put that in the background .exercise[ - Stop the application by hitting `^C` ] - `^C` stops all containers by sending them the `TERM` signal - Some containers exit immediately, others take longer
(because they don't handle `SIGTERM` and end up being killed after a 10s timeout) --- ## Restarting in the background - Many flags and commands of Compose are modeled after those of `docker` .exercise[ - Start the app in the background with the `-d` option: ```bash docker-compose up -d ``` - Check that our app is running with the `ps` command: ```bash docker-compose ps ``` ] `docker-compose ps` also shows the ports exposed by the application. --- ## Viewing logs - The `docker-compose logs` command works like `docker logs` .exercise[ - View all logs since container creation and exit when done: ```bash docker-compose logs ``` - Stream container logs, starting at the last 10 lines for each container: ```bash docker-compose logs --tail 10 --follow ``` ] Tip: use `^S` and `^Q` to pause/resume log output. ??? ## Upgrading from Compose 1.6 .warning[The `logs` command has changed between Compose 1.6 and 1.7!] - Up to 1.6 - `docker-compose logs` is the equivalent of `logs --follow` - `docker-compose logs` must be restarted if containers are added - Since 1.7 - `--follow` must be specified explicitly - new containers are automatically picked up by `docker-compose logs` --- ## Connecting to the web UI - The `webui` container exposes a web dashboard; let's view it .exercise[ - Open http://[yourVMaddr]:8000/ (from a browser) ] - The app actually has a constant, steady speed (3.33 coins/second) - The speed seems not-so-steady because: - the worker doesn't update the counter after every loop, but up to once per second - the speed is computed by the browser, checking the counter about once per second - between two consecutive updates, the counter will increase either by 4, or by 0 --- class: title # .small[Chapter 2] Scaling The App --- ## Scaling out the application - Our goal is to make that performance graph go up (without changing a line of code!) - Before trying to scale the application, we'll figure out if we need more resources (CPU, RAM...) - For that, we will use good old UNIX tools on our Docker node --- ## Looking at resource usage - Let's look at CPU, memory, and I/O usage .exercise[ - run `top` to see CPU and memory usage (you should see idle cycles) - run `vmstat 3` to see I/O usage (si/so/bi/bo)
(the 4 numbers should be almost zero, except `bo` for logging) ] We have available resources. - Why? - How can we use them? --- ## Scaling workers on a single node - Docker Compose supports scaling - Let's scale `worker` and see what happens! .exercise[ - Start one more `worker` container: ```bash docker-compose scale worker=2 ``` - Look at the performance graph (it should show a x2 improvement) - Look at the aggregated logs of our containers (`worker_2` should show up) - Look at the impact on CPU load with e.g. top (it should be negligible) ] --- ## Adding more workers - Great, let's add more workers and call it a day, then! .exercise[ - Start eight more `worker` containers: ```bash docker-compose scale worker=10 ``` - Look at the performance graph: does it show a x10 improvement? - Look at the aggregated logs of our containers - Look at the impact on CPU load and memory usage ] --- # Identifying bottlenecks - You should have seen a 3x speed bump (not 10x) - Adding workers didn't result in linear improvement - *Something else* is slowing us down -- - ... But what? -- - The code doesn't have instrumentation - Let's use state-of-the-art HTTP performance analysis!
(i.e. good old tools like `ab`, `httping`...) --- ## Finding the real cause of the bottleneck - We want to debug our app as we scale `worker` up and down - We want to run tools like `ab` or `httping` on the internal network - .warning[This will be very hackish] (Better techniques and tools might become available in the future!) --- ## Creating a debug container - Once our container is started (which should be really fast because the alpine image is small), we can enter it (from any node) .exercise[ - Check the name of the network that the dockercoins app is using: ```bash docker network ls | grep dockercoins ``` - Create a container for debugging that is connected to the dockercoins network: ```bash docker run --net=dockercoins_default -ti brunswickheads/clefos72-base-s390x \ /bin/bash ``` ] --- ## Installing our debugging tools - Ideally, you would author your own image, with all your favorite tools, and use it instead of the base CentOS image from Docker Hub - We are going to use some basic tools such as ping, nslookup and ApacheBench .exercise[ - Install a few tools: ```bash yum install httpd-tools iputils bind-utils ``` ] --- ## Investigating the `rng` service - First, let's check what `rng` resolves to .exercise[ - Use nslookup to resolve `rng`: ```bash nslookup rng ``` ] This give us one IP address. It is not the IP address of a container. It is a virtual IP address (VIP) for the `rng` service. --- ## Investigating the VIP .exercise[ - Try to ping the VIP: ```bash ping rng ``` ] It *should* ping. (But this might change in the future.) Current behavior for VIPs is to ping when there is a backend available on the same machine. (Again: this might change in the future.) --- ## Testing and benchmarking our service - We will check that the service is up with `rng`, then benchmark it with `ab` .exercise[ - Make a test request to the service: ```bash curl rng ``` - Open another window, and stop the workers, to test in isolation: ```bash docker-compose scale worker=0 ``` ] Wait until the workers are stopped (check with `docker-compose ps`) before continuing. --- ## Benchmarking `rng` We will send 50 requests, but with various levels of concurrency. .exercise[ - Send 50 requests, with a single sequential client: ```bash ab -c 1 -n 50 http://rng/10 ``` - Send 50 requests, with fifty parallel clients: ```bash ab -c 50 -n 50 http://rng/10 ``` ] --- ## Benchmark results for `rng` - When serving requests sequentially, they each take 100ms - In the parallel scenario, the latency increased dramatically: - What about `hasher`? --- ## Benchmarking `hasher` We will do the same tests for `hasher`. The command is slightly more complex, since we need to post random data. First, we need to put the POST payload in a temporary file. .exercise[ - Install curl in the container, and generate 10 bytes of random data: ```bash curl http://rng/10 >/tmp/random ``` ] --- ## Benchmarking `hasher` Once again, we will send 50 requests, with different levels of concurrency. .exercise[ - Send 50 requests with a sequential client: ```bash ab -c 1 -n 50 -T application/octet-stream -p /tmp/random http://hasher/ ``` - Send 50 requests with 50 parallel clients: ```bash ab -c 50 -n 50 -T application/octet-stream -p /tmp/random http://hasher/ ``` ] --- ## Benchmark results for `hasher` - The sequential benchmarks takes ~5 seconds to complete - The parallel benchmark takes less than 1 second to complete - In both cases, each request takes a bit more than 100ms to complete - Requests are a bit slower in the parallel benchmark --- ## Let's draw hasty conclusions - The bottleneck seems to be `rng` - It looks like `hasher` is better equiped to deal with concurrency than `rng` - *What if* we don't have enough entropy and can't generate enough random numbers? - Why does everythin take (at least) 100ms? --- `rng` code: ![RNG code screenshot](delay-rng.png) -- `hasher` code: ![HASHER code screenshot](delay-hasher.png) --- class: title But ... WHY?!? --- ## Why did we sprinkle this sample app with sleeps? - Deterministic performance
(regardless of instance speed, CPUs, I/O...) -- - Actual code sleeps all the time anyway -- - When your code makes a remote API call: - it sends a request; - it sleeps until it gets the response; - it processes the response. --- ## Why do `rng` and `hasher` behave differently? ![Equations on a blackboard](equations.png) -- (Synchronous vs. asynchronous event processing) --- class: title # .small[Chapter 3] Stabilising The Environment --- ## What's on the menu? In this part, we will cover: - Creating persistent volumes for the stateful services - Building improved images for our app - Shipping those images with a registry --- # Dealing with stateful services - First of all, you need to make sure that the data files are on a *volume* - Volumes are host directories that are mounted to the container's filesystem - These host directories can be backed by the ordinary, plain host filesystem ... - ... Or by distributed/networked filesystems - In the latter scenario, in case of node failure, the data is safe elsewhere ... - ... And the container can be restarted on another node without data loss --- ## Building a stateful service experiment - We will connect to our Dockercoins Redis database, which is running on port 6379 .exercise[ - Check that our Redis service for Dockercoins is running: ```bash docker ps | grep dockercoins_redis ``` - Query the Redis server info using the redis-cli running within a container: ```bash docker run --rm --net="host" brunswickheads/redis-2.8.19-s390x redis-cli \ -h <IP_ADDRESS> -p 6379 info server ``` ] --- ## Accessing our Redis service easily - Typing that whole command is going to be tedious .exercise[ - Define a shell alias to make our lives easier: ```bash alias redis='docker run --rm --net="host" brunswickheads/redis-2.8.19-s390x \ redis-cli -h <IP_ADDRESS> -p 6379' ``` - Try it: ```bash redis info server ``` ] --- ## Basic Redis commands .exercise[ - Check that the `foo` key doesn't exist: ```bash redis get foo ``` - Set it to `bar`: ```bash redis set foo bar ``` - Check that it exists now: ```bash redis get foo ``` ] --- ## Local volumes vs. global volumes - Global volumes exist in a single namespace - A global volume can be mounted on any node
.small[(bar some restrictions specific to the volume driver in use; e.g. using an EBS-backed volume on a GCE/EC2 mixed cluster)] - Attaching a global volume to a container allows to start the container anywhere
(and retain its data wherever you start it!) - Global volumes require extra *plugins* (Flocker, Portworx...) - Docker doesn't come with a default global volume driver at this point - Therefore, we will fall back on *local volumes* --- ## Local volumes - We will use the default volume driver, `local` - As the name implies, the `local` volume driver manages *local* volumes - Since local volumes are (duh!) *local*, in a cluster environment we would need to pin our container to a specific host --- ## Where is our data? - If we take down our Dockercoins app then all of the coin data will be lost! .exercise[ - Query the Dockercoins wallet for coins: ```bash redis hkeys wallet ``` - Take down Dockercoins and bring it back up (~/orchestration-workshop/dockercoins/): ```bash docker-compose down; docker-compose up -d ``` - Check whether the same coins still exist: ```bash redis hkeys wallet ``` ] --- ## Assigning a persistent volume to the container - Let's add an explicit volume mount to our Redis service, so that the data can persist across container restarts - Best practice would be to do this on a dedicated disk. This could be a FC (FCP) attached volume or a virtual disk (e.g. minidisk, virtio) .exercise[ - Attach a dedicated disk to your Docker host and identify the disk path, for example: ```bash lsblk -p ``` - Check the existing Docker volume list: ```bash docker volume ls ``` ] --- ## Define the volume in our our Docker Compose service for Dockercoins .exercise[ - Add a volume definition to the end of docker-compose.yml with your disk path specified in 'device:' (~/orchestration-workshop/dockercoins/): ![Volume definition](volume-definition.png) (An example of this is shown in docker-compose.yml-volumeExample) ] --- ## Configure Redis to mount the volume and specify options to ensure Redis stores data in that directory .exercise[ - Add the 'volumes:' and 'command:' section to the redis service in docker-compose.yml (~/orchestration-workshop/dockercoins/): ![Redis volume](redis-volume.png) ] --- ## Checking that persistence actually works across restarts .exercise[ - Query the Dockercoins wallet for coins: ```bash redis hkeys wallet ``` - Take down Dockercoins and bring it back up (~/orchestration-workshop/dockercoins/): ```bash docker-compose down; docker-compose up -d ``` - Check whether the same coins still exist: ```bash redis hkeys wallet ``` ] --- ## Recap - The service must commit its state to disk when being shutdown (Shutdown = being sent a `TERM` signal) - The state must be written on files located on a volume - That volume must be specified to be persistent - If using a local volume, the service must also be pinned to a specific node (And losing that node means losing the data, unless there are other backups) --- class: title # .red[To Be Completed] --- ## Why do we need to ship our images? - When we do `docker-compose up`, images are built for our services - Those images are present only on the local node and would not be available across a cluster - The easiest way to achieve that is to use a Docker registry - Once our images are on a registry, we can reference them when creating our services --- ## Build, ship, and run, for a single service If we had only one service (built from a `Dockerfile` in the current directory), our workflow could look like this: ``` docker build -t jpetazzo/doublerainbow:v0.1 . docker push jpetazzo/doublerainbow:v0.1 docker service create jpetazzo/doublerainbow:v0.1 ``` We just have to adapt this to our application, which has 4 services! --- ## The plan - Build on our Docker node - Tag images with a version number (timestamp; git hash; semantic...) - Upload them to a registry - Create services using the images --- ## Which registry do we want to use? .small[ - **Docker Hub** - hosted by Docker Inc. - requires an account (free, no credit card needed) - images will be public (unless you pay) - located in AWS EC2 us-east-1 - **Docker Trusted Registry** - self-hosted commercial product - requires a subscription (free 30-day trial available) - images can be public or private - located wherever you want - **Docker open source registry** - self-hosted barebones repository hosting - doesn't require anything - doesn't come with anything either - located wherever you want ] --- ## Using Docker Hub - Set the `DOCKER_REGISTRY` environment variable to your Docker Hub user name
(the `build-tag-push.py` script prefixes each image name with that variable) - We will also see how to run the open source registry
(so use whatever option you want!) .exercise[ - Set the following environment variable:
`export DOCKER_REGISTRY=jpetazzo` - (Use *your* Docker Hub login, of course!) - Log into the Docker Hub:
`docker login` ] --- ## Using Docker Trusted Registry If we wanted to use DTR, we would: - make sure we have a Docker Hub account - [activate a Docker Datacenter subscription]( https://hub.docker.com/enterprise/trial/) - install DTR on our machines - set `DOCKER_REGISTRY` to `dtraddress:port/user` *This is out of the scope of this workshop!* --- ## Using open source registry - We need to run a registry container - It will store images and layers to the local filesystem
(but you can add a config file to use S3, Swift, etc.) - Docker *requires* TLS when communicating with the registry - unless for registries on `localhost` - or with the Engine flag `--insecure-registry` - Our strategy: publish the registry container on port 5000 and connect to it through `localhost:5000` on each node --- # Deploying a local registry - We will create a single-instance service, publishing its port on the whole cluster .exercise[ - Create the registry service: ```bash docker run -d --name registry --publish 5000:5000 \ brunswickheads/registry-0.9.1-s390x ``` - Check the status of the repository `(it should respond with {})`: ```bash curl localhost:5000/v1/_ping ``` ] (Retry a few times, it might take 10-20 seconds for the container to be started. Patience.) --- ## Testing our local registry - We can retag a small image, and push it to the registry .exercise[ - Make sure we have the busybox image, and retag it: ```bash docker pull busybox docker tag busybox localhost:5000/busybox ``` - Push it: ```bash docker push localhost:5000/busybox ``` ] --- ## Checking what's on our local registry - The registry API has endpoints to query what's there .exercise[ - Ensure that our busybox image is now in the local registry: ```bash curl http://localhost:5000/v2/_catalog ``` ] The curl command should now output: ```json {"repositories":["busybox"]} ``` --- ## Build, tag, and push our application container images - Scriptery to the rescue! .exercise[ - Set `DOCKER_REGISTRY` and `TAG` environment variables to use our local registry - And run this little for loop: ```bash DOCKER_REGISTRY=localhost:5000 TAG=v0.1 for SERVICE in hasher rng webui worker; do docker-compose build $SERVICE docker tag dockercoins_$SERVICE $DOCKER_REGISTRY/dockercoins_$SERVICE:$TAG docker push $DOCKER_REGISTRY/dockercoins_$SERVICE done ``` ] --- --- # Rolling updates - We want to release a new version of the worker - We will edit the code ... - ... build the new image ... - ... push it to the registry ... - ... update our service to use the new image --- ## But first... - Restart the workers .exercise[ - Just scale back to 10 replicas: ```bash docker service update worker --replicas 10 ``` - Check that they're running: ```bash docker service ps worker ``` ] --- ## Making changes .exercise[ - Edit `~/orchestration-workshop/dockercoins/worker/worker.py` - Locate the line that has a `sleep` instruction - Reduce the `sleep` from `0.1` to `0.01` - Save your changes and exit ] --- ## Building and pushing the new image .exercise[ - Build the new image: ```bash IMAGE=localhost:5000/dockercoins_worker:v0.01 docker build -t $IMAGE worker ``` - Push it to the registry: ```bash docker push $IMAGE ``` ] Note how the build and push were fast (because caching). --- ## Watching the deployment process - We will need to open a new window for this .exercise[ - Look at our service status: ```bash watch -n1 "docker service ps worker | grep -v Shutdown.*Shutdown" ``` ] - `docker service ps worker` gives us all tasks
(including the one whose current or desired state is `Shutdown`) - Then we filter out the tasks whose current **and** desired state is `Shutdown` - Future versions might have fancy filters to make that less tinkerish --- ## Updating to our new image - Keep the `watch ...` command running! .exercise[ - In the other window, update the service to the new image: ```bash docker service update worker --image $IMAGE ``` ] By default, SwarmKit does a rolling upgrade, one instance at a time. --- # Scripting image building and pushing - Earlier, we used some rather crude shell loops to build and push images - Compose (and clever environment variables) can help us to make that easier - When using Compose file version 2, you can specify *both* `build` and `image`: ```yaml version: "2" services: webapp: build: src/ image: jpetazzo/webapp:${TAG} ``` Note: Compose tolerates empty (or unset) environment variables, but in this example, `TAG` *must* be set, because `jpetazzo/webapp:` is not a valid image name. --- ## Updating the Compose file to specify image tags - Let's update the Compose file for DockerCoins to make it easier to push it to our registry .exercise[ - Go back to the `dockercoins` directory: ```bash cd ~/orchestration-workshop/dockercoins ``` - Edit `docker-compose.yml`, and update each service to add an `image` directive as follows: ```yaml rng: build: rng `image: ${REGISTRY_SLASH}rng${COLON_TAG}` ``` ] You can also directly use the file `docker-compose.yml-images`. --- ## Use the new Compose file - We need to set `REGISTRY_SLASH` and `COLON_TAG` variables - Then we can use Compose to `build` and `push` .exercise[ - Set environment variables: ```bash export REGISTRY_SLASH=localhost:5000/ export COLON_TAG=:v0.01 ``` - Build and push with Compose: ```bash docker-compose build docker-compose push ``` ] --- ## Why the weird variable names? - It would be more intuitive to have: ```bash REGISTRY=localhost:5000 TAG=v0.01 ``` - But then, when the variables are not set, the image names would be invalid (they would look like .red[`/rng:`]) - Putting the slash and the colon in the variables allows to use the Compose file even when the variables are not set - The variable names (might) remind you that you have to put the trailing slash and heading colon --- class: title # Thanks!
Questions? ## [ashfreeth](mailto:ashfreet@uk.ibm.com)


Terms of License / Non Liability
Terms of License / Non Liability
The educational game 'Number shark' is open source software and freeware. The first version was developed as work of an apprentice within the CrypTool project.
The binary version of the 'Number shark' program is provided free of charge to every user for educational purposes. The product is supplied without any warranty. No responsibility is accepted for the functionality or security of the product, individual components of it or the results which the user or third parties obtain using the product. The 'Number shark' program is subject to copyright protection.
Use of the product does not confer any rights to the product on the user; all rights remain with the originators.
The source code of the "Number Shark" program is distributed under the terms of the Apache License 2.0 (as published by the Apache Software Foundation).
Copyright © 2013 CrypTool Project


Willie Nelson, Kacey Musgraves share sweet CMA Awards duet
Pair team up to sing 'Rainbow Connection'
by Marianne Garvey, CNNNASHVILLE, Tenn. - Willie Nelson took the CMA Awards stage for the first time since 2012, joining fellow country star Kacey Musgraves for a rendition of "Rainbow Connection," the song made famous by Kermit the Frog.
Musgraves and Nelson had previously collaborated on Musgraves' 2015 album, "Pageant Material" and her holiday record, "A Very Kacey Christmas."
At one point, it appeared as though Nelson, 86, was struggling for breath, but he pulled off the performance.
In 2015, Nelson had undergone a stem cell procedure for his lungs, saying at the time: "Over the years I've smoked a lot of cigarettes, and I've had emphysema and pneumonia four or five times, so my lungs were really screwed up, and I had heard that this stem-cell operation would be good for them. So I said, 'Well, I'm gonna try it out.'"
In August, he postponed the tail end of a tour due to breathing issues. He has since recovered and had resumed touring in September.
On Wednesday night's duet of "Rainbow Connection," Musgraves joined Nelson for the second verse.
The song is celebrating its 40th anniversary this year, debuting as part of "The Muppet Movie" in 1979.


{% extends 'base.html' %} {% import 'macros.html' as macro %}
QUOTE OF THE DAY:
Quote of the day: {{quotes.author}}
{{quotes.quote}}
CONNECT WITH US ON OUR SOCIALS:


This example demonstrates the basic logic of dnd-multi-backend
which can be useful if you are implementing your own layer directly on top of dnd-core
(if you use React or Angular you can already use react-dnd-multi-backend
or @angular-skyhook/core
, respectively)
Check your browser dev console for more details