Arsenal 'blocked' Granit Xhaka statement after his "f*** off" blast at fans
Granit Xhaka cupped his ears and screamed "f*** off" at Arsenal fans before whipping off his shirt and storming down the tunnel in the x-rated incident. Four days later he issued a statement
by Alex SmithArsenal refused to release a statement from Granit Xhaka the day after his x-rated blast at fans - because the two parties couldn't agree on the wording.
Switzerland international Xhaka reacted badly to Gunners fans sarcastically cheering and then booing him after he was substituted during the north London side's draw with Crystal Palace .
The midfielder gestured to the supporters, cupped his ears and screamed "f*** off" before whipping off his shirt and storming down the tunnel.
Arsenal fans, furious by their captain's action, were further angered by the lack of immediate apology.
But the Times have explained that Xhaka's silence was not down to his own making, but instead he and the club could agree on what the statement should say.
Instead it took four days before Xhaka, via Arsenal's media platforms, released a strongly worded response to the incident.
In which he wrote about sick social media abuse he and his family had received before calling for future unity.
In a statement, Xhaka wrote: "After taking some time to reflect on what happened on Sunday afternoon, I would like to give you an explanation rather than just a quick response.
"The scenes that took place around my substitution have moved me deeply. I love this club and always give 100% on and off the pitch.
"My feeling of not being understood by fans, and repeated abusive comments at matches and in social media over the last weeks and months have me deeply.

"That has stirred me up and I reached boiling point when I felt the rejection in the stadium on Sunday.
"In this situation, I let myself be carried away and reacted in a way that disrespected the group of fans that support our club, our team and myself with positive energy.
"That has not been my intention and I'm sorry if that's what people thought.
"My wish is that we get back to a place of mutual respect, remembering why we fell in love with this game in the first place.
"Let's move forward positively together. Granit."
Xhaka, who hasn't played since the incident, has had the Gunners armband taken off him with Unai Emery electing to make Pierre-Emerick Aubameyang his new permanent skipper.


wol
Client for sending Wake-on-LAN magic packets.
More information: home page
- Send a WoL packet to a device:
wol mac_address
- Send a WoL packet to a device in another subnet based on its IP:
wol --ipaddr=ip_address mac_address
- Send a WoL packet to a device in another subnet based on its hostname:
wol --host=hostname mac_address
- Send a WoL packet to a specific port on a host:
wol --port=port_number mac_address
- Read hardware addresses, IP addresses/hostnames, optional ports and SecureON passwords from a file:
wol --file=path/to/file
- Turn on verbose output:
wol --verbose mac_address


