#include "UTConfig.h"
#include "UTX.h"
#include <winsock.h>
Go to the source code of this file.
Classes | |
| struct | UT_message_t |
| message structure. More... | |
| struct | UT_message_queue_t |
| circular message queue structure. More... | |
| struct | UT_buffered_message_queue_t |
| buffered message queue. More... | |
Defines | |
| #define | UTMSG_INVALID 0 |
| this is an invalid message code and should never occur. | |
| #define | UTMSG_CLIENT_CREATE 1 |
| Client to server message codes. | |
| #define | UTMSG_CLIENT_OPEN 3 |
| UTMSG_CLIENT_OPEN: opens an uber-texture. | |
| #define | UTMSG_CLIENT_FINALIZE 4 |
| UTMSG_CLIENT_FINALIZE: finalizes an uber-texture. | |
| #define | UTMSG_CLIENT_CLOSE 5 |
| UTMSG_CLIENT_CLOSE: closes an uber-texture. | |
| #define | UTMSG_CLIENT_READ 6 |
| UTMSG_CLIENT_READ: reads a tile from an ubertexture. | |
| #define | UTMSG_CLIENT_READCANCEL 7 |
| UTMSG_CLIENT_READCANCEL: cancels a read from an ubertexture. | |
| #define | UTMSG_CLIENT_MULTI_READ 8 |
| UTMSG_CLIENT_MULTI_READ: reads multiple tiles from an ubertexture. | |
| #define | UTMSG_CLIENT_WRITE 9 |
| UTMSG_CLIENT_WRITE: reads a tile from an ubertexture. | |
| #define | UTMSG_CLIENT_DIR_LISTING 10 |
| UTMSG_CLIENT_DIR_LISTING: returns a list of ubertextures in a given path. | |
| #define | UTMSG_ERROR 11 |
| UTMSG_ERROR: sent whenever a message request fails. | |
| #define | UTMSG_MULTI_READ_ERROR 11 |
| UTMSG_MULTIREAD_ERROR: sent whenever a multi-read request fails. Note. | |
| #define | UTMSG_CLIENT_PING 255 |
| UTMSG_CLIENT_PING: pings the ubertexture server. | |
Typedefs | |
| typedef const char * | buf |
| typedef const char int | len |
| typedef const char int int | flags |
| typedef long | cmd |
| typedef long unsigned long * | argp |
Functions | |
| typedef | int (__stdcall *SendProc)(SOCKET s |
| Purpose: To provide an interface for simple networking. | |
| int | UTMessageSend (SOCKET socket, UT_message_t *message, SendProc recvProc=send) |
| Message handling. | |
| int | UTMessageRecv (UT_message_t *message, SOCKET socket, RecvProc recvProc=recv, IoctlProc ioctlProc=ioctlsocket) |
| void | UTMessageInit (UT_message_t *message) |
| UTMessageInit: initalizes the message passed in. | |
| bool | UTMessageReady (const UT_message_t *message) |
| UTMessageReady: returns true if the message is ready. | |
| bool | UTMessageEmpty (const UT_message_t *message) |
| unsigned int | UTMessageSize (const UT_message_t *message) |
| UTMessageSize: returns the total size of the message in bytes. | |
| bool | UTMessageReadBegin (UT_message_t *message) |
| message reading utilities. | |
| void | UTMessageReadEnd (UT_message_t *message) |
| bool | UTMessageReadShort (short *value, UT_message_t *message) |
| bool | UTMessageReadInt (int *value, UT_message_t *message) |
| bool | UTMessageReadUInt (unsigned int *value, UT_message_t *message) |
| bool | UTMessageReadStr (char *buffer, int bufLen, UT_message_t *message) |
| bool | UTMessageReadBytes (char *buffer, int bufLen, UT_message_t *message) |
| bool | UTMessageDecompressData (void *buffer, int bufLen, UT_message_t *message) |
| char * | UTMessageGetData (UT_message_t *message, int size) |
| bool | UTMessageWriteBegin (UT_message_t *message, int code, unsigned int transactionId) |
| message writing utilities. | |
| void | UTMessageWriteEnd (UT_message_t *message) |
| bool | UTMessageWriteShort (UT_message_t *message, short value) |
| bool | UTMessageWriteInt (UT_message_t *message, int value) |
| bool | UTMessageWriteUInt (UT_message_t *message, unsigned int value) |
| bool | UTMessageWriteStr (UT_message_t *message, const char *str) |
| bool | UTMessageWriteBytes (UT_message_t *message, const void *data, size_t len) |
| bool | UTMessageCompressData (UT_message_t *message, const void *src, int srcSize) |
| char * | UTMessageReserveData (UT_message_t *message, int size) |
| void | UTMessageQueueCreate (UT_message_queue_t *queue, size_t size) |
| Message queue functions. | |
| void | UTMessageQueueExpand (UT_message_queue_t *queue, size_t size) |
| UTMessageQueueResize: resizes memory allocated to the message queue. | |
| void | UTMessageQueueDestroy (UT_message_queue_t *queue) |
| UTMessageQueueDestroy: frees memory allocated to the message queue. | |
| UT_message_t * | UTMessageQueueAdd (UT_message_queue_t *queue) |
| UT_message_t * | UTMessageQueueRemove (UT_message_queue_t *queue) |
| UTMessageQueueRemove: returns the last item in the queue and removes it. | |
| UT_message_t * | UTMessageQueueTop (UT_message_queue_t *queue) |
| UTMessageQueuePeek: returns the first item in the queue. | |
| UT_message_t * | UTMessageQueuePeek (UT_message_queue_t *queue, size_t message=0) |
| UTMessageQueuePeek: returns the last item in the queue. | |
| size_t | UTMessageQueueCount (UT_message_queue_t *queue) |
| UTMessageQueueCount: returns the total number of messages in the queue. | |
| bool | UTMessageQueueFull (UT_message_queue_t *queue) |
| UTMessageQueueRemove: returns true if the queue is full. | |
| void | UTMessageQueueClear (UT_message_queue_t *queue) |
| UTMessageQueueRemove: removes all items from the queue. | |
| int | UTMessageQueueSend (SOCKET socket, UT_message_queue_t *queue, char *buf, size_t bufSize, int *bytesSent=0, SendProc sendProc=send) |
| void | UTMessageQueueRecv (UT_message_queue_t *queue, SOCKET socket, int *bytesReceived=0, RecvProc recvProc=recv, IoctlProc ioctlProc=ioctlsocket) |
| #define UTMSG_CLIENT_CLOSE 5 |
UTMSG_CLIENT_CLOSE: closes an uber-texture.
Parameters: Acknowledgement:
Definition at line 128 of file UTMessage.h.
| #define UTMSG_CLIENT_CREATE 1 |
Client to server message codes.
UTMSG_CLIENT_CREATE: creates an uber-texture. Parameters: Acknowledgement:
Definition at line 70 of file UTMessage.h.
| #define UTMSG_CLIENT_DIR_LISTING 10 |
UTMSG_CLIENT_DIR_LISTING: returns a list of ubertextures in a given path.
Parameters: Acknowledgement:
Definition at line 196 of file UTMessage.h.
| #define UTMSG_CLIENT_FINALIZE 4 |
UTMSG_CLIENT_FINALIZE: finalizes an uber-texture.
Parameters: Acknowledgement:
Definition at line 118 of file UTMessage.h.
| #define UTMSG_CLIENT_MULTI_READ 8 |
UTMSG_CLIENT_MULTI_READ: reads multiple tiles from an ubertexture.
Parameters: Acknowledgement:
Definition at line 172 of file UTMessage.h.
| #define UTMSG_CLIENT_OPEN 3 |
UTMSG_CLIENT_OPEN: opens an uber-texture.
Parameters: Acknowledgement:
Definition at line 106 of file UTMessage.h.
| #define UTMSG_CLIENT_PING 255 |
UTMSG_CLIENT_PING: pings the ubertexture server.
Parameters: Acknowledgement:
Definition at line 219 of file UTMessage.h.
| #define UTMSG_CLIENT_READ 6 |
UTMSG_CLIENT_READ: reads a tile from an ubertexture.
Parameters: Acknowledgement:
Definition at line 145 of file UTMessage.h.
| #define UTMSG_CLIENT_READCANCEL 7 |
UTMSG_CLIENT_READCANCEL: cancels a read from an ubertexture.
Parameters: Acknowledgement:
Definition at line 155 of file UTMessage.h.
| #define UTMSG_CLIENT_WRITE 9 |
UTMSG_CLIENT_WRITE: reads a tile from an ubertexture.
Parameters: Acknowledgement:
Definition at line 186 of file UTMessage.h.
| #define UTMSG_ERROR 11 |
UTMSG_ERROR: sent whenever a message request fails.
Data:
Definition at line 202 of file UTMessage.h.
| #define UTMSG_INVALID 0 |
| #define UTMSG_MULTI_READ_ERROR 11 |
UTMSG_MULTIREAD_ERROR: sent whenever a multi-read request fails. Note.
Data:
Definition at line 210 of file UTMessage.h.
| typedef long unsigned long* argp |
Definition at line 21 of file UTMessage.h.
| typedef char * buf |
Definition at line 19 of file UTMessage.h.
| typedef long cmd |
Definition at line 21 of file UTMessage.h.
| typedef char int int flags |
Definition at line 19 of file UTMessage.h.
| typedef char int len |
Definition at line 19 of file UTMessage.h.
| typedef int | ( | __stdcall * | SendProc | ) |
Purpose: To provide an interface for simple networking.
File: UTMessage.h Author: Kevin Bray Created: 11-23-07 Copyright © 2004 Bootstrap Studios. All rights reserved. project includes. system includes.
| bool UTMessageCompressData | ( | UT_message_t * | message, | |
| const void * | src, | |||
| int | srcSize | |||
| ) |
reserve room for the size.
try to compress the data.
copy raw data.
write the size.
if we compressed the data successfully, adjust our size and return.
return true to indicate success.
Definition at line 398 of file UTMessage.cpp.
| bool UTMessageDecompressData | ( | void * | buffer, | |
| int | bufLen, | |||
| UT_message_t * | message | |||
| ) |
get the source size.
decompress the data.
copy raw data.
return true to indicate success.
Definition at line 249 of file UTMessage.cpp.
| bool UTMessageEmpty | ( | const UT_message_t * | message | ) |
UTMessageEmpty: returns true if the message is currently in it's initial empty state.
Definition at line 140 of file UTMessage.cpp.
| char* UTMessageGetData | ( | UT_message_t * | message, | |
| int | size | |||
| ) |
make sure the length isn't too long.
get the pointer to the data.
advance the offset.
return the pointer to the data.
Definition at line 272 of file UTMessage.cpp.
| void UTMessageInit | ( | UT_message_t * | message | ) |
| UT_message_t* UTMessageQueueAdd | ( | UT_message_queue_t * | queue | ) |
UTMessageQueueAdd: adds a new message to the queue and returns a pointer to that message. If the queue is full, then this function returns NULL.
calculate how many items are in the current in the queue.
simply return null if the queue is full.
calculate a pointer to the first free message and advance the head.
initialize the message.
return the message.
Definition at line 489 of file UTMessage.cpp.
| void UTMessageQueueClear | ( | UT_message_queue_t * | queue | ) |
UTMessageQueueRemove: removes all items from the queue.
clear the head and the tail.
Definition at line 556 of file UTMessage.cpp.
| size_t UTMessageQueueCount | ( | UT_message_queue_t * | queue | ) |
UTMessageQueueCount: returns the total number of messages in the queue.
returns number of messages in the queue.
Definition at line 542 of file UTMessage.cpp.
| void UTMessageQueueCreate | ( | UT_message_queue_t * | queue, | |
| size_t | size | |||
| ) |
Message queue functions.
UTMessageQueueCreate: initializes a new message queue.
initialize queue data.
Definition at line 447 of file UTMessage.cpp.
| void UTMessageQueueDestroy | ( | UT_message_queue_t * | queue | ) |
UTMessageQueueDestroy: frees memory allocated to the message queue.
free memory allocated to the queue.
Definition at line 479 of file UTMessage.cpp.
| void UTMessageQueueExpand | ( | UT_message_queue_t * | queue, | |
| size_t | size | |||
| ) |
UTMessageQueueResize: resizes memory allocated to the message queue.
allocate new memory.
copy the previous data.
free the old queue data.
adjust data in the queue.
Definition at line 457 of file UTMessage.cpp.
| bool UTMessageQueueFull | ( | UT_message_queue_t * | queue | ) |
UTMessageQueueRemove: returns true if the queue is full.
returns true if the queue is full.
Definition at line 549 of file UTMessage.cpp.
| UT_message_t* UTMessageQueuePeek | ( | UT_message_queue_t * | queue, | |
| size_t | message = 0 | |||
| ) |
UTMessageQueuePeek: returns the last item in the queue.
return the last item in the queue if the queue isn't empty.
return null to indicate that there is nothing in the queue.
Definition at line 531 of file UTMessage.cpp.
| void UTMessageQueueRecv | ( | UT_message_queue_t * | queue, | |
| SOCKET | socket, | |||
| int * | bytesReceived = 0 , |
|||
| RecvProc | recvProc = recv , |
|||
| IoctlProc | ioctlProc = ioctlsocket | |||
| ) |
UTMessageQueueSend: sends as many messages in the queue as possible. Returns 1 on success, 0 if not complete, and -1 on error.
recv incoming messages.
get the top message.
do we need to add a new message to the queue?
Definition at line 639 of file UTMessage.cpp.
| UT_message_t* UTMessageQueueRemove | ( | UT_message_queue_t * | queue | ) |
UTMessageQueueRemove: returns the last item in the queue and removes it.
UTMessageQueueRemove: removes the last item in the queue.
remove the item from the bottom of the queue.
return null to indicate that there is nothing to remove.
Definition at line 509 of file UTMessage.cpp.
| int UTMessageQueueSend | ( | SOCKET | socket, | |
| UT_message_queue_t * | queue, | |||
| char * | buf, | |||
| size_t | bufSize, | |||
| int * | bytesSent = 0 , |
|||
| SendProc | sendProc = send | |||
| ) |
UTMessageQueueSend: sends as many messages in the queue as possible. Returns 1 on success, 0 if not complete, and -1 on error.
go through messages in the queue and combine them.
simply return if there isn't anything to do!
get the current message to send.
get the size of the current message, minus the send offset.
did we exhaust our buffer? If so, break.
add the message to the buffer.
update the buffer offset.
try to send the message data.
is the port ready?
return the number of bytes sent if necessary.
remove messages from the queue.
get the current message.
get the total size of the message data sent.
remove the message from the queue.
adjust the offset of the current message and clear the data sent.
return 1 if there are no more messages in the queue, or 0 if there are messages remaining.
Definition at line 564 of file UTMessage.cpp.
| UT_message_t* UTMessageQueueTop | ( | UT_message_queue_t * | queue | ) |
UTMessageQueuePeek: returns the first item in the queue.
return the first item in the queue if the queue isn't empty.
return null to indicate that there is nothing in the queue.
Definition at line 520 of file UTMessage.cpp.
| bool UTMessageReadBegin | ( | UT_message_t * | message | ) |
message reading utilities.
make sure the message isn't empty.
set the offset to the beginning of data, minus the data size.
return true to indicate success.
Definition at line 152 of file UTMessage.cpp.
| bool UTMessageReadBytes | ( | char * | buffer, | |
| int | bufLen, | |||
| UT_message_t * | message | |||
| ) |
| void UTMessageReadEnd | ( | UT_message_t * | message | ) |
| bool UTMessageReadInt | ( | int * | value, | |
| UT_message_t * | message | |||
| ) |
make sure we have enough data to satisfy the request.
store the value.
return true to indicate success.
Definition at line 188 of file UTMessage.cpp.
| bool UTMessageReadShort | ( | short * | value, | |
| UT_message_t * | message | |||
| ) |
make sure we have enough data to satisfy the request.
store the value.
return true to indicate success.
Definition at line 173 of file UTMessage.cpp.
| bool UTMessageReadStr | ( | char * | buffer, | |
| int | bufLen, | |||
| UT_message_t * | message | |||
| ) |
read the length from the message.
make sure the length isn't too long.
subtract one from the overall length of the buffer.
calculate the copy size.
copy the data and append the null terminator.
advance past the string.
return true to indicate success.
Definition at line 218 of file UTMessage.cpp.
| bool UTMessageReadUInt | ( | unsigned int * | value, | |
| UT_message_t * | message | |||
| ) |
make sure we have enough data to satisfy the request.
store the value.
return true to indicate success.
Definition at line 203 of file UTMessage.cpp.
| bool UTMessageReady | ( | const UT_message_t * | message | ) |
| int UTMessageRecv | ( | UT_message_t * | message, | |
| SOCKET | socket, | |||
| RecvProc | recvProc = recv , |
|||
| IoctlProc | ioctlProc = ioctlsocket | |||
| ) |
UTGetMessage: gets a message from the socket specified. Note that the pointer returned by this function cannot be used after any other calls to UTGetMessage() or UTSendMessage(). Returns 1 on success, 0 if not complete, and -1 on error.
if the message is already finished, simply return 1.
check to see how much data is waiting.
simply return true if no data is waiting.
are we reading the header?
simply return if there isn't enough data to read the header.
read the header.
update the message offset.
if there isn't any more data waiting after reading the header, simply return.
not finished reading.
determine now much data still needs to be read for the message.
read as much data as possible.
read as much message data as possible.
is data ready?
return false to indicate failure.
update the message buffer offset.
return true to indicate success.
Definition at line 60 of file UTMessage.cpp.
| char* UTMessageReserveData | ( | UT_message_t * | message, | |
| int | size | |||
| ) |
make sure the length isn't too long.
calculate the starting address and update the offset.
return the starting address.
Definition at line 432 of file UTMessage.cpp.
| int UTMessageSend | ( | SOCKET | socket, | |
| UT_message_t * | message, | |||
| SendProc | sendProc | |||
| ) |
Message handling.
UTSendMessage: sends a message to the socket specified. Returns 1 on success, 0 if not complete, and -1 on error.
make sure the message isn't too large.
everything was already sent, so just notify the caller of the previous success.
try to send the message data.
is the port ready?
advance the offset.
return 1 if the entire message was sent, 0 if not.
Definition at line 27 of file UTMessage.cpp.
| unsigned int UTMessageSize | ( | const UT_message_t * | message | ) |
UTMessageSize: returns the total size of the message in bytes.
Definition at line 146 of file UTMessage.cpp.
| bool UTMessageWriteBegin | ( | UT_message_t * | message, | |
| int | code, | |||
| unsigned int | transactionId | |||
| ) |
message writing utilities.
store the message code.
reset message data.
return true to indicate success.
Definition at line 289 of file UTMessage.cpp.
| bool UTMessageWriteBytes | ( | UT_message_t * | message, | |
| const void * | data, | |||
| size_t | len | |||
| ) |
bad data?
make sure the length isn't too long.
copy the data.
update the offset.
return true to indicate success.
Definition at line 377 of file UTMessage.cpp.
| void UTMessageWriteEnd | ( | UT_message_t * | message | ) |
Definition at line 304 of file UTMessage.cpp.
| bool UTMessageWriteInt | ( | UT_message_t * | message, | |
| int | value | |||
| ) |
make sure we have enough data to satisfy the request.
store the value.
return true to indicate success.
Definition at line 325 of file UTMessage.cpp.
| bool UTMessageWriteShort | ( | UT_message_t * | message, | |
| short | value | |||
| ) |
make sure we have enough data to satisfy the request.
store the value.
return true to indicate success.
Definition at line 310 of file UTMessage.cpp.
| bool UTMessageWriteStr | ( | UT_message_t * | message, | |
| const char * | str | |||
| ) |
make sure the length isn't too long.
write the length of the string.
copy the string data (excluding the null terminator).
update the offset.
return true to indicate success.
Definition at line 355 of file UTMessage.cpp.
| bool UTMessageWriteUInt | ( | UT_message_t * | message, | |
| unsigned int | value | |||
| ) |
make sure we have enough data to satisfy the request.
store the value.
return true to indicate success.
Definition at line 340 of file UTMessage.cpp.


| 1 | package fr.sii.ogham.testing.helper.email; | |
| 2 | ||
| 3 | import java.util.ArrayList; | |
| 4 | import java.util.Arrays; | |
| 5 | import java.util.List; | |
| 6 | ||
| 7 | /** | |
| 8 | * Class used in tests for ensuring that the email is respected. It provides the | |
| 9 | * following information: | |
| 10 | *
 | |
| 11 | *
The expected subject
 | |
| 12 | *
The expected sender address
 | |
| 13 | *
The expected recipients (to, cc, bcc)
 | |
| 14 | *
 | |
| 15 | * | |
| 16 | * @author Aurélien Baudet | |
| 17 | * | |
| 18 | */ | |
| 19 | public class ExpectedEmailHeader { | |
| 20 | /** | |
| 21 | * The expected subject | |
| 22 | */ | |
| 23 | protected String subject; | |
| 24 | | |
| 25 | /** | |
| 26 | * The expected sender address | |
| 27 | */ | |
| 28 | protected String from; | |
| 29 | | |
| 30 | /** | |
| 31 | * The expected list of recipients for the "to" field | |
| 32 | */ | |
| 33 | protected List<String> to = new ArrayList<>(); | |
| 34 | ||
| 35 | /** | |
| 36 | * The expected list of recipients for the "cc" field | |
| 37 | */ | |
| 38 | protected List<String> cc = new ArrayList<>(); | |
| 39 | ||
| 40 | /** | |
| 41 | * The expected list of recipients for the "bcc" field | |
| 42 | */ | |
| 43 | protected List<String> bcc = new ArrayList<>(); | |
| 44 | ||
| 45 | public ExpectedEmailHeader(String subject, String from, String... to) { | |
| 46 | this(subject, from, new ArrayList<>(Arrays.asList(to))); | |
| 47 | } | |
| 48 | ||
| 49 | public ExpectedEmailHeader(String subject, String from, List<String> to) { | |
| 50 | super(); | |
| 51 | this.subject = subject; | |
| 52 | this.from = from; | |
| 53 | this.to = to; | |
| 54 | } | |
| 55 | ||
| 56 | public String getSubject() { | |
| 57 |
1
1. getSubject : replaced return value with "" for fr/sii/ogham/testing/helper/email/ExpectedEmailHeader::getSubject → NO_COVERAGE |
return subject; |
| 58 | } | |
| 59 | ||
| 60 | public String getFrom() { | |
| 61 |
1
1. getFrom : replaced return value with "" for fr/sii/ogham/testing/helper/email/ExpectedEmailHeader::getFrom → NO_COVERAGE |
return from; |
| 62 | } | |
| 63 | ||
| 64 | public List<String> getTo() { | |
| 65 |
1
1. getTo : replaced return value with Collections.emptyList for fr/sii/ogham/testing/helper/email/ExpectedEmailHeader::getTo → NO_COVERAGE |
return to; |
| 66 | } | |
| 67 | ||
| 68 | public List<String> getCc() { | |
| 69 |
1
1. getCc : replaced return value with Collections.emptyList for fr/sii/ogham/testing/helper/email/ExpectedEmailHeader::getCc → NO_COVERAGE |
return cc; |
| 70 | } | |
| 71 | ||
| 72 | public List<String> getBcc() { | |
| 73 |
1
1. getBcc : replaced return value with Collections.emptyList for fr/sii/ogham/testing/helper/email/ExpectedEmailHeader::getBcc → NO_COVERAGE |
return bcc; |
| 74 | } | |
| 75 | ||
| 76 | public void setCc(String... cc) { | |
| 77 | this.cc = new ArrayList<>(Arrays.asList(cc)); | |
| 78 | } | |
| 79 | ||
| 80 | public void setBcc(String... bcc) { | |
| 81 | this.bcc = new ArrayList<>(Arrays.asList(bcc)); | |
| 82 | } | |
| 83 | } | |
Mutations | ||
| 57 |
1.1 |
|
| 61 |
1.1 |
|
| 65 |
1.1 |
|
| 69 |
1.1 |
|
| 73 |
1.1 |


9 Grouping with pivot tables
In the wake of a police shooting in 2016, reporter Mitch Smith obtained a list of traffic stops from the St. Anthony Police Department in Minnesota. He was writing a story on Philandro Castile’s death and was running out of time. He wanted to answer a simple question: Were minority motorists more likely to be stopped in St. Anthony than whites?
Rob Gebeloff made a quick pivot table to answer the question. That night, Smith wrote:
In each of the three small suburbs patrolled by the St. Anthony police, less than 10 percent of the population is black. But data released by the city on Tuesday showed that a far higher percentage of the people ticketed or arrested by St. Anthony officers were African-American.
Last year, around 19 percent of those cited by St. Anthony police were black, as were roughly 41 percent of people arrested by the department, a review of the city’s data showed. Those percentages do not include the large number of defendants whose race was unknown.
Summarizing a list of items in a spreadsheet is done using pivot tables. In other languages, it’s considered “aggregating” or “grouping and summarizing”. Think of pivot tables and grouping as answering the questions, “How many?” and “How much?” They are particularly powerful when your question also has the words “the most” or the “the least” or “of each”. Some examples:
- Which Zip Code had the most crimes?
- What month had the least total rainfall?
- How much did each candidate raise last quarter?
- In playing cards, how many of each suit do I have in my hand?
- On average, are Cronkite students taller or shorter than in other schools?
Confusing grouping with sorting or arranging
Many reporters confuse this summarization with “sorting”. One reason is that this is how we express the concept in plain language: “I want to sort Skittles by color.”
But in data analysis, sorting and and grouping are very different things. Sorting involves shuffling a table’s rows into some order based on the values in a column. In other languages, this is called arranging or ordering, much clearer concepts. Grouping, which is what pivot tables do, is a path to aggregating and computing summary statistics such as a count (the number of items), sum (how much they add up to), or average for category. It means “make piles and compute statistics for each one.”
When to use filter vs. pivot tables
Something that trips up beginners is a desire to see details and totals at the same time, which is more difficult than it sounds.
A filter is used to display your selected items as a list. You’ll get to see all of the detail and every column. As a convenience, Google Sheets shows you how many items are in that filtered list. That’s great when you want to just look at them, or get more information about them. For instance, if you had a list of crimes by ZIP code, you might just want to see the list in your neighborhood – where, exactly, were they? When did they happen? Was it at night or the morning? What crimes happened on which blocks?
A pivot table is used when you just want to see summaries – does my ZIP code have more crime than others? Are robberies more common than car theft in my Zip code, and how does that compare to others?
In practice, you’ll go back and forth between summary and detail. They’re both important, just different.
9.1 Tutorial
::: {.alert .alert-info .opacity-2} We will continue to use data from the Washington Post police shootings database for this tutorial.
First, let’s modify this spreadsheet to include the descriptions of race and ethnicities: A for Asian, B for Black, etc.
- Select Column I, city, and insert a new column to the left. Name it race_ethicity
- Create a filter. Select race, filter for A
- Type Asian in Column I. Copy Asian down the entire column so every A in column H corresponds with Asian in Column I
- Repeat: B = Black. H = Hispanic. W = White, non-Hispanic, N= Native American, O=Other, blanks=Unknown.
Follow this video to see the process.
Setting up the pivot table
From the main menu on Google Sheets, choose Insert, then Pivot table, then New sheet.
Next, you will see the Pivot Table editor. Here’s what it looks like:
Counting , or “how many”?
For Rows, select Add and then race_ethnicity. For values, select Add and then state. You will now see all of the race and ethnicity totaled.
We’re totalling on state because it’s good to have something that’s always filled out into the Values area (state
is a safe one in this data).
Percents of total
It’s hard to compare raw numbers unless they’re really small. Instead, we’d like to know what percent of fatalities by ethnicity. To get a “Percent of Column total”, do the following:
- Add a second values, select state
- Under Show as, select “% of grand total”
More variables
Suppose you’d like to see the number of fatalities by year, with the years across the top and the ethnicity
down the sides. Add a year variable to columns
- Remove the percent of total column
- Select Columns, then year
Even more variables
Say you wanted to see each city’s total shootings by year. Which one had the most last year, and which one had the most overall?
This is actually really hard in a pivot table, because there are cities with the same names in different states. It means you’d need to have a pivot table with TWO columns down the side, and one across the top. Here’s an attempt at solving the problems:
- First, Rows, add state
- Rows, add city
- Values, add state, CountA is the default
- Columns, add year
The problems is we can’t sort by the combination of city and state. But it does help answer the question on some level.
9.2 FAQ
I have too many columns
If you want two sets of statistics – say, number of fatalities and percent of fatalities – across the top, it can get very wide and confusing very quickly. One alternative is to change it into more of a vertical rectangle by dragging the “Values” element from the columns to the rows on the right. (This only shows up when you have two calculations being made.)
I want to sort by percents, not numbers
You can’t.
Things aren’t adding up
You have to be super careful about which column you use to Count things – it has to always be filled out (there can’t be any blanks). Go through the filters and find one that doesnt have (Blanks) at the bottom to be sure.
Its a crazy number!
You might have dragged a numeric column into the “Values” area. Check to see if it says “Count” or “Sum”. Change it to “Count” if it has something else on it, unless you wanted to add up that column.
This is so frustrating - I can’t get what I want
Right? It’s time to go to a programming language!


Text to Save:
Filename to Save As:
Save Text to File
Select a File to Load:
Load Selected File
xxx
Load 123456
XXXZZZXXX
Change Content


Just over four weeks ago, I released FW/1 3.0 Alpha 1 and declared it feature complete. There were some big changes in that release and, in particular, some long-standing features were removed (after being deprecated in FW/1 2.5) and some recently-introduced features were also deprecated. Today I am releasing the first Beta version which includes bug fixes and usability enhancements, focusing primarily on DI/1 and AOP/1.
You can download FW/1 3.0 Beta 1 from Github and that release page has a link to the complete list of closed tickets in FW/1 3.0 Beta 1 and closed tickets in DI/1 that are for FW/1 3.0. Note that those issues are only fixed in the FW/1 repository, not the DI/1 repository, but they will be backported later on.
DI/1 and AOP/1 come of age
As indicated above, the focus of Beta 1 has been on cleaning up DI/1 and AOP/1 to get them to a “1.0” release status as part of FW/1 3.0. Going forward, the DI/1 and AOP/1 repositories will only get updated with released versions and will be stripped down to minimal examples for those who wish to use them standalone. Future development (including issues and test cases etc) will all be done in the FW/1 repository.
DI/1 has been enhanced in this release to provide some features that will help developers migrating from ColdSpring (or who are looking for some of ColdSpring’s more advanced features in DI/1).
AOP/1 has been rewritten to better integrate with DI/1 and ensure that injected beans are intercepted (the beanProxy.cfc
needed only minor tweaks and it does the heavy lifting of interception).
Here is the full list of changes in DI/1 and AOP/1 (since Alpha 1):
- Dotted path deduction rewritten / improved di1/#61. There were a number of situations where DI/1 was unable to figure out a dotted component path for CFCs identified through relative folder paths, especially outside the primary webroot of an application. This should be addressed now!
- New option
omitDirectoryAliases
– defaultfalse
di1/#64. Set thistrue
if you want to suppress the directory-based aliases that DI/1 creates (e.g.,beans/user.cfc
=>userBean
). This will enforce uniqueness of bean names (since the suffix will no longer differentiate beans with the same name in different folders). - IIS web server mapping case sensitivity di1/#65. A bug fix for an annoying edge case caused by IIS being case sensitive in a situation that caused hard-to-debug errors from DI/1.
- AOP/1 now handles intercepted methods that return null #264. Self-explanatory.
- DI/1 now accepts a load listener as part of its configuration #273. This was added to allow load listeners to be added easily via
diConfig
when using FW/1. A load listener is the recommended way to declare new beans, add aliases and additional beans and set up factory beans/methods (see next item).
The following DI/1 setups are now equivalent:
var bf1 = new framework.ioc( "..." );
bf1.onLoad( myListener );
var bf2 = new framework.ioc( "...", { loadListener = myListener } );
- DI/1 now supports factory beans / factory methods #274. The new API
factoryBean()
allows you to specify that a bean should be obtained from another bean – the factory bean – by calling a specified method – the factory method – with optionally specified arguments, and optional bean value overrides (similar to thedeclareBean()
API).
Here are some examples:
bf.factoryBean( "a1Bean", "myFactory", "theMethod" );
// a1Bean = bf.getBean("myFactory").theMethod();
bf.factoryBean( "a2Bean", "yourFactory", "createIt", [ "dsn" ] );
// a2Bean = bf.getBean("yourFactory").createIt( bf.getBean("dsn") );
bf.factoryBean( "a3Bean", "warehouse", "builder", [ "dsn", "config" ],
{ dsn = "myDB" } );
// a3Bean = bf.getBean("warehouse").builder( "myDB", bf.getBean("config") );
- DI/1 now supports a post-injection init-method like ColdSpring #275. A new configuration option
initMethod
allows you to specify a no-argument method that DI/1 should attempt to call on all managed beans after all of their dependencies have been injected. This allows beans to perform additional configuration that requires access to their injected dependencies, which cannot be performed in a constructor. You can thank Daniel Budde II for this feature being added (and for spurring me to finally add factory beans/methods which I’d been thinking about for a while)! - AOP/1 now intercepts injected beans #277. This was the rewrite of AOP/1 to hook into DI/1’s
resolveBean()
method via a newsetupInitMethod()
extension point (which will make additional extensions to DI/1 easier). Previously AOP/1 only intercepted beans obtained directly viagetBean()
. Thank you to Daniel Budde II for identifying this issue and providing a test case to help debug and verify the new behavior. - DI/1 no longer resolves beans multiple times #279. This was a performance issue but previously harmless. With the enhancements to AOP/1, this introduced several bugs (hopefully all fixed now!).
FW/1 bug fixes and enhancements
Here are the changes in FW/1 itself since Alpha 1:
- Controllers are reloaded after the bean factory is updated #276. Previously, FW/1 cached controllers and recreating the bean factory was not sufficient to pick up changes in controller files. Now, when you call
setBeanFactory()
, the controller cache is cleared so controllers will be reloaded and any changes will be picked up (regardless of whether controllers are managed by FW/1 or DI/1).
The road to gold
The next milestone should be Release Candidate 1 and only bug fixes are likely to be considered at this point, no new features or enhancements, unless they are required to make the Beta feature set fully usable. If all goes well, RC1 should be released in about 3-4 weeks, and the gold 3.0 release about 3-4 weeks after that (late September / early October).
Note that org.framework.corfield
is a deprecated path for FW/1 – it has moved to framework.one
– and whilst it is supported during the 3.0 prerelease builds, it will be removed in the gold release. Similarly, as noted in the Alpha 1 blog post, getRC()
and getRCValue()
are deprecated and will also be removed in the gold release.


You need to register as an Alpha Streams author to submit Alphas to the Alpha Streams Market.
Follow these steps to submit Alphas to the Alpha Streams Market:
- Log in to the Algorithm Lab.
- In the left navigation bar, click Strategies > List to Marketplace.
- On the List to Marketplace page, click Submit New Alpha.
- Click the Select a Project field and then click the project you want to submit to the marketplace from the drop-down menu.
- Click the Select a Backtest field and then click the name of the backtest you want to submit to the marketplace from the drop-down menu.
The screening tool analyzes your backtest results to determine if it's suitable for the Alpha Streams Market.
- If the Alpha Streams analysis tool determines your algorithm is not suitable for the Alpha Streams Market, improve your algorithm and then continue from step 1.
- Enter a name for the Alpha.
The name must be at least 10 characters long.
- Enter a description for the Alpha.
The description must be at least 300 characters long.
- If you would like to set a custom reserve price, deselect the Accept default pricing checkbox and then enter a reserve price.
- Select an image for the Alpha.
- Select the Yes, I'm live trading this strategy or the No, I'm not live trading this strategy checkbox.
- Select the type(s) of universe selection the algorithm uses and then click Next.
- Select the type(s) that best describe the alpha generation model your algorithm uses and then click Next.
- Select the type(s) of portfolio construction that your algorithm uses and then click Next.
- Select the type(s) of risk control that your algorithm uses and then click Next.
- Select the type(s) of execution model(s) that your algorithm uses and then click Next.
- Click Submit Alpha.
The Alpha Streams team will review your submission. In the left navigation bar, click Strategies > My Listings to see the review status of your submission.


she played trombone. In low brass,
she was lodged into a wrist of testosterone,
stood out like a flipped bird, practiced
every day until her lips swelled as pink
as rubber bands. By seventh grade,
she sat first chair and no one talked
about how it meant a boy was second
or what was happening to her chest.
Once, on the bus, some thick skull fugued
its way down her shoulder until those bird-
brained breasts went numb. By the way,
an etude is a practice in kissing.
There's a bumper sticker that reads
horn players have great lips. She was how
everyone learned the word boner.
Their laughter is the sound of fire.
The punchline came before the joke.
The arpeggios were an exercise in defiance,
an emergency exit door swung open, each note
a step on a fire escape going up or down—
doesn't matter—away from the sound
of alarm. It was the first time she was good
at anything and it made her choose: be a woman
or be a thing that's bruised. There's no
forgiveness in some songs.


{% extends "base.html" %} {% load ch_extras %} {% block head %} {% endblock %} {% block content %}
Here you can upload a reservation RSpec to modify your slice or you can download the advertisement RSpec available in this Expedient or download the reservation RSpec for the current slice.


Jack Sparrow
Business
Projects Completede
Team Member
Award Win
Satisfied Customers
Marketing
Completely synergize resource taxing relationships via premier niche markets. The Professionally cultivate one to one customer service with robustideas. Dynamically innovate esource-leveling customer service for state of the art customer service.
Marketing
Completely synergize resource taxing relationships via premier niche markets. The Professionally cultivate one to one customer service with robustideas. Dynamically innovate esource-leveling customer service for state of the art customer service.
Marketing
Completely synergize resource taxing relationships via premier niche markets. The Professionally cultivate one to one customer service with robustideas. Dynamically innovate esource-leveling customer service for state of the art customer service.
Corporate America is missing out on one of thebiggest...
Read MoreCorporate America is missing out on one of thebiggest...
Read MoreCopyright ©2017 Consultis. All Rights Reserved


Dark Angels
Jan 31, 2018 by John
I’ve never really painted any 40k figures before apart from 5 Sisters of Silence which came to me with something else, so decided to give them a go and started at the shallow end with some figures I reckoned were not so baroque that I would be unable to transfer my 15mm armour techniques on to. Dark Angels fit the bill with their largely monocolour liveries of green, bone and black for Marines, Deathwing and Ravenguard respectively.
The figures are from the Dark Vengeance box which were easy to put together which is a bonus as I don’t like this part of the process and get annoyed beyond reason when working on small plastic parts which ping off the desk onto the floor and scurry into the hardest places to find..
Anyway first up a Pair of Dark Angel Marines. At this point for full disclosure I think I need to point out that I don’t play 40k so I may make mistakes with terminology.
These were initially airbrushed with GW Caliban green from their airbrush range in the annoying little flip top lid flasks which mean you have to use a pipette to remove or lose some paint every time you pour into the airbrush. Having moaned the actual paint seems to cover and flow well enough. This was then followed with subtle modulation using Vallejo modelair greens (Cam Olive Green and Cam green). In retrospect I think I needed a little more highlight but was working with the dark part of Dark Angel at the front of my mind.
The fellow below with the big red gun shows a bit more of the effect and actually its more pronounced in real life than in the photos.
Next up were the Deathwing who with their bigger surfaces were my favourites for modulation and much more like the German Dunkelgelb I’m more familiar with.
These were undercoated black for heft then Burnt Umber, Khaki Brown,Light Brown, Sand and final highlights with a Sand/White mix – again all Vallejo Modelair. A very weak Agrax glaze smoothed out the whole and edges were highlighted with an even lighter Sand/White.
Finally the Ravenwing (who are nothing to do with Ravenclaw apparently) and their cool black 1950s James Dean black leather look. Apart from this guy who is making the basic flowing robe and spinning machinery mistake pointed up in “The Incredibles”.
Seriously unless it’s a special magic robe it’s going to get caught in the rear wheel and pull him off. Maybe that’s why hes’ bald – too many robe caused falls
However, rule of cool it looks good I decided not to modulate the black and just do the panel edges as neatly as possible and concentrate on the more eye-catching parts such as the wingy bits.
So that’s my first sortie into 40k and im pretty happy overall. Lessons learned are to do a tiny bit more highlight even though they are dark and mean and secretive (so I believe). I have a few other bits I’m painting up ( Primaris squads and Assault squads) then hi ho hi ho to Ebay it will go.
Introduction
Jan 29, 2017 by John
Hello There
Thanks to my foresight many years ago in producing a daughter capable of building websites I now have the capacity to inflict photographs of painted miniatures onto a cold uncaring world.
Allied to this thanks to my erstwhile employer, I now also have the time on my hands (and a decent redundancy payment) to do so for some little while. Like the bloke from The A team said “I love it when a plan comes together”. Except there was never an actual plan as such.
Anyway, point is through this website I am able to display my wares to whosoever wants to see them and perhaps buy them. Everything on the site has been painted by myself and has sold or is being sold.
I used to be an active wargamer - meaning I went running and played football as well as wargaming - but now I’m an inactive non wargamer as now I do none of the above due to my knees being worn out/knackered by too many miles/ injuries and developing a preference for board games such as Advanced Squad leader and C&C Napoleonics.
This move to boardgaming came about as a damascene revelation that what I really liked about figure gaming was actually just the figures. The lengthy setting up, the grail quest for decent rules, the infinite measuring of arcs and ranges then packing up after a couple of turns wasn’t why I played. It was the painting of figures! As a result I flogged all my miniatures to fund the hobby of painting and turned to boardgaming to get the gaming fix.
Now unbound I no longer needed to paint what was needed for the latest rules set but could paint whatever I fancied and sell the finished product on Ebay. So here I am complete with new-fangled website. I’m not sure about the whole blog thing as I’m not convinced that anyone will be interested in my witterings however the success of Facebook seems to suggest that lots of people are interested in other peoples’ irrelevant doings so I’ll give it a go and will accept failure as proof that gamers have higher standards!


I was quite explicit with not telling my husband that I was having a 'mindful conversation' with him. I gave him all of the time he needed to talk about his motorbike that he had bought recently. I asked him about how it was working for him, how it made him feel, and repeated back to him these thoughts to close the loop.
Eventually, he did pick up that I was speaking a little more differently - "You seem rather forced right now," he said. I think he was surprised that I actually wanted to hear about how happy he was with his motorbike... And he grew suspicious! I talked him through what I had learned from this chapter of the book. Honestly, he shrugged it off saying, "OK, you do what you got to do." But deep down, I know he will be reflecting on it further :)
Between the following three suggested techniques:
I confess that this was the hardest chapter to absorb, along with the Javascript Basics work! This was a very intense sprint. Hopefully I'm ready for the next one!


