Methods
-
list( options ) → {Promise.<Array.<Object>>}
-
Description
Lists the assignments in a courseParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course Id to query Returns
Details
-
get( options ) → {Promise.<Object>}
-
Description
Get info on a specific assignment in a courseParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course Id to query assignmentId
number Canvas assignment Id Returns
Details
-
update( options ) → {Promise.<Object>}
-
Description
Updates a Canvas assignmentParameters
Name Type Description options
object object containing all arguments Name Type Attributes Default Description courseId
number Canvas course Id to query assignmentId
number Canvas assignment Id to update name
string <optional> current value The name of the assignment pointsPossible
number <optional> current value Points possible dueAt
date <optional> current value Due at datetime lockAt
date <optional> current value Due at datetime unlockAt
date <optional> current value Due at datetime description
string <optional> current value html description of the assignment submissionTypes
string <optional> current value Submission type(s) allowedExtensions
string <optional> current value List of allowed file extensions (exclude period). Online upload must be enabled gradingType
string <optional> current value Grading type position
number <optional> current value Position in assignment list published
boolean <optional> current value If true, publish page upon creation. Must be a boolean muted
boolean <optional> current value If true, assignment is muted. Must be a boolean groupSetId
number <optional> current value Student group set Id assignmentGroupId
number <optional> current value Assignment group Id peerReviewsEnabled
boolean <optional> current value If true, users asked to submit peer reviews. Must be a boolean automaticPeerReviewsEnabled
boolean <optional> current value If true, Canvas will automatically assign peer reviews. Must be a boolean omitFromFinalGrade
boolean <optional> current value If true, assignment is omitted from the final grade. Must be a boolean gradeGroupStudentsIndividually
boolean <optional> current value If true, students in groups can be given separate grades and when one student in a group gets a grade, other students do not get graded. Must be a boolean Returns
Details
-
create( options ) → {Promise.<Object>}
-
Description
Creates a Canvas assignmentParameters
Name Type Description options
object object containing all arguments Name Type Attributes Default Description courseId
number Canvas course Id to create an assignment in name
string <optional> Unnamed Assignment The name of the assignment pointsPossible
number <optional> Points possible dueAt
date <optional> Due at datetime lockAt
date <optional> Due at datetime unlockAt
date <optional> Due at datetime description
string <optional> html description of the assignment submissionTypes
string <optional> Submission type(s) allowedExtensions
string <optional> any List of allowed file extensions (exclude period). Online upload must be enabled gradingType
string <optional> points Grading type position
number <optional> last Position in assignment list published
boolean <optional> false If true, publish page upon creation muted
boolean <optional> false If true, assignment is muted groupSetId
number <optional> Student group set Id assignmentGroupId
number <optional> top assignment group Assignment group Id peerReviewsEnabled
boolean <optional> false If true, users asked to submit peer reviews automaticPeerReviewsEnabled
boolean <optional> false If true, Canvas will automatically assign peer reviews omitFromFinalGrade
boolean <optional> false If true, assignment is omitted from the final grade gradeGroupStudentsIndividually
boolean <optional> false If true, students in groups can be given separate grades and when one student in a group gets a grade, other students do not get graded Returns
Details
-
delete( options ) → {Promise.<Object>}
-
Description
Delete an assignmentParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course Id assignmentId
number Canvas assignment Id Returns
Details
-
listGradeableStudents( options ) → {Promise.<Array.<Object>>}
-
Description
List gradeable students for a specific assignmentParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course Id to query assignmentId
number Canvas assignment Id to query Returns
Details
-
createSubmissionComment( options ) → {Promise.<Object>}
-
Description
Adds a comment to a submissionParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course Id assignmentId
number Canvas course Id studentId
number Canvas student Id of the sub to comment on comment
string The text of the comment Returns
Details
-
updateGrades( options ) → {Promise.<Object>}
-
Description
Batch updates grades and/or comments. Also supports updating rubric itemsParameters
Name Type Description options
object object containing all arguments Name Type Attributes Default Description courseId
number Canvas course Id assignmentId
number Canvas course Id gradeItems
array List of grade items to upload to Canvas: [{ studentId: , points: , comment: , rubricId: },...] waitForCompletion
boolean <optional> false If true, promise won't resolve until Canvas has finished updating the grades, instead of resolving once the grade changes have been queued waitForCompletionTimeout
number <optional> 2 The number of minutes to wait before timing out the grade update job dontMergeRubricItemUpdates
boolean <optional> false When uploading grades to a rubric item, we intelligently merge rubric item updates with previous rubric assessments. For instance, if the assignment's rubric is: { grammar, argument, formatting } And the student of interest has the following rubric assessment so far: { grammar: 10/10, argument: 8/10, formatting: ungraded } When we upload a new gradeItem (9/10 points) to the student's formatting rubric item, the result is: { grammar: 10/10, argument: 8/10, formatting: 9/10 } However, if dontMergeRubricItemUpdates=true, the result is: { grammar: ungraded, argument: ungraded, formatting: 9/10 } Note: merging is an added feature. By default, the Canvas API does not merge rubric assessments. Returns
Details
-
listOverrides( options ) → {Promise.<Array.<Object>>}
-
Description
Gets the list of overrides for an assignmentParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course id to query assignmentId
number Canvas assignment id to look up Returns
Details
-
getOverride( options ) → {Promise.<Object>}
-
Description
Get a specific override on an assignment in a courseParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course id to query assignmentId
number Canvas assignment id to query overrideId
number Canvas override id to look up Returns
Details
-
createOverride( options ) → {Promise.<Object>}
-
Description
Create assignment override.Parameters
Name Type Description options
object object containing all arguments Name Type Attributes Default Description courseId
number Canvas course id assignmentId
number Canvas assignment id studentIds
array List of Canvas student IDs to override (Note: either studentIds, groupId, or sectionId must be included) groupId
number Group to override, must be a group assignment (Note: either studentIds, groupId, or sectionId must be included) sectionId
number Section to override (Note: either studentIds, groupId, or sectionId must be included) title
string <optional> Override for X students Title of the override dueAt
date <optional> current value New due date or null to remove due date unlockAt
date <optional> current value New unlock date or null to remove unlock date lockAt
date <optional> current value New lock date or null to remove lock date Returns
Details
-
deleteOverride( options ) → {Promise.<Object>}
-
Description
Deletes an assignment overrideParameters
Name Type Description options
object object containing all arguments Name Type Description courseId
number Canvas course id to query assignmentId
number Canvas assignment id to query overrideId
number Canvas override id to look up Returns
Details
-
listSubmissions( options ) → {Promise.<Array.<Object>>}
-
Description
Lists the submissions to a specific assignment in a courseParameters
Name Type Description options
object object containing all arguments Name Type Attributes Default Description courseId
number Canvas course Id assignmentId
number The Canvas assignment Id to query includeComments
boolean <optional> false If truthy, includes all comments on submissions includeRubricAssessment
boolean <optional> false If truthy, includes rubric assessments: breakdown of score for each rubric item excludeUser
boolean <optional> false If truthy, excludes submission[i].user value with the submission's user information includeTestStudent
boolean <optional> true If truthy, includes dummy submission by test student (student view) if there is one Returns
Details
-
getSubmission( options ) → {Promise.<Object>}
-
Description
Gets a single submission for an assignmentParameters
Name Type Description options
object object containing all arguments Name Type Attributes Default Description courseId
number Canvas course Id assignmentId
number The Canvas assignment Id studentId
number The Canvas student Id includeComments
boolean <optional> false If truthy, includes all comments on submissions includeRubricAssessment
boolean <optional> false If truthy, includes rubric assessments: breakdown of score for each rubric item excludeUser
boolean <optional> false If truthy, excludes submission[i].user value with the submission's user information Returns
Details
-
createTextSubmission( options ) → {Promise.<Object>}
-
Description
Creates a text submission on behalf of the current userParameters
Name Type Description options
object object containing all arguments Name Type Attributes Description courseId
number Canvas course Id assignmentId
number The Canvas assignment Id text
string The text body of the submission currentUserId
number <optional> The current user's Canvas Id. If not included, we call the current user endpoint comment
string <optional> A text student comment to include Returns
Details
-
createURLSubmission( options ) → {Promise.<Object>}
-
Description
Creates a url submission on behalf of the current userParameters
Name Type Description options
object object containing all arguments Name Type Attributes Description courseId
number Canvas course Id assignmentId
number The Canvas assignment Id url
string The url of the submission currentUserId
number <optional> The current user's Canvas Id. If not included, we call the current user endpoint comment
string <optional> A text student comment to include Returns
Details
-
createFileSubmission( options ) → {Promise.<Object>}
-
Description
Creates a file submission on behalf of the current userParameters
Name Type Description options
object object containing all arguments Name Type Attributes Description courseId
number Canvas course Id assignmentId
number The Canvas assignment Id filenames
string The filenames to upload to the submission currentUserId
number <optional> The current user's Canvas Id. If not included, we call the current user endpoint comment
string <optional> A text student comment to include Returns
Details