Describes the socket protocol used by clients to communicate with Pusher.
|
Note
|
The protocol documentation is mostly intended for library developers. Unless you’re writing a library, you may wish to consult the server API overview instead - Pusher HTTP API Reference |
Changes to this protocol are handled by incrementing an integer version number. The current protocol, version 7, is documented here. Currently protocol 4 and later are supported by Pusher, however clients are encouraged to keep up to date with changes.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
- Overview
- Transports
- Event types
pusher:connection_established
(Pusher → Client)pusher:error
(Pusher → Client)pusher:ping
(Pusher ←→ Client)pusher:pong
(Pusher ←→ Client)pusher:subscribe
(Client → Pusher)pusher_internal:subscription_succeeded
(Pusher → Client)pusher:unsubscribe
(Client → Pusher)pusher_internal:member_added
(Pusher → Client)pusher_internal:member_removed
(Pusher → Client)- User events (Pusher → Client)
- User events (Client → Pusher)
- Error Codes
- CHANGELOG
Overview
Clients connect to the pusher service over a given transport. Once the connection is established, events are exchanged between both sides.
Transports
Pusher supports a number of transports but WebSocket is the default one. The protocol relies on the fact that WebSocket is message-based.
Once a connection is established with the transport, events start flowing both ways.
Events
Events are JSON-encoded and always occupy a full message in the underlying transport so that each message can be read and decoded to an event.
Every message is packaged as an 'event', whether it is user-generated, or if it is a message from the system. There is always an event name that can be used to determine what should happen to the payload.
{
"event": String,
"channel": String,
"data": String
}
- event (String)
-
Valid names must be alpha-numerical. The
pusher
prefix is reserved by Pusher for protocol expansions. - channel (Maybe String)
-
Valid names must be alpha-numerical. This key may not be used depending on the event name.
- data (Maybe String)
-
Any UTF-8 string. This key may not be used depending on the event name.
All events received and sent by clients can contain a data
field. While all
pusher
-prefixed events contain only JSON-serializable hashes, it is possible
for publishers to trigger messages containing arbitrarily-encoded data. In
order to keep the protocol consistent, Pusher tries to send the data
field
as a string. In case of pusher
events data has to be JSON-serialized first.
For example, Pusher will send:
{
"event": "pusher:connection_established",
"data": "{\"socket_id\":\"123.456\"}"
}
instead of:
{
"event": "pusher:connection_established",
"data": {"socket_id": "123.456"}
}
Channels
User events are always sent and received over a channel. And a channel is defined by it’s name.
Channels with the prefix "private-" and "presence-" have different behaviors as described further below.
Transports
WebSocket connection
Clients should make a WebSocket connection to
[scheme]://ws.pusherapp.com:[port]/app/[key]
- scheme
-
-
ws
- for a normal WebSocket connection -
wss
- for a secure WebSocket connection
-
- port
-
-
Default WebSocket ports: 80 (ws) or 443 (wss)
-
For Silverlight clients ports 4502 (ws) and 4503 (wss) may be used.
-
- key
-
-
The app key for the application connecting to Pusher
-
The following query parameters should be supplied:
- protocol (Integer)
-
The protocol version to use. If this is not supplied the protocol version to use is inferred from the version parameter (to support old javascript clients which relied on this behaviour). Failing that protocol 1 is used (this behaviour is deprecated and will in future be replaced by a 4008 error code)
- client (String)
-
Identifies the client which is connecting. This string should be of the form
platform-library
- for example the iOS library identifies itself asiOS-libPusher
. - version (String)
-
The version of the library which is connecting, for example
1.9.3
.
For example
ws://ws.pusherapp.com:80/app/e4d95db9ea1004f66730?client=js&version=2.2&protocol=5
WebSocket data messages
Data is sent bidirectionally over a WebSocket as text data containing UTF8 encoded JSON.
|
Note
|
Binary WebSocket frames are not supported. |
Every JSON message contains a single event and has an event
property
which is known as the event name. See Event types below for a description
of the event types.
Detecting that the connection is alive
Both Pusher and clients require a mechanism for establishing that the connection is alive.
The basic design pattern is described in the ZeroMQ Wiki and is symmetric for the client and Pusher.
Essentially any messages received from the other party are considered to mean that the connection is alive. In the absence of any messages either party may check that the other side is responding by sending a ping message, to which the other party should respond with a pong.
Ping and pong messages
If the WebSocket connection supports ping & pong (i.e. advertises itself as draft 01 or above), Pusher will send ping messages to the client in order to verify that it is active.
In recent WebSocket drafts ping & pong are supported as part of the protocol. Unfortunately this was not the case in earlier drafts, and unfortunately it is still not possible to trigger sending a ping, or binding to a pong from JavaScript using the W3C API. For both these reasons, Pusher supports both WebSocket protocol level ping-pong and an emulated one.
In protocol versions 5 and above, when using an old version of the WebSocket
protocol, Pusher will send pusher:ping
event to the client. The client
should respond with a pusher:pong
event.
This means that Pusher will respond to a WebSocket protocol ping message
with a pong message, and also it will respond to a pusher:ping
event with a
pusher:pong
event (both have empty data).
Recommendations for client libraries
If the WebSocket draft supports protocol level ping-pong, then on receipt of a ping message, the client MUST respond with a pong message.
If the client does not support protocol level pings and advertises (on
connect) that it implements a protocol version >= 5 then the client MUST
respond to a pusher:ping
event with a pusher:pong
event.
Clients SHOULD send a ping to Pusher when the connection has been inactive for
some time in order to check that the connection is alive. They MUST then wait
some time for receipt of a pong message before closing the connection /
reconnecting. Clients SHOULD send a protocol ping if supported (sending a
pusher:ping
event will also work).
Clients MAY use platform specific APIs to trigger a ping check at an appropriate time (for example when network conditions change).
The precise timeouts before sending a ping and how long to wait for a pong MAY be configurable by the user of the library, but sensible defaults SHOULD be specified. The recommended values are:
-
Activity timeout before sending ping: 120s
-
Time to wait for pong response before closing: 30s
If the client supports protocol version 7, the server will send an
activity_timeout
value in the data hash of the
pusher:connection_established
event. The client
SHOULD set the timeout before sending a ping to be the minimum of the value it
has chosen though configuration and the value supplied by the server.
The following example code is taken from the pusher-js
library. This
function is called whenever a message is received
function resetActivityCheck() {
if (self._activityTimer) { clearTimeout(self._activityTimer); }
// Send ping after inactivity
self._activityTimer = setTimeout(function() {
self.send_event('pusher:ping', {})
// Wait for pong response
self._activityTimer = setTimeout(function() {
self.socket.close();
}, (self.options.pong_timeout || Pusher.pong_timeout))
}, (self.options.activity_timeout || Pusher.activity_timeout))
}
Connection closure
Clients may close the WebSocket connection at any time.
The Pusher server may choose to close the WebSocket connection, in which case a close code and reason will be sent.
Clients SHOULD support the following 3 ranges
4000-4099: The connection SHOULD NOT be re-established unchanged.
4100-4199: The connection SHOULD be re-established after backing off. The back-off time SHOULD be at least 1 second in duration and MAY be exponential in nature on consecutive failures.
4200-4299: The connection SHOULD be re-established immediately.
Clients MAY handle specific close codes in particular way, but this is generally not necessary. See Error Codes below for a list of errors.
|
Note
|
Old WebSocket drafts: If the underlying WebSocket does not support
close codes then a pusher:error event will be sent with an appropriate code
before the WebSocket connection is closed.
|
|
Note
|
Legacy protocols: When using protocol versions < 6, a pusher:error
event is also sent before the connection is closed (regardless of the
WebSocket draft).
|
Other transports
The pusher-js library implements a number of fallback transports for older browsers that don’t support WebSocket. This document currently doesn’t describe these transports because we would like to keep them just for the pusher-js library.
Event types
These are all the events defined by the protocol.
In the docs below "(Pusher → Client)" indicates that this event is sent from the Pusher server to to client, and similarly vice versa.
pusher:connection_established
(Pusher → Client)
After the client has connected to the Pusher service a
pusher:connection_established
event is triggered. The client must wait for
that event to arrive before issuing any event itself.
{
"event": "pusher:connection_established",
"data": String
}
Where the data
field is a JSON-encoded hash of following format:
{
"socket_id": String,
"activity_timeout": Number
}
- data.socket_id (String)
-
A unique identifier for the connected client
- data.activity_timeout (Number) (Protocol 7 and above)
-
The number of seconds of server inactivity after which the client should initiate a ping message
Within the client libraries the connection is normally established when the constructor is called.
var pusher = new Pusher('APP_KEY');
pusher:error
(Pusher → Client)
When an error occurs a pusher:error
event will be triggered. An error may be
sent from Pusher in response to invalid authentication, an invalid command,
etc.
|
Note
|
Old WebSocket drafts: Some errors result in the WebSocket connection
being closed by Pusher. If the WebSocket connection does not support close
codes then a pusher:error event will be sent with an appropriate code before
the WebSocket connection is closed.
|
{
"event": "pusher:error",
"data": {
"message": String,
"code": Integer
}
}
- data.message (String)
-
A textual description of the error
- data.code (Integer) - optional
-
A code that identifies the error that has occurred. See Error Codes below.
pusher:ping
(Pusher ←→ Client)
When one side wants to verify that the connection is still healty, a
pusher:ping
event is sent to the other side. See Ping and pong messages.
{
"event": "pusher:ping"
}
pusher:pong
(Pusher ←→ Client)
Used to reply to a pusher:ping
event to verify that the connection is still
healty. See Ping and pong messages.
{
"event": "pusher:pong"
}
pusher:subscribe
(Client → Pusher)
The pusher:subscribe
event is generated on the client and sent to Pusher
when a subscription is made. For more information on channel names see the
channels documentation.
{
"event": "pusher:subscribe",
"data": {
"channel": String,
"auth": String,
"channel_data": Object
}
}
Where the data
members are as follows:
- data.channel (String)
-
The name of the channel that is being subscribed to.
- data.auth (String) [optional]
-
If the channel is a presence or private channel then the subscription needs to be authenticated. The authentication signature should be provided on this property if required. The value will be generated by following the process outlined in authentication signatures. The authentication normally takes place on an application server.
- data.channel_data (String) [optional]
-
This property should be populated with additional information about the channel if the channel is a presence channel. The JSON for the
channel_data
will be generated on the application server and should be encoded as a string as assigned to this property. The format of the object is as follows:
{
"event": "pusher:subscribe",
"data": {
"channel": "presence-example-channel",
"auth": "<APP_KEY>:<server_generated_signature>",
"channel_data": "{
\"user_id\": \"<unique_user_id>\",
\"user_info\": {
\"name\": \"Phil Leggetter\",
\"twitter\": \"@leggetter\",
\"blogUrl\":\"http://blog.pusher.com\"
}
}"
}
}
For more information see authenticating users.
From the API users point of view the subscription is made the moment that the
subscribe
method is called. However, the actual moment within the client
library that a pusher:subscribe
event is triggered depends on the type of
channel that is being subscribed to.
var pusher = new Pusher('APP_KEY');
var channel = pusher.subscribe('public-channel');
Public channel subscription
Since no authentication must take place when subscribing to a public channel
the pusher:subscribe
event can be sent from the client to Pusher as soon as
the call to subscribe
is made.
Private and Presence channel subscription
Private and Presence channels require authentication so an additional call needs to be made to the application server hosting the web application in order to make sure the current user can subscribe to the given channel.
For more information on authentication of channels see the Authenticating Users docs.
pusher_internal:subscription_succeeded
(Pusher → Client)
The pusher_internal:subscription_succeeded
event is sent when a subscription
to a channel is successful.
{
"event": "pusher_internal:subscription_succeeded",
"channel": "example-channel",
"data": String
}
Where the data
field is empty except for presence channels.
{
"presence": {
"ids": Array,
"hash": Hash,
"count": Integer,
}
}
- channel (String)
-
The presence channel name
- data.presence.ids (Array)
-
An array of unique user identifiers who are subscribe to the channel.
- data.presence.hash (Hash)
-
A hash of user IDs to object literals containing information about that user.
- data.presence.count (Integer)
-
The number of users subscribed to the presence channel
{
"event": "pusher_internal:subscription_succeeded",
"channel": "presence-example-channel",
"data": "{
\"presence\": {
\"ids\": [\"11814b369700141b222a3f3791cec2d9\",\"71dd6a29da2a4833336d2a964becf820\"],
\"hash\": {
\"11814b369700141b222a3f3791cec2d9\": {
\"name\":\"Phil Leggetter\",
\"twitter\": \"@leggetter\"
},
\"71dd6a29da2a4833336d2a964becf820\": {
\"name\":\"Max Williams\",
\"twitter\": \"@maxthelion\"
}
},
\"count\": 2
}"
}
pusher:unsubscribe
(Client → Pusher)
The pusher:unsubscribe
event is generated on the client and sent to Pusher
when a client wishes to unsubscribe from a channel.
{
"event": "pusher:unsubscribe",
"data" : String
}
Where the data
field is a JSON-encoded hash of following format:
{
"channel": String
}
- data.channel (String)
-
The name of the channel to be unsubscribed from.
Unsubscribing works in the same way as subscribing to a channel with the only
difference being that the event name is pusher:unsubscribe
.
var pusher = new Pusher('APP_KEY');
var channel = pusher.subscribe('public-channel');
// ...
pusher.unsubscribe('my-channel');
pusher_internal:member_added
(Pusher → Client)
When a user subscribes to a presence channel the
pusher_internal:member_added
is triggered on the channel by Pusher.
{
"event": "pusher_internal:member_added",
"channel": "presence-example-channel",
"data": String
}
Where the data
field is a JSON-encoded hash of following format:
{
"user_id": String,
"user_info": Object
}
- channel (String)
-
The presence channel name
- data.user_id (String)
-
The ID of a user who has just subscribed to the presence channel.
- data.user_info (Object)
-
An object containing information about that user who has just subscribed to the channel. The contents of the
user_info
property depends on what the application server replied with when the presence channel was authenticated.
{
"event": "pusher_internal:member_added",
"channel": "presence-example-channel",
"data": "{
\"user_id\": \"11814b369700141b222a3f3791cec2d9\",
\"user_info\": {
\"name\": \"Phil Leggetter\",
\"twitter\": \"@leggetter\",
\"blogUrl\": \"http://blog.pusher.com\"
}
}"
}
For more about the user_info
object literal see user_info
in the
authenticating users section.
pusher_internal:member_removed
(Pusher → Client)
When a user unsubscribes from a presence channel by either actually
unsubscribing or their transport connection closing the
pusher_internal:member_removed
is triggered on the channel by Pusher. The
different event name is used to differentiate a public event from an internal
one.
{
"event": "pusher_internal:member_removed",
"channel": "presence-example-channel",
"data": String
}
Where the data
field is a JSON-encoded hash of following format:
{
"user_id": String
}
- channel (String)
-
The presence channel name
- data.user_id (String)
-
The ID of a user who has just unsubscribed from the presence channel.
User events (Pusher → Client)
User events are user defined and associated with a single channel.
{
"event": String,
"channel": String,
"data": String
}
- event (String)
-
The name of the event
- channel (String)
-
The name of the channel that the event is associated with e.g.
test-channel
- data (String)
-
The data associated with the event. It is strongly recommended that this be a JSON-serialized hash (e.g.
{"hello":"world", "foo": {"bar": 1000}}
), although it is possible to send any type of payload, for example a simple string.
|
Note
|
The following code shows how to receive an event and not how to trigger one |
var pusher = new Pusher('APP_KEY');
var channel = pusher.subscribe('my-channel');
channel.bind('my-event', function(data){
// handle event
});
User events (Client → Pusher)
It is possible to trigger events from a client when the application that the
client has connected to has had client events enabled, the event name must be
prefixed with client-
and the channel must be an authenticated channel
(private or presence).
Pusher will send client events to all other clients that are subscribed to the private or presence channel. Pusher will not send it to the originator of the event.
For more information see Triggering Client Events docs.
{
"event": String,
"channel": String,
"data": String/Object
}
- event (String)
-
The name of the event which must be prefixed with
client-
to be accepted. For example,client-event
orclient-something-updated
- channel (String)
-
The channel for the event to be triggered on. To be accepted the channel must be either a private (
private-
) or a presence (presence-
) channel. - data (String/Object)
-
The data to be sent and associated with the event. It is strongly recommended that this be a hash of key/value pairs (
{"hello":"world", "foo": {"bar": 1000}}
) although it is possible to send any type of payload, for example a simple string.
var pusher = new Pusher('APP_KEY');
var channel = pusher.subscribe('private-channel');
var data = {"some": "data"};
channel.trigger("client-event", data);
Error Codes
4000-4099
Indicates an error resulting in the connection being closed by Pusher, and that attempting to reconnect using the same parameters will not succeed.
- 4000
-
Application only accepts SSL connections, reconnect using wss://
- 4001
-
Application does not exist
- 4003
-
Application disabled
- 4004
-
Application is over connection quota
- 4005
-
Path not found
- 4006
-
Invalid version string format
- 4007
-
Unsupported protocol version
- 4008
-
No protocol version supplied
4100-4199
Indicates an error resulting in the connection being closed by Pusher, and that the client may reconnect after 1s or more.
- 4100
-
Over capacity
4200-4299
Indicates an error resulting in the connection being closed by Pusher, and that the client may reconnect immediately.
- 4200
-
Generic reconnect immediately
- 4201
-
Pong reply not received: ping was sent to the client, but no reply was received - see Ping and pong messages
- 4202
-
Closed after inactivity: Client has been inactive for a long time (currently 24 hours) and client does not support ping. Please upgrade to a newer WebSocket draft or implement version 5 or above of this protocol.
4300-4399
Any other type of error.
- 4301
-
Client event rejected due to rate limit
CHANGELOG
Version 7 (2013-11)
The server now sends the activity timeout in the
pusher:connection_established
event.
Version 6 (2013-03)
When the server closes connections due to an error, a pusher:error
event is
only sent if and old WebSocket draft is in use which does not support close
codes. Clients SHOULD therefore expose the close code and reason in some way
to the developer.
Version 5 (2012-01)
Pusher expects the client to respond to ping messages See Ping and pong messages
Version 4 (2011-12)
Added a confirmation message after subscribing to public and private channels (already sent for presence channels)
Version 3 (2011-02)
Significant change to presence events.
Version 2
Renamed connection_established
event to pusher:connection_established
Version 1
Initial release


This blog includes the following tag in the html header:
<link rel="ledger" href="URL" />
You can use any browser or browser extension that supports the "ledger" link-rel to send donations to the owner of this website.
For instance, you could try out the LedgerLoops browser extension for Chrome and pay this website 0.001 Unicurns every 5 seconds.


{% extends "layout.html" %}
{% block content %}
This is a tool which shows clang static analysis warnings.
The main idea is to gather all warnings, parse them and show
more approachable way.
Information about author is taken from git/svn blame command.
{% endblock %}


A B2B2C COMPANY HAS BEEN GETTING A LOW SALES PERFORMANCE FOR A SPECIFIC PRODUCT, AND ITS MARKETING TEAM DOESN'T KNOW MUCH ABOUT THE CUSTOMERS. IN ORDER TO ADDRESS THIS ISSUE, COMPANY NEED TO FIND A WAY TO KNOW DEEPLY ITS CUSTOMERS, AND CREATE A NEW CHANNEL TO INTERACT WITH THEM.

1. Choose one of the challenges;
2. Build up your solution for the challenge;
3. Watch video "DO IT LIKE A NINJA" and get prepared to the Qualify stage


{% include "shared/header-script.html" %}
{% include "shared/header-social.html" %} {% include "shared/header-stricky.html" %} {% include "shared/main-slider.html" %} {% include "shared/about-us.html" %} {% include "shared/choose-area.html" %} {% include "shared/project-v2.html" %} {% include "shared/service-area-v2.html" %} {% include "shared/process-area-v2.html" %} {% include "shared/testimonial-area-v2.html" %} {% include "shared/news-area.html" %} {% include "shared/footer.html" %} {% include "shared/footer-script.html" %}


