The IUMPR Data Collection Tool provides for the automated collection of data required by 13 CCR 1971.1 (l)(2.3.3), while producing a standardized report format for the submission of the data for review by California Air Resources Board (CARB) staff. One key feature of this process is the tracking for data collection as the test vehicle is driven to identify when the subject monitors have completed and incremented their respective numerators and denominators. The Data Collection Tool's automated collection of In Use Monitor Performance Ratios [IUMPR], test results, and quality checks provide for consistent reporting among the heavy-duty engine manufacturers.
The HD OBD IUMPR Data Collection Tool and process is memorialized in [draft] SAE J3162™. This help file links the software and its process back to SAE J3162. Thus, the software and process have been given an industry standard reference that will provide for clear communication among Engine Manufacturers and CARB staff. 13 CCR (l)(2.3.3) States:
(l)(2.3.3) The evaluation shall verify that the software used to track the numerator and denominator for purposes of determining in-use monitoring frequency correctly increments as required in section (d)(4).
The IUMPR Data Collection Tool is used for HD vehicles that comply with US EPA and CARB data communications regulations using the SAE J1939™ family of standards. The purpose of the tool is the collection and summary of vehicle telemetry for test results, monitor ratios, and monitor completion. The collected data and summaries are then automatically reported creating a standardized format for the submission of (l)(2.3.3) data to CARB.
The software consists of 4 principle functions. These functions may be run in sequence during each use of the
software. But the functions are implemented so that they may be run in alternate orders that are best suited to the
driving demonstration cycles planned for the monitor entry conditions of individual tests.
The last report contained in any tool output file to be provided to CARB shall be the report from Function E (Collect Test Results). The first report in any tool output file shall be the report from Function B (Generate Vehicle Data Plate).
Section 2 provides a step by step instruction on the use of these functions. The balance of section 1 describes hardware and software requirements, vehicle preparation and data collection notes. Please note that the tool clears HD OBD emissions faults using DM11 every time a new file is created. Key On Engine Off operation is strongly recommended for the Vehicle Data Plate which provides the clear faults query before data is collected. Incomplete clearing of data in response to the DM11 command will likely render the test results unacceptable for submission to CARB.
The tool is designed for use on Windows 7 - Windows 10 PCs with ATA/TMC RP 1210C Adapters for datalink communications of SAE J1939 messages. The application software is self-contained; no additional runtime libraries are required. Use on PCs with less than 512MB of RAM is not recommended. The PC's local file system or directly connected flash drive is intended to be used. Note, files created by the tool with the .iumpr file extension contain 8-bit ASCII data. These files may be viewed using common PC utility programs by selecting "Open with". CAN data is logged in the operating systems %TEMP% directory. Commonly this is %userprofile%\AppData\Local\Temp". These logs can be useful in problem root cause analysis. The operating system will reclaim this disk space, when space is needed. The operating systems disk cleanup utility will remove these files.
Vehicles that are used for data collection must be fault free with no pending diagnostics codes. The MIL shall be off. Inspection of the engine's condition using the engine manufacturer's service tool is recommended. This inspection may also clear emissions related and non-emissions related faults before launching the application. The engine manufacturer's service tool shall not be used in parallel with the application.
The tool clears HD OBD emissions faults using DM11 every time a new file is created. Key On Engine Off operation is strongly recommended for the Vehicle Data Plate which provides the clear faults query before data is collected. Incomplete clearing of data in response to the DM11 command will likely render the test results the test results unacceptable to CARB.
The successful completion of data collection depends on a thorough understanding of the manufacturer's monitor entry conditions and ARB regulations for incrementing numerators and denominators as defined in 13 CCR 1971.1 (d). Operating cycles must be a minimum of ten minutes in length where the engine speed exceeds 1150 RPM for five minutes. 13 CCR 1971.1 (d)(4.3.2)(G) also defines an 800 minute denominator for NMHC catalyst infrequent regeneration, and (H) requires 10 seconds of commanded regeneration.
13 CCR 1971.1 (d)(4.3.2)(H) For 2013 and subsequent model year engines, in addition to the requirements of section (d)(4.3.2)(B) above, the denominator(s) for the following monitors shall be incremented if and only if a regeneration event is commanded for a time greater than or equal to 10 seconds:
(i) Diesel NMHC converting catalyst other aftertreatment assistance functions (sections (e)(5.2.3)(A) and (C))
(ii) PM filter incomplete regeneration (section (e)(8.2.3)).
Data collection on a given vehicle may not work due to missing responses when Source Address 249 is used by other equipment on the vehicle that pretend to be a service tool -- Devices are not required to process multiple requests in parallel. Data collection may also be disrupted when devices on the vehicle do not adhere to message protocols described in the SAE J1939 recommended practices. Finally, vehicles with very high bus loading may exceed the capacity of the adapter, causing messages to become lost.
Users should navigate to the location of the executable IUMPR Data Collection Tool or shortcut and double-click the file icon to launch the application. Upon launch, the main screen is presented. The main screen will be used to select the vehicle communications adapter, select an existing report file or create a new report file, and control the data collection operation of the tool.
The title bar displays the Data Collection Tool version information.
The top section of the window initiates the selection of the ATA/TMC RP1210C Vehicle Adapter, the selection of the Report File, and provides the "Help" button.
Below the Report File selector is the Vehicle Information section where the VIN and Cal IDs read from the vehicle are displayed when the "Read Vehicle Information" button is pushed. The "Read Vehicle Information" button is found on the right side of this section.
Below the Vehicle Information section is the Report Control section containing the four buttons the user will use to control the data collection process. Below the four report control buttons is the progress bar. In the progress bar, the tool displays cues for the user on next steps in the data collection process as well as status information on data collection activity.
Below the progress bar is the Report Logger area of the main screen. The Report Logger provides a live preview of the report generated to that point. The Report Logger scrolls so that the most recent information is continuously shown to the user. There is a scroll bar allowing the user to return to an earlier point in the report. The user cannot edit the report in the Report Logger pane but data may be selected and copied to the clipboard by highlighting the desired text and pressing <Ctrl> C.
Upon startup, "Select Vehicle Adapter" is displayed in the progress bar.
The user must select a vehicle communications adapter before any other actions are possible. The Select Vehicle Adapter drop down list guides the selection of an installed communications adapter that will be used for J1939 datalink communications with the engine. This list will be populated with all of the TMC RP1210C adapters installed on the computer. The user may pick one adapter from the drop down list. If there are no vehicle adapters installed, the user will need to install them and restart the application. Upon successfully selecting a vehicle adapter, "Select Report File" is displayed in the progress bar and the user can then select or create a report file. Once report generation has begun, the Select Vehicle Adapter control is disabled until the report generation has completed.
Follow the adapter manufacturer's recommendations for connecting the adapter to the PC and to the vehicle. Adapters are often recommended to be connected to the PC and the vehicle's diagnostic connector before the ignition key is turned on. Only the adapter to be used by the data collection tool software should be connected to the vehicle's J1939-13 connecter while the application software is in use.
After a vehicle adapter has been selected, the user can select or create a report file. Pushing the "Select File..." button will open a standard Windows file selection dialog box. The file chooser dialog will allow the user to navigate to the desired report file directory. The user will be able to choose any file location, whether it is local to the computer or a connected network drive. The user may type the name of the file to be used, (The tool creates a new file if filename entered does not exist) or select an existing file displayed in the file selection dialog box. If the specified filename (new file) does not have the extension ".iumpr," it will be added to the filename by the application. If the user chooses the wrong file, they are able to cancel their selection and no file will be selected. After they have chosen a file this control will display the path and filename.
If the user would like to extend previously saved data, they must select an existing file. Selections of existing files are validated to ensure their suitability for use. If the previous VIN and Calibration Information found in the file are inconsistent within the selected file, the user cannot proceed with that file. Time Stamps in an existing report file must also monotonically increase. (Subsequent time stamps must increase or match preceding time stamp.) If the file is not suitable for use, the user must choose a different report file or close the application. Report files are stored in plaintext format allowing a user to examine contents for VIN, calibration data, time stamp data, etc.
If there is a problem reading the file or the application cannot write to the file, a pop up will be presented and the user will be required to choose a different report file or close the application. After successfully selecting a report file, "Push Read Vehicle Info Button" is displayed in the progress bar. Once report generation has begun, the select file control will be disabled until report generation has completed.
After a vehicle adapter has been selected and a valid report file specified, the "Read Vehicle Info" button is enabled, allowing the user to read VIN, Calibrations, and Time Since Code Clear information from the vehicle. VIN and Engine Calibrations information will be displayed in the "VIN:" and "Cal ID" areas respectively. If an existing report file has been selected, VIN, Calibrations, and Time Since Code Clear from the vehicle will be checked against the corresponding information in the selected report file. Additionally, the last Time Since Code Clear in the file will be checked against the current Time Since Code Clear from the vehicle. If the Time Since Code Clear was reset or there is a gap of more than 60 minutes, a warning message will be displayed, but the user will be allowed to continue using this report file.
If the VIN or Calibrations do not match, a warning will be displayed to the user and they will be required to choose a different vehicle or report file to continue. After choosing a new report file or different vehicle, the application will require the user to read the vehicle information again before proceeding.
Once it has been determined that the vehicle information matches a valid report file, the user will be able to generate the Vehicle Data Plate. The "Generate Vehicle Data Plate" button will be enabled and the application will display "Push Generate Vehicle Data Plate Button" in the progress bar. If for any reason, the user does not want to continue with the selected adapter, report file, or vehicle, these can be changed prior to pushing the "Generate Vehicle Data Plate" button.
After the vehicle information has been read and it has been determined that the report file matches the connected vehicle, the user may Generate the Vehicle Data Plate by pushing the "Generate Vehicle Data Plate" button. The Tool will query the vehicle and return information to the Report Logger area at the bottom of the main screen. The information appearing in the Report Logger area will also be appended to the report file.
Important: During the vehicle data plate generation, if a new file is being used, the Diagnostic Trouble Codes (DTCs) will be cleared, using the SAE J1939-73 DM11 query. Many manufacturers only honor a DM11 query when the engine isn't running. If a running engine is observed, a warning dialogue will open cautioning the user to stop the engine and turn the key back on, before continuing with the data plate generation. Also, for new or existing files, the emission related DTCs will be read. If there are DTCs present, a warning dialog will be presented to the user. The user then has the choice to continue using the tool or end the program by pushing the "Stop"" button.
Status information on the data collection process and work in progress is provided in the progress bar just above the Report Logger area. At any time during the vehicle data plate generation, the user may press the "Stop" button. If the "Stop" button is pressed, the data plate generation will stop and a message will be recorded to the file indicating the operation was stopped. The user will be able to press the "Generate Vehicle Data Plate" button again but will be unable to select a different adapter or report file. Until the vehicle data plate has been successfully generated the user will not be able to proceed to any other function.
The application indicates the successful completion of Vehicle Data Plate generation by showing "Data Plate Report Completed" on the progress bar and enabling the "Track Monitor Completion Status" and "Collect Tests Results" buttons. After the vehicle data plate has been generated, the user will not be able to generate additional data plates, select a different adapter or report file, or read information from the vehicle until the application has been restarted.
After the Vehicle Data Plate has been generated, the user may track the monitor completion status by pressing the "Track Monitor Completion Status" button. Pressing this button will open a Status View as a separate window showing the Performance Ratios and Supported Monitors. While executing the Tracking Monitor Completion Status function, the application will compare current DM20 monitor data to the DM20 monitor Baseline data from the first Vehicle Data Plate in the report file. The current data will be updated periodically until the "Stop" button is pressed.
Monitor Completion Status tracking will continue indefinitely while the vehicle continues to communicate, or until the user presses "Stop Tracking Monitor Completion Status" button on the Status View window or the "Stop" button on the main screen. The Status View window can only be closed by pressing the "Stop" button (on main screen) or the "Stop Tracking Monitor Completion Status" button (on Status View window).
It's important to note the different actions produced by these two different stop buttons. Pressing the "Stop" button on the main screen will interrupt the operation immediately without completing the Track Monitor Completion Status function. Pressing the "Stop Tracking Monitor Completion Status" button on the Status View will close the Status View and return the user to the main screen. The application will read additional information from the vehicle to complete the Tracking Monitor Completion Status function and append the results to the report file and Report Logger (DM21 Time Since Code Cleared, Vehicle Distance, and Engine Hours).
If the vehicle stops providing engine speed, DM5, DM20, or DM26 responses the operation will end. (More details are provided in the "Communications Status" section below.) If this happens, the results will be summarized and the Status View will be closed.
Once the Status View has been closed, users are returned to the main screen. The progress bar will display "Data Monitor Log Completed". At this point users have the option of continuing to track monitors (by hitting the "Track Monitor Completion Status" button), collecting test results (by hitting the "Collect Tests Results" button), or exiting the application (by hitting the "Stop" button and pressing the "X" in upper right corner of the title bar of the main screen).
The Status View window is opened while the tool is tracking monitor completion status to provide useful information about the monitor tracking progress. It is composed of an "Information Table," a "Performance Ratio Table," "Supported Monitors Table," a "Stop Tracking Monitor Completion Status Button," and "Communications Status" section. The three tables show the DM21, DM20, DM5, and DM26 information: The Information Table, the Performance Ratio Table, and the Supported Monitors Table. As information changes, the changed information will be highlighted in green. The tables can be independently resized or scrolled. Additionally, the view can be resized up to the size of the computer screen.
The Information Table at the top shows the Time and Distance since DTCs were cleared information from DM21 packets. It also displays the number of Ignition Cycles and OBD Monitoring Conditions Encountered from DM20 packets. If a value changes from the beginning of the session, the entire row containing the changed value will be highlighted.
The user can sort the table by clicking on the column headings.
While executing the Tracking Monitor Completion Status function, the application will display the current Performance
Ratios from the DM20 packets and compare current DM20 monitor data to the DM20 monitor Baseline data from the first
Vehicle Data Plate in the report file. This information is displayed in the Performance Ratio Table of the Status
View.
Field background colors indicate a Numerator change relative to the Baseline data (first Vehicle Data Plate Report of the data file). If a Numerator has incremented since the initial values were read when the first data plate was generated, the changed Numerator will be highlighted green. If a increased to a Numerator is observed while the application is executing the Tracking Monitor Completion Status function IN THIS SESSION, the entire row will be highlighted in green. In the event a Numerator or Denominator decrement, they will be highlighted red.
The user can sort the table by clicking on the column headings. By default, the column will sort ratios by source, then by ratio name.
The Supported Monitors Table (DM26/DM5) shows the composite vehicle monitors status. It shows the Trip Status from DM26 packets, and the Overall Status from DM5 packets. Monitors that are disabled or not supported or monitored are highlighted grey. Monitors that are not complete will be the background color. Monitors that are complete are highlighted green. In the event that the Overall Status for a Monitor is supported and not complete but the Trip Status is disabled, the row will be highlighted red.
The lower right section of the Status View displays the communication status of the DM5, DM20, DM26, and DM21 packets. When a message is received, the value in the progress bar of the appropriate message is set to the maximum value. As time passes without receiving a message the value will decay. If the value reaches the minimum, "Timeout" will be displayed indicating that communications has failed. (If this occurs, user should check for loose adapter cable or vehicle off condition.) When a message is received, the value will return to the maximum and the process will continue. A communication status check is done every 10 seconds. For DM5 requests the application will try three times. Engine speed is checked every 300 ms. If there is no response for either, the data collection will abort.
The "Stop Tracking Monitor Completion Status" button should be used to end the tracking process. After pressing this button, the application will display the progress through the final steps of the Tracking Monitor Completion Status function in the progress bar and Report Logger of the main screen (DM21 Time Since Code Cleared, Vehicle Distance, and Engine Hours). And, the process will gather the remaining information and summarize the differences in the ratios and monitors. The "Stop Tracking Monitor Completion Status" button will also close the Status View.
Once the Status View has been closed, users are returned to the main screen. The progress bar says "Data Monitor Log Completed." Here they have the option of continuing to track monitors (by hitting the "Track Monitor Completion Status" button), collecting test results (by hitting the "Collect Tests Results" button), or exiting the application (by hitting the "Stop" button and pressing the "X" in upper right corner of the title bar) from the main screen.
Once the Vehicle Data Plate has been generated, the user may collect the tests results by pressing the "Collect Tests Results" button. This process will query the vehicle with a DM24 message to determine which SPNs support tests results. For those supported SPNs, a DM7 will be sent. The results will be written to the report file and Report Logger area. Work in progress and status information on the Collect Test Results process is provided in the progress bar just above the Report Logger. When the process is complete, the application will display "Data Collection Log Completed" in the progress bar and an END OF REPORT banner will be written to the Report Logger area and report file.
At any time during the Collect Test Results process, the user may press the "Stop" button. Pressing the "Stop" button will stop the process and cause a data collection log stopped message to be recorded to the Report Logger area and report file.
Close the application by pressing the "X" in upper right corner of the title bar of the main screen. If a report file has been selected, a message will be written to the file indicating when the application was closed.
This software was developed for the Equipment & Tool Institute by Solid Design, Inc.
Copyright (c) 2017 Equipment & Tool Institute
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Note:
SAE J1939™, SAE J1939-13™, SAE J1939-73™, and SAE J3162™ are trademarks of SAE International, Inc.


