text:
Q: How to add precedence constraints to LP when time is used as an index in a Pulp variable? Dear fellow programmers,
I want to know how to schedule activities based on availability (see input).
There are people available on days where the number of available hours is more than zero. We want our schedule to be as close to zero as possible (efficient planning). This means that when we schedule a new project for a client that takes five activities, we need our algorithm to reduce the number of available hours by the duration of the activity for that particular project day. Some activities take 0,5 hours to complete and others 1 hour to complete. I tried to formulate an initial version of the model with the variables A, B, C, D, and E as the activities in the right sequence (yet) with only one employee (called '0' since I will add more employees in the future, but I do not want to start with a too complex situation in the beginning) and the day that the activity is scheduled. For the first and fifth activity, the patient is allowed to give a preference. For the second, third and fourth activity, the activity can be scheduled any time. The availability variable is here a list of the available hours of employee AW (see input).
days = range(1,32)
preferences = [4,11,18,25]

A = LpVariable.dicts(name = "Intake", indexs = [(0, v) for v in preferences], lowBound = 0, upBound = 1, cat = "Continuous")
B = LpVariable.dicts(name = "Write a transcript of intake", indexs = [(0, d) for d in days], lowBound = 0, upBound = 1, cat =  "Continuous")
C = LpVariable.dicts(name = "Create treatment plan", indexs = [(0, d) for d in days], lowBound = 0, upBound = 0.5, cat = "Continuous")
D = LpVariable.dicts(name = "Schedule a meeting", indexs = [(0, d) for d in days], lowBound = 0, upBound = 0.5, cat = "Continuous")
E = LpVariable.dicts(name = "Discuss treatment plan with patiënt", indexs = [(0, v) for v in preferences], lowBound = 0, upBound = 1, cat = "Continuous")

############################## OBJECTIVE ##############################################

# define the model to maximize the workday
schedule = LpProblem(name="Maximize_Schedule", sense=LpMaximize)

schedule += lpSum(A[(0,v)] for v in preferences) + lpSum(B[(0,d)] for d in days) + lpSum(C[(0,d)] for d in days) + lpSum(D[(0,d)] for d in days) + lpSum(E[(0,v)] for v in preferences)

############################## CONSTRAINTS ############################################

# Less than available hours

for v in preferences:
    schedule += A[0,v] + B[0,v] + C[0,v] + D[0,v] + E[0,v] <= availability[v-1]

for d in days:
    schedule += B[0,d] + C[0,d] + D[0,d] <= availability[d-1]

# There is no more than 4 hours to divide

schedule += lpSum(A[(0,v)] for v in preferences) + lpSum(B[(0,d)] for d in days) + lpSum(C[(0,d)] for d in days) + lpSum(D[(0,d)] for d in days) + lpSum(E[(0,v)] for v in preferences) <= 4

# Every activity must be in the solution

schedule += lpSum(A[(0,v)] for v in preferences) == 1

schedule += lpSum(B[(0,d)] for d in days) == 1

schedule += lpSum(C[(0,d)] for d in days) == 0.5

schedule += lpSum(D[(0,d)] for d in days) == 0.5

schedule += lpSum(E[(0,v)] for v in preferences) == 1

# An activity cannot be less than zero

for v in preferences:
    schedule += A[(0,v)] >= 0
    schedule += E[(0,v)] >= 0

for d in days:
    schedule += B[(0,d)] >= 0
    schedule += C[(0,d)] >= 0
    schedule += D[(0,d)] >= 0

status = schedule.solve()

The model provides me with the following output:
Create_treatment_plan_(0,_4) 0.5
Discuss_treatment_plan_with_patiënt_(0,_11) 1.0
Intake_(0,_11) 1.0
Schedule_a_meeting_(0,_4) 0.5
Write_a_transcript_of_intake_(0,_4) 1.0

Already a lot of constraints are satisfied, but we can see that there is no precedence in the outcome ('intake' is planned before 'Write a transcript of intake'). I have no idea how to implement a precedence constraint in my LP since I am not working with starting time and ending time but with availability. Could you please help me looking for a solution? On the bottom of this page you can find the full version of the my LP formulation in Pulp.
Kind regards,
Tom
Maximize_Schedule:
MAXIMIZE
1*Create_treatment_plan_(0,_1) + 1*Create_treatment_plan_(0,_10) + 1*Create_treatment_plan_(0,_11) + 1*Create_treatment_plan_(0,_12) + 1*Create_treatment_plan_(0,_13) + 1*Create_treatment_plan_(0,_14) + 1*Create_treatment_plan_(0,_15) + 1*Create_treatment_plan_(0,_16) + 1*Create_treatment_plan_(0,_17) + 1*Create_treatment_plan_(0,_18) + 1*Create_treatment_plan_(0,_19) + 1*Create_treatment_plan_(0,_2) + 1*Create_treatment_plan_(0,_20) + 1*Create_treatment_plan_(0,_21) + 1*Create_treatment_plan_(0,_22) + 1*Create_treatment_plan_(0,_23) + 1*Create_treatment_plan_(0,_24) + 1*Create_treatment_plan_(0,_25) + 1*Create_treatment_plan_(0,_26) + 1*Create_treatment_plan_(0,_27) + 1*Create_treatment_plan_(0,_28) + 1*Create_treatment_plan_(0,_29) + 1*Create_treatment_plan_(0,_3) + 1*Create_treatment_plan_(0,_30) + 1*Create_treatment_plan_(0,_31) + 1*Create_treatment_plan_(0,_4) + 1*Create_treatment_plan_(0,_5) + 1*Create_treatment_plan_(0,_6) + 1*Create_treatment_plan_(0,_7) + 1*Create_treatment_plan_(0,_8) + 1*Create_treatment_plan_(0,_9) + 1*Discuss_treatment_plan_with_patiënt_(0,_11) + 1*Discuss_treatment_plan_with_patiënt_(0,_18) + 1*Discuss_treatment_plan_with_patiënt_(0,_25) + 1*Discuss_treatment_plan_with_patiënt_(0,_4) + 1*Intake_(0,_11) + 1*Intake_(0,_18) + 1*Intake_(0,_25) + 1*Intake_(0,_4) + 1*Schedule_a_meeting_(0,_1) + 1*Schedule_a_meeting_(0,_10) + 1*Schedule_a_meeting_(0,_11) + 1*Schedule_a_meeting_(0,_12) + 1*Schedule_a_meeting_(0,_13) + 1*Schedule_a_meeting_(0,_14) + 1*Schedule_a_meeting_(0,_15) + 1*Schedule_a_meeting_(0,_16) + 1*Schedule_a_meeting_(0,_17) + 1*Schedule_a_meeting_(0,_18) + 1*Schedule_a_meeting_(0,_19) + 1*Schedule_a_meeting_(0,_2) + 1*Schedule_a_meeting_(0,_20) + 1*Schedule_a_meeting_(0,_21) + 1*Schedule_a_meeting_(0,_22) + 1*Schedule_a_meeting_(0,_23) + 1*Schedule_a_meeting_(0,_24) + 1*Schedule_a_meeting_(0,_25) + 1*Schedule_a_meeting_(0,_26) + 1*Schedule_a_meeting_(0,_27) + 1*Schedule_a_meeting_(0,_28) + 1*Schedule_a_meeting_(0,_29) + 1*Schedule_a_meeting_(0,_3) + 1*Schedule_a_meeting_(0,_30) + 1*Schedule_a_meeting_(0,_31) + 1*Schedule_a_meeting_(0,_4) + 1*Schedule_a_meeting_(0,_5) + 1*Schedule_a_meeting_(0,_6) + 1*Schedule_a_meeting_(0,_7) + 1*Schedule_a_meeting_(0,_8) + 1*Schedule_a_meeting_(0,_9) + 1*Write_a_transcript_of_intake_(0,_1) + 1*Write_a_transcript_of_intake_(0,_10) + 1*Write_a_transcript_of_intake_(0,_11) + 1*Write_a_transcript_of_intake_(0,_12) + 1*Write_a_transcript_of_intake_(0,_13) + 1*Write_a_transcript_of_intake_(0,_14) + 1*Write_a_transcript_of_intake_(0,_15) + 1*Write_a_transcript_of_intake_(0,_16) + 1*Write_a_transcript_of_intake_(0,_17) + 1*Write_a_transcript_of_intake_(0,_18) + 1*Write_a_transcript_of_intake_(0,_19) + 1*Write_a_transcript_of_intake_(0,_2) + 1*Write_a_transcript_of_intake_(0,_20) + 1*Write_a_transcript_of_intake_(0,_21) + 1*Write_a_transcript_of_intake_(0,_22) + 1*Write_a_transcript_of_intake_(0,_23) + 1*Write_a_transcript_of_intake_(0,_24) + 1*Write_a_transcript_of_intake_(0,_25) + 1*Write_a_transcript_of_intake_(0,_26) + 1*Write_a_transcript_of_intake_(0,_27) + 1*Write_a_transcript_of_intake_(0,_28) + 1*Write_a_transcript_of_intake_(0,_29) + 1*Write_a_transcript_of_intake_(0,_3) + 1*Write_a_transcript_of_intake_(0,_30) + 1*Write_a_transcript_of_intake_(0,_31) + 1*Write_a_transcript_of_intake_(0,_4) + 1*Write_a_transcript_of_intake_(0,_5) + 1*Write_a_transcript_of_intake_(0,_6) + 1*Write_a_transcript_of_intake_(0,_7) + 1*Write_a_transcript_of_intake_(0,_8) + 1*Write_a_transcript_of_intake_(0,_9) + 0
SUBJECT TO
_C1: Create_treatment_plan_(0,_4) + Discuss_treatment_plan_with_patiënt_(0,_4)
 + Intake_(0,_4) + Schedule_a_meeting_(0,_4)
 + Write_a_transcript_of_intake_(0,_4) <= 3

_C2: Create_treatment_plan_(0,_11)
 + Discuss_treatment_plan_with_patiënt_(0,_11) + Intake_(0,_11)
 + Schedule_a_meeting_(0,_11) + Write_a_transcript_of_intake_(0,_11) <= 4

_C3: Create_treatment_plan_(0,_18)
 + Discuss_treatment_plan_with_patiënt_(0,_18) + Intake_(0,_18)
 + Schedule_a_meeting_(0,_18) + Write_a_transcript_of_intake_(0,_18) <= 5

_C4: Create_treatment_plan_(0,_25)
 + Discuss_treatment_plan_with_patiënt_(0,_25) + Intake_(0,_25)
 + Schedule_a_meeting_(0,_25) + Write_a_transcript_of_intake_(0,_25) <= 6

_C5: Create_treatment_plan_(0,_1) + Schedule_a_meeting_(0,_1)
 + Write_a_transcript_of_intake_(0,_1) <= 0

_C6: Create_treatment_plan_(0,_2) + Schedule_a_meeting_(0,_2)
 + Write_a_transcript_of_intake_(0,_2) <= 5

_C7: Create_treatment_plan_(0,_3) + Schedule_a_meeting_(0,_3)
 + Write_a_transcript_of_intake_(0,_3) <= 7

_C8: Create_treatment_plan_(0,_4) + Schedule_a_meeting_(0,_4)
 + Write_a_transcript_of_intake_(0,_4) <= 3

_C9: Create_treatment_plan_(0,_5) + Schedule_a_meeting_(0,_5)
 + Write_a_transcript_of_intake_(0,_5) <= 0

