| TOC |
|
This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html.
This Internet-Draft will expire on August 30, 2004.
Copyright (C) The Internet Society (2004). All Rights Reserved.
This document describes a format to dump captured packets on a file. This format is extensible and it is currently proposed for implementation in the libpcap/WinPcap packet capture library.
1.
Objectives
2.
General File Structure
2.1
General Block Structure
2.2
Block Types
2.3
Block Hierarchy and Precedence
2.4
Data format
3.
Block Definition
3.1
Section Header Block (mandatory)
3.2
Interface Description Block (mandatory)
3.3
Packet Block (optional)
3.4
Simple Packet Block (optional)
3.5
Name Resolution Block (optional)
3.6
Interface Statistics Block (optional)
4.
Options
5.
Experimental Blocks (deserved to a further investigation)
5.1
Other Packet Blocks (experimental)
5.2
Compression Block (experimental)
5.3
Encryption Block (experimental)
5.4
Fixed Length Block (experimental)
5.5
Directory Block (experimental)
5.6
Traffic Statistics and Monitoring Blocks (experimental)
5.7
Event/Security Block (experimental)
6.
Conclusions
7.
Most important open issues
§
Intellectual Property and Copyright Statements
| TOC |
The problem of exchanging packet traces becomes more and more critical every day; unfortunately, no standard solutions exist for this task right now. One of the most accepted packet interchange formats is the one defined by libpcap, which is rather old and does not fit for some of the nowadays applications especially in terms of extensibility.
This document proposes a new format for dumping packet traces. The following goals are being pursued:
| TOC |
A capture file is organized in blocks, that are appended one to another to form the file. All the blocks share a common format, which is shown in Figure 1.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Block Body / / /* variable length, aligned to 32 bits */ / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Basic block structure. |
The fields have the following meaning:
This structure, shared among all blocks, makes easy to process a file and to skip unneeded or unknown blocks. Blocks can be nested one inside the others (NOTE: needed?). Some of the blocks are mandatory, i.e. a dump file is not valid if they are not present, other are optional.
The structure of the blocks allows to define other blocks if needed. A parser that does non understand them can simply ignore their content.
The currently defined blocks are the following:
The following blocks instead are considered interesting but the authors believe that they deserve more in-depth discussion before being defined:
TODO Currently standardized Block Type codes are specified in Appendix 1.
The file must begin with a Section Header Block. However, more than one Section Header Block can be present on the dump, each one covering the data following it till the next one (or the end of file). A Section includes the data delimited by two Section Header Blocks (or by a Section Header Block and the end of the file), including the first Section Header Block.
In case an application cannot read a Section because of different version number, it must skip everything until the next Section Header Block. Note that, in order to properly skip the blocks until the next section, all blocks must have the fields Type and Length at the beginning. This is a mandatory requirement that must be maintained in future versions of the block format.
Figure 2 shows two valid files: the first has a typical configuration, with a single Section Header that covers the whole file. The second one contains three headers, and is normally the result of file concatenation. An application that understands only version 1.0 of the file format skips the intermediate section and restart processing the packets after the third Section Header.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SHB v1.0 | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Typical configuration with a single Section Header Block |-- 1st Section --|-- 2nd Section --|-- 3rd Section --| | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SHB v1.0 | Data | SHB V1.1 | Data | SHB V1.0 | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Configuration with three different Section Header Blocks
| File structure example: the Section Header Block. |
NOTE: TO BE COMPLETED with some examples of other blocks
Data contained in each section will always be saved according to the characteristics (little endian / big endian) of the dumping machine. This refers to all fields that are saved as numbers and that span over two or more bytes.
The approach of having each section saved in the native format of the generating host is more efficient because it avoids translation of data when reading / writing on the host itself, which is the most common case when generating/processing capture dumps.
TODO Probably we have to specify something more here. Is what we're saying enough to avoid any kind of ambiguity?.
| TOC |
This section details the format of the body of the blocks currently defined.
The Section Header Block is mandatory. It identifies the beginning of a section of the capture dump file. Its format is shown in Figure 3.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Magic | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Major | Minor | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Section Header Block format. |
The meaning of the fields is:
Aside form the options defined in Section 4, the following options are valid within this block:
| Name | Code | Length | Description |
|---|---|---|---|
| Hardware | 2 | variable | An ascii string containing the description of the hardware used to create this section. |
| Operating System | 3 | variable | An ascii string containing the name of the operating system used to create this section. |
| User Application | 3 | variable | An ascii string containing the name of the application used to create this section. |
The Section Header Block does not contain data but it rather identifies a list of blocks (interfaces, packets) that are logically correlated. This block does not contain any reference to the size of the section it is currently delimiting, therefore the reader cannot skip a whole section at once. In case a section must be skipped, the user has to repeatedly skip all the blocks contained within it; this makes the parsing of the file slower but it permits to append several capture dumps at the same file.
The Interface Description Block is mandatory. This block is needed to specify the characteristics of the network interface on which the capture has been made. In order to properly associate the captured data to the corresponding interface, the Interface Description Block must be defined before any other block that uses it; therefore, this block is usually placed immediately after the Section Header Block.
An Interface Description Block is valid only inside the section which it belongs to. The structure of a Interface Description Block is shown in Figure 4.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Interface ID | LinkType | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SnapLen | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Interface Description Block format. |
The meaning of the fields is:
In addition to the options defined in Section 4, the following options are valid within this block:
| Name | Code | Length | Description |
|---|---|---|---|
| if_name | 2 | Variable | Name of the device used to capture data. |
| if_IPv4addr | 3 | 8 | Interface network address and netmask. |
| if_IPv6addr | 4 | 17 | Interface network address and prefix length (stored in the last byte). |
| if_MACaddr | 5 | 6 | Interface Hardware MAC address (48 bits). |
| if_EUIaddr | 6 | 8 | Interface Hardware EUI address (64 bits), if available. |
| if_speed | 7 | 8 | Interface speed (in bps). |
| if_tsaccur | 8 | 1 | Precision of timestamps. If the Most Significant Bit is equal to zero, the remaining bits indicates the accuracy as as a negative power of 10 (e.g. 6 means microsecond accuracy). If the Most Significant Bit is equal to zero, the remaining bits indicates the accuracy as as negative power of 2 (e.g. 10 means 1/1024 of second). If this option is not present, a precision of 10^-6 is assumed. |
| if_tzone | 9 | 4 | Time zone for GMT support (TODO: specify better). |
| if_flags | 10 | 4 | Interface flags. (TODO: specify better. Possible flags: promiscuous, inbound/outbound, traffic filtered during capture). |
| if_filter | 11 | variable | The filter (e.g. "capture only TCP traffic") used to capture traffic. The first byte of the Option Data keeps a code of the filter used (e.g. if this is a libpcap string, or BPF bytecode, and more). More details about this format will be presented in Appendix XXX (TODO). |
| if_opersystem | 12 | variable | An ascii string containing the name of the operating system of the machine that hosts this interface. This can be different from the same information that can be contained by the Section Header Block (Section 3.1) because the capture can have been done on a remote machine. |
A Packet Block is the standard container for storing the packets coming from the network. The Packet Block is optional because packets can be stored either by means of this block or the Simple Packet Block, which can be used to speed up dump generation. The format of a packet block is shown in Figure 5.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Interface ID | Drops Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Timestamp (High) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Timestamp (Low) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Captured Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Packet Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Packet Data | | | | /* variable length, byte-aligned */ | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Packet Block format. |
The Packet Block has the following fields:
The Simple Packet Block is a lightweight container for storing the packets coming from the network. Its presence is optional.
A Simple Packet Block is similar to a Packet Block (see Section 3.3), but it is smaller, simpler to process and contains only a minimal set of information. This block is preferred to the standard Packet Block when performance or space occupation are critical factors, such as in sustained traffic dump applications. A capture file can contain both Packet Blocks and Simple Packet Blocks: for example, a capture tool could switch from Packet Blocks to Simple Packet Blocks when the hardware resources become critical.
The Simple Packet Block does not contain the Interface ID field. Therefore, it must be assumed that all the Simple Packet Blocks have been captured on the interface previously specified in the Interface Description Block.
Figure 6 shows the format of the Simple Packet Block.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Packet Len | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Packet Data | | | | /* variable length, byte-aligned */ | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Simple Packet Block format. |
The Packet Block has the following fields:
The Simple Packet Block does not contain the timestamp because this is one of the most costly operations on PCs. Additionally, there are applications that do not require it; e.g. an Intrusion Detection System is interested in packets, not in their timestamp.
The Simple Packet Block is very efficient in term of disk space: a snapshot of length 100 bytes requires only 16 bytes of overhead, which corresponds to an efficiency of more than 86%.
The Name Resolution Block is used to support the correlation of numeric addresses (present in the captured packets) and their corresponding canonical names and it is optional. Having the literal names saved in the file, this prevents the need of a name resolution in a delayed time, when the association between names and addresses can be different from the one in use at capture time. Moreover, The Name Resolution Block avoids the need of issuing a lot of DNS requests every time the trace capture is opened, and allows to have name resolution also when reading the capture with a machine not connected to the network.
The format of the Name Resolution Block is shown in Figure 7.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Record Type | Record Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Record Value | | /* variable length, byte-aligned */ | | + + + + + + + + + + + + + + + + + + + + + + + + + | | | | | +-+-+-+-+-+-+-+-+ + + + + + + + + + + + + + + + + + + + + + + + + . . . other records . . . | Record Type == end_of_recs | Record Length == 00 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Name Resolution Block format. |
A Name Resolution Block is a zero-terminated list of records (in the TLV format), each of which contains an association between a network address and a name. There are three possible types of records:
| Name | Code | Length | Description |
|---|---|---|---|
| end_of_recs | 0 | 0 | End of records |
| ip4_rec | 1 | Variable | Specifies an IPv4 address (contained in the first 4 bytes), followed by one or more zero-terminated strings containing the DNS entries for that address. |
| ip6_rec | 1 | Variable | Specifies an IPv6 address (contained in the first 16 bytes), followed by one or more zero-terminated strings containing the DNS entries for that address. |
After the list or Name Resolution Records, optionally, a list of options (formatted according to the rules defined in Section 4) can be present.
A Name Resolution Block is normally placed at the beginning of the file, but no assumptions can be taken about its position. Name Resolution Blocks can be added in a second time by tools that process the file, like network analyzers.
In addiction to the options defined in Section 4, the following options are valid within this block:
| Name | Code | Length | Description |
|---|---|---|---|
| ns_dnsname | 2 | Variable | An ascii string containing the name of the machine (DNS server) used to perform the name resolution. |
The Interface Statistics Block contains the capture statistics for a given interface and it is optional. The statistics are referred to the interface defined in the current Section identified by the Interface ID field.
The format of the Interface Statistics Block is shown in Figure 8.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IfRecv | | (high + low) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | IfDrop | | (high + low) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | FilterAccept | | (high + low) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | OSDrop | | (high + low) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | UsrDelivered | | (high + low) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Interface ID | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / Options (variable) / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Interface Statistics Block format. |
The fields have the following meaning:
In addiction to the options defined in Section 4, the following options are valid within this block:
| Name | Code | Length | Description |
|---|---|---|---|
| isb_starttime | 2 | 8 | Time in which the capture started; time will be stored in two blocks of four bytes each, containing the timestamp in seconds and nanoseconds. |
| isb_endtime | 3 | 8 | Time in which the capture started; time will be stored in two blocks of four bytes each, containing the timestamp in seconds and nanoseconds. |
| TOC |
Almost all blocks have the possibility to embed optional fields. Optional fields can be used to insert some information that may be useful when reading data, but that it is not really needed for packet processing. Therefore, each tool can be either read the content of the optional fields (if any), or skip them at once.
Skipping all the optional fields at once is straightforward because most of the blocks have a fixed length, therefore the field Block Length (present in the General Block Structure, see Section 2.1) can be used to skip everything till the next block.
Options are a list of Type - Length - Value fields, each one containing a single value:
Options may be repeated several times (e.g. an interface that has several IP addresses associated to it). The option list is terminated by a special code which is the 'End of Option'.
The format of the optional fields is shown in Figure 9.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option Code | Option Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option Value | | /* variable length, byte-aligned */ | | + + + + + + + + + + + + + + + + + + + + + + + + + | / / / | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / / / . . . other options . . . / / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Option Code == opt_endofopt | Option Length == 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options format. |
The following codes can always be present in any optional field:
| Name | Code | Length | Description |
|---|---|---|---|
| opt_endofopt | 0 | 0 | End of options: it is used to delimit the end of the optional fields. This block cannot be repeated within a given list of options. |
| opt_comment | 1 | variable | Comment: it is an ascii string containing a comment that is associated to the current block. |
| TOC |
Can some other packet blocks (besides the two described in the previous paragraphs) be useful?
The Compression Block is optional. A file can contain an arbitrary number of these blocks. A Compression Block, as the name says, is used to store compressed data. Its format is shown in Figure 10.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Compr. Type | | +-+-+-+-+-+-+-+-+ | | | | Compressed Data | | | | /* variable length, byte-aligned */ | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Compression Block format. |
The fields have the following meaning:
The Encryption Block is optional. A file can contain an arbitrary number of these blocks. An Encryption Block is used to sotre encrypted data. Its format is shown in Figure 11.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Encr. Type | | +-+-+-+-+-+-+-+-+ | | | | Compressed Data | | | | /* variable length, byte-aligned */ | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Encryption Block format. |
The fields have the following meaning:
The Fixed Length Block is optional. A file can contain an arbitrary number of these blocks. A Fixed Length Block can be used to optimize the access to the file. Its format is shown in Figure 12. A Fixed Length Block stores records with constant size. It contains a set of Blocks (normally Packet Blocks or Simple Packet Blocks), of wihich it specifies the size. Knowing this size a priori helps to scan the file and to load some portions of it without truncating a block, and is particularly useful with cell-based networks like ATM.
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Cell Size | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | Fixed Size Data | | | | /* variable length, byte-aligned */ | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Fixed Length Block format. |
The fields have the following meaning:
If present, this block contains the following information:
A directory block must be followed by at least N packets, otherwise it must be considered invalid. It can be used to efficiently load portions of the file to memory and to support operations on memory mapped files. This block can be added by tools like network analyzers as a consequence of file processing.
One or more blocks could be defined to contain network statistics or traffic monitoring information. They could be use to store data collected from RMON or Netflow probes, or from other network monitoring tools.
This block could be used to store events. Events could contain generic information (for example network load over 50%, server down...) or security alerts. An event could be:
| TOC |
The file format proposed in this document should be very versatile and satisfy a wide range of applications. In the simplest case, it can contain a raw dump of the network data, made of a series of Simple Packet Blocks. In the most complex case, it can be used as a repository for heterogeneous information. In every case, the file remains easy to parse and an application can always skip the data it is not interested in; at the same time, different applications can share the file, and each of them can benfit of the information produced by the others. Two or more files can be concatenated obtaining another valid file.
| TOC |
| TOC |
The IETF takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on the IETF's procedures with respect to rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification can be obtained from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address the information to the IETF Executive Director.
Copyright (C) The Internet Society (2004). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assignees.

