Below is a complete file containing some of the most common ways to use the KB API and the Query API, preceded by a set-up file.
package com.cyc.core.examples.basics; import com.cyc.Cyc; import com.cyc.kb.BinaryPredicate; import com.cyc.kb.Context; import com.cyc.kb.Fact; import com.cyc.kb.KbCollection; import com.cyc.kb.KbIndividual; import com.cyc.kb.KbPredicate; import com.cyc.kb.KbTerm; import com.cyc.kb.Sentence; import com.cyc.kb.Variable; import com.cyc.kb.exception.CreateException; import com.cyc.kb.exception.DeleteException; import com.cyc.kb.exception.KbException; import com.cyc.kb.exception.KbObjectNotFoundException; import com.cyc.kb.exception.KbTypeException; import com.cyc.query.InferenceStatus; import com.cyc.query.InferenceSuspendReason; import com.cyc.query.Query; import com.cyc.query.QueryAnswer; import com.cyc.query.QueryListener; import com.cyc.query.QueryResultSet; import com.cyc.query.exception.QueryConstructionException; import com.cyc.query.exception.QueryException; import com.cyc.session.CycServerInfo; import com.cyc.session.CycSession; import com.cyc.session.SessionManager; import com.cyc.session.SessionOptions; import com.cyc.session.exception.SessionCommandException; import com.cyc.session.exception.SessionCommunicationException; import com.cyc.session.exception.SessionConfigurationException; import com.cyc.session.exception.SessionException; import com.cyc.session.exception.SessionInitializationException; import java.io.IOException; import java.util.Collection; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* * #%L * File: BasicWalkthrough.java * Project: Cyc Core API Use Cases * %% * Copyright (C) 1995 - 2014 Cycorp, Inc * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ /** * This class provides a simple example of working with the Cyc KB through the Cyc Core API. It * includes new term creation, term retrieval, asserting and deleting facts about terms, and * querying the Cyc KB. * <p> * The purpose of this class is to illustrate the basics of the Cyc Core API, so it is structured to * be read in linear order, from top to bottom, with methods that build upon the examples in * previous methods. Thus, while this file demonstrates best practices for Core API usage, it does * not represent the ideal structure for an actual application class. * <p> * All of the example code in this class should work with all Cyc server releases supported by * the Cyc Core API. * * @note There are multiple ways of interacting with Cyc (through and independent of the Core API). * The illustrations here are some of the more popular techniques. */ public class BasicWalkthrough { // Cyc APIs log through the SLF4J API: private static final Logger LOGGER = LoggerFactory.getLogger(BasicWalkthrough.class); // Fields private Context peopleDataMt; private Context massMediaDataMt; private KbCollection actorInMovies; private KbCollection restrictedRating; private KbIndividual nicholson; private KbIndividual kingOfMarvinGardens; private BinaryPredicate movieActors; private BinaryPredicate movieActorsWithStarringRole; private BinaryPredicate movieAdvisoryRating; // Main public static void main(String[] args) { /* Wrapping the current SessionManager instance in a try-with-resources statement in the main method ensures that ALL CycSessions created by the SessionManager are closed, along with all of their Cyc server connections, before the program ends: */ try (SessionManager sessionMgr = SessionManager.getInstance()) { System.out.println("Running walkthrough..."); BasicWalkthrough usage = new BasicWalkthrough(); usage.runExample(); System.out.println(); } catch (KbException | QueryException | SessionException | RuntimeException kbe) { kbe.printStackTrace(System.err); System.exit(1); } catch (IOException ioe) { System.err.println("Error closing SessionManager"); ioe.printStackTrace(System.err); System.exit(1); } finally { System.out.println("... Walkthrough concluded."); System.exit(0); } } // Example code /** * Calls the actual example methods in linear order. * <p> * Note that we call all of the example methods within a try-with-resources block, to ensure that * the CycSession for the current thread is closed before the thread is terminated. This may seem * a little redundant, as this is a single-threaded application and we're already closing the * SessionManager in the main() method (thereby closing ALL CycSessions). Although this isn't * strictly necessary for simple applications like this one, it is good practice for multi- * threaded applications (e.g., servlets), so we're demonstrating it here. * <p> * Typically, we don't need to directly request the current CycSession; if one does not exist, it * will be automatically created the first time that the Cyc APIs require it. However, wrapping it * in a try-with-resources statement ensures that the session will be cleaned up at the end of the * current execution thread. * * @throws KbException * @throws QueryConstructionException * @throws SessionException */ public void runExample() throws KbException, QueryConstructionException, SessionException { try (CycSession session = CycSession.getCurrent()) { configureCurrentSession(); setupContexts(); basicTermLookup(); setupMarvinGardens(); setupActorBackgroundKnowledge(); setupJackNicholson(); createQueryViaSentence(); createQueryViaString(); runQueryAsynchronously(); } } /** * Configure the current CycSession. There is no need to programmatically specify a Cyc server; * when one is required, the CycSessionManager will check the System properties to determine how * to get access to Cyc. By default, in a graphical environment, it will fall back on * interactively prompting the user for connection information. * * @throws SessionConfigurationException * @throws SessionCommunicationException * @throws SessionInitializationException * @throws SessionCommandException * @throws KbTypeException * @throws CreateException */ protected void configureCurrentSession() throws SessionConfigurationException, SessionCommunicationException, SessionInitializationException, SessionCommandException, KbTypeException, CreateException { System.out.println(); /* Retrieve the current CycSession, creating one if necessary. In this case a CycSession should already exist, because we already called CycSessionManager#getCurrentSession() in the runExample() method. Calling it again here should return the same instance of CycSession. */ CycSession session = CycSession.getCurrent(); /* Let's get some information about the Cyc server being used for this session: */ CycServerInfo serverInfo = session.getServerInfo(); System.out.println("Current Cyc server: " + serverInfo.getCycAddress()); System.out.println("Cyc server release type: " + serverInfo.getSystemReleaseType()); System.out.println("Cyc server revision number:" + serverInfo.getCycRevisionString()); /* Now let's set some options for the current session. Here we are defining them programmatically, but future versions of the Session API will allow them to be defined by configuration properties... */ SessionOptions options = session.getOptions(); /* Transcript the Cyc operations issued by the API. These operations can be saved into an ASCII text file and reloaded on a clean image to recreate a given state of the KB with such operations. */ options.setShouldTranscriptOperations(true); /* Set "CycAdministrator" as the current Cyclist. Setting the cyclist is required for bookkeeping information to be added for assertions and constants. */ options.setCyclistName("CycAdministrator"); } /** * Choose the Contexts we'll be using. "Contexts" are the objects which the KB API uses to * represent CycL microtheories. We'll be referring to them often, so we'll assign them to * instance fields. * * <p>It's very important to ensure that the knowledge used by your application goes into the * appropriate microtheory; this can have an enormous impact upon the correctness and efficiency * of inference. * * @throws KbTypeException * @throws CreateException * @throws SessionConfigurationException * @throws SessionCommunicationException * @throws SessionInitializationException */ protected void setupContexts() throws KbTypeException, CreateException, SessionConfigurationException, SessionCommunicationException, SessionInitializationException { /* KbObjects are requested from factories, and there is KB factory for each KbObject type. Here, we retrieve Context objects. */ peopleDataMt = Context.get("PeopleDataMt"); massMediaDataMt = Context.get("MassMediaDataMt"); /* Instead of manually specifying a Context for every query or assertion, many methods will check for default assertion and query Contexts if no Context argument is directly provided. */ CycSession.getCurrent().getOptions().setDefaultContext( Context.getDefaultContext(massMediaDataMt, Cyc.Constants.INFERENCE_PSC)); } /** * Perform some simple term lookup and creation. Most of the methods in the KB API and the Query * API will accept both Strings and KB objects for their arguments. But it's good practice to * create the KB object versions, and use them. In this file, we'll alternate back and forth * between using KB object and using Strings for these arguments. Here's how you retrieve the KB * objects. * * @throws KbTypeException * @throws CreateException * @throws DeleteException */ protected void basicTermLookup() throws KbTypeException, CreateException, DeleteException { System.out.println(); /* KbObjects are requested from factories, and there is KB factory for each KbObject type. Here, we find or create an Individual term in the KB to represent the actor Jack Nicholson. */ KbIndividual nicholsonIndividual = KbIndividual.findOrCreate("JackNicholson"); System.out.println("Jack Nicholson as an individual: " + nicholsonIndividual); /* And here, we request JackNicholson as a KbTerm, which is a super-type of KbIndividual. Note that we're now using the get method, which should only be used if you're sure the term is in the KB. This code shows how to test whether a term is in the KB (in a form that can be cast to the desired type) before actually retrieving it. In most real-world cases, you won't run this test before every call to get. */ KbTerm nicholsonTerm = null; if (KbTerm.existsAsType("JackNicholson")) { nicholsonTerm = KbTerm.get("JackNicholson"); } System.out.println("Jack Nicholson as a term: " + nicholsonTerm); /* We can also confirm that Jack Nicholson isn't, say, a KbCollection. */ System.out.println("Is Jack Nicholson a collection? " + KbCollection.existsAsType("JackNicholson")); /* The KbObject factories are intelligent enough to return an instance of the most specific type. Because JackNicholson is an Individual, and because KbIndividual is a subclass of KbTerm, either factory will return an instance of KbIndividual. And, because of caching, they will return the *same* instance of KbIndividual: */ System.out.println("Are the KbTerm and KbIndividual for #$JackNicholson the exact same object? " + (nicholsonIndividual == nicholsonTerm)); /* Now, let's check whether the movie _King of Marvin Gardens_ exists in Cyc's KB. Here is some slightly different syntax for checking whether it can be expressed as a KbIndividual: */ System.out.println("Does Cyc already know that _King of Marvin Gardens_ is an individual? " + KbIndividual.existsAsType("TheKingOfMarvinGardens-TheMovie")); /* And here's a way to check whether the term exists at all: */ System.out.println("Does _King of Marvin Gardens_ exist in Cyc's KB at all? " + Cyc.existsInKb("TheKingOfMarvinGardens-TheMovie")); /* For sake of the example, let's ensure that _King of Marvin Gardens_ does NOT exist in Cyc's KB. Of course, it needs to exist in order for us to delete it, and we could check KbFactory#existsInKb() (like we just did above) to determine whether it exists. But for sake of the example let's assume that it's in the KB, and add some code for handling the case where it isn't: */ try { KbTerm.get("TheKingOfMarvinGardens-TheMovie").delete(); System.out.println("TheKingOfMarvinGardens-TheMovie: deleted!"); } catch (KbObjectNotFoundException e) { System.out.println("Apparently TheKingOfMarvinGardens-TheMovie wasn't in the KB," + " but we'll just carry on: " + " (" + e.getMessage() + ")"); } } /** * Ensure that _King Of Marvin Gardens_ exists in Cyc's KB, and has enough supporting knowledge to * be useful. This is known as "term elaboration". * * @throws CreateException * @throws KbTypeException */ protected void setupMarvinGardens() throws CreateException, KbTypeException { System.out.println(); /* Find or create an individual term in the KB to represent the movie _King of Marvin Gardens_, and simultaneously make it an instance of the DramaticMovies collection in the MassMediaDataMt Context. Note that we could also have passed the String DramaticMovie and the context MassMediaDataMt as parameters to the findOrCreate method. Also note that we assumed the collection DramaticMovie exists in the KB. If DramaticMovie were not in the KB, this code would throw an exception, and we would have to create it. */ KbCollection dramaticMovie = KbCollection.get("DramaticMovie"); kingOfMarvinGardens = KbIndividual .findOrCreate("TheKingOfMarvinGardens-TheMovie", dramaticMovie, massMediaDataMt); System.out.println("We've created _King of Marvin Gardens_: " + kingOfMarvinGardens); /* Now, let's add the fact that the movie "The King of Marvin Gardens" has a restricted rating. */ restrictedRating = KbCollection.get("RestrictedRating"); movieAdvisoryRating = BinaryPredicate.get("movieAdvisoryRating"); Fact kingOfMarvinGardensRestrictedRating = Fact.findOrCreate( Sentence.get(movieAdvisoryRating, kingOfMarvinGardens, restrictedRating), massMediaDataMt); System.out.println("_King of Marvin Gardens_ is R-rated: " + kingOfMarvinGardensRestrictedRating); } /** * Add general background knowledge about actors. Later, this will be leveraged to associated Jack * Nicholson with the movie _King of Marvin Gardens_. * * @throws CreateException * @throws KbTypeException */ protected void setupActorBackgroundKnowledge() throws CreateException, KbTypeException { System.out.println(); /* Since we will be talking about Jack Nicholson, we have to make sure Cyc knows about actors. Most Cyc releases will already have this term, but just in case, here's how you go about creating it. Don't worry if it's already in your Cyc KB. These operations are idempotent, so running them in a Cyc that already has the terms won't do anything bad. When in doubt, the following idiom is most useful. */ actorInMovies = KbCollection.findOrCreate("ActorInMovies"); /* Let's also convey the fact that all movie actors are people. (Our apologies to the highly trained animals who have sometimes carried movies on their shoulders). We assume the collection Person already exists and we only have to specify the name to retrieve it. */ actorInMovies.addGeneralization(KbCollection.get("Person")); /* We need a way to relate actors to the movies they are in. Let's call the relation "movieActors". This particular predicate already exists in Cyc, but if it didn't, this is how you would create it. */ movieActors = BinaryPredicate.findOrCreate("movieActors"); System.out.println("Binary predicate associating actors with movies: " + movieActors); /* It is always a good idea to put constraints on the arguments of predicates for semantic validity. The following establishes in the KB (in the MassMediaDataMt context) that the first argument of movieActors must be an instance of the collection Movie-CW and the second argument must be an instance of the collection ActorInMovies. (Note that #$DramaticMovie is a spec of #$Movie-CW, so #$TheKingOfMarvinGardens-TheMovie will be a valid argument for arg1.) */ System.out.println("Asserting constraints on #$movieActors," + " these might take a little while to propagate..."); movieActors.addArgIsa(1, KbCollection.get("Movie-CW"), Context.get("MassMediaDataMt")); movieActors.addArgIsa(2, KbCollection.get("ActorInMovies"), Context.get("MassMediaDataMt")); /* Of course, some movie actors have a starring role. To add this more specific knowledge to the KB, we need a more specific predicate; let's call it "movieActors-WithStarringRole". Again, this predicate already exists in most Cyc KBs, so the following will typically retrieve, rather than create, the predicate in most Cyc KBs. */ System.out.println("Asserting constraints on #$movieActors-WithStarringRole," + " these might take a little while to propagate..."); movieActorsWithStarringRole = BinaryPredicate.findOrCreate("movieActors-WithStarringRole"); movieActorsWithStarringRole.addArgIsa(1, KbCollection.get("Movie-CW"), Context.get("MassMediaDataMt")); movieActorsWithStarringRole.addArgIsa(2, KbCollection.get("ActorInMovies"), Context.get("MassMediaDataMt")); /* Finally, let's establish that movieActors is a generalization of movieActorsWithStarringRole */ movieActorsWithStarringRole.addGeneralization(KbPredicate.get("movieActors"), Context.get("UniversalVocabularyMt")); /* Now, let's view all of the specializations on #$movieActors. */ System.out.println("Specializations of #$movieActors:"); movieActors.getSpecializations() .forEach(spec -> System.out.println(" - " + spec)); } /** * Elaborate on Jack Nicholson's role as an actor, and his relation to the movie * _King Of Marvin Gardens_... * * @throws CreateException * @throws KbTypeException * @throws DeleteException * @throws SessionConfigurationException * @throws SessionCommunicationException * @throws SessionInitializationException */ protected void setupJackNicholson() throws CreateException, KbTypeException, DeleteException, SessionConfigurationException, SessionCommunicationException, SessionInitializationException { System.out.println(); /* We ensured earlier that #$JackNicholson was in the KB. We'll be referring to him a few times more, though, so let's assign him to an instance field. */ nicholson = KbIndividual.get("JackNicholson"); /* Let's convey the fact Jack Nicholson is an instance of the ActorInMovies collection in the PeopleDataMt Context. */ nicholson.instantiates(actorInMovies, peopleDataMt); /* We can easily see what JackNicholson is known to be an instance of from the PeopleDataMt context. */ Collection<KbCollection> nicholsonTypes = nicholson.instanceOf(Context.get("PeopleDataMt")); System.out.println("Things that #$JackNicholson is known to be:"); nicholsonTypes .forEach(nicholsonType -> System.out.println(" - " + nicholsonType)); /* Since JackNicholson is an instance of ActorInMovies (which is a specialization of Person) we should be able to prove that JackNicholson is a person without ever having asserted it. */ assert (nicholsonTypes.contains(KbCollection.get("Person"))) : "Jack Nicholson may be an ActorInMovies but he is not a Person"; /* Similarly, Cyc knows that he is a human. */ System.out.println("Does Cyc know that #$JackNicholson is a human? " + nicholson.isInstanceOf(KbCollection.get("HomoSapiens"))); /* Now, assert the fact, in the MassMediaMt context, that JackNicholson was one of the actors in KingOfMarvinGardens. */ Fact nicholsonActedInMarvinGardens = Fact.findOrCreate( Sentence.get(movieActors, kingOfMarvinGardens, nicholson), massMediaDataMt); /* But wait! Jack Nicholson actually had a starring role in TheKingOfMarvinGardens-TheMovie, so let's add that more specific assertion. This method shows how to do it with a String containing a CycL sentence. */ Fact nicholsonStarredInMarvinGardens = Fact.findOrCreate( "(movieActors-WithStarringRole TheKingOfMarvinGardens-TheMovie JackNicholson)", "MassMediaDataMt"); System.out.println("Jack Nicholson starred in _King of Marvin Gardens_: " + nicholsonStarredInMarvinGardens); /* Now that we know he was a star, it's redundant to say that he acted in the movie, so we can (but are not required to) delete the first fact, and we'll still know that he acted in the movie. */ nicholsonActedInMarvinGardens.delete(); } /** * Construct a query from a Sentence of KbObjects (which could include other Sentences) and run * it. * * <p>Here we will retrieve the results as a List of QueryAnswers, with each QueryAnswer * containing a map of query variables and their bindings. * * @throws KbTypeException * @throws CreateException * @throws QueryConstructionException * @throws SessionCommunicationException * @throws KbException */ public void createQueryViaSentence() throws KbTypeException, CreateException, QueryConstructionException, SessionCommunicationException, KbException { System.out.println(); Variable movieVar = Variable.get("?MOVIE"); Sentence querySentence = Sentence.and( Sentence.get(movieActors, movieVar, nicholson), Sentence.get(movieAdvisoryRating, movieVar, restrictedRating)); System.out.println("Query sentence: " + querySentence); /* Now we can construct a query for this sentence. We will use InferencePSC, the all-encompassing context, as the context in which to execute the query. Note here we retrieve a handle to InferencePSC from the ContextFactory class, but we could also have retrieved it using Context.get("InferencePSC"). Note that we are wrapping the Query in a try-with-resources statement; this ensures that it will be cleaned up when we are done with it, without having to manually call Query#close(). */ try (Query query = Query.get(querySentence, Cyc.Constants.INFERENCE_PSC)) { /* Let's set a few parameters for efficiency using our knowledge of answer expectations. In particular we will set a cap on the number of results retrieved and the amount of time spent in retrieval and we will make the results accessible through the Cyc browser. Note that these setters return the Query object, so they are chainable. */ query.setMaxAnswerCount(10) .setMaxTime(2) .getInferenceParameters().setBrowsable(true); /* Calling Query#getAnswers() will force an inference to run, if this has not already happened. */ System.out.println("Retrieving query answers as a List of binding-sets..."); List<QueryAnswer> answers = query.getAnswers(); System.out.println("Status: " + query.getStatus()); System.out.println("Is inference suspended? " + InferenceStatus.SUSPENDED.equals(query.getStatus())); System.out.println("Number of results: " + answers.size()); answers.forEach(answer -> { /* If we know the type of the binding, we can use that as a generic. */ KbIndividual binding = answer.<KbIndividual>getBinding(movieVar); System.out.println(" - " + binding); }); } finally { /* We've wrapped the Query in a try-with-resources statement, so it will be automatically closed at the end of the try block. Closing the query performs clean up operations. Not closing queries leaves objects in the Cyc server, and can cause memory leaks. The finalize method on the query closes it, thereby releasing resources on the Cyc server, but it is performed at the mercy of the garbage collector. To ensure that the resources are released promptly on the server, the query should generally be closed as soon as you are done with it and its directly related objects (such as any QueryResultSets). This is especially important when a query has been run as "browsable" (which this query was), as the Cyc server will hold onto resources for that query even after the calling application has terminated. */ System.out.println("Done with query!"); } } /** * Construct a query from a String containing a CycL sentence and run it. Although it's generally * preferable to construct Queries via a Sentence of KbObjects (less error-prone), there are * certainly times when you may want to read raw Strings (user input, prototyping, etc.) * * <p>Here we will retrieve the query answers as a synchronous QueryResultSet, which is very * similar to a JDBC ResultSet. * * @throws KbTypeException * @throws CreateException * @throws QueryConstructionException * @throws KbException */ public void createQueryViaString() throws KbTypeException, CreateException, QueryConstructionException, KbException { System.out.println(); /* Note that the #$ prefix for constant names is not required, and that the toString method on KBObjects yields a string that can be used in this kind of method. */ try (Query query = Query.get( "(and (movieActors ?MOVIE " + nicholson + ")" + " (movieAdvisoryRating ?MOVIE RestrictedRating))", "InferencePSC")) { query.getInferenceParameters() .setMaxAnswerCount(10) .setMaxTime(2) .setBrowsable(true); /* Calling Query#getResultSet() will force an inference to run, if this has not already happened. */ System.out.println("Retrieving query answers as a synchronous QueryResultSet..."); QueryResultSet results = query.getResultSet(); System.out.println("Status: " + query.getStatus()); System.out.println("Is inference suspended? " + InferenceStatus.SUSPENDED.equals(query.getStatus())); System.out.println("Number of results: " + results.getCurrentRowCount()); while (results.next()) { KbIndividual binding = results.getKbObject("?MOVIE", KbIndividual.class); System.out.println(" - " + binding); } } finally { System.out.println("Done with query!"); } } /** * Run a query asynchronously and receive answers via listeners. * * @throws KbTypeException * @throws CreateException * @throws QueryConstructionException */ public void runQueryAsynchronously() throws KbTypeException, CreateException, QueryConstructionException { System.out.println(); final Variable movieVar = Variable.get("?MOVIE"); Sentence querySentence = Sentence.and( Sentence.get(movieActors, movieVar, nicholson), Sentence.get(movieAdvisoryRating, movieVar, restrictedRating)); Query query = null; /* Note that we are not wrapping this query in a try-with-resource statement. We'll explain that below. */ try { query = Query.get(querySentence, Cyc.Constants.INFERENCE_PSC); query.getInferenceParameters() .setMaxAnswerCount(10) .setMaxTime(2) .setBrowsable(true); query.addListener(new QueryListener() { @Override public void notifyInferenceCreated(Query query) { System.out.println("... Created inference for " + query); } @Override public void notifyInferenceStatusChanged(InferenceStatus oldStatus, InferenceStatus newStatus, InferenceSuspendReason suspendReason, Query query) { System.out.println("... Inference status changed from " + oldStatus + " to " + newStatus); } @Override public void notifyInferenceAnswersAvailable(Query query, List<QueryAnswer> newAnswers) { newAnswers.forEach(answer -> System.out.println("New answer: " + answer.<KbIndividual>getBinding(movieVar))); } @Override public void notifyInferenceTerminated(Query query, Exception exception) { if (exception == null) { System.out.println("... Inference terminated!"); } else { System.err.println("... Inference terminated with exception!"); exception.printStackTrace(System.err); } } }); System.out.println("Retrieving query answers asynchronously via listeners..."); query.performInference(); /* Wait a couple of seconds for the purpose of this example. This is an asynchronous query, so we want to give it a chance to return results. */ try { Thread.sleep(2000); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } } finally { /* We're closing this query manually to illustrate a point: because this query is asynchronous, we need to be a little more careful about when (and how) we close it. For example, in a web service, a client might repeatedly poll the server to pick up new results; the server would need to be at least mildly intelligent about when to close the query. */ if (query != null) { System.out.println("Closing query..."); query.close(); } System.out.println("Done with asynchronous query!"); } } }