Materials available at https://github.com/Dyalog/Presentations/blob/master/FnConf2016/Workshop
The workshop assumes no prior knowledge of APL. It will be geared to functional programmers with an emphasis on theory and the core notation. Towards the end of the day we will round off with a discussion about interfaces and application building.
Prerequisites: It would help if attendees installed Dyalog on their laptops prior to the workshop - though we will spend a little time at the start of the day making sure everyone is able to use APL.
The format will include many short exercises. Feedback and discussion will be encouraged throughout.
Supporting documentation and materials are available online:
]box on
.Powerpoint slides (1-8):
mean←{(+⌿⍵)÷≢⍵}
No reserved words in the language.
Array programming is a paradigm in its own right.
Compare:
{(+⌿⍵)÷≢⍵}1 2 3 4 ⍝ APL
(+/ % #) 1 2 3 4 NB. J (Iverson-Hui)
{(+/x)%#x}1 2 3 4 / k (Whitney)
Array languages tend to share three features: * terse * symbolic (not wordy) * high-order functions
The only program which stands a chance of being correct is a short one --Arthur Whitney
names[⍋ages]
.-
stands for negate or subtract respectively.3×2+1
is 3×(2+1)
.Exercise 01: go through quickly as a group, introducing some scalar functions:
What do these expressions evaluate to?
3+2
3*2 ⍝ * is not multiplication!
3×2
9*0.5 ⍝ square root
6÷2
5-3-1 ⍝ not 1
1 2 3
-1 + 2⍝ not 1
¯1 + 2
1 + 2 3
1 2 + 3
1 2 + 3 4
1 2 + 3 4 5 ⍝ errors: see later
1÷2 3÷4
1 (2 3) + (4 5) 6 ⍝ as if (1 1)(2 3) + (4 5)(6 6)
x←3
.Exercise 02 (introducing assignment):
What do these expressions do?
x←3 ⍝ result of assignment isn't printed
x+x
y+(y←4) ⍝ R-to-L execution guaranteed here, pass through result
(x y z)←1 2 3
(x y)←y x
Exercise 03 (first sight of a non-scalar function):
Try these expressions:
5=2+3 ⍝ not "true" but "1"
A←⍳3
A=1 2 3
A≡1 2 3 ⍝ non-scalar function
Exercise 04 (introducing some structural primitives):
Try:
⍴1 2 3
⍴'JAY'
⍳4
⍴⍳4
⌽⍳4
4↑'BANGALORE'
¯4↑'BANGALORE'
⍴(1 2 3)(4 5 6)
⍴'Morten' 'Kromberg'
5⍴'JAY' ⍝ introduce Reshape
A←3 3⍴⍳9
A ⍝ display is "row major"
⍴A
⍴⍴A
⌽A
⊖A ⍝ discuss rank operator later
,A
3 3⍴'APL'
2 3 4⍴⍳24 ⍝ display is in planes
B←2 3 4 5 6 7⍴99 ⍝ N.B. don't display this!
⍴B
⍴⍴B
⍳0
and ⍬
.×/⍬
.Exercise 05 (rank of a scalar):
⍴99
⍴'J'
⍴⍴99
⍴⍳0
(⍳0)≡⍴99
⍬≡⍴99
Exercise 06 (more scalar arithmetic):
Try:
0 0 1 1 ∨ 0 1 0 1
0 0 1 1 ∧ 0 1 0 1
15 ∨ 35
15 ∧ 35
3÷4
*1
○1
2*0.5
¯1*0.5
3*99
3*999
=
).+/A>0
(how many positive numbers
in A?).Exercise 07 (boolean tricks):
Try:
A←1 ¯2 3 4 ¯5
A>0
(A>0)/A
2 3 0/'XYZ'
B←0 1 0 1 1 0 0 1
B/⍳⍴B
Exercise 07a (searching and sorting):
Try:
'THE CAT IN THE HAT'∊'AEIOU'
'AT'⍷'THE CAT IN THE HAT'
'THE CAT IN THE HAT'~'AEIOU'
3 1 4 1 5 9 ⍳ 1 2 3 4
(3 3⍴'CATHATSAT')⍳2 3⍴'HATMAT'
'ABCD'∪'DEFG'
'ABCD'∩'DEFG'
⍋pi←3 1 4 1 5 9
pi[⍋pi]
see file://Talks/Tour de Force/2.htm
⍺
and ⍵
standing for the arguments.Exercise 08 (single line dfns):
Try:
{⍺+⍵}
3{⍺+⍵}4
3{⍵+⍵}4
{⍵+⍵}4
{⍺+⍺}4
where←{⍵/⍳⍴⍵}
where 0 1 0 1 1 0 0 1
disc←{(a b c)←⍵ ⋄ (b*2)-4×a×c}
disc 1 ¯1 ¯1 ⍝ (defining equation of the golden ratio)
∇
to facilitate simple recursion:Exercise 09 (multi-line dfns):
Try:
)ed sign
sign←{
⍵<0:'negative'
⍵>0:'positive'
'zero'
}
sign 2
)ed fact
fact←{
⍵=0:1
⍵×∇ ⍵-1
}
fact 10
!10
Powerpoint (9-10)
+/1 2 3
/
here is an operator called Reduce (or fold)+/
is "plus reduce", or "sum".1+2+3
Exercise 10 (operators):
Try:
+/2 3 4 ⍝ "summation over" (KEI)
×/2 3 4 ⍝ "product over" (KEI)
⌈/2 3 4
≠/1 0 1 1 ⍝ parity
¨
(dieresis) is an operator called Each (or map):Try:
A←'Jay' 'Foad'
⍴A
⍴¨A
⌽A
⌽¨A
⍨
is an operator called Commute (see Tacit programming, later):Try:
2*3
2*⍨3
*⍨3
.
(dot) is a dyadic operator called Inner Product:Try:
1 2 3 +.× 4 5 6
+/ 1 2 3 × 4 5 6
A←2 2⍴1 2 3 4
A +.× A
+.×⍨A ⍝ function vs operator binding makes this very neat
+.×/A A
⍴ (2 3 4⍴⍳24) +.× (4 5 6⍴⍳120) ⍝ arbitrary ranks
0.5 *⍨ 3 4 5 +.* 2 ⍝ scalar extension
'ABC' ∨.= 'APL'
∘
gives Outer Product (or table):Try:
∘.+ ⍨ ⍳4 ⍝ "addition table" (KEI)
∘.× ⍨ ⍳4 ⍝ "multiplication table" (KEI)
∘.⌈ ⍨ ⍳4 ⍝ maximum table
∘.= ⍨ ⍳4 ⍝ identity matrix
⍴ (2 3⍴⍳6) ∘.+ (4 5⍴⍳20) ⍝ arbitrary ranks
⍣
is a dyadic operator called power:Try:
({1+÷⍵}⍣10)1 ⍝ one of the few times when you need parens!
{1+÷⍵}⍣≡1
Exercise 11a explain ∨.=
(et al) in words.
Exercise 11b explain ∨.∧
(used in transitive closure of a boolean matrix)
Operator muse: * Operators take fns or arrays as operands; creates a 3-layer food chain * Order 0: array * Order 1: function, takes (array) arguments * Order 2: operator, takes (array or function) operands * Functions are right-associative and monadic functions are prefix. * Operators are left-associative and monadic operators are postfix. * Some kind of beautiful symmetry there. * (But it's not completely symmetrical, because the grammar distinguishes monadic/dyadic operators but not monadic/dyadic functions.)
Use brace nesting depth as an example. First show a lisp-style recursive algorithm; then show how to do it a whole array at a time, bang!
⍝ Tail recursion: brace1←{ ⍺←⍬ 0=≢⍵:⍺ (⍺,1 ¯1 0['()'⍳⊃⍵]+⊃⌽⍺)∇ 1↓⍵ }
⍝ Array thinking: brace2←{(+\⍵='(')-(+\⍵=')')} brace3←{+\1 ¯1 0['()'⍳⍵]}
Modern processors love arrays. Arthur Whitney recommended these videos:
Exercise Rainfall: https://medium.com/@bearsandsharks/i-failed-a-twitter-interview-52062fbb534b
Exercise Luhn credit card checksum algorithm: https://en.wikipedia.org/wiki/Luhn_algorithm
(Powerpoint 11-14)
How to understand a line of APL: a detailed look at the game of life one-liner http://dfns.dyalog.com/n_life.htm
http://www.youtube.com/watch?v=a9xAKttWgP4
life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}
Exercise 12 (reading)
(2×a)÷⍨(-b)(+,-)0.5\*⍨(b*2)-4×a×c
("2 times a divided into minus b
plus or minus the square root of [the discriminant] b squared minus
4 a c")(~R∊R∘.×R)/R←1↓⍳R
{(~R∊R∘.×R)/R←1↓⍳⍵}
{{(~⍵∊⍵∘.×⍵)/⍵}1↓⍳⍵}
{(~⍵∊⍵∘.×⍵)/⍵}∘{1↓⍳⍵}
Quirks that you may notice:
1+expr
, 0<expr
2*⍨...
⊂
) boxes any array into a scalar enclosure.⊃
) is a handy inverse.3⍴⊂'Jay'
.Exercise M1 (indexing)
5⊃vec
, (⊂2 3)⊃mat
5⌷vec
, 2 3⌷mat
vec[5]
, mat[2;3]
Using an array inside the brackets can be very useful: '.⌹'[mat]
Indexed assignment works intuitively: vec[3]←99
(3↑vec)←4 5 6
also works intuitively!(0×A)←1
.⍺⍺
and ⍵⍵
.⍺
and ⍵
too.)see file://Talks/Tour de Force/7.htm
Exercise 14 (dops)
Try:
double←{2×⍵}
twice←{⍺⍺ ⍺⍺ ⍵}
double twice 3
Exercise R1 (rank)
Try:
⍝ ensure ]box on in your session
⎕io←0
⍝ rank with a monadic function
x←2 3 5⍴⍳30
x
⊂⍤1 ⊢x
⊂⍤2 ⊢x
⊂⍤3 ⊢x
⊂⍤0 ⊢x
⍝ ⊂ on a simple scalar (rank 0 array) is that scalar itself
⊂⍤¯1 ⊢x
(⊂⍤¯1 ⊢x) ≡ ⊂⍤2 ⊢x
(⊂⍤¯1 ⊢x) ≡ ⊂⍤((≢⍴x)-1) ⊢x
≢⍴x
(≢⍴x)-1
⊂⍤¯1 ⊢5 2⍴⍳10
⊂⍤¯1 ⊢5 2 3⍴⍳60
⊂⍤¯1 ⊢5 2 3 4⍴⍳120
⊂⍤¯1 ⊢5 2 3 2 2⍴⍳120
a←2 3 4⍴⎕a
a
⊂⍤1 ⊢a
⊂⍤2 ⊢a
⊂⍤3 ⊢a
⊂⍤0 ⊢a
⊂⍤¯1 ⊢a
And:
Exercise R2 (rank)
x←3 5⍴⎕a
x
y←3 6⍴⍳18
y
x {⍺⍵}⍤1 ⊢y
x {⍺⍵}⍤1 1 ⊢y
x {⍺⍵}⍤1 2 ⊢y
x {⍺⍵}⍤2 1 ⊢y
x {⍺⍵}⍤0 2 ⊢y
⊂⍤2 ⊢x {⍺⍵}⍤0 2 ⊢y
x {⍺⍵}⍤2 0 ⊢y
⊂⍤2 ⊢x {⍺⍵}⍤2 0 ⊢y
Exercise R3 (key)
Try:
⍝ ensure ]box on in your session
⎕io←0
x←'Mississippi'
{⍺,≢⍵}⌸x
{⍺,≢⍵}⌸2/x
{⍺,≢⍵}⌸3/x
x{⍺⍵}⌸⍳≢x
⎕rl←7*5 ⍝ set random seed to get reproducible random numbers
x←('zero' 'one' 'two' 'three' 'four')[?20⍴5]
x
y←?20⍴10
y
x {⍺⍵}⌸ y
x {⍺,≢⍵}⌸ y
x {⍺,+⌿⍵}⌸ y
x {⍺,⌈⌿⍵}⌸ y
x {⍺,⌊⌿⍵}⌸ y
x {⍺,(+⌿÷≢)⍵}⌸ y
x {⊂⍵}⌸ y
x {+/⍵}⌸ y
y←?20 3⍴10
x {⍺⍵}⌸ y
x {⍺,⊂+⌿⍵}⌸ y
(Powerpoint, 15-18)
Unfortunately, however, APL still splits programming into a world of expressions and a world of statements. Thus the effort to write one-line programs is partly motivated by the desire to stay in the more orderly world of expressions. --John Backus, "Can Programming Be Liberated from the von Neumann Style?"
→
(goto).:If
etc) improved life a little.(Powerpoint 19-23)
:Trap
in tradfns."Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration." --Stan Kelly Bootle
Exercise 15 (tacit)
(∨/ ≤ ∧/) booleanvector
(Answer: it checks for all zeros OR all ones.)
Exercise 16 (namespaces)
Try:
ns1←⎕NS ''
ns1.x←42
ns1.x
ns1.(x+x)
ns1.(double←{⍵+⍵})
ns1.(double x)
ns1.double x
ns1.double 17
ns2←⎕NS ''
ns2.x←99
namespaces←ns2 ns2
≢namespaces
namespaces.(x+x)
(⌽namespaces).(x+x)
Exercise M2 (sysfns)
⎕FREAD
, ⎕NREAD
, ⎕XML
, ⎕R
/⎕S
, ...


Group by Job
Group by Sex
Group by Saving Accounts
Group by Checking account
Group by Housing
Group by Purposes
Group by Age with Good Risk
Group by Age with Bad Risk
Group by Duration with Good Risk
Group by Duration with Bad Risk
Group by Credit Amount with Good Risk
Group by Credit Amount with Bad Risk


