JGProgressHUDDelegate Protocol Reference
| Conforms to | NSObject |
|---|---|
| Declared in | JGProgressHUD.h |
– progressHUD:willPresentInView:
Called before the HUD will appear.
- (void)progressHUD:(JGProgressHUD *__nonnull)progressHUD willPresentInView:(UIView *__nonnull)view
Parameters
view |
The view in which the HUD is presented. |
|---|
Discussion
Called before the HUD will appear.
Declared In
JGProgressHUD.h
– progressHUD:didPresentInView:
Called after the HUD appeared.
- (void)progressHUD:(JGProgressHUD *__nonnull)progressHUD didPresentInView:(UIView *__nonnull)view
Parameters
view |
The view in which the HUD is presented. |
|---|
Discussion
Called after the HUD appeared.
Declared In
JGProgressHUD.h
– progressHUD:willDismissFromView:
Called before the HUD will disappear.
- (void)progressHUD:(JGProgressHUD *__nonnull)progressHUD willDismissFromView:(UIView *__nonnull)view
Parameters
view |
The view in which the HUD is presented and will be dismissed from. |
|---|
Discussion
Called before the HUD will disappear.
Declared In
JGProgressHUD.h
– progressHUD:didDismissFromView:
Called after the HUD has disappeared.
- (void)progressHUD:(JGProgressHUD *__nonnull)progressHUD didDismissFromView:(UIView *__nonnull)view
Parameters
view |
The view in which the HUD was presented and was be dismissed from. |
|---|
Discussion
Called after the HUD has disappeared.
Declared In
JGProgressHUD.h


Twice a year, every Princeton student spends hours planning their courses for the following semester. Course selection choices are incredibly important: choosing well can make a semester fun, intellectually stimulating, and exciting, while choosing poorly can result in boredom, academic struggles, and disengagement. Princeton Courses is the best way to discover and learn about courses offered at Princeton. The website offers users effortless, precise searching and, for every Princeton course, the most comprehensive collection of information about the course’s details, schedule, evaluations, student comments, and history.
Access Princeton Courses at https://www.princetoncourses.com.
Access the GitHub public repository at https://github.com/sebthedev/PrincetonCourses.
Contact Kara Bressler<EMAIL_ADDRESS>(239) 298-3457 ) in case anything goes awry.
Princeton Courses Home Page: Link to Princeton Courses
Final Report: report.pdf
Product Guide: productguide.pdf
Demo Slides: demo.pdf
Thanks for a great semester, everyone!


404 - Link not found
We can’t seem to find "https://url.yoursite.com/link0". Please check the link and contact your practice if you're still experiencing issues.
We can’t seem to find "https://url.yoursite.com/link0". Please check the link and contact your practice if you're still experiencing issues.


The token is obrained through https://www.rhino3d.com/compute/login.
The source code is downloaded from GitHub.


|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD | DETAIL: ENUM CONSTANTS | FIELD | METHOD |
java.lang.Object java.lang.Enum<TransactionType> ionic.Msmq.TransactionType
public enum TransactionType
Specifies the transaction type to use when enqueuing messages into a transactional queue.
| Enum Constant Summary | |
|---|---|
MTS
If the application is running in the context of a COM+ (Component Services) transaction, the message is sent within the current COM+ transaction. |
|
None
Specifies that the call is not part of a transaction. |
|
SINGLE_MESSAGE
Specifies that the message is sent in a single-message transaction. |
|
XA
Specifies that the call is part of an externally coordinated, XA-compliant transaction. |
| Method Summary | |
|---|---|
int |
getValue()
|
static TransactionType |
valueOf(java.lang.String name)
Returns the enum constant of this type with the specified name. |
static TransactionType[] |
values()
Returns an array containing the constants of this enum type, in the order they are declared. |
| Methods inherited from class java.lang.Enum |
|---|
clone, compareTo, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf |
| Methods inherited from class java.lang.Object |
|---|
getClass, notify, notifyAll, wait, wait, wait |
| Enum Constant Detail |
|---|
public static final TransactionType None
Specifies that the call is not part of a transaction. This transaction type cannot be used to send a message to a transactional queue.
Equivalent to MSMQ's MQ_NO_TRANSACTION.
public static final TransactionType MTS
If the application is running in the context of a COM+ (Component Services) transaction, the message is sent within the current COM+ transaction. Otherwise, the message is sent outside of a transaction.
Equivalent to MSMQ's MQ_MTS_TRANSACTION.
public static final TransactionType XA
public static final TransactionType SINGLE_MESSAGE
Equivalent to MSMQ's MQ_SINGLE_MESSAGE.
| Method Detail |
|---|
public static TransactionType[] values()
for (TransactionType c : TransactionType.values()) System.out.println(c);
public static TransactionType valueOf(java.lang.String name)
name
- the name of the enum constant to be returned.
java.lang.IllegalArgumentException
- if this enum type has no constant
with the specified name
java.lang.NullPointerException
- if the argument is nullpublic int getValue()
|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | ENUM CONSTANTS | FIELD | METHOD | DETAIL: ENUM CONSTANTS | FIELD | METHOD |


A statement on the state of Ginger Nut biscuits
Graham Russell of Clovelly has noticed that "Arnott's Ginger Nut biscuits are baked to different recipes in NSW and in Queensland 'exactly the way', according to the respective packaging, that particular state 'loves' them. Queensland Ginger Nuts are much softer than those in NSW (a certain Queensland Senator may beg to differ - Granny). This raises many questions in my mind, including why are our respective state tastes different? And in this state of origin of Ginger Nuts, which is best? And are there any other foods prepared to state recipes?"
Keeping it in the pantry, George Manojlovic of Mangerton says: "The use-by date on my tub of honey is 23/10/21. Isn't that rather precise considering perfectly edible honey was found in 3000-year-old Egyptian tombs? It also got me wondering: Do C-8ers religiously adhere to use-by dates, or do they occasionally flirt with comestible peril?"
"On the subject of left-handedness (C8), my late mother, Dr Lily Bennett, was the only woman at her medical school in England in the early 1930s," writes David Bennett of Woollahra. "She was ambidextrous (for the usual reason – a left-handed child being forced to use her right hand) and, when sitting for exams, she would write with one hand until it got tired and then change. She was regularly summoned before the examiners to demonstrate that both handwritings were indeed hers."
Curmudgeon’s Corner (C8): "Why do waiters bring a metre-long pepper grinder to the table to pepper our food? Why such a long grinder? Why only pepper and not other condiments? Don’t they trust us to manage our own peppering?" asks Ted Richards of Batemans Bay.
"I was playing guitar yesterday while the cicadas were loudly buzzing outside," says Ian Aldridge of Goulburn. "They buzz to the note of B."
We're pretty circumspect in giving out endorsements, but as we have a few Carols on board (Shepherd, Dawes, Harris and our own Carolyn Cummins), we thought we’d mention that The Christmas Carols will be the first Carols-only carolling group of its kind, honoured to sing in the iconic Queen Victoria Building. That’s right, the QVB is calling all Carols (Carolines, Caroles, Caroliens, Carrolyns, Carolyns and Caros too). The collective will be led through rehearsals with esteemed conductor Bek Jensen (seems Karel Mark Chichon was busy) before a one-off performance under the central dome on December 16. There is a form on the QVB website.
No attachments, please. Include name, suburb and daytime phone.


--- layout: default class: testimonials bannerText: the people speak out permalink: /testimonials/ title: Testimonials ---
Finding Allisyn was the best thing that could have happened to my book. Her feedback and suggestions were right on point. She cared about my story and wanted it to be just as good as I wanted it to be. She was professional, encouraging, and working with her felt like a true partnership. I will recommend Allisyn to anyone I know looking for an editor.
I am so glad that I chose Allisyn to edit my book. This was my first attempt at publishing a book and she was extremely helpful. I found Allisyn to not only be professional to work with but she has an excellent eye for detail. She caught many of my mistakes and gave some great suggestions. If you are ever going to publish a book, I highly recommend you consider Allisyn to help with editing.
I was amazed at how many details Allisyn found that I never would have seen. Also, she touched base with me a week ahead of time and finished ahead of schedule. It's nice to work with someone who is on time (or early), professional, and meticulous.
I love Allisyn's professionalism and talent. She has an amazing eye for fiction editing, and I'm grateful I found her.
It is a pleasure for me to recommend Allisyn Ma as an editor. She worked with me as my Associate Editor at I Love Chile. She performed so well in the position that it was really hard for us to find someone as good as her when she left to go back to the United States. She is proactive, responsible, and has great editing skills. Allisyn has an open mind and is always eager to learn. She was a joy to work with.
Allisyn worked as an editor at I Love Chile and she worked quickly and efficiently to edit ten to twenty articles a day for our online content. She worked in a professional and yet easy going manner with our international team of journalists to prepare original articles. I was pleased with her dedication to her position and willingness to think outside of the box.


--- layout: 2019_default permalink: /2019/about title: About the Event ---
| Anusha Bhat | Ashvini Vibhute |
| Bhagyashri Sawkar | Bhuvana Prabhu |
| Chinmay Sonawane | Mohit Pawar |
| Priyanka Yadav | Pratik |
| Pramod Shinde | Poorva Mahajan |
| Rahul | Shramik Gajlekar |
| Tanya Saroha | Tushar Pawar |
You can get installation guide here.
Our aim is to give tools and a community for women to understand GoLang. We do this by providing a great experience on building things and by making technology more approachable. GoLangGirls is born in Pune, non-profit volunteer community.


alternacirque
presents 1001
arabian
nights
a full-length
show of
intrigue
fantastical
creatures and
amazing feats
presents 1001
arabian
nights
a full-length
show of
intrigue
fantastical
creatures and
amazing feats
april
7,8,13-15th
at the
earl
wood
park
ampi
theatre
8pm
Buy Tickets Now!
7,8,13-15th
at the
earl
wood
park
ampi
theatre
8pm


You feel like doing a specific activity but really need someone to do it with.. only problem is that you don’t have anybody to around to join you. borednomore connects ananmously to someone in your area that wants to join in, in the same activity. borednomore disguises your phone number in the same way craigslist hides your email. So, at any time you can stop contact with your connection.


Build tags
gobbi uses Go
build tags
to allow targetting of specific library versions.
This means that when using Go tools
(such as go build
and go run
)
to build a gobbi application,
use of the -tags
flag will usually be necessary.
See How to use conditional compilation with the go build tool for more background about build tags.
no tags
If a gobbi application is built with no tags specified, the only apis available will be those present in all version of the various gnome libraries.
tags targetting versions
To use an api that is only available from a specific version onwards, use a tag constructed from the library name and the version.
For example gtk_builder_new_from_file is only available from gtk 3.10 onwards. So to use it, a tag specifying 3.10 (or a later version) is required.
A tag such as gtk_3.10
is formed of three parts.
- the library name,
gtk
- an underscore,
_
- the minimum library version,
3.10
go build -tags gtk_3.10 my_app.go
typical tags
If targetting Ubuntu 16.04 (Xenial Xerus) or later, the following tags would be a good starting point.
go build -tags " \
glib_2.48 \
gdk_3.4 \
gdkpixbuf_2.32 \
gio_2.32 \
gtk_3.18" \
my_app.go
editors & IDEs
Editors and IDE can provide better completion and error feedback if they are aware of the build tags that an application is to be built with.
vs code
The relevant setting is Go: Build Tags
.
goland
In the Settings...
dialog, the relevant setting can
be found under
- Go
- Vendoring & Build Tags
- Custom tags
- Vendoring & Build Tags


Monkey Login I am here for: Bananas Lady Monkeys Other Forgot Username / Password? Create your Account


