Set against a beautiful waterfront Wellington is famous for its vibrant arts scene, world class café and restaurant culture, and active outdoor lifestyle. Wellington enjoys more cafes, bars and restaurants than New York City, and its coffee and craft beer producers are internationally recognised. Exploring the city and visiting attractions is easy with most central city locations within easy walking distance and supported by a comprehensive local bus network.
For more information about Wellington and local attractions please visit www.wellingtonnz.comThe Conference will be held at the Michael Fowler Centre, situated in the centre of Wellington and within mins walk to hotels, shops and restaurants. Click here for further details on the Conference Venue.
The Michael Fowler Centre is located at 111 Wakefield Street, Wellington. Click here to view on Google Maps.
OS//OS Event tickets can be purchased from the Chalkle website.
Conference Registration opens at 8am on April 16th at the Michael Fowler Centre entrance.
Michael Fowler Centre - parking for approximately 88 car parks with three disability spaces is available at the Michael Fowler Centre car park. Parking charges are $4 per hour Mon-Fri 6am-6pm and $2 per hour on Friday from 6pm. Weekend parking is free.
TSB Bank Arena Parking - At the TSB Bank Arena, public and exhibitor parking facilities are available at Wilson Parking located beneath the venue. For further information on hours and costs, please contact Wilson Parking.St James Theatre - Wilsons Parking have covered and open air options available at 84 Tory Street and 221 Wakefield Street.
Note: Given the easy accessibility of Michael Fowler Centre by foot or the local bus network parking at your accommodation and walking / busing in may be more cost effective.
The following hotels and apartments have agreed to honour a 10% discount for conference attendees.
| Hotel | Walking to OS//OS | Address | Phone & Email |
|---|---|---|---|
| Amora Hotel | 2 min | 170 Wakefield St, Te Aro, Wellington | Phone: +64 4-473 3900, Click to email |
| West Plaza Hotel | 1 min | 1109 Wakefield Street, Wellington | Phone: 0800 71 444 (NZ only), Click to email |
| GQ Apartments | 5 mins | 213-223 Cuba Street, Wellington | Phone: +64 4 385 2516, Click to email |
There are a huge range of accommodation options in the area so we encourage attendees to use search engines and travel sites such as Wotif and AirBnB to find accommodation that suits your style and budget.
Travel to the central city by taxi from the Wellington Domestic or International airport terminals will cost approximately NZ$35. Wellington Taxis can accept cash in New Zealand dollars and credit card payments
The Wellington Airport Flyer bus services transports visitors and luggage from the airport terminals to the central city for $9 New Zealand dollars. The Airport Flyers leave every 10 minutes and offer Free Wifi. Cash only.
Please visit wellingtonnz.com for information on the amazing range of activities and tourist attractions to take advantage of during your time in Wellington:
To discover exciting events happening during your stay please visit the Wellington events listing page at wotzon.com
For general enquiries please email us at this address.
For any urgent enquires regarding registration or accommodation please phone Helen our Event Manager on +64 27 378 7432.
IMPORTANT: If calling internationally, please check the local time in New Zealand first (no 3am calls please!).


Table S51. Prediction of damaging effect on BMPR1A
|
SNP |
Protein ID |
Position |
Amino acid change |
SIFT |
PolyPhen2 |
PMut |
MutPred |
SNAP2 |
SNP&GO |
PANTHER |
|
rs35619497 |
NP_004320 |
532 |
R443C |
Damaging |
Probably Damaging |
0.8527 Pathological |
0.965 |
Effect 91% |
Disease |
Probably Damaging |
|
rs112603659 |
NP_004320 |
532 |
E502G |
Damaging |
Possibly Damaging |
0.9144 Pathological |
0.742 |
Effect 71% |
Neutral |
Probably Damaging |
|
rs112883778 |
NP_004320 |
532 |
W487R |
Damaging |
Probably Damaging |
0.9741 Pathological |
0.750 |
Effect 85% |
Disease |
Probably Damaging |