Before Change
knf = npt.dec.knownfailureif
fail_normalization = set(["vonmises", "ksone"])
fail_higher = set(["vonmises", "ksone", "ncf"])
for distname, arg in distcont[:]:
distfn = getattr(stats, distname)
m, v, s, k = distfn.stats(*arg, moments="mvsk")
cond1, cond2 = distname in fail_normalization, distname in fail_higher
msg = distname + " fails moments"
yield knf(cond1, msg)(check_normalization), distfn, arg, distname
yield knf(cond2, msg)(check_mean_expect), distfn, arg, m, distname
yield knf(cond2, msg)(check_var_expect), distfn, arg, m, v, distname
yield knf(cond2, msg)(check_skew_expect), distfn, arg, m, v, s, distname
yield knf(cond2, msg)(check_kurt_expect), distfn, arg, m, v, k, distname
yield check_loc_scale, distfn, arg, m, v, distname
yield check_moment, distfn, arg, m, v, distname
def check_sample_meanvar_(distfn, arg, m, v, sm, sv, sn, msg):
// this did not work, skipped silently by nose
if not np.isinf(m):
check_sample_mean(sm, sv, sn, m)
After Change
@npt.dec.slow
def test_moments():
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=integrate.IntegrationWarning)
knf = npt.dec.knownfailureif
fail_normalization = set(["vonmises", "ksone"])
fail_higher = set(["vonmises", "ksone", "ncf"])
for distname, arg in distcont[:]:
distfn = getattr(stats, distname)
m, v, s, k = distfn.stats(*arg, moments="mvsk")
cond1, cond2 = distname in fail_normalization, distname in fail_higher
msg = distname + " fails moments"
yield knf(cond1, msg)(check_normalization), distfn, arg, distname
yield knf(cond2, msg)(check_mean_expect), distfn, arg, m, distname
yield knf(cond2, msg)(check_var_expect), distfn, arg, m, v, distname
yield knf(cond2, msg)(check_skew_expect), distfn, arg, m, v, s, \
distname
yield knf(cond2, msg)(check_kurt_expect), distfn, arg, m, v, k, \
distname
yield check_loc_scale, distfn, arg, m, v, distname
yield check_moment, distfn, arg, m, v, distname
def check_sample_meanvar_(distfn, arg, m, v, sm, sv, sn, msg):
// this did not work, skipped silently by nose
if not np.isinf(m):
check_sample_mean(sm, sv, sn, m)


GUEST INFOMATION
SEMI-FORMAL ATTIRE
Children: Due to space constraints, we will be unable to accompany children under the age of seventeen for both the ceremony and reception.
Children: Due to space constraints, we will be unable to accompany children under the age of seventeen for both the ceremony and reception.


Prota File List
Here is a list of all documented files with brief descriptions:
config.h
[code]
interpreter.h
[code]
native.h
[code]
objects-private.h
[code]
objects.h
[code]
objhash.h
[code]
opcodes.h
[code]
predefined.h
[code]
proto-errors.h
[code]
Generated on Sun Feb 9 20:47:36 2003 for Prota by
1.3-rc2