Building upon the phenominal success of RCytoscape and RCy3, Cytoscape is adopting this project to provide a robust R package for the rapidly evolving Cytoscape ecosystem. We are beginning with a major refactor of RCy3 that includes:
Official bioconductor releases (recommended)
install.packages("BiocManager")
BiocManager::install("RCy3")
Note: Be sure to use the latest Bioconductor and recommended R version
Development version from this repo (at your own risk)
install.packages("devtools")
library(devtools)
install_github('cytoscape/RCy3', build_vignettes=TRUE)
#If installation fails due to package 'XXX' not found,
# then run install.packages("XXX") and then try install_github('cytoscape/RCy3') again
library(RCy3)
make: gfortran-4.8: No such file or directory
, then try reinstalling R via homebrew: brew update && brew reinstall r
ERROR: dependency ‘XML’ is not available for package
, then try this command: install.packages("XML")
and then try installing RCy3 again.This is a public, open source project. Come on in! You can contribute at multiple levels:
install.packages("devtools")
install.packages("roxygen2")
library(devtools,roxygen2)
devtools::install_github("AlexanderPico/docthis")
library(docthis) #shift+cmd+D
BiocManager::install("BiocStyle")
library(BiocStyle)
BiocManager::install("BiocCheck")
library(BiocCheck)
install.packages("RUnit")
library(RUnit)
setwd("/git/cytoscape/RCy3") #customize to your setup
devtools::document()
devtools::check(args = "--no-examples", vignettes = F)
BiocCheck::BiocCheck('./')
Unit tests are a crucial tool in software development. In order to run them ‘offline’ (not on the Bioconductor build system), take these steps from within a running R session (requires RUnit):
source(system.file("unitTests", "test_RCy3.R", package="RCy3"))
run.tests()
They take about 4 minutes to run.
We use pkgdown to generate the main site for RCy3 based on this README, metadata, man pages and vignettes. If you make changes to any of these, please take a moment to regenerate the site:
library(pkgdown)
pkgdown::build_site(examples=FALSE)
While this is the primary development repository for the RCy3 project, we also make regular pushes to official bioconductor repository (devel & release) from which the official releases are generated. This is the correct repo for all coding and bug reporting interests. The tagged releases here correspond to the bioconductor releases via a manual syncing process.  The new branch is fetched and master is updated:
git fetch upstream
git checkout -b RELEASE_3_13 upstream/RELEASE_3_13
git push origin RELEASE_3_13
git checkout master
git pull upstream master
git push origin master
Only bug fixes and documentation updates can be pushed to the official bioconductor release branch. After committing and pushing fixes to master
, then:
git checkout RELEASE_3_13
git cherry-pick master #for lastest commit
# or git cherry-pick 1abc234 #for specific commit
# or git cherry-pick 1abc234^..5def678 #for an inclusive range
# bump release version in DESCRIPTION
git commit -am 'version bump'
git push origin RELEASE_3_13
# double check changes, and then...
git push upstream RELEASE_3_13
git checkout master
# bump dev version in DESCRIPTION
git commit -am 'version bump'
git push origin master
git push upstream master
https://bioconductor.org/developers/how-to/git/bug-fix-in-release-and-devel/
When adding or updating vignettes, consider the following tips for consistency:
The entire commit history has been preserved during this transition, but you can find the repo for RCy3 v1.5.3 and earlier at https://github.com/tmuetze/Bioconductor_RCy3_the_new_RCytoscape and you can find the Bioconductor page for v1.8.0, including archives at https://www.bioconductor.org/packages/3.6/bioc/html/RCy3.html.
Note to repository maintainers: Please *DO NOT* move this page ... the Cytoscape Automation paper refers directly to it.


In anticipation of attending the Miss Universe Pageant, which he owns, Trump tweets: “Do you think Putin will be going to The Miss Universe Pageant in November in Moscow — if so, will he become my new best friend?” While at the pageant, Trump says, “I have plans for the establishment of business in Russia. Now, I am in talks with several Russian companies to establish this skyscraper.”
Source: Moyers and Company


Shane started the new year by going night night at 7:30 pm and missing the ball drop. He was very excited later that week when Mom got her new Powerbook G4 laptop. "Apple 'puter light on!" he says as he points to the glowing apple icon on the lid. Shane likes to watch slide shows on the computer. He recognizes most of his relatives and their respective pets, as well as some of the animals he saw at the zoo. "I want picture Uncle Jere," he says. He is also learning the letters of the alphabet. He likes to pick them out on the computer keyboard and to look at the big letters Mom shows him on the screen.
The basement construction is almost done. Mom and Dad have been busy painting -- they have gone through many gallons of "vanilla icecream" paint.. Shane likes to go down to the basement to inspect their work. He also likes to help sweep the floor. "Cleaning the letter O," says Shane. This weekend Shane played with Mom and Dad's friend Brian when he came for a visit. Shane also had a breakfast date with his friend Mira. Shane checked out the new Walmart that opened this week and Mom bought him his very own Elmo.
Mom and Dad bought Shane a big boy chair at Ikea. Shane likes it much better than his highchair.  We have gotten lots of snow this winter. Shane doesn't really like going outside in the cold, but he let Mom take him on the sled in the backyard. Shane couldn't believe how much snow we got during the blizzard. He could only walk along the path that Mom and Dad cleared. Shane thinks it is more fun to stay inside where it is warm. He really likes playing in the newly finished basement.
Shane likes to talk a lot. Sometimes he finds himself very funny. He likes to sit on the steps with Mama and eat a snack.
Privacy policy
This page maintained by Shane's Mom


Tableau Projects
MILITARY AND WEAPON ANALYSIS BY COUNTRIES
Death Ratio By Age and Gender
TESLA DAILY STOCKS
World Wide Artist and Song List


--- layout: post title: Winter weather causes numerous accidents | www.WHEC.com categories: [] tags: - local - rochester_ny - weather status: publish type: post published: true meta: _original_post_id: '' _original_import_author: John Duprey author: ---
Winter weather causes numerous accidents
Posted at: 01/13/2012 8:07 AM
| Updated at: 01/13/2012 8:33 AM
News10NBC is hearing reports of dozens of accidents around Monroe County throughout Friday morning. A string of minor crashes were reported beginning around 7 a.m. and lasting throughout the morning commute hours.
Right now, counties in western and central New York are under a Winter Weather Advisory until 7 p.m. Friday night.
For more Rochester, N.Y. news, visit our website www.whec.com
Print Story
NOW its starting to look a lot like winter around here!
http://www.whec.com/news/stories/S2451649.shtml?cat=565


Authenticate!
facebook
google
dropbox
open your eyes wide and position your iris
within the oval above before clicking "register"
Register
new user?


Ever wanted to Build a Quiz Game but gave up at the prospect of Hunting for the Right
Questions and set them up?
Well, look no further, the QuizzR API has got your back!
QuizzR is an Open-Source RESTful API to return General Knowledge questions at Random or by
Difficulty.
How to Use:
Get a Random Question
Hit Up the URL:
https://quizzrapi.herokuapp.com/random
You get a JSON file to import similar to this:
Get a Question of Custom Difficulty
Hit Up the URL:
https://quizzrapi.herokuapp.com/difficulty/3
>
(Difficulty Ranges from 1 to 5.)
You get a JSON file to import similar to this:
While, we can't guarantee the uniqueness of questions for each Request, we provide a distinct ID for each question which you can use to ensure a unique set.


Map interaction on thematic map using geojson2svg
Countries bilateral migration data visulazid on the world map. Click on the country to see to/from which countries people are moving.


Make your choice: Select an Item
Description:
Price:
Image:
Extra Credit:
Use an Ajax call to dynamically change the select to a choice of candy instead of cupcakes. Include the appropriate server side information.


1 Chronicles 5:24
And these were the heads of the house of their fathers, even Epher, and Ishi, and Eliel, and Azriel, and Jeremiah, and Hodaviah, and Jahdiel, mighty men of valor, famous men, and heads of the house of their fathers.


USA federal government has three parts. They are the Executive (President and about 5,000,000 workers), Legislative (Senate and House of Representatives) and Judicial (Supreme Court and lower Courts).
The President of the United States administers the Executive Branch of the government. The President enforces the laws that the Legislative Branch (Congress) makes. The President is elected by United States citizens, 18 years of age and older, who vote in the presidential elections in their states.
The Legislative part of the government is called Congress. Congress makes the laws. Congress is divided into 2 parts. One part is called the Senate参议院. There are 100 Senators--2 from each of the states笔记：美国一共50个州，每个州有2个名额，一共100个人。. Another part is called the House of Representatives众议院. Representatives meet together to discuss ideas and decide if these ideas (bills) should become laws. There are 435 Representatives. The number of representatives each state gets is determined by its population笔记：在众议院当中，每个州的名额与该州的总人口数量成正比。. Some states have just 2 representatives. Others have as many as 40. Both senators and representatives are elected by the eligible voters in their states.
The Judicial part of the federal government includes the Supreme Court and 9 Justices. They are special judges who interpret laws according to the Constitution. These justices only hear cases that pertain to issues related to the Constitution. They are the highest court in the country. The federal judicial system also has lower courts located in each state to hear cases involving federal issues.
All three parts of the federal government have their main headquarters in the city of Washington D.C.
参考


ARMAGEDDON
Reviewed by Harvey Karten, Ph.D. Touchstone Pictures Director: Michael Bay Writer: Jonathan Hensleigh, J.J. Abrams Cast: Bruce Willis, Billy Bob Thornton, Liv Tyler, Ben Affleck, Will Patton, Peter Stormare, Keith David, Steve Buscemi
A restored and revitalized "Gone With the Wind" opened at about the same time as "Argmageddon," and surprisingly enough, the two films share common ideas. Thematically, both are about the will to survive in the face of disaster. In the former story, Scarlett O'Hara has been reduced to poverty by the devastation of the Civil War and must use her wiles to subsist.  Now, if someone fairly ordinary like Scarlett can prevail against all odds, do you doubt that Bruce is capable of saving the world?
One big question that's raised by any mind in the "Armageddon" audience still unnumbed from the frenetic assault on the senses. Which story has more clout--one about an individual using her artfulness to marry a rich guy, or one about an individual responsible for the continued existence of six billion lives? Common sense would tell you that a story of epic, global scope would rivet our attention better than one involving a single woman and a small circle of admirers. But if you go to the movies quite a bit you may be surprised to find the smaller narratives can be far more appealing. Why? Because we're all human beings and as such relate more easily to stories that are on a human level. To be on a human level means that if you're dealing with a romance, the two performers must be believable and must convey a realistic passion or chemistry. If you're dealing with a crime, you must care what happens to the people involved, whether perpetrators or victims. (Think of our sympathy for George Clooney's character in "Out of Sight" or our involvement with the psyche of the Michael Douglas character in "A Perfect Murder.") And a comedy should make you smile; a satire should have you watch with glee as the big bad corporation gets its comeuppance. (Think of Michael Moore's wiping the floor with the suited downsizers in "The Big One.")
 Humankind vs. nature, then, is the most arduous of conflicts.  When lava from Mt. Teidie overflows on the island of Tenerife? When an earthquake cracks the New York City into five sections?
