--- layout: page title: Overview (OData Version 2.0) date: 2014-02-28 03:27:38.000000000 +08:00 permalink: /documentation/odata-version-2-0/overview/ ---
The Open Data Protocol (OData) enables the creation of HTTP-based data services, which allow resources identified using Uniform Resource Identifiers (URIs) and defined in an abstract data model, to be published and edited by Web clients using simple HTTP messages. OData is intended to be used to expose and access information from a variety of sources including, but not limited to, relational databases, file systems, content management systems, and traditional Web sites.
OData is made up of a group of specifications. This specification describes OData's core concepts and the following specifications define optional extensions to the foundations defined in this document:
| Specification | Description |
|---|---|
| [OData:URI] | Conventions for constructing URIs to identify the resources and metadata exposed by an OData service. |
| [OData:Terms] | Glossary of terms used by OData |
| [OData:Operations] | Defines the request types (retrieve, insert, update, delete, etc) and associated responses used by the OData protocol. An implementation can support some or all of the request types. |
| [OData:ATOM] | Defines an AtomPub representation for the payload of an OData request/response. |
| [OData:JSON] | Defines a JSON representation for the payload of an OData request/response. |
| [OData:Batch] | Extends the OData Operations specification to define a mechanism to enable a client of a data service to "batch" a group of requests and send that group/batch to the OData service in a single HTTP request. |
OData is designed to be modular such that an OData implementation needs to implement only as much of an OData specification as required for its target scenario.
A full list of terms used by the Open Data Protocol is available on the [OData: Terms] page.
As shown in Figure 1, OData builds on the conventions defined in the Atom Publishing Protocol (AtomPub) and applies additional Web technologies such as HTTP and JavaScript Object Notation (JSON) to create a protocol that enables access to information from a variety of applications, services, and stores.
At the core of OData are feeds, which are Collections of typed Entries. Each entry represents a structured record with a key that has a list of Properties of primitive or complex types. Entries can be part of a type hierarchy and may have related entries and related feeds through Links. For example the following URI represents a feed of Product entries: https://services.odata.org/OData/OData.svc/Products.
Some entries are special in that they describe a media element (typically a BLOB), becoming two related resources: the Media Link Entry containing the structured data that describes the BLOB and the Media Resource that is the BLOB itself.
Simple OData services may consist of just a feed. More sophisticated services can have several feeds, and in that case it is useful to expose a service document that lists all the top-level feeds so clients can discover them and find out the addresses of each of them. For example, this URI https://services.odata.org/OData/OData.svc, identifies the service document for a sample OData service.
In addition to feeds and entries, OData services can expose Service Operations, which are simple, service-specific functions that accept input parameters and return entries or complex/primitive values.
As shown by the examples noted above, OData services expose all these constructs (feeds, entries, properties within entries, links, service documents, and metadata documents) via URIs in one or more representation formats, which can be acted upon (query, update, insert, delete, and so on) by clients using basic HTTP requests.
In order to help clients discover the shape of an OData service, the structure of its resources, the known links between resources, and the Service Operations exposed, an OData service may also expose a Service Metadata Document. OData metadata documents describe the Entity Data Model (EDM) for a given service, which is the underlying abstract data model used by OData services to formalize the description of the resources it exposes. For example, the URI https://services.odata.org/OData/OData.svc/$metadata identifies the metadata document for a sample OData service.
OData services may provide two types of metadata documents to describe themselves.
As described above in OData Basics, expose a Service Document that lists all the top-level feeds so clients can discover them and find out the addresses of each of them. The service document is typically available at the Service Root URI and may be formatted in Atom or JSON as described in [OData: Atom] and [OData: JSON].
All data services may also expose a Service Metadata Document that describes the data model (i.e. structure and organization of all the resources) exposed as HTTP endpoints by the service. The following sections describe the underlying data model used by OData services and its representation - the Service Metadata Document.
This section provides a high-level description of the EDM, which is the underlying abstract data model used by OData services.
The use of the EDM as an underlying data model for the Open Data Protocol does not mandate that a particular data persistence format or implementation be used by an OData service. The only requirement to be an OData service is that the HTTP interface exposed by the service is consistent with the protocol described in this and the associated documents.
An OData Service Metadata Document describes its data in EDM terms using an XML language for describing models called the conceptual schema definition language (CSDL). The remainder of this section provides a brief description of the Entity Data Model and defines how EDM constructs are mapped to the resource types (feed, entry, media link entry, service operation, and so forth) described in the OData Basics section above.
The central concepts in the EDM are entities and associations. Entities are instances of Entity Types (for example, Customer, Employee, and so on) which are structured records consisting of named and typed properties and with a key. Complex Types are structured types also consisting of a list of properties but with no key, and thus can only exist as a property of a containing entity or as a temporary value. An Entity Key is formed from a subset of properties of the Entity Type. The Entity Key (for example, CustomerId or OrderId) is a fundamental concept for uniquely identifying instances of Entity Types and allowing Entity Type instances to participate in relationships. Entities are grouped in Entity Sets (for example, Customers is a set of Customer Entity Type instances).
Associations define the relationship between two or more Entity Types (for example, Employee WorksFor Department). Instances of associations are grouped in Association Sets. Navigation Properties are special properties on Entity Types which are bound to a specific association and can be used to refer to associations of an entity.
Finally, all instance containers (Entity Sets and Association Sets) are grouped in an Entity Container.
Putting the above paragraphs into OData terms, the feeds exposed by an OData service are represented by Entity Sets or a Navigation Property on an Entity Type that identifies a collection of entities. For example, the Entity Set identified by the URI https://services.odata.org/OData/OData.svc/Products or the collection of entities identified by the "Products" navigation property in https://services.odata.org/OData/OData.svc/Categories(1)/Products identifies a feed of entries exposed by the OData service.
Each Entry of an OData feed is described in the EDM by an Entity Type and each link between entries are described by a Navigation Property. OData resources are described in the table below.
| OData Resource | Is Described in an Entity Data Model by |
|---|---|
| Collection |
|
| Entry |
|
| Property of an entry |
|
| Complex Type |
|
| Link |
|
| Service Operation |
|
A Service Metadata Document describes the data model (i.e. structure and organization of all the resources) exposed as HTTP endpoints by the service. A Service Metadata Document describes its data in EDM terms using an XML language for describing models called the Conceptual Schema Definition Language (CSDL). CSDL is fully described in [CSDL]. When exposed by an OData service as a Service Metadata Document, the CSDL document is packed using the format described in [EDMX].
An example Service Metadata Document that describes three Entity Types (Categories, Products and Suppliers), the relationships among them and one "ProductsByRating" Service Operation is accessible at https://services.odata.org/OData/OData.svc/$metadata .
CSDL annotations are used to describe OData specific extensions to CSDL. Those annotations (represented as attributes in the OData metadata namespace) are described in the table below. Note: additional Atom format specific CSDL annotations are defined in [OData: Atom].
| Annotation | Description |
|---|---|
| IsDefaultEntityContainer | A CSDL document may include many Entity Containers; this attribute is used by data services to indicate the default container. As described in [OData:URI], Entities in the default container do not need to be container-qualified when addressed in URIs.This attribute may be present on any element in a CSDL documentValues: true | false |
| DataServiceVersion | Indicates the version of the OData annotations used in the Service Metadata Document. Consumers of a data service metadata endpoint should first read this attribute value to determine if they can safely interpret all constructs within the document.This attribute should be present on all elements. |
| HasStream | This attribute is used on an element to state that the Entity Type is describing a Media Link Entry in the associated OData service.Values: true | false |
| MimeType | This attribute is used on a element to state the mime type of the property value. This mime type is used as the value of the Content-Type response header when the "raw" value of the property is retrieved. |
| HttpMethod | This attribute is used on a element which describes a Service Operation exposed by the OData service. The value of this attribute specifies the HTTP method to be used when invoking the Service Operation as described in [OData:Operations]. |
The Abstract Type System used to define the primitive types supported by OData is defined in detail in [MC-CSDL] (section 2.2.1). Table 2 summaries the set of primitive types supported as well as how each MUST be represented when used in an OData URI or HTTP header. Primitive type representations in request and response payloads are defined in the [OData:Atom] and [OData:JSON] specifications.
| Primitive Types | Literal Form | Example |
|---|---|---|
| Null Represents the absence of a value |
null | Example 1: null |
| Edm.Binary Represent fixed- or variable- length binary data |
binary'[A-Fa-f0-9][A-Fa-f0-9]*' OR X '[A-Fa-f0-9][A-Fa-f0-9]*' NOTE: X and binary are case sensitive. Spaces are not allowed between binary and the quoted portion. Spaces are not allowed between X and the quoted portion. Odd pairs of hex digits are not allowed. | Example 1: X'23AB' Example 2: binary'23ABFF' |
| Edm.Boolean Represents the mathematical concept of binary-valued logic |
true | false | Example 1: true Example 2: false |
| Edm.Byte Unsigned 8-bit integer value |
[0-9]+ | Example 1: 255 |
| Edm.DateTime Represents date and time with values ranging from 12:00:00 midnight, January 1, 1753 A.D. through 11:59:59 P.M, December 9999 A.D. |
datetime'yyyy-mm-ddThh:mm[:ss[.fffffff]]' NOTE: Spaces are not allowed between datetime and quoted portion. datetime is case-insensitive | Example 1: datetime'2000-12-12T12:00' |
| Edm.Decimal Represents numeric values with fixed precision and scale. This type can describe a numeric value ranging from negative 10^255 + 1 to positive 10^255 -1 |
[0-9]+.[0-9]+M|m | Example 1: 2.345M |
| Edm.Double Represents a floating point number with 15 digits precision that can represent values with approximate range of Â± 2.23e -308 through Â± 1.79e +308 |
[0-9]+ ((.[0-9]+) | [E[+ | -][0-9]+])d | Example 1: 1E+10d Example 2: 2.029d Example 3: 2.0d |
| Edm.Single Represents a floating point number with 7 digits precision that can represent values with approximate range of Â± 1.18e -38 through Â± 3.40e +38 |
[0-9]+.[0-9]+f | Example 1: 2.0f |
| Edm.Guid Represents a 16-byte (128-bit) unique identifier value |
guid'dddddddd-dddd-dddd-dddd-dddddddddddd' where each d represents [A-Fa-f0-9] | Example 1: guid'12345678-aaaa-bbbb-cccc-ddddeeeeffff' |
| Edm.Int16 Represents a signed 16-bit integer value |
[-][0-9]+ | Example 1: 16 Example 2: -16 |
| Edm.Int32 Represents a signed 32-bit integer value |
[-] [0-9]+ | Example 1: 32 Example 2: -32 |
| Edm.Int64 Represents a signed 64-bit integer value |
[-] [0-9]+L | Example 1: 64L Example 2: -64L |
| Edm.SByte Represents a signed 8-bit integer value |
[-] [0-9]+ | Example 1: 8 Example 2: -8 |
| Edm.String Represents fixed- or variable-length character data |
'<any UTF-8 character>' Note: See definition of UTF8-char in [RFC3629] | Example 1: 'Hello OData' |
| Edm.Time Represents the time of day with values ranging from 0:00:00.x to 23:59:59.y, where x and y depend upon the precision |
time'<timeLiteral>' timeLiteral = Defined by the lexical representation for dayTimeDuration in http://www.w3.org/TR/xmlschema11-2/#dayTimeDuration | Example 1: PT13H20M |
| Edm.DateTimeOffset Represents date and time as an Offset in minutes from GMT, with values ranging from 12:00:00 midnight, January 1, 1753 A.D. through 11:59:59 P.M, December 9999 A.D |
datetimeoffset'<dateTimeOffsetLiteral>' dateTimeOffsetLiteral = Defined by the lexical representation for datetime (including timezone offset) at http://www.w3.org/TR/xmlschema-2 | Example 1: 2002-10-10T17:00:00Z |
This document defines versions 1.0 and 2.0 of the Open Data Protocol (OData). Version 2.0 is a superset of the functionality available in Version 1.0. The majority of this document applies to both versions of OData. Any constructs or semantics that only exist in v2.0 are explicitly denoted as such.
OData is comprised of URL conventions, payload conventions, and HTTP interaction semantics. The OData protocol rules governing these three areas are versioned in a single OData protocol version number. The OData versioning scheme ensures that clients and servers do not misinterpret a request/response and that servers work as seamlessly as possible with clients that support a lower version number of the protocol. OData does not require all clients and servers that wish to interact to speak the same version of the OData protocol.
OData supports limited capability negotiation using the DataServiceVersion and MaxDataServiceVersion version request headers and the DataServiceVersion response header. While not mandated on each request/response, clients and servers are highly encouraged to include these headers with all requests and responses to ensure no misinterpretation occurs.
On a request from the client to an OData service, the DataServiceVersion and MaxDataServiceVersion version headers may be specified. If present on the request, the DataServiceVersion header value states the version of the Open Data Protocol used by the client to generate the request. If no DataServiceVersion header is provided, then the server must assume a value equal to the maximum version number the server supports.
If present on the request, the MaxDataServiceVersion header value specifies the maximum version number the client can accept in a response. A client should set this value to the maximum version number of the protocol it is able to interpret. If the header is not present in a request, the server must assume the same version number as that specified by the DataServiceVersion header. If a DataServiceVersion header is not present, then the server should assume the client can interpret the maximum version number that the server can interpret.
When the server receives a request, it must validate that the version number specified in the DataServiceVersion header (or derived value if the header is not present) is less than or equal to the maximum version number it supports. If it is not, then the server must return a response with a 4xx response code. The server should also return a description of the error using the OData XML-based error format in or OData JSON error format, as described in [OData:Atom] and [OData:JSON].
In addition, a server must validate that the version number specified in the MaxDataServiceVersion header (or derived value if the header is not present) is greater than or equal to the minimum version number the server needs to use to generate the response. If it is not, then the server must return an error response using the OData XML error format or OData JSON error format, as described in [OData:Atom] and [OData:JSON].
On a response from server to client, the DataServiceVersion header should be specified. The value states the OData version the server used to generate the request and that should be used by the client to determine if it can correctly interpret the response (that is, the value is not larger than the value of the MaxDataServiceVersion header sent in the associated request). The value of the header should be the lowest version of the protocol the server can use to fulfill the request.
The Open Data Protocol is based on HTTP, AtomPub, and JSON and thus is subject to the security considerations applicable to each of those technologies. OData implementers are encouraged to review:
The Open Data Protocol does not define a new scheme for authentication or authorization. Instead, implementers of OData services may opt to use the authentication and authorization technologies that fit best with their target scenario.
The use of authentication mechanisms to prevent the insertion or editing of resources exposed by an OData service by unknown or unauthorized clients is recommended but not required.


{% extends "base.html" %} {% block content %}
Globally, animal species are disappearing at an alarming rate as a result of human activity. As climate variation alters weather patterns, the seasonal ranges of even the healthiest populations are changing rapidly and are currently poorly tracked. The advent of remote camera traps is expanding the ability of researchers to collect data on animal species in many environments, but organizing and processing this volume of data presents its own challenges.
CritterCounter addresses these challenges by providing an automated image classification tool for processing wildlife camera trap data. Based on a large corpus of labeled camera trap images, our machine vision model identifies the species in every shot. Designed in consultation with wildlife researchers in Washington State, CritterCounter allows users to spend less time cleaning and organizing their data and more time learning from it.


I am a UX designer, service design and creative leader that applies my experience in design thinking, product design and user research to work that I find meaningful. I've worked directly with policy writers, health data experts and senior staff in multiple federal agencies to deliver practical solutions to critical government services that were crumbling under the weight of complex regulations and decades of debt.
As a design leader, I have established a collabroative design practice at a non-profit, led large UX teams on complex government projects, and helped to grow and evolve a design practice of 30+ designers.
I'm a graduate of the MICA Social Design program where we practiced design research, critical analysis of social problems and collaborative, human centered approaches to design. I spent my time in the program considering the way that design can be employed as a strategy to inform the development of interventions, rather than only as a tool to help produce a potentially ill-planned end product.
In a Nutshell
9 – 5 nut
- Creative Leadership
- Facilitation
- Design Research
- Service Design
- Strategic Design
- Systems Thinking
- User Experience
- Visual Design
- Branding
- UI Design
- Biomimetic Thinking
- FE Development
5 – 9 nut
- mountains/lakes/rivers
- cooking/baking
- biking/hiking
- coffee
- pottery


Spain's Socialists and Podemos reach preliminary coalition deal
MADRID: Spain's Socialists and far-left Unidas Podemos party agreed on the basis of a coalition government on Tuesday (Nov 12), just two days after a parliamentary election delivered a highly fragmented parliament.
The election - the country's fourth in four years - left Spain's parliament even more divided than a previous ballot in April, with the Spanish Socialist Workers' Party (PSOE) retaining its lead but further away from a majority.
"It's a deal for four years," Socialist leader Pedro Sanchez, who is currently acting prime minister, said after signing the pact alongside Podemos leader Pablo Iglesias.
The unexpectedly fast preliminary agreement would require further steps including bringing in smaller parties and agreeing on who gets what position in the cabinet.
If confirmed, it would be Spain's first coalition government since the country's return to democracy in the late 1970s.
"Spain needs a stable government, a solid government," Sanchez said, adding that the deal was open to others.
The combination of the 120 seats obtained by the Socialists and the 35 of Unidas Podemos falls short of a majority in the 350-seat parliament.
The Socialists and Podemos had tried and failed to strike a government deal after the April election, which had prompted Sanchez to call the repeat ballot.
The two men had been at odds for months and exchanged harsh words as acrimonious talks failed after the April election.
On Tuesday they were all smiles, hugging after they signed the pact.
"We've reached a preliminary agreement to create a progressive coalition government in Spain, which combines the experience of PSOE with the courage of Unidas Podemos," Iglesias said.
Local media including La Sexta TV said that Iglesias would be deputy prime minister, something which Sanchez had refused in the post-April election talks. Sanchez had also at the time opposed a coalition government. The two leaders said details would come later and did not comment further.
El Diario newspaper said they would try to get other parties on board, including the market-friendly Ciudadanos, far-left Mas Pais and the Basque nationalist PNV.


Experience
Add Position
Company Name
Title
Time Period
January
February
March
April
May
June
July
August
September
October
November
December
-
January
February
March
April
May
June
July
August
September
October
November
December
Description
Save
Cancel
Education
Add Education
School
Dates Attended
-
Degree
High School
Pre-University
Bachelor's Degree
Master's Degree
Field of Study
CGPA/Percentage
Save
Cancel
Projects
Add Project
Name
Date
January
February
March
April
May
June
July
August
September
October
November
December
Project URL
Description
Save
Cancel


At FamilyFlavours, HomeChefs are the talented home cooks who want to showcase their talent to the community, all the while being able to cook for people who are looking for simple homecooked meals.
You create a profile with us and after your quality checks are in place, you can go ahead and create and offer meals.
Key Features:
1. Cook at the comfort of your home
2. Commit to quantity of meals that suits you.
3. Meal Delivery is hassle free and is handled by our well-trained staff.
4. Seamless payment system
Be a HomeChef TODAY!!!!!


