# -*- coding: utf-8 -*-
# businessdate
# ------------
# A fast, efficient Python library for generating business dates inherited
# from float for fast date operations. Typical banking business methods
# are provided like business holidays adjustment, day count fractions.
# Beside dates generic business periods offer to create time periods like
# '10Y', '3 Months' or '2b'. Periods can easily added to business dates.
#
# Author: pbrisk<EMAIL_ADDRESS># Copyright: 2016, 2017 Deutsche Postbank AG
# Website: https://github.com/pbrisk/businessdate
# License: APACHE Version 2 License (see LICENSE file)
from datetime import date, timedelta
from math import floor
#: float: basis for diff_in_years method
DAYS_IN_YEAR = 365.25
#: list(int): non-leap year number of days per month
_days_per_month = \
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#: list(int): non-leap year cumulative number of days per month
_cum_month_days = \
[0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
[docs]def is_leap_year(year):
"""
returns True for leap year and False otherwise
:param int year: calendar year
:return bool:
"""
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
[docs]def days_in_year(year):
"""
returns number of days in the given calendar year
:param int year: calendar year
:return int:
"""
return 366 if is_leap_year(year) else 365
[docs]def days_in_month(year, month):
"""
returns number of days for the given year and month
:param int year: calendar year
:param int month: calendar month
:return int:
"""
eom = _days_per_month[month - 1]
if is_leap_year(year) and month == 2:
eom += 1
return eom
[docs]def is_valid_ymd(year, month, day):
"""
return True if (year,month, day) can be represented in Excel-notation
(number of days since 30.12.1899) for calendar days, otherwise False
:param int year: calendar year
:param int month: calendar month
:param int day: calendar day
:return bool:
"""
return (1 <= month <= 12) and \
(1 <= day <= days_in_month(year, month)) and (year >= 1900)
[docs]def from_excel_to_ymd(excel_int):
"""
converts date in Microsoft Excel representation style and returns `(year, month, day)` tuple
:param int excel_int: date as int (days since 1899-12-31)
:return tuple(int, int, int):
"""
int_date = int(floor(excel_int))
int_date -= 1 # count from 31.12.1899 instead of from 30.12.1899
year = (int_date - 1) // 365
rest_days = int_date - 365 * year - (year + 3) // 4 + (year + 99) // 100 - (year + 299) // 400
year += 1900
while rest_days <= 0:
year -= 1
rest_days += days_in_year(year)
month = 1
if is_leap_year(year) and rest_days == 60:
month = 2
day = 29
else:
if is_leap_year(year) and rest_days > 60:
rest_days -= 1
while rest_days > _cum_month_days[month]:
month += 1
day = rest_days - _cum_month_days[month - 1]
return year, month, day
[docs]def from_ymd_to_excel(year, month, day):
"""
converts date as `(year, month, day)` tuple into Microsoft Excel representation style
:param tuple(int, int, int): int tuple `year, month, day`
:return int:
"""
if not is_valid_ymd(year, month, day):
raise ValueError("Invalid date {0}.{1}.{2}".format(year, month, day))
days = _cum_month_days[month - 1] + day
days += 1 if (is_leap_year(year) and month > 2) else 0
years_distance = year - 1900
days += years_distance * 365 + \
(years_distance + 3) // 4 - (years_distance + 99) // 100 + (years_distance + 299) // 400
# count days since 30.12.1899 (excluding 30.12.1899) (workaround for excel bug)
days += 1
return days
[docs]class BaseDateFloat(float):
# --- property methods ---------------------------------------------------
@property
def day(self):
"""
day of date
:return int:
"""
return BaseDateFloat.to_ymd(self)[2]
@property
def month(self):
"""
month of date
:return int:
"""
return BaseDateFloat.to_ymd(self)[1]
@property
def year(self):
"""
year of date
:return int:
"""
return BaseDateFloat.to_ymd(self)[0]
# --- constructor method -------------------------------------------------
@staticmethod
[docs] def from_ymd(year, month, day):
"""
creates date for year, month and day
:param int year:
:param int month:
:param int day:
:return BaseDate:
"""
return BaseDate(from_ymd_to_excel(year, month, day))
# --- cast method --------------------------------------------------------
@staticmethod
[docs] def to_ymd(d):
"""
returns date represented as tuple `year, month, day`
:param BaseDateFloat d:
:return tuple(int, int, int):
"""
return from_excel_to_ymd(d)
# --- calculation methods ------------------------------------------------
@staticmethod
[docs] def add_days(d, days_int):
"""
adds number of days to a date
:param BaseDateFloat d: date to add days to
:param int days_int: number of days to add
:return BaseDate: resulting date
"""
"""
addition of a number of days
:param BusinessDate d:
:param int days_int:
:return bankdate:
"""
return BaseDate(super(BaseDate, d).__add__(days_int))
@staticmethod
[docs] def add_years(d, years_int):
"""
adds number of years to a date
:param BaseDateFloat d: date to add years to
:param int years_int: number of years to add
:return BaseDate: resulting date
"""
"""
addition of a number of years
:param BusinessDate d:
:param int years_int:
:return bankdate:
"""
y, m, d = BaseDate.to_ymd(d)
if not is_leap_year(years_int) and m == 2:
d = min(28, d)
return BaseDate.from_ymd(y + years_int, m, d)
@staticmethod
[docs] def diff_in_days(start, end):
"""
returns distance of two dates as number of days
:param BaseDateFloat start: start date
:param BaseDateFloat end: end date
:return float: difference between end date and start date in days
"""
return super(BaseDateFloat, end).__sub__(start)
@staticmethod
[docs] def diff_in_years(start, end):
"""
calculate difference between given dates in years. The difference corresponds to Act/365.25 year fraction
:param BaseDateFloat start: state date
:param BaseDateFloat end: end date
:return float: difference between end date and start date in years
"""
return BaseDateFloat.diff_in_days(start, end) / DAYS_IN_YEAR
[docs]class BaseDatetimeDate(date):
# --- property methods ---------------------------------------------------
# day
# month
# year
# --- constructor method -------------------------------------------------
@staticmethod
[docs] def from_ymd(year, month, day):
"""
converts date as `(year, month, day)` tuple into Microsoft Excel representation style
:param tuple(int, int, int): int tuple `year, month, day`
:return BaseDatetimeDate:
"""
return BaseDatetimeDate(year, month, day)
# --- cast method --------------------------------------------------------
@staticmethod
[docs] def to_ymd(d):
"""
returns date represented as tuple `year, month, day`
:param BaseDatetimeDate d:
:return tuple(int, int, int):
"""
return d.year, d.month, d.day
# --- calculation methods ------------------------------------------------
@staticmethod
[docs] def add_days(d, days_int):
"""
addition of a number of days
:param BaseDatetimeDate d:
:param int days_int:
:return BaseDatetimeDate:
"""
n = date(d.year, d.month, d.day) + timedelta(days_int)
return BaseDatetimeDate(n.year, n.month, n.day)
@staticmethod
[docs] def add_years(d, years_int):
"""
addition of a number of years
:param BaseDatetimeDate d:
:param int years_int:
:return BaseDatetimeDate:
"""
y, m, d = BaseDatetimeDate.to_ymd(d)
y += years_int
if not is_leap_year(y) and m == 2:
d = min(28, d)
return BaseDatetimeDate.from_ymd(y, m, d)
@staticmethod
[docs] def diff_in_days(start, end):
"""
calculate difference between given dates in days
:param BaseDatetimeDate start: state date
:param BaseDatetimeDate end: end date
:return float: difference between end date and start date in days
"""
diff = date(end.year, end.month, end.day) - date(start.year, start.month, start.day)
return float(diff.days)
@staticmethod
[docs] def diff_in_years(start, end):
"""
calculate difference between given dates in years. The difference corresponds to Act/365.25 year fraction
:param BaseDatetimeDate start: state date
:param BaseDatetimeDate end: end date
:return float: difference between end date and start date in years
"""
return BaseDatetimeDate.diff_in_days(start, end) / DAYS_IN_YEAR
[docs]class BaseDate(BaseDateFloat):
"""
base class for BusinessDate
"""
pass


| PostgreSQL 9.0.10 Documentation | ||||
|---|---|---|---|---|
| Prev | Up | Chapter 9. Functions and Operators | Next |
Aggregate functions compute a single result from a set of input values. The built-in aggregate functions are listed in Table 9-42 and Table 9-43. The special syntax considerations for aggregate functions are explained in Section 4.2.7. Consult Section 2.7 for additional introductory information.
Table 9-42. General-Purpose Aggregate Functions
| Function | Argument Type(s) | Return Type | Description |
|---|---|---|---|
array_agg(expression)
| any | array of the argument type | input values, including nulls, concatenated into an array |
avg(expression)
| smallint, int, bigint, real, double precision, numeric, or interval | numeric for any integer-type argument, double precision for a floating-point argument, otherwise the same as the argument data type | the average (arithmetic mean) of all input values |
bit_and(expression)
| smallint, int, bigint, or bit | same as argument data type | the bitwise AND of all non-null input values, or null if none |
bit_or(expression)
| smallint, int, bigint, or bit | same as argument data type | the bitwise OR of all non-null input values, or null if none |
bool_and(expression)
| bool | bool | true if all input values are true, otherwise false |
bool_or(expression)
| bool | bool | true if at least one input value is true, otherwise false |
count(*) | bigint | number of input rows | |
count(expression) | any | bigint | number of input rows for which the value of expression is not null |
every(expression)
| bool | bool | equivalent to bool_and |
max(expression) | any array, numeric, string, or date/time type | same as argument type | maximum value of expression across all input values |
min(expression) | any array, numeric, string, or date/time type | same as argument type | minimum value of expression across all input values |
string_agg(expression,
delimiter)
| text, text | text | input values concatenated into a string, separated by delimiter |
sum(expression) | smallint, int, bigint, real, double precision, numeric, or interval | bigint for smallint or int arguments, numeric for bigint arguments, double precision for floating-point arguments, otherwise the same as the argument data type | sum of expression across all input values |
xmlagg(expression)
| xml | xml | concatenation of XML values (see also Section <IP_ADDRESS>) |
It should be noted that except for count
,
these functions return a null value when no rows are selected. In
particular, sum
of no rows returns null, not
zero as one might expect, and array_agg
returns null rather than an empty array when there are no input
rows. The coalesce
function can be used to
substitute zero or an empty array for null when necessary.
Note: Boolean aggregates
bool_and
andbool_or
correspond to standard SQL aggregatesevery
andany
orsome
. As forany
andsome
, it seems that there is an ambiguity built into the standard syntax:SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;Here
ANY
can be considered either as introducing a subquery, or as being an aggregate function, if the subquery returns one row with a Boolean value. Thus the standard name cannot be given to these aggregates.
Note: Users accustomed to working with other SQL database management systems might be disappointed by the performance of the
count
aggregate when it is applied to the entire table. A query like:SELECT count(*) FROM sometable;will be executed by PostgreSQL using a sequential scan of the entire table.
The aggregate functions array_agg
,
string_agg
,
and xmlagg
, as well as similar user-defined
aggregate functions, produce meaningfully different result values
depending on the order of the input values. This ordering is
unspecified by default, but can be controlled by writing an
ORDER BY clause within the aggregate call, as shown in
Section 4.2.7.
Alternatively, supplying the input values from a sorted subquery
will usually work. For example:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
But this syntax is not allowed in the SQL standard, and is not portable to other database systems.
Table 9-43 shows aggregate functions typically used in statistical analysis. (These are separated out merely to avoid cluttering the listing of more-commonly-used aggregates.) Where the description mentions N, it means the number of input rows for which all the input expressions are non-null. In all cases, null is returned if the computation is meaningless, for example when N is zero.
Table 9-43. Aggregate Functions for Statistics
| Function | Argument Type | Return Type | Description |
|---|---|---|---|
corr(Y, X)
| double precision | double precision | correlation coefficient |
covar_pop(Y, X)
| double precision | double precision | population covariance |
covar_samp(Y, X)
| double precision | double precision | sample covariance |
regr_avgx(Y, X)
| double precision | double precision | average of the independent variable (sum(X)/N) |
regr_avgy(Y, X)
| double precision | double precision | average of the dependent variable (sum(Y)/N) |
regr_count(Y, X)
| double precision | bigint | number of input rows in which both expressions are nonnull |
regr_intercept(Y, X)
| double precision | double precision | y-intercept of the least-squares-fit linear equation determined by the (X, Y) pairs |
regr_r2(Y, X)
| double precision | double precision | square of the correlation coefficient |
regr_slope(Y, X)
| double precision | double precision | slope of the least-squares-fit linear equation determined by the (X, Y) pairs |
regr_sxx(Y, X)
| double precision | double precision | sum(X^2) - sum(X)^2/N ("sum of squares" of the independent variable) |
regr_sxy(Y, X)
| double precision | double precision | sum(X*Y) - sum(X) * sum(Y)/N ("sum of products" of independent times dependent variable) |
regr_syy(Y, X)
| double precision | double precision | sum(Y^2) - sum(Y)^2/N ("sum of squares" of the dependent variable) |
stddev(expression)
| smallint, int, bigint, real, double precision, or numeric | double precision for floating-point arguments, otherwise numeric | historical alias for stddev_samp |
stddev_pop(expression)
| smallint, int, bigint, real, double precision, or numeric | double precision for floating-point arguments, otherwise numeric | population standard deviation of the input values |
stddev_samp(expression)
| smallint, int, bigint, real, double precision, or numeric | double precision for floating-point arguments, otherwise numeric | sample standard deviation of the input values |
variance (expression)
| smallint, int, bigint, real, double precision, or numeric | double precision for floating-point arguments, otherwise numeric | historical alias for var_samp |
var_pop (expression)
| smallint, int, bigint, real, double precision, or numeric | double precision for floating-point arguments, otherwise numeric | population variance of the input values (square of the population standard deviation) |
var_samp (expression)
| smallint, int, bigint, real, double precision, or numeric | double precision for floating-point arguments, otherwise numeric | sample variance of the input values (square of the sample standard deviation) |


A simple and lightweight tree structure library/API for building applications making use of such structures. Rocket-Path features a simple tree structure where nodes have key-value-children properties. The key and value can be any object, while children is a list of references to other tree nodes. The library also comes with three different approaches for building trees. All-in-all, aim of the library is to provide a simple and easy to learn and easy to use API for working with tree structures. The simplicity is achieved by externalizing both tree state management (nodes are immutable) and algorithms (no visitor-pattern directly required) from tree node values.
Rocket-Path library is oriented towards general tree construction/traversing. The feature-set, therefore, is intentionally small.
Benefits of using this library include the following:
TreePath
simplifies tree traversal by parsing a path string, tracking the current position in
path, and printing traversed/remaining path;TreeNode
is immutable and thread-safe – can be traversed by multiple threads;Before writing any code, few things should be planned first:
Manager
contract with its specific
methods, a file system tree values could implement either a Folder
or File
contract.Answers to these questions provide an input for creating interfaces (semantic contracts) to be used by keys and values of tree nodes. Of course, interfaces are optional and classes may be used instead, if it is more convenient. Please refer to the documentation of the packages for more information regarding how to use the features.
Rocket-Path library should be binary compatible with Java 1.6 or newer runtime. Using annotations for tree construction assumes that a CDI implementation is available in the class-path and configured to be effective.
The code of the Rocket-Path library is open-sourced with the Apache 2.0 license.


Deploy automation on AWS using Gradle
by Gioia Ballin
According to the Gartner MQ 2015 report, Amazon with its Amazon Web Services is currently the market leader provider of IaaS services. Furthermore, it can now boast well known “unicorns” (e.g.: Airbnb, Netflix, Slack, Pinterest) among its clients. Apart from these success stories, relying on Amazon Web Services is also becoming a popular choice for small, innovative, high-tech businesses.
Different AWS tools aim to address the deployment automation problem. Here, I want to focus on AWS CodeDeploy. AWS CodeDeploy lets you to easily deploy applications from S3 buckets (or GitHub repositories) to EC2 instances. It’s a really easy-to-use tool but, it involves the execution of repetitive manual actions.
Let’s say we have a Java application built using Gradle. And, let’s say we want to use AWS CodeDeploy to deploy our application JAR from a S3 bucket to a EC2 instance. In order to accomplish this objective, we have to:
- build the application using Gradle, thus obtaining the JAR file
- move the JAR file into our deployment bucket on S3
- sign-in to the AWS Management Console
- open the AWS CodeDeploy console on the Deployments section
- choose “Create New Deployment”
-
in the “Create New Deployment” section, insert:
- the application name
- the deployment group
- the revision type
- the revision location
- the deployment configuration
- click “Deploy Now”.
Each time we have to deploy our application, we should follow these steps in which either we do mechanical actions (e.g.: moving a file from our local development environment to the S3 deployment bucket) or we insert information known in advance. Think about having the test and staging environments running on EC2 instances. It’s very likely that performing tests in those stages will flush out bugs, thus implying a code review. In turn, any code changes will require new tests, thus entailing the deployment of the code to the test/staging deployment groups again, and again. Therefore, reducing the amount of “boilerplate actions” that should be performed to accomplish the deployment can effectively streamline the overall develop-test-and-deploy process.
Since we’re using Gradle to build our application, can we use it to create tasks that simplify our lives?
The answer is definitely yes. We can code Gradle tasks providing the capability to automatically perform specific kind of actions but, in order to do so, we need a tool for interacting with AWS services through scripts.
Does Amazon provide any tool serving our ends?
Again, the answer is yes. The tool we’re looking for is the AWS Command Line Interface. The AWS CLI is shipped as a python package (so it can be installed via pip) and it provides a complete series of commands devoted to manage, drive and control AWS services.
What’s the main idea, then?
Gradle gives the chance to execute shell scripts, thus it’s possible to write very simple bash scripts that performs the mechanical actions we wouldn’t like to do anymore and having them executed by Gradle.
Note: If we want to automate the deployment process in this way, the AWS CLI installation and configuration into our system is a prerequisite. Please refer to the Amazon guide to have your environment properly set up.
Let’s start! We want to build our distribution and move it to the right S3 bucket.
First of all, we need to write a Gradle task that produces the distribution file. The logic applied to create the distribution may vary from case to case so, I don’t want to go deeper into this implementation. Long short story, let’s say we have a Gradle task named buildDistribution that accomplishes the purpose of making a package of our application with the AWS CodeDeploy scripts bundled inside.
Now, we can write a Gradle task that dependsOn buildDistribution and moves the distribution created by the buildDistribution task to the right S3 bucket.
1
2
3
4
5
6
7
8
9
10
11
12
13
// Creates a new bundle and copies it to S3
task buildAndCopyDistribution(type:Exec, dependsOn: [buildDistribution]) {
// Defines the path into the project of the move.sh script
def move = "automation/move.sh"
// Defines the distribution name based on the jar section
def distName = "${jar.baseName}-${jar.version}.zip"
// Defines the path into the project of the distribution file
def localDist = "$buildDir/distributions/${distName}"
// Moves the distribution file to the right S3 bucket
executable "bash"
args "-c", "sh ${move} ${localDist}"
}
The task definition is pretty straightforward. First of all, the task is defined to be an Exec task, meaning that it’s a task that “executes a command line process” and, of course, it depends on a previous execution of the buildDistribution task. Then, the task defines two important variables:
- the move variable contains the path to the move.sh script. The reference folder for the path is the one in which the build.gradle file is contained. The move.sh script will perform the actual move of the file to the S3 bucket.
- the localDist variable contains the path to the distribution file. Again, the reference folder is the one in which the build.gradle file is contained.
Finally, the task executes the move.sh bash script with the localDist variable as input.
What does the move.sh script actually do?
Let’s see it directly.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
AWS="/usr/local/bin/aws"
APPLICATION_NAME="cn-app"
BUCKET_NAME="coding-nights-releases"
FULL_BUCKET="s3://${BUCKET_NAME}/${APPLICATION_NAME}/"
SOURCE_FILE=$1
echo "Application Name: ${APPLICATION_NAME}"
echo "Full Bucket: ${FULL_BUCKET}"
echo "Source file: ${SOURCE_FILE}"
# Copies the distribution to the right S3 Bucket
$AWS s3 cp ${SOURCE_FILE} ${FULL_BUCKET}
# Checks the result of the copy
if [ $? -eq 0 ]; then
echo "Copy successful!"
else
echo "Copy Failed!"
fi
Basically, the script defines some well known parameters like, the application name and the release bucket name. By merging these two constants, the full S3 bucket path is obtained. It isn’t required to build such S3 path, it essentially depends on the standard you chose to organize and manage your S3 buckets. Furthermore, you can of course decide to define the variable FULL_BUCKET only. Once the script has acquired the bucket location and the location on your environment of the distribution file, it executes the AWS CLI command devoted to move a file to an s3 bucket and, finally, it checks the result and returns.
Summing up, by executing the task buildAndCopyDistribution we package a new distribution for our application and we move it to the right S3 bucket.
Now, how can we automate the deploy of our cn-app to the deployment group cn-app-test (representing our test environment)?
The approach is the same used for automating the transfer of the distribution bundle. So, we need to write a Gradle task that performs the deploy of our bundle to the test environment.
1
2
3
4
5
6
7
8
9
10
11
// Deploys a given revision to the test environment
task deployOnTest(type:Exec) {
// Defines the path into the project of the deploy.sh script
def deploy = "automation/deploy.sh"
// Defines the distribution name based on the jar section
def distName = "${jar.baseName}-${jar.deployVersion}.zip"
// Deploys the given distribution to the test deployment group
executable "bash"
args "-c", "sh ${deploy} test ${distName}"
}
Again, we’re facing with a simple task definition. First, the task is defined to be an Exec task, exactly like the buildAndCopyDistribution task. Then, the task defines two important variables:
- the deploy variable contains the path to the deploy.sh script. The reference folder for the path is the one in which the build.gradle file is contained. The deploy.sh script will perform the deploy of our bundle to the cn-app-test deployment group.
- the distName variable contains the name of the distribution bundle.
Finally, the task executes the deploy.sh bash script by feeding it with the constant string “test”, which identifies the target deployment group, and with the name of the distribution bundle.
You may be wondering why the constant string is needed. Indeed, it isn’t. However, think about having more deployment groups each one representing a stage in the deployment process of the same application. In this case, the deploy.sh script is expected to perform the very same computations for every deployment group but we don’t want to cut and paste the same code changing only a constant string.
Finally, we’ve reached the end. What does the deploy.sh script actually do?
Let’s see it.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
AWS="/usr/local/bin/aws"
APPLICATION_NAME="cn-app"
APPLICATION_ENV=$1
DEPLOYMENT_GROUP="cn-app-${APPLICATION_ENV}"
BUCKET_NAME="coding-nights-releases"
BUNDLE_NAME=$2
echo "Application Name: ${APPLICATION_NAME}"
echo "Application Environment: ${APPLICATION_ENV}"
echo "Deployment Group: ${DEPLOYMENT_GROUP}"
echo "Bucket Name: ${BUCKET_NAME}"
echo "Bundle Name: ${BUNDLE_NAME}"
$AWS s3api head-object --bucket ${BUCKET_NAME} --key "${APPLICATION_NAME}/${BUNDLE_NAME}"
# Checks whether the distribution bundle exists on the expected S3 bucket
if [ $? -eq 0 ]; then
# If the bundle exists...
# Deploys it to the right application/deployment group
$AWS deploy create-deployment \
--application-name ${APPLICATION_NAME} \
--deployment-group-name ${DEPLOYMENT_GROUP} \
--deployment-config-name CodeDeployDefault.OneAtATime \
--s3-location bucket="${BUCKET_NAME}",bundleType="zip",key="${APPLICATION_NAME}/${BUNDLE_NAME}"
else
# Returns an error message
echo "Distribution not found!"
fi
The deploy.sh script allows to automate the deploy of the distribution bundle stored into a S3 bucket. The automation is accomplished following three main steps:
- first, constant and input parameters are defined, collected and combined together in order to get the variables that really matter to the deployment process (the application name, the deployment group, the bucket name and the bundle name).
- then, the existence of the distribution bundle into the expected S3 bucket is checked by executing the head-object AWS CLI command.
- if the distribution bundle already exists, the deploy is accomplished by means of the create-deployment AWS CLI command otherwise, an error message is returned.
You may see that the create-deployment command requires a couple of further information, i.e. the bundle type and the deployment configuration. It’s up to you to decide which kind of bundle you want to distribute and which deployment flow you want to follow, exactly like it’s up to you to decide the naming conventions that should apply to the application name, the bucket name and the object keys.
Is that all?
Yes, it is! We’re done with the deployment automation! Now, in order to deploy our application to the test deployment group, we have to first run the buildAndCopyDistribution task and then run the deployOnTest task.
Last but not the least… Why having two Gradle tasks instead of only one?
You can of course assemble tasks so the the bundle you’re currently building is immediately deployed into your target group. However, sooner or later a bug will get out (yes, it’s sad, I know), and maybe a quick recover is even needed in that case. You cannot benefit of the deployment automation tools if you have only one macro-task which builds, moves and deploys the distribution package. So, at the end, having two tasks provides you with the chance to choose which distribution version should be shipped.
Subscribe via RSS


Preparation time
over 2 hours
Cooking time
1 to 2 hours
Serves
Makes 1 loaf
Dietary
Pronounced Pov-e-Tee-za, this Eastern European sweet bread is traditionally served at Christmas, but makes a delicious tea time treat at any time of the year.
Equipment and preparation: for this recipe you will need a clean, flat single bed sheet and a 1kg/2lb loaf tin.
For the dough, tip the flour and sugar into the bowl of a freestanding mixer fitted with a dough hook. Add the salt into one side of the bowl and the yeast to the other. Add the melted butter, egg, vanilla seeds and warm milk and begin mixing on a slow speed. When the dough starts to come together, mix for a further 5-8 minutes on a medium speed until the dough is soft, smooth and stretchy.
Tip the dough into a lightly oiled mixing bowl, cover with cling film and leave to rise until at least doubled in size – about one hour. Butter a 1kg/2lb loaf tin.
For the filling, place the butter and milk in a small pan and heat gently until the butter has melted. Remove from the heat.
Place the walnuts, vanilla seeds, sugar and cocoa powder into the bowl of a food processor and blend to a sandy powder. Add the egg yolk, milk and butter mixture and pulse to combine. Set aside.
To assemble, spread a clean bed sheet over a kitchen table and dust with flour. Turn the risen dough out onto the sheet and roll out the dough into a large 50x30cm/20x12in rectangle. Brush the surface with 15g/½oz melted butter.
Dust your hands with flour and ease them underneath the dough. Using the backs of your hands, stretch the dough out from the centre until very thin and translucent (you should be able to see the sheet through the dough). The rectangle should measure approximately 1metrex60cm/40x24in.
Taking care not to tear the dough, spread the filling over the dough until evenly covered. If the filling has been standing for a long time and is too thick, add a little warm milk to loosen it.
Starting at the long edge of the dough, lift the sheet and gently roll the dough up tightly, like a Swiss roll.
Carefully lift the dough and place one end in the bottom corner of the greased loaf tin. Ease the roll into the base of the tin to form a long ‘U’ shape, then double back laying the roll over the first ‘U’ shape to form a second ‘U’ shape on top.
Place the loaf tin inside a clean plastic bag and leave to rise for one hour.
Preheat the oven to 180C/160C(fan)/ 350F/Gas 4.
Brush the dough with beaten egg white and bake for 15 minutes. Reduce the oven temperature to 150C/130C(fan)/300F/Gas 3 and bake for a further 45 minutes, or until golden-brown. Cover with foil if the top begins to darken too much.
Remove from the oven and leave to cool in the tin for 30 minutes before turning out onto a wire rack to cool completely.
Mix the icing sugar with a few drops of cold water to make a runny icing and drizzle it over the povitica. Slice and enjoy.


Settings
×
Use random background colours
Colour hue
Colour saturation
Colour lightness
List shuffle time


{$wity_site_name}
{$wity_site_subtitle}
Toggle navigation
Home
starting page
About
the company
Services
our skills
Portfolio
our works
Blog
latest posts
Contact
send us an email
{$notes} {$include}
{if !{$wity_user}} {else} {/if}


Consultant | Deloitte
Following my tenure as a Software Engineer, I pivoted to consulting to cultivate my business acumen and capitalize on my communication skills as it relates to translating technical concepts to individuals from varying backgrounds.
In this role, I have experience with data visualization and analytics to inform project stakeholders on strategic decision making, proactively design products to address anticipated business needs, and improve existing processes and workflows.
In addition, while at Deloitte, I have taken on the role as a Product Manager, where I act as the liaison between technical developers and executive leadership.
My background in Computer Science and previous experience as an Software Engineers provides me with a unique perspective and the ability to provide high value work and delivery.


| Properties' Details |
Alignment
short Alignment;
- Description
- contains the alignment of the formula.
- See also
- HorizontalAlignment
|
|
BaseFontHeight
short BaseFontHeight;
- Description
- contains the base font height in point the formula will be
formatted in.
All properties containing relative values are related to this value.
|
|
CustomFontNameFixed
string CustomFontNameFixed;
- Description
- customized name for fixed font.
|
|
FontFixedIsItalic
boolean FontFixedIsItalic;
- Description
- determines if the customized fixed font is italic.
|
|
FontFixedIsBold
boolean FontFixedIsBold;
- Description
- determines if the customized fixed font is bold.
|
|
CustomFontNameSans
string CustomFontNameSans;
- Description
- customized name for sans serif font
|
|
FontSansIsItalic
boolean FontSansIsItalic;
- Description
- determines if the customized sans serif font is italic.
|
|
FontSansIsBold
boolean FontSansIsBold;
- Description
- determines if the customized sans serif font is bold.
|
|
CustomFontNameSerif
string CustomFontNameSerif;
- Description
- customized name for serif font
|
|
FontSerifIsItalic
boolean FontSerifIsItalic;
- Description
- determines if the customized serif font is italic.
|
|
FontSerifIsBold
boolean FontSerifIsBold;
- Description
- determines if the customized serif font is bold.
|
|
FontNameFunctions
string FontNameFunctions;
- Description
- contains the name of the font that is used to
display functions contained in the formula.
|
|
FontFunctionsIsItalic
boolean FontFunctionsIsItalic;
- Description
- determines if the font that is used to display functions is italic.
|
|
FontFunctionsIsBold
boolean FontFunctionsIsBold;
- Description
- determines if the font that is used to display functions is bold.
|
|
FontNameNumbers
string FontNameNumbers;
- Description
- contains the name of the font that is used to
display numbers contained in the formula.
|
|
FontNumbersIsItalic
boolean FontNumbersIsItalic;
- Description
- determines if the font that is used to display numbers is italic.
|
|
FontNumbersIsBold
boolean FontNumbersIsBold;
- Description
- determines if the font that is used to display numbers is bold.
|
|
FontNameText
string FontNameText;
- Description
- contains the name of the font that is used to
display text contained in the formula.
|
|
FontTextIsItalic
boolean FontTextIsItalic;
- Description
- determines if the font that is used to display text is italic.
|
|
FontTextIsBold
boolean FontTextIsBold;
- Description
- determines if the font that is used to display text is bold.
|
|
FontNameVariables
string FontNameVariables;
- Description
- contains the name of the font that is used to
display variables contained in the formula.
|
|
FontVariablesIsItalic
boolean FontVariablesIsItalic;
- Description
- determines if the font that is used to display variables is italic.
|
|
FontVariablesIsBold
boolean FontVariablesIsBold;
- Description
- determines if the font that is used to display variables is bold.
|
|
Formula
string Formula;
- Description
- contains the command string of the formula
|
|
IsScaleAllBrackets
boolean IsScaleAllBrackets;
- Description
- decides if all brackets (even those without 'left'/'right'
modifier) are scaled.
|
|
IsTextMode
boolean IsTextMode;
- Description
- switches into text mode.
|
|
RelativeFontHeightFunctions
short RelativeFontHeightFunctions;
- Description
- contains the relative height of the font for functions.
The values unit is percent of the
FormulaProperties::BaseFontHeight
|
|
RelativeFontHeightIndices
short RelativeFontHeightIndices;
- Description
- contains the relative height of the font for indices.
The values unit is percent of the
FormulaProperties::BaseFontHeight
|
|
RelativeFontHeightLimits
short RelativeFontHeightLimits;
- Description
- contains the relative height of the font for limits.
The values unit is percent of the
FormulaProperties::BaseFontHeight
|
|
RelativeFontHeightOperators
short RelativeFontHeightOperators;
- Description
- contains the relative height of the font for operators.
The values unit is percent of the
FormulaProperties::BaseFontHeight
|
|
RelativeFontHeightText
short RelativeFontHeightText;
- Description
- contains the relative height of the font for text.
The values unit is percent of the
FormulaProperties::BaseFontHeight
|
|
RelativeBracketDistance
short RelativeBracketDistance;
- Description
- contains the relative distance of brackets.
|
|
RelativeBracketExcessSize
short RelativeBracketExcessSize;
- Description
- contains the relative excess size of brackets.
|
|
RelativeFractionBarExcessLength
short RelativeFractionBarExcessLength;
- Description
- contains the relative excess length of a fraction bar.
|
|
RelativeFractionBarLineWeight
short RelativeFractionBarLineWeight;
- Description
- contains the relative line weight of a fraction bar.
|
|
RelativeFractionDenominatorDepth
short RelativeFractionDenominatorDepth;
- Description
- contains the relative depth of the denominator of a fraction
|
|
RelativeFractionNumeratorHeight
short RelativeFractionNumeratorHeight;
- Description
- contains the relative height of the numerator of a fraction.
|
|
RelativeIndexSubscript
short RelativeIndexSubscript;
- Description
- contains the relative superscript of indices.
|
|
RelativeIndexSuperscript
short RelativeIndexSuperscript;
- Description
- contains the relative subscript of indices.
|
|
RelativeLineSpacing
short RelativeLineSpacing;
- Description
- contains the relative line spacing.
|
|
RelativeLowerLimitDistance
short RelativeLowerLimitDistance;
- Description
- contains the relative distance of lower limits.
|
|
RelativeMatrixColumnSpacing
short RelativeMatrixColumnSpacing;
- Description
- contains the relative column spacing of matrices.
|
|
RelativeMatrixLineSpacing
short RelativeMatrixLineSpacing;
- Description
- contains the relative line spacing of matrices.
|
|
RelativeOperatorExcessSize
short RelativeOperatorExcessSize;
- Description
- contains the relative excess of operators.
|
|
RelativeOperatorSpacing
short RelativeOperatorSpacing;
- Description
- contains the relative spacing of operators.
|
|
RelativeRootSpacing
short RelativeRootSpacing;
- Description
- contains the relative root spacing
|
|
RelativeScaleBracketExcessSize
short RelativeScaleBracketExcessSize;
- Description
- contains the relative scaling of the bracket excess.
|
|
RelativeSpacing
short RelativeSpacing;
- Description
- contains the relative spacing.
|
|
RelativeSymbolMinimumHeight
short RelativeSymbolMinimumHeight;
- Description
- contains the relative minimum height of the formula.
|
|
RelativeSymbolPrimaryHeight
short RelativeSymbolPrimaryHeight;
- Description
- contains the relative primary height of symbols.
|
|
RelativeUpperLimitDistance
short RelativeUpperLimitDistance;
- Description
- contains the relative distance of upper limits
|
|
TopMargin
short TopMargin;
- Description
- contains the metric value of the top margin of the formula.
|
|
BottomMargin
short BottomMargin;
- Description
- contains the metric value of the bottom margin of the formula.
|
|
LeftMargin
short LeftMargin;
- Description
- contains the metric value of the left margin of the formula.
|
|
RightMargin
short RightMargin;
- Description
- contains the metric value of the right margin of the formula.
|
|
BaseLine
short BaseLine;
- Usage Restrictions
- optional
- Description
- contains the baselines offset in respect to the top of the formula rectangle
- Since
- OOo 3.4
|
|
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


Overactive bladder can cause a sudden and strong desire to urinate. Patients usually come for a urologic evaluation if the symptoms begin to affect quality of life. Perhaps you avoid long road trips for fear of overactive bladder symptoms. Do you know where every restroom is at the local grocery store?
Continue Reading...
Bladder CancerBladder cancer is a urological disease that usually affects the cells lining the inside of the bladder. Because its symptoms are easy to identify, the disease is usually diagnosed in its earliest stages. Fortunately, bladder cancer is highly treatable
Continue Reading...
Kidney cancer is cancer with a primary origin in the kidneys. The kidneys, which are responsible for filtering waste from the body, are located on either side of the spine. There are several types of cancers that can affect one or both kidneys, including renal cell carcinoma.
Continue Reading...


My name is Jamie and I am a junior software developer and graduate of the Nashville Software School with a focus on C#/.NET development.
My professional background is in home medical equipment, but my personal interests have always lain with technology. The IBM 486 my dad brought home when I was a kid piqued my curiosity. My mind was blown when Pentium II processors and Voodoo 2 graphics cards hit the market. A high school course on Hardware and Computer Manufacturing further stoked my desire to learn more. I kept this passion as a hobby for the most part, but in 2015 I decided to channel this energy into a more career oriented path. I learned of NSS and the opportunities it presented to one such as myself, and my journey as a developer began. I am a nature enthusiast and video game aficionado and live in Tennessee by way of Arizona.
Game night planner/organizer for folks who have too many games.
You play video games brah? You know how Steam only lets you compare your list of games with one other person? What if your gaming group consisted of 3 or more people? How can you keep track of how many players a particular game supports? This app takes care of all that.
Check it out here!Logistics app to eliminate unnecessary phone calls to your field staff.
Are there too many calls going on between you and your field staff regarding information that you feel you should have at your fingertips? WhereYouAt allows field staff to send information about a particular stop to a database that office staff can then read from and not have to pick up the phone.
Check it out here!If you have a career opportunity or just want to say hello, please feel free to reach out to me through one of the outlets below!


The Saint Louis University School of Medicine will host the 2018 APSA Midwest Regional Meeting in St. Louis, MO on October 20, 2018!
Registration is open to anyone with an interest in medicine, research, and a career as a physician scientist. The conference welcomes all trainees in MD/PhD, DO/PhD, MD, DO, health sciences graduate programs, as well as undergraduate students interested in learning more about medical careers and research.
Registration is open to all interested participants at all institutions regardless of APSA membership. Click HERE to register. Registration for the conference is FREE for all attendees. If you decide to cancel your registration, please email Nicole Clark at least 10 days prior to the conference.
Dress Code: Business Casual
Friday Night Social
All participants are encouraged to submit abstracts for the conference poster sessions. Posters will be automatically entered into a judging competition with cash prizes for winners. Abstract deadline is October 12th. Posters will be arranged into several categories based off judges’ expertise:
- Biochemistry and Molecular Biology
- Pathology
- Molecular Microbiology and Immunology
- Pharmacology and Physiology
- Clinical Research
- Social Sciences and Humanities
Guidelines
Abstracts should have a maximum of 300 words
Abstract submission is in the registration form
Please try to keep your poster around 30'' X 40'' in size
A block of rooms is reserved at the Drury Inn Hotel at Union Station. A subsidy of $25/night is available for the first 50 reservations. To seek a hotel subsidy, please indicate the number of nights in the registration form. Please make your reservations by Sunday, September 30, 2018 to receive your group rate. Reservations made after this date will be subject to prevailing rate and availability. Reservations may also be made by calling 1-800-325-0720 and refer to your group number 2340412.
A light breakfast will be provided on site October 20th, with light morning and afternoon refreshments as well. Lunch will be catered, please indicate in your registration any food allergies, vegetarian, vegan, or gluten needs.
Location and Parking: The event is will be taking place in the Learning Resource Center of SLU School of Medicine (3545 Vista Avenue, St. Louis, MO 63104). Parking can be found in the Hickory East Parking Garage (3424 Hickory Street, St. Louis, MO 63104).


Personal time spent mapping is eligible for Microsoft’s $25/hour match! Visit My Giving Portal to log your volunteer hours.


Hi students! today we will be going over the creation of a program using ruby classes!
Ruby, in all of its greatness, can allow you to create any kind of object you want! In our example today we will be creating a class called "Computer", which will generate instances of that class which can then act to manipulate its own imaginary files.
Firstly, we should create a class called "Computer", and give it an initialize method that takes no parameters. The body of initialize itself, should be empty. It should look something like this:
class Computer
def initialize
end
end
Next, we should be passing our initialize method some parameters and setting up a few instance variables. Here we update our initialize method to take 2 parameters, username and password. In initialize, set the instance variables to @username and @password.In our initialize method we also want to add another instance variable, @files, which is equal to an empty hash. This will act to keep track of our files later on. The code should look like this:
class Computer
def initialize (username, password)
@username = username
@password = password
@files = {}
end
end
Now, let's introduce some class variables into the mix! We will be using @@users to keep track of the users on our computer. Add a new class variable to our computer class called @@users, it should equal an empty hash. Next, in the initialize method, set @@users[username] equal to password, so that our @@users hash keeps usernames as keys with each username's password as the associated value. Your code should look like this:
class Computer
@@users = {}
def initialize (username, password)
@username = username
@password = password
@files = {}
@@users[username] = password
end
end
Now let's add another method, create. Inside our Computer class, define a method called create, with a single parameter, filename. Inside create, declare a variable called time and set it equal to the current time, this is done by using Time.now. Inside create, add a new key:value pair to @files hash. Use the filename key to store the value time. Finally, use puts to return a message telling the user that a new file was created. Your code should look something like this:
class Computer
@@users = {}
def initialize (username, password)
@username = username
@password = password
@files = {}
@@users[username] = password
end
def create (filename)
time = Time.now
@files[filename] = time
puts "#{filename} was created by #{@username} at #{time}"
end
end
Almost done guys! We need to now find a way to get to our @@users class variable! We will need to create a method to reach it. because @@users is a class variable, we can use a class method to get it. Most of the methods used to far have been instance variables, which work on specific instances/objects. A class method belongs to the class itself. Add a new class method to your Computer class called Computer.get_users, taking no parameters. This new method should return the @@users class variable and puts a message!. Your code should look like this:
class Computer
@@users = {}
def initialize (username, password)
@username = username
@password = password
@files = {}
@@users[username] = password
end
def create (filename)
time = Time.now
@files[filename] = time
puts "new file has been created!"
end
def Computer.get_users
@@users
puts "Let's get those users for you!"
end
end
Last part! Were going to create an instance of our Computer class, this will help us test our code! After your class, create a new instance of Computer, store it in a variable called my_computer. You can input any username and password you like for your arguments! You can also ask the Computer to create a new text document! Your code should look something like this:
class Computer
@@users = {}
def initialize (username, password)
@username = username
@password = password
@files = {}
@@users[username] = password
end
def create (filename)
time = Time.now
@files[filename] = time
puts "new file has been created!"
end
def Computer.get_users
@@users
end
end
my_computer = Computer.new("username", "password")
my_computer.create("classproject.txt")
puts "users: #{Computer.get_users}"


A static site for serving vocabularies, organized by year-month date of publication and by organization/repo namespace (ns).
Path format: /YYYY/MM/org/vocab#
Examples: /2021/05/csv-ld/core#, /2021/05/csv-ld/demo#.
Each vocabulary URI resolves to a text/html
response with a <link
rel="alternate" ... />
in its <head>
that provides the vocabulary in an
RDF format, e.g. text/turtle
. This method of linking follows the example of RSS feeds.


VOLUME
Volume
Labelmap
3D Opacity
Window/Level
Threshold
Show/Hide
Labelmap Opacity
CHANNEL
Channel
Channel/Value
MESH
Mesh 1
Show/Hide
Opacity
Scalars
Scalars 1
Scalars Threshold
FIBERS
Fibers 1
Show/Hide
Fiber Length Threshold
Loading data
Processing


A Gantt chart showing the formatted tooltips %{table} option
This goes in the documents header:
<script src="RGraph.common.core.js"></script>
<script src="RGraph.common.dynamic.js"></script>
<script src="RGraph.common.tooltips.js"></script>
<script src="RGraph.gantt.js"></script>
Put this where you want the chart to show up:
<canvas id="cvs" width="675" height="350">
[No canvas support]
</canvas>
This is the code that generates the chart - it should be placed AFTER the canvas tag(s):


! Hi friend !
I have tried to make a chat-box like discord. I have just tried and became success.
Not fully at all. Because I made this with only JS. So it has no server-side script. So it doesn't save any data.
It hase some interesting feature like discord.
1. write something into || this || to hide something.
2. write something into !! this !! to highlight something.
3. write any link.
4. write any image's link.


Trade fair in Delhi from Nov 14: Heavy traffic expected on these city roads
The tickets would be sold online and at metro stations, expect the one in Pragati Maidan
by Press Trust of IndiaDelhi Police has issued a traffic advisory for the 39th India International Trade Fair that will begin this Thursday at Pragati Maidan here, officials said on Tuesday.
As around 25,000 people are expected to visit the fair per day till November 27, traffic congestion is likely at Mathura Road, Bhairon Road, Ring Road, Shershah Road and Purana Quila Road, the advisory said.
People not coming to the trade fair are requested to take alternate routes, it stated.
This year, there would be no entry for visitors from gate numbers 2,3,4,5,6,7,8 and 9. The visitors will be allowed only from gate numbers 1, 10 and 11.
Entry for media persons will be from gate number 1. No entry will be allowed after 5 PM.
The tickets would be sold online and at metro stations, expect the one in Pragati Maidan.
No vehicle of visitors will be allowed parking on Shershah Road, Purana Quila Road and Bhagwan Das Road. Vehicles found parked on the above roads shall be towed away and prosecuted for improper parking and disobedience of lawful instructions, it stated.


Me
Report
About
Moving duck
Fetch Shcools
Draw a flag
Lotto
Draw a flag!
Draw the flag of ivory coast
|
Draw the flag of France
|
Draw the flag of Belgium
|


The background-attachment property in CSS specifies how to move the background relative to the viewport. There are three values: scroll, fixed, and local.

$background-attachment: (); $background-attachment: map-merge( ( "scroll": scroll, "fixed": fixed, "local": local, ), $background-attachment );
The background-blend-mode property defines how an element’s background-image should blend with its background-color.

$background-blend-mode: (); $background-blend-mode: map-merge( ( "initial": initial, "inherit": inherit, "screen": screen, ), $background-blend-mode );
background-clip lets you control how far a background image or color extends beyond an element’s padding or content.
This paragraph is the content.
This paragraph is the content.
This paragraph is the content.

This paragraph is the content.

This paragraph is the content.

This paragraph is the content.

$background-clip: (); $background-clip: map-merge( ( "border-box": border-box, "padding-box": padding-box, "content-box": content-box, "inherit": inherit, ), $background-clip );
The background-color property in CSS applies solid colors as background on an element using the $colors array to choose the color. Here’s an example:

@each $attribute, $name in (background-color: background-color) { @each $key, $value in $colors { .#{$name}-#{$key} { #{$attribute}: $value; } } } $colors: (); $colors: map-merge( ( "primary": #0d6efd, "secondary": #6c757d, "danger": #dc3545, "warning": #ffc107, "succes": #198754, "info": #0dcaf0, "black": #000000, "white": #ffffff, "gray": lightgray, "transparent": transparent, "ccc": #ccc, "f9": #f9f9f9, "f6": #f6f6f6, ), $colors );
The background-image property in CSS applies a graphic (e.g. PNG, SVG, JPG, GIF, WEBP) or gradient to the background of an element.
This is a paragraph inside a div

This is a paragraph inside a div

$background-image: (); $background-image: map-merge( ( "svg": url(""), 1: url("https://41.media.tumblr.com/efd1fba27c3e20/tumblr_mqqy59HMaf1qzattso1_1280.jpg"), "genuineq": url("https://genuineq.com/wp-content/themes/genuineq/images/genuineq-og-image.jpg"), ), $background-image );
The background-origin property defines where to paint the background: across the whole element, inside the border, or inside the padding. There are four values: border-box, padding-box, content-box and inherit. Here’s a demo:

$background-origin: (); $background-origin: map-merge( ( "border-box": border-box, "padding-box": padding-box, "content-box": content-box, "inherit": inherit, ), $background-origin );
The background-position property in CSS allows you to move a background image (or gradient) around within its container.
This background-image is positioned in top right.

 This background-image is positioned in top right.

$background-position: (); $background-position: map-merge( ( "top-right": top right, ), $background-position );
If a background-image property is specified, the background-repeat property in CSS defines if (and how) it will repeat. Here’s an example:

$background-repeat: (); $background-repeat: map-merge( ( "repeat": repeat, "repeat-x": repeat-x, "repeat-y": repeat-y, "no-repeat": no-repeat, "space": space, "round": round, ), $background-repeat );
The background-size property in CSS is one of the most useful — and most complex — of the background properties. There are many variations and different syntaxes you can use for this property, all of which have different use cases. Here’s a basic example:
cover tells the browser to make sure the image always covers the entire container, even if it has to stretch the image or cut a little bit off one of the edges. contain, on the other hand, says to always show the whole image, even if that leaves a little space to the sides or bottom.

$background-size: (); $background-size: map-merge( ( 300: 300px, "contain": contain, "cover": cover, ), $background-size );


POTS patients {border-style px;} symptoms #ffffff;} natal orthostatic gender male POTS. female clinical tachycardia therapy hormone joint pain, transgender testosterone therapy. history postural blood diagnosed pressure px; sex syndrome {font-family exercise font-size hormonal started symptoms. therapy, Boris Postural demonstrated dizziness dizziness, double; females gender-affirming improvement intolerance, medications notable years Transgender associated border-color border-width early fatigue, fludrocortisone hypermobility resting solid; subsequent venous {font-style {font-weight Bernadzikowski Children's Clinical Ehlers–Danlos Gender Health Hospital However, Kanjwal Philadelphia addition age bold cognitive control courier; disorder, em; heart identifying improved included insight medical onset palpitations, preponderance pt;} rate syndrome. use


'I had to move quickly': Blue-green algae poisoning at dog beach sparks warning
by Andrew BrownA regular swim at a dog beach marked safe for swimming nearly ended in the death of a beloved pet after the dog contracted blue-green algae poisoning.
Cook resident John Courtney had taken his one-year-old Jack Russell terrier Sinji to the Dengi Bamir dog beach for a swim on Lake Ginninderra on Thursday morning. When they got home, he noticed his pet was displaying unusual symptoms.
"I noticed he was very sick and that he couldn't stand up, and he would fall over and become limp," Mr Courtney said.
Mr Courtney rushed Sinji to the Belconnen Animal Hospital after the dog started going into seizures, at first thinking he had been bitten by a snake.
Instead, Sinji was quickly diagnosed with the usually fatal blue-green algae poisoning, after swallowing only a small amount of water from Lake Ginninderra during the swim.
Sinji deteriorated so quickly he had to be placed in a medically induced coma.
Mr Courtney said a website showing water quality levels in the ACT and signs at the lake said the site was safe for swimming.
"I was very concerned, I knew I had to move very quickly to save his life," he said. "Sinji absolutely loves the water and he loves playing in it.
"I didn't know how severe an effect the algae could have and I assumed you could see it as a green scum on the surface."
After being monitored overnight, Sinji was brought out of a coma and was able to leave the animal hospital the next day.
Hospital vet Shannon West said it was the first case of blue-green algae poisoning he had seen for 18 months, which he said was normally fatal.
"He was fairly lucky under the circumstances," Dr West said.
"We get a case like this every couple of years. The last case we saw 18 months ago, the dog died within the hour."
There are no tests to diagnose blue-green algae poisoning and Dr West said a small amount could kill an animal in a short amount of time.
"The signs typically present very quickly, normally in an hour," Dr West said.
"It starts with tremors and seizures and then it can lead to the dogs salivating and urinating uncontrollably."
While signs at the dog beach marked the area safe for swimming, Dr West said recent dust storm around the capital could have led to an increase of algae in the lake.
Algae in the lake can also develop more quickly after heavy rain.
He said said Thursday's incident was a warning for pet owners to be vigilant over the summer months when more dogs used designated beaches.
"Even when the lake is tested to be OK, there still can be some risks," Dr West said.
Mr Courtney said Sinji was on the road to a full recovery and on a course of antibiotics.
"We're keeping the exercise down to one short walk a day," he said.
"Sinji's still got plenty of bounce in him."


Legends of Tomorrow's Season 5 Picks Up in the Wake of Crisis
by Colin HicksonWith DC's Legends of Tomorrow's Season 5 premiere airing after a special episode that ties into the upcoming "Crisis on Infinite Earths" crossover, fans might be wondering when exactly the season takes place. However, according to "Crisis" showrunner Marc Guggenheim, the premiere, as well as the following six episodes of the season, all take place before the event.
On Twitter, a fan asked Guggenheim about whether the first seven episodes take place before or after "Crisis," to which he replied, "Before. It will be very clear."
Click the button below to start this article in quick view.
Guggenheim didn't delve any further into what would happen in those episodes, though given what the Season 4 finale of Legends had set up, the team may have been too busy to prepare for the event.
Season 5 of DC's Legends of Tomorrow will also see the departure of series star Brandon Routh, who plays the Ray Palmer incarnation of the Atom and who has been a part of the cast since the series premiere. However, with the Ryan Choi Atom set to debut in "Crisis," it's possible he could fill the void Routh leaves behind.
Returning Jan. 21, 2020, DC’s Legends of Tomorrow stars Caity Lotz, Dominic Purcell, Brandon Routh, Nick Zano, Maisie Richardson-Sellers, Tala Ashe, Matt Ryan, Jes Macallan and Courtney Ford.
https://schema.orgBreadcrumbListListItem1Homehttps://www.cbr.com/ListItem2TVhttps://www.cbr.com/category/tv/ListItem3TV Newshttps://www.cbr.com/category/tv/news-tv/ListItem4Legends of Tomorrow's Season 5 Picks Up in the Wake of Crisishttps://www.cbr.com/legends-of-tomorrow-season-5-crisis-on-infinite-earths/


{% include shared/header.html %} {% include home/banner.html %} {% include home/sections.html %} {% include shared/footer.html %}


PING-PONG
About Ping Pong
Created By:
Leo Igane
GitHub User Name:
BenkiKuu
Indipendent Project Week:
Week 3
Enter Your Number Here
LETS PLAY!
Rules
Ping Pong will count up to your number, with the following exceptions:
Numbers divisible by 3 become ping
Numbers divisible by 5 become Pong
Numbers divisible by 3 and 5 become PingPong


--- layout: article title: All Anagrams share: #set to false to hide the social media links at the bottom of articles comments: #set to true to enable commenting on an article ads: #set to true to show ads on the post/page published: true date: 2015-12-25 #YYYY-MM-DD published date of article modified: #YYYY-MM-DD overides published date in blog and used as metadata for search engines image: teaser: scrabble_teaser.png #this appears on the archive grid feature: scrabble-tiles-feature.png #this appears when viewing the article credit: #name of the person or site you wish to credit creditlink: #url to the person's site or licensing categories: javascript tags: ---
Use recursion to produce all possible anagrams of a string and return them as an array.
string
(required) - a string of characters
For a string
with n
characters there will be n!
unique
permutations that form anagrams. If a character is repeated r
times
in string
then some of the permutations will repeat the same
anagram. The number of uniques anagrams is then reduced by the factor
r!
.
Stirling's formula states that for large n
, n!
is approximately
n^n
, so reducing the time and space complexity, if possible, is
definitely of interest. If we know there are characters in string
that repeat, then we want to avoid computing r!
times as many
redundant anagrams.
For instance, if string
is all characters of the alphabet,
'abcdefghijklmnopqrstuvwxyz'
then there are 4.03E26
different anagrams to form; however, if
string
is a
repeated 25 times,
'aaaaaaaaaaaaaaaaaaaaaaaaaa'
then there is only one anagram: string
itself.
var allAnagrams = function (string, collection, anagram, character) { 'use strict'; //initial collection = collection || []; anagram = anagram || ''; character = character || string.split(''); var i, upper, lower; //base case <<baseCase>> //recursion <<recursion>> return collection; };
The function forms an anagram by selecting one of the characters from the string and adding it to an empty string literal. It then recursively calls itself to select another character from the remaining string to concatenate to the anagram.
for (i=0; i < character.length; i++) { upper = character.slice(i+1); lower = character.slice(0,i); if (upper.indexOf(character[i]) === -1) { collection = allAnagrams(string, collection, anagram + character[i], lower.concat(upper)); } }
An anagram is completed and pushed to an array named collection
when there are no longer any characters remaining in the string.
if (character.length === 0) { collection.push(anagram); return collection; }
Backtracking is used to avoid forming redundant anagrams. If the function selects a character to concatentate to a partial anagram, and that same character is present in the remaining string, then the function skips that character and selects a new character from the remaining string.


Looks great on any screen size!
Freshly redesigned for latest trends
Millions of users start with us
I mustache you a question...
We have developed a Ecommerce website that can be checked on our github profile
An app where you can analyze your texts as your requirements.
Developed a website for fitness club.
A fully responsive website is developed


It's interesting how an experience can be funny, terrifying, and profoundly enlightening all at once. When I smoked salvia divinorum, I'd had a lot of experience with marijuana and a good bit of experience with mushrooms as well, so although I was informed that salvia was going to be unlike anything I had ever experienced, I really didn't think it would be too intense--after all, how can something legal be more intense than mushrooms? I was very, very wrong. My worldview has been permanantly and irreversably altered by my experience with salvia divinorum.
I went outside with my sitter, who was much more experience than I was. The setting was perfect: it was about 70 degrees, mid spring, the sun was setting beautifully, the area was familiar to us both, and there was no one around. My sitter guaged how much salvia would be good for a solid, intense trip and then packed my pipe for me. I was sitting outside and he was sitting next to me while I inhaled. I took a really long, deep, hard toke the first time I hit it. By the time I exhaled it, I was already seeing vivid fractal patterns in the smoke. I took another hit and, again, before even exhaling, my visual hallucinations got more and more intense and I was seeing flashing snowflakelike patterns above me. My sitter asked if I needed another hit and I don't remember responding, but he said my answer was, 'No, the universe is already twisting.'
I stretched out on my back and suddenly lost all sense of time, space, language, and identity. My experience completely transcended anything that could be put into words. My sitter said that I was speaking very coherently about my trip, but I felt like the words coming out of my mouth were mere sounds, and that those sounds were creating individual universes every time a new syllable escaped my lips.
I looked around--I'm not sure when my eyes were open and when they weren't--and had the sense that I was a Creator or Goddess-figure and that it was my duty to create these new worlds with my voice and actions. I began making gestures and noises, each one of them unfolding an infinite number of realities. I felt a sudden sense of panic at the realization of my own power, and recognized that there were hundreds of other 'me's each making different gestures, creating different universes. I told the Godlike entity whose presence I sensed that I wasn't ready to be a Goddess, and the Being told me that I always had been one. I said, in my mind, that I didn't want to be aware of that.
My mind started vaguely recalling the world I had come from. I looked at my sitter and was struggling to remember who he was or what he was, but I had a feeling that he was the god of the world I had come from and could take me back. I walked over to him and managed to say, 'This. Is. Really. Intense. I want to go home now.'
He told me that my trip would only last a few more minutes, but hearing 'a few more minutes' made me feel like I was trapped in that state of mind forever, because I was unable to comprehend the concept of measuring time. By that point, the sun was mostly down and I could see the stars dancing and dividing into fractal patterns.
I then had a physical and emotional feeling of being born. I suddenly felt wet, cold, and alone, and my impulse was to reach out for my mother (who, of course, wasn't there). I told my sitter that I felt scared and alone and he held me for a few minutes until the most intense part of the trip had passed.
When the trip was starting to wear off, I looked up at the sky and could see the big dipper. I announced to my sitter that I thought it was funny that when I picked out which universe to land in, I chose one with a big spoon in the sky... It was hilarious at the time, and I ended up laughing until I had mostly sobered up.
Although I think the trip only lasted about fifteen minutes altogether, the after-effects stayed with me nearly all night. I slept very fitfully and awoke at one point with a startling realization of my own mortality. I started hugging my cat (who sleeps next to me at night) and thinking about how everyone I knew was going to die one day, including myself. Although I had thought about it before, it was the first time I remember ever feeling such pain and remorse about the concept of death itself. I started crying so hard that I vomited.
Overall, I would describe my experience as extremely unpleasant, although it was also powerful and enlightening.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


{{ extends 'global/Page.html' }} {{ block title }}Lottery rules check{{ endblock }} {{ block content }}
We will now ask you a question to check that you have understood the instructions of this first game. Please answer it and then click on ‘Next’ below. If your answer is correct, when clicking ‘Next’ you will proceed to the actual decisions; otherwise, you will need to review your answer and try again. Your answer to this question will not affect your final earnings.
| Lottery A | Lottery B |
🔴 🔴 🔴 ⚪ ⚪ 🔴 = {{ C.PAYOFF_RED_A }}, ⚪ = {{ C.PAYOFF_WHITE_A }} points |
🔴 🔴 🔴 ⚪ ⚪ 🔴 = {{ C.PAYOFF_RED_B }}, ⚪ = {{ C.PAYOFF_WHITE_B }} points |
|---|
The above decision has been extracted for execution by the computer. In this decision you had chosen Lottery A. The computer extracts a white ball.
{{ formfield 'lottery_understanding' label=lottery_understanding_label }}Once you have checked your answer please click ‘Next’.
{{ next_button }} {{ endblock }}


So you want to set up Jupyter Notebooks and Run Python in the Cloud, then actually get the Data?
This is a comprehensive set of steps. In part 1, we get an account set up and reserve a Virtual Machine using Google's Compute Engine. In Part 2, we install and run a python3 Jupyter Notebook. In Part 3, we set up a Google Cloud Storage bucket to simplify the process of transferring files to and from the VM.
First, a quick disclaimer - I'm not an expert on Ubuntu, and can't claim to know how to do this all more securely than not handing out a password. For the time being, its best not to share any of your specifics here with anyone.
Second, this write-up assumes you have basic familiarity with command line navigation. If not, here is a quick primer:
Move into a subfolder from current path: cd./[folder name]
Move up a folder level: cd ../
Home directory: ~
Create a subfolder in the current working directory: mkdir [folder name]
Create a text file in the current directory: touch [filename].txt
List contents of current directory (subfolders and files): ls
Display full path of current working directory: pwd
Finally, note that with this SSH instance, any time you highlight anything it will be automatically copied. Be careful about pasting stuff in without first de-selecting what's in the window.
Step 1: The Setup
Step 1a: Create a project
Search Google Cloud Compute Engine, which should take you to a page with a console link
In the upper left, there should be an option to start a new project. If you’ve used anything with an API in the past, you can see it there as well.
Create a new project and write down the name that google assigns it (You can see it from the projects drop down later if you forget)
If you haven’t already, you will need to attach a payment account, however Google gives you $300 over 365 days for free.
 If you select static instead of Ephermeral storage (below), it will charge you a little more but all your data will stay saved when you close the VM down. CPUs are more expensive by orders of magnitude (while they're actually running), so this is more effective in the long run.
Step 1b: Creating a VM
View this video if you can. The setup is only for python2.7 on an older Ubuntu build, but I've noted the differences below to get python3 up instead. It is otherwise a fantastic walkthrough.
Here is a summary of the salient points:
- Select a region - video used us-west 1, zone 1b, but I used us-east1-b and it was fine
- Select machine type - I used 8 vCPUs, but this can be changed later
- Boot disk -
- Video used Ubuntu 16.04 LTS xenial, I used 18.04 cosmic (I recommend the later for python3 compatability)
- At the bottom of this page, you can select more than 10 GB persistent if you think it will be necessary, but this could incur additional charges.
- Firewall
- Check allow HTTP and HTTPS traffic
- click show more, then Disks, then uncheck “delete boot disk when instance is deleted”
- Continue - this may take a moment
- Once it is created, copy down the External IP on the instance (something like ###.###.###.###)
- Important! When you are done with the session, check the instance and click Stop
- You’re static storage will be saved, so no worries there
At this point the VM is established, but we need some additional configuration
- Click on the horizontal bars in the upper left
- VPC Network -> VPC Network -> External IP addresses
- On the instance, change Type Ephemeral to Static, and record the name (I used blogexample)
- From the left bar, Firewall rules, then from the top create firewall rule
- Give it a name, and record: (e.g. myfirewallrule)
- Change Targets to from Specified Target Tags to All instances in the network
- Source IP Ranges: <IP_ADDRESS>/0
- Under Specified Protocols and Ports check "TCP" and give it a number (I used 5000. If you're following along with the video, he first uses 1000 which is reserved and will not work)
From the horizontal bars, head back to Compute Engine - VM Instance
Step 2 Configuring the VM
Step 2A: Installing python3, pip3, and jupyter notebooks
Skip to the summary below for a list of these steps
If you are following along with the video, installing python3 instead of python2 is the main point of divergence here
To save some space, anywhere if it asks you to continue, enter 'y'. Anytime you are given two options, enter [1]
- From the VM instance screen, click SSH
- Record user name and instance, for example username@instance-1. This will be needed for copying files
- In order:
- sudo apt-get update
- sudo apt-get --assume-yes upgrade (keep local version)
- sudo apt-get --assume-yes install software-properties-common
- sudo apt-get install python-setuptools python-dev build-essential
- From the newer Ubuntu: sudo apt install python3-pip
- For the example in the video: sudo easy_install pip
- From my example: sudo pip3 install jupyter
- From older (video example): sudo pip install jupyter
- jupyter notebook --generate-config
- sudo nano ~/.jupyter/jupyter_notebook_config.py
- Press down arrow to navigate just under # Configuration file
- Immediately under # Configuration file for jupyter-notebook, paste in the following block (press down arrow to navigate):
c = get_config()
c.NotebookApp.ip= '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 5000
- Exit back: Press Ctrl + o (letter o), then Enter. Then, Press Ctrl + x
- Enter: jupyter notebook password, then type your password. The cursor will not move, however copy+paste works fine
Step 2B: Running Jupyter Notebook
These steps are stand alone from above, and are all that you need to do to run Jupyter notebooks. Once set up, this can be done from any point in the command line.
The first couple steps deal with setting up subfolders to work in, which I like to do to avoid writing things in root.
You don't have to, but the rest of the cloud steps assume you have these subfolders set up.
Note that in the browser window, Jupyter will launch from whatever directory you're in when you type the open command.
From the SSH connection, do the following
- To set up project paths:
- from command line: mkdir projects
- cd ./projects
- Launch Jupyter notebook:
- jupyter notebook --ip=<IP_ADDRESS> --port=5000 (whatever port you put)
- Go to IP:port (e.g. 123.456.789:5000) in a new browser tab
- Enter password and run Jupyter
- Intalling packages
- pip3 install can be run directly using the second window if you have tmux open
- Or, from Jupyter notebook you can use !sudo pip3 install pandas (or whatever) and it will work fine
- Note: There is a difference. With my installation (aka python3), you will need to use pip3, which otherwise works the same
- Closing Jupyter
- Quit as normal
- From command line, Ctrl + C, then y
- Close everything by typing exit
At this point, you are all set up, but of course you want to actually use data from somewhere.
Note: When setting up a new notebook, you may need to use !pip3 install instead of !pip install
Step 3: Setting Up Cloud Storage as an intermediary
Now the good stuff. By 'logging in' to Google's Cloud utility (gsutil), we can access files in Cloud storage buckets.
This makes it much easier to get files onto your VM. Naturally, you'll want to pull them back down when you're finished.
Step 3a: Set up a Google Cloud Storage Bucket
- From The Google Cloud Platform console, click the horizontal bars and go to Storage, then Browser (Make sure you are still in the same project you used to create the VM)
- Create bucket and record the name. In this example, I use sample-blog-bucket
- Record Name, and use Regional configuration
- Add some data and a directory
- Upload files by clicking button or dragging
- For this example, I’m creating a subfolder called data
- Clicking on data, I’m uploading a sample file called description_wordvec.csv
Step 3B: Allowing Communication within project VM and Storage by Establishing API Key
This is the crucial step!
- From the main menu, go to IAM & admin -> Service Accounts
- From actions on the right, select Crete key, and use the default JSON
- Save this file somewhere secure!
- You will not need the file in this configuration
Step 3C: Telling your VM how to find it
- Back to Compute Engine VM Instances
- SSH to your instance
- Type: gcloud init
- Choice: 1
- Project ID: use project ID from above (e.g. blogexample)
- Press enter one more time
- Secure login to account by typing and entering: gcloud auth login
- Do you want to continue: y
- Copy full html string and login with active account, allow
- Copy generated string back into SSH window (make sure you don’t still have the HTTP copied in the window at this point or the command line app will automatically copy it)
Step 3D: Moving Data Between Cloud Storage and VM
Once logged in with gcloud auth login from above step, type "gsutil cp [filepath from] [filepath to]" in the SSH command line to copy and paste files. Essentially, your bucket it at a location called "gs://".
- Copy from bucket (to a folder with the VM path ~/projects/):
- General string looks like this: gsutil cp gs://[bucket-name][filepath] [VM path to copy to]
- Single file from bucket to projects folder: gsutil cp gs://sample-blog-bucket/data/description_wordvec.csv ~/projects/
- Careful with the spaces
- Whole directory: gsutil cp -r gs://sample-blog-bucket/data ~/projects/
- Copy to bucket
- You can create a file as normal from Jupyter, but for this example I’m creating a folder under projects called dl_files, and adding two files (test1.txt and test2.txt) for the example
- General String looks like this: gsutil cp [file] gs://[bucket-name][filepath]
- Single file: gsutil cp ~/projects/dl_files/test1.txt gs://sample-blog-bucket/data/
- Whole directory: gsutil cp -r ~/projects/dl_files/* gs://sample-blog-bucket/data/
- Contents of directory only: gsutil cp -r ~/projects/dl_files gs://sample-blog-bucket/data/
Some more commands are here
Step 3E: Copying Data from bucket
Right click on a file name, then save link as to download
:)
On Pickles...
This seems like a good place, so I'll include it here. Often, the biggest memory hog for data science is a trained model that we want to store.
Using the above steps, we can also easily store a model trained on a VM back down to our local drive for export to Kaggle kernels and the like.
Assuming you have used sklearn to train a model called "my_model",
First: import pickle
Save the model: pickle.dump(model, open('ultimate_model.sav', 'wb'))
Open it back up later: my_model = pickle.load(open('ultimate_model.sav', 'rb'))
As usual, your filename will include the directory path where you would like it to be located.
Summary
Configuring VM code
Copy and paste your specifics here to help follow along:
[firewall]
<IP_ADDRESS>/0
[port number]
external IP: [IP number]
user_name@instance-1
sudo apt-get update
sudo apt-get --assume-yes upgrade
sudo apt-get --assume-yes install software-properties-common
sudo apt-get install python-setuptools python-dev build-essential
[y]
sudo apt install python3-pip
sudo pip3 install jupyter
jupyter notebook --generate-config
sudo nano ~/.jupyter/jupyter_notebook_config.py
c = get_config()
c.NotebookApp.ip= '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 5000
jupyter notebook password
ctrl+o [enter]
ctrl+x
password:
jupyter notebook --ip=<IP_ADDRESS> --port=5000
Per Session
What you actually need to do to run Jupyter once set up:
- Click ssh, run jupyter notebook --ip=<IP_ADDRESS> --port=[your port number]
- In a browser window, go to [VM IP Address]:[Port Number], enter your password
- If desired, copy files to and from the cloud bucket with gsutil
- If desired, install new Python3 packages using !pip3 install from inside a Jupyter Notebook
What you don't need to do:
- Run config files
- Re-authorize your VM using gcloud auth login
- Re-load files from cloud bucket that have already been stored
Please let me know if you see any issues with this setup.


Daniele Erbì
Front-End Engineer
Featured Work
The projects I developed during my Nanodegree @
Udacity
Online Resume
Arcade Game Clone
Website Optimization
Neighborhood Map
Health Tracker
Feed Reader Testing


Search
Clarke Materia Medica
Type the word you want to search.
Remedy
Clinical
Settings
Booleans
#
NAME
VALUE
{{index}}
{{key}}
{{value}}
Integers
#
NAME
VALUE
{{index}}
{{key}}
{{value}}
Strings
#
NAME
VALUE
{{index}}
{{key}}
{{value}}


{% if group.goal_achieved == 1 %}
Your group achieved {{ group.total_coordination }} coordinations.
Congratulations, you reached the goal!
{% else %}
Your group achieved {{ group.total_coordination }} coordinations.
Unfortunately, you did not reach the goal.
{% endif %}
1. Visual (last decision):
The color shows the action chosen in the last round by each player
2. Summary of results:
Goal achieved:
{% if group.goal_achieved == 1 %}
Yes
{% else %}
No
{% endif %}
Total coordinations in group: {{ group.total_coordination }}
Coordinations by action:
Total points in group:
{{ group.group_total_points }}
Your total points:
{{ player.total_points }}
3. Your earnings
{% if group.goal_achieved == 1 %}
Your group earned: {{ Constants.total_group_pay | c }}


You can include more than one subquery in a QGraph query. Because subqueries are always annotated, you must ensure that queries containing subqueries obey QGraph’s annotation rules. For example, because QGraph prohibits edges connecting two annotated elements, you cannot connect two subqueries by a single edge.
In the query shown in Figure 6.20, two subqueries are connected by the Z edge. Because the Z edge connects two annotated elements, this query is illegal.
It may be easier to see whether your query obeys all annotation
rules by visualizing any subqueries
as vertices. Figure 6.21 shows such a view
of the above query:
Visually collapsing the subqueries into single vertices helps to
illustrate how the Z edge connects two
annotated query elements.
Compare the query in Figure 6.20 to the one shown below.
This query adds another vertex (vertex E)
between the two subqueries. Visualizing the subqueries as vertices
yields the structure shown in
Figure 6.23.
This view helps us see that this structure obeys QGraph’s
requirements for annotations, and is thus a legal query.
Although not yet supported by Proximity, QGraph also lets you nest subqueries inside other subqueries. This further increases QGraph’s expressive power and lets you match more complex structures than would be possible with a single level of subquery. The query shown in Figure 6.24 shows a query that includes a nested subquery.
Nested subqueries must obey the same annotation requirements
that apply to any query element. In the above query, both the
top-level subquery and nested subquery are annotated, as are the
X and Y
incident
edges.
This query extends the pattern we saw in the query shown in Figure 6.1, which returned 2d-star subgraphs—clusters of linked objects two hops away from a central object. In this case, using nested subqueries lets us find and return 3d-star subgraphs. Deeper nesting offers the opportunity to match even more complex structures.
We can continue our technique of visualizing subqueries as vertices to help us understand more complex queries. Visualizing the nested subquery in Figure 6.24 as a single vertex gives us the structure shown below.
By treating a complex structure (the nested subquery) as a vertex inside the top-level subquery, we can more clearly see how the structure of this query resembles the 2d-star query we saw in Figure 6.1.


The following form controls classes are supported:
.label
.input
.textarea
.select
.checkbox
.radio
.button
.help
When combining several controls in a form, use the .control
class as a container,
to keep the spacing consistent.
The following form controls classes are supported:
.label
.input
.textarea
.select
.checkbox
.radio
.button
.help
When combining several controls in a form, use the .control
class as a container,
to keep the spacing consistent.
If you want to attach controls together, use the has-addons
modifier on the control
container:
You can attach inputs, buttons, and dropdowns only.
Use the is-expanded
modifier on the element you want to fill up the remaing space (in this case, the
input):
Use the has-addons-centered
or the has-addons-right
modifers to alter the alignment.
If you want to group controls together, use the is-grouped
modifier on the control
container:
Add the is-expanded
modifier on the control element you want to fill up the remaining space.
If you want a horizontal form control, use the is-horizontal
modifier on the control
container, in which you include:
control-label
for the side label
control
for the input/select/textarea container
You can of course use is-grouped
or has-addons
for the child elements.


Method List
#/
(class Pathname)
#owl_equivalent_class
(class RdfsPlusRulebook)
#owl_equivalent_property
(class RdfsPlusRulebook)
#owl_functional_property
(class RdfsPlusRulebook)
#owl_inverse_functional_property
(class RdfsPlusRulebook)
#owl_inverse_of
(class RdfsPlusRulebook)
#owl_same_as
(class RdfsPlusRulebook)
#owl_symmetric_property
(class RdfsPlusRulebook)
#owl_transitive_property
(class RdfsPlusRulebook)
#rdfs_plus_rules
(class RdfsPlusRulebook)
#rules
(class RdfsPlusRulebook)
#rdfs_domain
(class RdfsRulebook)
#rdfs_range
(class RdfsRulebook)
#rdfs_rules
(class RdfsRulebook)
#rdfs_sub_class_of
(class RdfsRulebook)
#rdfs_sub_property_of
(class RdfsRulebook)
#rules
(class RdfsRulebook)
#==
(class RDF::Statement)
#initialize
(class RDF::Statement)


Man is arrested after scrawling 'Epstein didn't kill himself' in red lipstick on empty wall where $120,000 duct-taped banana exhibit was displayed at Miami's Art Basel
by Jack Newman For Mailonline- Roderick Webber, 46, from Massachusetts, wrote the message in red lipstick
- He was escorted away by police but complained that the banana eater was not
- Performance artist David Datuna ate Maurizio Cattelan's banana artwork
A man has been arrested after scrawling a message about Jeffrey Epstein on awall at Miami's Art Basel - in the same spot where a $120,000 duct-taped banana exhibit was displayed.
Roderick Webber, 46, from Massachusetts, was swiftly taken away by police after writing in red lipstick: 'Epstien (sic) didn't kill himself.'
The 46-year-old wrote the message on a wall at the gallery where a banana had previously been displayed been on display.
The work of art, by Italian artist Maurizio Cattelan and titled 'Comedian', sold to a French collector for $120,000. But it was later taken down due to 'several uncontrollable crowd movements' and after a man walked up to the taped piece of fruit banana and ate it.
Webber's message alluded to the conspiracy theories surrounding the death of the billionaire pedophile Jeffrey Epstein who committed suicide in his New York jail cell in August.
Many believe his death may have been arranged by others implicated in a global pedophile ring who would have been outed if Epstein went to trial.
The phrase 'Epstein didn't kill himself' went viral after his death, although Webber failed to spell the name of the disgraced financier correctly.
Curators later covered up the message with a piece of white cardboard, according to The Miami Herald.
Webber shouted as he was escorted out of the Miami Beach convention center: 'If someone can eat the $120,000 banana and not get arrested, why can't I write on the wall?
'This is the gallery where anyone can do art, right?'
On Saturday, David Datuna, who describes himself as a Georgian-born American artist living in New York, walked up to a banana that had been duct-taped to the gallery wall and ate it.
The banana was, in fact, a work of art by Italian artist Maurizio Cattelan titled 'Comedian' and sold to a French collector for $120,000.
'Art performance ... hungry artist,' Datuna said, as he peeled the fruit and took a bite. 'Thank you, very good.'
A few bystanders could be heard giggling before a flustered gallery official whisked him to an adjoining space for questioning.
'He did not destroy the art work. The banana is the idea,' Lucien Terras, director of museum relations for Galerie Perrotin, told the Miami Herald.
As it turns out, the value of the work is in the certificate of authenticity, the newspaper said. The banana is meant to be replaced.
A replacement banana was taped to the wall about 15 minutes after Datuna's stunt but was then taken down due to 'several uncontrollable crowd movements'.
Art Basel is an international art fair selling the works of established and emerging artists.
It also made headlines on Friday when Madonna's daughter Lourdes 'Lola' Leon stripped down to just a nude thong and pasties to simulate an orgy.
The half-Cuban 23-year-old wound up in a pile of around 30 others for the Love Different 2020 performance at The Temple House in Miami Beach.


|
fop 1.1 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.fop.afp.AFPResourceManager
public class AFPResourceManager
Manages the creation and storage of document resources
| Constructor Summary | |
|---|---|
AFPResourceManager()
Main constructor |
| Method Summary | |
|---|---|
DataStream |
createDataStream(AFPPaintingState paintingState,
java.io.OutputStream outputStream)
Sets the outputstream |
void |
createIncludedResource(java.lang.String resourceName,
ResourceAccessor accessor,
byte resourceObjectType)
Creates an included resource object by loading the contained object from a file. |
void |
createIncludedResource(java.lang.String resourceName,
java.net.URI uri,
ResourceAccessor accessor,
byte resourceObjectType)
Creates an included resource object by loading the contained object from a file. |
void |
createIncludedResourceFromExternal(java.lang.String resourceName,
java.net.URI uri,
ResourceAccessor accessor)
Creates an included resource extracting the named resource from an external source. |
void |
createObject(AFPDataObjectInfo dataObjectInfo)
Creates a new data object in the AFP datastream |
void |
embedFont(AFPFont afpFont,
CharacterSet charSet)
Handles font embedding. |
DataStream |
getDataStream()
Returns the AFP DataStream |
AFPResourceLevelDefaults |
getResourceLevelDefaults()
Returns the resource level defaults in use with this resource manager. |
void |
setDefaultResourceGroupFilePath(java.lang.String filePath)
Sets the default resource group file path |
void |
setResourceLevelDefaults(AFPResourceLevelDefaults defaults)
Sets resource level defaults. |
boolean |
tryIncludeObject(AFPDataObjectInfo dataObjectInfo)
Tries to create an include of a data object that has been previously added to the AFP data stream. |
void |
writeToStream()
Tells the streamer to write |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public AFPResourceManager()
| Method Detail |
|---|
public DataStream createDataStream(AFPPaintingState paintingState, java.io.OutputStream outputStream) throws java.io.IOException
paintingState
- the AFP painting stateoutputStream
- the outputstream
java.io.IOException
- thrown if an I/O exception of some sort has occurredpublic DataStream getDataStream()
public void writeToStream() throws java.io.IOException
java.io.IOException
- thrown if an I/O exception of some sort has occurred.public void setDefaultResourceGroupFilePath(java.lang.String filePath)
filePath
- the default resource group file pathpublic boolean tryIncludeObject(AFPDataObjectInfo dataObjectInfo) throws java.io.IOException
dataObjectInfo
- the data object info
java.io.IOException
- thrown if an I/O exception of some sort has occurred.public void createObject(AFPDataObjectInfo dataObjectInfo) throws java.io.IOException
dataObjectInfo
- the data object info
java.io.IOException
- thrown if an I/O exception of some sort has occurred.public void embedFont(AFPFont afpFont, CharacterSet charSet) throws java.io.IOException
afpFont
- the AFP font to be checked for embeddingcharSet
- the associated character set
java.io.IOException
- if there's a problem while embedding the external resourcespublic void createIncludedResource(java.lang.String resourceName, ResourceAccessor accessor, byte resourceObjectType) throws java.io.IOException
resourceName
- the name of the resourceaccessor
- resource accessor to access the resource withresourceObjectType
- the resource object type (ResourceObject
.*)
java.io.IOException
- if an I/O error occurs while loading the resourcepublic void createIncludedResource(java.lang.String resourceName, java.net.URI uri, ResourceAccessor accessor, byte resourceObjectType) throws java.io.IOException
resourceName
- the name of the resourceuri
- the URI for the resourceaccessor
- resource accessor to access the resource withresourceObjectType
- the resource object type (ResourceObject
.*)
java.io.IOException
- if an I/O error occurs while loading the resourcepublic void createIncludedResourceFromExternal(java.lang.String resourceName, java.net.URI uri, ResourceAccessor accessor) throws java.io.IOException
resourceName
- the name of the resourceuri
- the URI for the resourceaccessor
- resource accessor to access the resource with
java.io.IOException
- if an I/O error occurs while loading the resourcepublic void setResourceLevelDefaults(AFPResourceLevelDefaults defaults)
defaults
- the new defaultspublic AFPResourceLevelDefaults getResourceLevelDefaults()
|
fop 1.1 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Last name:
are you new to our site?
I have visited before.
This is my first time.
Where did you hear about us?
Please Choose One
from a tv show
on the internet
it was a guess
other
Please include your comments:
Yes, please send me literature.