{% extends "notesapp/onboarding/onboarding-base.html" %} {% from "notesapp/_macros.html" import render_pagination %} {% block msg_box_content %}
Email the service to create notes without logging in.
The emails you send will appear as notes, ready for you to organise.
This is the email address you'll need to use
You can request an email to be sent to you so you can add it to your contacts.


Documents¶
On this page
Documents are the core objects in Mongoid and any object that is to be persisted to the database must include Mongoid::Document. The representation of a Document in MongoDB is a BSON object that is very similar to a Ruby hash or JSON object. Documents can be stored in their own collections in the database, or can be embedded in other Documents n levels deep.
Storage¶
Mongoid by default stores documents in a collection that is the pluralized form of the class name. For the following Person class, the collection the document would get stored in would be named people.
class Person
include Mongoid::Document
end
Model class names cannot end with “s”, because it will be considered as the pluralized form of the word. For example “Status” would be considered as the plural form of “Statu”, which will cause a few known problems.
This is a limitation of the ActiveSupport::Inflector#classify which Mongoid uses to convert from filenames and collection names to class names. You can overcome this by specifying a custom inflection rule for your model class. For example, the following code will take care of the model named Status.
ActiveSupport::Inflector.inflections do |inflect|
inflect.singular("status", "status")
end
The collection for the model’s documents can be changed at the class level if you would like them persisted elsewhere. You can also change the database and client the model gets persisted in from the defaults.
class Person
include Mongoid::Document
store_in collection: "citizens", database: "other", client: "secondary"
end
The store_in macro can also take lambdas - a common case for this is multi-tenant applications.
class Band
include Mongoid::Document
store_in database: ->{ Thread.current[:database] }
end
When a document is stored in the database the ruby object will get serialized into BSON and have a structure like so:
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"title" : "Sir",
"name" : {
"_id" : ObjectId("4d3ed089fb60ab534684b7ff"),
"first_name" : "Durran"
},
"addresses" : [
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e0"),
"city" : "Berlin",
"country" : "Deutschland"
}
]
}
Fields¶
Even though MongoDB is a schemaless database, most uses will be with web applications where form parameters always come to the server as strings. Mongoid provides an easy mechanism for transforming these strings into their appropriate types through the definition of fields in a Mongoid::Document.
Consider a simple class for modeling a person in an application. A person may have a first name, last name, and middle name. We can define these attributes on a person by using the fields macro.
class Person
include Mongoid::Document
field :first_name, type: String
field :middle_name, type: String
field :last_name, type: String
end
Below is a list of valid types for fields.
- Array
- BigDecimal
- Boolean
- Date
- DateTime
- Float
- Hash
- Integer
- BSON::ObjectId
- BSON::Binary
- Range
- Regexp
- String
- Symbol
- Time
- TimeWithZone
If you decide not to specify the type of field with the definition, Mongoid will treat it as an object and not try to typecast it when sending the values to the database. This can be advantageous in 2 places, since the lack of attempted conversion will yield a slight performance gain. However some fields are not supported if not defined as fields. A rule of thumb for what fields you can use are:
- You’re not using a web front end and values are already properly cast.
- All of your fields are strings.
class Person
include Mongoid::Document
field :first_name
field :middle_name
field :last_name
end
Types that are not supported as dynamic attributes since they cannot be cast are:
- BigDecimal
- Date
- DateTime
- Range
Accessing Field Values¶
When a field is defined, Mongoid provides several different ways of accessing the field.
# Get the value of the first_name field
person.first_name
person[:first_name]
person.read_attribute(:first_name)
# Set the value for the first_name field
person.first_name = "Jean"
person[:first_name] = "Jean"
person.write_attribute(:first_name, "Jean")
If you have defined custom getter/setter, those will be used when using the dot notation.
class Person
include Mongoid::Document
field :first_name
# custom getter
def first_name
"My name is Johnny"
end
# custom setter
def first_name=(value)
p 'Setting.. '
self.first_name = value
p '.. done!'
end
end
# Like this:
person.first_name = 'John'
# Setting..
# .. done!
person.first_name # My name is Johnny
person[:first_name] # John
person.read_attribute(:first_name) # John
In cases where you want to set multiple field values at once, there are a few different ways of handling this as well.
# Get the field values as a hash.
person.attributes
# Set the field values in the document.
Person.new(first_name: "Jean-Baptiste", middle_name: "Emmanuel")
person.attributes = { first_name: "Jean-Baptiste", middle_name: "Emmanuel" }
person.write_attributes(
first_name: "Jean-Baptiste",
middle_name: "Emmanuel"
)
Hash Fields¶
When using a field of type Hash, be wary of adhering to the legal key names for mongoDB, or else the values will not store properly.
class Person
include Mongoid::Document
field :first_name
field :url, type: Hash
# will update the fields properly and save the values
def set_vals
self.first_name = 'Daniel'
self.url = {'home_page' => 'http://www.homepage.com'}
save
end
# all data will fail to save due to the illegal hashkey
def set_vals_fail
self.first_name = 'Daniel'
self.url = {'home.page' => 'http://www.homepage.com'}
save
end
end
Defaults¶
You can tell a field in Mongoid to always have a default value if nothing has been provided. Defaults are either static values or lambdas.
class Person
include Mongoid::Document
field :blood_alcohol_level, type: Float, default: 0.40
field :last_drink, type: Time, default: ->{ 10.minutes.ago }
end
Be wary that default values that are not defined as lambdas or procs are evaluated at class load time, so the following 2 definitions are not equivalent. (One would probably prefer the second, which is at document creation time.)
field :dob, type: Time, default: Time.now
field :dob, type: Time, default: ->{ Time.now }
If you want to set a default with a dependency on the document’s state, self inside a lambda or proc evaluates to the document instance.
field :intoxicated_at, type: Time, default: ->{ new_record? ? 2.hours.ago : Time.now }
When defining a default value as a proc, Mongoid will apply the default after all other attributes are set. If you want this to happen before the other attributes, set pre_processed: true.
Aliasing Fields¶
One of the drawbacks of having a schemaless database is that MongoDB must store all field information along with every document, meaning that it takes up a lot of storage space in RAM and on disk. A common pattern to limit this is to alias fields to a small number of characters, while keeping the domain in the application expressive. Mongoid allows you to do this and reference the fields in the domain via their long names in getters, setters, and criteria while performing the conversion for you.
class Band
include Mongoid::Document
field :n, as: :name, type: String
end
band = Band.new(name: "Placebo")
band.attributes #=> { "n" => "Placebo" }
criteria = Band.where(name: "Placebo")
criteria.selector #=> { "n" => "Placebo" }
Custom Fields¶
You can define custom types in Mongoid and determine how they are serialized and deserialized. You simply need to provide 3 methods on it for Mongoid to call to convert your object to and from MongoDB friendly values.
class Venue
include Mongoid::Document
field :location, type: Point
end
class Point
attr_reader :x, :y
def initialize(x, y)
@x, @y = x, y
end
# Converts an object of this instance into a database friendly value.
def mongoize
[ x, y ]
end
class << self
# Get the object as it was stored in the database, and instantiate
# this custom class from it.
def demongoize(object)
Point.new(object[0], object[1])
end
# Takes any possible object and converts it to how it would be
# stored in the database.
def mongoize(object)
case object
when Point then object.mongoize
when Hash then Point.new(object[:x], object[:y]).mongoize
else object
end
end
# Converts the object that was supplied to a criteria and converts it
# into a database friendly form.
def evolve(object)
case object
when Point then object.mongoize
else object
end
end
end
end
The instance method mongoize takes an instance of your object, and converts it into how it will be stored in the database. In our example above, we want to store our point object as an array in the form [ x, y ].
The class method demongoize takes an object as how it was stored in the database, and is responsible for instantiating an object of your custom type. In this case, we take an array and instantiate a Point from it.
The class method mongoize takes an object that you would use to set on your model from your application code, and create the object as it would be stored in the database. This is for cases where you are not passing your model instances of your custom type in the setter:
point = Point.new(12, 24)
venue = Venue.new(location: point) #=> This uses the mongoize instance method.
venue = Venue.new(location: [ 12, 24 ]) #=> This uses the mongoize class method.
The class method evolve takes an object, and determines how it is to be transformed for use in criteria. For example we may want to write a query like so:
point = Point.new(12, 24)
Venue.where(location: point)
Note that when accessing custom fields from the document, you will get a new instance of that object with each call to the getter. This is because Mongoid is generating a new object from the object from the raw attributes on each access.
We need the point object in the criteria to be transformed to a Mongo friendly value when it is not as well, evolve is the method that takes care of this. We check if the passed in object is a Point first, in case we also want to be able to pass in ordinary arrays instead.
Reserved Names¶
If you define a field on your document that conflicts with a reserved method name in Mongoid, the configuration will raise an error. For a list of these you may look at Mongoid.destructive_fields.
Custom Ids¶
For cases when you do not want to have BSON::ObjectId ids, you can override Mongoid’s _id field and set them to whatever you like.
class Band
include Mongoid::Document
field :name, type: String
field :_id, type: String, default: ->{ name }
end
Dynamic Fields¶
By default Mongoid doesn’t supports dynamic fields. You can tell mongoid that you want to add dynamic fields by including Mongoid::Attributes::Dynamic in model. Mongoid::Attributes::Dynamic will allow attributes to get set and persisted on the document even if a field was not defined for them. There is a slight ‘gotcha’ however when dealing with dynamic attributes in that Mongoid is not completely lenient about the use of method_missing and breaking the public interface of the Document class.
class Person
include Mongoid::Document
include Mongoid::Attributes::Dynamic
end
When dealing with dynamic attributes the following rules apply:
If the attribute exists in the document, Mongoid will provide you with your standard getter and setter methods. For example, consider a person who has an attribute of “gender” set on the document:
# Set the person's gender to male.
person[:gender] = "Male"
person.gender = "Male"
# Get the person's gender.
person.gender
If the attribute does not already exist on the document, Mongoid will not provide you with the getters and setters and will enforce normal method_missing behavior. In this case you must use the other provided accessor methods: ([] and []=) or (read_attribute and write_attribute).
# Raise a NoMethodError if value isn't set.
person.gender
person.gender = "Male"
# Retrieve a dynamic field safely.
person[:gender]
person.read_attribute(:gender)
# Write a dynamic field safely.
person[:gender] = "Male"
person.write_attribute(:gender, "Male")
Localized Fields¶
Mongoid now supports localized fields without the need of any external gem.
class Product
include Mongoid::Document
field :description, localize: true
end
By telling the field to localize, Mongoid will under the covers store the field as a hash of locale/value pairs, but normal access to it will behave like a string.
I18n.default_locale = :en
product = Product.new
product.description = "Marvelous!"
I18n.locale = :de
product.description = "Fantastisch!"
product.attributes
#=> { "description" => { "en" => "Marvelous!", "de" => "Fantastisch!" }
You can get and set all the translations at once by using the corresponding _translations method.
product.description_translations
#=> { "en" => "Marvelous!", "de" => "Fantastisch!" }
product.description_translations =
{ "en" => "Marvelous!", "de" => "Wunderbar!" }
Fallbacks¶
When using fallbacks, Mongoid will automatically use them when a translation is not available.
For Rails applications, set the fallbacks configuration setting to true in your environment.
config.i18n.fallbacks = true
For non-rails applications, you must include the fallbacks module straight to the I18n gem.
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
Then when the fallbacks are defined, if a translation is not present Mongoid will fallback in order of the defined locales.
I18n.default_locale = :en
I18n.fallbacks = true
::I18n.fallbacks[:de] = [ :de, :en, :es ]
product = Product.new
product.description = "Marvelous!"
I18n.locale = :de
product.description #=> "Marvelous!"
Querying¶
When querying for localized fields using Mongoid’s criteria API, Mongoid will automatically alter the criteria to match the current locale.
# Match all prodcucts with Marvelous as the description. Locale is en.
Product.where(description: "Marvelous!")
# The resulting MongoDB query filter: { "description.en" : "Marvelous!" }
Indexing¶
If you plan to be querying extensively on localized fields, you should index each of the locales that you plan on searching on.
class Product
include Mongoid::Document
field :description, localize: true
index "description.de" => 1
index "description.en" => 1
end
Dirty Tracking¶
Mongoid supports tracking of changed or “dirty” fields with an API that mirrors that of Active Model. If a defined field has been modified in a model the model will be marked as dirty and some additional behavior comes into play.
Viewing Changes¶
There are various ways to view what has been altered on a model. Changes are recorded from the time a document is instantiated, either as a new document or via loading from the database up to the time it is saved. Any persistence operation clears the changes.
class Person
include Mongoid::Document
field :name, type: String
end
person = Person.first
person.name = "Alan Garner"
# Check to see if the document has changed.
person.changed? #=> true
# Get an array of the names of the changed fields.
person.changed #=> [ :name ]
# Get a hash of the old and changed values for each field.
person.changes #=> { "name" => [ "Alan Parsons", "Alan Garner" ] }
# Check if a specific field has changed.
person.name_changed? #=> true
# Get the changes for a specific field.
person.name_change #=> [ "Alan Parsons", "Alan Garner" ]
# Get the previous value for a field.
person.name_was #=> "Alan Parsons"
Resetting Changes¶
You can reset changes of a field to its previous value by calling the reset method.
person = Person.first
person.name = "Alan Garner"
# Reset the changed name back to the original
person.reset_name!
person.name #=> "Alan Parsons"
Notes On Persistence¶
Mongoid uses dirty tracking as the core of its persistence operations. It looks at the changes on a document and atomically updates only what has changed unlike other frameworks that write the entire document on each save. If no changes have been made, Mongoid will not hit the database on a call to Model#save.
Viewing Previous Changes¶
After a document has been persisted, you can see what the changes were previously by calling Model#previous_changes.
person = Person.first
person.name = "Alan Garner"
person.save #=> Clears out current changes.
# View the previous changes.
person.previous_changes #=> { "name" => [ "Alan Parsons", "Alan Garner" ] }
Readonly Attributes¶
You can tell Mongoid that certain attributes are readonly. This will allow documents to be created with theses attributes, but changes to them will be filtered out.
class Band
include Mongoid::Document
field :name, type: String
field :origin, type: String
attr_readonly :name, :origin
end
band = Band.create(name: "Placebo")
band.update_attributes(name: "Tool") # Filters out the name change.
If you explicitly try to update or remove the attribute by itself, then a ReadonlyAttribute error will be raised.
band.update_attribute(:name, "Tool") # Raises the error.
band.remove_attribute(:name) # Raises the error.
Inheritance¶
Mongoid supports inheritance in both root and embedded documents. In scenarios where documents are inherited from their fields, relations, validations and scopes get copied down into their child documents, but not vise-versa.
class Canvas
include Mongoid::Document
field :name, type: String
embeds_many :shapes
end
class Browser < Canvas
field :version, type: Integer
scope :recent, where(:version.gt => 3)
end
class Firefox < Browser
end
class Shape
include Mongoid::Document
field :x, type: Integer
field :y, type: Integer
embedded_in :canvas
end
class Circle < Shape
field :radius, type: Float
end
class Rectangle < Shape
field :width, type: Float
field :height, type: Float
end
In the above example, Canvas, Browser and Firefox will all save in the canvases collection. An additional attribute _type is stored in order to make sure when loaded from the database the correct document is returned. This also holds true for the embedded documents Circle, Rectangle, and Shape.
Querying Subclasses¶
Querying for subclasses is handled in the normal manner, and although the documents are all in the same collection, queries will only return documents of the correct type, similar to Single Table Inheritance in ActiveRecord.
# Returns Canvas documents and subclasses
Canvas.where(name: "Paper")
# Returns only Firefox documents
Firefox.where(name: "Window 1")
Associations¶
You can add any type of subclass to a has one or has many association, through either normal setting or through the build and create methods on the association:
firefox = Firefox.new
# Builds a Shape object
firefox.shapes.build({ x: 0, y: 0 })
# Builds a Circle object
firefox.shapes.build({ x: 0, y: 0 }, Circle)
# Creates a Rectangle object
firefox.shapes.create({ x: 0, y: 0 }, Rectangle)
rect = Rectangle.new(width: 100, height: 200)
firefox.shapes
Timestamping¶
Mongoid supplies a timestamping module in Mongoid::Timestamps which can be included to get basic behavior for created_at and updated_at fields.
class Person
include Mongoid::Document
include Mongoid::Timestamps
end
You may also choose to only have specific timestamps for creation or modification.
class Person
include Mongoid::Document
include Mongoid::Timestamps::Created
end
class Post
include Mongoid::Document
include Mongoid::Timestamps::Updated
end
If you want to turn off timestamping for specific calls, use the timeless method:
person.timeless.save
Person.timeless.create!
If you’d like shorter timestamp fields with aliases on them to save space, you can include the short versions of the modules.
class Band
include Mongoid::Document
include Mongoid::Timestamps::Short # For c_at and u_at.
end
class Band
include Mongoid::Document
include Mongoid::Timestamps::Created::Short # For c_at only.
end
class Band
include Mongoid::Document
include Mongoid::Timestamps::Updated::Short # For u_at only.
end