University:
{% for city in cities %}
{% endfor %}
{% for city in cities %}
{{city}}
{% endfor %}
Address:
Bus Number:
Alert Distance


Elixir v1.3.4 Calendar behaviour
This module defines the responsibilities for working with calendars, dates, times and datetimes in Elixir.
Currently it defines types and the minimal implementation for a calendar behaviour in Elixir. The goal of the Calendar features in Elixir is to provide a base for interoperatibility instead of full-featured datetime API.
For the actual date, time and datetime structures, see Date
,
Time
, NaiveDateTime
and DateTime
.
Note the year, month, day, etc designations are overspecified (i.e. an integer instead of 1..12 for months) because different calendars may have a different number of days per month, months per year and so on.
Summary
Types
A calendar implementation
Microseconds with stored precision
From 0 to 60 to account for leap seconds
The time zone standard offset in seconds (not zero in summer times)
The time zone ID according to the IANA tz database (e.g. Europe/Zurich)
The time zone UTC offset in seconds
The time zone abbreviation (e.g. CET or CEST or BST etc.)
Callbacks
Builds a new date from proleptic year, month and day of month
Returns true if the given year is a leap year
Converts the given structure into a string according to the calendar
Types
A calendar implementation
Microseconds with stored precision.
The precision represents the number of digits that must be used when representing the microseconds to external format. If the precision is 0, it means microseconds must be skipped.
From 0 to 60 to account for leap seconds
The time zone standard offset in seconds (not zero in summer times)
The time zone ID according to the IANA tz database (e.g. Europe/Zurich)
The time zone UTC offset in seconds
Callbacks
Builds a new date from proleptic year, month and day of month.
Returns true if the given year is a leap year.
A leap year is a year of a longer length than normal. The exact meaning
is up to the calendar. A calendar must return false
if it does not support
the concept of leap years.
Converts the given structure into a string according to the calendar.