Funding for the RFC Editor function is currently provided by the Internet Society.


--- notes: | You can also mix fixed widths alongside flexible ones by adding the `grid__item--full` class to any column. Also will only work for one row. ---


Show/Hide Hints
(Keyboard shortcut: h)
Hide Hints
Legend
From best to worst:
Best
Great
Good
Playable
Filler
Bad


All Posts
- July 21, 2020Raspberry Pi 24-bit RGB Video on the Cheap - Part One
- July 20, 2020Golang: Using SSH instead of HTTPS to git clone packages
- June 27, 2020Modding a PSone to Play Homebrew, Imports, and Backups
- June 24, 2020Parsing INI Files with Pure Bash
- June 23, 2020Installing a NVMe SSD in the PineBook Pro
- June 22, 2020Hello World


I am fairly sure the answer to this question is a resounding “Yes!”
“Can we not all remember the time when, on first taking to heart Milton, and afterwards Akenside,—(before knowing anything of Dante,) we conceived the grandest moment of possible existence to be that of a Seraph, poised on balanced wings, watching the bringing out of a world from chaos, its completion in fitness, beauty and radiance, and its first motion in its orbit, when sent forth by the creative hand on its everlasting way?”
Harriet Martineau, Life In The Sick-Room : Essays Of An Invalid (1844)


| OLD line(s): 58,67
<!-- Qualified Renewal Community Wages --> <xsd:element name="QualifiedRenewalCommunityWages" type="USAmountType" minOccurs="0"> <xsd:annotation> <xsd:documentation> <Description>Qualified Renewal Community Wages</Description> <LineNumber>Part I Line 1b</LineNumber> </xsd:documentation> </xsd:annotation> </xsd:element> | NEW line(s): 57
|
| OLD line(s): 78,87
<!-- Total Qualified Renewal Community Wages --> <xsd:element name="TotalQlfyRnwlCommunityWages" type="USAmountType" minOccurs="0"> <xsd:annotation> <xsd:documentation> <Description>Total qualified renewal community wages</Description> <LineNumber>Part I Line 1b</LineNumber> </xsd:documentation> </xsd:annotation> </xsd:element> | NEW line(s): 67
|
| OLD line(s): 158,159
<!-- Carryback of EZE and Renewal Community Employment Credits --> <xsd:element name="CarrybackEZECRAndRCECr" type="USAmountType" minOccurs="0"> | NEW line(s): 138,139
<!-- Carryback of EZE Credits --> <xsd:element name="CarrybackofEZECredit" type="USAmountType" minOccurs="0"> |
| OLD line(s): 162
<Description>Carryback of EZE and renewal community employment credits</Description> | NEW line(s): 142
<Description>Carryback of EZE credits</Description> |


Ethical Shopping Helper is a Chrome Extension that highlights products on the Sainburys/Tesco/Asda Ocado websites based on their ratings from Ethical Consumer.
You can try it out using the freely available ratings tables on Ethical Consumer for products such as Cereal, Honey, Butter and Spreads.
To unlock all the ratings you will need an Ethical Consumer subscription - you can or at https://www.ethicalconsumer.org
I develop this in my spare time with help from my friends, if you'd like to help, have a supermarket you'd like me to add, or have any feedback please give me a shout at ethicsinshopping@thinkysaurus.com


