FILM TITLE: FAREWELL, MY CONCUBINE DIRECTOR: CHEN CAIGE COUNTRY: CHINA 1993 CINEMATOGRAPHY: GU CHANGUWEI CAST: Leslie Cheung ( Mister Cheng ), Gong Li Juxian ), Zhang Fengyi SUPER FEATURES: The story is excellent.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
China is finally starting to make some waves in film making. Unfortunately for the writers and directors, the work is heavily censored and limited. The results are from good to acceptable, but often somewhat unsatisfying. FAREWELL, MY CONCUBINE, is very satisfactory, despite what appears to be a bunch of moments, where the political events affect the story, when things have to be toned down, or hidden.
It is the story of a famous singer, whose life has been tortuous in the sense that he can not maintain a sense of control over his popularity, or the events surrounding it, be they personal, or simply artistic desires. And the film covers the span of over fifty years to tell the story. The two tremendous actors who were so famous at one time, are trying again to rekindle some old memories, this time for a production that does not mean much, as opposed to the early days, when the art form was respected and revered as important.
The early days of schooling were tough and the actors that were a part of those schools, for the most part were known to be sons of the lower classes, kids to whom, a chance to make a life was more important than anything else. The training is tough, and the way the kids are treated is tougher, specially when the teachers tend to think of the children as wimps and prostitutes. The fact that the schools are badly funded, tend to augment the position that living as an actor of an outdated style of performance is fading into the sunset, despite a few who care, and care so darn much that they will do anything to keep it going and maintain the status quo.
Mister Cheng, becomes famous for his role as the woman in a play, at a time when only boys sang the roles of women. And on the verge of the war with Japan, Mister Cheng has achieved a level of fame that allows him to demand certain privileges. But one of them is not love. His partner, who has been one of his lovers and the main reason why he has become famous, has fallen in love with a woman. And this affair is hurting the singing relationship.
The war brings about some major changes in China. The upper class that supported the famous operas has been substituted by a system that has no regards for an artistic event, and even less respect for the needs of the individuals that perform them. It plays the duo's personal relationships as a political event, and destroys everything along the way, even isolating the old style of music as something that is against the new way. The events separate the singers, and pretty much kill the woman that the partner has loved for so long. All that is left in the old age, is the two old men, singing one more time for what appears to be a show that leans on a burlesquian appeal. A freak show. A generation is dead. A political way is gone. Is there anything left, even for someone, whose ability was so important to him, like Master Cheng.
The question arises if this film is about the characters and their story, or a political attack on the new order that does not care for arts at all, as a way to keep the masses in line. This is the political intrigue, and the film walks a fine line during these moments. But the result, is not the definition of the politics. It is the destruction of the individuals as traitors and people that are against the revolution.
Chen Kaige has put together a film that is an epic, and that is visually stunning. The only time that the film is shining and looks at things in a loving way, the camera poses for the actors, is when they perform. The rest of the time the camera is active, in search for a subject, if you will.
Colorful, well directed, with exceptional performances by Leslie Cheung and Gong Li, as his best friend's lover and eventual wife, this film plods along very well. It is a stunning piece of work. Well designed, with some exceptional costumes. A must see, even if the political situations are not favorable, and are the force behind the demise of an art form, the ultimate dishonor for a political movement, that feels that arts are a waste of valuable time for its people.
And this film is not a waste. We can only hope that the directors in this country can only continue to produce more material and that they eventually will usher a new age revolution, that includes film, stage and music, because no doubt a country as large as China has a lot of it.
4 GIBLOONS Copyright (c) Pedro Sena 1994 Member of the Internet Movie Critics Association
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Jody's World
Home
Work
Contact
Go To
Home
Work
Contact
>
Group Project From Class! Credits - The Git Gud Team
First Ever


Notebooks
Story: The occasion on which the story The girl of the Early Race who killed the children of the Rain was related to |han≠kass'o
The occasion on which the story The girl of the Early Race who killed the children of the Rain was related to |han≠kass'o
Title
The occasion on which the story The girl of the Early Race who killed the children of the Rain was related to |han≠kass'o
Collection
Summary
|han≠kass'o was told the story 'The girl of the Early Race who killed the children of the Rain' when, as a child, he complained about being given too little to eat.
Comments
1) See also The girl of the Early Race who killed the children of the Rain; the names of some people and the names of their places in Bushmanland and some details about them, 2) pp.7520v-7521v: why |han≠kass'o was told the story, 3) This story is found in Book VIII-17
Contributors
|han≠kass'o (Klein Jantje) (VIII)
Date
September 1878
Categories
Keywords
personal history (|han≠kass'o's) , personal history (the occasion on which the story 'The girl of the Early Race who killed the children of the Rain' was related to |han≠kass'o) , food (doings with) , food (people do not put away meat for children) , food (the treatment of meat) , food (and children) , food (and hunger) , food (what children are taught about) , teaching (doings with food) , teaching (putting away meat for children) , teaching (treatment of meat) , teaching (of children) , teaching (telling stories) , education (doings with food) , education (putting away meat for children) , education (treatment of meat) , education (of children) , education (telling stories) , Early Race (or First Bushmen) , Early Race (the occasion on which the story 'The girl of the Early Race who killed the children of the Rain' was related to |han≠kass'o) , |han≠kass'o (the occasion on which he was told the story of the girl who killed the children of the Rain') , |han≠kass'o (is educated about food) , |han≠kass'o (his personal history) , foolish (children are, and must be educated) , foolish (children do not understand) , children (people do not put away meat for them) , children (educating) , children (cry on account of their 'foolishness') , children (stories told to) , children (are told not to cry for food) , meat (not put away for children) , meat (treatment of) , hunger (an occasion in which |han≠kass'o was hungry) , hunger (children are taught not to cry on account of) , hunger (meat is not put away for children)
Story Pages
7520-7521


Authors: @msau42, @lichuqiang
This document presents a detailed design for making the default Kubernetes scheduler aware of volume topology constraints, and making the PersistentVolumeClaim (PVC) binding aware of scheduling decisions.
Volumes can have topology constraints that restrict the set of nodes that the volume can be accessed on. For example, a GCE PD can only be accessed from a single zone, and a local disk can only be accessed from a single node. In the future, there could be other topology domains, such as rack or region.
A pod that uses such a volume must be scheduled to a node that fits within the volume’s topology constraints. In addition, a pod can have further constraints and limitations, such as the pod’s resource requests (cpu, memory, etc), and pod/node affinity and anti-affinity policies.
Currently, the process of binding and provisioning volumes are done before a pod is scheduled. Therefore, it cannot take into account any of the pod’s other scheduling constraints. This makes it possible for the PV controller to bind a PVC to a PV or provision a PV with constraints that can make a pod unschedulable.
To solve the issue of initial volume binding and provisioning causing an impossible pod placement, volume binding and provisioning should be more tightly coupled with pod scheduling.
First, volumes need a way to express topology constraints against nodes. Today, it is done for zonal volumes by having explicit logic to process zone labels on the PersistentVolume. However, this is not easily extendable for volumes with other topology keys.
Instead, to support a generic specification, the PersistentVolume object will be extended with a new NodeAffinity field that specifies the constraints. It will closely mirror the existing NodeAffinity type used by Pods, but we will use a new type so that we will not be bound by existing and future Pod NodeAffinity semantics.
type PersistentVolumeSpec struct {
...
NodeAffinity *VolumeNodeAffinity
}
type VolumeNodeAffinity struct {
// The PersistentVolume can only be accessed by Nodes that meet
// these required constraints
Required *NodeSelector
}
The Required
field is a hard constraint and indicates that the PersistentVolume
can only be accessed from Nodes that satisfy the NodeSelector.
In the future, a Preferred
field can be added to handle soft node constraints with
weights, but will not be included in the initial implementation.
The advantages of this NodeAffinity field vs the existing method of using zone labels on the PV are: * We don’t need to expose first-class labels for every topology key. * Implementation does not need to be updated every time a new topology key is added to the cluster. * NodeSelector is able to express more complex topology with ANDs and ORs. * NodeAffinity aligns with how topology is represented with other Kubernetes resources.
Some downsides include: * You can have a proliferation of Node labels if you are running many different kinds of volume plugins, each with their own topology labeling scheme. * The NodeSelector is more expressive than what most storage providers will need. Most storage providers only need a single topology key with one or more domains. Non-hierarchical domains may present implementation challenges, and it will be difficult to express all the functionality of a NodeSelector in a non-Kubernetes specification like CSI.
In this example, the volume can only be accessed from nodes that have the
label key kubernetes.io/hostname
and label value node-1
.
apiVersion: v1
kind: PersistentVolume
metadata:
Name: local-volume-1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
local:
path: /mnt/disks/ssd1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node-1
In this example, the volume can only be accessed from nodes that have the
label key failure-domain.beta.kubernetes.io/zone
and label value
us-central1-a
.
apiVersion: v1
kind: PersistentVolume
metadata:
Name: zonal-volume-1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
gcePersistentDisk:
diskName: my-disk
fsType: ext4
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: failure-domain.beta.kubernetes.io/zone
operator: In
values:
- us-central1-a
In this example, the volume can only be accessed from nodes that have the
label key failure-domain.beta.kubernetes.io/zone
and label value
us-central1-a
OR us-central1-b
.
apiVersion: v1
kind: PersistentVolume
metadata:
Name: multi-zonal-volume-1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
gcePersistentDisk:
diskName: my-disk
fsType: ext4
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: failure-domain.beta.kubernetes.io/zone
operator: In
values:
- us-central1-a
- us-central1-b
In this example, the volume needs two labels to uniquely identify the topology.
apiVersion: v1
kind: PersistentVolume
metadata:
Name: rack-volume-1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
csi:
driver: my-rack-storage-driver
volumeHandle: my-vol
volumeAttributes:
foo: bar
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: failure-domain.beta.kubernetes.io/zone
operator: In
values:
- us-central1-a
- key: foo.io/rack
operator: In
values:
- rack1
Upgrading of zonal PVs to use the new PV.NodeAffinity API can be phased in as follows:
The zonal PV upgrade controller will convert existing PVs leveraging the existing zonal scheduling logic using labels to PV.NodeAffinity. It will keep the existing labels for backwards compatibility.
For example, this zonal volume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: zonal-volume-1
labels:
failure-domain.beta.kubernetes.io/zone: us-central1-a
failure-domain.beta.kubernetes.io/region: us-central1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
gcePersistentDisk:
diskName: my-disk
fsType: ext4
will be converted to:
apiVersion: v1
kind: PersistentVolume
metadata:
name: zonal-volume-1
labels:
failure-domain.beta.kubernetes.io/zone: us-central1-a
failure-domain.beta.kubernetes.io/region: us-central1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
gcePersistentDisk:
diskName: my-disk
fsType: ext4
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: failure-domain.beta.kubernetes.io/zone
operator: In
values:
- us-central1-a
- key: failure-domain.beta.kubernetes.io/region
operator: In
values:
- us-central1
The zone label for multi-zonal volumes need to be specially parsed.
For example, this multi-zonal volume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: multi-zonal-volume-1
labels:
failure-domain.beta.kubernetes.io/zone: us-central1-a__us-central1-b
failure-domain.beta.kubernetes.io/region: us-central1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
gcePersistentDisk:
diskName: my-disk
fsType: ext4
will be converted to:
apiVersion: v1
kind: PersistentVolume
metadata:
name: zonal-volume-1
labels:
failure-domain.beta.kubernetes.io/zone: us-central1-a__us-central1-b
failure-domain.beta.kubernetes.io/region: us-central1
spec:
capacity:
storage: 100Gi
storageClassName: my-class
gcePersistentDisk:
diskName: my-disk
fsType: ext4
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: failure-domain.beta.kubernetes.io/zone
operator: In
values:
- us-central1-a
- us-central1-b
- key: failure-domain.beta.kubernetes.io/region
operator: In
values:
- us-central1
For PVCs that are already bound to a PV with NodeAffinity, enforcement is
simple and will be done at two places:
* Scheduler predicate: if a Pod references a PVC that is bound to a PV with
NodeAffinity, the predicate will evaluate the Required
NodeSelector against
the Node’s labels to filter the nodes that the Pod can be schedule to. The
existing VolumeZone scheduling predicate will coexist with this new predicate
for several releases until PV NodeAffinity becomes GA and we can deprecate the
old predicate.
* Kubelet: PV NodeAffinity is verified against the Node when mounting PVs.
As mentioned in the problem statement, volume binding occurs without any input about a Pod’s scheduling constraints. To fix this, we will delay volume binding and provisioning until a Pod is created. This behavior change will be opt-in as a new StorageClass parameter.
Both binding decisions of: * Selecting a precreated PV with NodeAffinity * Dynamically provisioning a PV with NodeAffinity
will be considered by the scheduler, so that all of a Pod’s scheduling constraints can be evaluated at once.
The detailed design for implementing this new volume binding behavior will be described later in the scheduler integration section.
Today, volume binding occurs immediately once a PersistentVolumeClaim is created. In order for volume binding to take into account all of a pod’s other scheduling constraints, volume binding must be delayed until a Pod is being scheduled.
A new StorageClass field BindingMode
will be added to control the volume
binding behavior.
type StorageClass struct {
...
BindingMode *BindingMode
}
type BindingMode string
const (
BindingImmediate BindingMode = "Immediate"
BindingWaitForFirstConsumer BindingMode = "WaitForFirstConsumer"
)
BindingImmediate
is the default and current binding method.
This approach allows us to: * Introduce the new binding behavior gradually. * Maintain backwards compatibility without deprecation of previous behavior. Any automation that waits for PVCs to be bound before scheduling Pods will not break. * Support scenarios where volume provisioning for globally-accessible volume types could take a long time, where volume provisioning is a planned event well in advance of workload deployment.
However, it has a few downsides: * StorageClass will be required to get the new binding behavior, even if dynamic provisioning is not used (in the case of local storage). * We have to maintain two different code paths for volume binding. * We will be depending on the storage admin to correctly configure the StorageClasses for the volume types that need the new binding behavior. * User experience can be confusing because PVCs could have different binding behavior depending on the StorageClass configuration. We will mitigate this by adding a new PVC event to indicate if binding will follow the new behavior.
To make dynamic provisioning aware of pod scheduling decisions, delayed volume binding must also be enabled. The scheduler will pass its selected node to the dynamic provisioner, and the provisioner will create a volume in the topology domain that the selected node is part of. The domain depends on the volume plugin. Zonal volume plugins will create the volume in the zone where the selected node is in. The local volume plugin will create the volume on the selected node.
This is an example of the most common use case for provisioning zonal volumes. For this use case, the user’s specs are unchanged. Only one change to the StorageClass is needed to enable delayed volume binding.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/gce-pd
bindingMode: WaitForFirstConsumer
parameters:
type: pd-standard
For the common use case, volumes will be provisioned in whatever topology domain the scheduler has decided is best to run the workload. Users may impose further restrictions by setting label/node selectors, and pod affinity/anti-affinity policies on their Pods. All those policies will be taken into account when dynamically provisioning a volume.
While less common, administrators may want to further restrict what topology domains are available to a StorageClass. To support these administrator policies, an AllowedTopologies field can also be specified in the StorageClass to restrict the topology domains for dynamic provisioning. This is not expected to be a common use case, and there are some caveats, described below.
type StorageClass struct {
...
// Restrict the node topologies where volumes can be dynamically provisioned.
// Each volume plugin defines its own supported topology specifications.
// Each entry in AllowedTopologies is ORed.
AllowedTopologies []TopologySelector
}
type TopologySelector struct {
// Topology must meet all of the TopologySelectorLabelRequirements
// These requirements are ANDed.
MatchLabelExpressions []TopologySelectorLabelRequirement
}
// Topology requirement expressed as Node labels.
type TopologySelectorLabelRequirement struct{
// Topology label key
Key string
// Topology must match at least one of the label Values for the given label Key.
// Each entry in Values is ORed.
Values []string
}
A nil value means there are no topology restrictions. A scheduler predicate will evaluate a non-nil value when considering dynamic provisioning for a node.
The AllowedTopologies will also be provided to provisioners as a new field, detailed in the provisioner section. Provisioners can use the allowed topology information in the following scenarios: * StorageClass is using the default immediate binding mode. This is the legacy topology-unaware behavior. In this scenario, the volume could be provisioned in a domain that cannot run the Pod since it doesn’t take any scheduler input. * For volumes that span multiple domains, the AllowedTopologies can restrict those additional domains. However, special care must be taken to avoid specifying conflicting topology constraints in the Pod. For example, the administrator could restrict a multi-zonal volume to zones ‘zone1’ and ‘zone2’, but the Pod could have constraints that restrict it to ‘zone1’ and ‘zone3’. If ‘zone1’ fails, the Pod cannot be scheduled to the intended failover zone.
Note that if delayed binding is enabled and the volume spans only a single domain, then the AllowedTopologies can be ignored by the provisioner because the scheduler would have already taken it into account when it selects the node.
Kubernetes will leave validation and enforcement of the AllowedTopologies content up to the provisioner.
Support in the GCE PD and AWS EBS provisioners for the existing zone
and zones
parameters will not be deprecated due to the CSI in-tree migration requirement
of CSI plugins supporting all the previous functionality of in-tree plugins, and
CSI plugin versioning being independent of Kubernetes versions.
Admins must already create a new StorageClass with delayed volume binding to use this feature, so the documentation can encourage use of the AllowedTopologies instead of existing zone parameters. A plugin-specific admission controller can also validate that both zone and AllowedTopologies are not specified, although the CSI plugin should still be robust to handle this configuration error.
A new restricted TopologySelector is used here instead of reusing VolumeNodeAffinity because the provisioning operation requires allowed topologies to be explicitly enumerated, while NodeAffinity and NodeSelectors allow for non-explicit expressions of topology values (i.e., operators NotIn, Exists, DoesNotExist, Gt, Lt). It would be difficult for provisioners to evaluate all the expressions without having to enumerate all the Nodes in the cluster.
Another alternative is to have a list of allowed PV topologies, where each PV topology is exactly the same as a single PV topology. This expression can become very verbose for volume types that have multi-dimensional topologies or multiple selections. As an example, for a multi-zonal volume that needs to select two zones, if an administrator wants to restrict the selection to 4 zones, then all 6 combinations need to be explicitly enumerated.
Another alternative is to expand ResourceQuota to support topology constraints. However, ResourceQuota is currently only evaluated during admission, and not scheduling.
This example restricts the volumes provisioned to zones us-central1-a and us-central1-b.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: zonal-class
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- us-central1-a
- us-central1-b
This example restricts the volume’s primary and failover zones to us-central1-a, us-central1-b and us-central1-c. The regional PD provisioner will pick two out of the three zones to provision in.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: multi-zonal-class
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: regional-pd
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- us-central1-a
- us-central1-b
- us-central1-c
Topologies that are incompatible with the storage provider parameters will be enforced by the provisioner. For example, dynamic provisioning of regional PDs will fail if provisioning is restricted to fewer than two zones in all regions. This configuration will cause provisioning to fail:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: multi-zonal-class
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: regional-pd
allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- us-central1-a
This example restricts the volume’s topology to nodes that have the following labels:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: something-fancy
provisioner: rack-based-provisioner
parameters:
allowedTopologies:
- matchLabelExpressions:
- key: zone
values:
- us-central1-a
- key: rack
values:
- rack1
- matchLabelExpressions:
- key: zone
values:
- us-central1-b
- key: rack
values:
- rack1
- rack2
PersistentVolume.NodeAffinity and StorageClas.BindingMode fields will be controlled by the VolumeScheduling feature gate, and must be configured in the kube-scheduler, kube-controller-manager, and all kubelets.
The StorageClass.AllowedTopologies field will be controlled by the DynamicProvisioningScheduling feature gate, and must be configured in the kube-scheduler and kube-controller-manager.
For the new volume binding mode, the proposed new workflow is: 1. Admin pre-provisions PVs and/or StorageClasses. 2. User creates unbound PVC and there are no prebound PVs for it. 3. NEW: PVC binding and provisioning is delayed until a pod is created that references it. 4. User creates a pod that uses the PVC. 5. Pod starts to get processed by the scheduler. 6. NEW: A new predicate function, called CheckVolumeBinding, will process both bound and unbound PVCs of the Pod. It will validate the VolumeNodeAffinity for bound PVCs. For unbound PVCs, it will try to find matching PVs for that node based on the PV NodeAffinity. If there are no matching PVs, then it checks if dynamic provisioning is possible for that node based on StorageClass AllowedTopologies. 7. NEW: The scheduler continues to evaluate priorities. A new priority function, called PrioritizeVolumes, will get the PV matches per PVC per node, and compute a priority score based on various factors. 8. NEW: After evaluating all the existing predicates and priorities, the scheduler will pick a node, and call a new assume function, AssumePodVolumes, passing in the Node. The assume function will check if any binding or provisioning operations need to be done. If so, it will update the PV cache to mark the PVs with the chosen PVCs and queue the Pod for volume binding. 9. NEW: If PVC binding or provisioning is required, we do NOT AssumePod. Instead, a new bind function, BindPodVolumes, will be called asynchronously, passing in the selected node. The bind function will prebind the PV to the PVC, or trigger dynamic provisioning. Then, it always sends the Pod through the scheduler again for reasons explained later. 10. When a Pod makes a successful scheduler pass once all PVCs are bound, the scheduler assumes and binds the Pod to a Node. 11. Kubelet starts the Pod.
This diagram depicts the new additions to the default scheduler:
This new workflow will have the scheduler handle unbound PVCs by choosing PVs and prebinding them to the PVCs. The PV controller completes the binding transaction, handling it as a prebound PV scenario.
Prebound PVCs and PVs will still immediately be bound by the PV controller.
Manual recovery by the user will be required in following error conditions: * A Pod has multiple PVCs, and only a subset of them successfully bind.
The primary cause for these errors is if a user or external entity binds a PV between the time that the scheduler chose the PV and when the scheduler actually made the API update. Some workarounds to avoid these error conditions are to: * Prebind the PV instead. * Separate out volumes that the user prebinds from the volumes that are available for the system to choose from by StorageClass.
When the feature gate is enabled, the PV controller needs to skip binding unbound PVCs with VolumBindingWaitForFirstConsumer and no prebound PVs to let it come through the scheduler path.
Dynamic provisioning will also be skipped if
VolumBindingWaitForFirstConsumer is set. The scheduler will signal to
the PV controller to start dynamic provisioning by setting the
annSelectedNode
annotation in the PVC. If provisioning fails, the PV
controller can signal back to the scheduler to retry dynamic provisioning by
removing the annSelectedNode
annotation. For external provisioners, the
external provisioner needs to remove the annotation.
No other state machine changes are required. The PV controller continues to handle the remaining scenarios without any change.
The methods to find matching PVs for a claim and prebind PVs need to be refactored for use by the new scheduler functions.
The dynamic provisioning interfaces will be updated to pass in: * selectedNode, when late binding is enabled on the StorageClass * allowedTopologies, when it is set in the StorageClass
If selectedNode is set, the provisioner should get its appropriate topology labels from the Node object, and provision a volume based on those topology values. In the common use case for a volume supporting a single topology domain, if nodeName is set, then allowedTopologies can be ignored by the provisioner. However, multi-domain volume provisioners may still need to look at allowedTopologies to restrict the remaining domains.
In-tree provisioners:
Provision(selectedNode *v1.Node, allowedTopologies *storagev1.VolumeProvisioningTopology) (*v1.PersistentVolume, error)
External provisioners: * selectedNode will be represented by the PVC annotation “volume.alpha.kubernetes.io/selectedNode”. Value is the name of the node. * allowedTopologies must be obtained by looking at the StorageClass for the PVC.
Provisioners will need to be able to get Node and StorageClass objects.
A new predicate function checks all of a Pod’s unbound PVCs can be satisfied by existing PVs or dynamically provisioned PVs that are topologically-constrained to the Node.
CheckVolumeBinding(pod *v1.Pod, node *v1.Node) (canBeBound bool, err error)
After all the predicates run, there is a reduced set of Nodes that can fit a Pod. A new priority function will rank the remaining nodes based on the unbound PVCs and their matching PVs.
PrioritizeVolumes(pod *v1.Pod, filteredNodes HostPriorityList) (rankedNodes HostPriorityList, err error)
TODO (beta): figure out weights and exact calculation
Once all the predicates and priorities have run, then the scheduler picks a Node. Then we can bind or provision PVCs for that Node. For better scheduler performance, we’ll assume that the binding will likely succeed, and update the PV and PVC caches first. Then the actual binding API update will be made asynchronously, and the scheduler can continue processing other Pods.
For the alpha phase, the AssumePodVolumes function will be directly called by the scheduler. We’ll consider creating a generic scheduler interface in a subsequent phase.
AssumePodVolumes(pod *v1.pod, node *v1.node) (pvcbindingrequired bool, err error)
If AssumePodVolumes returns pvcBindingRequired, then Pod is queued for volume binding and provisioning. A separate go routine will process this queue and call the BindPodVolumes function.
Otherwise, we can continue with assuming and binding the Pod to the Node.
For the alpha phase, the BindPodVolumes function will be directly called by the scheduler. We’ll consider creating a generic scheduler interface in a subsequent phase.
BindPodVolumes(pod *v1.Pod, node *v1.Node) (err error)
PersistentVolume.ClaimRef
field.annSelectedNode
on the PVC.TODO: pv controller has a high resync frequency, do we need something similar for the scheduler too
Scheduler will need PV update permissions for prebinding pre-provisioned PVs, and PVC update permissions for triggering dynamic provisioning.
The CheckVolumeBinding predicate does not need to be re-evaluated for pod preemption. Preempting a pod that uses a PV will not free up capacity on that node because the PV lifecycle is independent of the Pod’s lifecycle.
Currently, there are a few existing scheduler predicates that require the PVC to be bound. The bound assumption needs to be changed in order to work with this new workflow.
TODO: how to handle race condition of PVCs becoming bound in the middle of running predicates? One possible way is to mark at the beginning of scheduling a Pod if all PVCs were bound. Then we can check if a second scheduler pass is needed.
This predicate checks the maximum number of PDs per node is not exceeded. It needs to be integrated into the binding decision so that we don’t bind or provision a PV if it’s going to cause the node to exceed the max PD limit. But until it is integrated, we need to make one more pass in the scheduler after all the PVCs are bound. The current copy of the predicate in the default scheduler has to remain to account for the already-bound volumes.
This predicate makes sure that the zone label on a PV matches the zone label of the node. If the volume is not bound, this predicate can be ignored, as the binding logic will take into account zone constraints on the PV.
However, this assumes that zonal PVs like GCE PDs and AWS EBS have been updated to use the new PV topology specification, which is not the case as of 1.8. So until those plugins are updated, the binding and provisioning decisions will be topology-unaware, and we need to make one more pass in the scheduler after all the PVCs are bound.
This predicate needs to remain in the default scheduler to handle the already-bound volumes using the old zonal labeling. It can be removed once that mechanism is deprecated and unsupported.
This is a new predicate added in 1.7 to handle the new PV node affinity. It evaluates the node affinity against the node’s labels to determine if the pod can be scheduled on that node. If the volume is not bound, this predicate can be ignored, as the binding logic will take into account the PV node affinity.
There are two new caches needed in the scheduler.
The first cache is for handling the PV/PVC API binding updates occurring
asynchronously with the main scheduler loop. AssumePodVolumes
needs to store
the updated API objects before BindPodVolumes
makes the API update, so
that future binding decisions will not choose any assumed PVs. In addition,
if the API update fails, the cached updates need to be reverted and restored
with the actual API object. The cache will return either the cached-only
object, or the informer object, whichever one is latest. Informer updates
will always override the cached-only object. The new predicate and priority
functions must get the objects from this cache instead of from the informer cache.
This cache only stores pointers to objects and most of the time will only
point to the informer object, so the memory footprint per object is small.
The second cache is for storing temporary state as the Pod goes from predicates to priorities and then assume. This all happens serially, so the cache can be cleared at the beginning of each pod scheduling loop. This cache is used for: * Indicating if all the PVCs are already bound at the beginning of the pod scheduling loop. This is to handle situations where volumes may have become bound in the middle of processing the predicates. We need to ensure that all the volume predicates are fully run once all PVCs are bound. * Caching PV matches per node decisions that the predicate had made. This is an optimization to avoid walking through all the PVs again in priority and assume functions. * Caching PVC dynamic provisioning decisions per node that the predicate had made.
Let: * N = number of nodes * V = number of all PVs * C = number of claims in a pod
C is expected to be very small (< 5) so shouldn’t factor in.
The current PV binding mechanism just walks through all the PVs once, so its running time O(V).
Without any optimizations, the new PV binding mechanism has to run through all PVs for every node, so its running time is O(NV).
A few optimizations can be made to improve the performance:
For the alpha phase, the optimizations are not required. However, they should be required for beta and GA.
The new bind logic that is invoked by the scheduler can be packaged in a few ways: * As a library to be directly called in the default scheduler * As a scheduler extender
We propose taking the library approach, as this method is simplest to release and deploy. Some downsides are: * The binding logic will be executed using two different caches, one in the scheduler process, and one in the PV controller process. There is the potential for more race conditions due to the caches being out of sync. * Refactoring the binding logic into a common library is more challenging because the scheduler’s cache and PV controller’s cache have different interfaces and private methods.
However, the cons of the extender approach outweighs the cons of the library approach.
With an extender approach, the PV controller could implement the scheduler extender HTTP endpoint, and the advantage is the binding logic triggered by the scheduler can share the same caches and state as the PV controller.
However, deployment of this scheduler extender in a master HA configuration is extremely complex. The scheduler has to be configured with the hostname or IP of the PV controller. In a HA setup, the active scheduler and active PV controller could run on the same, or different node, and the node can change at any time. Exporting a network endpoint in the controller manager process is unprecedented and there would be many additional features required, such as adding a mechanism to get a stable network name, adding authorization and access control, and dealing with DDOS attacks and other potential security issues. Adding to those challenges is the fact that there are countless ways for users to deploy Kubernetes.
With all this complexity, the library approach is the most feasible in a single release time frame, and aligns better with the current Kubernetes architecture.
The following use cases will not be supported for PVCs with a StorageClass with BindingWaitForFirstConsumer: * Directly setting Pod.Spec.NodeName * DaemonSets
These two use cases will bypass the default scheduler and thus will not trigger PV binding.
Custom schedulers, controllers and operators that handle pod scheduling and want to support this new volume binding mode will also need to handle the volume binding decision.
There are a few ways to take advantage of this feature: * Custom schedulers could be implemented through the scheduler extender interface. This allows the default scheduler to be run in addition to the custom scheduling logic. * The new code for this implementation will be packaged as a library to make it easier for custom schedulers to include in their own implementation.
In general, many advanced scheduling features have been added into the default scheduler, such that it is becoming more difficult to run without it.
HA masters adds a bit of complexity to this design because the active scheduler process and active controller-manager (PV controller) process can be on different nodes. That means during an HA master upgrade, the scheduler and controller-manager can be on different versions.
The scenario where the scheduler is newer than the PV controller is fine. PV binding will not be delayed and in successful scenarios, all PVCs will be bound before coming to the scheduler.
However, if the PV controller is newer than the scheduler, then PV binding will be delayed, and the scheduler does not have the logic to choose and prebind PVs. That will cause PVCs to remain unbound and the Pod will remain unschedulable.
TODO: One way to solve this is to have some new mechanism to feature gate system components based on versions. That way, the new feature is not turned on until all dependencies are at the required versions.
For alpha, this is not concerning, but it needs to be solved by GA.
An alternative design considered was to do the predicate, priority and bind functions all in one function at the end right before Pod binding, in order to reduce the number of passes we have to make over all the PVs. However, this design does not work well with pod preemption. Pod preemption needs to be able to evaluate if evicting a lower priority Pod will make a higher priority Pod schedulable, and it does this by re-evaluating predicates without the lower priority Pod.
If we had put the MatchUnboundPVCs predicate at the end, then pod preemption wouldn’t have an accurate filtered nodes list, and could end up preempting pods on a Node that the higher priority pod still cannot run on due to PVC requirements. For that reason, the PVC binding decision needs to be have its predicate function separated out and evaluated with the rest of the predicates.
The proposed design only has the scheduler initiating the binding transaction by prebinding the PV. An alternative is to pull the whole two-way binding transaction into the scheduler, but there are some complex scenarios that scheduler’s Pod sync loop cannot handle: * PVC and PV getting unexpectedly unbound or lost * PVC and PV state getting partially updated * PVC and PV deletion and cleanup
Handling these scenarios in the scheduler’s Pod sync loop is not possible, so they have to remain in the PV controller.
Instead of initiating PV binding in the scheduler, have the PV controller wait until the Pod has been scheduled to a Node, and then try to bind based on the chosen Node. A new scheduling predicate is still needed to filter and match the PVs (but not actually bind).
The advantages are: * Existing scenarios where scheduler is bypassed will work. * Custom schedulers will continue to work without any changes. * Most of the PV logic is still contained in the PV controller, simplifying HA upgrades.
Major downsides of this approach include: * Requires PV controller to watch Pods and potentially change its sync loop to operate on pods, in order to handle the multiple PVCs in a pod scenario. This is a potentially big change that would be hard to keep separate and feature-gated from the current PV logic. * Both scheduler and PV controller processes have to make the binding decision, but because they are done asynchronously, it is possible for them to choose different PVs. The scheduler has to cache its decision so that it won’t choose the same PV for another PVC. But by the time PV controller handles that PVC, it could choose a different PV than the scheduler. * Recovering from this inconsistent decision and syncing the two caches is very difficult. The scheduler could have made a cascading sequence of decisions based on the first inconsistent decision, and they would all have to somehow be fixed based on the real PVC/PV state. * If the scheduler process restarts, it loses all its in-memory PV decisions and can make a lot of wrong decisions after the restart. * All the volume scheduler predicates that require PVC to be bound will not get evaluated. To solve this, all the volume predicates need to also be built into the PV controller when matching possible PVs.
Looking into the future, with the potential for NUMA-aware scheduling, you could have a sub-scheduler on each node to handle the pod scheduling within a node. It could make sense to have the volume binding as part of this sub-scheduler, to make sure that the volume selected will have NUMA affinity with the rest of the resources that the pod requested.
However, there are potential security concerns because kubelet would need to see unbound PVs in order to bind them. For local storage, the PVs could be restricted to just that node, but for zonal storage, it could see all the PVs in that zone.
In addition, the sub-scheduler is just a thought at this point, and there are no concrete proposals in this area yet.
There are no plans to handle this, but a possible solution is presented here if the need arises in the future. Since the scheduler is serialized, a partial binding failure should be a rare occurrence and would only be caused if there is a user or other external entity also trying to bind the same volumes.
One possible approach to handle this is to rollback previously bound PVCs on error. However, volume binding cannot be blindly rolled back because there could be user’s data on the volumes.
For rollback, PersistentVolumeClaims will have a new status to indicate if it’s clean or dirty. For backwards compatibility, a nil value is defaulted to dirty. The PV controller will set the status to clean if the PV is Available and unbound. Kubelet will set the PV status to dirty during Pod admission, before adding the volume to the desired state.
If scheduling fails, update all bound PVCs with an annotation, “pv.kubernetes.io/rollback”. The PV controller will only unbind PVCs that are clean. Scheduler and kubelet needs to reject pods with PVCs that are undergoing rollback.
We can use the same rollback mechanism as above to handle this case. If kubelet rejects a pod, it will go back to scheduling. If the scheduler cannot find a node for the pod, then it will encounter scheduling failure and initiate the rollback.


@* * Copyright 2023 HM Revenue & Customs * * 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. *@ @import config.ApplicationConfig @import controllers.auth.AuthenticatedRequest @import views.html.helpers.{HeaderSection, PageHeading, P, Link} @import scala.concurrent.ExecutionContext @this( main: main, headerSection: HeaderSection, pageHeading: PageHeading, p: P, link: Link ) @( viewModel: view_models.Summary, actingAsAttorney: Option[ActingAsAttorneyFor] = None )( implicit request: AuthenticatedRequest[_], messages: Messages ) @beforeContent = { @headerSection( pageHeading = Messages("ats.index.html.title"), name = viewModel.forename + ' ' + viewModel.surname, utr = viewModel.utr, taxYear = viewModel.year, actingAsAttorney = actingAsAttorney ) } @main( pageTitle = Messages("ats.index.html.title"), actingAttorney = actingAsAttorney, beforeContentHtml = Some(beforeContent) ) { @pageHeading( text = "ats.index.html.title", elmId = "index-page-header", section = Messages("generic.tax_year_heading", viewModel.taxYearFrom, viewModel.taxYearTo) ) @p(Text(Messages("ats.index.html.lede")), elmId = Some("index-page-description"), classes = Some("govuk-body-l"))


Issue 72
Welcome to another issue of Haskell Weekly!  This is a weekly summary of what’s going on in its community.
Want to see something featured in Haskell Weekly? We love contributions! Tweet us at @HaskellWeekly or open a pull request.
Featured
-
Learning Haskell is a good idea, but you don’t have to do it alone. This repo brings together a number of resources for people who would like to start their own Haskell study groups but aren’t sure how to do it. Included here is advice for publicizing your group, guidelines for participants, a recommended schedule, and other resources.
-
What’s new in Cabal 2.0: Improved
new-build
, Backpack, foreign libraries and more!A couple of weeks ago we’ve quietly released versions 2.0 of both Cabal and
cabal-install
after approximately a year of development. The 2.0 release incorporates more than 1500 commits by 64 different contributors. This post serves as a formal release announcement and describes what’s new and improved in version 2.0. -
Coxswain: A type checker plugin for row types
I’ve been recently developing a Coxswain library that defines row types and implements row unification. I think the Haskell community is hungry for row types, especially records and variants. This wiki page outlines the basic design and intended use of the library, use cases I envision, and my open questions.
-
This blog post was inspired by some questions around writing efficient Conduit code, so I’ll try to address some of that directly at the end. The concepts, though, are general, and will transfer to not only other streaming libraries, but non-streaming data libraries too.
-
Migrating from RethinkDB to Postgres: An experience report
We switched from RethinkDB and ElasticSearch to Postgres, leaning heavily on Haskell in order to fill in some of the gaps quickly. The project was a success, and we’re very happy with the switch. Haskell has been invaluable for refactoring safely and confidently.
-
Benchmarks: GHCJS (Reflex, Miso) & Purescript (Pux, Thermite, Halogen)
Once we were over the infamous Haskell learning curve, we began looking for functional programming, immutability, and types everywhere! Given that one-third of our code runs in the browser, it is only a matter of time before we make the switch to typed FP for front end development as well. But, which language/framework/library should we use?
-
Yesterday, at the Haskell Implementers Workshop 2017 in Oxford, I gave a lightning talk titled “syntactic musings”, where I presented three possibly useful syntactic features that one might want to add to a language like Haskell.
-
I’m very proud to announce Squeal, a new database library for Haskell. Squeal is the culmination of my Haskell experience for the last 4 years. It’s been a fun road and I’ve learned so much from so many friends and strangers in the community. So Squeal is dedicated to them.
-
What I’m going to talk about here is an alternative which provides most of the benefits with a very low barrier to entry: splitting up IO into granular monad type classes.
-
Last mile for
cabal new-build
: First and last status updateTime flies! The Haskell Summer of Code is over, and this is my first and last status update. Last in the HSoC, but not in the project, as you’ll see. My goal was to bring
new-build
to a usable state, to eventually replace the old commands.
Jobs
Sadly we aren’t currently aware of any Haskell job openings. Are you looking to hire a Haskell developer? If so, consider advertising with us!
In brief
- A fully functional, fully functional webapp
- A media player in FLTKHS
- Debugging types: A stream of thought
- Deep learning and deep types: Tensor flow and dependent types
- Differentiating functional programs
- Exemplary Read World backend API built with Scotty
- Firefly: A dead simple HTTP framework
- Functional Geekery Episode 107: Julie Moronuki
- Improving on Vi Improved
- Monoids: What they are, why they are useful, and what they teach us about software
- neovim-ghci: Interactive Haskell development using GHCi in Neovim
- PureScript News: Issue 1
- Type of HTML: High performance, type safe HTML generation
Package of the week
This week’s package of the week is thank-you-stars, a command-line utility for starring the GitHub repositories of your dependencies.
Call for participation
- elm-repl: Command to “clean” the REPL output
- eta: Improve code for
get*()
series of methods for data constructors - purescript: Default method implementations
Events
- September 18: Vancouver’s Haskell Workshop


{% extends 'master.html' %} {% block content %}
Internal server error.
This is not your fault. You can try again later and hope we've fixed our stuff.


SELECT YOUR MODE
00:00
Score:0
LEADERBOARD
| rank | name | score |
|---|
ABOUT US
Team Uranium, led by Grace, Richard, and Jack, is an organization founded by their shared love of Pokemon. Their main goal is to bring fun and competition into the modern world with their new Pokemon memory game, PokeFlip.
ABOUT THE GAME
This app was created for Alchemy Code Lab 301 final project. It is a memory game. MUCH FUN. It utilizes PokeApi.co to obtain information and images on pokemon. A server was created to route requests for PokeApi, as well as GET/POST requests for scores.


|
|
|
|
Blended themes |
New blended theme implemented
in org.jvnet.substance.theme.SubstanceBlendBiTheme
is created based on two original themes (should be simple ones) and a
likeness coefficient. The colors of the blended theme will be the
interpolation of colors of the original themes (based on the likeness
coefficient). This example shows a mixed theme created from two blended themes, the first one a blend of Bottle Green and Lime Green and the second one a blend of Purple and Aqua:
new SubstanceMixBiTheme(new SubstanceBlendBiTheme(
And the result is: |
|
|
|
|
Saturated / desaturated themes |
New saturated theme implemented
in org.jvnet.substance.theme.SubstanceSaturatedTheme
is created based on a original theme and a saturation factor. The valid
range for the saturation factor is -1.0...1.0.
The positive values produce saturated colors (the higher the value, the more
saturated the colors will be), while the negative values produce desaturated
colors (the lower the value, the more desaturated the colors will be). Important note - do not create instances of saturated themes directly using the constructor. Use the
public SubstanceTheme saturate(double saturateFactor)
method available in org.jvnet.substance.theme.SubstanceTheme
to create properly saturated themes (this is true especially for non-simple themes).
Here are examples of a regular (Aqua theme), the desaturated version
(by 50 percent) and the saturated version (by 50 percent). Note that all theme
paintings (including disabled controls) are saturated: |
|
|
|
|
Complex themes |
The
org.jvnet.substance.theme.SubstanceComplexTheme
allows complete control over active, default and disabled color schemes
for application / single control.
The frame above was created under the following theme:
ColorScheme shiftBlue = new ShiftColorScheme(
Additional sample complex themes implemented in org.jvnet.substance.theme.ComplexThemeFactory: |
|
|
|
|
Prototype display value for combo popup |
New client property
SubstanceLookAndFeel.COMBO_POPUP_PROTOTYPE
defines the prototype display value for combo popup (useful for
narrow popups with values that span wide). The value should either be an
Object (in which case it's taken to be a model entry) or
an implementation of org.jvnet.substance.combo.ComboPopupPrototypeCallback.
Implementation of this interface that returns the widest entry is available in
org.jvnet.substance.combo.WidestComboPopupPrototype. Example of a combo with Object prototype display value for popup:
JComboBox comboProto1 = new JComboBox(new Object[] { "aa", "aaaaa",
And the result is (note that the last element is "cut off"): Example of a combo with Object prototype display value for popup:
JComboBox comboProto1 = new JComboBox(new Object[] { "aa", "aaaaa",
And the result is (note that the last element is "cut off"): Example of a combo with widest-entry prototype display value for popup:
JComboBox comboProto2 = new JComboBox(new Object[] { "aa", "aaaaa",
And the result is (note that the last element is "cut off"): Example of a combo with custom computation of prototype display value for popup:
JComboBox comboProto3 = new JComboBox(new Object[] { "aa", "aaaaa",
And the result is (last element is selected as prototype): |
|
|
|
|
Expanding per-component theme support |
The support for SubstanceLookAndFeel.THEME_PROPERTY
has been expanded to additional controls. Here are screenshots that show custom theme
(Bottle Green being used on a specific tabbed pane and on a specific
scroll pane (scroll bars and scroll buttons): |
|
|
|
|
Animated tab icons |
New client property
SubstanceLookAndFeel.TABBED_PANE_TAB_ANIMATION_KIND
defines the icon animation kind for a tab in tabbed pane. The value should be
one of the org.jvnet.substance.utils.SubstanceConstants.TabAnimationKind
enum (currently supported values are LOADING,
ERROR and WARNING).
In order to start the animation or change the animation kind to a different value,
put the client property to relevant value
on the specific tab component. In order to stop the animation, set the client
property to null. Note that while the animation starts immediately, the change and
stop are performed only at the end of the current animation cycle. Example of a tab with the original icon and the same tab under three different animation kinds: |
|
|
|
|
Additional title painter |
Added alternative title painter. Can be set using:
|
|
|
|
|
Tab paging |
Ctrl+Right Arrow and Ctrl+Left Arrow keyboard shortcuts provide thumbnail
paging of all tabs in the currently focused tabbed pane (unless consumed by any child
component). Pressing Ctrl+Right/Left Arrow opens three windows, one in the middle
that shows a large thumbnail of a tab (starts from the current tab), and two side windows
displaying small thumbnails of previous and next tabs. Each press on arrow key (while Ctrl is pressed)
moves the thumbnails forward / backward (cycling). Once Ctrl is released, the currently shown tab
(in the middle thumbnail window) is selected. |
|
|
|
|
"Select all on focus" on text components |
New client property
LafWidget.TEXT_SELECT_ON_FOCUS specifies that the
relevant text field(s) should select all text on focus gain. This property can be
set either on a specific text field or globally on UIManager
and should be either Boolean.TRUE or
Boolean.FALSE. Example of a text field before and
after focus gain: |
|
|
|
|
Edit context menu on text components |
New client property
LafWidget.TEXT_EDIT_CONTEXT_MENU specifies that the
relevant text field(s) should show edit context menu (with Cut / Copy / Paste /
Select All / Delete menu items enabled in correspondance with the text field enabled status,
text field selection and clipboard contents). This property can be
set either on a specific text field or globally on UIManager
and should be either Boolean.TRUE or
Boolean.FALSE. Example of a text field before and
after selecting some text: |
|
|
|
|
Drag-and-drop support on trees |
New client property
LafWidget.TREE_AUTO_DND_SUPPORT specifies that the
relevant tree(s) should provide DnD support. This property can be
set either on a specific text field or globally on UIManager
and should be either Boolean.TRUE or
Boolean.FALSE. Examples of a tree with DnD support
when drop is enabled (gson21 is being dragged) and a tree with DnD support
when drop is not enabled (gson11 is being dragged under one of its children): |
|
|
|
|
Tab overview dialog supports periodic refreshing |
The following two new methods have been added to
the org.jvnet.lafwidget.tabbed.TabPreviewPainter
class:
public boolean toUpdatePeriodically(JTabbedPane tabPane)
The default implementation of the first method return false (no periodic update). Custom implementation that wishes to periodically update the tab overview dialog should return true in the overriding implementation of the first method and the number of milliseconds between updates in the overriding implementation of the second method. Screenshots below show tab overview of a tabbed pane with 3 seconds period. The second screenshot shows the overview after some tabs have been added. The third screenshot shows the overview after some tabs have been deleted. |
|
|
|
|
Fractal-based watermarks |
Fractal-based
watermarks were added to the watermark pack.
Four new watermarks are Kaleidoscope,
Scriptures, Singularity
and Vortex (shown here under Dark
Violet theme): |
|
|
|
|
Custom buttons on decorated title panes |
The following two methods in
org.jvnet.substance.SubstanceLookAndFeel
allow adding and clearing custom buttons on decorated title panes of
frames, dialogs and internal frames:
public static void setRootPaneCustomTitleButtons(JRootPane rootPane,
Sample usage of this API that creates custom buttons that open an option dialog when clicked and have theme-consistent icons is:
TitleButtonInfo tbInfo1 = new TitleButtonInfo();
The title pane before calling the code above: The title pane after calling the code above: The tooltip on the first custom button: The first custom button clicked: |
|
|
|
|
Fade animations on lists |
Lists provide fade animations on
selections (both user-input and via API) and rollovers. The top part of the
screenshot below shows a list when element 6 is selected. The middle part
shows the fade animation when the element 7 is selected instead (note the
fade-out on element 6 and fade-in on element 7. The bottom
part shows the animation completed and element 7 selected. Note that as with other controls, setting the org.jvnet.lafwidget.LafWidget.ANIMATION_KIND client property on the list with one of the values of org.jvnet.lafwidget.utils.AnimationKind enum will change the fade animation speed. |
|
|
|
|
Improved rendering of drag bumps on toolbars |
The rendering of drag bumps on toolbars has been
improved to provide seamless "embedding" of drag bumps into the toolbar.
The first screenshot shows the toolbar drag bumps under 2.3, while the
second screenshot shows the toolbar drag bumps under 3.0. |
|
|
|
|
Added drag bumps on split pane dividers |
Drag bumps have been added to the split pane dividers: |
|
|
|
|
Improved painting of sliders |
The slider icons have been made smaller to produce more
compact control. The screenshot below shows sliders under versions 2.3 (top-left horizontal
and mid-right vertical) and 3.0 (bottom-left horizontal and right vertical): |
|
|
|
|
Configurable corner radius of toolbar buttons |
New client property
SubstanceLookAndFeel.CORNER_RADIUS
defines the corner radius of toolbar buttons. The value should be an instance of
Float and can be set on a single button, a single toolbar or globally on UIManager.
A screenshot below shows three buttons on the same toolbar, the first with the
default 2.0 corner radius, the second with custom 5.0 corner radius and the third
with custom 0.0 corner radius:
|
|
|
|
|
Improved painting of inverted themes |
The painting of inverted themes has been improved
to create more contrast and improve title color. The first image
below is pre-3.0 implementation, the second image is 3.0 implementation.
|
|
|


Cave Story+ installation path:
Select...
Please, select the path of your Cave Story+ installation.
Processing ...
0%


{{ event.name }} {{ event.start_date|date:"l, N j" }}–{{ event.end_date|date:"l, N j, Y" }} Kellogg Conference Hotel at Gallaudet University Washington, DC


User Profile
Settings
Logout
This is where the settings go
This is where the saved session ui goes
Filters
Filters
Home
New Search
Search Results
Visualize
Clusters
Report
Save Session
Tutorial
Filters
Refine
Clear Filters
Visualize
Refine By Year:
2000
2017
Facets
Refine By Topic
Topic
Documents
Refine By MeSH Term
MeSH Term
Documents
Refine By Institution
Institution
Documents
Refine By Document Origins
Document Origin
Documents
Results
Results
Datatable


View source
AdviceProto
A ProtocolMessage
class Checker
class CheckersEntry
checkers
repeated CheckersEntry checkers


Player
1
won!
New game!
2
2
Player 1:
Human
Newbie Computer
Aggressive Computer
Defensive Computer
Expert Computer
Player 2:
Human
Newbie Computer
Aggressive Computer
Defensive Computer
Expert Computer


Amazon Web Services (AWS) EC2 example
読む時間の目安: 6 分Follow along with this example to create a Dockerized Amazon Web Services (AWS) EC2 instance.
Step 1. Sign up for AWS and configure credentials
-
If you are not already an AWS user, sign up for AWS to create an account and get root access to EC2 cloud computers.
If you have an Amazon account, you can use it as your root user account.
-
Create an IAM (Identity and Access Management) administrator user, an admin group, and a key pair associated with a region.
From the AWS menus, select Services > IAM to get started.
To create machines on AWS, you must supply two parameters:
-
an AWS Access Key ID
-
an AWS Secret Access Key
See the AWS documentation on Setting Up with Amazon EC2. Follow the steps for “Create an IAM User” and “Create a Key Pair”.
-
Step 2. Use Machine to create the instance
-
Optionally, create an AWS credential file.
You can create an
~/.aws/credentials
file to hold your AWS keys so that you don’t need to type them every time you run thedocker-machine create
command. Here is an example of a credentials file.[default] aws_access_key_id = AKID1234567890 aws_secret_access_key = MY-SECRET-KEY
-
Run
docker-machine create
with theamazonec2
driver, credentials, inbound port, region, and a name for the new instance. For example:docker-machine create --driver amazonec2 --amazonec2-open-port 8000 --amazonec2-region us-west-1 aws-sandbox
Note: For all aws create flags, run:
docker-machine create --driver amazonec2 --help
Use aws credentials file
If you set your keys in a credentials file, the command looks like this to create an instance called
aws-sandbox
:docker-machine create --driver amazonec2 aws-sandbox
Specify keys at the command line
If you don’t have a credentials file, you can use the flags
--amazonec2-access-key
and--amazonec2-secret-key
on the command line:docker-machine create --driver amazonec2 --amazonec2-access-key AKI******* --amazonec2-secret-key 8T93C******* aws-sandbox
Expose a port
To expose an inbound port to the new machine, use the flag,
--amazonec2-open-port
:docker-machine create --driver amazonec2 --amazonec2-open-port 8000 aws-sandbox
Specify a region
By default, the driver creates new instances in region us-east-1 (North Virginia). You can specify a different region by using the
--amazonec2-region
flag. For example, create aws-sandbox in us-west-1 (Northern California).docker-machine create --driver amazonec2 --amazonec2-region us-west-1 aws-sandbox
-
Go to the AWS EC2 Dashboard to view the new instance.
Log into AWS with your IAM credentials, and navigate to your EC2 Running Instances.
Note: To ensure that you see your new instance, select your region from the menu in the upper right. If you did not specify a region as part of
docker-machine create
(with the optional--amazonec2-region
flag), select the default, US East (N. Virginia). -
Ensure that your new machine is the active host.
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS aws-sandbox * amazonec2 Running tcp://<IP_ADDRESS>:2376 v1.10.0 default - virtualbox Running tcp://<IP_ADDRESS>:2376 v1.10.0-rc4 digi-sandbox - digitalocean Running tcp://<IP_ADDRESS>:2376 v1.9.1
The new
aws-sandbox
instance is running and is the active host as indicated by the asterisk (*). When you create a new machine, your command shell automatically connects to it. You can also check active status by runningdocker-machine active
.Note: If your new machine is not the active host, connect to it by running
docker-machine env aws-sandbox
and the returned eval command:eval $(docker-machine env aws-sandbox)
. -
Inspect the remote host. For example,
docker-machine ip <machine>
returns the host IP address anddocker-machine inspect <machine>
lists all the details.$ docker-machine ip aws-sandbox <IP_ADDRESS> $ docker-machine inspect aws-sandbox { "ConfigVersion": 3, "Driver": { "IPAddress": "<IP_ADDRESS>", "MachineName": "aws-sandbox", "SSHUser": "ubuntu", "SSHPort": 22, ... } }
Step 3. Run Docker commands on the new instance
You can run docker commands from a local terminal to the active docker machine.
-
Run docker on the active docker machine by downloading and running the hello-world image:
docker run hello-world
-
Ensure that you ran hello-world on aws-sandbox (and not localhost or some other machine):
Log on to aws-sandbox with ssh and list all containers. You should see hello-world (with a recent exited status):
docker-machine ssh aws-sandbox sudo docker container ls -a exit
Log off aws-sandbox and unset this machine as active. Then list images again. You should not see hello-world (at least not with the same exited status):
eval $(docker-machine env -u) docker container ls -a
-
Reset aws-sandbox as the active docker machine:
eval $(docker-machine env aws-sandbox)
For a more interesting test, run a Dockerized webserver on your new machine.
Note: In this example, we use port
8000
which we added to the docker-machine AWS Security Group duringdocker-machine create
. To run your container on another port, update the security group to reflect that.In this example, the
-p
option is used to expose port 80 from thenginx
container and make it accessible on port8000
of theaws-sandbox
host:$ docker run -d -p 8000:80 --name webserver kitematic/hello-world-nginx Unable to find image 'kitematic/hello-world-nginx:latest' locally latest: Pulling from kitematic/hello-world-nginx a285d7f063ea: Pull complete 2d7baf27389b: Pull complete ... Digest: sha256:ec0ca6dcb034916784c988b4f2432716e2e92b995ac606e080c7a54b52b87066 Status: Downloaded newer image for kitematic/hello-world-nginx:latest 942dfb4a0eaae75bf26c9785ade4ff47ceb2ec2a152be82b9d7960e8b5777e65
In a web browser, go to
http://<host_ip>:8000
to bring up the webserver home page. You got the<host_ip>
from the output of thedocker-machine ip <machine>
command you ran in a previous step.
Step 4. Use Machine to remove the instance
To remove an instance and all of its containers and images, first stop the
machine, then use docker-machine rm
.
Where to go next
- Understand Machine concepts
- Docker Machine driver reference
- Docker Machine subcommand reference
- Provision a Docker Swarm cluster with Docker Machine


Back in time Julius Ceasar used this method to communicate with his generals! therefore,
The Caesar cipher is one of the earliest known and simplest ciphers.
It is a type of substitution cipher
in which each letter in the plaintext is 'shifted' a certain number of places down the alphabet.
For example, with a shift of 1, A would be replaced by B, B would become C, and so on.


Settings
Work interval
Relax interval
Long relax interval
Show timer in menubar
Launch on startup
Save
Cancel


Research activities are an important part of my job as a professor. For many years, I have conducted research independently and collaborated with other researchers, professors and students all over the world. My research has brought positive economic and academic impacts on both the national and the international levels. I have more than 20 publications and my research results have been built into commercial products. Currently I am actively involved in research activities such as academic conference organization, journal and conference paper reviewing and editing, and independent research. My research interests are e-learning, database, e-commerce, automated business negotiation and business process management.
I have been working with Professor Qinghua Zheng, a professor at Xi'an Jiaotong University for many years. I have visited Xi'an Jiaotong University twice after I gradated there in 1990. I have collaborated with him to write papers that have been published in conferences and journals. Recently, I have worked in an open source project called EAS (Electronic Attendance Sheet) to automatically sign up students when they are in classroom.
Database is my favorite topic since I was a graduate student at the University of Forida. My advisor Dr. Stanley Y. W. Su has been the director for the Database Center at the University of Flordia for many years. Right now, I am teaching database course at Union University. I am using MySQL as the database engine. In addition, I added PHP as an element of the database course. As a result, my course is really PHP/MySQL for undergraduates.
E-commerce (i.e., e-business) is a growth engine of the global economy. The dotcom crash does not invalidate the overall success of e-commerce. Actually the crash may help the long-term growth of e-commerce by getting rid of ill-formed technical ideas and unrealistic business plans. In order to ensure the healthy growth of e-commerce, there are many research issues to be tackled. My graduate research study at University of Florida and my post-doctoral research at IBM Thomas J. Watson Research Center are focused on E-commerce. Specifically, I have been pursuing research in privacy, BPM (Business Process Management), business negotiation and application integration.
Privacy is one of the most important reasons why people avoid e-commerce despite the huge benefits brought by e-commerce. In the conventional view of provider-consumer relationship, providers dictate what information consumers should provide and consumer is powerless. We argue that the consumer should have a way to negotiate with the provider about the nature of private information to be revealed. We call it “privacy negotiation”. In addition, we argue that we need a mechanism to monitor whether the providers actually comply with the “privacy policy” they have promised. We call it “privacy monitoring”. The combination of privacy negotiation and privacy monitoring becomes a powerful framework for information privacy protection. The initial result of the work has been published in IEEE Conference on Electronic Commerce (IEEE CEC 2004).
At IBM Thomas J. Watson Research Center, I have developed an XML Schema-based language called BPCL (Business Process Commitment Language) to specify business commitments. Unlike contracts and SLAs, BPCL includes commitments from multiple parties. Therefore, it is possible to perform global optimization. I also introduced the concept of KPI (Key Performance Indicator) to designate the things to be monitored and controlled. At the lower level, probe points are defined to provide the raw data needed to compute KPIs. Once KPIs and their associated threshold are available, business commitments can be defined based on these KPIs and thresholds. The language and associated components provide a scalable and extensible infrastructure for business process configuration, monitoring and control. Our research results have been published in several conference papers. Recently, we have positioned BPCL as the language for BAM (Business Activity Monitoring). According to the Gartner Group, the market for BAM will be one billion dollars in 2004. Many companies, including IBM, are aggressively pursuing this market.
In my Ph.D. dissertation “Automated E-Business Negotiation: Model, Life Cycle, and System Architecture,” I have proposed a negotiation model to link business negotiation policies with business negotiation strategies. I have also proposed a negotiation life cycle model in the dissertation. Although the models provide insights into business negotiation, there are still many open issues for business negotiations. How to conduct one-to-many negotiation based on many bi-lateral negotiations? How to coordinate these negotiations? How to simulate business negotiations? How to make concessions based on my own preference, counterpart’s actions, and the business environment?
My work for application integration is an extension of my Master’s thesis “Modeling and Validation of Business Object Documents for Application System Integration.” My master’s thesis is a rule-based approach to application integration. In the future, I would like to combine rule-based approach with agent-based approach to have a comprehensive framework for application integration.
Services computing is the evolution of Internet computing toward a services oriented architecture. By services oriented, we mean that businesses will purchase functionality in chunks. Rather than buying software for permanent in-house installation, companies will buy services as needed, much like they pay for an airline ticket as opposed to having a company jet on standby. My interests in services computing are how to apply services computing model in the BPM (Business Process Management) environment.
Computer Ethics deals with the impacts of computers, especially the Internet, on computer professionals and ordinary users. There are many aspects of the impact: social, legal, philosophical, constitutional, and economic. One aspect that I am especially interested in is the ethical issues related to E-commerce. Sometime ago, Amazon.com tested a differentiated pricing model. Although Amazaon.com later abandoned the test, but the ethical question remains: it is ethical for an online vendor to give different prices of the same kinds of items to different users? Sometime ago, a Marine was killed in Iraq and the Marine’s family wanted to have access to the email account. However, the family member’s request to Yahoo was rejected because of the privacy concern. Does Yahoo do a good thing, or it has it gone too far?
Being an assistant professor at a privileged university like Union University, I am greatly encouraged by the leaders of Union and the excellent quality of our students to further my research on E-business/E-commerce and other areas. Meanwhile, my teaching activities have been a great source of inspiration on my research studies.


source
You can read more about the start of my new Curation League.
46 accounts wanted to participate, thanks and welcome to my Curation League. There are three new participants from last week and nobody wanted to be removed. Thank you all for participating!
The curation rewards of the last seven days ending by 07.10.2018 6:00:00 UTC are included in this analysis.
Due the hardfork 20, the results will different this week. Let’s see what still was possible.
To enter the contest, please write a comment with add me
. A comment with remove me
will exclude an account from the contest. I will automatically scan the comments for building a participation list.
Winner for week 13
Gratulations to
- darkassassin for winning this round! 8.55 is a really great score!
- mys for the second place!
- amosbastian for the third place!
All three did a great job in selecting posts for curation!
Prices
There are some prices this week!
Result table
eff_sp
is the median effective Steem power of the account over last weeksum_weight
is the sum of all given votes. As a 100% votes can be given every 2.4 hours, this number should be close to 7000 (24 * 7 / 2.4 * 100
).sum_weight
is scaled by the voting power (Two 100% votes at a voting power of 50% are equal in terms of rshares to one 100% vote at a voting power of 100%).median weight
is the median vote weight over the last weekreward
is the collected curation rewards within a week divided by effective Steem Power and multiplied by 1000adj. rew.
isreward
whensum_weight
is smaller than 7000 andreward / sum_weight * 7000
otherwise. This assures that voting more than the optimum will not lead to a better ranking.
| # | account | eff_sp | sum weight | median weight | reward | adj. rew. |
|---|---|---|---|---|---|---|
| 1. | darkassassin | 56.8 | 3388 | 34.07 | 8.55 | 8.55 |
| 2. | mys | 3023.1 | 1714 | 0.50 | 2.54 | 2.54 |
| 3. | amosbastian | 2360.3 | 2859 | 7.06 | 2.38 | 2.38 |
| 4. | katamori | 196.4 | 2942 | 70.45 | 2.21 | 2.21 |
| 5. | cryptoandcoffee | 707.5 | 2851 | 38.04 | 1.95 | 1.95 |
| 6. | reazuliqbal | 1895.3 | 2192 | 2.00 | 1.88 | 1.88 |
| 7. | nervi | 718.4 | 3958 | 96.09 | 1.78 | 1.78 |
| 8. | pomocnik | 16.6 | 1678 | 88.60 | 1.75 | 1.75 |
| 9. | diosbot | 2483.5 | 3577 | 23.44 | 1.58 | 1.58 |
| 10. | the.nervi | 34.1 | 880 | 96.46 | 1.51 | 1.51 |
| 11. | sourovafrin | 1199.9 | 2241 | 96.50 | 1.44 | 1.44 |
| 12. | jacekw | 651.8 | 3049 | 18.52 | 1.41 | 1.41 |
| 13. | algo.coder | 1090.1 | 2434 | 46.56 | 1.08 | 1.08 |
| 14. | pataty69 | 1007.1 | 2688 | 20.01 | 1.01 | 1.01 |
| 15. | rose98734 | 29.6 | 4444 | 471.50 | 0.94 | 0.94 |
| 16. | the.foodini | 253.7 | 2039 | 87.59 | 0.93 | 0.93 |
| 17. | coretan.aksara | 61.0 | 960 | 55.56 | 0.93 | 0.93 |
| 18. | doughtaker | 821.8 | 3637 | 41.40 | 0.83 | 0.83 |
| 19. | espoem | 3595.2 | 1568 | 1.05 | 0.83 | 0.83 |
| 20. | maxpatternman | 778.6 | 3201 | 72.57 | 0.73 | 0.73 |
| 21. | isnochys | 1451.5 | 3112 | 9.49 | 0.72 | 0.72 |
| 22. | crypto-econom1st | 70.8 | 766 | 96.10 | 0.69 | 0.69 |
| 23. | jlordc | 1046.9 | 2738 | 43.54 | 0.66 | 0.66 |
| 24. | abh12345 | 26569.9 | 2927 | 4.47 | 0.66 | 0.66 |
| 25. | holger80 | 4068.3 | 2124 | 25.00 | 0.61 | 0.61 |
| 26. | emrebeyler | 11438.3 | 3587 | 35.60 | 0.58 | 0.58 |
| 27. | good-karma | 197385.3 | 3448 | 2.91 | 0.58 | 0.58 |
| 28. | grzyb77 | 236.8 | 2157 | 36.72 | 0.58 | 0.58 |
| 29. | cryptoyzzy | 124.0 | 1690 | 84.75 | 0.54 | 0.54 |
| 30. | aneukpineung78 | 141.5 | 1985 | 68.51 | 0.53 | 0.53 |
| 31. | yailinbel | 45.4 | 555 | 82.47 | 0.48 | 0.48 |
| 32. | yasu24 | 2238.5 | 2809 | 13.08 | 0.46 | 0.46 |
| 33. | rivalzzz | 1440.1 | 2764 | 43.03 | 0.44 | 0.44 |
| 34. | blanchy | 996.0 | 2028 | 37.03 | 0.39 | 0.39 |
| 35. | ajayyy | 238.5 | 2754 | 94.10 | 0.39 | 0.39 |
| 36. | codingdefined | 2133.4 | 2541 | 92.59 | 0.39 | 0.39 |
| 37. | flugschwein | 1237.1 | 2643 | 58.17 | 0.39 | 0.39 |
| 38. | annaburska | 1249.4 | 2643 | 95.62 | 0.36 | 0.36 |
| 39. | isarmoewe | 1189.9 | 2744 | 13.01 | 0.33 | 0.33 |
| 40. | celfmagazine | 5109.1 | 1069 | 98.08 | 0.31 | 0.31 |
| 41. | jpphotography | 1418.1 | 1953 | 24.55 | 0.22 | 0.22 |
| 42. | dexterdev | 199.2 | 1024 | 94.59 | 0.14 | 0.14 |
| 43. | hispeedimagins | 258.2 | 1009 | 95.03 | 0.13 | 0.13 |
| 44. | mariusclaassen | 15.1 | 46 | 46.05 | 0.07 | 0.07 |
| 45. | synergysteem | 153.6 | 99 | 99.29 | 0.05 | 0.05 |
| 46. | stevescoins | -1620.4 | 2903 | 30.86 | 0 | 0 |
Top 25 curation
This table shows the best ten curation rewards. The rewards are calculated by post curation reward divided by effective Steem Power and multiplied by 1000 divided by vote weight and multiplied by 100. Thus, the reward is normalized to a vote of 100%. Comments were skipped.
Keep in mind that the reward is normalized to a 100% vote at full vote power.
Top 25 Authors
This table shows the post authors which led to the highest post curation reward divided by effective Steem Power and multiplied by 1000. All rewards from all participating accounts were summed up. Comments were skipped
| reward | vote count | author | avatar |
|---|---|---|---|
| 1.082 | 9 | onepice | |
| 1.051 | 6 | zdrowie | |
| 0.991 | 1 | dk853311 | |
| 0.816 | 3 | eu-id | |
| 0.606 | 32 | holger80 | |
| 0.504 | 1 | btcfabian | |
| 0.492 | 2 | kingkrypto | |
| 0.481 | 3 | beer32 | |
| 0.471 | 2 | bitcademyfb | |
| 0.453 | 3 | see-it-feel-it | |
| 0.447 | 10 | dinver | |
| 0.402 | 14 | jacekw | |
| 0.401 | 3 | kamo.munshi | |
| 0.389 | 3 | razu788 | |
| 0.365 | 4 | mikehamm | |
| 0.352 | 2 | tandemus | |
| 0.320 | 23 | tarazkp | |
| 0.315 | 15 | bowess | |
| 0.313 | 1 | amreshchandra | |
| 0.299 | 5 | pannapysia | |
| 0.285 | 3 | winry | |
| 0.276 | 24 | trdaily | |
| 0.273 | 3 | lynxialicious | |
| 0.262 | 3 | focusnow | |
| 0.246 | 1 | iot-chain |
Top 3 curation
This table shows the top 3 curation posts of each participating account with at least a collected curation reward higher than 0.5.
The reward is calculated by post curation reward divided by effective Steem Power and multiplied by 1000 divided by vote weight and multiplied by 100. Thus, the reward is normalized to a vote of 100% at full vote power. Only posts are shown.
darkassassin
| reward | delay [min] | author | title |
|---|---|---|---|
| 2.631 | 3380.2 | dk853311 | Scaring children |
| 1.373 | 4900.4 | btcfabian | Universal Wallet se convierte en el ‘Primero’ en apoyar la ADA de Cardano en dispositivos móviles |
| 1.013 | 14.9 | kingkrypto | STEM Skills Can Increase Earnings & Employability - Here’s How to Develop Them |
mys
| reward | delay [min] | author | title |
|---|---|---|---|
| 1.293 | 5328.0 | miingjazz | ร้านยำมะม่วงปูม้า 60 บาท!!! |
| 1.261 | 12.9 | steemitpresident | I Love Seeing Mass Adoption!!…Lets See STEEM Now :) |
| 1.116 | 646.7 | steemitpresident | Dan Larimer Talking To Satoshi! |
amosbastian
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.788 | 4294.8 | olamatto | Inclusion of search lyrics, share to Lyrics and submit lyrics corrections |
| 0.768 | 10.5 | yasminafly | Utopian + DaVinci Witness Project - CONSUL English to Polish translation report |
| 0.497 | 10.8 | gotgame | Building A Content Management System Using The MEAN Stack - 5 (Front-End Development) |
katamori
| reward | delay [min] | author | title |
|---|---|---|---|
| 1.781 | 60.1 | onepice | Making Snake Game Using HTML 5 SVG With PabloJs (Part-2) |
| 0.227 | 20.7 | winry | mew mew fanart |
| 0.165 | 98.5 | gotgame | Building A Content Management System Using The MEAN Stack - 5 (Front-End Development) |
cryptoandcoffee
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.376 | 1469.5 | schmidt2015 | Prasaja bouquet |
| 0.375 | 16.9 | goldmatters | Mene Goes to the Beach |
| 0.313 | 14.8 | taskmaster4450 | The Hard Fork 20 Fiasco Was The Best Thing To Happen To STEEM AND Who Is Responsible!!!! |
reazuliqbal
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.180 | 14.1 | dedicatedguy | [Translation][Spanish] Node.js (1083 words) (Part 13) |
| 0.175 | 14.5 | akireuna | Verdaccio [Translation into Italian, 1041 words]-part 5 |
| 0.175 | 14.3 | cremisi | Node.js Translation to Spanish - (1184 words) (Part 11) |
nervi
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.319 | 39.1 | holger80 | How strong are the RC costs changing? |
| 0.299 | 15.7 | maxofp2p | [PL/ENG] MAXOFP2P LIVESTREAM |
| 0.246 | 15.2 | zdrowie | Dwukolorowa Chałwa, czyli w Poszukiwaniu Równowagi ☯ZDROWY PRZEPIS 🍮 |
pomocnik
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.276 | 22.4 | pannapysia | 25 września – Dzień Budowlańca |
| 0.226 | 15.4 | dumboandgimbo | 🧐czym karmi się próżność |
| 0.147 | 115.6 | mokambo | Jestem recydywistom! |
diosbot
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.436 | 15.8 | trampmad | “Dawanie otwiera drogę do otrzymywania” - rozwinięcie |
| 0.343 | 15.4 | koteks | Pożar w szpitalu psychiatrycznym w Górnej Grupie 55 chorych spłoneło |
| 0.297 | 15.9 | simson1 | Archaik. |
the.nervi
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.847 | 9.6 | zdrowie | Dwukolorowa Chałwa, czyli w Poszukiwaniu Równowagi ☯ZDROWY PRZEPIS 🍮 |
| 0.389 | 17.0 | carrioner | Carrioner Stream Funny Moments #2 |
| 0.243 | 14.2 | lynxialicious | Dzień dobry tygrysie azjatycki, siemka Miasto Lwa i czołem Merlion, czyli Singapur część 1 |
sourovafrin
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.653 | 14.2 | mikehamm | Judge Brett Kavanaugh Is Not On Trial |
| 0.579 | 14.2 | dinver | Stingray was filmed giving birth on a beach. |
| 0.311 | 14.2 | dinver | War never changes. |
jacekw
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.497 | 66.5 | dumboandgimbo | Jesiennie🍁🍂🍁 naturalne 🌳 🤗 |
| 0.408 | 168.0 | yum-yum | Dlaczego Żmij ? |
| 0.406 | 11.7 | xuanito | Wołowina po burgundzku ✨ |
algo.coder
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.452 | 28.9 | deathcross | Wo die meisten Gastarbeiter Deutsche sind |
| 0.114 | 28.9 | bilimkurgu | Philip K. Dick’in Öyküleri |
| 0.114 | 28.9 | igorkk | White willow is worthy of attention!!! |
pataty69
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.275 | 31.9 | sneakin | MSVEX MKIII BOBCAT - A Boat On Top Of A Submersible |
| 0.155 | 11.9 | navx | Node.js Translation to Spanish - 1073 words (Part 13) |
| 0.127 | 25.2 | esteliopadilla | Today’s song El Mono (Monkey). Venezuelan traditional-popular music |
rose98734
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.055 | 184.8 | mindtrap | Is this as bad as it looks? |
| 0.007 | 1793.5 | teatree | The EU’s share of world GDP is shrinking |
| 0.007 | 834.4 | alyssas | Investors guide to Brexit and the Travel Industry |
the.foodini
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.473 | 14.2 | see-it-feel-it | 🐱 #SteemChallenge - Check how many cats I fed for 5 STEEM! |
| 0.142 | 27.9 | foodini | 💰 APARTAMENT NA WAKACJE ZA 800 ZŁ MIESIĘCZNIE? POZNAJ 5 PORAD! |
| 0.124 | 12.3 | waran | Chodź, pokażę Ci kotki w piwnicy #1 |
coretan.aksara
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.806 | 61.4 | eu-id | Result - eU-id Writting Challenge Contest#1- “Pengalaman Menggunakan Esteem App/Esteem Surfer” |
| 0.196 | 7.6 | zaim4d1 | Ulography #16 : Sunset In The City Of Banda Baro |
| 0.172 | 52.7 | wandairawan | Photography // Dragonfly - The result of a shot with a distance of 5 meters |
doughtaker
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.148 | 5317.1 | bxute | 1Ramp Android Updates - The App Got a New Look, try it out! |
| 0.093 | 1463.5 | hiremani | Implemented Home Screen widget Feature to Travel Mate Android app |
| 0.090 | 517.4 | ksolymosi | Hi Eeveryone! It’s Global Saturday, please share your recipes! |
espoem
| reward | delay [min] | author | title |
|---|---|---|---|
| 4.037 | 673.8 | sugarfix | Sense is moving to EOS - WhatsApp on the Blockchain? |
| 2.021 | 611.5 | metametheus | Give A Little Bit |
| 2.011 | 760.2 | shirano | Soar Recent News and Events , Soar Upcoming Public Sale |
maxpatternman
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.127 | 20.4 | peppermint24 | ➽The Question is: What is a Mana Mana? |
| 0.108 | 6.5 | felixxx | HF 20 A BIG SUCCESS |
| 0.101 | 22.0 | holger80 | beempy.com - beempy for your browser |
isnochys
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.530 | 15.9 | trdaily | STEEM ve SBD - Günlük rapor (2018-09-28) |
| 0.381 | 16.1 | trdaily | #tr etiketi ve trend etiketler içerisindeki durumu (2018-09-27) |
| 0.365 | 15.3 | trdaily | STEEM ve SBD - Günlük rapor (2018-09-29) |
crypto-econom1st
| reward | delay [min] | author | title |
|---|---|---|---|
| 1.902 | 27.1 | beer32 | บุฟเฟ่ต์ ซีฟู๊ด ปิ้งย่าง |
| 0.138 | 15.8 | futuremind | SBD’s Are Back. |
| 0.070 | 14.0 | msearles | Interesting piece! |
jlordc
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.307 | 60.5 | culgin | Facebook Security Breach and More Thoughts on HF20 |
| 0.152 | 14.3 | filotasriza3 | I am Leaving For The Weekend & Happy HF20 :P |
| 0.103 | 302.7 | ascheriit | Seto no Hanayome: Timeless Comedy |
abh12345
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.312 | 11.1 | tobixen | Stockholm: Norrström, Söderström and Slussen |
| 0.293 | 11.2 | taskmaster4450 | Connecting The Dots: Resource Credits Will Make STEEM A Lot More Valuable |
| 0.230 | 13.8 | sniffnscurry | SNIFF & SCURRY POSTCARD: GONE SURFING! |
holger80
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.226 | 12.4 | josephsavage | My thoughts on HF20, RCs, SMTs, and the future of Steem |
| 0.074 | 31.8 | cakemonster | STEEM MONSTERS: The Cyclops Is Between A Rock and A Hard Place! |
| 0.065 | 831.6 | gigatoride | SteemRadar: A radar that will never miss a bit in Steem blockchain. |
emrebeyler
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.129 | 195.0 | gigatoride | SteemRadar: A radar that will never miss a bit in Steem blockchain. |
| 0.062 | 24.1 | muratkbesiroglu | Traditional Miniature Art |
| 0.048 | 17.6 | miti | ICO: come individuare una truffa. |
good-karma
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.328 | 1510.3 | yellowcard | Camera comparison ~ vivo v11 pro vs oppo f9 pro |
| 0.128 | 10.4 | esteemapp.rus | Наш руководитель продуктов eSteem |
| 0.091 | 202.3 | swf | Autumn marathon on Mount Petros: part three (top and descent). |
grzyb77
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.116 | 24.2 | foodini | 💰 APARTAMENT NA WAKACJE ZA 800 ZŁ MIESIĘCZNIE? POZNAJ 5 PORAD! |
| 0.105 | 24.1 | franino | Jak Napoleon Bonaparte zdradził swoją ojczyznę…Korsykę. |
| 0.082 | 24.2 | andzi76 | Kalendarium Muzyczne - 30 września |
cryptoyzzy
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.113 | 23.2 | crunchymomqc | Etsy fait au Québec - Que fais-je de mes journées ? |
| 0.078 | 24.2 | cryptogainsfr | Airdrops update #39 |
| 0.061 | 18.2 | ancolie | Perdu en forêt ? |
aneukpineung78
| reward | delay [min] | author | title |
|---|---|---|---|
| 0.264 | 6.9 | abh12345 | First Post Following HF 20… Welcome back! |
| 0.141 | 20.1 | xawi | Sunday Binge in @xawi’s Kitchen👩🍳 Fruit trifle custard and jelly😍😋 |
| 0.071 | 20.1 | ifeoluwa88 | HOW TO STYLE MIDI SKIRT |
If you want to participate, just drop a comment with add me
.
This page is synchronized from the post: ‘holger80`s Curation League - week 13 - STEEM prizes available!’