_C10: Create_treatment_plan_(0,_6) + Schedule_a_meeting_(0,_6)
 + Write_a_transcript_of_intake_(0,_6) <= 0

_C11: Create_treatment_plan_(0,_7) + Schedule_a_meeting_(0,_7)
 + Write_a_transcript_of_intake_(0,_7) <= 6

_C12: Create_treatment_plan_(0,_8) + Schedule_a_meeting_(0,_8)
 + Write_a_transcript_of_intake_(0,_8) <= 0

_C13: Create_treatment_plan_(0,_9) + Schedule_a_meeting_(0,_9)
 + Write_a_transcript_of_intake_(0,_9) <= 6

_C14: Create_treatment_plan_(0,_10) + Schedule_a_meeting_(0,_10)
 + Write_a_transcript_of_intake_(0,_10) <= 1

_C15: Create_treatment_plan_(0,_11) + Schedule_a_meeting_(0,_11)
 + Write_a_transcript_of_intake_(0,_11) <= 4

_C16: Create_treatment_plan_(0,_12) + Schedule_a_meeting_(0,_12)
 + Write_a_transcript_of_intake_(0,_12) <= 0

_C17: Create_treatment_plan_(0,_13) + Schedule_a_meeting_(0,_13)
 + Write_a_transcript_of_intake_(0,_13) <= 0

_C18: Create_treatment_plan_(0,_14) + Schedule_a_meeting_(0,_14)
 + Write_a_transcript_of_intake_(0,_14) <= 4

_C19: Create_treatment_plan_(0,_15) + Schedule_a_meeting_(0,_15)
 + Write_a_transcript_of_intake_(0,_15) <= 0

_C20: Create_treatment_plan_(0,_16) + Schedule_a_meeting_(0,_16)
 + Write_a_transcript_of_intake_(0,_16) <= 4

_C21: Create_treatment_plan_(0,_17) + Schedule_a_meeting_(0,_17)
 + Write_a_transcript_of_intake_(0,_17) <= 7

_C22: Create_treatment_plan_(0,_18) + Schedule_a_meeting_(0,_18)
 + Write_a_transcript_of_intake_(0,_18) <= 5

_C23: Create_treatment_plan_(0,_19) + Schedule_a_meeting_(0,_19)
 + Write_a_transcript_of_intake_(0,_19) <= 0

_C24: Create_treatment_plan_(0,_20) + Schedule_a_meeting_(0,_20)
 + Write_a_transcript_of_intake_(0,_20) <= 0

_C25: Create_treatment_plan_(0,_21) + Schedule_a_meeting_(0,_21)
 + Write_a_transcript_of_intake_(0,_21) <= 4

_C26: Create_treatment_plan_(0,_22) + Schedule_a_meeting_(0,_22)
 + Write_a_transcript_of_intake_(0,_22) <= 0

_C27: Create_treatment_plan_(0,_23) + Schedule_a_meeting_(0,_23)
 + Write_a_transcript_of_intake_(0,_23) <= 4

_C28: Create_treatment_plan_(0,_24) + Schedule_a_meeting_(0,_24)
 + Write_a_transcript_of_intake_(0,_24) <= 7

_C29: Create_treatment_plan_(0,_25) + Schedule_a_meeting_(0,_25)
 + Write_a_transcript_of_intake_(0,_25) <= 6

_C30: Create_treatment_plan_(0,_26) + Schedule_a_meeting_(0,_26)
 + Write_a_transcript_of_intake_(0,_26) <= 0

_C31: Create_treatment_plan_(0,_27) + Schedule_a_meeting_(0,_27)
 + Write_a_transcript_of_intake_(0,_27) <= 0

_C32: Create_treatment_plan_(0,_28) + Schedule_a_meeting_(0,_28)
 + Write_a_transcript_of_intake_(0,_28) <= 4

_C33: Create_treatment_plan_(0,_29) + Schedule_a_meeting_(0,_29)
 + Write_a_transcript_of_intake_(0,_29) <= 0

_C34: Create_treatment_plan_(0,_30) + Schedule_a_meeting_(0,_30)
 + Write_a_transcript_of_intake_(0,_30) <= 5

_C35: Create_treatment_plan_(0,_31) + Schedule_a_meeting_(0,_31)
 + Write_a_transcript_of_intake_(0,_31) <= 7

_C36: Create_treatment_plan_(0,_1) + Create_treatment_plan_(0,_10)
 + Create_treatment_plan_(0,_11) + Create_treatment_plan_(0,_12)
 + Create_treatment_plan_(0,_13) + Create_treatment_plan_(0,_14)
 + Create_treatment_plan_(0,_15) + Create_treatment_plan_(0,_16)
 + Create_treatment_plan_(0,_17) + Create_treatment_plan_(0,_18)
 + Create_treatment_plan_(0,_19) + Create_treatment_plan_(0,_2)
 + Create_treatment_plan_(0,_20) + Create_treatment_plan_(0,_21)
 + Create_treatment_plan_(0,_22) + Create_treatment_plan_(0,_23)
 + Create_treatment_plan_(0,_24) + Create_treatment_plan_(0,_25)
 + Create_treatment_plan_(0,_26) + Create_treatment_plan_(0,_27)
 + Create_treatment_plan_(0,_28) + Create_treatment_plan_(0,_29)
 + Create_treatment_plan_(0,_3) + Create_treatment_plan_(0,_30)
 + Create_treatment_plan_(0,_31) + Create_treatment_plan_(0,_4)
 + Create_treatment_plan_(0,_5) + Create_treatment_plan_(0,_6)
 + Create_treatment_plan_(0,_7) + Create_treatment_plan_(0,_8)
 + Create_treatment_plan_(0,_9) + Discuss_treatment_plan_with_patiënt_(0,_11)
 + Discuss_treatment_plan_with_patiënt_(0,_18)
 + Discuss_treatment_plan_with_patiënt_(0,_25)
 + Discuss_treatment_plan_with_patiënt_(0,_4) + Intake_(0,_11)
 + Intake_(0,_18) + Intake_(0,_25) + Intake_(0,_4) + Schedule_a_meeting_(0,_1)
 + Schedule_a_meeting_(0,_10) + Schedule_a_meeting_(0,_11)
 + Schedule_a_meeting_(0,_12) + Schedule_a_meeting_(0,_13)
 + Schedule_a_meeting_(0,_14) + Schedule_a_meeting_(0,_15)
 + Schedule_a_meeting_(0,_16) + Schedule_a_meeting_(0,_17)
 + Schedule_a_meeting_(0,_18) + Schedule_a_meeting_(0,_19)
 + Schedule_a_meeting_(0,_2) + Schedule_a_meeting_(0,_20)
 + Schedule_a_meeting_(0,_21) + Schedule_a_meeting_(0,_22)
 + Schedule_a_meeting_(0,_23) + Schedule_a_meeting_(0,_24)
 + Schedule_a_meeting_(0,_25) + Schedule_a_meeting_(0,_26)
 + Schedule_a_meeting_(0,_27) + Schedule_a_meeting_(0,_28)
 + Schedule_a_meeting_(0,_29) + Schedule_a_meeting_(0,_3)
 + Schedule_a_meeting_(0,_30) + Schedule_a_meeting_(0,_31)
 + Schedule_a_meeting_(0,_4) + Schedule_a_meeting_(0,_5)
 + Schedule_a_meeting_(0,_6) + Schedule_a_meeting_(0,_7)
 + Schedule_a_meeting_(0,_8) + Schedule_a_meeting_(0,_9)
 + Write_a_transcript_of_intake_(0,_1) + Write_a_transcript_of_intake_(0,_10)
 + Write_a_transcript_of_intake_(0,_11) + Write_a_transcript_of_intake_(0,_12)
 + Write_a_transcript_of_intake_(0,_13) + Write_a_transcript_of_intake_(0,_14)
 + Write_a_transcript_of_intake_(0,_15) + Write_a_transcript_of_intake_(0,_16)
 + Write_a_transcript_of_intake_(0,_17) + Write_a_transcript_of_intake_(0,_18)
 + Write_a_transcript_of_intake_(0,_19) + Write_a_transcript_of_intake_(0,_2)
 + Write_a_transcript_of_intake_(0,_20) + Write_a_transcript_of_intake_(0,_21)
 + Write_a_transcript_of_intake_(0,_22) + Write_a_transcript_of_intake_(0,_23)
 + Write_a_transcript_of_intake_(0,_24) + Write_a_transcript_of_intake_(0,_25)
 + Write_a_transcript_of_intake_(0,_26) + Write_a_transcript_of_intake_(0,_27)
 + Write_a_transcript_of_intake_(0,_28) + Write_a_transcript_of_intake_(0,_29)
 + Write_a_transcript_of_intake_(0,_3) + Write_a_transcript_of_intake_(0,_30)
 + Write_a_transcript_of_intake_(0,_31) + Write_a_transcript_of_intake_(0,_4)
 + Write_a_transcript_of_intake_(0,_5) + Write_a_transcript_of_intake_(0,_6)
 + Write_a_transcript_of_intake_(0,_7) + Write_a_transcript_of_intake_(0,_8)
 + Write_a_transcript_of_intake_(0,_9) <= 4

_C37: Intake_(0,_11) + Intake_(0,_18) + Intake_(0,_25) + Intake_(0,_4) = 1

_C38: Write_a_transcript_of_intake_(0,_1)
 + Write_a_transcript_of_intake_(0,_10) + Write_a_transcript_of_intake_(0,_11)
 + Write_a_transcript_of_intake_(0,_12) + Write_a_transcript_of_intake_(0,_13)
 + Write_a_transcript_of_intake_(0,_14) + Write_a_transcript_of_intake_(0,_15)
 + Write_a_transcript_of_intake_(0,_16) + Write_a_transcript_of_intake_(0,_17)
 + Write_a_transcript_of_intake_(0,_18) + Write_a_transcript_of_intake_(0,_19)
 + Write_a_transcript_of_intake_(0,_2) + Write_a_transcript_of_intake_(0,_20)
 + Write_a_transcript_of_intake_(0,_21) + Write_a_transcript_of_intake_(0,_22)
 + Write_a_transcript_of_intake_(0,_23) + Write_a_transcript_of_intake_(0,_24)
 + Write_a_transcript_of_intake_(0,_25) + Write_a_transcript_of_intake_(0,_26)
 + Write_a_transcript_of_intake_(0,_27) + Write_a_transcript_of_intake_(0,_28)
 + Write_a_transcript_of_intake_(0,_29) + Write_a_transcript_of_intake_(0,_3)
 + Write_a_transcript_of_intake_(0,_30) + Write_a_transcript_of_intake_(0,_31)
 + Write_a_transcript_of_intake_(0,_4) + Write_a_transcript_of_intake_(0,_5)
 + Write_a_transcript_of_intake_(0,_6) + Write_a_transcript_of_intake_(0,_7)
 + Write_a_transcript_of_intake_(0,_8) + Write_a_transcript_of_intake_(0,_9)
 = 1