Compound Type Specifier Kind:
Combining.
Compound Type Specifier Syntax:
member object*
Compound Type Specifier Arguments:
object---an object.
Compound Type Specifier Description:
This denotes the set containing the named objects. An object is of this type if and only if it is eql to one of the specified objects.
The type specifiers (member) and nil are equivalent. * can be among the objects, but if so it denotes itself (the symbol *) and does not represent an unspecified value. The symbol member is not valid as a type specifier; and, specifically, it is not an abbreviation for either (member) or (member *).
See Also:


Range Slider with Low and High Values bound to result set
Link to blog: Design Studio SDK: Data Bound Range Slider


{% load static %}
Is The Weather Weird? is a website that lets you compare the current temperature to what it was in past years. Data from NOAA ISD and METAR. More locations coming soon. Created by Jonah Bloch-Johnson and Eric Potash.


Test Headline
keyword1, keyword2
Dummy Author
Published On:
Oct 10, 2015 8:00pm
test description text
body text basic test
Testing body...
link
extra info... not in article


HealthySure
HealthySure is an InsurTech platform, founded by IIM-ISB
alumni, with a vision to provide universal healthcare
inclusion. We have launched an industry - first Unified Health
Insurance plan that allows employees to personalize and
upgrade their corporate health covers with assured continuity
post - employment.


