Akshay Kumar Shares His Views On Pay Disparity, Watch
At the trailer launch, Karan Johar was asked about pay disparity and how his production house handles it.
by Pooja DaradeThe trailer of Good Newwz starring Akshay Kumar, Kareena Kapoor Khan, Kiara Advani and Diljit Dosanjh was launched in Mumbai today. The star cast along with Producer of the film, Karan Johar was also present for the event.
At the trailer launch, Karan Johar was asked about pay disparity and how his production house handles it. Pay disparity has been a serious issue in Bollywood as it differences in the pay of an actor and actresses has been going on since the inception of the film industry in India.
At the launch, KJo said, “We at Dharma Productions have always maintained the ethos of actually making sure that everyone, and I include men and women, artists and technicians and everyone are paid solidly for their craft, art their ability and worth.”
When Akshay Kumar was asked his views on pay disparity, he answered, “I’m doing other films with a lot of other corporates, so they finalise everything. I agree with what Karan said. He is absolutely right. That’s the way it should be, in future also it will be in the same way.”
Watch the video below:
Recently, Bhumi Pednekar revealed in an interview with Pinkvilla that for one of her films, she was paid 5 per cent of what her male co-star was given. Earlier, even Deepika Padukone shared that she said no to a film because of a vast difference in the fees that was offered to her compared to the male star.


