class LTE_scheduler(IntraSliceScheduler):
Basic intra slice LTE scheduler. It implements Round Robin algorithm for scheduling in a LTE Slice.
| Method | __init__ |
Undocumented |
| Instance Variable | BER |
Undocumented |
| Instance Variable | modTable |
Undocumented |
| Instance Variable | tbsTable |
Undocumented |
| Instance Variable | cqiTable |
Undocumented |
| Instance Variable | blerTable |
Undocumented |
| Method | loadModTable |
3GPP TS 36.213 <IP_ADDRESS>-1 merged with MCS table presented in R1-081483. |
| Method | loadTbsTable |
TBS table <IP_ADDRESS>.1-1 from 3GPP TS 36.213 |
| Method | loadCqiTable |
CQI table 7.2.3-1 from 3GPP TS 36.213 |
| Method | loadBlerTable |
BLER tables obtained from runing simulations with the reference simulation tool. |
| Method | setMod |
This method calculates spectral efficiency for the UE SINR and configured BER, and obtains CQI, MCS, and TBS |
| Method | setCQI |
Undocumented |
| Method | findMCS |
Undocumented |
| Method | setBLER |
Undocumented |
Inherited from IntraSliceScheduler
:
| Instance Variable | band |
Undocumented |
| Instance Variable | PRBs |
Undocumented |
| Instance Variable | schType |
Undocumented |
| Instance Variable | queue |
Undocumented |
| Instance Variable | ues |
Undocumented |
| Instance Variable | sinrModTable |
Undocumented |
| Instance Variable | ind_u |
Undocumented |
| Instance Variable | nrbUEmax |
Undocumented |
| Instance Variable | sbFrNum |
Undocumented |
| Instance Variable | dbMd |
Undocumented |
| Instance Variable | rets |
Undocumented |
| Instance Variable | sLoad |
Undocumented |
| Instance Variable | ueLst |
Undocumented |
| Instance Variable | ttiByms |
Undocumented |
| Instance Variable | mimomd |
Undocumented |
| Instance Variable | nlayers |
Undocumented |
| Instance Variable | direction |
Undocumented |
| Instance Variable | TDDsmb |
Undocumented |
| Instance Variable | robustMCS |
Undocumented |
| Instance Variable | tdd |
Undocumented |
| Instance Variable | sliceLabel |
Undocumented |
| Instance Variable | dbFile |
Undocumented |
| Method | loadSINR_MCStable |
MCS-SINR allocation table |
| Method | queuesOut |
This method manages the scheduler TB queue. This is a PEM method. |
| Method | findPackBeQ |
Undocumented |
| Method | queueUpdate |
This method fills scheduler TB queue at each TTI with TBs built with UE data/signalling bytes. |
| Instance Variable | rb_lim |
Undocumented |
| Method | rrcUncstSigIn |
Undocumented |
| Method | updIndUE |
Undocumented |
| Method | updSumPcks |
Undocumented |
| Method | dataPtoTB |
This method takes UE data bytes, builds TB and puts them in the scheduler TB queue. |
| Method | retransmitTB |
Undocumented |
| Method | resAlloc |
This method allocates cell PRBs to the different connected UEs. |
| Method | setTBS |
Undocumented |
| Method | insertTB |
Undocumented |
| Method | printQstate |
Undocumented |
| Method | printQue |
Undocumented |
| Method | printQtb |
Undocumented |
| Method | printPendTB |
Undocumented |
| Method | printDebData |
Undocumented |
| Method | printDebDataDM |
Undocumented |
| Method | printResAlloc |
Undocumented |
BLER tables obtained from runing simulations with the reference simulation tool.


The fastai library simplifies training fast and accurate neural nets using modern best practices. See the fastai website to get started. The library is based on research into deep learning best practices undertaken at fast.ai
, and includes “out of the box” support for vision
, text
, tabular
, and collab
(collaborative filtering) models.
Get dataset from the link:
library(fastai)
library(magrittr)
library(zeallot)
= data.table::fread('https://raw.githubusercontent.com/ohmeow/blurr/master/nbs/cnndm_sample.csv') cnndm_df
Get pretrained BART model from transformers
:
= transformers()
transformers
= transformers$BartForConditionalGeneration
BartForConditionalGeneration
= "facebook/bart-large-cnn"
pretrained_model_name c(hf_arch, hf_config, hf_tokenizer, hf_model) %<-%
get_hf_objects(pretrained_model_name,model_cls=BartForConditionalGeneration)
Create datablock and see batch:
= HF_SummarizationBeforeBatchTransform(hf_arch,
before_batch_tfm max_length=c(256, 130))
hf_tokenizer, = list(HF_Text2TextBlock(before_batch_tfms=before_batch_tfm,
blocks input_return_type=HF_SummarizationInput), noop())
= DataBlock(blocks=blocks,
dblock get_x=ColReader('article'),
get_y=ColReader('highlights'),
splitter=RandomSplitter())
= dblock %>% dataloaders(cnndm_df, bs=2)
dls
%>% one_batch() dls
[[1]]
[[1]]$input_ids
tensor([[ 0, 36, 16256, 43, 480, 2193, 7, 62, 7, 158,
135, 9, 70, 684, 4707, 6, 1625, 16, 4984, 25,
65, 9, 5, 144, 39865, 32273, 3806, 15, 5, 5518,
4, 20, 9544, 3455, 9, 2147, 464, 8, 1050, 29779,
26284, 15, 1632, 11534, 32, 6, 959, 6, 5608, 5,
8066, 9, 5, 247, 18, 4066, 7892, 4, 178, 89,
16, 10, 372, 432, 7, 2217, 4, 96, 5, 315,
3076, 9356, 4928, 36, 4154, 9662, 43, 623, 12978, 23853,
2521, 18, 889, 9, 10721, 625, 32273, 749, 1625, 5546,
365, 212, 4, 20, 889, 3372, 10, 333, 9, 601,
749, 14, 19655, 5, 1647, 9, 5, 3875, 18, 4707,
8, 32, 3891, 1687, 2778, 39865, 32273, 4, 1740, 63,
23491, 28919, 11, 5, 7599, 3939, 7, 63, 10602, 41166,
1634, 11, 12718, 1115, 281, 8, 5, 854, 3964, 21785,
14113, 8, 63, 38905, 8, 21950, 19947, 11, 5, 1926,
6, 1625, 10902, 41, 5784, 4066, 3143, 9, 39456, 8,
856, 25729, 4, 993, 195, 5243, 66, 9, 262, 1360,
38950, 1848, 4707, 303, 11, 1625, 480, 5, 144, 11,
143, 247, 480, 64, 129, 28, 13590, 624, 63, 7562,
4, 85, 16, 184, 7, 39179, 3505, 9, 27772, 6,
28482, 4707, 9, 7723, 6, 112, 6, 6115, 17576, 9,
7723, 8, 973, 6, 151, 1380, 14868, 9, 3451, 4,
221, 2839, 8367, 102, 6, 10, 786, 12, 7699, 1651,
14, 1364, 7, 3720, 8360, 8, 5068, 709, 11, 1625,
6, 34, 3919, 411, 4707, 61, 24, 161, 7648, 2072,
5, 1272, 2713, 30, 5, 2],
[ 0, 36, 16256, 43, 480, 6871, 24, 1655, 22049, 50,
41571, 1896, 54, 24509, 13, 244, 5, 363, 5, 601,
12, 180, 12, 279, 1896, 21, 738, 1462, 116, 280,
115, 6723, 15, 61, 985, 5, 3940, 2046, 4, 1868,
22049, 18, 8, 1896, 18, 8826, 2327, 117, 28946, 273,
11, 2559, 461, 4961, 25, 7, 1060, 28604, 2236, 16,
1317, 11347, 148, 10, 7158, 486, 31, 14, 902, 973,
6, 1125, 6, 363, 11, 23058, 6, 1261, 35, 4028,
26, 24, 21, 69, 979, 4, 280, 34920, 480, 19,
5767, 3809, 1243, 21605, 13875, 24, 21, 69, 979, 6,
41571, 6, 54, 16670, 66, 6, 150, 15151, 2459, 22049,
26, 24, 21, 69, 979, 6, 1655, 6, 54, 21,
16600, 71, 145, 4487, 30, 5, 6066, 480, 21, 1353,
7, 273, 18, 461, 7069, 6, 8, 1353, 7, 5,
200, 12, 5743, 1900, 403, 25451, 11, 1353, 1261, 4,
22049, 34, 4407, 45, 2181, 8, 1695, 37, 738, 5,
7044, 11, 1403, 12, 21409, 4, 20, 7158, 486, 702,
2330, 11, 461, 15, 273, 6, 39, 3969, 2026, 6,
124, 62, 49, 19395, 14, 24, 21, 1896, 6, 8,
45, 49, 3653, 6, 54, 21, 5, 29593, 368, 4,
4500, 4945, 628, 273, 1390, 6, 15151, 2459, 22049, 26,
79, 21, 686, 1655, 21, 5, 65, 16600, 4, 2612,
116, 41039, 10105, 37, 18, 127, 979, 39732, 264, 7173,
41039, 1250, 9, 5, 1065, 48149, 77, 553, 549, 79,
56, 655, 137, 1317, 69, 1655, 22049, 7923, 24120, 50,
8930, 66, 13, 244, 4, 2]], device='cuda:0')
[[1]]$attention_mask
tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], device='cuda:0')
[[1]]$decoder_input_ids
tensor([[ 0, 1625, 4452, 7, 62, 7, 158, 135, 9, 70,
684, 4707, 15, 3875, 479, 50118, 243, 16, 184, 7,
39179, 3505, 9, 27772, 6, 28482, 5103, 4707, 8, 973,
6, 151, 3505, 9, 3451, 479, 50118, 33837, 709, 8,
2147, 464, 16, 9405, 10, 380, 8793, 15, 63, 28809,
479, 50118, 133, 3274, 9587, 16, 223, 1856, 11, 14117,
9, 145, 5, 247, 18, 632, 7648, 479, 2, 1,
1, 1, 1, 1, 1, 1],
[ 0, 5178, 35, 83, 1443, 2470, 161, 97, 1283, 6,
45, 5, 7158, 486, 6, 40, 3094, 5, 403, 479,
50118, 5341, 35, 83, 2470, 13, 1896, 18, 284, 161,
37, 4265, 5, 3940, 40, 465, 22049, 2181, 479, 50118,
534, 15356, 2459, 22049, 161, 79, 2215, 5, 28604, 2236,
16, 14, 9, 69, 979, 479, 50118, 30541, 6, 41571,
1896, 18, 18631, 1843, 26, 14, 24, 69, 979, 18,
2236, 15, 5, 7158, 486, 479]], device='cuda:0')
[[1]]$labels
tensor([[ 1625, 4452, 7, 62, 7, 158, 135, 9, 70, 684,
4707, 15, 3875, 479, 50118, 243, 16, 184, 7, 39179,
3505, 9, 27772, 6, 28482, 5103, 4707, 8, 973, 6,
151, 3505, 9, 3451, 479, 50118, 33837, 709, 8, 2147,
464, 16, 9405, 10, 380, 8793, 15, 63, 28809, 479,
50118, 133, 3274, 9587, 16, 223, 1856, 11, 14117, 9,
145, 5, 247, 18, 632, 7648, 479, 2, -100, -100,
-100, -100, -100, -100, -100, -100],
[ 5178, 35, 83, 1443, 2470, 161, 97, 1283, 6, 45,
5, 7158, 486, 6, 40, 3094, 5, 403, 479, 50118,
5341, 35, 83, 2470, 13, 1896, 18, 284, 161, 37,
4265, 5, 3940, 40, 465, 22049, 2181, 479, 50118, 534,
15356, 2459, 22049, 161, 79, 2215, 5, 28604, 2236, 16,
14, 9, 69, 979, 479, 50118, 30541, 6, 41571, 1896,
18, 18631, 1843, 26, 14, 24, 69, 979, 18, 2236,
15, 5, 7158, 486, 479, 2]], device='cuda:0')
[[2]]
tensor([[ 1625, 4452, 7, 62, 7, 158, 135, 9, 70, 684,
4707, 15, 3875, 479, 50118, 243, 16, 184, 7, 39179,
3505, 9, 27772, 6, 28482, 5103, 4707, 8, 973, 6,
151, 3505, 9, 3451, 479, 50118, 33837, 709, 8, 2147,
464, 16, 9405, 10, 380, 8793, 15, 63, 28809, 479,
50118, 133, 3274, 9587, 16, 223, 1856, 11, 14117, 9,
145, 5, 247, 18, 632, 7648, 479, 2, -100, -100,
-100, -100, -100, -100, -100, -100],
[ 5178, 35, 83, 1443, 2470, 161, 97, 1283, 6, 45,
5, 7158, 486, 6, 40, 3094, 5, 403, 479, 50118,
5341, 35, 83, 2470, 13, 1896, 18, 284, 161, 37,
4265, 5, 3940, 40, 465, 22049, 2181, 479, 50118, 534,
15356, 2459, 22049, 161, 79, 2215, 5, 28604, 2236, 16,
14, 9, 69, 979, 479, 50118, 30541, 6, 41571, 1896,
18, 18631, 1843, 26, 14, 24, 69, 979, 18, 2236,
15, 5, 7158, 486, 479, 2]], device='cuda:0')
Define a Learner
object and train the model:
= hf_config$task_specific_params['summarization'][[1]]
text_gen_kwargs 'max_length'] = 130L; text_gen_kwargs['min_length'] = 30L
text_gen_kwargs[
text_gen_kwargs
= HF_BaseModelWrapper(hf_model)
model = HF_SummarizationModelCallback(text_gen_kwargs=text_gen_kwargs)
model_cb
= Learner(dls,
learn
model,opt_func=partial(Adam),
loss_func=CrossEntropyLossFlat(), #HF_PreCalculatedLoss()
cbs=model_cb,
splitter=partial(summarization_splitter, arch=hf_arch)) #.to_native_fp16() #.to_fp16()
$create_opt()
learn$freeze()
learn
%>% fit_one_cycle(1, lr_max=4e-5) learn
Predict a new text:
= c("About 10 men armed with pistols and small machine guns raided a casino in Switzerland
test_article and made off into France with several hundred thousand Swiss francs in the early hours
of Sunday morning, police said. The men, dressed in black clothes and black ski masks,
split into two groups during the raid on the Grand Casino Basel, Chief Inspector Peter
Gill told CNN. One group tried to break into the casino's vault on the lower level
but could not get in, but they did rob the cashier of the money that was not secured,
he said. The second group of armed robbers entered the upper level where the roulette
and blackjack tables are located and robbed the cashier there, he said. As the thieves
were leaving the casino, a woman driving by and unaware of what was occurring unknowingly
blocked the armed robbers' vehicles. A gunman pulled the woman from her vehicle, beat
her, and took off for the French border. The other gunmen followed into France, which
is only about 100 meters (yards) from the casino, Gill said. There were about 600 people
in the casino at the time of the robbery. There were no serious injuries, although one
guest on the Casino floor was kicked in the head by one of the robbers when he moved,
the police officer said. Swiss authorities are working closely with French authorities,
Gill said. The robbers spoke French and drove vehicles with French lRicense plates.
CNN's Andreena Narayan contributed to this report.")
= learn$blurr_summarize(test_article, num_return_sequences=3L)
outputs cat(outputs)
Robbers made off with several hundred thousand Swiss francs in the early hours of Sunday morning, police say .
The men, dressed in black clothes and black ski masks, split into two groups during the raid on the Grand Casino Basel .
There were no serious injuries, although one guest was kicked in the head by one of the robbers when he moved, police officer says .
A woman driving by unknowingly blocked the robbers' vehicles and was beaten to death .
Swiss authorities are working closely with French authorities, police chief says .
Robbers made off with several hundred thousand Swiss francs in the early hours of Sunday morning, police say .
The men, dressed in black clothes and black ski masks, split into two groups during the raid on the Grand Casino Basel .
There were no serious injuries, although one guest was kicked in the head by one of the robbers when he moved, police officer says .
A woman driving by unknowingly blocked the robbers' vehicles and was beaten to death .
Swiss authorities are working closely with French authorities, an officer says.
Robbers made off with several hundred thousand Swiss francs in the early hours of Sunday morning, police say .
The men, dressed in black clothes and black ski masks, split into two groups during the raid on the Grand Casino Basel .
There were no serious injuries, although one guest was kicked in the head by one of the robbers when he moved, police officer says .
A woman driving by unknowingly blocked the robbers' vehicles and was beaten to death .


DfE enquiries
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288
Press release
Details about a new scheme to allow 14- to 16-year-olds into further education (FE) colleges.
Further education (FE) colleges will be able to enrol 14- to 16-year-olds who wish to study high-quality vocational qualifications from September 2013, Skills Minister Matthew Hancock announced today (Monday).
FE colleges will be able to set up their own ‘14 to 16 centres’. The new centres will offer a combination of high-quality vocational and academic subjects and aim to attract students of all abilities who want early access to practical and technical education.
Currently, 14- to 16-year-olds can only attend FE colleges if they are released by their school, or if special arrangements are made with a local authority. This new freedom will allow FE colleges to enrol pupils directly and receive Government funding.
The decision is a response to the recommendation from Professor Alison Wolf in her review of vocational education. Professor Wolf found that for some young people, following a vocational route at 14 resulted in them doing better in the core academic subjects as well. She felt that an FE college, with its links to employers, workshops and equipment, can be the best place to do that.
Only FE colleges which meet certain criteria will be able to enrol and receive Government funding for 14- to 16-year-olds from next year. Colleges must:
Colleges must also have a dedicated space for students to go to for advice, tuition and some teaching although they will be able to use all college facilities. A senior member of the teaching staff will be responsible for the centre and ensuring the students receive the education and support they need.
Like all new education provision, the colleges will be subject to Ofsted inspection within two years of opening. The ‘14 to 16 centre’ will be inspected under Ofsted’s schools framework rather than the post-16 framework.
Skills Minister Matthew Hancock said:
We’re reforming education so it’s rigorous and stretching. So, to ensure every child has the option of high-quality, specialised vocational courses, as well as the critical academic core, we’ll allow good and improving colleges to take on pupils from the age of 14 so they can be taught by specialists. Whether a child is academic or vocational minded, they deserve the chance of excellent education that meets their needs.
Professor Alison Wolf said:
One of my major concerns in my review for the government, was that as many young people as possible should have access to high-quality specialist vocational courses - which means courses taught by vocational specialists.
The new freedom for colleges to enrol 14- and 15-year-olds directly should greatly increase the numbers who have such access. It complements previous changes in the rules governing who can teach in schools and I am delighted that my recommendations in this area have been adopted.
Further information, including the ‘readiness to open’ checklist and the Skills Minister’s letter to the College Implementation Group can be found on the information about the new 14 to 16 provision pages of the Department for Education’s website .
Alison Wolf’s review of vocational education can also be accessed on the Department for Education’s website .
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288
Published: 10 December 2012
From: Department for Education
Part of: Further education and training


When editing a group, if the group ID is changed then
files owned by that group will remain owned by the old GID. This option
can be used to update the ownership on files to the new GID by searching
either the home directories of all users who are members of this group
(Home Directories) or the entire filesystem (All Files). The All Files
option may take a long time, especially if you have many large or NFS
mounted filesystems.


| Policy Intent | Call Parameter | Compulsory? | Default | Description |
|---|---|---|---|---|
| tpm2/quote | ak | No | 0x810100AA | The handle of the key to sign the quote. |
| Rules | Rule Parameter | Compilsory ? | Default | Description |
|---|---|---|---|---|
| claimrules.* | margin | YES | Time margin in seconds, eg: "margin":0.2 | |
| tpm2rules.PCRsAllUnassigned | bank | YES | The name of the bank to check: eg: "bank":"sha1" Typical values: sha1, sha256, sha384, sha512 - will return error if bank does not exist |
|
| container.ImageVerification | rules | YES | [{"name": "tpm2rules.TPM2FirmwareVersion", "params": {}}] |
The list of the rules that need to be applied to build environment claims The provided rule list must have the same size and order as the list of the claims in the container image signature. By default, there is the TPM2FirmwareVersion verification of the build env. Please provide the required arguments for rules as well. |


A small collection of small programs written using MDS.
Click here to see categories and recomended scripts.


Mary Beth Vellequette
Unafffiliated
2020: Self-employed at MBV IP LLC with a primary focus on contract intellectual property management; Part-time employee at Patents Integrated LLC. Prior work experience included on attached CV.
Mount Holyoke College - Major in Chemistry, minor in Physics, 1989 Stanford University - PhD in Chemistry, 1994 Registered Patent Agent, US Patent and Trademark Office
80303
Donations include: Hillary Victory Fund and, in 2020 various Democratic Congressional and Senate candidates in 2020, and BlueRising PAC, all via Act Blue.
Volunteer with 2020 Victory and Postcards to Voters
I've been a longtime donor to and supporter of the Emergency Family Assistance Association (EFAA) in Boulder as well as Colorado Public Radio. These organizations have missions of fairness, inclusivity, and equality that resonate with my family's own philosophy.
I voted for the formation of the commissions in 2018 because I felt then, and still do now, that the continuation of the current highly partisan politics won't end unless the redistricting process changes. The elected should not determine their electors and thus the status quo redistricting process is detrimental to our state. The process should be based on data, logic and reason, not on political advantage. I dropped my party affiliation over 10 years ago because I sensed that both major parties were headed away from the moderate middle. While I am unlikely to change many minds when it comes to highly charged political topics, it seems that "moderate middle" is an excellent fit on a commission whose purpose is to create fair voting districts. Fair voting districts is the only way to ensure equitable representation of all Colorado residents, and I would like nothing more than to help my state reach that goal.
At the heart of consensus building is the recognition that the final resolution to a problem likely will not check every box for everyone, but will be a solution that presents a win for all involved with respect to their major concerns, without forcing unreasonable compromise. Reaching consensus is generally a smoother process when a group can agree on a concrete set of measurable, quantifiable goals. In this case, there are already fixed criteria for redistricting that the commission must meet that provide a framework for the inevitable tradeoffs that will occur, and the guiderails to ensure that the commission moves toward the consensus necessary to achieve its goals. However, these criteria cannot be satisfied in mathematical isolation, and consensus in this case must necessarily incorporate input from the community. The commission must identify the key concerns of state community stakeholders, and consider those concerns as it weaves together ideas towards a map that ultimately satisfies the redistricting criteria. I believe that one of my strengths is the ability to listen critically and get to the heart of someone's concern. This coupled with my scientific training in the unbiased analysis of data will allow me to promote solutions in redistricting that address stakeholder concerns in a fair, data-driven way.
My approach to many problems, whether scientific, business or personal, often starts with the question "why?". I don't accept an argument at face value, but require that its inclusion in my analysis be grounded in fact and supported by data. The ability to look at hard data and draw unbiased conclusions is part of my DNA as a scientist and will serve the commission well in its goal towards creating fair voting districts.
Female


Class MixedRealityBoundaryVisualizationProfile
Configuration profile settings for setting up boundary visualizations.
Inheritance
Inherited Members
Namespace: XRTK.Definitions.BoundarySystem
Assembly: XRTK.dll
Syntax
[CreateAssetMenu(menuName = "Mixed Reality Toolkit/Boundary Visualization Profile", fileName = "MixedRealityBoundaryVisualizationProfile", order = 11)]
public class MixedRealityBoundaryVisualizationProfile : BaseMixedRealityProfile
Properties
| Improve this Doc View SourceBoundaryCeilingMaterial
The material to use for displaying the boundary ceiling.
Declaration
public Material BoundaryCeilingMaterial { get; }
Property Value
| Type | Description |
|---|---|
| Material |
BoundaryHeight
The developer defined height of the boundary, in meters.
Declaration
public float BoundaryHeight { get; }
Property Value
| Type | Description |
|---|---|
| Single |
Remarks
The BoundaryHeight property is used to create a three dimensional volume for the play space.
BoundaryWallMaterial
The material to use for displaying the boundary geometry walls.
Declaration
public Material BoundaryWallMaterial { get; }
Property Value
| Type | Description |
|---|---|
| Material |
BoundaryWallsPhysicsLayer
The physics layer to assign to the generated boundary walls.
Declaration
public int BoundaryWallsPhysicsLayer { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |
CeilingPhysicsLayer
The physics layer to assign to the generated boundary ceiling.
Declaration
public int CeilingPhysicsLayer { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |
FloorMaterial
The material to use for the floor GameObject when created by the boundary system.
Declaration
public Material FloorMaterial { get; }
Property Value
| Type | Description |
|---|---|
| Material |
FloorPhysicsLayer
The physics layer to assign to the generated floor.
Declaration
public int FloorPhysicsLayer { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |
FloorScale
The size at which to display the rectangular floor plane GameObject.
Declaration
public Vector2 FloorScale { get; }
Property Value
| Type | Description |
|---|---|
| Vector2 |
PlayAreaMaterial
The material to use for the rectangular play area GameObject.
Declaration
public Material PlayAreaMaterial { get; }
Property Value
| Type | Description |
|---|---|
| Material |
PlayAreaPhysicsLayer
The physics layer to assign to the generated play area.
Declaration
public int PlayAreaPhysicsLayer { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |
ShowBoundaryCeiling
Should the boundary system display the boundary ceiling?
Declaration
public bool ShowBoundaryCeiling { get; }
Property Value
| Type | Description |
|---|---|
| Boolean |
ShowBoundaryWalls
Should the boundary system display the boundary geometry walls?
Declaration
public bool ShowBoundaryWalls { get; }
Property Value
| Type | Description |
|---|---|
| Boolean |
ShowFloor
Should the boundary system display the floor?
Declaration
public bool ShowFloor { get; }
Property Value
| Type | Description |
|---|---|
| Boolean |
ShowPlayArea
Should the boundary system display the play area?
Declaration
public bool ShowPlayArea { get; }
Property Value
| Type | Description |
|---|---|
| Boolean |
ShowTrackedArea
Should the boundary system display the tracked area?
Declaration
public bool ShowTrackedArea { get; }
Property Value
| Type | Description |
|---|---|
| Boolean |
TrackedAreaMaterial
The material to use for the boundary geometry GameObject.
Declaration
public Material TrackedAreaMaterial { get; }
Property Value
| Type | Description |
|---|---|
| Material |
TrackedAreaPhysicsLayer
The physics layer to assign to the generated tracked area.
Declaration
public int TrackedAreaPhysicsLayer { get; }
Property Value
| Type | Description |
|---|---|
| Int32 |


As of 15 minutes ago, my almost-7-years-running Winning Slowly cohost Stephen Carradini and I have now published more episodes this season than any previous. Good job, us!


I am a Web Designer and UI Developer . I am working in the web / IT industry from last 5 years. currently i am holding a position of UI Developer in Convergence InfoTech ltd, Bangalore.
I have extensively worked on Designing and Coding various User Interfaces and Prototypes, which includes Web and Desktop based applications, large / small scale websites.
SGPA: 6.7
Percentage : 59%
Percentage : 62%
Apart from being a Front end/UI developer, I enjoy most of my time being outdoors.I love Photography so I am ready explore new places and capture the Landscape and some awesome moments .
When forced indoors, I follow a number of sci-fi and fantasy genre movies and television shows, I am enjoying acting,dancing,singing , and I spend a large amount of my free time exploring the latest technolgy advancements in the front-end web development world.


The Elko Director Protocols
The Director
The Director is an Elko server that coordinates the operation of a collection of Context Servers. In particular, the Context Servers that a Director is working for keep it informed of their relative load factors, the opening and closing of contexts, the coming and going of users, and their availability for providing context services to arriving users.
The Director acts as a first contact point for users seeking entry to a particular context. Rather than contacting a Context Server directly, a user client instead contacts a Director (indeed, the client may not even know the network address of any Context Server). The client seeking entry informs the director of the ref of the context they wish to enter and the ref of the user as whom they wish to enter. The Director then checks to see if the requested context is already loaded on one of the Context Servers it knows about. If it is, the Director directs the user client to that Context Server. If it is not, the Director picks a suitable Context Server and requests it to open the desired context, and directs the user client to to this newly chosen Context Server. In either case, when the Director directs a client to a Context Server, it does not merely give the client the address of the Context Server, but also provides a reservation, an unguessable token that the Director also forwards to the chosen Context Server along with the context ref of the context being entered and the user ref of the user. When the client contacts the Context Server, it provides this reservation token along with its other entry credentials. The Context Server only permits a given client to enter a given context if it also provides the appropriate reservation token to do so. Reservations also expire after a short time (currently 30 seconds). This scheme allows the Director to act as a load balancer for a server farm full of Context Servers.
Since a Director keeps track of the active users on its collection of Context Servers, it can also enable users to rendezvous with each other, by directing a user to the appropriate context containing another user whom they wish to meet. This is especially important in highly scalable contexts, since context cloning may result in more than one instance of a particular context being active at any given time. The Director keeps track of which users are in which clone instances. In a similar vein, the Director can act as a message relay between users and contexts on different Context Servers.
Finally, since a Director is in contact with the entire collection of Context Servers, it can act as a centralized administration contact point for the server farm, enabling the whole farm or selected servers to be reinitialized, shutdown, or directed to take other specific actions.
A Director understands three different JSON message protocols. These correspond to the three kinds of actors who may wish to communicate with a Director: Context Servers providing context services, clients seeking reservations for entry into contexts, and administrators. Each of the ports that a Director listens for connections on can be configured to support any or all of these protocols.
Each of these protocols is associated with a particular object ref to which messages should be addressed:
director
for client messages requesting direction to Context Servers.provider
for Context Servers providing services.admin
for administrator messages.
Common Protocols
While there are three different message protocols, they share a common set of messages pertaining to connection housekeeping. These messages may be targeted at any of the three protocol objects described above.
auth
→ { to:REF, op:"auth", auth:?AUTHDESC, label:?STR}
This message begins a new session with the Director, providing whatever authorization credentials as may be appropriate (according to the Director's server configuration) to gain access to services.
An auth
message must be the first message sent
to director
, provider
, or admin
on any
new connection to the Director. Any other message to these objects will result
in immediate termination of the connection.
If the auth
operation fails, the connection will be terminated
by the Director. Otherwise, the client is thereafter free to send messages
according to the protocol of the REF
that was authorized.
auth
is a bundle of authorization information, as described below. The specific authorization information that is relevant depends on the configuration of the Director server port being connected to. If theauth
parameter is omitted, an uncontrolled access in open mode is assumed.label
is an optional label for the connection. This will be used in server log entries for debugging purposes and for identifying the connection in administrative requests.
Authorization information
The auth
parameter of the auth
message describes
a bundle of authorization information to authorize access. Its general form
is:
{ type:"auth", mode:STR, code:?STR, id:?STR }
where:
mode
is the requested authorization mode. Currently recognized authorization modes are"open"
and"password"
. Other modes may be relevant in the future or when talking to other kinds of servers.code
is an authorization code, whose meaning varies depending on the authorization mode. In the case of open mode, it is irrelevant and should not be provided. In the case of password mode, it is a password string.id
is an optional identity string, whose meaning varies depending on the authorization mode. In the case of open mode, it is irrelevant and should not be provided. In the case of password mode, it may or may not be relevant depending on the configuration.
disconnect
→ { to:REF, op:"disconnect" }
This message requests the server to terminate its connection to the sender. The connection to the server is broken.
ping
→ { to:REF, op:"ping", tag:?STR }
This message tests connectivity to the server.
tag
is an optional string that may be anything of the client's choosing.
If the message is successfully received by the server, it will reply with:
← { to:REF, op:"pong", tag:?STR }
tag
echoes the tag from theping
message, if there was one, or will be omitted if the originalping
also omitted it.
debug
→ { to:REF, op:"debug", msg:STR }
This message delivers debugging information to the server. If the server is
configured to permit this, the string given in the msg
parameter
will be written to the server's log. If the server is not configured to permit
this, this message will simply be ignored.
User Protocol
The Director user protocol is used by user clients requesting reservations for entry to contexts. There is only one message beyond the basic protocol:
reserve
→ { to:"director", op:"reserve", protocol:STR,
context:CONTEXTREF_STR, user:?USERREF_STR }
This message requests a reservation for entry into a context.
protocol
is the communications protocol by which the requestor wishes to communicate with the Context Server into which the requested context will be loaded. Valid values currently are"http"
,"tcp"
, or"rtcp"
.context
is the ref of the context into which entry is sought.user
is the optional ref of the user who is seeking entry. If omitted, the reservation being requested will be anonymous.
← { to:"director", op:"reserve", context:CONTEXTREF_STR,
user:?USERREF_STR, hostport:STR,
reservation:STR }
where:
context
is the ref of the context, which will match the corresponding parameter from the request.user
is the ref of the user, which will match the corresponding parameter from the request (and will be omitted if it was omitted from the request).hostport
is a string of the form"hostname:portnumber"
indicating the host name and port number of the Context Server on which the reservation has been made.reservation
is the reservation token to present to the Context Server in theentercontext
request to enter the context.
← { to:"director", op:"reserve", context:CONTEXTREF_STR,
user:?USERREF_STR, deny:STR }
where:
context
anduser
have the same meanings as in the success case.deny
is an error message string indicating why the reservation could not be made.
Provider Protocol
The Director provider protocol is used by providers of context services, that is, by Context Servers, to aprise the Director of their availability.
address
→ { to:"provider", op:"address", protocol:STR,
hostport:STR }
This message informs the Director of the sender's availability to speak some protocol at some network address.
where:
protocol
is a communications protocol that the sender speaks at the indicated address. Valid values currently are"tcp"
,"http"
, and"rtcp"
.hostport
is a string of the form"hostname:portnumber"
indicating the host name and port number at which the sender may be contacted using the indicated protocol.
context
→ { to:"provider", op:"context", context:CONTEXTREF_STR,
open:BOOL, yours:BOOL, maxcap:?INT,
basecap:?INT, restricted:?BOOL }
This message informs the Director of the opening or closing of a context by the sending Context Server.
where:
context
is the ref of the context that was opened or closed.open
is a flag that is true if the context was opened, false if it was closed.yours
is a flag that is true if this context was opened at the request of the Director to whom this message is being sent. This is used in a handshake to resolve a race condition that can happen if multiple different Directors concurrently request different Context Servers to open the same context. Note that this flag always indicates whether the recipient requested the opening of the context, regardless of whether this message is describing a context open or a context close.maxcap
indicates the maximum number of users that the Director should allow to be admitted to the context. This is only relevant on a context open. It is optional, and defaults to -1, meaning unlimited capacity, if omitted.basecap
indicates the maximum number of users that the Director should place in the context before directing a clone of the context to be opened instead. This is only relevant on a context open, and defaults to the value ofmaxcap
if omitted. A value of -1 indicates that the context should never be cloned.restricted
is a flag that is true if the context is restricted. A restricted context is one that users (clients authorized to send messages to"user"
may not request a reservation for (though context servers themselves may). This is only relevant on a context open.
It is optional and defaults to false, meaning unrestricted, if omitted.
load
→ { to:"provider", op:"load", factor:FLOAT }
This message informs the Director of sender's current load.
where:
factor
is sender's current load factor. This may be any value, though all Context Servers talking to a given Director should all share a single, commensurable metric.
relay
→ { to:"provider", op:"relay", context:?CONTEXTREF_STR,
user:?USERREF_STR, msg:JSONOBJ }
This message requests the Director to relay a message to a user or context on a different Context Server from the sender.
where:
context
is the ref of the context to relay the message to.user
is the ref of the user to relay the message to.msg
is the message to relay.
context
and user
parameters are mutually
exclusive, and one or the other must be provided. If the base ref of a cloned
context or user is specified, the message will be relayed to all Context
Servers (other than the sender) who host clones of the indicated recipient
context or user.
The relay
message will result in the corresponding
relay
message being sent to all relevant Context Servers (i.e.,
those serving the context or user indicated). It takes the same form as the
inbound request:
← { to:"provider", op:"relay", context:?CONTEXTREF_STR,
user:?USERREF_STR, msg:JSONOBJ }
user
→ { to:"provider", op:"user", context:CONTEXTREF_STR,
user:USERREF_STR, on:BOOL }
This message informs the Director of the entry or exit of a user to or from a context hosted by the sender.
where:
context
is the ref of the context that the user entered or exited.user
is the ref of the user who entered or exited.on
is a flag that is true the user entered, false if the user exited.
willserve
→ { to:"provider", op:"willserve", context:STR,
capacity:?INT }
This message informs the Director of the sender's availability to serve some family of contexts.
where:
context
is the ref prefix of the family of contexts that the sender is prepared to serve. Typically this is the string"context"
, but that is not mandatory.capacity
is an optional limit on the maximum number of user clients that the sender is willing to serve for the indicated class of contexts. If omitted, it defaults to -1, indicating no limit.
close
This message may be sent by the Director to the Context Server. It instructs the Context Server to force the closure of a context or the disconnection of a user.
← { to:"provider", op:"close", context:?CONTEXTREF_STR,
user:?USERREF_STR, dup:?BOOL }
where:
context
is the ref of the context to close.user
is the ref of the user to disconnect.dup
is true if the context closure or user disconnection is requested as part of the Director resolving a duplicated context open.
The context
and user
parameters are mutually
exclusive.
reinit
This message may be sent by the Director to the Context Server. It instructs the Context Server to reinitialize itself.
← { to:"provider", op:"reinit" }
shutdown
This message may be sent by the Director to the Context Server. It instructs the Context Server to shut itself down.
← { to:"provider", op:"shutdown", kill:?BOOL }
where:
kill
is an optional flag that if true orders an abrupt termination of the Context Server. Normally, the server would empty its message queue, checkpoint any active state, and perform an orderly shutdown. However, if thekill
flag is true, it will exit immediately without stopping to clean things up. The value defaults to false if the parameter is omitted.
say
This message may be sent by the Director to the Context Server. It requests the Context Server to deliver asay
message to a particular user or to
the users in a particular context.
← { to:"provider", op:"say", context:?CONTEXTREF_STR,
user:?USERREF_STR, text:STR }
where:
context
is the ref of a context being spoken to.user
is the ref of a user being spoken to.text
is speech text directed at the indicated context or user.
context
and user
parameters are mutually
exclusive, and one or the other must be provided. If the base ref of a cloned
context or user is specified, all clones of the indicated context or user will
be spoken to.
Admin Protocol
The Director admin protocol is used to administer the Director and, indirectly, the entire collection of Context Servers it is in contact with.
close
→ { to:"admin", op:"close", context:?CONTEXTREF_STR,
user:?USERREF_STR }
This message instructs the Director to force the closure of a context or the disconnection of a user.
where:
context
is the ref of the context to close.user
is the ref of the user to disconnect.
context
and user
parameters are mutually
exclusive, and one or the other must be provided. If the base ref of a cloned
context or user is specified, all clones of the indicated context or user will
be closed.
If the indicated context is open or the indicated user is connected, the
Director will send a provider close
message to each relevant
connected Context Server instructing it to take the requested action.
dump
→ { to:"admin", op:"dump", depth:INT, provider:?STR,
context:?CONTEXTREF_STR }
This message requests the Director to provide a dump of its state to the requesting administrator.
where:
depth
indicates the depth of detail to provide (see below).provider
optionally limits the scope of the information dumped to providers matching the parameter string. This is matched against the label string provided in theauth
message that providers sent when they connected to the Director.context
optionally limits the scope of the information dumped to contexts matching the parameter string.
← { to:"admin", op:"dump", numproviders:INT,
numcontexts:INT, numusers:INT,
providers:[PROVIDERDUMP] }
where:
numproviders
is the number of providers, currently connected to the Director and providing context services, that are described by this dump.numcontexts
is the number of open contexts that are described by this dump.numusers
is the number of connected users that are described by this dump.providers
is an array of provider dump descriptors, each of which describes one provider. This will only be provided if the value of thedepth
parameter was greater than 0.
{ type:"providerdesc", provider:STR, numcontexts:INT,
numusers:INT, load:FLOAT, capacity:INT,
hostports:[STR], protocols:[STR], serving:[STR],
contexts:[OPENCONTEXTDUMP] }
where:
provider
is the label that the provider gave for itself in theauth
message with which it connected to the Director.numcontexts
is the number of open contexts currently being served by this provider.numusers
is the number of connected users currently being served by this provider.load
is this provider's current load factor.capacity
is number of user clients this provider is willing to serve.hostports
is an array of"hostname:portnumber"
strings listing all the ports at which the provider is providing context services.protocols
is an array of strings, parallel tohostports
, indicating the protocol spoken at the correspondinghostports
entry. The value of each element of this array will be either"tcp"
or"http"
.serving
is an array of strings listing the context families that the provider is willing to serve.contexts
is an array of context dump descriptors, each of which describes one open context. This will only be provided if the value of thedepth
parameter was greater than 1.
{ type:"contextdesc", context:CONTEXTREF_STR, numusers:INT,
users:[USERREF_STR] }
where:
context
is ref of the open context.numusers
is the number of users currently in the context.users
is an array of the refs of the users currently in the context. This will only be provided if the value of thedepth
parameter was greater than 2.
find
→ { to:"admin", op:"find", context:?CONTEXTREF_STR,
user:?USERREF_STR }
This message requests the Director to provide the location of a context or user.
where:
context
is the ref of the context whose location is sought.user
is the ref of the user whose location is sought.
context
and user
parameters are mutually
exclusive, and one or the other must be provided. If the base ref of a cloned
context or user is specified, the locations of all clones of the indicated
context or user will be returned.
If a context location was requested, the Director will reply with:
← { to:"admin", op:"context", context:?CONTEXTREF_STR,
open:BOOL, provider:?STR,
clones:[CONTEXTREF_STR] }
where:
context
is the ref of the context that was inquired about.open
is true if the the context is open, on one of the Director's provider Context Servers, false if not.provider
is the label of the provider on which the context is open, it is open. This field is absent if the context is not open.clones
is an optional array of context refs of open clones of the context, if the context is cloned (note that in such a case,open
will be false).
If a user location was requested, the Director will reply with:
← { to:"admin", op:"user", user:?USERREF_STR, on:BOOL,
contexts:[CONTEXTREF_STR] }
where:
user
is the ref of the user that was inquired about.on
is true if the the user is connected to one of the Director's provider Context Servers, false if not.contexts
is an array of context refs of all open contexts that the user is in. This will be provided only if the user has entered at least one context.
listcontexts
→ { to:"admin", op:"listcontexts" }
This message requests the Director to provide a list of currently open contexts.
The Director will reply with:
← { to:"admin", op:"listcontexts", contexts:[CONTEXTREF_STR] }
where:
contexts
is an array of context refs of open contexts.
listproviders
→ { to:"admin", op:"listproviders" }
This message requests the Director to provide a list of known providers (i.e., Context Servers).
The Director will reply with:
← { to:"admin", op:"listproviders", providers:[STR] }
where:
providers
is an array of the labels of providers currently connected to the Director.
listusers
→ { to:"admin", op:"listusers" }
This message requests the Director to provide a list of currently connected users.
The Director will reply with:
← { to:"admin", op:"listusers", users:[USERREF_STR] }
where:
users
is an array of users refs of connected users.
reinit
→ { to:"admin", op:"reinit", provider:?STR,
director:?BOOL }
This message instructs the Director to reinitialize one or more servers.
where:
provider
is the optional label for a provider to be reinitialized. Alternatively, the string"all"
indicates that all providers are to be reinitialized. If omitted, no providers will be reinitialized.director
is an optional flag that if true directs that the Director itself also be reinitialized. The value defaults to false if the parameter is omitted. Director reinitialization, if requested, will take place after any provider reinitializations.
reinit
message on its provider connection.
relay
→ { to:"admin", op:"relay", context:?CONTEXTREF_STR,
user:?USERREF_STR, msg:JSONOBJ }
This message requests the Director to relay a message to a user or context
on whatever Context Server is appropriate. It takes the exact same form and
has the same behavior as the corresponding message in the provider protocol,
except of course that it is targeted at "admin"
instead of
"provider"
.
say
→ { to:"admin", op:"say", context:?CONTEXTREF_STR,
user:?USERREF_STR, text:STR }
This message requests the Director to deliver a say
message to
a particular user or to the users in a particular context.
where:
context
is the ref of a context being spoken to.user
is the ref of a user being spoken to.text
is speech text directed at the indicated context or user.
context
and user
parameters are mutually
exclusive, and one or the other must be provided. If the base ref of a cloned
context or user is specified, all clones of the indicated context or user will
be spoken to.
The Director will send a corresponding say
message to each
relevant Context Server.
shutdown
→ { to:"admin", op:"shutdown", provider:?STR,
director:?BOOL, kill:?BOOL }
This message instructs the Director to shut down one or more servers.
where:
provider
is the optional label for a provider to be shut down. Alternatively, the string"all"
indicates that all providers are to be shut down. If omitted, no providers will be shut down.director
is an optional flag that if true directs that the Director itself also be shut down. The value defaults to false if the parameter is omitted. Director shutdown, if requested, will take place after any provider shutdowns.kill
is an optional flag that if true orders an abrupt termination of the indicated server(s). Normally, servers will empty their message queues, checkpoint any active state, and perform an orderly shutdown. However, if thekill
flag is true, they will exit immediately without stopping to clean things up. The value defaults to false if the parameter is omitted.
shutdown
message on its provider connection.
watch
→ { to:"admin", op:"watch", context:?CONTEXTREF_STR,
user:?USERREF_STR }
This message requests the Director to begin providing ongoing updates as to the location of a context or user.
where:
context
is the ref of the context of interest.user
is the ref of the user of interest.
context
and user
parameters are mutually
exclusive, and one or the other must be provided. If the base ref of a cloned
context or user is specified, the locations of all clones of the indicated
context or user will be watched.
The operation of watch
is similar to find
, except
that the Director maintains continuous surveillance of the context or user
indicated. Each time the context is opened or close, or the user enters or
exits, a context
or user
message will be sent to the
administrator. These messages take the same form as they do in the replies to
the find
request; the only difference is that the behavior is
spontaneous and asynchronous.
unwatch
→ { to:"admin", op:"unwatch", context:?CONTEXTREF_STR,
user:?USERREF_STR }
This message requests the Director to cease providing ongoing updates as to
the location of a context or user. It undoes the effect of an earlier
watch
request.
where:
context
is the ref of the context of interest.user
is the ref of the user of interest.
context
and user
parameters are mutually
exclusive, and one or the other must be provided. For this request to be
useful, the parameters should match those of an earlier watch
request. However, requesting an unwatch
of a context or user that
was not actually being watched is a benign operation with no effect.


The pyglet.window, pyglet.media, pyglet.app and pyglet.text modules make use of a consistent event pattern, which provides several ways to attach event handlers to objects. You can also reuse this pattern in your own classes easily.
Throughout this documentation, an "event dispatcher" is an object that has events it needs to notify other objects about, and an "event handler" is some code that can be attached to a dispatcher.


Syllabus
Welcome to CS 5963 / Math 3900! This course is an introduction to data science. The major goals of this course are to learn how to use tools for acquiring, cleaning, analyzing, exploring, and visualizing data; making data-driven inferences and decisions; and effectively communicating results. These will be accomplished through an in-depth sequence of topics which will introduce students to the following data preparation and analysis methods:
- Acquiring data through web-scraping and data APIs
- Cleaning and reshaping messy datasets using methods such as regular expressions or dedicated tools such as open refine
- Exploratory data analysis and visualization
- Rating and ranking
- Clustering and classification
- Recommendation
- Network analysis
- Regression and statistical inference
- Natural language processing
A major component of this course will be learning how to use python-based programming tools to apply these methods to real-life datasets.
Course Logistics
Prerequisites
Students are expected to have some programming experience and have at least taken Calculus I (UU Math 1170, 1210, 1250 1310, 1311 or equivalent). If in doubt, ask one of the instructors. You should also own a notebook computer that you can bring to class.
Textbooks
There is no required textbook for the class. However, students may find it useful to consult the following textbooks for reference.
Data Science from Scratch: First Principles with Python
Joel Grus
O’Reilly Media (2015)
Data science libraries, frameworks, modules, and toolkits are great for doing data science, but they’re also a good way to dive into the discipline without actually understanding data science. In this book, you’ll learn how many of the most fundamental data science tools and algorithms work by implementing them from scratch.
Read for free on Campus
Code
Doing Data Science: Straight Talk from the Frontline
Cathy O’Neil, Rachel Schutt
O’Reilly Media (2013)
Now that people are aware that data can make the difference in an election or a business model, data science as an occupation is gaining ground. But how can you get started working in a wide-ranging, interdisciplinary field that’s so clouded in hype? This insightful book, based on Columbia University’s Introduction to Data Science class, tells you what you need to know.
Blog that was the basis for this book
Learning the Pandas Library: Python Tools for Data Munging, Analysis, and Visualization
Matt Harrison
CreateSpace Independent Publishing Platform (2016)
Python is one of the top 3 tools that Data Scientists use. One of the tools in their arsenal is the Pandas library. This tool is popular because it gives you so much functionality out of the box. In addition, you can use all the power of Python to make the hard stuff easy!
Learning the Pandas Library is designed to bring developers and aspiring data scientists who are anxious to learn Pandas up to speed quickly. It starts with the fundamentals of the data structures. Then, it covers the essential functionality. It includes many examples, graphics, code samples, and plots from real world examples.
Mining of Massive Datasets
Jure Leskovec, Anand Rajaraman, and Jeffrey David Ullman
2nd ed., Cambridge University Press (2014)
The book is based on Stanford Computer Science course CS246: Mining Massive Datasets (and CS345A: Data Mining).
The book, like the course, is designed at the undergraduate computer science level with no formal prerequisites. To support deeper explorations, most of the chapters are supplemented with further reading references.
Download from book website
Data Mining: Concepts and Techniques
Jiawei Han, Micheline Kamber, and Jian Pei
3rd ed., Morgan Kaufmann (2011)
Data Mining: Concepts and Techniques provides the concepts and techniques in processing gathered data or information, which will be used in various applications. Specifically, it explains data mining and the tools used in discovering knowledge from the collected data. This book is referred as the knowledge discovery from data (KDD). It focuses on the feasibility, usefulness, effectiveness, and scalability of techniques of large data sets.
An Introduction to Statistical Learning
Gareth James, Daniela Witten, Trevor Hastie, Robert Tibshirani
Springer Texts in Statistics (2015)
This book provides an introduction to statistical learning methods. It is aimed for upper level undergraduate students, masters students and Ph.D. students in the non-mathematical sciences. The book also contains a number of R labs with detailed explanations on how to implement the various methods in real life settings, and should be a valuable resource for a practicing data scientist.
Read for free
Course Components
Lectures
The class meets twice a week for lectures and joint class activities. The class activities are designed to help you master the relevant materials, to work on your homework in groups, and to get you started on your project. The weekly schedule of lectures is posted on the course web site.
Labs
Labs are an important aspect of the course, as they are meant to give you the technical skills to successfully complete the homework assignments and projects, complementing the theoretical knowledge taught in lectures. Sections will typically consist of a short presentation and live coding, followed by time to complete some exercises with the help of the instructors. Lab topics and times are announced in the schedule.  Labs can be downloaded here.
Reading Assignments
The course schedule includes required weekly readings – you are free to study ahead, but the schedule ensures that you are prepared for the activities in class and the homework. The goal of the reading assignments is to familiarize yourself with new terminology and definitions, to learn new design and programming skills, and to determine which part of the subject needs more attention. The homework assignments will contain questions about the mandatory readings. When answering these, please be brief and to the point!
Homework
Neither mathematics or computer science are spectator sports; mastery of either subject requires a significant amount of practice! Homework assignments provide an opportunity to practice your programming skills, think about analytical concepts in a new way, and to test your understanding of the material. The homework assignments are also designed to prepare you for your course project. You should view the homework as an opportunity to learn, and not to “earn points”. The homework will be graded holistically to reflect this objective. Homework will be submitted through Canvas.
Course Project
At the core of this course is a course project. The goal of the project is to analyze a topic of your choosing and document your findings. You will acquire and clean the data, use tools from the class to explore, describe, and analyze the data, and evaluate the results to make a predictions. The path to a good project will involve mistakes and wrong turns. It is therefore important to recognize that mistakes are valuable in finding the path to a solution, but will require a significant amount of time. It is therefore imperative that you begin your project early! The project has an intermediate milestone that will allow you to get feedback and to iterate.
In your project you will work closely with classmates in 2-3 person project teams. You can find more information on the project page.
Course Policies
Digital Etiquette
During lectures no internet-enabled devices (notebooks, smartphones, tablets, etc.) are permitted, unless they are necessary for class activity. While this may sound strict and weird for a CS class, there are good reasons for banning devices in the classroom: messengers and notifications are designed to grab your attention and are de-facto irresistible. Also, note-taking by hand versus on your computer was shown to be more efficient for learning (news story).
Read more on the issue by Clay Shirky (Prof. and writer on social and economic effects of Internet technologies) and Dan Rockmore (Prof. of Computer Science at Dartmouth).
Assessment Procedure
Your final grade will be determined by the number of points you collect. You can collect various amounts of points for the different parts of the class:
- Homework: 60%, assessed on your individual submission. The homework assignments are weighted based on difficulty and length (A two week homework counts more than a one week homework).
- Project: 40%, assessed on meeting the project criteria and your peer assessment. The 40% is split between the two milestones and the proposal. 5% are assigned to the proposal, 10% are assigned to your first milestone, 25% to your final submission.
- We will evaluate your work holistically beyond mechanical correctness and focus on the overall quality of the work using the following scale:
100 = Excellent / no mistakes (or really minor)
90
80 = Good / some mistakes
70
60
50 = Fair / some major conceptual errors
40
30
20 = Poor / did not finish
10
0 = Did not participate / did not hand in
A weighted overall average of 10 constitutes a perfect grade and is equivalent to an A. Here are tentative grade ranges for you reference. Note that these might be adjusted.
| A | > 95 |
| A- | > 90 - ≤ 95 |
| B+ | > 85 - ≤ 90 |
| B | > 80 - ≤ 85 |
| B- | > 75 - ≤ 80 |
| C+ | > 70 - ≤ 75 |
| C | > 65 - ≤ 70 |
| C- | > 60 - ≤ 65 |
In addition, the staff will select the top projects through a review and voting process. These projects will be presented during our last lecture, featured on the website, and get up to 12 points for their exceptional work. A small number of projects will win the coveted Best Project prize including Swiss chocolate.
Project Group Peer Assessment
In the professional world, three important features affect your productivity and success: your own effort, the effort of people you depend on, and the way you work together. For this reason we have chosen a team-based approach that values all three of those features. After each team-based project you will provide an assessment of the contributions of the members of your team, including yourself. Your scores on the projects are adjusted up or down depending on the following factors:
- Your teammates’ view of your contributions to the team
- The accuracy of your own assessment of your contributions
- The accuracy of your assessment of each of your teammates’ contributions
Your teammates’ assessment of your contributions and the accuracy of your self-assessment will be considered as part of your overall course evaluation.
Collaboration Policy
You are welcome (and encouraged!) to discuss the course’s ideas, material, and homework with others in order to better understand it, but the work you turn in must be your own (or for the project, yours and your teammate’s). For example, you must write your own code, and critically evaluate the results in your own words. You may not submit the same or similar work to this course that you have submitted or will submit to another. Nor may you provide or make available solutions to homeworks to individuals who take or may take this course in the future.
Quoting Sources
You must acknowledge any source code that was not written by you by mentioning the original author(s) directly in your source code (comment or header) and include a link to the source. However, you are encouraged to use libraries, unless explicitly stated otherwise!
You may use examples you find on the web as a starting point, provided its license allows you to re-use it. You must quote the source using proper citations (author, year, title, time accessed, URL) both in the source code and in any publicly visible material. You may not use existing complex combinations or large examples.
Missed Activities and Assignment Deadlines
Projects and homework must be turned in on time, with the exception of late days for homework as stated below. Because of the emphasis on teamwork, it is important that everybody attends and proactively participates in class. Due to the collaborative nature of the activities, it is not possible to make up any missed team activities, such as project work. We understand, however, that certain factors may occasionally interfere with your ability to participate or to hand in work on time. If that factor is an extenuating circumstance, we will ask you to provide documentation directly issued by the University, and we will try to work out an agreeable solution with you (and your team).
Late Policy
You can turn in your assignment up to two days late, however, for each day that an assignment is turned in late we will deduct 10% from the total possible points. That is, one-day late is 10% off and two-days is 20% off. So if your assignment is two day late, the max number of points (out of 10) that you can receive is 8. By permission of the instructor in extenuating circumstances, you may use more that two late days, however, the 10% rule per day will still apply. If you have a verifiable medical condition or other special circumstances that interfere with your coursework please let us know as soon as possible.
Regrading Policy
It is very important to us that all assignments are properly graded. If you believe there is an error in your assignment grading, please submit an explanation via email to us (the staff mailing list) within 7 days of receiving the grade. No regrade requests will be accepted orally, and no regrade requests will be accepted more than 7 days after you receive the grade for the assignment.
Additional Information
Accessibility
If you have a documented disability (physical or cognitive) that may impair your ability to complete assignments or otherwise participate in the course and satisfy course criteria, please meet with us at your earliest convenience to identify, discuss, and document any feasible instructional modifications or accommodations.
Credits
This class occasionally uses material developed for Harvard’s CS 109, taught by Hanspeter Pfister, Joe Blitzstein, Rhaul Dave, and Verena Kayning. We have drawn on materials and examples found online and tried our best to give credit by linking to the original source. You can find these credits mainly by direct links to the sources from the slides (e.g., hyperlinked from images). Please contact us if you find materials where the credit is missing or that you would rather have removed.
User Notice for Copyrighted Materials on Course Websites
This course website, and all original content provided as part of this course is licensed under the creative commons cc by license. Other content such as text, images, graphics, audio and video clips, (collectively, the “Content”), are protected by copyright law. In some cases, the copyright is owned by third parties, and we are making the third-party content available to you under the fair use doctrine. Fair use permits only certain limited uses of the Content.
You may use this Content only for your personal, noncommercial educational and scholarly use.


Class BasicEntity
A GoRogue.GameFramework.GameObject that also inherits from SadConsole.Entities.Entity, that can be used to represent non-terrain objects on a map rendered by SadConsole.
Inheritance
Implements
Namespace: SadConsole
Assembly: SadConsole.GoRogue.dll
Syntax
public class BasicEntity : Entity, IGameObject, IHasID, IHasLayer, IHasComponents
Constructors
BasicEntity(Coord, Int32, Boolean, Boolean)
Creates a new, invisible entity using the given parameters and the default font.
Declaration
public BasicEntity(Coord position, int layer, bool isWalkable, bool isTransparent)
Parameters
| Type | Name | Description |
|---|---|---|
| GoRogue.Coord | position | Position to create the entity at. |
| System.Int32 | layer | The layer of of a BasicEntity the object should be assigned to. |
| System.Boolean | isWalkable | Whether or not this object collides with other non-walkable objects in the same BasicMap. |
| System.Boolean | isTransparent | Whether or not this object is considered blocking line of sight for the sake of FOV. |
BasicEntity(Color, Color, Int32, Coord, Int32, Boolean, Boolean)
Creates a new entity with the given parameters, displayed with the given foreground, background, and glyph.
Declaration
public BasicEntity(Color foreground, Color background, int glyph, Coord position, int layer, bool isWalkable, bool isTransparent)
Parameters
| Type | Name | Description |
|---|---|---|
| Microsoft.Xna.Framework.Color | foreground | Foreground color the entity should use for display. |
| Microsoft.Xna.Framework.Color | background | Background color the entity should use for display. |
| System.Int32 | glyph | Glyph the entity should use for display. |
| GoRogue.Coord | position | Position to create the entity at. |
| System.Int32 | layer | The layer of of a BasicEntity the object should be assigned to. |
| System.Boolean | isWalkable | Whether or not this object collides with other non-walkable objects in the same BasicMap. |
| System.Boolean | isTransparent | Whether or not this object is considered blocking line of sight for the sake of FOV. |
BasicEntity(AnimatedConsole, Coord, Int32, Boolean, Boolean)
Creates a new entity with the given parameters that displays the specified animation.
Declaration
public BasicEntity(AnimatedConsole animation, Coord position, int layer, bool isWalkable, bool isTransparent)
Parameters
| Type | Name | Description |
|---|---|---|
| SadConsole.AnimatedConsole | animation | Animation that the entity should display. |
| GoRogue.Coord | position | Position to create the entity at. |
| System.Int32 | layer | The layer of of a BasicEntity the object should be assigned to. |
| System.Boolean | isWalkable | Whether or not this object collides with other non-walkable objects in the same BasicMap. |
| System.Boolean | isTransparent | Whether or not this object is considered blocking line of sight for the sake of FOV. |
BasicEntity(Font, Coord, Int32, Boolean, Boolean)
Creates a new, invisible entity using the given parameters and the specified font.
Declaration
public BasicEntity(Font font, Coord position, int layer, bool isWalkable, bool isTransparent)
Parameters
| Type | Name | Description |
|---|---|---|
| SadConsole.Font | font | The font to use to display the entity. |
| GoRogue.Coord | position | Position to create the entity at. |
| System.Int32 | layer | The layer of of a BasicEntity the object should be assigned to. |
| System.Boolean | isWalkable | Whether or not this object collides with other non-walkable objects in the same BasicMap. |
| System.Boolean | isTransparent | Whether or not this object is considered blocking line of sight for the sake of FOV. |
Properties
CurrentMap
The current GoRogue.GameFramework.Map which this object resides on. Returns null if the object has not been added to a map. An IGameObject is allowed to reside on only one map.
Declaration
public BasicMap CurrentMap { get; }
Property Value
| Type | Description |
|---|---|
| BasicMap |
ID
ID assigned to this object.
Declaration
public uint ID { get; }
Property Value
| Type | Description |
|---|---|
| System.UInt32 |
IsStatic
Whether or not the object is "static". Static objects CANNOT be moved, and only static objects may be placed on layer 0 of a GoRogue.GameFramework.Map.
Declaration
public bool IsStatic { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
IsTransparent
Whether or not the object is considered "transparent", eg. whether or not light passes through it for the sake of calculating the FOV of a GoRogue.GameFramework.Map.
Declaration
public bool IsTransparent { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
IsWalkable
Whether or not the object is to be considered "walkable", eg. whether or not the square it resides on can be traversed by other, non-walkable objects on the same GoRogue.GameFramework.Map. Effectively, whether or not this object collides.
Declaration
public bool IsWalkable { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
Layer
The layer on which the object should reside. Higher numbers indicate layers closer to the "top".
Declaration
public int Layer { get; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
Remarks
This value is assumed to remain constant while the object is within a data structure that uses this interface -- if it is modified, that data structure will become out of sync.
Position
The position of this object on the grid. Any time this value is changed, the GoRogue.GameFramework.IGameObject.Moved event is fired.
Declaration
public Coord Position { get; set; }
Property Value
| Type | Description |
|---|---|
| GoRogue.Coord |
Remarks
This property may be overriden to implement custom functionality, however it is highly recommended that you call the base set in the overridden setter, as it performs collision detection.
Methods
AddGoRogueComponent(Object)
Adds the given object as a GoRogue component. Throws ArgumentException if the specific instance has already been added.
Declaration
public void AddGoRogueComponent(object component)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Object | component | Component to add. |
GetConsoleComponent<TComponent>()
Gets the first SadConsole Console component of the specified type.
Declaration
public IConsoleComponent GetConsoleComponent<TComponent>()
where TComponent : IConsoleComponent
Returns
| Type | Description |
|---|---|
| SadConsole.Components.IConsoleComponent | The component if found, otherwise null. |
Type Parameters
| Name | Description |
|---|---|
| TComponent | THe component to find |
GetConsoleComponents<TComponent>()
Gets SadConosle Console components of the specified types.
Declaration
public IEnumerable<IConsoleComponent> GetConsoleComponents<TComponent>()
where TComponent : IConsoleComponent
Returns
| Type | Description |
|---|---|
| System.Collections.Generic.IEnumerable<SadConsole.Components.IConsoleComponent> | The components found. |
Type Parameters
| Name | Description |
|---|---|
| TComponent | The component to find |
GetGoRogueComponent<T>()
Gets the first GoRogue component of type T that was added, or default(T) if no component of that type has been added.
Declaration
public T GetGoRogueComponent<T>()
Returns
| Type | Description |
|---|---|
| T | The first GoRogue component of Type T that was attached, or default(T) if no components of the given type have been attached. |
Type Parameters
| Name | Description |
|---|---|
| T | Type of component to retrieve. |
GetGoRogueComponents<T>()
Gets all GoRogue components of type T that are added.
Declaration
public IEnumerable<T> GetGoRogueComponents<T>()
Returns
| Type | Description |
|---|---|
| System.Collections.Generic.IEnumerable<T> | All GoRogue components of Type T that are attached. |
Type Parameters
| Name | Description |
|---|---|
| T | Type of components to retrieve. |
HasGoRogueComponent(Type)
Returns whether or not there is at least one GoRogue component of the specified type attached. Type may be specified by using typeof(MyComponentType).
Declaration
public bool HasGoRogueComponent(Type componentType)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Type | componentType | The type of component to check for. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the implementer has at least one GoRogue component of the specified type, false otherwise. |
HasGoRogueComponent<T>()
Returns whether or not there is at least one GoRogue component of type T attached.
Declaration
public bool HasGoRogueComponent<T>()
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the implemented has at least one GoRogue component of the specified type attached, false otherwise. |
Type Parameters
| Name | Description |
|---|---|
| T | Type of component to check for. |
HasGoRogueComponents(Type[])
Returns whether or not the implementer has at least one of all of the given types of GoRogue components attached. Types may be specified by using typeof(MyComponentType)
Declaration
public bool HasGoRogueComponents(params Type[] componentTypes)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Type[] | componentTypes | One or more component types to check for. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the implementer has at least one GoRogue component of each specified type, false otherwise. |
MoveIn(Direction)
Attempts to move the object in the given direction, and returns true if the object was successfully moved, false otherwise.
Declaration
public bool MoveIn(Direction direction)
Parameters
| Type | Name | Description |
|---|---|---|
| GoRogue.Direction | direction | The direction in which to try to move the object. |
Returns
| Type | Description |
|---|---|
| System.Boolean | True if the object was successfully moved, false otherwise. |
OnMapChanged(Map)
Internal use only, do not call manually! Must, at minimum, update the GoRogue.GameFramework.IGameObject.CurrentMap field of the IGameObject to reflect the change.
Declaration
public void OnMapChanged(Map newMap)
Parameters
| Type | Name | Description |
|---|---|---|
| GoRogue.GameFramework.Map | newMap | New map to which the IGameObject has been added. |
RemoveGoRogueComponent(Object)
Removes the given GoRogue component. Throws an exception if the component isn't attached to the GoRogue GameObject component system.
Declaration
public void RemoveGoRogueComponent(object component)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Object | component | GoRogue component to remove. |
RemoveGoRogueComponents(Object[])
Removes the given GoRogue component(s). Throws an exception if a component given isn't attached to the GoRogue GameObject component system.
Declaration
public void RemoveGoRogueComponents(params object[] components)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Object[] | components | One or more GoRogue component instances to remove. |
Events
Moved
Event fired whenever this object's grid position is successfully changed. Fired regardless of whether the object is part of a GoRogue.GameFramework.Map.
Declaration
public event EventHandler<ItemMovedEventArgs<IGameObject>> Moved
Event Type
| Type | Description |
|---|---|
| System.EventHandler<GoRogue.ItemMovedEventArgs<GoRogue.GameFramework.IGameObject>> |


Without Default
Increase
Decrease
With Default
Increase
Decrease
With decimal and units
Increase
Decrease


Genesis 37:29
And Reuben returned unto the pit; and, behold, Joseph was not in the pit; and he rent his clothes.


Follow the Sun and Go with the Wind: Carbon Footprint Optimized Timely E-Truck Transportation
Joint work with Qiulin Lin, Minghua Chen, and Haibo Zeng
This project is a follow-up project of Energy-Efficient Timely Transportation of Long-Haul Heavy-Duty Truck.
Highlights
- Best paper award at ACM e-Energy 2023
- We study an important yet challenging problem , namely the carbon footprint optimization problem for e-trucks.
- We provide a novel problem formulation , which incurs low model complexity and reveals a useful problem structure.
- We develop an efficient algorithm with performance guarantee.
- Key idea : The problem is easy when there is no charging, it is also easy when there is only charging. Our idea is to separate the combined challenging problem into those two easy subproblems and combine their solutions.
- Carbon-optimized solutions save up to 28% carbon footprint compared to baseline alternatives.
Slides
Description
We study the carbon footprint optimization (CFO) of a heavy-duty e-truck traveling from an origin to a destination across a national highway network subject to a hard deadline, by optimizing path planning, speed planning, and intermediary charging planning. Such a CFO problem is essential for carbon-friendly e-truck operations. However, it is notoriously challenging to solve due to (i) the hard deadline constraint, (ii) positive battery state-of-charge constraints, (iii) non-convex carbon footprint objective, and (iv) enormous geographical and temporal charging options with diverse carbon intensity. Indeed, we show that the CFO problem is NP-hard.
As a key contribution, we show that under practical settings it is equivalent to finding a generalized restricted shortest path on a stage-expanded graph, which extends the original transportation graph to model charging options. Compared to alternative approaches, our formulation incurs low model complexity and reveals a problem structure useful for algorithm design. We exploit the insights to develop an efficient dual-subgradient algorithm that always converges. As another major contribution, we prove that (i) each iteration only incurs polynomial-time complexity, albeit it requires solving an integer charging planning problem optimally, and (ii) the algorithm generates optimal results if a condition is met and solutions with bounded optimality loss otherwise.
Extensive simulations based on real-world traces show that our scheme reduces up to 28% carbon footprint compared to baseline alternatives. The results also demonstrate that e-truck reduces 56% carbon footprint than internal combustion engine trucks.
Publications
Notes
E-Energy’23 [1] is the seminal work that gives the first problem formulation for the CFO problem and gives an efficient algorithm for solving CFO. CDC’23 [2] supplements e-Energy’23 [1] by studying the theoretic hardness of CFO and provide a bi-criteria approximation algorithm with stronger theoretic performance guarantee (but much higher run-time complexity). Poster and demo papers [3,4] give some preliminary results in the early stage of this project.
Conference Papers
[1] J. Su , Q. Lin, and M. Chen, “Follow the Sun and Go with the Wind: Carbon Footprint Optimized Timely E-Truck Transportation”, in Proceedings of 14th International Conference on Future Energy Systems (ACM e-Energy 2023), Orlando, Florida, June 20 - 23, 2023. (Best Paper Award). [pdf] [arxiv]
[2] J. Su, Q. Lin, M. Chen, and H. Zeng, “Minimizing Carbon Footprint for Timely E-Truck Transportation: Hardness and Approximation Algorithm”, (invited), in Proceedings of the 62th IEEE Conference on Decision and Control (CDC), Singapore, December 13-15, 2023. [arxiv]
Poster and Demo Papers
[3] J. Su, M. Chen, and H. Zeng, “Energy Efficient Timely Transportation : A Comparative Study of Internal Combustion Trucks and Electric Trucks”, in Proceedings of the 8th ACM International Conference on Systems for Energy-Efficient Built Environments, Cities, and Transportation (ACM BuildSys 2021), Coimbra, Portugal, November 17-18, 2021. (poster paper) [pdf]
[4] J. Su, M. Chen, and H. Zeng, “E2Pilot: An Energy-Efficient Navigation System for Long-haul Timely Truck Transportation”, in Proceedings of 13th International Conference on Future Energy Systems (ACM e-Energy 2022), virtual conference, June 28 - July 1, 2022. (demo paper) [pdf]


Anna and the King (1999)
A Film Review by Mark O'Hara
Visit Online Film Critics Society at http://www.ofcs.org
Andy Tennant's Anna and the King is so full of ideas that it doesn't need all of the gripping action. But the action doesn't hurt.
In 1862 a widowed Englishwoman named Anna Leonowens brings her son Louis from India to Siam (now Thailand). Already we have a white woman fending for herself in a culture in which men are all-powerful, and the king is a god. Mrs. Leonowens (Jody Foster) is charged with educating the fifty-odd children of the King of Siam (Chow Yun-Fat); she is a Bible-reading Christian bent on preserving the Western traditions that shape her life. Although the king is open-minded enough to know his children need to know about Western ways in order to carry Siam into the modern world, he is firmly grounded in his world: Buddhism, polygamy, slave-owning, monarchy. Nothing but conflict could result from his meeting a strong-minded woman who refuses to touch her forehead to the ground before his feet.
Heard this story before? Yes, it's the same source material used in the Rodgers and Hammerstein musical The King and I, the king's role made famous by Yul Brynner, and played recently by Lou Diamond Phillips. This film is no musical, though its score is indeed well done (save for the forgettable pop song that runs over the early closing credits). The king's large family and the clash between cultures remain central here, and even the motif of dancing has survived, a metaphorical substitution for passion, perhaps. But what helps this modern adaptation of Anna Leonowens' memoirs is the political and military intrigue.
Like a terrible news item from a contemporary Third World country, death squads are killing innocent Siamese women and children, and hanging their bodies as warnings to peasants. These Burmese squads appear to be under the distant protection of English interests, as trading and other commercial ventures have resulted in British presence around the globe. So King Mongkut of Siam is forced to dispatch a regiment to deal with these black-clothed marauders. Deceit and betrayal quickly enter the picture, and the very existence of the dynasty is threatened. Thus the stage is set for war, the ultimate backdrop to highlight the personal stories that make up the subplots.
As Anna Leonowens, Jody Foster would seem to be the wrong pick. An American to play such a British character? But Foster pulls it off admirably, with the understated acting that only a veteran could deliver. At times her voice is almost too quiet, even raspy, as she converses with her son, reinforcing lessons the boy's father would have liked. It's rather a pleasure to see such a human portrayal, instead of the bucking-up, bearing-down fašade that has become a stereotype for any Englishman faced with oppression. And her dialect works as well - I did not detect one slippage, one American pronunciation.
Foster's performance is outshone only by the performance of Chow Yun-Fat as the King. His acting is understated as well, buttressed by a smooth confidence that convinces us in every scene we watch. Clearly Chow is expert in mixing the conflicting elements of real characters, in this case a domineering mien blended with bemused tolerance. Look for him to be nominated for several awards for this solid portrayal.
The other cast members turn in strong support. As the young heir to the throne, Prince Chulalongkorn, Keith Chin is very convincing. Director Andy Tennant makes full use of the Prince's position, as a short voice-over tells us how the future ruler was influenced by his father and the foreign woman who touched their lives. Randall Duk Kim is perfectly cast as General Alak, a soldier and indefatigable politician, his grimaces and pronouncements memorable.
Another star of this film is the costumes. Remarkable Victorian dresses adorn Anna and the Siamese women during the banquet staged to impress English visitors. Further, the colorful native garb is wonderfully designed. The word "sumptuous" comes to mind, almost too much so, considering that the 1860's setting. Similar applause goes to the set decoration, such an important aspect in a period drama.
The main message of the film can be interpreted as a simple statement: personal freedom is paramount. In this film we can trace the ideas upon which much of Western civilization was founded - especially the emergence of the importance of the individual, and the realization that love is the food without which the human soul starves. It's ironic that the king of the Siamese Empire, whose most trusted general hates imperialistic influences, ends up admitting that he can understand how a man could love just one woman, a way of life widespread in the West. Of course this theme is very bankable, and happens here to tie in perfectly with the film's sources of conflict: a society dominated by males, predicated on slavery, and steeped in the methods of a feudal past.
So the reason Anna and the King succeeds is clear: its director uses an epic frame but highlights a very intimate story. It's the same with any good story - within the span of history we are fascinated by well-drawn characters. It's also clear that the tendencies of Hollywood resemble those of human nature: a short memory never learns a lesson.
This film needs to be as long as it is, 140 minutes, occupying its length with meaningful scenes and a climax reminiscent of mid-century war films. The few scenes of violence remind us of the differences inherent in cultures distant in both miles and time. There is no nudity or vulgar language, although the word "concubine" surfaces now and again. Viewers 10 and over will enjoy the action and learn from the history.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


helpers
these are able to be used as one-offs, and add functionality in small pieces
Example: BU Libraries - Google Analytics Helper
this helper will log when you click on one of the nav links, but it's hard to see visually
use 'Inspect Element' on the <script>
tag below
Example: BU Libraries - Browser Compatability Helper
loadWebComponentInto
replace the fallback on a given page with a web component
NOTE: this is being used in a couple places on this page, if you spot them
templates
load a bunch of formatted html
into a particular template using
the lit-html
library and a bit of json
in assets/data
Web Components
as shortcodes
use a web component to simplify the markup to be more declarative
you can use these instead of having to remember all of the markup for one of your
html+css
, or 'no-javascript' components.
just make sure that js is enabled and you have a fallback!
Card
libre-card
fallback)
As API Fragments
create a component to call an API (with a given property) and display the results
BU Libraries - Library Hours Component
Grab the hours from LibCal and display them with a link
as composable lego (TM) pieces
web components can be used inside other web components. the following is a web component that contains two others!


I'm @mihiljose!
My favourite websites are:
My favorite site is
mihiljose.com
!
Github
Reddit
Google
Youtube
Hello there, awesome person!


While some forms of poetry have free rein with regard to their subject or number of lines and syllables, the haiku was established in Japan as far back as the 9th century with a specific structure, style, and philosophy. Many poets still write in the original 5-7-5 syllable pattern and follow the traditional rules for writing haiku.
What is a haiku? It is a three-line, beautifully descriptive, form of poetry, intended to be read in one breath. If read in Japanese, most traditional haiku would have five syllables, or sounds, in the first line, seven in the second, and five in the last. The Academy of American Poets asserts, "As the form evolved, many of these rules - including the 5-7-5 practice - have routinely been broken. However, the philosophy of haiku has been preserved: the focus on a brief moment in time; a use of provocative, colorful images; an ability to be read in one breath; and a sense of sudden enlightenment and illumination."
The structure of a traditional haiku is always the same, including the following features:
Even though there are specific rules for writing a traditional haiku, the process can still be fun and rewarding. And remember that a modern haiku can be more freeform.
If you are wondering how to write a haiku for the first time, consider the following steps:
The most famed traditional Japanese poets include Matsuo Basho, Yosa Buson, Kobayashi Issa, and Masoaka Shiki. They are known as "the Great Four" and their work is still the model for traditional haiku writing today.
An old silent pond, A frog jumps into the pond, splash! Silence again. On a withered branch A crow has alighted: Nightfall in autumn. - Matsuo Basho
The traditional form of haiku has also been embraced by English-speaking poets. Here are two examples by Kelly Roper from our sister site LoveToKnow.com, both with a focus on nature.
The season gives way. Winter lays down her mantle, As spring bursts to life Waiting in the marsh, The heron stands silently, Fish sense death is near. - Kelly Roper


No surprises in CAT paper format this year
Around 7,000 take test in city
by Special CorrespondentApproximately 7,000 aspirants in the city took the Common Admission Test (CAT) to apply for management programmes in 1,200 business schools in the country.
The test, held in over 150 cities in the country, was conducted this year by the Indian Institute of Management-Kozhikode.
There were no surprises in the paper format, but coaching centres have received varied responses regarding the toughness of sections.
A student who took the test in the first session on Sunday said he found the verbal ability and reading comprehension sections easier than the quantitative ability and data interpretation and logical reasoning sections.
Analyst Gautam Bawa of Career Launcher said an overall raw score of around 157 to 169 could earn a student 99 percentile in CAT 2019.
“This year, the verbal was difficult in general. In the second slot, data interpretation was tough,” said Aravind Mantry of TIME, a city-based coaching centre.
CAT results will be published in mid-January.


This global inspection reports methods which only ever return a constant.
Powered by InspectionGadgets


Arrays are magical beings. At first it doesn't seem all that special, a series of numbers or bits of string (or any variety of other objects), each separated by commas, nestled between two cold, square brackets. It seems a bit dull, really.
But how powerful they are! Their size shrinks and grows to convenience. The Standard Library has loads and loads of methods to use on them. And if these don't suit our needs, we may write our own methods.
The thing that fascinates me is the notion of what a method returns versus the method's side effects. This seems like an obvious distinction, but in practice it can be a little confusing.
The each method, for instance, always returns the original array it was called on. The side effects - the things that our code makes happen during iteration - are the only things that matter.
On the other hand, the map method may return an array that is different from the original array. This distinction means that, despite how similar these two methods are, it should be very obvious when we should use one or the other - do we need to return an array that is different from the original? If not, avoid map. Easy enough.
But in both cases, the original array remains the same. This is true of most methods. Calling reverse on an array will return an array that is different from the original, but the original remains the same. Sometimes, methods that end in ! will actually change the original array.
To highlight the reverse method in action:
array1 = [1, 2, 3]
array1.reverse
RETURNS [3, 2, 1], but array1 is still [1, 2, 3].
array1.reverse!
also returns [3, 2, 1], but now array1 is [3, 2, 1].
In this case, we could think of array1.reverse!
as being equivalent to array1 = array1.reverse
This reflexive action implied by ! is not present in ALL methods that change the original array, however! This was a mistake I made early on - I saw how reverse and reverse! differed and I assumed this was a way to tell something about method behaviors just from their naming convention. Nope.
For instance, delete_if. array_1.delete_if { |x| x == 3 }
will return [1, 2], but it also changes array_1 to [1, 2].
Does anyone else react to this as a bit of a bummer? It sure would be great if we knew something specific about the behavior of a method based purely on whether it ended in a particular punctuation mark…


There are many subreddits and if you are not a reddit veteran you might not know what subreddit would be the best one for your post.
we built this website to help you with this. We take your post and suggest the 5 more relevant subreddits where you can post it, from a limited selection of subreddits.
You can type a potential post and get a suggestion of 5 subreddits that would be the most relevant or you can save it for later. You are also able to delete old posts after you have saved them.
Users can create an account and login they can send a post to our external api which will determine what the best subreddits for that post are. A user can then archive the post and will save that on our back end so that they can access it and change it any time they login.
We decided we will use Natural Language Processing techniques to find document similarity to existing posts. We scraped thousands of posts from 50 different subreddits in order to train the model. With that we are able to take your new post and find which subreddit is a best fit with an accuracy of 63% when you think about it is 30 times better than just guessing.