[gecode-users] Restart search engine, adding a new constraint
Amina Kemmar
kemmar.amina at gmail.com
Thu Jun 6 10:00:58 CEST 2013
On 06/01/2013 06:40 PM, Guido Tack wrote:
> I guess the problem is that you only want to see x,y but you need to search on z,k first? That's a bit more tricky.
> You can use a restart search engine, which restarts after each solution. Then for each solution you add the negation of the solution as a constraint in the root, e.g. (not (x==1 and y==1)). I'm not sure how well this scales if you have many solutions, but it could be worth a try.
>
> Cheers,
> Guido
>
> On 31/05/2013, at 12:04, Christian Schulte <cschulte at kth.se> wrote:
>
>> Hi,
>>
>> I am not sure whether I understand your question correctly. But you can
>> exchange the order of the search engine (that is, in my previous reply swap
>> e1 and e2).
>>
>> Best
>> Christian
>>
>> --
>> Christian Schulte, Professor of Computer Science, KTH,
>> www.ict.kth.se/~cschulte/
>>
>>
>> -----Original Message-----
>> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
>> Of Amina Kemmar
>> Sent: Friday, May 31, 2013 10:00 AM
>> To: users at gecode.org
>> Subject: [gecode-users] Display the values of a set of variable without
>> duplicates
>>
>> Hello,
>>
>> I already asked for the following problem:
>>
>> According to the variables defined in our model (x,y,z,k), I obtained the
>> following solutions :
>> 1,1,2,3
>> 1,1,5,6
>> 1,1,7,9
>> 1.1,8,8
>> I am interested to the values of the two variable x and y, so I want to
>> avoid the enumeration of the three last solution in order to display just
>> the first solution.
>>
>> I got the following response:
>>
>> One way to do it is as follows:
>> - You create a space s that only has a brancher for x and y
>> - You create a search engine e1 for s and find a solution, say s1
>> - You post a brancher in s1 for z and k.
>> - You create a search engine e2 for s and find just a single solution!
>> - You can then also get more solutions from e1 and repeat the previous two
>> steps.
>>
>> Thank you for the solution, it works very well, but I have an other problem
>> which is the enumeration order of the variables x, y, z and k. I must begin
>> the branching from the variables z and k, then x, y (In this way, Gecode
>> enumerates quickly the solutions but for the first order "x,y,z,k", it takes
>> about 30 minutes to enumerate the first solution).
>> Is there an other solution?
>>
>> Thank you.
>> -----
>> Amina
>>
>>
>> _______________________________________________
>> Gecode users mailing list
>> users at gecode.org
>> https://www.gecode.org/mailman/listinfo/gecode-users
>>
>>
>> _______________________________________________
>> Gecode users mailing list
>> users at gecode.org
>> https://www.gecode.org/mailman/listinfo/gecode-users
Hi,
Thank you Guido for the response, this is exactly what I want to do, but
I red the documentation (section 9.4) , and I added the following code
to restart the search:
MyExample* s1 = new MyExample(opt);
Search::Options o;
Search::Cuttof* c = Search::Cuttof::constant(2);
o.cuttof = c;
RBS<DFS,MyExample> e3(s1, o);
I get some errors : ‘Cuttof’ is not a member of ‘Gecode::Search’
My second question is how to add a new constraint, after the restart search?
Thank you for your help.
cheers.
I get
More information about the users
mailing list