Keira Knightley A tale of. Quantity 1 Available; See details
Sep 13, 2012 So Orlando Bloom's back? Ah, interesting No Keira Knightley? Would you be keen to see Bloom who skipped, with Knightley, the last Pirates movie rejoin Johnny Depp and Geoffrey Rush in Pirates of the Caribbean
Starring: Johnny Depp, Geoffrey Rush, Orlando Bloom, Keira Knightley, Stellan Starsgård, Bill Nighy, Chow Yun-Fat, Tom Hollander, Jack Davenport, Jonathan disney, johnny depp, keira knightley, orlando bloom, pirates of the caribbean. Pirates of the Caribbean #2; Yo-Ho! ( Multi-page thread 1 2 3 4 5. Last Page) Cast: Johnny Depp, Orlando Bloom, Keira Knightley, Jack Davenport, Bill Nighy, Stellan Skarsgard, Kevin McNally, Naomie Harris, Jonathan Pryce, Tom
She was diagnosed with dyslexia at the. age of six, but now Keira Knightley co- stars, Orlando Bloom ("he's like a one-man. boy band"), and Johnny Depp ("I
Jul 27, 2011 Commentators: Gore Verbinski (director), Johnny Depp (Captain Keira Knightley was 17 when filming Curse of the Black Pearl Early in the film, Orlando Bloom kept trying to. play his character cooler than he actually is Jun 2, 2013 Tags: bill nighy, gore verbinski, johnny depp, Keira Knightley, orlando bloom, Pirates of the Caribbean: Dead Man's Chest, review, stellan Oct 18, 2008 Orlando Bloom, Johnny Depp, and. Keira Knightly are fantastic The word that Johnny Depp might not be in the fourth really sucks, I really hope The franchise features Johnny Depp, Orlando Bloom and Keira Knightley The new film begins filming in 2014 As of now, the release date is set for July 10,
Johnny Depp photo Johnny Johnny Depp Movies Johnny
Starring : Johnny Depp, Orlando Bloom, Keira Knightley, Stellan Skarsgård, Bill Nighy, Chow Yun-fat, Geoffrey Rush, Jack Davenport, Kevin R McNally, Nov 17, 2009 Johnny Depp has become Hollywood's current highest-earning actor. high- profile Pirates co-stars, Keira Knightley and Orlando Bloom, are Johnny Depp, Orlando Bloom and Keira Knightley reunite in Walt Disney Pictures ', in association with Jerry Bruckheimer Films, PIRATES OF THE CARIBBEAN: After teaming up to rescue Captain Jack Sparrow (Johnny Depp) from a deadly sea. monster, Elizabeth (Keira Knightley), Will (Orlando Bloom) and Captain Your online source for Keira Knightley. movies, biography and filmography. Opposite Johnny Depp's truly eccentric portrayal of pirate Jack Sparrow, Knightley. and now Will Turner (Orlando Bloom) and Elizabeth. Swann (Keira Knightley)


What are Treasury, Departments and Parliament busy with?
- National Treasury issues budget guidelines to departments requesting budget submissions, including their 3-year expenditure estimates, in accordance with the adopted budget strategy and planned budget process.
- Departments engage with analysts on departmental budgets and the drafting of budget submissions. (May & June)
- Parliament and provincial legislatures review the provincial appropriation bill and each department's budget, including the department's Annual Performance Plan (APP) and Strategic Plan (SP).
How can I participate?
- Review the departments' Annual Annual Performance Plans (APPs) and Strategic Plans (SPs).
- Engage national departments and relevant Parliamentary committees on the content of the APPs and SPs and whether national departmental budgets have been properly prioritised.
- Engage provincial departments and relevant provincial legislature committees on the content of the APPs and SPs and whether national departmental budgets have been properly prioritised.


You can programmatically read and write the state of each task.
In this example we read the completed tasks to display a task overview.
Debugging the walk-through tasks
You can easily debug the state of the walk-through tasks with Chrome.
Just right mouse click > Inspect > Application > Local Storage then you should see the key bdcWalkthrough.
To make your life easier we would like to show you a short tutorial.
The walk-through is now paused.
You can always get back to the guide just where you left by clicking the help icon above.
Take a look at the Task overview to the bottom right corner of the page.
Click the button to complete Task 1
Now Task 1 is marked checked.
Try closing the Task overview container to pause the walk-through.
Afterwards, click the button to complete Task 2
Try refreshing the page to see the walk-through state is preserved.
Click the button to complete Task 3
Click the button to complete Task 4
flag
Finished!
Hurray,
You've successfully finished the tutorial.


PPCCEDUPES AS A PEPPESFNTATICN FOP MATA IN A COMPUTER PPCGPAIM FCR UNDEPSTATIPE IC MATUPAL LANGUAGE
hy
Terry \iInograd
P.A., The Colorado College (1966)
SUPPITTTER ¢(N PAPTIAL FULFILLMENT CF THE PEQUEPEMFNTS FCP THF PFOPEE OF POCTOPR NF PHILOSCPHY
at the MASSACHUSETTS IMNSTITUTF OF TFCHNOLOGY
August, 12790
Signature of Author. . wun . soe ee Department of Mat feratic Tugust 2h, 1979
Certified by .. , woe we ee ee Thests Supervisor
Accepted hy * * e a 78 e « ° e . * ‘ . ' . a . a « ° Chairman, Denartmental Corrittee on Craduate Students
MASS. INST. Fece SEP 29 1279
Ven saies


This is the screening demographic information form. Please fill this out according to the data that was available to you when you first suspected the patient had AKI.
{% elif repo.name == 'clinical_data' %}
This is the clinical data form where you should fill out questions regarding the clinical information available to you on AKI confirmation day.
{% elif repo.name == 'diagnostic_treatment' %}
This is the diagnosis and treatment form where you should fill out questions regarding the diagnosis and treatment information that was available to you on AKI confirmation day.
{% elif repo.name == 'outcomes' %}
This is the outcomes form where you should fill out questions regarding the outcome of the patient with the information available to you 7 days after AKI confirmation day. If the patient is no longer under your care 7 days after AKI confirmation, please fill the questions out to the best of your knowledge with the information that was available to you on you last observation


Show Time
Show Timezones
Show Meridians
Show Spinners
The ux-date-time-picker
component can be used to select a date/time or timezone. It can be displayed as
a standalone component or within
a popover.
The following options can be used to configure the appearance and behavior of the component.
The selected date to be displayed in the component.
Will set the selected timezone.
Defines the list of available timezones. The DateTimePickerTimezone interface specifies that
each timezone should be an object with a name property that represents the timezone, eg.
GMT+2
,
and an offset property that represents the number of minutes relative to GMT the timezone is.
Defines whether or not the date picker should be visible.
Defines whether or not the time picker should be visible.
Defines whether or not the time picker should allow the user to choose a timezone.
Defines whether or not the time picker should allow the user to specify seconds.
Defines whether or not the time picker should show an AM/PM button, or time should be represented in 24hr format
instead.
Defines whether or not the time picker should allow the user to select the time using spinners.
If defined will override the weekday names displayed.
Defines the labels to show in the meridian (AM/PM) selector.
Defines the names of the months.
Defines the short names of each month.
Defines the text to be displayed in the button used to set the selected time to the current time.
Defines the day of the week that should appear in the first column. WeekDay
is an enumeration
available in @angular/common
.
Defines the earliest date that can be selected.
Defines the latest date that can be selected.
Emits an event when the date is changed using the component.
If not defined the picker will try to use the user's timezone. If that is not available, it will revert to GMT.
To provide default settings for all date pickers within you application, import
DateTimePickerModule.forRoot()
in your app.module.ts
.
You can then inject the DateTimePickerConfig
and configure the default presentation and localization
settings for every date picker
within your application.
Defines whether or not the date picker should be visible.
Defines whether or not the time picker should be visible.
Defines whether or not the time picker should allow the user to choose a timezone.
Defines whether or not the time picker should allow the user to specify seconds.
Defines whether or not the time picker should show an AM/PM button, or time should be represented in 24hr format
instead.
Defines whether or not the time picker should allow the user to select the time using spinners.
If defined will override the weekday names displayed.
Defines the text to be displayed in the button used to set the selected time to the current time.
Defines the timezones that can be selected.
Defines the labels to show in the meridian (AM/PM) selector.
Defines the names of the months.
Defines the short names of each month.
Defines the aria label of the now button.
The following code can be used to create the example above:


{{ script | safe }}
Sometimes parents want to consider the popularity of a given name when deciding on one for their child. An uncommon name may be more preferred or perhaps one that appears more frequently.
This project scans all U.S. baby names from the year 1880 to 2014 (according to social security registration) to identify names with the least, most and somewhere-in-between popularity.
Use the controls below to filter names based on time, gender, and popularity.


Chocolate Pizza
Posted On 15 Dec 2013 / Desserts
For the fig-swirl: Melt butter over medium heat in a saucepan. Add brown sugar and stir to dissolve. Halve all of the figs and toss in the saucepan with water and lemon juice. Cook over meduim heat, stirring frequently, until you have a chunky-jammy mixture. Add salt with one or two stirs, set aside and let cool completely.
Ice cream: In a small pot overf meduim heat, combine milk and granulated sugar until sugar is completely dissolved and the milk is just barely lukewarm. Whisk in the egg yolks. Set mixture in the fridge and wait until the fig mixture is cooled.
Using the ice cream machine, pour liquids into the frozen basin and process according to manufacturer instructions, i.e., let spin and thicken for 20 minutes before adding mascarpone, fig jam mixture, and the nuts. Continue to process for +/- 10 minutes. Pour semi-frozen mixture insta-icona pyrex dish or glass tupperware. Freeze for at least two hours before serving.
- 1 1/2 cups milk
- 1/2 cup mascarpone
- 1/2 tsp pink salt
- 1/2 cup brown sugar
- 2-4 tbsp water
- 1 1/2 cups heavy cream
1/3 granulated sugar2 egg yolks- 1 lemon, juiced
- 2 tbsp butter
- 1 cup honey roasted pecans, roughly
chopped


The power to create
No.8 Newlayout street, Jebbu Bassa LGA, Jos Plateau state
+2347067206984
<EMAIL_ADDRESS>Connect with us:


this package contains classes which transform the internal variant graph datastructure into various output formats. Like an alignment table in JSON or HTML format, or a graph in SVG format or in GraphML format, or a critical apparatus in TEI/XML format.


--- title: I Have No Talent layout: post ---
The other day someone sent me an IM and thanked me for my open source contributions. They then said something about wishing they had my gem/code creation talents. I didn’t miss a beat and informed them that I have no talent.
Wow, this is just perfect. I feel exactly the same way. Couldn't have written it any better.


Wagner helps NZ bowl England out for 353
Neil Wagner broke an important 52-run partnership between Jos Buttler and Jack Leach as New Zealand wrapped up England's innings shortly after lunch on the second day of the first test at Bay Oval on Friday.
Leach was left 18 not out with the tourists bowled out for 353. Wagner bowled Stuart Broad for one after he had Buttler caught for 43 at deep point by Mitchell Santner in his previous over.
Santner had actually been off the field signing autographs shortly before Wagner began his run up and was perhaps unsighted by the wicketkeeper-batsman, who was dropped by Jeet Raval in the previous over.
Buttler's partnership with Leach thwarted New Zealand's push to bowl them out before lunch after Tim Southee sparked a mini-collapse with three quick wickets and a sharp catch in the slips.
Southee was on a hat-trick as England slumped from 277-4 to 286-7 and then 295-8 before Buttler and Leach combined to frustrate New Zealand's bowlers, who had toiled on the first day in Mt. Maunganui.
Ben Stokes top scored with 91 before his dismissal sparked the collapse. Southee finished with 4-88 and could have had a five-wicket haul had Raval not dropped Buttler.


Username
Password
Verify Password
Gender
select ...
Male
Female
Other
Email
Interest
sports
movie
game
Note
I agree to the service agreement.
Submit
reset


Modified to just use Pointer Events (and PEP).
Click and drag using mouse, stylus or touchscreen to rotate the images.
Adapted from CodePen: 3D jQuery rotator – see the article 3D rotator using jQuery


Preparation time
overnight
Cooking time
over 2 hours
Serves
Serves 4
Place the lamb shanks into a large ovenproof casserole dish and add the thyme and black peppercorns. Season, to taste, with salt. Pour the red wine over the lamb shanks and set aside to marinate for at least one hour, preferably overnight in the fridge.
Preheat the oven to 190C/375F/Gas 5. Place the casserole dish onto the hob over a medium heat and bring to the boil. Cover with a lid and transfer to the preheated oven. Cook for one hour, then remove the lid and cook for a further hour, or until the sauce has reduced and thickened.
Remove the casserole dish from the oven and transfer the lamb shanks to a roasting tin. Spoon four ladlefuls of the sauce over the lamb shanks and add the red onion quarters.
Drizzle the honey over the lamb shanks. Return the dish, uncovered, to the oven and roast for 25-30 minutes, basting occasionally with the cooking liquid, until the meat comes away from the bone easily and the volume of cooking liquid has reduced by half.
In a pan, mix the mashed potatoes with the lentils and warm through.
To serve, divide the mashed potatoes and lentils equally among four serving plates. Place the lamb shanks and the red onions alongside. Drizzle over the red wine sauce and garnish with a sprig of thyme.


Your borser do not support html5!
Teris!
next:
score:0
speed:1
Game help:space to pause. up to rotate.
left right and down to move!Have fun XDD.


Removes all custom host entries from this computer's hosts file.
Reset-HostsFile [[-Path] <String>] [-WhatIf] [-Confirm] [<CommonParameters>]
Sometimes you want to start over. This method removes all hosts entries from your hosts file after the default localhost entry.
By default, the current computer's hosts file is reset. You can operate on a custom hosts file by passing its path to the Path
argument.
| Name | Type | Description | Required? | Pipeline Input | Default Value |
|---|---|---|---|---|---|
| Path | String | The path to the hosts file to modify. Defaults to the local computer's hosts file. |
false | false | (Get-PathToHostsFile) |
| WhatIf | SwitchParameter | false | false | ||
| Confirm | SwitchParameter | false | false | ||
| CommonParameters | This cmdlet supports common parameters. For more information type Get-Help about_CommonParameters . |
Reset-HostsFile
If your hosts file contains something like this:
<IP_ADDRESS> localhost
<IP_ADDRESS> myserver
<IP_ADDRESS> myserver2
After calling Reset-HostsFile
, your hosts will contain:
<IP_ADDRESS> localhost
Reset-HostsFile -Path my\custom\hosts
Resets the hosts file at my\custom\hosts
.


Manually by applying an annotation to your pod
-
You have to configure the pod disruption budget before using one of the methods to roll your pods.
For Kafka to stay operational, topics must also be replicated for high availability. This requires topic configuration that specifies a replication factor of at least 3 and a minimum number of in-sync replicas to 1 less than the replication factor.
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaTopic
metadata:
name: my-topic
labels:
strimzi.io/cluster: my-cluster
spec:
partitions: 1
replicas: 3
config:
# ...
min.insync.replicas: 2
# ...
In a highly available environment, the Cluster Operator maintains a minimum number of in-sync replicas for topics during the upgrade process so that there is no downtime.
10.3.1. Rolling pods using the Strimzi Drain Cleaner
You can use the Strimzi Drain Cleaner tool to evict nodes during an upgrade. The Strimzi Drain Cleaner annotates pods with a rolling update pod annotation. This informs the Cluster Operator to perform a rolling update of an evicted pod.
A pod disruption budget allows only a specified number of pods to be unavailable at a given time. During planned maintenance of Kafka broker pods, a pod disruption budget ensures Kafka continues to run in a highly available environment.
You specify a pod disruption budget using a template
customization for a Kafka component.
By default, pod disruption budgets allow only a single pod to be unavailable at a given time.
To do this, you set maxUnavailable
to 0
(zero).
Reducing the maximum pod disruption budget to zero prevents voluntary disruptions, so pods must be evicted manually.
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
namespace: myproject
spec:
kafka:
# ...
template:
podDisruptionBudget:
maxUnavailable: 0
# ...
10.3.2. Rolling pods manually while keeping topics available
During an upgrade, you can trigger a manual rolling update of pods through the Cluster Operator.
Using Pod
resources, rolling updates restart the pods of resources with new pods.
As with using the Strimzi Drain Cleaner, you’ll need to set the maxUnavailable
value to zero for the pod disruption budget.
You need to watch the pods that need to be drained. You then add a pod annotation to make the update.
Here, the annotation updates a Kafka broker.
kubectl annotate pod <cluster_name>-kafka-<index> strimzi.io/manual-rolling-update=true
You replace <cluster_name> with the name of the cluster.
Kafka broker pods are named <cluster-name>-kafka-<index>, where <index> starts at zero and ends at the total number of replicas minus one.
For example, my-cluster-kafka-0
.
10.4. Upgrading the Cluster Operator
Use the same method to upgrade the Cluster Operator as the initial method of deployment.
- Using installation files
-
If you deployed the Cluster Operator using the installation YAML files, perform your upgrade by modifying the Operator installation files, as described in Upgrading the Cluster Operator.
- Using the OperatorHub.io
-
If you deployed Strimzi from OperatorHub.io, use the Operator Lifecycle Manager (OLM) to change the update channel for the Strimzi operators to a new Strimzi version.
Updating the channel starts one of the following types of upgrade, depending on your chosen upgrade strategy:
-
An automatic upgrade is initiated
-
A manual upgrade that requires approval before installation begins
NoteIf you subscribe to the stable channel, you can get automatic updates without changing channels. However, enabling automatic updates is not recommended because of the potential for missing any pre-installation upgrade steps. Use automatic upgrades only on version-specific channels. For more information on using OperatorHub.io to upgrade Operators, see the Operator Lifecycle Manager documentation.
-
- Using a Helm chart
-
If you deployed the Cluster Operator using a Helm chart, use
helm upgrade
.The
helm upgrade
command does not upgrade the Custom Resource Definitions for Helm. Install the new CRDs manually after upgrading the Cluster Operator. You can access the CRDs from the GitHub releases page or find them in thecrd
subdirectory inside the Helm Chart.
10.4.1. Upgrading the Cluster Operator returns Kafka version error
If you upgrade the Cluster Operator and get an unsupported Kafka version error, your Kafka cluster deployment has an older Kafka version that is not supported by the new operator version. This error applies to all installation methods.
If this error occurs, upgrade Kafka to a supported Kafka version.
Change the spec.kafka.version
in the Kafka
resource to the supported version.
You can use kubectl
to check for error messages like this in the status
of the Kafka
resource.
kubectl get kafka <kafka_cluster_name> -n <namespace> -o jsonpath='{.status.conditions}'
Replace <kafka_cluster_name>
with the name of your Kafka cluster and <namespace>
with the Kubernetes namespace where the pod is running.
10.4.2. Upgrading the Cluster Operator using installation files
This procedure describes how to upgrade a Cluster Operator deployment to use Strimzi 0.31.1.
Follow this procedure if you deployed the Cluster Operator using the installation YAML files.
The availability of Kafka clusters managed by the Cluster Operator is not affected by the upgrade operation.
|
Note
|
Refer to the documentation supporting a specific version of Strimzi for information on how to upgrade to that version. |
-
An existing Cluster Operator deployment is available.
-
You have downloaded the release artifacts for Strimzi 0.31.1.
-
Take note of any configuration changes made to the existing Cluster Operator resources (in the
/install/cluster-operator
directory). Any changes will be overwritten by the new version of the Cluster Operator. -
Update your custom resources to reflect the supported configuration options available for Strimzi version 0.31.1.
-
Update the Cluster Operator.
-
Modify the installation files for the new Cluster Operator version according to the namespace the Cluster Operator is running in.
On Linux, use:
sed -i 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
On MacOS, use:
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
-
If you modified one or more environment variables in your existing Cluster Operator
Deployment
, edit theinstall/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
file to use those environment variables.
-
-
When you have an updated configuration, deploy it along with the rest of the installation resources:
kubectl replace -f install/cluster-operator
Wait for the rolling updates to complete.
-
If the new Operator version no longer supports the Kafka version you are upgrading from, the Cluster Operator returns an error message to say the version is not supported. Otherwise, no error message is returned.
-
If the error message is returned, upgrade to a Kafka version that is supported by the new Cluster Operator version:
-
Edit the
Kafka
custom resource. -
Change the
spec.kafka.version
property to a supported Kafka version.
-
-
If the error message is not returned, go to the next step. You will upgrade the Kafka version later.
-
-
Get the image for the Kafka pod to ensure the upgrade was successful:
kubectl get pods my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'
The image tag shows the new Operator version. For example:
quay.io/strimzi/kafka:0.31.1-kafka-3.2.3
Your Cluster Operator was upgraded to version 0.31.1 but the version of Kafka running in the cluster it manages is unchanged.
Following the Cluster Operator upgrade, you must perform a Kafka upgrade.
10.5. Upgrading Kafka
After you have upgraded your Cluster Operator to 0.31.1, the next step is to upgrade all Kafka brokers to the latest supported version of Kafka.
Kafka upgrades are performed by the Cluster Operator through rolling updates of the Kafka brokers.
The Cluster Operator initiates rolling updates based on the Kafka cluster configuration.
If Kafka.spec.kafka.config contains… |
The Cluster Operator initiates… |
|---|---|
Both the |
A single rolling update. After the update, the |
Either the |
Two rolling updates. |
No configuration for the |
Two rolling updates. |
|
Important
|
From Kafka 3.0.0, when the inter.broker.protocol.version is set to 3.0 or higher, the log.message.format.version option is ignored and doesn’t need to be set.
The log.message.format.version property for brokers and the message.format.version property for topics are deprecated and will be removed in a future release of Kafka.
|
As part of the Kafka upgrade, the Cluster Operator initiates rolling updates for ZooKeeper.
-
A single rolling update occurs even if the ZooKeeper version is unchanged.
-
Additional rolling updates occur if the new version of Kafka requires a new ZooKeeper version.
10.5.1. Kafka versions
Kafka’s log message format version and inter-broker protocol version specify, respectively, the log format version appended to messages and the version of the Kafka protocol used in a cluster. To ensure the correct versions are used, the upgrade process involves making configuration changes to existing Kafka brokers and code changes to client applications (consumers and producers).
The following table shows the differences between Kafka versions:
| Kafka version | Inter-broker protocol version | Log message format version | ZooKeeper version |
|---|---|---|---|
3.1.0 |
3.1 |
3.1 |
3.6.3 |
3.1.1 |
3.1 |
3.1 |
3.6.3 |
3.1.2 |
3.1 |
3.1 |
3.6.3 |
3.2.0 |
3.2 |
3.2 |
3.6.3 |
3.2.1 |
3.2 |
3.2 |
3.6.3 |
3.2.3 |
3.2 |
3.2 |
3.6.3 |
In Kafka, the network protocol used for inter-broker communication is called the inter-broker protocol. Each version of Kafka has a compatible version of the inter-broker protocol. The minor version of the protocol typically increases to match the minor version of Kafka, as shown in the preceding table.
The inter-broker protocol version is set cluster wide in the Kafka
resource.
To change it, you edit the inter.broker.protocol.version
property in Kafka.spec.kafka.config
.
When a producer sends a message to a Kafka broker, the message is encoded using a specific format. The format can change between Kafka releases, so messages specify which version of the message format they were encoded with.
The properties used to set a specific message format version are as follows:
-
message.format.version
property for topics -
log.message.format.version
property for Kafka brokers
From Kafka 3.0.0, the message format version values are assumed to match the inter.broker.protocol.version
and don’t need to be set.
The values reflect the Kafka version used.
When upgrading to Kafka 3.0.0 or higher, you can remove these settings when you update the inter.broker.protocol.version
.
Otherwise, set the message format version based on the Kafka version you are upgrading to.
The default value of message.format.version
for a topic is defined by the log.message.format.version
that is set on the Kafka broker.
You can manually set the message.format.version
of a topic by modifying its topic configuration.
10.5.2. Strategies for upgrading clients
The right approach to upgrading your client applications (including Kafka Connect connectors) depends on your particular circumstances.
Consuming applications need to receive messages in a message format that they understand. You can ensure that this is the case in one of two ways:
-
By upgrading all the consumers for a topic before upgrading any of the producers.
-
By having the brokers down-convert messages to an older format.
Using broker down-conversion puts extra load on the brokers, so it is not ideal to rely on down-conversion for all topics for a prolonged period of time. For brokers to perform optimally they should not be down converting messages at all.
Broker down-conversion is configured in two ways:
-
The topic-level
message.format.version
configures it for a single topic. -
The broker-level
log.message.format.version
is the default for topics that do not have the topic-levelmessage.format.version
configured.
Messages published to a topic in a new-version format will be visible to consumers, because brokers perform down-conversion when they receive messages from producers, not when they are sent to consumers.
Common strategies you can use to upgrade your clients are described as follows. Other strategies for upgrading client applications are also possible.
|
Important
|
The steps outlined in each strategy change slightly when upgrading to Kafka 3.0.0 or later.
From Kafka 3.0.0, the message format version values are assumed to match the inter.broker.protocol.version and don’t need to be set.
|
-
Upgrade all the consuming applications.
-
Change the broker-level
log.message.format.version
to the new version. -
Upgrade all the producing applications.
This strategy is straightforward, and avoids any broker down-conversion. However, it assumes that all consumers in your organization can be upgraded in a coordinated way, and it does not work for applications that are both consumers and producers. There is also a risk that, if there is a problem with the upgraded clients, new-format messages might get added to the message log so that you cannot revert to the previous consumer version.
For each topic:
-
Upgrade all the consuming applications.
-
Change the topic-level
message.format.version
to the new version. -
Upgrade all the producing applications.
This strategy avoids any broker down-conversion, and means you can proceed on a topic-by-topic basis. It does not work for applications that are both consumers and producers of the same topic. Again, it has the risk that, if there is a problem with the upgraded clients, new-format messages might get added to the message log.
For each topic:
-
Change the topic-level
message.format.version
to the old version (or rely on the topic defaulting to the broker-levellog.message.format.version
). -
Upgrade all the consuming and producing applications.
-
Verify that the upgraded applications function correctly.
-
Change the topic-level
message.format.version
to the new version.
This strategy requires broker down-conversion, but the load on the brokers is minimized because it is only required for a single topic (or small group of topics) at a time. It also works for applications that are both consumers and producers of the same topic. This approach ensures that the upgraded producers and consumers are working correctly before you commit to using the new message format version.
The main drawback of this approach is that it can be complicated to manage in a cluster with many topics and applications.
|
Note
|
It is also possible to apply multiple strategies. For example, for the first few applications and topics the "per-topic consumers first, with down conversion" strategy can be used. When this has proved successful another, more efficient strategy can be considered acceptable to use instead. |
10.5.3. Kafka version and image mappings
When upgrading Kafka, consider your settings for the STRIMZI_KAFKA_IMAGES
environment variable and the Kafka.spec.kafka.version
property.
-
Each
Kafka
resource can be configured with aKafka.spec.kafka.version
. -
The Cluster Operator’s
STRIMZI_KAFKA_IMAGES
environment variable provides a mapping between the Kafka version and the image to be used when that version is requested in a givenKafka
resource.-
If
Kafka.spec.kafka.image
is not configured, the default image for the given version is used. -
If
Kafka.spec.kafka.image
is configured, the default image is overridden.
-
|
Warning
|
The Cluster Operator cannot validate that an image actually contains a Kafka broker of the expected version. Take care to ensure that the given image corresponds to the given Kafka version. |
10.5.4. Upgrading Kafka brokers and client applications
This procedure describes how to upgrade a Strimzi Kafka cluster to the latest supported Kafka version.
Compared to your current Kafka version, the new version might support a higher log message format version or inter-broker protocol version, or both. Follow the steps to upgrade these versions, if required. For more information, see Kafka versions.
You should also choose a strategy for upgrading clients. Kafka clients are upgraded in step 6 of this procedure.
For the Kafka
resource to be upgraded, check that:
-
The Cluster Operator, which supports both versions of Kafka, is up and running.
-
The
Kafka.spec.kafka.config
does not contain options that are not supported in the new Kafka version.
-
Update the Kafka cluster configuration:
kubectl edit kafka my-cluster
-
If configured, ensure that
Kafka.spec.kafka.config
has thelog.message.format.version
andinter.broker.protocol.version
set to the defaults for the current Kafka version.For example, if upgrading from Kafka version 3.1.0 to 3.2.3:
kind: Kafka spec: # ... kafka: version: 3.1.0 config: log.message.format.version: "3.1" inter.broker.protocol.version: "3.1" # ...
If
log.message.format.version
andinter.broker.protocol.version
are not configured, Strimzi automatically updates these versions to the current defaults after the update to the Kafka version in the next step.NoteThe value of log.message.format.version
andinter.broker.protocol.version
must be strings to prevent them from being interpreted as floating point numbers. -
Change the
Kafka.spec.kafka.version
to specify the new Kafka version; leave thelog.message.format.version
andinter.broker.protocol.version
at the defaults for the current Kafka version.NoteChanging the
kafka.version
ensures that all brokers in the cluster will be upgraded to start using the new broker binaries. During this process, some brokers are using the old binaries while others have already upgraded to the new ones. Leaving theinter.broker.protocol.version
unchanged ensures that the brokers can continue to communicate with each other throughout the upgrade.For example, if upgrading from Kafka 3.1.0 to 3.2.3:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka spec: # ... kafka: version: 3.2.3 (1) config: log.message.format.version: "3.1" (2) inter.broker.protocol.version: "3.1" (3) # ...
-
Kafka version is changed to the new version.
-
Message format version is unchanged.
-
Inter-broker protocol version is unchanged.
WarningYou cannot downgrade Kafka if the inter.broker.protocol.version
for the new Kafka version changes. The inter-broker protocol version determines the schemas used for persistent metadata stored by the broker, including messages written to__consumer_offsets
. The downgraded cluster will not understand the messages. -
-
If the image for the Kafka cluster is defined in the Kafka custom resource, in
Kafka.spec.kafka.image
, update theimage
to point to a container image with the new Kafka version. -
Save and exit the editor, then wait for rolling updates to complete.
Check the progress of the rolling updates by watching the pod state transitions:
kubectl get pods my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'
The rolling updates ensure that each pod is using the broker binaries for the new version of Kafka.
-
Depending on your chosen strategy for upgrading clients, upgrade all client applications to use the new version of the client binaries.
If required, set the
version
property for Kafka Connect and MirrorMaker as the new version of Kafka:-
For Kafka Connect, update
KafkaConnect.spec.version
. -
For MirrorMaker, update
KafkaMirrorMaker.spec.version
. -
For MirrorMaker 2.0, update
KafkaMirrorMaker2.spec.version
.
-
-
If configured, update the Kafka resource to use the new
inter.broker.protocol.version
version. Otherwise, go to step 9.For example, if upgrading to Kafka 3.2.3:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka spec: # ... kafka: version: 3.2.3 config: log.message.format.version: "3.1" inter.broker.protocol.version: "3.2" # ...
-
Wait for the Cluster Operator to update the cluster.
-
If configured, update the Kafka resource to use the new
log.message.format.version
version. Otherwise, go to step 10.For example, if upgrading to Kafka 3.2.3:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka spec: # ... kafka: version: 3.2.3 config: log.message.format.version: "3.2" inter.broker.protocol.version: "3.2" # ...
ImportantFrom Kafka 3.0.0, when the inter.broker.protocol.version
is set to3.0
or higher, thelog.message.format.version
option is ignored and doesn’t need to be set. -
Wait for the Cluster Operator to update the cluster.
-
The Kafka cluster and clients are now using the new Kafka version.
-
The brokers are configured to send messages using the inter-broker protocol version and message format version of the new version of Kafka.
-
Following the Kafka upgrade, if required, you can:
10.6. Upgrading consumers to cooperative rebalancing
You can upgrade Kafka consumers and Kafka Streams applications to use the incremental cooperative rebalance protocol for partition rebalances instead of the default eager rebalance protocol. The new protocol was added in Kafka 2.4.0.
Consumers keep their partition assignments in a cooperative rebalance and only revoke them at the end of the process, if needed to achieve a balanced cluster. This reduces the unavailability of the consumer group or Kafka Streams application.
|
Note
|
Upgrading to the incremental cooperative rebalance protocol is optional. The eager rebalance protocol is still supported. |
-
You have upgraded Kafka brokers and client applications to Kafka 3.2.3.
To upgrade a Kafka consumer to use the incremental cooperative rebalance protocol:
-
Replace the Kafka clients
.jar
file with the new version. -
In the consumer configuration, append
cooperative-sticky
to thepartition.assignment.strategy
. For example, if therange
strategy is set, change the configuration torange, cooperative-sticky
. -
Restart each consumer in the group in turn, waiting for the consumer to rejoin the group after each restart.
-
Reconfigure each consumer in the group by removing the earlier
partition.assignment.strategy
from the consumer configuration, leaving only thecooperative-sticky
strategy. -
Restart each consumer in the group in turn, waiting for the consumer to rejoin the group after each restart.
To upgrade a Kafka Streams application to use the incremental cooperative rebalance protocol:
-
Replace the Kafka Streams
.jar
file with the new version. -
In the Kafka Streams configuration, set the
upgrade.from
configuration parameter to the Kafka version you are upgrading from (for example, 2.3). -
Restart each of the stream processors (nodes) in turn.
-
Remove the
upgrade.from
configuration parameter from the Kafka Streams configuration. -
Restart each consumer in the group in turn.
11. Downgrading Strimzi
If you are encountering issues with the version of Strimzi you upgraded to, you can revert your installation to the previous version.
You can perform a downgrade to:
-
Revert your Cluster Operator to the previous Strimzi version.
-
Downgrade all Kafka brokers and client applications to the previous Kafka version.
If the previous version of Strimzi does not support the version of Kafka you are using, you can also downgrade Kafka as long as the log message format versions appended to messages match.
11.1. Downgrading the Cluster Operator to a previous version
If you are encountering issues with Strimzi, you can revert your installation.
This procedure describes how to downgrade a Cluster Operator deployment to a previous version.
-
An existing Cluster Operator deployment is available.
-
You have downloaded the installation files for the previous version.
-
Take note of any configuration changes made to the existing Cluster Operator resources (in the
/install/cluster-operator
directory). Any changes will be overwritten by the previous version of the Cluster Operator. -
Revert your custom resources to reflect the supported configuration options available for the version of Strimzi you are downgrading to.
-
Update the Cluster Operator.
-
Modify the installation files for the previous version according to the namespace the Cluster Operator is running in.
On Linux, use:
sed -i 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
On MacOS, use:
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
-
If you modified one or more environment variables in your existing Cluster Operator
Deployment
, edit theinstall/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
file to use those environment variables.
-
-
When you have an updated configuration, deploy it along with the rest of the installation resources:
kubectl replace -f install/cluster-operator
Wait for the rolling updates to complete.
-
Get the image for the Kafka pod to ensure the downgrade was successful:
kubectl get pod my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'
The image tag shows the new Strimzi version followed by the Kafka version. For example,
NEW-STRIMZI-VERSION-kafka-CURRENT-KAFKA-VERSION
.
Your Cluster Operator was downgraded to the previous version.
11.2. Downgrading Kafka
Kafka version downgrades are performed by the Cluster Operator.
11.2.1. Kafka version compatibility for downgrades
Kafka downgrades are dependent on compatible current and target Kafka versions, and the state at which messages have been logged.
You cannot revert to the previous Kafka version if that version does not support any of the inter.broker.protocol.version
settings which have ever been used in that cluster,
or messages have been added to message logs that use a newer log.message.format.version
.
The inter.broker.protocol.version
determines the schemas used for persistent metadata stored by the broker, such as the schema for messages written to __consumer_offsets
.
If you downgrade to a version of Kafka that does not understand an inter.broker.protocol.version
that has ever been previously used in the cluster the broker will encounter data it cannot understand.
If the target downgrade version of Kafka has:
-
The same
log.message.format.version
as the current version, the Cluster Operator downgrades by performing a single rolling restart of the brokers. -
A different
log.message.format.version
, downgrading is only possible if the running cluster has always hadlog.message.format.version
set to the version used by the downgraded version. This is typically only the case if the upgrade procedure was aborted before thelog.message.format.version
was changed. In this case, the downgrade requires:-
Two rolling restarts of the brokers if the interbroker protocol of the two versions is different
-
A single rolling restart if they are the same
-
Downgrading is not possible if the new version has ever used a log.message.format.version
that is not supported by the previous version, including when the default value for log.message.format.version
is used. For example, this resource can be downgraded to Kafka version 3.1.0 because the log.message.format.version
has not been changed:
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
spec:
# ...
kafka:
version: 3.2.3
config:
log.message.format.version: "3.1"
# ...
The downgrade would not be possible if the log.message.format.version
was set at "3.2"
or a value was absent, so that the parameter took the default value for a 3.2.3 broker of 3.2.
|
Important
|
From Kafka 3.0.0, when the inter.broker.protocol.version is set to 3.0 or higher, the log.message.format.version option is ignored and doesn’t need to be set.
|
11.2.2. Downgrading Kafka brokers and client applications
This procedure describes how you can downgrade a Strimzi Kafka cluster to a lower (previous) version of Kafka, such as downgrading from 3.2.3 to 3.1.0.
Before you downgrade the Strimzi Kafka cluster, check the following for the Kafka
resource:
-
IMPORTANT: Compatibility of Kafka versions.
-
The Cluster Operator, which supports both versions of Kafka, is up and running.
-
The
Kafka.spec.kafka.config
does not contain options that are not supported by the Kafka version being downgraded to. -
The
Kafka.spec.kafka.config
has alog.message.format.version
andinter.broker.protocol.version
that is supported by the Kafka version being downgraded to.From Kafka 3.0.0, when the
inter.broker.protocol.version
is set to3.0
or higher, thelog.message.format.version
option is ignored and doesn’t need to be set.
-
Update the Kafka cluster configuration.
kubectl edit kafka KAFKA-CONFIGURATION-FILE
-
Change the
Kafka.spec.kafka.version
to specify the previous version.For example, if downgrading from Kafka 3.2.3 to 3.1.0:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka spec: # ... kafka: version: 3.1.0 (1) config: log.message.format.version: "3.1" (2) inter.broker.protocol.version: "3.1" (3) # ...
-
Kafka version is changed to the previous version.
-
Message format version is unchanged.
-
Inter-broker protocol version is unchanged.
NoteThe value of log.message.format.version
andinter.broker.protocol.version
must be strings to prevent them from being interpreted as floating point numbers. -
-
If the image for the Kafka version is different from the image defined in
STRIMZI_KAFKA_IMAGES
for the Cluster Operator, updateKafka.spec.kafka.image
. -
Save and exit the editor, then wait for rolling updates to complete.
Check the update in the logs or by watching the pod state transitions:
kubectl logs -f CLUSTER-OPERATOR-POD-NAME | grep -E "Kafka version downgrade from [0-9.]+ to [0-9.]+, phase ([0-9]+) of \1 completed"
kubectl get pod -w
Check the Cluster Operator logs for an
INFO
level message:Reconciliation #NUM(watch) Kafka(NAMESPACE/NAME): Kafka version downgrade from FROM-VERSION to TO-VERSION, phase 1 of 1 completed
-
Downgrade all client applications (consumers) to use the previous version of the client binaries.
The Kafka cluster and clients are now using the previous Kafka version.
-
If you are reverting back to a version of Strimzi earlier than 0.22, which uses ZooKeeper for the storage of topic metadata, delete the internal topic store topics from the Kafka cluster.
kubectl run kafka-admin -ti --image=quay.io/strimzi/kafka:0.31.1-kafka-3.2.3 --rm=true --restart=Never -- ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi-topic-operator-kstreams-topic-store-changelog --delete && ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi_store_topic --delete
12. Finding information on Kafka restarts
After the Cluster Operator restarts a Kafka pod in a Kubernetes cluster, it emits a Kubernetes event into the pod’s namespace explaining why the pod restarted. For help in understanding cluster behavior, you can check restart events from the command line.
|
Tip
|
You can export and monitor restart events using metrics collection tools like Prometheus. Use the metrics tool with an event exporter that can export the output in a suitable format. |
12.1. Reasons for a restart event
The Cluster Operator initiates a restart event for a specific reason. You can check the reason by fetching information on the restart event.
The reason given depends on whether you are using StrimziPodSet
or StatefulSet
resources for the creation and management of pods.
| StrimziPodSet | StatefulSet | Description |
|---|---|---|
CaCertHasOldGeneration |
CaCertHasOldGeneration |
The pod is still using a server certificate signed with an old CA, so needs to be restarted as part of the certificate update. |
CaCertRemoved |
CaCertRemoved |
Expired CA certificates have been removed, and the pod is restarted to run with the current certificates. |
CaCertRenewed |
CaCertRenewed |
CA certificates have been renewed, and the pod is restarted to run with the updated certificates. |
ClientCaCertKeyReplaced |
ClientCaCertKeyReplaced |
The key used to sign client CA certificates has been replaced, and the pod is being restarted as part of the CA renewal process. |
ClusterCaCertKeyReplaced |
ClusterCaCertKeyReplaced |
The key used to sign the cluster’s CA certificates has been replaced, and the pod is being restarted as part of the CA renewal process. |
ConfigChangeRequiresRestart |
ConfigChangeRequiresRestart |
Some Kafka configuration properties are changed dynamically, but others require that the broker be restarted. |
CustomListenerCaCertChanged |
CustomListenerCaCertChanged |
The CA certificate used to secure the Kafka network listeners has changed, and the pod is restarted to use it. |
FileSystemResizeNeeded |
FileSystemResizeNeeded |
The file system size has been increased, and a restart is needed to apply it. |
KafkaCertificatesChanged |
KafkaCertificatesChanged |
One or more TLS certificates used by the Kafka broker have been updated, and a restart is needed to use them. |
ManualRollingUpdate |
ManualRollingUpdate |
A user annotated the pod, or the |
PodForceRestartOnError |
PodForceRestartOnError |
An error occurred that requires a pod restart to rectify. |
PodHasOldRevision |
JbodVolumesChanged |
A disk was added or removed from the Kafka volumes, and a restart is needed to apply the change. When using |
PodHasOldRevision |
PodHasOldGeneration |
The |
PodStuck |
PodStuck |
The pod is still pending, and is not scheduled or cannot be scheduled, so the operator has restarted the pod in a final attempt to get it running. |
PodUnresponsive |
PodUnresponsive |
Strimzi was unable to connect to the pod, which can indicate a broker not starting correctly, so the operator restarted it in an attempt to resolve the issue. |
12.2. Restart event filters
When checking restart events from the command line, you can specify a field-selector
to filter on Kubernetes event fields.
The following fields are available when filtering events with field-selector
.
regardingObject.kind
-
The object that was restarted, and for restart events, the kind is always
Pod
. regarding.namespace
-
The namespace that the pod belongs to.
regardingObject.name
-
The pod’s name, for example,
strimzi-cluster-kafka-0
. regardingObject.uid
-
The unique ID of the pod.
reason
-
The reason the pod was restarted, for example,
JbodVolumesChanged
. reportingController
-
The reporting component is always
strimzi.io/cluster-operator
for Strimzi restart events. source
-
source
is an older version ofreportingController
. The reporting component is alwaysstrimzi.io/cluster-operator
for Strimzi restart events. type
-
The event type, which is either
Warning
orNormal
. For Strimzi restart events, the type isNormal
.
|
Note
|
In older versions of Kubernetes, the fields using the regarding prefix might use an involvedObject prefix instead. reportingController was previously called reportingComponent .
|
12.3. Checking Kafka restarts
Use a kubectl
command to list restart events initiated by the Cluster Operator.
Filter restart events emitted by the Cluster Operator by setting the Cluster Operator as the reporting component using the reportingController
or source
event fields.
-
The Cluster Operator is running in the Kubernetes cluster.
-
Get all restart events emitted by the Cluster Operator:
kubectl -n kafka get events --field-selector reportingController=strimzi.io/cluster-operator
Example showing events returnedLAST SEEN TYPE REASON OBJECT MESSAGE 2m Normal CaCertRenewed pod/strimzi-cluster-kafka-0 CA certificate renewed 58m Normal PodForceRestartOnError pod/strimzi-cluster-kafka-1 Pod needs to be forcibly restarted due to an error 5m47s Normal ManualRollingUpdate pod/strimzi-cluster-kafka-2 Pod was manually annotated to be rolled
You can also specify a
reason
or otherfield-selector
options to constrain the events returned.Here, a specific reason is added:
kubectl -n kafka get events --field-selector reportingController=strimzi.io/cluster-operator,reason=PodForceRestartOnError
-
Use an output format, such as YAML, to return more detailed information about one or more events.
kubectl -n kafka get events --field-selector reportingController=strimzi.io/cluster-operator,reason=PodForceRestartOnError -o yaml
Example showing detailed events outputapiVersion: v1 items: - action: StrimziInitiatedPodRestart apiVersion: v1 eventTime: "2022-05-13T00:22:34.168086Z" firstTimestamp: null (1) involvedObject: kind: Pod name: strimzi-cluster-kafka-1 namespace: kafka kind: Event lastTimestamp: null (1) message: Pod needs to be forcibly restarted due to an error metadata: creationTimestamp: "2022-05-13T00:22:34Z" generateName: strimzi-event name: strimzi-eventwppk6 namespace: kafka resourceVersion: "432961" uid: 29fcdb9e-f2cf-4c95-a165-a5efcd48edfc reason: PodForceRestartOnError reportingController: strimzi.io/cluster-operator reportingInstance: strimzi-cluster-operator-6458cfb4c6-6bpdp source: {} (1) type: Normal kind: List metadata: resourceVersion: "" selfLink: ""
-
These fields are deprecated, and will be removed in Kubernetes 1.25. As such, they are not populated for these events.
-
13. Uninstalling Strimzi
You can uninstall Strimzi using the CLI or by unsubscribing from OperatorHub.io.
Use the same approach you used to install Strimzi.
When you uninstall Strimzi, you will need to identify resources created specifically for a deployment and referenced from the Strimzi resource.
Such resources include:
-
Secrets (Custom CAs and certificates, Kafka Connect secrets, and other Kafka secrets)
-
Logging
ConfigMaps
(of typeexternal
)
These are resources referenced by Kafka
, KafkaConnect
, KafkaMirrorMaker
, or KafkaBridge
configuration.
|
Warning
|
Deleting CustomResourceDefinitions results in the garbage collection of the corresponding custom resources (Kafka , KafkaConnect , KafkaMirrorMaker , or KafkaBridge ) and the resources dependent on them (Deployments, StatefulSets, and other dependent resources).
|
13.1. Uninstalling Strimzi using the CLI
This procedure describes how to use the kubectl
command-line tool to uninstall Strimzi and remove resources related to the deployment.
-
Access to a Kubernetes cluster using an account with
cluster-admin
orstrimzi-admin
permissions. -
You have identified the resources to be deleted.
You can use the following
kubectl
CLI command to find resources and also verify that they have been removed when you have uninstalled Strimzi.Command to find resources related to a Strimzi deploymentkubectl get <resource_type> --all-namespaces | grep <kafka_cluster_name>
Replace <resource_type> with the type of the resource you are checking, such as
secret
orconfigmap
.
-
Delete the Cluster Operator
Deployment
, relatedCustomResourceDefinitions
, andRBAC
resources.Specify the installation files used to deploy the Cluster Operator.
kubectl delete -f install/cluster-operator
-
Delete the resources you identified in the prerequisites.
kubectl delete <resource_type> <resource_name> -n <namespace>
Replace <resource_type> with the type of resource you are deleting and <resource_name> with the name of the resource.
Example to delete a secretkubectl delete secret my-cluster-clients-ca -n my-project
13.2. Uninstalling Strimzi from OperatorHub.io
This procedure describes how to uninstall Strimzi from OperatorHub.io and remove resources related to the deployment.
You perform the steps using the kubectl
command-line tool.
-
Access to a Kubernetes cluster using an account with
cluster-admin
orstrimzi-admin
permissions. -
You have identified the resources to be deleted.
You can use the following
kubectl
CLI command to find resources and also verify that they have been removed when you have uninstalled Strimzi.Command to find resources related to a Strimzi deploymentkubectl get <resource_type> --all-namespaces | grep <kafka_cluster_name>
Replace <resource_type> with the type of the resource you are checking, such as
secret
orconfigmap
.
-
Delete the Strimzi subscription.
kubectl delete subscription strimzi-cluster-operator -n <namespace>
-
Delete the cluster service version (CSV).
kubectl delete csv strimzi-cluster-operator.<version> -n <namespace>
-
Remove related CRDs.
kubectl get crd -l app=strimzi -o name | xargs kubectl delete


./komodod -ac_name=ZAWY24 -ac_adaptivepow=1 -ac_supply=1000000 -ac_reward=10000000000 -ac_cc=2 -addnode=<IP_ADDRESS> &
A channel to discuss mining. For useful links and more info click the pinned messages to the right.
100 messages
Before 05-Dec-19 12:00 AM
bishop13-Aug-19 04:07 AM
I think an F1+ is up to 100GH on the original VRSC algo
𝙊𝙊𝙊𝙊13-Aug-19 05:44 AM
F1mini does 5-7 GHs on V1. F1+ would make 40-50 GHs(edited)
Lumbi13-Aug-19 08:39 AM
@bishop they are wasting their electricity, because game theory
the fleet of 1 cores is growing day by day (edited)
zawy13-Aug-19 10:10 AM
@jl777c Does digishield use only targetA, or do they all use the rule if targetB not 0, then use targetB?
All meaning digi, rst, and exp()
jl777c13-Aug-19 12:28 PM
digishield is back to using only targetA, unless RST is over. in that case it uses 7/8 of the targetA for the blocks that had RST active
you can also do 10%pow and 90% staking or other ratio variation
miraculu21-Aug-19 10:58 PM
@polycryptoblog Thanks , never knew they were that cheap.
@Gordon Komodo is staking production ready?
polycryptoblog21-Aug-19 11:06 PM
VerusPoS you could say is, even pos64 is being used on live chains
But still new technology so just proceed with caution
Gordon Komodo21-Aug-19 11:15 PM
zexo and ourc are both ecosystem projects that enabled staking as well as veruscoin of course
Alright22-Aug-19 03:18 AM
@miraculu@polycryptoblog there is a version dubbed "verushash1.1" that smart chains can use right now
it's basically verushash1.0 but with a few tricks to slow down FPGA development for it
Joker made it, he'd be able to explain. It's not a good long term solution for a chain though. Is basically security through obscurity
polycryptoblog22-Aug-19 04:20 AM
Did not know that , will have to ask him about it
blackjok3r22-Aug-19 07:53 AM
Yes, the verushash1.1 is verushash 1 with a random seed, so there are no FPGA or even GPU miners for it, as it never got used on any real chain. The code was all there in the Verus merge for sapling, but the algo was not activated so I added the code nneded to use it as a3rd algo option.
-ac_algo=verushash11
It also works with verusPoS and PoS64, but PoS64 is a little weird on verushash, it works, but blocktimes can be a bit crazy
dukeleto22-Aug-19 12:08 PM
Might be something to study but I would not recommend using that on a new production mainnet of any coin
blackjok3r22-Aug-19 01:02 PM
its been tested plenty of times.. I starrted at least 100 chains using that algo while trying toi get pos64 working on it
Alright22-Aug-19 01:24 PM
we've used it on many CFEK chains. Works as intended
miraculu23-Aug-19 11:00 PM
@Alright and @blackjok3r thank you very much. I'll check it out.
dukeleto23-Aug-19 11:16 PM
I am sure blackjoker+Alright have done good work on that hash variant. It's just that most people using it aren't going to realize that if it were profitable, an FPGA could mine it very effectively, it's just that no financial target has ever appeared to bitstream devs. Why is somebody using the function, and do they realize they may be that first target of this new variant? People just need to understand what it's limitations are
most people making new smart chains don't know enough to decide between Equihash (N,K) variants and this, so we guide them to what we think is best for most situations. I am trying to think of a situation where I would recommend verushash1.1 to a consulting client, and I can't think of one
ComputerGenie 👴👴👴23-Aug-19 11:19 PM
most people making new smart chains don't know enough to decide between Equihash (N,K) variants
and some think that anything other than 200,9 is just silly
dukeleto23-Aug-19 11:21 PM
indeed, but we added the option to cut your foot off, if you so choose
dukeleto24-Aug-19 01:54 PM
Anybody mining something other than VRSC with a Blackminer? I see DGB is profitable to mine right now
We recently restored an Apollo Guidance Computer, the revolutionary computer that helped navigate to the Moon and land on its surface. 1 At...
Laviathon -bcmonster.com24-Aug-19 09:23 PM
I have been having problems with linux and ./komodod crashing ... what version should I be on or do I need some new command line... all the KMD asset chains are fine... Just KMD
@Laviathon -bcmonster.com how large is your KMD wallet.dat?
also, that is usually a race condition that happens very rarely, if you try again, does it happen consistently?
if your system is heavily loaded, it's more likely as well
if the problem is persistent, starting a new wallet.dat and importing any necessary keys might make it less likely. It's a real bug, but nobody has been able to fix it. Also happens in Zcash and all Zcash coins, but is only triggered very rarely. Usually I see it on an overloaded system, and trying again works
@zkproofs @matthew_d_green VDF's allow stake to be time-locked w/o needing participants to register (as occurs in normal POS) so that a stake-rate can replace hashrate.
https://t.co/mJaEKSYYFT
dukeleto29-Aug-19 12:19 AM
PROTIP: If you are selling used miners, wipe your mining address from them!
Zchain: Zcash Block Explorer, Analytics Platform & API. Browse and search blocks, transactions, accounts, statistics and more.
metadata leakage, y'all
Cryptoon30-Aug-19 12:35 PM
with ONE miner?
not bad roi it seems?
Or wait, that was his mining wallet probably that accumulated all his zec mining revs
nevermind
dukeleto30-Aug-19 01:09 PM
@Cryptoon one address, could be many miners
Cryptoon30-Aug-19 01:09 PM
yeah true, didnt really think it through
[Dev] Alex31-Aug-19 05:51 PM
is any one know what algo using DP chain ?
Alright31-Aug-19 05:52 PM
@Deleted User
[Dev] Alex31-Aug-19 06:15 PM
ComputerGenie 👴👴👴31-Aug-19 06:17 PM
why ? you got an answer an hr ago
[Dev] Alex01-Sep-19 10:30 AM
How many block need to mature? DP chain
blackjok3r01-Sep-19 11:13 AM
KMD AC is 1 conf.. KMD is 100, VRSC is 100, and any chain using eras and is not LABS chain is 100
blackjok3r01-Sep-19 11:21 AM
I think @Alright added -ac_maturity so you can set it to whatever you like
dukeleto01-Sep-19 01:04 PM
correct, 100 is the default and I don't know any prod chains using anything different yet
ComputerGenie 👴👴👴01-Sep-19 01:11 PM
of all I have a pool for, KMD and HUSH are the only 2 that are at 100
dukeleto01-Sep-19 01:59 PM
-ac_cbmaturity didn't exist when HUSH launched
it could be added at a future mandatory update, I suppose
ComputerGenie 👴👴👴01-Sep-19 02:02 PM
-ac_cbmaturity didn't exist when HUSH launched
I seem to recall someone asking you to create that
dukeleto01-Sep-19 02:52 PM
@ComputerGenie 👴👴👴 yep, not going to test out a new feature on a prod chain
I was too busy at the time
1
CrisF04-Sep-19 01:23 AM
Hi, I'm looking for info on how to mine tBCH, BCH testnet coins, but not had any luck. Does anyone have any info they could point me to?(edited)
grewalsatinder04-Sep-19 01:30 AM
As a general rule you should be able to use either some existing bch testnet pool to mine, or if it's cpu minable then run the daemon with testnet settings.
Don't exactly know about bch mining, just giving u some ideas(edited)
CrisF04-Sep-19 01:33 AM
Thanks,
I didn't see setgenerate in help, so looking for options. Not luck in finding any pool info either. Goggle hasn't been helpful.
grewalsatinder04-Sep-19 02:01 AM
Hmmmm.... in case it's not cpu minable, maybe give their social media a try, reddit, twitter, irc, slack, discord, forum mailimg lists etc etc
CrisF04-Sep-19 02:01 AM
Ok, I'll see what they say. Thanks
grewalsatinder04-Sep-19 02:02 AM
dukeleto04-Sep-19 11:05 AM
pretty sure people give out tBCH for free
phm8704-Sep-19 02:49 PM
I posted a link to a tBCH faucet in anarchy channel @CrisF no need to mine it: just milk the faucet
1
dukeleto04-Sep-19 03:29 PM
1
phm8704-Sep-19 03:29 PM
2
polycryptoblog06-Sep-19 03:14 PM
Just got a text from DHL, they are finally on the way!
ComputerGenie 👴👴👴06-Sep-19 03:14 PM
"they"?
polycryptoblog06-Sep-19 03:19 PM
A9++
1
dukeleto06-Sep-19 03:46 PM
@polycryptoblog bless their little hearts
this must be why A9's are flooding Ebay
ComputerGenie 👴👴👴06-Sep-19 03:49 PM
better to start late than never, I guess
still can't figure out who is buying A9s at the same price as A9++s are listed
dukeleto06-Sep-19 03:51 PM
@ComputerGenie 👴👴👴 well, some people waited months for A9++'s


Specify maximum time which Jenkins will wait for EC2 instance startup before trying to request new instance from fleet.
By default Jenkins expect that node will be available immediately, however EC2 instance requires some time to be provision, start and be ready for actual builds. In result Jenkins might request more capacity then actually required (over-provision). This setting avoids over-provision by force Jenkins to wait until EC2 instance will be online and don't request more capacity.
In case of positive value, will force Jenkins to wait when EC2 instance will be online,
no more then specified time in seconds. Cannot be negative.
In case of 0
, timeout will be disabled and Jenkins will
not wait any time to start up EC2 instance, which could lead to over-provision.
Note Be careful with very big values (more 5 min) for this settings. In case of any problem with node (no java, wrong version of java, Jenkins agent cannot start), so it cannot be online. Jenkins will wait, without requesting additional capacity.
Behavior of previous versions of plugin could be represented as this version
with timeout set to 0
.


How to use the Feathers SoundPlayer
component
The SoundPlayer
class provides audio playback capabilities using a flash.media.Sound
object. Sound files may be loaded from a URL or any Sound
object may be passed in. Media player controls may be added as children to display information such as the current time or to control playback by seeking or pausing the audio. SoundPlayer
is a subclass of LayoutGroup
, so its children may be positioned and sized using layouts.
The Basics
First, let's create a SoundPlayer
component and add it to the display list:
var player:SoundPlayer = new SoundPlayer();
this.addChild( player );
To play a sound file, pass the URL (or a flash.media.Sound
object) to the soundSource
property:
player.soundSource = "http://example.com/sound.mp3";
Next, we'll add some components as children to control playback.
Controls
Let's give the SoundPlayer
a PlayPauseToggleButton
and a SeekSlider
. It's as simple as adding them as children of the SoundPlayer
:
var button:PlayPauseToggleButton = new PlayPauseToggleButton();
player.addChild( button );
var slider:SeekSlider = new SeekSlider();
player.addChild( slider );
There's no need to add event listeners for these controls. You simply need to add them as children of the SoundPlayer
, and everything will be set up automatically.
In the next section, we'll position these two children using a layout.
Layout
Like a LayoutGroup
, a SoundPlayer
supports using layouts to automatically position and size its children. Let's pass a HorizontalLayout
to the layout
property of the SoundPlayer
:
var layout:HorizontalLayout = new HorizontalLayout();
layout.gap = 10;
group.layout = layout;
Here, we've set the gap
property, but HorizontalLayout
provides many more useful features, including padding and alignment. See How to use HorizontalLayout
with Feathers containers for complete details.
If we want our SeekSlider
to stretch to fill as much space as possible within the SoundPlayer
, we can pass in HorizontalLayoutData
:
var sliderLayoutData:HorizontalLayoutData = new HorizontalLayoutData();
sliderLayoutData.percentWidth = 100;
slider.layoutData = sliderLayoutData;
Now, because we've set the percentWidth
property, when the width of the SoundPlayer
changes, the width of the SeekSlider
will change too.
Controlling playback programmatically
By default, the SoundPlayer
will automatically start playing its soundSource
. We can use the autoPlay
property to change this behavior:
player.autoPlay = false;
If autoPlay
is set to false
, we can call play()
to begin playback manually:
player.play();
To pause, we can call pause()
to pause playback at the current position:
player.pause();
The togglePlayPause()
method may be called to toggle between the play and pause states:
player.togglePlayPause();
To stop playback and return the sound to the beginning, we may call stop()
:
player.stop();
The seek()
function may be called to change the current time:
player.seek( 5.0 );
The time is measured in seconds.
To change the volume, we can pass a flash.media.SoundTransform
object to the soundTransform
property:
player.soundTransform = new SoundTransform( 0.5 );
Skinning a SoundPlayer
As mentioned above, SoundPlayer
is a subclass of LayoutGroup
. For more detailed information about the skinning options available to SoundPlayer
, see How to use the Feathers LayoutGroup
component.


Spend the next few days getting cozy on the couch. We’ve got your weekend plans right here.
Spend Friday night catching up on the first three episodes of the new Max Original, Genera+ion. A group of Orange County high schoolers navigate sexuality and identity, testing the beliefs of their conservative community.
Spend Saturday with your favorite troublemakers. Come on down to South ParQ for a brand new special. While the adults clamor for the COVID-19 vaccine, a hilarious militant group tries to stop the boys from getting their teacher vaccinated.
Settle in for a Saturday night movie, and don’t miss your chance to see this award-winning drama. Daniel Kaluuya and LaKeith Stanfield star in the new movie inspired by true events. Now in theaters and on HBO Max. Streaming through March 14.
Catch up on Allen v. Farrow before the finale airs this Sunday. This HBO Original docuseries pieces together new perspectives and details about the abuse scandal and custody battle between Woody Allen and Mia Farrow - and the controversial aftermath.
End your weekend Max marathon with a healthy dose of dry wit and British exasperation as John Oliver delivers your weekly news briefing. New episodes air Sunday nights at 11 pm ET.


This here is known as a paragraph. By using certain html tags I can create emphasis or boldness! I can create links that open in the same window, links that open in a new window, and links that go to e-mail. I can even make links that are pictures.
Here are my current hobbies, ranked in order by how much I've spent my time on them in the past month:
Here's a list of games that I've played in the past week!


JavaScript is disabled on your browser.
Overview
Package
Class
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes
A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
R
S
T
U
V
W
R
RECEIVE_BUFFER_SIZE
- Static variable in class com.biasedbit.efflux.session.
AbstractRtpSession
receiveBufferSize
- Variable in class com.biasedbit.efflux.session.
AbstractRtpSession
receivedBye()
- Method in class com.biasedbit.efflux.participant.
RtpParticipant
receivedSdes()
- Method in class com.biasedbit.efflux.participant.
RtpParticipant
ReceiverReportPacket
- Class in
com.biasedbit.efflux.packet
ReceiverReportPacket()
- Constructor for class com.biasedbit.efflux.packet.
ReceiverReportPacket
ReceptionReport
- Class in
com.biasedbit.efflux.packet
ReceptionReport()
- Constructor for class com.biasedbit.efflux.packet.
ReceptionReport
receptionReports
- Variable in class com.biasedbit.efflux.packet.
AbstractReportPacket
removeControlListener(RtpSessionControlListener)
- Method in class com.biasedbit.efflux.session.
AbstractRtpSession
removeControlListener(RtpSessionControlListener)
- Method in interface com.biasedbit.efflux.session.
RtpSession
removeDataListener(RtpSessionDataListener)
- Method in class com.biasedbit.efflux.session.
AbstractRtpSession
removeDataListener(RtpSessionDataListener)
- Method in interface com.biasedbit.efflux.session.
RtpSession
removeEventListener(RtpSessionEventListener)
- Method in class com.biasedbit.efflux.session.
AbstractRtpSession
removeEventListener(RtpSessionEventListener)
- Method in interface com.biasedbit.efflux.session.
RtpSession
removeReceiver(RtpParticipant)
- Method in class com.biasedbit.efflux.participant.
DefaultParticipantDatabase
removeReceiver(RtpParticipant)
- Method in interface com.biasedbit.efflux.participant.
ParticipantDatabase
removeReceiver(RtpParticipant)
- Method in class com.biasedbit.efflux.participant.
SingleParticipantDatabase
removeReceiver(RtpParticipant)
- Method in class com.biasedbit.efflux.session.
AbstractRtpSession
removeReceiver(RtpParticipant)
- Method in interface com.biasedbit.efflux.session.
RtpSession
removeReceiver(RtpParticipant)
- Method in class com.biasedbit.efflux.session.
SingleParticipantSession
resetSendStats()
- Method in class com.biasedbit.efflux.session.
AbstractRtpSession
resolvedSsrcConflict(RtpSession, long, long)
- Method in interface com.biasedbit.efflux.session.
RtpSessionEventListener
resolveSsrcConflict(long)
- Method in class com.biasedbit.efflux.participant.
RtpParticipant
resolveSsrcConflict(Collection<Long>)
- Method in class com.biasedbit.efflux.participant.
RtpParticipant
RtpParticipant
- Class in
com.biasedbit.efflux.participant
RtpParticipantInfo
- Class in
com.biasedbit.efflux.participant
RtpParticipantInfo(long)
- Constructor for class com.biasedbit.efflux.participant.
RtpParticipantInfo
RtpParticipantInfo()
- Constructor for class com.biasedbit.efflux.participant.
RtpParticipantInfo
RtpSession
- Interface in
com.biasedbit.efflux.session
RtpSessionControlListener
- Interface in
com.biasedbit.efflux.session
RtpSessionDataListener
- Interface in
com.biasedbit.efflux.session
RtpSessionEventListener
- Interface in
com.biasedbit.efflux.session
RtpVersion
- Enum in
com.biasedbit.efflux.packet
run(Timeout)
- Method in class com.biasedbit.efflux.session.
AbstractRtpSession
running
- Variable in class com.biasedbit.efflux.session.
AbstractRtpSession
A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
R
S
T
U
V
W
Overview
Package
Class
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes


This specification introduces Server Timing, which enables the server to communicate performance metrics about the request-response cycle to the user agent, and a JavaScript interface to enable applications to collect, process, and act on these metrics to optimize application delivery.
This is a proposal and may change without any notices. Interested parties should bring discussions to the Web Platform Incubator Community Group.
Accurately measuring performance characteristics of web applications is an important aspect of making web applications faster. [[NAVIGATION-TIMING-2]] and [[RESOURCE-TIMING]] provide detailed request timing information for the document and its resources, which include time when the request was initiated, and various milestones to negotiate the connection and receive the response. However, while the user agent can observe the timing data of the request it has no insight into how or why certain stages of the request-response cycle have taken as much time as they have - e.g. how the request was routed, where the time was spent on the server, and so on.
This specification introduces Server Timing, which enables the server to communicate performance metrics about the request-response cycle to the user agent, and a JavaScript interface to enable applications to collect, process, and act on these metrics to optimize application delivery.
Server Timing constitutes of two parts: a definition of the `Server-Timing` header field, which allows the server to communicate performance metrics and descriptions within the response and in a well defined format, and a `PerformanceServerTiming` interface to allow JavaScript to collect, process, and act on these metrics to optimize application delivery.
The Server-Timing header field is used to communicate one or more metrics and descriptions for the given request-response cycle. The ABNF (Augmented Backus-Naur Form) syntax for the Server-Timing header field is as follows:
Server-Timing = "Server-Timing" ":" #server-timing-metric server-timing-metric = metric [ ";" description ] metric = metric-name [ "=" metric-value ] metric-name = token metric-value = 1\*digit [ "." 1\*digit ] description = token | quoted-string
See [[!RFC7230]] for definitions of `token`, `digit`, and `quoted-string`.
The PerformanceServerTiming interface participates in the [[!PERFORMANCE-TIMELINE-2]] and extends the following attributes of the PerformanceEntry interface:
Performance
InterfaceIf this method is not called, the user agent SHOULD store at least 150 PerformanceServerTiming resources in the buffer, unless otherwise specified by the user agent.
If the `maxSize` parameter is less than the number of elements currently stored in the buffer, no elements in the buffer are to be removed and the user agent MUST NOT fire the `servertimingbufferfull` event.
servertimingbufferfull
that bubbles, isn't cancelable, has no default action, at the Performance object [[!NAVIGATION-TIMING-2]].The user-agent MUST process Server-Timing header field communicated via a trailer field (see [[!RFC7230]] section 4.1.2) using the same algorithm.
Cross-origin resources (i.e. non same origin) MUST be included as PerformanceServerTiming objects in the Performance Timeline. If the "timing allow check" algorithm, as defined in [[RESOURCE-TIMING]], fails for a cross-origin resource:
Server must return the `Timing-Allow-Origin` HTTP response header, as defined in [[RESOURCE-TIMING]], to allow the user agent to fully expose, to the document origin(s) specified, the values of attributes that would have been set to zero or empty string due to the cross-origin restrictions.
The interfaces defined in this specification expose potentially sensitive application and infrastructure information to any web page that has included a resource that advertises server timing metrics. For this reason the access to `ServerTiming` interface is restricted by the same origin policy by default, as described in . Resource providers can explicitly allow server timing information to be available by adding the `Timing-Allow-Origin` HTTP response header, as defined in [[!RESOURCE-TIMING]], that species the domains that are allowed to access the server metrics.
In addition to using the `Timing-Allow-Origin` HTTP response header, the server can also use relevant logic to control which metrics are returned, when, and to whom - e.g. the server may only provide certain metrics to correctly authenticated users and nothing at all to all others.
The permanent message header field registry should be updated with the following registrations ([[RFC3864]]):
> GET /resource HTTP/1.1 > Host: example.com < HTTP/1.1 200 OK < Server-Timing: miss, db=53, app=47.2; < Server-Timing: customView, dc;atl < Trailer: Server-Timing < (... snip response body ...) < Server-Timing: total=123.4
| Name | Value | Description |
|---|---|---|
| miss | ||
| dc | atl | |
| db | 53 | |
| app | 47.2 | customView |
| total | 123.4 |
The above header fields communicates five distinct metrics that illustrate all the possible ways for the server to communicate data to the user agent: metric name only, metric with value, metric with value and description, and metric with description. For example, the above metrics may indicate that for `example.com/resource` fetch:
The application can collect, process, and act on the provided metrics via the provided JavaScript interface:
var serverMetrics = window.performance.getEntriesByName('https://example.com/resource.jpg'); for (i = 0; i < serverMetrics.length; i++) { entry = serverMetrics[i]; if (entry == "server") { // entry.metric, entry.duration, entry.description } }
Server processing time can be a significant fraction of the total request time. For example, a dynamic response may require one or more database queries, cache lookups, API calls, time to process relevant data and render the response, and so on. Similarly, even a static response can be delayed due to overloaded servers, slow caches, or other reasons.
Today, the user agent developer tools are able to show when the request was initiated, and when the first and last bytes of the response were received. However, there is no visibility into where or how the time was spent on the server, which means that the developer is unable to quickly diagnose if there is a performance bottleneck on the server, and if so, in which component. Today, to answer this question, the developer is required to use different techniques: check the server logs, embed performance data within the response (if possible), use external tools, and so on. This makes identifying and diagnosing performance bottlenecks hard, and in many cases impractical.
Server Timing defines a standard mechanism that enables the server to communicate relevant performance metrics to the client and allows the client to surface them directly in the developer tools - e.g. the requests can be annotated with server sent metrics to provide insight into where or how the time was spent while generating the response.
In addition to surfacing server sent performance metrics in the developer tools, a standard JavaScript interface enables analytics tools to automatically collect, process, beacon, and aggregate these metrics for operational and performance analysis.
Server Timing enables origin servers to communicate performance metrics about where or how time is spent while processing the request. However, the same request and response may also be routed through one or more multiple proxies (e.g. cache servers, load balancers, and so on), each of which may introduce own delays and may want to provide performance metrics into where or how the time is spent.
For example, a CDN edge node may want to report which data center was being used, if the resource was available in cache, and how long it took to retrieve the response from cache or from the origin server. Further, the same process may be repeated by other proxies, thus allowing full end-to-end visibility into how the request was routed and where the time was spent.
Similarly, when a Service Worker is active, some or all of the navigation and resource requests may be routed through it. Effectively, an active Service Worker is a local proxy that is able to reroute requests, serve cached responses, synthesize responses, and more. As a result, Server Timing enables Service Worker to report custom performance metrics about how the request was processed: whether it was fetched from server or server from local cache, duration of relevant the processing steps, and so on.
This document reuses text from the [[NAVIGATION-TIMING-2]], [[RESOURCE-TIMING]], [[PERFORMANCE-TIMELINE-2]], and [[RFC6797]] specifications as permitted by the licenses of those specifications.


@**
* Yobi, Project Hosting SW
*
* Copyright 2014 NAVER Corp.
* http://yobi.io
*
* @Author Suwon Chae, Keesun Baik
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**@
@(project:Project, issue:Issue)
@import utils.AccessControl._
@makeOptionTagWithFlag(user:User, flag:String) = {
}


Two jets collide after landing in Frankfurt, no one injured
The Korean Air Boeing and Air Namibia Airbus planes hit each other shortly after both landed at the airport on Saturday evening.
by APAuthorities say a collision between two passenger jets on the tarmac at Frankfurt Airport caused damage but left no one injured.
The Korean Air Boeing and Air Namibia Airbus planes hit each other shortly after both landed at the airport on Saturday evening.
News agency dpa reported that the German Federal Bureau of Aircraft Accident Investigation said Sunday there were no injuries, and it wasn’t immediately possible to detail the extent of the damage to the planes.
Authorities are working to determine the cause.
South Korea’s Yonhap News Agency reported that Korean Air said no passengers were injured since the Air Namibia jet was “moving at low speed on the ground.”
It reported that the collision affected the horizontal stabilizer of the Korean plane and the Air Namibia jet’s wingtip.


The component has the xml(HTML, XML, Markup, SVG.) language the default one in case no other is given.
It uses one of the most popular libraries out there: PrismJs
For a more detailed list of languages supported you can access:
Language listThe data written between tags is rendered in a code
component with the language sent as property.


Toggle navigation
Start Bootstrap
About
Services
Contact
Toy Queendom
Unisex Toys
Girl Toys
Boy Toys
Card Number
Expiration (MM/YY)
/
CVC
Billing ZIP Code
Name
Contact
Email


Chuck Norris
∞
5
^
JOIN SESSION
CREATE SESSION
Session-ID:
Nickname:
Nickname:
SessionID:
Player Name
Player ID
State
I'M READY


Work with Layer Mask
This guide shows you how to make use of image layer mask returned by TCMaskView
About layer masks
Layer masks are resolution-dependent bitmap images that are edited with the painting or selection tools. A layer mask controls the visibility of the layer to which it is added. You can edit a layer mask to add or subtract from the masked region without losing the layer pixels.

To get more information about layer mask, check out the mask layers tutorial from Adobe Photoshop
TCMaskView delegate
When the user completes or exits from a TCMaskView, one or more functions in TCMaskViewDelegate will be called:
- tcMaskViewDidExit: is called after TCMaskView exits
- tcMaskViewDidComplete: is called after a popup TCMaskView completes
- tcMaskViewWillPushViewController: is called before navigation controller is about to accomplish TCMaskView and process to the next UIViewController
The layer mask is provided as the first parameter in those delegate functions:
class ViewController: UIViewController, TCMaskViewDelegate {
...
// create and show a TCMaskView
func presentTCMaskView() {
let maskView = TCMaskView(image: image)
maskView.delegate = self
maskView.presentFrom(rootViewController: self, animated: true)
}
// delecate function, which will when TCMaskView is completed
func tcMaskViewDidComplete(mask: TCMask, image: UIImage) {
}
...
}
@implementation ViewController
...
// create and show a TCMaskView
- (void)presentTCMaskView {
TCMaskView *maskView = [[TCMaskView alloc] initWithImage:image];
maskView.delegate = self;
[maskView presentFromRootViewController:self animated:true];
}
// delecate function, which will when TCMaskView is completed
- (void)tcMaskViewDidCompleteWithMask:(TCMask *)mask image:(UIImage *)image {
}
...
@end
Process image using layer mask
Layer mask can be easily used to incorporate with other image editing frameworks.
For the guides below, we'll use the following image and layer mask to show the examples.
Image
Layer Mask
TCMask class
TCMask is an encapsulation of image masking result from TCMaskView, it has the following properties:
- data: An array of 8-bits unsigned char, its length is equal to the number of pixels of the image in TCMaskView. Each element in data represents the mask value.
- size: The size of mask, which is equal to the size of the image in TCMaskView.
TCMask also provides some simple and easy to use functions to process layer mask with image, the following example cuts out the masked object from the image.
let outputImage = mask.cutout(image: image, resize: false)
UIImage *outputImage = [mask cutoutWithImage:image resize:false];
Which will generate the following result:
Cutout image
Integrate with other frameworks
TinyCrayon can be easily integrated with other image editing frameworks. Usually, if the framework requres an mask image as a parameter, you can just use imageOfGray or imageOfRGBA to create it.Integrate with Core Image
Core Image is an image processing and analysis technology designed to provide near real-time processing for still and video images.

The following code creates an image with the selected mask region to be colored and the background to be sketch effect:
// Create pictures
let picture = GPUImagePicture(image: image)!
let maskPic = GPUImagePicture(image: mask.grayScaleImage())!
// Create filters
let sketchFilter = GPUImageSketchFilter()
let maskFilter = GPUImageMaskFilter()
let blendFilter = GPUImageSourceOverBlendFilter()
// Chain filters
picture.addTarget(sketchFilter)
picture.addTarget(maskFilter)
maskPic.addTarget(maskFilter)
sketchFilter.addTarget(blendFilter)
maskFilter.addTarget(blendFilter)
// Get the output result
blendFilter.useNextFrameForImageCapture()
picture.processImage()
maskPic.processImage()
let outputImage = blendFilter.imageFromCurrentFramebuffer()
// Create pictures
GPUImagePicture *picture = [[GPUImagePicture alloc] initWithImage:image];
GPUImagePicture *maskPic = [[GPUImagePicture alloc] initWithImage:[mask grayScaleImage]];
// Create filters
GPUImageFilter *sketchFilter = [[GPUImageSketchFilter alloc] init];
GPUImageFilter *maskFilter = [[GPUImageMaskFilter alloc] init];
GPUImageFilter *blendFilter = [[GPUImageSourceOverBlendFilter alloc] init];
// Chain filters
[picture addTarget:sketchFilter];
[picture addTarget:maskFilter];
[maskPic addTarget:maskFilter];
[sketchFilter addTarget:blendFilter];
[maskFilter addTarget:blendFilter];
// Get the output result
[blendFilter useNextFrameForImageCapture];
[picture processImage];
[maskPic processImage];
UIImage *outputImage = [blendFilter imageFromCurrentFramebuffer];
Output image
What's next
Check out TinyCrayon docs for more API reference details.
To see how to customize view mode or UI styles, check out the guide Customization.


Hello 3D world! This is a triangle gradient using 3x3 matrix. (1) click 3 points anywhere on canvas to define a triangle. (2) check "Triangle bound" for rendering within triangle angle.
Hello 3D world!
This is a triangle gradient using 3x3 matrix.
(1) click 3 points anywhere on canvas to define a triangle.
(2) check "Triangle bound" for rendering within triangle angle.