Which brings us to "Armageddon," a difficult tale to bring off because there is no human enemy. Michael Bay's movie is frenetic from start to its conclusion two-and-one half long hours later, leaving the audience scarcely a moment to catch its breath. Even when members of the cast are simply talking, the conversation is agitated, overwrought, jittery, as though the individuals are trying to communicate over a pulsating disco beat (which may not be so far off, considering the decibels evoked by music supervisor Trevor Rabin). Writers Hensleight and Abrams--the two credited for a movie which may have had as many as nine scribes--ignore a basic rule: to sustain involvement, a plot must be developed with highs and lows lest the audience be simply desensitized by frenzy. The special effects are satisfactory, but then again with the state of current technology and the millions which were available to carry the usual Jerry "Con Air" Bruckheimer production values to the fans, why not?
Much of this criticism could be tempered if "Armageddon" had any originality, but unfortunately the dialogue apes that of similar movies ("We're not leaving them behind" and "The clock is ticking") and the sentiment is not only banal but false (as when Bruce Willis tells Ben Affleck "I always considered you like a son" despite Willis's every action to the contrary).
The story is much the same as that of "Deep Impact," except that there, director Mimi Leder gave a needed woman's touch in making us care about the folks to be obliterated by an asteroid. "Armageddon" opens on the world 65 million years ago (that's quite a bit older than the globe of the movie "The X-Files") where scholar Charlton Heston educates us that the planet earth had been despoiled by an asteroid--one which kicked up so much dirt that the sun couldn't shine (even on California) for the next thousand years. (History might be dull, but prehistory!)
 Approached by an unsmiling general, he is solicited to volunteer himself and his men to become instant astronauts-- to travel into space after a short period of training, exit the ship on an asteroid the size of Texas which is plummeting toward the earth, dig a 250-foot hole into the mean rock, and blow it up with a nuclear device. Figuring this is a good way to get young A.J. (Ben Affleck) away from his beautiful daughter Grace (Liv Tyler), he accepts the mission. With Rockhound (Steve Buscemi) on board to provide comic relief and a motel crew that includes at least two people whose brains must have rattled once too often while drilling, Harry is off to save the world. The men are accorded such hero status that even Chick Chapple (Will Patton), whose ex-wife has refused to tell their small boy that Chick is the father, now instructs the kid with pride on his paternity.
The witticisms are sadly not all on the level of Grace's: When she demands that her father treat her like an adult and Harry wants to know when she became one, she retorts, "Since I reached the age of ten and became older than you." When a NASA official looks at Harry's crew coming out for training, he exclaims, "They look like the wrong stuff."
The film is loaded with logistic flaws. For example, when the ship's colonel acts to defuse a bomb, he breaks into a sweat trying to decide whether to cut the blue wire or the red wire. Isn't defusing a bomb part of a military man's training? Worst of all, when the crew prances about the Texas-size asteroid zooming across space, the rock appears to have the same gravitational pull as Texas. And while we know how to send men to the moon, NASA leader Dan Truman (Billy Bob Thornton) does not even know how to shave himself.
Some individuals try to leave the planet a little better than what it was when they arrived. Harry S. Stamper gets a chance single-handedly to save the world--which would, perhaps, leave it better. This grandiose theme should evoke breathtaking responses in the audience. Maybe it does. But it could also lead intelligent people with an appetite to see Spalding Gray deliver a one-man monologue on a small stage in an intimate theater.
Rated PG-13. Running time: 150 minutes. (C) Harvey Karten 1998
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


Genesis 24:9
And the servant put his hand under the thigh of Abraham his master, and sware to him concerning that matter.


SA-PCB: Simulated Annealing-based Placement For PCB Layout
Getting Started
Installation
Pre-requisites
- GCC compiler >= 4.8.5
- boost library >= 1.62
- cpp-taskflow >= 2.0
- Python >= 3.6
- shapely >= 1.6.4
- matplotlib >= 3.0.2
- docopt >= 0.6.2
- numpy >= 1.15.4
- argparse >= 1.1
- tqdm >= 4.30.0 [python-multistart]
- numba >= 0.42.1 [python-multistart]
- multiprocessing [python-multistart]
- yaml
- json
- Recommended OS: Centos6, Centos7 or Ubuntu 16.04
Clone repo and submodules
$ git clone –recursive https://github.com/choltz95/c-pcb-annealer $ cd ~/c-pcbannealer $ pip install -r requirements.txt $ make install $ make
Fix eagle2bookshelf errors
You may have to fix some Swoop errors. Download DRU.py and place into the eagle2bookshelf directory.
$ wget https://raw.githubusercontent.com/NVSL/Swoop/master/Swoop/DRU.py $ mv DRU.py eagle2bookshelf
Check your installation
To make sure your installation is correct and the current tool version is stable enough, run a Hello World application:
$ make test $ open test.png
How to execute
./sa parameters -i <optional, value> : for denoting # outer iterations PER SA INSTANCE -j <optional, value> : for denoting 'j'*#nodes inner iterations -t <optional, value> : for denoting initial temperature -f <optional, str> : for output filename -e <optional, float> : convergence epsilon -v <optional> : Ben-amur flag -x <optional, int> : simulated annealing instance index -p <required, string>: input placement board -d <optional, {0-3}> : debug verbosity -r <optional, {0-3}> : rotation EXAMPLE: ./sa -i 20000 -j 20 -t 1 -p input -f output
License
- BSD-3-clause License [[Link]](LICENSE)
Description
C++ annealer for simple PCB placement of polygonal components. Supports the following:
- Analytical overlap for arbitrary polygons using boost geometries
- Support 90 deg., 45 deg., free rotation [free rotation in progress]
- HPWL cost term for wirelength
- BEN-AMEUR et al. cost-normalization & automatic initial temperature
- Variable placement shift window, smaller displacement with temperature
- Geometric temperature updates (cooling schedule) based on Timberwolf schedule
- Bookshelf parser
- Bookshelf version translator
- Plotting & animations
Limitations / Current issues / In development
- Parallel multistart [Issues with cpp-taskflow. Still support for multi-start via python script.]
- R-Tree spatial indexing for fast overlap computation
- Free rotation
- Algorithm very sensitive to parameters
- Broken support for weighted modules/nets
- Set up Dockerfile
- Support json configuration files for algorithm parameters
Authors
- Chester Holtz, Devon Merrill, James (Ting-Chou) Lin, Connie (Yen-Yi) Wu (Ph.D. advisor: Chung-Kuan Cheng, Steven Swanson).
- Pull requests to improve the tool are very appreciated.
Citations
- Sechen, C. and Sangiovanni-Vincentelli, A. L., "The Timber-Wolf placement and routing package", IEEE J. Solid-State Circuits 30:510–522 1985.
- Spindler, P. and Johannes, F., "Fast and Accurate Routing Demand Estimation for Efficient Routability-driven Placement
", IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2007.
- C.-K. Cheng, A. B. Kahng, I. Kang and L. Wang, "RePlAce: Advancing Solution Quality and Routability Validation in Global Placement", to appear in IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 2018. (Digital Object Identifier: 10.1109/TCAD.2018.2859220)
- Ben-Ameur, Walid. "Computing the initial temperature of simulated annealing." Computational Optimization and Applications 29, no. 3 (2004): 369-385.
- James M. Varanelli and James P. Cohoon. Two-stage simulated annealing methodology. In Proceedings of the 5th Great Lakes Symposium on VLSI, pages 50–53, Buffalo, NY, 16.-18. March 1995. IEEE, Los Alamitos, CA. †EI M153001/95
- K. D. Boese A. B. Kahng and S. Muddu A new adaptive multistart technique for combinatorial global optimizations, Operations Research Letters, 16(2): 101-113, September, 1993.


| AutotunerPID Toolkit |
AutotunerPID Toolkit Release Notes
The AutotunerPID Toolkit 1.0 Release Notes describe the changes introduced in the latest version of the AutotunerPID Toolkit.
System Requirements
The AutotunerPID Toolkit requires the following MathWorks products:
The AutotunerPID Toolkit has been tested with the following platforms:
A version compatible with MATLAB 5.3 will be briefly released...
New Features
None, up to now :-(
Major Bug Fixes
None, up to now :-)
Reporting bugs
If you have any question or suggestion, if you want to report some bugs or if you want to give your contribution please let me know.


## Smarter testing with Spock
## Why Spock?
### Spock can...
* reduce the lines of test code
* removes noise with concise syntax
* make tests more readable (structural blocks)
* be extended in powerful ways
* be run like JUnit test (good tool support)
### Parameterization
#### IntelliJ formats data table correctly
```
class MathSpec extends Specification {
@Issue('REIS-325')
@Unroll
def "max of #x and #y should be #result"() {
when:
def max = Math.max(x, y)
then:
max == result
notThrown(IllegalStateException)
where:
x | y | result
1 | 3 | 3
4 | 2 | 4
}
}
```
### Parameterization
#### Nice result rendering
```
maximum of 3 and 5 is 5 PASSED
maximum of 7 and 0 is 7 FAILED
Math.max(a, b) == c
| | | | |
| 7 0 | 7
42 false
maximum of 0 and 0 is 0 PASSED
```
### Problems when comparing
```
input == 42
| |
| false
42
```
### ~~Problems when comparing~~
```
input == 42
| |
| false
42 (java.lang.String)
```
### Utilities for testing async code
```
then:
new PollingConditions() {
assert flightResultPage.numberOfChildren == 100
}
```
### Mocking setup
```
Publisher publisher
Subscriber sub1
Subscriber sub2
def setup() {
publisher = new Publisher()
sub1 = Mock()
sub2 = Mock()
publisher.subscribers << sub1 << sub2
}
```
### Mocking/stubbing
```
@Timeout(123)
def 'mocking_stubbing'() {
given: 'sub2 which throws exception on 2. call when input too long'
sub2.receive(_) >> 'ok' >>
{ msgs -> msgs[0].size() > 4 ? throw new ISE() : 'ok' }
when: 'publishing events'
publisher.send(event)
then: 'exception is thrown after second call of publisher.send(...)'
(1.._) * _./rec.*/({ it.contains('s') })
IllegalStateException e = thrown()
e.message == 'Subscriber failed'
where:
event << ['test', 'fails']
}
```
### Both at the same time
```
@IgnoreRest
def 'both'() {
given: 'sub2 which is called at least twice'
and: 'returns an error status when input too long'
(2.._) * sub2.receive(_) >>
{ msgs -> msgs[0].size() > 4 ? 'fail' : 'ok' }
```
### Improve readability of tests
```
def 'improve_readability'() {
given: '...'
...
and: '...'
...
when: '...'
...
and: '...'
...
then: '...'
...
and: '...'
...
}
```


Sandbox mode is deprecated.
Setting can be overrided by URI query e.g. ./?speed=1.0¬eSize=30
Powered by YouTube


Home
All Products
About us
Contact us
Login/Sign Up
5
150.55 $
Product Table
Information
Price
SEO
Shipping
images
Quantities
Cancel Changes
Save Changes
Product Information
Type
Standard Product
Name
SK
Description
Before Price
After Price
Discount in %
Meta Title
Meta Description
Package Width(inches)
Package Height(inches)
Package Depth(inches)
Package Weight(lb)
Add File...