Hearthstone Tracker
Automatically track and generate statistics for all your HearthStone games.
More information, screenshots, downloads and news can be found on our main website: hearthstonetracker.com
Features
- Tracks statistics using image recognition (no memory/packet sniffing).
- Track your and opponent heroes, wins, losses, decks, the coin, etc.
- Can capture windowed & full-screen mode.
- Manage your decks, name your decks and keep a history of old decks.
- Take screenshots of your decks and arena decks.
- Filter on date, hero, game-mode and deck and see a breakdown of stats.
- Search games and arenas by text (e.g. class name / notes field / etc.)
- Multi-server support (EU, NA, CN, etc.)
- Low cpu & memory usage (avg. 2-4% / 170mb)
- Very slick & intuitive interface.
Support
For general questions and/or user support, visit our subreddit at /r/hearthstonetracker
New feature suggestions can be submitted and voted on at hearthstonetracker.uservoice.com
Please, use the github issue tracker ONLY for development (features, enhancements and bug tracking).
Development
This is the main source-code repository of Hearthstone Tracker. Other related projects can be found on github.com/hearthstonetracker.
Primary languages used are C# / XAML. Hearthstone Tracker is built using .NET 4.5 using Visual Studio 2013 Standard. If you use 'Visual Studio for Desktop', also install 'Visual Studio for Web' (for needed binaries).
Most 3rd party libraries are managed using NuGet. All other dependencies (except the NSIS installer binaries) are included in the repository. Make sure you have the latest version of NuGet installed!
The wiki contains some basic information on how to get started with the source:
Contributing
- Suggest new features and report bugs
- Fork the repository and send a pull request
- Donate a few bucks via Paypal
License
The MIT License (MIT)


| Artifact |
|
| ArtifactVersion |
|
| ConnectReleaseWebHookEvent |
This HookEvent is for to create/delete Release Webhook.
|
| ConnectReleaseWebHookEvent.Factory |
Factory to create ConnectReleaseWebHookEvent.
|
| CreatedBy |
|
| Definition |
|
| DefinitionReference |
|
| InstanceReference |
|
| ModifiedBy |
|
| Project |
|
| ReleaseArtifact |
|
| ReleaseArtifactVersionsResponse |
|
| ReleaseBody |
|
| ReleaseDefinition |
|
| ReleaseManagementCI |
|
| ReleaseManagementCI.DescriptorImpl |
|
| ReleaseManagementHttpClient |
|
| ReleaseSummaryAction |
Show release summary link in build page.
|
| ReleaseWebHook |
|
| ReleaseWebHook.DescriptorImpl |
DescriptorImpl.
|
| ReleaseWebHookAction |
Implements ReleaseWebhook Post build action.
|
| ReleaseWebHookAction.DescriptorImpl |
Implementation of DescriptorImpl.
|
| ReleaseWebHookHelper |
|
| ReleaseWebHookReference |
|
| ReleaseWebHookReference.DescriptorImpl |
DescriptorImpl.
|
| ReleaseWebHookResource |
Implements ReleaseWebHookResource.
|
| ReleaseWebHookStatus |
Implements ReleaseWebHookStatus.
|
| ReleaseWebHookSummaryAction |
Implements ReleaseWebhook Post build action.
|
| RetentionPolicy |
|
| Version |
|


{% extends "layout.html" %} {% block content %}
It works! This page is only accessible for logged in users.


Anudist
*nuked*
Registered: Jul 2002
Location: England
Posts: 88 |
In depth explanation of Genetic memory, feel free to correct/dispute anything I say, this is simply my understanding of the subject, not my all knowing answer.
A Goa'uld Queen somehow learns how to escape from the swamp it calls home. It infests a creature (most likely an Unas) but has limited control over the host, and simply learns from the experience. She then somehow uses the DNA of the Unas to produce offpsring.
The offspring Goa'uld is born with the knowledge of the Queens escape from the swamp, her experiences with blending, everything the Queen experienced, and the knowledge of the Unas who she blended with. This offspring Goa'uld is better prepared than she was, it now knows what to expect. He should also be able to retain better control over any Unas he blends with. As a result he gains Knowledge that has taken the Unas species millions of years to aquire. Tool building, hunting, survival..etc. He is aware of much more than the Queen was.
 All it would take is for her to infest an Unas or any other creature and all her offspring would then be born with 2 generations of Queen knowledge and the memories of two different Unas. Everytime this process occours the Goa'uld gets smarter and smarter, and therefore bolder. A Queen could experiment with many species, from animals to a visiting alien. Each time aquiring all the knowledge of that host and passing it on to the Queens it gives birth to.
All the non Queens that are born will not go on to further the Goa'uld race, unless they choose to share any knowledge they aquire, or if some process exists for a Queen and a none queen to mate. I dont mean the hosts of each, I mean the actual snakes themselves. However a Goa'ulds natural yearning for power will probably prevent them from sharing anything they learn. Most present day Goa'uld are probably born with almost a base pack of knowledge such as ship building, space travel, hand device tech, uses of the Jaffa. Everything that the Queen who bore them is current aware of.
Report this post to a moderator | ? + *
|


Xalan-Java Release builds
- Introduction
- Developer Guidelines
- Running Product Builds - Overview
- Running Product Builds - Details
Introduction
This page is not for users who want to download pre-built jars of Xalan-Java or download the source code for Xalan-Java and build from that. Users who want to do that should see the Download/Build page.
This page is intended for Xalan committers and developers and is about the process to create a new release. It provides a selection of brief checklists for committers and developers about build procedures for the Xalan-Java community. Community input is appreciated; if you have questions, please ask on xalan-dev.
| The product build related sections of this document are still quite thin - they're mainly bullet points almost in checklist style. If you don't fully understand the procedures in this document, then you probably should ask for help first! |
Developer Guidelines
| This section is meant to become a set of guidelines for all Xalan-Java committers and developers who wish to submit patches. It's still in progress; suggestions to<EMAIL_ADDRESS>appreciated. |
The project's technical mailing list for all committers and developers interested in the API and inner workings is<EMAIL_ADDRESS>it's a good idea to subscribe if you plan to work on Xalan-Java. Logs of all Subversion commits are automatically sent to<EMAIL_ADDRESS>although discussions should happen on xalan-dev. You can read more about mailing lists.
Xalan-Java is a fairly mature project; one where most committers and many users expect that the daily build will be mostly functional. Very risky changes or major architecture updates should be discussed ahead of time or committed onto branches.
Developers should always run the Smoketest before checking in files or submitting patches to the list. If the Smoketest does not pass, you should either fix whatever you broke or get consensus from xalan-dev that it's OK to break the Smoketest temporarily. The Smoketest is a selection of API functionality tests and a pass through a wide variety of XSLT conformance tests that ensure basic functionality. You can also read a full set of documentation about the tests.
(Smoketest doc is TBD!)
cvs co xml-xalan/java xml-xalan/test cd xml-xalan/java build smoketest # Ant build will fail if smoketest fails.
Running Product Builds - Overview
Official builds of Xalan-Java require a few more steps than simply doing 'build fulldist'. This is a quick checklist of the steps; if you are not comfortable following this list, then please seek help on xalan-dev.
Release Types
Official builds come in several flavors:
- Major version releases: when significant new or changed functionality comes out,
we bump up the major build number; i.e. from 2.3 to 3.0. This is fairly rare;
anyone reading xalan-dev will know when this is happening.
- Minor version releases happen when we fix bugs or make moderate improvements to
the product. These are moving from 2.3 to 2.4; they should be planned out.
- Maintenance point releases are when we find bugs in an existing version and fix them without
adding new functionality; these go from 2.3 to 2.3.1. They should be done on a
branch if the mainline development has already moved forward; the point is to
make critical bugfixes for existing customers who want to stay on the stable release.
- Developer releases are very ad hoc; they represent a chunk of progress along the
HEAD of our Subversion tree towards a new major or minor release. The developer release
versions would be going from 2.3 to a new 2.4.D1 - the developer release is somewhat
like a 'beta' towards a new 2.4 minor version release. Quality standards for developer
releases are much less stringent than other releases.
Condensed Build Checklist
A very brief list of stages in running a build.
- Email xalan-dev with build plan.
- Verify all code changes are checked in.
- Verify any doc updates for code changes are in.
- Update build numbers in doc, code, and build scripts.
- Do a clean checkout and tag the sources.
- build fulldist -logfile ..\fulldist.log
- build fulldist-separatejars -logfile ..\fulldist-separatejars.log
- Run the smoketest for Xalan Interpretive and XSLTC.
- Verify smoketest passed; check docs built with new build numbers.
- PGP/GPG sign all .zip/.tar.gz distribution files (distros).
- Copy distros up to the website.
- Update website documentation set.
- Email xalan-dev with build notice!
Running Product Builds - Details
This section is still in progress, but should have all the basics. You should already have read the build overview above and you should already be familiar with our build.xml script and development processes.