--- layout: post permalink: penboutiqueltd.html Tags: Array NameOfCoupon: Pen Boutique Ltd Cash Back Summary: See our Pen Boutique Ltd Coupon Code, Pen Boutique Ltd Rebate, Pen Boutique Ltd Promo Code, Pen Boutique Ltd Discount, Pen Boutique Ltd Coupon Cash Back Rebate here.  We have the best Pen Boutique Ltd Rebate anywhere. thesis_keywords: Pen Boutique Ltd, Pen Boutique Ltd Coupon Code, Pen Boutique Ltd Discount, Pen Boutique Ltd Rebate product_name: Pen Boutique Ltd hop_url: http://www.icouponblog.com/hop.php?id=199 ---
Looking for the perfect graduation or wedding present? Let Pen Boutique Ltd help you. Pen Boutique Ltd is a leading provider of a diverse range of gift items. They mainly provide writing instruments, however, you’ll be pleased to find much more in their inventory. If you’re looking for a unique and thoughtful present, Pen Boutique Ltd is definitely the place to shop.
Pen Boutique Ltd offers writing instruments from leading brands like, Montblanc, Cartier, Waterman, Graf Von Faber Castell, Cross, Parker. Pen Boutique Ltd has expanded its collection with executive and leather goods as well. Their convenient and easy-to-navigate website allows you to choose items by category like business and laptop cases, desk accessories, men’s jewelry, gift cards and fine pens. You can also save time by shopping for pens by department. You can choose from calligraphy pens to everyday writing pens. Pen Boutique Ltd will quickly become your favorite site for exquisitely crafted and superior quality fine pens and presents.
Take advantage of this opportunity and save money on all your Pen Boutique Ltd purchases. The Pen Boutique Ltd Coupon above will allow you to purchase your favorite Pen Boutique Ltd items and also add some green to your wallet. Whether you’re shopping for your boss or buying yourself a little present, Pen Boutique Ltd is the place to go. Saving money with the Pen Boutique Ltd Rebate is the only thing you’ll enjoy more than the products Pen Boutique Ltd offers. So start buying and saving today!


Flight of Bulgarian PM Lands in Sofia Due to Navigation Gear Malfunction - Reports
The head of the Bulgarian government was returning from Thessaloniki, Greece where he met with his Greek counterpart Kyriakos Mitsotakis and North Macedonian PM Zoran Zaev.
According to BGNES, a Bulgarian government Falcon with Prime Minister Boyko Borisov had to perform an emergency landing in the capital city of Sofia.
The landing gear broke down during the first attempt to land, so the plane's pilot had to attempt a manual landing. Fortunately, the incident resulted in no casualties, and Borisov managed to reach his destination safely.
It is not clear, however, what caused the dangerous malfunction on board.


---
sort_order: 38
tei_id: rdx_b5h9g.p.idp6860288
annotation_count: 0
images:
small-thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcjh5/mini-thumbnail/
json: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcjh5/info/
full: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcjh5/fs/
page: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcjh5/single-page/
thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcjh5/thumbnail/
title: Page 38
number: 38
---
{% raw %}30{% endraw %}
{% raw %}JACOB HODGES{% endraw %}
{% raw %}return unto the Lord, and he will have{% endraw %}
{% raw %}mercy upon him, and unto our God, for{% endraw %}
{% raw %}he will abundantly pardon: For my{% endraw %}
{% raw %}thoughts are not your thoughts, neither{% endraw %}
{% raw %}are my ways your ways, saith the Lord{% endraw %}
{% raw %}For as the heavens are higher than{% endraw %}
{% raw %}the earth, so are my ways higher than{% endraw %}
{% raw %}your ways, and my thoughts than your{% endraw %}
{% raw %}thoughts.'{% endraw %}
{% raw %}" I found this gave me great encourage{% endraw %}
{% raw %}meut to go on to pray, to see if I could{% endraw %}
{% raw %}find relief from all my troubles—the load{% endraw %}
{% raw %}of sin that was on my heart. I thought{% endraw %}
{% raw %}and prayed, and the more I prayed the{% endraw %}
{% raw %}more wretched I grew; the heavier my{% endraw %}
{% raw %}sins appeared to be.{% endraw %}
{% raw %}" A night or two after this, the chaplain{% endraw %}
{% raw %}came to my eel', and asked me how I felt.{% endraw %}
{% raw %}I told him my sins were greater than I{% endraw %}
{% raw %}could bear—so guilty—so heavy. Ho{% endraw %}
{% raw %}asked me if I thought praying would{% endraw %}
{% raw %}make my sins any less. I gave him no{% endraw %}
{% raw %}answer. He soon left me, and I went{% endraw %}
{% raw %}again to prayer. I was almost fit to ex¬{% endraw %}
{% raw %}pire." At this time, Jacob had but just{% endraw %}


SonicBase™
SonicBase™
HEALTH
QUERY STATS
Time:
15 minutes
1 hour
6 hours
24 hours
7 days
30 days
today
yesterday


Our team is always looking for support from members and businesses from the community in any way possible. We rely on students, mentors, and donations from the community to keep us going.
We are always looking for new people to join our team. All you need to join is to be a student of EDUHSD. You don't need any previous knowledge of robotics to join! We welcome students of all fields.
In addition to students, we are always looking for people with engineering and business knowledge to mentor. Whether you're a programmer, machinist, electrician, carpenter, painter, analyst, or anything else, we have room for you!
Becoming a sponsor is the one of the easiest ways to support us. Our budget relies solely on the donations we receive from our sponsors, so we greatly appreciate any contributions!
| TITLE | RECOGNITION | DONATION |
|---|---|---|
| DIAMOND | $5,000 - Up |
Thank you and your name on our ROBOT, website, t-shirts, and banner.
Highest contributor's name on FRC scoreboard as part of team name whenever our team name is displayed. Your name included in our "official team name" which appears in the FRC Competition Program and in FIRST financial reports. Nationwide exposure for your business. |
| GOLD | $1,000 - $4,999 |
Thank you and your name on our ROBOT, website, t-shirts, and banner.
Your name included in our "official team name" which appears in the FRC Competition Program and in FIRST financial reports. Nationwide exposure for your business. |
| SILVER | $500 - $999 | Thank you and your name on our website and t-shirts. |
| BRONZE | Up to $499 | Thank you and your name on our website. |
We are a non-profit state entity under section 170(c)(3) of the tax code. Our tax ID# will be supplied to donors from EDUHSD upon request.
If you have any questions, please contact Patricia Ferrell (Team Advisor)
'
E-mail<EMAIL_ADDRESS>Phone:<PHONE_NUMBER>
EDUHSD Robotics Team
EDUHSD Virtual Academy
6540 Koki Lane
El Dorado, CA 95623
Checks made out to "EDUHSD Robotics"


We are currently obtaining SSL/TLS certificates to secure your Snikket service.
The login page should appear in a moment. If not, please reload the page.
If this page appears for more than a few minutes, there may be a problem. Check that all components of Snikket are started properly, that your DNS is correct, and that port 80 is open.


public class BrowserFactory extends Object
| Modifier and Type | Method and Description |
|---|---|
static void |
attachAnimatedGif()
|
static void |
attachBrowserLogs()
|
static void |
closeAllDrivers()
Close all open browser instances.
|
static int |
getActiveDriverSessions()
|
static org.openqa.selenium.WebDriver |
getBrowser()
Given that there is no test data file, read the target browser
value from pom
configuration (overridable from jenkins), if "Default" it fails because it
will not be able to read the "Target Browser" cell value from the configured
test data file.
|
static org.openqa.selenium.WebDriver |
getBrowser(ExcelFileManager testDataReader)
Deprecated.
Read the target browser value from pom configuration (overridable
from jenkins), if "Default" it reads the "Target Browser" cell
value from the configured test data file.
|
static org.openqa.selenium.WebDriver |
getBrowser(String browserName)
Create and/or return an instance of the target browser (maintains
a single
instance per browser type) and checks for cross-compatibility between the
selected browser and operating system
|
static void |
startAnimatedGif()
|
public static org.openqa.selenium.WebDriver getBrowser()
@Deprecated public static org.openqa.selenium.WebDriver getBrowser(ExcelFileManager testDataReader)
testDataReader
- the current instance of the Excel reader used for
reading test data
public static org.openqa.selenium.WebDriver getBrowser(String browserName)
browserName
- the name of the browser that you want to run,
currently
supports 'MozillaFirefox', 'MicrosoftInternetExplorer',
'GoogleChrome', and 'MicrosoftEdge'
public static void closeAllDrivers()
public static void attachBrowserLogs()
public static void startAnimatedGif()
public static void attachAnimatedGif()
public static int getActiveDriverSessions()
Copyright © 2018. All rights reserved.


Juventus stay top and maintain winning routine against Torino
TURIN, Nov 3 — Juventus stayed top of Serie A and maintained their winning routine in fixtures against their less glamorous neighbours Torino when a second-half goal from Matthijs de Ligt gave them a 1-0 away win in yesterday’s Derby della Mole.
The 20-year-old Dutchman hooked the ball in following a corner midway through the second half of a scrappy, bad-tempered match.
Bremer had the ball in the net for Torino in stoppage time but it was ruled out for offside.
Juventus, chasing a ninth successive title, lead with 29 points from 11 games, one ahead of Inter Milan who earlier won 2-1 at Bologna. — Reuters


The first service to create is the searchBuilderPanel
service. The purpose of this service is to manage all
the properties of the modal-inset-panel
from one place. This is particularly useful in this modal as some
of the search-components
should also be able to open the panel and display content in them. As this is all
handled in a service it can simply be injected into any component that wants to control the panel.
The following code is used to create the service:
The second service to create is the searchBuilderId
service. The purpose of this service is to ensure each component
gets a unique id.
The following code is used to create the service:


EmbedRank.
Can word importance be derived from a word embedding?
Introduction
This exploration was motivated by work with Intuit through Machine Learning at Berkeley. The goal was to investigate some novel methods for keyword extraction by using a word embedding space. EmbedRank is inspired by TextRank which is itself inspired by Google's infamous PageRank.
Word Embeddings
Representing words as vectors is a key step before performing any further statistial analysis or natural language. The simplest representation of a word is simply a one-hot encoded vector of the entire dictionary. While this can be suprisingly useful in a lot of contexts, there is an obvious motivation in NLP to represent words as vectors that encode both synctatic and semantic information. While there are more recent embedding methods like GloVe, I'll briefly explain the most common embedding method, word2vec.
word2vec
At a high level, word2vec can be thought of as a single hidden layer "autoencoder", where instead of mapping a word to itself, we map it to surrounding context words (or vice versa). If we represents our words as a one-hot encoded dictionary vector, we can learn to represent these words as the outputs of the hidden layer in two ways:
- Continuous bag of words (CBOW): Using surrounding context words to predict a center target word.
- Skip-gram: Using a center word to predict surrounding context words.
In deciding "surrounding" words, we select a window-size hyperparameter. For example, a window size of 2 would use 2 words before and 2 words after the center word for training.
In the graphic above, we would have a window size of C/2. The left model represents the skip-gram and the right is CBOW. While word2vec learns the weights of both W and W', we ultimately only care about W. Given a dictionary of size V, W takes in a V-dimensional one-hot word vector and maps it to some lower, N-dimensional space. This N-dimensional space, commonly set at N = 300, is our word vector representation!
There is slightly more nuance to the training of these models: CBOW relies on a naive Bayes assumption of surrounding words, and given that V can run into the millions, only a random subset of word weights are updated at each step using a nice trick called negative sampling. Further details on this can be found here.
Keyword Extraction
I'll briefly three frequency and co-occurence based keyword extraction methods: sum tf-idf, Rapid Automatic Keyword Extraction, and TextRank.
Sum tf-idf
Term frequency - inverse document frequency (tf-idf) is a common metric for representing the importance of a word to a document. Document-level vectors of tf-idf are commonly used for a lot of text mining and NLP related tasks.
Term frequency
Given a term t and document d, with a total of n words in the document, the simplest metric for term frequency is simply the relative frequency:
\[TF(t,d) = \frac{n_t}{n} \]To reduce issues related to longer documents, sometimes it may be more effective to use "augmented frequency" with hyperparameter K (often, K = 0.5), that scales a word depending on its proportion relative to the most frequent word:
\[TF(t,d) = K + (1-K) \frac{n_t}{\max_{t'} n_{t'}}\]Inverse document frequency
For some corpus C containing N documents, we calculate inverse document frequency as follows:
\[ IDF(t,C) = log \frac{N}{\sum_d 1(t \in d)}\]From tf-idf to keyword extraction
The metric can be thought of as a way to find the most relevant "rare" words to a document by penalizing commonly occurring words in the entire corpus. While mostly used to identify document keywords, or represent documents as vectors, we can do fairly simple corpus-level keyword extraction by summing the tf-idfs over every document!
RAKE
Rapid Automatic Keyword Extraction (RAKE) is an extremely simple and efficient method for identifying document keywords. From the paper:
The input parameters for RAKE comprise a list of stop words (or stoplist), a set of phrase delimiters, and a set of word delimiters. RAKE uses stop words and phrase delimiters to partition the document text into candidate keywords, which are sequences of content words as they occur in the text. Co-occurrences of words within these candidate keywords are meaningful and allow us to identify word cooccurrence without the application of an arbitrarily sized sliding window.
After every candidate keyword is identified and the graph of word co-occurrences is complete, a score is calculated for each candidate keyword and defined as the sum of its member word scores. We evaluated several metrics for calculating word scores, based on the degree and frequency of word vertices in the graph: (1) word frequency (freq(w)), (2) word degree (deg(w)), and (3) ratio of degree to frequency (deg(w)/freq(w)). The score for each candidate keyword is computed as the sum of its member word scores.
TextRank
TextRank is based on running PageRank on a word co-occurrence matrix of candidate words (i.e. after removing stop words or other preprocessing steps). First, we make this co-occurrence matrix S row-stochastic by scaling each row, such that in this "word digraph", the entry at (i,j) represents the probability that given you are at node/word i, you will take the edge (i,j) with probability S(i,j). We also introduce a dampening factor alpha, that represents the proportion of time following these edges (vs. randomly jumping to another node). This allows us to create a stochastic, aperiodic and irreducible matrix G:
\[ G = \alpha S + (1-\alpha) \frac{1}{n} ee^T\]The TextRank solution is given by a row vector v, which represents the proportion of time a "random surfer" of this digraph would spend at each word. Rankings can then be obtained from v (in reality, the solution usually converges quite quickly):
\[ v = vG^{\infty}\]EmbedRank
This novel method builds on embedding models and PageRank to establish word importance rankings as follows:
- Construct a word-embedding using word2vec, GloVe.
- Narrow the dictionary to some candidate list (i.e. by removing stop words, or retaining only nouns/adjectives).
- Build a similarity matrix between candidate words by using either cosine distance, or a kernel e.g. an RBF kernel, with a gamma hyperparameter that can be tuned as a proxy for how the edge weight in the digraph will decay with distance. Both of these are nice because they are in (0,1) and have a probabilistic flavor.
- Optionally set weights to 0 depending on some similarity threshold, to enforce more sparsity (inspired by the actual PageRank matrix).
- Establish row-stochasticity by scaling rows to sum to 1. This can be done either by dividing elements by row sums, or using generalized softmax with temperature tau:
- Construct a word-embedding using word2vec, GloVe.
Given embedded word vectors V and similarity matrix S, we define cosine similarity, RBF kernel and our row-wise softmax below (here we exclude 0 entries including the diagonals):
\[ cos(\theta) = \frac{V_i \cdot V_j}{||V_i||||V_j||}\] \[ K(V_i,V_j') = \exp(-\gamma ||V_i - V_j||^2)\] \[S'_{i,j} = \frac{\exp \frac{S_{i,j} \cdot 1(S_{i,j}>0)}{\tau}}{\sum_j \exp \frac{S_{i,j} \cdot 1(S_{i,j}>0)}{\tau}} \]Overall, this method can be tuned to explore the tradeoff between how closely a word is associated with its nearer neighbors, and how centered it is relative to the entire embedding. This tradeoff will be influenced by the choice of kernel and hyperparameters, the thresholding and the row-wise scaling (e.g. softmax temperature). While I will aim to benchmark this method in the future, for now we are testing it with domain-specific keywords in personal finance and small business. With the dummy embedding generated in 2D space below (the relationships don't actually mean anything in this case), the following ranks were obtained:
From this simple example, a few preliminary observations can be made:
- Words on the extremes of the embedded space, and words that are further away from others, are given the lowest rank.
- The top ranked words appears closest to the centre of the embedding.
- Stronger clusters of neighbors appear to improve rank.


index.html

<form action="tutorial1.html" method="post" enctype="multipart/form-data">
Post with Form

image upload<input type="file" name="file" id="file" >

product name<input type='text' name='name' id="goods">

description

<textarea name="desc" rows="10" cols="70" class="form-control" id="desc">
</textarea>
<input type="submit" name="up" value="ok" class="btn btn-primary">
</form>

We can use the same server side coding of tutorial2 here.
Because CWFS library will set nameNvalue_ properly with no regard to get, post, multipart/enc post type.
And in case of file uploading, library will add one more infomation,
nameNvalue_["filename"] will be set accordingly.
File contents will be stored to nameNvalue_["file"] in former case.


Studies have found that at least 1 in 3 patients with type 1 diabetes also have hypertension. When hypertension and diabetes co-exist, the effects of one disease tend to make the other worse. This makes for a deadly combination. Diabetes does three things that may increase blood pressure:
Hypertension and diabetes generally coexist because they share similar risk factors, including being overweight, following an unhealthy diet, and living an inactive lifestyle. Patients should report any consistent blood pressure readings of 140/90 or higher to their doctors, as these may result in complications
The combination of hypertension and diabetes can be lethal, and together they can increase the risk of a heart attack or stroke. Having both conditions also increases the risk of kidney disease and problems the blood vessels of the eyes, which could lead to blindness.Smoking increases the risk of both diabetes and hypertension Uncontrolled diabetes is not the only risk factor for hypertension. The chances of having a heart attack or stroke are further multiplied if other risk factors exist, in addition to diabetes. These include:
Lifestyle factors are the best way to lower the risk of high blood pressure and to maintain normal levels. There is a wide body of evidence, which demonstrates that controlling blood pressure in people with diabetes reduces the risk of complications. A study in the United Kingdom (U.K.) followed 1,148 people with diabetes for several years. The participants whose blood pressure was well-controlled had a significantly reduced risk of dying from complications related to diabetes, hypertension, or both.
Losing even a small amount of weight can make a difference in bringing down blood pressure. The National Heart Lung and Blood Institute (NHLBI) points out that losing 10 pounds in weight can reduce blood pressure.
People who live with both hypertension and diabetes should try to be active at least five days a week for at least 30 minutes per day. Regular activity lowers blood pressure and offers many other health benefits.
People with diabetes should already be closely monitoring their diet in order to maintain blood sugar. They should also limit the amount of salt in cooking and avoid adding salt to food to help maintain blood pressure.Reducing alcohol consumption can help control hypertension. The intake of too much alcohol leads to increased blood pressure. Reducing heavy drinking to the recommended amounts of alcohol decreases the risk of hypertension.
Nicotine in cigarettes raises blood pressure and heart rate. It also adds stress to the heart and increases the risk of heart attack and stroke. Smokers with diabetes have a higher risk of serious complications, including:
Blood pressure medication is recommended if blood pressure consistently remains above 140/90 for people with diabetes, despite lifestyle changes. Most people with hypertension will need to keep taking blood pressure medication for the rest of their lives. The only exception would be for someone who blood pressure has been well controlled for significant period of time due to major lifestyle changes, such as losing a lot of weight, being consistently active or after a significant reduction in alcohol consumption.
There are many lifestyle changes that can lower your blood pressure. Nearly all are dietary, but daily exercise is also recommended. Most doctors advise walking briskly for 30 to 40 minutes every day, but any aerobic activity can make your heart healthier.
In addition to lowering blood pressure, physical activity can strengthen the heart muscle. It may also reduce arterial stiffness. This happens as people age, but is often accelerated by type 2 diabetes. Exercise can also help you gain better control of your blood sugar levels.
Work directly with your doctor to develop an exercise plan.
This is especially important if you:
While some people can improve their type 2 diabetes and high blood pressure with lifestyle changes, most require medication. Depending on their overall health, some people may need more than one medication to help manage their blood pressure. Most high blood pressure medications fall into one of these categories:


In this document, we will present several specialized functions for conducting basic tests about key conditions and about relations between tables. We will also describe functions that can be used for splitting and uniting tables.
This section contains information and examples about the following functions:
check_key(.data, ...)
check_subset(t1, c1, t2, c2)
check_set_equality(t1, c1, t2, c2)
When you have tables (data frames) that are connected by key relations, {dm} can help you to verify the assumed key relations and/or determine the existing key relations between the tables. For example, if you have tables:
data_1 <- tibble(a = c(1, 2, 1), b = c(1, 4, 1), c = c(5, 6, 7))
data_2 <- tibble(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9))
and you want to know if a
is a primary key for
data_1
, you can use the check_key()
function:
Mind the error message when a test is not passed.
For data_2
, column a
is a key:
To see if a column of one table contains only those values that are
also present in another column of another table, the
check_subset()
function can be used:
This function is important for determining if a column is a foreign key to some other table. What about the inverse relation?
It should be kept in mind that check_subset()
does not
test if column c2
is a unique key of table t2
.
In order to find out if a (child) table t1
contains a
column c1
that is a foreign key to a (parent) table
t2
with the corresponding column c2
, the
following method should be used:
To check both directions at once, and to find out if the unique
values of c_1
in t_1
are the same as those of
c_2
in t_2
, {dm} provides the function
check_set_equality()
:
Introducing one more table enables us to show how it looks when the test is passed:
data_3 <- tibble(a = c(2, 1, 2), b = c(4, 5, 6), c = c(7, 8, 9))
check_set_equality(data_1, a, data_3, a)
If the test is passed, the return value of the function will be the first table parameter (invisibly). This ensures that the functions can be conveniently used in a pipe configuration.
This section contains information and examples for the functions
check_cardinality_0_n(parent_table, primary_key_column, child_table, foreign_key_column)
check_cardinality_1_n(parent_table, primary_key_column, child_table, foreign_key_column)
check_cardinality_0_1(parent_table, primary_key_column, child_table, foreign_key_column)
check_cardinality_1_1(parent_table, primary_key_column, child_table, foreign_key_column)
examine_cardinality(parent_table, primary_key_column, child_table, foreign_key_column)
The four functions for testing for a specific kind of cardinality of the relation all require a parent table and a child table as inputs. The functions first test if that requirement is fulfilled by checking if:
primary_key_column
is a unique key for
parent_table
foreign_key_column
is a subset of
the set of values of primary_key_column
The cardinality specifications 0_n
, 1_n
,
0_1
, 1_1
refer to the expected relation that
the child table has with the parent table. The numbers ‘0’, ‘1’ and ‘n’
refer to the number of values in the child table’s column
(foreign_key_column
) that correspond to each value of the
parent table’s column (primary_key_column
). ‘n’ means more
than one in this context, with no upper limit.
0_n
means, that for each value of the
parent_key_column
, the number of corresponding records in
the child table is unrestricted. 1_n
means, that for each
value of the parent_key_column
there is at least one
corresponding record in the child table. This means that there is a
“surjective” relation from the child table to the parent table w.r.t.
the specified columns, i.e. for each parent table column value there
exists at least one equal child table column value.
0_1
means, that for each value of the
parent_key_column
, at least zero and at most one value has
to correspond to it in the column of the child table. This means that
there is an “injective” relation from the child table to the parent
table w.r.t. the specified columns, i.e. no parent table column value is
addressed multiple times. But not all of the parent table column values
have to be referred to.
1_1
means, that for each value of the
parent_key_column
, exactly one value has to correspond to
it in the child table’s column. This means that there is a “bijective”
(“injective” AND “surjective”) relation between the child table and the
parent table w.r.t. the specified columns, i.e. the set of values of the
two columns is equal and there are no duplicates in either of them.
Also examine_cardinality()
first performs the above
mentioned tests to figure out, if the parent-child table relationship
criteria are met. Subsequently, two further checks are made to determine
the nature of the relation (surjective, injective, bijective, or none of
these) between the two columns.
Given the following three data frames:
Here are some examples of how the cardinality testing functions can be used:
# This does not pass, `c` is not unique key of d2:
check_cardinality_0_n(d2, c, d1, a)
# This passes, multiple values in d2$c are allowed:
check_cardinality_0_n(d1, a, d2, c)
# This does not pass, injectivity is violated:
check_cardinality_1_1(d1, a, d2, c)
# This passes:
check_cardinality_0_1(d1, a, d3, c)
examine_cardinality()
returns the type of relation,
e.g.:
examine_cardinality(d1, a, d3, c)
examine_cardinality(d1, a, d2, c)
examine_cardinality(d1, a, d1, a)
examine_cardinality(d1, a, d4, a)
Just like the underlying cardinality functions, it will also inform you if any restrictions on cardinality are violated:
The relevant functions are:
decompose_table(.data, new_id_column, ...)
reunite_parent_child(child_table, parent_table, id_column)
reunite_parent_child_from_list(list_of_parent_child_tables, id_column)
The first function implements table normalization. An existing table
is split into a parent table (i.e. a lookup table) and a child table
(containing the observations), linked by a key column (here:
new_id_column
). Basically, a foreign key relation would be
created, pointing from the new_id_column
of the child table
to the parent table’s corresponding column, which can be seen as the
parent table’s primary key column. The function
decompose_table()
does that, as can be seen in the
following example:
mtcars_tibble <- tibble::as_tibble(mtcars)
mtcars_tibble
decomposed_table <- decompose_table(mtcars_tibble, am_gear_carb_id, am, gear, carb)
decomposed_table
A new column is created, with which the two tables can be joined again, essentially creating the original table.
The functions that do the inverse operation, i.e. join a parent and a
child table and subsequently drop the new_id_column
, are
reunite_parent_child()
and
reunite_parent_child_from_list()
. The former takes as
arguments two tables and the unquoted name of the ID column, and the
latter takes as arguments a list of two tables plus the unquoted name of
the ID column:
parent_table <- decomposed_table$parent_table
child_table <- decomposed_table$child_table
reunite_parent_child(child_table, parent_table, id_column = am_gear_carb_id)
Currently, these functions only exist as a low-level operation on
tables. We plan to extend this operation to dm
objects in
the future.


Effect of electronic excitation and B-site composition. ( a) Evolution of the radial distribution function (g(r)) of monoclinic LTO as function of electronic excitation concentration at 300 K. ( b) Evolution of transition temperature as function of excitation concentration and composition for monoclinic Z-LTO compounds.


“Compassion is a mental state endowed with a sense of concern for the suffering of others and aspiration to see that suffering relieved.”
Excerpt From: Tan, Chade-Meng. “Search Inside Yourself: The Unexpected Path to Achieving Success, Happiness (and World Peace).”
What is your experience of compassionate (or not) leadership?
Compassion along with ambition and humility are features of great leaders. I worked both with compassionate and not compassionate leaders in Poland and Ireland. Compassion has very real business benefits that result in stronger relationships, engagement and as a result trust and better work quality.
Do the multiplying goodness meditation. How did you find it?
The idea seems similar to one of the aspects of behaviourism where the new habit is a result of brain creating new connections when action and reaction are repeated long enough. All this may simply be called different ways of learning. I find the multiplying goodness meditation strengthening compassion.
How does the SCARF model apply to your Phase 0 experience so far? How will it apply to bootcamp?
to follow : -)
Do the Tonglen meditation. How did you find it?
“Tonglen" means “giving and receiving in Tibetan. Since our brains respond far more strongly to negative experiences than comparable positive ones, this practice seems powerful and useful however difficult for novice.
Have a difficult conversation. How did it go?
From my experience, those are the conversations that we unconsciously avoid and prepare for them better than usually. I believe that being calm, open-minded, focused on solving the problem and compassionate helps handling the conversation, and the conversation result may be very satisfying.
“This shift is the transformation from “I” to “We.” It is the most important process leaders go through in becoming authentic. How else can they unleash the power of their organizations unless they motivate people to reach their full potential? If our supporters are merely following our lead, then their efforts are limited to our vision and our directions.... Only when leaders stop focusing on their personal ego needs are they able to develop other leaders.2”
George, Bill. CEO of Medtronic, in [Tan, Chade-Meng. “Search Inside Yourself: The Unexpected Path to Achieving Success, Happiness (and World Peace).”]