Introduction
The Dispatcher Servlet is the glue that holds a servlet container (like Tomcat or Jetty) and Spring together. In this post I’ll attempt to broadly explain:
- - How the dispatcher servlet works?
- - How the dispatcher servlet is different from plain old servlets?
- - What is the Front Controller pattern?
Servlets Refresher
The Servlet API makes it possible to work with HTTP in Java. It is implemented by web servers like Tomcat and Jetty. The fact that they handle dynamic content with servlets makes them a servlet container.
Inside the containers for each incoming HTTP request a HttpServletRequest and HttpServletResponse is created. The HttpServletRequest contains the actual request data and the HttpServletResponse exists for the developers to write the dynamic response data into.
Each servlet is mapped to a single path, but each path can make use of multiple methods like GET, POST, PUT, etc. So if the web app runs on the root path `url:port//servlet1` it is mapped to a single servlet. For a better explanation on servlets check out this explanation on stackoverflow. Servlets are also capable dealing of with sessions/cookies and file uploads, but lets ignore that for now.
Dispatcher Servlet
So how does the Dispatcher Servlet fit in the picture? The dispatcher servlet is part of the SpringMVC library that is build on top of servlets. The dispatcher servlet in fact extended from HttpServlet. It does pre-processing and postprocessing of the request and response, like mapping to and from java objects and extracting HTTP parameters for you.
Furthermore, it delegates the requests to the correct Spring controller, based on the value inside the mapping annotation (@RequestMapping, etc), in addition to other things.
Example of Spring vs Servlets
@PostMapping
public Book createBook(@RequestBody Book book) {
logger.info("createBook: {}", book);
return service.createBook(book);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("doPost: {}", req.getServletPath());
// transform request data to object
Book book = objectMapper.readValue(req.getInputStream(), Book.class);
logger.info("request body: {}", book);
// create book
Book createdBook = service.createBook(book);
// turn the object to a String
String responseData = objectMapper.writeValueAsString(createdBook);
// set the response content type to json
resp.setContentType("application/json");
// add the book as json string to the response body
resp.getWriter().println(responseData);
}
Front Controller
The dispatcher servlet is based on the Front Controller pattern. In one sentence, the pattern entails that a single controller is used to handle
all requests. In the example above, the Spring controller also makes use of an ObjectMapper, but that is configured and included in the dispatcher
servlet. It allows methods to be written like this: Product getProduct(String productId);
instead of
void doGet(HttpServletRequest req, HttpServletResponse res);
.
The first method is arguably a lot easier to test, the method will contain less boilerplate and the method parameters are simpler objects, not HttpServletRequest and HttpServletResponse. So the two benefits of using this pattern is that there is central servlet that contains all configuration where all requests and responses go through. The result is reduced boilerplate and simpler methods to test. (https://en.wikipedia.org/wiki/Front_controller#Benefits_and_liabilities)
Summary
In the end it is a trade-off. Choose to learning Spring configuration or write Servlets boilerplate code. The Java community has decided long ago that the first solution is preferred because of the two main reasons above. It is less error prone and the amount of configuration and annotations you need to learn isn’t much.
Remember that the dispatcher servlet is based on the Front Controller pattern, that it is a plain old servlet that processes requests and responses,
delegates them, and contains a lot of @EnableMVC
configuration.
To learn SpringMVC my advice is to create a small application with plain servlets to understand how they work, and swiftly move on to enjoy the benefits of Spring. Cheers!


Before Change
input_file_path = path
detected = filetype.guess(input_file_path)
if detected is None or not detected.mime.endswith(detected.extension):
mime_type = "UNKNOWN" if detected is None else detected.mime
raise Exception(f"{anthology_id} file {path} has MIME type {mime_type}")
if paper_extension not in ALLOWED_TYPES:
raise Exception(f"-> Unknown file extension {paper_extension} for {path}")
// Update XML
xml_file = os.path.join(
os.path.dirname(sys.argv[0]), "..", "data", "xml", f"{collection_id}.xml"
)
tree = ET.parse(xml_file)
paper = tree.getroot().find(f"./volume[@id="{volume_id}"]/paper[@id="{paper_id}"]")
if paper is not None:
// Check if attachment already exists
for attachment in paper.findall("attachment"):
if attachment.text == attachment_file_name:
print(
f"-> attachment {attachment_file_name} already exists in the XML",
file=sys.stderr,
)
break
else:
attachment = ET.Element("attachment")
attachment.attrib["type"] = attach_type.lower()
attachment.text = attachment_file_name
paper.append(attachment)
indent(tree.getroot())
tree.write(xml_file, encoding="UTF-8", xml_declaration=True)
print(
f"-> added attachment {attachment_file_name} to the XML", file=sys.stderr
)
else:
raise Exception(f"Paper {anthology_id} not found in the Anthology")
// Make sure directory exists
if not os.path.exists(output_dir):
// print(f"-> Creating directory {output_dir}", file=sys.stderr)
After Change
file_extension = path.replace("?dl=1", "").split(".")[-1]
// Many links from file sharing services are not informative and don"t have
// extensions, so we could try to guess.
if file_extension not in ALLOWED_TYPES:
detected = filetype.guess(input_file_path)
if detected is not None:
file_extension = detected.mime.split("/")[-1]
if file_extension not in ALLOWED_TYPES:
print(
f"Could not determine file extension for {anthology_id} at {path}",
file=sys.stderr,
)
// Update XML
xml_file = os.path.join(
os.path.dirname(sys.argv[0]), "..", "data", "xml", f"{collection_id}.xml"
)
tree = ET.parse(xml_file)


Generated Sun Feb 02 11:49:44 GMT 2020, FHIR version 4.0.1 for uk.testcore.r4#1.0.0 (canonical = https://fhir.nhs.uk/R4 (history))
| ImplementationGuide.id | warning | The Implementation Guide Resource id should be uk.testcore.r4 |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| warning | Unable to find description for the resource. Descriptions are strongly encouraged to allow proper population of the artifact list. |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 142, column 8 | error | The link 'UKCore-AllergyIntolerance-Example.html' for "UK Core AllergyIntolerance Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 143, column 8 | error | The link 'UKCore-Allergy-List-Example.html' for "UK Core Allergy List Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 144, column 8 | error | The link 'UKCore-Condition-Example.html' for "UK Core Condition Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 145, column 8 | error | The link 'UKCore-Consent-Example.html' for "UK Core Consent Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 146, column 8 | error | The link 'UKCore-Encounter-Example.html' for "UK Core Encounter Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 147, column 8 | error | The link 'UKCore-List-Example.html' for "UK Core List Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 148, column 8 | error | The link 'UKCore-Location-Example.html' for "UK Core Location Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 149, column 8 | error | The link 'UKCore-Observation-Example.html' for "UK Core Observation Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 150, column 8 | error | The link 'UKCore-Organisation-Example.html' for "UK Core Organisation Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 151, column 8 | error | The link 'UKCore-Patient-Example.html' for "UK Core Patient Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 152, column 8 | error | The link 'UKCore-Practitioner-Example.html' for "UK Core Practitioner Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 153, column 8 | error | The link 'UKCore-PractitionerRole-Example.html' for "UK Core PractitionerRole Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 154, column 8 | error | The link 'UKCore-Procedure-Example.html' for "UK Core Procedure Example" cannot be resolved |
| examples.html#/html/body/div/div/div/div/div/ul/li/a at Line 155, column 8 | error | The link 'UKCore-RelatedPerson-Example.html' for "UK Core RelatedPerson Example" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 149, column 12 | error | The link 'Extension-UKCore-AddressKey.html' for "Extension UK Core AddressKey" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 153, column 12 | error | The link 'Extension-UKCore-AdmissionMethod.html' for "Extension UK Core AdmissionMethod" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 157, column 12 | error | The link 'Extension-UKCore-AllergyIntoleranceEnd.html' for "Extension UK Core AllergyIntoleranceEnd" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 161, column 12 | error | The link 'Extension-UKCore-AnaestheticIssues.html' for "Extension UK Core AnaestheticIssues" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 165, column 12 | error | The link 'Extension-UKCore-ClinicalSetting.html' for "Extension UK Core ClinicalSetting" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 169, column 12 | error | The link 'Extension-UKCore-ConditionEpisode.html' for "Extension UK Core ConditionEpisode" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 173, column 12 | error | The link 'Extension-UKCore-ContactPreference.html' for "Extension UK Core ContactPreference" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 177, column 12 | error | The link 'Extension-UKCore-ContactRank.html' for "Extension UK Core ContactRank" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 181, column 12 | error | The link 'Extension-UKCore-CopyCorrespondenceIndicator.html' for "Extension UK Core CopyCorrespondenceIndicator" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 185, column 12 | error | The link 'Extension-UKCore-DeathNotificationStatus.html' for "Extension UK Core DeathNotificationStatus" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 189, column 12 | error | The link 'Extension-UKCore-DischargeMethod.html' for "Extension UK Core DischargeMethod" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 193, column 12 | error | The link 'Extension-UKCore-EffectivePeriod.html' for "Extension UK Core EffectivePeriod" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 197, column 12 | error | The link 'Extension-UKCore-EmergencyCareDischargeStatus.html' for "Extension UK Core EmergencyCareDischargeStatus" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 201, column 12 | error | The link 'Extension-UKCore-EncounterTransport.html' for "Extension UK Core EncounterTransport" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 205, column 12 | error | The link 'Extension-UKCore-EthnicCategory.html' for "Extension UK Core EthnicCategory" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 209, column 12 | error | The link 'Extension-UKCore-Evidence.html' for "Extension UK Core Evidence" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 213, column 12 | error | The link 'Extension-UKCore-ListWarningCode.html' for "Extension UK Core ListWarningCode" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 217, column 12 | error | The link 'Extension-UKCore-MainLocation.html' for "Extension UK Core MainLocation" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 221, column 12 | error | The link 'Extension-UKCore-NHSCommunication.html' for "Extension UK Core NHSCommunication" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 225, column 12 | error | The link 'Extension-UKCore-NHSNumberVerificationStatus.html' for "Extension UK Core NHSNumberVerificationStatus" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 229, column 12 | error | The link 'Extension-UKCore-NominatedPharmacy.html' for "Extension UK Core NominatedPharmacy" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 233, column 12 | error | The link 'Extension-UKCore-OutcomeOfAttendance.html' for "Extension UK Core OutcomeOfAttendance" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 237, column 12 | error | The link 'Extension-UKCore-ReligiousAffiliation.html' for "Extension UK Core ReligiousAffiliation" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 241, column 12 | error | The link 'Extension-UKCore-ResidentialStatus.html' for "Extension UK Core ResidentialStatus" cannot be resolved |
| extension_library.html#/html/body/div/div/div/div/div/table/tbody/tr/td/a at Line 245, column 12 | error | The link 'Extension-UKCore-TreatmentCategory.html' for "Extension UK Core TreatmentCategory" cannot be resolved |
| index.html#/html/body/div/div/div/div/div/p/a at Line 139, column 42 | error | The link 'summary.html' for "Summary" cannot be resolved |
| Path | Severity | Message |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[0] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[0].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource' does not resolve |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[1] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[1].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource' does not resolve |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[2] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[2].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource' does not resolve |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[3] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[3].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource' does not resolve |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[4] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[4].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource' does not resolve |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[5] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[5].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-resource' does not resolve |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[6] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-pages is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[6].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-pages' does not resolve |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[7] | error | The extension http://hl7.org/fhir/StructureDefinition/igpublisher-folder-pages is unknown, and not allowed here |
| ImplementationGuide/nhsdigital-fhir-r4-core-prototype: ImplementationGuide.extension[7].url | error | URL value 'http://hl7.org/fhir/StructureDefinition/igpublisher-folder-pages' does not resolve |


Frequently Asked Questions¶
Frequently Asked Questions
I got a JSONDecodeError. How do I resolve this?¶
A JSONDecodeError can be diagnosed in the following steps:
Check that the field entries are the same as the type that is stated in the examples and the typehints.
If the inputs are correct, message for help on the Discord chat! (Find link on README.)
Does the engine run on a nearest neighbor implementation?¶
The neighbor runs an Exact Nearest Neighbors implementation and when the number of documents exceeds 100k documents, the engine starts to run on ANN instead.
When I insert a document with the same ID what happens to the document?¶
The document is over-written. In order to edit the document (ie – change a field or add a new field), you can use the edit_document function.
How do I add a new field in a collection?¶
Currently, the only way is to run edit_document.
How do I get more search results?¶
To get more search results, you want to change the page_size parameter. To view the next page of results, you want to use the cursor.
Are there any limits to the API request calls?¶
The API requests will time out after 400 seconds. There is no limit on the size of the request or anything.
Is Vector AI able to store images and videos?¶
We currently do not support storing images and videos but this can be fixed by using a link to the video or image instead.


1 656 843
Status: Live
146 Countries, 2759 Cities
Some Cool Text
P. to C. Conversion
Average Bitrate
Tracking: Active
391 elements installed, 84 sets


"CityScope" is a concept for shared, interactive computation for urban planning. This project is an extension of https://cityio.media.mit.edu application for any part of the world. More details will be updated soon.


Learn MoreWe match you with people that meet you specific preferences
You can find convenient places to stay as well
Your saftey is our top concern. Guaranteed no weirdos
This website is made for you so that you could have a great time!
Need help with anything? Give us a call or send us an email and we will get back to you as soon as possible!
123-456-6789


Click the button to print the page.
| Expense | First Year | Each Following Year |
| Adoption | $0-500 | N/A |
| Food | $120-50 | $120-500 |
| Nutritional Supplements* | $0-100 | $0-100 |
| Food/water bowls | $10-40 | $0-25 |
| Treats | $20-200 | $20-200 |
| Dental/chew toys | $20-200 | $20-200 |
| Routine veterinary exams | $45-200 | $20-100 |
| Vaccinations | $60-150 | $60-150 |
| Emergency veterinary care | $0-2,000+ | $0-2,000 |
| Heartworm test** | $0-35 | $0-35 |
| Heartworm prevention | $24-120 | $36-132 |
| Fecal exams | $10-30 | $10-20 |
| Worming | $10-25 | $10-25 |
| Flea/Tick prevention | $200-500 | $200-500 |
| Spaying/neutering | $35-200 | N/A |
| Professional teeth cleaning | $60-500 | $0-500 |
| Collar(s) | $7-50 | $0-40 |
| Leash(es) | $10-50 | $0-50 |
| Training | $30-250 | $0-200 |
| Grooming tools | $20-250 | $0-25 |
| Professional grooming | $0-1,200 | $0-1,200 |
| Shampoo | $5-50 | $5-50 |
| Fence | $0-2500 | $0-2500 |
| Stain/odor removers | $10-100 | $10-100 |
| Doggy bed(s) | $25-100 | $0-100 |
| Crate(s) | $20-250 | $0-250 |
| Toys | $10-200 | $0-200 |
| Boarding, per day | $15-50 | $15-50 |
| TOTAL | $766-$10,350 | $526-$9,352 |


--- layout: post title: Agile Project Management with Scrum date: 2004-10-17 00:00:00 category: books ---


Gardaí say missing 15-year-old girl last seen in The Square shopping centre might be in Newry
She hasn’t been seen since last Saturday.
by Garreth MacNameeGARDAÍ HAVE TODAY renewed their appeal for information over the disappearance of a 15-year-old girl in Dublin.
Christine Green was last seen in The Square in Tallaght last Saturday, 16 November. She is described as five feet six inches in height, of broad build and with blue/green eyes. She has blonde hair that is dyed with light blue tips.

It is believed that Christine may be in the Newry area of County Down.
Anyone with any information that can assist in locating Christine is asked to contact Gardaí in Ronanstown on 01 666 7700, the Garda Confidential Line on 1800 666 111 or any Garda Station.


--- layout: documentation title: COATimeType ---
| Field Name | Type | Description |
|---|---|---|
| Start0..1 | DateTimeWithPrecisionType |
The Start field specifies the time at which the CourseOfAction was begun. In order to avoid ambiguity, it is strongly suggest that all timestamps include a specification of the timezone if it is known. |
| End0..1 | DateTimeWithPrecisionType |
The End field specifies the time at which the CourseOfAction was completed. In order to avoid ambiguity, it is strongly suggest that all timestamps include a specification of the timezone if it is known. |


Indian women thrash USA 5-1 in Olympics qualifier, US need miracle on Saturday to stop India’s qualification
by JKR StaffThe Indian women’s hockey on Friday pulled off a spectacular win against the US in their Olympics qualifying match in the Kalinga Stadium in Bhubaneshwar. The US will need to first overcome the four-goal deficit in their second leg match against India on Saturday.
India’s goal scorers were Lilima Minz, Sharmila Devi, Gurjit Kaur, Navneet Kaur. Indian women led the match 1-0 at the first half. India’s last four goals came in the span of just 11 minutes. Though the US scored one late goal, but this was too late for the visitors.
Indian women were impressive both in their attack and defence.
Under the rule, the team with the highest number of goals over the two matches will qualify for the Olympics. In the event that the US women’s team are able to overcome the deficit and both teams are tied on goals after the second-leg, then there will be a penalty shootout to decide the winner.
India’s win on Friday assumed significance since the Indian women have been able to defeat the US team only once in their last 10 encounters. This was during the three-nation competition involving India, Canada and the US in 2016.
Elsewhere, Indian men’s team beat Russia 4-2 going into the second leg of the competition with a two-goal advantage. India’s scorers in the men’s competition against Russia were Harmanpreet Singh, Mandeep Singh and SV Sunil. Mandeep scored twice for India.
Everything going well, both Indian teams will be flying the country’s flag at the Tokyo Olympics next year.


Get a real feel of your prospective university with the help from your GurU mentor. Don't rely on generic open houses and huge campus tour groups to show you how the university works. Take a private tour with a Gur-U mentor in your academic focus at the colleges you want to attend!
Already have your top university scoped out?  Set goals, plan your education, get in touch with your campus months before your peers, the opportunities are endless!
With customized advice from your GurU mentor, you can get a head start on scholarships, admission applications, essays, all while becoming connected to the university in ways not yet possible!


Type in the text box to have your text converted to sinhala*.
Need help with Sayura?
Try Sayura typing guide by Anuradha (Opens in google pdf viewer)
Try the experimental bookmarklet** Sayurajs
..Oh and fork me on Github
*You need to have a sinhala unicode font installed.
**Load the bookmarklet and press ctrl+x to activate/deactivate sayura.


According to reports, you may be approached by an Italian coastguard vessel when nearing the coast, as they patrol this area of the sea. While approaching Albanian territorial waters, Channel 11 should be monitored as it is the working channel used by the Albanian Coast Guard.
The port authority should be contacted on VHF radio (if possible) before entering any of the official ports. English (and Italian) are spoken by Port Control radio operators used to commercial shipping. The best facilities are at Durres which is Albania's main port and has regular ferry connections with Italy (Port Control VHF Channel 15). Officials will board the boat on arrival.
At the majority of ports the Port Authorities (Captain and Police) may insist that an agent is used for entry/exit. This now also applies at Vlore, where you will not be given permission to enter at Orikum Marina and will have to first clear at the commercial port.
When you leave the port you must get another Clearance paper to hand to the subsequent Port Captain on arrival.
Each port will require several copies of the crew list; copies of the Ship’s Registration Papers are also useful.
For a list of agents at Durres and Saranda, see Clearance Agents
Last updated November 2015.
A list of countries whose citizen may enter the country without a visa can be found at www.punetejashtme.gov.al/en/services
The visa issued at the first port of call is valid for the whole of Albania.
Last updated November 2015.
Yachts can stay up to 6 months in Albania. After this time, Customs duty is payable at 22% of the value of the boat.
No special restrictions other than for firearms.
Special export permits are required for precious metals, ancient coins, antiques and works of art, which are considered to be part of national culture and heritage.
Last updated June 2015.
If you are hiking in a forest you should cover your arms and legs with clothing, tucking trousers into socks and boots. You should also wear a hat, use tick repellent sprays and check for ticks at the end of your day.
Visitors are advised against having any unnessesary medical treatment.
It is advisable to use bottled water and treated milk.
All vessels up to 500 tons pay a $50 clearance fee. Visa fees, plus some port fees.
If an agent is used, this can prove to be quite expensive.
When sailing along the coast, foreign vessels are required to stay at least three miles offshore.
Boats sailing south to Saranda through the Bay of Porto Palermo will pass through a military zone for which permission must be obtained.
It has been reported August 2009 that there seem to be few, if any, restrictions on travel now. Cruising yachts leaving Saranda were told they could anchor anywhere except Sazanit Island.


BigRentz
Single Page Web Applications.
Created and maintained internal and partner-facing web applications.
Skills: JavaScript, ReactJS, NodeJS, HTML, CSS, Sass, git.
Company websiteSingle Page Web Applications.
Created and maintained internal and partner-facing web applications.
Skills: JavaScript, ReactJS, NodeJS, HTML, CSS, Sass, git.
Company websiteResponsive landing page.
Created layout from .psd comp.
Skills: Bootstrap, HTML, CSS, Responsive web design.
Live linkRe-launch of Experian's flagship site.
Created and contributed to order funnel pages.
Skills: Bootstrap, AngularJS, HTML, CSS, JavaScript, API integration.
Live linkBilingual cobranded credit site.
Created and contributed to landing pages (desktop and mobile optimized), sub-section landing pages, public and member pages.
Skills: Tridion CMS, HTML, CSS, JavaScript, jQuery, jQuery UI
Interactive score planning tool.
Re-wrote score planner tool to accommodate new scoring model and requirements (public and member implementations).
Skills: JavaScript, jQuery, jQuery UI, Ajax, HTML, CSS
Hobby
Does some simple Ideal Gas calculations.
Frameworks and Libraries: AngularJS, Bootstrap, jQuery, jQuery UI
Skills: JavaScript, jQuery, jQuery UI, AngularJS, HTML, CSS, Responsive
Live link


Document CMS
> SEO Checker
Import Sitemap and Analyze
Sitemap :
Select csv file to input
Import and analyze
Back
Path
Last crawled
Keywords detected
Linked Count
Path
Last crawled
Keywords detected
Linked Count


Gray
Hi, I'm Gray. Yo!
Some of my bad habits:
not listening
snoring
farting
Make sure to follow me on
BluebellsandLoveliness


Localization Support Plugin provides infrastructure to enable dedicated localization plugins providing translations for core or any plugin in Jenkins.
This is a part of JEP-216.
Version History
1.1 (2019-05-02)
- Add support for localized
Descriptor#doHelp
resource files
1.0 (2019-05-01)
- Initial Release


A single zip file will be available for download. It will include all result files along with the original data file. All result data files will be CSV format.
The zip file will included the base name of the original file along with the date and time.
The individual files will include the same basename along with a suffix to represent each step of the calculation process.
As an example if the input file was “xxx.csv” the result files will look like those in the table below.
| Output file | Description |
|---|---|
| xxx | original input file |
| xxx_bcgcalc_1markexcl | original input file with an ‘EXCLUDE’ taxa column added in. It is a TRUE/FALSE field in which R marks redundant taxa as ‘TRUE’ based on the phylogeny fields in the input file. All ‘Exclude’ decisions are sample-specific. A detailed description of the process that the R tool uses for marking redundant taxa is available upon request<EMAIL_ADDRESS>|
| xxx_bcgcalc_2metval_all | values for all bug metrics in the BioMonTools R package (https://github.com/leppott/BioMonTools) |
| xxx_bcgcalc_2metval_BCG | values for bug metrics used in the MaritimeNW BCG (model + flags); the calculations are done with the BioMonTools R package (https://github.com/leppott/BioMonTools) |
| xxx_bcgcalc_3metmemb | values for bug metrics used in the MaritimeNW BCG model; each metric is assigned to assigned metric membership values (0-1) |
| xxx_bcgcalc_3metrules | Rules for each BCG gradient/elevation class x BCG level (metrics, thresholds, symbols). Rules are similar but not exactly the same. long data format |
| xxx_bcgcalc_4levmemb | for each sample, membership in each BCG level (0-1). Includes Index_Name and Index_Class |
| xxx_bcgcalc_5levassign | results without the flags (primary, secondary BCG levels and membership, continuous BCG score, narrative with and without pluses and minuses) |
| xxx_bcgcalc_6levflags | summary of how many samples had flagged metrics (and not flagged) based on the input file; count of # flagged (flag) and not flagged (NA) |
| xxx_bcgcalc_6metflags | results of flag calculations for all metrics and samples |
| xxx_bcgcalc_RESULTS.csv | for each sample, BCG model output (primary, secondary BCG levels and membership, continuous BCG score, narrative with and without pluses and minuses) plus flags (flag or NA) |
| xxx_bcgcalc_RESULTS.html | histogram showing distribution of samples across BCG levels. |
Last updated 2023-02-08


Graveler
Pokemon of the first Rock/Ground type from the first generation. The Alole Graveler form is of Rock/Electric type.


Make Blog Great Again
tl;dr: post about posting more posts
I have forgotten to write blog posts for over a year or have I?
Blogging 101
I started this blog after I was selected as a GSoC 2016 student under SymPy so as to log my progress. Few weeks working into the program, it seemed that I had developed the habit of writing weekly articles. Back then, I intended to continue maintaining my blog. However soon after completing the project, I became lazy and procrastinated. 🙁
Why Did I Stop Posting?
Whenever I felt like posting an article, I used to persuade my “conscious self” to defer because of the following reasons primarily:
Non-existent readership: Who am I writing the post for?
Hardly anyone will read my posts(apart from my friends 🙋♂, of course) so why bother posting them!Lack of expertise as well as experience: Will my posts be helpful to anyone?
Even if someone mistakenly did read my post, they would pass it by as some novice’s opinions on the topics that he does not even entirely understand; not that I rant too often. Personally, I believe that each article should have a purpose if it is to be deemed useful. And I was unsure about it.
During the GSoC period, I had some readership in the form of my mentors and colleagues as well as some expertise in what I was writing about. After the completion of the project, I had no temptation for updating my blog as I had no justifiable response to the 2 driving questions. Hence, I stopped posting! 😞
Motivation
In addition to the psychological and spiritual benefits that blogging about my learnings with the world provides, a blog also provides a professional incentive, especially to a programmer. I always acknowledged these merits of maintaining a decent blog. However, I was unwilling to post until I found an honest answer to the above-mentioned two questions.
After some introspection, I believe I have found them and they are as follows:
Q1. Who am I writing the post for?
A: Myself, in particular; a relentless learner, in general.
From now on, I will be writing all the posts for myself - or those who like to learn new things, make mistakes and correct themselves quickly. 🤓
Q2. Will my posts be helpful to anyone?
A: They will if I make it simple enough and develop competence.
I will write with the sole intention of sharing my current preoccupations and what excites me. They shall help me gain some clarity and reflect upon everything I do or happen to me. Thus, they would be useful for me at the very least. 😌
Q: What will I write about?
A: Everything and anything
I intend to write about everything that currently occupies me, excites me and motivates me. This includes, but not restricted to, sharing:
- a concept I recently studied straight from my moleskine
- a new project I’m working on or contributing to
- book reviews; lots of them
- reflections on everything stupid, important and in-between
The primary motivations for me to publish new articles are:
- challenge myself to review my understanding and presenting them effectively 😀
- open up a channel of discourse with people of more diverse background 🙊
- spread the joy of learning! 🎉
Modus Operandi
I pledge myself to publish a new article every Sunday for the rest of 2018.
It will be challenging to post every week but I can assure that I will put my honest and dedicated effort into writing from now on.
So, see you all next Sunday for the beginning. 😁


All,
I'm trying to get an EmonTX to give real power readings, so have got an AC-AC adapter and using the C123Voltage sketch. It didn't seem to be working so I've uploaded the minMaxandRangeChecker sketch to see what's going on.
The AC-AC adapter is plugged in to a socket near my PC (NOT near the incoming electrical supply). I know this is supposed to be within 1m of the incoming supply, but how important is this? I assume this is just for accuracy, and it should still pick up a signal wherever you put it?
Readings from the minMaxandRangeChecker as follows;
513 514 1; 507 508 1; 509 510 1; 459 506 47
513 514 1; 507 508 1; 509 510 1; 497 515 18
513 514 1; 507 508 1; 510 511 1; 497 515 18
513 514 1; 507 508 1; 506 514 8; 497 515 18
513 514 1; 507 508 1; 510 510 0; 497 515 18
I don't know what these numbers mean (what are the units?), but this looks to me like nothing is happening as they are basically the same as the other inputs which have nothing on them.
I also notice that the AC-AC adapter appears to be stone cold, when I would have assumed it would get a least a bit warm.
I terms of hardware, the connections on the barrel to the EmonTX seem solid enough. The TX has been working find for CT only monitoring and temperature too.
Any thoughts? Do I have a broken AC-AC adapter?
Chris
Re: EmonTX: AC-AC Adapter: No voltage readings
Hi Chris
I'm not familiar with the Min and max sketch however it is usual for the ac adapter to get slightly warm when plugged in. Have you got access to a multimeter? Most meters will have an ac voltage reading setting. This will allow us to check for sure of the adapter is faulty. Being more than 1m away from the utility meter should not be a problem. Contact us direct if you believe you have got a faulty adapter.
Re: EmonTX: AC-AC Adapter: No voltage readings
Hi there Glyn,
Thanks for getting back. I do have a multi meter but it only goes down to 200V ac, gives zero reading, and not picking anything up on the DC settings either. Sounds like it is faulty? I will email you directly.
Chris
Re: EmonTX: AC-AC Adapter: No voltage readings
Readings from the minMaxandRangeChecker as follows;
513 514 1; 507 508 1; 509 510 1; 459 506 47
513 514 1; 507 508 1; 509 510 1; 497 515 18
513 514 1; 507 508 1; 510 511 1; 497 515 18
513 514 1; 507 508 1; 506 514 8; 497 515 18
513 514 1; 507 508 1; 510 510 0; 497 515 18
Hi Chris, those readings are the raw ADC sample values (Min Max and Range) for each of the the first four analogue inputs in turn. If you check the silk screen markings of the emonTx (or the schematic diagram on Solderpad) you will find that An0 corresponds to CT2, An1 is CT3, An2 is the voltage sensor, and An3 is CT1.
For each set of columns above, the mid-point is around the 500 mark which shows that your biassing networks are all fine. For An0, An 1 and An2, there is minimal AC signal. For An3 (CT1), there is a small signal with a range of around 18 ADC steps. With full range being 1024 steps, this signal is using 1.7% of full range.
With an 18R burden, this usually corresponds to a max signal size of around 100A. So that suggests to me that you are measuring a current of around 1.7A or 420W at CT1 (An3). If you are not measuring any current via CT1, then something looks to be wrong with that circuit.
The signal from your AC/AC adaptor (for the voltage sensor) should appear in the third set of columns. Apart from one spurious value, this circuit does not appear to be doing anything. When using the standard shop-supplied components, you should be seeing a range of just over 900 in this column (the right hand one of the three in bold). That's what was seen when a newly build emonTx was checked using this program yesterday at MadLab.
You could easily check whether the AC/AC adaptor is producing any signal by touching an LED with a series resistor (e.g. 1K) across its output connections. If the LED lights up, then your adaptor is probably OK.
Re: EmonTX: AC-AC Adapter: No voltage readings
Thanks for that.
I've got a new ac adapter now which gives a Max value of around 900 as you said, so I think that confirms that the old adapter was faulty.
For the results i posted before there was nothing connected to the CT inputs! I did have a temp sensor connected to the corresponding port but I don't think this should make a difference?
Chris


#include <stClientPageManager.h>
Public Member Functions | |
| stClientPageManager (int clientID, stPageServer *server) | |
| virtual bool | IsEmpty () |
| virtual stPage * | GetHeaderPage () |
| virtual stPage * | GetPage (stPageID pageid) |
| virtual void | ReleasePage (stPage *page) |
| virtual stPage * | GetNewPage () |
| virtual void | WritePage (stPage *page) |
| virtual void | DisposePage (stPage *page) |
| virtual stSize | GetMinimumPageSize () |
| int | GetClientID () |
| stPageServer * | GetServer () |
| Public Member Functions inherited from stPageManager | |
| virtual | ~stPageManager () |
| virtual void | WriteHeaderPage (stPage *headerpage) |
| virtual void | ResetStatistics () |
| long int | GetReadCount () |
| long int | GetWriteCount () |
| long int | GetAccessCount () |
Additional Inherited Members | |
| Protected Member Functions inherited from stPageManager | |
| void | UpdateReadCounter (unsigned long count=1) |
| void | UpdateWriteCounter (unsigned long count=1) |
This class defines the class stClientPageManager. It uses a page server to provide access to a block device.
Definition at line 92 of file stClientPageManager.h.
|
inline |
Creates a new instance of a client page manager. Do not call this constructor if you are not a page server creator.
| clientID | Client ID. |
| server | The server to be used. |
Definition at line 101 of file stClientPageManager.h.
|
inlinevirtual |
Disposes the given page. This method will make the page available (not allocated) for the next calls of GetNewPage().
Since this page will not be used anymore, this method will release the lock for this page instance.
| page | The page to be disposed. |
Implements stPageManager.
Definition at line 214 of file stClientPageManager.h.
References stPageServer::DisposePage().
|
inline |
Returns the client ID.
Definition at line 229 of file stClientPageManager.h.
|
inlinevirtual |
Returns the header page. This method will return a special page that will be used by SlimTree to write some information about the tree itself.
Since this page must always exist, this method will always return a valid page for reading/writing. Use WritePage() to write this page.
The returning instance of stPage will be locked to prevent its reuse by this page manager. Use ReleasePage() to unlock this instance.
Implements stPageManager.
Definition at line 134 of file stClientPageManager.h.
References GetPage().
|
inlinevirtual |
Returns the minimum size of a page. The size of the header page is always ignored since it may be smaller than others.
Implements stPageManager.
Definition at line 222 of file stClientPageManager.h.
References stPageServer::GetPageSize().
|
inlinevirtual |
Allocates a new page for use. As GetPage() and GetHeaderPage(), the returning instance will be locked to prevent reuse by this page manager.
To dispose this page (make it free), use DisposePage().
Implements stPageManager.
Definition at line 187 of file stClientPageManager.h.
References stPageServer::GetNewPage().
Returns the page with the given page ID. This method will return a valid page for reading/writing. Use WritePage() to write this page.
The returning instance of stPage will be locked to prevent its reuse by this page manager. Use ReleasePage() to unlock this instance.
| pageid | The desired page id. |
Implements stPageManager.
Definition at line 152 of file stClientPageManager.h.
References stPageServer::GetPage(), and stPageManager::UpdateReadCounter().
Referenced by GetHeaderPage().
|
inline |
Returns the server used by this client.
Definition at line 236 of file stClientPageManager.h.
|
inlinevirtual |
This method will checks if this page manager is empty. If this method returns true, the stSlimTree will create a new tree otherwise it will continue to use the existing tree.
Implements stPageManager.
Definition at line 113 of file stClientPageManager.h.
References stPageServer::GetPageCount().
|
inlinevirtual |
Releases this instace for reuse by this page manager. Since some implementations of page manager will reuse instances of stPage to avoid unnecessary resource reallocations, each page instance must be locked until it becomes unecessary.
The stSlimTree will always call this method when a stPage instance will not be used in a near future.
| page | The locked page. |
Implements stPageManager.
Definition at line 171 of file stClientPageManager.h.
References stPageServer::ReleasePage().
|
inlinevirtual |
Writes the given page to the disk. This method will write the page but will not release it. Use ReleasePage() to do it.
| page | The page to be written. |
Implements stPageManager.
Definition at line 200 of file stClientPageManager.h.
References stPageServer::WritePage().


Pretty-Printing Modules
You can create and view a pretty-printed
PDF (Portable
Document Format) version of a module. Just view the module
in a module editor and select File/Produce PDF Version. However,
to do this, you must have the pdflatex program installed.
This program is distributed with most versions of
LaTeX
and TeX. A popular source
of TeX for PCs is MiKTeX.
The Toolbox runs pdflatex to produce a PDF file with the
same name as the module, but with the extension .pdf
. It displays this
file in a separate page of the module editor, using your computer's default browser
to display the PDF file. (If the browser doesn't have a plug-in that displays PDF files,
you can
find one on the web.)
You can switch between the editable
ASCII version of the module and the PDF version by clicking on the appropriate
tab in the lower-left corner.
Changes made to the module are not automatically made to the PDF version.
To see them, you must create the PDF version again.
There are things you can do to help the pretty printer
produce better output. They are described in the
Helping the Pretty-Printer
help page.
A version of the program that does the pretty-printing can be used to add TLA+ and/or
PlusCal code to a LaTeX document.
See the section on the TLATeX Pretty-Printer on
this page
of the TLA+ Web site.
Preferences
The PDF Viewer Preferences page on
the File/Preferences menu provides the following options:
'Have your OS open PDFs' (macOS) or 'Use built-in PDF viewer' (Windows & Linux)
By default, the PDF file is displayed using your system's default PDF viewer.
This option causes the Toolbox to instead either have the operating system open the PDF
using the user's default PDF viewing application (in macOS) or to use its own built-in viewer (in Windows and Linux.)
On some systems, the default viewer displays the PDF file in a
separate window that you must close before you can generate a new
version of the file.
If that is not what you want to happen, choose this option.
The built-in viewer does not yet provide a toolbar.
You can navigate with the Page Up and Page Down keys.
Use the + and - keys to zoom in and out.
The built-in viewer option is not offered on Mac OS X.
Regenerate pretty-printed PDF of spec save
When checked, the Toolbox automatically updates the pretty-printed version of the module every time
its corresponding editor is saved.
This is especially useful in presentations and trainings when the spec editor and PDF viewer
are arranged side by side to interactively build-up the spec but show attendees the pretty-printed version.
Shade comments
Comments are shaded in gray. This is the default. The darkness of the shading is specified
by the Specify gray level option. This must be a number between
0.0 (completely black) and 1.0 (no shading). The default is 0.85.
Note that comments within comments are not shown in the PDF view. The one exception is that
comments to PlusCal code are shown (even though they and the PlusCal code appear in a comment).
Do not shade PlusCal code
A PlusCal algorithm appears in a comment, so shading comments normally causes
PlusCal code to be shaded. This option causes PlusCal code
not to be shaded. (The code's comments are still shaded.)
Number lines
Number lines in the PDF output. (This is independent of the line-numbering option for
the module editor.) The default is unnumbered lines.
Specify dot command
This is the command with which the Toolbox calls dot
to produce state graph visualizations. The default value dot
should work if the dot program is installed on your
computer. However, if it is not properly installed, you may have to prefix it with the path name
of the program's directory.
Specify pdflatex command
This is the command with which the Toolbox calls pdflatex
to produce the pretty-printed version. The default value pdflatex
should work if the pdflatex program is installed on your
computer. However, if it is not properly installed, you may have to prefix it with the path name
of the program's directory.
Specify gray level
See the Shade comments option above.
- Subtopics
- Helping the Pretty-Printer
↑ Managing Your Specifications


This page represents an attempt to capture the collective consciousness of the COM community. Of course, thoughtful feedback is welcome and encouraged (who the hell am I to voice the collective opinions of the entire COM community?). Once this is all sorted out, I anticipate never implementing IDispatch again ("Get COM+ now, I'll show you how!").
This page attempts to answer the question:
Why is this an issue? Because IDispatch is limited? No. It's a problem because current scripting clients don't support QI. Based on my observations of this list and my extensive conversations with members of the COM community, I see several solutions to this problem:
This is my favorite technique and was originally suggested to me by Keith Brown. He recommends using IDispatch to model the entire functionality of the object at a higher level than the individual interfaces, e.g.
interface IRect : IUnknown
{
HRESULT GetCoords([out] long* pleft, [out] long* ptop,
[out] long* pright, [out] long* pbottom);
HRESULT SetCoords([in] long left,
[in] long top,
[in] long right, [in] long bottom);
}
interface I2DObject : IUnknown
{
HRESULT Inflate([in] long cx, [in] long cy);
HRESULT Translate([in] long cy, [in] long cy);
}
// For scripting clients only
[ hidden, dual ]
interface _IRectangle : IDispatch
{
[propput] HRESULT Left([in] long left);
[propget] HRESULT Left([out, retval] long* pleft);
...
HRESULT Inflate([in] long cx, [in] long cy);
HRESULT Translate([in] long cy, [in] long cy);
}
An implementation would use the dual strictly for IDispatch purposes, i.e. vtbl-binding clients wouldn't use _IRectangle:
class CRectangle : ...,
public IRect,
public I2DObject,
public IDispatchImpl<_IRectangle, &IID__IRectangle,
&LIBID_SHAPESLib>
{
public:
BEGIN_COM_MAP(CRectangle)
COM_INTERFACE_ENTRY(IRect)
COM_INTERFACE_ENTRY(I2DObject)
COM_INTERFACE_ENTRY(IDispatch)
// No entry for _IRectangle
END_COM_MAP()
// IRect methods
...
// I2DObject methods
...
// _IRectangle methods
...
};
Since we're no longer using interface-based programming, this technique allows full control when implementing the single interface the scripting client will see w/o having to worry about mapping every method of all of the interfaces. By using the dual strictly as a means of implementing IDispatch and not exposing it, your IDispatch implementation can evolve as your object functionality evolves, i.e. using another dual w/ another IID. While it's still possible for a savvy developer to get a hold of the dual and try to implement it or derive from it, a slap on the forehead is generally enough to discourage this behavior.
Unfortunately, nobody ever likes this technique because it forces them to provide client-specific implementation (which, btw, you'll likely to have to do anyway...).
If you have n interfaces that are already [oleautomation] compatible, you can define a dual interface in IDL that is a union of all of the methods of all of the interfaces you'd like to expose methods from and let the C++ compiler match up the vtbls for you.
[ oleautomation ]
interface IRect : IUnknown
{
HRESULT GetCoords([out] long* pleft, [out] long* ptop,
[out] long* pright, [out] long* pbottom);
HRESULT SetCoords([in] long left,
[in] long top,
[in] long right, [in] long bottom);
}
[ oleautomation ]
interface I2DObject : IUnknown
{
HRESULT Inflate([in] long cx, [in] long cy);
HRESULT Translate([in] long cy, [in] long cy);
}
[ hidden, dual ]
interface _IRectangle
{
// Copied from IRect
HRESULT GetCoords([out] long* pleft, [out] long* ptop,
[out] long* pright, [out] long* pbottom);
HRESULT SetCoords([in] long left,
[in] long top,
[in] long right, [in] long bottom);
// Copied from I2DObject
HRESULT Inflate([in] long cx, [in] long cy);
HRESULT Translate([in] long cy, [in] long cy);
}
The implementation derives from all of the interfaces and implements the union of the methods. The C++ compiler will fill in the vtbl entries for the dual interface using the methods you are already implementing for your non-dual interfaces, e.g.
class CRectangle :
...,
public IRect,
public I2DObject,
public IDispatchImpl<_IRectangle, &IID__IRectangle,
&LIBID_SHAPESLib>
{
public:
BEGIN_COM_MAP(CRectangle)
COM_INTERFACE_ENTRY(IRect)
COM_INTERFACE_ENTRY(I2DObject)
COM_INTERFACE_ENTRY(IDispatch)
// No entry for _IRectangle
END_COM_MAP()
// IRect methods
...
// I2DObject methods
...
// _IRectangle methods already implemented!
};
This method allows your clients to have access to the union of the methods of all of the interfaces that you have copied and pasted into your dual interface. However, now you're left with the copy 'n' paste dance in IDL and there's no way to resolve name conflicts, e.g. IRect and I2DObject both have a method Foo() that is each meant to do different things. This method also requires you to define your non-dual interfaces with scripting clients in mind. Finally, this method also exposes the dual in the TypeLib to savvy developers (see the aforementioned forehead-slap solution).
Daniel Sinclair provides
another implementation of this technique called
MultiDual, described in this
online ReadMe.
Herbert Carroll provides a
similar implementation, but not based on typeinfo.
Kjell Tangen provides another
solution for by implementing a extended version of
CComTypeInfoHolder.
Imagine the following IDL:
[ oleautomation ]
interface ICowboy : IUnknown
{
HRESULT Draw([in] long nSpeed); // Conflicts with
IArtist::Draw
HRESULT Shoot();
// Conflicts with ICurse::Shoot
}
[ oleautomation ]
interface IArtist : IUnknown
{
HRESULT Draw([in] long nStrokes); // Conflicts with
ICowboy::Draw
HRESULT Paint();
}
[ oleautomation ]
interface ICurse : IUnknown
{
HRESULT Shoot(); // Conflicts with ICowboy::Shoot
HRESULT Darn();
}
library TURNOFTHECENTURYLib
{
coclass AcePowell
{
interface ICowboy;
[default] interface IArtist;
interface ICurse;
}
}
The client would like to write code like this:
<script language=vbscript>
ace.paint '
unambiguously IArtist::Paint
ace.draw 100 ' resolved to IArtist::Draw because
'IArtist is [default]
ace.darn '
unambiguously ICurse::Darn
ace.shoot ' resolved to ICowboy::Shoot because
ICowboy
' comes before ICurse in the coclass statement
ace.icurse_shoot ' resolved to ICurse::Shoot because of
prefix
ace.icurse_darn ' prefix unnecessary
but still works
</script>
The typelib-based table-driven implementation would use the coclass statement to map calls to GetIDsOfNames and Invoke to the appropriate interface definition, doing a little pre-processing along the way to provide non-colliding DISPIDs for non-default interface methods and handling the prefixes to perform fully-scoped name resolution.
Because the implementation is completely table-deriven based on the coclass statement, an aggregatable implementation of IDispatch that provided this amalgam behaviour could be implemented that only depended on the object to expose IProvideClassInfo. In fact, some members of this list have provided implementations of similiar techniques w/o, unless I'm mistaken, the name resolution scheme I've proposed above. Assuming such an implementation of IDispatch, the object implementation could look like this:
class CAcePowell :
...,
public IProvideClassInfo
{
BEGIN_COM_MAP(CAcePowell)
// Appropriate entries for nested composition of
// ICowboy, IArtist and ICurse
COM_INTERFACE_ENTRY_AUTOAGGREGATE(IID_IDispatch, m_spunkDisp.p,
CLSID_StdAmalgamDispatch)
COM_INTERACE_ENTRY(IProvideClassInfo)
END_COM_MAP()
...
private:
CComPtr<IUnknown> m_spunkDisp;
};
Note: Assuming the implementation exposed the same DISPIDs for the methods and properties of the default interface as the default interface, early bound clients would be just as happy as late bound ones. And, because no dual interface is defined to implement IDispatch, there's no worry of a developer getting a hold of the interface definition for the dual interface directly (although a slap is still warranted for those that try).
Don and I implemented this technique at Tim's house. It's available here. Also, this has been updated by Serge Sandler for VC6 and for Win9x compatibility.
Assuming the AcePowell IDL shown above, the client would like to write the following code (which performs the same as the previous client code):
<script language=vbscript>
ace.paint ' top
level object has all methods of
' [default] interface
dim artist
set artist = ace.iartist ' Can "QI" for specific
interface
artist.draw 100
dim curse
set curse = artist.icurse ' Simulated QI
curse.darn
dim cowboy
set cowboy = curse.icowboy ' Simulated QI
cowboy.shoot
curse.shoot
curse.darn
</script>
As you can see, we're exposing a collection of objects where the top level object has all of the methods and properties of the [default] interface as well a property to obtain an interface pointer on a sub-object for each of the oleautomation interfaces. The sub-objects are separate COM identities whose implementation of IDispatch simply forwards to the main identity via the specific interface in question. Each of the sub-objects also have one property per interface to get to the other interfaces, thus simulated the rules of COM identity as exposed via QI. This allows us to build an invocation model very similar to VB's where QI is an assignment and references of type class mean references to the [default] interface.
Parts of the implementation for this scheme have also been posted w/o, unless I'm mistaken, the full simulated QI as I propose above. The nested implementation of IDispatch could also be fully typelib-drived based on an object's implementation of IProvideClassInfo and aggregated, e.g. using a clsid like CLSID_StdNestedDispatch.
One alternative syntax that might be a bit more flexible is the following:
<script language=vbscript>
ace.paint ' top
level object has all methods of
' [default] interface
dim artist
set artist = ace.interface("iartist")
if not artist is nothing then artist.draw 100
dim curse
set curse = artist.interface("icurse")
if not curse is nothing then curse.darn
dim cowboy
set cowboy = curse.interface("icowboy")
if not cowboy is nothing then cowboy.shoot
if not curse is nothing then
curse.shoot
curse.darn
end if
</script>
This syntax makes it even more clear that we're doing COM, it only requires one additional property (interface) and it's easier to handle the QI failure case.
This method is made real in an implementation by Dave Rogers, available at http://www.combatcom.com/adminstore/component-warehouse/thedispadapter.htm and Valery Pryamikov, available at http://home.sol.no/~valery Instead of building the pseudo-QI into the object itself, Valery uses another another object to perform the QI. This allows the client code to look like this:
<script language=vbscript>
' Requires object to implement
IProvideClassInfo or IPersist
set dispenum.ObjectClass = ace
' Doesn't require
IProvideClassInfo or IPersist
' Note: Could use CLSID instead of ProgID
dispenum.SetCLSIDObjectClass(ace,
"Ace.AcePowell.1")
Dim artist
Set artist = dispenum("iartist") ' Use disenum
to perform QI
If not artist is nothing then artist.draw 100
Dim curse
Set curse = dispenum("icurse")
If not curse is nothing then curse.darn
Dim cowboy
Set cowboy = dispenum("icowboy")
If not cowboy is nothing then cowboy.shoot
If not curse is nothing then
Curse.shoot
Curse.darn
End if
</script>
This technique requires another object to perform the QI, so it seems a little weird, but the good news is that it works with existing objects. No recompile necessary!
Given those techniques of implementing IDispatch to expose the functionality of multiple interfaces, the first two require no additional tool support. You can use them today. The last two, amalgam dispatch and nested dispatch, represent two models of exposing the functionality of multiple interfaces to a scripting client. Either model may be appropriate, but each is conceptually separate, i.e. the object implementor would pick one or the other.
After writing the client code, I find I really like technique 4 best. It looks like COM to me. However, I can see that some folks would prefer technique 3 or 5.
So, what do we do now? Do we wait for MS to ship COM+? We won't see meta-information driven scripting until the turn of the millennia. Do we wait for MS to implement CLSID_StdAmalgamDispatch and CLSID_StdNestedDispatch? Those guys are pretty busy with COM+, so I won't hold my breath. Are we sure of the ramifications and usage of amalgam dispatch and nested dispatch? I'm pretty sure, but not completely so. If you think I'm all wrong (or even just a litte), let me know.
On the other hand, if there are enough folks that are excited about a typelib-driven implementation of IDispatch, we can get it done. I've dedicated this web page to collecting and distributing the pieces. If folks have some source to contribute, I'll use it to build the two implementations. If folks have full implementations, I'm happy to post those as well. Please, let's stop implementing IDispatch so I can stop thinking about the worthlessness of duals. Thanks.
BTW, want to know the real reason we have duals? It saves a vptr. Doh!
This article is translated to Serbo-Croatian by Anja Skrba from Webhostinggeeks.com.


This dialog provides the PSE and certificate for the RSA signature demonstration (pops up when pressing the button Provide certificate).
The area title Public RSA parameter displays the bit length and public parameters of the key that was generated in Generate RSA key resp. imported using the Import certificate and key button described below.
Please enter Personal data for the certificate as described in the online help page for the Key generation dialog.
The field User Key ID displays the name of the PSE being generated or selected. The field Distinguished Name shows the name of the certificate in the CA data base (CA = certification authority).
An already existing PSE can be used by selecting the Import certificate and key button. That way a previously generated key and certificate an be re-used for further signatures. The PSE can be selected as described in RSA decryption.
If you import a key as described above, then the RSA key generation step (RSA key generated dialog) can (and should) be skipped.
The button Create Certificate and PSE finally, generates a new Certificate signed by the demonstration CA, which is delivered with CrypTool, and stores it together with the previously generated key pair (dialog Generate RSA key) in a PIN protected and encrypted PSE file. Additionally the certificate is stored in the CA data base.


--- layout: page title: Caffeine date: 2009-03-12 15:55:35.000000000 +00:00 categories: [] tags: [] status: draft type: page published: false meta: _edit_last: '1' _wp_page_template: default author: login: admin email<EMAIL_ADDRESS>display_name: Bruno Fernandez-Ruiz first_name: Bruno last_name: Fernandez-Ruiz ---
Caffeine is a free high-performing interoperability solution between the Java platform and the .NET framework. Caffeine's key differentiator is that does not replace the Java Virtual Machine. Instead, your JVM of choice is hosted within the .NET runtime, ensuring that vendor-specific VM optimizations are preserved. The specific objectives of Caffeine are:
Please check the Caffeine project on Berlios, the architecture guide, and the introduction to runtime interoperability.


Functionality of other scientific analysis systems, all online.
Just send your fellow engineer, scientist, or professor your unique URL.
Disclaimer: FreeBMD is an experimental program, and we claim no responsibility for damages resulting from its use.
------------New in Version V0.4
Statements can now be separated by semicolons, and semicolons can be used to suppress output. This release also improves compatibility of matrix operations.
New in Version V0.3
You can now use for and while loops, complete with break and continue statements!
New in Version V0.2
Define your own functions and control the flow of your programs with if/elseif/else statements.


Type Definitions
gmmResults
Results of the filtering process.
Type:
- Object
Properties:
| Name | Type | Attributes | Description |
|---|---|---|---|
likeliest |
String | The likeliest model's label. |
|
likeliestIndex |
Number | The likeliest model's index |
|
likelihoods |
Array.number | The array of all models' smoothed normalized likelihoods. |
|
outputValues |
Array.number |
<nullable> |
If the model was trained with regression, the estimated float vector output. |
outputCovariance |
Array.number |
<nullable> |
If the model was trained with regression, the output covariance matrix. |
- Source:
gmmResultsCallback(err, res)
Callback handling estimation results.
Parameters:
| Name | Type | Description |
|---|---|---|
err |
String | Description of a potential error. |
res |
gmmResults | Object holding the estimation results. |
- Source:
hhmmResults
Results of the filtering process.
Type:
- Object
Properties:
| Name | Type | Attributes | Description |
|---|---|---|---|
likeliest |
String | The likeliest model's label. |
|
likeliestIndex |
Number | The likeliest model's index |
|
likelihoods |
Array.number | The array of all models' smoothed normalized likelihoods. |
|
timeProgressions |
Array.number | The array of all models' normalized time progressions. |
|
alphas |
Array.Array.number | The array of all models' states likelihoods array. |
|
outputValues |
Array.number |
<nullable> |
If the model was trained with regression, the estimated float vector output. |
outputCovariance |
Array.number |
<nullable> |
If the model was trained with regression, the output covariance matrix. |
- Source:
hhmmResultsCallback(err, res)
Callback handling estimation results.
Parameters:
| Name | Type | Description |
|---|---|---|
err |
string | Description of a potential error. |
res |
hhmmResults | Object holding the estimation results. |
- Source:
xmmGmmModel
A valid XMM GMM model
Type:
- Object
Properties:
| Name | Type | Description |
|---|---|---|
TODO |
String | LIST REAL GMM MODEL PROPERTIES HERE |
- Source:
xmmHhmmModel
A valid XMM Hierarchical HMM model
Type:
- Object
Properties:
| Name | Type | Description |
|---|---|---|
TODO |
String | LIST REAL HHMM MODEL PROPERTIES HERE |
- Source:
xmmPhrase
A valid XMM phrase, ready to be processed by the XMM library.
Type:
- Object
Properties:
| Name | Type | Description |
|---|---|---|
bimodal |
Boolean | Indicates wether phrase data should be considered bimodal.
If true, the |
dimension |
Number | Size of a phrase's vector element. |
dimension_input |
Number | Size of the part of an input vector element that should be used for training.
This implies that the rest of the vector (of size |
column_names |
Array.String | Array of string identifiers describing each scalar of the phrase's vector elements.
Typically of size |
label |
String | The string identifier of the class the phrase belongs to. |
data |
Array.Number | The phrase's data, containing all the vectors flattened into a single one.
Only taken into account if |
data_input |
Array.Number | The phrase's data which will be used for training, flattened into a single vector.
Only taken into account if |
data_output |
Array.Number | The phrase's data which will be used for regression, flattened into a single vector.
Only taken into account if |
length |
Number | The length of the phrase, e.g. one of the following : data.length / dimension data_input.length / dimension_input data_output.length / dimension_output |
- Source:
xmmPhraseConfig
XMM phrase configuration object.
Type:
- Object
Properties:
| Name | Type | Description |
|---|---|---|
bimodal |
Boolean | Indicates wether phrase data should be considered bimodal.
If true, the |
dimension |
Number | Size of a phrase's vector element. |
dimensionInput |
Number | Size of the part of an input vector element that should be used for training.
This implies that the rest of the vector (of size |
column_names |
Array.String | Array of string identifiers describing each scalar of the phrase's vector elements.
Typically of size |
label |
String | The string identifier of the class the phrase belongs to. |
- Source:
xmmTrainingSet
A valid XMM training set, ready to be processed by the XMM library.
Type:
- Object
Properties:
| Name | Type | Description |
|---|---|---|
bimodal |
Boolean | Indicates wether the set's phrases data should be considered bimodal.
If true, the |
dimension |
Number | Size of a vector element of the set's phrases. |
dimension_input |
Number | Size of the part of an input vector element that should be used for training.
This implies that the rest of the vector (of size |
column_names |
Array.String | Array of string identifiers describing each scalar of a phrase's vector elements.
Typically of size |
phrases |
Array.xmmPhrase | Array of valid XMM phrases containing an extra "index" field. |
- Source:


About
Hello Valued Reader,
My name is Ryan Plyler, otherwise known in other communities as Rudker or Rudker_Fern in Minecraft. This is the blog that ties those names together.
In short, I love computers, innovation, team building, teamwork, collaboration, and product design. UNIX/Linux computers have been a third of my life.
However, computers are not my only interest. I have sometimes been called a Renaissance man. This site is the beginnings of a the publicly available collections of my work, and writing, thoughts and adventures in technology, life, science, and the days of the modern internet.
My Interests
Computers
- UNIX Environments
- Python Programming
- Mac
- Linux Mint, Debian, Ubuntu, DSL
- Building Computers
- Technology Education
- Information Systems
- Communications
Entreprenuership
- Business Building
- Finance Management
- Customer Relations
Management
- Leading Teams
- Self sustaining, and efficient work environment
Product Design
- 3D Art, Design and Virtual Realization
- System Orchestration
- Productivity system design
Engineering
- Wood Working
- Metal Working
- CAD Systems
Music
- Electronic Music Composition
- Film Score Composition
- Orchestral Composition for film
That about sums if up. If you would like to get in contact with me, just shoot me an email. Thanks for reading.


...
...
Questions
New
Question
Order
Type
Answer required
Edit
Delete
QuestionName
Order
Type
Required


Notebooks
Story: The young woman who disobeyed her mother, and fell in with the two Lions (!haue ta ≠hou and !gu)
The young woman who disobeyed her mother, and fell in with the two Lions (!haue ta ≠hou and !gu)
Title
The young woman who disobeyed her mother, and fell in with the two Lions (!haue ta ≠hou and !gu)
Collection
Summary
The Young Woman of the early race whose breast was caught in a cleft of the rock. Her escape from the Two Lions. By /han≠kass’o (L VIII.-32. 8821-8842).  The two Lions (!haue ta ≠hou and !gu) approach her (intending to kill her), but she convinces them to go and drink water before eating her. She commands the water to 'Go away yonder!' and the Lions follow it in vain.  When the Lions return they wonder where the girl has gone. Her nipple ball answers 'I am her!'. The two Lions spend the night trying to catch the girl and hurting their teeth biting at the rocks.
Comments
1) p.8820v: |han≠kass'o heard this from his mother (|xabbi-an), 2) p.8821v: see Note on lizards; what people call a little stick, 3) p.8822v: (24 November 1879) the song of the young woman who was cursed by her mother, 4) p.8825v: crows and death; see Birds await the death of a thing, 5) p.8826v: (23 November 1879) spoiling water; the names of two stars; parts of the human ear, 6) p.8827v: the Lions formerly used stone knives, 7) p.8828v: |han≠kass'o speculates about !kai; how people make 'meal' of meat when springbok are numerous, 8) p.8837v: !gu is the Lion who understood, 9) See also Note on the two Lions and The song of the young woman, as she returned home, 10) This story is found in Book VIII-32
Contributors
|han≠kass'o (Klein Jantje) (VIII)
Date
20 November 1879 (started)
Categories
Keywords
Early Race (or First Bushmen) , Early Race (and the young woman who disobeyed her mother, and fell in with the two Lions) , young woman (who sits singing about how her nipple is trapped in the 'cleft's mouth') , young woman (pounds her nipple along with !kai) , young woman (her piece of flesh talks to the two Lions, speaking with a small voice) , young woman (tells the two Lions she is fat) , young woman (deceives and escapes from the two Lions) , young woman (her nipple talks to the Lions) , young woman (commands the water) , young woman (who disobeyed her mother, and fell in with the two Lions) , young woman (who cut off her nipple with a broken arrow) , young woman (her breast gets caught in the cleft of a rock) , young woman (her mother curses her) , Lions (the two Lions called !haue ta ≠hou and !gu) , Lions (cut up meat with stone knives) , Lions (!gu understands) , Lions (the young woman who disobeyed her mother and fell in with them) , Lions (are people of the Early Race) , Lions (how the young woman escapes them) , Lions (blame each other for the young woman's escape) , Lions (hurt their teeth biting the rocks) , Lions (the young woman's nipple or piece of flesh talks to them) , Lions (are tricked by the young woman) , Lions (run after the disappearing water) , death (and the doings of crows) , death (and the young woman who says 'the spoor of the crows abounds by me') , death (and birds that wait for) , death (and the young woman who disobeyed her mother and fell in with the two Lions) , lizards (methods of poking them out) , lizards (are found in rocks) , lizards (and the young woman who disobeyed her mother and fell in with the two Lions) , curse (of the young woman by her mother) , curse (of the young woman who disobeyed her mother and fell in with the two Lions) , crows (wait for people to die) , crows (and the young woman who says 'the spoor of the crows abounds by me') , crows (and death) , crows (and the young woman who disobeyed her mother and fell in with the two Lions) , breast (the young woman's nipple is caught in the cleft of a rock) , breast (of the young woman who disobeyed her mother and fell in with the two Lions) , water (floats away from the two Lions) , water (the young woman tells it to 'Go away yonder!') , water (spoiling it) , water (the young woman who disobeyed her mother and fell in with the two Lions) , song (of the young woman about how her nipple is trapped in the 'cleft's mouth') , song (of the young woman who disobeyed her mother and fell in with the two Lions) , name (the two Lions are called !haue ta ≠hou and !gu) , name (!kai from the Lions' bag) , name (the young woman who disobeyed her mother and fell in with the two Lions) , woman (the young woman of the Early Race who disobeyed her mother and fell in with the two Lions)
Story Pages
8821-8841


public
static
array fields. Often used
to store arrays of constant values, these fields nonetheless represent a security
hazard, as their contents may be modified, even if the field is declared as final
.
Example:
public static String[] allowedPasswords = {"foo", "bar"};


Gray Ridge Brewing
Hero
Heading and Video
Our Beers
Guaranteed to Quench your thirst!
Gray Ridge Beers
lager
ABV:4.5%
IBU: 4
Ideal for sunny days, or anytime, really! The Leghorn Lager is a light and refreshing beer, enjoyed by beer drinkers of all walks of life. Nice and light, our Leghorn Lager sits at 4 IBU and 4.5% ABV.
IPA
ABV: 6.2%
IBU: 58
The Free Range IPA is a smooth and easy drinking full-flavoured beer. A subtle hint of refreshing citrus flavours will delight your tastebuds. The Free Range IPA sits at 68 IBU and 6.2% ABV.
red ale
ABV: 5.0%
IBU: 23
Our Rhode Island Red Ale is a beautiful red colour and is full flavoured, hoppy, and buttery with a crisp finish. The Rhode Island Red has an ABV of 5.0% and the IBU sits at 23.
stout
ABV: 7.3%
IBU: 50
Named after the cutest chickens in all the land (seriously, look up the Silkies! We promise your heart will melt. This Stout is just as smooth and soft as its namesake. It’s an American Stout and sits at 7.3% ABV with 50 IBU. Also an excellent choice of beer to cook with!
About Craft Beer
Aka Frequently Asked Questions
What is ABV?
ABV stands for Alcohol by volume. The higher the ABV of a beer, the higher the alcohol content. ABV is the standard measurement used worldwide to assess the strength of a particular beer.The average alcohol content for craft beer is 5.9%. Some beers can be as low as 2% to as high as 10% or more. The percentage gets higher with heavier beers.
What is IBU?
IBU stands for International Bitterness Units. IBU is a scale that gauges a beer’s bitterness based on the hops added, and is typically the main deciding factor for someone looking to try a new craft beer. The IBU can be confusing as the higher the IBU doesn’t always mean the beer has a very bitter flavour.
How is craft beer made?
Beer is made from four basic ingredients: Barley (or an alternative grain such as rice), water, hops, and yeast. The sugars are extracted from the grains, at which point the yeast can convert the sugar to alcohol and CO2, creating our favourite beverage… beer! Brewing beer is very scientific (and also a bit of an art if you ask us!).
I’m new to craft beer… where do I start?
The best way to find out what you like is to try different beer styles with varying IBUs. Gray Ridge Brewing offers flights in house and at many of our restaurant partners so that you can find your favourite Gray Ridge beer.


To help defray the cost of attending our conferences, OpenNews offers a limited number of travel scholarships for attendees from communities that are often underrepresented in journalism and tech.
This year, we’re partnering with the News Integrity Initiative to provide Diversity Scholarships for journalists of color to attend SRCCON:WORK. We will also have a small number of scholarships available to facilitators and white journalists from local and regional news organizations.
A ticket to SRCCON:WORK and $500 for you to use toward the cost of travel to the event. (For scholarship recipients who live in the Philadelphia area, we offer a SRCCON:WORK ticket without the additional travel funding.)
Select the “Would you like to be considered for a SRCCON:WORK scholarship?” option on the form to tell us why you’d like to attend SRCCON:WORK. A few scholarship-specific questions will then pop onto the form. The form is open through October 18.
Notifications for scholarships will go out alongside invitations to attend.
You tell us how it went! We’ll send you a short follow up survey and will be excited to check out any blog posts or brown bags that come out of your participation at SRCCON:WORK.
We know that travel costs can be a hardship, and offer this scholarship as a way to help mitigate that. In particular we want to make sure that journalists of color and members of other under-represented groups in journalism tech are able to attend.
OpenNews staff reviews all applications. We prioritize applications from journalists of color, members of other communities under-represented in journalism and technology, and folks from smaller and non-coastal newsrooms.
If you receive a scholarship, you will not have to purchase a ticket.
When we notify scholarship recipients, we will include information about how to receive the scholarship funds. In short, you will need to send us an invoice and our administrators will process the payment. It may take a month or so for check processing.
We’re able to offer $500 scholarships at this time. Luckily, Philadelphia is a relatively cheap city once you arrive. Also, this entire site runs off a Github repo so if you say, wanted to add a link to a room-share board, you could go right ahead and do that. Or, you can email with any suggestions.


[ EECS 20 Home ]
[ Corresponding lecture ]
Lecture 4 Demonstrations
- First Order Difference
- Low Pass Filter
- Filtering Speech
- Anti-Aliasing Filter
Copyright © 1996, The Regents of the University of California.
All rights reserved.
Last updated: %D%,
comments to: eal@eecs.berkeley.edu


Home
Archives
Categories
Tags
About
Tags
bitcoin
2019-03-24
Testing New ShopSteem Feature - Lottery
bitcoin
2019-03-21
Talking Steem & Bitcoin's Lightning Network with Kenn Bosak
dtube
2019-03-19
Sell Your Stuff For Steem
shopsteem
2019-03-16
Buying Stuff With Steem
bitcoin
2019-03-03
patrickulrich's twitter Feed : 2019/03/03 19:53:19
bitcoin
2019-02-27
Using Bitcoin's Lightning Network for Buying Gas
lightningnetwork
2019-02-23
Remote Lightning Node App
reckless
2019-02-23
Hello, World!
bitcoin
2018-12-09
BTCPay: How is it different?
btcpay
2018-11-25
The Right Way To Trade Bitcoin
bitcoin
2018-09-07
Edge Wallet Has Joined Steem
steem
2018-09-05
Hosting @steemcafe's GHSC Radio Show / Speaking with @britvr
dlive
2018-09-05
Conversation with Andy Hoffman
dlive
2018-08-08
Exciting Day For DLive! New Content Creators!
dlive
2018-05-22
Bitcoin (& STEEM?) Pizza Day
steempizzaday
2018-05-12
I'm Going To New York City and I'm Relying On Steem!
dlive
2018-04-28
Make A Mainnet Bitcoin Lightning Payment Today!
bitcoin
2018-04-27
Testing ShopSteem.com Lightning Integration
dlive
2018-04-22
Coinkite Bitcoin Debit Card
cryptoantique
2018-04-05
Lightning is here!
lightning
Previous
Next
1
2
Your browser is out-of-date!
Update your browser to view this website correctly.
Update my browser now
×


Image Promotion & Webhooks
For the following exercises define an environment variable with your Docker ID in your development machine:
ubuntu@infra:~$ export USER_ID=<your Docker Store ID>
Pre-requisites:
- UCP as described in Installing UCP.
- DTR as described in Installing DTR.
Using Webhooks
In this exercise we will create a service that will be triggered by a Webhook defined in DTR.
Creating the Service
First we will assemble a simple app that logs some information about POST requests received, before setting this up as a service and firing webhooks at it.
On your development machine, open the file
dtr-ci-cd/webhooks/src/server.js
. It is a Node JS/Express JS API with a POST endpoint defined as follows:... app.post('/',function(req,res){ var hostname = os.hostname(); console.log('Host: '+hostname+' got triggered with:'); console.log(' type: '+req.body.type); console.log(' createdAt: '+req.body.createdAt); console.log(' contents: '+JSON.stringify(req.body.contents, null, 2)); console.log('------------------------'); console.log('Full body: '+JSON.stringify(req.body, null, 2)); res.send('OK'); }); ...
Open the file
dtr-ci-cd/webhooks/package.json
. It should contain:{ "name": "WebhookSample", "version": "1.0.0", "description": "Demo app for Webhooks", "main": "server.js", "scripts": { "start": "node src/server.js", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "express": "^4.14.1", "body-parser": "^1.9.2" } }
To the
Dockerfile
in thedtr-ci-cd/webhooks
folder add the following instructions to build the container image:FROM node:8-alpine # for edit-and-continue only RUN npm install nodemon -g RUN mkdir /app WORKDIR /app COPY package.json ./ RUN npm install COPY ./src ./src EXPOSE 3000 CMD ["npm","start"]
To the file
docker-compose.yml
in thedtr-ci-cd/webhooks
folder add:version: '3.1' services: sut: build: . volumes: - ./src:/app/src ports: - "3000:3000" command: nodemon ./src/server.js <IP_ADDRESS>:3000
Gist: http://bit.ly/2Gg61SR
note the use of
nodemon
as we saw before, to create an edit and continue experience if we want to manipulate our app while it's running in a container. Windows users, don't forget the additional-L
flag if necessary.Now run the app to test it:
ubuntu@infra:~/ddev-labs/dtr-ci-cd/webhooks$ docker-compose up --build
Use a REST client such as Postman (for Chrome) to send a POST request to
localhost:3000
with the followingbody
(see below forcurl
equivalent):{ "type": "PULL_IMAGE", "createdAt": "2017-06-09T09:30:43", "contents": { "one": "blah", "two": "bla bla bla", "three": 1234 } }
Gist: http://bit.ly/2uDWIHP
and a
header
:Content-Type: application/json
/
To do the same thing via
curl
, place the above json in a filepayload.json
and do:ubuntu@infra:~/ddev-labs/dtr-ci-cd/webhooks$ curl -d @payload.json \ -H "Content-Type:application/json" localhost:3000
In the container log you should see something like this:
Attaching to webhooks_sut_1 sut_1 | [nodemon] 1.17.2 sut_1 | [nodemon] to restart at any time, enter `rs` sut_1 | [nodemon] watching: *.* sut_1 | [nodemon] starting `node ./src/server.js <IP_ADDRESS>:3000` sut_1 | Running at Port 3000 sut_1 | Host: c76ea851f5f7 got triggered with: sut_1 | type: PULL_IMAGE sut_1 | createdAt: 2017-06-09T09:30:43 sut_1 | contents: { sut_1 | "one": "blah", sut_1 | "two": "bla bla bla", sut_1 | "three": 1234 sut_1 | } sut_1 | ------------------------ sut_1 | Full body: { sut_1 | "type": "PULL_IMAGE", sut_1 | "createdAt": "2017-06-09T09:30:43", sut_1 | "contents": { sut_1 | "one": "blah", sut_1 | "two": "bla bla bla", sut_1 | "three": 1234 sut_1 | } sut_1 | }
Now we want to build and push an image of this app, so we can pull it into our UCP cluster:
ubuntu@infra:~/ddev-labs/dtr-ci-cd/webhooks$ docker image build \ -t ${USER_ID}/webhook-sample:1.0 . ubuntu@infra:~/ddev-labs/dtr-ci-cd/webhooks$ docker image push \ ${USER_ID}/webhook-sample:1.0
You might need to login to Docker Hub with
docker login
to be able to push your image.On the UCP manager
ucp-manager
, run a service using the above image:[centos@ucp-manager ~]$ export USER_ID=<your Docker ID> [centos@ucp-manager ~]$ docker service create --name webhook-sample \ --detach=false --publish 3000:3000 \ ${USER_ID}/webhook-sample:1.0
Again use a REST client like Postman or
curl
to trigger the service with a test payload. This time we have to use the public IP address or DNS of any of our swarm nodes instead oflocalhost
.Back on one of the UCP manager nodes, analyze the log generated by the service:
[centos@ucp-manager ~]$ docker service logs webhook-sample
It should show the same sort of record as above; this service is now ready to receive webhooks from DTR.
Registering the Webhook
Login to your DTR (UI).
Create a repository
admin/webhook-sample
.Navigate to the repository details and select the tab Webhooks.
Click the button New Webhook.
For NOTIFICATIONS TO RECEIVE select the value Tag pushed to repository and for WEBHOOK URL enter
http://<UCP_FQDN>:3000
.Click the link Test and then check the service logs and find out whether or not the callback was successfully executed.
Click Save back on the webhook dialog to create the webhook.
Triggering the Webhook
Pull an image from Docker Store:
[centos@ucp-manager ~]$ docker image pull centos:7
Tag the image:
[centos@ucp-manager ~]$ docker image tag \ centos:7 ${DTR_FQDN}:4443/admin/webhook-sample:1.0
Push the image to DTR:
[centos@ucp-manager ~]$ docker image push ${DTR_FQDN}:4443/admin/webhook-sample:1.0
Now analyze the log of our
webhook-sample
service running in the swarm:[centos@ucp-manager ~]$ docker service logs webhook-sample
You should see log entries indicating that DTR posted a webhook to the service, for example:
webhook-sample.1.n7n35ci3ahun@node | Host: deb12fb57621 got triggered with: webhook-sample.1.n7n35ci3ahun@node | type: TAG_PUSH webhook-sample.1.n7n35ci3ahun@node | createdAt: 2017-07-18T19:04:35.240532079Z webhook-sample.1.n7n35ci3ahun@node | contents: { webhook-sample.1.n7n35ci3ahun@node | "namespace": "admin", webhook-sample.1.n7n35ci3ahun@node | "repository": "webhook-sample", webhook-sample.1.n7n35ci3ahun@node | "tag": "1.0", webhook-sample.1.n7n35ci3ahun@node | "digest": "sha256:89751557f508153f133a6f6750e87f871506c0ac76a245277bb7b677e7f65d79", webhook-sample.1.n7n35ci3ahun@node | "imageName": "admin/webhook-sample:1.0", webhook-sample.1.n7n35ci3ahun@node | "os": "linux", webhook-sample.1.n7n35ci3ahun@node | "architecture": "amd64", webhook-sample.1.n7n35ci3ahun@node | "author": "admin", webhook-sample.1.n7n35ci3ahun@node | "pushedAt": "2017-07-18T19:04:35.213817243Z" webhook-sample.1.n7n35ci3ahun@node | } webhook-sample.1.n7n35ci3ahun@node | ------------------------ webhook-sample.1.n7n35ci3ahun@node | Full body: { webhook-sample.1.n7n35ci3ahun@node | "type": "TAG_PUSH", webhook-sample.1.n7n35ci3ahun@node | "createdAt": "2017-07-18T19:04:35.240532079Z", webhook-sample.1.n7n35ci3ahun@node | "contents": { webhook-sample.1.n7n35ci3ahun@node | "namespace": "engineering", webhook-sample.1.n7n35ci3ahun@node | "repository": "webhook-sample", webhook-sample.1.n7n35ci3ahun@node | "tag": "1.0", webhook-sample.1.n7n35ci3ahun@node | "digest": "sha256:89751557f508153f133a6f6750e87f871506c0ac76a245277bb7b677e7f65d79", webhook-sample.1.n7n35ci3ahun@node | "imageName": "admin/webhook-sample:1.0", webhook-sample.1.n7n35ci3ahun@node | "os": "linux", webhook-sample.1.n7n35ci3ahun@node | "architecture": "amd64", webhook-sample.1.n7n35ci3ahun@node | "author": "admin", webhook-sample.1.n7n35ci3ahun@node | "pushedAt": "2017-07-18T19:04:35.213817243Z" webhook-sample.1.n7n35ci3ahun@node | }, webhook-sample.1.n7n35ci3ahun@node | "location": "/repositories/admin/webhook-sample/tags/1.0" webhook-sample.1.n7n35ci3ahun@node | }
Metadata about the image push is posted to the address we specified in the webhook definition.
Configuring Image Promotion
In addition to posting metadata triggered by events, DTR can also rename and / or re-tag an image based on similar events, in order to track its progress through your pipelines.
In DTR create a repository
admin/webhook-sample-qa
.Navigate to the repository
admin/webhook-sample
and select the tab Promotions.Make sure Is Source is selected and click New promotion policy.
From the section PROMOTE TO TARGET IF... select Tag Name. Then select Tag name ends with and enter
-good
as value and click Add.Select
admin/webhook-sample-qa
as TARGET REPOSITORY.Enter
%n-QA
in TAG NAME IN TARGET.Click Save and Apply.
/
Tag an image such as that it will trigger promotion when pushed:
[centos@ucp-manager ~]$ docker image tag centos:7 \ ${DTR_FQDN}:4443/admin/webhook-sample:1.0-good
Push the image:
[centos@ucp-manager ~]$ docker image push \ ${DTR_FQDN}:4443/admin/webhook-sample:1.0-good
In DTR double check that the image has been stored in
admin/webhook-sample
and also been promoted toadmin/webhook-sample-qa
.Optional: Configure a webhook for the repository
admin/webhook-sample-qa
and verify that it gets triggered when an image is promoted to this repo.
Conclusion
Taken together, webhooks and image promotion allow us to use Docker Trusted Registry as the backbone of a CI/CD pipeline. As images are pushed to DTR by a build server, DTR can fire webhooks to kick off testing pipelines, and as images pass stages in that pipeline, they can be automatically re-tagged or renamed to clearly indicate to users the stage to which they have progressed in testing. It's even possible to promote, or 'mirror', an image from one DTR to another, so that once testing is complete, the final, production ready image can be promoted into a totally separate DTR reserved only for production.