GATE CSE SYLLABUS
GENERAL APTITUDE
Verbal Ability: English grammar, sentence completion, verbal analogies, word groups, instructions, critical reasoning and verbal deduction.
Numerical Ability: Numerical computation, numerical estimation, numerical
ENGINEERING MATHEMATICS
Discrete Mathematics: Propositional and first order logic. Sets, relations, functions, partial orders and lattices. Groups. Graphs: connectivity, matching, coloring. Combinatorics: counting, recurrence relations,generating functions.
Linear Algebra: Matrices, determinants, system of linear equations, eigenvalues and eigenvectors, LU decomposition.
Calculus: Limits, continuity and differentiability. Maxima and minima. Mean value theorem. Integration.
Probability: Random variables. Uniform, normal, exponential, poisson and binomial distributions. Mean, median, mode and standard deviation. Conditional probability and Bayes theorem.
DIGITAL LOGIC
Boolean algebra. Combinational and sequential circuits. Minimization. Number representations and computer arithmetic (fixed and floating point).
COMPUTER ORGANISATION AND ARCHITECTURE
Machine instructions and addressing modes. ALU, data‐path and control unit. Instruction pipelining. Memory hierarchy: cache, main memory and secondary storage; I/O interface (interrupt and DMA mode).
PROGRAMMING AND DATA STRUCTURES
Programming in C. Recursion. Arrays, stacks, queues, linked lists, trees, binary search trees, binary heaps, graphs.
ALGORITHMS
Searching, sorting, hashing. Asymptotic worst case time and space complexity. Algorithm design techniques: greedy, dynamic programming and divide‐and‐conquer. Graph search, minimum spanning trees, shortest paths.
OPERATING SYSTEMS
Processes, threads, inter‐process communication, concurrency and synchronization. Deadlock. CPU scheduling. Memory management and virtual memory. File systems.
THEORY OF COMPUTATION
Regular expressions and finite automata. Context-free grammars and push-down automata. Regular and contex-free languages, pumping lemma. Turing machines and undecidability.
COMPILER DESIGN
Lexical analysis, parsing, syntax-directed translation. Runtime environments. Intermediate code generation.
DATABASES
ER‐model. Relational model: relational algebra, tuple calculus, SQL. Integrity constraints, normal forms. File organization, indexing (e.g., B and B+ trees). Transactions and concurrency control.
COMPUTER NETWORK
Concept of layering. LAN technologies (Ethernet). Flow and error control techniques, switching. IPv4/IPv6, routers and routing algorithms (distance vector, link state). TCP/UDP and sockets, congestion control. Application layer protocols (DNS, SMTP, POP, FTP, HTTP). Basics of Wi-Fi. Network security: authentication, basics of public key and private key cryptography, digital signatures and certificates, firewalls.


This check displays a warning if one of the links that defines an intersection is a dangling link. This can only happen if:
This can lead to highly unexpected results from the reasoner, because the reasoner will ignore any cross product with dangling links. If a warning of this kind appears, reload all the required ontology files before using the reasoner.


{% load i18n %}
{% blocktrans trimmed %} After review stage 1, some of the proposals have been accepted or rejected. These proposals and their reviews (read-only) are shown in the separate tab. {% endblocktrans %}
{% blocktrans trimmed %} In review stage 2, you will see score and comment made by other reviewers anonymously, including the name and background of the speaker. With more information provided, you may want to update your review. Updating or adding review in stage 2 follows the same way as stage 1. Only the last review you made will be disclosed to the speaker (if you choose to). {% endblocktrans %}


// Improving your litigation and investigation processes is important to gaining control over the cost and risk of eDiscovery. Cobra helps you create a repeatable, defensible EDRM discovery workflow from Information Governance through final disposition and supply you with the industry leading technology needed and even the people to run it!
//The heart of a defensible process is legal hold and preservation. With Cobra Legal Hold, powered by Relativity, you can send your notices to unlimited custodians, track compliance, issue reminders, and even Preserve in Place for Microsoft Office365 all with just a few button clicks. Simple to use, yet powerful, your legal hold process can be automated and standardized including reporting, powerful dashboards, and integration with HR and matter management systems. No infrastructure or IT involvement needed!
/If your needs go beyond Legal Hold, Cobra offers full subscriptions to Relativity that gives you full administrative access and control in an ISO 27001 and ISO 9001 secure fashion to all the tools Relativity provides. For a cost significantly less than you are probably paying now, you can have complete Analytics, Assisted Review, Active Learning, Case Dynamics and much more all backed by an award winning team to help you get more from your discovery process. By centralizing with Cobra, you will be able to reuse data and decisions while ensuring your data is safe and take advantage of advanced tools all without any infrastructure cost or hassle.
/Cobra’s Project Management team are well equipped to handle anything from your biggest, most complex case to routine, smaller matters with ease. We work directly for corporate legal departments and their outside counsel to manage important cases and investigations from cradle to grave. Our Relativity and ACEDS certified team can provide the needed resources to ensure your matters go smoothly and with no surprises. Whether we’re also providing the needed technology or just our expertise, we’ll help make sure you get the results that you want…consistently and reliably.
//You will receive the same high level of service that our subscription customers enjoy, support 24/7/365, and access to the same team that hundreds of legal professionals rely on each day. Our secure data centers have been ISO 27001 and 9001 certified without a single non-conformity for the past 8 years!
//Our Collections team takes the hassle out of data acquisition for you. Whether on-site or remote, from servers or devices, we will find and acquire any amount of data in a forensically sound fashion and ensure proper chain of custody and data integrity through our rigorous Quality Control process.


Open Pampas [ba13], plain, in Mandoria, peasants: 10000
Last updated Turn #147
Open Pampas [ba13], plain, in Mandoria, peasants: 10000
------------------------------------------------------------------------
30: Overcrowding causes zero peasant deaths.
Routes leaving Open Pampas:
North, forest, to Cyprus Forest [az13], 8 days
East, plain, to Open Pampas [ba14], 7 days
South, to Ocean [bb13], Crystal Sea, impassable
West, to Ocean [ba12], Crystal Sea, impassable
Inner locations:
Nassic [ae5x], port city, 1 day
Seen here:
Pack of wolves [br3v], wolves, number: 7