You can update the tempo at which a mm.Player is playing a NoteSequence by calling setTempo(). To see this, start one of the melodies below, and adjust the tempo slider.
mm.Player
NoteSequence
setTempo()
Tempo: 120


Instant Recharge
Increase customer engagement with our value added Recharge solution
Give your customers an instant recharge solution, which is enabled in majority Banking platform, multiple retail outlets, and many recharge merchants of BillDesk.
Give your customers an instant recharge solution, which is enabled in majority Banking platform, multiple retail outlets, and many recharge merchants of BillDesk.
Our quick and convenient Recharge Solution is integrated with most banking platforms and multiple organisations in India.
Make it possible for your customers to recharge effortlessly through all types of devices – online, mobile, kiosk and walk-ins.
Earn customer appreciation with easy online recharge facilities. Simplify the payment process for all type of prepaid services - Mobile, DTH, Internet, etc. by enabling your customers to pay online from anywhere, at any time.
Enrich relationships by offering your customers secure recharge prepaid services directly through their bank account.
Offer customers a pan-India recharge network through its connections with all type of service providers - mobile, DTH, internet, metro rail, wallets and other prepaid instruments.


SPLETNIK
Kate Middleton and Prince William
reprimanded the presenter for a joke
on Princess Charlotte
read more


Doctors fanpage
Sign up
First name:
Last name:
Nickname:
Gander:
Male
Female
Other
Birthday:
Your age:
E-mail:
Cancle


Cyclic Performance of BBR and Cubic
In the paper “Cycle and Divergence of Performance on TCP BBR” by Miyazawa and Sasaki, the authors show that when BBR and TCP are competing on the same bottleneck, their ‘share’ of the bandwidth will not be consistent. Rather, the dominant flows will cycle between cubic and BBR, where first BBR will dominate the flow for 10 seconds as cubic backs off, and then cubic will dominate the flow as is steals bandwidth during BBR’s rtt probe phase. We aim to confirm this in our panaderia
environment. This cyclic behavior shown in this paper is depicted here:
In this, the ‘troughs’ or the low regions of the BBR flows (whose throughput is shown on the top image) correspond to the peaks of the throughput of the Cubic flows (shown on the bottom image). This behavior is bad. Congestion protocols should aim to provide stable and reliable behavior, but this is indicating a very unstable throughput that ranges from roughly 0 mbit / second to a 100 mbit / second. This is a huge amount of variation.
Validation
Given such a drastic result, we aimed to recreate this in our panaderia
test environment. We did this by combining 3 queueing disciplines:
Netem
with a huge bufferNetem is used to create the delay in the network. Because everything here is a local network with roughly 3ms rtt, we add a small (10ms) delay to the network. The bandwidth for this queue is roughly infinite as we only want to see drops at the TBF bottlneck.
 To avoid the token bucket filter burstiness, we use a second token bucket filter with a smaller bucket.