--- layout: page title: Prizes and bounties ---
The full GovHack prize lists will be announced here at 7 PM on the first night of the hack: govhack.org/2015-prizes
More to come here... watch this space!


-
What is MinneHack?
MinneHack is a hackathon that welcomes hackers from around the
country — a 24-hour event where you can compete, create,
and collaborate to make something amazing. If you make something
outstanding, you can win prizes and recognition from our
sponsors! Even if you don't win, we will be giving out swag from
our sponsors during the event!
-
Who hosts MinneHack?
MinneHack is hosted by the University of Minnesota, Twin Cities
chapter of the Association for Computing Machinery. If you have
any questions about the event, you can contact us
at<EMAIL_ADDRESS>or use the
contact form below.
-
When is MinneHack?
MinneHack {{ site.data.schedule.year }} will start on Saturday, {{ site.data.schedule.month }} {{ site.data.schedule.startdate }}
at 6PM CST and run for 24 hours until Sunday, {{ site.data.schedule.month }} {{ site.data.schedule.enddate }} 6PM CST.
-
Where is MinneHack?
The Great Hall in Coffman Memorial Union, University of
Minnesota, 300 Washington Ave SE, Minneapolis, MN
55455.
-
How do teams work?
You can create your own team ahead of time if you'd like, or
meet and greet new people and form a team at the event! Teams
will consist of 1-4 undergraduate, graduate, or high school students
of any skill level and any discipline, but all are judged on the same
grounds, so the more the merrier!
-
Can I work on something before the event and bring it to MinneHack?
What you present at MinneHack must all be created within the 24
hours of the event. However, feel free to brainstorm and bring
your ideas!
-
How do the prizes work?
Prizes are doled out on a per-person basis. A winning team of 1
member gets 1 prize. A winning team of 4 members gets 4 prizes!
So there's nothing to lose for having a full team.
-
How much does MinneHack cost?
Thanks to our wonderful sponsors, MinneHack
is completely free! We will provide food,
drinks, internet, entertainment, swag from our sponsors, and
even a sleeping area, so all you
have to worry about is the coding.
-
What do I need to bring?
You'll need to bring yourself and a computer! A more
comprehensive list of things will be sent to you before the
event, but we also recommend:
- Phone
- Charging cables
- Hygiene products
- Blankets
- Medication
-
Why do you want my résumé?
First and foremost, MinneHack is a recruiting event. Our
sponsors have paid top dollar to see you, the hackers!
So submit your resume, stop by the sponsorship booths, and talk
to our mentors and judges! Even if you're not in the market for
a job right now, you will be someday; what better way to start a
conversation than at MinneHack?
-
What's the internet situation like?
This year we are able to provide both wired and wireless
internet! We recommend you bring a device compatible with
ethernet, as the wi-fi at our venue cannot account for the load
of hackers we attract. We will provide ethernet cables. If you
need a converter, we have a few available on first-come
first-serve basis, but we recommend you bring your own.
-
Will you be providing transportation?
As we get closer to the event, we will let you know whether a
bus will be running through your school or not. If we aren't
sending a bus your way, we will reimburse you for your travel
expenses, up to $100. Just be sure to hold onto your receipts!
-
What if I don't have enough experience to compete. Can I still attend?
The most important thing is that you're there, have fun, and
learn something. Go ahead and register and make the most out of
it. It's completely free, so there's nothing to lose!


Generate some random data to see if item level effects matter in what you study!
First, estimate some information about the stimuli you use.
What's your hypothetical effect size?
How variable are responses to class 1?
How variable are responses to class 2?
Now, we'll pick stimuli and run an experiment.
Items per class:
Number of subjects:
Standard deviation of subjects:


Housing Data
Registered Rooms
Refresh Rooms
Download Data
Import Data
No Registered Rooms
Floor #
Room #
Building
# Occupants
Max Occupancy
Actions
Edit
Delete
Room Number:
Floor Number:
Building Name:
Is This a Handicap Room?
Yes
No
Amount of Beds:
Current Amount of Occupants:
Max Occupancy of Room:
Additional Notes
Create Room
Edit Room


|
| Local Properties | Local Methods | |
| Managed Object Types | Data Object Types | All Properties | All Methods |
The purpose of this interface is to make it easier for callers to import VMs and vApps from OVF packages and to export VI packages to OVF. In the following description, the term "client" is used to mean any caller of the interface.
This interface only converts between OVF and VI types. To actually import and export entities, use ResourcePool.importVApp, VirtualMachine.exportVm and VirtualApp.exportVApp.
The client calls parseDescriptor to obtain information about the OVF descriptor. This typically includes information (such as a list of networks) that must be mapped to VI infrastructure entities.
The OVF descriptor is validated against the OVF Specification, and any errors or warnings are returned as part of the ParseResult. For example, the parser might encounter a section marked required that it does not understand, or the XML descriptor might be malformed.
The client decides on network mappings, datastore, properties etc. It then calls createImportSpec to obtain the parameters needed to call ResourcePool.importVApp.
If any warnings are present, the client will review these and decide whether to proceed or not. If errors are present, the ImportSpec will be missing, so the client is forced to give up or fix the problems and then try again.
The client now calls ResourcePool.importVApp, passing the ImportSpec as a parameter. This will create the virtual machines and VirtualApp objects in VI and return locations to which the files of the entity can be uploaded. It also returns a lease that controls the duration of the lock taken on the newly created inventory objects. When all files have been uploaded, the client must release this lease.
In addition to the entity reference itself, information about the choices made on these files is passed to createDescriptor as a list of OvfFile instances.
The client must inspect and act upon warnings and errors as previously described.
No matter if the export succeeds or fails, the client is responsible for releasing the shared state lock taken on the entity (by VirtualMaching.exportVm or VirtualApp.exportVApp) during the export.
Errors cause processing to abort by definition.
Properties
| Name | Type | Description |
|---|---|---|
| ovfExportOption* P | OvfOptionInfo[] |
Returns an array of OvfOptionInfo object that specifies what options the server
support for exporting an OVF descriptor.
Since vSphere API 5.1 |
| ovfImportOption* P | OvfOptionInfo[] |
Returns an array of OvfOptionInfo object that specifies what options the server
support for modifing/relaxing the OVF import process.
Since vSphere API 5.1 |
Methods
| Methods defined in this Managed Object |
|---|
| CreateDescriptor, CreateImportSpec, ParseDescriptor, ValidateHost |
To create the complete OVF descriptor, the client must already have downloaded the files that are part of the entity, because information about these files (compression, chunking, filename etc.) is part of the descriptor.
However, these downloads can be quite time-consuming, so if the descriptor for some reason cannot be generated, the client will want to know this before downloading the files.
For this reason, the client may do an initial "dry run" with the ovfFiles parameter unset. Default filenames will then be used in the descriptor, and the client can examine any warnings and/or errors before downloading the files.
After the final call to this method, client must release the lock on the entity given to it by VirtualMachine.exportVm or VirtualApp.exportVApp.
Parameters
| Name | Type | Description |
|---|---|---|
| _this | ManagedObjectReference | A reference to the OvfManager used to make the method call. |
| obj P | ManagedObjectReference
to a ManagedEntity |
The entity to export. Supported types are VirtualMachine
and VirtualApp.
|
| cdp | OvfCreateDescriptorParams |
Parameters to the method, bundled in an instance of
CreateDescriptorParams.
|
Return Value
| Type | Description |
|---|---|
| OvfCreateDescriptorResult | An instance of CreateDescriptorResult |
Faults
| Type | Description |
|---|---|
| ConcurrentAccess | Thrown if a concurrency issue prevents the operation from succeeding. |
| FileFault | Thrown if there is a generic file error |
| InvalidState | Thrown if the operation failed due to the current state of the system. |
| RuntimeFault | Thrown if any type of runtime fault is thrown that is not covered by the other faults; for example, a communication error. |
| TaskInProgress | Thrown if a required managed entity is busy. |
| VmConfigFault | Thrown if a configuration issue prevents the operation from succeeding. Typically, a more specific subclass is thrown. |
Events
| Type | |
|---|---|
| None |
Parameters
| Name | Type | Description |
|---|---|---|
| _this | ManagedObjectReference | A reference to the OvfManager used to make the method call. |
| ovfDescriptor | xsd:string |
The OVF descriptor of the entity.
|
| resourcePool P | ManagedObjectReference
to a ResourcePool |
The resource pool to import the entity to. May be a
vApp.
|
| datastore P | ManagedObjectReference
to a Datastore |
The datastore on which to create the inventory objects
of the entity, for example "storage1". The privilege
Datastore.AllocateSpace is required on the datastore.
|
| cisp | OvfCreateImportSpecParams |
Additional parameters to the method, bundled in an instance of
CreateImportSpecParams.
|
Return Value
| Type | Description |
|---|---|
| OvfCreateImportSpecResult |
Faults
| Type | Description |
|---|---|
| ConcurrentAccess | Thrown if a concurrency issue prevents the operation from succeeding. |
| FileFault | Thrown if there is a generic file error |
| InvalidDatastore | |
| InvalidState | Thrown if the operation failed due to the current state of the system. |
| RuntimeFault | Thrown if any type of runtime fault is thrown that is not covered by the other faults; for example, a communication error. |
| TaskInProgress | Thrown if a required managed entity is busy. |
| VmConfigFault | Thrown if a configuration issue prevents the operation from succeeding. Typically, a more specific subclass is thrown. |
Events
| Type | |
|---|---|
| None |
Typically, this method is called once without a deploymentOption parameter to obtain the values for the default deployment option. Part of the result is the list of possible deployment options. To obtain the values for a particular deployment option, call this method again, specifying that option.
Parameters
| Name | Type | Description |
|---|---|---|
| _this | ManagedObjectReference | A reference to the OvfManager used to make the method call. |
| ovfDescriptor | xsd:string |
The OVF descriptor to examine.
|
| pdp | OvfParseDescriptorParams |
Additional parameters for parseDescriptor, wrapped in an instance of
ParseDescriptorParams.
|
Return Value
| Type | Description |
|---|---|
| OvfParseDescriptorResult | The information about the descriptor |
Faults
| Type | Description |
|---|---|
| ConcurrentAccess | Thrown if a concurrency issue prevents the operation from succeeding. |
| FileFault | Thrown if there is a generic file error |
| InvalidState | Thrown if the operation failed due to the current state of the system. |
| RuntimeFault | Thrown if any type of runtime fault is thrown that is not covered by the other faults; for example, a communication error. |
| TaskInProgress | Thrown if a required managed entity is busy. |
| VmConfigFault | Thrown if a configuration issue prevents the operation from succeeding. Typically, a more specific subclass is thrown. |
Events
| Type | |
|---|---|
| None |
More specifically, this means whether or not the host supports the virtual hardware required by the OVF descriptor.
Parameters
| Name | Type | Description |
|---|---|---|
| _this | ManagedObjectReference | A reference to the OvfManager used to make the method call. |
| ovfDescriptor | xsd:string |
The OVF descriptor to examine.
|
| host | ManagedObjectReference
to a HostSystem |
The host to validate against.
|
| vhp | OvfValidateHostParams |
Additional parameters for validateHost, wrapped in a ValidateHostParams
instance.
|
Return Value
| Type | Description |
|---|---|
| OvfValidateHostResult | A ValidateResult instance containing any warnings and/or errors from the validation. |
Faults
| Type | Description |
|---|---|
| ConcurrentAccess | Thrown if a concurrency issue prevents the operation from succeeding. |
| FileFault | Thrown if there is a generic file error |
| InvalidState | Thrown if the operation failed due to the current state of the system. |
| RuntimeFault | Thrown if any type of runtime fault is thrown that is not covered by the other faults; for example, a communication error. |
| TaskInProgress | Thrown if a required managed entity is busy. |
Events
| Type | |
|---|---|
| None |
| Top of page | Local Properties | Local Methods | |
| Managed Object Types | Data Object Types | All Properties | All Methods |


placeholder
powered by
Vensim
Reset All Sliders
0.01
100
0.015
200
0.025
50
100
0.015
120
0
80
1
0.01
100
50
50
1
1
0.5
2
2
0.5


You have requested to reset your password. To confirm password reset, please follow the link below:
{{ _link }}
If you can't click the link above, copy the url and open it in a new browser tab. If you did not make this request, please ignore this message


Welcome
[no username]
.
Select an activity from Strava below!
Show Strava activities
Tweets by @gpxhyperlapse
GPX Hyperlapse v0.12 (beta!)
km (
)
Drag a GPX file here to generate your own hyperlapse video (tested on Chrome only)
Milliseconds between frames
10
50
100
200
500
1000
*Number of frames
50
100
200
400
1000
*Requires reload
Reload


HOME
SEARCH-PAGE
TASTE-MAKER
Menu Items Containing Chicken
Chicken Lo Mein
Includes: Chicken, Soy Sauce, Lo Mein Noodles, Brown Sugar
Check out some of our other recipes!
Chicken Fajitas
Includes: Chicken Breast, Cumin Tortilla, Paprika
Check out some of our other recipes!
Kung Pao
Includes: Peanuts, Green Onion, Sichuan Pepper, Garlic and Ginger, Soy, Chicken, Chinese Vinegar
Check out some of our other recipes!
Chicken Dim Sum Dumplings
Includes: Soy, Carrot, Chicken, Garlic, Green Onion, Leeks, Salt and pepper to taste
Check out some of our other recipes!
Thai Chicken Spring Rolls
Includes: Sesame Oil, Garlic, Fish Sauce, Basil, Mint, Cilantro, Carrots, Chicken. Cabbage
Check out some of our other recipes!


Targeting .NET Platforms
You can build apps for many platforms and services by downloading .NET Framework targeting packs and SDKs and using them with Visual Studio. Check out the .NET Framework blog for information on new releases. Information on the Lifecycle Policy for various .NET Framework versions can be found on the Support Lifecycle Policy FAQ.
The downloads available differ by Visual Studio version. Pick your Visual Studio version by using the buttons below.
Note: These SDK and .NET Framework downloads may update Visual Studio and the .NET Framework on your machine.


| Top |
GObject ╰── GInitiallyUnowned ╰── GtkWidget ╰── GtkContainer ╰── GtkBin ╰── GtkOverlay
GtkOverlay is a container which contains a single main child, on top
of which it can place “overlay” widgets. The position of each overlay
widget is determined by its “halign” and “valign”
properties. E.g. a widget with both alignments set to GTK_ALIGN_START
will be placed at the top left corner of the GtkOverlay container,
whereas an overlay with halign set to GTK_ALIGN_CENTER
and valign set
to GTK_ALIGN_END
will be placed a the bottom edge of the GtkOverlay,
horizontally centered. The position can be adjusted by setting the margin
properties of the child to non-zero values.
More complicated placement of overlays is possible by connecting to the “get-child-position” signal.
void gtk_overlay_add_overlay (GtkOverlay *overlay
,GtkWidget *widget
);
Adds widget
to overlay
.
The widget will be stacked on top of the main widget
added with gtk_container_add()
.
The position at which widget
is placed is determined
from its “halign” and “valign” properties.
Since: 3.2
void gtk_overlay_reorder_overlay (GtkOverlay *overlay
,GtkWidget *child
,gint position
);
Moves child
to a new index
in the list of overlay
children.
The list contains overlays in the order that these were
added to overlay
.
A widget’s index in the overlay
children list determines which order
the children are drawn if they overlap. The first child is drawn at
the bottom. It also affects the default focus chain order.
overlay |
||
child |
the overlaid GtkWidget to move |
|
position |
the new index for |
Since: 3.18
gboolean gtk_overlay_get_overlay_pass_through (GtkOverlay *overlay
,GtkWidget *widget
);
Convenience function to get the value of the “pass-through”
child property for widget
.
Since: 3.18
void gtk_overlay_set_overlay_pass_through (GtkOverlay *overlay
,GtkWidget *widget
,gboolean pass_through
);
Convenience function to set the value of the “pass-through”
child property for widget
.
overlay |
||
widget |
an overlay child of GtkOverlay |
|
pass_through |
whether the child should pass the input through |
Since: 3.18
“index”
child property“index” gint
The index of the overlay in the parent, -1 for the main child.
Flags: Read / Write
Allowed values: >= -1
Default value: 0
Since: 3.18
“get-child-position”
signalgboolean user_function (GtkOverlay *overlay, GtkWidget *widget, GdkRectangle *allocation, gpointer user_data)
The ::get-child-position signal is emitted to determine
the position and size of any overlay child widgets. A
handler for this signal should fill allocation
with
the desired position and size for widget
, relative to
the 'main' child of overlay
.
The default handler for this signal uses the widget
's
halign and valign properties to determine the position
and gives the widget its natural size (except that an
alignment of GTK_ALIGN_FILL
will cause the overlay to
be full-width/height). If the main child is a
GtkScrolledWindow, the overlays are placed relative
to its contents.
overlay |
the GtkOverlay |
|
widget |
the child widget to position |
|
allocation |
return location for the allocation. |
[type Gdk.Rectangle][out caller-allocates] |
user_data |
user data set when the signal handler was connected. |
Flags: Run Last


In recent years the number of reported STD cases has increased at an alarming rate. Chlamydia, Syphilis and Gonorrhea are the three most common diseases. Since 2006, the number of new Syphilis cases has grown by 15% annually. Similarly, Chlamydia and Gonorrhea have increasingly spread since 2012 especially among young adults. All three often go unnoticed by those infected, but can lead to life-long complications if untreated - which is why these "reportable diseases" are monitored by the Center for Disease Control (CDC).
The CDC estimates the direct costs for the US healthcare system to be of the order of 20 billion USD. Most of these costs can be prevented through STD awareness, safe sex, STD testing - and treatment in the case of an infection. But what is your own personal risk? Just as population characteristics differ from neighborhood to neighborhood, STD rates vary significantly by gender, age, race/ethnicity and location (see the variations in the Chlamydia rate per 100,000 inhabitants by county below).
STD & Me provides a predictive model that leverages publicly available statistics on STD prevalences from the CDC with Census data on population characteristics to calculate individual risk factors for the three most prevalent STDs. By entering your information below you will get individual scores for each of the three STDs and comparisons of your risk to your gender, your age group, your race/ethnicity and your location. The presentation below has more information on the data and the model.
The scores from STD & Me are not a medical result. They do not replace STD testing, which can only be done by labs through testing sites or, e.g., through your primary care physician. STD & Me is solely meant to raise awareness of STD risk. Awareness is the first step to prevention, but "to reduce STDs, Americans must take steps to protect themselves. For sexually active individuals, testing and treatment according to CDC's recommendations, using condoms consistently and correctly, and limiting the number of sex partners are all effective strategies for reducing the risk of infection and consequences to health." (Source: CDC)
The silent infection. This most common STD often goes unnoticed since most patients show no symptoms. The consequences are severe, and can lead to infertility. In most cases it can be treated with antibiotics.
Learn MoreLike Chlamydia and Syphilis, this STD is most frequent among young people. It is the second most prevalent of the reportable STDs and is more common in the South of the US. In most cases it can be treated with antibiotics.
Learn MoreThis infectious disease has spread massively since the early 2000's, especially among men who have sex with men. Like Chlamydia, the early stages of Syphilis are often unnoticed. In most cases it can be treated with antibiotics.
Learn More


1. A short bio. Nothing stressful. 2. Your favorite applications in terms of design. 3. An answer to the question: What would you change about ITCAfrica?
Apply for internship
1. A resume, or a write up of what you've worked on. 2. The technologies you can use currently. 3. Shiny new technologies you're willing to learn.
Apply for this role


Artificial Intelligence from experimental research on computational social science
WatchComplexity is a Machine Learning framework to understand and analyze complex networks and more in general complex data.
It is a collection of clustering techniques inspired by social science and communication theories.
The algorithm detects not only the influence played by every node inside a network, but also how it contributes to the overall network (word-of-mouth, content creation, and diffusion of information are just examples).
Given a large dataset of connections as input, it provides a ranking of all nodes by influence score, reporting their typology of influence. Every node plays a certain role in the network and affects the other nodes in its own different way.
Technically, it is a clustering algorithm useful for understanding very large and complex networks that are also impossible to visualize, grouping their components according to their internal flows.
The comparison between networks is conceived not only in terms of similarity of their nodes, but also from a functional point of view, watching their structures and the flow of information by a semantic perspective.
Given some distributions of influences measured using Ranked influence typology algorithm, and the number of connections, it provides two different misures of similarity: a quantitative one, along with another more qualitative.
Finding how similar are personal profiles of users, similarities between maps of interactions or how strong are the similitudes in patterns of data, are only examples.


For now the SR Research pylink module is packaged with the Standalone flavours of PsychoPy and can be imported with:
import pylink
You do need to install the Display Software (which they also call Eyelink Developers Kit) for your particular platform. This can be found by following the threads from:
https://www.sr-support.com/forums/forumdisplay.php?f=17
for pylink documentation see:
https://www.sr-support.com/forums/showthread.php?t=14
Performing research with eye-tracking equipment typically requires a long-term investment in software tools to collect, process, and analyze data. Much of this involves real-time data collection, saccadic analysis, calibration routines, and so on. The EyeLink® eye-tracking system is designed to implement most of the required software base for data collection and conversion. It is most powerful when used with the Ethernet link interface, which allows remote control of data collection and real-time data transfer. The PyLink toolkit includes Pylink module, which implements all core EyeLink functions and classes for EyeLink connection and the eyelink graphics, such as the display of camera image, calibration, validation, and drift correct. The EyeLink graphics is currently implemented using Simple Direct Media Layer (SDL: www.libsdl.org).
The Pylink library contains a set of classes and functions, which are used to program experiments on many different platforms, such as MS-DOS, Windows, Linux, and the Macintosh. Some programming standards, such as placement of messages in the EDF file by your experiment, and the use of special data types, have been implemented to allow portability of the development kit across platforms. The standard messages allow general analysis tools such as EDF2ASC converter or EyeLink Data Viewer to process your EDF files.


Before Change
normed = norm_weights(wv.weights)
norms = np.linalg.norm(normed, axis=1)
for norm in norms:
assert norm == 0 or np.allclose(norm, 1, rtol=1e-4)
def test_vocab_truncation():
model = random_model()
After Change
def test_normalize():
wv = random_model()(keep_unused=True)
normed = norm_weights(wv.weights)
gold_norms = np.zeros_like(wv.weights)
for i in range(len(gold_norms)):
norm = np.sqrt(np.sum(np.square(wv.weights[i])))
gold_norms[i] = wv.weights[i] if norm == 0.0 else wv.weights[i] / norm
np.testing.assert_allclose(normed, gold_norms)
def test_vocab_truncation():


Some procedures including EIGENSTRAT (a procedure for detecting and correcting for population stratification through searching for the eigenvectors in genetic association studies), PCoC (a procedure for correcting for population stratification through calculating the principal coordinates and the clustering of the subjects), Tracy-Widom test (a procedure for detecting the significant eigenvalues of a matrix), distance regression (a procedure for detecting the association between a distance matrix and some independent variants of interest), single-marker test (a procedure for identifying the association between the genotype at a biallelic marker and a trait using the Wald test or the Fisher's exact test), MAX3 (a procedure for testing for the association between a single nucleotide polymorphism and a binary phenotype using the maximum value of the three test statistics derived for the recessive, additive, and dominant models), nonparametric trend test (a procedure for testing for the association between a genetic variant and a non-normal distributed quantitative trait based on the nonparametric risk), and nonparametric MAX3 (a procedure for testing for the association between a biallelic single nucleotide polymorphism and a quantitative trait using the maximum value of the three nonparametric trend tests derived for the recessive, additive, and dominant models), which are commonly used in genetic association studies.
| Version: | 0.0-4 |
| Depends: | cluster, mvtnorm, combinat, fExtremes, R (≥ 2.10.0) |
| Published: | 2017-10-14 |
| Author: | Lin Wang [aut], Wei Zhang [aut], Qizhai Li [aut], Weicheng Zhu [ctb] |
| Maintainer: | Lin Wang <wanglin2009 at amss.ac.cn> |
| License: | GPL-2 |
| NeedsCompilation: | no |
| CRAN checks: | AssocTests results |
| Reference manual: | AssocTests.pdf |
| Package source: | AssocTests_0.0-4.tar.gz |
| Windows binaries: | r-devel: AssocTests_0.0-4.zip, r-release: AssocTests_0.0-4.zip, r-oldrel: AssocTests_0.0-4.zip |
| OS X binaries: | r-release: AssocTests_0.0-4.tgz, r-oldrel: AssocTests_0.0-4.tgz |
| Old sources: | AssocTests archive |
Please use the canonical form https://CRAN.R-project.org/package=AssocTests to link to this page.


--- date: 2011-12-08T00:00:00Z published: true title: devopsanywhere - Why Chef? | Totally agree. url: /2011/12/08/devopsanywhere-why-chef-totally-agree-/ ---
There are many, many reasons to use Chef but the main reason you should use chef is this: You, System Administrator, are too damn smart to spend the rest of your professional life reinventing the wheel.


CleanOClock
Configuration
Use this page to setup CleanOClock.
Colors
Clock Background Color:
Time
To change 24/12hr format use the settings menu on your Pebble.
Periodic Vibration
Allow periodic vibration during quiet time.
How often to vibrate - in minutes:
Never
1
2
5
10
15
30
60
Weather
Show Weather on Watch.
Leave blank to use OpenWeather:
Use GPS for location.
Weather forecast location:
Temperature Units
Celsius
Fahrenheit
Alerts
Vibrate when Bluetooth Connection is Lost.
Vibrate when Bluetooth is Reestablished.
Show Icon when Quiet Time is active.
Phone Battery Status
Vibrate when phone battery gets low (20% and 10%).
While
discharging
, update phone's battery status every x percent.
(updating less often saves battery):
1%
2%
5%
10%
While
charging
, update phone's battery status every x percent:
1%
2%
5%
10%


@(resume: objects.Resume, isAdmin: Boolean) @buttonForRemoveItem() = { } @* * This template is a helper template of the primary resume template. It is for the past experience section, which * contains a list of past job positions and descriptions. This contains the html for the locked and editable sections. *@


電子の旅
by manny marx
Posted on Nov 23, 2015
DIRTWART has been busy in 2015. With 7 individual releases, DIRTWART will take your eardrums on an electronic voyage.
6 of the 7 DIRTWART 2015 works are 2 song releases with hypnotizing album artwork. His recent releases use samples from 20 / 30 years ago (i.e. the early 90's...yes you're old) and a few from a bit earlier than that. You will find yourself often pondering, "What song is this from, again?"
Even though some of his newer work is sample-heavy, the tracks take on a life of their own so it never becomes a hindrance. The effects and instrumentation have a retro 80's feel to them but without the cheesiness; it's all very mature yet still jocund.
DIRTWART's self-titled first album is the only one of his releases which have vocals. The Starscream / robotic vocal effects laid over cheerful melodies work surprisingly well. While I listen to the album, I can't help but feel a sense of melancholy or maybe better way to put it is a sober thoughtfulness. I can definitely see DIRTWART's music being used in a film.
DIRTWART has a little something for everyone especially for those of us who are always are in search of something new. If you had to attach a genre to it, it would be Vaporwave but with tracks like "BEWARE" the label doesn't do DIRTWART justice. I am looking forward to what DIRTWART puts out next and I really hope it has some more of those Starscream vocals on it!
You can catch more music and contact DIRTWART on Bandcamp and Facebook.
Peace
mmx


The Vault Helm chart is the recommended way to install and configure Vault on Kubernetes. In addition to running Vault itself, the Helm chart is the primary method for installing and configuring Vault to integrate with other services such as Consul for High Availability (HA) deployments.
While the Helm chart automatically sets up complex resources and exposes the configuration to meet your requirements, it does not automatically operate Vault. You are still responsible for learning how to initialize, monitor, backup, upgrade, etc. the Vault cluster.
Steps we will use in this guide
Create a K8s namespace.
$ kubectl create ns vault-consul
namespace/vault-cluster created
View your new K8s objects.
$ kubectl get all -n vault-consul
Helm must be installed and configured on your machine. For help installing Helm, please refer to the Helm documentation or the Vault Installation to Minikube via Helm tutorial.
Check Helm Version
$ helm version
version.BuildInfo{Version:"v3.4.1", GitCommit:"c4e74854886b2efe3321e185578e6db9be0a6e29", GitTreeState:"dirty", GoVersion:"go1.15.4"}
To access the Vault and Consul Helm chart, add the Hashicorp Helm repository.
$ helm repo add hashicorp https://helm.releases.hashicorp.com
"hashicorp" has been added to your repositories
Check that you have access to the Consul
chart.
$ helm search repo hashicorp/consul
NAME CHART VERSION APP VERSION DESCRIPTION
hashicorp/consul 0.43.0 1.12.0 Official HashiCorp Consul Chart
Check that you have access to the Vault
chart.
$ helm search repo hashicorp/vault
NAME CHART VERSION APP VERSION DESCRIPTION
hashicorp/vault 0.19.0 1.9.2 Official HashiCorp Vault Chart
The Consul storage backend is used to persist Vault’s data in Consul’s key-value store. In addition to providing durable storage, inclusion of this backend will also register Vault as a service in Consul with a default health check. High Availability – the Consul storage backend supports high availability.
Now you’re ready to install Consul! Install Consul on the dedicated namespace.
$ helm install consul hashicorp/consul --set global.name=consul -n vault-consul
NAME: consul
LAST DEPLOYED: Tue Apr 21 17:01:37 2022
NAMESPACE: vault-consul
STATUS: deployed
REVISION: 1
NOTES:
Thank you for installing HashiCorp Consul!
Your release is named consul.
To learn more about the release, run:
$ helm status consul
$ helm get all consul
Consul on Kubernetes Documentation:
https://www.consul.io/docs/platform/k8s
Consul on Kubernetes CLI Reference:
https://www.consul.io/docs/k8s/k8s-cli
Check k8s objects in vault-consul
namespace
$ kubectl get all -n vault-consul --selector=app=consul
NAME READY STATUS RESTARTS AGE
pod/consul-client-7dhmg 1/1 Running 0 2m
pod/consul-client-jmlbd 1/1 Running 0 2m
pod/consul-client-nzwfp 1/1 Running 0 2m
pod/consul-server-0 1/1 Running 0 2m
pod/consul-server-1 1/1 Running 0 2m
pod/consul-server-2 1/1 Running 0 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/consul-dns ClusterIP <IP_ADDRESS> <none> 53/TCP,53/UDP 2m
service/consul-server ClusterIP None <none> 8500/TCP,8301/TCP,8301/UDP,8302/TCP,8302/UDP,8300/TCP,8600/TCP,8600/UDP 2m
service/consul-ui ClusterIP <IP_ADDRESS> <none> 80/TCP 2m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/consul-client 3 3 3 3 3 <none> 2m
NAME READY AGE
statefulset.apps/consul-server 3/3 2m
Consul storage backend is installed and Vault can access it using address -
consul-server:8500
(Consul server service name and port) in same namespace
Get values.yaml
file to update config options
$ wget https://raw.githubusercontent.com/hashicorp/vault-helm/v0.19.0/values.yaml
Now open values.yaml
in your favourite editor and update following config options
# Available parameters and their default values for the Vault chart.
global:
enabled: true
# TLS for end-to-end encrypted transport
tlsDisable: true
...
...
injector:
# True if you want to enable vault agent injection.
enabled: true
...
...
server:
# If not set to true, Vault server will not be installed.
enabled: true
...
...
ha:
enabled: true
replicas: 3
...
...
config: |
ui = true
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
storage "consul" {
path = "vault"
address = "consul-server:8500" # <consul-server-service:8500>
}
service_registration "kubernetes" {}
...
...
Once you updated the values.yaml
file, install vault
$ helm install vault hashicorp/vault -n vault-consul -f values.yaml
NAME: vault
LAST DEPLOYED: Tue Apr 21 17:08:31 2022
NAMESPACE: vault-consul
STATUS: deployed
REVISION: 1
NOTES:
Thank you for installing HashiCorp Vault!
Now that you have deployed Vault, you should look over the docs on using
Vault with Kubernetes available here:
https://www.vaultproject.io/docs/
Your release is named vault. To learn more about the release, try:
$ helm status vault
$ helm get manifest vault
Check k8s objects in vault-consul
namespace
$ kubectl get all -n vault-consul --selector=app.kubernetes.io/instance=vault
NAME READY STATUS RESTARTS AGE
pod/vault-0 0/1 Running 0 3m
pod/vault-1 0/1 Running 0 3m
pod/vault-2 0/1 Running 0 3m
pod/vault-agent-injector-c6d85cb5f-csfql 1/1 Running 0 3m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/vault ClusterIP <IP_ADDRESS> <none> 8200/TCP,8201/TCP 3m
service/vault-active ClusterIP <IP_ADDRESS> <none> 8200/TCP,8201/TCP 3m
service/vault-agent-injector-svc ClusterIP <IP_ADDRESS> <none> 443/TCP 30h
service/vault-internal ClusterIP None <none> 8200/TCP,8201/TCP 3m
service/vault-standby ClusterIP <IP_ADDRESS> <none> 8200/TCP,8201/TCP 3m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/vault-agent-injector 1/1 1 1 3m
NAME DESIRED CURRENT READY AGE
replicaset.apps/vault-agent-injector-c6d85cb5f 1 1 1 3m
NAME READY AGE
statefulset.apps/vault 0/3 3m
Note: Vault is deployed in HA mode with Consul storage backend but the pods are not in ready state, you need to initialize and unseal the Vault
After the Vault Helm chart is installed, one of the Vault servers need to be initialized. The initialization generates the credentials necessary to unseal all the Vault servers.
View all the Vault pods in the current namespace:
$ ❯ kubectl get pods --selector='app.kubernetes.io/name=vault' -n vault-consul
NAME READY STATUS RESTARTS AGE
pod/vault-0 0/1 Running 0 4m51s
pod/vault-1 0/1 Running 0 4m51s
pod/vault-2 0/1 Running 0 4m51s
Initialize one Vault server with the default number of key shares and default key threshold:
$ kubectl exec --stdin=true --tty=true vault-0 -n vault-consul -- vault operator init
Unseal Key 1: MQxywN4svq/cBFxVOemsTbasIA0Z8qwnFyOI3p3SFDv3
Unseal Key 2: QGAHFZ+q6tXR6tCSQ7cekWTURzda3mxohquXv7va+6AX
Unseal Key 3: vHuHc3ZNCI9mZ8x+TyAbXmjavdJTGXDCLD7aSJfHjx6T
Unseal Key 4: 6hHPhx8hQsjQgeCj8BspL+gPUyeI+suvps0/kk9BY/Ia
Unseal Key 5: +vBOyGddh+rCPpb1cNZ4u13VgZv4tBD8h7Z0cMEu3jg8
Initial Root Token: s.HORogWa8ftxZor8f40ysXrYI
Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.
Vault does not store the generated master key. Without at least 3 keys to
reconstruct the master key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.
The output displays the key shares and initial root key generated.
Important Note: These keys are critical to both the security and the operation of Vault and should be treated as per your company’s sensitive data policy.
Unseal the Vault server with the key shares until the key threshold is met:
$ kubectl exec --stdin=true --tty=true vault-0 -n vault-consul -- vault operator unseal <Unseal Key 1>
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 1/3
Unseal Nonce 2ecd4812-c279-7de1-ca4c-bc052c5f4b0b
Version 1.9.2
Storage Type consul
HA Enabled true
$ kubectl exec --stdin=true --tty=true vault-0 -n vault-consul -- vault operator unseal <Unseal key 2>
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 2/3
Unseal Nonce 2ecd4812-c279-7de1-ca4c-bc052c5f4b0b
Version 1.9.2
Storage Type consul
HA Enabled true
$ kubectl exec --stdin=true --tty=true vault-0 -n vault-consul -- vault operator unseal <Unseal Key 3>
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.9.2
Storage Type consul
Cluster Name vault-cluster-9c0d92a1
Cluster ID 5a90da4a-4dfd-bff9-eaa7-bb7c9b74009f
HA Enabled true
HA Cluster https://vault-0.vault-internal:8201
HA Mode active
Active Since 2022-04-21T11:41:24.062777848Z
Repeat the unseal process for all Vault server pods. When all Vault server pods are unsealed they report
READY 1/1
.
$ kubectl get pods --selector='app.kubernetes.io/name=vault' -n vault-consul
NAME READY STATUS RESTARTS AGE
vault-0 1/1 Running 0 6m49s
vault-1 1/1 Running 0 6m49s
vault-2 1/1 Running 0 6m49s


Select the appropriate form based on desired level accreditation
Speak to Karen on 07540 428757
<EMAIL_ADDRESS>For more information about what the course contains click the link below!


@(treasureHunts: List[TreasureHunt], openTreasureHunts: List[TreasureHunt], user: User) @main(user,"Treasure hunt") {
Are you sure you want to delete this Treasure Hunt?


Well it is a nautical term, it's a vessel larger than a boat for transporting people or goods by sea... Ha. Funny. No but really, Urban Dictionary describes a "ship" as "a term used to describe fan fictions that take previously created characters and put them as a pair. It usually refers to romantic relationships, but it can refer platonic ones as well". So when you hear "ship", just think relationship. There's also OTP (one true pairing) which is your ideal match made in heaven for fictional characters across the boards. Mine is a Buffy OTP so you'll see that fangirling when you get to that page for sure. I will not hold back.
 Think I'm, over-selling him? Well I'm not. Firefly, Dollhouse, Angel, and Buffy the Vampire Slayer are all incredible pieces of work.
His real name is actually Joseph, but c'mon, Joss sound infinitely cooler. He's been working since 1989 and he just directed the latest Avengers film. He is mostly known for science fiction/supernatural drama projects. He also created Dr. Horrible's Sing Along Blog during the 2007-2008 Writers Guild of America strike. It's a hilarious story that features Neil Patrick Harris, Nathan Fillion and the lovely Felicia Day. Joss tends to cast a lot of the same actors in his different projects (rightly so, they are amazing) and it's interesting to see them grow from the early 2000's to today. He's been nominated for several awards and has won for his work with Dr.Horrible's Sing Along Blog as well as for directing the Avengers.
As well as working with television and film, Joss also wrote for some of the Buffy the Vampire Slayer, Angel, and Marvel comics. So essentially he is a Jack of all trades.
I have a slight obsession with Buffy the Vampire Slayer. Okay a major obsession. But this show, even though it ended close to 13 years ago, still has a cult following today. So I'm not alone! Buffy fans are amazing and loyal as ever to Joss the creator and what the show really stood for. And this can make them a little, well, scary to non-believers.The relationships of the show, for me personally, are so diverse and transcendent and there is a character for every viewer (mine's Tara ). In my 21 years of existence I've never watched a show that has taught me so much about life and made me comfortable with who I am as a unique individual. I've watched the show from season one to seven at least four times completely (not counting the episodes or even scenes that I can rewatch on a daily basis). Yeah, it's that good.


Changing the Firefox Reader Font
Table of Contents
What is this about?
I've been trying for a while now to figure out how to change the Firefox Reader font. The default (serifed-font) is Georgia, which is nice enough, but I like to change things up now and again. I would sometimes just edit the CSS in the Developer's Tools, but I finally stumbled upon how to do it so I'll save it here for my future self.
So how do you do it?
The procedure is pretty simple, this is it in outline:
- Create the
chrome
folder for it if it doesn't exist. - Enable the use of this folder.
- Find the CSS you want to change.
- Add a
userContent.css
file to thechrome
folder and add the CSS you want to use to it. - Restart Firefox
Creating the chrome
Folder
The configuration files you create go into a folder named "chrome". Firefox used to create it for you with example files but doesn't anymore so if you haven't created one you'll have to do so now - but where? It goes into your "profile" folder, but since you can have multiple configurations the path isn't fixed. There's multiple ways listed to find it on the Firefox Profile folder page. The way I did it was to enter about:support
in the address bar.
This brings up the Troupbleshooting Information page.
The bottom of the screenshot is what we want.
The path displayed is your profile folder (/home/athena/.mozilla/firefox/j3hyuwod.default-1603227893962
). You can click on the Open Directory button to open it with the GUI or use the path to navigate to it from your text editor. Within that folder create a folder named chrome
. Why chrome when this is firefox? Chrome is apparently not related to google's chrome, but, according to Eric S. Raymond (and Wikipedia, etc.) refers to the GUI, or at least some aspects of it. Anyway.
userContent.css
In the chrome
folder create a file named userContent.css
(here's a mozillaZine article with some information about it) and add your CSS. Looking in the Firefox Inspector with the Reader View open it looks like it just uses the defaults.
But I don't want to change it for every web page so I added it to the .moz-reader-content
selector.
.moz-reader-content {
font-family: "TeX Gyre Pagella", Gentium;
}
Which I also found using the Firefox Inspector.
Enable It
So, you might think that we're done, right? But it turns out that even though Firefox gives you the ability to add custom CSS it doesn't load it by default. I couldn't find anything on the mozillaZine site about how to enable it (although it might be there, I just didn't find it), but there's a www.userchrome.org site that has a page on setting up userChrome.css (which also talks about creating the chrome
folder). userChrome.css
is how you can style the Firefox GUI itself (the chrome) so in this case anything specific to that file isn't relevant to what we're doing here, but the rest of the page is.
The Steps
First navigate to about:config
.
If you hadn't previously unchecked the Warn me when I attempt to access these preferences button you'll be greeted with a warning page.
Once you click on Accept the Risk and Continue or just hit enter, depending on your setup, you'll get to the Advanced Preferences page.
In the search box at the top of the page type in userprof
.
If it's already set to true
then you're all set, otherwise click on the toggle button on the right side.
This should flip it from false
to true
.
Oh, and just one more thing…
Changing the preferences to use the stylesheet doesn't load the actual stylesheet. To actually get it all working restart Firefox and try out the reader on a page.
In my case it changed the Wikipedia page on Rhetorica ad Herennium from this.
To this.
Not that dramatic in this case, but I still haven't found my favorite font. Also only the content was changed, not the headers… I'll have to look into that. Anyway, if you look in the Inspector the new CSS should show up.
End
So, that's one way to change the font for the Firefox Reader. Not exciting, but finding out how to do it was hard enough that I thought I should note it for later.


{% if service_content %}
{{service_content.title}}
{{service_content.short_text|safe}}
{% else %}
Services
We provide the following Foreign Domestic Helper (FDW) Services:
New FDW
We deploy domestic helpers from MOM approved source countries such as Filipino, Indonesian ,Mizoram and Myanmar. We take care of the end to end process up to bringing the FDW to your doorstep. Just select your FDW and leave the rest to us, it is that simple!
Transfer FDW
Need an experience maid real quick? We provide locally pre-selected transfer maid that will meet your needs in days.
Direct Hiring FDW
Already have in mind who you want to hire but need help with the processes to bring in the FDW? We can assist.
Other Services
- Household onsite orientation on FDW’s first day of work
- Work Permit Renewal
- Home Leave
- Work Permit Cancellation
- Other FDW related matters
{% endif %}
|


BOARD GAME
UP
DOWN
LEFT
RIGHT
Number of moves :
0
Congratz !! You have completed this stage..
Contnue