The goal of the software is to decode historical exchange data for two particular exchanges, data that is delivered by Pico.
The general transformation process is described in the Abstract ETL view
The deliverable is a Java CLI application; since the data sources are the same, the underlying exchange formats use the same tools, the project is split into 3 repositories:
All three are Clojure projects. The main motivation for using Clojure is two-fold: 1. The need to agressively inline code for the various adapters. 2. The reality that, at least for CME, a lot of the adaptation code is similar.
This repo concerns itself with the following topics: * the master transformation driver * the main PCAP parser * the supporting Java objects * the main Clojure utilities
The simplest description of the project is to take source exchange files and generate target Parquet datasets. Most of the complexity is in the transformation itself.
An input file represents the Pico format of delivering historical network data. It’s a gzip file containing a dump in the pcap format [1]
Each file can be described as having 3 onion-like layers:
The application extracts all 3 layers, taking:
It then writes the information to parquet datasets representing each message type.
Since the input files represent the actual network traffic, they contain intermingled trade-specific messages.
Each trade message type has its own schema, and corresponds to a single parquet dataset.
More information can be found in the Technical ETL View.
[1] For Pico, the header has a different endianness than what local linux tcpdump produces
Illustrations for the layers:
The program represents one big loop that performs the following:
Streams are defined in src/java/com/peregrinetraders/streams. The basic workflow is:
List<File> the input source paths
V GUnzipped Pcap decoding
Stream<Pcap>
V Individual packet extraction
Stream<Packet>
V Pcap Envelope stripping
Stream<PacketFrames>
V frame decoded according to exchange’s specifications
V stream flattening
Stream<BufferAndOffset>
V each individual message processed by the SBE->Parquet adapter
Parquet
Each application has to provide: - the source files - the frame decoder - the SBE->Parquet Sink
It is just: Function<PacketBuffer, Stream<BufferAndOffset>>
.
The basis for both input and output is an UnsafeBuffer, the binary payload. The input PacketBuffer represents the innermost PCAP-body, which is the Exchange’s envelope. Each resulting BufferAndOffset is a reference to the same UnsafeBuffer, the starting point of the SBE payload
Simply:
Consumer<BufferAndOffset>
This is provided by each main project (md-data-reader-euronext, md-data-reader-cme), and is covered in the SBE workflow # KaitaiStruct
KaitaiStruct is a declarative way to develop binary parsers.
It could, in theory, define the same logic as SBE tools (who knows, maybe they share some ancestry?).
It is used here to interpret the Pcap file format. Two reasons: 1. Like SBE, it abstracts away the error-prone binary manipulations into nice Java getters 2. There’s already a standard binary definition of the PCAP protocol!
A .ksy file describes the binary PCAP format. A code generator generates Java files which encapsulate the binary manipulation.
Unfortunately, the code does not generate any streaming-friendly format. As such, some manual editing had to happen in the generated Java code, in order to support the streaming case.
The generated & modified code is present in src/java/com/struct/kaitai
. The entry point is Pcap.java
.
The entirety of manipulation is encapsulated in PcapGenerator.java. This module’s responsibility is to publish a Stream of buffers, from the outer binary data. It does this by adapting the Pcap Object into a Stream
The SBE framework is a mature, (almost…) well designed project to support binary market formats.
The principle is to represent messages as binary payloads, with an XML description of their overall structure.
The framework provides tools to generate Java parsing code from the XML. There are 2 modes of execution:
The second mode is the fastest possible, as the Java compiler should inline the code to the point of simple memory copies. The downside is that it cannot switch XML implementations at runtime. As such, it is up to the application code to generate new Java classes, integrate them, and build a new JAR file.
Generated classes are to be found in each exchange’s project (md-data-reader-euronext, md-data-reader-cme).
While the usage of generated classes is straightforward, an important mention is the usage of multiple repeated groups.
In the main Decoder, repetitions are handled by inner classes (also called Decoder). However, the handling is not random access. Contrast this to regular getters, which are just getting data from the buffers at specific offsets.
The main decoder has a limit member, that represents the “end” of its data. When instantiation an inner decoder, the following happens:
final int limit = parentMessage.limit();
parentMessage.limit(limit + HEADER_SIZE);
The “end” of the message changes!
Worse, when moving the inner decoder’s Iterator:
offset = parentMessage.limit();
parentMessage.limit(offset + blockLength);
So, the inner groups treat the end of the buffer as some sort of pointer, incrementing it by their own block size.
This efffectively means groups are NOT random access, and STATEFUL.
In order to succesfully work with the file, groups need to be accessed in the SAME order as defined in the XML schema.
Once an SBE Header is instantiated, the main program can then dispatch to a specific decoder, instantiate that in turn, and finally feed into an output adapter function
KaitaiStruct is a declarative way to develop binary parsers.
It could, in theory, define the same logic as SBE tools (who knows, maybe they share some ancestry?).
It is used here to interpret the Pcap file format. Two reasons: 1. Like SBE, it abstracts away the error-prone binary manipulations into nice Java getters 2. There’s already a standard binary definition of the PCAP protocol!
A .ksy file describes the binary PCAP format. A code generator generates Java files which encapsulate the binary manipulation.
Unfortunately, the code does not generate any streaming-friendly format. As such, some manual editing had to happen in the generated Java code, in order to support the streaming case.
The generated & modified code is present in src/java/com/struct/kaitai
. The entry point is Pcap.java
.
The entirety of manipulation is encapsulated in PcapGenerator.java. This module’s responsibility is to publish a Stream of buffers, from the outer binary data. It does this by adapting the Pcap Object into a Stream
There are 3 aspects to adaptation:
The low-level Java Parquet API starts with org.apache.parquet.hadoop.ParquetRecordWriter
The actual writing logic is handled via org.apache.parquet.hadoop.api.WriteSupport
An extension of the class can then physically write to Parquet by means of a org.apache.parquet.io.api.RecordConsumer.
The responsibilities of the master adapter are:
The common repository provides:
MasterDriver/masterStream(
List<File> pcapFiles,
Function<PacketBuffer, Stream<BufferAndOffset>> frameDecoder,
Consumer<BufferAndOffset> sink)
The frame decoder is implemented by each main project, in Java.
So all the main program would do is call this method with the instantiated frameDecoder and a sink.
A minimal implementation of the Sink would be java.util.function.Consumer
(jconsumer [^BufferAndOffset info]
(let [buffer (.getBuffer info)
offset (.getOffset info)
header (.wrap (MessageHeaderDecoder.) buffer offset)
templateId (.templateId header)]
(println templateId)))
In Clojure, resource handling is handled via an RAII-like pattern, so the main adapter is structured as following:
(let [... instantiate ParquetRecordWriter's ...
sink-definition-using-writers (... as above... )
project-specific-frame-decoder (new ...)]
(try
(MasterDriver/masterStream pcap_files project-specific-frame-decoder sink-definition-using-writers)
(finally
... clean up record writers ...)))
By now, it should be clear that all there is to it is implementing the WriteSupport interface. Several requirements impact the structure of the adapter:
All of the support code is in src/clj/pcap_common/macros.clj
and src/clj/pcap_common/parquet_util.clj
parquet_util
handles assembling a proper ParquetWriter from the various components. It also contains 2 basic implementations of WriteSupport, make-loopful-proxy
and make-loopless-proxy
. The latter implements a flattened adaptation for use in Euronext. The former should be considered the basic implementation.
Both functions maintain the invariant that there is a top-level schema containing the timestamps, and that they are properly adapted from the OutputRecord. Afterwards, they call their msg-write-fn
parameter to complete the actual SBE->Parquet adaptation.
Looking at the Java example for the RecordConsumer documentation:
startField("A", 0)
addValue(1)
addValue(2)
endField("A", 0)
We can see it’s quite verbose to add a single field. There is thus, a Clojure macro, with-field-new
, which helps reduce the repetitiveness, while also inlining. The Clojure version looks like:
(with-field-new rconsumer "arrival_time" 0 (.addLong (.getPacketTimestamp outer-record)))
[1] JConsumer is a macro simplifying Clojure’s way of implementing an interface
The following operational aspects are to be described:
java -jar <jar file> PARAMTERS...
The jar is packaged standalone, so should depend only on openjdk.
The software tries to use streaming as much as possible. As such memory requirements are small, to the point of not really needing to configure memory during execution.
The GZIP part is the only place where streaming is not used, and there is logic to spill to disk in case of out of memory errors. This can happen when the Pico pcap files end up very large, an infrequent, but existing situation.
AWS configures their compute instances with the 1 CPU- 2GB RAM ration, so the application is designed with this heap size in mind. This means as many instances can be run in parallel as there are CPUs in the machine.
The application will output a warning message when disk spilling happens. If execution time seems out of control, heap size can be increased in 500MB increments.
The application is single threaded. It’s main CPU-related steps are:
The application does not require large amounts of I/O, as it is currently CPU bound.
In terms of disk space, given a set of input sources, it is advised to have at least 90% of their total file size available for the output parquet dataset. It is true that things like PCAP network envelopes are removed, that extra data was already very well compressed in the first place (due to being tightly packed together), and is replaced by some Parquet metadata.
There should be a 10GB buffer of space for when the decompression spills from RAM to disk. Note: Largest encountered decompressed size was 3GB, so this is a highly conservative value.


WITNESS LIST Energy Resources Committee May 4, 2005-8:00A HB 2482 Against: Hardwick, Ross (Self) Levisay, Thomas (Families of small oil and gas operators) Underbrink, Jason (Self) Wolski, Vicki (W W Energy) HB 2980 For: Hardwick, Ross (Self) Haynes, Adam (TIPRO) Stevens, Bill (Texas Alliance of Energy Producers) Underbrink, Jason (Self) Wolski, Vicki (W W Energy) SB 1103 Registering, but not testifying: For: Hodges, Ken (Texas Farm Bureau) Moore, Julie (Occidental Petroleum Corporation) Stevens, Bill (Texas Alliance of Energy Producers)


{% extends "main.html" %} {% block title %} - Administration {% endblock %} {% block scripts %} {% endblock %} {% block content %}
Post news or edit existing news.
Probate or ban a user/ip. Also quickly delete items, votes, and comments by a troublesome user.
See which items have been reported.
This is why we can't have nice things.
Set start/end dates for contents.


--- date: 2011-02-03T00:00:00Z published: true title: Report - Algeria to lift state of emergency - CNN.com url: /2011/02/03/report-algeria-to-lift-state-of-emergency-cnn-com/ ---
The president of Algeria plans to lift a state of emergency soon that has been in effect for nearly 20 years, the Algerian Press Service reported Thursday.
President Abdelaziz Bouteflika said he would lift the ban in the "very close future," the news service said.
Bouteflika's announcement comes about two weeks after government opponents marched in the North African nation to demand that the ban be lifted. The demonstrators also called for the release of detainees and the restoration of individual and collective freedoms.
Dominoes...