TBF
80mbit token bucket filter with a smaller bucket, and $225{,}000$ byte queueThe BDP in this network is $bandwidth * delay$, so for our network, it is roughly $80 mbit * 30 ms = 300{,}000 bytes / second$. So, we set the buffer of the bottleneck to just below 1 BDP, at $225{,}000 bytes$. This ensures that, because BBR allows up to 2 BDP of data to be inflight (and thus 1 BDP of data to be in the queue), the queue can be saturated by the BBR flows.
Token bucket filter config
sudo tc qdisc del dev enp3s0 root
sudo tc qdisc add dev enp3s0 root handle 1:0 netem delay 10ms limit 1000
sudo tc qdisc add dev enp3s0 parent 1:1 handle 10: tbf rate 80mbit buffer 1mbit limit 1000mbit
sudo tc qdisc add dev enp3s0 parent 10:1 handle 100: tbf rate 80mbit burst .05mbit limit 225000b
# sudo tc qdisc add dev enp3s0 parent 100:1 handle 1000: tbf rate 80mbit burst .05mbit limit 1000mbit
tc -s qdisc ls dev enp3s0
# https://netbeez.net/blog/how-to-use-the-linux-traffic-control/
# https://wiki.linuxfoundation.org/networking/netem
Results
As the prior paper suggests, we also see cyclic performance between BBR and Cubic flows.
The cubic flows (shown blue and green), and the bbr flows (red and orange) roughly stay in lock-step. As one group goes up, the othe will be throttled. This rotates roughly every 10 seconds, which corresponds to BBR’s round trip polling phase. This makes some sense, as BBR will back off during this phase, and thus allow cubic to ramp up and steal bandwidth. So, during the ramp up phase, there won’t be any available buffer remaining. This will cause BBR to plateau at a much lower throughput than its fair share.
In progress
calculate the loss rate.


These notes were initially written when I visited University of Colorado at Boulder (Sept.-Nov. 2016), where I worked with Dr. Yang Chen, who pointed out that most gyrokinetic simulations essentially employ Frieman-Chen’s nonlinear gyrokinetic equation. Therefore a careful re-derivation of the equation to know the gyrokinetic orderings and physics included in the model is highly desirable, which motivates me to write this note.
This document was written by using TeXmacs[4], a structured wysiwyw (what you see is what you want) editor for scientists. The HTML version of this document is generated by ﬁrst converting the TeXmacs ﬁle to TeX format and then using htlatex to convert the TeX ﬁle to HTML format.


I am a 15 year old male. I am a decently fast speedcuber, which means I can solve the Rubik's Cube pretty fast. I also taught myself many programming languages, including, but not limited to: HTML, Swift, CSS, and C++.
I'm pretty sure the idea for a wiki for PedestriaMC was already thought of, but I put it into action. It started as an idea in my head, when I was first invited to the server by bvsy. I then decided to document what happens in that server, but I quickly saw it was a waste of my time, and proceeded to leave the server. It was about two weeks later when I joined again. I then decided to start documenting it again. It was only a matter of time before I asked [Owner] wiicart if I could make a wiki for PedestriaMC. I went ahead and direct messaged [Owner] wiicart on Discord, asking if I could make a wiki for his Minecraft server. His answer is summed up by a yes. The next day I started my work on it and it took me about a half of a day to put together the file system and basic structure. He approved on how it was turning out and let me proceed with the project.


Supermask.js
A Javascript mask by
Vinícius Chab
Github
Document #1
Phone number
Document #2
Random license plate
Symbols and inverted numbers
Any and no pasting


The DicksonUI requires JavaScript in order to run. Enable JavaScript for localhost and refresh this page.
localhost


A Great Journey...
I have tried 2ct7 a few times with various results. The first time I ingested approximately 30 milligrams on an empty stomach, and followed it with some water. The taste was similar to a tab of MDMA but less strong because of the smaller dose size. At about 3 hours a mild trippiness was achieved, similar to perhaps one hit of weak acid but nothing more, and it lasted for only an hour or so.
A second time I smoked approximately 25mg from a bong and got much more from it. Mild visuals hit after 20 minutes or so and lasted for approximately 3 hours, as did a very introspective, lonely mindset. At about 2.5 hours in, I began to get MDMA-like qualities, wanting to stretch and touch things, and the body roll lasted for perhaps 90 minutes. All in all, it was a semi-decent experience, but nothing like the next one I had.
After having two weak tries with this drug which I have heard such amazing things about, I decided to give it one more try and hope for the best. I had been having a bad time lately with a lot of things, including my job which was worrying me, my inability to relax when with friends, and generally feeling like crap. So at approximately 6:15pm, I loaded my pipe with about 40-50mg of 2ct7 and smoked it alone in my apartment. I held it in as long as I could, and got three good long puffs from the amount. As I exhaled the third hit, the entire world went into a state of nuttiness. I suddenly felt semi-lightheaded, and my vision started becoming very trippy.
 For about an hour I was in a very very strong trip, very similar to strong acid. I sat with a favorite cd of mine by dido and laid on my couch enjoying the light show I was getting and the music. I was getting closed eye visuals at this point, flashes of light splashing through my vision, and when I opened my eyes, things would melt as well as brighten/dim over and over again. I was very detatched from reality for this hour or so, and was very focused on the things that had been bothering me as of late. I worked through mental issues I have worked on for months and couldn't solve, and in this hour or so I came to alot of answers.
At about an hour in, I was becoming very happy, like the onset of a strong MDMA ride, and very tingly body vibes were kicking in. Tracers were not happening as much anymore, and had been replaced with swirling geometric patterns on top of anything. The body feeling at this point was similar to two strong hits of MDMA and I was still getting very strong visuals. At about 3.5 hours in, the visuals pretty much came to a cease and the body roll started to come down. It was all over by about 5 hours from the initial dose.
This last experience definitely changed my mind as to 2ct7 and what it can do. In the space of a few hours it helped me work through alot of personal things that I had tried to for months, gave me a great time with lots of visuals and increased audio perception, and a strong body roll to boot. Very very fun stuff, if you take enough of it.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Chat App
Welcome to Bus Chat App!
Let’s dicovers the new people and chat with them!
Click on the bus to go chat page.


9.6 Ball Lifted or Moved by Outside Influence
const ruleNinePointSix = `If it is ${knownOrVirtuallyCertain}
that an ${outsideInfluence} (including another player in
${strokePlay} or another ball) lifted or ${moved} a player’s
ball:
There is no penalty, and the ball must be ${replaced} on its
original spot (which if not known must be estimated)
(see Rule 14.2).
This applies whether or not the player’s ball has been found.`;
15.1 Loose Impediments
class Impediment {
constructor(isNatural, isGrowing) {
this.isNatural = isNatural;
this.isGrowing = isGrowing;
}
get isLooseImpediment() {
return this.isNatural && !this.isGrowing;
}
}
const leaf = new Impediment(true, false);
leaf.isLooseImpediment // true
14.3 Dropping Ball in Relief Area
function invokeRule() {
let ballDrops = 0;
return function dropBallProcedure() {
if (ballDrops >= 2) {
return placeBall();
} else if (droppedIncorrectly || deliberatelyDeflected) {
dropBallProcedure();
} else if (ballGoesOutsideReliefArea) {
ballDrops++;
dropBallProcedure();
}
return;
};
};
const dropBall = invokeRule();
dropBall();
How would you solve displaying tabular data on a medium to small screen size?
Base Design
Strategies for Table Design
Additional Discussion Points


Quote Generator
A man should always consider how much he has more than he wants.
-Joseph Addison
Get Quote!
Tweet


org.conqat.lib.simulink.model.stateflow
Interfaces
IStateflowChartContainer
IStateflowElement
IStateflowNodeContainer
Classes
StateflowBlock
StateflowChart
StateflowData
StateflowDeclBase
StateflowDeclContainerBase
StateflowElementBase
StateflowEvent
StateflowJunction
StateflowMachine
StateflowNodeBase
StateflowState
StateflowTarget
StateflowTransition
StateflowTruthTable


Web scraping is used to extract data from a website.
A very respected rule between programmers is that we are lazy. That means that any way we can find to make writing code easier will be put to use. We have variables to hold pieces of information that can be called at a later time. We use methods that can be called to enact a specific behavior of our program over and over without needing to rewrite each line of code. But what can be better than code that writes and updates itself?
Here’s a good example: Let’s say I wanted to have the top news story at the time I run my program to always show up. The top news story will constantly be changing. Instead of having to go in my program and update the story every few hours (which would be completely against a programmer’s oath to laziness), I can have my program “borrow” the story from an actual website that is always being updated with the newest story. Scraping is done by looking through a web pages HTML and following the right HTML tag classes and IDs wrapped around the information I want on my program. Once I collect the right path, any updates made to that area will also automatically update to my program as well.
In order to scrape a website, it requires attention to detail. An HTML file can be very cumbersome with information and if the right path is not followed to get the information needed, the program may end up being a mess. However, when scraping is done correctly, the results are truly amazing and makes writing code a whole lot easier.


Tom has a truck. When he goes on the road, his dog, Baxter, goes with him. Tom and Baxter set off for Bimbi Park with a load of fodder. The road runs along the top of steep cliffs. All of a sudden, a kangaroo hops onto the road. Tom swerves to avoid the kangaroo but the truck careers over the cliff and into the sea. Baxter gets out of the truck but Tom is stuck. Baxter swims to land to get help. He runs into Liz and Bud. Baxter was barking non-stop and looking out to sea. Liz rings "" " and Bud swims to the sinking truck. He helps Tom get out of the truck and gets him to the beach. When the rescue team gets there, Tom is sitting with Bud, Liz and Baxter on the sand. He is in pain but OK apart from his bleeding leg. Tom goes to hospital and Baxter goes with him. Good dog, Baxter!
in-context