_C39: Create_treatment_plan_(0,_1) + Create_treatment_plan_(0,_10)
 + Create_treatment_plan_(0,_11) + Create_treatment_plan_(0,_12)
 + Create_treatment_plan_(0,_13) + Create_treatment_plan_(0,_14)
 + Create_treatment_plan_(0,_15) + Create_treatment_plan_(0,_16)
 + Create_treatment_plan_(0,_17) + Create_treatment_plan_(0,_18)
 + Create_treatment_plan_(0,_19) + Create_treatment_plan_(0,_2)
 + Create_treatment_plan_(0,_20) + Create_treatment_plan_(0,_21)
 + Create_treatment_plan_(0,_22) + Create_treatment_plan_(0,_23)
 + Create_treatment_plan_(0,_24) + Create_treatment_plan_(0,_25)
 + Create_treatment_plan_(0,_26) + Create_treatment_plan_(0,_27)
 + Create_treatment_plan_(0,_28) + Create_treatment_plan_(0,_29)
 + Create_treatment_plan_(0,_3) + Create_treatment_plan_(0,_30)
 + Create_treatment_plan_(0,_31) + Create_treatment_plan_(0,_4)
 + Create_treatment_plan_(0,_5) + Create_treatment_plan_(0,_6)
 + Create_treatment_plan_(0,_7) + Create_treatment_plan_(0,_8)
 + Create_treatment_plan_(0,_9) = 0.5

_C40: Schedule_a_meeting_(0,_1) + Schedule_a_meeting_(0,_10)
 + Schedule_a_meeting_(0,_11) + Schedule_a_meeting_(0,_12)
 + Schedule_a_meeting_(0,_13) + Schedule_a_meeting_(0,_14)
 + Schedule_a_meeting_(0,_15) + Schedule_a_meeting_(0,_16)
 + Schedule_a_meeting_(0,_17) + Schedule_a_meeting_(0,_18)
 + Schedule_a_meeting_(0,_19) + Schedule_a_meeting_(0,_2)
 + Schedule_a_meeting_(0,_20) + Schedule_a_meeting_(0,_21)
 + Schedule_a_meeting_(0,_22) + Schedule_a_meeting_(0,_23)
 + Schedule_a_meeting_(0,_24) + Schedule_a_meeting_(0,_25)
 + Schedule_a_meeting_(0,_26) + Schedule_a_meeting_(0,_27)
 + Schedule_a_meeting_(0,_28) + Schedule_a_meeting_(0,_29)
 + Schedule_a_meeting_(0,_3) + Schedule_a_meeting_(0,_30)
 + Schedule_a_meeting_(0,_31) + Schedule_a_meeting_(0,_4)
 + Schedule_a_meeting_(0,_5) + Schedule_a_meeting_(0,_6)
 + Schedule_a_meeting_(0,_7) + Schedule_a_meeting_(0,_8)
 + Schedule_a_meeting_(0,_9) = 0.5

_C41: Discuss_treatment_plan_with_patiënt_(0,_11)
 + Discuss_treatment_plan_with_patiënt_(0,_18)
 + Discuss_treatment_plan_with_patiënt_(0,_25)
 + Discuss_treatment_plan_with_patiënt_(0,_4) = 1

_C42: Intake_(0,_4) >= 0

_C43: Discuss_treatment_plan_with_patiënt_(0,_4) >= 0

_C44: Intake_(0,_11) >= 0

_C45: Discuss_treatment_plan_with_patiënt_(0,_11) >= 0

_C46: Intake_(0,_18) >= 0

_C47: Discuss_treatment_plan_with_patiënt_(0,_18) >= 0

_C48: Intake_(0,_25) >= 0

_C49: Discuss_treatment_plan_with_patiënt_(0,_25) >= 0

_C50: Write_a_transcript_of_intake_(0,_1) >= 0

_C51: Create_treatment_plan_(0,_1) >= 0

_C52: Schedule_a_meeting_(0,_1) >= 0

_C53: Write_a_transcript_of_intake_(0,_2) >= 0

_C54: Create_treatment_plan_(0,_2) >= 0

_C55: Schedule_a_meeting_(0,_2) >= 0

_C56: Write_a_transcript_of_intake_(0,_3) >= 0

_C57: Create_treatment_plan_(0,_3) >= 0

_C58: Schedule_a_meeting_(0,_3) >= 0

_C59: Write_a_transcript_of_intake_(0,_4) >= 0

_C60: Create_treatment_plan_(0,_4) >= 0

_C61: Schedule_a_meeting_(0,_4) >= 0

_C62: Write_a_transcript_of_intake_(0,_5) >= 0

_C63: Create_treatment_plan_(0,_5) >= 0

_C64: Schedule_a_meeting_(0,_5) >= 0

_C65: Write_a_transcript_of_intake_(0,_6) >= 0

_C66: Create_treatment_plan_(0,_6) >= 0

_C67: Schedule_a_meeting_(0,_6) >= 0

_C68: Write_a_transcript_of_intake_(0,_7) >= 0

_C69: Create_treatment_plan_(0,_7) >= 0

_C70: Schedule_a_meeting_(0,_7) >= 0

_C71: Write_a_transcript_of_intake_(0,_8) >= 0

_C72: Create_treatment_plan_(0,_8) >= 0

_C73: Schedule_a_meeting_(0,_8) >= 0

_C74: Write_a_transcript_of_intake_(0,_9) >= 0

_C75: Create_treatment_plan_(0,_9) >= 0

_C76: Schedule_a_meeting_(0,_9) >= 0

_C77: Write_a_transcript_of_intake_(0,_10) >= 0

_C78: Create_treatment_plan_(0,_10) >= 0

_C79: Schedule_a_meeting_(0,_10) >= 0

_C80: Write_a_transcript_of_intake_(0,_11) >= 0

_C81: Create_treatment_plan_(0,_11) >= 0

_C82: Schedule_a_meeting_(0,_11) >= 0

_C83: Write_a_transcript_of_intake_(0,_12) >= 0

_C84: Create_treatment_plan_(0,_12) >= 0

_C85: Schedule_a_meeting_(0,_12) >= 0

_C86: Write_a_transcript_of_intake_(0,_13) >= 0

_C87: Create_treatment_plan_(0,_13) >= 0

_C88: Schedule_a_meeting_(0,_13) >= 0

_C89: Write_a_transcript_of_intake_(0,_14) >= 0

_C90: Create_treatment_plan_(0,_14) >= 0

_C91: Schedule_a_meeting_(0,_14) >= 0

_C92: Write_a_transcript_of_intake_(0,_15) >= 0

_C93: Create_treatment_plan_(0,_15) >= 0

_C94: Schedule_a_meeting_(0,_15) >= 0

_C95: Write_a_transcript_of_intake_(0,_16) >= 0

_C96: Create_treatment_plan_(0,_16) >= 0

_C97: Schedule_a_meeting_(0,_16) >= 0

_C98: Write_a_transcript_of_intake_(0,_17) >= 0

_C99: Create_treatment_plan_(0,_17) >= 0

_C100: Schedule_a_meeting_(0,_17) >= 0

_C101: Write_a_transcript_of_intake_(0,_18) >= 0

_C102: Create_treatment_plan_(0,_18) >= 0

_C103: Schedule_a_meeting_(0,_18) >= 0

_C104: Write_a_transcript_of_intake_(0,_19) >= 0

_C105: Create_treatment_plan_(0,_19) >= 0

_C106: Schedule_a_meeting_(0,_19) >= 0

_C107: Write_a_transcript_of_intake_(0,_20) >= 0

_C108: Create_treatment_plan_(0,_20) >= 0

_C109: Schedule_a_meeting_(0,_20) >= 0

_C110: Write_a_transcript_of_intake_(0,_21) >= 0

_C111: Create_treatment_plan_(0,_21) >= 0

_C112: Schedule_a_meeting_(0,_21) >= 0

_C113: Write_a_transcript_of_intake_(0,_22) >= 0

_C114: Create_treatment_plan_(0,_22) >= 0

_C115: Schedule_a_meeting_(0,_22) >= 0

_C116: Write_a_transcript_of_intake_(0,_23) >= 0

_C117: Create_treatment_plan_(0,_23) >= 0

_C118: Schedule_a_meeting_(0,_23) >= 0

_C119: Write_a_transcript_of_intake_(0,_24) >= 0

_C120: Create_treatment_plan_(0,_24) >= 0

_C121: Schedule_a_meeting_(0,_24) >= 0

_C122: Write_a_transcript_of_intake_(0,_25) >= 0

_C123: Create_treatment_plan_(0,_25) >= 0

_C124: Schedule_a_meeting_(0,_25) >= 0

_C125: Write_a_transcript_of_intake_(0,_26) >= 0

_C126: Create_treatment_plan_(0,_26) >= 0

_C127: Schedule_a_meeting_(0,_26) >= 0

_C128: Write_a_transcript_of_intake_(0,_27) >= 0

_C129: Create_treatment_plan_(0,_27) >= 0

_C130: Schedule_a_meeting_(0,_27) >= 0

_C131: Write_a_transcript_of_intake_(0,_28) >= 0

_C132: Create_treatment_plan_(0,_28) >= 0

_C133: Schedule_a_meeting_(0,_28) >= 0

_C134: Write_a_transcript_of_intake_(0,_29) >= 0

_C135: Create_treatment_plan_(0,_29) >= 0

_C136: Schedule_a_meeting_(0,_29) >= 0

_C137: Write_a_transcript_of_intake_(0,_30) >= 0

_C138: Create_treatment_plan_(0,_30) >= 0

_C139: Schedule_a_meeting_(0,_30) >= 0

_C140: Write_a_transcript_of_intake_(0,_31) >= 0

_C141: Create_treatment_plan_(0,_31) >= 0

_C142: Schedule_a_meeting_(0,_31) >= 0

VARIABLES
Create_treatment_plan_(0,_1) <= 0.5 Continuous
Create_treatment_plan_(0,_10) <= 0.5 Continuous
Create_treatment_plan_(0,_11) <= 0.5 Continuous
Create_treatment_plan_(0,_12) <= 0.5 Continuous
Create_treatment_plan_(0,_13) <= 0.5 Continuous
Create_treatment_plan_(0,_14) <= 0.5 Continuous
Create_treatment_plan_(0,_15) <= 0.5 Continuous
Create_treatment_plan_(0,_16) <= 0.5 Continuous
Create_treatment_plan_(0,_17) <= 0.5 Continuous
Create_treatment_plan_(0,_18) <= 0.5 Continuous
Create_treatment_plan_(0,_19) <= 0.5 Continuous
Create_treatment_plan_(0,_2) <= 0.5 Continuous
Create_treatment_plan_(0,_20) <= 0.5 Continuous
Create_treatment_plan_(0,_21) <= 0.5 Continuous
Create_treatment_plan_(0,_22) <= 0.5 Continuous
Create_treatment_plan_(0,_23) <= 0.5 Continuous
Create_treatment_plan_(0,_24) <= 0.5 Continuous
Create_treatment_plan_(0,_25) <= 0.5 Continuous
Create_treatment_plan_(0,_26) <= 0.5 Continuous
Create_treatment_plan_(0,_27) <= 0.5 Continuous
Create_treatment_plan_(0,_28) <= 0.5 Continuous
Create_treatment_plan_(0,_29) <= 0.5 Continuous
Create_treatment_plan_(0,_3) <= 0.5 Continuous
Create_treatment_plan_(0,_30) <= 0.5 Continuous
Create_treatment_plan_(0,_31) <= 0.5 Continuous
Create_treatment_plan_(0,_4) <= 0.5 Continuous
Create_treatment_plan_(0,_5) <= 0.5 Continuous
Create_treatment_plan_(0,_6) <= 0.5 Continuous
Create_treatment_plan_(0,_7) <= 0.5 Continuous
Create_treatment_plan_(0,_8) <= 0.5 Continuous
Create_treatment_plan_(0,_9) <= 0.5 Continuous
Discuss_treatment_plan_with_patiënt_(0,_11) <= 1 Continuous
Discuss_treatment_plan_with_patiënt_(0,_18) <= 1 Continuous
Discuss_treatment_plan_with_patiënt_(0,_25) <= 1 Continuous
Discuss_treatment_plan_with_patiënt_(0,_4) <= 1 Continuous
Intake_(0,_11) <= 1 Continuous
Intake_(0,_18) <= 1 Continuous
Intake_(0,_25) <= 1 Continuous
Intake_(0,_4) <= 1 Continuous
Schedule_a_meeting_(0,_1) <= 0.5 Continuous
Schedule_a_meeting_(0,_10) <= 0.5 Continuous
Schedule_a_meeting_(0,_11) <= 0.5 Continuous
Schedule_a_meeting_(0,_12) <= 0.5 Continuous
Schedule_a_meeting_(0,_13) <= 0.5 Continuous
Schedule_a_meeting_(0,_14) <= 0.5 Continuous
Schedule_a_meeting_(0,_15) <= 0.5 Continuous
Schedule_a_meeting_(0,_16) <= 0.5 Continuous
Schedule_a_meeting_(0,_17) <= 0.5 Continuous
Schedule_a_meeting_(0,_18) <= 0.5 Continuous
Schedule_a_meeting_(0,_19) <= 0.5 Continuous
Schedule_a_meeting_(0,_2) <= 0.5 Continuous
Schedule_a_meeting_(0,_20) <= 0.5 Continuous
Schedule_a_meeting_(0,_21) <= 0.5 Continuous
Schedule_a_meeting_(0,_22) <= 0.5 Continuous
Schedule_a_meeting_(0,_23) <= 0.5 Continuous
Schedule_a_meeting_(0,_24) <= 0.5 Continuous
Schedule_a_meeting_(0,_25) <= 0.5 Continuous
Schedule_a_meeting_(0,_26) <= 0.5 Continuous
Schedule_a_meeting_(0,_27) <= 0.5 Continuous
Schedule_a_meeting_(0,_28) <= 0.5 Continuous
Schedule_a_meeting_(0,_29) <= 0.5 Continuous
Schedule_a_meeting_(0,_3) <= 0.5 Continuous
Schedule_a_meeting_(0,_30) <= 0.5 Continuous
Schedule_a_meeting_(0,_31) <= 0.5 Continuous
Schedule_a_meeting_(0,_4) <= 0.5 Continuous
Schedule_a_meeting_(0,_5) <= 0.5 Continuous
Schedule_a_meeting_(0,_6) <= 0.5 Continuous
Schedule_a_meeting_(0,_7) <= 0.5 Continuous
Schedule_a_meeting_(0,_8) <= 0.5 Continuous
Schedule_a_meeting_(0,_9) <= 0.5 Continuous
Write_a_transcript_of_intake_(0,_1) <= 1 Continuous
Write_a_transcript_of_intake_(0,_10) <= 1 Continuous
Write_a_transcript_of_intake_(0,_11) <= 1 Continuous
Write_a_transcript_of_intake_(0,_12) <= 1 Continuous
Write_a_transcript_of_intake_(0,_13) <= 1 Continuous
Write_a_transcript_of_intake_(0,_14) <= 1 Continuous
Write_a_transcript_of_intake_(0,_15) <= 1 Continuous
Write_a_transcript_of_intake_(0,_16) <= 1 Continuous
Write_a_transcript_of_intake_(0,_17) <= 1 Continuous
Write_a_transcript_of_intake_(0,_18) <= 1 Continuous
Write_a_transcript_of_intake_(0,_19) <= 1 Continuous
Write_a_transcript_of_intake_(0,_2) <= 1 Continuous
Write_a_transcript_of_intake_(0,_20) <= 1 Continuous
Write_a_transcript_of_intake_(0,_21) <= 1 Continuous
Write_a_transcript_of_intake_(0,_22) <= 1 Continuous
Write_a_transcript_of_intake_(0,_23) <= 1 Continuous
Write_a_transcript_of_intake_(0,_24) <= 1 Continuous
Write_a_transcript_of_intake_(0,_25) <= 1 Continuous
Write_a_transcript_of_intake_(0,_26) <= 1 Continuous
Write_a_transcript_of_intake_(0,_27) <= 1 Continuous
Write_a_transcript_of_intake_(0,_28) <= 1 Continuous
Write_a_transcript_of_intake_(0,_29) <= 1 Continuous
Write_a_transcript_of_intake_(0,_3) <= 1 Continuous
Write_a_transcript_of_intake_(0,_30) <= 1 Continuous
Write_a_transcript_of_intake_(0,_31) <= 1 Continuous
Write_a_transcript_of_intake_(0,_4) <= 1 Continuous
Write_a_transcript_of_intake_(0,_5) <= 1 Continuous
Write_a_transcript_of_intake_(0,_6) <= 1 Continuous
Write_a_transcript_of_intake_(0,_7) <= 1 Continuous
Write_a_transcript_of_intake_(0,_8) <= 1 Continuous
Write_a_transcript_of_intake_(0,_9) <= 1 Continuous

A: With a time-indexed variable x[t], y[t] ∈ {0,1}, I often also keep scalar variables xt, yt ≥ 0 around which hold the time for x,y:
 xt = sum{ t*x[t] }
 yt = sum{ t*y[t] }

Of course this assumes we have:
 sum{ x[t] } = 1
 sum{ y[t] } = 1

i.e. x,y happen at exactly one time (it also works with "at most one time" as long as the first t is greater than zero).
With this you can easily impose a precedence constraint:
 xt ≤ yt-1


text:
Wall & Main: OpenCity growing in Worcester
Oct 7, 2018 at 6:00 AM Oct 10, 2018 at 11:23 AM
Nick Belsito has come back to Worcester. And in so doing, he's taking what he learned working in his family's delicatessen and catering company in a new direction.
Nick Belsito has come back to Worcester.
And in so doing, he's taking what he learned working in his family's delicatessen and catering company in a new direction.
His startup, OpenCity — a platform for small businesses to improve their customer engagement and sales founded in July 2016, according to Crunchbase — is in the Worcester CleanTech Incubator on Portland Street.
Mr. Belsito is a Worcester native. He was born in the city, attended Nelson Place Elementary, Forest Grove Middle and Doherty High School, eventually graduating magna cum laude from Bentley University.
Mr. Belsito is a food industry veteran. He spent his "early life" in the food industry helping to grow Belsito's Deli, his family's delicatessen and catering company on Plantation Street in Worcester. He considers himself "a world traveler and has experienced many cultures by living in different places."
The global theme he's found is "that food and communication are the keys to the soul of its people," which inspired him to "help others connect with great places to foster local experiences."
"OpenCity was born to bridge the technological gap and help small businesses effectively and efficiently communicate with their customers," he said.
He has considerable prior work experience. His first startup, BeeLine, connected restaurants with customers looking for "a unique food adventure." Before BeeLine, Mr. Belsito worked five years at Raytheon "in strategic finance, spearheading areas of international growth and acquisition."
OpenCity is trying to solve a basic problem for small business people: "Running your own business is extremely demanding. I am always thinking of ways to make a business more efficient and improve the customer experience, so owners and managers have more time to enjoy their lives outside of work. Providing great customer service is critical to a restaurant's success in today's market. Restaurants are in a labor crisis and lack the technology to meet customer demands. Eighty-nine percent of consumers want to use messaging to communicate with a business." he said.
OpenCity launched earlier this year and has been introduced "throughout the Greater Boston and Worcester area, local business like Lock 50, Civic Kitchen, Frenchie Wine Bistro, Sonsie, Whisky Saigon, and Royale Nightclub were early adopters," he said.
OpenCity responds to customer questions at all hours. As Mr. Belsito explained, "OpenCity's virtual assistant automatically responds to customer [frequently asked questions at all hours such as] where to park, vegan options, operating hours and private event requests, leaving restaurant staff to attend to in-person guests. [In addition] customers can book their reservations via text thanks to integrations with reservation platforms."
OpenCity is targeting the world's restaurants, of which it says there are a million in North America and 2 million worldwide.
Mr. Belsito has hired two executives with impressive credentials for his executive team: OpenCity's chief technology officer, Dave Arthurs, was formerly vice president of engineering at restaurant reservations site OpenTable, with four startup exits to his credit. And its head of sales, Jaime Surenkamp, was previously in charge of national accounts at HotSchedules, a restaurant scheduling and communications app, and director of sales for Open Table.
Although Mr. Belsito would not specify the company's capital or its growth rate, he sounded optimistic about the company's prospects.
"Yes, we raised a very large seed round with capital through the end of next year," he said. "Further enhancing our engineering capabilities and expanding our sales efforts. We have seen overwhelming success early and are open to acceleration."
To achieve its aims, OpenCity believes that teamwork will be essential.
"Team is a critical component of success. The product works. Our market loves OpenCity. As we expand to a multibillion-dollar company, hiring the right people, at the right time, will be important. Our team is excellent at communication. Having great team communication allows for better ideas, cohesiveness, and vision to take place," said Mr. Belsito.
Peter Cohan of Marlboro heads a management consulting and venture capital firm, and teaches business strategy and entrepreneurship at Babson College. His email address is peter@petercohan.com.

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: How to get a "Sequence" or counters like structure in firebase realtime database I am moving from sql to nosql database,as a part of it I am working on a flutter project where I am implementing a sequence like structure as below.
  static Future<int> get nextId async {
    return database.get().then((snapshot) {
      return snapshot.value;
    }).then((value) {
      database.set(value + 1);
      return value + 1;
    });
  }

It works, each time i am using nextID it increments in the database. My question is that is it possible when two different users happens to get the same value on invoking nextId.

A: If you want to prevent multiple users from modifying the same value in conflicting ways, you'll want to use a transaction.
In this case, since you seem to be simply incrementing a value, you may also be helped by using the atomic increment operation which is significantly faster as I showed in: How quickly can you atomically increment a value on the Firebase Realtime Database?

redpajama_set_name: RedPajamaStackExchange