Your browser has a bug that prevents this demo from functioning properly. Please access this page with the latest desktop Firefox browser to see it in action.
This demo uses experimental technology currently only supported by the latest desktop Chrome and Firefox browsers. Please access this page with one of those to see it in action.
Click to start.
Use the mouse to look around.
Push 1 to use the brute force approach (default).
Push 2 to use 3D warping for rendering (left warped to right).
Push 3 to compare the results of the two (brute force right eye on the left).
Escape to quit.
There was an error while creating the WebGL context. Please visit this site for more info: http://get.webgl.org/troubleshooting/
Unfortunately, your device doesn't support a WebGL extension required by this demo. Please access this page from another device with the latest desktop Chrome or Firefox browsers to see it in action.


Simply click the "login or register" button on the homepage. After signing in with a Google account,
click "add kit" where you can drag and drop a marker to the location of your choice. Click on
"name location" in the top-left corner and enter the location's name in the prompt. Finally, click
"save location" and a confirmation message should appear.
Please send the coordinates to<EMAIL_ADDRESS>to be reviewed by an admin.
Your location information is used to calculate the nearest distance to a naloxone kit, and is not saved anywhere else.
Your Google account information is only used to identify you as a logged in user, and your email is saved to our secure, Google-owned Firebase database.
Once in the database, your email can only be seen by the few project administrators and it is assigned a unique user ID to allow the site to remember you.


--- layout: post title: Building Violations dataset is not updating properly - 11/17/2015 date: '2015-11-17T13:07:21-06:00' author: Open Data Portal Team categories: - Open Data - Data Portal tags: - 22u3-xenr - tech headache ---
We recently discovered that the Building Violations dataset is not picking up new records with each daily update. We are investigating.
Update 11/20/2015 - We found and fixed the problem. The dataset should be updating properly again.


Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Serves 6-8
Dietary
Add class to the classic custard tart with warm tea-infused prunes for an impressive dessert.
Preheat the oven to 180C/350F/Gas 4 and grease a 22cm/9in flan tin.
For the pastry, mix the flour, egg and yolks, butter and sugar in a food processor to form a soft dough. Form the pastry into a thick disc, wrap in cling film and place in fridge until firm. (About 20minutes.)
Roll out the pastry into a shape large enough to cover the tin. Press the pastry into the tin and cover with a piece of baking parchment. Fill with baking beans and blind bake for 15 minutes, or until the pastry is just beginning to colour. Set aside to cool.
Pour the full-fat milk into a heavy-based saucepan. Add the vanilla pod and seeds. Bring just to the boil, then remove from the heat.
Put egg yolks into a large bowl with the caster sugar and whisk until thick and pale.
Slowly pour the vanilla-infused milk through a sieve onto the egg mixture, stirring constantly. Discard the pod and set the custard aside to cool slightly.
Reduce the oven temperature to 100C/225F/Gas ¼.
Pour the custard into the pastry tin and bake for a further 45 minutes.
Meanwhile, for the prunes, combine 150ml/5fl oz water and the sugar in a pan. Heat gently, stirring, until the sugar has dissolved. Add the tea bags and bring to the boil.
Add the prunes and set aside to allow the prunes to soak up the tea. When cool, remove the tea bags.
Once the tart has cooked (there should just be a bit of a wobble in the centre of the tart when it is shaken slightly), remove from the oven and set aside to cool.
To serve, reheat the prunes and serve alongside slices of the custard tart.