Center position for multi-touch, or just the single pointer.
Array with all new/moved/lost pointers.
Total time in ms since the first input.
Movement of the X axis.
Movement of the Y axis.
Direction moved. Matches the DIRECTION constants.
Distance moved.
Event type, matches the INPUT constants.
true when the final (last) input.
true when the first input.
Maximum number of pointers detected in the gesture
Direction moved from it's starting point. Matches the DIRECTION constants.
Primary pointer type, could be touch, mouse, pen or kinect.
Array with all pointers, including the ended pointers (touchend, mouseup).
Reference to the srcEvent.preventDefault() method. Only for experts!
Rotation that has been done when multi-touch. 0 on a single touch.
Scaling that has been done when multi-touch. 1 on a single touch.
Source event object, type TouchEvent, MouseEvent or PointerEvent.
Target that received the event.
Timestamp of a gesture
Name of the event. Like panstart.
Highest velocityX/Y value.
Velocity on the X axis, in px/ms.
Velocity on the Y axis, in px/ms
Generated using TypeDoc
Angle moved.


Koala-detection dog helping to sniff out victims of Australia bushfires
When Bear smells a koala, he sits very still to alert his handler that an animal is nearby.
A dog named Bear has been helping to save injured koalas following devastating bushfires in Australia.
Wearing socks to protect his paws, he is sent into safe burnt-out areas to sniff out koala faeces and fur.
When he smells a koala, he sits very still to alert his handler that an animal is nearby.
Bear is a rescue dog, given up by his former owners as he was not well suited to life as a pet because he was intelligent and highly energetic.
He now works as a koala detection dog for the International Fund for Animal Welfare (IFAW) alongside his handler, Rianna, from the University of the Sunshine Coast’s Detection Dogs for Conservation.
The pair joined a search and rescue effort in the Northern Rivers region of New South Wales, working alongside Friends Of The Koala.
The teams searched an Indigenous Protected Area, Ngunya Jargoon, near Wardell, which has been devastated by two fires in the past month.
The conditions were against Bear, with strong winds making it hard to pinpoint exact locations, but he indicated koalas present at a number of sites, meaning there are still live animals in the area.
The team will now continue the search.
IFAW’s wildlife campaigner, Josey Sharrad, said: “Now, more than ever, saving individual koalas is critical.
“With such an intense start to the bushfire season, it will be many weeks and months before some of these fires are out. All the while, wildlife will continue to need to be rescued and treated and may remain in care for some time.
“The road to recovery will be long. The impact on local communities will be felt for many months, and the toll on native wildlife and critical habitat will never truly be known.
“Northern Rivers koalas are already struggling with prolonged drought, excessive land clearing and development, stress-related disease, dog attacks and car strikes. These animals need us now more than ever.”


Shout Outs: {{pv.player.shoutOuts}}
This player hasn't played any games yet this season!
Total Points: {{pv.player.totalPoints}}
Total Wins:
Bonus Chips: {{pv.player.bonusChips}}
Average Rank: {{pv.player.ranks.average | number:0}}
Best Rank: {{pv.player.ranks.best}}
Worst Rank: {{pv.player.ranks.worst}}


<optgroup> Support
Single Select with Groups
Dallas Cowboys
New York Giants
Philadelphia Eagles
Washington Redskins
Chicago Bears
Detroit Lions
Green Bay Packers
Minnesota Vikings
Denver Broncos
Kansas City Chiefs
Oakland Raiders
San Diego Chargers
Multiple Select with Groups
Dallas Cowboys
New York Giants
Philadelphia Eagles
Washington Redskins
Chicago Bears
Detroit Lions
Green Bay Packers
Minnesota Vikings
Denver Broncos
Kansas City Chiefs
Oakland Raiders
San Diego Chargers


It can be tough to decide which progamming language would be best suited for your personality and goals. We aim to make that decision a little easier by asking some completely relevant questions to help in your quest to become a l33t h4x0r. Please choose from the drop-down menus below and hit the submit button to see what we think is the right fit for you.
C# is a hybrid of C and C++, it is a Microsoft programming language developed to compete with Sun's Java language. C# is an object-oriented programming language used with XML-based Web services on the .NET platform and designed for improving productivity in the development of Web applications.
C# boasts type-safety, garbage collection, simplified type declarations, versioning and scalability support, and other features that make developing solutions faster and easier, especially for COM+ and Web services. Microsoft critics have pointed to the similarities between C# and Java.
Ruby is a simple but powerful object-oriented programming language (everything in Ruby is an object), created by Yukihiro Matsumoto, who goes by the online name "Matz." Ruby programs are compact, yet readable and maintainable. Ruby offers features such as blocks, iterators, meta-classes and others. It can be used to write servers, to experiment with prototypes, and for everyday programming tasks. Ruby is open source and freely available for both development and deployment.
An interpreted, object-oriented programming language developed by Guido van Rossum. The name comes from one of van Rossum's favorite television shows, Monty Python's Flying Circus. Python is very portable since Python interpreters are available for most operating system platforms. Although Python is copyrighted, the source code is open source, and unlike GNU software, it can be commercially re-sold.
We're sorry, your answers don't compute. We honestly don't know what programming language would be best for you. Please complete the survey or choose different answers to get a result.
But, since you like jokes, here's one for you:
In Python, hashtags are used to tell the computer that a line is not worth reading, much like on Twitter.
But, since you like good jokes, here's one for you:
I found out my wife is pregnant and I'm already sweating about what to name this kid. I have a hard enough time deciding what to name my variables, how can I name a human being? Poor little i;
Well, fine. No jokes for you, then.


