The TripIt API allows a developer to programatically create, delete, and retrieve objects from the TripIt platform. The v1 API supports all of the object types that the TripIt platform is currently capable of managing. The list of object types is as follows:
In addition to being capable of directly creating, deleting, and retrieving these objects the API can retrieve lists of objects such as all of a user's upcoming trips or all travel objects contained within a specific trip.
If you are planning to use the TripIt API in any of the languages below, we recommend that you use one of our API language bindings. The bindings all provide an interface to all of the TripIt API endpoints and data object types along with a full OAuth Consumer implementation. No additional code needs to be downloaded to begin interacting with the TripIt API, and no need to worry about OAuth internal implementation details.
Our main GitHub repository is https://github.com/tripit. The specific bindings for each language are listed below:
The TripIt API offers a very simple way of authenticating the API that should only be used for testing and development purposes. When building an application you should ultimately use the OAuth authentication scheme for allowing TripIt users to grant access to their data for your application. Note that this authentication scheme is off by default for every TripIt user. If you want to have this turned on for your account so you can use it for development purposes please send email to<EMAIL_ADDRESS>Enabling Basic Authentication for an account does not disable OAuth authentication for that same account.
The web authentication scheme relies on HTTP's authentication RFC to authenticate clients of the TripIt API using a TripIt username (i.e. email address) and password. This authentication scheme may be limited or turned off by default in future versions of the TripIt platform and therefore should not be relied upon for production application development. It is a very simple and useful way to get started with the API.
To make a web authenticated request of the API simply add the following HTTP header into the request:
Authorization: Basic <base64 encoded token>
Where <token> is a base64 encoded string that includes the TripIt user's email address and password separated by a colon (i.e. example@example.com:secretpassword). Here is an example:
TripIt user<EMAIL_ADDRESS>has a password of secretpassword. A client trying to authenticate with the API as this user would send the following HTTP Authorization header with each request:
Authorization: Basic ZGVubWFya0B0cmlwaXQuY29tOnNlY3JldHBhc3N3b3Jk
The API does not manage sessions so it is required that a client send the user's credentials on every request.
Here is a simple example of how you might use curl to query the API via the web authentication scheme:
$ curl -k -D /dev/tty --user <username>:<password> https://api.tripit.com/v1/list/trip HTTP/1.1 200 OK Server: nginx/0.6.32 Date: Wed, 03 Dec 2008 21:55:59 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache <Response> <Trip> <id>770827</id> <start_date>2008-12-17</start_date> <end_date>2008-12-27</end_date> <display_name>New York, NY, December 2008</display_name> <image_url>/images/places/general.jpg</image_url> <is_private>false</is_private> <is_traveler>true</is_traveler> <primary_location>New York, NY</primary_location> <PrimaryLocationAddress> <address>New York, NY</address> <city>New York</city> <state>NY</state> <country>US</country> <latitude>40.714269</latitude> <longitude>-74.005973</longitude> </PrimaryLocationAddress> </Trip> </Response>
You can find more information about the OAuth specification here.
It is beyond the scope of this document to describe the fundamental concepts of the OAuth specification. It is recommended that anyone trying to implement an OAuth Consumer of the TripIt API should be familiar with the documentation listed in the 'References' section as the rest of the documentation is written assuming the reader understands OAuth terminology and concepts. The following 4 steps are heavily modeled on the OAuth 1.0 specification document itself. The similarities are not a coincidence and each step tracks back to the relevant section in the spec so the reader can more easily follow along.
During the following steps you will need to store data from the consumer and associate it with the user account in the consumer. Here's a summary of what the consumer needs to store, when it needs to store it, and for how long.
| What | When | Until | Description |
|---|---|---|---|
| oauth_token (request token) | After Step 1 | After Step 3 | This is the public part of the request token and is needed to obtain user authorization (step 2) and obtain an authorized access token (step 3). After step 3 it can be safely discarded and replaced with its authorized counterpart. |
| oauth_token_secret (request token) | After Step 1 | After Step 3 | This is the private part of the request token and is needed to obtain user authorization (step 2) and obtain an authorized access token (step 3). After step 3 it can be safely discarded and replaced with its authorized counterpart. |
| oauth_token (authorized access token) | After step 3 | Indefinitely | This is the public part of the authorized access token that a consumer needs to access protected resources on behalf of a TripIt user. If all goes well and the TripIt user grants access to the consumer the consumer should be able to obtain this after step 3. It should be stored indefinitely and associated with the user's account on the consumer. |
| oauth_token_secret (authorized access token) | After step 3 | Indefinitely | This is the private part of the authorized access token that a consumer needs to access protected resources on behalf of a TripIt user. If all goes well and the TripIt user grants access to the consumer the consumer should be able to obtain this after step 3. It should be stored indefinitely and associated with the user's account on the consumer. |
To obtain a request token POST the following request parameters to the URL:
https://api.tripit.com/oauth/request_token
| parameter name | parameter description |
|---|---|
| oauth_consumer_key | The Consumer's public key. |
| oauth_nonce | A nonce no more than 80 characters in length. |
| oauth_signature | The signature of the request. The algorithm to sign the request is described in the OAuth specification and examples can be found in the reference implementations. |
| oauth_signature_method | The method used to generate the method signature. Current supported methods are HMAC-SHA1. |
| oauth_timestamp | The timestamp in seconds since the epoch given in UTC. Note that the server will respond with a 401 (unauthorized) if the timestamp supplied by the client is more than +/- 3 hours from what the server considers the current time. |
| oauth_version | OPTIONAL - Assumed to be '1.0' |
The server will respond with the following in the response body:
oauth_token=7d41de0eaf0d518786851a64bf7505e29177b75e&oauth_token_secret=2e8c29e961d02a1aa61b916c908c90200fcdef7e
These are the unauthorized access token and secret that will be needed to obtain user authorization in step 2. The Consumer should store both values for future use.
Using the unauthorized access token obtained in step 1 the Consumer application should redirect the user to the following page:
https://www.tripit.com/oauth/authorize?oauth_token=<oauth_token>&oauth_callback=<oauth_callback>
Alternatively, if you are trying to authorize on a mobile app such as an iPhone, direct the user to here:
https://m.tripit.com/oauth/authorize?oauth_token=<oauth_token>&oauth_callback=<oauth_callback>
The two request parameters have the following meaning:
NOTE: It is extremely important that you clearly redirect the user to the TripIt URL so they have confidence that they aren't being phished for their TripIt username and password. This means you should make sure on a regular browser that the frame you use to redirect the user has the address bar of the frame clearly visible. On a mobile device such as an iPhone you should launch Safari and not use the embedded WebView class.
| parameter name | parameter description |
|---|---|
| oauth_callback | This is the callback URL that TripIt will use upon successful access token authorization. This parameter is optional if you associated a URL with your application when you registered it and obtained your OAuth consumer key and secret. If you supplied a URL when you registered the application, providing this request parameter will override that value. If neither the application URL is set nor the oauth_callback parameter is supplied the user will get an error when taken to the /oauth/authorize page and will be unable to authorize the access token. It is highly encouraged that you explicitly provide an oauth_callback URL when linking to the /oauth/authorize page. Providing this URL gives you the flexibility of defining a different URL that is associated with your action on which you can provide marketing text and a description of your application and what it does. |
| oauth_token | The oauth_token obtained in step 1. This is the access token the Consumer will now be trying to get the user of to authorize. |
If the user is able to successfully log in to TripIt and chooses to grant authority to the Consumer application (or not), the user is redirected back to the oauth_callback or default URL with a single request parameter: oauth_token. At this point the Consumer does not know whether or not the oauth_token has been successfully authorized. To find out, the Consumer must implement step 3.
To obtain an authorized access token, POST the following request parameters to the URL:
https://api.tripit.com/oauth/access_token
| parameter name | parameter description |
|---|---|
| oauth_consumer_key | The Consumer's public key. |
| oauth_nonce | A nonce no more than 80 characters in length. |
| oauth_signature | The signature of the request. The algorithm to sign the request is described in the OAuth specification and examples can be found in the reference implementations. |
| oauth_signature_method | The method used to generate the method signature. Current supported methods are HMAC-SHA1. |
| oauth_timestamp | The timestamp in seconds since the epoch. |
| oauth_token | The request token obtained in Step 1. |
| oauth_token_secret | The request token secret obtained in Step 1. |
| oauth_version | OPTIONAL - Assumed to be '1.0' |
The server will respond with the following in the response body:
oauth_token=c174450a65d9d5e72de2910fed22fb8879fb1439&oauth_token_secret=1d1291e53cf3f9e89c377109f0ccee244a95d273
These are the authorized access token and secret that will be needed to make future API requests on behalf of the user that authorized them. The Consumer should store both values until the user asks for the Consumer to forget about them either directly or indirectly (e.g. the user delete's their account with the Consumer application).
Once the Consumer has obtained an authorized access token from the service provider it can now make requests of the API on behalf of the user that authorized the acccess token. To make an OAuth authenticated request send the following parameters in the Authorization header of the request:
Authorization: OAuth realm="https://api.tripit.com/", oauth_consumer_key="consumer public key", oauth_token="authorized access token", oauth_signature_method="HMAC-SHA1", oauth_signature="request signature", oauth_timestamp="1229622199", oauth_nonce="9b308304f41a4ac04fb4c4ce980c5277", oauth_version="1.0"
The parameters in the Authorization header are defined as follows:
| parameter name | parameter description |
|---|---|
| oauth_consumer_key | The consumer's public key. |
| oauth_nonce | A nonce no more than 80 characters in length. |
| oauth_signature | The signature of the request. The algorithm to sign the request is described in the OAuth specification and examples can be found in the reference implementations. |
| oauth_signature_method | The method used to generate the method signature. Current supported methods are HMAC-SHA1. |
| oauth_timestamp | The timestamp in seconds since the epoch. |
| oauth_token | The authorized access token obtained in Step 3. |
| oauth_version | OPTIONAL - Assumed to be '1.0' |
All other aspects of a successfully authenticated OAuth request are identical to a web authenticated request except that the authorized access token may grant the consumer less permission to read, create, and modify data than a web authenticated request which has the exact same permissions a user has when logged in to TripIt via the web.
Here is a description for error codes that are thrown during the OAuth process:
The TripIt API expects all data to be encoded in UTF-8. Similarly, all data out of the API will be encoded in UTF-8.
All data POSTed to the API must also be URL encoded.
There are currently four types of requests supported by the API (get, list, create, and delete). Each is explained below in greater detail.
There is one common query parameter: 'format'. It can be set to 'xml' or 'json' depending on what format the Request/Response objects are in. Note: If 'format' is not specified, 'xml' is assumed as the default.
Even thought the default format is XML, we recommend JSON over XML. Using the JSON format will reduce the size of the response data by a large factor: 50% or more. Adding "Accept-Encoding: gzip" to the HTTP request headers will also reduce the size of the response by a large factor. Finally, please add an appropriate "User-agent" to the request headers with the name and version of your application. When using JSON, it's not necessary to wrap the JSON in a {"Request" : ... }. Simply send the object.
A get request is used to retrieve a specific object from the TripIt API given its TripIt object ID. Since get requests do not change data they are all made via an HTTP GET request for a URL that takes the following form:
https://api.tripit.com/v1/get/<object type>/id/<TripIt Object ID>
<object type> is one of the following strings:
<TripIt Object ID> is the object ID of the TripIt object being requested.
The get request for a trip object can take an optional filter parameter called include_objects. The default value for this parameter is false but if it is set to true then the response from the API will include all objects (e.g. air, car, lodging, etc...) that are associated with that trip. This enables an API client to request a trip and all of its associated objects in a single call.
Here is a sample get request for a Note object:
$ curl -k -D /dev/tty --user <username>:<password> https://api.tripit.com/v1/get/note/id/586853 HTTP/1.1 200 OK Server: nginx/0.6.32 Date: Wed, 03 Dec 2008 23:05:30 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache <Response> <NoteObject> <id>586853</id> <display_name>Note</display_name> <DateTime> <date>2008-12-09</date> <time>14:00:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-8:00</utc_offset> </DateTime> <Address> <addr1>444 DeHaro St.</addr1> <city>San Francisco</city> <state>CA</state> <zip>94107</zip> <country>US</country> <latitude>37.764169</latitude> <longitude>-122.402021</longitude> </Address> <text>Test note.</text> <url>http://www.tripit.com/</url> </NoteObject> </Response> $
Here is a sample get request for a Note object using JSON:
$ curl -k -D /dev/tty --user <username>:<password> https://api.tripit.com/v1/get/note/id/21765621/format/json HTTP/1.1 200 OK Server: nginx Date: Mon, 27 Sep 2010 18:26:37 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private { "timestamp":"1285611997", "num_bytes":"880", "NoteObject": { "id":"217623621", "trip_id":"301454907", "is_client_traveler":"false", "relative_url":"\/trip_item\/show\/id\/21235681", "display_name":"A fine note", "Image":{ "url":"https:\/\/www.tripit.com\/uploads\/images\/0\/2\/2\/00235a44aba776c3abc123def016079631ac285f622.jpg", "caption":"Andy's Picture" }, "DateTime":{ "date":"2009-11-10", "time":"14:00:00", "timezone":"America\/Los_Angeles", "utc_offset":"-08:00" }, "Address":{ "address":"444 DeHaro St., San Francisco, CA, 94107", "addr1":"444 DeHaro St.", "city":"San Francisco", "state":"CA", "zip":"94107", "country":"US", "latitude":"37.764246", "longitude":"-122.401694" }, "text":"This is my note", "url":"http:\/\/www.tripit.com" } }
Here is another example using the include_objects filter parameter set to true. Notice how you get the <Trip> plus the <AirObject>, and <WeatherObject> sections that are associated with the trip.
Note the following about the response object:
$ curl -D /dev/tty --user <username>:<password> 'https://api.tripit.com/v1/get/trip/id/2785341/include_objects/true' HTTP/1.1 200 OK Server: nginx Date: Tue, 03 Nov 2009 00:31:35 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: close Cache-Control: private <Response> <timestamp>1257208295</timestamp> <num_bytes>4630</num_bytes> <Trip> <TripInvitees> <Invitee profile_ref="VPNrwg9_2vW2j3DHX_pAzA"> <is_read_only>false</is_read_only> <is_traveler>true</is_traveler> </Invitee> </TripInvitees> <id>2785341</id> <relative_url>/trip/show/id/2785341</relative_url> <start_date>2009-10-04</start_date> <end_date>2009-11-23</end_date> <display_name>Vienna, Austria, October 2009</display_name> <image_url>http://www.tripit.com/images/places/general.jpg</image_url> <is_private>true</is_private> <primary_location>Vienna, Austria</primary_location> <PrimaryLocationAddress> <address>Vienna, Austria</address> <city>Vienna</city> <state>Vienna</state> <country>AT</country> <latitude>48.208488</latitude> <longitude>16.372075</longitude> </PrimaryLocationAddress> </Trip> <AirObject> <id>4042627</id> <trip_id>2785341</trip_id> <is_client_traveler>true</is_client_traveler> <relative_url>/reservation/show/id/4042627</relative_url> <display_name>Your Flight</display_name> <is_purchased>true</is_purchased> <Agency> <agency_conf_num>RTW-123</agency_conf_num> <agency_name>RTW Business Travel Solutions, Inc.</agency_name> <agency_phone>(800) 555-7897</agency_phone><EMAIL_ADDRESS><agency_url>http://www.rtwtravel.com/</agency_url> <agency_contact>Ms Jane Doe</agency_contact> <partner_agency_id>1</partner_agency_id> </Agency> <Segment> <Status> <EstimatedDepartureDateTime> <date>2009-11-09</date> <time>13:45:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-08:00</utc_offset> </EstimatedDepartureDateTime> <EstimatedArrivalDateTime> <date>2009-11-09</date> <time>14:45:00</time> <timezone>America/Chicago</timezone> <utc_offset>-06:00</utc_offset> </EstimatedArrivalDateTime> <flight_status>401</flight_status> <is_connection_at_risk>false</is_connection_at_risk> <last_modified>1256770662</last_modified> </Status> <StartDateTime> <date>2009-11-09</date> <time>13:00:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-08:00</utc_offset> </StartDateTime> <EndDateTime> <date>2009-11-09</date> <time>14:00:00</time> <timezone>America/Chicago</timezone> <utc_offset>-06:00</utc_offset> </EndDateTime> <start_airport_code>SFO</start_airport_code> <start_airport_latitude>37.618889</start_airport_latitude> <start_airport_longitude>-122.375</start_airport_longitude> <start_city_name>San Francisco</start_city_name> <end_airport_code>ORD</end_airport_code> <end_airport_latitude>41.978056</end_airport_latitude> <end_airport_longitude>-87.906111</end_airport_longitude> <end_city_name>Chicago</end_city_name> <marketing_airline>Other</marketing_airline> <marketing_flight_number>1234</marketing_flight_number> <alternate_flights_url>/trip_item/flightSearch/id/19691175/airline_code/UA</alternate_flights_url> </Segment> </AirObject> <WeatherObject> <id>19720471</id> <trip_id>2785341</trip_id> <is_client_traveler>true</is_client_traveler> <relative_url>/trip_item/show/id/19720471</relative_url> <display_name>Weather - Chicago, IL</display_name> <date>2009-11-23</date> <location>Chicago, IL</location> <avg_high_temp_c>8.8888888888889</avg_high_temp_c> <avg_low_temp_c>2.7777777777778</avg_low_temp_c> <avg_wind_speed_kn>13</avg_wind_speed_kn> </WeatherObject> <PartnerAgency> <partner_agency_id>1</partner_agency_id> <partner_agency_name>RTW Business Travel Solutions, Inc.</partner_agency_name> <partner_agency_short_name>RTW Travel</partner_agency_short_name> <partner_agency_logo_small_url>https://www.tripit.com/uploads/images/4/9/9/499d464439690088810193770e9cd9d67aa.png</partner_agency_logo_small_url> <partner_agency_logo_medium_url>https://www.tripit.com/uploads/images/7/1/2/7124d3adfdbf63da7149cbfd06c86baa40b.png</partner_agency_logo_medium_url> <partner_agency_logo_large_url>https://www.tripit.com/uploads/images/9/9/2/9928a98449b064c8acc1c2159f588f078b4.png</partner_agency_logo_large_url> </PartnerAgency> <Profile ref="VPNrwg9_2vW2j3DHX_pAzA"> <is_client>true</is_client> <is_pro>true</is_pro> <screen_name>denmark</screen_name> <public_display_name>Andy Denmark</public_display_name> <profile_url>people/denmark</profile_url> <home_city>San Francisco, CA</home_city> <photo_url>http://static.tripit.com/uploads/images/9/7/3/97319d8fb7045feb31172d9d7a6481f4608.jpg</photo_url> <activity_feed_url>http://www.tripit.com/feed/activities/private/24562ADE-7DF3452DABC4E7D7FF372C1ACC/activities.atom</activity_feed_url> <alerts_feed_url>http://www.tripit.com/feed/alerts/private/962356AA5-F101FC24E1C124532ACDE28C356AFB0/alerts.atom</alerts_feed_url> <ical_url>webcal://www.tripit.com/feed/ical/private/96333224-33BA6E42F4ABCDDEFG12347E5EDA66/tripit.ics</ical_url> </Profile> </Response> $
A list request is used to retrieve multiple objects given an object type and set of filter parameters. Since list requests do not change data they are all made via an HTTP GET request for a URL that takes the following form:
https://api.tripit.com/v1/list/<object type>/<filter parameter>/<filter value>
<object type> is one of the following strings:
Valid values for <filter parameter> and <filter value> depend on the <object type>. The following table describes the valid combinations:
| object type | filter parameter | filter value | default value | explanation |
|---|---|---|---|---|
| trip | - | - | - | Returns a list of upcoming trips on which the authenticated user may or may not be a traveler. |
| trip | traveler | true|false|all | true | Conditionally returns trips on which the authenticated user is (true) or is not (false) a traveler. If the value of this parameter is set to all then trips on which the user is and is not a traveler are returned. Whether or not the user created the trip or was invited to view and/or collaborate on the trip has no bearing on whether or not the user is determined to be a traveler on the trip. |
| trip | past | true|false | false | Returns past trips if set to true. Setting this to false just mimics the default behavior. A past trip is defined to be any trip whose end_date is before today's date with respect to the America/Los_Angeles timezone. All other trips, including un-dated ones, are defined to be future trips. |
| trip | modified_since | Integer value | - | Each Response object has a <timestamp> that may be stored by a client. If the client re-issues a request with the modified_since parameter and the timestamp from the prior invocation of the request only the trip objects that have been updated and/or created since the first invocation will be returned. Note: deleted objects will not be considered as a change when computing the list of objects in the response. Therefore, a client should periodically sync the entire object cache, avoiding the modified_since parameter. |
| trip | include_objects | true|false | false | If set to true then all of the trips that are included in the <Response> will be accompanied by their associated travel objects. This is useful for clients that would otherwise need to make multiple calls to obtain a list of trips and then associated trip objects (e.g. air, car, lodging, etc...). |
| object | - | - | - | Returns a list of all upcoming travel objects whether or not they are associated with a trip. Undated travel objects are assumed to have dates that are very far out in the future and therefore are also returned. If the travel objects are associated with a trip then they will only be returned if the account making the query is listed as a traveler on the trip or if the trip is shared with this account. |
| object | trip_id | The TripIt ID for a Trip object | - | Returns a list of all travel objects in the Trip object specified. If trip_id is specified then the past and traveler filters are ignored. |
| object | past | true|false | false | Returns past travel objects if set to true. Setting this to false just mimics the default behavior. A past travel object is defined to be any object whose end_date is before yesterday's date with respect to the America/Los_Angeles timezone. All other objects, including un-dated ones, are defined to be future objects. |
| object | traveler | true|false|all | true | Conditionally returns travel objects associated with trips on which the authenticated user is (true) or is not (false) a traveler. If the value of this parameter is set to all then objects associated with trips on which the user is and is not a traveler are returned. Whether or not the user created the trip or was invited to view and/or collaborate on the trip has no inherent bearing on whether or not the user is determined to be a traveler on the trip. Travel objects that are not associated with a Trip (i.e. Unfiled Items) are included in the result set when traveler=false. |
| object | type | air|activity|car|cruise|parking directions|lodging|map|note| rail|restaurant|transport|weather |
- | Filter based on travel object type. The absence of this parameter implies that all travel object types will be returned. |
| object | modified_since | Integer value | - | Each Response object has a <timestamp> that may be stored by a client. If the client re-issues a request with the modified_since parameter and the timestamp from the prior invocation of the request only the travel objects that have been updated and/or created since the first invocation will be returned. Note: deleted objects will not be considered as a change when computing the list of objects in the response. Therefore, a client should periodically sync the entire object cache, avoiding the modified_since parameter. |
| points_program | - | - | - | For a TripIt Pro user account, lists all configured points programs. |
Here is a sample list request for a Trip object:
$ curl -k -D /dev/tty --user <username>:<password> https://api.tripit.com/v1/list/trip HTTP/1.1 200 OK Server: nginx/0.6.32 Date: Wed, 03 Dec 2008 23:10:45 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache <Response> <Trip> <id>770827</id> <start_date>2008-12-17</start_date> <end_date>2008-12-27</end_date> <display_name>New York, NY, December 2008</display_name> <image_url>/images/places/general.jpg</image_url> <is_private>false</is_private> <is_traveler>true</is_traveler> <primary_location>New York, NY</primary_location> <PrimaryLocationAddress> <address>New York, NY</address> <city>New York</city> <state>NY</state> <country>US</country> <latitude>40.714269</latitude> <longitude>-74.005973</longitude> </PrimaryLocationAddress> </Trip> <Trip> <id>770828</id> <start_date>2009-01-17</start_date> <end_date>2009-01-27</end_date> <display_name>Paris, France, January 2009</display_name> <image_url>/images/places/general.jpg</image_url> <is_private>false</is_private> <is_traveler>true</is_traveler> <primary_location>Paris, France</primary_location> <PrimaryLocationAddress> <address>Paris, France</address> <city>Paris</city> <state>Île-de-france</state> <country>FR</country> <latitude>48.866667</latitude> <longitude>2.333333</longitude> </PrimaryLocationAddress> </Trip> </Response>
Another example in which we're requesting all objects within Trip #115 that are of type air.
Note the following about the response object:
$ curl -k -D /dev/tty --user <username>:<password> https://api.tripit.com/v1/list/object/trip_id/115/type/air HTTP/1.1 200 OK Server: nginx/0.6.35 Date: Thu, 07 May 2009 22:00:08 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: close Cache-Control: private <Response> <timestamp>1241733608</timestamp> <AirObject> <id>319</id> <trip_id>115</trip_id> <is_traveler>true</is_traveler> <relative_url>/reservation/show/id/319</relative_url> <display_name>Your Flight</display_name> <booking_site_name>Expedia</booking_site_name><EMAIL_ADDRESS><booking_site_url>http://www.expedia.com</booking_site_url> <is_purchased>true</is_purchased> <Agency> <agency_conf_num>RTW-123</agency_conf_num> <agency_name>RTW Business Travel Solutions, Inc.</agency_name> <agency_phone>(800) 555-7897</agency_phone><EMAIL_ADDRESS><agency_url>http://www.rtwtravel.com/</agency_url> <agency_contact>Ms Jane Doe</agency_contact> <partner_agency_id>1</partner_agency_id> </Agency> <Segment> <StartDateTime> <date>2009-05-27</date> <time>06:15:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-07:00</utc_offset> </StartDateTime> <EndDateTime> <date>2009-05-27</date> <time>08:20:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-07:00</utc_offset> </EndDateTime> <start_airport_code>SFO</start_airport_code> <start_city_name>San Francisco</start_city_name> <end_airport_code>SEA</end_airport_code> <end_city_name>Seattle</end_city_name> <marketing_airline>United Airlines</marketing_airline> <marketing_airline_code>UA</marketing_airline_code> <marketing_flight_number>24</marketing_flight_number> <aircraft>319</aircraft> <distance>677 miles</distance> <duration>2h, 05m</duration> <stops>nonstop</stops> </Segment> </AirObject> <PartnerAgency> <partner_agency_id>1</partner_agency_id> <partner_agency_name>RTW Business Travel Solutions, Inc.</partner_agency_name> <partner_agency_short_name>RTW Travel</partner_agency_short_name> <partner_agency_logo_small_url>https://www.tripit.com/uploads/images/4/9/9/499d464439690088810193770e9cd9d67aa.png</partner_agency_logo_small_url> <partner_agency_logo_medium_url>https://www.tripit.com/uploads/images/7/1/2/7124d3adfdbf63da7149cbfd06c86baa40b.png</partner_agency_logo_medium_url> <partner_agency_logo_large_url>https://www.tripit.com/uploads/images/9/9/2/9928a98449b064c8acc1c2159f588f078b4.png</partner_agency_logo_large_url> </PartnerAgency> </Response>
A create request is used to create new objects. To create objects, make an HTTP POST request to the following URL:
https://api.tripit.com/v1/create
The client must POST a single Request object as the value of the request parameter xml in the POST body of the request.
The xs:date and xs:time specifications ( http://www.w3schools.com/schema/schema_dtypes_date.asp) allow for timezone to be specified within the xs:date and xs:time data types respectively. TripIt, however, infers the timezone of a Trip object from the geographical location of that Trip object, e.g. address of a hotel, flight segment's destination, etc -- in essence, we do not make use of the timezone component in the xs:date and xs:time data types. Hence, when specifying the date/time for a Trip object, specify the date/time to be the "local" time with respect to the Trip object.
Here is a sample create request for a Trip object:
Here is what the post data would look like for a Trip creation:
$ cat /var/tmp/trip.xml <Request> <Trip> <start_date>2008-12-09</start_date> <end_date>2008-12-27</end_date> <primary_location>New York, NY</primary_location> <PrimaryLocationAddress> <address>New York, NY</address> <city>New York</city> <state>NY</state> <country>US</country> <latitude>40.714269</latitude> <longitude>-74.005973</longitude> </PrimaryLocationAddress> </Trip> </Request>
Here is the equivalent request body if you were to send this in JSON (Note: the lack of the Request wrapper):
{"Trip": {"start_date":"2009-12-09", "end_date":"2009-12-27", "primary_location":"New York, NY" } }
Here is a sample create request for a Trip object:
$ curl -k -D /dev/tty --data-urlencode<EMAIL_ADDRESS>--user <username>:<password> https://api.tripit.com/v1/create HTTP/1.1 200 OK Server: nginx/0.6.32 Date: Fri, 05 Dec 2008 22:12:35 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache <Response> <Trip> <id>770846</id> <start_date>2008-12-09</start_date> <end_date>2008-12-27</end_date> <display_name>New York, NY, December 2008</display_name> <image_url>/images/places/general.jpg</image_url> <is_private>false</is_private> <is_traveler>true</is_traveler> <primary_location>New York, NY</primary_location> <PrimaryLocationAddress> <address>New York, NY</address> <city>New York</city> <state>NY</state> <country>US</country> <latitude>40.714269</latitude> <longitude>-74.005973</longitude> </PrimaryLocationAddress> </Trip> </Response>
Here is a sample create request for a Air object:
Here is what the post data would look like for a Air object creation:
$ cat /var/tmp/air.xml <Request> <AirObject> <is_client_traveler>true</is_client_traveler> <booking_site_name>United Airlines</booking_site_name> <booking_site_phone>1-800-United-1</booking_site_phone><EMAIL_ADDRESS><booking_site_url>http://www.united.com/</booking_site_url> <supplier_conf_num>ABC123</supplier_conf_num> <Agency> <agency_conf_num>RTW-123</agency_conf_num> <agency_name>RTW Business Travel Solutions, Inc.</agency_name> <agency_phone>(800) 555-7897</agency_phone><EMAIL_ADDRESS><agency_url>http://www.rtwtravel.com/</agency_url> <agency_contact>Ms Jane Doe</agency_contact> </Agency> <Segment> <StartDateTime> <date>2009-09-04</date> <time>15:04:00</time> </StartDateTime> <EndDateTime> <date>2009-09-04</date> <time>17:47:00</time> </EndDateTime> <start_city_name>Chicago</start_city_name> <end_city_name>San Francisco</end_city_name> <marketing_airline>UA</marketing_airline> <marketing_flight_number>137</marketing_flight_number> <seats>23J</seats> </Segment> <Segment> <StartDateTime> <date>2009-09-08</date> <time>16:32:00</time> </StartDateTime> <EndDateTime> <date>2009-09-08</date> <time>22:42:00</time> </EndDateTime> <start_city_name>San Francisco</start_city_name> <end_city_name>Chicago</end_city_name> <marketing_airline>UA</marketing_airline> <marketing_flight_number>39</marketing_flight_number> <seats>19B</seats> </Segment> <Traveler> <first_name>John</first_name> <last_name>Doe</last_name> <frequent_traveler_num>1234567890</frequent_traveler_num> </Traveler> </AirObject> </Request>
Note the following about the above request object:
Here is a sample create request for a Air object:
$ curl -k -D /dev/tty --data-urlencode<EMAIL_ADDRESS>--user <username>:<password> https://api.tripit.com/v1/create HTTP/1.1 100 Continue HTTP/1.1 200 OK Server: nginx Date: Mon, 31 Aug 2009 23:51:39 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: close Cache-Control: private <Response> <timestamp>1251762699</timestamp> <num_bytes>2470</num_bytes> <AirObject> <id>1413</id> <trip_id>426</trip_id> <is_client_traveler>true</is_client_traveler> <relative_url>/reservation/show/id/1413</relative_url> <display_name>Your Flight</display_name> <booking_site_name>United Airlines</booking_site_name> <booking_site_phone>1-800-United-1</booking_site_phone><EMAIL_ADDRESS><booking_site_url>http://www.united.com/</booking_site_url> <supplier_conf_num>ABC123</supplier_conf_num> <is_purchased>true</is_purchased> <Agency> <agency_conf_num>RTW-123</agency_conf_num> <agency_name>RTW Business Travel Solutions, Inc.</agency_name> <agency_phone>(800) 555-7897</agency_phone><EMAIL_ADDRESS><agency_url>http://www.rtwtravel.com/</agency_url> <agency_contact>Ms Jane Doe</agency_contact> <partner_agency_id>1</partner_agency_id> </Agency> <Segment> <Status> <flight_status>200</flight_status> <last_modified>1251762699</last_modified> </Status> <StartDateTime> <date>2009-09-04</date> <time>15:04:00</time> <timezone>America/Chicago</timezone> <utc_offset>-05:00</utc_offset> </StartDateTime> <EndDateTime> <date>2009-09-04</date> <time>17:47:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-07:00</utc_offset> </EndDateTime> <start_airport_code>ORD</start_airport_code> <start_city_name>Chicago</start_city_name> <end_airport_code>SFO</end_airport_code> <end_city_name>San Francisco</end_city_name> <marketing_airline>United Airlines</marketing_airline> <marketing_airline_code>UA</marketing_airline_code> <marketing_flight_number>137</marketing_flight_number> <aircraft>763</aircraft> <aircraft_display_name>Boeing 767-300</aircraft_display_name> <distance>1841 miles</distance> <duration>4h, 43m</duration> <seats>23J</seats> <stops>nonstop</stops> </Segment> <Segment> <Status> <flight_status>200</flight_status> <last_modified>1251762699</last_modified> </Status> <StartDateTime> <date>2009-09-08</date> <time>16:32:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-07:00</utc_offset> </StartDateTime> <EndDateTime> <date>2009-09-08</date> <time>22:42:00</time> <timezone>America/Chicago</timezone> <utc_offset>-05:00</utc_offset> </EndDateTime> <start_airport_code>SFO</start_airport_code> <start_city_name>San Francisco</start_city_name> <end_airport_code>ORD</end_airport_code> <end_city_name>Chicago</end_city_name> <marketing_airline>United Airlines</marketing_airline> <marketing_airline_code>UA</marketing_airline_code> <marketing_flight_number>39</marketing_flight_number> <aircraft>319</aircraft> <aircraft_display_name>Airbus A319</aircraft_display_name> <distance>1841 miles</distance> <duration>4h, 10m</duration> <seats>19B</seats> <stops>nonstop</stops> </Segment> <Traveler> <first_name>John</first_name> <last_name>Doe</last_name> <frequent_traveler_num>1234567890</frequent_traveler_num> </Traveler> </AirObject> <PartnerAgency> <partner_agency_id>1</partner_agency_id> <partner_agency_name>RTW Business Travel Solutions, Inc.</partner_agency_name> <partner_agency_short_name>RTW Travel</partner_agency_short_name> <partner_agency_logo_small_url>https://www.tripit.com/uploads/images/4/9/9/499d464439690088810193770e9cd9d67aa.png</partner_agency_logo_small_url> <partner_agency_logo_medium_url>https://www.tripit.com/uploads/images/7/1/2/7124d3adfdbf63da7149cbfd06c86baa40b.png</partner_agency_logo_medium_url> <partner_agency_logo_large_url>https://www.tripit.com/uploads/images/9/9/2/9928a98449b064c8acc1c2159f588f078b4.png</partner_agency_logo_large_url> </PartnerAgency> </Response> $
Note the following about the response objects:
A replace request is used to replace existing objects in a TripIt account. After the object is replaced it will get the same object id as the one the object had before the replace call. To replace an object make an HTTP POST request to the following URL:
https://api.tripit.com/v1/replace/<object type>/id/<TripIt Object ID>
<object type> is one of the following strings:
<TripIt Object ID> is the object ID of the TripIt object being requested.
Here is a sample replace request for a Trip object:
The following example shows XML for a trip creation followed by a replace call on that trip to extend the dates of the trip. The first step is to create a new trip. Here is the post data for the creation of a private Trip object:
$ cat /var/tmp/create_trip.xml <Request> <Trip> <start_date>2010-09-07</start_date> <end_date>2010-09-18</end_date> <is_private>true</is_private> <primary_location>Rome, Italy</primary_location> </Trip> </Request>
Here is the <Response> object the API returns when you create this Trip object:
<Response> <timestamp>1278433489</timestamp> <num_bytes>1339</num_bytes> <Trip> <TripInvitees> <Invitee profile_ref="VPdqwr9_2vA2j3dla_pfz9"> <is_read_only>false</is_read_only> <is_traveler>true</is_traveler> </Invitee> </TripInvitees> <id>7501715</id> <relative_url>/trip/show/id/7501715</relative_url> <start_date>2010-09-07</start_date> <end_date>2010-09-18</end_date> <display_name>Rome, Italy, September 2010</display_name> <image_url>http://www.tripit.com/images/places/general.jpg</image_url> <is_private>true</is_private> <primary_location>Rome, Italy</primary_location> <PrimaryLocationAddress> <address>Rome, Italy</address> <city>Rome</city> <state>Latium</state> <country>IT</country> <latitude>41.9</latitude> <longitude>12.483333</longitude> </PrimaryLocationAddress> </Trip> <Profile ref="VParwr9_2vA2j3dla_pfz9"> <is_client>true</is_client> <is_pro>true</is_pro> <screen_name>denmark</screen_name> <public_display_name>Andy Denmark</public_display_name> <profile_url>people/denmark</profile_url> <home_city>San Francisco, CA</home_city> <photo_url>https://www.tripit.com/uploads/images/8/7/2/92dadd8fb7f23455feb38212d9decdf81f4608.jpg</photo_url> <activity_feed_url>http://www.tripit.com/feed/activities/private/12883BD53-7D9ABDE235538A82F248234532ABDC1ACC/activities.aactivity_feed_url> <alerts_feed_url>http://www.tripit.com/feed/alerts/private/9123AABD-F192224ABEFD24E1C2098230985A92ABEF234C356AFB0/alerts.aalerts_feed_url> <ical_url>webcal://www.tripit.com/feed/ical/private/9237C55-33ABDEC145454ABCED2ABDE343477EE42ED12147E5EDA66/tripit.ics<l> </Profile> </Response>
Now, if we want to update the <end_date> on this Trip object the post data for the replace method would look something like this:
$ cat /var/tmp/trip_replace.xml <Request> <Trip> <start_date>2010-09-07</start_date> <end_date>2010-10-18</end_date> <is_private>true</is_private> <primary_location>Rome, Italy</primary_location> </Trip> </Request>
Notice that the post data contains the data from the original create call that is not changing along with the new end_date. This is important because the replace method will be deleting the old Trip object and creating a new one in place of the old one. If for example the post data on the replace call didn't specify <is_private>true</is_private> then the Trip object would no longer be private.
Here is a sample replace request for a Trip object:
$ curl -k -D /dev/tty --data-urlencode<EMAIL_ADDRESS>--user <username>:<password> https://api.tripit.com/v1/replace/trip/id/7501715 HTTP/1.1 100 Continue HTTP/1.1 200 OK Server: nginx Date: Tue, 6 Jul 2009 23:51:39 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: close Cache-Control: private <Response> <timestamp>1278433576</timestamp> <num_bytes>1339</num_bytes> <Trip> <TripInvitees> <Invitee profile_ref="VParwr9_2vA2j3dla_pfz9"> <is_read_only>false</is_read_only> <is_traveler>true</is_traveler> </Invitee> </TripInvitees> <id>7501715</id> <relative_url>/trip/show/id/7501771</relative_url> <start_date>2010-09-07</start_date> <end_date>2010-10-18</end_date> <display_name>Rome, Italy, September 2010</display_name> <image_url>http://www.tripit.com/images/places/general.jpg</image_url> <is_private>true</is_private> <primary_location>Rome, Italy</primary_location> <PrimaryLocationAddress> <address>Rome, Italy</address> <city>Rome</city> <state>Latium</state> <country>IT</country> <latitude>41.9</latitude> <longitude>12.483333</longitude> </PrimaryLocationAddress> </Trip> <Profile ref="VParwr9_2vA2j3dla_pfz9"> <is_client>true</is_client> <is_pro>true</is_pro> <screen_name>denmark</screen_name> <public_display_name>Andy Denmark</public_display_name> <profile_url>people/denmark</profile_url> <home_city>San Francisco, CA</home_city> <photo_url>https://www.tripit.com/uploads/images/8/7/2/92dadd8fb7045feb38212d9decdf81f4608.jpg</photo_url> <activity_feed_url>http://www.tripit.com/feed/activities/private/12DA7D53-7D9ABDE4BF8A82F248234532ABDC1ACC/activities.atomivity_feed_url> <alerts_feed_url>http://www.tripit.com/feed/alerts/private/91237ABD-F192224ABEFD24E1C24CC75A92ABEF234C356AFB0/alerts.atom&ts_feed_url> <ical_url>webcal://www.tripit.com/feed/ical/private/91927C55-33ABDEC145454ABCED2F47377EE42ED12147E5EDA66/tripit.ics</ict; </Profile> </Response>
Here's another example of how the replace method can be used but this time for a NoteObject. Here's the XML used to create the NoteObject:
$ cat /var/tmp/note.xml <Request> <NoteObject> <display_name>A Test Note</display_name> <DateTime> <date>2010-12-09</date> <time>14:00:00</time> </DateTime> <Address> <addr1>500 Treat Avenue</addr1> <city>San Francisco</city> <state>CA</state> <zip>94110</zip> <country>US</country> </Address> <text>Test note.</text> <url>http://www.tripit.com/</url> </NoteObject> </Request>
Here's how you create the NoteObject:
$ curl -D /dev/tty --user <username>:<password> --data-urlencode<EMAIL_ADDRESS>https://api.tripit.com/v1/create HTTP/1.1 200 OK Server: nginx Date: Thu, 29 Jul 2010 21:19:57 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private <Response> <timestamp>1280438397</timestamp> <num_bytes>738</num_bytes> <NoteObject> <id>68872927</id> <trip_id>3024907</trip_id> <is_client_traveler>false</is_client_traveler> <relative_url>/trip_item/show/id/68872927</relative_url> <display_name>A Test Note</display_name> <DateTime> <date>2010-12-09</date> <time>14:00:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-08:00</utc_offset> </DateTime> <Address> <address>500 Treat Avenue, San Francisco, CA, 94110</address> <addr1>500 Treat Avenue</addr1> <city>San Francisco</city> <state>CA</state> <zip>94110</zip> <country>US</country> <latitude>37.762161</latitude> <longitude>-122.413927</longitude> </Address> <text>Test note.</text> <url>http://www.tripit.com/</url> </NoteObject> </Response>
In order to replace the NoteObject with one that has updated data you would post the following to the API as follows:
$ cat /var/tmp/replace_note.xml <Request> <NoteObject> <display_name>A Test Note, updated</display_name> <DateTime> <date>2010-12-10</date> <time>14:00:00</time> </DateTime> <Address> <addr1>500 Treat Avenue</addr1> <city>San Francisco</city> <state>CA</state> <zip>94110</zip> <country>US</country> </Address> <text>Here's my test note with an updated bit of text.</text> <url>http://www.tripit.com/</url> </NoteObject> </Request> $ curl -D /dev/tty --user <username>:<password> --data-urlencode<EMAIL_ADDRESS>https://api.tripit.com/v1/replace/note/id/68872927 HTTP/1.1 200 OK Server: nginx Date: Thu, 29 Jul 2010 21:28:03 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Cache-Control: private <Response> <timestamp>1280438882</timestamp> <num_bytes>785</num_bytes> <NoteObject> <id>68872927</id> <trip_id>3024907</trip_id> <is_client_traveler>false</is_client_traveler> <relative_url>/trip_item/show/id/68872927</relative_url> <display_name>A Test Note, updated</display_name> <DateTime> <date>2010-12-10</date> <time>14:00:00</time> <timezone>America/Los_Angeles</timezone> <utc_offset>-08:00</utc_offset> </DateTime> <Address> <address>500 Treat Avenue, San Francisco, CA, 94110</address> <addr1>500 Treat Avenue</addr1> <city>San Francisco</city> <state>CA</state> <zip>94110</zip> <country>US</country> <latitude>37.762161</latitude> <longitude>-122.413927</longitude> </Address> <text>Here's my test note with an updated bit of text.</text> <url>http://www.tripit.com/</url> </NoteObject> </Response>
A delete request is used to delete existing objects. To delete an object, make an HTTP GET request to the following URL:
https://api.tripit.com/v1/delete/<object type>/id/<TripIt Object ID>
<object type> is one of the following strings:
<TripIt Object ID> is the object ID of the TripIt object being requested.
Here is a sample delete request for a Trip object:
$ curl -k -D /dev/tty --user <username>:<password> https://api.tripit.com/v1/delete/trip/id/770829 HTTP/1.1 200 OK Server: nginx/0.6.32 Date: Thu, 04 Dec 2008 04:49:08 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache$
When removing user from a trip, you need to specify the trip you want to update and the user you want to remove. The format looks like this:
https://api.tripit.com/v1/delete/trip_partcipant/trip_id/<TripIt Object ID>/profile_ref/<Unique User Identifier>
You will obtain user identifier from trip details (see get/trip API call). Sample delete request for deleting user wKieDZalTIjn0wltsyMcLQ from trip 770829:
$ curl -k -D /dev/tty --user <username>:<password> https://api.tripit.com/v1/delete/trip_participant/trip_id/770829/profile_ref/wKieDZalTIjn0wltsyMcLQ HTTP/1.1 200 OK Server: nginx/0.6.32 Date: Thu, 04 Dec 2008 04:49:08 GMT Content-Type: text/xml; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache$
The API will return the following HTTP Status Codes:
| status code | meaning | description |
|---|---|---|
| 200 | OK | Everything went well and while there might be Warnings or Errors in the Response Object, the request was processed. |
| 400 | Bad Request | The request was either invalid or malformed in some way. For example, a create call with no xml or json request parameter in the POST args would return a 400 Bad Request from the server. |
| 401 | Unauthorized | An OAuth Consumer will receive a 401 Unauthorized response from the API for three reasons. 1) The authentication credentials passed to the API for the request were somehow invalid. This status code could be caused by an invalid username/password combination used in the web authentication scheme or an invalid OAuth token for the OAuth scheme. 2) The TripIt account for which the consumer was authorized is no longer authorizing it. 3) The OAuth Consumer key has been de-activated. |
| 403 | Forbidden | An OAuth Consumer will receive a 403 Forbidden response from the API when the TripIt account for which the consumer was authorized is not yet confirmed. The most common situation in which this happens is when a new account that authorizes an API client hasn't been confirmed before the API client attempts to execute a read operation on the API (e.g. /v1/list/trip). |
| 404 | Not Found | Either the resource URL or the object the client was requesting either does not exist or the user the client was authenticated and does not have permission to operate on the object. |
| 500 | Server Error | Something catastrophic happened while the TripIt platform was trying to complete the request. A 500 error is a pretty serious and catastrophic problem that should be reported to the TripIt engineering team through<EMAIL_ADDRESS>|
| 503 | Service Unavailable | The TripIt API is currently undergoing maintenance and is not available. |
There are two types of documents used to communicate with the API. A Request document is used when the client is asking something of the API (e.g. create a new object, get me a list of Trip objects, etc...). A Response document is what the API will send back to the client with an answer to the Request. The XML Schema that describe valid Request and Response documents may be found here:
These schemas completely describe all of the valid XML documents that can be posted to and received from the API.
Following kinds of <object_type>s are categorized as Reservation Objects
Used for create operations, a Request object wraps one travel object in the xml parameter of an HTTP POST. Please note that a Request object may contain no more than one travel object.
If a travel object contains a trip_id then the object will be placed in the trip with the matching id. If a travel object does not contain a trip_id and the TripIt user has their 'auto-import' account preference set to 'On', the travel object will be inserted into the trip in the user's account that it overlaps with in time. If the travel object does not overlap with any trips, and the 'auto-import' feature is turned 'Off' then the it will be placed under 'Unfiled items'.
A Response object is used to wrap one or more travel objects as well as one or more Warning and/or Error objects in a response from either a get, create, or delete request.
When creating a new object the response will contain the travel object you sent in plus the object IDs that they are now associated with that object. A client can use this ID in subsequent get operations.
The presence of a Warning in a Response object means that the TripIt API was able to complete the request successfully but the API detected something about the data in the Request object that may produce unintended consequences.
An example of a condition that would produce a Warning is if the Request object contained a check-in date for a LodgingObject that was after the check-out date for that LodgingObject.
The presence of an Error in a Response object means that the TripIt API was not able to persist the object in question in the Request. The entire request transaction will be failed.
Pagination is activated for all requests to the /v1/list/object endpoint, and requests to the /v1/list/trip endpoint in any of the following three circumstances:
Clients can specify request parameter values in their requests for 'page_num' and/or 'page_size'. If not specified by the client, the default value for page_size is 5 for trips and 25 for objects. Both of these request parameters must have positive integer values and the value for page_num must be less than or equal to the value of <max_page> (defined below).
There are 3 new response elements that are declared in the response xsd:
Any TripIt API client that is authorized to request data from the API on behalf of a TripIt user that happens to be a TripIt Pro subscriber will automatically receive Pro data in the <Response> objects. The Pro data that is currently available in the API is limited to the following:
Each one of these is discussed in more detail below.
The FlightStatus object is defined here in the object XSD here: tripit-api-obj-v1.xsd. Here's a definition of all of the properties within the FlightStatus object:
| Property | Definition |
|---|---|
| ScheduledDepartureDateTime | The originally scheduled departure date and time of the flight. Note: this DateTime value does not necessarily match the StartDateTime of the enclosing AirSegment object. That value is set by the user in either the UI or via the data found within the confirmation email that was used to create the flight. |
| EstimatedDepartureDateTime | The current estimated departure date and time of the flight. |
| ScheduledArrivalDateTime | The current scheduled arrival date and time of the flight. Note: this DateTime value does not necessarily match the EndDateTime of the enclosing AirSegment object. That value is set by the user in either the UI or via the data found within the confirmation email that was used to create the flight. |
| EstimatedArrivalDateTime | The current estimated arrival date and time of the flight. |
| departure_terminal | The current departure terminal information. Note: this property's value does not necessarily match the start_terminal of the enclosing AirSegment object. That value is set by the user in either the UI or via the data found within the confirmation email that was used to create the flight. |
| departure_gate | The current departure gate information. Note: this property's value does not necessarily match the start_gate of the enclosing AirSegment object. That value is set by the user in either the UI or via the data found within the confirmation email that was used to create the flight. |
| arrival_terminal | The current arrival terminal information. Note: this property's value does not necessarily match the end_terminal of the enclosing AirSegment object. That value is set by the user in either the UI or via the data found within the confirmation email that was used to create the flight. |
| arrival_gate | The current arrival gate information. Note: this property's value does not necessarily match the end_gate of the enclosing AirSegment object. That value is set by the user in either the UI or via the data found within the confirmation email that was used to create the flight. |
| layover_minutes | If layover_minutes is contained within the FlightStatus object contained with an AirSegment that isn't the last segment in a leg the value of layover_minutes will be the number of minutes between this segment's arrival time and the next segment's departure time. |
| baggage_claim | The current baggage claim area. |
| diverted_airport_code | If the flight was diverted, this is the three-letter IATA code of the new airport. |
| last_modified | This is the Unix time when the status of this flight was last updated. |
There is one more property called flight_status that is a new object type that can have one of the following values:
| Value | Name | Description |
|---|---|---|
| 100 | Not Monitorable | An AirSegment in this state is usually in this state because the TripIt platform doesn't have enough information about the flight to monitor it. The minimum set of required data needed to monitor a flight are valid values (i.e. a real flight) for the following properties of a AirSegment:
|
| 200 | Not Monitored | This flight is not being monitored even if it meets all of the criteria to be monitorable if the following conditions are true:
|
| 300 | Scheduled | The flight is monitored but the TripIt platform hasn't seen any updates to the flight yet. |
| 301 | On Time | The flight is currently considered to be on time, which means that the (EstimatedDepartureDateTime - ScheduledDepartureDateTime) <= 14 minutes. |
| 302 | In Flight - On Time | The flight is currently in the air and is considered to be on time, which means that the (EstimatedArrivalDateTime - ScheduledArrivalDateTime) <= 14 minutes. |
| 303 | Arrived - On Time | The flight has arrived and the actual arrival time was within 14 minutes of the ScheduledArrivalDateTime. |
| 400 | Cancelled | The flight has been cancelled. |
| 401 | Delayed | The flight is currently considered to be delayed, which means that the (EstimatedDepartureDateTime - ScheduledDepartureDateTime) >= 15 minutes. |
| 402 | In Flight - late | The flight is currently in the air and is considered to be late, which means that the (EstimatedArrivalDateTime - ScheduledArrivalDateTime) >= 15 minutes. |
| 403 | Arrived - late | The flight has arrived and the actual arrival time was more than 14 minutes after the ScheduledArrivalDateTime. |
| 404 | Diverted | The flight was diverted to an airport other than the one it was originally going to fly into. |
| 405 | Possibly Delayed | The flight has possibly been delayed. |
| 406 | In Flight - Possibly Late | The flight is in flight and may possibly be late. |
| 407 | Arrived - Possibly Late | The flight has arrived but may possibly be late. |
| 408 | Unknown | The flight status is unknown. |
The alternate flights URL is a relative URL that a client application can use to provide alternate flight information for a specific AirSegment object. The URL can be used to reference the alternate flight information on both http://www.tripit.com/ and http://m.tripit.com/.
Data from TripIt Pro's Point Tracker feature is available via the API as well. The methods to obtain this are:
and are described in the /v1/list and /v1/get documentation in more detail.
This document describes the v1 version of the TripIt API. The v1 API may be continually updated in backwards-compatible ways that won't break v1 compliant clients. Backwards compatible means that the additions to the v1 API should not break a properly written v1 client. The types of changes that may be introduce include the addition of new methods, new object properties, and new travel objects. The types of changes that would not be possible in the v1 API would include things such as the changing of object names, object properties, or the removal of methods.
The v1 API will continue to be supported until the v2 API is released and has been available in production for some period of time. After the v2 API becomes available, the v1 API will be considered deprecated and all v1 clients should migrate to use the v2 API. Within a reasonable period of time after being deprecated, TripIt may decide it's necessary to turn off the v1 API after which point v1 clients will cease to function.
Any changes or deadlines for deprecation will be announced at the TripIt API Google group.
This section covers all outstanding known issues and/or known gotchas that aren't more appropriately described elsewhere.
TBD - we're going to include links to Hello, World type applications here


Main Quest
Before you can begin the Main Easter Egg, you must first unlock the Pack-a-Punch. You will also need to have a Death of Orion on at least one player.
There are four sub-quests you must complete in a particular order to finish the first section of the main quest. Each quest centers around one of the four Gods, and are often found within that God's Temple.
Danu
Collect the Ingredients
Skull
Inside the temple, there are small walls of skulls throughout the area. One of these skulls will have a blue symbol on its head. While looking at the skull, you must activate your special weapon, then interact with it. If done correctly, the skull will pop out of the wall and can be picked up.
Next you will need to take the skull and the Death of Orion to the Flooded Crypts. A grinder will appear in one of severl locations in the Flooded Crypts. Place the skull inside of it and shoot the grinder with the Death of Orion, fully charged, three times. Once completed, the skull will have been turned into bonemeal. Pick up the bonemeal to proceed.
Wood
Inside the main Arena will be two large pyres. You must lure a Gladiator near one of the pyres and have them throw their axes through it. If done correctly a chunk of wood should fall off. Pick it up.
Head to the basement of Odin Tower and look above the large cauldron in the center of the room. Interact with the cauldron to place the wood piece into one of the chains hanging from the ceiling. Wait two rounds. After two rounds, pick up the now burned wood.
Poo
In order to retrieve the poo, you must get minimum Crowd Affinity.  Simply run over to the pile to pick it up. You will take damage and lose points.
Mix the Ingredients
With all three ingredients in hand, proceed to the basement of Zeus tower. Next to the Blood Bath, there will be a large bowl on a counter. Interact with the bowl to place the three ingredients inside.
Wait 2 rounds.
Once the ingredients are fully mixed, the resulting mixture will have a green gas cloud above it. Pick up the mixture.
Open the Portal
Take the mixture to the basement of Danu Tower and place it between the trunks of the two trees.
Wait 2 rounds.
Once the mixture is ready, it will begin giving off the green gas cloud again.  Once done, there will be large blue cracks in the ground where the mixture once sat.
Have all players stand on the crack for several seconds. Eventually the players will be transported to a new instance of Danu Tower.
Kill the Red Sacs
All players should look up to the tree and begin shooting the cluster of red sacs. Once all four sacs are popped, a free Max Ammo will appear and the staircase to the next floor will be opened.
Repeat this process twice more on the ground and top floors to complete Danu's quest.
Ra
Once Danu has been completed, four bull heads will appear in one of several random locations across the map. You must shoot each of these heads with the Brazen Bull to summon a Gladiator. Kill each of these Gladiators and then proceed to the top floor of Ra Tower.
The black Obelisk in the center of the room will now have a blue symbol etched into it. All the players must interact with the symbol to be transported to a new instance of Ra Tower.
Next, you will need to watch the obelisk and remember the four symbols that appear and which order they appear in. Each symbol corresponds with a Special Enemy. You must kill each of these enemies in the order that their symbols appeared on the Obelisk. If you kill an enemy out of order, you will be removed from the instance, and must finish the round before being allowed to try again.
This challenge must be completed twice.
- Brawler
- Blightfather
- Electric
- Fire
- Gladiator
- Poison
- Tiger
- Water
Zeus
After Ra has been completed, a symbol will appear on the pedastal in the center of the Challenge platform. When all four players interact with the symbol, they will be teleported to a new instance of the Temple/Crypts.
Four poles will spawn within several windows near each of the four temples. Shooting these poles will cause them to rise up towards the ceiling. Once all four poles have been shot, proceed to the Arena.
The four poles can be found on the edges of the Arena near each of the temples. A blue ring can be found on the ground encircling a pole.
When a pole is fully charged, one of the Challenge Bowls in the center of the arena will be brightly lit.
Once all four poles have been lit, you will be given an unlimited specialist weapon and need to survive an onslaught of Gladiators and Brawlers.
Odin
Once the unlimited specialist weapon round has been survived, nine blue symbols will spawn in the lower section of the map. You must use the Death of Orion to shoot each of these symbols at a particular angle. If shot properly, the symbol will remain illuminated.
Once all nine symbols are lit, proceed to The Pit next to the Brazen Bull. Have all players stand on the grating nearby for ~20 seconds. You will be teleported to a new instance of The Pit and must survive multiple waves.
After surviving, you will be able to return to the normal map and a red portal will have appeared within the Arena.
Boss Fight
After surviving several special infected attacks, a large elephant will spawn. Shoot the armor on its sides to destory it.
Once the first elephant is defeated, a second will appear out of the other large gate. Kill this elephant in the same way to complete the bossfight and finish the Main Quest.


Professional Experience
Flywheel Software: Seattle Operations Manager
Guidance In Giving: Capital Campaign Director
Seattle Preparatory High School: Substitute Teacher
Seattle Preparatory High School: Boys Baseball Coach / Girls Basketball Coach
Long-term Personal Goals
- An exciting career in technology that requires limited commuting.
- Visit every state and every Major League baseball stadium.
- Marriage and a happy family.
Short-term Personal Goals
- Code more!
- Maintain a physical fitness routine while attending Code Fellows
- Develop a network of friends within the coding community
My Top Ten Favorite Baseball Movies
- Field Of Dreams
- For Love Of The Game
- The Natural
- Bull Durham
- Moneyball
- Bang The Drum Slowly
- The Rookie
- The Sandlot
- Eight Men Out
- Pride Of The Yankees
Words of Wisdom
"Luck is where preparation meets opportunity." -Cicero
"The key ingredient in stardom is the rest of the team." -John Wooden


The WIFL object classes may have associations with other object classes and attributes whose types are attribute classes. The object classes and their associations and attributes are shown in the UML class diagrams below.


Ocean [af00], ocean, in Crystal Sea
Last updated Turn #146
Ocean [af00], ocean, in Crystal Sea
------------------------------------------------------------------------
18: The Savvy Aardvark [ha5r], ship, 2 hulls, 1 rowing port, 6 sails,
18: 27% damaged, arrived from Ocean [ag00], owner:
18: Phantasm [n4b], Imperial Empire, duke, with two workers,
18: eight sailors
18: A storm batters the ship and causes some damage.
19: The Savvy Aardvark [ha5r], ship, 2 hulls, 1 rowing port, 6 sails,
19: 30% damaged, departed for Ocean [ae00].
Routes leaving Ocean:
North, to Ocean [ae00], 6 days
East, to Ocean [af01], 6 days
South, to Ocean [ag00], 6 days
West, to Ocean [af86], 6 days
It is raining.


Final Reflections from Foundations.
What are three new things you have learned about yourself and your ego as a result of the core learning?
- I'm quick to judge myself. I suspect that this isn't unique to myself, but at some point in every week I found myself questioning whether I could do this. I think that this is a self-defence mechanism, to realise that I don't really know what I'm doing, it makes me uncomfortable and I don't like it, maybe I should stop.
- I can learn anything I want, given the right mindset and enough energy that I need to put into it. I've had a few moments over the last 5 weeks where I've convinced myself that a task is beyond me, so I look up a solution, read about how it's done and find it simpler than I expected and the next time I try to do it, I can piece it together just fine. I've proven myself wrong quite a few times and that feels pretty good.
- How much fun can be had solving, what is essentially mathematical problems. That said, they can be maddening as well.
What are the role of values, empathy and self awareness in learning and programming?
Being aware of human interaction with code is critical to code. To make it readable to other devs and accessible as many possible users. A team of devs will catch a lot more bugs and make a far more streamlined program, so having an awareness of other people taking part in the coding process, and needing to follow a formatting structure plays a big part in it.
I think that in terms of learning, being able to collaborate and learn from others at a similar level as myself can help fill gaps in my knowledge in a way that sets a solid foundation to buildi upon. For this to work well, you need to be able to communicate clearly and work with your other cohort members.
What has surprised you the most about the core learning?
How difficult it's been. I've always considered myself to be quite emotionally intelligent, but going through the core excercises and learning about myself and EQ as a concept, I've had a few realisations that I can be very aware of other people, but I'm often completely oblivious when it comes to being able to identify and make use of my own emotions and qualities.
What were the most challenging aspects of the core learning?
Strangely, something in my subconscious tries to distract me or shut me off when I start trying to self-analyse, I can spend 8 hours working in a day and get through most of the week's tech activities (or I could towards the start of the foundations curriculum) but when it came to the core excercises i could spend 8 hours and by then end of it I would have written 3 paragraphs. I think it's definitely a skill to work on. If I can't self-analyse to try and figure out what I need to change most about myself, I'll never become the person that I want to be.
Why do you think we, a programming school, are spending so much time focusing on core learning in a web development bootcamp course?
I'm no expert but from what I've learnt here and from what I've read and learnt in my own experience, technical ability seems to be a basic hurdle requirement for a job, that's the obvious thing that people need to learn, but the EQ and people skills are what make a great candidate. A culture of a team can make or break a project just like technical ability can.
Does the time you spent studying core learning here feel like a waste of time? Should you have just used that time to practicing programming instead? Justify your answer.
Definitely doesn't feel like a waste of time. I think the fact that I found it so difficult, is reason enough to say that I should probably try and set aside time, more regularly, for introspection and to work on myself and my EQ rather than just hard skills. The best learning happens outside of our comfort zone.
What is your long term goal and/or career pathway?
I don't have a particular goal or career pathway that I want to see eventuate after bootcamp. I havent decided whether I want to go into front-end or back-end. I havent even decided whether I want to be a web developer or a game developer. I think what I can say though is that I want to see where my strengths lie initially and make more educated decisions based on myself and my opportunities.
What do you think your biggest strengths and limitations will be in Bootcamp?
In a study environment I would usually say that my biggest limitation or threat to my studies would be procrastination, however I've always been good and alert in classes and workshops so I feel like the EDA approach of on-campus full-time learning will suit me well. I think the thing that I'll battle with through this is my own self-talk and making sure that I keep it positive.
In terms of strengths, I really like and thrive when I'm working on a team. I'm very excited to work in teams and learn how I can make the most positive impact I can on a team and a project.
What non-technical skills - human skills - would you like to see developed in yourself while at EDA?
As I mentioned in the previous question, I'm excited to learn to give the best of myself in a team. I think theres a lot of aspects to that goal and it's not something that can be developed in 10 weeks but learning to make team decisions and personally finding that balance between decisive and not overbearing or disengaged with a team or project, making sure that I am actively contributing to a group and helping keep culture positive.
What are your expectations of yourself on Bootcamp
I expect myself to push myself daily. That means staying alert in a way that I can learn and take in the necessary information. That means to make sure that I understand each topic discussed to a minimum level and feeling able to go learn more of the topic by myself in my own time. Strangely, I feel like being able to be a part of a conversation on each topic and not get lost is how I would define my minimum level of understanding, I'm probably not going to test that but thats how I'm measuring that.
Write down a commitment to how you will manage your workload in this programme. This should include - an explanation of how you will manage yourself to work productively and safely with other learners, facilitators and industry/community representatives.
Here is what I wrote in week 2:
My commitment is that I will make this bootcamp a conscious learning experience. I will be deliberate in the notes that I take and the time that I spend working so as to not waste time or procrastinate. I want to be a positive influence on others around me and not complain.
I'm going edit and clarify this coming into bootcamp.
My commitment.
- I'm going to take notes with a goal of creating a cheatsheet/poster with a clear explanation and essential information of each technical topic in bootcamp
- I'm going to remain positive about my learning and keep my language positive with the people around me. No self-deprecating humour, no questioning my learning, I can do this.
- Lastly, I want to add that I want to have positive learning experiences with the other students in the cohort. Rather than focusing on MY learning, I want to learn WITH the others. I'm not sure that that will make a physical difference on my learning experience but I hope it will make a psychological difference.


{% extends 'multiplicity/base.html' %} {% load static %} {% load humanize %} {% block title %}{{ dataset.name }} | Datasets | {{ info.name }} | {{ info.country }}{% endblock %} {% block container %}stretch-bg-head{% endblock %} {% block content %} {% include 'multiplicity/graphs/options.html' %} {% include 'multiplicity/graphs/series.time.html' %} {% include 'multiplicity/graphs/series.column.html' %} {% include 'multiplicity/graphs/series.drill.html' %}
{{ dataset.notes|linebreaksbr }}
You are viewing a subset of the entire {{ topic.name }} dataset. We are only showing materials that are within the following category:
{{ topic.name }}.
{{ dataset.replication|linebreaksbr }}
Download the original data in CSV format using the link below.
{% for csv in csv_files %} {% endfor %}


polire.interpolate.trend package¶
Submodules¶
polire.interpolate.trend.polynomials module¶
File containing polynomials supported by Trend interpolation Class.
polire.interpolate.trend.trend module¶
-
class
polire.interpolate.trend.trend.
Trend
(order=1, custom_poly=None, resolution='standard', coordinate_type='Euclidean')¶ Bases:
polire.interpolate.base.base.Base
Class to interpolate by fitting a curve to the data points available using scipy’s curve_fit.
- order: int, default 1
Selects the order of the polynomial to best fit. Possible values 0 <= order <= 2.
- custom_poly: functor, default None
If you would like to fit to your custom function, _set order to None_ and then pass a functor. See Example functor passing below ```python def func(X, a, b, c):
x1, x2 = X return np.log(a) + b*np.log(x1) + c*np.log(x2)


By Nelson Mandela
By Chinua Achebe.
By George R.R. Martin
By Chimamanda
By Ngugi wa Thiongo
By F.Scott Fitzgerald
By Sun Tzu
By Albert Lehniger.
By Ngugi wa Thiongo.
By Harper Lee.


Online quizzes are a popular form of entertainment for web surfers. Online quizzes are generally free to play and for entertainment purposes only though some online quiz websites offer prizes. Websites feature online quizzes on many subjects. One popular type of online quiz is a personality quiz or relationship quiz which is similar to what can be found in many women's or teen magazines. Websites hosting quizzes include Quizilla, FunTrivia, OkCupid, Sporcle, and Quizlet.
Blog quizzes (also known as quiz blog) refer to a specific genre of quizzes which are conducted by the quizzers on blogs.[citation needed] Blog quizzes may be about verbs[1] or a wide range of other topics.
Some companies and schools use online quizzes as a means to educate their employees or students respectively. Popular websites hosting quizzes for this purpose include Quizlet and Revision Quiz Maker.
Many online quizzes are set up to actually test knowledge or identify a person's attributes. Some companies use online quizzes as an efficient way of testing a potential hire's knowledge without that candidate needing to travel. Online dating services often use personality quizzes to find a match between similar members.


Art of Conversation (from Dad)
The past year had taken a heavy toll on Steve, but he didn't appreciate seeing proof in the mirror. His usually sharp blue eyes looked hazy and drawn tonight. A dark stubble was shrouding his strong jaw and dimpled chin. Around his temples, the gray highlights were advancing, making their way deeper into his thicket of coarse black hair. Although his female colleagues insisted the gray only accentuated his bookish appeal, Langdon knew better.
Clear
Draw Text
Timing will go here
Stats will go here
Number of Points:
Color:
Algo:


--- layout: post title: Clear WiMax Makes it to Rochester - High-Speed Wireless WiMAX Internet & Home Phone Service categories: [Internet] tags: - 3g - 4g - geek - internet - twc - wimax status: publish type: post published: true meta: _original_post_id: '' _original_import_author: John Duprey author: ---
I just received an e-mail from Clear Wireless which offers WiMax (4G) and 3G wireless access, in home with VOIP option as well as mobile. The prices look comparable to TimeWarner cables internet access with the benefit of having a wireless option. For me, it would be a wash in terms of savings, but I like the idea of having a choice and I like the idea of getting mobile Internet far cheaper than any else is offering. I wonder how reliable this service is in the Rochester, NY area? Any Rochester Clear customers care to comment?


Remote
Table of Contents
The Time Is Right for Remote Work
- Office during the day has become the last place where people get their work done.
- Required: ability to be alone with your thoughts.

- Escaping 9am-5pm: synchronous -> asynchronous
- End of city monopoly
- Industrialism (factories): gather a large number of people into small area.
- life need not be divided into arbitrary phases: work and retirement
- Talent isn’t bound by the hubs
- It’s not about the money - promote quality of life, getting best people available
Dealing with Excuses
- If you’re struggling with trust issues, you’ve made a poor hiring decision. We have no desire to be babysitters during the day.
- Most people want to work as long as it’s stimulating and fulfilling. If you’re stuck in a dead-end job that has no prospects of being either, then you don’t need just a remote position, you need a new job.
- Forcing everyone into the office every day is an organizational SPoF.
- Reptilian resistance is not rational but deeply emotional. Fight or flight.
- Good for hours of overlap to avoid collaboration delays and feel like a team.
- Seeing is believing: Record a screencast (animated gif, youtube etc.) and narrate the experience.
- Meetings and managers - are actually the greatest causes of work not getting done at the office.
Big business
- Many big businesses get away with staggering amounts of inefficiency and bureaucracy and seem fine for years. What you need is confidence that you see a smarter way.
- You’re in the game to find the best way to work. The most productive and happiness-inducting setup wins.
Culture
- The stronger the culture the less explicit training and supervision is needed.
- Best cultures derive from actions people actually take, not the ones they write in the mission statements.
I need an answer now
- too many interruptions - little gets done.
 Email -> IM -> telephone.
- ASAP-free. Use that calm to be even more productive.
Forward motion
- weekly discussion thread with the subject “What have you been working on?” Everyone contributes a few lines about past week and what’s intended for the next week. It’s not a precise, rigorous estimation process. It doesn’t attempt to deal with coordination. It simply aims to make everyone feel like they’re in the same galley and not their own little rowboat.
- Progress is a joy best shared with coworkers.
The work is what matters
- work itself is the best yardstick to judge someone’s performance
- s/what did you do today?/Show me what you did today/
Beware of Dragons
- Cabin fever is real. Remote work doesn’t mean being chained to your home-office desk.
- Solid writing and language skills are required.
- Lessons from open source: triumph of asynchronous collaboration and communication
Ergonomics Basics
- Proper desk, proper chain, proper screen.
- Adopt a healthy lifestyle.
- Give remote work a real chance or don’t bother at all. It’s okay to start small, but make sure it’s meaningful.
Working with clients
- First, when pitching business, let the prospective client know up front that you don’t live where they live.
- Second, provide references before the client even asks.
- Third, show them work often.
- Fourth, be very available.
- Lastly, get the client involved and let them follow along. Make sure they feel this is their project too. So their anxieties and fears will be replaced by excitement and anticipation.
Live moves on
- most companies have fixation on keeping their workers.
- Keeping a solid team together for a long time is a key to peak performance.
Keep the good times going
- when the bulk of your communication happens via email and the like, it doesn’t take much for bad blood to develop unless everyone is making their best effort to the contrary.
- Sentiments are infectious, good or bad.
- No assholes allowed, no drama allowed, no bad vibes allowed.
The cost of thriving / equal work equal pay
- If your entire workforce is located in a hot hub and you pay market salaries, you’ll be under constant attack from poachers
- almost unfair advantage in attracting and keeping the best people in the world. So don’t look at remote work as a way to skimp on salaries
Great remote workers are simply great workers
- two key qualities: smart and GTD
- Beware of mental shortcut: nice person = good workers.
On writing well
- first filter that really matters is the cover letter explaining why is there a fit between the company and the applicant. Sometimes you’ve less than 10 seconds.
- First clarity, second style.
Test project
- never ask people to work for free. Make it meaningful too.
- narrow the field to two or three candidates and meet them in person.
Managing remote workers
- a great place to start is to allow your current employees to begin working remotely.
- one on ones: check with remote workers more frequently. Ideally every month.
Stop managing the chairs.
- The job of a manager is not to herd cats, but to lead and verify work.
- When or where someone is doing the work is irrelevant most of the time.
Remove the roadblocks entirely
- start by empowering everyone to make decisions on their own.
- everyone gets a company credit card and is told to “spend wisely”.
- no need to ask for permission to go on vacation. Just put in in the calendar and coordinate with coworkers.
Be on the lookout for overwork, not underwork
- if work is all-consuming, the worker is far more likely to burn out.
- from May to October, we give everyone an additional weekday.
- sponsor employee’s hobbies
Life as a remote worker
- Morning remote, afternoon local
- Family time is a good way to counterbalance the loss of daily in-person contact with coworkers.
- home office -> coffee shop -> single desk -> plain vanilla single suite.
Building a routine
- separate the clothes you wear depending whether you’re in work/play mode
- divide the day into chunks like: catch-up, collaboration and serious work.
- dedicated home office. No checking work email or just getting a little more done in the living room or your bedroom
- One computer for work and another for fun.
- Separate accounts for work and fun.
Staying motivated
- motivation is the fuel of intellectual work
- trying to motivate by means of rewards or threats is terribly ineffective
- the only reliable way to muster motivation is to encourage people to work on things they like and care about, with people they like and care about. There are no shortcuts.
- Routine has a tendency to numb your creativity.


Save time. Create with confidence.
Starter template
A delete-key friendly index.html with recommended meta tags and other goodness.
Normalize.css and Main.css
Includes Normalize.css — a modern alternative to CSS resets — and main.css with further base styles, helpers, media queries, and print styles.
Optimized Analytics
Google Analytics snippet setup for improved performance and helpful additional event tracking.
Modernizr
Get the latest minified versions of Modernizr feature detection library, complete with a custom build configuration.
Server Settings
We independently maintain server configs for multiple platforms to help you deliver excellent site performance and security.
Icons & more
Placeholder favicon, touch-device icon and docs covering dozens of extra tips and tricks.


--- title: Ghost In the Shell Stats kochtitle: UMD 2021 Puzzlehunt "Ghost in the Shell" Statistics goto: /puzzlehunts.html extincludes<EMAIL_ADDRESS>includes: puzzlehunts/umd21data, puzzlehunts/stat_generator ---


PopUp("ACInit(\"::/*;!*/Bible.TXT*\");"); AutoComplete(ON); Sleep(3500); //Puts the cursor at the bottom. Msg(MSG_KEY_DOWN,0,SC_CURSOR_DOWN|SCF_CTRL); "\nCd(\"::/Demo\");\n"; TourPut( "AutoComplete is a feature which also lets you jump to source code of " "symbols. The function keys jump to code, while the number keys jump to " "dictionary definitions.\n\n" "We will now place some text on the command line and jump to source code.\n", TRUE); "BootHD"; TourPut( "Look at the $GREEN$BootHDIns$FG$ entry in the AutoComplete " "window. Notice it is underlined. This means a source code link is " "available.\n\n" "Press $GREEN$<CTRL-SHIFT-F1>$FG$ to jump to source code.\n"); InGetKey(SC_F1|SCF_CTRL|SCF_SHIFT); Sleep(500); WinToTop;//Kludge TourPut("Press $GREEN$<SHIFT-ESC>$FG$ to abort the source code.\n"); InUntilChar(CH_ESC,CH_SHIFT_ESC); TourPut("Press $GREEN$<CTRL-F1>$FG$ to autocomplete.\n"); InGetKey(SC_F1|SCF_CTRL); Sleep(500); Msg(MSG_KEY_DOWN,'\n',SCF_CTRL|SCF_SHIFT); "\n"; TourPut( "Tip: You can restart the AutoComplete window if you have closed it by " "pressing $GREEN$<CTRL-F1>$FG$.\n",TRUE); TourPut( "You can also use the $GREEN$Man()$FG$ function to jump to source code. " "(I use AutoComplete.) The $GREEN$Man()$FG$ is good for short symbol " "names or when inside the debugger.\n",TRUE); InPrint(,"Man(\"U\");"); Sleep(1500); "\n"; TourPut("Press $GREEN$<SHIFT-ESC>$FG$ to abort the source code.\n"); InUntilChar(CH_ESC,CH_SHIFT_ESC);


|
home | news | discuss | issues | license LURE: sk |
|
|---|---|
Scott Knott<EMAIL_ADDRESS>Recursive bi-clustering of set of |
require "show"
local the=require "config"
local tiles=require "tiles"
local lst=require "lists"
|
|
Simple utils |
local function nth(t,n) return t._all[ math.floor(#t._all*n) ] end
local function mid(t) return nth(t,0.5) end
local function iqr(t) return nth(t,0.75) - nth(t,0.25) end
|
|
Here's a simple counter, used to track |
local function create() return {
_all={}, sum=0,n=0, mu=0} end
|
|
Here how to update a counter with one value |
local function update(i,x)
i._all[#i._all+1]=x
i.sum = i.sum + x
i.n = i.n + 1
i.mu = i.sum/i.n end
|
|
Here how to update a counter with many values from |
local function updates(t, counter)
counter = counter or create()
for j=1,#t do
update(counter,t[j]) end
return counter end
|
|
This code is always counting left and right within the list of samples. To save time, memo all those "peeks". |
local function memo(samples,here,stop,_memo, b4,inc)
if stop > here then inc=1 else inc=-1 end
if here ~= stop then
b4= lst.copy( memo(samples,here+inc, stop, _memo)) end
_memo[here] = updates(samples[here]._all, b4)
return _memo[here] end
|
|
Seek a split that maximizes the expected value of the square of the difference in means before and after the split. At that point, if the two splits are not statistically the same, then recurse into each part of the split. |
return function (samples,epsilon,same)
epsilon = epsilon or the.sample.epsilon
local function split(lo,hi,all,rank,lvl)
local best,lmemo,rmemo = 0,{},{}
memo(samples,hi,lo, lmemo) -- summarize i+1 using i
memo(samples,lo,hi, rmemo) -- summarize i using i+1
local cut, lbest, rbest
for j=lo,hi-1 do -- step1: look for the best cut
local l = lmemo[j]
local r = rmemo[j+1]
if mid(l)*the.sample.epsilon < mid(r) then
if not same(l,r) then
local tmp= l.n/all.n*(l.mu - all.mu)^2 +
r.n/all.n*(r.mu - all.mu)^2
if tmp > best then
cut = j
best = tmp
lbest = lst.copy(l)
rbest = lst.copy(r) end end end end
if cut then -- step2a: use the cut (if you found it)
rank = split(lo, cut, lbest, rank, lvl+1) + 1
rank = split(cut+1, hi, rbest, rank, lvl+1)
else -- step2b: otherwise, all samples get same rank
for j=lo,hi do
samples[j].rank = rank end end
return rank
end
table.sort(samples, function (x,y) return
mid(x) < mid(y) end)
split(1,#samples, memo(samples,1,#samples,{}),1,0)
return samples end
|
LegalLURE, Copyright (c) 2017, Tim Menzies All rights reserved, BSD 3-Clause License Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|


Summary
Generated on:
2018-08-19 13:58:51
Documented public members and types:
2
Undocumented public members and types:
2
Coverage:
0.5
Undocumented public members and types
M:DocCoverTestAssembly.PublicNotСoveredClass.PublicMethod
T:DocCoverTestAssembly.PublicNotСoveredClass


We noticed you are not assigned to an organization. Click on the button below to configure a new organization or contact your organization administrator
Fields marked with * are required


You need to be part of organization to create new project, either join in any existing organization or create your own.
Every project need to be created under one eixsting organization, please click any one of these organization name tags below to start
{{org.orgName}}Click on any one of organization name tags below to show
{{org.orgName}}{{p.description}}


Dashboard
Download
Upload
Results
Archived
LOGOUT
Find life-saving information in routine water quality data.
CAMP 001
CAMP 002
CAMP 003
Archive
LOGIN
×
Username
Oops, you missed this one.
Password
Enter your password too!
Forgot password?
Remember me
Cancel
Login


3 Rafale jets handed over to IAF by France: Govt
Three Rafale fighter jets have been handed over to the Indian Air Force and are being used to train IAF pilots and technicians in France, the government said on Wednesday.
Defence Minister Rajnath Singh received the first Rafale jet at an air base in France on October 8.
The first batch of four Rafale aircraft will arrive in India by May 2020.
India and France signed an Euro 7.87 billion (Rs 59,000 crore approximately) deal in September 2016 for 36 Rafale jets.
"Three Rafale fighter aircraft have been handed over to the Indian Air Force till date which are being used for training of IAF pilots and technicians in France," minister of state for defence Shripad Naik said in reply to a question in Lok Sabha.
Naik did not clarify when the two other aircraft were handed over to India.
He said that price of the jets was 2.86 per cent lower than the rates finalised during negotiations for procurement of the Medium Multi-Role Combat Aircraft.
The MMRCA deal was negotiated by the UPA government.
The final negotiations for it continued till early 2014 but the deal could not go through.
"The performance audit report of CAG on capital acquisition in IAF presented in Parliament on February 13 has brought out that the entire package price of 36 Rafale procurement is 2.86 per cent lower than the audit aligned price compared to MMRCA process," Naik said.
The Congress has been accusing the Modi government of massive irregularities in the Rafale deal, claiming that it procured each aircraft at a cost of over Rs 1,670 crore as against Rs 526 crore finalised by the UPA government.
"That CAG report has also brought out that Non Firm and Fixed bid as done in the 36 Rafale IGA (Inter-Governmental Agreement) may be more advantageous than Firm & Fixed offer," said Naik.
He said the pact was signed between Indian and French governments along with aircraft package supply protocol signed with Dassault Aviation, the makers of Rafale jets.
He said the weapons package supply protocol was signed with defence major MBDA.
"Indian government has not recommended any company for making Rafale jets for India," he added.
MBDA's Meteor beyond visual range air-to-air missile and Scalp cruise missile will be the mainstay of the weapons package of the 36 Rafale jets.
Replying to a separate question, Naik said government has not signed any MoU for manufacturing of either Light Combat Aircraft or Su-30 MKI Aircraft with Hindustan Aeronautics Limited.
However, he said two contracts have been signed with HAL for procurement of total 40 LCA and a separate lot of 20 jets.
The minister said six contracts have been signed by the government with HAL for procurement of total 222 Su-30 MKI aircraft under licence production for IAF.