Class 12: Divide and Conquer II
02-19-2020
“Don’t repeat yourself”
When we are doing binary search we are basically finding a function \(f: \mathbb{D} \to \{0, 1\}\). We are finding a function that maps the elements of a set \(\mathbb{D}\) to \(0\) or \(1\) (can be seen as false or true respectively) and \(f\) is always a monotone function (non-increasing or non-decreasing).
For example, if we have the array \(A = \{b_0, b_1, b_2, \dots, b_{n - 1}\}\) and we are going to do queries over the array to determine whether a number is in \(A\) or not we can do these definitions:
\[\mathbb{D} = \{0, 1, 2, \dots, n\}\] \[f_p(x) = [p \leq A[x]]\]
That is, \(f = f_p\) will be a function that will indicate if \(p \leq A[x]\) for \(x \in [0, n)\) and as \(f\) must be monotone we need to sort \(A\) (why?). Now, with these definitions and asumming \(A\) is sorted, \(f\) may looks something like this.
Then, if \(p\) is in the array \(A\), it must hold that \(A[z] = p\), so now our problem is to find the first element where \(f(x) = 1\) and we can compute it using divide and conquer.
#include <bits/stdc++.h>
using namespace std;
// Returns true if p is in A in O(n)
bool brute_force (const vector <int>& A, int p) {
for (int elem: A) {
if (elem == p) return true;
}
return false;
}
// Returns true if p is in A in O(log n)
bool divide_and_conquer (const vector <int>& A, int p) {
int l = 0, r = A.size() - 1;
while (l != r) {
int m = (l + r) >> 1; // = (l + r) / 2
bool f_p = (p <= A[m]);
if (f_p) {
r = m;
} else {
l = m + 1;
}
}
int z = l;
return (A[z] == p);
}
int main () {
// To get 'good' random numbers
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// Create A with n random values
int n = 1000;
int min_value = -1e6;
int max_value = 1e6;
vector <int> A(n);
for (int& elem: A) {
elem = uniform_int_distribution <int> (min_value, max_value)(rng);
}
sort(begin(A), end(A));
// Check q queries
int q = 1000;
for (int i = 0; i < q; i++) {
int p = uniform_int_distribution <int> (min_value, max_value)(rng);
bool ret1 = brute_force(A, p);
bool ret2 = divide_and_conquer(A, p);
if (ret1 != ret2) {
cout << "Something is wrong!\n";
return (-1);
}
}
cout << "OK!\n";
return (0);
}
What would have changed if \(f_p(x) = [A[x] \leq p]\) ?
The idea of defining the set \(\mathbb{D}\) and the mononote function \(f\) can be used in a great variety of problems. For example in this problem.
Here let \(median\) be the median of the original array, then we know that the maximum median we can get must be in in \([median, median + k]\), so \(\mathbb{D} = [median, median + k]\) and let \(f\) be defined like this:
\(f(x) = [\) can we obtain median x in at most k operations? \(]\)
Let \(y\) be the position of the median, then if we have:
\[a_0, a_1, a_2, \dots, a_y, a_{y + 1}, \dots, a_{n - 1}\]
And we want \(x\) as the new median in the minimum number of operations, then we need to make \(x \leq a_i, \forall \, y \leq i \leq n\). (why?). Moreover, there is a point \(z\) such that:
\[f(i) = 1 \quad \forall i \in [median, z]\] \[f(i) = 0 \quad \forall i \in [z + 1, median + 1]\]
So \(f\) is monotone and our answer is \(z\). The we can implement the following solution:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main () {
int n, k;
cin >> n >> k;
vector <int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
sort(begin(a), end(a));
int y = n / 2;
ll median = a[y];
ll l = median, r = median + k;
while (l != r) {
ll m = (l + r + 1) / 2;
ll n_operations = 0;
for (int i = y; i < n; i++) {
if (a[i] < m) {
n_operations += m - a[i];
}
}
if (l < 0) break;
if (n_operations <= k) {
l = m;
} else {
r = m - 1;
}
}
int z = l;
cout << z << '\n';
return (0);
}
In these examples we have defined \(\mathbb{D} \subset \mathbb{Z}\) but we may have, for example, \(\mathbb{D} \subset \mathbb{R}\).
Moreover, if you have problems determining how to compute \(m\), always think of what do you want to do when \(l + 1 = r\). You want that \(m = l \lor m = r\) and then you will find if you need to compute \(m = (l + r) / 2\) or \(m = (l + r + 1) / 2\) and how to update \(l, r\).
Let \(f(x)\) be a unimodal function in \([l, r]\), that is, it holds
- The function stricly increases first, reaches a maximum (at a single point or over an interval) and then stricly decreases.
Or
- The function stricly decreases first, reaches a minimum (at a single point or over an interval) and then stricly increases.
Then, assuming the first scenario (the second one is analogous), how can we find the maximum value of \(f(x) \mid x \in [l, r]\) ?
For simplicity, let \([l, r] \subset \mathbb{R}\).
Let \(l \leq m_1 \leq m_2 \leq r\)
Initially you know that the maximum is in \([l, r]\) and by the trichotomy property there are three cases:
- \(f(m_1) = f(m_2)\). Then we are done
- \(f(m_1) < f(m_2)\). Then the answer must be in \([m_1, r]\) (why?).
- \(f(m_1) > f(m_2)\). Then the answer must be in \([l, m_2]\) (why?).
So, each time we can reduce the interval where the answer must be. In we split the interval \([l, r]\) in three parts, then we will find the answer in \(O(\log n)\) and we may have:
\[m_1 = \frac{2 \cdot l + r}{3}\] \[m_2 = \frac{l + 2 \cdot r}{3}\]
The idea also works when \([l, r] \subset \mathbb{Z}\) with some little modifications, but in these cases it is easier to use binary search because we just need to find the first \(x\) where \(f(x) \leq f(x + 1)\).
Convex functions
We say that a real-valued function is convex if the line segment between any two points on the graph of the function lies above or on the graph. More formally, we have:
Definition 1: A set \(X\) is convex if \(\forall x_1, x_2 \in X, \forall t \in [0, 1]: t \cdot x_1 + (1 - t) \cdot x_2 \in X\).
Definition 2: Let \(f: X \to \mathbb{R}\) be a function where \(X\) is a convex set, then \(f\) is convex if \(\forall x_1, x_2 \in X, \forall t \in [0, 1]: f(t \cdot x_1 + (1 - t) \cdot x_2) \leq t f(x_1) + (1 - t) \cdot f(x_2)\).
Moreover, we have some interesting properties. Let \(f, g\) be convex functions, then we have:
- \(f + g\) is convex
- \(\max(f, g)\) is convex
Some examples of convex function are:
- \(f(x) = |x|\)
- \(f(x) = x^2\)
- \(f(x) = e^x\)
And what is interesting of convex functions is that we can apply ternary search on them to find its minimum value.
Examples
We can use ternary search to find the minimum of:
- \(f(x) = |a_1 - x| + |a_2 - x| + \dots + |a_n - x|\)
- \(f(x) = (a_1 - x)^2 + (a_2 - x)^2 + \dots + (a_n - x)^2\)
Now, try solving the problem at the end of this tutorial to apply what we have learned.
So far we have study binary and ternary search, yet the D&C paradigm does not reduce only to this. Next, we will show you two more scenarios where D&C paradigm comes in handy.
Subproblem: merge two sorted arrays
Let
\[a = [a_1, a_2, \dots, a_n]\] \[b = [b_1, b_2, \dots, b_m]\]
be two sorted arrays. How can we get a sorted array with the elements of \(a\) and \(b\) ?
The most naive approach would be to create an array with its elements and sort it, something like this:
vector <int> c;
for (int elem: a) c.push_back(elem);
for (int elem: b) c.push_back(elem);
sort(begin(c), end(c));
But, this solution is \(O((n + m) \log (n + m))\) and we are not using the fact that both arrays are sorted. But, we can notice that as both array are sorted, the minimum element of \(c\) must be \(a_1\) or \(b_1\). Next, out next minimum element must be in \((a[2:n], b[1:m])\) or in \((a[1:n], b[2:m])\). That is, we can iterate both arrays in such a way the we are always getting the next minimum element of \(c\), therefore we can get \(c\) sorted in \(O(n + m)\) in this way:
#include <bits/stdc++.h>
using namespace std;
// To get 'good' random numbers
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int min_value = -1e6;
int max_value = 1e6;
// return a random integer in [l, r]
int random (int l, int r) {
return uniform_int_distribution <int> (l, r)(rng);
}
vector <int> get_random_array (int n) {
vector <int> ret(n);
for (int& elem: ret) {
elem = random(min_value, max_value);
}
return ret;
}
vector <int> merge (const vector <int>& a, const vector <int>& b) {
const int INF = INT_MAX;
vector <int> A = a;
vector <int> B = b;
int n = A.size();
int m = B.size();
// to simplify the implementation
A.push_back(INF);
B.push_back(INF);
int it1 = 0, it2 = 0;
vector <int> c;
while (it1 < n or it2 < m) {
if (A[it1] <= B[it2]) {
c.push_back(A[it1]);
it1++;
} else {
c.push_back(B[it2]);
it2++;
}
}
return c;
}
int main () {
for (int test = 0; test < 1000; test++) {
int n = random(1, 1000);
int m = random(1, 1000);
vector <int> a = get_random_array(n);
sort(begin(a), end(a));
vector <int> b = get_random_array(m);
sort(begin(b), end(b));
// naive merge
vector <int> c;
for (int elem: a) c.push_back(elem);
for (int elem: b) c.push_back(elem);
sort(begin(c), end(c));
if (c != merge(a, b)) {
cout << "Something is wrong!\n";
return (-1);
}
}
cout << "OK!\n";
return (0);
}
Merge sort
The idea of merge sort is very simple:
Let vector <int> merge_sort(vector <int>& a)
be a function that returns the array a
sorted, then we can define it recursively, we can split the array a
in two disjoint arrays (the optimal is to split it in the middle), sort each new array and then merge then efficiently using the function of the previous subsection. We can implement it in this way:
...
vector <int> merge_sort (const vector <int>& a) {
if (a.size() <= 1) return a;
int m = a.size() / 2;
vector <int> left;
for (int i = 0; i < m; i++) left.push_back(a[i]);
vector <int> right;
for (int i = m; i < a.size(); i++) right.push_back(a[i]);
vector <int> x = merge_sort(left);
vector <int> y = merge_sort(right);
return merge(x, y);
};
...
And we can also implement merge sort in a simple way using the STL in this way:
vector <int> merge_sort (const vector <int>& a) {
if (a.size() <= 1) return a;
int m = a.size() / 2;
vector <int> left(begin(a), begin(a) + m);
vector <int> right(begin(a) + m, end(a));
vector <int> x = merge_sort(left);
vector <int> y = merge_sort(right);
vector <int> ret;
std::merge(begin(x), end(x),
begin(y), end(y),
std::back_inserter(ret));
return ret;
};
Can we improve the above implementation?
Now, in order to get the complexity of this algorithm notice that
- We need to run \(2^0\) merge function in \(O(n / 2^0)\)
- We need to run \(2^1\) merge functions in \(O(n / 2^1)\)
- We need to run \(2^2\) merge functions in \(O(n / 2^2)\)
- We need to run \(2^4\) merge functions in \(O(n / 2^3)\) …
- We need to run \(2^{\log n}\) merge functions in \(O(n / 2^{\log n})\)
We can see it in this way:
So, basically, the number of operations that merge sort does (i.e its complexity) is the area of a rectangle with width \(O(n)\) and height \(O(\log n)\), then the complexity of merge sort is \(O(n \log n)\).
In some mathematical induction proofs we use disjoint smaller cases of a problem to solve a larger one (usually doing some kind of constructions). For example:
Problem: In a square grid of side length \(2^n\), one unit square is blocked (represented by coloring it black). Your task is to cover the remaining \(4^n - 1\) squares with triominos, L-shaped tiles consisting of three squares in the following fashion. The triominos can be rotated by any multiple of \(90\) degrees. Moreover, the triominos may not overlap each other, nor cover anything outside the grid. Given \(1 \leq n \leq 8, 0 \leq x < 2^n \land 0 \leq y < 2^n\). The black square has coordinates \((x, y)\). Find a valid tiling of the grid.
These are the four valid rotations of a triomino.
This is a possible tiling for \(n = 2\).
- The problem and images where taken from Principles of Algorithmic Problem Solving, secion 10.1 - page 170.
First of all let’s prove that there is always a valid tiling by induction:
If \(n = 1\) no matter where that black square is, we can always fill the grid with one of the valid rotations of a triomino.
If \(n > 1\) we can divide the grid in four grids of size \(2^{n - 1}\), we can identify in which new grid the black square is and put a triomino in such a way that it have 1 of its square in one different grid and is not in the grid where the black square is. Then, we have to solve the same problem in four smaller instances, but by the inductive hyphotesis we already have the answer for them. This construction idea can be seen in this image:
And we can use the construction used in the above proof to implement a solution like this:
#include <bits/stdc++.h>
using namespace std;
const int TOP_LEFT = 0;
const int TOP_RIGHT = 1;
const int BOTTON_LEFT = 2;
const int BOTTON_RIGHT = 3;
struct Rectangle {
int x, y;
int len;
pair <int, int> new_black;
Rectangle () {}
Rectangle (int x, int y, int len, int position):
x(x), y(y), len(len) {
switch (position) {
case TOP_LEFT:
new_black = {x, y};
break;
case TOP_RIGHT:
new_black = {x, y + len - 1};
break;
case BOTTON_LEFT:
new_black = {x + len - 1, y};
break;
case BOTTON_RIGHT:
new_black = {x + len - 1, y + len - 1};
break;
default:
break;
}
}
bool has (pair <int, int> black) {
return x <= black.first and black.first < x + len and
y <= black.second and black.second < y + len;
}
};
char cur_letter = 'a';
void update_cur_letter () {
if (cur_letter == 'z') cur_letter = 'a';
else cur_letter++;
}
void solve (Rectangle rect, pair <int, int> black, vector <string>& grid) {
if (rect.len == 1) return;
vector <Rectangle> sector;
int m = rect.len / 2;
int x = rect.x;
int y = rect.y;
sector.emplace_back(x + 0, y + 0, m, BOTTON_RIGHT);
sector.emplace_back(x + 0, y + m, m, BOTTON_LEFT);
sector.emplace_back(x + m, y + 0, m, TOP_RIGHT);
sector.emplace_back(x + m, y + m, m, TOP_LEFT);
char ch = cur_letter;
update_cur_letter();
for (auto s: sector) {
if (s.has(black)) {
solve(s, black, grid);
} else {
grid[s.new_black.first][s.new_black.second] = ch;
solve(s, s.new_black, grid);
}
}
}
int main () {
int n, x, y;
cin >> n >> x >> y;
assert (1 <= n and n < 8);
int m = (1 << n);
assert (0 <= x < m);
assert (0 <= y < m);
vector <string> grid(m, string(m, ' '));
grid[x][y] = '#';
solve(Rectangle(0, 0, m, -1), pair <int, int>(x, y), grid);
for (string& row: grid) cout << row << '\n';
return (0);
}
Here is an animation of the above problem. You can interact with it:
Recommended readings:
- Principles of Algorithmic Problem Solving, section 10.1 and 10.2
- E-maxx - Ternary search
- HackerEarth - Searching [Tutorial]
- PCUNI-2019 clase 16
- Topcoder - Binary stride a variant on binary search
You can find the contest here.
A: Creative Snap
Creative Snap
Read carefully the problem, it is basically describing what to implement.
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, k, A, B;
vector <int> arr;
int get (int l, int r) {
if (arr.back() < l) return 0;
if (arr.front() > r) return 0;
int it1 = lower_bound(begin(arr), end(arr), l) - begin(arr);
int it2 = upper_bound(begin(arr), end(arr), r) - begin(arr) - 1;
return it2 - it1 + 1;
}
ll dc (int l, int r) {
int cnt = get(l, r);
if (cnt == 0) return A;
if (l == r) return B * cnt * 1;
int m = (l + r) >> 1;
return min(1LL * B * cnt * (r - l + 1), dc(l, m) + dc(m + 1, r));
}
int main () {
ios::sync_with_stdio(false);
cin >> n >> k >> A >> B;
arr.resize(k);
for (int i = 0; i < k; i++) cin >> arr[i];
sort(begin(arr), end(arr));
cout << dc(1, (1 << n)) << endl;
return (0);
}
B: Code For 1
Code For 1
You just need to count the number of element in \([l, r]\) that are one in the final array and we can use divide and conquer to generate it.
Code
#include <bits/stdc++.h>
#define all(A) begin(A), end(A)
#define rall(A) rbegin(A), rend(A)
#define sz(A) int(A.size())
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <pii> vpii;
typedef vector <pll> vpll;
int main () {
ios::sync_with_stdio(false); cin.tie(0);
ll n, l, r;
cin >> n >> l >> r;
ll m = n;
ll k = 0;
while (m) {
k++;
m /= 2;
}
function <int(ll,ll,ll)> dc = [&] (ll n, ll x, ll y) -> int {
if (not (max(x, l) <= min(r, y))) return 0;
ll m = (x + y) / 2;
ll ret = 0;
if (l <= m and m <= r and n & 1) ret = 1;
ret += dc(n / 2, x, m - 1);
ret += dc(n / 2, m + 1, y);
return ret;
};
cout << dc(n, 1, (1LL << k) - 1) << '\n';
return (0);
}
C: Race Time!
Race Time!
We have that \(f\) is a convex function, then we can find the minimum point using ternary search.
Code
#include <bits/stdc++.h>
#define all(A) begin(A), end(A)
#define rall(A) rbegin(A), rend(A)
#define sz(A) int(A.size())
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <pii> vpii;
typedef vector <pll> vpll;
int main () {
ios::sync_with_stdio(false); cin.tie(0);
int n, k;
cin >> n >> k;
vector <pll> arr(n);
for (auto& pp: arr) cin >> pp.first >> pp.second;
double l = 0, r = k;
auto eval = [&] (double t) {
vector <double> val(n);
for (int i = 0; i < n; i++) {
val[i] = arr[i].first * t + arr[i].second;
}
return *max_element(all(val)) - *min_element(all(val));
};
for (int it = 0; it < 100; it++) {
double ll = (2 * l + r) / 3.0;
double rr = (l + 2 * r) / 3.0;
if (eval(ll) < eval(rr)) r = rr;
else l = ll;
}
cout << fixed << setprecision(6) << eval(l) << '\n';
return (0);
}
D: Trick or Treat
Trick or Treat
The function we want to minimize is convex, then we can apply ternary search.
Code
#include <bits/stdc++.h>
#define all(A) begin(A), end(A)
#define rall(A) rbegin(A), rend(A)
#define sz(A) int(A.size())
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <pii> vpii;
typedef vector <pll> vpll;
int main () {
ios::sync_with_stdio(false); cin.tie(0);
int n;
while (cin >> n, n != 0) {
vector <pair <double, double>> arr(n);
for (auto& pp: arr) cin >> pp.first >> pp.second;
auto eval = [&] (double x) {
// point (x, 0)
double ret = 0;
for (auto pp: arr) {
double dis = sqrt(pow(pp.first - x, 2) + pow(pp.second, 2));
ret = max(ret, dis);
}
return ret;
};
double l = -1e9, r = 1e9;
for (int it = 0; it < 100; it++) {
double ll = (2 * l + r) / 3.0;
double rr = (l + 2 * r) / 3.0;
if (eval(ll) < eval(rr)) r = rr;
else l = ll;
}
cout << fixed << setprecision(10) << l << ' ' << eval(l) << '\n';
}
return (0);
}
E: Energy exchange
Energy exchange
Let \(x\) be the final amount of energy, then you can compute the amount of enery that must be transfered and if it is non-negative, then it is possible to get that final amount of energy. Therefore, we can use binary search to get the maximum possible amount of energy.
Code
#include <bits/stdc++.h>
#define all(A) begin(A), end(A)
#define rall(A) rbegin(A), rend(A)
#define sz(A) int(A.size())
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <pii> vpii;
typedef vector <pll> vpll;
int main () {
ios::sync_with_stdio(false); cin.tie(0);
int n, k;
cin >> n >> k;
vi arr(n);
for (int i = 0; i < n; i++) cin >> arr[i];
auto check = [&] (double x) {
double ret = 0;
for (int elem: arr) {
if (x <= elem) ret += 1.0 * (100.0 - k) * (elem - x) / 100.0;
else ret += elem - x;
}
return (ret >= 0);
};
double l = 0;
double r = *max_element(all(arr));
for (int it = 0; it < 100; it++) {
double m = (l + r) / 2.0;
if (check(m)) l = m;
else r = m;
}
cout << fixed << setprecision(12) << l << '\n';
return (0);
}
F: Monitor
Monitor
Let \(g = \gcd(x, y)\), \(x' = x / g\), \(y' = y / g\), then we have to find \(\max(m: m \cdot x' \leq a \land m \cdot y' \leq b)\) and we can find such \(d\) using binary search.
Code
#include <bits/stdc++.h>
#define all(A) begin(A), end(A)
#define rall(A) rbegin(A), rend(A)
#define sz(A) int(A.size())
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef vector <int> vi;
typedef vector <ll> vll;
typedef vector <pii> vpii;
typedef vector <pll> vpll;
int main () {
ios::sync_with_stdio(false); cin.tie(0);
ll a, b, x, y;
cin >> a >> b >> x >> y;
ll g = __gcd(x, y);
x /= g;
y /= g;
ll l = 0, r = 2e9;
while (l != r) {
ll m = (l + r + 1) / 2;
if (m * x <= a and m * y <= b) l = m;
else r = m - 1;
}
cout << l * x << ' ' << l * y << '\n';
return (0);
}


