--- layout: page title: about permalink: /about/ ---
👋Hi there! I'm Ann. Or Annie. I am currently a Master's of Science candidate for Human-Computer Interaction at University College London. Previously, I worked at PricewaterhouseCoopers in Boston as a Consultant in Consumer Markets. Prior to that, I completed an internship at HarperCollins Publishers in New York, where I built websites, designed social media content, and exploited my love of books. I graduated from Bryn Mawr College with a major in Computer Science in 2018. There, I was a Posse Foundation STEM Scholar.
When I'm not working, you can find me in the kitchen (trying to not set anything on fire), nose deep in a book, or taking a walk in Hyde Park.


Search
Drs. Ismunawan, M.M
Drs. Ismunawan, M.M
CATEGORIES
Select Category
Action
Another action
Something else here
SOSIAL MEDIA
Light card title
Some quick example text to build on the card title and make up the bulk of the card's content.
ARCHIVES
Light card title
Some quick example text to build on the card title and make up the bulk of the card's content.
About
Services
Contact
Portfolio
1 Column Portfolio
2 Column Portfolio
3 Column Portfolio
4 Column Portfolio
Single Portfolio Item
Blog
Blog Home 1
Blog Home 2
Blog Post
Other Pages
Full Width Page
Sidebar Page
FAQ
404
Pricing Table
Previous
Next
Footer


Web shop
Create an account
Create an account to purchase items on our web shop!
First name:
Last name:
Email:
Phone:
Password:
Agree to our
privacy policy
.
Sign up!


Please enter a valid email.
Your password needs atleast 8 characters.
Your name must be at 2 characters.


Use the expand-btn base class on a button that expands and collapses content.
Use the expand-btn--no-text modifier for an expand button with no visible text. The button requires an aria-label for assitstive technology too.


owls8 - the concept
symbols
blue
trust
smart
calm
faith
natural
stable
power
8
eternity
unity
confidence
integrity
success
patience
talent
Secret knowledge
dreams
Intelligence
wisdom
protecton
transition
colors
#0066CC
#ffffff
#00000
logo
varieties
black/white
inverted
urls
www.owls8.net
www.owls8.com
www.owls8.de
techs
fontawesome for nice icons
skrollr for scrolling effects (sticky menu)
roadmap
clothing


398 Kwahu South farmers benefit from PFJ programme
Over 398 farmers in the Kwahu South District have benefitted from the government's 'Planting for Food and Jobs'(PFJ) programme.
The farmers benefited from subsidised fertilizers, seeds, planted maize and vegetables.
Mr Emmanuel Atta- Ofori, the District Chief Executive (DCE), who disclosed this during the Assembly's meet-the-press forum at Mpraeso said the assembly would do its best to ensure that the people benefited from government's flagship programmes to enhance their lots.
The DCE said many of the farmers also signed onto the Planting for Export and Rural Development (PERD) initiative and were into coffee and coconut production.
He said the district agriculture extension officers also schooled farmers on the use of modern technologies such as proper application of fertilizers, diseases and pests control, planting in distance, planting in time and how to prevent post-harvest loses, resulting in high yields.
Mr Atta-Ofori said the assembly also procured 420,000 coffee seedlings out of which 187,989 had already been distributed to farmers.
He said PERD aimed at encouraging the farmers to cultivate tree crops such as mangoes, coffee, cocoa, oil palm, cassava, coconut and cashews as a form of investment and to produce raw materials to spur the establishment of factories in the District.
He said PFJ and 'PERD initiatives were making significant impacts on the economy as a result of which the country had reduced the importation of some food crops."
Mr Atta-Ofori, therefore, called on the citizenry to support the government in implementing the various initiatives for accelerated socio-economic development.


Claim Checker
A Research Prototype
Home
About
Enter a Claim
Example Claims:
Vice Media CEO Shane Smith paid 300,000 for a Las Vegas dinner
ISIS fighters were caught trying to enter the U.S. via the U.S.-Mexico border
A N.Y. high schooler earned 72 million in the stock market