The two teams combined for 17 punts. MSU and Ohio State each missed a field goal.
EAST LANSING — Michigan State football appeared ready to take Ohio State into another fourth-quarter fight.
Then Mark Dantonio opted to take a safety instead of punting out of his own end zone with a freshman punter. And everything unraveled from there.
With backup quarterback Rocky Lombardi in the game, the Spartans fumbled on their next two offensive plays. The first was a snap in the end zone that bounced off in-motion receiver Laress Nelson that Ohio State pounced on for a touchdown. The next was a fumbled option pitch from Lombardi to La'Darius Jefferson that the Buckeyes recovered and turned into a field goal.
Those 10 points for No. 8 Ohio State in 3 minutes and 20 seconds proved to be the difference, as the 24th-ranked Spartans suffered a 26-6 defeat Saturday that officially eliminated MSU from its slim chance at sneaking into the Big Ten title game.
That leaves the Spartans (6-4, 4-3 Big Ten) playing only for a better bowl spot in the final weeks, starting next Saturday at Nebraska, with game time and TV network to be announced Sunday.
Lombardi took over for junior starter Brian Lewerke on the final drive of the first half and moved MSU in for a field goal with 30 seconds left. Lewerke had largely been ineffective with his right shoulder continuing to affect his passes, throwing for 84 yards on 8 of 16 attempts before being lifted on the final drive of the opening half.
Lombardi, a redshirt freshman, stayed in the game in the second half, but the MSU offense consistently got pinned deep in its own territory by Ohio State's punting game. Four straight drives started at MSU's 6-yard line or closer to the goal line.
After a safety made it 9-6, a shotgun snap from center Blake Bueter hit receiver Laress Nelson as he was in motion, before the ball ever got to Lombardi. Ohio State's Dre'Mont Jones pounced on it in the end zone for the touchdown with 14:03 left in the final quarter. Lombardi appeared to hurt his non-throwing hand on the play while trying to get the ball in the end zone.
On the Spartans' next play, after a touchback on the kickoff, Lombardi's option pitch bounced off Jefferson, and the Buckeyes' Johnathon Cooper recovered at MSU's 15. Blake Haubeil's 35-yard field goal four plays later made it 19-6, Ohio State.
Lombardi went back to the bench and finished 7 of 19 for 92 yards passing and was MSU's leading rusher with 49 yards, including a 47-yarder.
Lewerke returned after Lombardi went back to the bench and continued to struggle, finishing 11 of 27 for 115 yards passing.
Cody White caught eight passes for 115 yards for MSU.
With MSU facing fourth down at its own 1, Dantonio opted to have long snapper Ryan Armour heave the snap over the head of true freshman William Przystup, MSU's fifth punter of the season. That safety made it a 9-6 Ohio State lead with 42 seconds left in the third quarter, and appeared to give MSU a chance to change field position with a kickoff.
But Cole Hahn's boot went out of bounds, and the Buckeyes got the ball at midfield because of the shorter kickoff position. Then, OSU punter Drue Chrisman pinned MSU at its own 2. That set up the botched shotgun that bounced off Nelson.
The Spartans slowed down the Buckeyes' high-powered offense for most of the game, finally wilting in the fourth quarter after their own offensive mistakes.
MSU held Ohio State to 347 total yards, with 227 coming from QB Dwayne Haskins and 123 of them on the ground. Detroit Cass Tech grad Mike Weber ran for 104 yards and a fourth-quarter touchdown on 22 carries.
The Buckeyes got 84 of their yards in the final quarter.


I was lucky to grow up in a progressive college town. There was a great women's bookstore where I could stock up on Alison Bechdel's Dykes to Watch Out For, Diane diMassa's Hothead Paisan: Homicidal Lesbian Terrorist, and the triangle pins and freedom rings that proclaimed my queerness to whomever understood those particular codes, whenever I was brave enough to wear them.
But even going into the women's bookstore required a certain amount of bravery. By walking in, I was acknowledging my interest in the stories and — ahem — "lifestyle accessories" on offer. In a sense, I had to already be out before I could find the stories that might have helped me come out.
What if I'd been able to just walk into my school library and find those stories?
I wrote Empress of the World, which is about two girls who fall in love at a summer gifted and talented program, in part because I knew how few queer love stories had been published for teens. Empress was first published in 2001.
Ten years later, in 2011, author Malinda Lo analyzed the young adult books that had been published that year and concluded that less than one percent had queer content.So — obviously — we still need a lot more queer stories.
And the easier it is to find queer stories — for queer kids and straight kids and kids who have no idea yet what their sexuality might be — the more likely it is that readers will feel like it's okay to be who they are, and that they'll be inspired to write stories of their own.
That's why I'm so glad the Make It Safe Project exists.


text:
package org.lnu.is.domain.property;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.lnu.is.annotation.dbtable.OD;
import org.lnu.is.domain.InformationModel;
/**
 * Property Value entity.
 * @author illay
 *
 */
@OD
@Entity
@Table(name = "q_od_propertyvalue")
public class PropertyValue extends InformationModel {

	private static final long serialVersionUID = 1L;

	@ManyToOne
	@JoinColumn(name = "property_id")
	private Property property;

	@Column(name = "numvalue")
	private Double numValue;

	@Column(name = "strvalue")
	private String strValue;

	@Column(name = "datevalue")
	private Date dateValue;

	public Property getProperty() {
		return property;
	}

	public void setProperty(final Property property) {
		this.property = property;
	}

	public Double getNumValue() {
		return numValue;
	}

	public void setNumValue(final Double numValue) {
		this.numValue = numValue;
	}

	public String getStrValue() {
		return strValue;
	}

	public void setStrValue(final String strValue) {
		this.strValue = strValue;
	}

	public Date getDateValue() {
		return dateValue;
	}

	public void setDateValue(final Date dateValue) {
		this.dateValue = dateValue;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result
				+ ((dateValue == null) ? 0 : dateValue.hashCode());
		result = prime * result
				+ ((numValue == null) ? 0 : numValue.hashCode());
		result = prime * result
				+ ((strValue == null) ? 0 : strValue.hashCode());
		return result;
	}

	@Override
	public boolean equals(final Object obj) {
		if (this == obj) {
			return true;
		}
		if (!super.equals(obj)) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		PropertyValue other = (PropertyValue) obj;
		if (dateValue == null) {
			if (other.dateValue != null) {
				return false;
			}
		} else if (!dateValue.equals(other.dateValue)) {
			return false;
		}
		if (numValue == null) {
			if (other.numValue != null) {
				return false;
			}
		} else if (!numValue.equals(other.numValue)) {
			return false;
		}
		if (strValue == null) {
			if (other.strValue != null) {
				return false;
			}
		} else if (!strValue.equals(other.strValue)) {
			return false;
		}
		return true;
	}

	@Override
	public String toString() {
		return "PropertyValue [numValue=" + numValue + ", strValue=" + strValue
				+ ", dateValue=" + dateValue + "]";
	}

}

redpajama_set_name: RedPajamaGithub


There will be a FREE shuttle bus from Wood Green Station & Alexandra Palace Station. This bus is on a constant loop and takes you directly to the exhibition.
There is a cash machine within the Palm Court close to the Bar & Kitchen pub and also within the Great Hall by the main entrance.
This is available within the Panorama Room at the top of the West Corridor before you walk down to enter the Great Hall and the Exhibition.
Alexandra Palace offers a number of catering outlets for you to enjoy during your visit. There is also a seating area provided in the Great Hall for visitors who want to bring their own lunch.


Speech given by Peter Voser, Chief Executive Officer, Royal Dutch Shell plc, at the World Energy Congress 2013, Daegu, South Korea on October 15, 2013.
The story of Asia's growing energy needs is increasingly that of the entire global energy system. The region must satisfy surging demand growth, while addressing urban pollution and rising CO2 emissions. In this keynote speech to the World Energy Congress in Daegu, South Korea, Peter Voser emphasises the importance of effective urban planning, natural gas and the right government policies in meeting Asia's energy challenge.
Today, I'll focus on the future of energy in Asia and how the region can develop a more secure and sustainable energy system.
South Korea is an appropriate place to focus on this issue. The country is poised to play an important part in that future as a significant player in the global gas industry. Its famous shipyards are building the ships that will transport gas across the oceans to fuel Asia's economic growth.
But let me begin by putting Asia's rising energy needs in perspective.
Shell's scenarios team recently published their latest report. It assesses how major social, economic and political forces might unfold over the 21st century and their impact on the energy system. The scenarios reinforce the scale of Asia's resource stresses. For example, energy demand in the region could more than double over the next 50 years.
The scenarios also highlight the shift in economic influence from West to East. It's clear that Asia's emerging economies have entered a historic phase of industrialization and urbanization. The pace of change is almost inconceivable. According to McKinsey, the Chinese economy is changing at 10 times the speed of Britain's during the Industrial Revolution and at 100 times the scale.
Billions of people in the region are emerging from poverty. This is not only transforming Asia's energy system, but also the World's. Between them, China and India will provide the majority of global energy demand growth in the next two decades. Meeting this demand will be extremely tough. It will require heavy investment in all energy sources, .from oil and gas to wind and solar.
Asia is also increasingly dependent on energy imports at a time of high and volatile oil prices. This carries significant economic implications. According to one source, by 2020 China could spend as much as $500 billion a year on crude oil imports.
and the right government policies.
So, first, urban development. The world may need to build the equivalent of one new city of nearly 1.5 million people every week for the next 40 years. Asia is the epicentre of this growth. For example, Karachi's population could grow by half between 2010 and 2025 and Beijing's by even more.
This poses challenges. But it's also an opportunity to make progress towards a more sustainable energy system. The reason is simple. In 30 years' time, cities could account for more than three-quarters of the world's energy consumption. And those with higher population density are more energy efficient than sprawling cities.
They encourage people to use public transport and to make shorter car journeys. According to Shell's scenarios experts, this could lead to the equivalent of a 15% reduction in the average distance travelled by car passengers each year – that's around 2,000 km per person.
Intelligent urban planning could even transform the entire global transport system. It would provide the infrastructure for a cleaner car fleet powered mainly by electricity, hydrogen and natural gas, including cars fuelled by compressed natural gas. This would help to cut pollution and ease Asia's need for imported oil.
To make this happen, we will need to see a truly integrated approach to urban development. I'm talking about deeper collaboration between the private and public sectors, between different cities and across industries.
That's a lesson from Seoul's experience over the past decade. The city has improved its public transport system, and taken steps to tackle road congestion and pollution. A crucial part of the reforms has been the collaboration between the city authorities and a range of parties, including transport companies, the Seoul Development Institute, academics and other cities, including San Francisco and Amsterdam.
This reflects the breadth of the challenge and the need to draw on expertise from different sources.
As a second priority, Asia must diversify its energy supply. Renewables are making a growing contribution throughout the region. But fossil fuels are likely to meet the majority of demand for decades. According to Shell's scenarios, fossil fuels could still supply up to 65% of Asia's energy in 2060. That's down from about 85% today. Globally, fossil fuels are likely to supply around 60% in 2060, down from 80% today. But it's a smaller slice of a much bigger energy system, so fossil fuels demand will remain strong.
So what's the best way ahead in the power sector? Nuclear power's prospects are uncertain, following the Fukushima tragedy in Japan. Meanwhile, coal-fired power is expanding all over the region.
Against this backdrop, I would like to re-assert the importance of natural gas to Asia. The bottom line is that gas is the cleanest burning fossil fuel. It can make the biggest contribution to cutting the world's CO2 emissions over the next 25 years. That's because it produces only around half the emissions of coal.
Natural gas can also be the urban fuel of the future. It can help to tackle the pollution crisis in some of Asia's cities. When replacing coal-fired power, it sharply reduces emissions of pollutants like sulphur dioxide and nitrogen oxides. That's why the Chinese government has chosen more than a dozen "model cities" to make the transition to natural gas from coal and oil. Gas power stations are also the most practical option in urban areas. They emit few pollutants. And there's no need for lengthy transmission lines to carry the electricity from distant coal or nuclear plants.
But we must acknowledge that gas does face challenges in Asia. Some people question whether supplies can really keep pace with such strong demand. After all, gas demand across Asia is projected to more than double over the next 25 years. Meanwhile, liquefied natural gas (LNG) supplies are under pressure, partly because Japan's needs have risen following the Fukushima tragedy in 2011.
But we must keep hold of the underlying reality. Global gas resources are expanding rapidly and they will continue to do so. It's easy to forget that North America's energy supply revolution is still in its early stages. The continent could now have more than 100 years of gas supplies at current consumption rates.
For importers like South Korea, tight and shale gas is only one chapter in a bigger story - the expansion in the world's LNG supplies.
Asia's demand for LNG has tilted the global trade eastwards. Singapore and Malaysia began importing LNG this year. Before long, they could be joined by countries including Vietnam and the Philippines. Meanwhile, others are expanding their import capacity, including South Korea, Thailand, China and India. They will all have access to vast new gas resources around the world.
At Shell, we see worldwide LNG supplies doubling this decade and Australia is front and centre. It's building around half a dozen major new LNG projects. By the end of the decade, Australia could rival Qatar as the world's biggest LNG exporter.
By 2020, North America may also emerge as a significant LNG supplier. This year, the US government has granted several new permits for projects to export LNG worldwide. And in Canada, Shell, Kogas and other partners have announced plans to develop an export facility on the Pacific Coast.
That's not all. Russia is considering plans to expand its export capacity and East Africa might emerge as a supplier to Asia over the longer-term. So LNG supplies could grow quickly. And Asia will benefit from an increasingly diverse and flexible group of suppliers.
But we must also acknowledge certain realities. None of these LNG projects are cheap or easy to build. They're major infrastructure projects. And there's competition for the human and physical resources needed to build them. So the energy industry must continue to strengthen the competitiveness of natural gas.
One critical step will be innovation. An example is Shell's pioneering Prelude Floating LNG project. Work is well under way in Korea's shipyards on this project to process, store and transfer liquefied natural gas at sea. It will be the largest offshore floating facility in the world.
It will be used to tap the Prelude gas field more than 200 kilometres off Australia's northwest coast, a field that is too small and remote to be economically developed in the traditional way.
Another advantage is that can eliminate the need to devote land and pipelines to process LNG onshore. This not only reduces costs, but also the environmental impact.
The industry must also address cost pressures across the entire supply chain. South Korea's shipyards can be pivotal. They're now a vital link in the global supply chain, amid strong demand for LNG carriers and Floating LNG facilities. With our partners, Shell is working on projects in Indonesia and Australia, which we anticipate will also use Floating LNG.
The high quality of Korea's yards is attracting heavy investment. So they must be encouraged to maintain the outstanding quality of their work. That means continuing to invest in their people. It also means holding their suppliers and contractors to the same rigorous standards and efficiency.
That brings me to the final point I'd like to cover. The right government policies will be critical to meeting Asia's energy challenge.
The first priority must be to tackle the region's urban pollution crisis. The Chinese government recently released its air pollution action plan. It sets out plans for limiting coal use and addressing vehicle emissions. The introduction of air quality standards throughout the region would be an important step in the right direction.
A second policy goal must be to encourage investment in new energy sources, especially natural gas. That means exploring for and developing resources in frontier areas, such as deep water fields. Such projects can be technically challenging, with some costing tens of billions of dollars. So the message for governments is that these projects need stable fiscal and regulatory frameworks to be viable.
That leads directly onto my final priority: fossil fuel subsidies. In 2011, these totalled $520 billion around the world, according to the IEA. This is a complex issue, not least because subsidies protect consumers from higher energy costs.
But they also discourage investment in new energy supplies. They're a burden on government finances. And they can be wasteful, by encouraging energy to be used inefficiently. So tackling subsidies could bring major benefits to Asian countries, despite the potential political sensitivities in implementing these reforms.
In summary, Asia's story is increasingly that of the entire global energy system.
How the region meets its growing needs will have profound consequences for the world. But it's also true that Asian countries can take immediate action that will reap benefits for decades.
Effective urban planning can promote energy efficiency and transform the global transport infrastructure.
Another critical step is to diversify the energy mix. Natural gas can be the urban fuel of the future. But none of this will happen without firm policies from governments across the region. Thank you.