The user first tries to login, he makes a HTTP post request that is handled by Netty and inturn by our play
application. When we get a request from the user to login to the application, we create a router which
manages 10 login actors in Roundrobin fashion.
We have built our Data access layer using
SLICK which uses Functional Relational Mapping (FRM) that makes it easy to access database in asynchronous
manner. We use MySQL as our database.Unfortunately there still isn't an asynchronous JDBC driver for MySQL.
So one of the way to use SLICK is to configure SLICK to use a different threadpool to query the data base. This
makes sure that the threads in plays DEFAULT THREAD POOL is not blocked making database calls.
Once we have the user logged in, we maintain the user session with cookies (which are encrypted by playframework).
This makes sure that the user does not tamper the cookies. Here, unlike our regular J2EE server/Servlet container,
the session object is not stored in the server. This helps us scale the application horizontally.
When the user
makes a request for his recommendation, we create a UserActor with the help of plays inbuilt support for WebSockets
Choosing Kafka was a tricky decision. At times we felt it was an overkill, but given that we designed our
system to have only one Recommendation model instance we definitely needed some kind of a Message broker
or a queuing system in place so that we could buffer user data(with guaranteed data persistence and
ordering) when we have a lot of users concurrently seeking recommendation. We chose Kafka because it gives us
best of both worlds(Subscribe/Produce messaging system and queuing messaging system).
In kafka we decided to
have 2 topics, one for requesting recommendation and the other for recommended listings.Once the user requests for
recommendation, the user actor spawns another child actor that fetches user relevant past data from our HBase
system and publishes that to Kafka. It is worthy to note that we have only One producer and one consumer>
reading data from kafka topic(which has just one partition). This design can be improvised when we have multiple
instances of our recommendation engine that can concurrently serve multiple users.
Because KafkaProducer is thread safe we have our multiple actors that talk to HBase publish data
to kafka
topic using the same producer concurrently.
Unfortunately KafkaConsumer is not threadsafe. To tackle the
problem, we have two more actors under the actor system. Both these actors are singleton actors. KafkaConsumerClientManagerActor
which has a mutable HashMap that stores the userId and ActorRef and the ConsumerActor which is
blocking. The UserActors talk to the KafkaConsumerClientManagerActor waiting for recommended data.
KafkaConsumerClientManagerActor inturn requests the ConsumerActor to poll Kafka for records. Once there is
some record in the subscribed kafka topic, the ConsumerActor sends these records to KafkaConsumerClientManagerActor.
For each record that the KafkaConsumerClientManagerActor receives, it checks for the userId in the hashtable and
asynchronously sends the recommended data to the respective user Actors. The user actors then transmits this data to
the client over the existing WebSocket connection and then closes this socket by spilling PoisonPills to
itself.


Go to Point of Sale → Configuration → Point of Sale.
To apply POS Ticket Template:
To apply PosBox Receipt Template:
If POS ticket template looks as follows:
You would see the result on receipt screen
If PosBox receipt template looks as follows:
You can see it when print a payment receipt on your Receipt printer
Contact us by email or fill out request form


SPAN Configuration
11 Mar 2017 | configurationBasic SPAN Configuration:
SW1(config)# monitor session 1 source interface fa0/12
SW1(config)# monitor session 1 destination interface fa0/24
Here is an example where we will only monitor respective traffic from fa0/18 and only monitor sent traffic from interface fa0/19. Additionally we will filter (remove) VLANs 1 through 3. Finally, we will preserve the encapsulation from the sources:
SW1(config)# monitor session 1 source interface fa0/18 rx
SW1(config)# monitor session 1 source interface fa0/19 tx
SW1(config)# monitor session 1 filter vlan 1-3
SW1(config)# monitor session 1 destination interface fa0/24 encapsulation replicate
Next we have a RSPAN sample configuration. We will monitor all traffic on VLANs 66-68 on SW1 and send it to VLAN 199, which will then be delivered to port fa0/24 on SW2:
SW1(config)# vlan 199
SW1(config-vlan)# remote span
SW1(config-vlan)# exit
SW1(config)# monitor session 1 source vlan 66-68
SW1(config)# monitor session 1 destination remote van 199
SW2(config)# vlan 199
SW2(config-vlan)# remote span
SW2(config-vlan)# exit
SW2(config)# monitor session 2 source remote vlan 199
SW2(config)# monitor session 2 destination interface fa0/24
Notice above that the monitor session numbers do not have to match on each switch.
Finally, we have a ERSPAN example. We will configure R1 to capture received traffic and send it to SW1 gig2/1.
R1(config)# monitor session 1 type erspan-source
R1(config-mon-erspan-src)# source interface gig1/1 rx
R1(config-mon-erspan-src)# no shutdown
R1(config-mon-erspan-src)# destination
R1(config-mon-erspan-src-dst)# erspan-id 101
R1(config-mon-erspan-src-dst)# ip address <IP_ADDRESS>
R1(config-mon-erspan-src-dst)# origin ip address <IP_ADDRESS>
SW1(config)# monitor session 2 type erspan-destination
SW1(config-mon-erspan-dst)# destination interface gig2/1
SW1(config-mon-erspan-dst)# no shutdown
SW1(config-mon-erspan-dst)# source
SW1(config-mon-erspan-dst-src)# erspan-id 101
SW1(config-mon-erspan-dst)# ip address <IP_ADDRESS>
A couple of configuration notes. First, you must make sure the destination port is not in a shutdown state or else the SPAN session will not come up.
If you want to leave the original encapsulation of the frames intact, use the encapsulation replicate
option on the monitor session destination command.
One confusing option is the ingress dot1q vlan 10
option on the destination interface. This is actually telling the switch to accept incoming frames on the destination monitor switch and place the frames in VLAN 10. This would let you use the destination port like a normal access port. Seems kind of silly to me as to why you would want to do that, but I am sure there is a reason.
`monitor session 1 destination interface gig0/24 ingress dot1q vlan 146
`The above accepts inbound packets with 802.1Q encapsulation with the given VLAN as the default VLAN. Compare that to the example below, which accepts incoming packets with untagged encapsulation type with the specified VLAN as the default VLAN.
`monitor session 1 destination interface gig0/24 ingress vlan 146
To view the session, simply use
show monitor session 1`.
Comments


- This is not a treatment study and we do not expect any medical side effects from participating
- Some survey questions may make you feel uncomfortable. Know that the information you provide is entirely up to you and you are free to skip questions that you do not want to answer
- Other people may glimpse the study notifications and/or reminders on your phone and realize you are enrolled in this study. This can make some people feel self-conscious