PAT'S GODAWFUL SALMON COOKIES
HOME
SHOP
ABOUT
LOGIN
Sales Report
Hours
Total:
Create New Store Location
Location Name:
Minimum Customers:
Maximum Customers:
Average Cookie Quantity Per Order:


Live output
Editable code
Press Esc to move focus away from the code area (Tab inserts a tab character).
milk eggs bread hummus


Feb 8, 2012. Learn 10 fun facts about actress. Christina Hendricks. In her youth, Christina would often play the. video game, 'Dungeons and Dragons' She is Jul 20, 2010 Amanda can have her Josh Hamm or whatever his name is Everyone knows that Christina Hendricks is the breast part of Mad Men. The 28
Mar 8, 2012. Before They Were Mad Men:. Christina Hendricks Though it's clear she kept busy in Hollywood, like many of her Mad Men co-stars, the Hendricks shows off a so-so British accent in this James. Bond-style commercial starring Pierce Brosnan Clean & Clear, 2001 "Clean and clear and under control "
Apr 18, 2011 Christina Hendricks for Clean & Clear: Joan Holloway who? Before hitting it big on Mad Men, Christina was just a giggly (albeit shiny) teenager
Aug 21, 2013 Christina Hendricks can fill out a vintage dress with that hourglass figure like nobody else Dark shades shielded her eyes from the sun but it was clear to anyone Emily VanCamp on set; Melissa Joan Hart sheds squeaky clean start filming Christmas commercial for British retailer An annual tradition
A documentary about wounded veterans that Roger championed gets a screening at the Rehabilitation Institute of Chicago and screenings in New York and Los Angeles…
Name: Christina Hendricks Birth Name: Christina Rene Hendricks Birth Date: May 3, 1975 Birth Place: Knoxville, TV Commercial: Clean & Clear Strips, Visa
Feb 26, 2012. Aired during the last episode of Real. TV on WWOR U*P*N 9 at 12:27 a m on Saturday, September. 8, 2001. Jun 4, 2013 Exhibit A: Her willingness to clean house in lingerie (leading, Bisou for Don's birthday (a native of Montreal, Pare clearly had no trouble with the French lyrics). She's so synonymous with bikinis that she was picked as the commercial. spokesmodel for LG Cyon's "Bikini Phone," a. Christina Hendricks
Christina Hendricks. CT Sunless Solution. Clear Dark. increase for under-35 users, but showed that commercial salons did not increase risk significantly (6%).
Establishing Mad Men; An Era Of Style; Time Capsule: Historical Events Of The 1960's; Mad Men Illustrated; Clearing the Air: The History of Cigarette Advertising This weekend, Christina Hendricks stripped down to a cleavage-baring swimsuit And yes, LeAnn, those are ribs, clearly in sight, beneath your teeny bikini When was the last time you saw a beer commercial with a non-skinny b!tch? Fitness is important and so is clean eating but. she looks more like exercise bulimia


Open and Reproducible Science Series
We are excited to host a new monthly series of workshops and talks to promote Open and Reproducible Science at the University of Exeter Penryn campus.
This series will include invited speakers from both within and outside the department, covering the life-cycle of a research project including Pre-registration, Project management, Reproducibility, ChatGPT (and AI in general), and more.
Schedule
Where: Exeter University Penryn campus
When: Tuesdays from 3:00-5:00pm, once a month
Feed me?: yes, there will be tea, coffee, and snacks
| Date | Location | Topic |
|---|---|---|
| 5th September | Exchange Red | Reproducible outputs: publication ready figures & tables |
| 3rd October | ESI Trevithick | Coding with AI: using ChatGPT and co-pilot |
| 7th November | TBC | Scientific publishing |
| 5th December | TBC | Collaborative coding session |
| 16th January | TBC | Cloud computing at Exeter |
Scheduled talks subject to change as the series evolves. Please check this website and look out for calendar invites for confirmed bookings and locations.
Previous workshops
| Date | Speakers | Topic | Resources |
|---|---|---|---|
| 28th March 2023 | Mark Kelson & Erik Postma | Reproducible and Open Science Symposium | Slides | Talk recording: part1, part2 |
| 9th May 2023 | Mark Hanson | The ghosts of journals past, present, and future | Talk recording (accessible with University of Exeter account only) |
| 20th June 2023 | ExDataHub | Making reproducible projects | Slides | Talk recording (open access) | intRo to RStudio Projects & git tools |
| 11th July | Lotty Brand & Matt Jones | An introduction to open science and preregistration | |
| 1st August | Dan Sankey | Let’s build R-Shiny web apps. For science! |
Get Involved
We welcome all levels of involvement in the series. If you would like to contribute a talk, workshop, or conversation topic on any subject linked to open and reproducible science, please get in touch with us by email or come and speak to us at an event.
Contact: exedatahub@exeter.ac.uk


{% extends 'layout-full.html' %} {% block title -%} Subscription error | Consumer Financial Protection Bureau {%- endblock %} {% block desc -%} Your subscription was not successfully received. {%- endblock %} {% block content_main %}
We couldn’t complete your signup request. Try
to submit your address again in a little while. For
now:


Leaf Box - Hershel
Leaves used in Heikala model, this model may not be used for commercial purposes.


StringByteLength()
语法
Result = StringByteLength(String$ [, Format])概要
Returns the number of bytes required to store the string in memory in a given format.
参数
String$ The string to use. Format (optional) The destination format to use. It can be one of the following value: #PB_Ascii : Ascii format #PB_UTF8 : UTF8 format #PB_Unicode: UTF16 formatIf omitted, the mode of the executable (unicode or ascii) is used.
返回值
The number of bytes required to store the string in memory in a given format.
备注
The number of bytes returned does not include the terminating Null-Character of the string. The size of the Null-Character is 1 byte for Ascii and UTF8 mode and 2 bytes for Unicode mode.
示例
Debug StringByteLength("�", #PB_UTF8) ; will display 2
已支持操作系统
所有


This is an EPICS areaDetector driver for the mar345 detector from Marresearch GmbH.
The interface to the detector is via a TCP/IP socket interface to the mar345dtb program that Marresearch provides. The mar345dtb program must be started before the areaDetector software is started.
mar345dtb must be configured to accepts commands on a TCP/IP socket port. This is done by editing the file /home/mar345/tables/config.xxx (where xxx is the serial number of that detector) and editing the COMMAND line to the following format:
COMMAND PORT 5001
where 5001 is the TCP/IP port to use. Any high port number can be used, but it must agree with the one specified in the areaDetector mar345Config command described below.
The mar345dtb program saves the data to disk as compressed binary files. The areaDetector software reads these disk files in order to read the data, because mar345dtb does not provide another mechanism to access the data.
This driver inherits from ADDriver. It implements many of the parameters in asynNDArrayDriver.h and in ADArrayDriver.h. It also implements a number of parameters that are specific to the mar345 detector. The mar345 class documentation describes this class in detail.
The following table describes how the mar345 driver implements some of the standard driver parameters.
| Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record Definitions in ADBase.template and NDFile.template | ||
| Parameter index variable | EPICS record name | Description |
|---|---|---|
| ADAcquire | $(P)$(R)Acquire |
Setting this to 1 starts an acquisition sequence. If ADNumImages is greater than
1 then it acquires multiple frames. For each frame it does the following:
|
| ADNumImages | $(P)$(R)NumImages | Controls the number of images to acquire when ADImageMode is ADImageMultiple. |
| ADAcquirePeriod | $(P)$(R)AcquirePeriod | Controls the period between images when ADImageMode is ADImageMultiple or ADImageContinuous. If this is greater than the acquisition time plus readout overhead then the driver will wait until the period has elapsed before starting the next acquisition. |
| NDFilePath | $(P)$(R)FilePath | Controls the path for saving images. It must be a valid path for mar345dtb and for the areaDetector driver, which is normally running in an EPICS IOC. If mar345dtb and the EPICS IOC are not running on the same machine then soft links will typically be used to make the paths look identical. |
| NDFileTemplate | $(P)$(R)FileTemplate | The mar345dtb program uses a file extension which describes the scan size and resolution, e.g. 3450, etc. Thus the FileTemplate should not include an extension. Furthermore mar345dtb always uses exactly 3 digits for the FileNumber (with leading zeros if required), just before the extension. Thus the final 3 characters of the FileTemplate must be "%3.3d". If they are not then mar345dtb will successfully save the file, but with a different name than the areaDetector driver was expecting it to use, and the driver will generate an error when it tries to open the file to read the data. A good value for FileTemplate is thus "%s%s_%3.3d", which will concatentate the FilePath and FileName, followed by an underscore and then a 3 digit number with leading zeros if required. The underscore is optional, and other characters can be placed between the FileName and the FileNumber if desired. |
| NDFileFormat | $(P)$(R)FileFormat | mar345 only supports mar345 format binary files. |
| NDStatus | $(P)$(R)DetectorState_RBV | mar345 replaces the state strings with the following: Exposing, Scanning, Erasing, Changing Mode, Aborting, Error, and Waiting. |
It is useful to use NDPluginROI to define an ROI containing the entire mar345 detector. The MaxValue_RBV PV in this ROI can be monitored to make sure that the 16-bit limit of 65,535 is not being approached in any pixel.
The mar345 driver implements the following parameters in addition to those in asynNDArrayDriver.h
and ADDriver.h. Note that to reduce the width of this table the parameter index
variable names have been split into 2 lines, but these are just a single name, for
example mar345ScanSize
.
| Parameter Definitions in mar345.cpp and EPICS Record Definitions in mar345.template | ||||||
| Parameter index variable | asyn interface | Access | Description | drvInfo string | EPICS record name | EPICS record type |
|---|---|---|---|---|---|---|
| Readout parameters | ||||||
|
mar345 ScanSize |
asynInt32 | r/w | The detector diameter to read out. Choices are 180mm, 240mm, 300mm, and 345mm. | MAR_SIZE |
$(P)$(R)ScanSize $(P)$(R)ScanSize_RBV |
mbbo
mbbi |
|
mar345 ScanResolution |
asynInt32 | r/w | The pixel size to use when reading the detector out. Choices are 0.10 and 0.15mm. | MAR_RESOLUTION |
$(P)$(R)ScanResolution $(P)$(R)ScanResolution_RBV |
mbbo
mbbi |
|
mar345 ChangeMode |
asynInt32 | r/w | Writing 1 to this parameter causes the ScanSize and ScanResolution values to be sent to the server, changing the scan mode. This is not strictly necessary, because the size and resolution is also encoded in the file extension used in the scan command. However, changing the mode before doing a scan reduces the time for the scan, because the detector is already configured for the correct mode. | MAR_CHANGE_MODE |
$(P)$(R)ChangeMode $(P)$(R)ChangedMode_RBV |
busy
bi |
| Erase parameters | ||||||
|
mar345 EraseMode |
asynInt32 | r/w | Controls whether an erase cycle should be automatically performed during acquisition. Choices are None, Before expose, and After scan. | MAR_ERASE_MODE |
$(P)$(R)EraseMode $(P)$(R)EraseMode_RBV |
mbbo
mbbi |
|
mar345 NumErase |
asynInt32 | r/w | The number of erase cycles to perform each time the detector is erased, either because the mar345Erase parameter is set to 1, or because of an automatic erase as part of an acquisition. | MAR_NUM_ERASE |
$(P)$(R)NumErase $(P)$(R)NumErase_RBV |
longout
longin |
|
mar345 Erase |
asynInt32 | r/w | Write 1 to this parameter to initiate erasing the detector. The detector will be erased multiple times if mar345NumErase is greater than 1. | MAR_ERASE |
$(P)$(R)Erase $(P)$(R)Erase_RBV |
busy
bi |
| Abort parameters | ||||||
|
mar345 Abort |
asynInt32 | r/w | Writing 1 to this parameter aborts the current operation as soon as possible and returns the driver to the idle state. Note however that commands to the mar345 server cannot be aborted, so the driver must wait for the current command to complete. | MAR_ABORT |
$(P)$(R)Abort $(P)$(R)Abort_RBV |
bo
bi |
| Debugging | ||||||
| N/A | N/A | N/A | asyn record to control debugging communication with mar345dtb program | N/A | $(P)$(R)marSserverAsyn | asyn |
The mar345 driver does not support the following standard driver parameters because they are not supported in the mar345dtb program:
The mar345 driver is created with the mar345Config command, either from C/C++ or from the EPICS IOC shell.
int mar345Config(const char *portName, const char *serverPort, int maxBuffers, size_t maxMemory, int priority, int stackSize)
For details on the meaning of the parameters to this function refer to the detailed documentation on the mar345Config function in the mar345.cpp documentation and in the documentation for the constructor for the mar345 class.
There an example IOC boot directory and startup script (iocBoot/iocMAR345/st.cmd) provided with areaDetector.
The following show the MEDM screens that are used to control the mar345 detector. Note that the general purpose screen ADBase.adl can be used, but it exposes many controls that are not applicable to the mar345, and lacks some fields that are important for the mar345.
mar345.adl
is the main screen used to control the mar345 driver.
The mar345 is definitely not a fast detector! The following measurements show the time to perform various erase and scan operations. Note that because the mar345 file format is compressed the file sizes are typically much less than the image sizes listed.
| Scan diameter | Pixel size | Image dimensions | Image size (MB) | Time to scan | Time to erase |
|---|---|---|---|---|---|
| 180 mm | 0.15 mm | 1200x1200 | 2.7 | 38.6 | 37.8 |
| 240 mm | 0.15 mm | 1600x1600 | 4.9 | 50.4 | 50.8 |
| 300 mm | 0.15 mm | 2000x2000 | 7.6 | 74.7 | 66.9 |
| 345 mm | 0.15 mm | 2300x2300 | 10.1 | 88.6 | 82.7 |
| 180 mm | 0.10 mm | 1800x1800 | 6.2 | 46.4 | 45.9 |
| 240 mm | 0.10 mm | 2400x2400 | 11.0 | 71.9 | 63.8 |
| 300 mm | 0.10 mm | 3000x3000 | 17.2 | 89.1 | 87.0 |
| 345 mm | 0.10 mm | 3450x3450 | 22.7 | 107.5 | 107.1 |
The following are some current restrictions of the mar345 driver:


First Priority: Core Language
February 2008
My first priority with Arc right now is the core language—those operators that are neither primitives like car and cdr, nor special-purpose library functions. I mean operators like CL's mapcar, let, remove-if-not, and so on.
As I said in the Arc Challenge, there has to be at least one optimal path up from axioms to a complete language for everyday programming, and the goal of Arc is to try to discover one.
I'm not against changing the axioms. If it's possible to do that in a useful way, so much the better. But that is not the kind of idea one has every day.
The reason I'm focusing on the region between axioms and libraries is that, from the programmer's point of view, these operators are the language. These are what your programs are made of. If Lisp were a house, these operators would be the front door, the living room sofa, the kitchen table. Small variations in their design can greatly affect how well the language works.
I've taken a lot of heat for focusing on this, but I think it's both an important problem and a difficult one. One sign of its difficulty is that although Lisp is almost 50 years old, the core operators in all the Lisp dialects I know are so far from optimal. The cond macro, for example. It had all those gratuitous parentheses in it since Lisp 1, and no one did anything about it. I wouldn't be surprised if someone had already discovered the Arc trick of collapsing if and cond into one operator, but it was certainly not common knowledge. I was pleased when I realized it could be done.
One reason Lisp cores evolve so slowly is that we get used to them. You start to think in the operators that already exist. It takes a conscious effort to imagine how your code might be rewritten using operators that don't.
That's part of why I focus on code size. Length is an external constraint. If you start looking at code thinking "what is the lower bound on how long this has to be?" you're one step from discovering the new operator that will make it that short.
The other reason Lisp cores have evolved so slowly is that it's a design problem more than an implementation problem, and most hackers have neither the ability nor the inclination to work on that sort of thing.  But it's not a frivolous thing to work on. Indeed, I think one of the reasons Lisp has persisted so long is that McCarthy was a great designer. At a time when other people were creating languages compromised by the hardware of the day or by ill-considered attempts to make programming languages like natural languages, he made something tiny and timeless. A lot of what's good about Lisp is that brilliance, showing up through the murk of successive less talented designers.
Some of the people who flamed Arc on its initial release joked about it as "the second coming of McCarthy." I'm sure they didn't mean it this way, but in fact I do want to restart the kind of language design he was doing at the point where he left off.
So I want to ask a favor from Arc users: I want to ask for tolerance when I break and change things in what may seem to be arbitrary, small ways. I consider the whole core to be written in pencil at this point, and I hope to be able to change it a lot.
While Arc includes some handy libraries for writing web apps—libraries so powerful, apparently, that it's cheating to compare Arc to other languages using a problem that requires saving a string on the server—that is not the focus right now. I only wrote all the web stuff to create the pressure of real applications pushing down on the core. So while I'm interested in new ideas for web apps, the kind of ideas I'd really like to hear about are new things to do in the language core.
It's harder to think of new ideas down in this highly compressed and thoroughly picked over territory, but it's very rewarding work. And we know what we're looking for must exist. By definition, there is some optimal path from axioms up to a complete language. The Platonic form of Lisp is somewhere inside the block of marble. All we have to do is chip away till we get at it.


SYNC(1) User Commands SYNC(1) NAME sync - flush file system buffers SYNOPSIS sync [OPTION] DESCRIPTION Force changed blocks to disk, update the super block. --help display this help and exit --version output version information and exit AUTHOR Written by Jim Meyering. REPORTING BUGS Report sync bugs to<EMAIL_ADDRESS>GNU coreutils home page: <http://www.gnu.org/software/coreutils/> General help using GNU software: <http://www.gnu.org/gethelp/> Report sync translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright © 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO sync(2) The full documentation for sync is maintained as a Texinfo manual. If the info and sync programs are properly installed at your site, the com‐ mand info coreutils 'sync invocation' should give you access to the complete manual. GNU coreutils 8.12.197-032bb September 2011 SYNC(1)


Information is essential for making good decisions. But information about biodiversity needs to be available in appropriate forms that specialists can access, and non-specialists can understand. We analyse, interpret and present information in ways that are easy to understand, visual and intuitive. The Species+ website contains up-to-date information about the 34,000 species of animals and plants whose trade is controlled under the Convention on International Trade in Endangered Species (CITES). This provides a vital resource for the people responsible for managing and controlling the worldwide trade in endangered species.


A group of human beings with their own uniqee way of living and agricultural practices makes a civilisation.group of human beings with their own uniqee way of living and agricultural practices makes a civilisation.


attoparser is a Java parser for XML and HTML markup.
The main features of attoparser are:
Using attoparser can be as simple as:
// Obtain a java.io.Reader on the document to be parsed
final Reader documentReader = ...;
// Create the handler instance. Extending the no-op AbstractMarkupHandler is a good start
final IMarkupHandler handler = new AbstractMarkupHandler() {
... // some events implemented
};
// Create or obtain the parser instance (can be reused). Example uses the default configuration for HTML
final IMarkupParser parser = new MarkupParser(ParseConfiguration.htmlConfiguration());
// Parse it!
parser.parse(documentReader, handler);
A more complex example, say you want to extract to another file only the <div> elements with class "content" from an HTML file. You will need a BlockSelectorMarkupHandler instance to do the selection, and then an OutputMarkupHandler chained to the former in order to write the output markup somewhere:
// Obtain a java.io.Reader on the document to be parsed
final Reader documentReader = ...;
// Obtain a java.io.Writer on the resource you want the results to be written to
final Writer documentWriter = ...;
// Last step of the chain will be the OutputMarkupHandler, who will write events as markup to the writer
final OutputMarkupHandler outputHandler = new OutputMarkupHandler(documentWriter);
// Before outputting, we will need to select those div's by means of a "markup selector expression", so we chain it
final BlockSelectorMarkupHandler selectorHandler = new BlockSelectorMarkupHandler(outputHandler, "div.content");
// Create or obtain the parser instance (can be reused). We will use the default configuration for HTML
final IMarkupParser parser = new MarkupParser(ParseConfiguration.htmlConfiguration());
// Parse it!
parser.parse(documentReader, selectorHandler);
The best place to start learning about attoparser by reading this docs is having a look at the IMarkupParser and especially the IMarkupHandler interfaces.


Load your spreadsheet
Drag and drop your spreadsheet file. Accepts XLS, XLSX, and CSV.
Note: the sample files are not for computational purposes as the numbers have been randomly generated.
Drag and drop your spreadsheet file here
—or—
Review your loaded spreadsheet
You may examine your loaded spreadsheet below, if you wish to do so.


Stickers, Coaster, and Chocolate Mold
Project Description:
For this rotation, I designed five stickers. Three of them were one solid color and two of them were multi-colored.
I designed all five in Corel Draw. I made my initials for the cover of my book, in silver. On the back I put WRA and 2019, the
year I graduate. These designs were easy to make. The Roland GS-24 was simple to use also. The difficult part was adjusting the rubber
rollers. I am familiar with this type of machine, becuase my mom uses a Cricut for her scrapbooking. I liked using the Roland 540i printer
becuase you can print multiple colors, on one layer. I chose to use the In-N-Out Burger logo, beucase it is one of my favorite places to
go when I visit my grandparents. I also printed the USA Field Hockey logo. The steps for preping the sticker was simple, I put the logo in,
and used the bitmap tool. Then I ungrouped the objects and contoured around the shape, so the 540i printer would cut around it. The first
time I designed an American Flag, but I did not put a contour around it, so I used an exacto knife to cut it out.
It took several class periods to make the coaster. I poured a mixture of yellow dye and urethane to create the rubber bottom of my
coaster. I then put a Coca-Cola keychain ontop of the base and poured epoxy over, so it would be seethrough.
Another project I made this unit, was a chocolate mold. I designed half of an ice cream cone on Fusion 360. We used machineable
wax and used the milling machine to carve out the design. I used the revolve tool, but only revolved 180 degrees to get half of an ice cream
cone. I am looking forward to pouring the food safe rubber in the mold, and then pouring chocolate into that.


Calculating utilities of strategies - Exercises¶
- Give the definition of a mixed strategy.
- For the following vectors explain which ones are valid mixed strategy vectors for a strategy set of size 5. If there are not: explain why.
- $\sigma=(1, 0, 0, 0, 0)$
- $\sigma=(1/4, 1/4, 0, 0, 1/4)$
- $\sigma=(1/4, 1/4, 1/2, -1/2, 1/2)$
- $\sigma=(1/4, 1/4, 0, 0, 11/20)$
- $\sigma=(1/5, 1/5, 1/5, 1/5, 1/5)$
Calculate the utilities (for both the row and column player) for the following game for the following strategy pairs:
$$ A = \begin{pmatrix} 1 & -1\\ -3 & 1\end{pmatrix} \qquad B = \begin{pmatrix} -1 & 2\\ 1 & -1\end{pmatrix} $$
- $\sigma_r = (.2, .8)\qquad\sigma_c = (.6, .4)$
- $\sigma_r = (.3, .7)\qquad\sigma_c = (.2, .8)$
- $\sigma_r = (.9, .1)\qquad\sigma_c = (.5, .5)$
Consider two column player strategies $z^{(1)}$ and $z^{(2)}$, obtain a linear algebraic expression for the expected utility to the row player playing against both these strategies, in terms of a row strategy $\sigma_r$, a payoff matrix $A$ and $\sigma_c=\frac{z^{(1)} + z^{(2)}}{2}$


--- title: Not Found permalink: /404.html is_wiki_page: false --- {% include git-wiki/defines/defines.html %} {% include git-wiki/sections/head/head.html %} {% include git-wiki/sections/content/body.html %}


For any questions about the OER World Map, please feel free to contact us! Use the contact form below or send an email to info@oerworldmap.org


Selectize.js
Loading from API
This demo shows how to integrate third-party data, loaded asynchronously.
Movie:


|
Sodomy And The BibleWhenever amateur Bible thumpers seek to prove that homosexuality is wrong, they turn to the story of Sodom and Gomorrah in the book of Genesis. God destroyed the entire city because of sodomites. Sodomites are homosexuals. Ego, God hates fags! Right. The only problem with this brilliant deduction is that equating "sodomites" with homosexuals is a relatively recent invention (see [ambiguous: Sodomy]), and it did not originally mean "homosexual". It meant someone who lived in Sodom.  In fact, throughout the Middle Ages it was believed that gay sex was but one of the wicked indulgences of the Sodomites. Bestiality, fornication, you name it -- they were thought to have done it. But religious scholars, reading over the various translations and transliterations of the Bible have drawn a totally different conclusion as to what the real Sin of Sodom was. Ready for this? It was being inhospitable to a stranger. Apparently it all revolves around the passage where the locals come pounding at the door urging Lot to throw out his guest "so that we may know him". Understand that by this they meant "know" him in the "biblical" sense, i.e. they wanted to hump his booty.  Lot of course was horrified by this turn of events and, feeling obligated to protect the man whom he'd taken into his home, he did was any godly man would do -- he offerred up his two daughters, so that the crowd might rape them instead. What? Yes. So clearly we should all emulate the godly heroes of the Bible. Or not. Most likely Lot felt that if someone were going to be raped, it would be less humiliating for a woman to submit to a man than for a man to submit to another man.  Why it was almost Babylonian. Speaking of the Babylonians, some scholars believe that a good deal of the Bible's negative spewage about men who lay with other men as with women (especially in the book of Leviticus, which dealth with religious purity issues) was not so much about homosexuality per se as it was a reaction to the religious practices of the Babylonians.  Feminist religious historians cite this as an attempt for the patriarchal religions to take control from female priestesses in cultures that still venerated female fertility Goddesses.  Hence all such goings on were forbidden to them. Some scholars point out that it really doesn't matter -- to Christians at least -- what is says in the Bible's Old Testament. They claim that St. Paul absolved Christians of the need to adhere to the ancient Hebrew purity laws (hence Christians can eat pork, go uncircumcized, etc.). Titus 1, verse 15 15: Unto the pure all things are pure: but unto them that are defiled and unbelieving is nothing pure; but even their mind and conscience is defiled. St. Paul, who was responsible for the few passages in the New Testament condemning homosexuality, was heavily influenced by Greek Stoic philosophers. They argued that sex, even in marriage, prevented a man from concentrating on higher philosophy. Thus you find him advocating celibacy as a virtue. Some early bishops, exaggerating St. Paul’s views, argued that only virgins would be saved. Then in the 5th century, Augustine, a scholar from North Africa who converted to Christianity after at least one lustful involvement with another man and a long-term extramarital relationship with a woman, worked out a church policy on sexual matters. Augustine argued that sex was acceptable within marriage only for purposes of procreation. For the most part, homosexuality and adultery were considered equally offensive sins. But enforcement rarely went beyond penances imposed by a Church confessor — for example, fasting or saying prayers. o o Origin of the term in the story of Sodom and Gomorrah. o Various passages used as evidence that “sodomites” = fags and that God hates fags. o Linguists and alternative historians take a peek at relevant passages. o Lots of mincing of words versus literalists who see “their” version of the bible as the only “true” version. (Unnatural acts – God saving the gentiles is supposed to be an unnatural act too.) o Not convincing that homosexuality is okay in Old Testament. o Christians told by Paul not to worry about the codes of the Old Testament except for a specific list – which does not include homosexuality – because… [?] In his letter to Titus, preaching the message of Christ on the island of Crete, Paul sharply criticizes all who mislead would be converts into believing they must observe Jewish purity laws and customs -- most specifically circumcision. (Titus 1, verse 14) advises that people should not give heed to Jewish folk tales or "fables" and to the "commandments of men, that turn from the truth.


◦High-Level Planning. Take a look at your key brand descriptors (chapter 4) and develop a short list of high-level actions that will enable you to deliver on this brand. If you don’t have time for a detailed plan, this is a quick way to help you get going.
◦Detailed Brand Action Plan. Build out activities for your brand improvement and brand communication.
-Brand Improvement. Note the gaps between your filled-out Brand Strategy Platform for your current brand and your desired brand. Fill out the Brand Strategy Improvement Template to keep track of how you will improve and your progress.
-Brand Communication. As appropriate, use the Four Phases of Brand Communication to help you map out the ecosystem focus and activities to establish a leadership position and a credible brand.
◦Keep focused. Write down your three top priority actions for the next 30 days.


{% extends "admin/model/create.html" %} {% block tail %} {{ super() }} This is in the create_page.html file {% endblock %}


To create users, enter user name, password, email and click the Create button.
User Name:
Password:
Email:


Before Change
def draw_batch_proposals(pred_dict, display_anchor=True):
print("Batch proposals (background or foreground) (score is classification, blue = foreground, red = background, green = GT)")
print("This only displays the images on the batch (256). The number displayed is the classification score (green is > 0.5, red <= 0.5)")
print("{} are displayed".format("Anchors" if display_anchor else "Final proposals"))
scores = pred_dict["rpn_prediction"]["rpn_cls_prob"]
scores = scores[:, 1]
bbox_pred = pred_dict["rpn_prediction"]["rpn_bbox_pred"]
After Change
def draw_batch_proposals(pred_dict, display_anchor=True):
tf.logging.debug("Batch proposals (background or foreground) (score is classification, blue = foreground, red = background, green = GT)")
tf.logging.debug("This only displays the images on the batch (256). The number displayed is the classification score (green is > 0.5, red <= 0.5)")
tf.logging.debug("{} are displayed".format("Anchors" if display_anchor else "Final proposals"))
scores = pred_dict["rpn_prediction"]["rpn_cls_prob"]
scores = scores[:, 1]
bbox_pred = pred_dict["rpn_prediction"]["rpn_bbox_pred"]


Trump Pardons Two Soldiers Accused of War Crimes
One soldier was accused of ordering his men to open fire on motorcycle riders approaching at “unusual speed.”
by News AgenciesUS President Donald Trump granted clemency to two US Army officers convicted of, or charged with, war crimes in Afghanistan.
A full pardon was granted to Lieutenant Clint Lorance, who had ordered soldiers under his command to open fire on three men who were moving toward them on a motorcycle “with unusual speed,” according to a White House statement mentioned in a report by Bloomberg news. Lorance was originally convicted of killing two men in that incident.
Trump also pardoned Major Matthew Golsteyn, a Green Beret who was charged with an unlawful killing in Afghanistan and was facing a court martial, the White House statement said.
According to the statement, Golsteyn had shot a man suspected of making a bomb that had killed two Marines “because he was certain that the terrorist’s bombmaking activities would continue to threaten American troops and their Afghan partners, including Afghan civilians who had helped identify him.”


"Meet the Parents" – A Pleasing Experience by Homer Yen (c) 2000
For any groom on the verge of proposing marriage to his girlfriend, there are certain rules that he needs to follow. Firstly, fill her life with happiness and romance during the courtship. Secondly, buy her a beautiful ring that glitters as brightly as her eyes. Thirdly, find the perfect moment and location to propose. Finally, the groom-wannabe should probably get her parent's blessing. Of these four, the last one can be a nightmare. Meeting parents is a rite of passage, fraught with unexpected questions, bouts of nervousness, the reality of being disliked, and the inability to make a positive impression. If you're lucky, things will go smoothly. But, if you're Greg Focker (Ben Stiller), everything will go wrong. And with a name like that, how could it not?
When Greg first meets his fiancée's father, Jack Byrnes (the grimacing Robert DeNiro), Greg immediately feels overwhelmed and is put on the defensive.  It's definitely not a good start. But Greg is determined to win him over, and it's this desire that fuels the movie. He first takes small steps such as agreeing to say grace before dinner. It doesn't matter that he's Jewish. If Daddy Byrnes asks him to say grace, then that's what he's going to gamely do. "Oh God...you're such a good God", he moons. His discomfort at trying to force out a simple prayer will make you chuckle, but when Jack gives him the "DeNiro Squint" (that familiar, unsettling gaze that gives DeNiro that aura of invincibility), it's pretty hard not to grin.
Things get progressively worse for Greg. And that's too bad because he's a genuinely likable guy with a romantic heart. Eventually, he begins to try so hard that he starts to mess everything up, committing a host of gaffes that embarrass, humiliate or injure other people. It's a never-ending ordeal of missteps, miscues, and mistakes. He buys some champagne, but uncorking the bottle leads to disastrous circumstances. He tries to find Jack's missing cat. But his method of solving the problem leads only to more trouble. And there are several other episodes, each one trumping the next in outrageousness. The more our well-meaning beau screwed up, the more the audience groaned in sympathy. We liked Greg. And, we liked this movie.
"Meet the Parents" is a farcical comedy that certainly has its moments. Just sit back and watch Greg get into trouble. No matter what the situation, whether its playing a harmless game of water volleyball or sneaking a smoke on the roof of the house, things will horribly go wrong.  DeNiro is also affable, tough on the outside yet sentimental on the inside. Their tug-of-war is often funny, the slapstick is elaborate, and there are several topical throwaway gags (mostly targeted at the airline industry) to make this film an amusing yet smart lampoon about future in-laws from Hell.
Grade: B
S: 1 out of 3 L: 1 out of 3 V: 1 out of 3
Do You Yahoo!? Get Yahoo! Mail - Free email you can access from anywhere! http://mail.yahoo.com/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Lake Daylesford geese: petition to be handed to council
by Hayley ElgTHOUGH they were removed four months ago, the fierce debate surrounding Daylesford's geese continues.
Hepburn Shire Council removed more than 30 geese from the iconic tourist hot spot in late July, citing environmental, social and economic reasons.
The council's reasoning for removing the geese was that the animals were impacting the environment at the lake by driving away native birds, having received a number of complaints about their aggressive behaviour as well as the cost of cleaning up after them.
A petition of approximately 370 signatures, gathered by Gina Lyons, will be handed to council at its meeting this evening, urging councillors to allow a small community flock of about 10 geese to return to the lake.
Read more: Hepburn Shire Council votes to remove "feral" geese from Lake Daylesford
Read more: Lake Daylesford geese removed despite efforts of protesters
Ms Lyons said more than 200 of the signatures were of locals, while the remainder were of visitors to the lake.
"It has been going on for four months and people are still sending petitions and letters to the editor," Ms Lyons said. "This indicates how strongly people feel about the issue. It would be the biggest petition the council has received in a year."
She said the lake had been "lifeless and soulless" since the geese were removed and that locals had noticed a decline in other waterbirds at the lake since the geese's removal, given that they protected other birds from foxes.
"We have a community garden, a community cinema - why not a community flock," the petition reads.
A group of 12 residents have campaigned for a flock of geese to be returned to the lake since it was removed. This is the third petition to be handed to the council.
Hepburn Shire Council were contacted for comment.
The petition will be tabled at tonight's meeting. A report will go the December 18 council meeting.


--- layout: page permalink: /about/ title: About Team 3734 tags: [tags] ---
We are FTC team 3734, A.K.A. Imperial Robotics located at the School of Science and Engineering in Dallas, TX. Our mission is to spread robotics in the world so that people learn how fun and engaging the robotics competitions of FIRST are. This year, we hope to participate in several community service projects and build a robot using the help of the community. We want to bring everyone together to create something that is truly revolutionary.
Karim Virani is Director of Technology at Big Thought, a non-profit, where he builds collaborative systems and tools to increase the availability and impact of educational opportunities for K-12 students in North Texas. In his spare time he has mentored Imperial Robotics for the last 4 years and coached Iron Reign for the last 8. He's been a robotics hobbyist for 20 years and was one of the founding members of the Dallas Makerspace.
Hi, I'm Michael and I go to the School of Science and Engineering at Townview. I'm in 12th grade and my job on the team is 3D modeling. I joined Robotics because I simply thought it would be an interesting experience.
I am a programmer for imperial robotics. I am currently a sophomore at the School of Science and Engineering at Townview Magnet Center. This is my third year competing in The First Tech Challenge. I joined imperial robotics in Freshmen year to learn about computer science and how machines work.
Hello! My name is Maximo Mateo.I'm currently a Junior at the School Of Science and Engineering at Townview Magnet Center.This is my first year in robotics. I joined robotics so I could apply my knowledge in Physics and Computer Science to robotics. I also joined robotics so I could experience teamwork, programming, and building. Learning these things in robotics can be useful in the future because we're dealing with real-life situations.Such as Robots!!!
coming soon...
Hello, my name is Britney Ramirez, and I am currently a sophomore at the School of Science and Engineering. On this team, I work together with my group on building the robot. I joined robotics because I wanted to get experience on working with physics and math and applying it to real-world usage.
Hello, I'm Christian Saldana and I am sophomore at the School of Science and Engineering. I am given certain task on the robot by the captain and get the help of others if needed. Sometimes its to build a part or attatch parts. I came to robotics in hope of gaining experience towards becoming an engineer in the future.


My Involvement: Front-End Development, HTML5 Animation, JavaScript/jQuery
Project Manager: Erin Dolhi
Designer: Bob Rusnak
Front-End: Kyle Zielinksy
This site is a micro-site that promotes Wise Snacks product CheezDoodles in a fun and interactive way. Sound was added at a later time by a different vendor.
It was built with a combination of effort between me and Kyle Zielinsky. Kyle created a smooth javascript function that smoothly animates sequences of PNG images that turn on and off as you scroll down the page. Bob Rusnak (digital designer), created all of the animations and exported them to PNG sequences that were compressed and animated with javascript.
There are several different sections that you can interact with that show different facts, products, or give you information on the different members of "The Dudes", which are click-controlled using javascript. The navigation follows you down the screen as you scroll down so you can easily navigate.
Further down the page, I build the Doodle Pad first using HTML5 and then also built it using Flash so it would be compatible with older Internet Explorer versions. I also built the controls that drops CheezDoodles when you hit the "C" button the on keyboard (a little Easter-egg animation plays if you are at the very bottom of the page).
Kyle was a huge help with optimizing this site so it was able to play in many browsers without overloading and crashing the browser. The amount of JavaScript on this one-page website was a heavy load on browsers early on, but with his help, it can run easily without overloading the page.
There are fun little animations and activities throughout this page and it was a huge learning experience for me. This was probably one of the most fun projects I have had the good luck to work on.


We answered frequently asked questions below.
Q1: What are you planning to do with all these labeled data?
- We will use the data to train a deep neural network for detecting smoke emissions. As we gather more data, the AI system will begin to detect smoke, and our team will design visualization for industrial pollution events.
Q2: Why do you need help from volunteers?
- While deep neural networks have been proven useful in various applications (e.g., object recognition), training such networks requires a considerable amount of labeled data. Annotating all the data will take hundreds of hours for one reseacher, which is why we need help from volunteers.
Q3: Why is it important to detect and visualize smoke emissions?
- Our previous work in air quality monitoring shows that visualizing evidence of smoke emissions can influence the attitude of regulators. Also, using such visual data increased the community's confidence when addressing air pollution.
Q4: Where do these video clips come from?
- We selected and cropped several windows into videos from the Breathe Cams network (as shown in the following image). Each video contains 36 frames, which represent about 6 minutes in real-world time.
Q5: Why my labels did not pass the quality check? How did you define the quality?
- For each batch (16 videos) on the page, the system randomly placed several videos with known answers, also called gold standards. A batch will pass the quality check if you label these gold standards correctly.
Q6: How does the system know if smoke emission is present in a video?
- The system defines the final label by aggregating answers from citizens and researchers. At least two volunteers or one researcher will review each video. If the answers from the two volunteers agree, the system marks the video according to the agreement. Otherwise, another volunteer or researcher will review the video, and the result is aggregated based on majority voting.
Q7: Why sometimes a dialog box popped up and asked me to enable video autoplay?
- During labeling, videos need to play automatically. If a mobile device has data saver enabled, videos will stop autoplay. Also, some mobile devices pause videos after users wake it up from sleeping mode. To enable autoplay, browsers require user interactions, which is why the system shows the dialog box.
Q8: Why sometimes I saw similar videos? Were they the same?
- Videos that have closer times (e.g., 8 and 8:10 am) can look similar due to the same weather and lighting conditions. Also, gold standard videos for the quality check can appear again if you label many batches.
Q9: Can I build a similar system with your code?
- This project is open-sourced on GitHub. Please feel free to reuse the code.
Q10: Are there other actions that I can take to advocate for better air quality?
- We recommend checking the materials for smoke reading (EPA Method 9). We also recommend using the Smell Pittsburgh (or Smell MyCity if not in Pittsburgh) application to report pollution odors to the local health department. More resources can be found on Mark Dixon's website.
Q11: Why does this tool not support devices older than Android 7 and iOS 11?
- When labeling smoke, this tool shows 16 videos at the same time. Older devices have difficulties in playing these videos, which results in poor user experiences.
Q12: Why are there no nighttime videos to label?
- Smoke emissions in nighttime videos (captured by commercial digital cameras) are tough for the computer to recognize due to insufficient light. We want to focus on training the computer to detect daytime smoke emissions first.
Q13: Who are your local partners?
- We worked with the Breathe Collaborative in engaging citizens to label smoke emissions. We thank the Clean Air Council and GASP (Group Against Smog and Pollution) in organizing workshops for labeling smoke events with us.


fun start(parentScope: CoroutineScope?): Synchronizer
Starts this synchronizer within the given scope. For simplicity, attempting to start an instance that has already been started will throw a SynchronizerException.FalseStart exception. This reduces the complexity of managing resources that must be recycled. Instead, each synchronizer is designed to have a long lifespan and should be started from an activity, application or session.
parentScope
- the scope to use for this synchronizer, typically something with a
lifecycle such as an Activity for single-activity apps or a logged in user session. This
scope is only used for launching this synchronzer's job as a child. If no scope is provided,
then this synchronizer and all of its coroutines will run until stop is called, which is not
recommended since it can leak resources. That type of behavior is more useful for tests.
Return
an instance of this class so that this function can be used fluidly.


Number of Decks to play with:
Dropdown
1 Deck
2 Deck
3 Deck
Number of players:
Dropdown
1 Player
2 Player
3 Player


HOME
MENU
ABOUT
CONTACT
"GREAT PIZZA and SO MUCH MORE!"
View Menu
You have found the home of Daytona's finest pizza We offer great pizza and so much more. This is where eating is believing!
Order Online
COME VISIT US!
Restaurant Hours:
Monday - Sunday 11AM - 9:30PM


|
|
||
| Value | Description | Notes |
|---|---|---|
|
|
||
| 01 | Review | The full text of a review in a third-party publication in any medium |
| 02 | Bestseller list | |
| 03 | Media mention | Other than a review |
| 04 | ‘One locality, one book’ program | (North America) Inclusion in a program such as ‘Chicago Reads’, ‘Seattle Reads’ |
|
|


Equipment and preparation: for this recipe you will need an ice cream maker and a 23cm/9in tart tin.
For the ice cream, mix all of the ingredients together in a bowl and then churn in your ice cream maker. Place the frozen mixture into a freezer-safe container and store in the freezer until needed.
To make the pastry, cream together the soft butter and caster sugar. Add a pinch of salt, the plain flour and powdered bran flakes. Stir to combine. Add the beaten eggs and mix together to form a soft sticky dough. Cover with cling film and place into the fridge to rest for at least an hour.
Preheat the oven to 170C/340F/Gas 3½.
When the pastry is rested, lightly dust a work surface with flour and roll out the pastry to the thickness of a pound coin. Line a 23cm/9in loose-bottomed tart case with the pastry, gently pushing it into the edges and leaving any excess overhanging the sides.
Line the pastry with baking parchment. Fill with ceramic baking beans or uncooked rice and bake for 20-25 minutes. Remove the beans and lining paper, return it to the oven and cook for a further 10 minutes to ensure the pastry is cooked through and dried out. Remove from the oven and set aside to cool. Turn the oven temperature down to 160C/325F/Gas 3.
To make the filling, melt the butter in a saucepan over a medium heat until it foams and turns brown. Add the syrup, take the pan off the heat and whisk to combine (if the mixture is grainy pass it through a sieve). Put the brioche crumbs in a medium bowl and add the butter and syrup mixture. Whisk in the cream, salt, eggs and egg yolk and leave to cool for 10-15 minutes. Once cooled, pour the filling into the cooled tart case and bake for 25 minutes. Reduce the oven temperature to 140C/275F/Gas 1, and cook for a further 30 minutes, until the tart is just set – it should still have a wobble in the centre. Remove the tart from the oven and leave to cool and set for 30 minutes.
When ready to serve, sprinkle a little sea salt over the top of the tart, trim the top edges of the tart and release the ring. Cut into slices and serve with the mascarpone ice cream.


Introduction
NDVI differencing over Salgar, Colombia
Summary
The NDVI Anomaly Tool compares the NDVI of a single acquisition to a baseline formed from the median of multiple scenes from the past. Months are selected to define a custom baseline period: Past scenes from the selected months are combined to form the median. This tool is based on the
GEOGLAM Crop Monitor tool.
Input Options
The available input options include the geographic extent, the desired scene by acquisition date, and the baseline period in months. Please note that selecting a geographic extent that has no intersection with the selected scene will return no results.
Output Data
Four output images will be produced: The NDVI difference, the NDVI percentage change, the NDVI of the selected scene, and a true color image of the selected scene. A GeoTIFF and NetCDF file is also produced for the NDVI based products.
Task Parameters
Data Selection
The Data Selection subsection includes options used to form the baseline.
Baseline Period
Choose one or more months to form a baseline comprised of past scenes that occur within those months. To produce more meaningful results, choose baseline months that correspond with the season of your selected scene.
Geospatial Bounds
These bounds will be use to filter the available data. The bounding box can either be drawn on the map by a single click, drag, and second click, or by entering valid values in the boxes.
The scene selection option determines what acquisition is compared to the baseline. This is a single scene operation, so expect some missing data due to banding or no-data.
Task Outputs
Output Image Display
The default displayed image is the NDVI difference, or the baseline NDVI subtracted from the scene NDVI. The percentage change between the baseline and the scene is also available, along with the scene NDVI and the scene image.
The color scales for these images can be found under the color scale header on this panel.
Managing Completed Tasks
Various metadata is available under the results tab. The displayed image is selected here, and a listing of all scene metadata and metadata from all baseline scenes can be seen here. To remove a task from the map display, press either delete or the hide button on the results tab.
Product Download
All display products can be downloaded from the output tab. A NetCDF and GeoTIFF is avaible containing the NDVI difference, NDVI percent change, and scene NDVI.
Color Scales
NDVI Difference Color Scale
NDVI difference color scale.
NDVI Percentage Change Color Scale
NDVI percentage change color scale.
NDVI Color Scale
NDVI color scale.


arrow_back
Android Asset Studio
Launcher icon generator
Source on GitHub
Show grid
file_download
Download ZIP
See all


--- layout: default title: Home ---
Engineers Without Borders is an international organization which strives to develop bottom-up sustainable growth at the community level in the developing world. With over 12,000 members, and 350 projects in 45 different countries, EWB has had a profound impact on the lives of millions of people around the world. EWB-USA UIUC is one of the largest Engineers Without Borders student chapters in the USA. Founded in 2004, the chapter has grown to include three international programs in Nigeria, Guatemala and Cameroon, and over 150 active members. Although the projects constitute the heart and soul of our EWB vision, our chapter looks forward to future growth in many diverse areas. These include the development of new curriculae focused on international development through the College of Engineering, and the creation of chapter-wide workshops and training seminars. The bottom line? You don’t need to be an engineer to make a significant difference in our chapter!
A world in which the communities we serve have the capacity to sustainably meet their basic human needs, and where our members have enriched global perspectives through their interactions with EWB-USA initiatives.
Engineers Without Borders promotes community-driven engineering projects fostered by local partners for a sustainable global future. We foster leadership and personal growth within our student members through the transformative experiences embedded in our projects.
{{ page.location }}


The UNEP World Conservation Monitoring Centre (UNEP-WCMC) delivers biodiversity-related information and services to UNEP, UN agencies, governments, multilateral environmental agreements and their party states, NGOs and the private sector. In delivering this biodiversity portfolio, UNEP collaborates with WCMC, a not-for-profit organisation that provides the expertise of dozens of specialists in the fields of biodiversity and ecosystem services, as well as experts in information systems.
A world where decision makers in all sectors and at all levels recognise and take full account of the values of biodiversity as the bedrock of a global green economy and human well-being. We are concerned with multiple values of biodiversity, particularly where it is at risk, and the relationship between biodiversity and ecosystem services which deliver human benefits.
To provide authoritative information about biodiversity and ecosystem services in a manner that is useful to decision-makers who are driving change in environment and development policy. We do this with partners worldwide by drawing together, analysing and interpreting information on biodiversity, as well as strengthening the ability of others to do so.


The Artifacts API allows you to download, delete, and retrieve information about workflow artifacts. Artifacts enable you to share data between jobs in a workflow and store data once that workflow has completed.


Specifies the options of an asset request.
The RbxAssetOptions type is a table that specifies the options of a request to an asset on the Roblox website. It has the following fields:
| Field | Type | Description |
|---|---|---|
| AssetId | int64 | The ID of the asset to request. |
| Cookies | Cookies? | Optional cookies to send with requests, usually used for authentication. |
| Format | FormatSelector | The format used to encode or decode an asset. |
| Body | any? | The body of an asset, to be encoded by the specified format. |


DirectAuth
Your Tezos wallet in one-click. Learn more
Sign up / in with
The following sign-ins involve a third party authenticator: Twitter
Your Tezos wallet in one-click. Learn more
Sign up / in with
The following sign-ins involve a third party authenticator: Twitter


I have an EMONTX V3.4 that is permanently plugged in via the mains adapter. It is connected to 4 x CT's and 3 x 1Wire Sensors.
I would like to add an anemometer to the EMONTX that gives out a 0-5V signal proportional to the wind speed, and then piggy back the value onto the RFM69 output of the EMONTX
Looking at the circuit diagram ADC7 is used as a battery monitor which will never be used in my setup, however it seems intimately involved with the USB port. Additionally and perhaps more convenient ADC6 is used to turn the 1Wire Bus off in between readings when working on battery and is available on the terminal block at the back. My 1Wire sensors can be changed onto the 3.3V permanent line so this isn't used.
Is there any issue with using any of these pins providing I modify the sketch accordingly? Can anyone suggest a better way?
I'll divide the 5V signal to fit in with the EMONTX working on 3.3V using 2 x 470K resistors as used in the battery monitor circuit
Re: EMONTX V3.4 Extra ADC Pin use?
270 kΩ + 470 kΩ would match your anemometer to the 3.3 V input range somewhat better. Personally, I'd go for A6 and use the RJ45 connector, as you say this has already got an unswitched 3.3 V on it anyway for your temperature sensors, so you can do everything outboard of the RJ45 and avoid surgery on the emonTx.
After you've looked after the I/O pins, I think all that you've got to watch out for is possible self-heating of the temperature sensors.
And of course you'll need to reconfigure emonHub and emoncms.
Re: EMONTX V3.4 Extra ADC Pin use?
Robert,
thanks for the reply, I will order the anemometer, wire it all up and report back. I don't expect self heating to be a big issue as sensor one sits in spa water at 37.6 degrees, and Sensors 2 & 3 are under polysytrene insulation around the hot water cylinder, so usually sit somewhere in the 60-70 degree region. My guess is with all of them that the thing I'm measuring will make any self heating barely noticeable if I can see it at all. I'll keep an eye out though for any changes when I move the power source.
Now you've got me wondering if my other sensors connected to a USB adapter plugged into the Pi have any self heating...
Cheers
Kevin
Re: EMONTX V3.4 Extra ADC Pin use?
I did some tests on the sensor on an emonGLCD quite some time ago now, at room temperature. I think there's a post somewhere with the results.
Amazing (both my memory and the search!) Here: http://openenergymonitor.org/emon/node/2484
Re: EMONTX V3.4 Extra ADC Pin use?
Thanks for the link, very interesting, I may do some experiments with my 2 spare 5V connected sensors which are hanging in the garage awaiting a better use. So far I have only one sensor in air that is permanently powered, and that is a metal type sat under my deck measuring outside temperature. I have suspected it over reads when there isn't any air movement as one directly above it that is covered in black heatshrink and cable tied to my swimming pool heating pipe often reads lower after dark, suggesting that above the edge of the deck is colder than just below it. It may be that there is some odd thermo syphoning water movement that I don't know about but as the feed valve from the pool is closed and I have the odd air leak its likely that the pipe slowly drains down when its turned off.
Re: EMONTX V3.4 Extra ADC Pin use?
I've bought this anemometer http://www.dfrobot.com/wiki/index.php/Wind_Speed_Sensor_Voltage_Type(0-5V)_SKU:SEN0170 and connected it to the RJ45 Power Pin, with the sensors already being on the 3.3V Power Pin. I've also commented out the relevant lines in the sketch that energises the pin. To get a reading I've added to the sketch int WIND=analogRead(A6); float ActualWind = WIND * (52747.2 / 480810); emontx.Wind=ActualWind; The maths is a simplified version of: 3.6 x (6 x (((5 / 740) x 470) / 1023)) and gives the result in KMh instead of its standard M/S, and it allows for the voltage divider. To get it into OPENHAB from the MQTT output by the EMONPI version of EMONHUB I added: Number LocalWindSpeed { mqtt="<[mymosquitto:emonhub/rx/10/values:state:REGEX(.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,.*?,(.*?),.*)]" }
It all seems to work well, thanks again for your help!


Merlin NT Service
The Merlin installation includes support for the running of a Merlin Kernel as an Windows(TM) NT4 Service.
Service Installation
Installation of the service is achieved using the following command:
$ cd %MERLIN_HOME%\bin\nt $ InstallService-NT.bat
After installation please check the service startup parameters by using the Service manager in the Windows Control Panel.
Service Configuration
Please make sure that the service is correctly assigned with a user or system account. If you are using Merlin under the system account you must ensure that the MERLIN_HOME environment variable is declared in system scope.
Service Removal
Deinstallation of the service is achieved using the following command:
$ cd %MERLIN_HOME%\bin\nt $ UninstallService-NT.bat


Doświadczenie
wieloletnia praktyka w zawodzie
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
LOREM IPSUM
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
LOREM IPSUM
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
LOREM IPSUM
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
zobaczysz co to
Opis firmy
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.


Welcome to
Marina-ville!
Like the place you park boats, but not.
⸰ ⸰ ⸰
Monday through Friday, I am a Product Designer at
Braintree
. Saturday and Sunday, I am an explorer, bruncher, traveler, ikea hacker, bike rider, drummer, beer drinker, instagrammer, couch potato, concert go-er, or kitten cuddler.


|
Class Summary |
| TFM01 |
|
| TFM02 |
Name: "2. |
| TFM06 |
Name: "6. |
| TFM08 |
Name: "8. |
| TFM09 |
Name: "9. |
| TFM11 |
Name: "11. |
| TFM12 |
Name: " 12. |
| TFM13 |
Name: "13. |
| TFM18 |
Name: "18. |
| TFM20 |
Name: "20. |
| TFM21 |
Name: "21. |
| TFM22 |
Name: "22. |
| TFMApp |
Concrete TFMQGItems subclass used during Transformation application to hold
application arguments. |
| TFMAppWithConstraint |
A special type of TFMApp that also has a constraint |
| TFMExec |
Concrete TFMQGItems subclass used during Transformation execution to hold
execution arguments. |
| TFMList |
Top-level helper class that contains a List of all Transformations, including
those that can:
|
| TFMQGItems |
An abstract helper superclass used by Transformation instances. |
| Transformation |
The abstract superclass for all QGraph 2.0 transformations. |


--- layout: page title: Disclaimer ---
This is a personal website. Any views or opinions represented in this website are personal and belong solely to the website owner and do not represent those of people, institutions or organizations that the website owner may or may not be associated with in professional or personal capacity, unless explicitly stated.
Any views or opinions are not intended to malign any religion, ethnic group, club, organization, company, or individual.
All content provided on this website is for informational purposes only. The owner of this website makes no representations as to the accuracy or completeness of any information on this site or found by following any link on this site.
The website owner will not be liable for any errors or omissions in this information nor for the availability of this information. The owner will not be liable for any losses, injuries, or damages from the display or use of this information.
Any downloadable file, including but not limited to pdfs, docs, jpegs, pngs, is provided at the user's own risk. The website owner will not be liable for any losses, injuries, or damages resulting from a corrupted or damaged file.
The website owner is not responsible for the content in comments.
This website disclaimer is subject to change at anytime.