Project Humulus Lupulus is a rotating series of hop-centric beers which pushes the boundaries of brewing creativity.
These beers allow our brewers to get innovative and crazy, all while creating a dance party on your taste buds.
Although the recipes will change, one constant will remain; pure hop tastiness.
What's in a hop? Sure, Lupulin glands, Bracteoles, Strigs, alpha and beta acid, polyphenols, but what does it all mean? Aroma. Flavor. Awesomeness. Just this side of an IPA and teetering on the edge of Pale Ale, Hop Anatomy combines Citra and other hops with a nice dose of specialty malt for a complete and well-rounded flavor profile.
This hoppy lager stretches traditional style boundaries, resulting in greatness. Crisp, clean and refreshing like a German lager should be. But wait…hello, hops. Nice to smell ya. Not enough hops to unhinge balance, but just enough hop aroma and flavor to make this Helles extra awesome.


Joe Musacchio: I am the CEO of PeopleTicker. PeopleTicker is a rate and benchmarking tool, we cover salary and contingent labour benchmarking. We basically help companies that want to know how much somebody costs, for projects, individuals, recruitment, sourcing, and procurement.
O: Is your typical client US-based? Or are you totally global?
JM: We are global, we're presently in eleven countries and we will be in 100 probably about twelve months from now.
O: That's pretty great ambition!
for a VMS, and we spun it off when we sold the VMS because we saw a market need for this type of information.
O: And what's the relationship with John Sculley?
JM: John is our chairman; he was a friend of the firm to begin with and he took a liking to it, and as John does when he likes things, he gets involved.
O: Can you tell us a little about the kind of engagement that you would typically have with a client? How do you go about starting a relationship? Who is your buyer inside the target?
JM: Basically companies are trying to manage the largest spend they have, which is contingent labour and what we do with companies is, build market rate cards for them. We develop all their jobs, all the job descriptions; and do project management around that to deliver a rate card that they are able to buy from. If they know the market pay rates and statutory costs, they are in a better position to negotiate with their suppliers, find the right talent quickly, and retain them.
O: Who within the organisation do you tend to speak with? Is it procurement? Is it HR?
JM: We actually speak to both HR and procurement. In the organisation HR is usually responsible for hiring people and procurement for buying them. As the contingent labour market explodes – I think we're going to be up to 40% by 2020 – HR is now starting to evolve into the management of contingent in partnership with procurement. So rather than just buying, procurement is now also responsible for negotiations and HR is now getting involved in the human aspect of the human resources they're bringing in.
O: One of the things that John was talking about is the changing nature of work, and this is a huge issue for everyone – procurement, HR, the general population: as automation kicks in, the role of work is changing. So how are you positioning your company to adapt to that and take advantage of what's happening?
JM: Let's talk about the change in the workforce. I think a lot of it stems from free agency. People decide that they don't want to get involved in the internal politics of the company, they don't want to get involved in trying to move up in a company, stay somewhere 30 years: they want to move quickly, and they want it now. Even before this generation, people always wanted things quickly, and I believe that folks want to do it on their own. They want to get into their own corporations, into their own companies. That's coupled with less employer loyalty and with regulation: you know some of the healthcare bills that have gone through recently, the burden is on the employer to provide more benefits. The government makes laws and business works its way around them.
So this is a piece of that, and I also think it's an opportunity for folks to get moving on their own. Technology has enabled this type of environment, where people don't have to be at work. I believe that companies are starting to look at keeping core staff that is focused around the business, and creating an ecosystem around it that delivers projects. That's how PeopleTicker runs its business. We've got nine folks that are core, and 430 in our ecosystem that are actually employed by the company.
Let's just take a look at this in IT for a second. Let's take a development program, and let's say a developer is going to cost us $120,000: what can that developer do in 12 months through management of them? Trying to get different projects out and getting results. If we broke that into $10,000 for each of 12 projects, and the person only got paid when they delivered a result, and all we had to do was integrate that software into the package, we find that we're getting a lot more results this way. We've got folks in Moscow, in California, Poland, folks in the Ukraine, all over the place. It's an interesting model and it's working both on the sales side and the HR side too, where we have compensation people all over the world doing validation. We have procurement people doing validation for us, we have recruiters that are bringing different types of jobs to the table, and we're up to 84,000 different job titles – so it's happening. We call it SkillsVillage, a crowdsourced community for compensation validation.
JM: I think the government starts it with legislation; the employer reacts to it, as a capitalist; and then the person reacts to that. There's always a counter balance.
O: So where's next for you guys then? You've outlined pretty ambitious growth over the next 12 months country-wise; what else are you looking to achieve over the course of, say, the next business cycle?
JM: Well we see ourselves providing a critical function in the industry. We have started to get involved in full service consulting roles, and vendor selection. Monitoring pay rates, bill rates, training managers, training project managers. There's a consulting piece of it that seems to be pulling us in, we've just got to have a consulting business. But you kind of get pulled back in, as Al Pacino says. I think the company's just going to stay focused on how much we see on the HR side, the salary side is booming and it's an accepted practice there compensation-wise, and I think the contingent piece is just coming into its own where procurement is starting to learn that there is a service sitting here to help them. Folks need to know how much they're paying today.
The whole thing is very exciting: the whole model and what's happening to the industry, what's happening to the government, what's happening to the employer. The world is really morphing and we're pretty honoured to be a part of it.
O: At Outsource we see a lot of this being driven by globalisation and the fact that people can source work from different geographies; I'm wondering how much you feel that drives things.
JM: Well I think it might be an evolution of the term "outsourcing". I always believed that after all the outsourcing was going to happen, everyone was going to be insourcing, and this is sort of an insourcing: very closely held projects versus taking the whole IT/HR department.
O: Maybe that was a learning process for the organisation generally realising over the course of several years that actually it's not necessary to have all of this structured in that traditional way, that it's not the most efficient way of doing things?
JM: I think it's smart to move in this way – and I'm sure with machine learning and other things that are coming, we'll be buying McDonald's from machines soon.


text:
import {normalizeRadians} from './image_utils';
import {ImageSize} from './interfaces/common_interfaces';
import {RectTransformationConfig} from './interfaces/config_interfaces';
import {Rect} from './interfaces/shape_interfaces';

/**
 * Performs geometric transformation to the input normalized rectangle,
 * correpsonding to input normalized rectangle respectively.
 * @param rect The normalized rectangle.
 * @param imageSize The original imageSize.
 * @param config See documentation in `RectTransformationConfig`.
 */
// ref:
// https://github.com/google/mediapipe/blob/master/mediapipe/calculators/util/rect_transformation_calculator.cc
export function transformNormalizedRect(
    rect: Rect, imageSize: ImageSize, config: RectTransformationConfig): Rect {
  let width = rect.width;
  let height = rect.height;
  let rotation = rect.rotation;

  if (config.rotation != null || config.rotationDegree != null) {
    rotation = computeNewRotation(rotation, config);
  }

  if (rotation === 0) {
    rect.xCenter = rect.xCenter + width * config.shiftX;
    rect.yCenter = rect.yCenter + height * config.shiftY;
  } else {
    const xShift =
        (imageSize.width * width * config.shiftX * Math.cos(rotation) -
         imageSize.height * height * config.shiftY * Math.sin(rotation)) /
        imageSize.width;
    const yShift =
        (imageSize.width * width * config.shiftX * Math.sin(rotation) +
         imageSize.height * height * config.shiftY * Math.cos(rotation)) /
        imageSize.height;
    rect.xCenter = rect.xCenter + xShift;
    rect.yCenter = rect.yCenter + yShift;
  }

  if (config.squareLong) {
    const longSide =
        Math.max(width * imageSize.width, height * imageSize.height);
    width = longSide / imageSize.width;
    height = longSide / imageSize.height;
  } else if (config.squareShort) {
    const shortSide =
        Math.min(width * imageSize.width, height * imageSize.height);
    width = shortSide / imageSize.width;
    height = shortSide / imageSize.height;
  }
  rect.width = width * config.scaleX;
  rect.height = height * config.scaleY;

  return rect;
}

export function computeNewRotation(
    rotation: number, config: RectTransformationConfig): number {
  if (config.rotation != null) {
    rotation += config.rotation;
  } else if (config.rotationDegree != null) {
    rotation += Math.PI * config.rotationDegree / 180;
  }
  return normalizeRadians(rotation);
}


Were there houses or ruins or other objects in the area of the Rift? We made a last minute sweep and moved all the rifts away from the structures so rift mobs didn't spawn inside and decide to live in the house instead of fighting you. If you see this again please send us a location.Thanks for the feedback.


Sell more tickets on the world's most scalable, flexible, and secure ecommerce platform.
Designed for independent venues, attractions and event promoters, TicketWeb is the industry's best-in-class event ticketing, marketing and management solution.
Time is money. We focused on a "build-it once" philosophy to create the most efficient way to build, manage and market your events to the entire Ticketmaster fan discovery ecosystem.
From the day you announce to the night you settle, TicketWeb delivers a comprehensive event management suite with the tools you need to sell tickets more efficiently and effectively.
Join the most powerful ecosystem in ticketing. With the largest distribution network in the industry, your events are listed in front of tens of millions of unique monthly visitors actively looking to purchase tickets.
Sell your tickets everywhere. Our open platform allows fans to find your events and purchase tickets on Ticketmaster, TicketWeb, over 300 affiliates including Facebook, Spotify, Bandsintown and more, introducing your events to millions of fans!
Invite targeted fans to join your club and discover events through our open discovery APIs, industry partnerships and access to the world's largest network of active ticket buyers.


text:
More on the non-occurrence of a Chinese Russian Far East
The fate of the Russian Far East, the easternmost region and federal district of Russia with a land area of 6.2 million square kilometres and a fast-dropping population of 6.3 million as of the 2010 census, is something people have speculated about for some time. We've talked about it, too. Co-blogger Claus Vistesen noted in 2006 the scale of the population shrinkage in the region, product of natural decrease and of mass migration to points elsehwere in Russia. Geocurrents' Asya Pereltsvaig noted in an April 2012 post the extreme case of Magadan Oblast, where the population has fallen by two-thirds since 1989, but by and large significant population shrinkage and aging is a fact.
The supposed threat of a Chinese takeover of the region has been in the air for a century. I don't think it's going to happen. I wrote in September 2009 and again in January 2010 that the evidence just didn't suggest that there was any substantial Chinese migration to the Russian Far East, the most economically marginal area of a Russia that doesn't rank highly for Chinese migrants who want to take the expense to leave their country. I mentioned in August 2010 that there was in fact a long history of Russian immigration to northeastern China continuing even into the present day, and that a northeastern China that was fast surpassing the Russian Far East might become an important destination for people seeking to leave a declining periphery of Russia. Even the relative excess of marriage-age women in Russia contrasted to a surplus of marriage-age men in China isn't likely to propel cross-borer migration: in April of last year I linked to anotherpost by Geocurrents' Asya Pereltsvaig that made the point that, in fact sex ratios in Asian Russia generally are relatively balanced and any Chinese migration to relatively attractive areas in Russia would be directed towards European Russia.
Just last month, writing for Open Democracy Ben Judah produced an article, "Why Russia is not losing Siberia", that reinforces this. He travelled to Birobidzhan, capital of the fabled Jewish Autonomous Oblast hard by the Chinese border, to see how many Chinese were around. For a population supposedly on the verge of taking over a vast territory, the Chinese of the Russian Far East are astonishingly scarce.
Birobidzhan was supposed to be Soviet homeland for the Jews. That obviously failed. But as I researched where to focus my trip, the legendary Chinese settlement of Siberian Birobidzhan kept coming up. It was the Russian province with the highest percentage of Chinese settlement, having leased out 14 per cent of its arable land to Asian farmers. It was together with Khabarovsk region the province that has leased over 7,500 square kilometres for Chinese agriculture. I decided to go – and find out if this area the size of New Jersey was the beginning of the 'loss of Siberia' or in the grand scheme of things not very much of Siberia at all.
Experts in both Moscow and Beijing agree there are around 500,000 Chinese in Russia and that most of them live in the capital and St. Petersburg. What is so surprising travelling in the Russian Far East, is that this actually appears to be the case. There are quite simply very few Chinese in the cities of Birobidzhan, Khabarovsk and Vladivostok. There are no large 'China-towns' and local officials and locals say the numbers have been falling for years.
At first glance in Birobidzhan there appear to be more Jews than Chinese i.e. virtually none in the poor and sinister city where the streets are named after Yiddish poets and official buildings are capped with rusting Hebrew lettering. Locals mock the fears of those in Moscow. The number of Chinese peddlers has been falling for years, as Chinese wholesalers put them out of business. Even in the market the Chinese were absent. 'Why would rich people like the Chinese work in a market?' asked one confused Kyrgyz crockery vendor when I asked where they were hiding, 'The Chinese are the big bosses that do the wholesaling or own the stalls. They don't get their hands dirty.'
The real striking migration flow was like elsewhere in Russia – Muslims from the Caucasus and Central Asia. In Birobidzhan, as in Khabarovsk and Vladivostok, there are large numbers of Azeri immigrants, followed by huge amounts of dirt poor Tajiks, Uzbeks and Kyrgyz. They far outnumber any Chinese in these cities. The most powerful families in Birobidzhan were Azeri immigrants that seemed to have sewn up local politics, food processing, the taxi business and even the local prosecutor's office.
Locals claimed no Slavs tilled the land any more. Yet independent Chinese settler-farmers had since the mid-2000s also practically gone extinct. The only one who I found ('Andrei') in this unhappy outback told me had reached the end of the line. 'It's simply too hard here,' he said in his hut. 'Life has improved in China and there are now better opportunities there. I'm going back. China got richer, but Russia got nowhere.' The only people he employed were half-illiterate Russian girls from the village. 'Chinese workers are too expensive. There are better jobs in China,' he moaned.
In the far south of Birobidzhan there is some evidence of Chinese land leasing as almost all the fields are electric green from soya and tilled by Chinese migrants. Yet these are not settlers but contract workers living in barracks with no desire to remain in Russia. Instead of working long-term for remittances, they usually do two-three stints in a barracks to save up to start their own business in China and then never come back. They are forbidden to move freely by the companies and frightened of stabbings, hostile drunks and pretty much all Russians.
The director of one of these Chinese agricultural companies operating in southern Birobidzhan explained to me that he was finding it increasingly difficult to recruit enough workers to come to Russia. He estimated there were barely 6,000 in the region and the numbers were falling. 'To be honest life in China is better than it is in Russia these days,' he explained. 'As Chinese wages rise, I am going to start having a serious problem getting these people to come to Russia.'
Judah, I think, is right in tracing the fears of a Chinese takeover of large parts of Russia to fears of a fatal weakness in Russia, to concerns that are fundamentally irrational and/or don't speak to what's actually going on.
Labels: china, economics, migration, russia
Abu Daoud said...
'China got richer, but Russia got nowhere.' --Great quote from this article.
Since it brings up large numbers of Central Asians, who are mostly Muslims, migrating to Russia, and the low TFR of Russian women, this brings up another question. Is there a time when Russia will ever become a Muslim-majority country? I'm not sure if anyone has looked into this..but would be curious to know.
I don't have detailed data immediately on hand, but the short answer is "no". There just aren't enough Muslims in Russia, native and immigrant, with a sufficiently high fertility rate, to enact that sort of change. Central Asia, Azerbaijan, and of course the North Caucasus and Middle Volga Muslim populations, are well advanced in the demographic transition.
A much larger Muslim population, sure, but that's a different thing.
ba.ldei.aga said...
>Is there a time when Russia will ever become a Muslim-majority country?
Most likely -- never
Partially due to coming migrants from Central Asia are not very Muslim
The Shortgage of Bulgarians Inside Bulgaria
On the outports of Newfoundland as a globally-rele...
On North Korea becoming a place where people are from
On how a lack of fluency in German is hurting Euro...
"Why Permanent Residents Should Be Allowed to Vote...
"Singapore is not serious ..."
Taking a look at Jonathan Last's arguments on migr...
On potentially unsustainable immigration in Singapore
"South Korea Scours Himalayas for Staff as Populat...
Hugh and Vistesen on "Japan's Looming Singularity"
More on the non-occurrence of a Chinese Russian Fa...
A few Tuesday demographics-related news links


In this new The Secrets of Success LIMITED EDITION DVD box set, Richard Bandler models four immensely successful people whom you will learn from, be inspired by - and whose skills you will be able to use in your own life.
Famous British actor, Christopher Ellison.
And, if you have ever wondered how Richard arrived at the powerful NLP techniques that he teaches in his seminars, books and DVDs, prepare to have his secrets revealed, too!
In The Secrets of Success you will see Richard modelling each of these immensely successful people, extracting from them powerful tips that will you will find incredibly useful in your life.
what are the big secrets that the amazingly successful go for what they want - and how you can use those secrets in your life, too.
PLEASE NOTE: The Limited Edition Secrets of Success will comprise a tightly restricted run of ONLY 500 sets. Because of that,we are expecting this set to sell out.
In The Secrets of Success you will hear Richard modelling each of these immensely successful people, extracting from them powerful tips that will you will find incredibly useful in your life.
Among the many secrets of success you will draw from this CD set, you will discover: how the most successful people are so often unable to acknowledge their own success. Coaches, trainers, therapists and NLPers this is a great CD to find out how Dr. Bandler elicites the right questions to find out their strategies.
1) Face To Face with Richard Bandler - a fascinating DVD in which Richard discusses and reveals the thinking behind his life's work: NLP.
2) An audio CD of each Secrets of Success programme, alongside each DVD, so that you can listen to Richard's interviews and conclusions while you're driving or relaxing.
The audio CD set of the The Secrets of Success will retail separately after this release at £49.95.
After this limited run sells out, neither will be bundled again with The Secrets of Success DVD set.
THAT MEANS THAT YOU WILL RECEIVE £76.95 worth of free DVDs and CDs, for free!


Listen to this weeks episode of The G Code as we discuss how what you are destined to do is often around you.
Hear the story of Erika Sykes creator and founder of Go-To-E your personal teammate outside the game as she shares her story about her love for the game, creating her business and turning her passion into a paycheck.
GO-TO-E is your personal teammate outside the game. Specializing in lifestyle and brand management we assist you in finding and maintaining a healthy balance between your personal and professional. Our ultimate goal is to connect you with the community and build a brand that is authentic and true to who you are. Services include but are not limited to lifestyle & brand management, public/community relations and individual services.
We will work as a team to build your public image while constantly encouraging you to reach your full potential. Our recipe for success is simple: Build your brand, maximize your opportunities, and strategically utilize your resources and time. We connect closely with our clients to identify their interests, passions and societal concerns. Your personal growth as an athlete, public figure, individual and philanthropist is important to us.
As your personal teammate, we've got you covered! Our team is friendly and flexible because we know life is ever-changing. We are available 24/7 to ensure each client receives the personalized and special attention they deserve. Each service is custom fitted to the client by uniquely devising a plan to suit an on-the-go, career driven lifestyle. We handle every project with the upmost professional care, quality, concern and execute each task in a timely fashion. Results are guaranteed to be inventive and detailed oriented to meet your specific wants and needs.
Go-To-E encourages our clients to participate in charitable and socially conscious activities both in their hometown and the city where their team is located. Our staff is prepared to assist in foundation development, event planning, media awareness, fundraising, and the creation of other charitable programs that will support the desired platform.
Erika Sykes founded Go-To-E, LLC as a way to help her friends who are professional athletes. She noticed the demands of their profession created an imbalance between their sport and everyday life. Through years of experience working within team settings, a top sports agency and managing various athletes day-to-day lives she became very skilled at helping individuals achieve balance. With a passion for helping athletes connect with their communities and establish a name for themselves, Sykes' vision would help athletes succeed far beyond the triumphs of the game!