3 writes to _implementingType
System.Management.Automation (3)
engine\CmdletInfo.cs (3)
60
_implementingType
= implementingType;
78
_implementingType
= other._implementingType;
131
_implementingType
= implementingType;
2 references to _implementingType
System.Management.Automation (2)
engine\CmdletInfo.cs (2)
78
_implementingType = other.
_implementingType
;
278
return
_implementingType
;


User Persona:
- Name: Steven Buckley
- Age: 27
- Occupation: Waiter
- Hobbies: Playing video games, going on walks every couple of weeks, and reading
- Technology: Phone: Samsung Galaxy S8. Laptop: HP Pavilion 15t. OS: Windows 10. Console:
Nintendo Switch and Playstation 4
- Attitude: Easy-going, Casual, and laid-back
- Needs/Goals/Features:
- A way to quickly to look up information necessary to on a walk
- Perhaps a way to rate the trail he walked on to allow others to know how good or bad it was
- Frustrations:
- Is tired of sites that give too much information in a a large amount of words
- Wants something fast and easy to use while on the go
User Story:
As a user, Steven would like to quickly look up some information regarding trails in a easy to understand method.
Use Case:
Title: Going on an enjoyable walk.
Description: Looking up some information to go on a walk that would be appropriate for a walker on
of his level.
Name of user & their role: Steven; a waiter who would like to go on a nice walk.
Usage Preconditions: Must have some prior knowledge of the site, a device to access the
site, an account with the site, and an internet connection
Usage post conditions: Steven has gone on a nice trail and has left his rating.
Interaction Flow:
- Steven boots up the site on his phone.
- The server returns the site's home page.
- While on the home page, the home page will automatically ask Steven to log in.
- Steven enters his log in information.
- Steven begins to search for trails by location and difficulty.
- The server returns a list of choices and Steven chooses one from the list .
- Server display more information about the trail in an easy to understand manner.
- Steven acquires the location and heads to it.
- Steven goes on a walk
- After Steven has finished his walk he chooses to leave a rating
- The server receives his review and adds it to the database
- Steve closes the site.
Frequency of Use: Once every 2-3 weeks.


|
ActiveTcl User Guide
|
||
Tcl_RecordAndEvalObj - save command on history list before evaluating
#include <tcl.h>
int
Tcl_RecordAndEvalObj(interp, cmdPtr, flags)
Tcl_RecordAndEvalObj is invoked to record a command as an event on the history list and then execute it using Tcl_EvalObjEx (or Tcl_GlobalEvalObj if the TCL_EVAL_GLOBAL bit is set in flags). It returns a completion code such as TCL_OK just like Tcl_EvalObjEx, as well as a result object containing additional information (a result value or error message) that can be retrieved using Tcl_GetObjResult. If you don't want the command recorded on the history list then you should invoke Tcl_EvalObjEx instead of Tcl_RecordAndEvalObj. Normally Tcl_RecordAndEvalObj is only called with top-level commands typed by the user, since the purpose of history is to allow the user to re-issue recently-invoked commands. If the flags argument contains the TCL_NO_EVAL bit then the command is recorded without being evaluated.
Tcl_EvalObjEx, Tcl_GetObjResult
command, event, execute, history, interpreter, object, record
Copyright © 1997 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.


Open Hootsuite, login with<EMAIL_ADDRESS>(Password is the same as AQ Reporting IDIR password.)
Click on the down arrow of the New Post button, and select "Post"
Under "Publish to" select the EnvReportBC Twitter account.
Paste in the URL in the Content field and click on "Shorten with Ow.ly" to create the short URL.
Copy the newly created shortened URL link and return to the AQSS posting page to paste the link along with your SMS text message. WEEKENDS only: after you have copied the shortened URL to AQSS, you can now click "Post now" to post this on to the ENVReportBC Twitter account.
Contact Data Systems Unit for any technical issues, questions or comments about the Air Quality Subscription Service.


This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
This card has supporting text below as a natural lead-in to additional content.
This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.
This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
This card has supporting text below as a natural lead-in to additional content.
This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.
Delivery
0987654321
0987654321
0987654321
Copyright © 2021
Developed by Nan Thu Zar Aung & Khine Moe Lwin


| 019:046 Khan | : |
He (the father) said: "Do you reject my gods, O Ibrahim (Abraham)? If you stop not (this), I will indeed stone you. So get away from me safely before I punish you." |
| 019:046 Maulana | : |
He said: Dislikest thou my gods, O Abraham? If thou desist not, I will certainly drive thee away. And leave me for a time. |
| 019:046 Pickthal | : |
He said: Rejectest thou my gods, O Abraham? If thou cease not, I shall surely stone thee. Depart from me a long while! |
| 019:046 Rashad | : |
He said, "Have you forsaken my gods, O Abraham? Unless you stop, I will stone you. Leave me alone." |
| 019:046 Sarwar | : |
His father replied, "Abraham, are you telling me to give-up my gods? If you will not stop this, I shall stone you to death. Leave my house and do not come back again". |
| 019:046 Shakir | : |
He said: Do you dislike my gods, O Ibrahim? If you do not desist I will certainly revile you, and leave me for a time. |
| 019:046 Sherali | : |
He replied, 'Dost thou turn away from my gods, O Abraham? If thou desist not, I will surely cut off all relations with thee. Now leave me alone for a while.' |
| 019:046 Yusufali | : |
(The father) replied: "Dost thou hate my gods, O Abraham? If thou forbear not, I will indeed stone thee: Now get away from me for a good long while!" |
Concepts/Themes Covered: أركان الإسلام > التوحيد > الملحدون المنكرون ليوم البعث Pillars of Islam> Islamic> The Apostates Who Denies the Resurrection العمل > العمل الصالح > حسن السلوك Action(Work)> The Good Deeds>Good Conduct الإنسان والعلاقات الأخلاقية > الأخلاق الحميدة > السلوك الحسن Man and The Moral Relations> Good Morals>Good Conduct
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


source:
https://github.com/mitchellh/vagrant-aws https://www.packer.io/docs/builders/amazon.html#toc_1 https://devops.com/devops-primer-using-vagrant-with-aws/
The latest version of vagrant-aws at the time of this blog post is 0.7.2.
Prerequisites
If you haven’t already done so the following pre-requisites are assumed for this tutorial. http://joncmaloney.com/blog/2018/08/17/Install-vagrant-Centos.html
First install vagrant-aws
$ sudo vagrant plugin install vagrant-aws
# verify the install with
$ vagrant plugin list
Download a dummy aws box and then update the parameters of the box. Essentially just use this file as a template.
$ vagrant box add aws https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
When downloading this file I got an error message that seemed a bit weird.
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'aws' (v0) for provider:
box: Downloading: https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
box: Download redirected to host: raw.githubusercontent.com
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.
The requested URL returned error: 502 Bad Gateway
If this happens just run the download again and it should be fine.
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'dummy' (v0) for provider:
box: Downloading: https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
box: Download redirected to host: raw.githubusercontent.com
==> box: Successfully added box 'dummy' (v0) for 'aws'!
Create a new IMA user so this user has access to creating ec2 instances. The following policy document provides the minimal set permissions necessary for Packer to work. There will be a series of blog posts about AWS security, users and roles but this is not yet complete until then you can check out how packer.io has setup security for ec2 instances. The below is an extract of their security policy.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action" : [
"ec2:AttachVolume",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CopyImage",
"ec2:CreateImage",
"ec2:CreateKeypair",
"ec2:CreateSecurityGroup",
"ec2:CreateSnapshot",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:DeleteKeyPair",
"ec2:DeleteSecurityGroup",
"ec2:DeleteSnapshot",
"ec2:DeleteVolume",
"ec2:DeregisterImage",
"ec2:DescribeImageAttribute",
"ec2:DescribeImages",
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSnapshots",
"ec2:DescribeSubnets",
"ec2:DescribeTags",
"ec2:DescribeVolumes",
"ec2:DetachVolume",
"ec2:GetPasswordData",
"ec2:ModifyImageAttribute",
"ec2:ModifyInstanceAttribute",
"ec2:ModifySnapshotAttribute",
"ec2:RegisterImage",
"ec2:RunInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Resource" : "*"
}]
}
After running “vagrant box add…” a Vagrantfile will appear in your current directory. Modify the Vagrantfile so it looks similar to the blow. Note there are some extended parameters that are not included in the blog post from mitchellh or from devops.com. These extended parameters are to ensure vagrant can access the new ec2 instance via our VPC. If you are not sure about how to setup EC2 infrastructure check out our upcoming series.
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Require the AWS provider plugin
require 'vagrant-aws'
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "aws"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via <IP_ADDRESS> to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "<IP_ADDRESS>"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "<IP_ADDRESS>"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "aws" do |aws, override|
# Read AWS authentication information from environment variables
aws.access_key_id = 'XXXXXXXXXXXXXXXXXXX'
aws.secret_access_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
# Specify SSH keypair to use
aws.keypair_name = 'MyPemFile'
aws.instance_type = 't2.micro'
# Specify region, AMI ID, and security group(s)
aws.region = 'ap-southeast-2'
aws.ami = 'ami-67589505'
aws.security_groups = ['sg-f1d64889']
aws.subnet_id = 'subnet-2477d77c'
aws.associate_public_ip = 'true'
# Specify username and private key path
override.ssh.username = 'ec2-user'
override.ssh.private_key_path = "Path to my ssh pem file"
aws.ssh_host_attribute = :private_ip_address
# Tag the machine with a name.
aws.tags = {
'Name' => 'my-server'
}
# Customize the amount of memory on the VM:
# vb.memory = "1024"
end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
config.vm.provision "shell", inline: <<-SHELL
yum -y update
yum install -y wget nano git
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.42-1.gitad8f0f7.el7.noarch.rpm
yum install -y docker-ce
systemctl start docker
SHELL
end
You might also notice that this Vagrantfile includes provisioning to install docker. This is a logical progression from one of our first posts about How to install docker CE. The following explains each of the parameters used in the Vagrantfile.
access_key_id
- The access key from the IMA user you created.aws.secret_access_key
- The secret from the IMA user you created.aws.keypair_name
- The name of the pem file which is used to access the EC2 instance.aws.instance_type
- The type of instance, such as “m3.medium” or “t2.micro”.aws.region
- The region where your EC2 instance is to be launched. Note you must also have your security groups and VPC created in this region.aws.ami
- The name of the image you wish to startup. In this case we have used an Amazon Red Hat Quick Start image. The ami is also linked to the region. You can find the ami by clicking on Launch Instance from the AWS EC2 web console.aws.security_groups
- This supposably can take the security group name however this wasn’t working for me. I had to use the group id instead. Vagrant will by use the ‘default’ security group if this is not defined.aws.subnet_id
- The VPC subnet that the EC2 instance will join.aws.associate_public_ip
- Set to true if you want your EC2 instance to have a public IP address. If you haven’t setup a NAT gateway inside your VPC then you will have to give the instance a public IP address so it can reach the internet.override.ssh.username
- The username of the user in the EC2 instance. When using the Red Hat image we have specified the default user is ec2-user; a list of default usernames is in this article.override.ssh.private_key_path
- The path to the pem file to gain ssh access to your EC2 machine.aws.ssh_host_attribute
- How ssh will connect to your EC2 instance.:public_ip_address
,:dns_name
, or:private_ip_address
, will use the public IP address, DNS name, or private IP address, respectively, to SSH to the instance. By default Vagrant uses the first of these (in this order) that is known. However, this can lead to connection issues if, e.g., you are assigning a public IP address but your security groups prevent public SSH access and require you to SSH in via the private IP address; specify:private_ip_address
in this case.aws.tags
- A tag you can add to your EC2 instance. I like to name each of my instances. In our example we have named the instance my-server.
Troubleshoot:
To help troubleshoot when using vagrant. You can use the –debug option which will show debug logs whilst vagrant is statrting up.
$ sudo vagrant up --debug --provider=aws


Contents
CAJAL3D Demo Script
Set xyz starting point. Since anyone can use this script you may want to "move" to a different region to run.
xstart = 3000; ystart = 6000; zstart = 400;
Create OCP Interface and set tokens
% Create an OCP Object. This is the main class used for talking with OCP % services. If you want to create an OCP object that will use the % distributed semaphore (assuming you've set it up) use OCP('semaphore') % instead. oo = OCP(); % Set the server location. This is the default server and most likely the % one you should be using. oo.setServerLocation('http://openconnecto.me/'); % Set the image token. This is the database for image data reading. oo.setImageToken('kasthuri11cc'); % Set the image token. This is the database for image data reading. You % can also read this from a file using setAnnoTokenFile. Also update % propagate status to make the annotation project writeable. % Note: We do not propagate in the demo script. oo.setAnnoToken('cajal_demo'); oo.setAnnoChannel('anno'); oo.makeAnnoWritable(); % Information about the databases are accessible oo.annoInfo.DATASET oo.annoInfo.DATASET.IMAGE_SIZE(1) % Set the default resolution. This is the resolution at which operations % should occur unless otherwise specified. oo.setDefaultResolution(1); % There are other options to further tweak the OCP object. % oo.setBatchSize - This sets the maximum number of objects the API will % group into a single batch write. You shouldn't have to change this. % oo.setMaxAnnoSize - This is the maximum size an annotation can be before % the API automatically chunks it up into multiple writes. You shouldn't % have to touch this. % oo.setErrorPageLocation - this is where OCP errors will be written. The % server generates an html response that can be viewed for debugging.
ans = CUBE_DIMENSION: [8x1 containers.Map] IMAGE_SIZE: [8x1 containers.Map] NAME: {'kasthuri11cc'} OFFSET: [8x1 containers.Map] RESOLUTIONS: [0 1 2 3 4 5 6 7] TIMERANGE: [0 0] VOXELRES: [8x1 containers.Map] ans = 10752 13312 1850
Get Some Image Data
The OCPQuery object is the basis for building queries for the database. The constructors accept multiple options so check out the code.
% Build query to cutout IMAGE data. q = OCPQuery(eOCPQueryType.imageDense); % The validate method can be used to check if the query has any errors [pf, msg] = q.validate() % setCutoutArgs sets all the required fields for a cutout query. q.setCutoutArgs([xstart xstart+500],... [ystart ystart+500],... [zstart zstart+5],... 1); % Query is now valid [pf, msg] = q.validate() % Download the data into a RAMONVolume. The RAMONVolume stores the image % data in the .data property. There are other useful bits of information, % specifically the xyzOffset value which indicates where the data came % from. cutout = oo.query(q); cutout % The image method has been overloaded to launch the API's simple data % viewer. '?' prints the shortcuts image(cutout);
pf = 0 msg = [E] X Range is required for dense cutouts [E] Y Range is required for dense cutouts [E] Z Range is required for dense cutouts [W] Resolution is empty. Default resolution will be used at runtime. pf = 1 msg = '' cutout = 500x500x5 RAMONVolume array with properties: xyzOffset: [3000 6000 400] resolution: 1 name: 'image' sliceDisplayIndex: 1 dataFormat: [1x1 eRAMONDataFormat] data: [500x500x5 uint8] id: [] channel: [] confidence: 1 dynamicMetadata: [0x1 containers.Map] status: [1x1 eRAMONAnnoStatus] author: 'unspecified' dataType: [1x1 eRAMONChannelDataType] channelType: [1x1 eRAMONChannelType]
Create a Synapse
Create some 'dummy' labels
d = zeros(200,200,5); d(30:170,30:170,:) = 1; % Create an empty RAMONSynapse object s1 = RAMONSynapse() % Set the objects properties as desired. s1.setCutout(uint32(d)); s1.setXyzOffset([xstart ystart zstart]); s1.setResolution(1); s1.setSynapseType(eRAMONSynapseType.excitatory); s1.setSeeds([2 4 6 3]); s1.setConfidence(.8);
s1 = 0x0 RAMONSynapse array with properties: synapseType: [1x1 eRAMONSynapseType] weight: [] segments: [0x1 containers.Map] seeds: [] xyzOffset: [] resolution: [] name: 'Volume1' sliceDisplayIndex: 1 dataFormat: [1x1 eRAMONDataFormat] data: [] id: [] channel: [] confidence: 1 dynamicMetadata: [0x1 containers.Map] status: [1x1 eRAMONAnnoStatus] author: 'unspecified' dataType: [] channelType: []
Upload a Synapse
%Simply passing the RAMON object (or any RAMON object really...) will upload %the data and create an annotation. The database will assign an ID as long %as the ID was empty in the RAMON object. id1 = oo.createAnnotation(s1);
Download a Synapse
The server can't get objects that don't exist THIS LINE SHOULD THROW AN EXCEPTION AS AN EXAMPLE
%sbad = oo.query(OCPQuery(eOCPQueryType.RAMONDense,4565564531)); % Download the synapse we just uploaded. s1 and s2 should now contain the % same data, but s2 has been spatially aligned to the backend storage cuboids and has % been assigned an ID. s2 = oo.query(OCPQuery(eOCPQueryType.RAMONDense,id1));
Update a Synapse
You can directly update metadata fields
f = OCPFields(); oo.getField(id1,f.synapse.author) oo.setField(id1,f.synapse.author,'demo_test'); oo.getField(id1,f.synapse.author) % You can also update the object locally and then push the changes. if % you're changing the annotation data this is how it is done as well. oo.getField(id1,f.synapse.weight) s2.setWeight(.5); id1 = oo.updateAnnotation(s2); oo.getField(id1,f.synapse.weight)
ans = unspecified ans = demo_test ans = 0 ans = 0.5000
Query for Synapses
You can query the database for IDs that match some list of predicates. This can also be done spatially!
q = OCPQuery(eOCPQueryType.RAMONIdList);
q.addIdListPredicate(eOCPPredicate.type,eRAMONAnnoType.synapse);
idList = oo.query(q) %#ok<*NASGU,*NOPTS>
idList = 1 3 14
Delete a Synapse
Delete and annotation by its ID
oo.deleteAnnotation(id1) idList = oo.query(q)
ans = Success idList = 1 3
Re-Upload the Synapse
% Create some 'dummy' labels d = zeros(200,200,5); d(30:170,30:170,:) = 1; % Create an RAMONSynapse object with a single call. s3 = RAMONSynapse(d,eRAMONDataFormat.dense,[xstart+450 ystart+540 zstart+65],1); id3 = oo.createAnnotation(s3);
Download a server side rendered overlay image (2D only)
q = OCPQuery(eOCPQueryType.overlaySlice); q.setSliceArgs(eOCPSlicePlane.xy,... [s1.xyzOffset(1) - 250, s1.xyzOffset(1) + 250],... [s1.xyzOffset(2) - 250, s1.xyzOffset(2) + 250],... s1.xyzOffset(3) + 2,... 1) slice = oo.query(q); figure; imshow(slice); % You can set the alpha too. q.setOverlayAlpha(.7); slice = oo.query(q); figure; imshow(slice); % You can set the alpha too. q.setOverlayAlpha(.3); slice = oo.query(q); figure; imshow(slice);
ans = OCPQuery with properties: type: [1x1 eOCPQueryType] id: [] resolution: 1 xRange: [] yRange: [] zRange: [] slicePlane: [1x1 eOCPSlicePlane] aRange: [2750 3250] bRange: [5750 6250] cIndex: 402 overlayAlpha: [] idListPredicates: [0x1 containers.Map] idListLimit: [] xyzCoord: [] filterIds: [] channels: []
Download Image and Anno Cutouts
Finally lets cutout both an image and annotation volume around the annotation we created and view them together using the basic viewer.
% You can do it the hard manual way. q = OCPQuery(eOCPQueryType.annoDense); q.setCutoutArgs([s3.xyzOffset(1) - 250 s3.xyzOffset(1) + 250],... [s3.xyzOffset(2) - 150 s3.xyzOffset(2) + 250],... [s3.xyzOffset(3) - 3 s3.xyzOffset(3) + 3],... 1); cutoutAnno = oo.query(q); q = OCPQuery(eOCPQueryType.imageDense); q.setCutoutArgs([s3.xyzOffset(1) - 250 s3.xyzOffset(1) + 250],... [s3.xyzOffset(2) - 150 s3.xyzOffset(2) + 250],... [s3.xyzOffset(3) - 3 s3.xyzOffset(3) + 3],... 1); cutoutImage = oo.query(q); h = image(cutoutImage); % Press the 'a' key to toggle the annotation overlay on and off. h.associate(cutoutAnno); % You can also do it the easy automatic way if you are trying to just % visualize a specific RAMON Object. q = OCPQuery(eOCPQueryType.RAMONDense,id3) cutoutAnno = oo.query(q); q_anno = cutoutAnno.toImageDenseQuery(); cutoutImg = oo.query(q_anno); h = image(cutoutImg); h.associate(cutoutAnno);
q = OCPQuery with properties: type: [1x1 eOCPQueryType] id: 15 resolution: [] xRange: [] yRange: [] zRange: [] slicePlane: [] aRange: [] bRange: [] cIndex: [] overlayAlpha: [] idListPredicates: [0x1 containers.Map] idListLimit: [] xyzCoord: [] filterIds: [] channels: []
More...
This example script provides some initial code to get you started, but there is much more to the API. The unit tests more comprehensively describe the full functionality.


Welcome to TIN vSphere Helper
The Teammate I Need
Log in to vCenter Server to get started
Unable to authenticate
Authenticate
Unable to retrieve data
TIN vSphere Helper
Reporting
Actions
Log Out
vCenter
Hosts
VMs
Getting info...
Installed vCenter extensions
Key
Label
Summary
Version
Hosts page
Host versions summary
Name
Major Version
Build
Release Name
Check vMotion Compatibility
Copy vCenter Role
Getting info...
Check vMotion Compatibility across all hosts and VMs in a given cluster
Select a cluster:
Test vMotion
VM
target Host
Error message


Press numbers 1-8 to change preset
Press the tilde key (~) to take a screenshot
Recolour the screenshots, then drag them back on to the game to load.
Details on Github
normal
posterized
odd
black+white
voxelgram
dusk
invert
light


@main(title = "Home") { } { Auction Start Buying your Favourite Crafts Home } { Bid Quick View {{ obj.name }} ${{ obj.price}} }


| app-gw |
|
0% |
0/75 |
0% |
0/31 |
0% |
0/7 |
0% |
0/30 |
| app-gw/car-detail |
|
0% |
0/11 |
0% |
0/4 |
0% |
0/3 |
0% |
0/5 |
| app-gw/car-detail/components |
|
0% |
0/48 |
0% |
0/24 |
0% |
0/8 |
0% |
0/17 |
| app-gw/car-detail/constants |
|
0% |
0/4 |
100% |
0/0 |
100% |
0/0 |
0% |
0/1 |
| app-gw/car-detail/pages |
|
0% |
0/45 |
0% |
0/14 |
0% |
0/7 |
0% |
0/27 |
| app-gw/car-detail/redux |
|
0% |
0/18 |
0% |
0/8 |
0% |
0/2 |
0% |
0/4 |
| app-gw/errors |
|
0% |
0/6 |
100% |
0/0 |
100% |
0/0 |
0% |
0/2 |
| app-gw/errors/pages |
|
0% |
0/20 |
0% |
0/8 |
0% |
0/2 |
0% |
0/5 |
| app-gw/home |
|
0% |
0/6 |
100% |
0/0 |
100% |
0/0 |
0% |
0/2 |
| app-gw/home/components |
|
0% |
0/103 |
0% |
0/34 |
0% |
0/14 |
0% |
0/55 |
| app-gw/home/constants |
|
0% |
0/4 |
100% |
0/0 |
100% |
0/0 |
0% |
0/1 |
| app-gw/home/pages |
|
0% |
0/27 |
0% |
0/12 |
0% |
0/3 |
0% |
0/10 |
| app-gw/home/redux |
|
0% |
0/35 |
0% |
0/8 |
0% |
0/5 |
0% |
0/14 |
| app-gw/login |
|
0% |
0/6 |
100% |
0/0 |
100% |
0/0 |
0% |
0/2 |
| app-gw/login/components |
|
0% |
0/18 |
0% |
0/10 |
0% |
0/2 |
0% |
0/5 |
| app-gw/login/pages |
|
0% |
0/20 |
0% |
0/12 |
0% |
0/4 |
0% |
0/4 |
| app-gw/root |
|
0% |
0/62 |
0% |
0/20 |
0% |
0/7 |
0% |
0/22 |
| app-gw/search-results |
|
0% |
0/9 |
100% |
0/0 |
0% |
0/2 |
0% |
0/5 |
| app-gw/search-results/pages |
|
0% |
0/30 |
0% |
0/13 |
0% |
0/8 |
0% |
0/13 |
| app-gw/search-results/redux |
|
0% |
0/17 |
0% |
0/4 |
0% |
0/3 |
0% |
0/5 |
| core-modules/async-action |
|
55.56% |
10/18 |
33.33% |
2/6 |
60% |
6/10 |
55.56% |
10/18 |
| core-modules/entities |
|
21.05% |
4/19 |
0% |
0/2 |
16.67% |
1/6 |
26.67% |
4/15 |
| core-modules/request |
|
30% |
9/30 |
0% |
0/4 |
11.76% |
2/17 |
32.14% |
9/28 |
| core-modules/styles |
|
0% |
0/7 |
100% |
0/0 |
100% |
0/0 |
0% |
0/5 |
| core-ui-components/accordion |
|
0% |
0/21 |
0% |
0/10 |
0% |
0/5 |
0% |
0/8 |
| core-ui-components/accordion/__examples__ |
|
0% |
0/27 |
0% |
0/12 |
0% |
0/5 |
0% |
0/9 |
| core-ui-components/button |
|
0% |
0/22 |
0% |
0/10 |
0% |
0/2 |
0% |
0/8 |
| core-ui-components/button/__examples__ |
|
0% |
0/24 |
0% |
0/8 |
0% |
0/6 |
0% |
0/10 |
| core-ui-components/carousel |
|
0% |
0/47 |
0% |
0/28 |
0% |
0/13 |
0% |
0/31 |
| core-ui-components/carousel/__examples__ |
|
0% |
0/20 |
0% |
0/8 |
0% |
0/3 |
0% |
0/6 |
| core-ui-components/checkbox |
|
0% |
0/24 |
0% |
0/8 |
0% |
0/2 |
0% |
0/7 |
| core-ui-components/checkbox/__examples__ |
|
0% |
0/22 |
0% |
0/8 |
0% |
0/3 |
0% |
0/8 |
| core-ui-components/drop-down |
|
0% |
0/25 |
0% |
0/8 |
0% |
0/3 |
0% |
0/8 |
| core-ui-components/drop-down/__examples__ |
|
0% |
0/22 |
0% |
0/8 |
0% |
0/3 |
0% |
0/8 |
| core-ui-components/footer |
|
0% |
0/19 |
0% |
0/8 |
0% |
0/2 |
0% |
0/5 |
| core-ui-components/header |
|
100% |
14/14 |
100% |
2/2 |
100% |
4/4 |
100% |
14/14 |
| core-ui-components/input |
|
0% |
0/19 |
0% |
0/8 |
0% |
0/2 |
0% |
0/5 |
| core-ui-components/input/__examples__ |
|
0% |
0/21 |
0% |
0/8 |
0% |
0/3 |
0% |
0/7 |
| core-ui-components/pagination |
|
0% |
0/104 |
0% |
0/51 |
0% |
0/15 |
0% |
0/46 |
| core-ui-components/pagination/__examples__ |
|
0% |
0/33 |
0% |
0/16 |
0% |
0/6 |
0% |
0/18 |
| core-ui-components/search-result-list |
|
0% |
0/164 |
0% |
0/68 |
0% |
0/17 |
0% |
0/51 |
| core-ui-components/search-result-list/__examples__ |
|
0% |
0/23 |
0% |
0/8 |
0% |
0/3 |
0% |
0/9 |


Caramell Shot
Dafuq!?
Settings
Interval
How much random
Go for a shot about every
Start the timer
Wait for the song to start
Take a shot
Go to step 2
???
Profit
Oh, ok


Hello World!
Your browser does not support the video tag.
Your browser does not support the video tag.


THE ROAD TO EL DORADO (2000) / ** 1/2
Directed by Bobo Bergeron, Will Finn and Don Paul. Screenplay by Ted Elliott and Terry Rossio. Starring Kenneth Branagh, Kevin Kline, Rosie Perez. Running time: 91 minutes. Rated PG for frightening scenes (MFCB). Reviewed on April 13th, 2000.
By SHANNON PATRICK SULLIVAN
"The Road To El Dorado" is perhaps one of the most inappropriately-titled movies of the year. That's because DreamWorks' latest attempt to challenge Disney's animation stranglehold isn't about the quest for the fabled City of Gold so much as it is about what happens after the quest has succeeded. This is a movie not about adventure, but rather about friendship and sacrifice in the face of temptation.
Miguel (Kenneth Branagh) and Tulio (Kevin Kline) are con artists in sixteenth century Spain. After acquiring a map to the legendary El Dorado -- a City of Gold built by the gods themselves -- they inadvertently stow away on board the ship carrying none other than the infamous conqueror Cortes across the sea to South America. Escaping the boat with the help of the faithful horse Altivo, Miguel and Tulio eventually run aground somewhere in the New World. Following the map, they soon discover El Dorado itself, where they are hailed as gods.
Although the journey to El Dorado could easily have been the focus of the movie, here it is essentially just forms the preliminaries. The movie really gets going once Miguel and Tulio have reached the City of Gold, whose citizens are divided in their loyalties between the jolly Chief (Edward James Olmos) and the sinister High Priest Tzekel-Kan (Armand Assante). The Chief is suspicious of Miguel and Tulio's divinity from the start, but sees them as a harmless way to keep his people happy. Tzekel-Kan, on the other hand, believes the arrival of the "gods" signals the start of the Age of the Jaguar, a time of blood and human sacrifice when he will rule the people through fear. And meanwhile, Cortes himself has arrived in the New World, and has begun to follow Miguel and Tulio's trail toward unsuspecting El Dorado.
"The Road To El Dorado" is certainly not the most ambitious animated film of recent times. Storywise, it borrows from a number of other sources -- the "quest for the City of Gold", the "white men hailed as gods", and the "evil high priest seeks power" subplots are all tried-and-true staples of the genre. There is not much new here: even Tulio and Miguel's trick of pretending to argue with one another in order to get themselves out of trouble is a classic ploy. But it's all done with a healthy dose of humor, and the pacing is such that the movie never really drags. If nothing else, the relationship between Tulio and Miguel is well-developed. Although there's never really any doubt how things are going to turn out, the evolution of that relationship in the presence of temptations like gold, godhood and girls (in the form Chela, an El Dorado native who becomes the pair's partner in crime) is interesting to watch.
The real attraction of "The Road To El Dorado", of course, is its gorgeous animation. Much of the film is illustrated in the half-realistic, half-cartoonish style currently favored by Disney, but the movie is not bound by this technique. For example, some portions (the creation of El Dorado by the gods and an energetic feast segment) are drawn in the style of Seventies-era cartoons, employing two-dimensional shapes, unusual color choices and psychedelic imagery. There is also some gorgeous computer animation, particularly during sequences set on water.
The voicework in general is capable but not spectacular, with the best performances given by Kline and Rosie Perez, who plays Chela. Perez in particular is important because she provides a much-needed female perspective in the otherwise male-dominated picture. The music by Elton John is largely forgettable, with the most interesting track being one of the two end-credit songs, "Someday Out Of The Blue" (also the first single airing on the radio). But it's a song that doesn't really have much at all to do with the movie itself, and the rest of the tunes lack the punch of, say, "Be Our Guest" or virtually anything from "Aladdin".
Although not a spectacular entry into the field of family films, "The Road To El Dorado" is a movie which both children and their parents should find enjoyable. It's got humor which appeals to both age groups, and although the story is timeworn and simplistic, it's told with enough energy to keep the audience interested for an hour and a half. Dreamworks might not be challenging Disney with this release, but it's not doing too bad a job in its own right.
Copyright © 2000 Shannon Patrick Sullivan. Archived at The Popcorn Gallery, http://www.physics.mun.ca/~sps/movies/TheRoadToElDorado.html
-- _______________________________________________________________________ / Shannon Patrick Sullivan | "We are all in the gutter, but some of us \ |<EMAIL_ADDRESS>| are looking at the stars." - Oscar Wilde | \___________________________|__________________________________________/ | Popcorn Gallery Movie Reviews www.physics.mun.ca/~sps/movies.html | | Doctor Who: A Brief History of Time (Travel) /drwho.html |
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Update Password
Password is required
Password
Password is required
Password mismatch
Confirm Password
Password is required
Update


| Due | {{ invoiceDue | currency:currencyCode }} |
| Paid | {{ invoicePaid | currency:currencyCode }} |
| Open Employee Payments | {{ invoiceOpenPaymentToEmployee | currency:currencyCode }} |
| Overdue Invoices | {{ invoiceOverdue | currency:currencyCode }} |
| Status | Date | Offer | Name | Total | |
|---|---|---|---|---|---|
| Pending Approved Canceled | {{ offer.date | date }} | {{ offer.number }} | {{ offer.name }} | {{ offer.net | currency:currencyCode }} | |
| View All |
| Status | Due Date | Invoice | Name | Total | |
|---|---|---|---|---|---|
| Open Paid Paid Overdue | {{ invoice.date | dueDate | date }} | {{ invoice.number }} | {{ invoice.name }} | {{ invoice.net | currency:currencyCode }} | |
| View All |


{% extends "datarequests/base.html" %} {% block subtitle %}{{ _('Create Listing Request') }}{% endblock %} {% block breadcrumb_content %}
{% trans %}To create a listing request, fill the form and specify a title and a description for your request. Please, be as clear as you can in order to ease the task of accomplishing your request. You can also add a Github URL for that extension. {% endtrans %}
{% endblock %} {% block page_header %}{% endblock %}