{# approve/approve.html #} {% extends "approve/base.html" %} {% block point %}
Please review this pre-release video. (Instructions) If you feel the video is ready for the public, {{who}} or inits, or something so we have a clue who did this, and click which queues it up to be un-hidden and announced to the public.


EVO HTML to PDF Converter allows you to add multiple HTML documents into a single PDF document. You can start with an empty PDF document represented by a Document object and then
for each HTML document you add a HtmlToPdfElement object to the PDF document. A HTML to PDF element can be added where the previous element ended or it can be added to a new PDF page.
The options you can set in this demo are:
-
First HTML Page URL. This is the URL of the first HTML document to be added on the first page of the PDF document
-
Second HTML Page URL. This is the URL of the second HTML document to be added in PDF immediately after the first HTML document or on a new PDF page
following the first HTML document
-
Start the Second HTML on a New PDF Page. As the name suggests this option allows you to choose if you want to add the second HTML document immediately
after the first HTML document or on a new PDF page following the first HTML document


Removes all duplicates from an array in place.
First install using npm:
npm install uniq
Then use it as follows:
```javascript
var arr = [1, 1, 2, 2, 3, 5]
require(“uniq”)(arr) console.log(arr)
//Prints: // // 1,2,3,5 // ```
require("uniq")(array[, compare, sorted])
Removes all duplicates from a sorted array in place.
array
is the array to remove items fromcompare
is an optional comparison function that returns 0 when two items are equal, and something non-zero when they are different. If unspecified, then the default equals will be used.sorted
if true, then assume array is already sortedReturns: A reference to array
Time Complexity: O(array.length * log(arra.length))
or O(array.length)
if sorted
A few reasons:
(c) 2013 Mikola Lysenko. MIT License


{<1>}
What is runstar?
The runstar™ application can best be described as a running application for Android with a focus on simplicity and nice graphics. You can get more details about the app here.
The app was coded by me, in my company Bitbetter, and designed by my friends over at Color Monkey. We launched the free version at the end of 2009, then we took a short break, and launched the paid version with more features early 2011.
The free version has had 330 000 downloads with 23% active users. The free version has no income streams, but I still included it to show the amount of downloads, since they convert over to the paid app. Currently the conversion rate is 2.3%. However, that number is actually too low, since the free version has been downloading for more than a year more.
The paid version has had 8 000 downloads with 73% active users. It is priced at $4.99 and we have not changed the price during this time.
During 2011 we made $24 800 in revenue.
Earnings in 2011
The chart shows the accumulated revenue for the paid version of the runstar™ app.
If you look closely, you see a few distinct places where the the line bends up or down. Those places coincide with certain events that proved to have a large impact on sales.
{<2>}
Integrated with RunKeeper and Dailymile - June 23
On June 23, runstar™ released a new version of the paid app that supported logging into and uploading all runs from the runstar™ app to RunKeeper and Dailymile. This was also mentioned in a blog post here. And it was also twittered about here.
RunKeeper has a great iPhone and Android app. RunKeeper also built a platform to hold data, which they later opened up for third party users, like runstar™. Dailymile is another great looking and easy-to-use open running platform that has been around for a while.
Uploading runs online was a very requested feature that we did not have the time to develop ourselves. So when this was released, we saw a 100% increase in sales, and looking at the chart you will see that the line is a bit steeper (=increased daily sales) after June 23.
I’m pretty sure that the boost we saw was not only from just adding new features, but also hooking into the Dailymile and RunKeeper networks.
Featured on Android Market - October 8
On October 8 I found runstar™ featured on Android Market. Amazing! We saw an immediate surge in downloads and it is pretty obvious on the chart when that happened. Our revenue increased with 1000% that first week.
Yep, you heard me right. One. Thousand. Percent.
If you are interested in the details then read my other post on getting featured on Android Market.
Drops off Android Market top 25 list - November 17
As with all good things, they come to an end. Also the crazy runstar™ sales. On November 17 runstar™ dropped off the top 25 list in the health category on Android Market, which brought the sales back to pre-getting-featured-on-Android-Market-levels.
If I was a bit more prepared here, we could have done a sale or something to keep us up there, but we will save that for later.
Lessons Learned
Launching the paid version of runstar™ has taught me a few things:
An app is not a company. If you want to make a living from mobile apps, either build a platform and service with an app promoting it. Or build multiple apps. One app is not enough for me to live on, anyway.
Apps don’t sell themselves. Well, they actually do, but not as fast as they could. So any activity that exposes your app to new people, e.g. hooking it into Facebook or getting featured in an app store, was super important for me.
Next Steps
Even though it did not make me rich, I’m happy with runstar™’s first year. It made $24 800 in nine months, got featured in Android Market, and received tons of positive feedback from users.
But for 2012 I want to step it up a notch. My goal is to reach $50 000 for the year. It probably means some extra marketing activities. And possibly adding some features. And most likely introducing ads in some way.
I never thought ads could be a good source of revenue, but is seems to be working for Droid-Blog, KreCi and Making Money With Android. Very inspired by those guys, and I’ll try it out for runstar™.
Stay tuned for more reports, Martin


| Interface and Description |
|---|
| org.revapi.ElementFilter
use
TreeFilterProvider instead |
| org.revapi.query.Filter
Filtering turned out to be not that usable and will be removed. This class has been superseded by the
TreeFilter . |
| Class and Description |
|---|
| org.revapi.query.DFSFilteringIterator
This always had very limited utility and
Element.stream(Class, boolean) seems to be a more usable
alternative. |
| org.revapi.query.FilteringIterator
Filtering turned out to be more complex than this.
Filter has been superseded by
TreeFilter . |
| org.revapi.Revapi.Builder
favor the
PipelineConfiguration.Builder |
| org.revapi.simple.SimpleConfigurable
use
BaseConfigurable instead |
| org.revapi.simple.SimpleDifferenceTransform
use
BaseDifferenceTransform instead |
| org.revapi.simple.SimpleElement
use
BaseElement instead |
| org.revapi.simple.SimpleElementFilter
use
IndependentTreeFilter or some other TreeFilter instead |
| org.revapi.simple.SimpleElementForest
use
BaseElementForest instead |
| org.revapi.simple.SimpleReporter
use
BaseReporter instead |
| org.revapi.configuration.XmlToJson.JSONPointer
use Jackson's impl
|
| Constructor and Description |
|---|
| org.revapi.Difference(String, String, String, CompatibilityType, DifferenceSeverity, Map<String, String>)
use the full constructor. This will be removed in some future release.
|
| org.revapi.Difference(String, String, String, Map<CompatibilityType, DifferenceSeverity>, Map<String, String>)
use the full constructor. This will be removed in some future release.
|
| org.revapi.Difference(String, String, String, Map<CompatibilityType, DifferenceSeverity>, Map<String, String>, List<String>)
use the full constructor. This will be removed in some future release.
|
| org.revapi.configuration.XmlToJson(Map<String, ModelNode>, Function<Xml, String>, Function<Xml, String>, BiFunction<Xml, String, String>, Function<Xml, List<Xml>>)
use the Jackson-based variant
|
| org.revapi.configuration.XmlToJson(Revapi, Function<Xml, String>, Function<Xml, String>, BiFunction<Xml, String, String>, Function<Xml, List<Xml>>)
use #fromRevapi
|
Copyright © 2014-2021 Lukas Krejci. All Rights Reserved.


| I l@ve RuBoard |
Finally, here is the usual collection of boundary cases, which make life interesting for beginners. Some are so obscure it was hard to come up with examples, but most illustrate something important about Python.
As we've seen, the module name in an import or from statement is a hardcoded variable name; you can't use these statements directly to load a module given its name as a Python string. For instance:
>>> import "string" File "<stdin>", line 1 import "string" ^ SyntaxError: invalid syntax
You need to use special tools to load modules dynamically, from a string that exists at runtime. The most general approach is to construct an import statement as a string of Python code and pass it to the exec statement to run:
>>> modname = "string" >>> exec "import " + modname # run a string of code >>> string # imported in this namespace <module 'string'>
The exec statement (and its cousin, the eval function) compiles a string of code, and passes it to the Python interpreter to be executed. In Python, the bytecode compiler is available at runtime, so you can write programs that construct and run other programs like this. By default, exec runs the code in the current scope, but you can get more specific by passing in optional namespace dictionaries. We'll say more about these tools later in this book.
The only real drawback to exec is that it must compile the import statement each time it runs; if it runs many times, you might be better off using the built-in __ import __ function to load from a name string instead. The effect is similar, but __ import __ returns the module object, so we assign it to a name here:
>>> modname = "string" >>> string = __import__(modname) >>> string <module 'string'>
Earlier, we mentioned that the from statement is really an assignment to names in the importer's scope—a name-copy operation, not a name aliasing. The implications of this are the same as for all assignments in Python, but subtle, especially given that the code that shares objects lives in different files. For instance, suppose we define a module nested1 as follows:
X = 99 def printer(): print X
Now, if we import its two names using from in another module, we get copies of those names, not links to them. Changing a name in the importer resets only the binding of the local version of that name, not the name in nested1:
from nested1 import X, printer # copy names out X = 88 # changes my "X" only! printer() # nested1's X is still 99 % python nested2.py 99
On the other hand, if you use import to get the whole module and assign to a qualified name, you change the name in nested1. Qualification directs Python to a name in the module object, rather than a name in the importer:
import nested1 # get module as a whole nested1.X = 88 # okay: change nested1's X nested1.printer() % python nested3.py 88
As we also saw earlier, when a module is first imported (or reloaded), Python executes its statements one by one, from the top of file to the bottom. This has a few subtle implications regarding forward references that are worth underscoring here:
Code at the top level of a module file (not nested in a function) runs as soon as Python reaches it during an import; because of that, it can't reference names assigned lower in the file.
Code inside a function body doesn't run until the function is called; because names in a function aren't resolved until the function actually runs, they can usually reference names anywhere in the file.
In general, forward references are only a concern in top-level module code that executes immediately; functions can reference names arbitrarily. Here's an example that illustrates forward reference dos and don'ts:
func1() # error: "func1" not yet assigned def func1(): print func2() # okay: "func2" looked up later func1() # error: "func2" not yet assigned def func2(): return "Hello" func1() # okay: "func1" and "func2" assigned
When this file is imported (or run as a standalone program), Python executes its statements from top to bottom. The first call to func1 fails because the func1 def hasn't run yet. The call to func2 inside func1 works as long as func2's def has been reached by the time func1 is called (it hasn't when the second top-level func1 call is run). The last call to func1 at the bottom of the file works, because func1 and func2 have both been assigned.
Don't do that. Mixing defs with top-level code is not only hard to read, it's dependent on statement ordering. As a rule of thumb, if you need to mix immediate code with defs, put your defs at the top of the file and top-level code at the bottom. That way, your functions are defined and assigned by the time code that uses them runs.
Because imports execute a file's statements from top to bottom, we sometimes need to be careful when using modules that import each other (something called recursive imports ). Since the statements in a module have not all been run when it imports another module, some of its names may not yet exist. If you use import to fetch a module as a whole, this may or may not matter; the module's names won't be accessed until you later use qualification to fetch their values. But if you use from to fetch specific names, you only have access to names already assigned.
For instance, take the following modules recur1 and recur2. recur1 assigns a name X, and then imports recur2, before assigning name Y. At this point, recur2 can fetch recur1 as a whole with an import (it already exists in Python's internal modules table), but it can see only name X if it uses from; the name Y below the import in recur1 doesn't yet exist, so you get an error:
module recur1.py
X = 1 import recur2 # run recur2 now if doesn't exist Y = 2
module recur2.py
from recur1 import X # okay: "X" already assigned from recur1 import Y # error: "Y" not yet assigned >>> import recur1 Traceback (innermost last): File "<stdin>", line 1, in ? File "recur1.py", line 2, in ? import recur2 File "recur2.py", line 2, in ? from recur1 import Y # error: "Y" not yet assigned ImportError: cannot import name Y
Python is smart enough to avoid rerunning recur1's statements when they are imported recursively from recur2 (or else the imports would send the script into an infinite loop), but recur1's namespace is incomplete when imported by recur2.
Don't do that....really! Python won't get stuck in a cycle, but your programs will once again be dependent on the order of statements in modules. There are two ways out of this gotcha:
You can usually eliminate import cycles like this by careful design; maximizing cohesion and minimizing coupling are good first steps.
If you can't break the cycles completely, postpone module name access by using import and qualification (instead of from), or running your from s inside functions (instead of at the top level of the module).
The from statement is the source of all sorts of gotchas in Python. Here's another: because from copies (assigns) names when run, there's no link back to the module where the names came from. Names imported with from simply become references to objects, which happen to have been referenced by the same names in the importee when the from ran. Because of this behavior, reloading the importee has no effect on clients that use from; the client's names still reference the objects fetched with from, even though names in the original module have been reset:
from module import X # X may not reflect any module reloads! . . . reload(module) # changes module, not my names X # still references old object
Don't do it that way. To make reloads more effective, use import and name qualification, instead of from. Because qualifications always go back to the module, they will find the new bindings of module names after calling reload:
import module # get module, not names . . . reload(module) # changes module in-place module.X # get current X: reflects module reloads
When you reload a module, Python only reloads that particular module's file; it doesn't automatically reload modules that the file being reloaded happens to import. For example, if we reload some module A, and A imports modules B and C, the reload only applies to A, not B and C. The statements inside A that import B and C are rerun during the reload, but they'll just fetch the already loaded B and C module objects (assuming they've been imported before):
% cat A.py import B # not reloaded when A is import C # just an import of an already loaded module % python >>> . . . >>> reload(A)
Don't depend on that. Use multiple reload calls to update subcomponents independently. If desired, you can design your systems to reload their subcomponents automatically by adding reload calls in parent modules like A .[9]
[9] You could also write a general tool to do transitive reloads automatically, by scanning module __ dict __s (see the section Section 5.6.7), and checking each item's type() to find nested modules to reload recursively. This is an advanced exercise for the ambitious.
| I l@ve RuBoard |


i.e. points before transformation.
- Tap to create a red domain point.
- Hold to create a black fixed point.
- Drag to move them.
i.e. points after transformation.
- A blue range point is created for each domain point.
- Drag to move them.
- Refresh the page to reset.
_


Binary Britain is a virtualisation of Britain built and based on statistics.
0
Latitude, Longitude:
County:
Weather: