|
VirtualSCADA
1.0
VirtualSCADA Senior Design Project
|
Public Member Functions | |
| emergency ($message, array $context=array()) | |
| alert ($message, array $context=array()) | |
| critical ($message, array $context=array()) | |
| error ($message, array $context=array()) | |
| warning ($message, array $context=array()) | |
| notice ($message, array $context=array()) | |
| info ($message, array $context=array()) | |
| debug ($message, array $context=array()) | |
| log ($level, $message, array $context=array()) | |
| emergency ($message, array $context=array()) | |
| alert ($message, array $context=array()) | |
| critical ($message, array $context=array()) | |
| error ($message, array $context=array()) | |
| warning ($message, array $context=array()) | |
| notice ($message, array $context=array()) | |
| info ($message, array $context=array()) | |
| debug ($message, array $context=array()) | |
| log ($level, $message, array $context=array()) | |
Describes a logger instance
The message MUST be a string or object implementing __toString().
The message MAY contain placeholders in the form: {foo} where foo will be replaced by the context data in key "foo".
The context array can contain arbitrary data, the only assumption that can be made by implementors is that if an Exception instance is given to produce a stack trace, it MUST be in a key named "exception".
See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md for the full interface specification.
Definition at line 12385 of file compiled.php.
| alert | ( | $message, | |
| array | $context = array() |
||
| ) |
Action must be taken immediately.
Example: Entire website down, database unavailable, etc. This should trigger the SMS alerts and wake you up.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| alert | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| critical | ( | $message, | |
| array | $context = array() |
||
| ) |
Critical conditions.
Example: Application component unavailable, unexpected exception.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| critical | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| debug | ( | $message, | |
| array | $context = array() |
||
| ) |
Detailed debug information.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, AbstractLogger, and Logger.
| debug | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, AbstractLogger, and Logger.
| emergency | ( | $message, | |
| array | $context = array() |
||
| ) |
System is unusable.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| emergency | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| error | ( | $message, | |
| array | $context = array() |
||
| ) |
Runtime errors that do not require immediate action but should typically be logged and monitored.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| error | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, Logger, and AbstractLogger.
| info | ( | $message, | |
| array | $context = array() |
||
| ) |
Interesting events.
Example: User logs in, SQL logs.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, AbstractLogger, and Logger.
| info | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, AbstractLogger, and Logger.
| log | ( | $level, | |
| $message, | |||
| array | $context = array() |
||
| ) |
Logs with an arbitrary level.
| mixed | $level | |
| string | $message | |
| array | $context |
Implemented in Writer, Writer, ConsoleLogger, Logger, and NullLogger.
| log | ( | $level, | |
| $message, | |||
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, ConsoleLogger, Logger, and NullLogger.
| notice | ( | $message, | |
| array | $context = array() |
||
| ) |
Normal but significant events.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, AbstractLogger, and Logger.
| notice | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, AbstractLogger, and Logger.
| warning | ( | $message, | |
| array | $context = array() |
||
| ) |
Exceptional occurrences that are not errors.
Example: Use of deprecated APIs, poor use of an API, undesirable things that are not necessarily wrong.
| string | $message | |
| array | $context |
Implemented in Writer, Writer, AbstractLogger, and Logger.
| warning | ( | $message, | |
| array | $context = array() |
||
| ) |
Implemented in Writer, Writer, AbstractLogger, and Logger.


변경 사항¶
Version 1.1.0¶
Released 2018-10-26
- Change default signing algorithm back to SHA-1. (#113)
- Added a default SHA-512 fallback for users who used the yanked 1.0.0 release which defaulted to SHA-512. (#114)
- Add support for fallback algorithms during deserialization to support changing the default in the future without breaking existing signatures. (#113)
- Changed capitalization of packages back to lowercase as the change in capitalization broke some tooling. (#113)
Version 1.0.0¶
Released 2018-10-18
YANKED
Note: This release was yanked from PyPI because it changed the default algorithm to SHA-512. This decision was reverted in 1.1.0 and it remains at SHA1.
- Drop support for Python 2.6 and 3.3.
- Refactor code from a single module to a package. Any object in the
API docs is still importable from the top-level
itsdangerous
name, but other imports will need to be changed. A future release will remove many of these compatibility imports. (#107) - Optimize how timestamps are serialized and deserialized. (#13)
base64_decode
raisesBadData
when it is passed invalid data. (#27)- Ensure value is bytes when signing to avoid a
TypeError
on Python 3. (#29) - Add a
serializer_kwargs
argument toSerializer
, which is passed todumps
duringdump_payload
. (#36) - More compact JSON dumps for unicode strings. (#38)
- Use the full timestamp rather than an offset, allowing dates before 2011. (#46)
- Detect a
sep
character that may show up in the signature itself and raise aValueError
. (#62) - Use a consistent signature for keyword arguments for
Serializer.load_payload
in subclasses. (#74, #75) - Change default intermediate hash from SHA-1 to SHA-512. (#80)
- Convert JWS exp header to an int when loading. (#99)
Version 0.24¶
Released 2014-03-28
- Added a
BadHeader
exception that is used for bad headers that replaces the oldBadPayload
exception that was reused in those cases.
Version 0.23¶
Released 2013-08-08
- Fixed a packaging mistake that caused the tests and license files to not be included.
Version 0.22¶
Released 2013-07-03
- Added support for
TimedJSONWebSignatureSerializer
. - Made it possible to override the signature verification function to allow implementing asymmetrical algorithms.
Version 0.21¶
Released 2013-05-26
- Fixed an issue on Python 3 which caused invalid errors to be generated.
Version 0.20¶
Released 2013-05-23
- Fixed an incorrect call into
want_bytes
that broke some uses of itsdangerous on Python 2.6.
Version 0.16¶
Released 2012-07-11
- Made it possible to pass unicode values to
load_payload
to make it easier to debug certain things.
Version 0.15¶
Released 2012-07-11
- Made standalone
load_payload
more robust by raising one specific error if something goes wrong. - Refactored exceptions to catch more cases individually, added more attributes.
- Fixed an issue that caused
load_payload
not work in some situations with timestamp based serializers - Added an
loads_unsafe
method.
Version 0.14¶
Released 2012-06-29
- API refactoring to support different key derivations.
- Added attributes to exceptions so that you can inspect the data even if the signature check failed.
Version 0.12¶
Released 2012-02-22
- Fixed a problem with the local timezone being used for the epoch
calculation. This might invalidate some of your signatures if you
were not running in UTC timezone. You can revert to the old behavior
by monkey patching
itsdangerous.EPOCH
.
Version 0.10¶
Released 2011-06-25
- Refactored interface that the underlying serializers can be swapped by passing in a module instead of having to override the payload loaders and dumpers. This makes the interface more compatible with Django’s recent changes.


Malcolm Ryan wrote: > In the new Gecode/J, could you please add an IntSet constructor that > takes a List<Integer>? It would be very convenient. I added a constructor IntSet(Iterable<Integer> l). Cheers, Guido


ACL
Section: File Formats (5)Index Return to Main Contents
BSD mandoc
Linux ACL
NAME
acl - Access Control ListsDESCRIPTION
This manual page describes POSIX Access Control Lists, which are used to define more fine-grained discretionary access rights for files and directories.ACL TYPES
Every object can be thought of as having associated with it an ACL that governs the discretionary access to that object; this ACL is referred to as an access ACL. In addition, a directory may have an associated ACL that governs the initial access ACL for objects created within that directory; this ACL is referred to as a default ACL.ACL ENTRIES
An ACL consists of a set of ACL entries. An ACL entry specifies the access permissions on the associated object for an individual user or a group of users as a combination of read, write and search/execute permissions.An ACL entry contains an entry tag type, an optional entry tag qualifier, and a set of permissions. We use the term qualifier to denote the entry tag qualifier of an ACL entry.
The qualifier denotes the identifier of a user or a group, for entries with tag types of ACL_USER or ACL_GROUP, respectively. Entries with tag types other than ACL_USER or ACL_GROUP have no defined qualifiers.
The following entry tag types are defined:
- ACL_USER_OBJ
- The ACL_USER_OBJ entry denotes access rights for the file owner.
- ACL_USER
- ACL_USER entries denote access rights for users identified by the entry's qualifier.
- ACL_GROUP_OBJ
- The ACL_GROUP_OBJ entry denotes access rights for the file group.
- ACL_GROUP
- ACL_GROUP entries denote access rights for groups identified by the entry's qualifier.
- ACL_MASK
- The ACL_MASK entry denotes the maximum access rights that can be granted by entries of type ACL_USER, ACL_GROUP_OBJ, or ACL_GROUP.
- ACL_OTHER
- The ACL_OTHER entry denotes access rights for processes that do not match any other entry in the ACL.
When an access check is performed, the ACL_USER_OBJ and ACL_USER entries are tested against the effective user ID. The effective group ID, as well as all supplementary group IDs are tested against the ACL_GROUP_OBJ and ACL_GROUP entries.
VALID ACLs A valid ACL contains exactly one entry with each of the ACL_USER_OBJ,
ACL_GROUP_OBJ, and ACL_OTHER tag types. Entries with ACL_USER and ACL_GROUP tag types may appear zero or more times in an ACL. An ACL that contains entries of ACL_USER or ACL_GROUP tag types must contain exactly one entry of the ACL_MASK tag type. If an ACL contains no entries of ACL_USER or ACL_GROUP tag types, the ACL_MASK entry is optional.All user ID qualifiers must be unique among all entries of ACL_USER tag type, and all group IDs must be unique among all entries of ACL_GROUP tag type.
The
Fn acl_get_file
function returns an ACL with zero ACL entries as the default ACL of a
directory, if the directory is not associated with a default ACL. The
Fn acl_set_file
function also accepts an ACL with zero ACL entries as a valid default ACL for
directories, denoting that the directory shall not be associated with a
default ACL. This is equivalent to using the
Fn acl_delete_def_file
function.
CORRESPONDENCE BETWEEN ACL ENTRIES AND FILE PERMISSION BITS
The permissions defined by ACLs are a superset of the permissions specified by the file permission bits.There is a correspondence between the file owner, group, and other permissions and specific ACL entries: the owner permissions correspond to the permissions of the ACL_USER_OBJ entry. If the ACL has an ACL_MASK entry, the group permissions correspond to the permissions of the ACL_MASK entry. Otherwise, if the ACL has no ACL_MASK entry, the group permissions correspond to the permissions of the ACL_GROUP_OBJ entry. The other permissions correspond to the permissions of the ACL_OTHER_OBJ entry.
The file owner, group, and other permissions always match the permissions of the corresponding ACL entry. Modification of the file permission bits results in the modification of the associated ACL entries, and modification of these ACL entries results in the modification of the file permission bits.
OBJECT CREATION AND DEFAULT ACLs The access ACL of a file object is initialized when the object is
created with any of the Fn creat , Fn mkdir , Fn mknod , Fn mkfifo , or Fn open functions. If a default ACL is associated with a directory, the mode parameter to the functions creating file objects and the default ACL of the directory are used to determine the ACL of the new object:- The new object inherits the default ACL of the containing directory as its access ACL.
- The access ACL entries corresponding to the file permission bits are modified so that they contain no permissions that are not contained in the permissions specified by the mode parameter.
If no default ACL is associated with a directory, the mode parameter to the functions creating file objects and the file creation mask (see umask(2)) are used to determine the ACL of the new object:
- The new object is assigned an access ACL containing entries of tag types ACL_USER_OBJ, ACL_GROUP_OBJ, and ACL_OTHER. The permissions of these entries are set to the permissions specified by the file creation mask.
- The access ACL entries corresponding to the file permission bits are modified so that they contain no permissions that are not contained in the permissions specified by the mode parameter.
ACCESS CHECK ALGORITHM
A process may request read, write, or execute/search access to a file object protected by an ACL. The access check algorithm determines whether access to the object will be granted.-
If the effective user ID of the process matches the user ID of the file object owner,
then
if the ACL_USER_OBJ entry contains the requested permissions, access is granted,
else access is denied.
-
else if
the effective user ID of the process matches the qualifier of any entry
of type ACL_USER,
then
if the matching ACL_USER entry and the ACL_MASK entry contain the requested permissions, access is granted,
else access is denied.
-
else if
the effective group ID or any of the supplementary group IDs of the process
match the file group or the qualifier of any entry of type ACL_GROUP,
then
if the ACL contains an ACL_MASK entry, then if the ACL_MASK entry and any of the matching ACL_GROUP_OBJ or ACL_GROUP entries contain the requested permissions, access is granted,
else access is denied.
else (note that there can be no ACL_GROUP entries without an ACL_MASK entry) if the ACL_GROUP_OBJ entry contains the requested permissions, access is granted,
else access is denied.
- else if the ACL_OTHER entry contains the requested permissions, access is granted.
- else access is denied.
ACL TEXT FORMS
A long and a short text form for representing ACLs is defined. In both forms, ACL entries are represented as three colon separated fields: an ACL entry tag type, an ACL entry qualifier, and the discretionary access permissions. The first field contains one of the following entry tag type keywords:- user
- A user ACL entry specifies the access granted to either the file owner (entry tag type ACL_USER_OBJ) or a specified user (entry tag type ACL_USER).
- group
- A group ACL entry specifies the access granted to either the file group (entry tag type ACL_GROUP_OBJ) or a specified group (entry tag type ACL_GROUP).
- mask
- A mask ACL entry specifies the maximum access which can be granted by any ACL entry except the user entry for the file owner and the other entry (entry tag type ACL_MASK).
- other
- An other ACL entry specifies the access granted to any process that does not match any user or group ACL entries (entry tag type ACL_OTHER).
The second field contains the user or group identifier of the user or group associated with the ACL entry for entries of entry tag type ACL_USER or ACL_GROUP, and is empty for all other entries. A user identifier can be a user name or a user ID number in decimal form. A group identifier can be a group name or a group ID number in decimal form.
The third field contains the discretionary access permissions. The read, write and search/execute permissions are represented by the r w and x characters, in this order. Each of these characters is replaced by the - character to denote that a permission is absent in the ACL entry. When converting from the text form to the internal representation, permissions that are absent need not be specified.
White space is permitted at the beginning and end of each ACL entry, and immediately before and after a field separator (the colon character).
LONG TEXT FORM
The long text form contains one ACL entry per line. In addition, a number sign ( # may start a comment that extends until the end of the line. If an ACL_USER, ACL_GROUP_OBJ or ACL_GROUP ACL entry contains permissions that are not also contained in the ACL_MASK entry, the entry is followed by a number sign, the string lqeffective:rq, and the effective access permissions defined by that entry. This is an example of the long text form:user::rw- user:lisa:rw- #effective:r-- group::r-- group:toolies:rw- #effective:r-- mask::r-- other::r--
SHORT TEXT FORM
The short text form is a sequence of ACL entries separated by commas, and is used for input. Comments are not supported. Entry tag type keywords may either appear in their full unabbreviated form, or in their single letter abbreviated form. The abbreviation for user is u the abbreviation for group is g the abbreviation for mask is m and the abbreviation for other is o The permissions may contain at most one each of the following characters in any order: r w x These are examples of the short text form:u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r-- g:toolies:rw,u:lisa:rw,u::wr,g::r,o::r,m::r
RATIONALE
IEEE 1003.1e draft 17 defines Access Control Lists that include entries of tag type ACL_MASK, and defines a mapping between file permission bits that is not constant. The standard working group defined this relatively complex interface in order to ensure that applications that are compliant with IEEE 1003.1 (lqPOSIX.1rq) will still function as expected on systems with ACLs. The IEEE 1003.1e draft 17 contains the rationale for choosing this interface in section B.23.CHANGES TO THE FILE UTILITIES
On a system that supports ACLs, the file utilities ls(1), cp(1), and mv(1) change their behavior in the following way:- For files that have a default ACL or an access ACL that contains more than the three required ACL entries, the ls(1) utility in the long form produced by ls -l displays a plus sign ( + after the permission string.
- If the -p flag is specified, the cp(1) utility also preserves ACLs. If this is not possible, a warning is produced.
-
The mv(1) utility always preserves ACLs. If this is not possible, a warning is produced.
The effect of the chmod(1) utility, and of the chmod(2) system call, on the access ACL is described in Sx CORRESPONDENCE BETWEEN ACL ENTRIES AND FILE PERMISSION BITS .
STANDARDS
The IEEE 1003.1e draft 17 (lqPOSIX.1erq) document describes several security extensions to the IEEE 1003.1 standard. While the work on 1003.1e has been abandoned, many UNIX style systems implement parts of POSIX.1e draft 17, or of earlier drafts.Linux Access Control Lists implement the full set of functions and utilities defined for Access Control Lists in POSIX.1e, and several extensions. The implementation is fully compliant with POSIX.1e draft 17; extensions are marked as such. The Access Control List manipulation functions are defined in the ACL library (libacl, -lacl). The POSIX compliant interfaces are declared in the <sys/acl.h> header. Linux-specific extensions to these functions are declared in the <acl/libacl.h> header.
SEE ALSO
chmod(1), creat(2), getfacl(1), ls(1), mkdir(2), mkfifo(2), mknod(2), open(2), setfacl(1), stat(2), umask(1)POSIX 1003.1e DRAFT 17
http://www.guug.de/~winni/posix.1e/download.htmlPOSIX 1003.1e FUNCTIONS BY CATEGORY
- ACL storage management
- acl_dup3, acl_free3, acl_init3
- ACL entry manipulation
-
acl_copy_entry3,
acl_create_entry3,
acl_delete_entry3,
acl_get_entry3,
acl_valid3
acl_add_perm3, acl_calc_mask3, acl_clear_perms3, acl_delete_perm3, acl_get_permset3, acl_set_permset3
acl_get_qualifier3, acl_get_tag_type3, acl_set_qualifier3, acl_set_tag_type3
- ACL manipulation on an object
- acl_delete_def_file3, acl_get_fd3, acl_get_file3, acl_set_fd3, acl_set_file3
- ACL format translation
- acl_copy_entry3, acl_copy_ext3, acl_from_text3, acl_to_text3, acl_size3
POSIX 1003.1e FUNCTIONS BY AVAILABILITY
The first group of functions is supported on most systems with POSIX-like access control lists, while the second group is supported on fewer systems. For applications that will be ported the second group is best avoided.acl_delete_def_file3, acl_dup3, acl_free3, acl_from_text3, acl_get_fd3, acl_get_file3, acl_init3, acl_set_fd3, acl_set_file3, acl_to_text3, acl_valid3
acl_add_perm3, acl_calc_mask3, acl_clear_perms3, acl_copy_entry3, acl_copy_ext3, acl_copy_int3, acl_create_entry3, acl_delete_entry3, acl_delete_perm3, acl_get_entry3, acl_get_permset3, acl_get_qualifier3, acl_get_tag_type3, acl_set_permset3, acl_set_qualifier3, acl_set_tag_type3, acl_size3
LINUX EXTENSIONS
These non-portable extensions are available on Linux systems.acl_check3, acl_cmp3, acl_entries3, acl_equiv_mode3, acl_error3, acl_extended_fd3, acl_extended_file3, acl_extended_file_nofollow3, acl_from_mode3, acl_get_perm3, acl_to_any_text3
AUTHOR
Andreas Gruenbacher<EMAIL_ADDRESS>Index
- NAME
- DESCRIPTION
- ACL TYPES
- ACL ENTRIES
- VALID ACLs
- CORRESPONDENCE BETWEEN ACL ENTRIES AND FILE PERMISSION BITS
- OBJECT CREATION AND DEFAULT ACLs
- ACCESS CHECK ALGORITHM
- ACL TEXT FORMS
- RATIONALE
- CHANGES TO THE FILE UTILITIES
- STANDARDS
- SEE ALSO
- AUTHOR
This document was created by man2html, using the manual pages.
Time: 05:33:59 GMT, December 24, 2015


| Category: containers | Component type: type |
Note that singly linked lists, which only support forward traversal, are also sometimes useful. If you do not need backward traversal, then slist may be more efficient than list.
list<int> L; L.push_back(0); L.push_front(1); L.insert(++L.begin(), 2); copy(L.begin(), L.end(), ostream_iterator<int>(cout, " ")); // The values that are printed are 1 2 0
| Parameter | Description | Default |
|---|---|---|
| T | The list's value type: the type of object that is stored in the list. | |
| Alloc | The list's allocator, used for all internal memory management. | alloc |
| Member | Where defined | Description |
|---|---|---|
| value_type | Container | The type of object, T, stored in the list. |
| pointer | Container | Pointer to T. |
| reference | Container | Reference to T |
| const_reference | Container | Const reference to T |
| size_type | Container | An unsigned integral type. |
| difference_type | Container | A signed integral type. |
| iterator | Container | Iterator used to iterate through a list. |
| const_iterator | Container | Const iterator used to iterate through a list. |
| reverse_iterator | Reversible Container | Iterator used to iterate backwards through a list. |
| const_reverse_iterator | Reversible Container | Const iterator used to iterate backwards through a list. |
| iterator begin() | Container | Returns an iterator pointing to the beginning of the list. |
| iterator end() | Container | Returns an iterator pointing to the end of the list. |
| const_iterator begin() const | Container | Returns a const_iterator pointing to the beginning of the list. |
| const_iterator end() const | Container | Returns a const_iterator pointing to the end of the list. |
| reverse_iterator rbegin() | Reversible Container | Returns a reverse_iterator pointing to the beginning of the reversed list. |
| reverse_iterator rend() | Reversible Container | Returns a reverse_iterator pointing to the end of the reversed list. |
| const_reverse_iterator rbegin() const | Reversible Container | Returns a const_reverse_iterator pointing to the beginning of the reversed list. |
| const_reverse_iterator rend() const | Reversible Container | Returns a const_reverse_iterator pointing to the end of the reversed list. |
| size_type size() const | Container | Returns the size of the list. Note: you should not assume that this function is constant time. It is permitted to be O(N), where N is the number of elements in the list. If you wish to test whether a list is empty, you should write L.empty() rather than L.size() == 0. |
| size_type max_size() const | Container | Returns the largest possible size of the list. |
| bool empty() const | Container | true if the list's size is 0. |
| list() | Container | Creates an empty list. |
| list(size_type n) | Sequence | Creates a list with n elements, each of which is a copy of T(). |
| list(size_type n, const T& t) | Sequence | Creates a list with n copies of t. |
| list(const list&) | Container | The copy constructor. |
template <class InputIterator> list(InputIterator f, InputIterator l) [2] |
Sequence | Creates a list with a copy of a range. |
| ~list() | Container | The destructor. |
| list& operator=(const list&) | Container | The assignment operator |
| reference front() | Front Insertion Sequence | Returns the first element. |
| const_reference front() const | Front Insertion Sequence | Returns the first element. |
| reference back() | Sequence | Returns the last element. |
| const_reference back() const | Back Insertion Sequence | Returns the last element. |
| void push_front(const T&) | Front Insertion Sequence | Inserts a new element at the beginning. |
| void push_back(const T&) | Back Insertion Sequence | Inserts a new element at the end. |
| void pop_front() | Front Insertion Sequence | Removes the first element. |
| void pop_back() | Back Insertion Sequence | Removes the last element. |
| void swap(list&) | Container | Swaps the contents of two lists. |
| iterator insert(iterator pos, const T& x) | Sequence | Inserts x before pos. |
template <class InputIterator> void insert(iterator pos, InputIterator f, InputIterator l) [2] |
Sequence | Inserts the range [f, l) before pos. |
void insert(iterator pos, size_type n, const T& x) |
Sequence | Inserts n copies of x before pos. |
| iterator erase(iterator pos) | Sequence | Erases the element at position pos. |
| iterator erase(iterator first, iterator last) | Sequence | Erases the range [first, last) |
| void clear() | Sequence | Erases all of the elements. |
| void splice(iterator pos, list& L) | list | See below. |
void splice(iterator pos, list& L, iterator i) |
list | See below. |
void splice(iterator pos, list& L, iterator f, iterator l) |
list | See below. |
| void remove(const T& value) | list | See below. |
| void unique() | list | See below. |
| void merge(list& L) | list | See below. |
| void sort() | list | See below. |
bool operator==(const list&, const list&) |
Forward Container | Tests two lists for equality. This is a global function, not a member function. |
bool operator<(const list&, const list&) |
Forward Container | Lexicographical comparison. This is a global function, not a member function. |
| Function | Description |
|---|---|
void splice(iterator position, list<T, Alloc>& x); |
position must be a valid iterator in *this, and x must be a list that is distinct from *this. (That is, it is required that &x != this.) All of the elements of x are inserted before position and removed from x. All iterators remain valid, including iterators that point to elements of x. [3] This function is constant time. |
void splice(iterator position, list<T, Alloc>& x, iterator i); |
position must be a valid iterator in *this, and i must be a dereferenceable iterator in x. Splice moves the element pointed to by i from x to *this, inserting it before position. All iterators remain valid, including iterators that point to elements of x. [3] If position == i or position == ++i, this function is a null operation. This function is constant time. |
void splice(iterator position, list<T, Alloc>& x, iterator f, iterator l); |
position must be a valid iterator in *this, and [first, last) must be a valid range in x. position may not be an iterator in the range [first, last). Splice moves the elements in [first, last) from x to *this, inserting them before position. All iterators remain valid, including iterators that point to elements of x. [3] This function is constant time. |
| void remove(const T& val); | Removes all elements that compare equal to val. The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid. This function is linear time: it performs exactly size() comparisons for equality. |
template<class Predicate> void remove_if(Predicate p); [4] |
Removes all elements *i such that p(*i) is true. The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid. This function is linear time: it performs exactly size() applications of p. |
| void unique(); | Removes all but the first element in every consecutive group of equal elements. The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid. This function is linear time: it performs exactly size() - 1 comparisons for equality. |
template<class BinaryPredicate> void unique(BinaryPredicate p); [4] |
Removes all but the first element in every consecutive group of equivalent elements, where two elements *i and *j are considered equivalent if p(*i, *j) is true. The relative order of elements that are not removed is unchanged, and iterators to elements that are not removed remain valid. This function is linear time: it performs exactly size() - 1 comparisons for equality. |
| void merge(list<T, Alloc>& x); | Both *this and x must be sorted according to operator<, and they must be distinct. (That is, it is required that &x != this.) This function removes all of x's elements and inserts them in order into *this. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x. All iterators to elements in *this and x remain valid. This function is linear time: it performs at most size() + x.size() - 1 comparisons. |
template<class BinaryPredicate> void merge(list<T, Alloc>& x, BinaryPredicate Comp); [4] |
Comp must be a comparison function that induces a strict weak ordering (as defined in the LessThan Comparable requirements) on objects of type T, and both *this and x must be sorted according to that ordering. The lists x and *this must be distinct. (That is, it is required that &x != this.) This function removes all of x's elements and inserts them in order into *this. The merge is stable; that is, if an element from *this is equivalent to one from x, then the element from *this will precede the one from x. All iterators to elements in *this and x remain valid. This function is linear time: it performs at most size() + x.size() - 1 applications of Comp. |
| void reverse(); | Reverses the order of elements in the list. All iterators remain valid and continue to point to the same elements. [5] This function is linear time. |
| void sort(); | Sorts *this according to operator<. The sort is stable, that is, the relative order of equivalent elements is preserved. All iterators remain valid and continue to point to the same elements. [6] The number of comparisons is approximately N log N, where N is the list's size. |
template<class BinaryPredicate> void sort(BinaryPredicate comp); [4] |
Comp must be a comparison function that induces a strict weak ordering (as defined in the LessThan Comparable requirements on objects of type T. This function sorts the list *this according to Comp. The sort is stable, that is, the relative order of equivalent elements is preserved. All iterators remain valid and continue to point to the same elements. [6] The number of comparisons is approximately N log N, where N is the list's size. |
[1] A comparison with vector is instructive. Suppose that i is a valid vector<T>::iterator. If an element is inserted or removed in a position that precedes i, then this operation will either result in i pointing to a different element than it did before, or else it will invalidate i entirely. (A vector<T>::iterator will be invalidated, for example, if an insertion requires a reallocation.) However, suppose that i and j are both iterators into a vector, and there exists some integer n such that i == j + n. In that case, even if elements are inserted into the vector and i and j point to different elements, the relation between the two iterators will still hold. A list is exactly the opposite: iterators will not be invalidated, and will not be made to point to different elements, but, for list iterators, the predecessor/successor relationship is not invariant.
[2] This member function relies on member template functions, which at present (early 1998) are not supported by all compilers. If your compiler supports member templates, you can call this function with any type of input iterator. If your compiler does not yet support member templates, though, then the arguments must either be of type const value_type* or of type list::const_iterator.
[3] A similar property holds for all versions of insert() and erase(). List<T, Alloc>::insert() never invalidates any iterators, and list<T, Alloc>::erase() only invalidates iterators pointing to the elements that are actually being erased.
[4] This member function relies on member template functions, which at present (early 1998) are not supported by all compilers. You can only use this member function if your compiler supports member templates.
[5] If L is a list, note that L.reverse() and reverse(L.begin(), L.end()) are both correct ways of reversing the list. They differ in that L.reverse() will preserve the value that each iterator into L points to but will not preserve the iterators' predecessor/successor relationships, while reverse(L.begin(), L.end()) will not preserve the value that each iterator points to but will preserve the iterators' predecessor/successor relationships. Note also that the algorithm reverse(L.begin(), L.end()) will use T's assignment operator, while the member function L.reverse() will not.
[6] The sort algorithm works only for random access iterators. In principle, however, it would be possible to write a sort algorithm that also accepted bidirectional iterators. Even if there were such a version of sort, it would still be useful for list to have a sort member function. That is, sort is provided as a member function not only for the sake of efficiency, but also because of the property that it preserves the values that list iterators point to.


It seems more and more people are going to Nginx instead of Apache and rave about the speed. Since I'm not a system admin and never claimed to be one I figured I'd document my switch to Nginx
Me being a novice in relation to Nginx I was quite taken aback that you can't just enable modules like you can in
Apache. In an Ubuntu Server install enabling a Module like
Mod_Pagespeed
is as simple as sudo dpkg -i mod-pagespeed-*.deb
followed by
sudo apt-get -f install
. That's it and the Google Repository is added to your
system and will keep Mod_PageSpeed up to date.
Adding the same module in Nginx is quite another process. You must first make sure you have all the dependencies installed for it to build, download the source, unpack it, then build it. Even then you aren't finished because you still have to build Nginx from source and enable the module there. That's a lot of work especially for someone like me who doesn't have a PhD in Unix.
 IT'S ME...RAMBLING AWAY THROUGH MY SWITCH OVER :)
I'll be moving to:
To keep my current site up and running I created a new droplet. I then wanted to see what Nginx had as a
dependency aptitude show nginx-full
for the full version
of nginx. This will print to your terminal a lot of "things". Pay close attention to the depends part. Depending
on the date and nginix version when you do this it will look similar to the following.
Depends: nginx-common (= 1.4.6-1ubuntu3.1), libc6 (>= 2.14), libexpat1 (>=
2.0.1), libgd3 (>= 2.1.0~alpha~), libgeoip1, libpam0g (>= <IP_ADDRESS>),
libpcre3, libssl1.0.0 (>= 1.0.1), libxml2 (>= 2.7.4), libxslt1.1 (>=
1.1.25), zlib1g (>= 1:1.2.0)
I'll need libc6, libexpat1, libgd3, libgeoip1, libpam0g, libpcre3, libssl1.0.0, libxml2, libxslt1.1, zlib1g.
If you aren't going to go with the nginx-full version your dependencies will vary. I know I won't
be using any XSLT so I won't be needing libxslt1.1
but for the sake of this
write up and having satisfied all dependencies I'll install it. Chances are though that you'll already have many
of these installed already and the current versions.
apt-get install libc6 libexpat1 libgd3 libgeoip1 libpam0g libpcre3 libssl1.0.0 libxml2 libxslt1.1 zlib1g
Now that the dependencies for Nginix are satisfied we can move on to actually downloading Nginx source files. As of this write up the Nginx version I am using is 1.6.2. We'll do that by typing into a terminal the following:
#cd
Nginx VERSION=1.6.2
wget http://nginx.org/download/nginx-${Nginx VERSION}.tar.gz
tar -xvzf nginx-${Nginx VERSION}.tar.gz
I also want to take advantaged of another module called headers_more . You download that the same way as we did for Nginx source (substituting the release which is compatible with your Nginx version):
wget https://github.com/openresty/headers-more-nginx-module/releases/tag/v0.25
tar -xvzf v0.25.tar.gz
Now is usually about the time I would download Google's PageSpeed Module source files. I won't be using this with my current Nginx setup right now. More on that here and I won't be using my old trusty standbye of ModSecurity security either.  I couldn't get ModSecurity for Nginx to build no matter what I tried. I followed the wiki instructions, installed dependencies and nada. Like I said I don't have a PhD in Unix. I'm a modest web developer. Anywho I installed Naxsi in it's place.
Naxsi on the other hand is fairly straight forward to install and build. The biggest caveat we have is the order in which we will compile it into Nginx Download Naxsi like so ( version numbers may change ).
wget https://github.com/nbs-system/naxsi/archive/0.53-2.tar.gz
tar -xvzf 0.53-2.tar.gz
All our third party modules are downloaded and upacked and ready to go. The next step we will change into the Nginx directory cd nginx-1.6.2
. If you're unsure about where the directory is you can
type ls
in your terminal and it will list all the directories and or files from your
current location. Once in the Nginx source directory we can begin to compile our server package. Nginx has a list of
other third party modules
that you can include. For any of those follow the same steps for getting headers_more and Naxsi. It also has a list of
optional modules you can include during compile time found here .
From the Optional Modules I'll be including stub_status, spdy_module, gzip_static and ssl modules. This list
may seem long and hard but as of right now it's pretty much downhill from here.
Inside our nginx-1.6.2 directory will give it the compile command. All of this needs to typed on one line unless you escape it like in the code block below. The order of installing Naxsi is important. If you're just starting out and testing Nginx and Naxsi out put it first like in the code block below.  Nginx is now installed... well it's installed but we need to do a few more things.
If you were to leave everything as it is you would need to start Nginx like sudo /usr/sbin/nginx start
and then kill it with its PID. That's rather cumbersome in my opinion. So in order to start and stop it like you would
Apache ( service apache2 start/stop/status etc ) we need to have an init script. I'm using this one
with modifications to the nginx sbin paths, DAEMON paths, and conf paths that reflect the options in our compile time flags above.
Once that's finsihed we'll make sure Nginx starts up on a reboot of our server
update-rc.d -f nginx defaults
Nginx should now be up and running with our modules. You can now move on to your virtualhosts and server setup. A rather good tutorial on this for Ubuntu can be found at DigitalOcean
I mentioned I wasn't going to use Google's Pagespeed Module. Reasoning behind this is I don't know if I bunked up my
Apache setup but the Time To First Byte and overall load times with Pagespeed installed on Apache and Nginx were extremely
different. For My Apache setup I used a setup of Passthrough
and basically relied
on pagespeeds image compressions, serving webp to user agents who accepted it and extending the caches of my resources.
Site Load times for each server configuration on webpagetest.org with 5 runs each in Chrome from Dulles, Va.
First Run
| Server | Load Time | First Byte | Start Render | Speed Index |
|---|---|---|---|---|
| Apache - Score Picture | 0.684s | 0.267s | 0.493s | 500 |
| Nginx - Score Picture | 0.640s | 0.108s | 0.293s | 385 |
Second View
| Server | Load Time | First Byte | Start Render | Speed Index |
|---|---|---|---|---|
| Apache - Score Picture | 0.628s | 0.184s | 0.589s | 600 |
| NGINX - Score Picture | 0.403s | 0.082s | 0.404s | 400 |
Since a target Speed Index is under 1000 both servers did really well. I'm just not looking for the "meh its good enough". I want super dooper fast. NGINX gave that too me. In a few more blog posts I'll tinker with serving webp and jpegxr for better image handling. That post can now be found at Conditionally Serve Webp, JXR Images with Nginx.


 Each file can have a max number of downloads, file lifetime, and password associated with it, defaults are 1 download, 3 days, and no password. Max upload size of 128M. You can upload and download from the web. After uploading to the main site, you will be given a {{codelen}} digit code which you may share. A particular code may then be downloaded by visiting https://tmper.co/<code>. To upload and download from command line, we recommend using tmper as well. This can be done by the short commands u, d (see `tmper --help` for details). pip install tmper tmper u /path/to/some/file # upload file and get 3 digit code tmper d <code> # download the code You can also start a server of your own using: tmper s --port=<port>
GET / -- landing site with upload /help -- this information /CODE?ARGS -- get a file given by CODE ARGS (optional) : key - password associated with the file v - view contents on website rather than raw download Examples : curl https://tmper.co/uik curl https://tmper.co/ab8?key=supersecretpassword firefox https://tmper.co/7el?v POST /?ARGS -- upload a file and receive a name /CODE?ARGS -- upload file to a particular name ARGS (optional) : time -- set the lifetime, for each "3 days", "5 mins" key -- set a password for a particular file n -- set number of times a file can be downloaded Example : curl -XPOST -F file=@filename https://tmper.co/?key=secretpassword&n=3 # function for .bashrc to simplify upload function tmper() { curl -X POST -F file=@"$$1" https://tmper.co/ }
In simple terms, we guarantee nothing about your interaction with this site and are not liable for anything that may happen to you, your belongings, intellectual property, etc due to your use of it. We will attempt to make your files available to others under the constraints which you ask (lifetime, number of downloads permitted, password protection) but again cannot make any guarantees. We record statistics about your visit including time, file type, and file size of each upload. However, when a file has expired (from time or download count) we delete both the file and all other metadata associated with it. We use cookies (client side reading only) to keep track of your preferences so that you don't have to fiddle with the interface every visit. We track your visit with server logs, which are purged periodically. We may look at these logs to ensure the health of the site in a hostile internet environment. These statements may be checked by viewing the source code, which is available under the MIT license -- this code is directly run on a VPS for convenience to users.{% end %} {% whitespace single %}


I'm ELHLAFi Mohamed. I'm 22 years old,I am Moroccan from TAZA city.
currently I am an engineering student at the national higher school of computer science and system analysis ENSIAS.
I love computer science because it makes sense. Computers operate on pure logic. There are no exceptions or deviations, no rules that only apply part of the time. A computer will always do what it's programming says to do, nothing more and nothing less. They do not care if you are having a good day or a bad day, they just do what they are programmed to do.
Computers themselves have no negatives that I have ever seen; the people who use them do. Any sci-fi horror or dystopian scenarios I have seen in books or movies, a human originated the problem. Computers and machines are just the tools that they used to either enforce a twisted ethic, or they used the tool with poor judgement and cause danger and chaos. Even in something like Terminator or The Matrix, someone, at some point had to write the code that started it.
2019-2022:engineering student at the national higher school of computer science and system analysis ENSIAS.
2017:MPSI at CPGE Acharif Al Idrissi TAZA
2018: MP at CPGE Acharif Al Idrissi TAZA
2016 :Bachelor of Mathematical Sciences "A" at high school ALI BEN BARRY ,TAZA.
Would you like to know more or just discuss something?


This annual event is a very important part of BAM's process: the appropriate documents go to Archives, we clean up what we no longer need, and possibly most importantly, we all get free stuff off of the Share Table!
Now that the majority of our work is done electronically, much of our needed cleanup is digital. The mess is harder to see than piles of paper or stacks of boxes, but it's just as important to clean up. Saving electronic files you don't need is a cost to BAM in terms of storage space and unnecessary additional backup processing.
Archives Director, Sharon Lehner, creates the first Records Retention Manual.
The first Records Day is scheduled to address physical records on-site.
The first Digital Records Day is planned by I.T. in an effort to resolve a problem with dwindling server space. While many users simply saved files without ever deleting duplicates or outdated versions, the Archives recognized that some significant records were no longer on paper and began to request that departments consider moving final versions of documents to an "_Archive" folder on a shared server.
Digital Records Day and Records Day (for physical material) were held on separate afternoons.
For Digital Records Day In the summer of 2015, Archives distributed detailed guidelines for departments to use the "_Archive" folder, but it became clear that a more structured approach was needed if we were to seriously follow our records retention requirements as they applied to digital records.
In the fall, Archives began working on a more comprehensive approach to collecting digital records through participation in the National Digital Stewardship Residency (NDSR) program. An NDSR Fellow devoted nine months to both modifying the Records Retention Manual to account for digital materials.
A records coordinator and point person is appointed in each department through a collaboration with the Archives.
After submitting a proposal concerning email archiving at BAM, a Metropolitan New York Library Council (METRO) fellow joins the Archives to continue reviewing digital workflows.
In recognition of the fact that records are produced in digital form as often as physical, if not more so, this summer will be the first combined Records Day.
Featured Archives Item: Brochure for Why We Back BAM (1981).View item in BAM Digital Archives
Featured Archives Item: Brochure for BAM Rhythm and Blues Festival at Metrotech (1998).View item in BAM Digital Archives
Featured Archives Item: Poster for the New York Independent Filmmakers Exposition (1973).View item in BAM Digital Archives


New on Blender Artists: Events Calendar
by Bart VeldhuizenOver on Blender Artists, we just added an Events calendar to Blender Artists to create a central place where you can find all upcoming things like meetups, workshops, conferences, challenges, etc! Feel free to add your upcoming events there to share them with the community.
I'm still figuring out the best way to promote these events on BlenderNation - either by a weekly post (like every Saturday or so), or by integrating a widget on the front page. What's your preference?


DAlert
Version 1.1.0DAlert is a simple jQuery and jQuery UI plugin that easily create a customizable alert (or confirm) window as a replacement for the native javascript alert and confirm methods.
DAlert
Version 1.1.0DAlert is a simple jQuery and jQuery UI plugin that easily create a customizable alert (or confirm) window as a replacement for the native javascript alert and confirm methods.
DAlert Simple Usage
1. Make sure to include the latest version of jQuery library and jQuery UI from CDN on your web page.
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"/> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
2. Include jQuery dalert plugin after jQuery and jQuery UI.
<script type="text/javascript" src="js/dalert.jquery.js"></script>
3. Create a simple alert window.
<input type="button" class="button" id="dalert_button" value="DAlert" />
//Start :: jQuery Click Event :: or as you wish to handle the click event $("#dalert_button").click(function(){ //Start :: DAlert Alert Usage dalert.alert("Hello, I am a DAlert!"); //End :: DAlert Alert Usage }); //End :: jQuery Click Event :: or as you wish to handle the click event
4. Create a simple alert with a callback.
<input type="button" class="button" id="dalert_button" value="DAlert" />
//Start :: jQuery Click Event :: or as you wish to handle the click event $("#dalert_button").click(function(){ //Start :: DAlert Alert Usage with a callback on close of the alert dalert.alert("Hello, I am a DAlert!","Title",function callbackMe(){ dalert.alert("Me callback !"); }); //End :: DAlert Alert Callback Usage }); //End :: jQuery Click Event :: or as you wish to handle the click event
5. Create a confirm dialog box.
<input type="button" class="button" id="confirm_button" value="DAlert-Confirm"/>
DAlert-Confirm Simple Usage
DAlert Confirm is easy to use as it just returns a callback with the result user clicked, you can implement your logic for the specific button click as in the below example
Example://Start :: jQuery Click Event :: or as you wish to handle the click event $("#confirm_button").click(function(){ //Start :: DAlert Confirm Usage dalert.confirm("Are You Sure?","DAlert Confirm !",function(result){ if(result){ dalert.alert("You've just clicked YES !"); } else{ dalert.alert("You've just clicked NO !"); } }); //End :: DAlert Confirm Usage }); //End :: jQuery Click Event :: or as you wish to handle the click event
Alert Replacement
Replace native alert with DAlert : dalert.ReplaceAlert();
Example
dalert.ReplaceAlert(); alert("Hey... I am a replaced alert");
Confirm Replacement
Replace native confirm with DAlert : dalert.ReplaceConfirm();
Example
dalert.ReplaceConfirm(); confirm("Are You Sure?","DAlert Confirm !",function(result){ if(result){ dalert.alert("You've just clicked YES !"); } else{ dalert.alert("You've just clicked NO !"); } });
Configuration :: Options with Parameter Values And Usage
DAlert Options : (dalert_msg, title_msg, options)
Options Array {} :: Customize the look and feel :: Use the third parameter to pass the options array as in the below example//Start :: jQuery Click Event :: or as you wish to handle the click event $("#dalert_options").click(function(){ //Start:: DAlert dalert.alert("Message","Tittle",{ messageFontColor:'white', messageBgColor:'rgb(119, 49, 134)', tittleBgColor:'black', tittleFontColor:'white' }); //End:: DAlert }); //End :: jQuery Click Event :: or as you wish to handle the click event
Example
//Start :: jQuery Click Event :: or as you wish to handle the click event $("#confirm_options").click(function(){ //Start:: DAlert Confirm Customized dalert.confirm("Message","Tittle", function(result){ if(result){ dalert.alert("You've just clicked YES !"); } else{ dalert.alert("You've just clicked NO !"); } }, { messageFontColor:'white', messageBgColor:'rgb(119, 49, 134)', tittleBgColor:'black', tittleFontColor:'white' } ); //End:: DAlert Confirm Customized }); //End :: jQuery Click Event :: or as you wish to handle the click event


Buy Crayons
Crayons are available at a range of prices and are easy to work with.
These characteristics make them particularly good instruments for teaching small children to draw in addition to being used widely by student and professional artists.
View details »
Buy Classmate Books
Notebooks are the perfect brand ambassador and useful tool in one.
At the end, a pretty notebook ends up as a day-to-day-companian and storage place for ideas and notes in the handbag rather than in the filing cabinet.
View details »
Get Your Books Printed
Create your book from scratch, or upload your print-ready files to publish your book instantly. Here is the help for printing your books
View details »


§342B-33 Minimum permit conditions. At a minimum, each permit shall require the permittee to:
(1) Submit to the director, no less than every six months, the results of any required monitoring and, no less than annually, a compliance certification; and
(2) Disclose the annual emissions of hazardous air pollutants. [L 1992, c 240, pt of §1; am L 1994, c 268, §3]


Ready...Set...Action
Everyone can use a little motivation here and there. This page is meant to do just that. I motivate my self daily to keep me going. Watching videos, reading articles or just talking to people about my goals and interest. I find myself having many goals and many interest...one just won't do. If I am capable of doing it and have the opportunity and resources to acheive it, then you better believe that I am going to go get it. The first thing we have to do is take a step. Words without action is next to meaningless when it comes to achieving your goals. I have found it more effective to do at least one task a day that will help me get close to my goal.
Meka
Here are some quotes that you may like.
Click on the images to make them bigger
I'd love your feedback!
Leave me a note, I'd love to hear from you!:


2014-15 Distinguished Speaker Series
Distinguished Speaker Series Announcement Postcard
October 2, 2014
Lucy T. Nowell Ph.D.
Computer Scientist and
Program Manager, ASCR,
Department of Energy’s
Office of Science
Science at Extreme Scale: Big Data and Big Compute
Time: 10:30am - 12:00pm
Place: Trabant Theater
February 17, 2015
Joel Saltz MD, Ph.D.
Cherith Professor
and Founding Chair,
Biomedical Informatics,
Stony Brook University
Integrative Multi-scale Analysis in Biomedical Informatics
Time: 10:30am - 12:00pm
Place: Trabant Theater
April 30, 2015
Srinivas Aluru Ph.D.
Professor, School of
Computational Science
and Engineering, Georgia
Institute of Technology
Genomes Galore: Big Data Challenges in the Life Sciences
Time: 10:30am - 12:00pm
Place: Gore Recital Hall
2013-14 Distinguished Speaker Series
April 22, 2013HANY FARIDProfessor 11:15AM |
April 22, 2013ADAM PORTERProfessor Efficiently Discovering High-Coverage Configurations Using Interaction Trees 11:00AM-12:15PM |
April 23, 2014MONA SINGHProfessor Deparment of Computer Science and Lewis-Sigler Institute for Integrative Genomics, Princeton University Data-driven approaches for uncovering and understanding biological networks 2:00PM |
2012-13 Distinguished Speaker Series
CIS Lecture Series
February 27, 2013
DILMA DA SILVA
Principal Engineer and Manager
Qualcomm Research
System Software for Cloud Computing
11:00AM-12:15PM
Trabant Movie/Lecture Theatre
March 14, 2013
JENNIFER REXFORD
Professor, Department of Computer Science
Princeton University
Frenetic: A Programming Language for Software Defined Networks
11:00AM-12:15PM
Trabant Movie/Lecture Theatre
April 22, 2013
ANNIE I. ANTON
Professor and Department Chair
School of Interactive Computing, Georgia Institute of Technology
Designing Software Systems that Comply with Privacy and Security Regulations
11:00AM-12:15PM
Trabant Movie/Lecture Theatre


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/Figure.20out.20the.20rest.20by.20cc.html ---
Can I tell Lean to work out the rest by cc
:
import algebra.module variables {R : Type} [ring R] open punit def zero_module : module R punit := { smul := λ _ _, star, zero := star, add := λ _ _, star, neg := λ _, star, add_zero := by cc, zero_add := by cc, add_comm := by cc, add_left_neg := by cc, one_smul := by cc, mul_smul := by cc, add_smul := by cc, smul_add := by cc, add_assoc := by cc }
I found that I was repeating myself, while trying to make a point to Lean.
sure, something like:
begin refine { smul := λ _ _, star, zero := star, add := λ _ _, star, neg := λ _, star, .. } ; cc end
Aaah, I need to understand refine
.
Curiously that doesn't actually work...
Of course, replacing cc
with obviously
does it. :-)
In fact just by obviously
should work, except for some reason split
doesn't work on modules, for some reason I can't see at the moment (type class inference throws an error?)
finish
works instead of cc
.
what is obviously
? is it in mathlib?
No, it is Scott's Hammer.
Well, maybe tidy
is his hammer.
So, the current golf record is:
def zero_module' : module R punit := by refine { add := λ x y, punit.star, zero := punit.star, neg := λ x, punit.star, smul := λ c x, punit.star, .. }; finish
gadvardammt finish
Let's assume we open punit
.
If someone can explain to me why you can't split
when the goal is a module, maybe I can golf the entire proof to by tidy
.
isn't the right command constructor
split
is for inductive types I think
constructor
also fails...
Last updated: Apr 24 2020 at 19:02 UTC


Outdated Page
How to create a webworkers driven multithreading App — Part 1 (Officially selected by Medium into Javascript and published by "The Startup".)
Chrome v83 enables JS module support for SharedWorkers → Starting a new era for multi Browser Window Apps with neo.mjs (Officially selected by Medium into Javascript, Programming & Software Engineering and published by "The Startup".)
neo.mjs v1.2.5 → Support for SharedWorkers including Firefox (Officially selected by Medium into Javascript, Programming & Software Engineering and published by "The Startup".)
Expanding Single Page Apps into multiple Browser Windows (new) (Officially selected by Medium into Javascript, Programming & Software Engineering and published by "The Startup".)
How to create a webworkers driven multithreading App — Part 2 (new)
The online demos are not optimised for mobile yet, please use a desktop browser!
There are 3 different versions (dist/production, dist/development, development mode).
The most impressive one is the development mode at the bottom, which runs without any Javascript related builds.
dist/production
Webpack based builds without source-maps and minified files. These versions work in Chrome, Firefox & Safari.
- COVID-19 Dashboard App
- Realworld App
- COVID-19 Gallery
- COVID-19 Helix
- Realworld v2 App (in progress, only gallery, helix & home work)
- Docs App (including the Real World App source documentation)
- component.DateSelector
- component.Gallery
- component.Helix
- form.field.Date
- form.field.Select
- tab.Container
dist/development
Webpack based builds using source-maps and non minified files. These versions work in Chrome, Firefox & Safari.
- COVID-19 Dashboard App
- Realworld App
- COVID-19 Gallery
- COVID-19 Helix
- Realworld v2 App (in progress, only gallery, helix & home work)
- Docs App (including the Real World App source documentation)
- component.DateSelector
- component.Gallery
- component.Helix
- form.field.Date
- form.field.Select
- tab.Container
development mode
Google Chrome v80+ only
- Multi Window COVID-19 Dashboard App using SharedWorkers (Chrome v83+) (new)
- COVID-19 Dashboard App
- Realworld App
- COVID-19 Gallery
- COVID-19 Helix
- Realworld v2 App (in progress, only gallery, helix & home work)
- Docs App (including example apps & the Real World App source documentation)
- component.DateSelector
- component.Gallery
- component.Helix
- form.field.Date
- form.field.Select
- tab.Container
- Docs app: Siesta Testing Harness
- Real World app: Siesta Testing Harness
- Unit Tests: SiestaTesting Harness
Copyright (c) 2015 - today, Tobias Uhlig & Rich Waters


Struct for storing basic information about a type used by TypeMap.
More...
#include <TypeMap.h>
|
|
bool | operator== (const TypeInfo &rhs) const |
| |
|
bool | is_pointer () const |
| | Is this a pointer type.
|
| |
|
bool | is_small () const |
| | Returns false if this type is more bytes than a pointer.
|
| |
|
bool | is_reference () const |
| | Is this a reference type.
|
| |
|
|
std::size_t | hash |
| | The type's unique hash code.
|
| |
|
unsigned char | flags = 0 |
| | A bit array of useful information on this type.
|
| |
|
std::function< void(void *)> | destructor |
| | The type's destructor.
|
| |
|
|
static const unsigned char | TYPEINFO_POINTER_BIT = 0b0000'0001 |
| |
|
static const unsigned char | TYPEINFO_SMALL_BIT = 0b0000'0010 |
| |
|
static const unsigned char | TYPEINFO_REFERENCE_BIT = 0b0000'0100 |
| |
Struct for storing basic information about a type used by TypeMap.
Definition at line 11 of file TypeMap.h.
◆ get()
template<typename T >
| static const TypeInfo utils::TypeInfo::get |
( |
| ) |
|
|
inlinestatic |
This is the only method that should be used for creating a TypeInfo.
The name is subject to change
Definition at line 23 of file TypeMap.h.
The documentation for this struct was generated from the following file: