Afterwood
“Welcome, to the real world.” – Morpheus (The Matrix)
Whenever I hear someone mention privileged people on TV it tends to be in reference to some upper class twit that went to one of the famous British public schools and has now found themselves in a compromising situation. The term "privileged" is almost always used as a pejorative because it implies that the person has had access to the best education and support that money can buy and yet they have still managed to make a complete mess of things. Even if they haven’t done something considered illegal, the chances are they’ve done something immoral or unethical instead, probably using their privileged status to gain access to the kinds of “services” outside the reach of the general population either due to its cost, or clandestine nature.
I never went to Eton or Harrow and don’t have a drop of royal blood in me so I definitely wouldn’t consider myself part of that kind of privileged society. I’m perfectly happy to snigger at their hapless mistakes and frown upon their illicit deeds as much as anyone else. But not that long ago I came down to earth with somewhat of a bump when I discovered how incredibly privileged I really am. I don’t mean I suddenly discovered I was a hereditary peer or heir to a long lost rich relative, just that I realized the term “privilege”, like so many things in life, actually forms a sliding scale. It seems I haven’t really been paying attention to how it affects both me and, more importantly, those I come into contact with directly, or even indirectly, through the virtual medium of social networks, forums, etc.
My cosy bubble burst when a tweet from a rather well-known (and often highly respected) member of the software engineering community got injected into my feed, which stated that politics just weren’t that important. This was at a time when there was an ongoing discussion about whether it was desirable or not to keep politics out of a person’s timeline that was normally reserved for more technical content. As someone who sympathized with this separation to some degree (at the time) I was somewhat intrigued to see the replies. One of the first in the thread lambasted the original poster by stating that only someone in such a privileged position as theirs could even afford to ignore politics.
And in that moment I started to comprehend where I too sat on the scale and the wave of discomfort caused me to ponder what side-effects my ambivalence might have had on others. In my naivety I would have liked to believe that my decision to eschew politics in the workplace would ensure my impartiality and therefore keep my life simple. After all, one of the many reasons to become a freelancer in the first place and remain a “lowly” developer was to endeavour to remain near the bottom of the food chain and free of organisational concerns.  To discover someone has suffered when it might have been within my power to help is unsettling.
As a middle-aged, white, heterosexual, British male it appears to be incredibly easy to remain oblivious to what is going on to many less privileged souls, both in the workplace and in supposedly “social” settings. By unconsciously reinforcing the patriarchy through tending to follow the overwhelmingly male technical leaders and “influencers” you could easily be forgiven for not seeing first-hand much of the direct (and indirect) abuse and dismissive behaviour that so many other people inside (and outside) our industry suffer from. Lest you think it’s implausible that someone can remain in the dark for so long the world of programming provides the perfect escape, especially when one is lucky enough to get into it at an early age through the privilege of a computer at home. With so much interesting stuff to learn it’s all too easy to prioritise one’s education efforts around the latest tech stack instead of, say, reading The Psychology of Computer Programming.
Hence, is it any wonder that we get seduced by the apparent logical “utopia” of the Meritocracy when we strive for technical excellence to the detriment of our other skills? I’ve undoubtedly been guilty of choosing the “best” person for a job by focusing too heavily on technical merit which has probably been reinforced by various biases that come from my own more privileged background. For example I know in the past I’ve looked far more favourably on those candidates that have shown an interest in programming outside their working life.
It was well over 10 years before I met my first female programmer; none other than the editor of this very journal. Such was the status quo of working in a male dominated industry that I completely failed to notice the spelling of “Frances” and incorrectly used the male spelling in our first few email exchanges! I might have tried downplaying this kind of faux pas in the past, as I would have other spelling mistakes, but I now see it as the result of laziness on my part – the very least I can do is pay attention and address someone correctly without making assumptions about their gender. Details matter, especially when the repercussions reinforce such an imbalance.
By making a special effort to listen to conference talks on diversity, inclusion, mental health, etc. and through following other people that freely mix their technical and personal experiences I’m slowly turning more of my unconscious incompetence into some form of competence. The Geek Feminism Wiki [1] has been an excellent starting point, especially the topics of micro-aggressions, silencing and derailment which tend to be quite subtle in nature. Hopefully along the way I’ll try and balance out my technical and social skills somewhat more evenly so that I can use my new found position of privilege to better effect.
[1] https://geekfeminism.wikia.org/wiki/Geek_Feminism_Wiki
Chris Oldwood
13 September 2019
Chris is a freelance programmer who started out as a bedroom coder in the 80’s writing assembler on 8-bit micros. These days it's enterprise grade technology in plush corporate offices. He also commentates on the Godmanchester duck race and can be easily distracted via<EMAIL_ADDRESS>or @chrisoldwood.


--- layout: post title: OpenVPN for RaspberryPi (Static Key) date: 2012-08-21 07:28:16.000000000 -04:00 type: post published: true status: publish comments: true categories: - Technology tags: [] meta: _edit_last: '1' ---
You all must be familiar with the amazing things that your RaspberryPi can do ! One of the things that I wanted to get on RaspberryPi was OpenVPN so that I could securely browse the internet while on free WiFi networks like Starbucks. Without the fear of being snooped on.
Before beginning, please note that this is an OpenVPN static key setup and following are the advantages and disadvantages of this setup.
Advantages:
Disadvantages:
For me, I am ready to live with the disadvantages (for now).
Following are the steps to get and configure OpenVPN Server on your RaspberryPi. Assuming that you have debian, I don't expect it to be much different for other linux distributions.
Get OpenVPN:
$ sudo apt-get install openvpn
Get bridge-utils ?? (can be skipped)
$ sudo apt-get install bridge-utils
Generate the Static Key
$ openvpn --genkey --secret static.key
Please, make sure that static.key is not compromised.
Create Server Configuration File:
create a file called server.conf with the following contents:
dev tun ifconfig <IP_ADDRESS> <IP_ADDRESS> secret static.key
Start the OpenVPN server:
start OpenVPN server with the following command:
$ sudo openvpn --config (path to server.conf)/server.conf --log (path to save the log)/server.log
Configure the client:
remote myremote.mydomain dev tun ifconfig <IP_ADDRESS> <IP_ADDRESS> secret static.key
On the client you can use the OpenVPN client (for Mac/Win/Linux) (download from here) and all it needs is the client.conf file and the static.key.
VPN Speed Test Results
Without VPN: Download: 2.90 Mb/s Upload: 2.69 Mb/s Latency: 25 ms
With VPN: Download: 2.71 Mb/s Upload: 2.03 Mb/s Latency: 27 ms


|
Introductory course on non-smooth optimization
Description
The course mainly covers topics in non-smooth optimization and first-order proximal splitting methods. This includes gradient based methods ((sub)gradient method, proximal gradient method, accelerated gradient methods), operator splitting methods (augmented Lagrangian method, alternating direction method of multipliers, monotone operators and operator splitting schemes), and (possibly) interior-point algorithms. Non-convex optimisation and stochastic optimisation will also be introduced.
Lecture slides
- Introduction
- Gradient method
- Proximal gradient method
- Krasnosel'skii-Mann iteration
- Backward--Backward splitting
- Douglas--Rachford splitting
- Primal--Dual splitting
- Other operator splitting methods
- Alternating direction method of multipliers
- Non-convex optimisation
- Stochastic optimisation
Acknowledgement: some slides are based on the lecture slides of Prof. Stephen Boyd and Prof. Lieven Vandenberghe.
Projects
References
- S. Boyd and L. Vandenberghe. Convex optimization. Cambridge university press, 2004.
- R. T. Rockafellar. Convex analysis. Princeton university press, 2015.
- A. Beck. First-order methods in optimization. Vol. 25. SIAM, 2017.
- H. H. Bauschke and P. L. Combettes. Convex analysis and monotone operator theory in Hilbert spaces. Vol. 408. New York: Springer, 2011.
- B. Polyak. Introduction to optimization. Optimization Software, 1987.
- Y. Nesterov. Introductory lectures on convex optimization: A basic course. Vol. 87. Springer Science & Business Media, 2013.
|


Accessibility means a digital world for everyone, regardless of where, when, why, and how you consume the content that is being communicated. It’s communication that’s non-discriminatory in every way.
-from simplyaccessible.com
Accessibility means a digital world for everyone.
Census Data Concludes: Nearly 1 in 5 People Have a Disability in the U.S.
Businesses must comply with Section 508 when supplying Electronic and Information Technology goods and services to the federal government. - source webaim.org
Achromatopsia
Deuteranopia
Protanopia
Tritanopia
You want to buy the latest/greatest tech gadget and the page loads blank.
...the page is freaking out and filled unrecognizable errors
Regardless of project management method:
Let's ensure that people with disabilities can easily access the web.
These attributes communicate to assistive technologies a semantic:
❮button role="button"❯ button text ❮/button❯
❮input type="text" required aria-required="true"❯
❮div hidden aria-hidden="true"❯
❮h1 role="heading" aria-level="1"❯heading text❮/h1❯
What this means is that, where implemented, the browser will expose the default implicit semantics of the element so you don’t have to.
❮header❯ maps to role="banner"
❮nav❯ maps to role="navigation"
❮main❯ maps to role="main"
❮section❯ maps to role="region"
❮article❯ maps to role="article"
❮aside❯ maps to role="complementary"
❮footer❯ maps to role="contentinfo"
BUT IE and Safari do not offer support for all of the role mappings. -Deque University
❮header role="banner"❯
❮nav role="navigation" ❯
❮main role="main" ❯
❮footer role="contentinfo" ❯
Products
Go through the main nav every time?
Or do you provide a skip nav?
Or skip different sections of content?
The difference in color and light between parts of an image. -wikipedia
Bad: Error Messaging Relies on Color
Better: Message Conveyed With Icons
Simple. Do it.
HTML
CSS
//hiding text elements from the view, but keeping them available to the screen reader
.sr-only {
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
clip: rect(1px, 1px, 1px, 1px);
clip-path: polygon(0px 0px, 0px 0px, 0px 0px, 0px 0px); //for clip being deprecated
}
Example from: Tips for Creating Accessible SVG by Leonie Watson
tabindex="1"
for="IdOfTheRepresentedInput"
because the screen reader announces it
Make note of pages you audit:
So many ways:
pa11y
The four main guiding principles of accessibility are:
Perceivable - provide content alternatives (images, audio, video)
Operable (without a mouse)
Understandable - clear and simple (writing and functionality)
Robust - works across many devices
A11y Slackers: http://web-a11y.herokuapp.com/ or #a11y on twitter


Work Experience
Technical Executive at Vision,
NIT Bhopal
Vision is the official technical society of
NIT Bhopal which organizes various
Workshops and makes projects for
various competitions.
Education Minister in School Cabinet
Served as Education Minister in
BMC Sr. Sec. School
From 04/07/2016 to 16/06/2017
Education
Maulana Azad National Institute of
Technology, Bhopal
Pursuing B.Tech. in Computer Science
and Engineering
8.17 CGPA
Bharat Mata Convent Senior
Secondary School, Basoda
Class 12th, CBSE Board, 2018
92%
Bharat Mata Convent Senior
Secondary School, Basoda
Class 10th, CBSE Board, 2016
10 CGPA
Projects
Railway Ticket Management System
C++ Project for the AISSCE Practical
Examination of Computer Science.
Description :
The Program facilitated
the user to view/cancel any reservation
performed earlier through PNR.
The train schedule could also be viewed.
Top


Today
{{today | date:'d'}}
{{today | date:'MMMM'}} {{today | date:'y'}}
{{dates[0] | date:'y'}}
{{dates[0] | date:'d'}}
{{dates[0] | date:'MMMM'}}
{{dates[0] | date:'y'}}
{{dates[0] | date:'d'}}
{{dates[0] | date:'MMMM'}}
{{dates[dates.length-1] | date:'y'}}
{{dates[dates.length-1] | date:'d'}}
{{dates[dates.length-1] | date:'MMMM'}}
{{date | date:'y'}}
{{date | date:'d'}}
{{date | date:'MMM'}}


Application Performance Monitoring (APM)¶
The MongoDB C Driver allows you to monitor all the MongoDB operations the driver executes. This event-notification system conforms to two MongoDB driver specs:
Command Monitoring: events related to all application operations.
SDAM Monitoring: events related to the driver’s Server Discovery And Monitoring logic.
To receive notifications, create a mongoc_apm_callbacks_t
with mongoc_apm_callbacks_new(), set callbacks on it, then pass it to mongoc_client_set_apm_callbacks() or mongoc_client_pool_set_apm_callbacks().
Command-Monitoring Example¶
/* gcc example-command-monitoring.c -o example-command-monitoring \
* $(pkg-config --cflags --libs libmongoc-1.0) */
/* ./example-command-monitoring [CONNECTION_STRING] */
#include <mongoc/mongoc.h>
#include <stdio.h>
typedef struct {
int started;
int succeeded;
int failed;
} stats_t;
void
command_started (const mongoc_apm_command_started_t *event)
{
char *s;
s = bson_as_relaxed_extended_json (
mongoc_apm_command_started_get_command (event), NULL);
printf ("Command %s started on %s:\n%s\n\n",
mongoc_apm_command_started_get_command_name (event),
mongoc_apm_command_started_get_host (event)->host,
s);
((stats_t *) mongoc_apm_command_started_get_context (event))->started++;
bson_free (s);
}
void
command_succeeded (const mongoc_apm_command_succeeded_t *event)
{
char *s;
s = bson_as_relaxed_extended_json (
mongoc_apm_command_succeeded_get_reply (event), NULL);
printf ("Command %s succeeded:\n%s\n\n",
mongoc_apm_command_succeeded_get_command_name (event),
s);
((stats_t *) mongoc_apm_command_succeeded_get_context (event))->succeeded++;
bson_free (s);
}
void
command_failed (const mongoc_apm_command_failed_t *event)
{
bson_error_t error;
mongoc_apm_command_failed_get_error (event, &error);
printf ("Command %s failed:\n\"%s\"\n\n",
mongoc_apm_command_failed_get_command_name (event),
error.message);
((stats_t *) mongoc_apm_command_failed_get_context (event))->failed++;
}
int
main (int argc, char *argv[])
{
mongoc_client_t *client;
mongoc_apm_callbacks_t *callbacks;
stats_t stats = {0};
mongoc_collection_t *collection;
bson_error_t error;
const char *uri_string =
"mongodb://<IP_ADDRESS>/?appname=cmd-monitoring-example";
mongoc_uri_t *uri;
const char *collection_name = "test";
bson_t *docs[2];
mongoc_init ();
if (argc > 1) {
uri_string = argv[1];
}
uri = mongoc_uri_new_with_error (uri_string, &error);
if (!uri) {
fprintf (stderr,
"failed to parse URI: %s\n"
"error message: %s\n",
uri_string,
error.message);
return EXIT_FAILURE;
}
client = mongoc_client_new_from_uri (uri);
if (!client) {
return EXIT_FAILURE;
}
mongoc_client_set_error_api (client, 2);
callbacks = mongoc_apm_callbacks_new ();
mongoc_apm_set_command_started_cb (callbacks, command_started);
mongoc_apm_set_command_succeeded_cb (callbacks, command_succeeded);
mongoc_apm_set_command_failed_cb (callbacks, command_failed);
mongoc_client_set_apm_callbacks (
client, callbacks, (void *) &stats /* context pointer */);
collection = mongoc_client_get_collection (client, "test", collection_name);
mongoc_collection_drop (collection, NULL);
docs[0] = BCON_NEW ("_id", BCON_INT32 (0));
docs[1] = BCON_NEW ("_id", BCON_INT32 (1));
mongoc_collection_insert_many (
collection, (const bson_t **) docs, 2, NULL, NULL, NULL);
/* duplicate key error on the second insert */
mongoc_collection_insert_one (collection, docs[0], NULL, NULL, NULL);
mongoc_collection_destroy (collection);
mongoc_apm_callbacks_destroy (callbacks);
mongoc_uri_destroy (uri);
mongoc_client_destroy (client);
printf ("started: %d\nsucceeded: %d\nfailed: %d\n",
stats.started,
stats.succeeded,
stats.failed);
bson_destroy (docs[0]);
bson_destroy (docs[1]);
mongoc_cleanup ();
return EXIT_SUCCESS;
}
This example program prints:
Command drop started on <IP_ADDRESS>:
{ "drop" : "test" }
Command drop succeeded:
{ "ns" : "test.test", "nIndexesWas" : 1, "ok" : 1.0 }
Command insert started on <IP_ADDRESS>:
{
"insert" : "test",
"ordered" : true,
"documents" : [
{ "_id" : 0 }, { "_id" : 1 }
]
}
Command insert succeeded:
{ "n" : 2, "ok" : 1.0 }
Command insert started on <IP_ADDRESS>:
{
"insert" : "test",
"ordered" : true,
"documents" : [
{ "_id" : 0 }
]
}
Command insert succeeded:
{
"n" : 0,
"writeErrors" : [
{ "index" : 0, "code" : 11000, "errmsg" : "duplicate key" }
],
"ok" : 1.0
}
started: 3
succeeded: 3
failed: 0
The output has been edited and formatted for clarity. Depending on your server configuration, messages may include metadata like database name, logical session ids, or cluster times that are not shown here.
The final “insert” command is considered successful, despite the writeError, because the server replied to the overall command with "ok": 1
.
SDAM Monitoring Example¶
/* gcc example-sdam-monitoring.c -o example-sdam-monitoring \
* $(pkg-config --cflags --libs libmongoc-1.0) */
/* ./example-sdam-monitoring [CONNECTION_STRING] */
#include <mongoc/mongoc.h>
#include <stdio.h>
typedef struct {
int server_changed_events;
int server_opening_events;
int server_closed_events;
int topology_changed_events;
int topology_opening_events;
int topology_closed_events;
int heartbeat_started_events;
int heartbeat_succeeded_events;
int heartbeat_failed_events;
} stats_t;
static void
server_changed (const mongoc_apm_server_changed_t *event)
{
stats_t *context;
const mongoc_server_description_t *prev_sd, *new_sd;
context = (stats_t *) mongoc_apm_server_changed_get_context (event);
context->server_changed_events++;
prev_sd = mongoc_apm_server_changed_get_previous_description (event);
new_sd = mongoc_apm_server_changed_get_new_description (event);
printf ("server changed: %s %s -> %s\n",
mongoc_apm_server_changed_get_host (event)->host_and_port,
mongoc_server_description_type (prev_sd),
mongoc_server_description_type (new_sd));
}
static void
server_opening (const mongoc_apm_server_opening_t *event)
{
stats_t *context;
context = (stats_t *) mongoc_apm_server_opening_get_context (event);
context->server_opening_events++;
printf ("server opening: %s\n",
mongoc_apm_server_opening_get_host (event)->host_and_port);
}
static void
server_closed (const mongoc_apm_server_closed_t *event)
{
stats_t *context;
context = (stats_t *) mongoc_apm_server_closed_get_context (event);
context->server_closed_events++;
printf ("server closed: %s\n",
mongoc_apm_server_closed_get_host (event)->host_and_port);
}
static void
topology_changed (const mongoc_apm_topology_changed_t *event)
{
stats_t *context;
const mongoc_topology_description_t *prev_td;
const mongoc_topology_description_t *new_td;
mongoc_server_description_t **prev_sds;
size_t n_prev_sds;
mongoc_server_description_t **new_sds;
size_t n_new_sds;
size_t i;
mongoc_read_prefs_t *prefs;
context = (stats_t *) mongoc_apm_topology_changed_get_context (event);
context->topology_changed_events++;
prev_td = mongoc_apm_topology_changed_get_previous_description (event);
prev_sds = mongoc_topology_description_get_servers (prev_td, &n_prev_sds);
new_td = mongoc_apm_topology_changed_get_new_description (event);
new_sds = mongoc_topology_description_get_servers (new_td, &n_new_sds);
printf ("topology changed: %s -> %s\n",
mongoc_topology_description_type (prev_td),
mongoc_topology_description_type (new_td));
if (n_prev_sds) {
printf (" previous servers:\n");
for (i = 0; i < n_prev_sds; i++) {
printf (" %s %s\n",
mongoc_server_description_type (prev_sds[i]),
mongoc_server_description_host (prev_sds[i])->host_and_port);
}
}
if (n_new_sds) {
printf (" new servers:\n");
for (i = 0; i < n_new_sds; i++) {
printf (" %s %s\n",
mongoc_server_description_type (new_sds[i]),
mongoc_server_description_host (new_sds[i])->host_and_port);
}
}
prefs = mongoc_read_prefs_new (MONGOC_READ_SECONDARY);
/* it is safe, and unfortunately necessary, to cast away const here */
if (mongoc_topology_description_has_readable_server (
(mongoc_topology_description_t *) new_td, prefs)) {
printf (" secondary AVAILABLE\n");
} else {
printf (" secondary UNAVAILABLE\n");
}
if (mongoc_topology_description_has_writable_server (
(mongoc_topology_description_t *) new_td)) {
printf (" primary AVAILABLE\n");
} else {
printf (" primary UNAVAILABLE\n");
}
mongoc_read_prefs_destroy (prefs);
mongoc_server_descriptions_destroy_all (prev_sds, n_prev_sds);
mongoc_server_descriptions_destroy_all (new_sds, n_new_sds);
}
static void
topology_opening (const mongoc_apm_topology_opening_t *event)
{
stats_t *context;
context = (stats_t *) mongoc_apm_topology_opening_get_context (event);
context->topology_opening_events++;
printf ("topology opening\n");
}
static void
topology_closed (const mongoc_apm_topology_closed_t *event)
{
stats_t *context;
context = (stats_t *) mongoc_apm_topology_closed_get_context (event);
context->topology_closed_events++;
printf ("topology closed\n");
}
static void
server_heartbeat_started (const mongoc_apm_server_heartbeat_started_t *event)
{
stats_t *context;
context =
(stats_t *) mongoc_apm_server_heartbeat_started_get_context (event);
context->heartbeat_started_events++;
printf ("%s heartbeat started\n",
mongoc_apm_server_heartbeat_started_get_host (event)->host_and_port);
}
static void
server_heartbeat_succeeded (
const mongoc_apm_server_heartbeat_succeeded_t *event)
{
stats_t *context;
char *reply;
context =
(stats_t *) mongoc_apm_server_heartbeat_succeeded_get_context (event);
context->heartbeat_succeeded_events++;
reply = bson_as_canonical_extended_json (
mongoc_apm_server_heartbeat_succeeded_get_reply (event), NULL);
printf (
"%s heartbeat succeeded: %s\n",
mongoc_apm_server_heartbeat_succeeded_get_host (event)->host_and_port,
reply);
bson_free (reply);
}
static void
server_heartbeat_failed (const mongoc_apm_server_heartbeat_failed_t *event)
{
stats_t *context;
bson_error_t error;
context = (stats_t *) mongoc_apm_server_heartbeat_failed_get_context (event);
context->heartbeat_failed_events++;
mongoc_apm_server_heartbeat_failed_get_error (event, &error);
printf ("%s heartbeat failed: %s\n",
mongoc_apm_server_heartbeat_failed_get_host (event)->host_and_port,
error.message);
}
int
main (int argc, char *argv[])
{
mongoc_client_t *client;
mongoc_apm_callbacks_t *cbs;
stats_t stats = {0};
const char *uri_string =
"mongodb://<IP_ADDRESS>/?appname=sdam-monitoring-example";
mongoc_uri_t *uri;
bson_t cmd = BSON_INITIALIZER;
bson_t reply;
bson_error_t error;
mongoc_init ();
if (argc > 1) {
uri_string = argv[1];
}
uri = mongoc_uri_new_with_error (uri_string, &error);
if (!uri) {
fprintf (stderr,
"failed to parse URI: %s\n"
"error message: %s\n",
uri_string,
error.message);
return EXIT_FAILURE;
}
client = mongoc_client_new_from_uri (uri);
if (!client) {
return EXIT_FAILURE;
}
mongoc_client_set_error_api (client, 2);
cbs = mongoc_apm_callbacks_new ();
mongoc_apm_set_server_changed_cb (cbs, server_changed);
mongoc_apm_set_server_opening_cb (cbs, server_opening);
mongoc_apm_set_server_closed_cb (cbs, server_closed);
mongoc_apm_set_topology_changed_cb (cbs, topology_changed);
mongoc_apm_set_topology_opening_cb (cbs, topology_opening);
mongoc_apm_set_topology_closed_cb (cbs, topology_closed);
mongoc_apm_set_server_heartbeat_started_cb (cbs, server_heartbeat_started);
mongoc_apm_set_server_heartbeat_succeeded_cb (cbs,
server_heartbeat_succeeded);
mongoc_apm_set_server_heartbeat_failed_cb (cbs, server_heartbeat_failed);
mongoc_client_set_apm_callbacks (
client, cbs, (void *) &stats /* context pointer */);
/* the driver connects on demand to perform first operation */
BSON_APPEND_INT32 (&cmd, "buildinfo", 1);
mongoc_client_command_simple (client, "admin", &cmd, NULL, &reply, &error);
mongoc_uri_destroy (uri);
mongoc_client_destroy (client);
printf ("Events:\n"
" server changed: %d\n"
" server opening: %d\n"
" server closed: %d\n"
" topology changed: %d\n"
" topology opening: %d\n"
" topology closed: %d\n"
" heartbeat started: %d\n"
" heartbeat succeeded: %d\n"
" heartbeat failed: %d\n",
stats.server_changed_events,
stats.server_opening_events,
stats.server_closed_events,
stats.topology_changed_events,
stats.topology_opening_events,
stats.topology_closed_events,
stats.heartbeat_started_events,
stats.heartbeat_succeeded_events,
stats.heartbeat_failed_events);
bson_destroy (&cmd);
bson_destroy (&reply);
mongoc_apm_callbacks_destroy (cbs);
mongoc_cleanup ();
return EXIT_SUCCESS;
}
Start a 3-node replica set on localhost with set name “rs” and start the program:
./example-sdam-monitoring "mongodb://localhost:27017,localhost:27018/?replicaSet=rs"
This example program prints something like:
topology opening
topology changed: Unknown -> ReplicaSetNoPrimary
secondary UNAVAILABLE
primary UNAVAILABLE
server opening: localhost:27017
server opening: localhost:27018
localhost:27017 heartbeat started
localhost:27018 heartbeat started
localhost:27017 heartbeat succeeded: { ... reply ... }
server changed: localhost:27017 Unknown -> RSPrimary
server opening: localhost:27019
topology changed: ReplicaSetNoPrimary -> ReplicaSetWithPrimary
new servers:
RSPrimary localhost:27017
secondary UNAVAILABLE
primary AVAILABLE
localhost:27019 heartbeat started
localhost:27018 heartbeat succeeded: { ... reply ... }
server changed: localhost:27018 Unknown -> RSSecondary
topology changed: ReplicaSetWithPrimary -> ReplicaSetWithPrimary
previous servers:
RSPrimary localhost:27017
new servers:
RSPrimary localhost:27017
RSSecondary localhost:27018
secondary AVAILABLE
primary AVAILABLE
localhost:27019 heartbeat succeeded: { ... reply ... }
server changed: localhost:27019 Unknown -> RSSecondary
topology changed: ReplicaSetWithPrimary -> ReplicaSetWithPrimary
previous servers:
RSPrimary localhost:27017
RSSecondary localhost:27018
new servers:
RSPrimary localhost:27017
RSSecondary localhost:27018
RSSecondary localhost:27019
secondary AVAILABLE
primary AVAILABLE
topology closed
Events:
server changed: 3
server opening: 3
server closed: 0
topology changed: 4
topology opening: 1
topology closed: 1
heartbeat started: 3
heartbeat succeeded: 3
heartbeat failed: 0
The driver connects to the mongods on ports 27017 and 27018, which were specified in the URI, and determines which is primary. It also discovers the third member, “localhost:27019”, and adds it to the topology.
Functions¶
- mongoc_apm_callbacks_t
- mongoc_apm_command_failed_t
- mongoc_apm_command_started_t
- mongoc_apm_command_succeeded_t
- mongoc_apm_server_changed_t
- mongoc_apm_server_closed_t
- mongoc_apm_server_heartbeat_failed_t
- mongoc_apm_server_heartbeat_started_t
- mongoc_apm_server_heartbeat_succeeded_t
- mongoc_apm_server_opening_t
- mongoc_apm_topology_changed_t
- mongoc_apm_topology_closed_t
- mongoc_apm_topology_opening_t


Incidentally, some time ago I mentioned several options for single sign-on. These are also projects that support generic authentication layers on top of any application; one of the goals at Imaginary Landscape is to consolidate logins for all kinds of content -- Zope, Webware, PHP, Perl, and static content. And to do it with reasonable usability, which most Apache authentication does not provide.
In the end I dropped Pubcookie as too complex, and we're using mod_auth_tkt. This has a documented authentication ticket format that anyone can generate (based on a shared secret), and just enough features to support things like groups, without any extra features that you'll have to work around.
There's still a lot of infrastructure to build up around it to support a "full" user system, but I feel confident at least that it is a good foundation.
We're looking to do something similar at Zenoss. I've been busy with setting up the LDAP infrastructure, but one of my next tasks will be recommending a solution for the single-sign-on portion.
Did you ever make any good progress with mod_auth_tkt?


Experience with Python, JavaScript (AngularJS, and JQuery), SQL, PHP, HTML and CSS
Other Programming Languages
Experience with C++, Java (Android), Python and C#
Misc Technologies
Experience with FB SDK, Parse, XCode, Android Studio, GitHub, Gradle, Spring, Linux & Windows
Projects
Diffusion (June 2015 - Present)
Currently developing a mobile application that will allow international students to connect with each other in their area based on common interests and hobbies
This application is being developed in iOS and I am the sole designer, and developer for the project
Deception Records Website (January 2015 - Present)
Developed a website for the
Deception Records label to expand their global reach on the web
Designed and created the entire structure of the website using HTML, CSS, PHP and JQuery
Currently revamping the website to allow e-commerce so the label can sell their branded products
PiDE (January 2014 - May 2014)
PiDE is a Python homegrown Integrated Development Environment that was developed to allow first-time programmers to have interactivity with their code. Beta version released in May 2014 GitHub repository
Developed a debugger in python and acted as a developer in a 16 person team
Work Experience
General Electric - Software Developer (September 2015 - current)
Currently implementing a build process for the team’s projects with Gradle to reduce build time by 75%
Creating micro services with Spring framework to allow loosely coupled processes among GE products to permit data sharing between more than a half of the team's projects
Develop ASP web reports in C# and JavaScript that allow customers to create production reports easier and faster
General Electric - Software Engineer in Test (September 2014 - September 2015)
Created autonomous unit testing structures for the application development process that reduced backlog intake by 20%
Implemented automated functional testing across the entire team project to reduce manual testing
General Dynamics IT Software Automation Tester Intern (June 2013 - June 2014)
Developed software changes and features in Java whilst shadowing for senior developers
Created robust Automated and Regression tests that reduced testing time by 50%
Education
Towson University
B.S., Computer Science (August 2012 - May 2014); GPA: 3.53
Academic Honors
Golden Key International Honor Society
Contributed as the Treasurer of the University Chapter and participated in accommodating new members
Tau Sigma Chapter of Towson University
Participated in the annual "Clean-up Day(s)" for the University
Donated and ran the toy donation division of Tau Sigma Chapter


Press n or j to go to the next uncovered block, b, p or k for the previous block.
| File | Statements | Branches | Functions | Lines | |||||
|---|---|---|---|---|---|---|---|---|---|
| adjacent-overload-signatures.ts | 97.37% | 37/38 | 94.44% | 34/36 | 100% | 7/7 | 97.37% | 37/38 | |
| array-type.ts | 96.3% | 78/81 | 96.72% | 118/122 | 100% | 10/10 | 96.3% | 78/81 | |
| await-thenable.ts | 100% | 11/11 | 100% | 5/5 | 100% | 2/2 | 100% | 11/11 | |
| ban-ts-ignore.ts | 100% | 11/11 | 100% | 4/4 | 100% | 3/3 | 100% | 11/11 | |
| ban-types.ts | 100% | 18/18 | 100% | 13/13 | 100% | 5/5 | 100% | 18/18 | |
| brace-style.ts | 100% | 8/8 | 100% | 0/0 | 100% | 2/2 | 100% | 8/8 | |
| camelcase.ts | 92.86% | 26/28 | 86.36% | 19/22 | 100% | 7/7 | 92.59% | 25/27 | |
| class-name-casing.ts | 95.45% | 21/22 | 92% | 23/25 | 100% | 6/6 | 95.45% | 21/22 | |
| consistent-type-assertions.ts | 92% | 23/25 | 86.67% | 26/30 | 100% | 6/6 | 92% | 23/25 | |
| consistent-type-definitions.ts | 100% | 29/29 | 84.21% | 16/19 | 100% | 6/6 | 100% | 29/29 | |
| explicit-function-return-type.ts | 100% | 55/55 | 100% | 88/88 | 100% | 16/16 | 100% | 55/55 | |
| explicit-member-accessibility.ts | 97.96% | 48/49 | 92.59% | 50/54 | 100% | 5/5 | 97.96% | 48/49 | |
| func-call-spacing.ts | 100% | 27/27 | 100% | 20/20 | 100% | 5/5 | 100% | 27/27 | |
| generic-type-naming.ts | 100% | 7/7 | 100% | 4/4 | 100% | 2/2 | 100% | 7/7 | |
| indent.ts | 100% | 35/35 | 76.92% | 10/13 | 100% | 18/18 | 100% | 35/35 | |
| index.ts | 100% | 66/66 | 100% | 0/0 | 100% | 0/0 | 100% | 66/66 | |
| interface-name-prefix.ts | 91.67% | 22/24 | 90% | 18/20 | 100% | 5/5 | 91.67% | 22/24 | |
| member-delimiter-style.ts | 98.11% | 52/53 | 95% | 38/40 | 100% | 6/6 | 98.11% | 52/53 | |
| member-naming.ts | 100% | 24/24 | 100% | 15/15 | 100% | 6/6 | 100% | 24/24 | |
| member-ordering.ts | 98.44% | 63/64 | 98.44% | 63/64 | 100% | 16/16 | 98.44% | 63/64 | |
| no-array-constructor.ts | 100% | 11/11 | 100% | 8/8 | 100% | 3/3 | 100% | 11/11 | |
| no-empty-function.ts | 86.67% | 13/15 | 85.71% | 12/14 | 87.5% | 7/8 | 86.67% | 13/15 | |
| no-empty-interface.ts | 100% | 11/11 | 100% | 10/10 | 100% | 2/2 | 100% | 11/11 | |
| no-explicit-any.ts | 100% | 19/19 | 100% | 29/29 | 100% | 11/11 | 100% | 19/19 | |
| no-extra-parens.ts | 98.11% | 52/53 | 97.92% | 47/48 | 100% | 14/14 | 98.11% | 52/53 | |
| no-extraneous-class.ts | 100% | 32/32 | 100% | 34/34 | 100% | 3/3 | 100% | 32/32 | |
| no-floating-promises.ts | 100% | 44/44 | 100% | 44/44 | 100% | 9/9 | 100% | 44/44 | |
| no-for-in-array.ts | 100% | 10/10 | 100% | 5/5 | 100% | 2/2 | 100% | 10/10 | |
| no-inferrable-types.ts | 95.45% | 42/44 | 97.18% | 69/71 | 100% | 13/13 | 95.45% | 42/44 | |
| no-magic-numbers.ts | 100% | 43/43 | 94.55% | 52/55 | 100% | 9/9 | 100% | 43/43 | |
| no-misused-new.ts | 95% | 19/20 | 95% | 19/20 | 100% | 6/6 | 95% | 19/20 | |
| no-misused-promises.ts | 100% | 74/74 | 100% | 36/36 | 100% | 10/10 | 100% | 74/74 | |
| no-namespace.ts | 100% | 8/8 | 100% | 8/8 | 100% | 2/2 | 100% | 8/8 | |
| no-non-null-assertion.ts | 100% | 4/4 | 100% | 0/0 | 100% | 2/2 | 100% | 4/4 | |
| no-parameter-properties.ts | 100% | 16/16 | 91.67% | 11/12 | 100% | 3/3 | 100% | 16/16 | |
| no-require-imports.ts | 100% | 5/5 | 100% | 0/0 | 100% | 3/3 | 100% | 5/5 | |
| no-this-alias.ts | 100% | 10/10 | 100% | 10/10 | 100% | 2/2 | 100% | 10/10 | |
| no-type-alias.ts | 97.87% | 46/47 | 95.74% | 45/47 | 100% | 10/10 | 97.87% | 46/47 | |
| no-unnecessary-condition.ts | 100% | 38/38 | 100% | 28/28 | 100% | 13/13 | 100% | 37/37 | |
| no-unnecessary-qualifier.ts | 100% | 48/48 | 93.1% | 27/29 | 100% | 18/18 | 100% | 46/46 | |
| no-unnecessary-type-arguments.ts | 97.56% | 40/41 | 91.43% | 32/35 | 100% | 10/10 | 97.56% | 40/41 | |
| no-unnecessary-type-assertion.ts | 95.65% | 66/69 | 90.48% | 57/63 | 100% | 9/9 | 95.65% | 66/69 | |
| no-unused-expressions.ts | 79.31% | 23/29 | 63.16% | 24/38 | 100% | 7/7 | 78.57% | 22/28 | |
| no-unused-vars.ts | 100% | 27/27 | 81.82% | 9/11 | 100% | 8/8 | 100% | 27/27 | |
| no-use-before-define.ts | 98.46% | 64/65 | 96.43% | 54/56 | 100% | 12/12 | 98.46% | 64/65 | |
| no-useless-constructor.ts | 100% | 16/16 | 100% | 19/19 | 100% | 5/5 | 100% | 16/16 | |
| no-var-requires.ts | 100% | 6/6 | 100% | 7/7 | 100% | 2/2 | 100% | 6/6 | |
| prefer-for-of.ts | 94.74% | 54/57 | 93.98% | 78/83 | 100% | 12/12 | 94.74% | 54/57 | |
| prefer-function-type.ts | 97.22% | 35/36 | 97.3% | 36/37 | 100% | 9/9 | 97.22% | 35/36 | |
| prefer-includes.ts | 100% | 77/77 | 100% | 56/56 | 100% | 13/13 | 100% | 75/75 | |
| prefer-namespace-keyword.ts | 100% | 11/11 | 100% | 9/9 | 100% | 3/3 | 100% | 11/11 | |
| prefer-readonly.ts | 100% | 100/100 | 98.77% | 80/81 | 100% | 24/24 | 100% | 100/100 | |
| prefer-regexp-exec.ts | 100% | 17/17 | 100% | 7/7 | 100% | 3/3 | 100% | 17/17 | |
| prefer-string-starts-ends-with.ts | 100% | 156/156 | 100% | 159/159 | 100% | 28/28 | 100% | 154/154 | |
| promise-function-async.ts | 100% | 25/25 | 100% | 24/24 | 100% | 5/5 | 100% | 25/25 | |
| quotes.ts | 100% | 14/14 | 100% | 9/9 | 100% | 5/5 | 100% | 14/14 | |
| require-array-sort-compare.ts | 100% | 15/15 | 100% | 7/7 | 100% | 2/2 | 100% | 15/15 | |
| require-await.ts | 97.44% | 38/39 | 87.5% | 14/16 | 100% | 5/5 | 97.44% | 38/39 | |
| restrict-plus-operands.ts | 100% | 34/34 | 96.88% | 31/32 | 100% | 5/5 | 100% | 33/33 | |
| semi.ts | 100% | 12/12 | 100% | 2/2 | 100% | 3/3 | 100% | 12/12 | |
| strict-boolean-expressions.ts | 100% | 33/33 | 95.83% | 23/24 | 100% | 6/6 | 100% | 33/33 | |
| triple-slash-reference.ts | 100% | 28/28 | 88.89% | 24/27 | 100% | 7/7 | 100% | 28/28 | |
| type-annotation-spacing.ts | 100% | 43/43 | 97.06% | 33/34 | 100% | 8/8 | 100% | 43/43 | |
| typedef.ts | 100% | 41/41 | 96.08% | 49/51 | 100% | 11/11 | 100% | 41/41 | |
| unbound-method.ts | 100% | 31/31 | 96.3% | 26/27 | 100% | 4/4 | 100% | 31/31 | |
| unified-signatures.ts | 98.55% | 136/138 | 95.1% | 136/143 | 100% | 36/36 | 98.47% | 129/131 |


Internet Explorer 7 Testsuite Results Summary
|
42 NORMATIVE tests |
41 passed |
1 failed |
|
39 BASIC tests |
38 passed |
1 failed |
|
4 NORMATIVE tests |
2 passed |
2 failed |
|
2 BASIC tests |
2 passed |
0 failed |
|
34 NORMATIVE tests |
22 passed |
12 failed |
|
34 BASIC tests |
22 passed |
12 failed |
|
64 NORMATIVE tests |
47 passed |
17 failed |
|
64 BASIC tests |
47 passed |
17 failed |
|
15 NORMATIVE tests |
15 passed |
0 failed |
|
4 BASIC tests |
4 passed |
0 failed |
|
10 NORMATIVE tests |
9 passed |
1 failed |
|
9 BASIC tests |
9 passed |
0 failed |
|
62 NORMATIVE tests |
53 passed |
9 failed |
|
62 BASIC tests |
53 passed |
9 failed |
|
57 NORMATIVE tests |
34 passed |
23 failed |
|
53 BASIC tests |
31 passed |
22 failed |
|
19 NORMATIVE tests |
9 passed |
10 failed |
|
19 BASIC tests |
9 passed |
10 failed |
|
70 NORMATIVE tests |
50 passed |
20 failed |
|
70 BASIC tests |
50 passed |
20 failed |
|
67 NORMATIVE tests |
45 passed |
22 failed |
|
67 BASIC tests |
45 passed |
22 failed |
|
15 NORMATIVE tests |
0 passed |
15 failed |
|
15 BASIC tests |
0 passed |
15 failed |
|
0 NORMATIVE tests |
0 passed |
0 failed |
|
0 BASIC tests |
0 passed |
0 failed |
|
0 NORMATIVE tests |
0 passed |
0 failed |
|
0 BASIC tests |
0 passed |
0 failed |
Totals
Note that these totals don't include chapter 1, or appendices G and H.
|
417 NORMATIVE tests |
286 passed |
131 failed |
69% |
|
399 BASIC tests |
272 passed |
127 failed |
68% |


Add a Comment
Let's send a new comment off the server.
Name:
Handle:
Comment:
Submit
Show All Parameters In Console
Remove The "hi" Parameter


nimble-storage
Businessmodel of Nimble Storage
Customer Segments
Nimble Storage provides a range of products and solutions to mid-sized and large global enterprises across multiple business sectors, as well as cloud-based service providers. The Company’s end-user base has grown to more than 10,000 worldwide, according to its website. These customers can be organised primarily into the following categories:
- Cloud Service Providers, including internet companies and cloud-based storage solutions providers;
- Education, including educational organisations such as universities, as well as research institutions;
- Financial Services, including banking institutions, financial service providers, capital management firms, and assurance and insurance companies, and venture capital firms;
- Healthcare, including healthcare providers, community health plans, and medical institutions;
- Manufacturing, including manufacturers of consumer goods, electronics, food and drink products, and industrial components;
- Technology, including technical solutions providers, technology, IT service companies, and software companies; and
- Government, including municipal, state, and federal government bodies, as well as various public bodies and agencies. Nimble Storage names a number of its clients on its website. This includes companies and organisations such as Amadeus Capital, Northrim Bank, Grant Street Group, Yahoo! Japan, Siemens, Skullcandy, and Aveva. Nimble Storage did not have any end-customers that represented more than 10% of its total revenue in 2016. In 2016 distributors Avnet, Ingram Micro, and Carahsoft Technology collectively accounted for around 79% of the Company’s revenue.
Nimble Storage serves an extensive domestic user base in the US. It also serves customers across the rest of North America, as well as across the Asia Pacific, and Europe, Middle East and Africa regions.
Value Propositions
Nimble Storage provides value to its clients in the following ways:
- Its industry standing and reputation, with the Company established as a reliable and trusted provider of storage solutions, as indicated by its ability to secure business from high-profile companies, government bodies, and public agencies;
- Its proprietary technologies, with the Company utilising a range of proprietary technologies in the development and delivery of its solutions and products, enabling it to provide end users with unique and innovative service offerings;
- The efficiency and cost-effectiveness of its solutions, with the Company’s solutions able to address a wide range of business applications, assisting clients in simplifying, scaling, and accelerating such applications at a reasonable price;
- Its network of partners, with the Company partnering with a range of market-leading companies – including Oracle, Microsoft, and Citrix – to ensure that its solutions are delivered effectively and efficiently; and
- Its international reach, with the Company serving an extensive domestic client base, as well as an extensive user base across international markets in Asia Pacific, Europe, the Middle East, and Africa. ### Channels
Nimble Storage operates a website at www.nimblestorage.com, through which the Company provides information on its various products, solutions, operating locations, and target industries. While the Company does not appear to operate an online sales portal, it does allow customers to request product demonstrations directly through its website. It also operates an online customer portal, through which customers can access products, tools, and resources.
Nimble Storage makes sales to customers through its direct sales force, the members of which deal directly with end-users. The Company’s sales personnel operate out of sales and administrative offices around the world, including locations in the US, India, Japan, France, the UK, and the UAE. Customers can contact sales personnel over the phone or via email.
Nimble Storage makes a significant portion of its sales through various channel partners, with, as noted above, the majority of the Company’s sales in 2016 being made to distributors.
The Company also sells products through a range of value added resellers. Nimble Storage does not manufacture its own hardware products, instead outsourcing these activities to contract manufacturer Flextronics, which assembles and tests the Company’s products. Nimble Storage also utilises the services of third-party logistics partners.
Customer Relationships
Nimble Storage does not sell its products directly to customers on a self-service basis. The Company does, however, allow customers to request product demonstrations directly through the Company’s website. The Company also operates a self-service online portal, through which customers can access product functionality, tools, and resources independently without interacting with members of the Company’s sales and service personnel.
Nimble makes sales through a direct sales force, the members of which are able to consult directly with customers in order to ensure that their individual needs are met. The Company is able to scale and tailor many of its storage solutions to suit the size and circumstances of each customer. Nimble Storage seeks to secure longstanding relationships with its customers.
Nimble Storage provides ongoing support to its customers, including premium 24-hour support services that ensure quick and effective technical assistance. Customers are able to contact support personnel over the phone in order to access personalised support.
The Company also offers a range of online resources, including white papers, analyst reports, infographics, and videos that can be accessed independently through its website. Additionally, Nimble Software operates a user community through which customers can interact with one another, collaborate on issues, and share ideas.
Nimble Storage maintains profiles with several social media platforms – including LinkedIn, Facebook, Twitter, and YouTube – through which it is able to interact directly with customers and provide company updates.
Key Activities
Nimble Storage develops and sells a range of flash storage solutions and products.
This includes the Company’s Predictive Flash platform, through which the Company provides customers with a full-service storage architecture that includes data, analytics, support and service offerings. Nimble Storage’s service offerings enable information technology organisations to manage performance, capacity and cost for the applications running across data centres.
The Company’s clients include companies across multiple industries, such as the manufacturing, technology, education, healthcare, and financial services sectors. Nimble Storage maintains an operational presence across various markets in North America, Asia Pacific, and Europe, Middle East and Africa.
Key Partners
Nimble Storage works in close collaboration with a range of partner companies and organisations that assist in developing and implementing effective solutions. These partners can be organised into the following categories:
- Supplier and Vendor Partners, including suppliers of services, equipment, and materials, including its contract manufacturing partners that are tasked with producing the Company’s hardware products;
- Channel and Distribution Partners, including the Company’s various channel partners, notably its principal distribution partners, as well as its network of value added resellers and systems integrators;
- Cloud Service Provider Partners, including the Company’s network of cloud service partners that assist the Company in developing and delivering cloud storage solutions to its clients; and
- Strategic and Alliance Partners, including a range of market leading companies across multiple industries that collaborate with the Company on various joint projects, including in marketing, branding, and development. Nimble Storage names a number of its partners on its website. These partners include high-profile technology companies such as Cisco, Microsoft, Intel, SAP, Lenovo, and Oracle.
Key Resources
Nimble Storage’s key resources are its intellectual properties and proprietary technologies, its sales and distribution channels, its online portal and cloud solutions, its IT and communications infrastructure, its various partnerships, and its personnel.
Nimble Storage utilises a range of proprietary technologies in the development and implementation of its solutions, which it protects using intellectual property and trademark laws. Searches of records published by the US Patent and Trademark Office identified a number of patent applications filed in the name of Nimble Storage, including applications entitled ‘Methods and systems for storing data in a redundant manner on a plurality of storage units of a storage system, Methods and systems for managing the scheduling of snapshots on a storage array’, and ‘Methods and systems for caching data in a storage system based on user input’.
Nimble Storage also owns and or leases a number of physical properties around the world that comprise its network of sales and administrative offices.
Cost Structure
Nimble Storage incurs costs in relation to the development of its proprietary technologies and solutions, the development and maintenance of its online portal, the maintenance of its IT and communications infrastructure, the procurement of professional and manufacturing services, the management of its partnerships, the operation of its sales and distribution channels, the implementation of marketing campaigns, and the retention of its personnel.
In 2016 Nimble Storage recorded total operating expenses in the amount of $328.22 million. This included research and development costs in the amount of $93.99 million, sales and marketing costs in the amount of $197.98 million, and general and administrative costs in the amount of $36.25 million.
Revenue Streams
Nimble Storage generates revenue through the development and sale of various storage solutions, including physical storage products and cloud-based storage offerings. The Company also generates revenue through the provision of various related services. The Company derives its revenue in the form of product sales and under service and support contracts.
In 2016 Nimble Storage generated total revenue in the amount of $322.22 million, up considerably on the $227.63 million recorded by the Company in 2015. This comprised product revenue of $265.60 million and support and service revenue of $56.61 million.


Use border-radius property to acheive the similar effect in CSS3. With a border the margin doesn't collapse.


|
Copyright 2013-01-06 Werner Randelshofer | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.monte.media.quicktime.AbstractQuickTimeStream
public class AbstractQuickTimeStream
This is the base class for low-level QuickTime stream IO.
FIXME - Separation between AbstractQuickTimeStream and QuickTimeOutputStream is not clean. Move write methods in the track classes down to QuickTimeOutputStream.
| Nested Class Summary | |
|---|---|
protected class |
AbstractQuickTimeStream.Atom
Atom base class. |
protected class |
AbstractQuickTimeStream.AudioTrack
|
protected static class |
AbstractQuickTimeStream.Chunk
Groups consecutive samples with the same sample description Id and with adjacent offsets in the movie file. |
protected class |
AbstractQuickTimeStream.CompositeAtom
A CompositeAtom contains an ordered list of Atoms. |
protected class |
AbstractQuickTimeStream.DataAtom
Data Atom. |
static class |
AbstractQuickTimeStream.Edit
An Edit define the portions of the media that are to be used to
build up a track for a movie. |
protected static class |
AbstractQuickTimeStream.Group
Groups consecutive samples with same characteristics. |
protected static class |
AbstractQuickTimeStream.Sample
QuickTime stores media data in samples. |
protected static class |
AbstractQuickTimeStream.SampleSizeGroup
Groups consecutive samples of the same size. |
protected static class |
AbstractQuickTimeStream.States
The states of the movie output stream. |
protected static class |
AbstractQuickTimeStream.TimeToSampleGroup
Groups consecutive smples of the same duration. |
protected class |
AbstractQuickTimeStream.Track
Represents a track. |
protected class |
AbstractQuickTimeStream.VideoTrack
|
protected class |
AbstractQuickTimeStream.WideDataAtom
WideDataAtom can grow larger then 4 gigabytes. |
| Field Summary | |
|---|---|
protected java.util.Date |
creationTime
Creation time of the movie. |
protected long |
currentTime
The time value for current time position within the movie. |
protected AbstractQuickTimeStream.WideDataAtom |
mdatAtom
This atom holds the media data. |
protected long |
mdatOffset
Offset for the mdat atom. |
protected java.util.Date |
modificationTime
Modification time of the movie. |
protected AbstractQuickTimeStream.CompositeAtom |
moovAtom
This atom holds the moovie header. |
protected double[] |
movieMatrix
The transformation matrix for the entire movie. |
protected long |
movieTimeScale
The timeScale of the movie. |
protected javax.imageio.stream.ImageOutputStream |
out
Underlying output stream. |
protected long |
posterTime
The time value of the time of the movie poster. |
protected double |
preferredRate
The preferred rate at which to play this movie. |
protected double |
preferredVolume
The preferred volume of this movie’s sound. |
protected long |
previewDuration
The duration of the movie preview in movie time scale units. |
protected long |
previewTime
The time value in the movie at which the preview begins. |
protected long |
selectionDuration
The duration of the current selection in movie time scale units. |
protected long |
selectionTime
The time value for the start time of the current selection. |
protected AbstractQuickTimeStream.States |
state
The current state of the movie output stream. |
protected long |
streamOffset
The offset in the underlying ImageOutputStream. |
protected java.util.ArrayList<AbstractQuickTimeStream.Track> |
tracks
The list of tracks in the movie. |
| Constructor Summary | |
|---|---|
AbstractQuickTimeStream()
|
| Method Summary | |
|---|---|
protected long |
getRelativeStreamPosition()
Gets the position relative to the beginning of the QuickTime stream. |
protected static java.lang.String |
intToType(int id)
|
protected void |
seekRelative(long newPosition)
Seeks relative to the beginning of the QuickTime stream. |
protected static int |
typeToInt(java.lang.String str)
|
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected javax.imageio.stream.ImageOutputStream out
protected long streamOffset
protected AbstractQuickTimeStream.WideDataAtom mdatAtom
protected long mdatOffset
protected AbstractQuickTimeStream.CompositeAtom moovAtom
protected java.util.Date creationTime
protected java.util.Date modificationTime
protected long movieTimeScale
protected double preferredRate
protected double preferredVolume
protected long previewTime
protected long previewDuration
protected long posterTime
protected long selectionTime
protected long selectionDuration
protected long currentTime
protected java.util.ArrayList<AbstractQuickTimeStream.Track> tracks
protected double[] movieMatrix
protected AbstractQuickTimeStream.States state
| Constructor Detail |
|---|
public AbstractQuickTimeStream()
| Method Detail |
|---|
protected long getRelativeStreamPosition() throws java.io.IOException
Usually this value is equal to the stream position of the underlying ImageOutputStream, but can be larger if the underlying stream already contained data.
java.io.IOException
protected void seekRelative(long newPosition) throws java.io.IOException
Usually this equal to seeking in the underlying ImageOutputStream, but can be different if the underlying stream already contained data.
java.io.IOException
protected static int typeToInt(java.lang.String str)
protected static java.lang.String intToType(int id)
|
Copyright 2013-01-06 Werner Randelshofer | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


typedef struct Tcl_Time { long sec; long usec; } Tcl_Time;
On return, the sec member of the structure is filled in with the number of seconds that have elapsed since the epoch: the epoch is the point in time of 00:00 UTC, 1 January 1970. This number does not count leap seconds - an interval of one day advances it by 86400 seconds regardless of whether a leap second has been inserted.
The usec member of the structure is filled in with the number of microseconds that have elapsed since the start of the second designated by sec. The Tcl library makes every effort to keep this number as precise as possible, subject to the limitations of the computer system. On multiprocessor variants of Windows, this number may be limited to the 10- or 20-ms granularity of the system clock. (On single-processor Windows systems, the usec field is derived from a performance counter and is highly precise.)
The Tcl_SetTime function registers two related handler functions with the core. The first handler function is a replacement for Tcl_GetTime, or rather the OS access made by Tcl_GetTime. The other handler function is used by the Tcl notifier to convert wait/block times from the virtual domain into real time.
The Tcl_QueryTime function returns the currently registered handler functions. If no external handlers were set then this will return the standard handlers accessing and processing the native time of the OS. The arguments to the function are allowed to be NULL; and any argument which is NULL is ignored and not set.
Any handler pair specified has to return data which is consistent between them. In other words, setting one handler of the pair to something assuming a 10-times slowdown, and the other handler of the pair to something assuming a two-times slowdown is wrong and not allowed.
The set handler functions are allowed to run the delivered time backwards, however this should be avoided. We have to allow it as the native time can run backwards as the user can fiddle with the system time one way or other. Note that the insertion of the hooks will not change the behaviour of the Tcl core with regard to this situation, i.e. the existing behaviour is retained.


| Top |
| #define | GDK_SELECTION_PRIMARY |
| #define | GDK_SELECTION_SECONDARY |
| #define | GDK_SELECTION_CLIPBOARD |
| #define | GDK_TARGET_BITMAP |
| #define | GDK_TARGET_COLORMAP |
| #define | GDK_TARGET_DRAWABLE |
| #define | GDK_TARGET_PIXMAP |
| #define | GDK_TARGET_STRING |
| #define | GDK_SELECTION_TYPE_ATOM |
| #define | GDK_SELECTION_TYPE_BITMAP |
| #define | GDK_SELECTION_TYPE_COLORMAP |
| #define | GDK_SELECTION_TYPE_DRAWABLE |
| #define | GDK_SELECTION_TYPE_INTEGER |
| #define | GDK_SELECTION_TYPE_PIXMAP |
| #define | GDK_SELECTION_TYPE_WINDOW |
| #define | GDK_SELECTION_TYPE_STRING |
The X selection mechanism provides a way to transfer arbitrary chunks of
data between programs. A “selection” is a essentially
a named clipboard, identified by a string interned as a GdkAtom. By
claiming ownership of a selection, an application indicates that it will
be responsible for supplying its contents. The most common selections are
PRIMARY
and CLIPBOARD
.
The contents of a selection can be represented in a number of formats,
called “targets”. Each target is identified by an atom.
A list of all possible targets supported by the selection owner can be
retrieved by requesting the special target TARGETS
. When
a selection is retrieved, the data is accompanied by a type (an atom), and
a format (an integer, representing the number of bits per item).
See Properties and Atoms
for more information.
The functions in this section only contain the lowlevel parts of the
selection protocol. A considerably more complicated implementation is needed
on top of this. GTK+ contains such an implementation in the functions in
gtkselection.h
and programmers should use those functions
instead of the ones presented here. If you plan to implement selection
handling directly on top of the functions here, you should refer to the
X Inter-client Communication Conventions Manual (ICCCM).
gboolean gdk_selection_owner_set (GdkWindow *owner
,GdkAtom selection
,guint32 time_
,gboolean send_event
);
Sets the owner of the given selection.
owner |
a GdkWindow or |
[allow-none] |
selection |
an atom identifying a selection. |
|
time_ |
timestamp to use when setting the selection. If this is older than the timestamp given last time the owner was set for the given selection, the request will be ignored. |
|
send_event |
if |
gboolean gdk_selection_owner_set_for_display (GdkDisplay *display
,GdkWindow *owner
,GdkAtom selection
,guint32 time_
,gboolean send_event
);
Sets the GdkWindow owner
as the current owner of the selection selection
.
display |
the GdkDisplay |
|
owner |
a GdkWindow or |
[nullable] |
selection |
an atom identifying a selection |
|
time_ |
timestamp to use when setting the selection If this is older than the timestamp given last time the owner was set for the given selection, the request will be ignored |
|
send_event |
if |
Since: 2.2
GdkWindow *
gdk_selection_owner_get (GdkAtom selection
);
Determines the owner of the given selection.
if there is a selection owner
for this window, and it is a window known to the current process,
the GdkWindow that owns the selection, otherwise NULL
. Note
that the return value may be owned by a different process if a
foreign window was previously created for that window, but a new
foreign window will never be created by this call.
[nullable][transfer none]
GdkWindow * gdk_selection_owner_get_for_display (GdkDisplay *display
,GdkAtom selection
);
Determine the owner of the given selection.
Note that the return value may be owned by a different process if a foreign window was previously created for that window, but a new foreign window will never be created by this call.
if there is a selection owner
for this window, and it is a window known to the current
process, the GdkWindow that owns the selection, otherwise
NULL
.
[nullable][transfer none]
Since: 2.2
void gdk_selection_convert (GdkWindow *requestor
,GdkAtom selection
,GdkAtom target
,guint32 time_
);
Retrieves the contents of a selection in a given form.
requestor |
a GdkWindow. |
|
selection |
an atom identifying the selection to get the contents of. |
|
target |
the form in which to retrieve the selection. |
|
time_ |
the timestamp to use when retrieving the selection. The selection owner may refuse the request if it did not own the selection at the time indicated by the timestamp. |
gint gdk_selection_property_get (GdkWindow *requestor
,guchar **data
,GdkAtom *prop_type
,gint *prop_format
);
Retrieves selection data that was stored by the selection
data in response to a call to gdk_selection_convert()
. This function
will not be used by applications, who should use the GtkClipboard
API instead.
[skip]
requestor |
the window on which the data is stored |
|
data |
location to store a pointer to the retrieved data.
If the retrieval failed, |
|
prop_type |
location to store the type of the property |
|
prop_format |
location to store the format of the property |
void gdk_selection_send_notify (GdkWindow *requestor
,GdkAtom selection
,GdkAtom target
,GdkAtom property
,guint32 time_
);
Sends a response to SelectionRequest event.
requestor |
window to which to deliver response. |
|
selection |
selection that was requested. |
|
target |
target that was selected. |
|
property |
property in which the selection owner stored the
data, or |
|
time_ |
timestamp. |
void gdk_selection_send_notify_for_display (GdkDisplay *display
,GdkWindow *requestor
,GdkAtom selection
,GdkAtom target
,GdkAtom property
,guint32 time_
);
Send a response to SelectionRequest event.
display |
the GdkDisplay where |
|
requestor |
window to which to deliver response |
|
selection |
selection that was requested |
|
target |
target that was selected |
|
property |
property in which the selection owner stored the data,
or |
|
time_ |
timestamp |
Since: 2.2
#define GDK_SELECTION_PRIMARY _GDK_MAKE_ATOM (1)
A GdkAtom representing the PRIMARY
selection.
#define GDK_SELECTION_SECONDARY _GDK_MAKE_ATOM (2)
A GdkAtom representing the SECONDARY
selection.
#define GDK_SELECTION_CLIPBOARD _GDK_MAKE_ATOM (69)
A GdkAtom representing the CLIPBOARD
selection.
#define GDK_TARGET_BITMAP _GDK_MAKE_ATOM (5)
A GdkAtom representing the BITMAP
selection target.
#define GDK_TARGET_COLORMAP _GDK_MAKE_ATOM (7)
A GdkAtom representing the COLORMAP
selection target.
#define GDK_TARGET_DRAWABLE _GDK_MAKE_ATOM (17)
A GdkAtom representing the DRAWABLE
selection target.
#define GDK_TARGET_PIXMAP _GDK_MAKE_ATOM (20)
A GdkAtom representing the PIXMAP
selection target.
#define GDK_TARGET_STRING _GDK_MAKE_ATOM (31)
A GdkAtom representing the STRING
selection target.
#define GDK_SELECTION_TYPE_ATOM _GDK_MAKE_ATOM (4)
A GdkAtom representing the ATOM
selection type.
#define GDK_SELECTION_TYPE_BITMAP _GDK_MAKE_ATOM (5)
A GdkAtom representing the BITMAP
selection type.
#define GDK_SELECTION_TYPE_COLORMAP _GDK_MAKE_ATOM (7)
A GdkAtom representing the COLORMAP
selection type.
#define GDK_SELECTION_TYPE_DRAWABLE _GDK_MAKE_ATOM (17)
A GdkAtom representing the DRAWABLE
selection type.
#define GDK_SELECTION_TYPE_INTEGER _GDK_MAKE_ATOM (19)
A GdkAtom representing the INTEGER
selection type.
#define GDK_SELECTION_TYPE_PIXMAP _GDK_MAKE_ATOM (20)
A GdkAtom representing the PIXMAP
selection type.
#define GDK_SELECTION_TYPE_WINDOW _GDK_MAKE_ATOM (33)
A GdkAtom representing the WINDOW
selection type.
#define GDK_SELECTION_TYPE_STRING _GDK_MAKE_ATOM (31)
A GdkAtom representing the STRING
selection type.


Endangered Data Week is a collaborative effort coordinated across campuses, nonprofits, libraries, citizen science initiatives, community activist groups, and cultural heritage institutions, to foster an environment of data consciousness. The week's events promote care for endangered collections, open government, community data privacy, and data ethics by: critically engaging with the practice of data collection by governments, corporations, institutions of learning, and other organizations; publicizing the availability of datasets; increasing critical engagement with them, including through visualization and analysis; and by encouraging political activism for open data policies and the fostering of data skills through workshops on curation, documentation and discovery, improved access, and preservation.
We recognize that, just as data can be endangered, it can be endangering. The collection and retention of data is never neutral. Endangered Data Week is an exploration of the ways that data is always political and requires careful ethical consideration. Read more...
Browse our map and list to find Endangered Data Week events that will be held {{ site.date }}! You can find additional resources and ideas, for your own events, and you can register yours using our form. Continue to help spread the word by using the hashtag #EndangeredData! If you have any questions, please get in touch!
Sign up for our (very occasional) newsletter for updates about ongoing initiatives and projects.
Questions about Endangered Data Week or our projects? Get in touch with our team.
Follow us on Twitter @EndangeredData
Contribute to our initiatives on GitHub @EndangeredDataWeek


| 1 | package org.jsoup.nodes; | |
| 2 | ||
| 3 | import org.jsoup.SerializationException; | |
| 4 | import org.jsoup.helper.Validate; | |
| 5 | ||
| 6 | import java.io.IOException; | |
| 7 | ||
| 8 | /** | |
| 9 | * An XML Declaration. | |
| 10 | */ | |
| 11 | public class XmlDeclaration extends LeafNode { | |
| 12 | // todo this impl isn't really right, the data shouldn't be attributes, just a run of text after the name | |
| 13 | private final boolean isProcessingInstruction; // <! if true, <? if false, declaration (and last data char should be ?) | |
| 14 | ||
| 15 | /** | |
| 16 | * Create a new XML declaration | |
| 17 | * @param name of declaration | |
| 18 | * @param isProcessingInstruction is processing instruction | |
| 19 | */ | |
| 20 | public XmlDeclaration(String name, boolean isProcessingInstruction) { | |
| 21 |
1
1. |
Validate.notNull(name); |
| 22 | value = name; | |
| 23 | this.isProcessingInstruction = isProcessingInstruction; | |
| 24 | } | |
| 25 | ||
| 26 | /** | |
| 27 | * Create a new XML declaration | |
| 28 | * @param name of declaration | |
| 29 | * @param baseUri Leaf Nodes don't have base URIs; they inherit from their Element | |
| 30 | * @param isProcessingInstruction is processing instruction | |
| 31 | * @see XmlDeclaration#XmlDeclaration(String, boolean) | |
| 32 | * @deprecated | |
| 33 | */ | |
| 34 | public XmlDeclaration(String name, String baseUri, boolean isProcessingInstruction) { | |
| 35 | this(name, isProcessingInstruction); | |
| 36 | } | |
| 37 | ||
| 38 | public String nodeName() { | |
| 39 |
1
1. nodeName : mutated return of Object value for org/jsoup/nodes/XmlDeclaration::nodeName to ( if (x != null) null else throw new RuntimeException ) → SURVIVED |
return "#declaration"; |
| 40 | } | |
| 41 | ||
| 42 | /** | |
| 43 | * Get the name of this declaration. | |
| 44 | * @return name of this declaration. | |
| 45 | */ | |
| 46 | public String name() { | |
| 47 |
1
1. name : mutated return of Object value for org/jsoup/nodes/XmlDeclaration::name to ( if (x != null) null else throw new RuntimeException ) → SURVIVED |
return coreValue(); |
| 48 | } | |
| 49 | ||
| 50 | /** | |
| 51 | * Get the unencoded XML declaration. | |
| 52 | * @return XML declaration | |
| 53 | */ | |
| 54 | public String getWholeDeclaration() { | |
| 55 | StringBuilder sb = new StringBuilder(); | |
| 56 | try { | |
| 57 |
1
1. getWholeDeclaration : removed call to org/jsoup/nodes/XmlDeclaration::getWholeDeclaration → SURVIVED |
getWholeDeclaration(sb, new Document.OutputSettings()); |
| 58 | } catch (IOException e) { | |
| 59 | throw new SerializationException(e); | |
| 60 | } | |
| 61 |
1
1. getWholeDeclaration : mutated return of Object value for org/jsoup/nodes/XmlDeclaration::getWholeDeclaration to ( if (x != null) null else throw new RuntimeException ) → SURVIVED |
return sb.toString().trim(); |
| 62 | } | |
| 63 | ||
| 64 | private void getWholeDeclaration(Appendable accum, Document.OutputSettings out) throws IOException { | |
| 65 | for (Attribute attribute : attributes()) { | |
| 66 |
1
1. getWholeDeclaration : negated conditional → SURVIVED |
if (!attribute.getKey().equals(nodeName())) { // skips coreValue (name) |
| 67 | accum.append(' '); | |
| 68 |
1
1. getWholeDeclaration : removed call to org/jsoup/nodes/Attribute::html → NO_COVERAGE |
attribute.html(accum, out); |
| 69 | } | |
| 70 | } | |
| 71 | } | |
| 72 | ||
| 73 | void outerHtmlHead(Appendable accum, int depth, Document.OutputSettings out) throws IOException { | |
| 74 | accum | |
| 75 |
1
1. outerHtmlHead : negated conditional → SURVIVED |
.append("<") |
| 76 | .append(isProcessingInstruction ? "!" : "?") | |
| 77 | .append(coreValue()); | |
| 78 |
1
1. outerHtmlHead : removed call to org/jsoup/nodes/XmlDeclaration::getWholeDeclaration → SURVIVED |
getWholeDeclaration(accum, out); |
| 79 |
1
1. outerHtmlHead : negated conditional → SURVIVED |
accum |
| 80 | .append(isProcessingInstruction ? "!" : "?") | |
| 81 | .append(">"); | |
| 82 | } | |
| 83 | ||
| 84 | void outerHtmlTail(Appendable accum, int depth, Document.OutputSettings out) { | |
| 85 | } | |
| 86 | ||
| 87 | @Override | |
| 88 | public String toString() { | |
| 89 |
1
1. toString : mutated return of Object value for org/jsoup/nodes/XmlDeclaration::toString to ( if (x != null) null else throw new RuntimeException ) → SURVIVED |
return outerHtml(); |
| 90 | } | |
| 91 | } | |
Mutations | ||
| 21 |
1.1 |
|
| 39 |
1.1 |
|
| 47 |
1.1 |
|
| 57 |
1.1 |
|
| 61 |
1.1 |
|
| 66 |
1.1 |
|
| 68 |
1.1 |
|
| 75 |
1.1 |
|
| 78 |
1.1 |
|
| 79 |
1.1 |
|
| 89 |
1.1 |


Accept payments and sell anything. Powerful and easy one-off product sales. Sell physical and digital goods, charge for services, accept donations, sell pre-orders and more. Storefront makes it all too easy.
Try Demo Try EmbedStart accepting payments instantly with Plasso. Setting up product pages, called 'Spaces', to sell your digital or physical goods/services is super easy. You can sell multiple products per Space and even collect custom data from customers at checkout.
Anytime someone purchases your products or you receive a payment you'll be able to manage those payments and customers from within Plasso. You can issue refunds, view transaction history and even edit/update your customer data.
Capture pre-orders to charge your cusotmer's credit cards at a later time. Your customers can manage their own pre-order and even keep their credit card up to date.
Accepting donations is easy; with one click all the language on the payment form will be donation specific.
Collect shipping addresses at checkout and send shipment notifications to your customers with one click. Sell your digital goods and files: ebooks, videos, music, etc. Plasso takes care of the secure file delivery.
Add any number of form fields to your sign up form to gather more data from your customers at sign up.
Incentivise customers with coupon codes. You'll be able to keep track of each coupon code's usage.
Your customers can purchase multiples of any of your products. You can set a stock limit to control inventory.
Sell your products without writing any code at all. No 3rd party integrations or development required.
Receipts, shipment notifications, upcoming charges, and more are all automatically sent to your customers.
You get to decide which emails Plasso sends to your customers. You can even customize the look of those emails.
Keep track of product sales and payments at a glance.
All your sales and payment data can be exported with one click.
All transactions and payment forms are secure and encrypted.
Try our Membership product.


About Me
My name is Thor Nolan, and I am an aspiring web developer living in the Bay Area. I graduated from Reed College in 2016 and am currently enrolled in UC Berkeley Extension's coding bootcamp. I'm always looking for new ways to expand my coding skill set and gain experience working with code any way that I can.
My areas of interest include technology, philosophy, politics, writing, and gaming, but that's to name only a few. By the time I finish my bootcamp, I will have significant hands-on experience working with HTML, CSS and CSS frameworks, vanilla Javascript, jQuery, and React, Git, Github, and Heroku, Django, MySQL and MongoDB, as well as Express and the MERN Stack.
When I'm not working on honing my coding skills, I enjoy rock climbing at my local climbing gym, or getting outside to climb or hike whenever I can. I am also an avid PC gamer, and have enjoyed building and updating the parts of my own PC for gaming as well as adding to my unreasonably large (and still-growing) library of games.


Minecraft Pocket Edition Pre Register Download Taptap
Download Minecraft Pocket Edition Mod Everything Is Open 1 16 200 53 Apk Version For Android
Minecraft Pocket Edition Alpha Mojang Free Download Borrow And Streaming Internet Archive
How To Download Minecraft Pocket Edition Apk Business
マイクラpe無料ダウンロード方法 Minecraft Pocket Edition ゲーム裏技 ワザップ
Download Minecraft Pe For Windows 10 8 Minecraft Pe
Minecraft Pocket Edition For Pc Download Free Gamescatalyst
Minecraft Pocket Edition Apk Download Link
Download Minecraft Pe 1 1 5 For Android Minecraft Pocket Ediion 1 1 5
Minecraft Pocket Edition Pc Version Full Game Free Download
Minecraft Mobile Pc How To Download And Play Minecraft Pocket Edition On Pc Pocket Tactics
Minecraft Pocket Edition On Pc How To Download And Install Tech Life
Download Skyblock For Minecraft Pe Minecraft Pe
Minecraftのポケット版apkアンドロイドゲーム無料ダウンロード
Minecraft Pocket Edition Pro Apk Free Download Latest Version Apkwala
How To Download Install Custom Minecraft Maps In Minecraft Pocket Edition Get Mcpe Maps Youtube
Minecraft Pe 0 15 0 Ios Latest Version Free Download The Gamer Hq
Minecraft Pocket Edition Hits 30 Million Downloads Venturebeat
Download Minecraft Pe 2 0 0 Apk Free Mcpe 2 0 0 Android Minecraft Pe Minecraft Minecraft Pocket Edition
Minecraft Pocket Edition Zip Android Rar Computer File Png 512x512px Minecraft Pocket Edition Android Archive Archive
Download Blocklauncher Pro For Minecraft Pe 1 14 1
Minecraft Full Version Apk 0 14 0 Free Download For Android
Master For Minecraft Pocket Edition Mod Launcher For Android Apk Download
Download Play Minecraft On Pc Mac Emulator
Full Version Of Minecraft Pocket Edition 1 14 60 5 For Android
Minecraft Pocket Edition Free Download Mac By Caryuni Priadi Mar 2021 Medium
Download Minecraft Pocket Edition Apk 1 9 0 15 For Android Filehippo Com
Download Minecraft Pocket Edition V1 12 0 10 Update The News Region
Minecraft Pocket Edition 1 10 0 3 Apk Mod Free Download For Android Apk Wonderland
Minecraft Pe 1 2 6 Ipa Download Corporationlasopa
Minecraft Pocket Edition Game Download Apk Mods Servers Guide Unofficial Beat Your Opponents The Game By Chala Dar Nook Book Ebook Barnes Noble
Minecraft Pocket Edition V1 2 8 How To Download Zip Files To Minecraft Pe Ios Youtube
Minecraft Pocket Edition Pc Game Torrent Download Peatix


God of Number Theory
问题描述 :
In ACM_DIY, there is one master called “AekdyCoin”. As we know, he is the god of “Number Theory”. He always kills the problem about “Number Theory” in seconds! But of course we do not have any idea about these problems~ One day in ACM_DIY, AekdyCoin asks us one problem:
You are given three non-negative integers A, B and K, you are expected to find how many X that satisfy.
X^A = B( mod (2K + 1) )
X is in the ranger [0, 2K];
You are given three non-negative integers A, B and K, you are expected to find how many X that satisfy.
X^A = B( mod (2K + 1) )
X is in the ranger [0, 2K];
Of course we have no idea about this problem, so could you help us?
输入:
The first line is one integer T indicates the number of the test cases. (T <= 1000)
Then for every case, only one line contains three integers A, B and K. (1 <= A, B <= 10^9, 1 <= K <= 5 * 10^8)
Then for every case, only one line contains three integers A, B and K. (1 <= A, B <= 10^9, 1 <= K <= 5 * 10^8)
输出:
The first line is one integer T indicates the number of the test cases. (T <= 1000)
Then for every case, only one line contains three integers A, B and K. (1 <= A, B <= 10^9, 1 <= K <= 5 * 10^8)
Then for every case, only one line contains three integers A, B and K. (1 <= A, B <= 10^9, 1 <= K <= 5 * 10^8)
样例输入:
3 1 1 1 11 11 11 111 111 111
样例输出:
1 0 0
(adsbygoogle = window.adsbygoogle || []).push({});
正能量要多传播 哈哈
正能量要多传播 哈哈
正能量要多传播 哈哈
正能量要多传播 哈哈
正能量要多传播 哈哈
正能量要多传播 哈哈
正能量要多传播 哈哈
多谢提醒，是漏掉了
学习了
问题3是不是应该为1/4 .因为截取的三段，无论是否能组成三角形， x， y-x ，1-y,都应大于0，所以 x<y,基础应该是一个大三角形。小三角是大三角的 1/4.
yeah, This is very tricky. If you use Cpp,you need more code
还是有些难度的！
妈呀！这个模板好长OwQ！
学习了！！
很强大啊，佩服
int L[m+1][n+1];这样定义出错，这个在gcc上可以编译通过 在VS上不行 应该改为new 或者vector
int L[m+1][n+1];这样定义出错，这个在gcc上可以编译通过 在VS上不行 应该改为new 或者vector
漏了一个"不"，已修正:)
simple, however efficient. A lot of instances it is difficult to get that a??perfect balancea?? among usability and appearance. I must say that youa??ve done a exceptional task with this. Also, the blog masses quite fast for me on Web explore.
很好的思路，可以借鉴
给力


A large fishing and commercial harbour. Located on the NE corner of on Hiiumaa, Estonia's second largest island. Its Kõpu lighthouse, completed in 1538, is still in use today.
Position 59°03.94' N, 22°42.14' E.
This is a Port of Entry.
Passport Control and Customs open from May 15 - September 15, 8 am to 10 pm.
May be possible to make reservations for other times.
Last updated December 2015.
This harbour is exposed to S and SE winds.
There are 10 berhs for visiting yachts here.
Last updated December 2015.


Oh nooooo! An error has occurred...
We don't know what exactly happened... You can start over by going to the
homepage
.


This is another word used to mean width.
The distance measured from one side of a figure to another side which is opposite.


Hey There! In this post I’ll be going to explain everything that is necessary for a layman(not really) to understand Open Redirects. Let’s start!
Open Redirect or Open Redirection is a situation in which a website redirects or sends the user to another website by taking parameter value as the destination.
Example:
- URL -
http://site.com/redir?url=http://www.google.com
- parameter name -
url
- parameter value -
http://www.google.com
- destination(the webiste to which you will be redirected) -
http://www.google.com
Javascript Based Redirection
The URL - http://site.com/redir?url=http://www.google.com
will send you or redirect you to http://www.google.com
.
Now, let’s take a look at the code which is the cause of our redirection.
What’s happening is that, the code is taking the parameter value from the URL which is http://www.google.com
and then it’s assigning the value to window.location
and that’s how you are getting redirected to http://www.google.com
. And this is what we call a - Javascript Based Redirection.
window.location
is the sink here, whereas param.searchParams.get('url');
is the source.
Note: When you’re trying to fuzz the parameters, remember that Javascript Based Redirections give you 200
and not 3xx
as a response code. Also, it’s usefulness is only restricted to DOM XSS.
Header Based Redirection are the redirections triggered by the server side scripts like php, java, etc. And, this redirection is the OG as it gives 3xx
as a response code and it can uplifted up to make SSRFs work.
Let’s see an example php code that does this redirection :
As usual, the parameter value is getting stored into the location header which leads us to our redirection. It can be chained with vulnerabilities like SSRF, OAuth token disclosure and CLRF Injection. It can also be used for phising.
Functionalities you should look upto are - login, signup, register, logout.
List of Quality Bypasses
Here’s a short list of bypasses(payloads) that I’ve collected from this source after going through some HackerOne reports and have tried on different targets to bypass the filters.
https:www.google.com
HtTp://google.com
http\x3A\x2F\x2Fgoogle.com
//google。com
x00http://google.com
////<IP_ADDRESS>
/\<IP_ADDRESS>
x20http://www.google.com
https://www.google.com
hthttp://tp://www.google.com
。/www.google.com
Dorks & Parameter Names
Some useful google dorks:
site:target.com AND inurl:url=http(s)
site:target.com AND inurl:u=http(s)
site:target.com AND inurl:redirect?http(s)
site:target.com AND inurl:redirect=http(s)
site:target.com AND inurl:link=http(s)
Some parameter names that need attention while looking for Open Redirects from Pentester Land:
?next=
?url=
?dest=
?redirect=
?returnTo=
?go=
?redirect_uri
?continue=
?return_path=
?externalLink=
?URL=
More Resources -
That’s all for this post, you can reach out to me on twitter and tell if you liked it or not, suggestions and criticism would be welcomed.


To calculate your Basal Metabolic Rate or BMR (also sometimes called RMR for Resting Metabolic Rate) just
enter your sex (because different formuals are used for males and females),
your height, your age and your weight.
If you live in the UK, USA or any other country that doesn't use the metric system you can switch to the
imperial system using the link on the top.
After you click calculate, your BMR is calculated and you are presented with the caloric intake needed for
maintaining your weight.
In the table below your result you can see an estimation of what your caloric intake has to be for weight
loss or gain.
Please note: BMR calculator will calculate your basal metabolic rate. This is not your total daily calorie expenditure! If you want to know more about BMR read this article on what is basal metabolic rate. If you have selected activity level when calculating BMR than the above tool will calculate your approximate daily calorie expenditure. If you exceed that number (caloric surplus) you will start to gain weight as your body will gain extra fat. If you do not exceed that number (caloric deficit) you will maintain or lose weight (if caloric deficit is high).
Source: http://healthiack.com/bmr-calculator
BMR is short for Basal Metabolic Rate and represent the amount of calories your muscles burn every day just to maintain vital operations such as breathing or thinking. In other words, BMR rate is the amount of calories your body would burn if you were to stay in bed the whole day and do nothing at all!
The BMR (Basal Metabolic Rate) or RMR (Resting Metabolic Rate) is the amount of energy needed by an
individual to maintain its weight.
Exceeding your BMR can result in weight gain just as falling short of your BMR can result in weight
loss.
Your basal metabolic rate accounts for about 60 to 75% of the calories you burn every day.
This calculator uses the Mifflin St. Jeor formula established in 1990 which is much more accurate than the
Harris-Benedict Equation from 1919.
The Basal Metabolic Rate (BMR) is the amount of energy you need while resting in a temperate environment
during the post-absorptive state, or when your digestive system is inactive.  The BMR decreases with age and increases
with muscle mass.
The BMR is measured under very restrictive circumstances while awake. An accurate BMR measurement requires
that a person's sympathetic nervous system is inactive, which means the person must be completely rested.
Basal metabolism is usually the largest component of a person's total caloric needs. The daily calorie needs
is the BMR value multiplied by a factor with a value between 1.2 and 1.9, depending on the activity level.
In most situations, the BMR is estimated with equations summarized from statistical data. The most commonly
used one is the Mifflin - St Jeor equation:
BMR = 10 * weight(kg) + 6.25 * height(cm) - 5 * age(y) + 5 (man)
BMR = 10 * weight(kg) + 6.25 * height(cm) - 5 * age(y) - 161 (woman)
When interpreting the results from your calculations, please consider that the Basal Metabolic Rate does not
take physical activity into consideration.
If you exercise a lot or do a lot of physical activities at your job, the caloric intake may be up to
1000Kcal higher than what the calculations show.
If you feel like your caloric intake is higher or lower than it should be and/or you are obese or
underweight, please seek medical advice.
The results provided by our BMR calculator are not 100% accurate as BMR calculator does not take into account the following factors: density of your bones, your muscle mass, your body fat percentage, the amount of water that is present in your body at the moment of calculation. The accuracy of this calculation is still fairly accurate for non-obese and non-athlete person.
 It represents the minimum amount of energy needed to keep your body functioning, including breathing and keeping your heart beating.
Your BMR does not include the calories you burn from normal daily activities or exercise.
Our calculator uses the Mifflin-St. Jeor equations to estimate your BMR which is believed to be more accurate than the more commonly used Harris-Benedict equation.


Company has believed that a firm commitment to quality is fundamental to the total service that we offer. Making full use of our extensive facilities, all work is scheduled to pass through the Inspection department at key stages of manufacture and then again before delivery to the customer. The ongoing investment in measuring equipment extends to the workshops where 'Quality Stations' provide the skilled workforce with the means to check and cross-check their work throughout the machining process. Such capital investment must obviously be backed up by the necessary training and systems and here again we have proven commitment.
Over the years TMP has earned good reputation as a reliable and quality oriented supplier of specialized heavy fabricated components and heavy machined components. The Company has established a long lasting relationship with its clients; built on trust, reliability and commitment. One of the Core Principles established in TMP is to seek to anticipate the needs of its Clients and to provide products and services, which offer maximum value in terms of price, quality, timing and safety.


Plan Routes determines how to efficiently divide tasks among a mobile workforce.
You provide the tool with a set of stops and the number of vehicles available to visit the stops. The tool assigns the stops to vehicles and returns routes showing how each vehicle can reach their assigned stops in the least amount of time.
With Plan Routes, mobile workforces reach more job sites in less time, which increases productivity and improves customer service.
The output from Plan Routes includes a layer of stops coded by the routes to which they are assigned, a layer of routes showing the shortest paths to visit assigned stops, and, depending on whether any stops could not be reached, a layer of unassigned stops.
If Use current map extent is checked, only the features that are visible within the current map extent will be considered in the analysis. If unchecked, all features in the input layer will be considered, even if they are outside the current map extent.
Choose the layer of points that the routes (or vehicles) should visit. These points become assigned or unassigned stops in the output.
In addition to choosing a layer from your map, you can select Choose Living Atlas Analysis Layer or Choose Analysis Layer found at the bottom of the drop-down list. This opens a gallery containing a collection of layers useful for many analyses.
The tool supports up to 2,000 input features.
Choose your travel mode. The output routes will follow roads or walkways and honor applicable rules, such as one-way streets and illegal turns for driving or trucking. The available travel modes are determined by the administrator of your organization.
Specify where and when the vehicles start their routes.
With Plan Routes you can specify one or many starting locations for your vehicles.
When one point location is specified, all vehicles depart from that point regardless of the number of vehicles available. You can choose a point layer with one point or add a point to the map by choosing Add point to map, clicking the adjacent point editing button, and clicking on the map.
When multiple locations are specified, each vehicle needs to be associated with its own point. The number of vehicles must match the number of points in the layer. Choose a layer with multiple points and specify a field that uniquely identifies the individual routes, vehicles, or drivers in the Route ID field drop-down list.
The starting time is the same for all routes. The time zone for the start time is the same as the time zone in which the starting point or points are located, so make certain the time you enter is local time. For instance, assume you are in Pacific Standard Time (UTC-8:00) and the vehicles you are routing are stationed in Mountain Standard Time (UTC-7:00). If it is currently 9:30 a.m. PST (10:30 a.m. MST) and your vehicles need to begin their routes in 30 minutes, you would set the start time to 11:00 a.m.
If your vehicles start from different time zones, the start time can't be simultaneous; instead, they are offset. For instance, if one route starts from a point in PST and another route starts from MST, and you enter 11:00 a.m. as the start time, the route in PST will start at 11:00 a.m. PST and the route in MST will start at 11:00 a.m. MST—a one-hour difference.
Specify where the vehicles end their routes.
You can configure the routes to end in one of three locations:
Check Return to start if the vehicles start and end their routes at the same locations.
To route all vehicles to a common ending point other than the starting point, uncheck Return to start and either add a point to the map or choose a layer that contains exactly one point.
To have routes end at unique locations, uncheck Return to start and choose a layer containing more than one point. The number of vehicles must equal the number of points in the chosen layer. In the Route ID field drop-down list, choose a field that uniquely identifies the individual routes, vehicles, or drivers. If the vehicles are starting at multiple locations and ending at multiple locations, the route IDs chosen for the starting and ending layers need to match.
Specify the number of vehicles that are available to visit the stops. The tool supports up to 100 vehicles.
The tool may be able to find a solution that uses fewer vehicles than the number you specify here depending on the total number of stops, how many stops per vehicle you allow, how far apart the stops are, the time spent at each stop, and any limit you set on the total route time per vehicle.
This is one of two parameters that balance the overall workload across routes. You can specify a value between 1 and 200.
By lowering the maximum number of stops that can be assigned to each vehicle, the vehicles are more likely to have an equal number of stops assigned to them. This helps balance workloads among drivers. The drawback, however, is that it may result in a solution that is less efficient.
By increasing the stops per vehicle, the tool has more freedom to find more efficient solutions; however, the workload may be unevenly distributed among drivers and vehicles. Note that you can balance workloads by time as well as by number of stops by specifying a value for the Limit the total route time per vehicle parameter.
The following examples demonstrate the effects of limiting the maximum stops per vehicle or the total time per vehicle. In all examples there are six stops and two routes, which start at the same location.
|
Balanced travel times and stops per route: The stops are more or less uniformly spread apart, so setting the maximum stops per vehicle to evenly distribute the workload results in routes that are roughly the same duration. |
|
|
Balanced stops per route but unbalanced travel times: Five of the six stops are clustered near the starting location, but one stop is set apart and requires a much longer drive to be reached. Dividing the stops equally between the two routes causes unbalanced travel times. |
|
|
Unbalanced stops per route but balanced travel times: The stops are in the same location as the previous graphic, but by increasing the maximum stops per route and limiting the total travel time per vehicle, the travel times are balanced. |
Set the expected average service time spent at each stop. For example, if your are planning a workday schedule for inspectors and the average inspection time is 45 minutes, enter 45
.
The service time at all stops is assumed to be the same.
Specify the maximum amount of time a route should last from start to finish. This includes expected travel time and service times spent at stops along the route. If drivers shouldn't work longer than a given time during a day, such as eight hours, you can specify that limit here.
See the help for Maximum number of stops per vehicle for considerations when balancing workloads.
The name of the feature layer that will be created in My Content and added to the map. If the feature layer already exists, you will be asked to provide another name. The feature layer will contain a layer for each of the following: routes, assigned stops, and unassigned stops when some input stops could not be assigned to any routes.
If you select Include route layers, each route from the result is also saved as a route layer. A route layer includes all the information for a particular route such as the stops assigned to the route as well as the travel directions. Creating route layers is useful if you want to share the individual routes with other members in your organization or if you wish to further modify the routes using the Directions button in the map viewer. The route layers use the name provided for the feature layer as a prefix and the route name generated as part of the analysis, is added to create a unique name for each route layer.
Using the Save result in drop-down list, you can specify the name of a folder in My Content where the feature layer and the route layers, if created, will be saved.


|
|
|
Symbol |
{{trade.sym}} |
Value |
{{ trade.btcVal | number:'1.6-6' }} |
Price |
{{ trade.price | number:'1.8-8' }} |
Balance |
{{ trade.balance | number:'1.2-6' }} |
|
|
Close |
|
Remove |
|
{{isCloseTradeAction ? 'Cancel' : 'Delete'}} {{'"' + selectedTrade.sym + '"'}} Trade?
Please confirm if you want to {{isCloseTradeAction ? 'cancel' : 'delete' }} this trade


Developement
- Clone this repository and go in it
- Generate the complete doc
- Run spec tests to ensure all work correctly
Contributing
- Fork it
- Create your feature branch
git checkout -b my-new-feature
- Commit your changes
git commit -am "Add some feature"
- Push to the branch
git push origin my-new-feature
- Create a new Pull Request


Stores entity bodies on the heap using a Hash object.
Determine whether the response body with the specified key (SHA1) exists in the store.
# File lib/rack/cache/entitystore.rb, line 44 def exist?(key) @hash.include?(key) end
Return an object suitable for use as a Rack response body for the specified key.
# File lib/rack/cache/entitystore.rb, line 50 def open(key) (body = @hash[key]) && body.dup end
Remove the body corresponding to key; return nil.
# File lib/rack/cache/entitystore.rb, line 69 def purge(key) @hash.delete(key) nil end
Read all data associated with the given key and return as a single String.
# File lib/rack/cache/entitystore.rb, line 56 def read(key) (body = @hash[key]) && body.join end
Write the Rack response body immediately and return the SHA1 key.
# File lib/rack/cache/entitystore.rb, line 61 def write(body, ttl=nil) buf = [] key, size = slurp(body) { |part| buf << part } @hash[key] = buf [key, size] end
Generated with the Darkfish Rdoc Generator 2.


Mon Feb 6, 2012
It’s Valentine’s Day tomorrow, and what better way to celebrate than to look at the absurdity of love on the internet. The trafficking of human relationships is nothing new on the web, but these websites are the lowest of the low. Let’s take a journey through the seedy underbelly of the digital cherub’s realm…
First, you head over to beautifulpeople.com and submit your picture. Other members will decide whether you are beautiful enough to join the club. You are accepted, meet the one and get married. I quote from the site: “Over 700 couples have been married through unions founded on BeautifulPeople.com. Thousands of people are in committed relationships and many have gone on to start beautiful families.”
Second, have an affair by finding a willing adulterer on Ashley Madison. With over 10 million members, cheating has never been easier. Trish McDermott, a consultant who helped found Match.com, describes Ashley Madison as being a “business built on the back of broken hearts, ruined marriages and damaged families.”
Third, when your marriage falls apart, sign up at wotwentwrong.com.  As your ex may have changed her phone number, the site encourages you to stalk them on Facebook to find their email latest address.
Feeling icky? Take that as a good sign.