text:
Ingrid fell in love with entertaining people through story and song at an early age. She has been acting in school and community theater productions for over 40 years. Encouraged by family and friends, Mrs. Bohn embarked on a career as an Interactive Theater and Storytelling performance artist. She has researched, written and presented Interactive Theater shows for numerous occasions entertaining audiences of all ages throughout Pennsylvania and New Jersey. Ingrid is a proud member of the Patchwork and Lehigh Valley Storyteller's Guilds. Her repertoire includes traditional folktales, fairytales, and literary stories from all over the world. She delivers these stories with an animated style that will capture your attention and keep you very entertained.
iubtheater.wix.com/ingrid-b-storyteller
iubtheater@yahoo.com


If you didn't get a gift this X-mas..or none that you enjoyed..come over to the shop and get yourself some ties. With the new year we have our latest shipment of ties. Were very big on classics like solid Grenadines and Twills, Repp stripes, and Pindots but with our own modern twist. Some of the Repp Stripes pictured have alternating Flannel wool stripes woven in between. The ties we make here in Toronto and the ones from Milan have a heavier inner layer (known as a super) which allows you to get a nice hefty knot and the fierce dimples we enjoy. We favor the Four in Hand Knot and here is a beautiful one on a black grenadine. In addition, a new shipment of ties and pocketsquares from Altea Milano comes to us near the end of the month. At Garrison Bespoke we live by the motto, "To Be or Knot to Be".


Immigration has always been an important topic, but in recent years its impact has dominated headlines, all levels of government and nearly every major American industry.
As a professional chef who has worked in the Des Moines restaurant world for eight years and currently prepares meals at a day care, I know our industry would collapse without foreign-born workers. They contribute along every point of the food supply chain, from farming and packing to cooking and serving. I've sweated alongside them in the clamor of hectic kitchens and can personally attest that they are some of the hardest workers I've ever met.
American and immigrant residents here increasingly understand the important contributions that immigrants and their children make. In my district, which comprises greater Des Moines and beyond, 1,087 immigrants run their own businesses, and each year the immigrant population pays more than $317.7 million in taxes, according to New American Economy. It stands to reason that our diversifying population could solve my industry's looming labor shortage. For example, we should welcome people of Hispanic and Asian descent who make up 26 percent and 7.4 percent of the restaurant and food service industry, according to the Bureau of Labor Statistics. Hispanics, in particular, tend to be younger than the general population, according to Pew. This means their growing population in the state could very well make up for the restaurant industry's expected loss of 16-to-24-year-olds.
Policies that encourage immigrants to contribute to our economy appeal to a wide range of people, including sought-after voting groups such as white, college-educated professional Iowa moms like me. I've dedicated so much of this past year to advocating for immigration policies that honor the dignity of new Americans because I want my daughter to grow up in a strong, vibrant and diverse America. That's why we settled in Beaverdale, where my daughter can attend school alongside our neighbors who are immigrants and students of color.
Embracing all of Des Moines' diversity benefits all of Des Moines. Our city's dining scene is thriving with more than 40 new restaurants opening in 2018 alone. Local residents can travel the world through the variety of cuisines - from Thai rolled ice cream or Filipino-Pakistani fusion to gastro pups and classic Americana - offered right here at home. If we want to keep enjoying the global tastes of the city's east side and the growing options in the greater metro area, let's remember that foreign-born people keep these kitchens running. Without them, the restaurant industry would collapse.
We need to embrace immigrants and make this country a welcoming place for all - for the sake of our economy, our communities and our children.


How do I make Plato delete the word just left of the cursor. Many popular editors use ctrl-backspace for this task, but Plato does not and I can't find anything else that works.
You can create your own macro for this and assign it to Ctrl+Back.
Place the cursor to the right of a word in the text.
Go to Tools then Record/Configure macro. Give the macro a name or use the default Macro1 etc.
Select the key VK_BACK and click on the Ctrl check box and then click on the Record button.
In the text, press Ctrl+Shift+Left Arrow and then the Back key to delete the word.
Stop the recording using the small Record dialog that is showing.
Thanks Paul. This works great, and exactly as you instructed.


Never smth 's class clown, beauty quiet unobtrusive unspectacular. And out of even a pleased, affable cutie serious. Girl like you're Isoshin reading quietly alone always.But, solely u know that cute in the most excellent and shy. Such a gal. Own and know the goodness of the in the class, angels say that proudly.


Walmart has the 2 Volt Camo 4x4 Ride On Toy on sale for only $99 (regularly $299).
This rough and tough Dynacraft Surge 12V Camo Quad is sure to provide hours of fun! Featuring mega ATV-style wheels, a real working horn, a camouflage pattern and a push-button accelerator with two speeds, this Quad is perfect for a young rider ready to tackle outdoor terrain.
Not the easiest to set up.
Better than the more expensive ones.


Little Siberica's Baby Soap for Everyday Care gently and carefully cleanses delicate skin. Organic Birch Extract soothes, softens and relieves irritation whilst Organic Bur-Marigold Extract moisturises and soothes skin.
Little Siberica products are formulated with the highest quality organic ingredients combined with protective vitamins and minerals. Each product is specifically designed to take care of a baby's delicate skin and hair whilst protecting them from negative environmental factors.
Use a dollop on damp skin, lather and rinse. Repeat if necessary. Suitable for newborns.
Aqua,Lauryl Glucoside, Salvia Officinalis Leaf Extract*, Sodium Coco-Sulfate, Glycerin*, Cocamidopropyl Betaine, Betula Alba Juice*, Sodium Chloride, Coco-Glucoside, Glyceryl Oleate, Bidens Tripartita Flower/Leaf/Stem Extract, Saponaria Officinalis Root Extract*, Geranium Sibiricum ExtractWH, Achillea Asiatica Flower/Leaf/Stem ExtractWH, Picea Obovata Needle ExtractWH, Benzyl Alcohol, Dehydroacetic Acid, Sodium Benzoate, Potassium Sorbate, Parfum, Citric Acid, Limonene**, Linalool**, Citral**.
(*) Issued from organic agriculture, (**) Natural components of essential oils, (WH) Wild harvested Siberian plants organic extracts.
Keep out of reach of children. Contains allergens Benzyl Salicylate, Limonene.


Studying to become a certified nursing assistant can be rather difficult. I know this well because I've been through this myself. The great amount of information you have to cram in your head may seem to be impossible to embrace at times. However, thousands of people successfully complete their CNA training and pass the necessary exams. This means that every person can do this if they really try hard.
One of my friends is currently attending CNA classes, and he has recently come to me for help. It turned out that his training course doesn't cover CPR (cardiopulmonary resuscitation) techniques thoroughly because they believe their trainees should get a separate CPR certification. This is why my friend asked me for guidance, as he doesn't have the time to attend another course at the moment. In order to help him, I drew up a simple guide on performing CPR. Today, I want to share this guide with you. Perhaps, someday it will help you save someone's life.
Even if you are a medical specialist yourself (though a low-ranking one), the first thing to do in an emergency situation is to call for help. CPR is an emergency measure that can keep a person alive a bit longer, but it won't remove the problem that caused someone to go into this death-like state. This means that you need to ensure that qualified doctors and nurses arrive with the necessary tools before you start doing anything. In a perfect case scenario, you should send one of the passersby to seek help while you are concentrating on trying to get the patient's heart to start beating again.
Considering how important these techniques are, be sure to find CNA classes that teach them properly or take a specialized CPR training course.
Place the heel of your hand in the middle of the patient's chest. Cover it with your other hand (your fingers should be interlaced). Now, you can start compressing the patient's chest. Your movements need to be precise and above all, regular. Compress the chest for about two inches and let it recoil completely, then start over. You need to do one hundred compressions per minute. This procedure will imitate a person's heartbeat in an attempt to get their heart to start over.
Don't be scared if you hear some pops and soft cracks. It's a normal reaction of a person's body to forceful chest compression. This mustn't stop you because even if you manage to crack the patient's rib, saving their life is more important.
After you perform thirty chest compressions, tilt the patient's head and lift their chin to clear their airway. Then pinch their nose, seal your mouth over the patient's, and give them a breath big enough to get the chest rise. If it's possible, use a CPR mask. It will be perfect if there is another person to assist you by performing rescue breathing while you are focusing on chest compressions.
If after giving the victim two rescue breaths, they still don't start breathing on their own, repeat the compressions. The cycle mustn't be interrupted. Every thirty compressions are followed by two breaths. Maintain the pace of 100 compressions per minute.
AED, or automated external defibrillator, is a device that is supposed to jumpstart the person's heart by giving the patient small electrical jolts. An AED is used as a more effective replacement for CPR. However, if you don't have access to this machine immediately after you see the person collapse, you will need to perform CPR for at least a minute before using it on the patient.
Despite the fact that CPR seems simple, performing it is very difficult because you will be working under extreme stress. Remember, you cannot allow yourself to panic in this situation. The patient's life is literally in your hands. Thus, you must perform the necessary procedures until help arrives.
Check the patient for signs of natural breathing every two minutes. To do this, you will need to stop the compressions. In case the patient still cannot breathe on his or her own, restart the cycle and repeat it as long as necessary.


So many wonderful things can happen in a math classroom between the time a question is asked and moment it is answered. We want our work to impact teachers in a way that helps students take their time to enjoy all the thinking and reasoning that can take place between the questions and the answers.
Though the correct answer is valued in mathematics, the journey that leads to the answer is full of opportunities for students to examine, analyze, communicate, & evaluate their thinking. Teachers posing the right questions and designing learning experiences that promote problem solving & critical thinking can enrich this journey.
We enjoy sharing practical strategies that increase the use of communication, problem-solving, reasoning, and technology to deepen students' understanding of math concepts. If you are a teacher in grades K-5, an elementary or middle school math coach or building administrator, then Math Journeys is here for you.
We are dedicated to enhancing mathematics instruction in classrooms across the state of Virginia. We focus on the NCTM standards as applied to the learning objectives in your school division.
If you enjoy Online Learning and collaborating with other teachers and math coaches to grow in your knowledge of math content and teaching strategies, check out our Virtual Booktalks.
Gwendolyn Best, lead professional learning designer, has more than 20 years of experience in education. Though she was trained as an elementary teacher, she started her career as a middle school math teacher because her graduate studies in Mathematics Education ignited a passion for teaching math. She plans and facilitates sessions that actively involve participants and equip them with a deeper understanding of content and practical engaging strategies.
Her experience as a technology integrator (ITRT) also ignited a passion for sharing how math journeys can be more meaningful for students when technology is a part of the equation. Between 2008 and 2013, she gained valuable experience coaching teachers and spending time in classrooms with students as she fulfilled her duties as the only employee in her school division whose position was devoted to elementary mathematics. She currently works to impact all subject areas as an instructional coach with Isle of Wight County Schools.