- Email xalan-dev with build plan.
Apache projects are communities: you should always let the community know what the plans for builds are. The xalan-dev mailing list is the primary communication mechanisim for committers and developers working on Xalan-Java; you may also wish to cc: the xalan-j-users list to let other users and folks know what's coming. For major releases you may also want to cc: the<EMAIL_ADDRESS>list so that other xml.apache.org projects know our plans, although this is not required.
- Verify all code changes are checked in.
Ensure that any code changes you're planning to have in this release are actually
checked in; make sure any open work by other committers is in a stable state.
You should also review any other projects we're dependent on and make sure
that (when possible) we've updated to the latest version of their .jar files:
like xercesImpl.jar
, ant.jar
, etc. Note that occasionally we will have a specific
development need to stay with a different version of these projects.
Updating Doc And Version Numbers
Getting documentation and version numbers in sync.
- Verify any doc updates for code changes are in.
Check that the documentation is up to date. Make sure that any new features or major functionality changes are properly documented.
Update the commits list and the 'what was done' list in xdocs/sources/xalan/readme.xml and whatsnew.xml. Note that currently some of the status information for the XSLTC portion of Xalan-Java is stored separately in xsltc_history.xml and XSLTCDONE
Check in all your work!
- Update build numbers in doc, code, and build scripts.
Once you know what the version number should be, you'll need to update it in a number of places - both for the product itself, for the build system, and for the documentation. If you don't understand how to update any of these files, then please get help - don't just try to wing it.
- build.xml
Update the following lines for each version field:
<property name="version.VERSION" value="2"/>
<property name="version.RELEASE" value="7"/>
<property name="version.DEVELOPER" value=""/>
<property name="version.MINOR" value="0"/>
<property name="parser.version.VERSION" value="2"/>
<property name="parser.version.RELEASE" value="7"/>
<property name="parser.version.MINOR" value="1"/>
- xml-xalan/java/xdocs/sources/xalan-jsite (document id="index" label="Xalan-Java x.x")
- If you updated
xercesImpl.jar
orxml-apis.jar
, add a new entry in xml-xalan/java/src/org/apache/xalan/xslt/EnvironmentCheck.java
I did remind you to check in all your work, didn't I?
Run A Candidate Distribution Build
Get clean sources and build a distribution and (at least) the smoketest.
- Do a clean checkout and tag the sources.
Of course, you checked in all your earlier work to the Subversion repository, right?
The safest way to perform a build for distribution is to check out a fresh new copy of the repository from Subversion. This avoids any potential problems with uncommitted changes or extra files on your local machine.
Check out a new copy of both xml-xalan/java and xml-xalan/test repositories to a blank directory on your local machine. You then need to tag the files in the repository with a marker noting that these versions are the actual ones being used in the build (you could actually do this after running the build below). Use the Subversion tag command to add the tag to both repositories (/java and /test). The tag name should be something like 'xalan-j_2_4'; look at the log of any file to see the exact format of previous builds.
- build fulldist site -logfile ..\fulldist.log
The above command will build the binary and source distribution .zip/.tar.gz
files, in which the Xalan Interpretive and Xalan Compiled (XSLTC) processors
are combined into the xalan.jar
file. All the samples and the documentation
are built as well. The log of the build is saved in ..\fulldist.log. Note
that this will take up a moderate amount of space, especially when building
the .tar.gz files, so ensure you have plenty of disk space first.
Review the fulldist.log file quickly to ensure there were no build errors. Note that you can ignore any 'warnings' from the javadoc target; however any 'error's in the documentation must be fixed.
- build fulldist-separatejars site -logfile ..\fulldist-separatejars.log
Before running this command, rename the generated ./build directory from
the 'fulldist' command above to another name, for example, build-combinedjar. The
'fulldist-separatejars' command will build the binary and source distribution
.zip/.tar.gz files, in which the Xalan Interpretive and Xalan Compiled (XSLTC) processors
are built into separate jars; xalan.jar
and xsltc.jar
respectively. All the samples and
the documentation are built as well. The log of the build is saved in ..\fulldist-separatejars.log.
Note that this will take up a moderate amount of space, especially when building the .tar.gz
files, so ensure you have plenty of disk space first.
Review the fulldist-separatejars.log file quickly to ensure there were no build errors. Note that you can ignore any 'warnings' from the javadoc target; however any 'error's in the documentation must be fixed.
The results of the build will be placed in the ./build directory. Rename the xalan-j_2_x_x-bin.zip and xalan-j_2_x_x-bin.tar.gz files to xalan-j_2_x_x-bin-2jars.zip and xalan-j_2_x_x-bin-2jars.tar.gz respectively so that this binary distribution can be distinguished from the binary distributions created by the 'fulldist' target. The source distributions, xalan-j_2_x_x-src.zip and xalan-j_2_x_x-src.tar.gz are duplicates of those created by the 'fulldist' target.
- Run the smoketest for Xalan Interpretive and XSLTC.
Change to the xml-xalan\test directory and build the test harness by entering "build jar -logfile jar.log". Run the smoketest for the Xalan Interpretive processor by entering "build smoketest -logfile smoketest.log". Run the smoketest for the XSLTC by entering "build smoketest.xsltc -logfile smoketest.xsltc.log".
- Verify smoketest passed; check docs built with new build numbers.
Review the smoketest.log and smoketest.xsltc.log files. If they do not say that the Smoketest passed, then you must fix the test results before posting the build. Even for developer's builds, we must ensure that at least the Smoketest passes. For major or minor releases, we should also perform more testing to ensure stability. More detailed log files for the Smoketest can be found in the xml-xalan/test/smoketest/ directory.
You should also test that the documentation built properly, and that it has the proper build or release number that you edited above.
IMPORTANT: if you changed any files at all, be sure to check in your work and re-start this process!
Code Signing and Posting
Sign the distribution units so end-users can trust them, then copy to the website.
- PGP/GPG sign all .zip/.tar.gz distribution files (distros).
As a security measure, all xml.apache.org projects must sign or otherwise ensure the integrity of their public distributions. This is most commonly done by signing the actual .zip/.tar.gz files with your personal PGP or GPG key. Note that you must sign the files before copying them up to the website.
The Xalan Java distributions consist of: the source distribution files (xalan-j_x_x_x-src.zip and xalan-j_x_x_x-src.tar.gz) and the two binary distributions files (xalan-j_x_x_x-bin.zip and xalan-j_x_x_x-bin.tar.gz, and xalan-j_x_x_x-bin-2jars.zip and xalan-j_x_x_x-bin-2jars.tar.gz).
Two prerequisites to signing the distribution are: 1) you must have a personal PGP or GPG key, and 2) the public half of your key must be in the appropriate KEYS file before you begin a build. If you hadn't previously checked in your public key to the KEYS file before beginning this whole process, you'll have to go back and start again.
| We need some good links on getting PGP and GPG, and on actually code signing and verifying signatures. Jakarta has some, but they're scattered. This would be a good volunteer project for someone. |
Sign every .zip and .tar.gz file with your personal key, and make a detached text file with the signature - this will usually create a foo.zip.asc or foo.zip.sig file for each foo.zip file you sign.
- Copy distros up to the website.
You'll need to copy all of the distros plus all of your detached signature files to the website so people can download them. Note that apache.org machines generally do not allow inbound ftp, so you'll need to either scp them or login to the apache machines and use scp or pftp from there outbound to some server that you've copied them to.
(Subject to change as www.apache.org/dist gets ready for mirroring) You'll need to log on to xml.apache.org (which is a separate machine from svn.apache.org) and upload the files to /www/xml.apache.org/xalan-j/dist
You should also update the distribution directory's html files to note the new build numbers. Carefully edit the .htaccess file to update the 'Latest Stable Build' and 'Latest Developers Build' lines as needed. If you don't understand the format of this file, ask for help.
Rebuilding the Xalan-Java documentation
Xalan-Java includes a number of XML source files, XSL stylesheets, document type definition (DTD) files, entity relationship (ENT) files, graphics, and a JavaScript file that provide the input for the Xalan-Java HTML User's Guide, and the overview and package-level documents used during the generation of Javadoc.
Before rebuilding the documentation there are probably a number of pages that need to be updated, at a minimum consider these:
| XML source file | Description of contents |
| downloads.xml | how to download releases |
| readme.xml | has the release notes for each release (most recent to the oldest release) |
| whatsnew.xml | describes what is new in the latest release |
For a new release it is quite likely that some information in the whatesnew.xml page needs to be moved into the appropriate section of the readme.xml or release notes page before updating both of these pages with the information for the new release.
To rebuild the documentation, you must use the StyleBook tool and the JDK 1.2.2 java and javadoc
tools. StyleBook (which uses Xalan and Xerces) is in stylebook-1.0-b2.jar
. Some of the document definition files,
stylesheets, and resources are stored in xml-site-style.tar.gz, and are unzipped when you run Ant as described
below.
You can use Ant with the docs target to regenerate the User's Guide and with the javadocs target to regenerate the Javadoc API documentation.
When building the Javadoc API documentation, or the HTML pages for the website the following Ant Targets are of interest:
| Ant Target | What Ant does |
| javadocs | creates the API documentation |
| serializer.javadocs | creates the API documetation for the serializer |
| site | creates the HTML pages for the site http://xml.apache.org/xalan-j |
| xalan.apache.org.site | creates the HTML pages for the site http://xalan.apache.org |
Post-Build Docs and Email
Update the live website doc and let the community know you're done!
- Update website documentation set.
Now that the distribution is available for downloading, you should also update the static copy of the documentation that's posted to xml.apache.org.
- Email xalan-dev with build notice!
After everything is posted, you need to let the community know that a new build is available. Write up a short email announcing this with just a couple of the highlights of the new build, and a link to the distribution area.
Make the subject something like: [ANN] Xalan-J 2.x Point/Developers/Whatever Release posted to xml.apache.org and send your email to<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>Note that for developers releases, you can omit the<EMAIL_ADDRESS>address if you don't think it will be of interest to the larger audience.


An eagerly evaluated result of a query execution. More...
#include <Sequence.hpp>
Public Types | |
| typedef VectorOfItems::iterator | iterator |
| typedef VectorOfItems::const_iterator | const_iterator |
| typedef VectorOfItems::reverse_iterator | reverse_iterator |
| typedef VectorOfItems::const_reverse_iterator | const_reverse_iterator |
Public Member Functions | |
| Sequence (const Item::Ptr &item, xercesc::MemoryManager *memMgr=xercesc::XMLPlatformUtils::fgMemoryManager) | |
| Sequence (xercesc::MemoryManager *memMgr=xercesc::XMLPlatformUtils::fgMemoryManager) | |
| Sequence (size_t n, xercesc::MemoryManager *memMgr=xercesc::XMLPlatformUtils::fgMemoryManager) | |
| construct and reserve space for n elements | |
| Sequence (const Sequence &, size_t start, xercesc::MemoryManager *memMgr=xercesc::XMLPlatformUtils::fgMemoryManager) | |
| Sequence (const Sequence &, xercesc::MemoryManager *memMgr) | |
| Sequence (const Sequence &) | |
| Sequence & | operator= (const Sequence &) |
| ~Sequence () | |
| void | clear () |
| const Item::Ptr & | first () const |
| const Item::Ptr & | second () const |
| Sequence::iterator | begin (void) |
| Begin an iterator. | |
| Sequence::const_iterator | begin (void) const |
| Sequence::iterator | end (void) |
| Find the end of the iterator. | |
| Sequence::const_iterator | end (void) const |
| Sequence::reverse_iterator | rbegin (void) |
| Reverse iterator methods. | |
| Sequence::const_reverse_iterator | rbegin (void) const |
| Sequence::reverse_iterator | rend (void) |
| Sequence::const_reverse_iterator | rend (void) const |
| size_t | getLength (void) const |
| Returns the number of nodes in the list. | |
| const Item::Ptr & | item (size_t index) const |
| Return the indexth item in the collection. | |
| const Item::Ptr & | item (const ATDecimalOrDerived::Ptr &index) const |
| Return the indexth item in the collection - takes ATDecimalOrDerived. | |
| void | addItem (const Item::Ptr &item) |
| add an item to this sequence | |
| void | addItemFront (const Item::Ptr &item) |
| add an item to this sequence | |
| void | joinSequence (const Sequence &s) |
| combine another sequence onto this sequence | |
| bool | isEmpty () const |
| Returns true if the list is empty. | |
| void | sortIntoDocumentOrder (const DynamicContext *context) |
| sort into document order (only works for Sequences containing only Nodes) | |
| void | sortWithCollation (const Collation *collation, const DynamicContext *context) |
| sort as strings, using the given collation |
An eagerly evaluated result of a query execution.
| typedef VectorOfItems::const_iterator Sequence::const_iterator |
| typedef VectorOfItems::const_reverse_iterator Sequence::const_reverse_iterator |
| typedef VectorOfItems::iterator Sequence::iterator |
| typedef VectorOfItems::reverse_iterator Sequence::reverse_iterator |
| Sequence::Sequence | ( | const Item::Ptr & | item, | |
| xercesc::MemoryManager * | memMgr = xercesc::XMLPlatformUtils::fgMemoryManager | |||
| ) |
| Sequence::Sequence | ( | xercesc::MemoryManager * | memMgr = xercesc::XMLPlatformUtils::fgMemoryManager |
) |
| Sequence::Sequence | ( | size_t | n, | |
| xercesc::MemoryManager * | memMgr = xercesc::XMLPlatformUtils::fgMemoryManager | |||
| ) |
construct and reserve space for n elements
| Sequence::Sequence | ( | const Sequence & | , | |
| size_t | start, | |||
| xercesc::MemoryManager * | memMgr = xercesc::XMLPlatformUtils::fgMemoryManager | |||
| ) |
| Sequence::Sequence | ( | const Sequence & | , | |
| xercesc::MemoryManager * | memMgr | |||
| ) |
| Sequence::Sequence | ( | const Sequence & | ) |
| Sequence::~Sequence | ( | ) |
| void Sequence::addItem | ( | const Item::Ptr & | item | ) |
add an item to this sequence
| void Sequence::addItemFront | ( | const Item::Ptr & | item | ) |
add an item to this sequence
| Sequence::const_iterator Sequence::begin | ( | void | ) | const |
| Sequence::iterator Sequence::begin | ( | void | ) |
Begin an iterator.
| void Sequence::clear | ( | ) |
| Sequence::const_iterator Sequence::end | ( | void | ) | const |
| Sequence::iterator Sequence::end | ( | void | ) |
Find the end of the iterator.
| const Item::Ptr& Sequence::first | ( | ) | const |
| size_t Sequence::getLength | ( | void | ) | const |
Returns the number of nodes in the list.
| bool Sequence::isEmpty | ( | ) | const |
Returns true if the list is empty.
| const Item::Ptr& Sequence::item | ( | const ATDecimalOrDerived::Ptr & | index | ) | const |
Return the indexth item in the collection - takes ATDecimalOrDerived.
| const Item::Ptr& Sequence::item | ( | size_t | index | ) | const |
Return the indexth item in the collection.
| void Sequence::joinSequence | ( | const Sequence & | s | ) |
combine another sequence onto this sequence
| Sequence::const_reverse_iterator Sequence::rbegin | ( | void | ) | const |
| Sequence::reverse_iterator Sequence::rbegin | ( | void | ) |
Reverse iterator methods.
| Sequence::const_reverse_iterator Sequence::rend | ( | void | ) | const |
| Sequence::reverse_iterator Sequence::rend | ( | void | ) |
| const Item::Ptr& Sequence::second | ( | ) | const |
| void Sequence::sortIntoDocumentOrder | ( | const DynamicContext * | context | ) |
sort into document order (only works for Sequences containing only Nodes)
| void Sequence::sortWithCollation | ( | const Collation * | collation, | |
| const DynamicContext * | context | |||
| ) |
sort as strings, using the given collation


Before Change
This editor example shows how to interact with holodeck worlds while they are being built
in the Unreal Engine. Most people that use holodeck will not need this.
sensors = [Sensors.RGB_CAMERA]
agent_definitions = [
AgentDefinition("turtle0", agents.TurtleAgent, sensors),
AgentDefinition("turtle1", agents.TurtleAgent, sensors),
AgentDefinition("turtle2", agents.TurtleAgent, sensors),
AgentDefinition("turtle3", agents.TurtleAgent, sensors),
AgentDefinition("turtle4", agents.TurtleAgent, sensors)
]
env = HolodeckEnvironment(agent_definitions, start_world=False)
command = [0, 10]
for i in range(10):
env.reset()
_ = env.act("turtle0", command)
_ = env.act("turtle1", command)
_ = env.act("turtle2", command)
_ = env.act("turtle3", command)
_ = env.act("turtle4", command)
for _ in range(10000):
states = env.tick()
print(states["turtle0"][Sensors.REWARD])
// pixels = states["turtle0"][Sensors.RGB_CAMERA]
// cv2.namedWindow("Image")
// cv2.moveWindow("Image", 500, 500)
After Change
env.reset()
env.send_world_command("SetWeather", string_params=["rain"])
for _ in range(1000):
state, reward, terminal, _ = env.step(command)
def editor_multi_agent_example():
This editor example shows how to interact with holodeck worlds that have multiple agents.


Or pick a default time period: Last Hour Last 5 minutes (Last Alert)
Or choose how many minutes to show (1-20) 1 minute(s)


多年以前，当我听说乔布斯患上癌症时，我简直不敢相信我的耳朵。在大学的时候，我就买了第一代的iPod。当时它那超薄的机身以及旋转式触摸按键让我惊为神器，爱不释手。几年过去，iPhone横空出世，虽然我没有买过iPhone,但还是被乔布斯的创造力所折服。如今，iPad又带来了一股平板电脑的旋风，人们争相购买。可以这么说，乔布斯在不断地改变人们的生活方式，在不断地改变着这个世界。
但是今天是一个灰暗的日子，乔布斯离开了我们，我们无比悲伤。但是逝者已矣，乔布斯留给我们的是他那对创新的孜孜不倦，热爱自己喜欢的工作，“stay hungry, stay foolish”是他一生最好的注解。下面是乔布斯于2005年在斯坦福毕业典礼上的演讲全文，谨以此文与喜欢乔布斯的朋友共勉：stay hungry， stay foolish。
I am honored to be with you today at your commencement from one of the finest universities in the world. I never graduated from college. Truth be told, this is the closest I’ve ever gotten to a college graduation. Today I want to tell you three stories from my life. That’s it. No big deal. Just three stories.
The first story is about connecting the dots.
I dropped out of Reed College after the first 6 months, but then stayed around as a drop-in for another 18 months or so before I really quit. So why did I drop out?
It started before I was born. My biological mother was a young, unwed college graduate student, and she decided to put me up for adoption. She felt very strongly that I should be adopted by college graduates, so everything was all set for me to be adopted at birth by a lawyer and his wife. Except that when I popped out they decided at the last minute that they really wanted a girl. So my parents, who were on a waiting list, got a call in the middle of the night asking: “We have an unexpected baby boy; do you want him?” They said: “Of course.”  She refused to sign the final adoption papers. She only relented a few months later when my parents promised that I would someday go to college.
And 17 years later I did go to college. But I naively chose a college that was almost as expensive as Stanford, and all of my working-class parents’ savings were being spent on my college tuition. After six months, I couldn’t see the value in it. I had no idea what I wanted to do with my life and no idea how college was going to help me figure it out. And here I was spending all of the money my parents had saved their entire life. So I decided to drop out and trust that it would all work out OK. It was pretty scary at the time, but looking back it was one of the best decisions I ever made. The minute I dropped out I could stop taking the required classes that didn’t interest me, and begin dropping in on the ones that looked interesting.
It wasn’t all romantic. I didn’t have a dorm room, so I slept on the floor in friends’ rooms, I returned coke bottles for the 5¢ deposits to buy food with, and I would walk the 7 miles across town every Sunday night to get one good meal a week at the Hare Krishna temple. I loved it. And much of what I stumbled into by following my curiosity and intuition turned out to be priceless later on. Let me give you one example:
Reed College at that time offered perhaps the best calligraphy instruction in the country. Throughout the campus every poster, every label on every drawer, was beautifully hand calligraphed. Because I had dropped out and didn’t have to take the normal classes, I decided to take a calligraphy class to learn how to do this. I learned about serif and san serif typefaces, about varying the amount of space between different letter combinations, about what makes great typography great. It was beautiful, historical, artistically subtle in a way that science can’t capture, and I found it fascinating.
None of this had even a hope of any practical application in my life. But ten years later, when we were designing the first Macintosh computer, it all came back to me. And we designed it all into the Mac. It was the first computer with beautiful typography. If I had never dropped in on that single course in college, the Mac would have never had multiple typefaces or proportionally spaced fonts. And since Windows just copied the Mac, it’s likely that no personal computer would have them. If I had never dropped out, I would have never dropped in on this calligraphy class, and personal computers might not have the wonderful typography that they do. Of course it was impossible to connect the dots looking forward when I was in college. But it was very, very clear looking backwards ten years later.
Again, you can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something — your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.
My second story is about love and loss.
I was lucky — I found what I loved to do early in life. Woz and I started Apple in my parents garage when I was 20. We worked hard, and in 10 years Apple had grown from just the two of us in a garage into a $2 billion company with over 4000 employees. We had just released our finest creation — the Macintosh — a year earlier, and I had just turned 30. And then I got fired. How can you get fired from a company you started? Well, as Apple grew we hired someone who I thought was very talented to run the company with me, and for the first year or so things went well. But then our visions of the future began to diverge and eventually we had a falling out. When we did, our Board of Directors sided with him. So at 30 I was out. And very publicly out. What had been the focus of my entire adult life was gone, and it was devastating.
I really didn’t know what to do for a few months. I felt that I had let the previous generation of entrepreneurs down - that I had dropped the baton as it was being passed to me. I met with David Packard and Bob Noyce and tried to apologize for screwing up so badly. I was a very public failure, and I even thought about running away from the valley. But something slowly began to dawn on me — I still loved what I did. The turn of events at Apple had not changed that one bit. I had been rejected, but I was still in love. And so I decided to start over.
I didn’t see it then, but it turned out that getting fired from Apple was the best thing that could have ever happened to me. The heaviness of being successful was replaced by the lightness of being a beginner again, less sure about everything. It freed me to enter one of the most creative periods of my life.
During the next five years, I started a company named NeXT, another company named Pixar, and fell in love with an amazing woman who would become my wife. Pixar went on to create the worlds first computer animated feature film, Toy Story, and is now the most successful animation studio in the world. In a remarkable turn of events, Apple bought NeXT, I returned to Apple, and the technology we developed at NeXT is at the heart of Apple’s current renaissance. And Laurene and I have a wonderful family together.
I’m pretty sure none of this would have happened if I hadn’t been fired from Apple. It was awful tasting medicine, but I guess the patient needed it.  Don’t lose faith. I’m convinced that the only thing that kept me going was that I loved what I did. You’ve got to find what you love. And that is as true for your work as it is for your lovers. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. As with all matters of the heart, you’ll know when you find it. And, like any great relationship, it just gets better and better as the years roll on. So keep looking until you find it. Don’t settle.
My third story is about death.
When I was 17, I read a quote that went something like: “If you live each day as if it was your last, someday you’ll most certainly be right.” It made an impression on me, and since then, for the past 33 years, I have looked in the mirror every morning and asked myself: “If today were the last day of my life, would I want to do what I am about to do today?” And whenever the answer has been “No” for too many days in a row, I know I need to change something.
Remembering that I’ll be dead soon is the most important tool I’ve ever encountered to help me make the big choices in life. Because almost everything — all external expectations, all pride, all fear of embarrassment or failure - these things just fall away in the face of death, leaving only what is truly important. Remembering that you are going to die is the best way I know to avoid the trap of thinking you have something to lose. You are already naked. There is no reason not to follow your heart.
About a year ago I was diagnosed with cancer. I had a scan at 7:30 in the morning, and it clearly showed a tumor on my pancreas. I didn’t even know what a pancreas was. The doctors told me this was almost certainly a type of cancer that is incurable, and that I should expect to live no longer than three to six months. My doctor advised me to go home and get my affairs in order, which is doctor’s code for prepare to die. It means to try to tell your kids everything you thought you’d have the next 10 years to tell them in just a few months. It means to make sure everything is buttoned up so that it will be as easy as possible for your family. It means to say your goodbyes.
I lived with that diagnosis all day. Later that evening I had a biopsy, where they stuck an endoscope down my throat, through my stomach and into my intestines, put a needle into my pancreas and got a few cells from the tumor. I was sedated, but my wife, who was there, told me that when they viewed the cells under a microscope the doctors started crying because it turned out to be a very rare form of pancreatic cancer that is curable with surgery. I had the surgery and I’m fine now.
This was the closest I’ve been to facing death, and I hope it’s the closest I get for a few more decades. Having lived through it, I can now say this to you with a bit more certainty than when death was a useful but purely intellectual concept:
No one wants to die. Even people who want to go to heaven don’t want to die to get there. And yet death is the destination we all share. No one has ever escaped it. And that is as it should be, because Death is very likely the single best invention of Life. It is Life’s change agent. It clears out the old to make way for the new. Right now the new is you, but someday not too long from now, you will gradually become the old and be cleared away. Sorry to be so dramatic, but it is quite true.
 Don’t be trapped by dogma — which is living with the results of other people’s thinking. Don’t let the noise of others’ opinions drown out your own inner voice. And most important, have the courage to follow your heart and intuition. They somehow already know what you truly want to become. Everything else is secondary.