This is a post written in plain Markdown (*.md
) instead of R Markdown (*.Rmd
). The major differences are:
```{r}
);There are many differences in syntax between Blackfriday’s Markdown and Pandoc’s Markdown. For example, you can write a task list with Blackfriday but not with Pandoc:
Similarly, Blackfriday does not support LaTeX math and Pandoc does. I have added the MathJax support to this theme (hugo-lithium) but there is a caveat for plain Markdown posts: you have to include math expressions in a pair of backticks (inline: `$ $`
; display style: `$$ $$`
), e.g., $S_n = \sum_{i=1}^n X_i$
.^[This is because we have to protect the math expressions from being interpreted as Markdown. You may not need the backticks if your math expression does not contain any special Markdown syntax such as underscores or asterisks, but it is always a safer choice to use backticks. When you happen to have a pair of literal dollar signs inside the same element, you can escape one dollar sign, e.g., \$50 and $100
renders “$50 and $100”.] For R Markdown posts, you do not need the backticks, because Pandoc can identify and process math expressions.
When creating a new post, you have to decide whether the post format is Markdown or R Markdown, and this can be done via the ext
argument of the function blogdown::new_post()
, e.g.
blogdown::new_post("Post Title", ext = '.Rmd')


Roman Kemp melts I'm A Celebrity viewers' hearts with tragic details about dad Martin's health
He also opened up about his parents' friendship with George Michael
by Robert LeighRadio DJ Roman Kemp moved his I’m A Celebrity campmates and viewers at home as he spoke movingly about his parents this evening.
The 26-year-old also opened up about his parents' long and happy friendship with late singing star George Michael - who was Roman's godfather.
But it was his stirring tribute to Spandau Ballet dad Martin Kemp that visibly moved the likes of Kate Garraway, Nadine Coyle and Myles Stephenson.
"My dad is my best mate, 100%. I speak to him every day," Roman told his celeb pals as they rested in the jungle camp.
Read more: I'm A Celebrity viewers in hysterics at Ant and Dec gags about Prince Andrew's 'sweating'
Amusing everyone with claims 1980s pop icon Martin was recruited into the band by his brother Gary after being instructed to do so by their mother, Roman joked his dad could neither play an instrument or sing at the time.
"Still can't. He still hasn’t realised his mic wasn’t on for Live Aid!" he quipped to laughter from the others.

He explained: "When they went back out on tour, post brain tumour, he forgot everything. So I had to learn all the Spandau songs and then taught him them again."
Read more: I'm A Celebrity viewers brand new series' line-up 'worst ever'
Looking emotional, Roman reasoned: "How can my dad not be my hero, for all of that?"
And despite being thousands of miles away, his parents were obviously feeling the love.
Martin tweeted during the show: "So proud of my boy... Shirlie [is] tearing up here!"
TV presenter Kate, who admitted to be a huge fan of Spandau Ballet and had posters of the band on her wall at the time, later praised Roman for his deep and caring appreciation for his family.

"But he's quite private because he's got his own career and his own life… and how extraordinary it must have been, to be in that environment."
Viewers were also touched by what Roman had to say.
"Just when I didn't think I could love @romankemp anymore 😍❤," tweeted one.
"Lovely story absolutely fascinating," wrote another.
A third wrote: "Omg. So moving. Love this lad. So genuine."
And yet another added: "He is going to win!! I hope he does, he is just lovely 💕."
Roman was also thoroughly captivating as he explained how protective - and competitive - his godfather George could be.
"He was an amazing guy. He was my uncle. You'd see him at dinners, Christmas, the lot," Roman said.
Roman continued: "It is really nice that all the memories I gave are so nice, going on holidays, and having my parents compete with Christmas presents against him."
He added: "One year my dad bought me a bike, a Raleigh bike.
"I remember George came to the house and brought in my present… And he'd gone to Harrods and bought one of those electric cars... but not just that, it was a Batmobile! I've still got it."
Roman went on to reveal how his mum, former Wham! backing singer Shirlie Holliman, was chaperoned by the Careless Whisper star for her first date at a gig with Martin.
"My mum didn't want to go on her own!" Roman recounted.
"My dad said he spent the whole date trying to get rid of him!"
- Episode 3 of I'm A Celebrity airs on ITV on Tuesday November 19 at 9pm
Leave us a comment on our Facebook page @EntertainmentDailyFix and let us know what you think of this story.


Contributing to SoftwarePlanet CMS
This guide covers ways in which you can become a part of the ongoing development of SoftwarePlanet CMS.
After reading this guide, you will know:
- How to contribute to the SoftwarePlanet CMS code.
- How to contribute to the SoftwarePlanet CMS documentation.
1 Contribute to the SoftwarePlanet CMS code
Contributing to the SoftwarePlanet CMS code based on the common principles, described at: GitHub support center. Also, it is useful to get acquainted with the approaches, described at Ruby on Rails contribute documentation .
1.1 Follow the Coding Conventions
We are follows a simple set of coding style conventions:
- Two spaces, no tabs (for indentation).
- No trailing whitespace. Blank lines should not have any spaces.
- Follow the conventions in the source you see used already.
1.2 How to do version numbers
Versioning is the process of assigning unique version numbers to unique states of software. A variety of version numbering schemes have been created, and we use Sequence-based identifiers.
We uses such version definition:
v[major].[minor].[release]
major
: Major version is a really decision. Are we ready to call the version 1.0? Does we consider this a major version for absolutely exceptional product, or is it an update of the current major version?
minor
: Starts from 0 whenever major is incremented. +1 for every version that goes public.
release
: Every time you hit a development milestone and release the product, even internally (e.g. to QA), increment this. This is especially important for communication between teams in the organization. Needless to say, never release the same 'release' twice (even internally). Reset to 0 upon minor++ or major++.
We can use Git Tag numbers to specify commit versions at GitHub. It should be best.
SoftwarePlanet CMS version example:
v0.1.1
1.3 Updating the CHANGELOG
The CHANGELOG is an important part of every release. It keeps the list of changes for every SoftwarePlanet CMS version.
We need think more about CHANGELOG using.
-= SoftwarePlanet CMS =-


Flip!
I am awesome!
Lets flip around...
Yup, still awesome.
Flipped!
I am awesome!
Lets flip around...
Yup, still awesome.
Flipped!
I am awesome!
Lets flip around...
Yup, still awesome.
Flipped!


1. Roger Rabbit
2. Jessica Rabbit
3. Judge Dooom
1. Dagger eyes
2. revolver
3. Frank Sword
1. When Roger finds out Jessica was playing patty cake!
2. When judge Doon turns into Baron von Rotten
3. jessica dance scene
It was:
who killed Roger


[DataOut Hcascaded] = CascadedCICCompensationFilter(M, R, N, Fs, Data) This function design a CIC filter cascaded with compensation filter. The design parameters is given by: M: Differntial delay N: Filter order R: Decimation factor Fs: Sampling frequency Data: Filter input data DataOut: Filtered input data (Data) using the the design CIC filter Hcascaded: Transfer function of cascaded CIC (CIC+Compensation)
0001 function [DataOut Hcascaded] = CascadedCICCompensationFilter(M, R, N, Fs, Data) 0002 0003 % 0004 % [DataOut Hcascaded] = CascadedCICCompensationFilter(M, R, N, Fs, Data) 0005 % 0006 % This function design a CIC filter cascaded with compensation filter. 0007 % The design parameters is given by: 0008 % 0009 % M: Differntial delay 0010 % N: Filter order 0011 % R: Decimation factor 0012 % Fs: Sampling frequency 0013 % Data: Filter input data 0014 % 0015 % DataOut: Filtered input data (Data) using the the 0016 % design CIC filter 0017 % Hcascaded: Transfer function of cascaded CIC (CIC+Compensation) 0018 0019 [FilteredData Hcic] = CICFilter(M, N, R, Fs, Data); 0020 0021 Hcomp = CICCompensationFilter(N, R, Fs); 0022 0023 Hcascaded = Hcic * Hcomp; 0024 0025 DataOut = downsample(filter(cell2mat(Hcascaded.num), cell2mat(Hcascaded.den), Data), R); 0026 0027 figure 0028 PlotFreqResponse(cell2mat(Hcascaded.num), Fs,'k')


QuickStreams Beta
An Asynchronous Programming Library
for the
QML Programming Language
An Asynchronous Programming Library for the QML Programming Language
Signals & Slots are an integral part of the Qt Quick architecture providing a powerful low level mechanism for responsive asynchronous programming. Despite the fact that Signals & Slots are a very flexible instrument they're not very well suited for the declarative description of rather complex asynchronous operations and transactions.
To increase code readability and maintainability higher level abstraction concepts like Callbacks and more sophisticated concepts like Promises and Futures are used, however, those are simple, primitive concepts, providing only a very limited set of features to solve only the basic problems of declarative, asynchronous control flow.
QuickStreams is a Qt Quick asynchronous programming library, inspired by Reactive Extensions, implementing the Reactive Programming Paradigm in a slightly redesigned manner.
It's built on top of Qt Quick's Signals & Slots mechanism based on the concepts of stream based, event driven programming, where everything can be - and eventually is - a stream. Stream based programming allows to describe complex asynchronous operations and sequences in a more intuitive way.
A stream is a stateful entity wrapping a
code fragment.

Sockets, Requests, Computations,
UI Elements and more
Almost everything can be represented by a stream. Sockets, Requests, Computations, UI Elements and more
A stream can be in either of the following states: Dead, Active or Aborted. Once created, it's initially dead (yet not born) and queued to be awoken and executed on the next possible event loop cycle. If another stream takes it's ownership before it's awoken - the execution is deferred until the point the owner stream is closed. This way streams can form asynchronous sequences to be executed serially.
During it's life time a stream emits events, though some of them are lethal. If a stream emits the closure, abortion or failure events - it dies, but in certain circumstances streams can be resurrected and executed again.
Operators define the behavior
of individual streams and sequences.
Operators define the behavior of individual streams and sequences.
attach
Attaches a stream
onto another one
bind
Binds an obligatory
stream to another one
event
Awakes another stream
on a certain event
retry
Resurrects and reexecutes a stream on certains failures
repeat
Conditionally resurrects
and reexecutes
a stream
failure
Recovers a sequence
from an unexpected failure
abortion
Recovers a sequence
from an eventual abortion
filter
Planned for
upcoming releases
map
Planned for
upcoming releases
reduce
Planned for
upcoming releases
throttle
Planned for
upcoming releases
buffer
Planned for
upcoming releases
delay
Planned for
upcoming releases
join
Planned for
upcoming releases
One of the fundamentals of asynchronous programming is the declarative creation of asynchronous operation sequences. Streams can form sequences using the attach operator. When a stream is being closed it awakes the next attached stream if there is one, passing the asynchronous result to it, before finally dying.
Using the .attach operator
asyncFunction()
.attach(function(stream, asyncResult) {
console.log('result:', asyncResult)
})
In the example above asyncFunction returns a stream. Right after the function call the returned stream gets a new stream attached. The second stream is created by the attach operator out of the given function, it will receive the asynchronous result as asyncResult when the returned stream is closed and thus the second is awoken.
Declaring a sequence of 4 streams
http.post('http://server.org/oranges')
.attach(http.post('http://server.org/apples'))
.attach(http.post('http://server.org/bananas'))
.attach(function(stream) {
console.log('all 3 were posted sequentially')
})
When the attach operator receives a stream target it will acquire its ownership preventing it from executing freely, thus forcing it to execute sequentially.
The stream returned by the first http.post is not acquired by any other stream thus considered a free stream, meaning it'll awake and execute in the next event loop cycle.
Wrapping one stream into another
http.get('http://server.org/assets')
.attach(function(stream, assets) {
return http.post('http://server.org/form', assets)
})
.attach(function(stream) {
console.log('successfully posted')
})
It's often necessary to pass the results of one asynchronous operation to the next that's attached to it. This cannot be done at the time of the sequence declaration as the results are yet unknown. For this case a stream can be created during the execution of another stream and returned to it as in the example above.
A failure recovery mechanism is an important part of the asynchronous control flow. To prevent undefined behavior and malfunctions caused by unexpectedly failed streams QuickStreams provides the failure sequence operator.
Recovering from unexpected failure
http.get('http://server.org/assets')
.attach(function(stream, assets) {
return http.post('http://server.org/form', assets)
})
.attach(function(stream, postResult) {
console.log('successfully posted:', postResult)
})
.failure(function(stream, error) {
console.log('failure:', error)
})
The failure operator acts upon the entire sequence, it defines the stream that is awoken if anywhere in the sequence an unexpected error is thrown.
If in the example above any of the streams fail (network might be unreachable) the sequence is broken and the stream created by the failure operator awoken instead.
Recovering from failure in 2 consecutive sequences
http.get('http://server.org/assets')
.attach(function(stream, assets) {
console.log('retrieved assets:', assets)
})
.failure(http.delete('http://server.org/options'))
.attach(function(stream) {
console.log('failed, but managed to clean up')
})
.failure(function(stream, error) {
console.log('even cleanup failed:', error)
})
The failure operator starts a new sequence which could also fail and recover as in the example above.
There are situations when certain failures are expected but shouldn't necessarily break the sequence. QuickStreams offers the retry stream operator for such cases.
The retry operator takes an array of error samples and an optional number of times to retry. If a stream with the retry operator applied - fails and the thrown error matches one of the given samples, then the sequence doesn't break, instead the stream is resurrected and executed again.
Recovering from an expected failure
http.get('http://server.org/assets')
.retry([http.Timeout], 3)
.attach(function(stream, assets) {
console.log('retrieved assets:', assets)
})
.failure(function(stream, error) {
console.log('failed retrieving assets:', error)
})
A good use case example is a network request. Networks tend to be temporarily unreachable from time to time and requests to it might sometimes fail (timeout). Though most of the time the request should be retried for a couple of times before finally giving up.
The above example demonstrates a similar situations, where the network request is retried for 3 times on timeouts before breaking the sequence and redirecting control flow to the stream provided by the failure operator. But if the request failed nevertheless but due to another error (like a 500 - Internal Server Error) the sequence will break.
 To avoid unreadable, pseudo-recursive, asynchronous constructs QuickStreams offers the repeat stream operator.
The repeat operator takes a condition (a function returning a boolean) and resurrects the stream it was applied on until the condition returns false.
Declaring an asynchronous loop
var counter = 0
http.get('http://server.org/assets')
.repeat(function() {
counter++
if(counter <= 10) return true
return false
})
.attach(function(stream) {
console.log('repeated http.get 10 times')
})
In the example above the repeat operator is applied on the stream returned by the asynchronous http.get method. It uses the context variable counter to keep track of the passed steps and decides on each iteration whether to repeat (resurrect and execute) the stream again or not.
Besides special events such as a closure, a failure or an abortion a stream can emit custom events identified names optionally carrying arbitrary data sets.
Defining a counter factory
function spawnCounter() {
QuickStreams.create(function(mainStream) {
var iteration = 0
QuickStreams.timeout(1000, function(stream) {
iteration++
mainStream.event('update', iteration)
stream.close()
})
.repeat()
})
}
In the example above spawnCounter creates a continuous stream that will never close. This stream executes an asynchronous infinite loop that fires an event named update every 1000 milliseconds carrying the number of the current iteration.
Catching counter update events
var counterStream = spawnCounter()
counterStream.event('update', function(stream, iteration) {
console.log('current iteration:', iteration)
})
counterStream.event('update', http.get('http://server.org/assets'))
.attach(function(stream, assets) {
console.log('received assets:', assets)
})
The events fired by the counterStream created by spawnCounter will always awake 2 new streams on every iteration.
One of the hardest asynchronous problems to deal with is abortion. It's relatively hard to describe a sequence of transactions that might be asked to abort at any time. Additionally there could be an obligatory asynchronous clean up sequence involved making the code even more complicated, hard to read and maintain.
QuickStreams makes describing complex, abortable, asynchronous operations easier by providing a way of building higher level abstractions using the Streams Paradigm turning complex stream sequences into abstract, higher level streams using the stream hierarchies approach.QuickStreams provides 2 types of streams: Atomic Streams and Abortable Streams.
Atomic Streams are indivisible and cannot be aborted, whereas Abortable Streams are abortable during their life time. Stream sequences can be thought of as abortable streams and can in fact be wrapped into one.Defining an asynchronous, abortable transaction
function moveDocuments(fromUri, toUri) {
// create and return an abortable stream
// representing the document movement transaction
return QuickStreams.create(function(mainStream) {
var documents = []
var current = -1
var sequence = mainStream.adopt(http.get(fromUri))
.attach(function(stream, docs) {
// bring the results to the main streams context
documents = docs
})
.attach(function(stream, docs) {
return http.post(toUri, documents[current])
})
.repeat(function(isSequenceAborted) {
current++
// stop repeating the atomic http.post stream
// if the sequence (moveDocuments) was aborted
if(isSequenceAborted) return false
if(current < documents.length) return true
return false
})
// execute this async clean up sequence
// after an execution failure or an abortion
// before letting the moveDocuments stream die
function cleanup(error) {
http.delete(toUri)
.attach(function(stream) {
if(error) {
// moveDocuments failed during execution time
mainStream.fail({
execution: error,
cleanup: null
})
} else {
// moveDocuments was aborted
// but managed to clean up successfully
mainStream.close()
}
})
.failure(function(cleanupError) {
// moveDocuments unexpectedly failed
// during the cleanup procedure
mainStream.fail({
execution: error,
cleanup: cleanupError
})
})
}
// clean up, if moveDocuments unexpectedly failed
// before letting the moveDocuments stream die
sequence.failure(function(stream, error) {
cleanup(error)
})
// clean up, if moveDocuments was aborted
// before letting the moveDocuments stream die
sequence.abortion(function(stream) {
cleanup(error)
})
}, QuickStreams.Abortable)
}
In the above example moveDocuments represents an abortable, asynchronous transaction, moving documents from one host onto another. It must clean up unfinished work in case of an unexpected failure during its execution as well as in case of an abortion.
moveDocuments creates and returns an Abortable Stream effectively representing an easy to use abstraction over the entire process. The main stream acquires parentship over the underlying sequence using the adopt stream method making the sequence subordinate.
Using the asynchronous moveDocuments function
var movDocStream = moveDocuments(
'http://one.org/documents',
'http://another.org/documents'
)
var sequence = movDocStream.attach(function(stream) {
console.log('moveDocuments successfully completed')
})
sequence.failure(function(stream, error) {
console.log('moveDocuments failed:', error)
})
sequence.abortion(function(stream) {
console.log('moveDocuments successfully aborted')
})
// If moveDocuments didn't complete after 50 milliseconds - abort it!
// The abort won't do anything if the stream's already dead
QuickStreams.timeout(50, function(stream) {
movDocStream.abort()
})
Using moveDocuments is quite simple as it's just a regular, abortable stream. When the stream returned by moveDocuments closes - the documents are successfully moved. If it's aborted or fails during its execution it'll properly clean up before moving control flow to one of the given streams in the above usage example.
movDocStream abstracts away the implementation providing a consistent stream interface. All interaction with this stream will reflect onto the underlying, subordinate sequence.When a sequence is aborted during the execution of an atomic stream - an attached stream won't be awoken when the stream's closed, the control flow will be redirected to the stream defined by the abortion sequence operator instead.
Sometimes such behavior is not desired. When a certain stream must be invoked even if the sequence was aborted during the execution of its atomic predecessor, the bind stream operator must be used instead of attach.
Binding an obligatory stream to another stream
var sequence = http.get('http://server.org/assets')
.bind(function(stream, assets) {
// The log record is obligatory!
logger.entry('assets were received:', assets)
})
.attach(/* ... */)
Even if, in the above example, the sequence is aborted during the execution of the atomic http.get stream - the bound stream performing the logger entry will still be awoken and executed. The control flow will be redirected to the abortion stream only when the bound stream is closed.
Chaining bound streams
var sequence = http.get('http://server.org/assets')
// The log record is obligatory!
.bind(function(stream, assets) {
logger.entry('assets were received:', assets)
})
// the resource deletion is obligatory as well!
.bind(http.delete('http://server.org/assets'))
.attach(/* ... */)
Streams can be bound to other bound streams as well forming a chain of obligatory operations. In the example above both, the logger entry and the delete will execute sequentially even if the sequence was aborted during the execution of the atomic http.get stream.


--- layout: default layout_keyword: knowledge_base_page title: Activate your mobile device to receive SMS text notifications tags: basic_user_pages left_col_section_nav: [basic_user_nav] user_help_videos: [basic_user_videos] ---
To receive SMS text notifications from AllPlayers.com on your mobile device, that device needs to be activated by following the instructions below.
Click the AllPlayers.com logo or Home button at the top of any page to go to your home page.
Click Account in your side menu, then click Notification settings in the submenu.
Click Administer your mobile settings.
Enter your mobile phone number, and select your mobile carrier. If your carrier is not listed, contact AllPlayers.com support at<EMAIL_ADDRESS>Click Add phone number.
Check your mobile device. You will receive a text message from AllPlayers.com containing a 4-digit code.
Enter this code and click Confirm Number.
You will now be able to receive text messages from your AllPlayers.com groups on your mobile device.


|
handle=variable holding the image's handle
frame=optional frame to draw to if using an imagestrip image |
| There are 1000 reasons for this command. Simply put, you may want to 'draw' on an existing image you've loaded (LoadImage or LoadAnimImage) or created (CreateImage). You could, for example, have a blank wall graphic and you want to add 'graffiti' to it based on the user action (Jet Grind Radio baybeee! Sorry...).  Next time you display that graphic (DrawImage), you will see your changes! This is a powerful command! |
|
; CreateImage/TileImage/ImageBuffer example
; Again, we'll use globals even tho we don't need them here ; One variable for the graphic we'll create, one for a timer Global gfxStarfield, tmrScreen ; Declare graphic mode Graphics 640,480,16 ; Create a blank image that is 320 pixels wide and 32 high with 10 frames of 32x32 gfxStarfield=CreateImage(32,32,10) ; loop through each frame of the graphic we just made For t = 0 To 9 ; Set the drawing buffer to the graphic frame so we can write on it SetBuffer ImageBuffer(gfxStarfield,t) ; put 50 stars in the frame at random locations For y = 1 To 50 Plot Rnd(32),Rnd(32) Next Next ; Double buffer mode for smooth screen drawing SetBuffer BackBuffer() ; Loop until ESC is pressed While Not KeyHit(1) ; Only update the screen every 300 milliseconds. Change 300 for faster or ; slower screen updates If MilliSecs() > tmrScreen+300 Then Cls ; clear the screen ; Tile the screen with a random frame from our new graphic starting at ; x=0 and y=0 location. TileImage gfxStarfield,0,0,Rnd(9) Flip ; Flip the screen into view tmrScreen=MilliSecs() ; reset the time End If Wend |


What can i do ?
Here is some of my work
- Project Name
- Web app that can do this and this
- Build with:
- React, Redux, Bootstrap, Django
- Project Name
- Web app that can do this and this
- Build with:
- React, Redux, Bootstrap, Django
- Project Name
- Web app that can do this and this
- Build with:
- React, Redux, Bootstrap, Django


{% extends "appfd/base.html" %} {% block content %}
We owe a debt of gratitude to the following either because we drew inspiration from them or we directly use it in our code:
{% for name, href in list_to_thank %} {% if not forloop.first %}| {% endif %} {{name}} {% endfor %}


Hello, I'm Anthony Tuel. Developer, lifelong learner, and Cyclone fanatic.
Developing multiple phishing websites to improve security awareness and training within the organization
Created an automated tool to post alerts, sent as Slack messages, to a Slack channel using web APIs
Performed analytics on alerts using Microsoft's PowerBI
Forecasted $169,000,000 in LAN equipment upgrades for over 600 3M locations around the world
Created a Network Operations Center proof-of-concept for tier 3 network health monitoring
Acquired an understanding of basic networking, including: routers, switches, and firewalls
Executed wireless changes, troubleshot issues, and completed PC builds
Resolved employee and customer issues with Landus Cooperative computer systems
GPA: 3.74


Emacs supports one ActiveX interface called:
Barry Scott Emacs.Commandline
This interface has one function defined which takes two string parameters:
CommandLine current_directory command_line
Emacs will change its current directory to the value of the current_directory parameter. Then the command line in command_line is parsed and executed by emacs.
The following code VBA fragment creates the emacs command line object and opens the file "u:\work\emacs\emacs.cpp". The current directory is set to "u:\work".
Set myServer = CreateObject("Barry Scott Emacs.CommandLine") myServer.CommandLine "u:\work", "emacs\emacs.cpp"
This second example runs the a package:
Set myServer = CreateObject("Barry Scott Emacs.CommandLine") myServer.CommandLine "u:\work", "/package=testpack arg1 arg2 etc"


ghpr
GHP Report
Home
Run
Tests
Run details
Main
Test list
Timeline
Back
Prev
Next
Latest
Recent failures
Test run report
Run information:
Name:
Sprint:
Start datetime:
Finish datetime:
Duration:
Run summary:
Total:
Success:
Errors:
Failures:
Inconclusive:
Ignored:
Unknown:
Passed
Failed
Broken
Ignored
Inconclusive
Unknown
Test list:
Run timeline:
Hierarchical
Collapsed
Brief results
Run summary should be here...
Run summary should be here...


ASP MVC Controllers
See Actions for actions and actionfilters.
Injecting Dependencies
Rather than instantiate dependencies (unitOfWork, DbContext) directly in the controller, you can inject them. The DefaultControllerFactory uses Activator.CreateInstance, but if you use DI you can add constructor arguments. Use either:
- an IDependencyResolver (eg with common service locator). Register with DependencyResolver.SetResolver(myDependencyResolver);
- an IControllerActivator (Create(requestContext, type)). Register with an IDependencyResolver.GetService< IControllerActivator>.
Register in global.asax, Application_Start()
var builder = new Autofac.ContainerBuilder();
//registers all controllers with InstancePerDependency
builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
This is Structuremap (v3) with CommonServiceLocator. Note we don't deal properly with disposables here, but for most things (even disposable DbContext) it's fine.
//structuremap
var container = new Container(c => c.AddRegistry<StructureMapDefaultRegistry>());
var structureMapResolver = new StructureMapDependencyResolver(container);
//MVC
DependencyResolver.SetResolver(structureMapResolver);
//WebAPI
GlobalConfiguration.Configuration.DependencyResolver = structureMapResolver;
This is the CommonServiceLocator / IDependencyResolver for StructureMap.
/// <summary>
/// A service locator for StructureMap
/// </summary>
public sealed class StructureMapDependencyResolver : ServiceLocatorImplBase, IDependencyResolver
{
/// <summary>
/// Initializes a new instance of the <see cref="StructureMapDependencyResolver"/> class.
/// </summary>
/// <param name="container">The container.</param>
/// <exception cref="System.ArgumentNullException">container</exception>
public StructureMapDependencyResolver(IContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
Container = container;
}
/// <summary>
/// Gets or sets the container.
/// </summary>
/// <value>
/// The container.
/// </value>
public IContainer Container { get; set; }
/// <summary>
/// Begins the scope. This is called Per Request by MVC.
/// </summary>
/// <returns></returns>
public IDependencyScope BeginScope()
{
var nestedContainer = Container.GetNestedContainer();
return new StructureMapDependencyResolver(nestedContainer);
}
/// <summary>
/// When implemented by inheriting classes, this method will do the actual work of resolving
/// the requested service instance.
/// </summary>
/// <param name="serviceType">Type of instance requested.</param>
/// <param name="key">Name of registered service you want. May be null.</param>
/// <returns>
/// The requested service instance.
/// </returns>
protected override object DoGetInstance(Type serviceType, string key)
{
if (serviceType == null) throw new ArgumentNullException("serviceType");
if (string.IsNullOrEmpty(key))
{
return serviceType.IsAbstract || serviceType.IsInterface
? Container.TryGetInstance(serviceType)
: Container.GetInstance(serviceType);
}
return Container.GetInstance(serviceType, key);
}
/// <summary>
/// When implemented by inheriting classes, this method will do the actual work of
/// resolving all the requested service instances.
/// </summary>
/// <param name="serviceType">Type of service requested.</param>
/// <returns>
/// Sequence of service instance objects.
/// </returns>
protected override IEnumerable<object> DoGetAllInstances(Type serviceType)
{
return Container.GetAllInstances(serviceType).Cast<object>();
}
/// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
public void Dispose()
{
Container.Dispose();
}
/// <summary>
/// Gets the services.
/// </summary>
/// <param name="serviceType">Type of the service.</param>
/// <returns></returns>
public IEnumerable<object> GetServices(Type serviceType)
{
return DoGetAllInstances(serviceType);
}
}
For completeness, a standard StructureMap registry
public class StructureMapDefaultRegistry : Registry
{
/// <summary>
/// Initializes a new instance of the <see cref="StructureMapDefaultRegistry"/> class.
/// </summary>
public StructureMapDefaultRegistry()
{
Scan(
scan =>
{
scan.AssembliesFromApplicationBaseDirectory();
scan.WithDefaultConventions();
scan.ExcludeNamespace("System");
scan.ExcludeNamespace("Microsoft");
scan.ExcludeNamespace("IBM");
scan.RegisterConcreteTypesAgainstTheFirstInterface();
});
}
}
Async Controllers (MVC 3 and before)
using System.Threading.Tasks;
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers
{
public class ProductController : AsyncController
{
//async default timeout is 45 secs (45000)
[AsyncTimeout(60000)] //or [NoAsyncTimeout]
public void DisplayAsync()
{
//tell MVC about number of async operations
AsyncManager.OutstandingOperations.Increment();
Task.Factory.StartNew(() =>
{
//do an operation
var data = RemoteService.LoadProduct();
//set parameters for xCompleted. (Before Decrement!)
AsyncManager.Parameters["data"] = data;
//finally tell MVC it’s finished
AsyncManager.OutstandingOperations.Decrement();
});
}
public ActionResult DisplayCompleted(ProductViewModel data)
{
return View(data);
}
}
}


Olivia Lundelius and John Klingelhofer - RCOS Spring 2018
View on GitHub Back to Main PageI made a hopper out of posterboard which has a nose for evenly distributing the concentrate. A diagram of what it is supposed to like is attached to this post (or will be, when I figure out how to do that). The dimensions are 0.5 x 0.5 cm square bottom opening, 5.5 x 5.5 cm square top opening, and the diagonal distance from center of top to center of bottom of a side of the hopper is 6 cm. Liz's cardboard conveyor belt is coming along very well, and Alexis has added some nice layman's documentation and is working on more in-depth documentation of how the program works for easier modification. Also, I realized that a lab shaker/oscillator should be perfect for a vibratory bowl feeder. I'm convinced now that this is the way to go. I believe that this is what Tom Kaye used in his paper.
I decided to scrap a lot of the machine learning approaches I was doing before and start working through a tutorial on OCR/handwriting recognition. I think I need to understand more about something called HOGs, histogram of oriented gradients? Hopefully shouldn't be too bad.
- Olivia
Regarding hardware, I started looking at vibratory bowl feeders again. Although they are more complicated to print and assemble, they might be more effective than just a hopper. I found a couple of models online, however I can't find a license attached to them, so they can't be assumed open source. I'll look into maybe making a similar (but much simpler) model myself. I'm worried about sediment getting either damaged or stuck in the hopper. However, I'm still not sure how to get it to vibrate. For a hopper, it may just be simpler to make one out of posterboard before trying to print one.
- Olivia
I've been looking into how to get the shape classifier working again. This is possibly one of the most important parts of the classifier because if it works okay, then it would be applicable to a much wider range of data sets. There's Hu Moments, contours, edges, and image segmentation. I need to figure out what I want to use and how to train a model to recognize the difference between microfossils and gravel based on its contours.
I'm not seeing a lot of information on training using contours, which I find a bit odd. Maybe I'm approaching this incorrectly? Once I figure out what method I can use, I can just add a class to approach.py to test how well contouring works individually. If it ends up working well, I may move it to a separate file to see if I can use it in conjunction with color segmentation as well. I've been reading this, this, and this. I may be able to re-appropriate parts of the data collection script for the shape discriminator.
- Olivia
This semester (F18), three students are working on this project: myself, Alexis Joseph and Elizabeth Chavarin.
So far, previous ideas have been: Rotary sorter, which is being abandoned due to over-complication of project. Some kind of copy of Kaye's sorter, which is being abandoned due to difficulty of acquiring/making a vibratory bowl feeder (not sure how to make it vibrate).
Now, current idea is to have a simple hopper deposit some small amount of concentrate onto a conveyor belt. The concentrate would be photographed and an air puff would remove the sample from the assembly line if microfossils are detected. Everything else is dumped into a waste bin. The removed microfossils will likely have gravel still mixed in with it, so there should probably be a system for re-sorting material multiple times in order to better isolate microfossils from gravel. We will probably need to make use of 3D printed pieces, some PVC, plastic sheets, and some kind of motor. We'll need to figure out the gear ratios possibly, which will be annoying. I found a model conveyor belt tutorial here.
- Olivia
Managed to get nanpy partially working. After messing around with different versions, I got python code to work with LEDs but for some reason I can't manage to control the servo motors. I'd much rather use an Arduino to control the various parts of this project as it'll allow for maybe lighting condition optimization in the future, but for now I may have to go back to using a servo HAT to control a servo as that'll be much easier in the long run.
I've also acquired and tested out a pi camera, seems to work fine. I'm currently working on, and over the summer, will be working on getting the pi camera to work with existing code, and am also making a script to identify when an object is around the center of the camera. That would be like a "sample" event, at which point a discrimination algorithm will determine the classification of the centered object and send an appropirate signal to the servo (hopefully through nanpy, but if I have to I guess I'll switch to the servo HAT).
I've made a small chute out of black poster board with the raspberry pi, camera, LEDs and breadboard as a kind of prototype, but I'm fairly certain I'll need the help of a mech-e to really get the hardware aspects of this project going. I'm going to ask around to see if someone knows paleontologists or engineers who may be able to help me with this. I plan on working through the summer, when I have much more time and am not slowly suffering through classes, on getting together a more solid demo and hopefully a much less flimsy hardware prototype. Hopefully, I can prepare everything in time for the Association of Materials and Methods in Paleontology meeting next year, it would be an excellent platform to gather support for this project. When I attended last year, presenting the idea for this project, it gained some attention, so hopefully I'll have a more fleshed-out project to show them.
- Olivia
After being sick and useless for a week I've started looking more into the hardware for the sorter again. It occurs to me that we'll need some sort of extra cables or something for the LEDs and components to be more movable and so that they can be placed more easily in some kind of housing for the sorter electronics, rather than being stuck to the breadboard. Going to have to look into getting some of those.
It's been suggested that we look into using an air puff rather than a lever conrolled by a servo motor. That's definitely a good idea, however it will probably generally be easier for assembly if we could get the lever to work. It would also reduce the cost of having some kind of pressurized air puff as well as figuring out how to control it, wheras servo motor works nicely with the Elegoo/Arduino.
I've started teaching myself to use NX 11 modeling software. Definitely nowhere near needing to use it yet, first prototypes which I'm working on are going to be made of cardboard. Only when I have something that kind of works with that am I going to try making anything with that modeling software. I guess I could just model everything in Unity but that feels kind of unprofessional and it probably won't be in the right kind of file format for 3D printing. Also unnecessarily bloat-y software for just making a model. Anyways, cardboard is proving to be fairly difficult to work with considering how small microfossils are. Also have a mild concern about static getting them caught up, especially if these models end up being printed from plastic, which are prone to static. Tom Kaye's model was made from some kind of metal, which likely prevented this from being an issue.
At some point I must acquire a webcam so that I can try and get the lighting of this correct. Placement of LEDs will be difficult as they'll have to be close enough to the sample to illuminate it without shadows (likely one on either side) but not so that it causes any kind of over-saturation from the camera's perspective or glare, which would throw the whole thing off. This will likely affect size and shape of the container for image capture and possibly the chute that microfossils/gravel travel down. Still not sure how to get the timing and placement of samples right. Maybe they can be slowly sliding down a chute and use edge detection to take a picture when it's within a certain area of the frame, like the center. That'll probably work.
Another thing that could be done is have some kind of frosted side paneling to the area where a picture will be taken, and have the light be filtered through that. That way it'll soften any glare, hopefully, provide smoother and more consistent lighting and allow for a much smaller chute area, and reduce the need for careful placement of LEDs. They could then just be shoved on either side of the sample wherever is most convenient.
Also vaguely related, we might submit our project to the Undergraduate Research Symposium. Or not. Either way, if not this year, will probably do so next year as it could be an opportunity to find people able to help on the mechanical sorter as I'm not sure what I'm doing and currently just trying my best to get this to hopefully work.
Anyways, tl;dr starting to make cardboard models of the physical sorter, need to get a webcam and more wires and some kind of frosted surface as a light filter (probably plastic wrap would be fine for now), learning how to use NX 11.
- Olivia
- John
Recently got a micro servo motor (SG51R). Seems fairly slow, but that shouldn't be too much of a problem, hopefully.
I've decided to greatly simplify the design for the sorter to more closely resemble the one created by Tom Kaye. In this case, we'll need only one servo (hopefully the one we have should suffice) and will only need minimal assembly and designing. This way, all we'll have to make is a hopper, a path for a sample to go on, and determine the distance needed for the sample to go in order to give the algorithm and servo enough time to determine where to put the sample.
UV LEDs arrived, we'll be able to assemble a lot more now. Hardware-wise, the only things left are the hopper, path, and some kind of material for photographing the samples against. This break, I (Olivia) will be able to set up my R-Pi with the servo HAT and a dummy LED, and hopefully put together a script that incorporates both the discrimination algorithm and controlling the servo. John has a small web cam that works with the R-Pi, which should be useful. So far as designing hardware, I'll try to make something over break but I'm not sure how successful I'll be. Probably I'll just go to the Forge again and see if they can help, don't want to have to print a whole bunch of garbage before finally getting it right.
- Olivia
Went to RPI Forge, which was extremely helpful. Forge is mostly for 3D printing, the Embedded Hardware Club would likely be more helpful for what we're doing, but someone at Forge helped me. Apparently an Arduino isn't actually all that necessary, and the same things can be controlled by various modules that can connect to a Raspberry Pi directly rather than having the extra complication of going through an Arduino and trying to sync up a camera module through R-Pi and motor modules through Arduino.
It was suggested that we 3D print a hopper through Forge, I've been offered help with that by an individual named Misha. We should probably have two kinds of servos, a continuous one for the central rotating mechanism, and a positional rotation servo for a chute to deposit samples into one bin or another.
So far as getting everything to be used directly through the R-Pi, there's a small hardware piece that can be used directly through the R-Pi rather than be forced to use the Arduino interface. There's a Python package (something like python-smbus) that works for this servo HAT after enabling I^2C on the R-Pi. Not sure how to do any of that yet, will be working this week to get that working, and also to get two servos and the servo HAT. It was suggested that we laser-cut the device out of polystyrene, but that's something further off into the future. It was also suggested that we get a small spectrometer module, which, according to Misha, works very well. Should try using that either instead of or in addition to the camera module.
- Olivia
SVM classifier was fixed, now looking further into gathering hardware components. Ordered an Elegoo board on Amazon, as well as some wires, a breadboard and other components to start off. This week we'll look at the performance of the classification algorithms on the Raspberry Pi (which should be just fine) and start using the Elegoo (which is exactly the same as an Arduino, just under a different name).
Am going to go to RPI Foundry to see what kind of help they can give us on our project, any hardware suggestions and maybe even find a Mech-E who's willing to join and help us.
- Olivia
This week's is among the final weeks for the classifier, unless later in the semester we move beyond binary classification. There's now a function in place which can take an image containing multiple bones/rocks or a single bone/rock and crop an image containing just that image, provided that the image is taken on a clear enough background such that edge detection can form a general outline of the rock/stone in question.
This cropping may possibly prove useful as an additional metric in classification, as the rocks tend to have a much more uniform aspect ratio (often about 1:1) when compared to the bones. In addition, this automatic cropping makes obtaining measurements for the samples easy, which itself could prove an interesting additional metric. Though the clear difference in color between the rocks and bones under UV light may make these metrics superfluous, they may still have some purpose or have a role in broader analysis of collected samples.
This week also saw more work on different classifiers. Since differences in average color should be enough to segment the data, we developed a simple perceptron, and began work on a SVM. We also changed the structure of functions within files, with all of the image manipulations being moved into the "img_tools.py" file which can be imported into any function, rather than each classifier having its own subset of a broader collection of functions.
- John
This week's work has largely been focused on the Computer Vision aspect of this project. Of course an important part of this process was the creation of new training data under more controlled conditions, as well as examining the various modes available for the classification of this data.
Increasing the expected ease of this process, one of the major delimitating factors between bones and stone is the average color. Provided that this classiciation difference holds true for all of our upcoming samples, aside from those which we have currently, each image can be reduced to a simple vector containing the average R, G, and B values. With the normalcy of this data (not the case were we interpreting the images directly), we can apply standard data mining techniques to this data such as SVMs, Linear Regression, etc. Our old training data could be inearly separated based on these RGB values, and we expect this to hold true for the upcoming data.
This upcoming week will include nailing down our classification strategy for future weeks, as well as starting to make some headway and decisions for the hardware aspect of this project.
- John
This first week was largely focused on laying the foundation for this project, as a strong early foundation means time saved later on. This foundation week included the setup of our GitHub and this website, installing all of the packages to be used in this assignment on the comptuers of both team members (including the often persnickity OpenCV) and discussing some of the broader goals for the project.
- John


New User
About Us
Enter your name
Name:
Click to continue
Total Wins: 0
Total Games: 0
Total Loses: 0
Best of 3
To make it best of 3 choose your next move,
or click here to start a new game!


This is a survey to help you understand which programming language to start! There are five questions to answer. Once you submit, the survey will either show your result, or have you answer a bonus question to help us decide your language!


When in the menu screen, use the W and S keys to navigate through the menu options ( Press enter to move to next screen ).
When choosing your avatar, use the A and D keys to pick ( Press space to pick avatar and start game ).
Use the W, A, S, D keys to
move your avatar next to the answers of each question. If you are right, you will gain 100 points. If you are wrong you will gain 0 points. Good luck!
Click the buttons to play or pause the audio.


"SourceFuse builds innovative applications for enterprises. After having used most Node.js frameworks, we are excited to select LoopBack V4 as a our go-to framework for delivering secure and scalable systems to our clients. To that end, SourceFuse is investing heavily in training it's staff on the best practices LoopBack V4 offers and giving back to the open source community by contributing to the project and organizing meetups for the local Node.js community."
- Kabir Singh Chandhoke, Chief Operating Officer, SourceFuse
"At Humans of Code, we always wanted a reliable node based backend that helps us with very rapid prototyping and has a way forward to production release at scale. LoopBack stood high amongst all other frameworks over time. Almost 80% of our user stories get covered with the 20% of generated code. LB provided us with a great leverage on time so that we can focus on business logic, rather than boilerplate code. With LoopBack 4 released and added support for TypeScript, we are excited for the great things ahead."
- Vivek Dwivedi, Founder, Humans of Code
"The Fundrails platform is built with LoopBack and industry leading technologies to enable integration with different providers, blockchain and expose APIs for our partners to consume. Our ubiquitous API (and GraphQL endpoint) powers an end-to-end digital onboarding, transfer agency for funds and integrations to our customer's fund accounting solutions."
- Kowsheek Mahmood, CTO, Fundrails
"When we set out to build our ERP system for the aviation industry we carefully researched various options. Node.js and the LoopBack framework came out far ahead. Its powerful features and built-in functionality made it incredibly quick and easy. Plus, LoopBack’s ability to auto-generate the entire API layer makes it a winner."
- Lee Johnson, FlightOffice CEO & Founder
"We are excited to be collaborating with StrongLoop on our Reseller API. Co-developing a solution with the industry leader in Node has allowed us to accelerate the delivery of solutions to our reseller partners and drive revenue growth for them. Our external API is an incredibly important aspect of our overall technical strategy."
- Elissa Murphy, GoDaddy Chief Technology Officer
"FoKo is using LoopBack to create a whole new backend for a photo-sharing application specifically for enterprises. Loopback has allowed us to move away from Parse and we are now using Loopback with MongoDB, Redis, and Amazon S3. We are moving quite fast with such an awesome product and have already made contributions back to the LoopBack project."
- Benjamin Boudreau, FoKo Software Developer
"Our company has been using LoopBack for several years. We started using it from its beginnings and the truth is that we love this new version. We want to congratulate the Strongloop Team from PTG Team for making developer's life a bit easier."
- Jesús Mora, CTO & Co-Founder, Pitagorines Group
"I applaud the effort and dedication taken to build such high-quality, robust and modern framework, which is a key piece in our architecture since years ago.
It accelerates our development efforts insanely, saving us a precious time designing and deploying our REST APIs at Fixr. One of our best choices! Thank you team!"
- Antonio Parraga, CTO & Co-Founder, Fixr
"We use LoopBack to solve our client needs with rapid development, so we can focus on biz rules to get an awesome solution."
- Oliver Cera, CEO, Kumisoft
"At Whiteboard, we were looking to rapidly re-architect the way we communicate with our integration providers and LoopBack 4 emerged as the clear winner. Designing API endpoints and interfacing with third-party data sources couldn't be easier, allowing us to focus only on what matters. With the latest release being written entirely in Typescript, we have been able to leverage the power of paradigms like Dependency Injection to improve test quality and maintain a clean yet consistent coding standard across our repository. LoopBack gives rapid development a new meaning!"
- Kaushik Gnanaskandan, Director of Technology, Whiteboard Technology