module Opt:{
..}
exception No_value
No_value
gets raised by OptParse.Opt.get
when an option
value is not available.exception Option_error of string string
This exception is only used when implementing custom option types
and can never "escape" the scope of a OptParse.OptParser.parse
.
The user should therefore not attempt to catch it.
exception Option_help
OptParse.OptParser.parse
call and the user should therefore not
attempt to catch it.type t 'a
= {
|
option_set : |
|
option_set_value : |
|
option_get : |
|
option_metavars : |
|
option_defhelp : |
option_set
is a closure which converts and records the value of
an option so that it can be retrieved with a later call to the
option_get
closure. It is called with the option name which was
given on the command line and a list of strings, each representing
one of the argument values given on the command line. It may raise
Option_error
if the value is invalid (for whatever reason).
option_set_value
is a closure which sets the value of an option
to a particular value.
option_get
is a closure which retrieves the recorded value
of the option. If the option value has not been set from the
command line, the default value is used. If there is no default
value, then None
should be returned.
option_metavars
is a list of "meta-variables" (arguments)
which this option accepts. This is mainly for display purposes,
but the length of this list determines how many arguments the
option parser accepts for this option (currently only lists of
length 0 or 1 are supported).
option_defhelp
is the default help string (if any). It is
used for displaying help messages whenever the user does not specify a help string manually when adding this
option. Using a non-None value here only makes sense for
completely generic options like OptParse.StdOpt.help_option
.
let get : t 'a => 'a
No_value
if no default values has been given
and the option value has not been set from the command line.let set : t 'a => 'a => unit
let opt : t 'a => option 'a
Some x
if the option has value x
(either by default or
from the command line). If the option doesn't have a value None
is returned.let is_set : t 'a => bool
True
iff the option has a value.let value_option : string =>
option 'a =>
(string => 'a) => (exn => string => string) => t 'a
value_option metavar default coerce errfmt
returns an option
which takes a single argument from the command line and calls
coerce
to coerce it to the proper type. If coerce
raises an
exception, exn
, then errfmt exn argval
is called to generate
an error message for display. metavar
is the name of the
metavariable of the option.
default
is the default value of the option. If None
, the
option has no default value.
Returns the newly created option.
let callback_option : string =>
(string => 'a) =>
(exn => string => string) => ('a => unit) => t unit
callback_option metavar coerce errfmt f
returns an option which
takes a single argument from the command line and calls coerce
to coerce it to the proper type. If coerce
raises an exception
errfmt exn argval
is called to format an error message for
display. If coerce
succeeds, the callback function f
is called
with the coerced value. Finally, metavar
is the name of the
metavariable of the option.
Returns the newly created option.


For information about the New Zealand Privacy Act and how it protects all personal information in New Zealand, click here.
Your privacy is important to us. We want you to understand the terms and conditions surrounding the capture and use of any information we gather. To that end, this privacy policy sets out what information we gather, how we may use it, and how to correct or change it.
- Use
- Content Providers, Advertisers and Partners
- Cookies Clear Gifs and Tracking
- Holding, Correcting and Updating
NZME Publishing Limited and NZME Radio Limited, together trading as NZME, or our related companies ("we" or "us") may gather the following types of information about users including you ("you"):
1. personal information provided by you when you interact with us, such as when you use or purchase our products or services, when you subscribe or register to use our products or services, and when you provide us with your feedback or respond to surveys you are asked to participate in;
2. aggregated information generated by our systems or third party systems we use, which track traffic to and from our sites but does not relate to you personally; and
3. other information that does not personally identify you. Failure to provide necessary personal information when requested may result in certain products or services not being available to you.
We will not collect information about any person whom we know to be under the age of 13.
We may disclose:
1. all information that we gather, including your personal information, to our related companies;
2. aggregated tracking information and other information that does not personally identify you to third parties such as our advertisers;
3. your personal information to third parties when we believe in good faith that we are required to do so by law;
4. your personal information to other third parties provided we have your prior authorisation, which we will usually obtain at the time of collecting the information from you.
A list of other third parties who may be provided with information, and a description of how those third parties may use this information, can be found here.
We may use the personal information we collect:
1. for verification of your identity and assisting you in case you forget your password or login details where these are necessary to access any of our products or services;
2. for authorising and processing credit card transactions which you enter into online;
3. to assist in providing the products and services requested by you;
4. to provide information to you about other websites, products and services, which we consider may be of interest to you;
5. for future marketing, promotional and publicity purposes, including carrying out direct marketing, market research and surveys;
6. for ensuring that you are shown the advertising and information that is most relevant to you and your interests; and
7. for any other uses that you authorise.
We do not control the practices of content providers, partners and advertisers connected with our sites and to whom you provide personal information whilst using one of our sites or services. Our sites contain links to other sites, which may not follow the same privacy policies as us. We recommend that you check any relevant privacy policies before providing your personal information to any third party.
We may collect non-personal information about the computer, mobile telephone, smartphone or other device that you use to access our products or services. Where you allow our mobile services and products to deliver content based on your location (by enabling this feature on your mobile device) we may collect location data. This information is used only for the automated delivery of relevant content to you and for no other purpose.
We may use a cookie file containing information that can identify the computer you are working from. The cookie file is anonymous as it only gives us details of your IP address, PC platform (Windows, Linux or OS X), Browser (e.g. Internet Explorer, Google Chrome, or other, plus the version of Browser) and domain (whether you are accessing the site from NZ or elsewhere). We may use the information generated by "cookies" to:
1. track traffic patterns to and from our sites such as the pages you visit, the time you spend on each page, the date and time of your visit, and referring pages (pages you came from or go to);
2. ensure advertising is being shown to the most appropriate person and limit the frequency of display for certain ad formats; and
3. enable you to use certain services as a member without having to log on each time and to visit member-restricted areas of the site.
We may allow third-party companies to serve ads and/or collect certain information when you and other Internet users visit our websites. These companies may use non-personally identifiable information (e.g., click stream information, browser type, time and date, subject of advertisements clicked or scrolled over) and precise geo location and user device identification (if you have provided your consent to us) during your visits to this site and other websites in order to provide advertisements about goods and services likely to be of greater interest to you. These companies typically use a cookie or other technology to collect this information. To learn more about this interest based advertising practice or to opt-out of this type of advertising, you can visit networkadvertising.org. Third party companies may also use your non-personal information collected in this way in aggregated form or for statistical purposes.
You can choose to refuse cookies by turning them off in your browser and/or deleting them from your hard drive. You do not need to have cookies turned on to use our websites, but you may need them for customisable areas of sites we may develop in the future.  This could affect your reading experience. Visit http://www.aboutcookies.org for a comprehensive guide on how to control and delete cookies on a wide range of web browsers and operating systems.
Clear gifs are tiny graphics with a unique identifier, similar in function to cookies. Clear gifs may ping or alert an advertiser's server about the online movements of Web users. For instance, advertisers may place a clear gif allowing them to recognise an existing cookie on your browser if from the same service. The main difference between cookies and clear gifs is that clear gifs are invisible on the page and are much smaller. We do not have access to any information collected by these clear gifs nor additional information they may be tied to by the advertiser.
NZME or our related companies contract with online measurement companies and other service providers to manage and optimise our Internet business and communications. These companies collect information about visits to our site to assist us in analysing the site's performance and advertising effectiveness and optimising the site for readers and marketers. Details of these service providers and the information they may collect can be found here.
Some of our advertisers use third party companies to serve advertisements when you visit our websites. These companies may use information (not including your name, address, email address or telephone number) about your visits to this and other websites, including information gathered by cookies, in order to provide advertisements about goods and services of interest to you. We do not control the practices of these companies and they may not follow the same privacy policies as us. We recommend that you check any relevant privacy policies before providing your personal information to any third party.
If our intended collection, use or disclosure of your personal information is outside the collection, use or disclosure set out in this Privacy Policy we will give you the option to:
1. opt out and not receive certain services or participate in certain interactive areas; or
2. opt in, for example agreeing to be contacted by us in relation to certain matters such as notification of new features to this website, receiving newsletters or promotional activities.
We reserve the right to change this policy at any time by notifying site users of the existence of a revised privacy policy.
Any personal information that you provide to us will be collected and held by us at 2 Graham Street, Auckland, New Zealand. Under the Privacy Act 1993 you have rights of access to and correction of personal information that we hold. We offer the ability to correct or change the information collected at any time and as often as necessary. If you have any questions about how our services work or regarding this policy, contact us by email or by mail to NZME, 2 Graham Street, PO Box 32, Auckland, New Zealand.
For information about New Zealand's Privacy Act 1993 and how it protects the personal information of individuals in New Zealand, click here.
Updated: May 2015


Module vec3
vec3: A simple 3-component vector
Functions
| vec3 (x, y, z) | Create a new vector with components x, y, z: (Can also be used to duplicate a vector: vec3(v)) |
| copy (v) | Create a copy of a vector: |
| fromvec2 (v, z) | Create a copy of a vec2 vector: |
| addnew (a, b) | Add two vectors (or numbers) to create a new vector |
| subnew (a, b) | Subtract two vectors (or numbers) to create a new vector |
| mulnew (a, b) | Multiply two vectors (or numbers) to create a new vector |
| divnew (a, b) | Divide two vectors (or numbers) to create a new vector |
| pownew (a, b) | Raise to power two vectors (or numbers) to create a new vector |
| modnew (a, b) | Calculate modulo two vectors (or numbers) to create a new vector |
| minnew (a, b) | Calculate minimum of elements to create a new vector |
| maxnew (a, b) | Calculate maximum of elements to create a new vector |
| lerpnew (a, b, f) | create a vector from the linear interpolation of two vectors: |
| random (mag) | Create a new vector in a uniformly random direction: |
| dot (a, b) | return the dot product of two vectors: |
| cross (a, b) | return the cross product of two vectors: |
| anglebetween (a, b) | The angle between two vectors (two points) (The relative angle from self to v) |
Class vec3
| vec3:set (x, y, z) | Set the components of a vector: |
| vec3:add (v) | Add a vector (or number) to self (in-place) |
| vec3:sub (v) | Subtract a vector (or number) to self (in-place) |
| vec3:mul (v) | Multiply a vector (or number) to self (in-place) |
| vec3:div (v) | Divide a vector (or number) to self (in-place) |
| vec3:pow (v) | Raise to power a vector (or number) to self (in-place) |
| vec3:mod (v) | Calculate modulo a vector (or number) to self (in-place) |
| vec3:floor () | Apply math.floor to all elements: |
| vec3:min (v) | Calculate minimum of elements (in-place) |
| vec3:max (v) | Calculate maximum of elements (in-place) |
| vec3:clip (lo, hi) | Constrain vector to range to create a new vector |
| vec3:relativewrap (dimx, dimy, dimz) | Determine shortest relative vector in a toroidal space |
| vec3:relativewrapnew (dimx, dimy) | Create new vector as shortest relative vector in a toroidal space |
| vec3:lerp (v, f) | interpolate from self to v by factor of f |
| vec3:normalize () | set the length of the vector to 1 (unit vector) (randomized direction if self length was zero) |
| vec3:normalizenew () | return a normalized copy of the vector (randomized direction if self length was zero) |
| vec3:limit (maximum) | Impose a maximum magnitude Rescales vector if greater than maximum |
| vec3:limitnew (maximum) | Create a copy of a vector, limited to a maximum magnitude Rescales vector if greater than maximum |
| vec3:setmag (m) | Rescale a vector to a specific magnitude: |
| vec3:setmagnew (m) | Return a vector copy rescaled to a specific magnitude: |
| vec3:rotateXnew (angle) | Create a vector by rotating a vector by an angle |
| vec3:rotateYnew (angle) | Create a vector by rotating a vector by an angle |
| vec3:rotateZnew (angle) | Create a vector by rotating a vector by an angle |
| vec3:randomize (mag) | Set to a vector of magnitude 1 in a uniformly random direction: |
| vec3:length () | return the length of a vector (Can also use #vector) |
| vec3:magSqr () | return the squared length of a vector |
| vec3:distance (p) | The distance between two vectors (two points) (The relative distance from self to p) |
| vec3:unpack () | Return the three components of the vector as numbers: |
Functions
- vec3 (x, y, z)
-
Create a new vector with components x, y, z:
(Can also be used to duplicate a vector: vec3(v))
Parameters:
- x number or vector (optional, default 0)
- y number (optional, default 0)
- z number (optional, default 0)
- copy (v)
-
Create a copy of a vector:
Parameters:
- v vector
- fromvec2 (v, z)
-
Create a copy of a vec2 vector:
Parameters:
- v vec3
- z number
- addnew (a, b)
-
Add two vectors (or numbers) to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- subnew (a, b)
-
Subtract two vectors (or numbers) to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- mulnew (a, b)
-
Multiply two vectors (or numbers) to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- divnew (a, b)
-
Divide two vectors (or numbers) to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- pownew (a, b)
-
Raise to power two vectors (or numbers) to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- modnew (a, b)
-
Calculate modulo two vectors (or numbers) to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- minnew (a, b)
-
Calculate minimum of elements to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- maxnew (a, b)
-
Calculate maximum of elements to create a new vector
Parameters:
- a vector or number
- b vector or number
Returns:
-
new vector
- lerpnew (a, b, f)
-
create a vector from the linear interpolation of two vectors:
Parameters:
- a vector
- b vector
- f interpolation factor from a to b (0 = none, 1 = full)
Returns:
-
new vector
- random (mag)
-
Create a new vector in a uniformly random direction:
Parameters:
- mag magnitude (optional, default 1)
Returns:
-
new vector
- dot (a, b)
-
return the dot product of two vectors:
Parameters:
- a vector
- b vector
Returns:
-
dot product
- cross (a, b)
-
return the cross product of two vectors:
Parameters:
- a vector
- b vector
Returns:
-
cross product
- anglebetween (a, b)
-
The angle between two vectors (two points)
(The relative angle from self to v)
Parameters:
- a vector to measure angle between
- b vector to measure angle between
Returns:
-
distance
Class vec3
A 3 component vector- vec3:set (x, y, z)
-
Set the components of a vector:
Parameters:
- x component
- y component
- z component
Returns:
-
self
- vec3:add (v)
-
Add a vector (or number) to self (in-place)
Parameters:
- v number or vector to add
Returns:
-
self
- vec3:sub (v)
-
Subtract a vector (or number) to self (in-place)
Parameters:
- v number or vector to sub
Returns:
-
self
- vec3:mul (v)
-
Multiply a vector (or number) to self (in-place)
Parameters:
- v number or vector to mul
Returns:
-
self
- vec3:div (v)
-
Divide a vector (or number) to self (in-place)
Parameters:
- v number or vector to div
Returns:
-
self
- vec3:pow (v)
-
Raise to power a vector (or number) to self (in-place)
Parameters:
- v number or vector to pow
Returns:
-
self
- vec3:mod (v)
-
Calculate modulo a vector (or number) to self (in-place)
Parameters:
- v number or vector to mod
Returns:
-
self
- vec3:floor ()
-
Apply math.floor to all elements:
Returns:
-
self
- vec3:min (v)
-
Calculate minimum of elements (in-place)
Parameters:
- v number or vector limit
Returns:
-
self
- vec3:max (v)
-
Calculate maximum of elements (in-place)
Parameters:
- v number or vector limit
Returns:
-
self
- vec3:clip (lo, hi)
-
Constrain vector to range to create a new vector
Parameters:
- lo vector or number minimum value
- hi vector or number minimum value
Returns:
-
new vector
- vec3:relativewrap (dimx, dimy, dimz)
-
Determine shortest relative vector in a toroidal space
Parameters:
- dimx width of space (optional, default 1)
- dimy height of space (optional, default dimx)
- dimz depth of space (optional, default dimx)
Returns:
-
self
- vec3:relativewrapnew (dimx, dimy)
-
Create new vector as shortest relative vector in a toroidal space
Parameters:
- dimx width of space (optional, default 1)
- dimy height of space (optional, default dimx)
Returns:
-
new vector
- vec3:lerp (v, f)
-
interpolate from self to v by factor of f
Parameters:
- v vector
- f interpolation factor from self to v (0 = none, 1 = full)
Returns:
-
self
- vec3:normalize ()
-
set the length of the vector to 1 (unit vector)
(randomized direction if self length was zero)
Returns:
-
self
- vec3:normalizenew ()
-
return a normalized copy of the vector
(randomized direction if self length was zero)
Returns:
-
vector of length 1 (unit vector)
- vec3:limit (maximum)
-
Impose a maximum magnitude
Rescales vector if greater than maximum
Parameters:
- maximum maximum magnitude of vector
Returns:
-
self
- vec3:limitnew (maximum)
-
Create a copy of a vector, limited to a maximum magnitude
Rescales vector if greater than maximum
Parameters:
- maximum maximum magnitude of vector
Returns:
-
new vector
- vec3:setmag (m)
-
Rescale a vector to a specific magnitude:
Parameters:
- m new magnitude
Returns:
-
self
- vec3:setmagnew (m)
-
Return a vector copy rescaled to a specific magnitude:
Parameters:
- m new magnitude
Returns:
-
new vector
- vec3:rotateXnew (angle)
-
Create a vector by rotating a vector by an angle
Parameters:
- angle in radians
Returns:
-
new vector
- vec3:rotateYnew (angle)
-
Create a vector by rotating a vector by an angle
Parameters:
- angle in radians
Returns:
-
new vector
- vec3:rotateZnew (angle)
-
Create a vector by rotating a vector by an angle
Parameters:
- angle in radians
Returns:
-
new vector
- vec3:randomize (mag)
-
Set to a vector of magnitude 1 in a uniformly random direction:
Parameters:
- mag magnitude (optional, default 1)
Returns:
-
self
- vec3:length ()
-
return the length of a vector
(Can also use #vector)
Returns:
-
length
- vec3:magSqr ()
-
return the squared length of a vector
Returns:
-
length
- vec3:distance (p)
-
The distance between two vectors (two points)
(The relative distance from self to p)
Parameters:
- p target to measure distance to
Returns:
-
distance
- vec3:unpack ()
- Return the three components of the vector as numbers:


Glossary¶
- API¶
An API (Application Programming Interface) enables disparate software components to interact with each other by specifying functions or routines to perform tasks. Datavyu’s API uses the Ruby programming language.
- argument¶
The information the user specifies to a method for a given parameter. For instance, “charlie” might be the argument specified for the
name
parameter. See: Classes, Methods, and Parameters.- cell¶
A cell is a graphical representation of an observation. Cells are rectangles that stack in the columns of Datavyu’s spreadsheet and contain the observation data that a coder inputs when coding a data source.
- class¶
A pre-defined object type, that has associated attributes and methods. See: Classes, Methods, and Parameters.
- class method¶
A method that belongs to a class and must be invoked on an instance of that class. See: Classes, Methods, and Parameters.
- code¶
Datavyu codes are column components that researchers are observing. Each Datavyu column may have multiple codes for which a coder will record observations. For instance, a column called “step”, which refers to walking, might have a “foot” code that would differentiate between left or right feet, and a “direction” code that indicated if the person was stepping forward or backward.
- coding manual¶
Documentation for codes in a Datavyu spreadsheet. Should be written as if instructing someone with no prior information about the spreadsheet or project.
- coding pass¶
A pass intended to fill in all fillable codes in a column. Coding passes can be aided by previous passes so that work is not repeated.
- column¶
Datavyu columns are phenomena or events that observations are collected about. Columns are key-value pairs that associate a column name with a variety of codes. Columns can be general, such as “trial” or “ID”, or can be specific, such as “step” or “hand”. Datavyu represents columns as a column in the Spreadsheet.
- comment¶
A code that consists of freeform text. Useful for recording unique observations in the data.
- Controller¶
The Controller is a core Datavyu window that enables you to control playback of data sources, and to record observations. See: Controller Overview
- data¶
The audio or video files that are being studied.
- frame rate¶
Frame rate (also known as frame frequency) is the frequency (rate) at which an imaging device produces unique consecutive images called frames. The three main frame rate standards are: 24p, 25p, and 30p.
- integer¶
A whole number. Integers are numbers that are not fractions, and thus, which have no numbers after a decimal point.
- key-value pair¶
A data representation that pairs “keys” (some thing you have data about) with “values” (the data itself). A key-value pair could be “telephone” and “555-123-4567”, for instance. Sometimes, values are represented as a list of values, or as an array.
- method¶
A defined action that you can perform. Methods may accept arguments in order to perform their specified tasks. See: Classes, Methods, and Parameters.
- observation¶
An instance of the column that is being coded.
- offset¶
- cell offset¶
The end time of a cell.
- onset¶
- cell onset¶
The start time of a cell.
- ordinal¶
The position of a cell within its column. The ordinal is indicated in the top left corner of each cell in Datavyu.
- parameter¶
The information that is methods use to perform their tasks. Parameters can be required or optional. See: Classes, Methods, and Parameters.
- playhead¶
The playhead indicates the current point of playback in the timeslider of the Controller.
- region¶
The area of the timeslider that has been brought into focus using the timeslider’s brackets.
- reliability column¶
A Datavyu column that is a copy of an original column used to ensure that the coded observations are accurate.
- script¶
A program that performs a specific task.
- spreadsheet¶
The core Datavyu window where coders record observations. See: Spreadsheet Overview
- standalone method¶
A method that does not belong to a specific class. See: Classes, Methods, and Parameters.
- string¶
In computing, a string is a linear sequence of characters. Strings can be random characters, words, or sentences.
- timeslider¶
The timeslider represents the length of the data source, and enables users to visualize where the playhead is with respect to the entirety of the data source.


React got featured on the front-page of Hacker News thanks to the Om library. If you try it out for the first time, take a look at the docs and do not hesitate to ask questions on the Google Group, IRC or Stack Overflow. We are trying our best to help you out!
David Nolen announced Om, a thin wrapper on-top of React in ClojureScript. It stands out by only using immutable data structures. This unlocks the ability to write a very efficient shouldComponentUpdate and get huge performance improvements on some tasks.
We've known this for some time over here in the ClojureScript corner of the world - all of our collections are immutable and modeled directly on the original Clojure versions written in Java. Modern JavaScript engines have now been tuned to the point that it's no longer uncommon to see collection performance within 2.5X of the Java Virtual Machine.
Wait, wait, wait. What does the performance of persistent data structures have to do with the future of JavaScript MVCs?
A whole lot.
Managing the scroll position when new content is inserted is usually very tricky to get right. Vjeux discovered that componentWillUpdate and componentDidUpdate were triggered exactly at the right time to manage the scroll position.
We can check the scroll position before the component has updated with componentWillUpdate and scroll if necessary at componentDidUpdate
Ross Allen implemented MontageJS's Reddit tutorial in React. This is a good opportunity to compare the philosophies of the two libraries.
William Högman Rudenmalm wrote an article on how to write good React components. This is full of good advice.
The idea of dividing software into smaller parts or components is hardly new - It is the essance of good software. The same principles that apply to software in general apply to building React components. That doesn't mean that writing good React components is just about applying general rules.
The web offers a unique set of challenges, which React offers interesting solutions to. First and foremost among these solutions is the what is called the Mock DOM. Rather than having user code interface with the DOM in a direct fashion, as is the case with most DOM manipulation libraries.
You build a model of how you want the DOM end up like. React then inserts this model into the DOM. This is very useful for updates because React simply compares the model or mock DOM against the actual DOM, and then only updates based on the difference between the two states.
Sven Lito integrated the React TodoMVC example within an Hoodie web app environment. This should let you get started using Hoodie and React.
hoodie new todomvc -t "hoodiehq/hoodie-react-todomvc"
.@jordwalke lays down some truth http://t.co/AXAn0UlUe3, optimizing your JS application shouldn't force you to rewrite so much code #reactjs
— David Nolen (@swannodette) December 19, 2013


LTFRB to review Grab’s fare structure
by Alexandria Dennise San JuanFollowing the P23-million fine imposed by the Philippine Competition Commission (PCC) against Grab Philippines, transport regulators will review the ride-sharing firm’s fare setting scheme to determine any violation on existing agency policies.
The Land Transportation Franchising and Regulatory Board (LTFRB) also clarified that the antitrust body’s fines against Grab were not related with any regulatory violations.
“To put it in proper context, the fine issued by PCC in its decision recently rendered pertains to the failure of Grab to fulfill its commitment to PCC as embodied in Grab’s undertaking which it voluntarily submitted to PCC. It has nothing to do with LTFRB’s fare structure,” board member Ronaldo Corpuz said.
The LTFRB’s explanation came after its meeting with the PCC early this week in connection with the penalties imposed against the transport network company.
However, the agency added that it will conduct a review to monitor Grab’s fare setting in order to determine any violation on the existing fare structure issued by the Board.
Grab Philippines President Brian Cu welcomed the LTFRB’s move and assured that the firm’s fare structure is still compliant with the requirement of the regulatory body.
“We respect and welcome the LTFRB’s intent to conduct a review to monitor our fare setting. Grab continues to work with our regulators, and we maintain our position that our fares remain to be compliant with the LTFRB’s fare matrix,” Cu stated.
The PCC earlier slapped Grab with a total of P23.45 million fine for “breaching its pricing commitments during the first to third quarters of the initial undertaking.”
According to PCC, the fine covers P11.3 million in penalties during the first quarter, P7.1 million for the second quarter, and P5.05 million for the third quarter.
It also ordered Grab to refund P5 million to its passengers which the ride-hailing company has committed to return.
Grab also assured the public that it will work closely with the PCC and the LTFRB, and will be paying the corresponding penalties.


My Account
This is your personal Progress School of English web student account page.
Here you can update your details, apply for more courses, book host families, book our exciting events and access exclusive student stuff.
@(mycourses: List[StuCourseDto], events: List[Event], stuCourseForm: Form[StudentCourseDto]) @import helper._ @main("Account", stuCourseForm("username").value) {
This is your personal Progress School of English web student account page.
Here you can update your details, apply for more courses, book host families, book our exciting events and access exclusive student stuff.
Here you can update your personal information and change your password.
Fields marked with * must be filled in.
Here you can see details of all courses you took in our school.
Here are also course applications that you haven't completed yet. You can complete them when you're ready.
@for(mycourse <- mycourses) {| Course Status: | @mycourse.courseStatus | |
|---|---|---|
| Price per week: | € @mycourse.course.coursePPW | |
| Total price: | € @(mycourse.course.coursePPW * mycourse.course.courseLength) | |
| Course length: | @mycourse.course.courseLength Weeks | |
| Start date: | @mycourse.courseStartDate.format("dd MMM yyyy") | |
| End date: | @mycourse.courseEndDate.format("dd MMM yyyy") | |
| Level attained: | @mycourse.courseLevel | |
| Attendance: | @mycourse.courseAttendance % | |
| Accommodation: | @mycourse.courseAccommodation |
| When: | What time: | For how many: | Free spaces: | ||
|---|---|---|---|---|---|
| @socEvent.eventDate.format("dd MMM yyyy") | @socEvent.eventTime | @socEvent.eventMaxCapacity | @socEvent.eventCurrCapacity | @if("BOOKED".equals(socEvent.status)){No, I won't be there. | } else {Yes, I'm going! | }


Audio, max frequency range when you hear nothing but huge amounts of static
quipquip crypto solver to see if anything can be done "easily"
find with a date range:
-newermt #newer modified time
-newermt 2017-08-20 ! -newermt 2017-08-24
There is a hint for the cronjob. Do some research on the journalctl command and you'll see


For illustrated, step-by-step instructions on how to build your digital collection, see our:
CollectionBuilder-GH How-To Guide
For those who can't wait, below are six quick steps to get you started.
- Import the CollectionBuilder GitHub repository into your own GitHub repository.
- Download the Metadata Template.
- Follow the formatting of the example record in the template to fill in metadata on your own objects.
- Upload your files into the "Objects" folder in your repository
- Turn on GitHub Pages for the Repository
- Check out your site via the link provied on your repository's setting's page!


Solar System
- Click Drag: Rotate Camera
- Click Torus: Select Planet
- Enter: Zoom Out
- W/S: Increase/Decrease Timescale
- Space: Pause/Unpause Timescale
Made by Oleh, Dale, Jordan, and Edward.


Service Ninja is an application that connects people with the services that they need, by sorting them based on priority. The priority is calculated by taking into account both the time of the request and the urgency of the request using a geometric progression.
Each level of urgency adds to the time of the request a different offset before sorting
Critical: 30 minutes
Very Urgent: 1 hour
Urgent: 2 hours
Important: 4 hours
Take Your Time: 8 hours
This app was made for 'Midnight Madness' at HackGSU 2017
It was made within a time limit of 4 hours
Created by Deb Banerji


Lengths, Free groups and Computer Proofs
A PolyMath adventure
Siddhartha Gadgil
Indian Institute of Science
joint with
the rest of (spontaneous) PolyMath 14
The PolyMath 14 participants
- Tobias Fritz, MPI MIS
- Siddhartha Gadgil, IISc, Bangalore
- Apoorva Khare, IISc, Bangalore
- Pace Nielsen, BYU
- Lior Silberman, UBC
- Terence Tao, UCLA
- On Saturday, December 16, 2017, Terrence Tao posted on his blog a question, which Apoorva Khare
had asked him.
Is there a homogeneous, (conjugacy invariant) length function on the free group on two
generators?
- Six days later, this was answered in a collaboration involving several
mathematicians (and a computer).
- This the story of the answer and its discovery.
Length functions
- Fix a group $G$, i.e. a set with an associative product with inverses.
- A pseudo-length function $l: G \to [0, \infty)$ is a function such
that:
- $l(e) = 0$.
- $l(g^{-1}) = l(g)$ , for all $g \in G$.
- (Triangle inequality) $l(gh) \leq l(g) + l(h)$, for all $g,h\in G$.
- A length function is a pseudo-length function such that $l(g) > 0$
whenever $g\neq e$ (positivity condition).
- A pseudo-length function $l$ is said to be conjugacy invariant if $l(ghg^{-1})=l(h)$ for all $g,
h \in G$.
- $l$ is said to be homogeneous if $l(g^n) = nl(g)$ for all $g \in G$.
- On the group $\mathbb{Z}^2$ of pairs of integers, a (conjugacy invariant)
homogeneous length function is given by $l_{\mathbb{Z}^2}((a,b)) = |a| + |b|$.
- On the other hand, if $l$ is homogeneous and $g^n=e$ then $l(g)=0$ as $nl(g) =
l(g^n) = 0$.
- Thus, if $G$ has torsion, i.e., $\exists g\neq e\in G$, such that
$g^n =0$ for some $n > 0$, then there is no homogeneous length function on $G$.
Free group $\mathbb{F}_2$ on $\alpha$, $\beta$
- Consider words in four letters $\alpha$, $\beta$, $\bar{\alpha}$ and
$\bar{\beta}$.
- We multiply words by concatenation, e.g. $\alpha\beta\cdot\bar{\alpha}\beta =
\alpha\beta\bar{\alpha}\beta$.
- Two words are regarded as equal if they can be related by cancelling adjacent
letters that are inverses, e.g. $\alpha\beta\bar{\beta}\alpha\beta = \alpha\alpha\beta$.
- This gives a group; e.g.
$(\alpha\bar{\beta}\alpha\beta\beta)^{-1} =
\bar{\beta}\bar{\beta}\bar{\alpha}\beta\bar{\alpha}$.
- The word length on $\mathbb{F_2}$ is the length of the shortest word
representing an element.
Pullback pseudo-lengths
- We define $ab: \mathbb{F}_2 \to \mathbb{Z}^2$ by total exponents (ignoring
order), e.g. $ab(\alpha\alpha\beta\bar{\alpha}\bar{\beta}\alpha\bar{\beta}) = (2, -1)$.
- We get a pullback pseudo-length $l$ on $\mathbb{F}_2$ by $l_{ab}(g) =
l_{\mathbb{Z}^2}(ab(g))$.
- As $l_{\mathbb{Z}^2}$ is homogeneous, so is $l_{ab}$.
- However, this is not a length function as $l_{ab}([\alpha,
\beta])=0$, where $[g, h] = ghg^{-1}h^{-1}$ (violating positivity).
- More generally, every group $G$ has an Abelianization $ab: G \to G/[G, G]$.
The Main results
- Question: Is there a homogeneous length function on the free
group on two generators?
- Answer: No; we in fact describe all
homogeneous pseudo-lengths.
-
Theorem: Any homogeneous pseudo-length function on a group $G$ is the pullback
of a pseudo-length on its Abelianization $G / [G, G]$.
- Corollary: If $G$ is not abelian (e.g. $G = \mathbb{F}_2$)
there is no homogeneous length function on $G$.
- In fact, every homogeneous pseudo-length is the pullback of a norm on
a vector space.
- A couple of reductions were made quickly
- Homogeniety $\implies$ conjugacy-invariance.
- $l(g^2) = 2l(g) \forall g\implies $ homogeneity.
-
For attempting to contradicting positivity, increasingly sharp upper bounds were found
- using conjugacy invariance and homogeneity,
- e.g. for $l([x, y])$ in terms of $l(x)$ and $l(y)$.
- combining using convexity
-
Various constructions were attempted,
- pulling back from other quotients,
-
upgrading using homogenization etc.;
- I considered non-crossing matchings.
Non-crossing matchings
- Given a word in $\mathbb{F}_2$, we consider matchings such that
- letters are paired with their inverses,
- there are no crossings
- The norm is the number of unmatched letters.
The Watson-Crick length
- For $g\in \mathbb{F}_2$, define the Watson-Crick length $l^{}_{WC}(g)$
to be the minimum number of unmatched letters over all non-crossing matchings.
- $l^{}_{WC}$ is
unchanged under cancellation (hence well-defined
on $\mathbb{F}_2$) and
conjugacy invariant.
- Indeed the length $l_{WC}$ is maximal
among normalized conjugacy-invariant
length functions.
- However, if $g=\alpha[\alpha, \beta]$, then
$l^{}_{WC}(g^2)= 4$, but
$l^{}_{WC}(g) = 3$, violating homogeneity.
The great bound chase
- By Tuesday morning, most people were convinced that there are no homogeneous
length functions on the free group.
- There was a steady improvements in the combinatorial/analytic bounds on
$l([\alpha, \beta])$.
- These seemed to be stuck above 1 (as observed by Khare) - but eventually broke
this barrier (work of Fritz, Khare, Nielsen, Silberman, Tao).
- At this stage, my approach diverged.
Computer Assisted proofs
- We can recursively compute $l_{WC}(g)$ for words $g$.
- By maximality, this gives an upper bound on all conjugacy-invariant normalized lengths.
- This can be combined with using homogenity with ad-hoc (or expert guided) choices.
- Using this, I obtained an upper bound of about $0.85$ on $l(\alpha, \beta)$.
- This was upgraded to a (computer) checkable proof.
- On Thursday morning, I posted an in
principle human readable proof of a bound.
- The computer-generated proof was studied by Pace Nielsen, who extracted the internal
repetition trick.
- This was extended by Nielsen and Fritz and abstracted by Tao to show:
if $x\sim wy\sim zw$ then $l(x)\leq \frac{l(y)+ l(z)}{2}.$
- From this Fritz
obtained the key lemma:
- Let $f(m, k) = l(x^m[x, y]^k)$. Then $f(m, k) \leq\frac{f(m-1, k) + f(m+1,
k-1)}{2}$.
- A probabilistic argument of Tao finished the proof.
Algorithmic bounds for
Length functions
- Let $l$ be a normalized, conjugacy-invariant length function.
- Lemma 1: $l(xg) \leq l(g) + 1$ for $x \in \{\alpha, \beta, \bar{\alpha},
\bar{\beta}\}$, $g \in \mathbb{F}$.
- Lemma 2: $l(xh_1x^{-1}h_2) \leq l(h_1) + l(h_2)$ for $x \in \{\alpha, \beta,
\bar{\alpha}, \bar{\beta}\}$, $h_1, h_2 \in \mathbb{F}$.
- $l(xh_1x^{-1}h_2) \leq l(xh_1x^{-1}) + l(h_2)$ by the triangle inequality.
- $l(xh_1x^{-1}) = l(h_1)$ by conjugacy invariance.
- Based on these we define a function $L$ on finite words in $\{\alpha, \beta, \bar{\alpha},
\bar{\beta}\}$ giving an upper bound on $l$.
- We define a function $L$ on finite words in $\{\alpha, \beta, \bar{\alpha}, \bar{\beta}\}$
recursively as follows.
- We define $L(e) = 0$ for the empty word $e$.
- For a word $g = xh$, $x \in \{\alpha, \beta, \bar{\alpha}, \bar{\beta}\}$, recursively:
- let $L_0 = L(h) + 1$;
- let $\mathcal{L} = \{L(h_1) + L(h_2) : h = h_1x^{-1}h_2\}$;
and define $L(g) = \min(\{L_0\}\cup \mathcal{L}) $.
- Theorem: If $l$ is a normalized, conjugacy-invariant length function, then
$l(g)\leq L(g)$ for all $g$.
- In practice, we must memoize (cache).
-
For obtaining bounds also using homogeneity, we use auxiliary elements $g_i$
and powers $n_i$.
-
By homogeneity we get $l(g_1)\leq \frac{L(g_1^{n_1})}{n_1}$, which is often an improved bound over
$L(g_1)$.
-
Further, we can use such improved bounds recursively to compute bounds for subsequent elements,
for instance if $g_1$ is a subword of $g_2^{n_2}$.
- In practice, we used words of the form $\alpha(\alpha\beta\bar\alpha\bar\beta)^k$ with $k=1, 2,
6$ and $n_i$'s, $n$ from $1$ to $20$.
- We bound $l([\alpha, \beta])$ by $\min_{1\leq n\leq 20} L([\alpha, \beta]^n)/n$.
Computer generated proofs
- In foundations based on Dependent Type Theory, statements, proofs,
algorithms are all first-class: they
can be arguments and results of functions and elements of collections.
- A program is a function, and its value (result) can be (a structure with component) a proof.
-
I upgraded the algorithms to
return bounds with proofs in domain-specific foundations; the proofs were exported to
a human readable format.
-
Here we will illustrate using Lean 4.
-
First we address two issues: was the finding of the proof a fluke & rounding-off errors; by replicating.


{% extends "Default/default.html" %} {% block content %}
On this page you can select a variety of example projects created for the Ultra96. Listed below is a table with the name of each project and its description. Clicking on the project (which should be blue and underlined) will send you to another page that will explain how to setup and run that specific project. For more information on the Grove Sensor Kit please visit Grover Starter Kit.
| Project | Description |
|---|---|
| Ultra96 GPIO LEDs | Be able to control the four GPIO LEDs on the Ultra96 Board. Can have them in a constant state or as a trigger. |
| OpenAMP Matrix Multiplication | Provides a complex test that generates two matrices on the Linux master which are then sent to the remote to multiply them. Then they are sent back to the master to display the result. |
| OpenAMP Proxy Application | Application creates a proxy between the linux master and the remote core, which allows the remote firmware to use console and execute file I/O on the master. |
| Hello World with LCD | How to display text on the Grove RGB LCD module and change the color of the backlight (Linux IO). |
| Touch Sensor and Relay | A system that toggles a relay on and off when the touch sensor is tapped (Linux IO). |
| Drive LED with Button | Control an LED with the use of a button (Atmega IO). |
| Buzzer and Light Sensor | Use the Grove light sensor and Grove buzzer to be silent when there is light and emit noise when it is dark (Atmega IO). |
| Temperature and Humidity Display | Read data using the Digital Humidity and Temperature sensor and display the readings on the LCD Display (Linux/Atmega IO). |
| Tweeting Doorbell | Sends a message out to twitter every time the button is pressed (Linux/Atmega IO). |


Aduenam News
Welcome to Aduenam News, your source for the current immigration news. Click each image to read more!
Previous
Next


Unofficial: BN takes early lead in Tg Piai by-election
by theedgemarkets.comPONTIAN (Nov 16): Barisan Nasional's candidate Datuk Seri Dr Wee Jeck Seng has taken an early lead as counting of votes started in Dewan Jubli Intan Sultan Ibrahim here.
Malaysiakini reported that at 5.58pm BN was ahead with 273 votes while Harapan was second with 162 votes.
Berjasa received seven votes, Gerakan three while independent candidates Ang Chuan Lock and Faridah Aryani Abd Ghaffar received one and nil respectively.
While BN may have won the advance and postal votes, Harapan appears to have made improvements.
According to Malaysiakini, BN' share of advance and postal votes was down this time. In the last general election, BN won 68.75 percent of the advance and postal votes but it is down to 61.21 percent in this by-election.
Pakatan Harapan improved its advance and postal votes share from 20.09 percent in the last general election to 36.32 percent in this by-election.


-
Customer Information
- Company
- Address
- Postal
- Contact Person
- Designation
- Contact No(Office)
- Contact No(Mobile)
- Email of Authorised Officer
-
Type Of Job Done
- New Installation
- Cessation
- Maintenance
- Modification
- Internal/External Removal
- Internal Wiring
-
Type Of Service
- Charges for job
- Service Type
- Service Id
- Work Order
- Type Of
- Serial
- RFS Date
-
Service Details
- Visit Charge Hours
- Visit Charge Amount
- Over Time Surcharge Hours
- Over Time Surcharge Amount
- Parts
- Others
- Total Amount(estimated)
- Remarks
- Agreement
Signature of Authorized Office


The energy we gain in 15 seconds out of a 320 Watt Solar panel according to your location equals to the energy you need to complete the following excercice
New Competition in Town!!!


Save as SVG
Time spent at home
Share of commuters by income
Share of commuters by home value
Low wealth (0-40%)
Medium wealth (0-40%)
High wealth (0-40%)
Bogota
Jakarta
Manila
Mexico City
São Paulo


CodePath partners with Girls in Tech Taiwan to provide an 8-week accelerated android program. I volunteered to be one of the organizer. Here is my material for seconde week, the topic I'm gonna talk about is user interaction and flows, which will cover some simple concepts of action bars, snack bar, toast, event listners and intents.
Bootcamp link: http://codepath.com/courses/girlsintechtw


Programming Challenge
Register
UserName
Password
Register
Back
Login
UserName
Password
Log In
Register New
Numbers
Number
Get Next Num
Get Cur Num
Set Num
Back


User Login
Home
Official Site
About us
Profile
Board of Directors
Organisational Structure
Our Office
Our Clients
Clients
Career
Vacancies
Online Registration
Selection Schedule
Results
Awards
RTI
RTI
RTI Online
Disclosures


Let a, b and c be positive numbers.
Let W, X, Y, Z be four collinear points where |WX| = a, |XY| = b, |YZ| = c and |WZ| = a + b + c.
Let Cin be the circle having the diameter XY.
Let Cout be the circle having the diameter WZ.
The triplet (a, b, c) is called a necklace triplet if you can place k 3 distinct circles C1, C2, ..., Ck such that:
For example, (5, 5, 5) and (4, 3, 21) are necklace triplets, while it can be shown that (2, 2, 5) is not.
Let T(n) be the number of necklace triplets (a, b, c) such that a, b and c are positive integers, and b n. For example, T(1) = 9, T(20) = 732 and T(3000) = 438106.
Find T(1 000 000 000).


Check Yo Password!
Type Your Password:
Source Code
Here
. Uses RegEx to score security points for your password. Built on a Boilerplate which uses Babel & Webpack


Test page for the Dialog Manager module
Test Progress Info
Delayed
Delayed (too) short
Test Show Msg
Multi-line
Large
Very Large
Very Large with Title
HTML
Node
Fragment
Test Confirmation Dialog
Test Input
with default
multi-line
Test Fatal Error
Test Progress Info + Fatal Error
Test Toast
Output:


I am a pragmatic and personable geospatial developer. I strive to complement my technical skills with an excellence in communicative and collaborative qualities. My training has provided me with a grounding in modern GIS and remote sensing technologies, and my experience in research has given me the analytical abilities inherent in applied research. I am now fully committed to the research of geospatial applications to regional climate change adaptation.
Short - Provide geospatial services in areas of coastal hazards and adaptation planning.
Long - Work to assist the adaptation of coastal populations to projected climatic change using the powerful decision support provided by geospatial technology.
scott.v.hatcher (at) gmail (dot) com
I attended the Climate Change Adaptation Forum in the Bras D'Or Lakes Biosphere Reserve, and was hired by the reserve association to produce a report outlining guidelines for adaptation in Canada's UNESCO Biosphere Reserves. The report can be downloaded from this link
For the purpose of preservation, as well as to facilitate analysis, some rock carvings made on the face of a cave were scanned at very high resolution using a white-light scanner. The carvings are located on the Chatham Islands, which are a group of islands east of New Zealand. This was done by the Archaeology and Surveying departments of the University of Otago in Dunedin, New Zealand. My job was to attempt to automate the process of detecting the carvings from the surveying data in order to quickly map their layout on the carving face.
I was involved in a project that aimed to quantify the effect of highly oblique winds in transporting sand over a coastal dune. This coastal dune, located on the southern coast of Dunedin, New Zealand, is adjacent to municipal lands, and is bordered by a large road made of backfill. The project used in situ measurement techniques to quantify the effects of steering and acceleration of the regional winds due to the local topography of the dune.
The goal of the CanCoast project is to improve upon the existing Coastal Vulnerability Index (CVI) from Shaw et.al. (1998) using updated information on Geology, Coastline shape, permafrost, and socioeconomic variables. To do this, a GIS with all relevant layers was created, and then a new formula for calculating a vulnerability index was developed.
The community plans for the Inuit towns within Nunatsiavut, in northern Labrador, rely on planners from Ottawa. This presents challenges when it comes to community assets that are cultural and unmapped. The planners wanted to incorporate this information into community plans, as well as fill in data gaps to do with projected climatic change. A partnership with Memorial University allowed this problem to be tackled.
The city of Iqaluit needed an assessment of coastal hazards within Koojesse Inlet, the main inlet servicing the city, in order to incorporate proper planning into its five year plan, as well as it's long-term climate change adaptation plan.
As part of my final project I attempted a 3D model of a scuba tank underwater using oblqiue photogrammetry. This is very common place now (structure from motion has advanced rapidly since then), but at the time I had a lot of fun diving into new avenues of photogrammetry.
Hippalus has retained a seat in those remembered from ancient history as a great navigator. It was he who cleverly began sailing due East once leaving the Gulf of Aden and arriving on the Western coast of India, when all others assumed this would be a suicide mission. His fame even gave his name to monsoon winds that made his feat possible. The evidence we have, however, for his existence is faint, but his story could help elucidate the way mythology shaped the ancient Graeco-Roman world.
I am an amateur photographer, enjoying taking photos of nature and of funny situations. I keep my portfolio on flickr


Tories fuming as Boris Johnson plan for Treasury to cost Labour policies blocked
The plan for the government to publish costings was scrapped after John McDonnell "kicked off"
by Pippa Crerar, https://www.mirror.co.uk/authors/pippa-crerar/Boris Johnson's plan for the Treasury to publish the costings of key Labour policies was blocked last night after John McDonnell "kicked off", the Mirror understands.
The Tories were left fuming when Sir Mark Sedwill, the country's top civil servant, stopped the plan to use tax-payer funded resources on the eve of the election.
A Labour source told the Mirror: "This is an embarrassing slap in the face for Tory ministers, who have been caught red-handed attempting to blatantly use the civil service for party political purposes in an unprecedented way".
Chancellor Sajid Javid boasted to the Cabinet earlier in the day that the costings of up to a dozen flagship Labour policies were about to be released.
But when Treasury chief Sir Tom Scholar made a courtesy call to Mr McDonnell to inform him of the publication he was "taken to task".
The shadow chancellor told him Labour had not confirmed what would be in its manifesto so the analysis would be pure speculation.
"I'm happy for anyone to examine our policies, but to do this hours before a general election campaign is I think an abuse of power," he later said.
Sir Mark then intervened to block publication, prompting the fury of Tory ministers.
A Treasury insider said: "Ultimately this is a question for him but this is not an unusual or unorthodox practice. It has been going on since the time of Gordon Brown."
But although the Treasury analysis of Opposition spending pledges took place ahead of the 2010 and 2015 elections, former Chancellor Philip Hammond decided not to ask for it at the 2017 election.
Civil servants are banned from doing any work that could call into question their impartiality in the period known as "purdah" ahead of a general election campaign.


Open a Cygwin Shell (if not already open from checking out sources)
Double-click the Cygwin icon on your Desktop to launch a new shell.
Type this command to build WebKit:
WebKit/WebKitTools/Scripts/build-webkit
Use the --debug option for a debug build, which includes debugging symbols and assertions:
WebKit/WebKitTools/Scripts/build-webkit --debug
By default, build-webkit places build products in WebKit/WebKitBuild. You can specify a different build location on Mac in your Xcode preferences. On Windows, the WEBKITOUTPUTDIR environment variable can be used to set a different build products location. If you have set up a custom build location, then build-webkit will place the build products there.
A common source of build errors on Windows is Visual C++ Express forgetting the Platform SDK paths. If you have trouble building WebKit, double check that the paths you set during step 2 of the Platform SDK Installation are still there and add them again if necessary.
Another common error is forgetting to set the WEBKITOUTPUTDIR environment variable. If you omit this step, you will get build errors when the WebKit build process begins generating code. If you are not sure how to do this, Microsoft provides a good set of instructions.
Don't forget that if you have any questions or problems building WebKit, feel free to get in touch!
To set a default build configuration for build-webkit and other scripts, use the set-webkit-configuration script:
WebKit/WebKitTools/Scripts/set-webkit-configuration --debug
WebKit/WebKitTools/Scripts/set-webkit-configuration --release
It's handy to put WebKit/WebKitTools/Scripts in your shell path so you can type commands like build-webkit without specifying a full path.
Once your build has finished, you can run it inside Safari.


Google admits major underreporting of General Election ad spend
by Anna MeninGoogle has admitted to severely underreporting spending on UK political advertising ahead of the upcoming General Election, with errors affecting both the Conservative and Labour parties.
Google’s weekly transparency reports on advertising spending by political parties and other organisations contain major discrepancies because heavy spending on search terms is not always recorded, The Guardian reported.
Read more: Department for Transport signs up to Google Cloud in move that lessens reliance on AWS
In one instance, a report published this week claimed that Labour had spent just £50 on adverts in the week beginning 27 October, when the General Election was called, and nothing the week after.
Labour, however, spent £63,900 during that fortnight – at least 1,000 times the figure reported by Google – on adverts on search results for terms such as “Brexit” or “Brexit Party”.
The correct figures had been disclosed by Google in a previous transparency report which is no longer available, according to The Guardian.
The paper found a similar discrepancy in reported spend for the Conservative Party, which was originally reported as £12,450 but then downgraded to £9,900 in the latest version of the report.
Read more: Google Stadia responds to complaints over lag on gaming platform
Google admitted that the latest transparency report was incorrect, but initially told the paper the public version of the report would not be updated until next Tuesday, but has since pledged to fix errors “as soon as possible”.
In a statement, a Google spokesperson said: “We are looking into this issue. If we find any ads that were mistakenly underreported, we will add them into our transparency report as soon as possible.”
Main image credit: Getty


Pritzl’s role rising with Badgers after posting first career double-double
by FOX Sports WisconsinBrevin Pritzl, Badgers guard ( ⬆ UP)
Pritzl, Wisconsin’s 6-foot-3 guard, notched his first career double-double Sunday against inner-state rival Marquette with 15 points and 13 rebounds to help the Badgers defeat the Golden Eagles 77-61 at the Kohl Center. Pritzl nailed 3 of 4 attempts from 3-point range and shot 4-of-6 overall from the field.
Milwaukee Brewers jerseys ( ⬆ UP)
The freshest uniforms in Major League Baseball can now be found in Milwaukee. The Brewers released four new jerseys Monday night, updating the classic glove logo and making it the franchise’s new default. Milwaukee now has four jersey options: home cream, home pinstripe, away navy and away gray. Our rankings: 1. Cream 2. Pinstripe 3. Gray 4. Navy. But they’re all winners.
Milwaukee Bucks jerseys ( ⬆ UP)
The Brewers aren’t the only local team to get a new look. The Bucks unveiled their city edition threads for the 2019-20 season, a cream-colored uniform with “Cream City” embroidered across the chest. Throwing that in the rotation of the green away, white home and black “Fear The Deer” uniforms, and do the Bucks now have the best jersey set in the NBA?
Markus Howard, Marquette guard ( ⬇ DOWN)
If Howard has a rough game, so do the Golden Eagles. Howard shot just 6-of-21 from the field (and 2 of 7 from deep) in Marquette’s loss to Wisconsin on Sunday. He’s posted under 20 points in back-to-back games for the just third time since the start of 2018-19.
Green Bay Packers ( ⬇ DOWN)
The bye week wasn’t too kind to Green Bay. The Packers saw division rival Minnesota battle back from a 20-0 halftime deficit and top Denver 27-23 in Minneapolis. A couple hours later, San Francisco poured on 19 fourth-quarter points to take down Arizona 36-26. Green Bay didn’t gain any ground in the NFC North or the race for the top seed in the conference, either.
Christian Yelich, Brewers outfielder ( ➡ EVEN)
As expected, Yelich didn’t win the NL MVP award. That went to Los Angeles Dodgers slugger Cody Bellinger. One would think Yelich could’ve won the award had he stayed healthy throughout September. Although he’s not the reigning MVP anymore, Yelich can still be considered the face of the game: It was announced Wednesday that he is the featured player on the cover of the new RBI Baseball video game.


Microverse
Microverse is an online school for remote software developers where you pay nothing until you land a life-changing job, no matter where you live.
Microverse is an online school for remote software developers where you pay nothing until you land a life-changing job, no matter where you live.


by Andrew Harp
by Andrew Harp
While 1918 may have been the year of the founding of one of Indiana’s largest universities, it was also the year of flu outbreaks, train wrecks and war.
The United States was fighting in Europe and the Ball Brothers were putting together their school in Muncie while people within the country and the world were dealing with one of the worst influenza epidemics of all time.
This outbreak led to the deaths of at least 50 million people around the world and killing at least 675,000 people in the United States, according to the Center for Disease Control and Prevention.
The strand of influenza was unusual because instead of killing those of old age, young age and weak immune systems, the disease seemed to kill young, healthy adult men between 20 and 40 years of age. This was because the flu spread throughout military bases.
Indiana was no exception to this plague.
In a report by the Indianapolis Star in November 1918, 3,266 Indiana residents died from the influenza. At Fort Benjamin Harrison, it was reported 3,116 cases of influenza and 521 cases of pneumonia were treated.
Fort Benjamin Harrison, which was once a training site, became a hospital in 1918 for wounded soldiers. However, the fort and other training posts near Indianapolis started having reports of soldiers becoming ill.
Because little was known about the influenza, as it spread across training camps full of young men, it soon made its way into civilian areas as well.
Early reports regarding alarming amounts of those infected with the influenza were made to sound as if the problem was nonexistent or not nearly as bad as most would believe in order to retain morale for the war. This included the “Indianapolis News” and medical officers making early reports that said there was no epidemic.
By October of that year, around 650 sick men were reported in Fort Benjamin Harrison, which was low on nurses.
As the numbers of sick men grew, the fort transformed the hospital that previously carried a few hundred into one that could carry more than 1,000.
According to the University of Michigan Center for the History of Medicine, Indianapolis’ death rate among those with influenza was low compared to other areas around the world. This is attributed to officials working together to get the word out and mobilize effectively.
Bruce Geelhoed, professor of history and co-author of “Ball State University: An Interpretive History,” said the Spanish flu did not end up affecting the school as much as other areas of the country and world.
“There’s an outbreak of Spanish flu all over, but apparently through good nutrition and good hygiene, what was then the eastern division, part of Indiana State at the time, doesn’t suffer,” Geelhoed said.
In the summer of 1918, while the eastern division of the Indiana State normal school, a unit for the Student Army Training Corps (SATC) was added to the school. It eventually contained 124 men.
Geelhoed said Geneva Nugent, a dietitian and a member of the home economics faculty, was the unsung hero by making food for the sick men, and, with the help of the healthy men, delivered the food to them. This helped recover the sick within the SATC unit recover.
In the early morning of June 22, 1918, near Hammond, Indiana, two trains collided with each other in one of the worst train wrecks in U.S. history. This would be known as the Hammond Circus Train Wreck.
Train conductor Alonzo Sargent fell asleep operating a train on the Michigan Central Railroad with 21 empty cars following a slower train carrying performers of the Hagenbeck-Wallace circus, amounting to hundreds of circus workers and performers across 25 train cars.
While the circus train was at an emergency stop, Sargent missed warnings and signals telling the train to stop, and ended up plowing into the caboose at around 25 mph, killing people almost instantly and creating a fire.
The crash resulted in the death of 86 people and 127 injuries, according to the book “The Great Circus Train Wreck of 1918: Tragedy on the Indiana Lakeshore” by Richard M. Lytle.
Sargent was charged for what he did, but after prosecutors failed to issue a retrial after a mistrial, the charges were dropped in 1920.
It was the same year as the Great Train Wreck of 1918, which happened in July in Nashville, Tennessee. Two passenger trains collided head-on resulting in the deaths of 101 people and 171 injuries, the worst train accident in United States history.
The Ball Brothers bought the Indiana Normal Institute three months after the United States declared war on Germany, effectively joining World War I.
WWI lasted four years: July 1914 to November 1918. However, the United States were only in the war from April 1917 to when the battles ended in 1918.
The war kick-started when Gavrilo Princip assassinated the Austro-Hungarian heir Archduke Franz Ferdinand after a long list of sermounting pressure in Europe including alliances, treaties, rivalries and diplomatic crises.
Due to even more unresolved treaties, deals and alliances, this would eventually lead to World War II, which would have a more prevalent U.S. involvement after the bombing of Pearl Harbor.
After the war, almost 10 million military personnel were killed and more than 20 million were injured. A little more than 100,000 Americans were killed.
Much of the war fought using trench warfare, where trenches were dug and filled with soldiers on both ends of large spaces of field, creating no-man's-land in between.
New inventions and weapons like poison gas, tanks and flamethrowers now had the chance to be introduced.
According to the U.S. Department of Veterans Affairs, 4,734,991 Americans served in World War I. The country joined the Allied Powers, which consisted of several countries including England, France, Japan, Italy and Russian, against the Central Powers, which included Germany, Austria-Hungary, the Ottoman Empire and Bulgaria.
Geelhoed said World War I created a movement of faculty members from Indiana State University to the eastern division to offset the shortage of students.
“The shortage of male students at Indiana State created this problem for the president of Indiana State in Terre Haute. He’s got all these faculty members. What is he going to do with them?” Geelhoed said.
He said that while faculty members were upset with the move, the Ball family’s numerous contributions to the school and campus, including athletic facilities and women’s dormitories, led the school down a path where it would survive for several years.
Statues called the “Spirit of the American Doughboy,” which depict an American soldier, rifle in hand, commemorate WWI U.S. infantry men. There are 135 statues across 35 states, 11 of them in Indiana, with one in Muncie in Elm Ridge Cemetery.
Contact Tier Morrow with any comments at<EMAIL_ADDRESS>or on Twitter @TierMorrow.


'NRC affirms national security, don't politicise it': Baba Ramdev
Ramdev said, 'Even if a single person is staying in India illegally, it is dangerous for national security and the unity of the country.'
by ANINew Delhi: Yoga Guru Ramdev on Thursday welcomed Home Minister's Amit Shah recent statement on the implementation of National Register of Citizens (NRC) saying, "this will be beneficial for maintaining national security" and added that the issue should not be "politicised".
Speaking to ANI in New Delhi, Ramdev said, "Even if a single person is staying in India illegally it is dangerous for the national security and the unity of the country. We must protect our country. This (NRC) will be beneficial for maintaining national security. NRC is not a social and a political issue and hence should not be politicised."
On Wednesday, Union Minister Shah had stated in the Parliament that the National Register of Citizens (NRC) process will be carried out across India, clarifying that there would be no discrimination on the basis of religion.
The statement of Shah led to mixed reactions from various political quarters with West Bengal Chief Minister Mamata Banerjee saying that "NRC will not be implemented, keep this in mind. There is nothing to worry about."
In the final NRC list published on August 31, a total of 3,11,21,004 persons were found eligible for inclusion in the list leaving out 19,06,657 persons, including those who did not submit their claims in Assam.
Catch the latest news, live coverage and in-depth analyses from India and World. Follow us on Facebook and Twitter.


{% extends 'base.html' %} {% load static %} {% load tz %} {% block pagetitle %}
This page shows all the courses/sections you are currently enrolled in.
{% if enrollments|length == 0 %}You have no enrollment record.
{% else %}| Course | Section | Instructor | Grade | Action |
|---|---|---|---|---|
| {{ enrollment.course_section.course }} | {{ enrollment.course_section.section_num }} | {{ enrollment.course_section.teaching_team_id.faculty.legal_name }} | {{ enrollment.get_grade_display }} | Forum Assignment {% if now|utc < enrollment.course_section.course.drop_ddl|utc %} Drop {% endif %} |


Bus Fanning Photography by Ramachandran Palaniramu
by AanavandiTo be a fan is to take interest in public transportation, whether it’s bus transit, rail transit, marine transport, or aviation.
To be an avid fan or a dedicated fan is to understand the ins and outs of the transportation industry, from the way systems are formed or managed to the vehicles that carry the riding public.
Bus Fanning Photography by Ramachandran Palaniramu
Ramachandran Palaniramu is a Busfan from TamilNadu. Basically he is an Engineer but interested in Bus fanning as well as. He used to capture beautiful images of buses from Highways.
His Photos are famous in the world of Busfans in India. We are Sharing some Images here which are captured by Ramachandran Palaniramu.
What types of fans are out there?
Some fans simply do a lot of research online and attend many events dealing with transit, while others work in the industry in some capacity as either operators, dispatchers, cleaners, or management.
The bottom line is, we love to work or study this industry, which is a demanding but dynamic industry.
There are some people who take a fondness to one mode of transportation over another, but most fans like multiple modes of transportation.
Some fans even love automotive transportation and work in the auto industry while still taking interest in public modes of transportation.
There are those that love buses, primarily transit buses. Some love both, like myself, while others lean more towards one or the other.
There are some that like school buses as well, but they are practically outnumbered by those who are just transit and/or coach fans.
Most busfans gather at major transit centers, bus stations, bus roadeos, and special bus-related rallies or shows to talk about, what else, buses.
Conversations can range from bus models to memorabilia, photos taken, sound effects, bus sightings, bus garage transfers, buses sold or leased to other companies, bus route changes, and operations planning.
In the old days before the Internet, most bus fans (or “enthusiasts”) met through trade shows or major events.
In the modern era, most fans meet on Facebook or bus-related forums.


Material World
menu
Home
About us
Product
Search
Home
About us
Product
Search
First Name
Last Name
Password
Football clubs
Clear
clear
Submit
send


Left panel content goes here
Right panel content goes here
검색
Weather Icon
designed by linector from Flaticon


Class tent.logging.Log
a log sink
- Defined in: logging.js
| Constructor Attributes | Constructor Name and Description |
|---|---|
|
Creates a new log sink
|
Method Summary
| Method Attributes | Method Name and Description |
|---|---|
|
bind(callback, level)
Binds a callback function to events of this Log
|
|
|
bindToAlert(level)
Binds this Log to the alert function (ie: shows an alert dialog for every event)
|
|
|
bindToConsole(level)
Binds this Log to the browser's console
|
|
|
bindToHtml(outputElement, level)
Binds this Log to an Html element (ie: adds some html for every event)
|
|
|
debug()
Logs an event with severity DEBUG, all arguments are stringified in a message
|
|
|
error()
Logs an event with severity ERROR, all arguments are stringified in a message
|
|
|
fatal()
Logs an event with severity FATAL, all arguments are stringified in a message
|
|
|
info()
Logs an event with severity INFO, all arguments are stringified in a message
|
|
|
trace()
Logs an event with severity TRACE, all arguments are stringified in a message
|
|
|
unbind(callback)
Unbinds a callback function from events of this Log
|
|
|
Unbinds this Log from alert function
|
|
|
Unbinds this Log from browser's console
|
|
|
unbindHtml(outputElement)
Unbinds this Log from an Html element
|
|
|
warn()
Logs an event with severity WARN, all arguments are stringified in a message
|
Class Detail
tent.logging.Log()
Creates a new log sink
Method Detail
-
{tent.logging.Log} bind(callback, level)Binds a callback function to events of this Log
- Parameters:
- {function()} callback
- {Number} level Optional
- Returns:
- {tent.logging.Log} this
-
{tent.logging.Log} bindToAlert(level)Binds this Log to the alert function (ie: shows an alert dialog for every event)
- Parameters:
- {Number} level Optional
- minimum level for events sent
- Returns:
- {tent.logging.Log} this
-
{tent.logging.Log} bindToConsole(level)Binds this Log to the browser's console
- Parameters:
- {Number} level Optional
- minimum level for events sent
- Returns:
- {tent.logging.Log} this
-
{tent.logging.Log} bindToHtml(outputElement, level)Binds this Log to an Html element (ie: adds some html for every event)
- Parameters:
- {Object} outputElement
- html element for appends, INPUT (add line to value), UL (add LI), TABLE (add TR) or DIV (add line to innerHTML)
- {Number} level Optional
- minimum level for events sent
- Returns:
- {tent.logging.Log} this
-
debug()Logs an event with severity DEBUG, all arguments are stringified in a message
-
error()Logs an event with severity ERROR, all arguments are stringified in a message
-
fatal()Logs an event with severity FATAL, all arguments are stringified in a message
-
info()Logs an event with severity INFO, all arguments are stringified in a message
-
trace()Logs an event with severity TRACE, all arguments are stringified in a message
-
{tent.logging.Log} unbind(callback)Unbinds a callback function from events of this Log
- Parameters:
- {function()} callback
- Returns:
- {tent.logging.Log} this
-
{tent.logging.Log} unbindAlert()Unbinds this Log from alert function
- Returns:
- {tent.logging.Log} this
-
{tent.logging.Log} unbindConsole()Unbinds this Log from browser's console
- Returns:
- {tent.logging.Log} this
-
{tent.logging.Log} unbindHtml(outputElement)Unbinds this Log from an Html element
- Parameters:
- outputElement
- Returns:
- {tent.logging.Log} this
-
warn()Logs an event with severity WARN, all arguments are stringified in a message


There isn't any periodic operations.
Back
Periodic operation
Back
Begin to End:
{{period.dateBegin | date2:'dd/MM/yyyy'}} to
{{period.dateEnd | date2:'dd/MM/yyyy'}}
{{period.nbRepeat | repeat}} times -
Each {{period.step}}
{{period.intervalType | period}}
Value:
{{period.operation.value | currency:'€':0:true}}
Date: {{operation.dateOperation | date2:'dd/MM/yyyy'}}
Value: {{operation.value | currency:'€':0:true}}
Third party: {{operation.thirdParty }}
Type: {{ operation.type }}


I am a recent graduate of the Full Stack Software Engineering program at Prime Digital Academy. Development inspires me because of its endless capacity to bring ideas to life that can enrich our existance and make positive impacts for people, communities, and enterprises. I love learning from and working with other developers and I am excited to contribute my skills to innovative projects and organizations.
Skills:
JavaScript | HTML5 | CSS | Node.js | jQuery | PostgreSQL | AngularJS | Git | Github | MongoDB | Express | Passport | AngularJS Material | Bootstrap | Heroku
Strengthsfinder 2.0:
Restorative | Analytical | Empathy | Individualization | Harmony
Portfolio
goZero
Solo Project
Oasis for Youth
Group Project
goZero
Solo Project
goZero is a resource guide for living a “zero-waste” lifestyle or for those trying to reduce the amount of daily waste they produce. When users navigate to the goZero home page they see a full-page map with markers indicating the location of businesses that support zero-waste practices, such as package-free bulk shopping. A window positioned on top of the map contains a list of all the businesses marked on the map. Users can click on each listing to get descriptive information and see their zero-waste offerings. Registered users have the capability to add new businesses to the list, update those they have added, and delete them.
As part of a 5-person development team I helped build a full-stack application for Oasis, a non-profit organization that runs a drop-in resource center for at-risk youth. Our web application streamlines and organizes the volunteer registration process so that staff can spend their time working on other important program areas. The application will replace a paper-based registration process with an online submission form. The application provides the client with a filterable quick-view page of all volunteers, their stage in the registration process, their areas of interest, length of service, and hours worked. I built the front-end logic for the filterable quick-view page and served as the point of contact between the client and our team.
 Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
Date: January 2017
Client: Finish
Category: Identity
Project Name
Lorem ipsum dolor sit amet consectetur.
 Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
Date: January 2017
Client: Lines
Category: Branding
Project Name
Lorem ipsum dolor sit amet consectetur.
 Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!
Date: January 2017
Client: Southwest
Category: Website Design
Project Name
Lorem ipsum dolor sit amet consectetur.
 Lorem ipsum dolor sit amet, consectetur adipisicing elit. Est blanditiis dolorem culpa incidunt minus dignissimos deserunt repellat aperiam quasi sunt officia expedita beatae cupiditate, maiores repudiandae, nostrum, reiciendis facere nemo!


System Story: OpenDSA eTextbook System
System Information
Initial Project Conception
OpenDSA began in early summer of 2011 as a collaboration between Cliff Shaffer and Ville Karavirta while Shaffer was on an extended visit to the research group of Lauri Malmi at Aalto University in Finland. At that point, Shaffer had been working for several years on the AlgoViz project, which promoted greater use of Algorithm Visualization within the CS education community. A key finding from AlgoViz was that instructors find it easier to adopt complete units of instruction rather than individual visualizations. For example, there are many variations on Quicksort. Given access to a high-quality Quicksort visualization, there is a strong chance that it won't match the code or approach presented in the rest of the course instructional materials, making it harder for the instructor to integrate and for the students to understand. Better is to give instructors the ability to adopt a full Quicksort presentation, or a chapter on sorting, or a full data structures textbook.
Karavirta created the JavaScript Algorithm Visualization (JSAV) library during Summer 2011 while Shaffer created demonstration visualizations and associated explanatory text. They worked extensively with Tom Naps of University of Wisconsin-Oshkosh, who had a vision for a community-centered, open-source eTextbook project. This led to using the name "OpenDSA" for the project. Shaffer had recovered the publication rights to a data structures textbook that he published in the 1990's, and so had a large base of prose to work from. One of the first decisions that had to be made was how to author content. After conversations with Brad Miller of Runestone Academy, we adopted the Sphinx compiler and ReStructuredText (RST), the documentation language of the Python community. What made RST attractive to OpenDSA is the ability to extend the language through implementing "directives" in Python, and the openness of the Sphinx compilation process. This gave us a rich authoring tool that could also integrate non-RST elements (like visualizations and exercises) into the compiled HTML files.
This gave us all the building blocks for the eventual project: RST-based prose integrated with JSAV-based visualizations and exercises compiled into HTML pages that could be served to users. OpenDSA's fundamental conception is that it provides infrastructure and a collection of materials, which allows instructors to pick-and-choose from the content to create their own eTextbook. The content selections are saved in configuration files for future use.
The initial server for managing student logins, serving content, and collecting scores was written by Eric Fouh in Django, with the initial client-side framework written by Daniel Breakiron. The first use of OpenDSA to support a course was for a chapter on sorting for a junior-level data structures course at Virginia tech during Fall 2012. One of the first lessons learned was that while good prose and visualizations are important (and students strongly prefer visual presentations of algorithms and data structures), the interactive exercises are the single most important thing in any eTextbook. Most of the early exercises used by OpenDSA were rewritten versions of TRAKLA exercises, contributed to OpenDSA by developers at Aalto University. OpenDSA was used as the full textbook for Virginia Tech's junior-level data structures course for the first time in Fall 2013, with full textbook prose, extensive visualizations, and automatically graded homework exercises for the full semester.
Since this time, use of OpenDSA has grown to be used by dozens of institutions around the world, with full textbook support for course in Data Structures (primarily written by Shaffer), senior-level algorithms (primarily written by Shaffer), programming languages (primarily written by David Furcy and Tom Naps at University of Wisconsin-Oshkosh), and formal languages and automata (primarily written by Mostafa Mohammed and Cliff Shaffer at Virginia Tech, 2019-2023). Visualizations and exercises have been developed over the years by nearly 100 undergraduate and graduate students at a number of universities. By 2020, in a typical semester OpenDSA is used in classes at around 15-20 institutions, mostly in the US but also around the world.
Major Development Milestones
While the original OpenDSA server was written in Django in 2012, we recognized the need to move to a system that could better interoperate with other systems. A major goal in making a change was to break the notion that the OpenDSA server would supply LMS features like logins and maintaining scores, that these should be offloaded to a real LMS. During Summer 2015, we attempted to develop a new server based on the OpenEdX project. By the end of the summer we decided that this approach would not work for us. At that time we decided to adopt Ruby/Rails as our server implementation. The OpenEdX effort and then the initial Ruby/Rails server implementation were led by Hossam Shahin. Equally important, we adopted the LTI protocol for communicating score information between client, server, and LMS. LTI not only allows OpenDSA to communicate with an LMS, it also allows use of 3rd-party exercises that support LTI. At about that time, Virginia Tech adopted Canvas as the institution's LMS. Thus our initial Ruby/Rails server implementation compiled books and made them available within Canvas as Canvas module, with scores communicated between the client-side runtime framework and Canvas (though the OpenDSA server) via the LTI protocol. Additionally, OpenDSA can support some integration with any LMS that supports the LTI protocol, as we also expose all exercises and modules as LTI tools. One weakness of Canvas is that only a single scorable entity can appear on a Canvas module. Initially this meant artificially breaking up what might naturally appear on a page as a "topic" or "section". In 2018 Jackson Wonderley reimplemented the LTI support so that OpenDSA module pages report exercise scores to the server, which in turn aggregates the values of various exercises in the module appropriately and reports them to the LMS. In this sense, the OpenDSA server changed from being just an LTI Tool Provider to also an LTI Tool Consumer. This basic server configuration has been in place since that time.
While we have always aspired to have the OpenDSA infrastructure be easy to install locally by developers and institutions that want to use it, it has historically been fairly difficult to install the OpenDSA server. In 2021, Alex Hicks and Patrick Sullivan implemented a Docker containerized version of the system. Those who only want to develop content can easily install this, while those who want to run a full server stack capable of serving students in courses can also do a relatively easy installation.
Funding and Support
Resources to operate and expand OpenDSA has come over the years in three forms.
- OpenDSA has been funded by a series of NSF grants. The first NSF-TUES program grant in June 2012 had PIs Cliff Shaffer of Virginia Tech, Tom Naps of University of Wisconsin-Oshkosh, and Richard Baraniuk of Rice University, with the VT share directly supporting OpenDSA infrastructure development with $125,000. An EAGER program grant from January 2013 to December 2015 supported collaboration between Virginia Tech (Cliff Shaffer, $67,000), UW-Madison (S. Puntambekar), and Auburn University (Hari Narayanan) to work with Aalto University. A major NSF IUSE grant for $1,000,000 supported major OpenDSA development from 2016-2019. While SPLICE grant funding from 2017-2025 does not directly support OpenDSA, it does affect bringing OpenDSA infrastructure in compliance with community standards such as PEML, ProgSnap, and Caliper.
- As an open-source project, OpenDSA has had tremendous success at getting volunteers to help over the years. About 100 people, mostly students doing Independent Study or volunteer work, have contributed content in the form of individual visualizations or exercises. The general model has been that paid graduate students build and maintain core functionality, faculty design modules, chapters, or books, and students are recruited to volunteer or get credit to implement visualizations and exercises.
- Starting in 2021, the Department of Computer Science at Virginia Tech has contributed a small amount of professional staff time to do basic system maintenance, in recognition of OpenDSA's role as supplying basic instructional infrastructure. In 2023, CS@VT agreed to support OpenDSA directly with 1/4 of an instructor position to do core software development.


Home
Menu
About
Projects
Sign In
Photo Upload
Sign Out
Meet the Core Team
Shaqran Bin Saleh
Photographer||Web Developer
GMB Akash
Photographer
Shahidul Alam
Photographer
Calvin Cordozar Broadus Jr
Web Developer


I pledge to do this {{pledge.pledgeUnits}} times between {{pledge.pledgeStartDate | date: 'MM/dd/yyyy'}} and {{pledge.pledgeEndDate | date: 'MM/dd/yyyy'}}


- Trash can hurt animals who live in the ocean or on land.
- Unrecycled trash can cause air pollution.
- If put in the wrong bin, items that could have been recycled will make landfills bigger.
- Sea animals might think floating, unrecycled trash are food.
- Animals in sea have been found with trash inside their guts.


Equivalent to clicking the Selected Legend command on the Format menu when a chart is active. Determines the position and orientation of the legend on a chart and returns TRUE; returns an error message if the legend is not already selected.
Syntax
FORMAT.LEGEND(position_num)
FORMAT.LEGEND?(position_num)
Position_num is a number from 1 to 5 specifying the position of the legend.
| Position_num | Position of legend |
| 1 | Bottom |
| 2 | Corner |
| 3 | Top |
| 4 | Right |
| 5 | Left |
Related Functions
FORMAT.MOVE Moves the selected object
FORMAT.SIZE Sizes an object
LEGEND Adds or deletes a chart legend
Return to index


| Key | Feature | ||||
|---|---|---|---|---|---|
| Ray Plugin | Ray plugin holds Ray objects | ||||
| Ray | Ray is two dimensional and is defined by ray value and thickness on one dimension and base and top values on other dimension. | ||||
| Ray type | Ray can be a simple ray or a stacked ray | ||||
| Rendering | Create beautiful rays with stroke, fill and effects | ||||
| Listener | Interact with ray by listener | ||||


### BCDV 1014 - DAPP II #### DApp Development - I
Dhruvin Parikh, August 2021
### Tasks * Developer environment setup * Create smart contract shells * Creating and Preparing test suites * Creating Open APIs using subgraph
### Pre-requisites * You should be able to * Write code in *Javascript* * Operate in *terminal* * Use `git` * Understand basics and how *smart contract* work * Setup *MetaMask* wallet
### Developer environment setup * Install node.js * Package Manager / Installer / WSL * npm registries : *libraries* and *executables* * `npx` : run executables installed locally in project * Installing hardhat/truffle locally to the project is recommended * Version control : `git`, GitHub, GitHub Repository * Mnemonics, private keys and API keys to be in `.gitignore` file. * Continuous Integration (Optional)
### Project setup ``` # create new directory $ mkdir survey-marketplace-hardhat $ cd ./survey-marketplace-hardhat # install hardhat $ npm install --save-dev hardhat # init project $ npx hardhat $ npm install --save-dev @nomiclabs/hardhat-ethers ethers ``` ``` // hardhat.config.js /** * @type import('hardhat/config').HardhatUserConfig */ require('@nomiclabs/hardhat-ethers'); module.exports = { solidity: "0.6.12", }; ``` ``` # compiling $ npx hardhat compile ```
### Local Blockchain setup ``` # hardhat node $ npx hardhat node # ganache-cli $ npx ganache-cli # geth $ geth --datadir test-chain-dir --http --dev ```
### Smart contract deployment ``` // scripts/deploy.js async function main() { // Retrieve accounts from the local node const accounts = await ethers.provider.listAccounts(); console.log(accounts); // We get the contract to deploy const Greeter = await ethers.getContractFactory("Greeter"); const greeter = await Greeter.deploy("Hello, Hardhat!"); console.log("Greeter deployed to:", greeter.address); } main().then(() => process.exit(0)).catch(error => { console.error(error); process.exit(1); }); ``` ``` # deploy $ npx hardhat run --network localhost scripts/deploy.js ```
### Smart contract interaction ``` // Set up an ethers contract, representing our deployed instance const address = "0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F" const Contract = await ethers.getContractFactory("contract-name"); const instance = await Contract.attach(address); // send a transaction to store() a new value in contract await instance.store(23); // Call the retrieve() function of the deployed contract const value = await instance.retrieve(); console.log("Value is", value.toString()); ```
### Smart Contract shells * **SurveyFactory.sol** : The solidity contract that creates the survey to keep track of the survey’s owner and optionally charge fees from Survey Makers to run the service. * **Survey.sol** : The solidity contract that works with the survey itself like adding participants, removing participants, finishing survey and more.
### Preparing test suites * We’ll be writing the test case for “Create Survey”. ``` $ npm install --save-dev chai ``` ``` // test/Box.test.js // Load dependencies const { expect } = require('chai'); // Start test block describe('Contract', function () { before(async function () { this.Contract = await ethers.getContractFactory("contract-name"); }); beforeEach(async function () { this.instance = await this.Contract.deploy(); await this.instance.deployed(); }); }); ```
### Test case ``` // test/Box.test.js describe('Contract', () => { // Test case it('retrieve returns a value previously stored', async () => { // Store a value await this.instance.store(42); // Test if the returned value is the same one // Note that we need to use strings to compare the // 256 bit integers expect(( await this.instance .retrieve()).toString()).to.equal('42'); }); }); ```
### Test case #1 * Given that I’m the Survey creator * When I try to create a new Survey and include the survey creation costs and survey reward * Then I should be able to get the created survey reference number and address
### Test case #2 * Given that I’m the Survey creator * When I try to create a new Survey and included the survey creation costs and survey reward * Then I should be assigned as the owner of the newly created survey
### Test case #3 * Given that I’m the Survey creator * When I try to create a new survey without including the survey creation cost. * Then I should receive an Error
### Test case #4 * Given that I’m the Survey App Owner * When I try to create a new Survey * Then I should receive an Error
30 minute break
### The graph protocol * Indexing protocol for querying networks like Ethereum and IPFS * App needs indexed data in order to load quickly * Data is spread across blockchains and storage networks * A subgraph defines how to efficiently index data in a deterministic way
### The graph tokens * Indexes * Indexers take $GRT for economic security of queries * Earn query fees in ETH or DAI * Curators * Curators stake GRT to signal quality and integrity of subgraphs * Receive curation shares on a bonding curve for GRT staked
### Creating a subgraph * Initialize a new subgraph * Define data sources you would like to index (smart contract address) * Define the entities you would like to index * Define the data model in GRAPHQL * Configure Assemblyscript mappings * Deploy
### Review project structure *
Hypertext Finance
*
AAVE V2
*
Loopring Protocol
*
Compound Protocol
### Hackathon Boilerplates *
Scaffold Eth
*
Next web3 boilerplate
*
web3 react boilerplate
*
Hardhat Hackathon boilerplate
References
OpenZeppelin docs
Hardhat Docs
The graph protocol
The graph protocol workshop
## End