When I was young, there was an amazing publication called The Whole Earth Catalog, which was one of the bibles of my generation. It was created by a fellow named Stewart Brand not far from here in Menlo Park, and he brought it to life with his poetic touch. This was in the late 1960’s, before personal computers and desktop publishing, so it was all made with typewriters, scissors, and polaroid cameras. It was sort of like Google in paperback form, 35 years before Google came along: it was idealistic, and overflowing with neat tools and great notions.
Stewart and his team put out several issues of The Whole Earth Catalog, and then when it had run its course, they put out a final issue. It was the mid-1970s, and I was your age. On the back cover of their final issue was a photograph of an early morning country road, the kind you might find yourself hitchhiking on if you were so adventurous. Beneath it were the words: “Stay Hungry. Stay Foolish.” It was their farewell message as they signed off. Stay Hungry. Stay Foolish. And I have always wished that for myself. And now, as you graduate to begin anew, I wish that for you.
Stay Hungry. Stay Foolish.
Thank you all very much.


|
Car Game
1.0.0
|
This class is used to create a game window. More...
#include <game.h>
Public Member Functions | |
| Game () | |
| void | update (float timeStep) |
| void | draw (sf::RenderTarget &target, sf::RenderStates states) const |
| void | processEvent (sf::Event &e, sf::RenderWindow &window) |
| void | collisionDetection () |
| void | leftBHV () |
| void | rightBHV () |
| void | topBHV () |
| void | bottomBHV () |
Private Types | |
| enum | GameState { Start, Reset, Playing, Pause } |
Private Attributes | |
| VectorMaths | m_vectMaths |
| std::array< View, 3 > | m_aView |
| Collision | m_col |
| Player | m_player |
| RectangleTrigger | m_playerTrigger |
| std::array< RectangleTrigger, 11 > | m_aRectTrigger |
| std::array< Image, 3 > | m_aImage |
| std::array< Wall, 2 > | m_aWall |
| std::array< Tire, 17 > | m_aTopTire |
| std::array< Tire, 17 > | m_aBottomTire |
| std::array< Checkpoint, 4 > | m_aCheckpoint |
| std::array< StaticCar, 3 > | m_aLeftStaticCar |
| std::array< StaticCar, 3 > | m_aRightStaticCar |
| std::array< StaticCar, 2 > | m_aTopStaticCar |
| std::array< StaticCar, 2 > | m_aBottomStaticCar |
| std::array< sf::Sound, 1 > | m_aSound |
| std::vector< std::string > | sFileNameTexture |
| std::vector< std::string > | sFileNameFont |
| std::vector< std::string > | sFileNameMusic |
| std::vector< std::string > | sFileNameSound |
| TextureLoader | m_textureLoader |
| FontLoader | m_fontLoader |
| AudioLoader | m_audioLoader |
| std::array< SimpleText, 4 > | m_aText |
| sf::Clock | m_clock |
| int | iTime |
| int | iLap |
| bool | bLapConfirm [4] |
| GameState | eCurrentState |
This class is used to create a game window.
|
private |
| Game::Game | ( | ) |
An initializer.
| void Game::bottomBHV | ( | ) |
Bounding Volume Hierarchies - Bottom.
| void Game::collisionDetection | ( | ) |
All collision detection is done in here.
| void Game::draw | ( | sf::RenderTarget & | target, |
| sf::RenderStates | states | ||
| ) | const |
Drawing objects.
| target | = Render target to draw to. |
| states | = Current render states. |
| void Game::leftBHV | ( | ) |
Bounding Volume Hierarchies - Left side.
| void Game::processEvent | ( | sf::Event & | e, |
| sf::RenderWindow & | window | ||
| ) |
Process any key events.
| e | = Event variable needed to capture any key presses. |
| window | = Takes a window variable so that we can process events to it |
| void Game::rightBHV | ( | ) |
Bounding Volume Hierarchies - Right side.
| void Game::topBHV | ( | ) |
Bounding Volume Hierarchies - Top.
| void Game::update | ( | float | timeStep | ) |
Game update.
| timeStep | = Time which updates most of the functions and variables, for example velocity. |
|
private |
Lap confirmation.
|
private |
|
private |
Lap counter.
|
private |
Time tracker.
|
private |
An array of cars positioned on the top.
|
private |
An array of tires positioned at the bottom of the screen.
|
private |
An array of checkpoints positioned in the world.
|
private |
An array of images
|
private |
An array of cars positioned on the left.
|
private |
An array of rectangle triggers for the objects
|
private |
An array of cars positioned on the right.
|
private |
An array of sounds.
|
private |
An array of texts.
|
private |
An array of cars positioned on the top.
|
private |
An array of tires positioned at the top of the screen.
|
private |
An audio loader.
|
private |
An array of views.
|
private |
An array of walls positioned in the world.
|
private |
Clock needed to track the time.
|
private |
A collision.
|
private |
A font loader.
|
private |
A player.
|
private |
Sphere trigger for the player
|
private |
A texture loader.
|
private |
A variable which deals with vector maths.
|
private |
A vector of file names with fonts.
|
private |
A vector of file names with music.
|
private |
A vector of file names with sound effects.
|
private |
A vector of file names with textures.


Madrid, 1 October 1885
My dear parents,
On the 1st of this month we gave up the house we had taken in order to be able to live more economically and freely and the three of us -- Ceferino, Lete, and I -- have moved to this new house which costs us almost double, for they charge us for the room alone two pesetas a day. As I don't intend to stay here more than 15 days, until the arrival of the mail boat on which I plan to depart, should I have money, I've paid the six pesos they asked me. It is possible, now that it seems my allowance will not be increased, that I may not go to England where the cost of living is much higher, but to Germany where they have assured me one can live at Berlin with the same allowance as here at Madrid. If this is true, as I'm assured, I'll do that. L And if I don't receive money, my fate will decide what it shall be. From Paris Valentin has sent me money, spending for money order fees and other things. It is a good and friendly gesture, but I believe it ought not to be abused.
German will be of the greatest usefulness to me in the future when German commerce and preponderance shall prevail over there in the neighboring regions. It is moreover a language few Filipinos possess. I know a little, but as all that I know I have learned by myself, it turns out that though I have facility in translating written German, on the other hand, I can't understand a single word when they speak to me, for my ears are not accustomed to the sound of the words.
If I receive 200 pesos, I leave immediately for Germany; if I receive 600 pesos, I shall finish the doctorate, and if not, happen what may happen. I already owe three and a half months board. Since 1st July, when I should receive money, I have been without any and without letters.
I don't know how the Caroline question (1) will end. It seems that Bismark will get away with his pretensions. It is necessary that we prepare for what may happen so that we shall not be more exploited than we are now. Whenever they asked me here for our opinion I replied: "I believe that all Filipinos only want either to be Spanish or be independent." I don't know if I have interpreted correctly the wish of our countrymen, but if not, I suppose I haven't hurt them. When I was asked if we would fight in defense of the Spanish flag against the German, I answered them that we would always fight in fulfillment of our duty and in obedience to our conscience. "What then is your duty and what does your conscience dictate?" "Our duty", I replied, "is to love our country and our conscience dictates that we do everything that our duty implies."
As I haven't heard any news from there, it is difficult for me to speak of persons who are dead or have disappeared.
Those of the Filipino colony have not yet returned from their summer excursions. On the 1st of this month Valdés, Calero, and Cabangis, two physicians and one future one, left for home.
If I had taken advantage of the summer to go abroad to study languages, as I did during the first year of my arrival in this by going to Paris, this summer I would have gone to Germany or Switzerland, and now I would be earning two pesos a day with gratuity in addition, for in the . . . .