| 057:028 Khan | : |
O you who believe [in Musa (Moses) (i.e. Jews) and 'Iesa (Jesus) (i.e. Christians)]!  And Allah is Oft-Forgiving, Most Merciful. |
| 057:028 Maulana | : |
O you who believe, keep your duty to Allah and believe in His Messenger -- He will give you two portions of His mercy, and give you a light in which you shall walk, and forgive you. And Allah is Forgiving, Merciful -- |
| 057:028 Pickthal | : |
O ye who believe! Be mindful of your duty to Allah and put faith in His messenger. He will give you twofold of His mercy and will appoint for you a light wherein ye shall walk, and will forgive you. Allah is Forgiving, Merciful; |
| 057:028 Rashad | : |
O you who believe, you shall reverence GOD and believe in His messenger. He will then grant you double the reward from His mercy, endow you with light to guide you, and forgive you. GOD is Forgiver, Most Merciful. |
| 057:028 Sarwar | : |
Believers, have fear of God and believe in His Messenger. God will grant you a double share of mercy, a light by which you can walk, and forgive your sins. God is All-forgiving and All-merciful. |
| 057:028 Shakir | : |
O you who believe! be careful of (your duty to) Allah and believe in His Messenger: He will give you two portions of His mercy, and make for you a light with which you will walk, and forgive you, and Allah is Forgiving, Merciful; |
| 057:028 Sherali | : |
O ye who believe ! fear ALLAH and believe in HIS Messenger. HE will give you a double portion of HIS Mercy, and will provide for you a light wherein you will walk, and will grant you forgiveness - verily, ALLAH is Most Forgiving, Merciful - |
| 057:028 Yusufali | : |
O ye that believe! Fear Allah, and believe in His Messenger, and He will bestow on you a double portion of His Mercy: He will provide for you a Light by which ye shall walk (straight in your path), and He will forgive you (your past): for Allah is Oft-Forgiving, Most Merciful. |
Concepts/Themes Covered: أركان الإسلام > التوحيد > الكافرون > الكفر ظلمات Pillars of Islam> Islamic> The Disbelievers> Atheism is Darkness الإيمان > الأنبياء والرسل > الإيمان بهم Faith> The Prophets and the Messengers of Allah> The Belief in Allah الإيمان > الإيمان بالله > تشبيه الإيمان بالنور Faith> Belief In Allah> Resembling Faith with Light الإيمان > الإيمان بالله > الدعوة إلى الإيمان Faith> Belief In Allah> The Call for Faith الإيمان > الله جلّ جلاله > فضله جلّ وعلا Faith> Allah, Glory to his Majesty> His Graciousness الإيمان > المؤمنون > سعادتهم في الدنيا والآخرة Faith> The Believers> Their Happiness in the World and the hereafter العمل > العمل الصالح > العمل المفضي إلى النجاح Action(Work)> The Good Deeds>Achtion which Leads to Success العمل > العمل الطالح > اقتراف الذنوب Action(Work)> Bad Deeds>Committing Sins
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


{{row.address}}
{{row.email}}
{{row.orderPhoneNumber}}
{{row.email}}
{{row.orderPhoneNumber}}
{{row.address}}
{{row.email}}
{{row.orderPhoneNumber}}
{{row.email}}
{{row.orderPhoneNumber}}
{{row.name}} {{row.city}}
Hotel not found
Try to specify the alternative name of the hotel or to change search parameters.


Creating a New Webpage on the Production Server
- Create a .html file and edit the files.
- Validate the file.
- Open python and cd into your folder containing the .html file
- In python, start sftp with the command sftp username@cmis-hsteacher.
- cd into public_html.
- Use the command put (filename) to upload the .html file from your computer to the production server.


Founded by Decended Nord, Jon Oppegaard after turning his ancestral passion into a local business. He brings homemade, high quality mead to your local market. While he may bring may fan favorites like his Oak barrel and Dragon's blood to the table. He uses consistent techniques with minor tweeks to each batch. So while you might pick one you like, no batch is every the same in a good way. And for those special occasions or you just want something unique, he has Limited Run Meads thatare very different and if popular enough may one day become a standard flavor. So come down to Oppegaard Meadery and give them a try!
Popular Meads
- Honeybomb (Limited)
- Oak Barrel
- Casecade hop
- Blueberry
- Cherry
- Skoll (limited)
- Semi Sweet
- Dry Cyser
Operating Hours
- Mon: Appointment only
- Tue: 12-6
- Wed: 12-6
- Thu: 12-6
- Fri: 12-6
- Sat: 12-6
- Sun: Appointment only
Created by John Ramirez for Code 102


{%extends 'base.html'%} {%load bootstrap4%} {{block.super}} {%block content%}
Have an account ? Login here


The Dukebox of Hazzard
media server
×
An error occurred
Upcoming
Search
My songs
Search for music to play
Search
Search Results
Select All
Play Selected
Clear Queue


Before Change
ts_i = data.batch(ts, si, batchsz)
feed_dict = self.model.ex2dict(ts_i, 1.0-dropout)
_, step, summary_str, lossv, accv = self.sess.run([self.train_op, self.global_step, self.summary_op, self.loss, self.acc], feed_dict=feed_dict)
self.train_writer.add_summary(summary_str, step)
total_corr += accv
total_loss += lossv
After Change
total_corr = cm.get_correct()
duration = time.time() - start_time
print("Train (Loss %.4f) (Acc %d/%d = %.4f) (%.3f sec)" % (float(total_loss)/total, total_corr, total, float(total_corr)/total, duration))
print(cm)
def test(self, ts, cm, batchsz=1, phase="Test"):
total_loss = 0
start_time = time.time()
steps = int(math.floor(len(ts)/float(batchsz)))
cm.reset()
for i in range(steps):
ts_i = data.batch(ts, i, batchsz)
feed_dict = self.model.ex2dict(ts_i, 1)
lossv, guess = self.sess.run([self.loss, self.model.best], feed_dict=feed_dict)
cm.add_batch(ts_i.y, guess)
total_loss += lossv
total = cm.get_total()
total_corr = cm.get_correct()
duration = time.time() - start_time
print("%s (Loss %.4f) (Acc %d/%d = %.4f) (%.3f sec)" % (phase, float(total_loss)/total, total_corr, total, float(total_corr)/total, duration))


|
|||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Interface Summary | |
| AxionCommand | A command to be executed against a Database . |
| Constraint | A database constraint, such as UNIQUE or NOT NULL. |
| Database | An Axion database. |
| DataType | The type of a field (column) that can be stored in a Table . |
| DataTypeFactory | A simple factory for creating new DataType instances. |
| Function | A database function. |
| FunctionFactory | A simple factory for creating new ConcreteFunction instances. |
| Index | A database index. |
| IndexFactory | A simple factory for creating Index instances. |
| IndexLoader | Reads/writes indices to disk. |
| JoinedRowIterator | A bidirectional iterator over a collection of JoinedRow s. |
| Row | Contains the data for a single row in a table, view, result set, etc. |
| RowDecoratorIterator | A bidirectional iterator over a collection of RowDecorator s. |
| RowIterator | A bidirectional iterator over a collection of Row s. |
| RowSource | An abstract Row generator and container. |
| Selectable | An abstraction of objects that can be selected from (a row in) the database. |
| SelectableBasedConstraint | Interface for Constraint s that
are defined by one or more Selectable s. |
| Table | A database table. |
| TableFactory | A simple factory for creating Table instances. |
| Transactable | Interface for entities that can take part in a transaction. |
| TransactableTable | A Transactable version of a Table . |
| Transaction | A database transaction. |
| TransactionManager | Manages the Transaction lifecycle. |
| WhereNode | One part of a WHERE clause. |
| WhereNodeVisitor | A visitor over a WhereNode tree. |
| Class Summary | |
| BinaryBranchWhereNode | A WhereNode representing a Boolean combination of
its children. |
| BindVariable | A Literal that can be bound via
PreparedStatement methods. |
| BranchWhereNode | A WhereNode composed of one or more
child nodes. |
| Column | Describes a column within a Table . |
| ColumnIdentifier | An identifier for a column. |
| ComparisonOperator | A comparison operator, like ==
or >= . |
| FromNode | Structure presenting the FROM clause. |
| InWhereNode | A WhereNode representing an membership test on a list of
arguments. |
| LeafWhereNode | A WhereNode representing a comparison between two columns and/or literal
values via some ComparisonOperator . |
| Literal | A typed literal value. |
| NamedIdentifier | A named object in the database |
| NotWhereNode | A WhereNode representing a Boolean combination of
its children. |
| OrderNode | One part of an ORDER BY clause. |
| RowComparator | A Comparator for Rows ,
which will sort a collection according to the
value of a single selectable. |
| RowDecorator | A Row with meta-information. |
| Sequence | A database sequence. |
| TableIdentifier | An identifier for a table. |
| Exception Summary | |
| AxionException | Root exception for Axion related or specific problems. |
| ConstraintViolationException | Thrown when a Constraint has been violated. |
| TransactionConflictException | Thrown when a transaction conflict is discovered. |
Core interfaces, identifiers, and exceptions.
|
|||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


Q&A Voting
Scroll to the bottom to post a new question. Once posted, your question will be evaluated by our moderators so please wait until it appears!
Otherwise, vote for an existing question by selecting the orange button and hitting the vote button.


nips nips2012 nips2012-59 nips2012-59-reference knowledge-graph by maker-knowledge-mining
Source: pdf
Author: Francois Caron
Abstract: We develop a novel Bayesian nonparametric model for random bipartite graphs. The model is based on the theory of completely random measures and is able to handle a potentially inﬁnite number of nodes. We show that the model has appealing properties and in particular it may exhibit a power-law behavior. We derive a posterior characterization, a generative process for network growth, and a simple Gibbs sampler for posterior simulation. Our model is shown to be well ﬁtted to several real-world social networks. 1
[1] A. Brix. Generalized gamma measures and shot-noise Cox processes. Advances in Applied Probability, 31(4):929–953, 1999.
[2] F. Caron and Y. W. Teh. Bayesian nonparametric models for ranked data. In Neural Information Processing Systems (NIPS), 2012.
[3] D.J. Daley and D. Vere-Jones. An introduction to the theory of point processes. Springer Verlag, 2008.
[4] L. Devroye. Random variate generation for exponentially and polynomially tilted stable distributions. ACM Transactions on Modeling and Computer Simulation (TOMACS), 19(4):18, 2009.
[5] E.B. Fox, E.B. Sudderth, M.I. Jordan, and A.S. Willsky. Sharing features among dynamical systems with beta processes. In Advances in Neural Information Processing Systems, volume 22, pages 549–557, 2009.
[6] A. Goldenberg, A.X. Zheng, S.E. Fienberg, and E.M. Airoldi. A survey of statistical network models. Foundations and Trends in Machine Learning, 2(2):129–233, 2010.
[7] D. G¨ r¨ r, F. J¨ kel, and C.E. Rasmussen. A choice model with inﬁnitely many latent features. In ou a Proceedings of the 23rd international conference on Machine learning, pages 361–368. ACM, 2006.
[8] T Grifﬁths and Z. Ghahramani. Inﬁnite latent feature models and the Indian buffet process. In NIPS, 2005.
[9] T. Grifﬁths and Z. Ghahramani. The Indian buffet process: an introduction and review. Journal of Machine Learning Research, 12(April):1185–1224, 2011.
[10] N.L. Hjort. Nonparametric bayes estimators based on beta processes in models for life history data. The Annals of Statistics, 18(3):1259–1294, 1990.
[11] L.F. James, A. Lijoi, and I. Pr¨ nster. Posterior analysis for normalized random measures with u independent increments. Scandinavian Journal of Statistics, 36(1):76–97, 2009.
[12] J.F.C. Kingman. Completely random measures. Paciﬁc Journal of Mathematics, 21(1):59–78, 1967.
[13] J.F.C. Kingman. Poisson processes, volume 3. Oxford University Press, USA, 1993.
[14] M.E.J. Newman. The structure and function of complex networks. SIAM review, pages 167– 256, 2003.
[15] M.E.J. Newman, S.H. Strogatz, and D.J. Watts. Random graphs with arbitrary degree distributions and their applications. Physical Review E, 64(2):26118, 2001.
[16] M.E.J. Newman, D.J. Watts, and S.H. Strogatz. Random graph models of social networks. Proceedings of the National Academy of Sciences, 99:2566, 2002.
[17] J.J. Ramasco, S.N. Dorogovtsev, and R. Pastor-Satorras. Self-organization of collaboration networks. Physical review E, 70(3):036106, 2004.
[18] Y.W. Teh and D. G¨ r¨ r. Indian buffet processes with power-law behavior. In NIPS, 2009. ou
[19] R. Thibaux and M. Jordan. Hierarchical beta processes and the Indian buffet process. In International Conference on Artiﬁcial Intelligence and Statistics, volume 11, pages 564–571, 2007.
[20] F. Wood, T.L. Grifﬁths, and Z. Ghahramani. A non-parametric Bayesian method for inferring hidden causes. In Proceedings of the Conference on Uncertainty in Artiﬁcial Intelligence, volume 22, 2006. 9


When Freeing or Clearing a TFreeList, all contained TObjects are also Freed.
TFreeList is defined in htmlun2.pas.


Thank you for submitting your support request for the webcast event:
The Content of Your request is below:
{{ comment }}
We can confirm that we have received your request and we apologise for any inconvenient created
We will contact you for support as soon as possible


@* * Copyright 2018 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import uk.gov.hmrc.urls.Link @import uk.gov.hmrc.apidocumentation.config._ @import uk.gov.hmrc.apidocumentation.controllers @import uk.gov.hmrc.apidocumentation.models._ @import include._ @(pageAttributes: PageAttributes)(implicit request: play.api.mvc.Request[Any], applicationConfig: ApplicationConfig, messages: Messages) @apiMain(pageAttributes){
Version 2.1 issued 10 December 2018
Transaction Monitoring (TxM) is a key security approach adopted in the UK and globally. Our approach is in line with National Cyber Security Centre (NCSC) and Cabinet Office recommended guidance and industry good practice.
We monitor transactions to protect taxpayers from infringement of their data by criminals or fraudsters. Without the protection offered by TxM, personal data could be compromised, leading to fraud against taxpayers or the UK Exchequer.
You must help us protect our users’ confidential data by sending us particular types of user audit data which we will record.
Our APIs provide HTTP headers that you can use to pass this audit data to us.
These headers can influence the processing of the API call, or support our prosecutions for tax or duty fraud.
Supplying header information for all our APIs will become mandatory - so we recommend designing it into your applications now.
To find out if header information is mandatory for an API that you use, read its API documentation.
Header contents must use the character set US-ASCII, with other characters percent encoded as in RFC3986 (opens in a new tab). Other restrictions on header values are shown under the individual header definitions.
The application connection method determines which headers we require:
Installed mobile application connecting directly to HMRC
Installed desktop application connecting directly to HMRC
Installed mobile application connecting through intermediary servers to HMRC
Installed desktop application connecting through intermediary servers to HMRC
Web application connecting through intermediary servers to HMRC
Batch process connecting directly to HMRC
The application connects directly to HMRC but the method does not fit into the architectures described above.
The application connects through intermediary servers to HMRC but the method does not fit into the architectures described above.
Where multiple vendors are involved in managing the intermediary servers between a client and HMRC, the header contents must reflect information from all vendors.
Originating device means the device that initiates an action.
In most connection methods, it’s most likely the device that is physically in the possession of the person initiating the requests.
In BATCH_PROCESS_DIRECT, it might be a vendor’s server.
In DESKTOP_APP_DIRECT or DESKTOP_APP_VIA_SERVER, it might be a hosted desktop environment accessed remotely by the user.
If a header is not required for your connection method, then you can leave it out entirely when making your submission, or submit it with an empty header value. You must not supply null values, for example, the following are not valid:
In some cases, while the header itself is required for your connection method, we anticipate you might not be able to collect a value because:
Only in these cases, you must submit the header with an empty header value. You must not supply null values.
In all other cases, you must submit a valid value and not leave the header empty.
For example, an application connecting directly to HMRC might not be able to supply a username for Gov-Client-User-IDs if the operating system of the originating device has no concept of user accounts, so the header can be left empty as follows:
Gov-Client-User-IDs:
Whenever a header contains a key-value data structure, it must be in the form:
<key-1>=<value-1>&<key-2>=<value-2>&…
Whenever a key is applicable but has no applicable value, the key-value pair can be omitted, or the key can be included with an empty value.
Keys and values must be percent encoded (opens in a new tab).
The key-value pairs can be given in any order.
Whenever a header contains a list, it must be of the form:
<value-1>,<value-2>,…
Values must be percent encoded (opens in a new tab).
Values must not be empty.
A string representing the connection method used for the request.
One of:
For example
Gov-Client-Connection-Method: DESKTOP_APP_VIA_SERVER
The public IP address (IPv4 or IPv6) from which the originating device makes the request.
Gov-Client-Public-IP: <IP_ADDRESS>
Gov-Client-Public-IP: ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
The public TCP port that the originating device uses when initiating the request.
Gov-Client-Public-Port: 12345
An identifier unique to an originating device. This should be generated by an application and persistently stored on the device. The identifier should not expire.
If an identifier cannot be persistently stored due to security restrictions, leave this header empty.
Gov-Client-Device-ID: beec798b-b366-47fa-b1f8-92cede14a1ce
A key-value data structure containing the user identifiers. The keys should indicate accounts the user holds.
The os field should contain the identifier of the user signed in on the originating device. Additional fields should contain the user’s identifiers with the vendor services involved in the request.
If a user identifier cannot be accessed due to operating system permissions or security controls, then it can be left blank or omitted.
In DESKTOP_APP_VIA_SERVER connection method, when there is a single vendor service involved in handling the request:
Gov-Client-User-IDs: os=alice_desktop&my-vendor-online-account=alice_online_account_user_id_with_vendor
For example, in DESKTOP_APP_VIA_SERVER connection method, when the request passes through two vendor services:
Gov-Client-User-IDs: os=alice_desktop &my-vendor=alice_online_account_user_id_with_vendor&my-secondary-vendor=alice_online_account_user_id_with_secondary_vendor
For example, in DESKTOP_APP_DIRECT, where there are no vendor accounts involved, or BATCH_PROCESS_DIRECT where there are no user devices involved and the originating device is the batch server:
Gov-Client-User-IDs: os=user123
The local timezone of the originating device, expressed as UTC±<hh>:<mm>.
Gov-Client-Timezone: UTC+01:00
Gov-Client-Timezone: UTC-01:15
A list of all local IP addresses (IPv4 and IPv6) available to the originating device. If local device IP addresses cannot be discovered – for example, through a web browser due to permissions or lack of WebRTC – then leave this header empty.
Gov-Client-Local-IPs: <IP_ADDRESS>,<IP_ADDRESS>
Information related to the originating device’s screens. The fields include:
width is the reported width of the screen, in pixels
height is the reported height of the screen, in pixels
scaling-factor is the reported scaling factor of the screen. For instance, high-pixel density screens might have a scaling factor of 2, whereas standard definition screens might report a scaling factor of 1. If the scaling factor cannot be retrieved, leave this empty or omit it entirely.
colour-depth is the colour depth of the screen, in bits. If the colour depth cannot be retrieved, leave this empty or omit it entirely.
Gov-Client-Screens: width=1920&height=1080&scaling-factor=1&colour-depth=16,width=3000&height=2000&scaling-factor=1.25&colour-depth=
The number of pixels of the window on the originating device in which the user initiated (directly or indirectly) the API call to HMRC.
If the call was initiated by a background process, leave this header empty.
Should be displayed as a key-value data structure with width and height fields.
Gov-Client-Window-Size: width=1256&height=803
An attempt to identify the operating system family, version, device manufacturer and model of the originating device.
Reported in the format:
OS Family/OS Version+ (Device Manufacturer/Device Model+)
If you cannot detect the exact version due to operating system constraints, but can detect several options, list all options. Each value (OS Family, OS Version, Device Manufacturer and Device Model) must be percent encoded but not the separators themselves. The separators are / ( ).
Gov-Client-User-Agent: Windows/XP Windows/NT (Dell/XPS15 Dell/XPS13)
If you cannot discover any information due to operating system constraints, leave the appropriate field blank as shown in the following examples:
Gov-Client-User-Agent: Windows/ (Dell/XPS15)
Gov-Client-User-Agent: / (Dell/XPS15)
Gov-Client-User-Agent: Windows/XP (/)
Gov-Client-User-Agent: Windows/XP (/XPS15)
Gov-Client-User-Agent: Windows/XP Windows/98 (/)
A list of browser plugins on the originating device. If none can be discovered, due to browser restrictions or the lack of installed plugins, leave this header empty.
Gov-Client-Browser-Plugins: Shockwave%20Flash,Chromium%20PDF%20Viewer
JavaScript-reported user agent string from the originating device.
Gov-Client-Browser-JS-User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405
Whether the Do Not Track option is enabled on the browser.
It should be true if this option is enabled, false if it’s not. If it cannot be collected because the browser does not have or expose this feature, you can leave the header empty.
Gov-Client-Browser-Do-Not-Track: false
A list of key-value data structures containing details of the multi-factor authentication (MFA) statuses related to the API call. For each key-value data structure, the applicable fields are:
type is a tag describing the MFA method being used. The possible values are:
timestamp is a UTC timestamp in the format yyyy-MM-ddThh:mmZ recording the time of the last successful prompt for this factor.
unique-reference identifies a single factor. For example, a salted-and-hashed phone number used for SMS or an identifier linked to a TOTP secret – but not the secret itself. The intention is to recognise the same factor being used across API calls.
If only a single factor (for example, username and password) is being used, leave this header empty.
Gov-Client-Multi-Factor: type=AUTH_CODE×tamp=2017-04-21T13%3A23%3A42Z&unique-reference=c672b8d1ef56ed28,type=TOTP×tamp=2017-05-19T13%3A10%3A00Z&unique-reference=ac73430ffdfd9
A key-value data structure of software versions involved in handling a request:
<software-name>=<version-number>&<software-name-2>=<version-number-2>& …
For DESKTOP_APP_DIRECT the header may be:
Gov-Vendor-Version: my-desktop-software=1.2.3.build4286
For MOBILE_APP_VIA_SERVER, the header may be:
Gov-Vendor-Version: my-frontend-app=2.2.2&my-serverside-code=v3.8
A key-value data structure of hashed license keys relating to the vendor software initiating the API request on the originating device.
<software-name>=<hashed-license-value>&<software-name-2>=<hashed-license-value>& …
If there are no such licenses on the originating device, leave out the <hashed-license-value> or omit the field entirely.
Gov-Vendor-License-ID: my-licensed-software=8D7963490527D33716835EE7C195516D5E562E03B224E9B359836466EE40CDE1
The public IP address of the servers to which the originating device sent their requests. This might be an IP address of a Web Application Firewall, a DDoS Protection Service, or a load balancer that the vendor's DNS record resolves to.
Gov-Vendor-Public-IP: <IP_ADDRESS>
The list of MAC addresses available on the originating device. If you cannot retrieve them due to operating system restrictions, then leave the header empty.
Gov-Client-MAC-Addresses: ea%3A43%3A1a%3A5d%3A21%3A45,10%3A12%3Acc%3Afa%3Aaa%3A32
A list that details hops over the internet between services that terminate TLS.
For each hop over the internet, a key-value data structure with a by and for field must be appended to the list.
The by field must be the server’s public IP address where it received the request.
The for field must be the requestor’s public IP address from which the vendor received the request.
then you should generate the following header:
Gov-Vendor-Forwarded: by=<IP_ADDRESS>&for=<IP_ADDRESS>,by=<IP_ADDRESS>&for=<IP_ADDRESS>,by=<IP_ADDRESS>&for=<IP_ADDRESS>


Seven arrested after fatal stabbing at east London house party
A 27-year-old man died, and three others were injured, in the fight at an address in Whitechapel on Saturday morning.
Seven men have been arrested on suspicion of murder and attempted murder after a man was stabbed to death at a house party in east London.
A 27-year-old man died and three others were injured in the fight at an address on Buckle Street, Whitechapel, on Saturday morning.
Six of the arrested suspects, aged between 23 and 29, are being held in custody, and one, aged 26, is in hospital after being injured in the incident.
The Metropolitan Police have appealed for any witnesses to come forward.
Detective Inspector Will White said: “Were you there when the fight started? Do you know what it was about?
“I am keen to hear from anyone who was at the party in Buckle Street on Saturday.
“Even if you think you have nothing to offer, please do make the call.
“You may have information that confirms something we have been told or you may hold information that is vital to the investigation.”


Waterstream 1.1.0 introduces the Bridge mode that allows connecting Waterstream to another MQTT broker and exchanging messages between them, appearing as a single distributed broker.
To showcase this new capability, we connected Waterstream to the Lufthansa Open API notification service. This public API allows monitoring changes of Lufthansa flights (and others) using the MQTT protocol. Communication flows only from the Lufthansa endpoint toward Waterstream that behaves like a simple MQTT client consuming available MQTT topics.
Below there's an example of a message coming from the Lufthansa endpoint.
{
"Update":{
"ScheduledFlightDate":"2020-10-05",
"Message":"New Estimated Arrival",
"ScheduledFlightTime":"0110",
"FlightNumber":"LX967",
"Timestamp":"2020-10-05T13:45:03"
}
}
Waterstream uses Apache Kafka as the persistence layer. Every message ingested from the source MQTT broker by the bridge is written directly into Kafka. It's straightforward to configure a Kafka Connector to import that data into Elasticsearch and build some Kibana dashboards.
The final result consists of a seamless integration that allows you to get insights of the ingested data. You can select one airline to filter data, or you can apply a different time window to get notifications for a specific day or hour.
The source code of this demo is available on Github
Visit Waterstream product site at waterstream.io and learn how to combine MQTT with Kafka, the standard de-facto streaming platform.


You can track your monthly expenses in different category...
{% csrf_token %}
Monthly income:
Expenses
Amount
Housing:
Utilities:
Groceries:
Transportation:
Health care:
Entertainment:
Dedt payment:
Others:


This small family of 2 members putatively forms cation-selective ion channels. They are predicted to contain two KV-style six-transmembrane domains, suggesting they form a dimer in the membrane. These channels are closely related to CatSper channels and, more distantly, to TRP channels. (hgnc.genefamily:247)
| Identifier | Name | Relation |
| HGNC:18182 | TPCN1 | isa |
| HGNC:20820 | TPCN2 | isa |
| Relation | Identifier | Name |
| isa | FPLX:Calcium_channels | Calcium_channels |
| isa | FPLX:Voltage_gated_ion_channels | Voltage_gated_ion_channels |


Contact
Community
GrapheneOS has a very active community primarily based around the official chat rooms on Matrix.
The links below will take you to the Element web client, which uses matrix.org as the homeserver by default. However, you can use the client and homeserver of your choice to join our rooms.
| #grapheneos:grapheneos.org | Best place to request support, ask questions or get involved in the project |
| #offtopic:grapheneos.org | Discuss topics not strictly related to GrapheneOS |
| #dev:grapheneos.org | Discuss GrapheneOS app and OS development |
| #testing:grapheneos.org | Provide feedback on Alpha and Beta channel app and OS releases |
| #releases:grapheneos.org | Release announcements |
| #infra:grapheneos.org | Infrastructure monitoring and discussion |
| #media:grapheneos.org | Discuss GrapheneOS in news articles and other media coverage |
The official GrapheneOS space groups together all of the official rooms along with members of the community who join the space. You can join the space at #community:grapheneos.org
We have an official forum for longer form posts, which will be more publicly accessible and easier to search. We are currently using Flarum for our forum.
We have an official Twitter community for GrapheneOS discussions. You currently need to be logged in to access the new Twitter community feature. Discussions about GrapheneOS and apps/services to use on GrapheneOS are welcome. Once you join the community, you can post a thread in the community as an alternative to posting to your own timeline. It will be shown to other members of the community rather than to your followers outside the community. It's essentially a discussion forum within Twitter.
The official subreddit is /r/GrapheneOS. The subreddit is currently primarily used for announcements and you should use the Matrix rooms or our discussion forum to seek support or participate in the community.
Contacting the project
Do not contact us with offers to sell us products or services.
Please don't contact the GrapheneOS project or developers to request support / device support / features or to report bugs. Use the community platforms and issue trackers listed below. The developers are active on the Matrix room but the broader community can usually answer most questions, and this allows the developers to focus their time and energy on the project.
Email is the preferred way to contact the project. Twitter direct messages are checked much less frequently. A public @reply in a tweet is not a good way to contact the project. It is not considered sending a message by Twitter and is not queued up as a message to be read, only as a regular notification that is likely to be missed or forgotten.
Please do not send multiple copies / versions of the same email to different addresses. Either send it to a single address or CC the other addresses. In general, it's the same person handling every email address, and they don't need to see multiple copies of the same email in their inbox.
You can contact<EMAIL_ADDRESS>for topics related to GrapheneOS. Please don't send emails unrelated to GrapheneOS to this address.
The<EMAIL_ADDRESS>address is for reporting high priority security issues related to GrapheneOS. Please don't send other kinds of emails to this address. It is not a way of increasing the priority of emails that are not security reports. Your emails will be treated as a much lower priority if you misuse this address.
The official Twitter account for the project is @GrapheneOS which is used for official announcements.
The official Mastodon account for the project is<EMAIL_ADDRESS>which is used for official announcements.
Reporting issues
Most issues should be reported to the global OS issue tracker for GrapheneOS sub-projects. However, standalone projects and anything outside of the GrapheneOS source tree (like the websites) has a dedicated issue tracker. The issue trackers are listed for reference:
- OS issue tracker for all GrapheneOS repositories that are not standalone projects
- hardened_malloc issue tracker
- Update client issue tracker
- Talkback issue tracker
Standalone apps
Services
- Server infrastructure issue tracker (for issues applying across services)
- AttestationServer (attestation.app) issue tracker
- GrapheneOS site (grapheneos.org) issue tracker
- Update server (releases.grapheneos.org) issue tracker
- Connectivity check / time server (grapheneos.network) issue tracker
- Mail server (mail.grapheneos.org) issue tracker
- App repository (apps.grapheneos.org) issue tracker
- GrapheneOS Matrix server (matrix.grapheneos.org) issue tracker
- GrapheneOS discussion forum (discuss.grapheneos.org) issue tracker


WITNESS LIST Appropriations Committee March 12, 2003-8:00A Budget Against: Aleshire, Mary Roe (Self) Green, Alexia (Texas Nurses Association) On: Brown, Dr. Don W. (Higher Education Coordinating Board) Hamilton, Billy (Comptroller of Public Accounts) Jameson, Arlen D. (Telecommunications Infrastructure Fund Board)


The Guatemalan Navy have now replaced the Livingston sea buoy which marks the channel entrance to the Rio Dulce. The new co-ordinates are: 15-50.29'N x 088-43.71'W (0.46 nm on a bearing of 041 T from the old location).
The area known as the Rio Dulce, starts at the mouth of the river on the Bahia de Amatique (Photo "entering the Rio" courtesy of Calypso Marina).
The small village of Rio Dulce (Fronteras) is 18 miles further up the river, past a spectacular steep walled canyon and a small lake, El Golfete. At this point there are plenty of marine services, provisions, hotels, restaurants and medical services, as well as communications and transport. It is a safe spot in the hurricane season. Beyond this settlement, the river widens to form Lake Izabal, the largest lake in Guatemala.
Security
Be aware that Fronteras is very much a frontier town, with armed guards not only at the banks but at the supermarkets and on the delivery trucks.
A number of visiting yachts have been boarded and some robbed, when anchored at the mouth of the Rio Tatin and, also, there have been a number of incidents in the Rio Dulce itself. October, November and December are typically high theft times. The Guatemalan Navy don't always patrol the river.
Whilst staying in a marina would appear to be a more secure option, boats have been burgled anchored in front of marinas. Dinghy and outboard thefts continue to happen here as well (including from boats berthed in marinas).
Last updated May 2016.
Cruisers report that marina prices are very low here, your boat is in fresh water and the prices and quality of repair work is very good. Choosing to moor in a marina is obviously the more secure option.
 If you want to anchor down the river then choose Texan Bay.


|
App Engine Python SDK
v1.6.9 rev.445
The Python runtime is available as an experimental Preview feature.
|
Public Member Functions | |
| def | __init__ |
| def | validate |
| def | split_input |
| def | from_json |
| def | to_json |
| def | next |
| def | __str__ |
| Public Member Functions inherited from google.appengine.ext.mapreduce.input_readers.InputReader | |
| def | __iter__ |
| def | next |
| def | from_json |
| def | to_json |
| def | split_input |
| def | validate |
| Public Member Functions inherited from google.appengine.ext.mapreduce.json_util.JsonMixin | |
| def | to_json_str |
| def | from_json_str |
Static Public Attributes | |
| string | BUCKET_NAME_PARAM = "bucket_name" |
| string | OBJECT_NAMES_PARAM = "objects" |
| string | BUFFER_SIZE_PARAM = "buffer_size" |
| string | DELIMITER_PARAM = "delimiter" |
| Static Public Attributes inherited from google.appengine.ext.mapreduce.input_readers.InputReader | |
| expand_parameters = False | |
| string | NAMESPACE_PARAM = "namespace" |
| string | NAMESPACES_PARAM = "namespaces" |
Input reader from Google Cloud Storage using the cloudstorage library. This class is expected to be subclassed with a reader that understands user-level records. Required configuration in the mapper_spec.input_reader dictionary. BUCKET_NAME_PARAM: name of the bucket to use (with no extra delimiters or suffixed such as directories. OBJECT_NAMES_PARAM: a list of object names or prefixes. All objects must be in the BUCKET_NAME_PARAM bucket. If the name ends with a * it will be treated as prefix and all objects with matching names will be read. Entries should not start with a slash unless that is part of the object's name. An example list could be: ["my-1st-input-file", "directory/my-2nd-file", "some/other/dir/input-*"] To retrieve all files "*" will match every object in the bucket. If a file is listed twice or is covered by multiple prefixes it will be read twice, there is no deduplication. Optional configuration in the mapper_sec.input_reader dictionary. BUFFER_SIZE_PARAM: the size of the read buffer for each file handle. DELIMITER_PARAM: if specified, turn on the shallow splitting mode. The delimiter is used as a path separator to designate directory hierarchy. Matching of prefixes from OBJECT_NAME_PARAM will stop at the first directory instead of matching all files under the directory. This allows MR to process bucket with hundreds of thousands of files.
| def google.appengine.ext.mapreduce.input_readers._GoogleCloudStorageInputReader.__init__ | ( | self, | |
| filenames, | |||
index = 0 , |
|||
buffer_size = None , |
|||
_account_id = None , |
|||
delimiter = None |
|||
| ) |
Initialize a GoogleCloudStorageInputReader instance. Args: filenames: A list of Google Cloud Storage filenames of the form '/bucket/objectname'. index: Index of the next filename to read. buffer_size: The size of the read buffer, None to use default. _account_id: Internal use only. See cloudstorage documentation. delimiter: Delimiter used as path separator. See class doc for details.
| def google.appengine.ext.mapreduce.input_readers._GoogleCloudStorageInputReader.next | ( | self | ) |
Returns the next input from this input reader, a block of bytes. Non existent files will be logged and skipped. The file might have been removed after input splitting. Returns: The next input from this input reader in the form of a cloudstorage ReadBuffer that supports a File-like interface (read, readline, seek, tell, and close). An error may be raised if the file can not be opened. Raises: StopIteration: The list of files has been exhausted.
| def google.appengine.ext.mapreduce.input_readers._GoogleCloudStorageInputReader.split_input | ( | cls, | |
| mapper_spec | |||
| ) |
Returns a list of input readers. An equal number of input files are assigned to each shard (+/- 1). If there are fewer files than shards, fewer than the requested number of shards will be used. Input files are currently never split (although for some formats could be and may be split in a future implementation). Args: mapper_spec: an instance of model.MapperSpec. Returns: A list of InputReaders. None when no input data can be found.
| def google.appengine.ext.mapreduce.input_readers._GoogleCloudStorageInputReader.validate | ( | cls, | |
| mapper_spec | |||
| ) |
Validate mapper specification. Args: mapper_spec: an instance of model.MapperSpec Raises: BadReaderParamsError: if the specification is invalid for any reason such as missing the bucket name or providing an invalid bucket name.


About starting a bootcamp while working full time and other bad ideas
This is THE topic of the week for me. It all started when reality kicked in on Monday afternoon. It was 7PM, I had just finished the online presentation and I was lost and confused. I realized soon enough why: I had missed half of the orientation material due to clicking through without thinking and overexcitement to get enrolled. It was quite steep (or downhill depending how you look at it) from there on.
When I was applying for EDA, I was kindly told that I might not be able to work full time while on phase 0 and boy, they were right! Coming back home at 6:30pm demolished and hungry didn't make for an awesome learning experience.
From all the bad you can get some good in the end, and in this case this pratical "stress overdose" of the first few days meant that I was looking for support on the material provided.  I realized I had to focus on what was most important for me and spend most of my energy on it.
Of all the articles on the "Working with Time" topic, the Counterintuitive productivity was definitely the one that stroke a cord. I loved it so much that I had to post a quote from it on my Facebook feed:
People don’t procrastinate because they’re lazy. People procrastinate as a self-defense mechanism against doing stuff they despise or doing things too mechanically. Instead, ask yourself What would I absolutely love to do and feel immensely proud of doing today?
I can relate to that so well, and understanding it gave me the ablity to break the vicious cycle of self hate. I can proudly say that I decided to do what makes me happy. Love what you do and concentration and energy will follow.


Containers Networking Tutorial with Contiv + Legacy Swarm
- Prerequisites
- Setup
- Chapter 1 - Introduction to Container Networking
- Chapter 2 - Multi-host networking
- Chapter 3 - Using multiple tenants with arbitrary IPs in the networks
- Chapter 4 - Connecting containers to external networks
- Chapter 5 - Docker Overlay multi-host networking
- Cleanup
This tutorial will walk through container networking and concepts step by step in the Legacy Swarm environment. We will explore Contiv's networking features along with policies in the next tutorial.
Prerequisites
Note: If you are using a platform other than Mac, please install docker-engine for that platform.
Make virtualbox the default provider for vagrant
export VAGRANT_DEFAULT_PROVIDER=virtualbox
The steps below download a CentOS vagrant box. If you have a CentOS box available already, or you have access to the box file, add it to list of box images with the specific name centos/7, as follows:
vagrant box add --name centos/7 CentOS-7-x86_64-Vagrant-1703_01.VirtualBox.box
Setup
Step 1: Get the Contiv installer code from Github.
$ git clone https://github.com/contiv/install.git
$ cd install
Step 2: Install Contiv + Legacy Swarm using Vagrant on the VMs created on VirtualBox
Note: Please make sure that you are NOT connected to VPN here.
$ make demo-legacy-swarm
Note: Please do not try to work in both the Legacy Swarm and Kubernetes environments at the same time. This will not work.
This will create two VMs on VirtualBox. It will install Legacy Swarm and all the required services and software for Contiv using Ansible. This might take some time (usually approx 15-20 mins) depending upon your internet connection.
-- OR --
Step 2a: Create a Vagrant VM cluster
$ make cluster-legacy-swarm
This will create two VMs on VirtualBox. It will also create a cluster/.cfg_legacy-swarm.yaml config file that will be used in later steps. Setup the following two config vars.
$ cd cluster
$ export SSH_KEY=$(vagrant ssh-config legacy-swarm-master | grep IdentityFile | awk '{print $2}' | xargs)
$ export USER="vagrant"
Step 2b: Download Contiv release bundle
$ cd .. # go back to the install folder
$ curl -L -O https://github.com/contiv/install/releases/download/1.0.3/contiv-1.0.3.tgz
$ tar xf contiv-1.0.3.tgz
Step 2c: Install Contiv
$ cd contiv-1.0.3
$ ./install/ansible/install_swarm.sh -f ../cluster/.cfg_legacy-swarm.yaml -e ${SSH_KEY} -u ${USER} -i
$ cd ..
Make note of the final outcome of this process. This lists the URL for Legacy Swarm as well as the UI. There are instructions for setting up a default network as well.
Installation is complete
=========================================================
Please export DOCKER_HOST=tcp://<IP_ADDRESS>:2375 in your shell before proceeding
Contiv UI is available at https://<IP_ADDRESS>:10000
Please use the first run wizard or configure the setup as follows:
Configure forwarding mode (optional, default is bridge).
netctl global set --fwd-mode routing
Configure ACI mode (optional)
netctl global set --fabric-mode aci --vlan-range -
Create a default network
netctl net create -t default --subnet= default-net
For example, netctl net create -t default --subnet=<IP_ADDRESS>/24 default-net
=========================================================
Step 3: Check vagrant VM nodes.
Note: On Windows, you will need a ssh client to be installed like putty, cygwin etc.
This command will show you list of VMs which we have created. Make sure you are in the cluster folder.
$ vagrant status
Current machine states:
legacy-swarm-master running (virtualbox)
legacy-swarm-worker0 running (virtualbox)
The above command shows the node information, version, etc.
Step 4: Hello world Docker Swarm.
As a part of this Contiv installation, we install Legacy Swarm for you. To verify the Legacy Swarm cluster, please execute the following commands on the Vagrant VMs.
$ vagrant ssh legacy-swarm-master
Now you will be logged into the Legacy Swarm master Vagrant VM. To run Docker without sudo, add user to docker group in the master and worker nodes.
[vagrant@legacy-swarm-master ~]$ sudo usermod -aG docker $USER
[vagrant@legacy-swarm-master ~]$ exit
$ vagrant ssh legacy-swarm-worker0
[vagrant@legacy-swarm-worker0 ~]$ sudo usermod -aG docker $USER
[vagrant@legacy-swarm-worker0 ~]$ exit
$ vagrant ssh legacy-swarm-master
Setup DOCKER_HOST variable based on the output of installation step above.
[vagrant@legacy-swarm-master ~]$ export DOCKER_HOST=tcp://<IP_ADDRESS>:2375
[vagrant@legacy-swarm-master ~]$ docker info
Containers: 6
Running: 6
Paused: 0
Stopped: 0
Images: 5
Server Version: swarm/1.2.5
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 2
legacy-swarm-master: <IP_ADDRESS>:2385
└ ID: EXNZ:MJZH:U2R4:YKGA:Z46L:EVHK:5SCG:UJWA:ZBJ2:UJ6F:SODY:OOQZ
└ Status: Healthy
└ Containers: 4 (4 Running, 0 Paused, 0 Stopped)
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 513.1 MiB
└ Labels: kernelversion=3.10.0-514.10.2.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper
└ UpdatedAt: 2017-06-14T04:32:44Z
└ ServerVersion: 1.12.6
legacy-swarm-worker0: <IP_ADDRESS>:2385
└ ID: 5KLY:AYCB:OZBI:NW5P:DNNN:V6VE:EHBJ:AJ2F:JZT4:HNJF:NE3B:7X2W
└ Status: Healthy
└ Containers: 2 (2 Running, 0 Paused, 0 Stopped)
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 513.1 MiB
└ Labels: kernelversion=3.10.0-514.10.2.el7.x86_64, operatingsystem=CentOS Linux 7 (Core), storagedriver=devicemapper
└ UpdatedAt: 2017-06-14T04:32:19Z
└ ServerVersion: 1.12.6
Plugins:
Volume:
Network:
Swarm:
NodeID:
Is Manager: false
Node Address:
Security Options:
Kernel Version: 3.10.0-514.10.2.el7.x86_64
Operating System: linux
Architecture: amd64
CPUs: 2
Total Memory: 1.002 GiB
Name: legacy-swarm-master
Docker Root Dir:
Debug Mode (client): false
Debug Mode (server): false
WARNING: No kernel memory limit support
You can see a two node Legacy Swarm cluster running successfully.
Scheduler schedules these containers using the scheduling algorithm bin-packing
or spread
. If they are not placed on different nodes, feel free to start more containers to see the distribution.
Step 5: Check contiv and related services.
etcdctl
is a control utility to manipulate etcd, state store used by kubernetes/docker/contiv
To check etcd cluster health
[vagrant@legacy-swarm-master ~]$ etcdctl cluster-health
member a7a2e9cf2f6b1520 is healthy: got healthy result from http://<IP_ADDRESS>:2379
cluster is healthy
To check netplugin and netmaster is running successfully.
[vagrant@legacy-swarm-master ~]$ sudo service netmaster status
Redirecting to /bin/systemctl status netmaster.service
● netmaster.service - Netmaster
Loaded: loaded (/etc/systemd/system/netmaster.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2017-06-14 04:28:37 UTC; 5min ago
Main PID: 21308 (netmaster)
CGroup: /system.slice/netmaster.service
└─21308 /usr/bin/netmaster --cluster-mode docker -cluster-store etcd:/...
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:02.49815...
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: "
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:02.50289...
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:02.61681...
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:02.61939...
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:02.62245...
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:02.91190...
Jun 14 04:30:02 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:02.91317...
Jun 14 04:30:05 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:05.20989...
Jun 14 04:30:05 legacy-swarm-master netmaster[21308]: time="Jun 14 04:30:05.21218...
Hint: Some lines were ellipsized, use -l to show in full.
[vagrant@legacy-swarm-master ~]$ sudo service netplugin status
Redirecting to /bin/systemctl status netplugin.service
● netplugin.service - Netplugin
Loaded: loaded (/etc/systemd/system/netplugin.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2017-06-14 04:28:28 UTC; 7min ago
Main PID: 20584 (netplugin)
CGroup: /system.slice/netplugin.service
└─20584 /usr/bin/netplugin -plugin-mode docker -vlan-if eth2 -vtep-ip ...
Jun 14 04:30:02 legacy-swarm-master netplugin[20584]: time="Jun 14 04:30:02.44705...
Jun 14 04:30:02 legacy-swarm-master netplugin[20584]: time="Jun 14 04:30:02.44708...
Jun 14 04:30:02 legacy-swarm-master netplugin[20584]: time="Jun 14 04:30:02.44709...
Jun 14 04:30:02 legacy-swarm-master netplugin[20584]: time="Jun 14 04:30:02.44710...
Jun 14 04:30:02 legacy-swarm-master netplugin[20584]: time="Jun 14 04:30:02.75298...
Jun 14 04:34:37 legacy-swarm-master netplugin[20584]: time="Jun 14 04:34:37.14348...
Jun 14 04:35:22 legacy-swarm-master netplugin[20584]: time="Jun 14 04:35:22.13884...
Jun 14 04:35:22 legacy-swarm-master netplugin[20584]: time="Jun 14 04:35:22.14845...
Jun 14 04:36:07 legacy-swarm-master netplugin[20584]: time="Jun 14 04:36:07.11897...
Jun 14 04:36:07 legacy-swarm-master netplugin[20584]: time="Jun 14 04:36:07.12920...
Hint: Some lines were ellipsized, use -l to show in full.
netctl
is a utility to create, update, read and modify contiv objects. It is a CLI wrapper
on top of REST interface.
[vagrant@legacy-swarm-master ~]$ netctl version
Client Version:
Version: 1.0.3
GitCommit: c61eb64
BuildTime: 06-08-2017.01-26-14.UTC
Server Version:
Version: 1.0.3
GitCommit: c61eb64
BuildTime: 06-08-2017.01-26-14.UTC
[vagrant@legacy-swarm-master ~]$ ifconfig docker0
docker0: flags=4099 mtu 1500
inet <IP_ADDRESS> netmask <IP_ADDRESS> broadcast <IP_ADDRESS>
ether 02:42:bf:4d:9d:ab txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[vagrant@legacy-swarm-master ~]$ ifconfig eth1
eth1: flags=4163 mtu 1500
inet <IP_ADDRESS> netmask <IP_ADDRESS> broadcast <IP_ADDRESS>
inet6 fe80::a00:27ff:fe3f:db94 prefixlen 64 scopeid 0x20
ether 08:00:27:3f:db:94 txqueuelen 1000 (Ethernet)
RX packets 18379 bytes 9566674 (9.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10321 bytes 2306239 (2.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[vagrant@legacy-swarm-master ~]$ ifconfig eth0
eth0: flags=4163 mtu 1500
inet <IP_ADDRESS> netmask <IP_ADDRESS> broadcast <IP_ADDRESS>
inet6 fe80::5054:ff:fe88:15b6 prefixlen 64 scopeid 0x20
ether 52:54:00:88:15:b6 txqueuelen 1000 (Ethernet)
RX packets 129583 bytes 124051779 (118.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 44605 bytes 2596926 (2.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
In the above output, you'll see the following interfaces:
- docker0
interface corresponds to the linux bridge and its associated
subnet <IP_ADDRESS>/16
. This is created by docker daemon automatically, and
is the default network containers would belong to when an override network
is not specified
- eth0
in this VM is the management interface, on which we ssh into the VM
- eth1
in this VM is the interface that connects to external network (if needed)
- eth2
in this VM is the interface that carries vxlan and control (e.g. etcd) traffic
Chapter 1: Introduction to Container Networking
There are two main container networking models discussed within the community.
Docker libnetwork - Container Network Model (CNM)
CNM (Container Network Model) is Docker's libnetwork network model for containers
- An endpoint is a container's interface into a network
- A network is collection of arbitrary endpoints
- A container can belong to multiple endpoints (and therefore multiple networks)
- CNM allows for co-existence of multiple drivers, with a network managed by one driver
- Provides Driver APIs for IPAM and Endpoint creation/deletion
- IPAM Driver APIs: Create/Delete Pool, Allocate/Free IP Address
- Network Driver APIs: Network Create/Delete, Endpoint Create/Delete/Join/Leave
- Used by docker engine, docker swarm, and docker compose; and other schedulers
that schedule regular docker containers e.g. Nomad or Mesos docker containerizer
CoreOS CNI - Container Network Interface (CNI)
CNI (Container Network Interface) CoreOS's network model for containers
- Allows container id (uuid) specification for the network interface you create
- Provides Container Create/Delete events
- Provides access to network namespace to the driver to plumb networking
- No separate IPAM Driver: Container Create returns the IPAM information along with other data
- Used by Kubernetes and thus supported by various Kubernetes network plugins, including Contiv
Using Contiv with CNI/Kubernetes can be found here. The rest of the tutorial walks through the docker examples, which implements CNM APIs.
Basic container networking
Let's examine the networking a container gets upon vanilla run.
[vagrant@legacy-swarm-master ~]$ docker network ls
NETWORK ID NAME DRIVER SCOPE
205d0b951c9b legacy-swarm-master/bridge bridge local
8c79cc020852 legacy-swarm-master/host host local
92282e1a7aa0 legacy-swarm-master/none null local
27bdd6e2aacf legacy-swarm-worker0/bridge bridge local
ebd623056f92 legacy-swarm-worker0/host host local
d4f9c8886927 legacy-swarm-worker0/none null local
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=vanilla-c alpine /bin/sh
abe3cae574fb7b07fa228b88b4a0ff338029b9d8d7b5f77ea9c0802dd6162154
[vagrant@legacy-swarm-master ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abe3cae574fb alpine "/bin/sh" About a minute ago Up About a minute legacy-swarm-worker0/vanilla-c
08c5621da092 contiv/auth_proxy:1.0.3 "./auth_proxy --tls-k" 12 minutes ago Up 12 minutes legacy-swarm-master/auth-proxy
19eeadd6015d quay.io/coreos/etcd:v2.3.8 "/etcd" 16 minutes ago Up 16 minutes legacy-swarm-worker0/etcd
1477be6b938f quay.io/coreos/etcd:v2.3.8 "/etcd" 17 minutes ago Up 17 minutes legacy-swarm-master/etcd
Note: This container got scheduled by Legacy Swarm on legacy-swarm-worker0 node, as seen in the NAMES column above. The following ifconfig has to be run on legacy-swarm-worker0 node only if the container is scheduled on legacy-swarm-worker0.
Switch to legacy-swarm-worker0
[vagrant@legacy-swarm-master ~]$ exit
$ vagrant ssh legacy-swarm-worker0
[vagrant@legacy-swarm-worker0 ~]$ ifconfig
[vagrant@legacy-swarm-worker0 ~]$ exit
$ vagrant ssh legacy-swarm-master
$ export DOCKER_HOST=tcp://<IP_ADDRESS>:2375
In the ifconfig
output, you will see that it would have created a veth virtual ethernet interface
that could look like veth......
towards the end. More importantly it is allocated an IP address from default docker bridge docker0
, likely <IP_ADDRESS>
in this setup, and can be examined using
[vagrant@legacy-swarm-master ~]$ docker network inspect legacy-swarm-worker0/bridge
[
{
"Name": "bridge",
"Id": "27bdd6e2aacfc9981de8ae8f2ef02f57933d4dd6913f0c115e0cd7cc1b7a16eb",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "<IP_ADDRESS>/16"
}
]
},
"Internal": false,
"Containers": {
"abe3cae574fb7b07fa228b88b4a0ff338029b9d8d7b5f77ea9c0802dd6162154": {
"Name": "vanilla-c",
"EndpointID": "bdb0f1eb43703cc8e15bca7c47612f74ff2a80a28368b37596f56a79e9b2f0c8",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "<IP_ADDRESS>/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "<IP_ADDRESS>",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
[vagrant@legacy-swarm-master ~]$ docker inspect --format '{{.NetworkSettings.IPAddress}}' vanilla-c
<IP_ADDRESS>
The other pair of veth interface is put into the container with the name eth0
.
[vagrant@legacy-swarm-master ~]$ docker exec -it vanilla-c /bin/sh
/ # ifconfig eth0
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:<IP_ADDRESS> Bcast:<IP_ADDRESS> Mask:<IP_ADDRESS>
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1296 (1.2 KiB) TX bytes:648 (648.0 B)
/ # exit
All traffic to/from this container is Port-NATed to the host's IP (on eth0).
The Port NATing on the host is done using iptables, which can be seen as a
MASQUERADE rule for outbound traffic for <IP_ADDRESS>/16
[vagrant@legacy-swarm-master ~]$ sudo iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
CONTIV-NODEPORT all -- <IP_ADDRESS>/0 <IP_ADDRESS>/0 ADDRTYPE match dst-type LOCAL
...
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- <IP_ADDRESS>/16 <IP_ADDRESS>/0
MASQUERADE all -- <IP_ADDRESS>/16 <IP_ADDRESS>/0
Chain CONTIV-NODEPORT (1 references)
target prot opt source destination
...
Chapter 2: Multi-host networking
There are many solutions like Contiv such as Calico, Weave, OpenShift, OpenContrail, Nuage, VMWare, Docker, Kubernetes, and OpenStack that provide solutions to multi-host container networking.
In this section, let's examine Contiv and Docker overlay solutions.
Multi-host networking with Contiv
Let's use the same example as above to spin up two containers on the two different hosts.
1. Create a multi-host network
[vagrant@legacy-swarm-master ~]$ netctl net create --subnet=<IP_ADDRESS>/24 contiv-net
Creating network default:contiv-net
[vagrant@legacy-swarm-master ~]$ netctl net ls
Tenant Network Nw Type Encap type Packet tag Subnet Gateway IPv6Subnet IPv6Gateway Cfgd Tag
------ ------- ------- ---------- ---------- ------- ------ ---------- ----------- ---------
default contiv-net data vxlan 0 <IP_ADDRESS>/24
[vagrant@legacy-swarm-master ~]$ docker network ls
NETWORK ID NAME DRIVER SCOPE
72d7371e90b5 contiv-net netplugin global
205d0b951c9b legacy-swarm-master/bridge bridge local
8c79cc020852 legacy-swarm-master/host host local
92282e1a7aa0 legacy-swarm-master/none null local
27bdd6e2aacf legacy-swarm-worker0/bridge bridge local
ebd623056f92 legacy-swarm-worker0/host host local
d4f9c8886927 legacy-swarm-worker0/none null local
[vagrant@legacy-swarm-master ~]$ docker network inspect contiv-net
[
{
"Name": "contiv-net",
"Id": "72d7371e90b55f808ffeef7ddfec586f15a6c80e63d002e9eed110b0faab773d",
"Scope": "global",
"Driver": "netplugin",
"EnableIPv6": false,
"IPAM": {
"Driver": "netplugin",
"Options": {
"network": "contiv-net",
"tenant": "default"
},
"Config": [
{
"Subnet": "<IP_ADDRESS>/24"
}
]
},
"Internal": false,
"Containers": {},
"Options": {
"encap": "vxlan",
"pkt-tag": "1",
"tenant": "default"
},
"Labels": {}
}
]
We can now spin a couple of containers belonging to the contiv-net
network. Specifying a node constraint forces the container to start on a different host.
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=contiv-c1 --net=contiv-net -e constraint:node==legacy-swarm-master alpine /bin/sh
021b3e7e21a8284a6d46657ef6f3477eafc594ef0c8080351af0f3d2e52dbd5e
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=contiv-c2 --net=contiv-net -e constraint:node==legacy-swarm-worker0 alpine /bin/sh
93f39b9cf9e27f3b1b3d3d4f33232843ca84547eb8a83d2325e95216a72b7173
You can see which containers have been created.
[vagrant@legacy-swarm-master ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93f39b9cf9e2 alpine "/bin/sh" 27 seconds ago Up 26 seconds legacy-swarm-worker0/contiv-c2
021b3e7e21a8 alpine "/bin/sh" 45 seconds ago Up 42 seconds legacy-swarm-master/contiv-c1
abe3cae574fb alpine "/bin/sh" 16 minutes ago Up 16 minutes legacy-swarm-worker0/vanilla-c
08c5621da092 contiv/auth_proxy:1.0.3 "./auth_proxy --tls-k" 28 minutes ago Up 28 minutes legacy-swarm-master/auth-proxy
19eeadd6015d quay.io/coreos/etcd:v2.3.8 "/etcd" 31 minutes ago Up 31 minutes legacy-swarm-worker0/etcd
1477be6b938f quay.io/coreos/etcd:v2.3.8 "/etcd" 32 minutes ago Up 32 minutes legacy-swarm-master/etcd
Now try to ping between containers.
[vagrant@legacy-swarm-master ~]$ docker exec -it contiv-c2 /bin/sh
/ # ping -c 3 contiv-c1
PING contiv-c1 (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: seq=0 ttl=64 time=1.217 ms
64 bytes from <IP_ADDRESS>: seq=1 ttl=64 time=0.878 ms
64 bytes from <IP_ADDRESS>: seq=2 ttl=64 time=0.954 ms
--- contiv-c1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.878/1.016/1.217 ms
/ # exit
You can see that during the ping, the built-in DNS resolves the name contiv-c1
to the IP address of the contiv-c1
container and uses the vxlan overlay to communicate with the other container.
Docker Overlay multi-host networking
Docker engine has a built in overlay driver that can be use to connect
containers across multiple nodes. However since vxlan port used by contiv
driver is same as that of overlay
driver from Docker, we will use
Docker's overlay multi-host networking towards the end after we experiment
with contiv
because then we can terminate the contiv driver and
let Docker overlay driver use the vxlan port bindings. More about it in
later chapter.
Chapter 3: Using multiple tenants with arbitrary IPs in the networks
First, let's create a new tenant space.
[vagrant@legacy-swarm-master ~]$ export DOCKER_HOST="tcp://<IP_ADDRESS>:2375"
[vagrant@legacy-swarm-master ~]$ netctl tenant create blue
Creating tenant: blue
[vagrant@legacy-swarm-master ~]$ netctl tenant ls
Name
------
default
blue
After the tenant is created, we can create network within tenant blue
.
Here we can choose the same subnet and network name as we used earlier with default tenant, as namespaces
are isolated across tenants.
[vagrant@legacy-swarm-master ~]$ netctl net create -t blue --subnet=<IP_ADDRESS>/24 contiv-net
Creating network blue:contiv-net
[vagrant@legacy-swarm-master ~]$ netctl net ls -t blue
Tenant Network Nw Type Encap type Packet tag Subnet Gateway IPv6Subnet IPv6Gateway Cfgd Tag
------ ------- ------- ---------- ---------- ------- ------ ---------- ----------- ---------
blue contiv-net data vxlan 0 <IP_ADDRESS>/24
Next, we can run containers belonging to this tenant.
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=contiv-blue-c1 --net="contiv-net/blue" alpine /bin/sh
ea49d3f17e5f51404221d199b0502973c0005a2c7baf1827e569cb135958d77e
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=contiv-blue-c2 --net="contiv-net/blue" alpine /bin/sh
0a77b2ed472291423ccca4efdd14e8524eec5ae3c51c273b83f74b5eea961369
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=contiv-blue-c3 --net="contiv-net/blue" alpine /bin/sh
40e249715badb157faa84890c2521528ce1068165482635c8644856830dacd73
[vagrant@legacy-swarm-master ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40e249715bad alpine "/bin/sh" 17 seconds ago Up 16 seconds legacy-swarm-worker0/contiv-blue-c3
0a77b2ed4722 alpine "/bin/sh" 44 seconds ago Up 42 seconds legacy-swarm-master/contiv-blue-c2
ea49d3f17e5f alpine "/bin/sh" 58 seconds ago Up 56 seconds legacy-swarm-worker0/contiv-blue-c1
93f39b9cf9e2 alpine "/bin/sh" 6 minutes ago Up 6 minutes legacy-swarm-worker0/contiv-c2
021b3e7e21a8 alpine "/bin/sh" 6 minutes ago Up 6 minutes legacy-swarm-master/contiv-c1
abe3cae574fb alpine "/bin/sh" 22 minutes ago Up 22 minutes legacy-swarm-worker0/vanilla-c
08c5621da092 contiv/auth_proxy:1.0.3 "./auth_proxy --tls-k" 33 minutes ago Up 33 minutes legacy-swarm-master/auth-proxy
19eeadd6015d quay.io/coreos/etcd:v2.3.8 "/etcd" 37 minutes ago Up 37 minutes legacy-swarm-worker0/etcd
1477be6b938f quay.io/coreos/etcd:v2.3.8 "/etcd" 38 minutes ago Up 38 minutes legacy-swarm-master/etcd
[vagrant@legacy-swarm-master ~]$ docker network inspect contiv-net/blue
[
{
"Name": "contiv-net/blue",
"Id": "f0f2adcd10d59a8ee95d0cb6b8cda6d4b767e62dcfec788bc25d8d767453731a",
"Scope": "global",
"Driver": "netplugin",
"EnableIPv6": false,
"IPAM": {
"Driver": "netplugin",
"Options": {
"network": "contiv-net",
"tenant": "blue"
},
"Config": [
{
"Subnet": "<IP_ADDRESS>/24"
}
]
},
"Internal": false,
"Containers": {
"0a77b2ed472291423ccca4efdd14e8524eec5ae3c51c273b83f74b5eea961369": {
"Name": "contiv-blue-c2",
"EndpointID": "c29173b07d45f9433ee6f7e116049bacbe3f60273559e8c7327e29fb01462fd2",
"MacAddress": "02:02:0a:01:02:02",
"IPv4Address": "<IP_ADDRESS>/24",
"IPv6Address": ""
},
"40e249715badb157faa84890c2521528ce1068165482635c8644856830dacd73": {
"Name": "contiv-blue-c3",
"EndpointID": "d306f5e7c43479d7041202857c17e47e5001933f2110e2bab68f24b3575650d7",
"MacAddress": "02:02:0a:01:02:03",
"IPv4Address": "<IP_ADDRESS>/24",
"IPv6Address": ""
},
"ea49d3f17e5f51404221d199b0502973c0005a2c7baf1827e569cb135958d77e": {
"Name": "contiv-blue-c1",
"EndpointID": "e1a91a78eeb38331c8f717b7c4994a81f6764fd01f71161c0f1748ae425e95a1",
"MacAddress": "02:02:0a:01:02:01",
"IPv4Address": "<IP_ADDRESS>/24",
"IPv6Address": ""
}
},
"Options": {
"encap": "vxlan",
"pkt-tag": "2",
"tenant": "blue"
},
"Labels": {}
}
]
Now let's try to ping between these containers.
[vagrant@legacy-swarm-master ~]$ docker exec -it contiv-blue-c3 /bin/sh
/ # ping -c 3 contiv-blue-c1
PING contiv-blue-c1 (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: seq=0 ttl=64 time=1.173 ms
64 bytes from <IP_ADDRESS>: seq=1 ttl=64 time=0.087 ms
64 bytes from <IP_ADDRESS>: seq=2 ttl=64 time=0.090 ms
--- contiv-blue-c1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.087/0.450/1.173 ms
/ # ping -c 3 contiv-blue-c2
PING contiv-blue-c2 (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: seq=0 ttl=64 time=2.441 ms
64 bytes from <IP_ADDRESS>: seq=1 ttl=64 time=0.936 ms
64 bytes from <IP_ADDRESS>: seq=2 ttl=64 time=0.969 ms
--- contiv-blue-c2 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.936/1.448/2.441 ms
/ # exit
Chapter 4: Connecting containers to external networks
In this chapter, we explore ways to connect containers to the external networks
1. External Connectivity using Host NATing
Docker uses the linux bridge (docker_gwbridge) based PNAT to reach out and port mappings for others to reach to the container
[vagrant@legacy-swarm-master ~]$ docker exec -it contiv-c1 /bin/sh
/ # ifconfig -a
eth0 Link encap:Ethernet HWaddr 02:02:0A:01:02:01
inet addr:<IP_ADDRESS> Bcast:<IP_ADDRESS> Mask:<IP_ADDRESS>
inet6 addr: fe80::2:aff:fe01:201/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2906 (2.8 KiB) TX bytes:2258 (2.2 KiB)
eth1 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
inet addr:<IP_ADDRESS> Bcast:<IP_ADDRESS> Mask:<IP_ADDRESS>
inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:24 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1896 (1.8 KiB) TX bytes:648 (648.0 B)
lo Link encap:Local Loopback
inet addr:<IP_ADDRESS> Mask:<IP_ADDRESS>
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # ping -c 3 contiv.com
PING contiv.com (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: seq=0 ttl=61 time=38.088 ms
64 bytes from <IP_ADDRESS>: seq=1 ttl=61 time=57.052 ms
64 bytes from <IP_ADDRESS>: seq=2 ttl=61 time=53.208 ms
--- contiv.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 38.088/49.449/57.052 ms
/ # exit
What you see is that container has two interfaces belonging to it:
- eth0 is reachability into the contiv-net
- eth1 is reachability for container to the external world and outside traffic to be able to reach the container contiv-c1
. This also relies on the host's dns resolv.conf as a default way to resolve non container IP resolution.
Similarly outside traffic can be exposed on specific ports using the -p
command. Before
we do that, let us confirm that port 9099 is not reachable from the master node. Let's first install some commands.
# Install nc utility
[vagrant@legacy-swarm-master ~]$ sudo yum -y install nc
< some yum install output >
Complete!
[vagrant@legacy-swarm-master ~]$ sudo yum -y install tcpdump
< some yum install output >
Complete!
[vagrant@legacy-swarm-master ~]$ nc -vw 1 localhost 9099
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection refused.
Now we start a container that exposes tcp port 9099 out in the host.
[vagrant@legacy-swarm-master ~]$ docker run -itd -p 9099:9099 --name=contiv-exposed --net=contiv-net alpine /bin/sh
ca1afea11f572b292c6bf5da821ee515d45b8fc73b62c52d2095e2b92f88c44a
And if we re-run our nc
utility, we'll see that 9099 is reachable.
[vagrant@legacy-swarm-master ~]$ nc -vw 1 localhost 9099
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to <IP_ADDRESS>:9099.
^C
This happens because docker as soon as a port is exposed, a NAT rule is installed for the port to allow rest of the network to access the container on the specified/exposed port. The nat rules on the host can be seen by:
[vagrant@legacy-swarm-master ~]$ sudo iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
CONTIV-NODEPORT all -- <IP_ADDRESS>/0 <IP_ADDRESS>/0 ADDRTYPE match dst-type LOCAL
DOCKER all -- <IP_ADDRESS>/0 <IP_ADDRESS>/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- <IP_ADDRESS>/0 !<IP_ADDRESS>/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- <IP_ADDRESS>/16 <IP_ADDRESS>/0
MASQUERADE all -- <IP_ADDRESS>/16 <IP_ADDRESS>/0
MASQUERADE all -- <IP_ADDRESS>/16 <IP_ADDRESS>/0
MASQUERADE tcp -- <IP_ADDRESS> <IP_ADDRESS> tcp dpt:9099
Chain CONTIV-NODEPORT (1 references)
target prot opt source destination
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- <IP_ADDRESS>/0 <IP_ADDRESS>/0
RETURN all -- <IP_ADDRESS>/0 <IP_ADDRESS>/0
DNAT tcp -- <IP_ADDRESS>/0 <IP_ADDRESS>/0 tcp dpt:9099 to:<IP_ADDRESS>:9099
2. Natively connecting to the external networks
Remote drivers, like Contiv, can provide an easy way to connect to external layer2 or layer3 networks using BGP or standard L2 access into the network.
Preferably using an BGP hand-off to the leaf/TOR, this can be done as in [http://contiv.github.io/documents/networking/bgp.html], which describes how can you use BGP with Contiv to provide native container connectivity and reachability to rest of the network. However for this tutorial, since we don't have a real or simulated BGP router, we'll use some very simple native L2 connectivity to describe the power of native connectivity. This is done using vlan network, for example
[vagrant@legacy-swarm-master ~]$ netctl net create -p 112 -e vlan -s <IP_ADDRESS>/24 contiv-vlan
Creating network default:contiv-vlan
[vagrant@legacy-swarm-master ~]$ netctl net ls
Tenant Network Nw Type Encap type Packet tag Subnet Gateway IPv6Subnet IPv6Gateway Cfgd Tag
------ ------- ------- ---------- ---------- ------- ------ ---------- ----------- ---------
default contiv-vlan data vlan 112 <IP_ADDRESS>/24
default contiv-net data vxlan 0 <IP_ADDRESS>/24
The allocated vlan can be used to connect any workload in vlan 112 in the network infrastructure.
The interface that connects to the outside network needs to be specified during netplugin
start, for this VM configuration it is set as eth2
Let's run some containers to belong to this network, one on each node. First one on
legacy-swarm-master
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=contiv-vlan-c1 --net=contiv-vlan -e constraint:node==legacy-swarm-master alpine /bin/sh
39c1c3774f863a4d7f086ce7b7e512329c86c5962f97601654486231ddaa9e4e
And another one on legacy-swarm-worker0
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=contiv-vlan-c2 --net=contiv-vlan -e constraint:node==legacy-swarm-worker0 alpine /bin/sh
5644ad0d47576b48655bf406ea33da54caae31d7cf004f7ab9a5ca1512feb24c
Open a new terminal and connect to the worker node legacy-swarm-worker0.
$ vagrant ssh legacy-swarm-worker0
[vagrant@legacy-swarm-worker0 ~]$ docker exec -it contiv-vlan-c2 /bin/sh
/ # ping contiv-vlan-c1
PING contiv-vlan-c1 (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: seq=0 ttl=64 time=1.163 ms
64 bytes from <IP_ADDRESS>: seq=1 ttl=64 time=0.085 ms
64 bytes from <IP_ADDRESS>: seq=2 ttl=64 time=0.094 ms
...
While this is going on legacy-swarm-worker0
, let's run tcpdump on eth2 on legacy-swarm-master
and confirm how rx/tx packets look on it:
[vagrant@legacy-swarm-master ~]$ sudo tcpdump -e -i eth2 icmp
tcpdump: WARNING: eth2: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
05:26:32.768233 02:02:0a:01:03:02 (oui Unknown) > 02:02:0a:01:03:01 (oui Unknown), ethertype 802.1Q (0x8100), length 102: vlan 112, p 0, ethertype IPv4, <IP_ADDRESS> > <IP_ADDRESS>: ICMP echo request, id 2816, seq 0, length 64
05:26:33.768908 02:02:0a:01:03:02 (oui Unknown) > 02:02:0a:01:03:01 (oui Unknown), ethertype 802.1Q (0x8100), length 102: vlan 112, p 0, ethertype IPv4, <IP_ADDRESS> > <IP_ADDRESS>: ICMP echo request, id 2816, seq 1, length 64
05:26:34.769469 02:02:0a:01:03:02 (oui Unknown) > 02:02:0a:01:03:01 (oui Unknown), ethertype 802.1Q (0x8100), length 102: vlan 112, p 0, ethertype IPv4, <IP_ADDRESS> > <IP_ADDRESS>: ICMP echo request, id 2816, seq 2, length 64
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
Note: The vlan shown in tcpdump is same (i.e. 112
) as what we configured in the VLAN. After verifying this, feel free to stop the ping that is still running on
contiv-vlan-c2
container.
Chapter 5: Docker Overlay multi-host networking
As we learned earlier that using the vxlan port conflict can prevent us from using
Docker overlay
network. For us to experiment with this, we'd go ahead
and terminate contiv
driver first on both nodes: legacy-swarm-master
and
legacy-swarm-worker0
:
[vagrant@legacy-swarm-master ~]$ sudo service netplugin stop
Redirecting to /bin/systemctl stop netplugin.service
[vagrant@legacy-swarm-worker0 ~]$ sudo service netplugin stop
Redirecting to /bin/systemctl stop netplugin.service
To try out overlay driver, we switch to legacy-swarm-master
and create an overlay network first.
[vagrant@legacy-swarm-master ~]$ docker network create -d=overlay --subnet=<IP_ADDRESS>/24 overlay-net
db97986a0e61bb09d41918489b991ff786d8391b1b452edc28f8374cf870823b
[vagrant@legacy-swarm-master ~]$ docker network inspect overlay-net
[
{
"Name": "overlay-net",
"Id": "db97986a0e61bb09d41918489b991ff786d8391b1b452edc28f8374cf870823b",
"Scope": "global",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "<IP_ADDRESS>/24"
}
]
},
"Internal": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
Now, we can create few containers that belongs to overlay-net
, which can get scheduled
on any of the available nodes by the scheduler. Note that we still have DOCKER_HOST set to point
to the swarm cluster.
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=overlay-c1 --net=overlay-net alpine /bin/sh
115b8cec9a3e7148b91bbb17b51e150b387d5d06f783e558b7bb58a2110a003c
[vagrant@legacy-swarm-master ~]$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' overlay-c1
<IP_ADDRESS>
[vagrant@legacy-swarm-master ~]$ docker run -itd --name=overlay-c2 --net=overlay-net alpine /bin/sh
68e4daada1082009472ad5f61c32604ebcf0a2079c02bc714c056e25b967037c
[vagrant@clegacy-swarm-master ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
825a80fb54c4 alpine "/bin/sh" 38 seconds ago Up 37 seconds contiv-node4/overlay-c2
82079ffd25d4 alpine "/bin/sh" About a minute ago Up About a minute contiv-node4/overlay-c1
cf720d2e5409 contiv/auth_proxy:1.0.0-beta.5 "./auth_proxy --tls-k" 3 hours ago Up 3 hours contiv-node3/auth-proxy
2d450e95bb3b quay.io/coreos/etcd:v2.3.8 "/etcd" 4 hours ago Up 4 hours contiv-node4/etcd
78c09b21c1fa quay.io/coreos/etcd:v2.3.8 "/etcd" 4 hours ago Up 4 hours contiv-node3/etcd
[vagrant@legacy-swarm-master ~]$ docker exec -it overlay-c2 /bin/sh
/ # ping overlay-c1
PING overlay-c1 (<IP_ADDRESS>): 56 data bytes
64 bytes from <IP_ADDRESS>: seq=0 ttl=64 time=0.105 ms
64 bytes from <IP_ADDRESS>: seq=1 ttl=64 time=0.089 ms
64 bytes from <IP_ADDRESS>: seq=2 ttl=64 time=0.109 ms
^C
--- overlay-c1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.075/0.087/0.096 ms
/ # exit
Very similar to contiv-networking, built in dns resolves the name overlay-c1
to the IP address of overlay-c1
container and be able to reach another container
across using a vxlan overlay.
Cleanup:
To cleanup the setup, after doing all the experiments, exit the VM and destroy the VMs:
[vagrant@legacy-swarm-master ~]$ exit
logout
Connection to <IP_ADDRESS> closed.
$ cd .. # go back to install directory
$ make cluster-destroy
cd cluster && vagrant destroy -f
==> kubeadm-worker0: VM not created. Moving on...
==> kubeadm-master: VM not created. Moving on...
==> swarm-mode-worker0: VM not created. Moving on...
==> swarm-mode-master: VM not created. Moving on...
==> legacy-swarm-worker0: Forcing shutdown of VM...
==> legacy-swarm-worker0: Destroying VM and associated drives...
==> legacy-swarm-master: Forcing shutdown of VM...
==> legacy-swarm-master: Destroying VM and associated drives...
$ make vagrant-clean
References
Improvements or Comments
This tutorial was developed by Contiv engineers. Thank you for trying out this tutorial. Please file a GitHub issue if you see an issue with the tutorial, or if you prefer improving some text, feel free to send a pull request.


{% extends "django_cradmin/viewhelpers/listbuilderview/filterlist-right.django.html" %} {% load i18n %} {% block pageheader-inner %} {{ block.super }}
{% trans "Listing of assigments where you are set as examiner." %}