The Main Window¶
Detaching Windows from the Application¶
With the mouse position next to any gray shaded area next to the title of the window, press down the left mouse key and at the same time slide the mouse cursor away from the application. This will detach the window and allow you to position it at a new location, either inside the application or at a new desktop screen location. Once you have positioned the window to where it is desired, simply release the left mouse key.
Above are illustrations of where the mouse can be positioned for moving the window.
Note: The Project View window is not moveable.
When the window is moved “Un-Docked” around the application a blue shaded area will be displayed showing what new places the moved window can be placed.
Window with Blue shaded application section.
Example of Window outside of the application.
The advantage of moving windows outside of the application is to provide a larger viewing area for the image and allow side by side comparisons when using multiple monitors.
Batch Processing from Command Line Tool¶
Once a project has been setup, just like processing from the GUI you can also setup processing using the CompressonatorCLI command line tool. The Command line tool has more options that are currently not supported on the GUI application. While 3D mesh process is not supported on Command line tool yet.
Once the Batch file are generated from the GUI, it can be edited to include more options used by the command line tool. This also facilitates automated generation of compressed files from many source textures.
Steps to generate a batch file:
- Creating a project file and set up the desired destination settings.
- Open the file menu and select “Export to batch file…”
- Select a destination file name and location to generate a batch file that can be run from command line.
- Select Save.
The batch file requires the CompressonatorCLI.exe, support file folders and DLL to be present on the same location.
The following files are required to run CompressonatorCLI.exe with the batch file:
… Include all files and subfolders under that folder
| \plugins... | Qt Windows DLL and Qt Image Plugins |
|---|---|
| CompressonatorCLI.exe | Command line Application |
| qt.conf | Specifies the plugin folder |
| Qt5Gui.dll | Qt Run time DLL’s |
| Qt5Core.dll | |
| libGLESv2.dll | |
| libEGL.dll |
`


23 Jun 2015
After you've started promoting your awesome product to people, they'll start visiting your website. It would be helpful if we could find out how many people are coming to your website and see what the percentage of people who sign up for your mailing list is. In order to do...
22 Jun 2015
It’s important to have a landing page, and a landing page can do many things for you. However, one of the chief uses for a landing page is to collect and build an email list. Why is this important? Maybe you don’t have an app yet, but you want to...
21 Jun 2015
Now that we have a basic template for everything, you might think that we’re just about done! Having a well-designed site will prevent readers from closing the tab immediately. But now we have to keep them here. We have to be able to format and write our page in a...
20 Jun 2015
Humans are a visual species, and pictures can evoke emotion. Sometimes you can get away with having a landing page that is all screenshots, but often you’ll find that beautiful imagery can lend more attractiveness and liveliness to a page. In this post, we will talk about where to find...
19 Jun 2015
The purpose of a landing page is to make people excited about your product or service. Your landing page is your chance to make a great first impression on your future customers. An ugly page makes for bad first impressions. Now a lot of you might be thinking, "I'm a...


Liquid Carrot
Documentation
More
Report an issue
Carrot
is a free, open source
AI
framework for building
deep learning
models based on Neataptic.
Star
Follow @LiquidCarrotAI
npm i @liquid-carrot/carrot
Copy
See the
docs


Spread four slices of bread with mayonaise on the “outer”
edges (since you’ll be making sandwiches).
Place a cheese slice between each pair of slices of bread,
laying the sandwiches on the cookie sheet.
Bake for four to six minutes, then flip the sandwiches
and bake for another three to five minutes. Note that the
sandwich will brown on the bottom (the side facing the foil), and
not on the visible (top) side when it’s in the oven.
Tips and Suggestions
Use real mayonaise, not “salad dressing”, as this intended to
promote browning and needs a decent fat content. If mayonaise is
not available, you could probably substitute margarine or butter.
I tested this with “Thin Sandwich” bread, which has 24 slices in a
single loaf, and with “Thick” cheese slices. You’ll want to adjust
the baking time and temperature if using something different.
You can probably fit three sandwiches on a cookie sheet, but I
can’t eat that much all at once.


The bit bomb
Angular
Read large text files in nodejs
Angular
Angular
Angular
Angular
Angular
Angular


Myles Stephenson went on 'dangerous' fasting diet before I'm A Celebrity
He warned fans to be careful if they try it
by Richard BellRak-Su singer Myles Stephenson went on a potentially dangerous fasting diet in the run-up to this year's I'm A Celebrity... Get Me Out Of Here!
The buff X Factor winner, 28, told fans on Instagram he was undergoing "water fasting" and said he felt it gave him "more energy and life".
But he cautioned his followers by warning that the controversial method "isn't for everybody" and should be taken "very seriously" if attempted.
Read more: I'm A Celebrity newcomer Andy Whyment fears his Corrie co-stars will vote him into horrific trials
He shared a topless snap of himself lounging in his bed and wrote in the caption: "Morning gang. 40 hours of fasting done so far."
"@nicooholi put me onto it and strangely I have more energy and life when I am water fasting. Cleanses my body and soul! Have a good day and go get it.
"PS, water fasting isn't for everybody and if done, should be taken very seriously and with caution! #WaterFasting #Fasting #Morning #Energy #Water."
According to MedicalNewsToday, water fasting is when a person eats no food for a certain period and instead only drinks water.
The website explained: "People may undertake water fasting to lose weight, for spiritual or religious reasons, or to try and combat particular health problems.
"Research suggests that occasional fasting may help with weight loss, although other methods may be more effective long-term."
However he achieved it, Myles is looking in great shape on I'm A Celeb.
Wednesday's episode saw the singer join forces with Kate Garraway to win a few treats for the camp.
The pair had to dress like pigeons and use long sticks to place eggs into a wooden bird house.
Read more: I'm A Celebrity: Viewers are making the same joke about Nadine's singing
The task required an incredible level of balance but they managed to get enough in for a visit to Kiosk Kev.
They chose chocolate eggs as the prize and Kiosk Kev called through to the camp, asking them what percentage of the public considered social media to have a negative impact on society - 46% or 66%.
But their campmates ended up answering incorrectly, leaving Myles and Good Morning Britain star Kate gutted as they made their way back empty handed.
Have you ever tried water fasting? Leave us a comment on our Facebook page @EntertainmentDailyFix and let us know what you think.


This vignette illustrates the usage of the cmfrec library for building recommender systems based on collaborative filtering models for explicit-feedback data, with or without side information about the users and items. Note that the library offers also content-based models and implicit-feedback models, but they are not showcased in this vignette.
This example will use the MovieLens100k data, as bundled in the recommenderlab package, which contains around ~ 100k movie ratings from 943 users about 1664 movies, in a scale from 1 to 5.
In addition to the ratings, it also contains side information about the movies (genre, year of release) and about the users (age, occupation), which will be used here to construct a better recommendation model.
For a more comprehensive introduction see also the
cmfrec
Python
Notebook, which uses the more richer MovieLens1M instead (not
provided by R packages).
One of the most popular techniques for building recommender systems is to frame the problem as matrix completion, in which a large sparse matrix is built containing the ratings that users give to products (in this case, movies), with rows representing users, columns representing items, and entries corresponding to the ratings that they’ve given (e.g. “5 stars”). Most of these entries will be missing, as each users is likely to consume only a handful of the available products (thus, the matrix is sparse), and the goal is to construct a model which would be able to predict the value of the known interactions (i.e. predict which rating would each user give to each movie), which is compared against the observed values. The items to recommend to each user are then the ones with highest predicted values among those which the user has not yet consumed.
Typically, the problem is approached by trying to approximate the interactions matrix as the product of two lower-dimension matrices (a.k.a. latent factor matrices), which when multiplied by each other would produce something that resembles the original matrix, having the nice property that it will produce predictions for all user-item combinations - i.e.
\[ \mathbf{X} \approx \mathbf{A} \mathbf{B}^T \] Where:
For a better and more stable model, the \(\mathbf{X}\) matrix is typically centered by substracting its mean, a bias/intercept is added for each user and item, and a regularization penalty is applied to the model matrices and biases (typically on the L2 norm) - i.e.:
\[ \mathbf{X} \approx \mathbf{A} \mathbf{B}^T + \mu + \mathbf{b}_A + \mathbf{b}_B \] Where:
The matrices are typically fitted by initializing them to random numbers and then iteratively updating them in a way that decreases the reconstruction error with respect to the observed entries in \(\mathbf{X}\), using either gradient-based procedures (e.g. stochastic gradient descent) or the ALS (alternating least-squares) method, which optimizes one matrix at a time while leaving the other fixed, performing a few sweeps until convergence.
This library (cmfrec
) will by default use the ALS method
with L2 regularization, and will use user/item biases which are model
parameters (updated at each iteration) rather than being
pre-estimated.
The MovieLens100k data is taken from the recommenderlab
package. As the data is sparse, it is represented as sparse matrices
from the Matrix
package. The data comes in CSC format, whereas cmfrec
requires COO/triplets format - the conversion is handled by the MatrixExtra
package for convenience, which also provides extra slicing functionality
that will be used later.
library(cmfrec)
library(Matrix)
library(MatrixExtra)
library(recommenderlab)
data("MovieLense")
<- as.coo.matrix(MovieLense@data)
X str(X)
#> Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
#> ..@ i : int [1:99392] 0 1 4 5 9 12 14 15 16 17 ...
#> ..@ j : int [1:99392] 0 0 0 0 0 0 0 0 0 0 ...
#> ..@ Dim : int [1:2] 943 1664
#> ..@ Dimnames:List of 2
#> .. ..$ : chr [1:943] "1" "2" "3" "4" ...
#> .. ..$ : chr [1:1664] "Toy Story (1995)" "GoldenEye (1995)" "Four Rooms (1995)" "Get Shorty (1995)" ...
#> ..@ x : num [1:99392] 5 4 4 4 4 3 1 5 4 5 ...
#> ..@ factors : list()
In order to evaluate models, 25% of the data will be set as a test set, while the model will be built with the remainder 75%. The split done here is random, but usually time-based splits tend to reflect more realistic scenarios for recommendation.
Typically, these splits are done in such a way that the test
set contains only users and items which are in the train set,
but such a rule is not necessary and perhaps not even desirable for
cmfrec
, since it can accomodate global/user/item biases and
thus it can make predictions based on them alone.
<- function(X, indices) {
subsample_coo_matrix @i <- X@i[indices]
X@j <- X@j[indices]
X@x <- X@x[indices]
Xreturn(X)
}
<- length(X@x)
n_ratings set.seed(123)
<- sample(n_ratings, floor(0.75 * n_ratings), replace=FALSE)
ix_train <- subsample_coo_matrix(X, ix_train)
X_train <- subsample_coo_matrix(X, -ix_train) X_test
Now fitting the classical matrix factorization model, with global mean centering, user/item biases, L2 regularization which scales with the number of ratings for each user/item, and no side information. This is the model explained in the earlier section: \[ \mathbf{X} \approx \mathbf{A} \mathbf{B}^T + \mu + \mathbf{b}_A + \mathbf{b}_B \]
<- CMF(X_train, k=25, lambda=0.1, scale_lam=TRUE, verbose=FALSE) model.classic
The most typical way of evaluating the quality of these models is by evaluating the error that they have at predicting known entries, which here will be evaluated against the test data that was set apart earlier. The evaluation here will be done in terms of mean squared error (RMSE).
Note that, while widely used in the early literature for
recommender systems, RMSE might not provide a good overview of the
ranking of items (which is what matters for recommendations), and it’s
recommended to also evaluate other metrics such as NDCG@K
,
P@K
, correlations, etc.
<- function(X_test, X_hat, model_name) {
print_rmse <- sqrt(mean( (X_test@x - X_hat@x)^2 ))
rmse cat(sprintf("RMSE for %s is: %.4f\n", model_name, rmse))
}
<- predict(model.classic, X_test)
pred_classic print_rmse(X_test, pred_classic, "classic model")
#> RMSE for classic model is: 0.9236
i.e. it means that the ratings are off by about one star. This is
better than a non-personalized model that would always predict the same
rating for each user, which can also be simulated through
cmfrec
:
<- MostPopular(X_train, lambda=10, scale_lam=FALSE)
model.baseline <- predict(model.baseline, X_test)
pred_baseline print_rmse(X_test, pred_baseline, "non-personalized model")
#> RMSE for non-personalized model is: 0.9460
(Note: it’s not recommended to use scaled/dynamic regularization in a most-popular model, as it will tend to recommend items with only one user giving the maximum rating.)
By default, ALS-based models are broken down to small problems
involving linear systems, which are in turned solved through the Conjugate
Gradient method, but cmfrec
can also use a Cholesky
solver for them, which is slower but tends to result in better-quality
solutions for explicit-feedback.
As well, the default number of iterations is 10, but can be increased for better models at the expense of longer fitting times.
But more importantly, cmfrec
offers the option of adding
“implicit-features” or co-factoring, which will additionally factorize
binarized versions of \(\mathbf{X}\)
(telling whether each entry is missing or not), sharing the same latent
components with the factorization of \(\mathbf{X}\) - that is: \[
\mathbf{X} \approx \mathbf{A} \mathbf{B}^T + \mu + \mathbf{b}_A +
\mathbf{b}_B
\] \[
\mathbf{I}_x \approx \mathbf{A} \mathbf{B}^T_i
\:\:\:\:
\mathbf{I}^T_x \approx \mathbf{B} \mathbf{A}^T_i
\] Where:
<- CMF(X_train, k=25, lambda=0.1, scale_lam=TRUE,
model.improved add_implicit_features=TRUE, w_main=0.75, w_implicit=0.25,
use_cg=FALSE, niter=30, verbose=FALSE)
<- predict(model.improved, X_test)
pred_improved print_rmse(X_test, pred_improved, "improved classic model")
#> RMSE for improved classic model is: 0.9126
Collective matrix factorization extends the classical model by incorporating side information about users/items into the formula, which is done by also factorizing the side information matrices, sharing the same latent components that are used for factorizing the \(\mathbf{X}\) matrix: \[ \mathbf{X} \approx \mathbf{A} \mathbf{B}^T + \mu + \mathbf{b}_A + \mathbf{b}_B \] \[ \mathbf{U} \approx \mathbf{A} \mathbf{C}^T + \mu_U \] \[ \mathbf{I} \approx \mathbf{B} \mathbf{D}^T + \mu_I \] \[ \mathbf{I}_x \approx \mathbf{A} \mathbf{B}^T_i \:\:\:\: \mathbf{I}^T_x \approx \mathbf{B} \mathbf{A}^T_i \] Where:
Informally, the latent factors now need to explain both the interactions data as well as the side information, thereby making them generalize better to unseen data. This library in addition allows controlling aspects such as the weight that each factorization has in the optimization objective, different regularization for each matrix, having factors that are not shared, among others.
Fetching the side information from recommenderlab
:
<- MovieLenseUser
U $id <- NULL
U$zipcode <- NULL
U$age2 <- U$age^2
U### Note that `cmfrec` does not standardize features beyond mean centering
$age <- (U$age - mean(U$age)) / sd(U$age)
U$age2 <- (U$age2 - mean(U$age2)) / sd(U$age2)
U<- model.matrix(~.-1, data=U)
U
<- MovieLenseMeta
I $title <- NULL
I$url <- NULL
I$year <- ifelse(is.na(I$year), median(I$year, na.rm=TRUE), I$year)
I$year2 <- I$year^2
I$year <- (I$year - mean(I$year)) / sd(I$year)
I$year2 <- (I$year2 - mean(I$year2)) / sd(I$year2)
I<- as.coo.matrix(I)
I
cat(dim(U), "\n")
#> 943 24
cat(dim(I), "\n")
#> 1664 21
Now fitting the model:
<- CMF(X_train, U=U, I=I, NA_as_zero_item=TRUE,
model.w.sideinfo k=25, lambda=0.1, scale_lam=TRUE,
niter=30, use_cg=FALSE, include_all_X=FALSE,
w_main=0.75, w_user=0.5, w_item=0.5, w_implicit=0.5,
center_U=FALSE, center_I=FALSE,
verbose=FALSE)
<- predict(model.w.sideinfo, X_test)
pred_side_info print_rmse(X_test, pred_side_info, "model with side info")
#> RMSE for model with side info is: 0.9117
Summary:
library(kableExtra)
<- function(X_test, X_hat) {
calc_rmse return(sqrt(mean( (X_test@x - X_hat@x)^2 )))
}<- data.frame(
results NonPersonalized = calc_rmse(X_test, pred_baseline),
ClassicalModel = calc_rmse(X_test, pred_classic),
ClassicPlusImplicit = calc_rmse(X_test, pred_improved),
CollectiveModel = calc_rmse(X_test, pred_side_info)
)<- as.data.frame(t(results))
results names(results) <- "RMSE"
%>%
results kable() %>%
kable_styling()
| RMSE | |
|---|---|
| NonPersonalized | 0.9460112 |
| ClassicalModel | 0.9236193 |
| ClassicPlusImplicit | 0.9125861 |
| CollectiveModel | 0.9116610 |
Important to keep in mind:
The goal behind building a collaborative filtering model is typically
to be able to make top-N recommended lists for users or to obtain latent
factors for an unseen user given its current data. cmfrec
has many prediction functions for these purposes depending on what
specifically one wants to do, supporting both warm-start and cold-start
recommendations.
### Re-fitting the earlier model to all the data,
### this time *without* scaled regularization
<- CMF(X, k=20, lambda=10, scale_lam=FALSE, verbose=FALSE)
model.classic <- CMF(X, U=U, I=I, k=20, lambda=10, scale_lam=FALSE,
model.w.sideinfo w_main=0.75, w_user=0.125, w_item=0.125,
verbose=FALSE)
When fitting a model, all the necessary fitted matrices are saved inside the object itself, which allows making predictions for existing users based just on the ID. The specific items consumed by each user are however not saved, so in order to avoid recommending already-seen items, these have to be explicitly passed for exclusion.
<- 10
user_to_recommend ### Note: slicing of 'X' is provided by 'MatrixExtra',
### returning a 'sparseVector' object as required by cmfrec
topN(model.classic, user=user_to_recommend, n=10,
exclude=X[user_to_recommend, , drop=TRUE])
#> [1] 316 424 511 311 271 314 405 79 524 190
### A handy function for visualizing recommendations
<- colnames(X)
movie_names <- colSums(as.csc.matrix(X, binary=TRUE))
n_ratings <- colSums(as.csc.matrix(X)) / n_ratings
avg_ratings <- function(rec, txt) {
print_recommended cat(txt, ":\n",
paste(paste(1:length(rec), ". ", sep=""),
movie_names[rec]," - Avg rating:", round(avg_ratings[rec], 2),
", #ratings: ", n_ratings[rec],
collapse="\n", sep=""),
"\n", sep="")
}<- topN(model.w.sideinfo, user=user_to_recommend, n=5,
recommended exclude=X[user_to_recommend, , drop=TRUE])
print_recommended(recommended, "Recommended for user_id=10")
#> Recommended for user_id=10:
#> 1. Schindler's List (1993) - Avg rating:4.47, #ratings: 298
#> 2. To Kill a Mockingbird (1962) - Avg rating:4.29, #ratings: 219
#> 3. Close Shave, A (1995) - Avg rating:4.49, #ratings: 112
#> 4. Boot, Das (1981) - Avg rating:4.2, #ratings: 201
#> 5. Titanic (1997) - Avg rating:4.25, #ratings: 350
The fitted model, as it is, can only provide recommendations for the
specific users and items to which it was fit. Typically, one wants to
produce recommendations for new users as they go, or update the
recommended lists for existing users once they consume more items.
cmfrec
allows obtaining latent factors and top-N
recommended lists for new users without having to refit the whole
model.
This is how it would be if user 10 were to come as a new visitor:
<- topN_new(model.w.sideinfo, n=5,
recommended_new exclude=X[user_to_recommend, , drop=TRUE],
X=X[user_to_recommend, , drop=TRUE],
U=U[user_to_recommend, , drop=TRUE])
print_recommended(recommended_new, "Recommended for user_id=10 as new user")
#> Recommended for user_id=10 as new user:
#> 1. Schindler's List (1993) - Avg rating:4.47, #ratings: 298
#> 2. To Kill a Mockingbird (1962) - Avg rating:4.29, #ratings: 219
#> 3. Close Shave, A (1995) - Avg rating:4.49, #ratings: 112
#> 4. Boot, Das (1981) - Avg rating:4.2, #ratings: 201
#> 5. Titanic (1997) - Avg rating:4.25, #ratings: 350
It is not mandatory to provide all the side information, as the
ratings alone can also be used to generate a recommendation, even if the
model was fit with side information (this would not be the case if
passing NA_as_zero_user=TRUE
):
<- topN_new(model.w.sideinfo, n=5,
recommended_new exclude=X[user_to_recommend, , drop=TRUE],
X=X[user_to_recommend, , drop=TRUE])
print_recommended(recommended_new, "Recommended for user_id=10 as new user (NO sideinfo)")
#> Recommended for user_id=10 as new user (NO sideinfo):
#> 1. Schindler's List (1993) - Avg rating:4.47, #ratings: 298
#> 2. To Kill a Mockingbird (1962) - Avg rating:4.29, #ratings: 219
#> 3. Close Shave, A (1995) - Avg rating:4.49, #ratings: 112
#> 4. Boot, Das (1981) - Avg rating:4.2, #ratings: 201
#> 5. Titanic (1997) - Avg rating:4.25, #ratings: 350
(In this case, the top-5 recommendations did not change, as the side information has little effect in this particular model, but that might not always be the case - that is, the top-N recommended items for a different user might be different if side information is absent.)
Conversely, it is also possible to make a recommendation based on the side information without having any rated movies/items. The quality of these recommendations is however highly dependant on the influence that the attributes have in the model, and in this case, the user attributes have very little associated information and thus little leverage.
Nevertheless, they might still provide an improvement over a completely non-personalized recommendation (see Cold-start recommendations in Collective Matrix Factorization):
<- topN_new(model.w.sideinfo, n=5,
recommended_cold exclude=X[user_to_recommend, , drop=TRUE],
U=U[user_to_recommend, , drop=TRUE])
print_recommended(recommended_cold, "Recommended for user_id=10 as new user (NO ratings)")
#> Recommended for user_id=10 as new user (NO ratings):
#> 1. Schindler's List (1993) - Avg rating:4.47, #ratings: 298
#> 2. Close Shave, A (1995) - Avg rating:4.49, #ratings: 112
#> 3. Wrong Trousers, The (1993) - Avg rating:4.47, #ratings: 118
#> 4. Good Will Hunting (1997) - Avg rating:4.26, #ratings: 198
#> 5. Wallace & Gromit: The Best of Aardman Animation (1996) - Avg rating:4.45, #ratings: 67


|
Home >
Enterprise >
Participants >
Cybereason > Carbanak+FIN7 Configuration
|
Cybereason Configuration
Product Versions
- Cybereason Defense Platform v2020H2
- Cybereason Prevention (NGAV) + Endpoint Detection & Response, Advanced Threat Hunting & Forensics
Product Description
Cybereason offers an innovative and industry leading endpoint protection platform with multi-layered prevention, detection, response, and remediation via a single agent and is managed and accessible all via a single console. Cybereason’s data centric approach combined with behavioral based analysis provides unmatched visibility for defenders to be able to understand the full scope and impact of an attack within their environment. The unparalleled visibility reverses the adversarial advantage while increasing analyst efficiency and effectiveness, reducing security risk, and arming defenders with the power to stop even the most advanced attacks. Cybereason has implemented the ATT&CK framework directly into the Cybereason Defense Platform, making it easy for security teams to identify or search for threats in their environment using ATT&CK classifiers and terminology.
The Cybereason Defense Platform
Cybereason Defense Platform provides a multi-layered prevention approach that prevents known malware, unknown malware, ransomware, and fileless attacks. Cybereason’s anti-ransomware is unique, combining behavioral analysis and deception techniques to confidently prevent the primary goal of any ransomware: encryption.
Since not all threats can be prevented outright, Cybereason uses the same agent to collect raw data from the endpoint to detect and respond to unknown attacks regardless of level of sophistication and tactics. Data is collected and processed through our Correlation Engine, which is purpose-built to correlate data collected across all devices, allowing analysts to instantly identify all impacted devices in an attack within a single screen. This data is enriched with threat intel that includes IoC’s and flags certain events as evidence or suspicions providing an automatically generated root cause analysis. The final result is a visualized attack time-line with a structured, enriched, in-memory graph database that can be rapidly queried for malicious activity both automatically and manually.
Primary Features
- Single agent with four detection engines to minimize configuration and maximize detection and prevention
- Single integrated workflow to manage, detect, analyze and respond to threats
- Fully integrated endpoint protection with multi-layered prevention (NGAV / AV) as well as detection and response incorporating; machine learning, behavior analysis, indicators of compromise (IOCs) and advanced threat hunting
- Visualized attack timeline with summarized or detailed information for all impacted devices with single click remediation.
- Intuitive search and investigation screens to rapidly find and illuminate suspicious activity and threats with built in MITRE ATT&CK information
Cybereason Services
Note: Services were not evaluated as part of the 2020 Carbanak+FIN7 evaluation due to the scope of the evaluation.
Cybereason offers a full suite of services to augment customers' security teams with any combination of detection, investigation, breach containment, and response needs.
-
Cybereason MDR:
- 24/7 monitoring, incident triage, and recommendations
- Ongoing, proactive hunting to identify malicious activity
- Advanced analysis and remote remediation delivered through the Cybereason platform
- Incident Response: immediate and on demand incident response, including scoping, investigation, consultation, and containment of incidents
- Assessment Services: customized review of your environment to help identify and address misconfigurations, needed critical patches, and security policy enforcement
Product Configuration
- Collection Features: All Enabled
-
Configuration Used During Protection Evaluation
- Signatures: On - Prevent
- Machine learning: On - Prevent
- Behavioral Document Protection: On - Prevent
- Fileless prevention (Powershell, .NET): On - Prevent
- Exploit Protection: On - Cautious
- Anti-ransomware: On - Prevent
- Endpoint Controls: Off
-
Configuration Used During Detection Evaluation
- Signatures: On - Detect
- Machine Learning: On - Detect
- Behavioral Document Protection: On - Detect
- Fileless Detection (Powershell, .NET): On - Detect
- Exploit Protection: On - Cautious
- Anti-Ransomware: On - Detect
- Behavioral Allow-list: None


SONG
ADVENTURES
HOME
TOURS
HALF DAY
FULL DAY
2 DAY 1 NIGHT
SERVICES
RESPONSIBLE TRAVEL
CONTACT US
Previous
Next
HALF DAY TOURS
VIEW ALL
USD 40/PAX
River life in Hoi An
USD 30/PAX
COCO PALM FOREST TO OLD TOWN
USD 20/PAX
EASY PADDLE
USD 20/PAX
HALF DAY CYCLE & KAYAK
USD 20/PAX
FULL DAY PADDLE – CAM KIM ISLAND
USD 20/PAX
FULL DAY CYCLE & KAYAK
USD 20/PAX
SUNRISE PADDLE
FULL DAY TOURS
VIEW ALL
USD 40/PAX
River life in Hoi An
USD 30/PAX
COCO PALM FOREST TO OLD TOWN
USD 20/PAX
EASY PADDLE
USD 20/PAX
HALF DAY CYCLE & KAYAK
USD 20/PAX
FULL DAY PADDLE – CAM KIM ISLAND
USD 20/PAX
FULL DAY CYCLE & KAYAK
USD 20/PAX
SUNRISE PADDLE
2 DAY TOURS
VIEW ALL
USD 40/PAX
River life in Hoi An
USD 30/PAX
COCO PALM FOREST TO OLD TOWN
USD 20/PAX
EASY PADDLE
USD 20/PAX
HALF DAY CYCLE & KAYAK
USD 20/PAX
FULL DAY PADDLE – CAM KIM ISLAND
USD 20/PAX
FULL DAY CYCLE & KAYAK
USD 20/PAX
SUNRISE PADDLE


Assembly Bill No.1755 The Open and Transparent Water Data Act, integrate existing water and ecological data information from multiple datasets
Search


Review: Python for Data Analysis
September 2, 2013
Python for Data Analysis by Wes McKinney
My rating: 3 of 5 stars
I've been using Python for quantitaive economics and geography for the last five years and I wish this book had been written back then. It is clear, easy to read, full of (cool) examples and incredibly useful, regardless of whether you read it from first to last page or have it around to check while hacking. If you are getting started on data crunching with Python, you should not miss it. If you are not new to the party, this will still be a good resource to get your head around a bit more advanced pandas, and the chapter on advanced Numpy is very informative too.
However, if you are over most of the learning curve, the book has a different feel. Although the title might suggest different, "Python for Data Analysis" is mostly "Pandas for Data Analysis". Fair enough, if you've written the library itself, it seems appropriate to focus on it, but I think it should be stressed from the beginning. Other crucial elements of the Python data stack (matplotlib, statsmodels, sklearn...) are sometimes touched upon, but only briefly, and only to the extent you can relate them to pandas. I would have enjoyed it much more if those were covered a bit more in detail. Still, very good book.


Cong, JDS disqualified in people's court: BJP
by PTIExpressing joy over BJP's stellar performance in the Assembly by-elections in Karnataka, the party's state chief Nalin Kumar Kateel on Monday said Congress and JD(S) have been "disqualified" in the people's court.
"Siddaramaiah (Congress) and H D Kumaraswamy (JDS) had created a narrative of 'disqualified MLAs' to discredit our candidates, but today the Congress and the JD(S) have been disqualified in the people's court and have given a verdict of 'Qualified' to our candidates," Kateel told reporters here.
The BJP had fielded 13 of the 15 turncoats, who were previously in Congress and the JD(S), but were disqualified by then-Speaker K R Ramesh Kumar for indulging in anti-party activities.
Kateel was happy that the party made its presence felt for the first time in Mandya district. "There were some regions where we never had our presence such as KR Pet and Chikkaballapura.
Mandya had been the JD(S) citadel but today the BJP has won (in KR Pet in Mandya district)," he added.
The BJP state chief said he was confident that the Yediyurappa government would successfully complete its three-and-half year term and lead the state towards progress.


Mr. Roboger's Neighborhood
Name
Start Now
Enter a number and see it translated to Mr. Roboger's native language
Translate!
Here is your sentence in Mr. Roboger's-ese:
" "


What I'm doing, Now
Being home the last few months, I have dabbled into trying many new skills and projects but the best part has definitely been getting to spend all this time with my dog. He has been by my side, whatever I may be doing and I am thankful for this extra time I got to be with him, and have been making the most of it. Spending my days with him and the rest of my family during these unprecedented has been a major highlight.


1. Releases
Users can download a compiled version of crunchy-proxy from the github repo site in the Releases tab.
A Docker image is also found in the DockerHub at https://hub.docker.com/r/crunchydata/crunchy-proxy/
2. Command Usage
The command syntax of the proxy is as follows:
crunchyproxy -config=config.json
The only command option is the -config flag. This option specifies the proxy configuration to use. A sample configuration file is located at https://github.com/crunchydata/crunchy-proxy/config.json
The proxy uses glog for logging, to see the log output, run the proxy with this command:
crunchyproxy -config=config.json -logtostderr=true
Increase the logging level this way:
crunchyproxy -config=config.json -logtostderr=true -v 2
Normal execution does not produce any logging:
crunchyproxy -config=config.json
3. Configuration
The proxy configuration is controlled by a single configuration file which is written in JSON format.
The JSON file is read at startup and is currently not reloaded after execution starts.
The JSON parameters include:
| Parameter | Purpose | Example |
|---|---|---|
| Replicas.HostPort | the replica backend hostname:port | "<IP_ADDRESS>:12002" |
| Name | a name you want to give the configuration | "myconfig" |
| HostPort | the proxy host:port to listen to | "localhost:5432" |
| AdminHostPort | the proxy admin host:port | "localhost:10000" |
| ReadAnnotation | the string to use for a read annotation | "read" is the default if not specified |
| StartAnnotation | the string to use for a start annotation | "start" is the default if not specified |
| FinishAnnotation | the string to use for a finish annotation | "finish" is the default if not specified |
| heathcheck.delay | seconds to delay between checks | 60 |
| heathcheck.query | SQL to use for check | "select now()" |
| pool.enabled | enable connection pooling | true |
| pool.capacity | size of pools | 2 |
| credentials.username | postgres username for pool connections | "postgres" |
| credentials.password | postgres password for pool connections | "password" |
| credentials.database | postgres database for pool connections | "postgres" |
| adapters | not implemented yet | "logging" |
| Master.HostPort | the master backend hostname:port | "<IP_ADDRESS>:12000" |
4. Testing
A test script is provided that will run a PostgreSQL cluster, with a single master and replica. Run the database script as follows:
export CCP_IMAGE_TAG=centos7-9.5-1.2.6 bin/run-cluster.sh
This will start two docker containers that execute the PostgreSQL cluster.
The Postgres 9.5 master container listens on localhost:12000 and a replica container listens on localhost:12002
The PostgreSQL user id is postgres, the password is password, and you would connect to these container database like this using psql:
psql -h <IP_ADDRESS> -p 12000 -U postgres postgres psql -h <IP_ADDRESS> -p 12002 -U postgres postgres
Stop the containers like this:
docker stop master docker stop replica
Start the containers like this:
docker start master docker start replica
4.1. Test Execution
Start the crunchy-proxy like this:
go run crunchyproxy.go -config=config.json
This will do the following:
-
start an admin service on localhost:10000
-
listen on localhost:5432 for client requests
-
read config.json and set up a runtime configuration
-
route any client messages to the PostgreSQL containers
4.2. Benchmark
For some simple benchmark results, run some tests using the crunchy-proxy:
cd ./testclient ./run-test-proxy.sh
You can also run the psql command against the proxy as a test client.
4.3. Overhead
Overhead of the proxy was measured and shows the following for the typical case of handling a SQL statement:
| Test | Proxy | No-Proxy | Overhead |
|---|---|---|---|
| Single SQL Statement | 2.240026ms | 2.085424ms | +0.154602ms |
5. Proxy Administration
There is an administration port created by the proxy that you can interact with to gain status from the proxy.
5.1. Events
Events like a healthcheck status are published to any subscribers using a streaming REST API, you can access the admin events as follows:
curl -i http://localhost:10000/api/stream
As the proxy publishes events, your REST client (e.g. curl) will receive the events.
5.2. Current Configuration
You can get the current configuration of the proxy as follows:
curl http://localhost:10000/api/config
5.3. Statistics
You can get the current statistics of the proxy as follows:
curl http://localhost:10000/api/stats
6. Compiling the Source
If you are a developer and want to build the proxy from source code, follow these steps…
Assuming an installation directory of $HOME/gdev, follow the following steps to build crunchy-proxy from source:
mkdir -p $HOME/gdev/src $HOME/gdev/pkg $HOME/gdev/bin export GOPATH=$HOME/gdev;export GOBIN=$GOPATH/bin;export PATH=$PATH:$GOBIN export BUILDBASE=$GOPATH/github.com/crunchydata/crunchy-proxy
First, install a golang compiler. As an example, on centos7:
sudo yum -y install golang
Next, pull the source code as follows:
cd gdev/src go get github.com/tools/godep mkdir github.com/crunchydata cd github.com/crunchydata git clone git@github.com:CrunchyData/crunchy-proxy.git
Next, build the binary as follows:
cd crunchy-proxy godep restore make
7. Design
The example shows a message traveling down this path:
pg client→proxy→pg server→proxy→pg client
7.1. Packages
The proxy code is implemented in the following golang packages:
| Package Name | Purpose |
|---|---|
| adapter | adapters can be applied to in-bound and out-bound message flows to do add capabilities like logging or auditing |
| admin | the administration interface, a REST API |
| config | the configuration file format |
| proxy | the main proxy processing |
| testclient | a test client that uses libpq, useful for testing |
| tests | standalone unit tests |
7.2. Makefile Targets
The Makefile has the following targets defined:
| Makefile Target | Purpose |
|---|---|
| gendeps | calls godep to generate dependencies for golang compilation |
| docsbuild | calls asciidoctor to generate PDF and HTML versions of the documentation |
| clean | removes the proxy binaries |
| dockerimage | builds the docker image for the proxy |
| push | pushes the docker image to dockerhub |
| run | runs the proxy in foreground using the default configuration file |
| test | executes the standalone unit tests |
7.3. Wire Protocol
crunchy-proxy operates at the PostgreSQL wire protocol (network) layer to understand PostgreSQL client authentication requests and SQL statements passed by a client to a PostgreSQL backend.
The proxy does very little processing of the messages sent between a client and an actual backend, mostly examining the SQL statements for a proxy-specific annotation. The annotation is used to route the message to the backend.
Its important to note that the proxy does not implement all features of libpq or provide an application interface similar to a JDBC driver or other language driver.
7.4. Connection Pooling
crunchy proxy provisions a connection pool for each backend (master and replica(s)) that is defined in the proxy configuration file. The connection pool is a fixed size currently and established before the proxy begins to accept connections from clients.
The connections in the pool are determined by the pool settings found within the configuration parameters credentials and pool.
Currently crunchy proxy only supports basic PostgreSQL password authentication using username and password.
As client requests come into the proxy, the proxy will choose to which backend to route the SQL statement and then pick a free connection from the backend’s connection pool.
For each connection pool there is a golang channel defined to manage which connections are available for use when processing a SQL statement. After the SQL statement is processed, the connection is returned to the pool. You can think of the pool’s channel as a queue of available connections.
7.5. Client Authentication
Each client must authenticate against the master backend before the proxy will process future client requests. crunchy proxy does not include an authentication store itself, but instead relies on the master backend to perform authentication.
Once a client does authenticate, the proxy will terminate the client’s connection to the master and subsequently begin using the connections from the connection pools.
7.6. Annotations
SQL statements that start with a SQL comment of a particular format will be used to determine the routing of a SQL statement either to a master or a replica.
To simplify the proxy parsing, we require the annotation begin at the first byte of the SQL statement as follows:
/* read */ select from foo.....
If no annocation is found in a SQL statement, it is assumed the statement is a write.
In certain circumstances, it may be desriable to route all the SQL statements within a transaction to the same backend.
In order to support this case, it is possible include a start annotation in the first SQL statement and a finish annotation in the last SQL statement as follows:
/* start */ begin; select .....; /* finish */commit; /* start,read */ begin; select .....; /* finish */commit;
7.7. Health Checking
The crunchy-proxy status health check is currently a simple implementation - essentially determining only whether the backend can process a SQL statement.
The health check is performed every few second on each backend by a separate goroutine that runs until the proxy exits.
The backend status is checked by the active connection processing in order to determine which backends are available to process a SQL statement.
As the status of a backend changes, the global configuration is updated.
Health status is captured and placed into an event channel. The event channel is used to publish events to any number of subscribers to the REST API.
8. Legal Notices
Copyright © 2017 Crunchy Data Solutions, Inc.
CRUNCHY DATA SOLUTIONS, INC.
Crunchy, Crunchy Data Solutions, Inc. and the Crunchy Hippo Logo are trademarks of Crunchy Data Solutions, Inc.


KnowledgeTreeLogo.jpg
R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==
image/*
| Date / Time |
April 7, 2000 14:30 |
April 7, 2000 15:30 |
| Height |
177 cm (69.7 in) |
| Weight |
194.0 lbs (88.0 kg) |
| BMI |
28.1 kg/m2 |
| BSA |
2.05 m2 |
| Temperature |
36.9 C (98.5 F) |
36.9 C (98.5 F) |
| Pulse |
86 / minute |
84 / minute |
| Rhythm |
Regular |
Regular |
| Respirations |
16 / minute, unlabored |
14 / minute |
| Systolic |
132 mmHg |
135 mmHg |
| Diastolic |
86 mmHg |
88 mmHg |
| Position / Cuff |
Left Arm |
Left Arm |
]]>
Testing Output with mediatype
1: xsd:base64Binary with mediatype element:
2: xsd:anyURI with mediatype element:
3: xsd:anyURI with mediatype element:
4: xsd:anyURI with mediatype element and mediatype attribute:
5: xsd:anyURI image with mediatype attribute:
6: HTML/XHTML Content rendered:
Select mediatype:
image
image/*
no image
html/xhtml content
application/xhtml+xml


[gecode-users] debug unsatisfiable conditions
negate273 at gmail.com
negate273 at gmail.com
Wed May 7 08:17:40 CEST 2014
Hi, An unsatisfiable condition is reported by gecode, if the domain of a variable is empty after propagating constraints. What are some of the ways to debug such unsatisfiable fails in the model ? Is there an option, by which gecode can output (print) the variable whose domain is empty and which constraint caused this fail ? I’m specifying the model in minizinc and interface with gecode through fzn-gecode in tools/flatzinc/.
Thanks, ~az
More information about the users
mailing list


Sign up
E-mail
Your birthday (dd/mm/yyyy)
Address
Zip code
City
Country
Select any
Password
Confirm password


The Range slider lets users select from a range of values by moving the slider knob.
Tick marks are displayed based on the step value. If the amount of ticks exceeds
10
, the step property will automatically be adjusted.
Provided values that doesn't match any tick points, will automatically be changed to the nearest tick point.


Top Health CentersHealth Centers provide helpful information on over 1000 of the most common diseases and conditions.
Articles and tools are brought to you by Healthline.
Please note: This content is for informational purposes and should not be considered for medical advice, diagnosis, or treatment purposes.


This is the root context, there is nothing to see here, except for the cute badger.
Redirecting
you to
/web
where all the magic is in 5 seconds.
If, for some reason, that doesn't work click
here
.


{% load static %}
Enjoy your kid-friendly vacation in Asheville! This itenary is designed to show you places that you can drive to. Happy driving!


CrypTool contains an extensive collection of cryptographic algorithms and protocols.
Most of the modern cryptographic basic algorithms used are taken from:
The currently used version of the included libraries can be seen within the About CrypTool dialog (see Menu Help).
Remark (May 2010):
So far, the open source project delivering the accepted multi precision integer library GMP (http://gmplib.org) did not supply a Windows version. Until CrypTool 1.4.21 we used a port of the GMP library by Brian Gladman (http://gladman.plushost.co.uk/oldsite/computing/gmp4win.php).
The MPIR project (http://www.mpir.org) now consistently creates multi precision integer libraries for Windows which are compatible with GMP and which can be compiled with Microsoft development environments.
MPIR is based on GMP 4.2.1 (which was licensed under LPGL v2.1+).
http://www.exploringbinary.com/how-to-install-and-run-gmp-on-windows-using-mpir/
http://gmplib.org/#PROJECTS
(Discussion about the different open source licence of MPIR from a GMP standpoint)


Publishing Components¶
If you’d like to publish your components to be used by others, you can release your own library of components in a few different ways.
Add to Existing Library¶
Components can potentially be added to any existing library.
You’re welcome to create a pull request with your model for any of the libraries in the cqparts github repository.
Any change pushed to these libraries will prompt a version increment and your additions will be added to the changelog with you as the author.
Please raise an issue if you’re considering doing this, and we can discuss the location and design of the components you wish to add.
Create a New Library¶
You may also start your own library.
When doing so it’s highly recommended that you copy the
cqparts_template library
and follow the instructions in the README.md
to make the relevant changes.
Publishing a New Library¶
When publishing you can choose to add it to the current list of cqparts
libraries hosted in the
cqparts github repository.
Or you can publish the library from your own repository, independent of cqparts
.


Development Log
- Bandersnatch v1.3.3: Predictions Graph
- Bandersnatch v1.2.10: Download Extras
- Bandersnatch v1.2.5: Download Model
- Bandersnatch v1.1.5: Predict Data
- Bandersnatch v1.1.4: Train Data
- Bandersnatch v1.1.3: Graph Data
- Bandersnatch v1.1.2: Table Data
- Bandersnatch v1.1.1: Create Data
- Bandersnatch v1.0.0: Initial Structure


Save The Date
Together with our family, we invite you to celebrate our marriage with a night of love, friendship, and laughter
Sunday, The 09 Th October 2022
AT 08.00 AM
Gedung Puri Begawan
Jl. Raya Pajajaran No.5-7, Baranangsiang, Kec. Bogor Tim., Kota Bogor, Jawa Barat 16143


--- layout: page description: "Full stack web developer" metaDescription: "Personal website of software developer Alex O'Callaghan focusing on web development" activePage: "index" splashHeader: true ---
I am Alex O'Callaghan and this is my personal website where I share blog posts and recent projects I have completed.
I am a software developer focusing on full stack web development. I completed BSc Computer Science at University of Southampton in 2017.


#include <GrRenderer.h>
Public Member Functions | |
| GrRenderer (unsigned int screenWidth, unsigned int screenHeight, EGRQUALITY initQuality) | |
| class GrRenderer | |
| ~GrRenderer () | |
| void | SetQuality (EGRQUALITY quality) |
| quality settings. | |
| EGRQUALITY | GetQuality () const |
| void | SetWireframeEnable (bool wireframe) |
| debug functionality. | |
| bool | GetWireframeEnable () const |
| void | SetColorTextureEnable (bool enable) |
| bool | GetColorTextureEnable () const |
| void | Update (unsigned int gameTimeDelta, unsigned int sysTimeDelta) |
| updates the renderer's time. | |
| void | BeginRender () |
| renders lighting data. | |
| void | RenderAmbience (const GrRenderList &objects, const GrCamera &camera, const GrColor &ambientColor) |
| void | RenderLight (const GrRenderList &lightReceivers, const GrRenderList &shadowCasters, const GrCamera &camera, const GrLight &light) |
| void | EndRender (const GrCamera &camera) |
| void | PreContextReset () |
| void | PostContextReset (unsigned int screenWidth, unsigned int screenHeight) |
Definition at line 34 of file GrRenderer.h.
| GrRenderer::GrRenderer | ( | unsigned int | screenWidth, | |
| unsigned int | screenHeight, | |||
| EGRQUALITY | initQuality | |||
| ) |
class GrRenderer
ctor & dtor
get the normalization texture cube.
Definition at line 71 of file GrRenderer.cpp.
| GrRenderer::~GrRenderer | ( | ) |
Definition at line 91 of file GrRenderer.cpp.
| void GrRenderer::BeginRender | ( | ) |
| void GrRenderer::EndRender | ( | const GrCamera & | camera | ) |
get the number of objects that require a post frame step.
setup all render states.
get the current viewport.
calculate useful information.
bind textures.
process all objects in the postRender array.
clear the needNextPass flag.
get the current color/depth. This paradigm allows the current render to be available to each pass.
go through all objects.
get the current material span.
for each post-process pass in the current material, render all objects in our span.
check to see if we need another pass.
get the current pass for rendering and apply texture stages.
apply the current pass's post-render shader.
bind the shader.
apply texture stages and vertex params.
apply relevant pass texture stages.
render the objects.
get the current renderable.
setup object specific gentextures.
now render the current object with the post-render shader.
calculate local space parameters.
apply local space parameters.
render the object.
next pass.
clear the post render list if there is anything in it.
reset our streaming index buffer.
Definition at line 142 of file GrRenderer.cpp.
| bool GrRenderer::GetColorTextureEnable | ( | ) | const [inline] |
Definition at line 48 of file GrRenderer.h.
| EGRQUALITY GrRenderer::GetQuality | ( | ) | const [inline] |
Definition at line 42 of file GrRenderer.h.
| bool GrRenderer::GetWireframeEnable | ( | ) | const [inline] |
Definition at line 46 of file GrRenderer.h.
| void GrRenderer::PostContextReset | ( | unsigned int | screenWidth, | |
| unsigned int | screenHeight | |||
| ) |
Definition at line 286 of file GrRenderer.cpp.
| void GrRenderer::PreContextReset | ( | ) |
Definition at line 279 of file GrRenderer.cpp.
| void GrRenderer::RenderAmbience | ( | const GrRenderList & | objects, | |
| const GrCamera & | camera, | |||
| const GrColor & | ambientColor | |||
| ) |
Definition at line 118 of file GrRenderer.cpp.
| void GrRenderer::RenderLight | ( | const GrRenderList & | lightReceivers, | |
| const GrRenderList & | shadowCasters, | |||
| const GrCamera & | camera, | |||
| const GrLight & | light | |||
| ) |
make sure all is well with GL.
is there anything to do?
Definition at line 127 of file GrRenderer.cpp.
| void GrRenderer::SetColorTextureEnable | ( | bool | enable | ) | [inline] |
Definition at line 47 of file GrRenderer.h.
| void GrRenderer::SetQuality | ( | EGRQUALITY | quality | ) | [inline] |
| void GrRenderer::SetWireframeEnable | ( | bool | wireframe | ) | [inline] |
| void GrRenderer::Update | ( | unsigned int | gameTimeDelta, | |
| unsigned int | sysTimeDelta | |||
| ) |


Oct. 20-22, 2017 @ Bull Street Labs
An Open Savannah event with support from SEDA to mark Code for America's annual National Day of Civic Hacking


Ethics & Expectations
If you are in a class I am teaching or working with me, here is a description of the standards by which I try to work (over and above those required by my employer, host institutions and professional bodies to which I belong). While I understand that different cultures have different standards on issues such as plagiarism and authorship, I have outlined a non-exhaustive acceptable set of practices below.
If you want to work with me, please email this page back to me with a statement that you have read it and agree to try to stick to the guidelines.
Table of Contents
- Plagiarism and collusion
- Authorship
- Acknowledgements and funding bodies
- References, citations and ‘personal communications’
- IRB/Ethics approval
- Double publishing
- Copyright
- Conflicts of interest
- Patents
- Source code and open source
- Presentations, conferences and other ‘publications’
- Sharing results before publication
- Working expectations
- Attendance
- Correspondence
- Recommendations
- Disclaimer
An interesting and readable article on these issues, can be found in the New Yorker. You can also find a guide to Oxford’s Plagiarism Policy and Disciplinary Procedures here. Note the distinction between unintentional and deliberate plagiarism. While the former is less egregious, it is still unacceptable, and should be remedied immediately (in less than a week) on discovery. This doesn’t avoid disciplinary action, but it may lessen the magnitude of the repercussions.
Plagiarism and collusion
Durham University has a good definition of plagiarism and collusion:
“Plagiarism: unacknowledged quotations or close paraphrasing of other people’s writing, amounting to the presentation of [another] person’s thoughts or writings as one’s own. This includes material which is available on the world-wide web and in any other electronic form”.
This also includes algorithms and computer code, even if you are translating them into another language. Of course, some algorithms are so standard (such as the FFT) that they do not require citation, although the specific implementation does require credit. From my point of view, this is just good scientific practice, since not all FFTs are the same. It’s important that the algorithm has been benchmarked and the specific version is noted in case bugs are found later which invalidate or weaken your conclusions.
Durham University’s definition of collusion is as follows:
"Collusion: working with one or more other students to produce work which is then presented as one’s own in a situation in which this is inappropriate or not permitted and/or without acknowledging the collaboration".
Neither is acceptable. Even if you are working in teams, you must describe who did what - see ’authorship’ below.
Authorship
Many journals do not specify what constitutes authorship on a scientific article. I think the "Authors’ contributions" section of Biomedical Engineering Online provides an excellent description:
"An ’author’ is generally considered to be someone who has made substantive intellectual contributions to a published study. To qualify as an author one should 1) have made substantial contributions to conception and design, or acquisition of data, or analysis and interpretation of data; 2) have been involved in drafting the manuscript or revising it critically for important intellectual content; and 3) have given final approval of the version to be published. Each author should have participated sufficiently in the work to take public responsibility for appropriate portions of the content. Acquisition of funding, collection of data, or general supervision of the research group, alone, does not justify authorship.
All contributors who do not meet the criteria for authorship should be listed in an acknowledgements section. Examples of those who might be acknowledged include a person who provided purely technical help, writing assistance, or a department chair who provided only general support.
List the source(s) of funding for the study, for each author, and for the manuscript preparation in the acknowledgements section. Authors must describe the role of the funding body, if any, in study design; in the collection, analysis, and interpretation of data; in the writing of the manuscript; and in the decision to submit the manuscript for publication."
Different fields consider the subject of authorship in different manners though. Clinical publications often carry authors who ’just’ collected the data to provide sufficient credit for the enormous effort this involves.
If you work in my research group you will be expected to co-author with other researchers and academic or clinical staff. Unless the article is in a completely unrelated discipline, you will be expected to pass all potential publications to me before presenting in public, placing on any website, submitting to a journal/conference/workshop etc, or presenting/publishing in any public way. This is to protect the professional reputations of all involved. If you wish to claim sole authorship of a work (such as an article or patent), this will be considered by myself in the first instance, and then if I disagree, by a departmental committee.
Authorship order is often contentious. Generally the first author has to contribute the majority of the intellectual input, work on the project, and work in the manuscript and the senior (last) author is the person who ran the project, designed a lot of the data collection and analysis. The rest of the authors tend to get listed 2nd to N-1th in order of contributions, although it’s not worth haggling about these positions. This formula is not always true though. Although it’s a good idea to set out authorship near the start of a project, this is not always done or possible. The senior author/PI has the final word in assigning authorship, although my general policy is to appoint a first author, and ask them to draft author order based on their own perceptions of contributions. It should be noted, however, the primary author must continue to take the lead on research and publication throughout, even throughout submission, review and final reporting. Faliure to do so will mean first authorship is assigned to another author, who is willing to step up, except in rare cases (such as serious illness during the later stages - e.g. submission and review).
One caveat. If you do not answer emails in a reasonable period of time (or leave a forwarding email), I may choose to publish some of your work without your agreement. This is to ensure that our research progresses despite your omission.
Timing is everything
Once you’ve created your shortlist of authors, contact your supervisor before the other authors, or if you are the PI on the study, the other grant PI(s) and decide if you agree on the list. Resolve these differences before involving all the authors. Err on the generous side initially. Push disputes up the line, not sidewards to those uninvolved in the process. This all needs to happen at least three weeks in advance of any deadline. Any less is rude and doesn’t give time for those on holiday to respond or check for the inevitable errors. Check your contracts too - some research agreements require you to provide a draft copy of the intended publication to the sponsor (particularly if the research is partly or fully industry-sponsored) so that it can be reviewed for patentability, trade secrets etc. In these cases you need to start this process at least three weeks *plus* that review period in advance of any deadline. If you work for me and don’t do this, then I’ll refuse to let you submit. You do need your PI’s permission to submit anything - their name is on this too (or should be), so they have a right to a reasonable review time. If you have more than one supervisor, go to the one who you consider would be the senior author, but keep the other one in the loop, even if they are not an author.
Acknowledgements and funding bodies
The following is from Biomedical Engineering Online’s instructions for authors:
Anyone who contributed towards the study by making substantial contributions to conception, design, acquisition of data, or analysis and interpretation of data, or who was involved in drafting the manuscript or revising it critically for important intellectual content, but who does not meet the criteria for authorship should be named in an acknowledgements section. Please also include their source(s) of funding. Please also acknowledge anyone who contributed materials essential for the study. The role of a medical writer must be included in the acknowledgements section, including their source(s) of funding. Authors should obtain permission to acknowledge from all those mentioned in the Acknowledgements.
References, citations and ‘personal communications’
It is important that all (key) relevant materials are cited in your publication. This includes anyone who’s work you have used, and any work you have considered but rejected. When citing the work you should be careful to indicate why you have used or rejected the material. Note that if the source you cite is not primary, you need to cite the primary source as well (or instead). Note, you cannot cite a paper to justify or explain a technique which does little more than cite another paper to justify or explain a technique. It is important that the format of the references remains consistent. Although some journals require the Harvard style, I prefer Vancouver. The following is from Biomedical Engineering Online’s instructions for authors (and is the Vancouver style):
“All references must be numbered consecutively, in square brackets, in the order in which they are cited in the text, followed by any in tables or legends. Reference citations should not appear in titles or headings. Each reference must have an individual reference number. Avoid excessive referencing.
Only articles and abstracts that have been published or are in press, or are available through public e-print/preprint servers, may be cited; unpublished abstracts, unpublished data and personal communications should not be included in the reference list, but may be included in the text.
Obtaining permission to quote personal communications and unpublished data from the cited author(s) is the responsibility of the author. Journal abbreviations follow Index Medicus/MEDLINE. Citations in the reference list should contain all named authors, regardless of how many there are.
Web links and URLs should be included in the reference list.” They should be provided in full, including both the title of the site and the URL, an author (if known) and the date accessed (since the web is ephemeral). Note that a thesis can be considered a peer-reviewed publication to cite, but it is of little use if the thesis is not readily available. If a paper exists, it is best to cite that instead (or as well), or if the thesis is publicly available, then a URL can be provided.
IRB/Ethics approval
If your work involved living subjects other than yourself, you (or whoever collected the data) must have obtained ethical approval for the study. Again, BMEO’s policy provides an excellent guide which I paraphrase here:
Any experimental research that is reported in the manuscript must have been performed with the approval of an appropriate ethics committee. Research carried out on humans must be in compliance with the Helsinki Declaration, and any experimental research on animals must follow internationally recognized guidelines. A statement to this effect is generally required in the Methods section of the manuscript (particularly in medical journals), including the name of the body which gave approval, with a reference number where appropriate. Informed consent must also be documented. Manuscripts may be rejected if the editorial office considers that the research has not been carried out within an ethical framework, e.g. if the severity of the experimental procedure is not justified by the value of the knowledge gained.
The NHS provides a quick lookup sheet here. There appear to be some circumstances in which ethics approval is not required, but you need to check the current / local rules and note that IRB/ethics approval requirements change from time to time.
Double publishing
Any manuscripts submitted to a journal must not already have been published in another journal or be under consideration by any other journal, although it may have been deposited on a preprint server. Manuscripts must not have already been published in any journal or other citable form, with the exception that the journal is willing to consider peer-reviewing manuscripts that are translations of articles originally published in another language. In this case, the consent of the journal in which the article was originally published must be obtained and the fact that the article has already been published must be made clear on submission and stated in the abstract. Manuscripts that are derived from papers presented at conferences can be submitted unless they have been published as part of the conference proceedings in a peer reviewed journal. Authors are required to ensure that no material submitted as part of a manuscript infringes existing copyrights, or the rights of a third party.
You can take concepts from previous articles and develop them, or write expanded versions of conference articles in some journals. It varies from journal to journal and field to field. Medical journals, although much more relaxed on authorship, generally don’t allow you to publish any concept (in an expanded form or otherwise) that has previously been published or presented at a conference.
Copyright
See Cal Tech’s resource and this article for definitions and a discussion on how much you can borrow before you are infringing on copyright. For example, you can photocopy or print a certain percentage of many copyrighted journals or books for personal or teaching use.
Some journals require you sign over your copyright to them. I would discourage this practice. See this webcast of Hal Abelson from MIT for a good justification on why we shouldn’t trade our IP for relatively low up-front publishing costs. Other journals, such as BioMedical Engineering OnLine allow authors to retain copyright to their work for a slightly higher up-front publishing fee. Access then is free, and you are more likely to be cited. (Three times at the last count.)
More on Open Access Publishing can be found here.
Conflicts of interest
The university of Oxford states: "A conflict of interest arises where the commitments and obligations owed by an individual member of staff or student to the University or to other bodies, for example a funding body, are likely to be compromised, or may appear to be compromised, by:
- that person’s personal gain, or gain to immediate family (or a person with whom the person has a close personal relationship), whether financial or otherwise; or
- the commitments and obligations that person owes to another person or body.
There can be situations in which the appearance of conflict of interest is present even when no conflict actually exists. Thus it is important for all staff and students when evaluating a potential conflict of interest to consider how it might be perceived by others. The duty to declare a possible conflict applies to the perception of the situation rather than the actual existence of a conflict. However, the duty is not infringed if the situation cannot reasonably be regarded as likely to give rise to a conflict of interest. Conflicts of interest may be financial or non-financial or both."
Further information about both types of conflict and Oxford University’s conflict of interest policy can be found here.
Basically, if you know someone involved in a project that you could influence or could influence you, or if a relative or friend is financially connected with your research or publication, you need to declare this. It doesn’t invalidate the study but not declaring this, may cast significant suspicion on the research at a later date. Not declaring interests may even lead to your employment or course of study being terminated, amongst other repercussions.
Patents
I’m not against patents. They are designed as a reward for publicly disclosing an invention from which everyone can benefit (particularly when the patent period ends). The incentive for this public disclosure is a limited period of protection from competition. Patents also provide incentives for investors to back research and companies that translate the research into a practical product. As far as I am aware, nothing stops you from developing research using patented material, in the same way you can use any published material - you just can’t make money from it, or let others use it, unless the patents are licensed.
However, patents can limit from where you can receive funding (because of conflicts of interest). Patenting an idea may also disincentivize others to work in this area, diminishing the impact of your research. It’s also an expensive and time-consuming process unless someone else is willing to do all the leg work for you (which is unlikely).
I am against bad patents, or arbitrary patenting of concepts on which the inventor hasn’t spent much time or demonstrated the system works well on more than a few examples.
If you want to patent something you are working on with me, please come and see me to discuss this as early as possible. If you’ve already published it, you can probably still patent it (in the US only up to 12 months from the initial public disclosure for as little as an intial cost of $100). Costs mount over time as you have to file a full patent and probably use lawyers, and then a few years later start paying maintenance costs.
Source code and open source
Please DO NOT post any code you write that is related to research in our department (or elsewhere) in a public repo. Use a private github repo in the lab (not personal) github group.
There are many reasons for not posting code at an early stage:
- You agreed to the T&C’s of working with me here
- You are giving away your (and my) ideas to others so they can beat us to publication and grants. It literally risks our careers.
- It’s a work in progress so it’s likely to be wrong - you are doing a disservice to science
- It makes us look bad and harms our professional reputations
- It hasn’t been reviewed, so it’s probably contravening the licensing of the file, so odds are you’ve opened yourself up to legal action
- You’ve ruined any chance we can patent it. It’s a public disclosure.
Eventually your code will become public, but not until several of us (including me) have reviewed it and I’ve signed off on it.
Most code you find online will carry a license with it. If it doesn’t, it probably isn’t free and you shouldn’t use it. It’s hard to cite it, but it still isn’t yours. Licenses vary in the extent to which you can use, copy or embed them in other code, and often their licenses require you to inherit their licenses (‘copyleft’). As Richard Stallman will tell you, ‘free’ doesn’t mean free as in beer, it means liberated, as in open to scrutiny, which is what science should be. You can copyright your code, and license it to third parties, retaining extensive rights for yourself and others. You can even patent code.
If you work in my research group, your code will probably inherit an open source license and end up in the public domain. If you are unhappy with this idea, let me know up front (N.B. You can still patent the idea for which you have released open source code! If it is after you publicly released the code, then only in the US - where you have 12 months to file a provisional or full patent.).
If you are confused about which free software license to use (and have the liberty to choose), please see this quick look-up chart.
Generally I want to open source code. I think it’s good for everyone and certainly for scientific repeatability. Before posting anything though please check with me. Also check:
- Any other authors who have made ‘substantial’ * contributions (materially or intellectually) to the code are happy too. If they are not, let me know and I’ll adjudicate a reasonable timeline for posting. If you are unsure of authors, please contact me.
- The code doesn’t contain any passwords or PHI (whether you introduced it or not).
- The code has a list of authors, dates and open bugs, limitations, and is commented at each line to show specifically what is yours and when it was done. Notably, each source file should contain a header indicating the author(s), license, date of publication and date of last change (and what the conceptual change was - e.g. ‘minor bug fix to stop buffer overflow in zoom’, or ‘major redesign of annotation interface to allow zooming in x and y’ etc).
- A publication referring to the code is posted on the site where the code is located - probably in a readme file (so this means generally waiting until we’ve published at least one paper on the use of the code).
- Double check with Gari and let him know in an email that all the above steps have been done.
* ‘Substantial’ is open to interpretation, but generally is along the lines of publication authorship. This generally refers to other researcher in my group or collaborators (but generally not people helping with annotation or verbal comments on the design of the interface, such as alpha or beta testers).
Presentations, conferences and other ‘publications’
Any presentation outside of our group meetings should be considered ’public’. This means you are presenting *our* research (not just yours) and so you should send me your material intended for publication (e.g. slides) well in advance (noting any other contributors prominently in the material). Your research reflects the input of your collaborators and so they should be aware of it in advance, and be given the chance to correct errors or contradictions. You rarely work alone!
Sharing results before publication
You should talk to me before sharing research and results with other groups or individuals. Generally I like to share and work in an ’open’ manner, but sometimes this can be sensitive. However, you may find that I share your research with select colleagues without discussing this with you first. I don’t expect to have to pre-approve every communication I have with colleagues.
Working expectations
A DPhil / PhD is rather like working in a startup, or an apprenticeship. You will do a bit of everything from data collection, to fixing computers and entertaining visitors. Clearly a large part of your time will be spent coding and writing up reports. As your supervisor I will try to meet with you for an hour every other week - sometimes more, sometimes less. I’ll respond to emails almost daily and I’ll expect you to do the same, except during holidays. You can take your holidays when you like, but let me know in advance if possible, just in case there’s an important funder turning up.
As far as academic freedom goes, your independence is extremely important, and you must plot your own course (to a large extent) through your degree. However, your freedom cannot be unlimited for three main reasons:
- Your funders usually have some restrictions, such as a particular focus area, an internship with a company, etc.
- You don’t work alone. You will be working in a group, and so you have to consider the needs of others, making sure your research doesn’t overlap too heavily.
- As you are putting your career in my hands, I am also putting my academic reputation in your hands, In that sense, it’s a 50:50 relationship. If I am giving my time, then I will from time to time (but certainly not always) veto certain paths in your research which I am pretty sure will be fruitless. That’s my responsibility after all.
Attendance
I don’t have core hours, but I expect you to be in the office on average 40 hours a week (or whatever your contract/agreement states) Monday through Friday.
Try to be around 10am-3pm at least every day. It’s important you communicate with the group for most of the day, are able to share knowledge and absorb it to move quickly as a team. Research groups work as a cascade of knowledge down the gradient of age (and often up). The lifeblood of research is mentorship, and you will absorb lots in the first year or so and then increasingly pay it forward to the incoming cohorts. For that reason I don’t allow remote working, except on the rare occasion.
Even if you are a student, and all your courses are over, you still must be in the research group physically or you are wasting my time and absorbing knowledge without paying it forward to the upcoming cohorts of students. We stand on each other’s shoulders.
If you want to do a rotation with me, make sure your course load is low, so you can spend sufficient time with my team to make it worth the effort (on both sides).
It’s important you make any meeting I schedule and these might be early morning or late afternoon because my collaborators are clinicians. The flexibility goes both ways though ... if you decide you want to come in at lunch time one day, good for you. I want you to work when you feel at your best. Get sleep, work out, get good food, spend time with loved ones.  Learn your own optimal times for working (but balance it with the need to communicate with the group and have some core hours on most days). If we do have a meeting though then I expect you to be prompt at meetings.
I have a tight calendar, so if you are 10 minutes late to a meeting it significantly impacts it. I’m pretty relaxed, but it results in a poor impression on my collaborators.
It subconsciously sends the message that you think your time is more important than theirs. I know - I can hear my family laughing at me. I’m terribly guilty of this. I’m working on it myself. I’m sorry about that, but please don’t copy me. I don’t role model time keeping well.
Taking days off with holiday pay or flex time is fine with me but please check in advance and drop it in the calendar so I don’t try to schedule meetings with you or try to ask you a question while you are out.
Correspondence
When you work as part of my team, you represent it. When you email anyone, please try to be formal enough.
Use titles until they request that you don’t or have written back to you (directly) using their first name only in the signature at least 3 times.
Use a signature in your email that correctly represents in which research group you work.
Do not chat, instant/text message or cold call someone until they have responded to the email and indicated this is OK.
If you chat me through any of my devices I’ll block you and be less inclined to answer your emails because I find it intrusive.
I use chat/instant messenger type applications for colleagues (including students) I know well. Please don’t leave me voice messages, as they may take a while to reach me. If you want a meeting, please contact my administrative assistant, and cc me on the email so I know who you are and why you are requesting a meeting. I will then email my assistant back to let her know the priority of the meeting. My assistant will not make a meeting time for you without checking with me first.
Recommendations
I only provide recommendations for students or employees/visitors who have spent a substantial amount of time under my direct supervision, either in class or as part of my group.
If you need a reference, please email me at least 4 weeks in advance to ask me if I can do it. You may have to email me me a few times to receive a response, as my volume of emails means I must triage my funded projects and job responsibilities out to the top of the pile.
Please forgive me if I don’t respond. If you have emailed me three times (5 days apart) and received no response, then I would strongly advise looking for a more responsive human.
First, please provide a short synopsis of the position for which you are applying with a link to the opportunity on the web.
Brief and succinct emails help me respond quickly. Long emails are triaged to the bottom of the pile, and those that require me to repeat the information below or ask you for more detail (i.e. a short paragraph describing the position, or a reminder of who you are [sorry - I have taught hundreds of students, and interact with thousands of people, so I may not remember you immediately]) will reduce the probability that I respond.
If I respond positively (i.e. I feel I have the knowledge to provide a strong reference and have the time), then I need you to provide me with a draft letter.
Please provide a draft letter which indicates who am I (what makes me so important that my reference means anything), how I know you and our relationship, for how long (if less than a year, #months), specifically what you did, how you performed, how well you ranked in the class/your peers, any results/impact (give very specific examples that illustrate the point), how well you take direction or respond to criticism and mentorship, how well you work in a team and help others out, why you left (if relevant), would I employ you if I had a relevant position, how I view your potential to succeed, any other key attributes/achievements that address the specific needs of the post/chosen career.
If you are a student and want me to talk about your grades and/or publications, please send readable digital versions.
Please add the full name, title and organisation (plus email) to whom the reference should be addressed at the top of the draft (please don’t make me hunt for it in an old email chain).
Provide the actual deadline (date and time in my local time zone) by when I need to submit it.
Aim for 1-2 pages depending on the importance of the position. Brevity is key, but don’t miss any of the points above! Please try to get this to me at least 3 weeks before the deadline in case I’m travelling. It takes about 1-2 hours to craft a good reference even with all this information so I need to budget time.
Don’t worry about getting any details wrong - I’ll definitely be changing them to reflect my realistic views on you. I’m English, so I can’t be hyperbolic and over-effusive in your reference, and I’ll delete any exaggerations, so please be truthful and balanced (but not modest) and it’ll save us all time. I’ll note my cultural bias (to under- rather than over-state) so the reader knows how to normalise your reference against the other ludicrous ‘future world leader’ references they receive).
Please note that you must waive your right to access the reference I write for you. (Most referees will require this, so I suggest you do this for all of your referees.) I’m not willing to spend time haggling over the nuances of a reference. I will most likely have already discussed it with you in detail if you took the initiative to provide me a draft. I am likely to tell you before hand if the reference will be poor, and suggest you find another referee. Of course, you should not request a reference from someone who does not know you well. Try to cultivate and maintain relationships with three or more mentors you know well. They will be key for written support. Try also to ensure that they have supervised you closely for a significant period of time and were in a senior position to you. A current / most recent direct supervisor is important. A mix of direct supervisors and senior thought leaders is very useful. When you contact them for a reference, send them a copy of the last reference they wrote for you (if they shared it), and ask them if they would like you to highlight anything in your CV that directly pertains to the application. If you can’t identify this information yourself then you are not going to fare well in the interview.
Disclaimer
I’m not a lawyer, and much of the information in this document might be wrong, particularly in different regions. Laws change, interpretations change and precedents are set. So none of the information on this site should be used without consulting a lawyer and all appropriate authorities. Do your own research, and read the research and thoughts of others.
Also, none of the code you find here is warranted for any purposes. Don’t just download it and run it. Think about it, test it, improve it, and test it again.
I hope that covers it. Feel free to drop by and discuss this with me. If you see me stray from these guidelines, please do call me out; nobody is perfect!


RT @FioraAeterna: clever and evil: detecting when someone is using 'curl | bash', server-side, so you can serve a different script: https:/…
4/19/2016, 6:10:46 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
RT @FioraAeterna: clever and evil: detecting when someone is using 'curl | bash', server-side, so you can serve a different script: https:/…
4/19/2016, 6:10:46 PM
Favs: 0
Retweets: 0
link


--- layout: post title: What does $1 Trillion look like? date: 2009-03-30 08:39:21.000000000 -05:00 comments: true categories: - Finance published: true --- Page Tutor has an awesome post where they illustrate what $1 trillion dollars looks like. It is reposted below. --------
All this talk about "stimulus packages" and "bailouts"...
A billion dollars...
A hundred billion dollars...
Eight hundred billion dollars...
One TRILLION dollars...
What does that look like? I mean, these various numbers are tossed around like so many doggie treats, so I thought I'd take Google Sketchup out for a test drive and try to get a sense of what exactly a trillion dollars looks like.
We'll start with a $100 dollar bill. Currently the largest U.S. denomination in general circulation. Most everyone has seen them, slighty fewer have owned them. Guaranteed to make friends wherever they go.
A packet of one hundred $100 bills is less than 1/2" thick and contains $10,000. Fits in your pocket easily and is more than enough for week or two of shamefully decadent fun.
Believe it or not, this next little pile is $1 million dollars (100 packets of $10,000). You could stuff that into a grocery bag and walk around with it.
While a measly $1 million looked a little unimpressive, $100 million is a little more respectable. It fits neatly on a standard pallet...
And $1 BILLION dollars... now we're really getting somewhere...
Next we'll look at ONE TRILLION dollars. This is that number we've been hearing so much about. What is a trillion dollars? Well, it's a million million. It's a thousand billion. It's a one followed by 12 zeros.
You ready for this?
It's pretty surprising.
Go ahead...
Scroll down...
Ladies and gentlemen... I give you $1 trillion dollars...
Notice those pallets are double stacked. ...and remember those are $100 bills.
So the next time you hear someone toss around the phrase "trillion dollars"... that's what they're talking about.


{% extends 'base.html' %} {% block content %}
Your next great experience starts here!
Submit a Workorder »
View Profile »
Let's Go! »


|
|
| ImplSubscription (Session session) |
| |
| async Task< Subscription > | createSubscription (string endPoint, string dataDeliveryFormat, string dataSourceType, string frequencyInMinutes, string startTime, string basicAuthUsername, string basicAuthPassword, int maxPostSize, string subAccountAppId) |
| | Public API to create a subscription More...
|
| |
| async Task< Subscription > | getSubscription (string subscriptionId, string subAccountAppId) |
| | Public API to fetch a subscription More...
|
| |
| async Task< List< Subscription > > | getAllSubscriptions (string subAccountAppId) |
| | Public API to fetch all the subscriptions More...
|
| |
| async Task< Subscription > | updateSubscription (string endPoint, string dataDeliveryFormat, string dataSourceType, string frequencyInMinutes, string startTime, string basicAuthUsername, string basicAuthPassword, int maxPostSize, string subscriptionId, string subAccountAppId) |
| | Public API for updating a subscription. More...
|
| |
| async Task< bool > | deleteSubscription (string subscriptionId, string subAccountAppId) |
| | Public API for deleting a subscription More...
|
| |
◆ createSubscription()
| async Task<Subscription> AvayaCloudClient.ImplSubscription.createSubscription |
( |
string |
endPoint, |
|
|
string |
dataDeliveryFormat, |
|
|
string |
dataSourceType, |
|
|
string |
frequencyInMinutes, |
|
|
string |
startTime, |
|
|
string |
basicAuthUsername, |
|
|
string |
basicAuthPassword, |
|
|
int |
maxPostSize, |
|
|
string |
subAccountAppId |
|
) |
| |
Public API to create a subscription
- Parameters
-
| endPoint | The HTTP/HTTPS endpoint where data will be sent |
| dataDeliveryFormat | Format for encoding the data. Valid values are "CSV" and "JSON". If unspecified, the format is CSV |
| dataSourceType | The name of the data source for the subscription. Valid values are: ECH, HAGLOG, HAGENT, RT_AGENT_STATE, RT_DID_STATE, RT_SKILL_STATE, RT_VDN_STATE |
| frequencyInMinutes | The frequency of how often data is sent. If the value is zero (default) data is sent as quickly as possible. Other values (ex: 10-mintues) try to batch data for up to Frequency units. |
| startTime | The start time of the subscription. When created, the data will be sent starting from StartTime. |
| basicAuthUsername | If set, the producer will use the indicated BasicAuth username and password to connect to the endpoint. BasicAuth will only be used if the protocol is https. |
| basicAuthPassword | |
| maxPostSize | The maximum size (in bytes) of a POST request that the endpoint can accept. The producer will always flush before exceeding this number of bytes. The default (0) is unlimited. |
| subAccountAppId | SubAccountAppId for which the subscription data is needed. If login user is sysadmin, then it can fetch data for all subaccount also with subaccountappid as 'ALL' |
- Returns
- Created Subscription object
◆ deleteSubscription()
| async Task<bool> AvayaCloudClient.ImplSubscription.deleteSubscription |
( |
string |
subscriptionId, |
|
|
string |
subAccountAppId |
|
) |
| |
Public API for deleting a subscription
- Parameters
-
| subscriptionId | Id of the subscription which has to be deleted. |
| subAccountAppId | SubAccountAppId for which the subscription data is to be deleted. If login user is sysadmin, then it can delete subscription for all subaccount also with subaccountappid as 'ALL' |
- Returns
- Result of subscription deletion.True/False
◆ getAllSubscriptions()
| async Task<List<Subscription> > AvayaCloudClient.ImplSubscription.getAllSubscriptions |
( |
string |
subAccountAppId | ) |
|
Public API to fetch all the subscriptions
- Parameters
-
| subAccountAppId | SubAccountAppId of the subscriptions. All the subscriptions for the subaccount will be returned |
- Returns
- All subscriptions for the given subaccount
◆ getSubscription()
| async Task<Subscription> AvayaCloudClient.ImplSubscription.getSubscription |
( |
string |
subscriptionId, |
|
|
string |
subAccountAppId |
|
) |
| |
Public API to fetch a subscription
- Parameters
-
| subscriptionId | Id of the subscription which was created |
| subAccountAppId | SubAccountAppId of the subscription which was created |
- Returns
- Subscription object for the given Id
◆ updateSubscription()
| async Task<Subscription> AvayaCloudClient.ImplSubscription.updateSubscription |
( |
string |
endPoint, |
|
|
string |
dataDeliveryFormat, |
|
|
string |
dataSourceType, |
|
|
string |
frequencyInMinutes, |
|
|
string |
startTime, |
|
|
string |
basicAuthUsername, |
|
|
string |
basicAuthPassword, |
|
|
int |
maxPostSize, |
|
|
string |
subscriptionId, |
|
|
string |
subAccountAppId |
|
) |
| |
Public API for updating a subscription.
- Parameters
-
| endPoint | The HTTP/HTTPS endpoint where data will be sent |
| dataDeliveryFormat | Format for encoding the data. Valid values are "CSV" and "JSON". If unspecified, the format is CSV |
| dataSourceType | The name of the data source for the subscription. Valid values are: ECH, HAGLOG, HAGENT, RT_AGENT_STATE, RT_DID_STATE, RT_SKILL_STATE, RT_VDN_STATE |
| frequencyInMinutes | The frequency of how often data is sent. If the value is zero (default) data is sent as quickly as possible. Other values (ex: 10-mintues) try to batch data for up to Frequency units. |
| startTime | The start time of the subscription. When created, the data will be sent starting from StartTime. |
| basicAuthUsername | If set, the producer will use the indicated BasicAuth username and password to connect to the endpoint. BasicAuth will only be used if the protocol is https. |
| basicAuthPassword | |
| maxPostSize | The maximum size (in bytes) of a POST request that the endpoint can accept. The producer will always flush before exceeding this number of bytes. The default (0) is unlimited. |
| subscriptionId | Id of the subscription which has to be updated. |
| subAccountAppId | SubAccountAppId for which the subscription data is needed. If login user is sysadmin, then it can fetch data for all subaccount also with subaccountappid as 'ALL' |
- Returns
- Updated Subscription Object
The documentation for this class was generated from the following file:


5 February 2008
The Ministry of Health of Indonesia has announced two new cases of human H5N1 avian influenza infection. The first is a 29-year-old female from Tangerang City, Banten Province who developed symptoms on 22 January, was hospitalized on 28 January and died on 2 February. Investigations into the source of her infection are ongoing .
The second case is a 38-year-old female from West Jakarta, Jakarta Province who developed symptoms on 23 January 2008, was hospitalized on 26 January and is currently in hospital in a critical condition. Investigations into the source of her infection are ongoing.
Of the 126 cases confirmed to date in Indonesia, 103 have been fatal.