class: left, middle background-image: url(../../images/master-folie.png) .title[ ## Arrow and ## block-level functions
### Oleg Varaksin ####<EMAIL_ADDRESS>] --- # Arrow functions. Syntax (1/4). Arrow functions are anonymous functions that use an "arrow" __=>__. The syntax for arrow functions comes in many variations. All variations begin with _function arguments_, followed by the _arrow_, followed by the _body_ of the function. Both the arguments and the body can take different forms depending on usage. __Single argument.__ When there is only one argument for an arrow function, it can be used directly without any parentheses. The expression to the right of the arrow is evaluated and returned. ES6 ```js [1, 2, 3].map(num => num * 2); ``` ES5 equivalent ```js [1, 2, 3].map(function(num) {return num * 2;}); ``` No `return` keyword is required with a single statement. --- # Arrow functions. Syntax (2/4). __More than one argument.__ You must include parentheses around the arguments if there are more than one argument. ES6 ```js var sum = (num1, num2) => num1 + num2; ``` ES5 equivalent ```js var sum = function(num1, num2) { return num1 + num2; }; ``` __No arguments.__ You must include parentheses if there are no arguments (the same syntax as for many arguments). Example of a function that does nothing: ```js var doNothing = () => {}; ``` --- # Arrow functions. Syntax (3/4). __More than one statement in the body.__ If you want to have some other statements and not just an expression to return, you have to use brackets. ES6 ```js [1, 2, 3, 4].map(num => { var multiplier = 2 + num; return num * multiplier; }); ``` ES5 equivalent ```js [1, 2, 3, 4].map(function(num) { var multiplier = 2 + num; return num * multiplier; }); ``` __Note:__ When a function has multiple arguments and multiple statements, there are no significant differences with a named function declaration. --- # Arrow functions. Syntax (4/4). There is a special case - an arrow function that wants to return an object literal `{...}`. In this case, the function body must wrap the literal in parentheses. ES6 ```js var getSomeObject = id => ({key: id, value: "unknown"}); ``` ES5 equivalent ```js var getSomeObject = function(id) { return { key: id, value: "unknown" }; }; ``` Wrapping the object literal in parentheses signals that the braces are an object literal instead of the function body. --- # Arrow functions. IIFEs. Immediately-invoked function expressions (IIFEs) allow you to define an anonymous function and call it immediately without saving a reference. ```js let person = function(message) { return { getGreeting: function() { return message; } }; }("Hell World!"); ``` To accomplish the same thing using arrow functions, you have to wrap the arrow function in parentheses. ```js let person = ((message) => { return { getGreeting: function() { return message; } }; })("Hell World!"); ``` --- # Arrow functions. Lexical binding (1/5). The value of `this`, `super`, `arguments` inside of the arrow function is determined by the closest containing nonarrow function. In other words, the value of `this`, `super`, `arguments` is determined by where the arrow function is defined and not where it is used. It is said that arrow functions are bound to their _lexical scope_. The value of `this` inside of the arrow function __can't be changed__ due to the lexical binding. It remains the same value throughout the entire lifecycle of the function. That also means, `.call` and `.apply` won't be able to change the value of `this`. There are a few reasons for these differences. The lexical scope reduces errors and ambiguities inside of arrow functions. By doing so, JavaScript engines are better able to optimize arrow function execution. You can say goodbye to `var self = this` and similar hacks, such as using `.bind(this)`, to preserve the context within deeply nested methods. --- # Arrow functions. Lexical binding (2/5). ES5 with `self` ```js function Timer() { var self = this; self.seconds = 0; setInterval(function() {self.seconds++;}, 1000); } ``` ES6 ```js function Timer() { this.seconds = 0; setInterval(() => this.seconds++, 1000); } ``` --- # Arrow functions. Lexical binding (3/5). ES5 with `.bind(this)` ```js var SomeObject = { init: function() { document.addEventListener("click", (function(event) { this.doSomething(event.type); }).bind(this), false); }, doSomething: function(type) {...} }; ``` ES6 ```js var SomeObject = { init: function() { document.addEventListener("click", event => this.doSomething(event.type), false); }, doSomething: function(type) {...} }; ``` --- # Arrow functions. Lexical binding (4/5). __Quiz__. Will this code work? ```js var controller = { makeRequest: (...) => { // ... this.helper(...); }, helper: (...) => { // ... } }; controller.makeRequest(..); ``` -- __Answer__: No. The `this.helper` reference fails, because `this` here doesn't point to `controller`. It lexically inherits `this` from the surrounding scope and `this` in the surrounding scope points to the global scope! The global scope doesn't have the method `helper`. --- # Arrow functions. Lexical binding (5/5). Arrow functions don't have their own `arguments` object, but it's possible to access the `arguments` object from a containing function. ```js function createArrowFunction() { return () => arguments[0]; } var arrowFunction = createArrowFunction(5); console.log(arrowFunction()); // 5 ``` Last but not least: arrow function cannot be used as a constructor and will throw an error when used with `new`. ```js var MyType = () => {}; var object = new MyType(); // error ``` --- # Block-level functions. Strict mode. In ECMAScript before 6, a function declaration inside of a block led to a different behavior in browsers, so it is considered a best practice to avoid function declarations inside of blocks. In ECMAScript 6, block-level functions were standardized. ```js "use strict"; if (true) { console.log(typeof doSomething); // "function" function doSomething() { ... } doSomething(); } console.log(typeof doSomething); // "undefined" ``` In the strict mode, block level functions are hoisted to the top of the block in which they are defined. Once the `if` block finished executing, `doSomething()` no longer exists. --- # Block-level functions. Non strict mode. ECMAScript 6 also allows block-level functions in non strict mode, but the behavior is slightly different. Instead of hoisting these declarations to the top of the block, they are hoisted to the containing function or global environment. ```js if (true) { console.log(typeof doSomething); // "function" function doSomething() { ... } doSomething(); } console.log(typeof doSomething); // "function" ``` In this example, `doSomething()` is hoisted into the global scope so that it still exists outside of the `if` block. ECMAScript 6 standardized this behavior to remove the incompatible browser behaviors that previously existed, so all ECMAScript 6 runtimes should behave in the same way. --- class: center, middle, inverse # That's all folks, thanks for your attention! .back[[Back to the homepage](http://ova2.github.io/es6-presentations/)] Slideshow created with [remark](https://github.com/gnab/remark)


cases SARS MERS spread COVID- virus coronavirus China outbreak respiratory transmission risk {border-style px;} #ffffff;} clinical Chinese East health Respiratory contact current infected patients COVID-. Middle disease zoonotic February Health accessed). date Syndrome government novel CFR epidemic epidemic. global public rapid reported travel viruses China. Coronavirus Wuhan, assessment identified seafood severe MERS, University case control disease. factors initial lack markets measures outbreak, px; treatment {font-family Control Department Disease Huanan New Saudi Wuhan common confirmed font-size history human-to-human illness infection lessons major regarding signs viral Acute Additionally, January Prevention South antiviral asymptomatic cases. close combination diagnosed double; hospitals individuals infection. international led presented provide reservoir similar thought time COVID-, China, Organization Severe animals authorities border-color border-width coronaviruses countries did infected, infectious information live-animal lower market. medical methods need number obtained solid; suspected symptoms transmission, utilizing virus, virus. {font-style {font-weight (COVID-) (WHO). Center December Figure Furthermore, Infection National North Novel Patients RT-PCR Similar World acute age animal article bold combined connecting countries. courier; deadly deaths diagnosis direct droplets effective efficacy efforts em; high host hub human implications include including increased laboratory large limited live occurred occurring officials person-to-person preventing proper pt;} quickly rapidly, review role situation study surveillance symptoms, syndrome taken transmission. transmitted


The web is a bunch of computers that communicate with one other. When a person goes to a web page like www.yahoo.com, their computer sends a HTTP Request to a server. The server finds the appropriate HTML document and sends it back to the user's computer where a web browser interprets the page and displays it on the user's screen.
What is HTML?HTML (HyperText Markup Language) - HTML documents form the majority of the content on the web. HTML is made up of text content which is "what you see" as well as markup which describes "what it actually looks like".
Elements and Tags-HTML documents are made up of HTML elements (
-a
-span
-br
-img
-strong
Do some people consider Computers are Stupid?  This makes them very unforgiving since a small mistake by a programmer will cause huge problem within a program.
Differences between block and inline elements-HTML elements are fall under two categories: inline or block. Block elements form whats called an "invisible box" around the content inside of them.
More Tags...Em-emphasis--->italics which shows as: contents


Martijn Schuemie, PhD
Director, Epidemiology Analytics
Janssen Research and Development
Dr. Martijn Schuemie received his Master’s degree in Economics with a major in Information Management. He completed his PhD in Computer Science on the topic of human-computer interaction in virtual reality systems for phobia treatment. In the past, he was employed as an assistant professor at the Erasmus University Medical Center of Rotterdam, where he started by researching the application of text-mining the scientific literature in support of molecular biology. He later moved to pharmacoepidemiology, and was one of the lead investigators in the EU-ADR project tasked with building a prototype drug safety signal detection system using population-level observational data. In 2012 he received a one-year fellowship of the FDA and became an active OMOP investigator.
In 2013 Martijn joined Janssen Research and Development, where he continued his research in OMOP and later in OHDSI. He is working on methods for estimating average effect sizes in observational, calibration of effect size estimates, and patient level prediction, as well as supporting the conversion of databases to the OMOP CDM. Within OHDSI, Martijn has developed the White Rabbit and Rabbit in a Hat tools, and is contributing to the OHDSI Methods Library. Martijn is heading the OHDSI Population-Level Methods workgroup together with Marc Suchard.


|
PU2CLR SI4844 Arduino Library
1.0.9
Arduino Library for Si4844 Devices - By Ricardo Lima Caratti
|
#include <Arduino.h>
#include <Wire.h>
Go to the source code of this file.
Data Structures | |
| union | si4844_status |
| Status. More... | |
| struct | si4844_get_status |
| Device Status. More... | |
| union | si4844_status_response |
| Status response. More... | |
| struct | si4844_firmware_info |
| Firmware Information. More... | |
| union | si4844_firmware_response |
| Firmware Response. More... | |
| union | si4844_audiomode |
| Audio Mode. More... | |
| union | si4844_audiomode_status_response |
| Audio Status Response. More... | |
| union | si4844_property |
| Data type to deal with SET_PROPERTY command. More... | |
| class | SI4844 |
| SI4844 Class. More... | |
| struct | si4844_status.refined |
| struct | si4844_audiomode.arg1 |
| struct | si4844_audiomode_status_response.status |
| struct | si4844_property.raw |
Macros | |
| #define | SI4844_ADDRESS 0x11 |
| SI4844 ARDUINO LIBRARY More... | |
| #define | ATDD_POWER_DOWN 0x11 |
| #define | ATDD_POWER_UP 0xE1 |
| #define | ATDD_AUDIO_MODE 0xE2 |
| #define | GET_REV 0x10 |
| #define | ATDD_XOSCEN 0x80 |
| #define | ATDD_XOWAIT 0x40 |
| #define | ATDD_GET_STATUS 0xE0 |
| #define | SET_PROPERTY 0x12 |
| #define | GET_PROPERTY 0x13 |
| #define | RX_VOLUME 0x4000 |
| #define | RX_HARD_MUTE 0x4001 |
| #define | RX_BASS_TREBLE 0x4002 |
| #define | RX_ACTUAL_VOLUME 0x4003 |
| #define | FM_SOFT_MUTE_MAX_ATTENUATION 0x1302 |
| #define | AM_SOFT_MUTE_MAX_ATTENUATION 0x3302 |
| #define | FM_DEEMPHASIS 0x1100 |
| union si4844_firmware_response |
Firmware Response.
| Data Fields | ||
|---|---|---|
| si4844_firmware_info | refined | |
| uint8_t | raw[9] |
| union si4844_property |
Data type to deal with SET_PROPERTY command.
Property Data type (help to deal with SET_PROPERTY command on si473X)
| Data Fields | ||
|---|---|---|
| struct si4844_property | raw | |
| uint16_t | value |
| #define SI4844_ADDRESS 0x11 |
SI4844 ARDUINO LIBRARY
This is an Arduino library for the SI4844, BROADCAST AM/FM/SW RADIO RECEIVER IC family from Silicon Labs.
This library is intended to provide an easier interface for controlling the SI47XX by using Arduino platform.
The communication used by this library is I2C.
This file contains: const (#define), Defined Data type and Methods declarations
You can see a complete documentation on https://github.com/pu2clr/SI4844
| #define ATDD_POWER_DOWN 0x11 |
| #define ATDD_POWER_UP 0xE1 |
| #define ATDD_AUDIO_MODE 0xE2 |
| #define GET_REV 0x10 |
| #define ATDD_XOSCEN 0x80 |
| #define ATDD_XOWAIT 0x40 |
| #define ATDD_GET_STATUS 0xE0 |
| #define SET_PROPERTY 0x12 |
| #define GET_PROPERTY 0x13 |
| #define RX_VOLUME 0x4000 |
| #define RX_HARD_MUTE 0x4001 |
| #define RX_BASS_TREBLE 0x4002 |
| #define RX_ACTUAL_VOLUME 0x4003 |
| #define FM_SOFT_MUTE_MAX_ATTENUATION 0x1302 |
| #define AM_SOFT_MUTE_MAX_ATTENUATION 0x3302 |
| #define FM_DEEMPHASIS 0x1100 |


A list of meetings will be shown below, prioritised by start time.
Upon loading meetings, if Auto Start is enabled, the first will be launched automatically.
If no URLs are found or the second meeting has the same start time, Auto Start will not fire.


A first-in-first-out container of elements implemented as a List .
Putting an element to the end of the queue takes amortized constant time. Getting an element from the start of the queue is O(n) operation.
| T |
| public inline nothrow void | Clear() |
| public inline nothrow long | Count() const |
| public inline nothrow const T& | Front() const |
| public inline T | Get() |
| public inline nothrow bool | IsEmpty() const |
| public inline void | Put(T&& item) |
| public inline void | Put(const T& item) |
| public inline nothrow List<T>& | Rep() |
| public typedef ValueType | T |
| private List<T> | items |


Issues in Technlogy
Women Representation in the Industry January 18th, 2015
It's important to recognize that there are no industries without their own problems. Technology is no different. Within the technology industry, one of the most prominent problems it faces is the bleak representation of women and the culture that doesn't openly accept them.
To say that the problem is a pipeline problem is to feign ignorance. It's easy to blame it on the fact that there aren't enough women who study math or science. However, the real problem lies within the culture. There are generally no maternity leave offered by companies and there are many environments where women are found to be discriminated against. The culture of "brogrammers" and not allowing women to "fit" within the technology industry needs to change.
The solution is tough. It won't be easy to change a culture unless there's a new overhaul of attitude. It begins with the new age of programmers and the new tech companies. Once the environment is built to accept everyone, it'll begin to change the older ways. To fix the problem of maternity leave, it's important to be mindful of what is going on around us. Even the Department of Labor recognizes this problem and recently addressed it within a video. See here for the video!


public interface MonetaryRoundingsSingletonSpi
MonetaryOperator
.
This class is thread-safe.
| Modifier and Type | Method and Description |
|---|---|
List<String> |
getDefaultProviderChain()
Access a list of the currently registered default providers.
|
MonetaryRounding |
getDefaultRounding()
Creates a
MonetaryRounding that can be added as MonetaryOperator to
chained calculations. |
Set<String> |
getProviderNames()
Allows to access the names of the current registered rounding providers.
|
default MonetaryRounding |
getRounding(CurrencyUnit currencyUnit,
String... providers)
Access a
MonetaryRounding for rounding MonetaryAmount
instances given a currency. |
default MonetaryRounding |
getRounding(RoundingQuery query)
Query a specific rounding with the given query.
|
default MonetaryRounding |
getRounding(String roundingName,
String... providers)
Access a
MonetaryRounding using the rounding name. |
Set<String> |
getRoundingNames(String... providers)
Allows to access the names of the current defined roundings.
|
Collection<MonetaryRounding> |
getRoundings(RoundingQuery query)
Execute a query for
MonetaryRounding . |
default boolean |
isRoundingAvailable(CurrencyUnit currencyUnit,
String... providers)
Checks if a
MonetaryRounding is available given a CurrencyUnit . |
default boolean |
isRoundingAvailable(RoundingQuery query)
Checks if any
MonetaryRounding is matching the given query. |
default boolean |
isRoundingAvailable(String roundingId,
String... providers)
Checks if a
MonetaryRounding is available given a roundingId. |
Set<String> getRoundingNames(String... providers)
providers
- the providers and ordering to be used. By default providers and ordering as defined in
#getDefaultProviders is used.null
.Set<String> getProviderNames()
null
.List<String> getDefaultProviderChain()
javamoney.properties
is used.RoundingQueryBuilder
Collection<MonetaryRounding> getRoundings(RoundingQuery query)
MonetaryRounding
. This allows to model more complex used cases,
such as historic or special roundings.query
- the query to be expected, not null.MonetaryRounding getDefaultRounding()
MonetaryRounding
that can be added as MonetaryOperator
to
chained calculations. The instance must lookup the concrete
MonetaryRounding
instance from the MonetaryRoundingsSingletonSpi
based on the input MonetaryAmount
's CurrencyUnit
.default MonetaryRounding getRounding(CurrencyUnit currencyUnit, String... providers)
MonetaryRounding
for rounding MonetaryAmount
instances given a currency.currencyUnit
- The currency, which determines the required precision. As
RoundingMode
, by default, RoundingMode.HALF_UP
is sued.providers
- the optional provider list and ordering to be usedMonetaryOperator
implementing the
rounding, never null
.MonetaryException
- if no such rounding could be provided.default MonetaryRounding getRounding(String roundingName, String... providers)
MonetaryRounding
using the rounding name.roundingName
- The rounding name, not null.providers
- the optional provider list and ordering to be usedMonetaryOperator
implementing the
rounding, never null
.IllegalArgumentException
- if no such rounding is registered using a
RoundingProviderSpi
instance.default MonetaryRounding getRounding(RoundingQuery query)
AbstractQuery.getProviderNames()
.query
- the rounding query, not null.default boolean isRoundingAvailable(RoundingQuery query)
MonetaryRounding
is matching the given query.query
- the rounding query, not null.default boolean isRoundingAvailable(String roundingId, String... providers)
MonetaryRounding
is available given a roundingId.roundingId
- The rounding identifier.providers
- the providers and ordering to be used. By default providers and ordering as defined in
#getDefaultProviders is used.MonetaryRounding
is available.IllegalArgumentException
- if no such rounding is registered using a
RoundingProviderSpi
instance.default boolean isRoundingAvailable(CurrencyUnit currencyUnit, String... providers)
MonetaryRounding
is available given a CurrencyUnit
.currencyUnit
- The currency, which determines the required precision. As RoundingMode
,
by default, RoundingMode.HALF_UP
is used.providers
- the providers and ordering to be used. By default providers and ordering as defined in
#getDefaultProviders is used.MonetaryRounding
is available.IllegalArgumentException
- if no such rounding is registered using a
RoundingProviderSpi
instance.Copyright © 2012–2016 JSR 354 - Expert Group. All rights reserved.


IAAC-MaCad // SEMINAR 01
DIGITAL TOOLS FOR CLOUD BASED DATA MANAGEMENT
UBUNTU: CREATING CULTURAL CONNECTIONS
UBUNTU IS BANTU WORD FOR THE COMMON BENEFIT, MEANING “I AM BECAUSE WE ARE”. CURRENT ENVIRONMENTAL ANALYSIS HAS BEEN CARRIED OUT ON THE BASIS OF THE STUDIO PROJECT. AS A TEAM, WE HAVE ANALYZED THE INITIAL SITE CONDITIONS, THE IMPACT OF THE LOCAL CLIMATE ON OUR DESIGN AND THEN THE WAYS TO OPTIMIZE THE DESIGN SOLUTIONS IN ORDER TO IMPROVE THE USER EXPERIENCE.
// PROJECT LOCATION
The site we’ve chosen is located in Johannesburg, South Africa. As the charts below show, the area has good climate and the only real issue to address is the direct sunlight: South Africa is one of the sunniest regions on the planet, so the protection from the solar radiation is one of the key climatic comfort problems faced by the architects
// URBAN PROGRAM
The site we have chosen for the studio project is located in the Johannesburg Central Buisiness district next to the Central Raiway station and is, basically, a field of rails 250-500 meters wide. We have located points to be connected on both sides of it and analyzed the existing pedestrian connections, both in terms of their quantity and quality. Apparently, they are currently offering not a very pleasant walk – provided the high level of sun radiation and high crime rate.
// PROJECT GEOMETRY
Below is an interactive 3D model of the final project where you can see and explore the different areas and configurations.


The min mean difference removes the genes where the mean gene expression difference from any two classes is less than the specified value.


BTS
MAP OF THE SOUL STADIUM TOUR
Hover over each city to find out which stadiums BTS will be performing at as well as the stadium's capacity and the original/rescheduled tour dates.


DataFrameGroupBy.
describe
Generate descriptive statistics.
Descriptive statistics include those that summarize the central tendency, dispersion and shape of a dataset’s distribution, excluding NaN values.
NaN
Analyzes both numeric and object series, as well as DataFrame column sets of mixed data types. The output will vary depending on what is provided. Refer to the notes below for more detail.
DataFrame
The percentiles to include in the output. All should fall between 0 and 1. The default is [.25, .5, .75], which returns the 25th, 50th, and 75th percentiles.
[.25, .5, .75]
A white list of data types to include in the result. Ignored for Series. Here are the options:
Series
‘all’ : All columns of the input will be included in the output.
A list-like of dtypes : Limits the results to the provided data types. To limit the result to numeric types submit numpy.number. To limit it instead to object columns submit the numpy.object data type. Strings can also be used in the style of select_dtypes (e.g. df.describe(include=['O'])). To select pandas categorical columns, use 'category'
numpy.number
numpy.object
select_dtypes
df.describe(include=['O'])
'category'
None (default) : The result will include all numeric columns.
A black list of data types to omit from the result. Ignored for Series. Here are the options:
A list-like of dtypes : Excludes the provided data types from the result. To exclude numeric types submit numpy.number. To exclude object columns submit the data type numpy.object. Strings can also be used in the style of select_dtypes (e.g. df.describe(include=['O'])). To exclude pandas categorical columns, use 'category'
None (default) : The result will exclude nothing.
Summary statistics of the Series or Dataframe provided.
See also
DataFrame.count
Count number of non-NA/null observations.
DataFrame.max
Maximum of the values in the object.
DataFrame.min
Minimum of the values in the object.
DataFrame.mean
Mean of the values.
DataFrame.std
Standard deviation of the observations.
DataFrame.select_dtypes
Subset of a DataFrame including/excluding columns based on their dtype.
Notes
For numeric data, the result’s index will include count, mean, std, min, max as well as lower, 50 and upper percentiles. By default the lower percentile is 25 and the upper percentile is 75. The 50 percentile is the same as the median.
count
mean
std
min
max
50
25
75
For object data (e.g. strings or timestamps), the result’s index will include count, unique, top, and freq. The top is the most common value. The freq is the most common value’s frequency. Timestamps also include the first and last items.
unique
top
freq
first
last
If multiple object values have the highest count, then the count and top results will be arbitrarily chosen from among those with the highest count.
For mixed data types provided via a DataFrame, the default is to return only an analysis of numeric columns. If the dataframe consists only of object and categorical data without any numeric columns, the default is to return an analysis of both the object and categorical columns. If include='all' is provided as an option, the result will include a union of attributes of each type.
include='all'
The include and exclude parameters can be used to limit which columns in a DataFrame are analyzed for the output. The parameters are ignored when analyzing a Series.
Examples
Describing a numeric Series.
>>> s = pd.Series([1, 2, 3]) >>> s.describe() count 3.0 mean 2.0 std 1.0 min 1.0 25% 1.5 50% 2.0 75% 2.5 max 3.0 dtype: float64
Describing a categorical Series.
>>> s = pd.Series(['a', 'a', 'b', 'c']) >>> s.describe() count 4 unique 3 top a freq 2 dtype: object
Describing a timestamp Series.
>>> s = pd.Series([ ... np.datetime64("2000-01-01"), ... np.datetime64("2010-01-01"), ... np.datetime64("2010-01-01") ... ]) >>> s.describe() count 3 unique 2 top 2010-01-01 00:00:00 freq 2 first 2000-01-01 00:00:00 last 2010-01-01 00:00:00 dtype: object
Describing a DataFrame. By default only numeric fields are returned.
>>> df = pd.DataFrame({'categorical': pd.Categorical(['d','e','f']), ... 'numeric': [1, 2, 3], ... 'object': ['a', 'b', 'c'] ... }) >>> df.describe() numeric count 3.0 mean 2.0 std 1.0 min 1.0 25% 1.5 50% 2.0 75% 2.5 max 3.0
Describing all columns of a DataFrame regardless of data type.
>>> df.describe(include='all') categorical numeric object count 3 3.0 3 unique 3 NaN 3 top f NaN c freq 1 NaN 1 mean NaN 2.0 NaN std NaN 1.0 NaN min NaN 1.0 NaN 25% NaN 1.5 NaN 50% NaN 2.0 NaN 75% NaN 2.5 NaN max NaN 3.0 NaN
Describing a column from a DataFrame by accessing it as an attribute.
>>> df.numeric.describe() count 3.0 mean 2.0 std 1.0 min 1.0 25% 1.5 50% 2.0 75% 2.5 max 3.0 Name: numeric, dtype: float64
Including only numeric columns in a DataFrame description.
>>> df.describe(include=[np.number]) numeric count 3.0 mean 2.0 std 1.0 min 1.0 25% 1.5 50% 2.0 75% 2.5 max 3.0
Including only string columns in a DataFrame description.
>>> df.describe(include=[np.object]) object count 3 unique 3 top c freq 1
Including only categorical columns from a DataFrame description.
>>> df.describe(include=['category']) categorical count 3 unique 3 top f freq 1
Excluding numeric columns from a DataFrame description.
>>> df.describe(exclude=[np.number]) categorical object count 3 3 unique 3 3 top f c freq 1 1
Excluding object columns from a DataFrame description.
>>> df.describe(exclude=[np.object]) categorical numeric count 3 3.0 unique 3 NaN top f NaN freq 1 NaN mean NaN 2.0 std NaN 1.0 min NaN 1.0 25% NaN 1.5 50% NaN 2.0 75% NaN 2.5 max NaN 3.0


fun init(listener: PaymentSessionListener): Unit
Initialize the PaymentSession with a PaymentSessionListener to be notified of
data changes. The reference to the listener will be released when the host (i.e.
Activity
or Fragment
) is destroyed.
The listener will be immediately called with the current PaymentSessionData.
If the PaymentSessionConfig.shouldPrefetchCustomer is true, a new Customer
instance
will be fetched.
listener
- a PaymentSessionListener


lsusb(8) Linux USB Utilities lsusb(8) NAME lsusb - list USB devices SYNOPSIS lsusb [ options ] DESCRIPTION lsusb is a utility for displaying information about USB buses in the sys‐ tem and the devices connected to them. OPTIONS -v, --verbose Tells lsusb to be verbose and display detailed information about the devices shown. This includes configuration descriptors for the device's current speed. Class descriptors will be shown, when available, for USB device classes including hub, audio, HID, com‐ munications, and chipcard. -s [[bus]:][devnum] Show only devices in specified bus and/or devnum. Both ID's are given in decimal and may be omitted. -d [vendor]:[product] Show only devices with the specified vendor and product ID. Both ID's are given in hexadecimal. -D device Do not scan the /dev/bus/usb directory, instead display only information about the device whose device file is given. The device file should be something like /dev/bus/usb/001/001. This option displays detailed information like the v option; you must be root to do this. -t Tells lsusb to dump the physical USB device hierarchy as a tree. This overrides the v option. -V, --version Print version information on standard output, then exit success‐ fully. RETURN VALUE If the specified device is not found, a non-zero exit code is returned. FILES /var/lib/usbutils/usb.ids A list of all known USB ID's (vendors, products, classes, sub‐ classes and protocols). SEE ALSO lspci(8), usbview(8). AUTHOR Thomas Sailer<EMAIL_ADDRESS>usbutils-005 6 May 2009 lsusb(8)


John Doe
street
Hight Street
zip
12345
city
Anytown
Jane Doe
street
Main Street
zip
67890
city
Sometown
Apple
pie
Kiwi
pie
Strawberry
pie
Cherry
pie


New multipurpose sports hall opened in Oman
by Times News ServiceMuscat: With donations of OMR 15,000, Bani Bu Ali School in south Sharqiyah governorate celebrated the inauguration of a multipurpose sports hall.
According to the school, the project allows students to practice various sports in a healthy environment.
Maryam Al-Sunaidi, Principal of Bani Bu Ali School, said: "Thank you to all the teachers, administrators, companies and local institutions who contributed to the project. The cost of the project reached OMR 15,000. "
The hall will serve the students and the administrative and teaching staff of the school and the local community.
Al Sunaidi added: "On the hall, we held various activities such as exhibitions, celebrations, and workshops, as well as sports arenas.”


It's not easy to create a well formed OBO ontology. In a large ontology, it's easy to make mistakes, from large logical or structural errors to small grammatical mistakes in a comment.
The OBO-Edit verification system helps keep these mistakes under control by performing error checks at several stages of editing. Fatal errors and non-fatal warnings are immediately reported to the user. Many common mistakes can be automatically corrected by the verification system.
The OBO-Edit verification system performs some checks during each of five events:
Note that not all checks are performed during each event. Some checks are only performed during certain events. The events during which each check is performed can be configured in The Verification Plugin, but the default settings will work well for most ontologies.
Some ontology checks can take a long time to run, mostly because each term in the ontology must be checked. To keep text edits quick (and error reports easier to read), when checks are initiated by the Text Edit event, only the currently selected term is checked.
Currently, OBO-Edit can perform the following checks:


Blog Post Week 3: CSS Concepts
November 5, 2015
Part of the DBC Phase 0 Journey. Our assignment for Week 3: Researching a CSS concept and offering some thoughts on it. I went with positioning, since it can be so diabolical sometimes.
November 5, 2015
Part of the DBC Phase 0 Journey. Our assignment for Week 3: Researching a CSS concept and offering some thoughts on it. I went with positioning, since it can be so diabolical sometimes.
October 21, 2015
Part of the DBC Phase 0 Journey. Our assignment for Week 1: All sorts of glorious details on the upsides of using Git for version control.


|
XPMP2
X-Plane multiplayer library 2 - using instancing
|
Passing information about any data type (like a/c full detail message); the data is contained as copy. More...
#include <Remote.h>
Public Member Functions | |
| RmtDataEnqeueTy () | |
| Default constructor only sets message type, leaves rest defaulted. More... | |
| RmtDataEnqeueTy (const ElemTy &_elem) | |
| Data copy constructor copies the passed-in data. More... | |
| Public Member Functions inherited from XPMP2::RmtDataBaseTy | |
| RmtDataBaseTy (RemoteMsgTy _ty) | |
| Constructor just set the message type. More... | |
| virtual | ~RmtDataBaseTy () |
| Virtual destructor makes sure correct deletion of derived class' objects even through (smart) pointers to this base class. More... | |
Public Attributes | |
| ElemTy | data |
| the payload data More... | |
| Public Attributes inherited from XPMP2::RmtDataBaseTy | |
| RemoteMsgTy | msgTy |
| which message to send? More... | |
Passing information about any data type (like a/c full detail message); the data is contained as copy.
|
inline |
Default constructor only sets message type, leaves rest defaulted.
|
inline |
Data copy constructor copies the passed-in data.
| ElemTy XPMP2::RmtDataEnqeueTy< ElemTy, MsgTy >::data |
the payload data


Rules
Here's what we decided on together. Infractions will be handled on a case-by-case basis, and suggestions
will be listened to.
- Griefing in any manner is unacceptable.
-
If you'd like to "claim" land, clearly post boundary markers and signs. If you're trying to find a
place to build, follow this simple rule: "Don't be a dick."
“Don't be a dick.”
-
The world will start off at a 6000x6000 block square centered at spawn. The world will be expanded,
within reason, at player request and admin approval.
- Treat each other with respect, even when you don't want to.


Ditch those ugly focus styles and use Focuser! A stylable, traveling focus indicator.
Tab around to see Focuser in action.
Example Text Input
Selection Select an Option Option 1 Option 2 Option 3
Example Textarea
Check me out
Form Submit


--- layout: archive title: Zulip Chat Archive permalink: /stream/144837-PR-reviews/topic/.232000.20.3Atada.3A.html ---
:tada: I just kicked #2000 onto the merge queue. Only 48 more to go, and we'll have a nice round number :wink:
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


|
Little Heroes
|
Public Attributes | |
| string | WindowTitle = "PUN Wizard" |
| string | SetupWizardWarningTitle = "Warning" |
| string | SetupWizardWarningMessage = "You have not yet run the Photon setup wizard! Your game won't be able to connect. See Windows -> Photon Unity Networking." |
| string | MainMenuButton = "Main Menu" |
| string | ConnectButton = "Connect to Photon Cloud" |
| string | UsePhotonLabel = "Using the Photon Cloud is free for development. If you don't have an account yet, enter your email and register." |
| string | SendButton = "Send" |
| string | EmailLabel = "Email:" |
| string | SignedUpAlreadyLabel = "I am already signed up. Let me enter my AppId." |
| string | SetupButton = "Setup" |
| string | RegisterByWebsiteLabel = "I want to register by a website." |
| string | AccountWebsiteButton = "Open account website" |
| string | SelfHostLabel = "I want to host my own server. Let me set it up." |
| string | SelfHostSettingsButton = "Open self-hosting settings" |
| string | MobileExportNoteLabel = "Build for mobiles impossible. Get PUN+ or Unity Pro for mobile." |
| string | MobilePunPlusExportNoteLabel = "PUN+ available. Using native sockets for iOS/Android." |
| string | EmailInUseLabel = "The provided e-mail-address has already been registered." |
| string | KnownAppIdLabel = "Ah, I know my Application ID. Get me to setup." |
| string | SeeMyAccountLabel = "Mh, see my account page" |
| string | SelfHostSettingButton = "Open self-hosting settings" |
| string | OopsLabel = "Oops!" |
| string | SeeMyAccountPage = "" |
| string | CancelButton = "Cancel" |
| string | PhotonCloudConnect = "Connect to Photon Cloud" |
| string | SetupOwnHostLabel = "Setup own Photon Host" |
| string | PUNWizardLabel = "Photon Unity Networking (PUN) Wizard" |
| string | SettingsButton = "Settings" |
| string | SetupServerCloudLabel = "Setup wizard for setting up your own server or the cloud." |
| string | WarningPhotonDisconnect = "" |
| string | ConverterLabel = "Converter" |
| string | StartButton = "Start" |
| string | UNtoPUNLabel = "Converts pure Unity Networking to Photon Unity Networking." |
| string | SettingsFileLabel = "Settings File" |
| string | LocateSettingsButton = "Locate settings asset" |
| string | SettingsHighlightLabel = "Highlights the used photon settings file in the project." |
| string | DocumentationLabel = "Documentation" |
| string | OpenPDFText = "Open PDF" |
| string | OpenPDFTooltip = "Opens the local documentation pdf." |
| string | OpenDevNetText = "Open DevNet" |
| string | OpenDevNetTooltip = "Online documentation for Photon." |
| string | OpenCloudDashboardText = "Open Cloud Dashboard" |
| string | OpenCloudDashboardTooltip = "Review Cloud App information and statistics." |
| string | OpenForumText = "Open Forum" |
| string | OpenForumTooltip = "Online support for Photon." |
| string | QuestionsLabel = "Questions? Need help or want to give us feedback? You are most welcome!" |
| string | SeeForumButton = "See the Photon Forum" |
| string | OpenDashboardButton = "Open Dashboard (web)" |
| string | AppIdLabel = "Your AppId" |
| string | AppIdInfoLabel = "The AppId a Guid that identifies your game in the Photon Cloud. Find it on your dashboard page." |
| string | CloudRegionLabel = "Cloud Region" |
| string | RegionalServersInfo = "Photon Cloud has regional servers. Picking one near your customers improves ping times. You could use more than one but this setup does not support it." |
| string | SaveButton = "Save" |
| string | SettingsSavedTitle = "Success" |
| string | SettingsSavedMessage = "Saved your settings.\nConnectUsingSettings() will use the settings file." |
| string | OkButton = "Ok" |
| string | SeeMyAccountPageButton = "Mh, see my account page" |
| string | SetupOwnServerLabel = "Running my app in the cloud was fun but...\nLet me setup my own Photon server." |
| string | OwnHostCloudCompareLabel = "I am not quite sure how 'my own host' compares to 'cloud'." |
| string | ComparisonPageButton = "See comparison page" |
| string | YourPhotonServerLabel = "Your Photon Server" |
| string | AddressIPLabel = "Address/ip:" |
| string | PortLabel = "Port:" |
| string | LicensesLabel = "Licenses" |
| string | LicenseDownloadText = "Free License Download" |
| string | LicenseDownloadTooltip = "Get your free license for up to 100 concurrent players." |
| string | TryPhotonAppLabel = "Running my own server is too much hassle..\nI want to give Photon's free app a try." |
| string | GetCloudAppButton = "Get the free cloud app" |
| string | ConnectionTitle = "Connecting" |
| string | ConnectionInfo = "Connecting to the account service.." |
| string | ErrorTextTitle = "Error" |
| string | ServerSettingsMissingLabel = "Photon Unity Networking (PUN) is missing the 'ServerSettings' script. Re-import PUN to fix this." |
| string | MoreThanOneLabel = "There are more than one " |
| string | FilesInResourceFolderLabel = " files in 'Resources' folder. Check your project to keep only one. Using: " |
| string | IncorrectRPCListTitle = "Warning: RPC-list becoming incompatible!" |
| string | IncorrectRPCListLabel = "Your project's RPC-list is full, so we can't add some RPCs just compiled.\n\nBy removing outdated RPCs, the list will be long enough but incompatible with older client builds!\n\nMake sure you change the game version where you use PhotonNetwork.ConnectUsingSettings()." |
| string | RemoveOutdatedRPCsLabel = "Remove outdated RPCs" |
| string | FullRPCListTitle = "Warning: RPC-list is full!" |
| string | FullRPCListLabel = "Your project's RPC-list is too long for PUN.\n\nYou can change PUN's source to use short-typed RPC index. Look for comments 'LIMITS RPC COUNT'\n\nAlternatively, remove some RPC methods (use more parameters per RPC maybe).\n\nAfter a RPC-list refresh, make sure you change the game version where you use PhotonNetwork.ConnectUsingSettings()." |
| string | SkipRPCListUpdateLabel = "Skip RPC-list update" |
| string | PUNNameReplaceTitle = "Warning: RPC-list Compatibility" |
| string | PUNNameReplaceLabel = "PUN replaces RPC names with numbers by using the RPC-list. All clients must use the same list for that.\n\nClearing it most likely makes your client incompatible with previous versions! Change your game version or make sure the RPC-list matches other clients." |
| string | RPCListCleared = "Clear RPC-list" |
| string | ServerSettingsCleanedWarning = "Cleared the PhotonServerSettings.RpcList! This makes new builds incompatible with older ones. Better change game version in PhotonNetwork.ConnectUsingSettings()." |
| string | BestRegionLabel = "best" |
| string Text.AccountWebsiteButton = "Open account website" |
| string Text.AddressIPLabel = "Address/ip:" |
| string Text.AppIdInfoLabel = "The AppId a Guid that identifies your game in the Photon Cloud. Find it on your dashboard page." |
| string Text.AppIdLabel = "Your AppId" |
| string Text.BestRegionLabel = "best" |
| string Text.CancelButton = "Cancel" |
| string Text.CloudRegionLabel = "Cloud Region" |
| string Text.ComparisonPageButton = "See comparison page" |
| string Text.ConnectButton = "Connect to Photon Cloud" |
| string Text.ConnectionInfo = "Connecting to the account service.." |
| string Text.ConnectionTitle = "Connecting" |
| string Text.ConverterLabel = "Converter" |
| string Text.DocumentationLabel = "Documentation" |
| string Text.EmailInUseLabel = "The provided e-mail-address has already been registered." |
| string Text.EmailLabel = "Email:" |
| string Text.ErrorTextTitle = "Error" |
| string Text.FilesInResourceFolderLabel = " files in 'Resources' folder. Check your project to keep only one. Using: " |
| string Text.FullRPCListLabel = "Your project's RPC-list is too long for PUN.\n\nYou can change PUN's source to use short-typed RPC index. Look for comments 'LIMITS RPC COUNT'\n\nAlternatively, remove some RPC methods (use more parameters per RPC maybe).\n\nAfter a RPC-list refresh, make sure you change the game version where you use PhotonNetwork.ConnectUsingSettings()." |
| string Text.FullRPCListTitle = "Warning: RPC-list is full!" |
| string Text.GetCloudAppButton = "Get the free cloud app" |
| string Text.IncorrectRPCListLabel = "Your project's RPC-list is full, so we can't add some RPCs just compiled.\n\nBy removing outdated RPCs, the list will be long enough but incompatible with older client builds!\n\nMake sure you change the game version where you use PhotonNetwork.ConnectUsingSettings()." |
| string Text.IncorrectRPCListTitle = "Warning: RPC-list becoming incompatible!" |
| string Text.KnownAppIdLabel = "Ah, I know my Application ID. Get me to setup." |
| string Text.LicenseDownloadText = "Free License Download" |
| string Text.LicenseDownloadTooltip = "Get your free license for up to 100 concurrent players." |
| string Text.LicensesLabel = "Licenses" |
| string Text.LocateSettingsButton = "Locate settings asset" |
| string Text.MainMenuButton = "Main Menu" |
| string Text.MobileExportNoteLabel = "Build for mobiles impossible. Get PUN+ or Unity Pro for mobile." |
| string Text.MobilePunPlusExportNoteLabel = "PUN+ available. Using native sockets for iOS/Android." |
| string Text.MoreThanOneLabel = "There are more than one " |
| string Text.OkButton = "Ok" |
| string Text.OopsLabel = "Oops!" |
| string Text.OpenCloudDashboardText = "Open Cloud Dashboard" |
| string Text.OpenCloudDashboardTooltip = "Review Cloud App information and statistics." |
| string Text.OpenDashboardButton = "Open Dashboard (web)" |
| string Text.OpenDevNetText = "Open DevNet" |
| string Text.OpenDevNetTooltip = "Online documentation for Photon." |
| string Text.OpenForumText = "Open Forum" |
| string Text.OpenForumTooltip = "Online support for Photon." |
| string Text.OpenPDFText = "Open PDF" |
| string Text.OpenPDFTooltip = "Opens the local documentation pdf." |
| string Text.OwnHostCloudCompareLabel = "I am not quite sure how 'my own host' compares to 'cloud'." |
| string Text.PhotonCloudConnect = "Connect to Photon Cloud" |
| string Text.PortLabel = "Port:" |
| string Text.PUNNameReplaceLabel = "PUN replaces RPC names with numbers by using the RPC-list. All clients must use the same list for that.\n\nClearing it most likely makes your client incompatible with previous versions! Change your game version or make sure the RPC-list matches other clients." |
| string Text.PUNNameReplaceTitle = "Warning: RPC-list Compatibility" |
| string Text.PUNWizardLabel = "Photon Unity Networking (PUN) Wizard" |
| string Text.QuestionsLabel = "Questions? Need help or want to give us feedback? You are most welcome!" |
| string Text.RegionalServersInfo = "Photon Cloud has regional servers. Picking one near your customers improves ping times. You could use more than one but this setup does not support it." |
| string Text.RegisterByWebsiteLabel = "I want to register by a website." |
| string Text.RemoveOutdatedRPCsLabel = "Remove outdated RPCs" |
| string Text.RPCListCleared = "Clear RPC-list" |
| string Text.SaveButton = "Save" |
| string Text.SeeForumButton = "See the Photon Forum" |
| string Text.SeeMyAccountLabel = "Mh, see my account page" |
| string Text.SeeMyAccountPage = "" |
| string Text.SeeMyAccountPageButton = "Mh, see my account page" |
| string Text.SelfHostLabel = "I want to host my own server. Let me set it up." |
| string Text.SelfHostSettingButton = "Open self-hosting settings" |
| string Text.SelfHostSettingsButton = "Open self-hosting settings" |
| string Text.SendButton = "Send" |
| string Text.ServerSettingsCleanedWarning = "Cleared the PhotonServerSettings.RpcList! This makes new builds incompatible with older ones. Better change game version in PhotonNetwork.ConnectUsingSettings()." |
| string Text.ServerSettingsMissingLabel = "Photon Unity Networking (PUN) is missing the 'ServerSettings' script. Re-import PUN to fix this." |
| string Text.SettingsButton = "Settings" |
| string Text.SettingsFileLabel = "Settings File" |
| string Text.SettingsHighlightLabel = "Highlights the used photon settings file in the project." |
| string Text.SettingsSavedMessage = "Saved your settings.\nConnectUsingSettings() will use the settings file." |
| string Text.SettingsSavedTitle = "Success" |
| string Text.SetupButton = "Setup" |
| string Text.SetupOwnHostLabel = "Setup own Photon Host" |
| string Text.SetupOwnServerLabel = "Running my app in the cloud was fun but...\nLet me setup my own Photon server." |
| string Text.SetupServerCloudLabel = "Setup wizard for setting up your own server or the cloud." |
| string Text.SetupWizardWarningMessage = "You have not yet run the Photon setup wizard! Your game won't be able to connect. See Windows -> Photon Unity Networking." |
| string Text.SetupWizardWarningTitle = "Warning" |
| string Text.SignedUpAlreadyLabel = "I am already signed up. Let me enter my AppId." |
| string Text.SkipRPCListUpdateLabel = "Skip RPC-list update" |
| string Text.StartButton = "Start" |
| string Text.TryPhotonAppLabel = "Running my own server is too much hassle..\nI want to give Photon's free app a try." |
| string Text.UNtoPUNLabel = "Converts pure Unity Networking to Photon Unity Networking." |
| string Text.UsePhotonLabel = "Using the Photon Cloud is free for development. If you don't have an account yet, enter your email and register." |
| string Text.WarningPhotonDisconnect = "" |
| string Text.WindowTitle = "PUN Wizard" |
| string Text.YourPhotonServerLabel = "Your Photon Server" |


How old are you?
What is your gender?* Male Female Other
What's your e-mail address?
Leave a short message
Submit


Cheese is an addiction.
Cheddar. Mozzarella. Parmesan. Gouda.
Burgers. Pizza. Spaghetti. Grilled cheese.
With such a huge variety in textures and tastes, and its endless flexibility with dishes, cheese is the king ingredient that shines regardless of its place as the star or side of the dish.
But.
For the newbie, starting out in the world of fromage, the endless universe of cheese can be well, scary. So choose your cheese, feed your addiction, and learn on website: Cheese for Newbies.
Don’t settle for Cheez Whiz, be a Cheese whiz. Be classy and upgrade from a newbie that stuffs their faces with random cheesie goodness (even though it tastes great!) to an expert that knows all about the cheese they put in their mouths.
Cheese your addiction.
What is cheese?
The main ingredient in this is milk. From cow, to sheep, to goat - any animal milk you can think of - cheese can be made from it.
After all, in the end, despite the huge range of tastes and texture - salty to sweet, creamy to crumbly - the base of our addiction is one thing: proceessed milk curds.
If you're vegan though, don't turn back! This website will cover vegan cheeses as well (though nutrition will differ from non-vegan varieties). But, despite being made from the same base,
the magic of this food comes from the people (and the diffrent ingredients and methods they came up with).
Different cultures came up with different methods of processing milk, and that gave birth to the wide variety that we see in the deli today!
There's Cheddar from America, Parmesan from Italy, Gouda from the Netherlands, Halloumi from Cyprus.
When you eat cheese, you're getting a taste of the different cultures of the globe!
Why make a website for beginners
If you're like me, exposed to the world of fastfood - of pizza and burgers - then your first encounter with cheese was most likely Cheedar and Mozarella. And don't get me wrong, these are great:
I can never get a burger without a piece of cheddar slipped between the buns, or a pizza with a sprinkle of extra goodness. But, to narrow your tastebuds to just the two when there's dozens of varieties available
at your local deli, and hundreds in the world to choose from...really, you're missing out.
But.
Growing up with just the basics of basics on cheese, to be introduced to others from roommates and friends, I was surprised at just how extensive a world I was missing.
Halloumi, god, this was a game changer: cheese you could fry and barbecue!
And, Brie. Man, the day I dipped a cracker in that puddle of stringy, creamy goodness...
Well, anyways. The point I wanted to get across was that I was a beginner. And this website is my way of imparting knowledge that I learned (and am still learning!) to fellow Newbies.
Health Benefits
With the huge variety of cheese to try, it’s unsurprising that the opinion on it is divided. Yes, it can be high in saturated fats and sodium. (Unhealthy!)
But yes, you can choose varieties that are low fat, and low sodium (healthy!).But, despite this division because of fat and sodium content, cheese does contain a good amount of nutrients to our body’s benefit.
Nutrients
Calcium: Calcium is good for building and maintaining your body’s bones.
Protein: Protein is necessary in muscles maintenance and building.
Magnesium: Great for bones and heart, magnesium is considered one of the body’s seven essential macronutrients.
Zinc: Supports your immune system.
Vitamin A: Helps with your immune system, vision, and your growth and development.
Vitamin D: Helps with bone and teeth development, and lowered risk of despression
Vitamin K: Aids with blood clotting to prevent excess bleeding.
To find the cheese list and start your cheesy jouney with information and recipes, click the link below or find it in the navigation bar!


Profile
Course
Report
Sign Out
Edit profile
Name
Email address
Male
Female
Update profile
Back to profile page
© 2018 - Nodejs Sample Project


Artificial Lake
问题描述 :
The oppressively hot summer days have raised the cows’ clamoring to its highest level. Farmer John has finally decided to build an artificial lake. For his engineering studies, he is modeling the lake as a two-dimensional landscape consisting of a contiguous sequence of N soon-to-be-submerged levels (1 ≤ N ≤ 100,000) conveniently numbered 1..N from left to right.
Each level i is described by two integers, its width Wi (1 ≤ Wi ≤ 1,000) and height (like a relative elevation) Hi (1 ≤ Hi ≤ 1,000,000). The heights of FJ’s levels are unique. An infinitely tall barrier encloses the lake’s model on the left and right. One example lake profile is shown below.
* * :
* * :
* * 8
* *** * 7
* *** * 6
* *** * 5
* ********** 4 * ********** 3
*************** 2
*************** 1
Level | 1 |2| 3 |
In FJ’s model, he starts filling his lake at sunrise by flowing water into the bottom of the lowest elevation at a rate of 1 square unit of water per minute. The water falls directly downward until it hits something, and then it flows and spreads as room-temperature water always does. As in all good models, assume that falling and flowing happen instantly. Determine the time at which each elevation’s becomes submerged by a single unit of water.
WATER WATER OVERFLOWS
| |
* | * * | * * *
* V * * V * * *
* * * .... * *~~~~~~~~~~~~*
* ** * *~~~~** : * *~~~~**~~~~~~*
* ** * *~~~~** : * *~~~~**~~~~~~*
* ** * *~~~~**~~~~~~* *~~~~**~~~~~~*
* ********* *~~~~********* *~~~~*********
*~~~~********* *~~~~********* *~~~~*********
************** ************** **************
************** ************** **************
After 4 mins After 26 mins After 50 mins
Lvl 1 submerged Lvl 3 submerged Lvl 2 submerged
Warning: The answer will not always fit in 32 bits.
输入:
* Line 1: A single integer: N
* Lines 2..N+1: Line i+1 describes level i with two space-separated integers: Wi and Hi
输出:
* Lines 1..N: Line i contains a single integer that is the number of minutes that since sunrise when level #i is covered by water of height 1.
样例输入:
3 4 2 2 7 6 4
样例输出:
4 50 26
解题代码:
//* @author /** * @version 2009/08/21 * @author sbzlyessit */ import java.io.*; import java.util.*; public class Main { private static final int MAX_N = 100000; private static BufferedReader in =new BufferedReader(new InputStreamReader(System.in)); private static StringTokenizer st; private static int[] height = new int[MAX_N]; private static long[] width = new long[MAX_N + 1]; private static long[] area = new long[MAX_N + 1]; private static int[] l = new int[MAX_N], r = new int[MAX_N]; private static int[] stack = new int[MAX_N + 1]; private static int[] min = new int[MAX_N], max = new int[MAX_N]; private static long[] base = new long[MAX_N]; private static boolean[] used = new boolean[MAX_N]; private static long[] result = new long[MAX_N]; private static int N, pos, root; public static void main(String[] argv) throws Exception { readIn(); solve(); } private static void readIn() throws Exception { int top = 0, minH = Integer.MAX_VALUE; int i, x; N = nextInt(); width[0] = area[0] = 0; for (i = 0; i < N; i++) { x = nextInt(); height[i] = nextInt(); width[i + 1] = width[i] + x; area[i + 1] = area[i] + (long) x * height[i]; if (height[i] < minH) { minH = height[i]; pos = i; } for (stack[top] = -1; top > 0 && height[stack[top - 1]] < height[i]; top--); if (top > 0) { r[stack[top - 1]] = i; } l[i] = stack[top] != -1 ? stack[top] : -1; r[i] = -1; stack[top++] = i; } root = stack[0]; } private static void solve() { int top = 0; int i, x, y; stack[top++] = root; min[root] = 0; max[root] = N; base[root] = 0; while (top > 0) { x = stack[top - 1]; if (!used[x]) { result[x] = base[x] + (width[max[x]] - width[min[x]]) * (height[x] + 1) - area[max[x]] + area[min[x]]; used[stack[top - 1]] = true; } if ((y = getChild(x)) == 0) { top--; } else if (y < 0) { stack[top++] = l[x]; min[l[x]] = min[x]; max[l[x]] = x; base[l[x]] = base[x] + (pos > x ? (width[max[x]] - width[x + 1]) * height[x] - area[max[x]] + area[x + 1] : 0); } else { stack[top++] = r[x]; min[r[x]] = x + 1; max[r[x]] = max[x]; base[r[x]] = base[x] + (pos < x ? (width[x] - width[min[x]]) * height[x] - area[x] + area[min[x]] : 0); } } for (i = 0; i < N; i++) { System.out.println(result[i]); } } private static int getChild(int x) { if (l[x] != -1 && !used[l[x]]) { return -1; } else if (r[x] != -1 && !used[r[x]]) { return 1; } return 0; } private static int nextInt() throws Exception { while (st == null || !st.hasMoreTokens()) { st = new StringTokenizer(in.readLine()); } return Integer.parseInt(st.nextToken()); } }
其实就是DFS搜索，数据量较小，穷举了所有情况
惊艳了，没想到代码如此简洁
厉害啊，我遇见数学问题就头疼！
if(j){
int ans=a ;
for(int x=j-1;x>=0;x–){
if(!a ) break;
ans=min(ans,a );
sum+=ans;
}
}
求解释，，dp的思路是什么呢？
不是HDU 2411。。标题党么。。。
6题应该就是算概率的吧
题目需要求解的是最小值，而且没有考虑可能存在环
分析的很详细！赞一个
真心不错，力顶作者
C语言版本的代码好像有点问题
后面的掩码变量部分乍一看比较难理解，其实就是把32位按照一个整体来看待。
有点意思
已修正


STATUS |
Status | Mounted |
NETWORK |
Download rate | 10 MB/s |
| Upload rate | 1 MB/s | |
| Host:Port | domain.dev:1234 | |
CACHE |
Blocks (4096 Bytes) | 123 |
| Write Cache | 10 MB | |
| Decrypted Blocks | 1 | |
| Commits in queue | 5 | |
FILESYSTEM |
Open inodes | 8 |
| Number of inodes | 48678 | |
| Fragments | 48678 | |
| Fragmentation | 0.1% | |
CONTAINER |
Size | 42 GB |
| Empty space at end | 1.3 GB | |
| Mountpoint | X: |