Extensible Modules¶
- Extensible Base Calsses and Modules
BOMLNet - Aliases：
boml.networks.BOMLNet
Methods to be overridden:
- forward()：
It uses defined convolutional neural networks with initial input
- re_forward(new_input):
It reuses defined convolutional with new input and update the output results
- create_outer_parameters():
This method creates parameters of upper level problems, and adds them to define collections called METAPARAMETERS
Args: - var_collections: collections to restore meta parameters created in the so called scope
Returns: dictionary that indexes the outer parameters
create_model_parameters():
This method creates model parameters of upper level problems like T layer or Warp layer , and adds them to define collections called METAPARAMETERS.
Utility functions:
get_conv_weight(boml_net, layer, initializer):
Args: - boml_net: initialized instance of BOMLNet - layer: int32, the layer-th weight of convolutional block to be created - initializer: the tensorflow initializer used to initialize the filters
-Returns: created parameter
get_bias_weight(boml_net, layer, initializer):
Args:
boml_net: initialized instance of BOMLNet
layer: int32, the layer-th bias of convolutional block to be created
initializer: the tensorflow initializer used to initialize the bias
Returns: created parameter
get_identity(dim, name, conv=True):
Args:
dim: the dimension of identity metrix
name: name to initialize the metrix
conv: BOOLEAN , whether initialize the metrix or initialize the real value, default to be True
Returns: the created parameter
conv_block(boml_net, cweight, bweight):
It uses defined convolutional weight and bias with current ouput of boml_net
Args: - boml_net: initialized instance of BOMLNet - cweight: parameter of convolutional filter - bweight: parameter of bias for convolutional neural networks
conb_block_t(boml_net, conv_weight, conv_bias, zweight):
uses defined convolutional weight, bias, and weights of t layer with current ouput of boml_net
Args:
boml_net: initialized instance of BOMLNet
conv_weight: parameter of convolution filter for convolutional neural networks
conv_bias: parameter of bias for convolutional neural networks
zweight: parameter of convolution filter for T-layer
conv_block_warp(boml_net, cweight, bweight, zweight, zbias):
uses defined convolutional weight, bias and filters of warp layer with current ouput of boml_net
Args:
boml_net: initialized instance of BOMLNet
cweight: parameter of convolution filter for convolutional neural networks
bweight: parameter of bias for convolutional neural networks
zweight: parameter of convolution filter for Warp-layer
zbias: parameter of bias for Warp-layer
BOMLInnerGrad
Aliases:
boml.LLProblem.BOMLInnerGrad
Methods to be overridden:
compute_gradients( boml_opt, loss_inner, loss_outer=None, inner_method=None, param_dict=OrderedDict(), var_list=None, **inner_kargs):
The method delivers equivalent functionality to the method called compute_gradients() in tf.train.Optimizer.
Args:
boml_opt: instance of boml.optimizer.BOMLOpt, which is automatically create by the method in boml.boml_optimizer.BOMLOptimizer
loss_inner: inner objective, which could be passed by boml.boml_optimizer.BOMLOptimizer.ll_problem or called directly.
loss_outer: outer objective,which could be passed automatically by boml.boml_optimizer.BOMLOptimizer.ll_problem, or called directly
param_dict: automatically passed by 'boml.boml_optimizer.BOMLOptimizer.ll_problem'
var_list: list of lower level variables
inner_kargs: optional arguments, which are same as tf.train.Optimizer
Returns：self
Utility functions:
apply_updates():
Descent step, as returned by tf.train.Optimizer.apply_gradients.
initialization():
list of operations that return the values of the state variables for this learning dynamics after the execution of the initialization operation. If an initial dynamics is set, then it also executed.
state():
A generator for all the state variables (optimized variables and possibly auxiliary variables) being optimized.
BOMLOuterGrad
Aliases:
boml.ul_problem.BOMLOuterGrad
Methods to be overridden:
compute_gradients(outer_objective, bml_inner_grad, meta_param=None):
Args:
bml_inner_grad: OptimzerDict object resulting from the inner objective optimization.
outer_objective: A loss function for the outer parameters (scalar tensor)
meta_param: Optional list of outer parameters to consider. If not provided will get all variables in the hyperparameter collection in the current scope.
Returns: list of meta parameters involved in the computation
apply_gradients( inner_objective_feed_dicts=None, outer_objective_feed_dicts=None, initializer_feed_dict=None, param_dict=OrderedDict(), train_batches=None, experiments= [], global_step=None, session=None, online=False, callback=None)
Args:
inner_objective_feed_dicts: Optional feed dictionary for the inner objective
- outer_objective_feed_dicts: Optional feed dictionary for the outer objective
(note that this is not used in ForwardHG since hypergradients are not variables)
global_step: Optional global step for the optimization process
param_dict: dictionary of parameters passed by boml.boml_optimizer.BOMLOptimizer
session: Optional session (otherwise will take the default session)
experiments: list of instances of Experiment, needed when Reptile Algorithm are implemented
Utility functions:
hgrads_hvars( meta_param=None, aggregation_fn=None, gradient_clip=None):
Method for getting outergradient and outer parameters as required by apply_gradient methods from tensorflow optimizer.
Args：
meta_param: Optional list of outer parameters to consider. If not provided will get all variables in the hyperparameter collection in the current scope.
- aggregation_fn: Optional operation to aggregate multiple hypergradients (for the same hyperparameter),
by default reduce_mean
gradient_clip: Optional operation like clipping to be applied.
initialization():
Returns groups of operation that initializes the variables in the computational graph.
state():
The method returns current state values of lower level variables.
BOMLOpt
Aliases:
boml.optimizer.BOMLOpt
Methods to be overridden:
- minimize(loss_inner, var_list=None, global_step=None, gate_gradients=tf.train.Optimizer.GATE_OP,
aggregation_method=None, colocate_gradients_with_ops=False, name=None, grad_loss=None):
Returns: an bml_inner_grad object relative to this minimization, same as tf.train.Optimizer.minimize.
Utility functions:
learning_rate():
Returns: the step size of this BOMLOptimizer
Utility Functions
get_dafault_session():
The method gets and returns the default tensorflow session
Utility Modules:
get_default_session():
The method gets and returns the default tensorflow session
BatchQueueMock():
The class is responsible for generates batches of taskes and feed them into corresponding placeholders.
cross_entropy(pred, label, method):
It returns loss function that matches different methods in [MetaRepr,`MetaRper`]
vectorize_all(var_list, name=None):
The method vectorize the variables in the list named var_list with the given name
remove_from_collectinon(key,*var_list):
The method removes the variables in the var_list according to the given Graph key
set_gpu():
The method sets primary parameters of GPU configuration.


26 years old, Malaysian
I love visting places and being exposed to different cultures - especially the food! I'm working on eating my way across the globe!
<EMAIL_ADDRESS>25 years old, American
Hi. I have traveled to all corners of the United States. I love to solo travel!
<EMAIL_ADDRESS>24 years old, English
Hi, i’m Hannah. I love travelling and have been to 10 countries. My two favourite countries I have been to are Thailand and America.
h123@hotmail.com


Anand Giridharadas is a reporter and writer who has, in the past couple of years, been speaking about the culture of the United States in a way that has resonated strongly with me. His book, Winners Take All: The Elite Charade of Changing the World, examines how the billionaire class has perpetuated a worldview that puts the winners of an economy–themselves–in charge of its fixing its social problems, which ultimately serves to further entrench their own power and money.
His investigation into the people and worldview that preserve the power of the wealthiest of our society makes a lot of sense, challenges a many of the beliefs of the systems that I (and many of my friends) have been taught as a graduates of the University of Chicago and employees of large corporations, and puts into words many of my own misgivings about the narratives of changing the world that I’ve grown up with.
The Premise:
How can we explain the following two seemingly contradictory realities?
-
There is more inequality in the U.S. than ever before.
- Since 1980, the average pretax income has doubled for Americans in the top 10%, more than tripled for those in the top 1%, and increased over sevenfold for those in the top .001%.1
- From 1989 to 2016, the share of wealth held by the top 1% rose from 30% to 39%, while the share of wealth held by the bottom 90% fell from 33% to 23%.2
- In 2017, the three richest Americans held more wealth than the bottom 50% of the country.3
-
There is more generosity in the U.S. than ever before.
- In 2018, Americans gave $427 billion dollars to charity – $292 billion from individuals, $76 billion from foundations, $40 billion from bequests, and $20 billion from corporations.4
- 3/4 of global philanthropic foundations have been established in the last 25 years, with 60% of its wealth concentrated in the U.S.5
- The urge to do good has also spread to the realm of investing: in 2018, $12 trillion was invested in socially responsible “impact investment” funds (about 26% of all assets in the U.S. under professional management), up 38% from two years ago.6
The Thesis:
Large corporations and billionaires have spread a “win-win” ideology that proports that those with the most power and money – those who have been successful in growing businesses – should be at the forefront of solving the world’s problems in a way that benefits both those at the top and those at the bottom. This culture, which Giridharadas calls “MarketWorld,” has the following implications (selected quotations are from Winners Take All):
- Plutocrats have changed the way that Americans think about change. We no longer look to the government for progress; instead, we look to privately-funded organizations such as the Aspen Institute, Davos, and Summit at Sea, to solve the world’s most challenging problems. We are essentially putting our future in the hands of an unelected, unnacountable group of rich business leaders meeting in private rooms.
In the journey from Adam Smith’s theory to that of the win-win, the entrepreneur is transformed from an incidental booster of the common good to a unique figure specially capable of tending to it. Business goes from being a sector with positive social benefits to being the principal vessel for human betterment. “Business acting as business, not as charitable donors, are the most powerful force for addressing the pressing issues we face,” the Harvard Business School professor Michael Porter declared in one formulation of the idea. “Business is the ultimate positive-sum game, in which it is possible to create a Win for all the stakeholders of the business,” John Mackey, the chief executive of Whole Foods Market, and Raj Sisodia write in a book that has become a bible of the win-win-faith, Conscious Capitalism: Liberating the Heroic Spirit of Business.
-
Billionaires and large corporations are able to stomp out ideas that may be beneficial for the country as a whole but aren’t beneficial for their own profits, such as affordable health care, guaranteeed paid maternity leave, government funding for child care, criminal justice reform, and higher taxes on the wealthy.
- Google, Amazon, and Facebook spent $48 million in lobbying against antitrust and data regulations in 2018.7
- The biggest lobbying group for the pharmaceutical industry spent $27.5 million on lobbying activities in 2018.8
- For further reading on this, see Dark Money (2018) by Jane Mayer, which takes an in-depth look at the influence of money in the American political system.
It is fine for winners to see their own success as inextricable from that of the others. But there will always be situations in which people’s preferences and needs do not overlap, and in fact conflict. And what happens to the losers then? Who is to protect their interests? What if the elites simply need to part with more of their money in order for every American to have, say, a semi-decent public school?
-
While they fight against tighter regulations, billionaires and large companies enact their own version of change-making initiatives that is profit-friends, which gives them credit in a way that they wouldn’t have if they just paid more in taxes. They are able to use the goodwill generated from donating large sums of money to stay in power and hide their unethical actions.
- The Sackler family donated millions to the art world while they marketed their product OxyContin, the drug behind the opioid epidemic.9
- Mark Zuckerberg has pledged billions to address social problems while his company Facebook compromised a presidential election.10 11
- Jeff Bezos donated $33 million in 2017 to help 1,000 Dreamers go to college while his company Amazon employed hundreds of thousands of temporary workers with low wages and no benefits.12
To question the doing-well-by-doing-good globalists is not to doubt their intentions or results. Rather, it is to say that even when all those things are factored in, something is not quite right in believing they are the ones best positioned to effect meaningful change. To question their supremacy is very simply to doubt the proposition that what is best for the world just so happens to be what the rich and powerful think it is. It is to say you don’t want to confine your imagination of how the world might be to what can be done with their support. It is to say that a world marked more and more by private greed and the private provision of public goods is a world that doesn’t trust the people, in their collective capacity, to imagine another kind of society into being.
Further Reading and Listening
This guy is seriously prolific…you can find hours and hours of him talking about his ideas online. If you have time, I would recommend watching the interview with Anand below by the Dutch broadcaster VPRO. It’s relatively long for a YouTube video (31:49), but the time flies by.
I think his podcast with Ezra Klein, recorded only a couple of days after his book was published, is one of his best interviews. It’s also interesting to watch him change way he frames his talking points to suit the context he speaks in: he talks differently to Google employees who work for one of the biggest winners of the 21st century, than to attendees of the House of Beautiful Business, which is one of the elite gatherings that he takes down in his book.
There’s also an episode of Patriot Act by Hasan Minaj inspired by him, for some light & fun viewing.
- Sep ‘18: Winners Take All: The Elite Charade of Changing the World (Book)
- Sep ‘18: Interview with Anand on the Ezra Klein Show (Podcast)
- Oct ‘18: Anand Giridharadas - Talks at Google (YouTube)
- Dec ‘19: Why Billionaires Won’t Save Us - Patriot Act with Hasan Minhaj (Netflix/YouTube)
- Feb ‘20: Anand Giridharadas - Interview at the House of Beautiful Business (YouTube)
There are a lot of counterarguments to make against this argument, and I’m aware I’ve haven’t addressed any in this post. Check out some of his speaking engagements, where I think he argues his points well when challenged.
I’ll end with this quote from the book:
Not every bad thing that happens in the world is your fault if you fail to stop it. However, citizens of a democracy are collectively responsible for what their society foreseeably and persistently allows; they have a special duty toward those it systematically fails; and this burden falls most heavily on those out amply rewarded by the same, ultimately arbitrary set of arrangements.
-
“How Business Titans, Pop Stars, and Royals Hide Their Wealth”, by Scott Shane, Spencer Woodman, and Michael Forsythe (New York Times, November 7, 2017) ⤴
-
“A Guide to Statistics on Historical Trends in Income Inequality”, by Chad Stone, Danilo Trisi, Arloc Sherman, and Jennifer Beltrán (The Center on Budget Policy Priorities, updated January 13, 2020) ⤴
-
“The 3 Richest Americans Hold More Wealth Than Bottom 50% Of The Country, Study Finds”, by Noah Kirsh (Forbes, November 9, 2017) ⤴
-
Charitable Giving Statistics, National Philanthropic Trust ⤴
-
“Is Big Philanthropy Democracy Deferred? Global Study Shows the Power of the Ultra-Rich”, by Erin Rubin (Nonprofit Quarterly, April 27, 2018) ⤴
-
“Sizing the Impact Investing Market” (The Global Impact Investing Network, April 1, 2019) ⤴
-
“Google, Amazon, and Facebook all spent record amounts last year lobbying the US government”, by Rani Molla (Vox, January 23, 2019) ⤴
-
“Big Pharma spends record millions on lobbying amid pressure to lower drug prices”, by Susan Scutti (CNN, January 24, 2019) ⤴
-
“The Sackler family made their fortune in opioids — and museums are rejecting their donations”, by Kelsey Piper (Vox, May 15, 2019) ⤴
-
“The trouble with charitable billionaires”, by Carl Rhodes and Peter Bloom (The Guardian, May 24, 2018) ⤴
-
“The Facebook and Cambridge Analytica scandal, explained with a simple diagram”, by Alvin Chang (Vox, Updated May 2, 2018) ⤴
-
“Jeff Bezos, Amazon and Why ‘Charity’ Is the Wrong Solution”, by Ed Burmila (RollingStone, February 14, 2018) ⤴


Hey there {{ g.user.username }}, sorry to interrupt. Arxivity costs a non-negligible amount of money to host.
If you love the site, please consider pitching in:
To nuke this message away for a long time click
here.
{% endif %}
{% block content %}{% endblock %}


Charity Tap is so addicting that you will not be able to put it down.
For All Ages
No matter if you are young or old, you can donate to charity during your free time.
Charitable
Every single advertisement click goes to the charity of your choice.
Game
Tap the blue object and level up as much as possible. To help level up, collect speed boost bonuses by looking at ads that support the charity of your choice.


Deductions
The information you entered indicates you would be eligible for the level of coverage below. Coverage is temporary until we verify your income with CRA.
Loading Pharmacare data...
Unable to load Pharmacare data.
Please reload or try again later.


1. What does a neuron compute? (1 / 1 point)
[] A neuron computes the mean of all features before applying the output to an activation function
[x] A neuron computes a linear function (z = Wx + b) followed by an activation function
[] A neuron computes a function g that scales the input x linearly (Wx + b)
[] A neuron computes an activation function followed by a linear function (z = Wx + b)
2. Which of these is the "Logistic Loss"? (1 / 1 point)
[] L(i)(y(i) , y^(i)) = max(0 , y(i) − y^(i))
[x] L(i)(y(i) , y^(i)) = -(y(i)*(log(y^(i)) + (1−y(i))log(1−y^(i))
[] L(i)(y(i) , y^(i)) = ∣y(i) − y^(i)∣2
[] L(i)(y(i) , y^(i)) = ∣y(i) − y^(i)∣
3. Suppose img is a (32,32,3) array, representing a 32x32 image with 3 color channels red, green and blue. How do you reshape this into a column vector? (1 / 1 point)
[] x = img.reshape((32 * 32,3))
[] x = img.reshape((3,32 * 32))
[x] x = img.reshape((32 * 32 * 3,1))
[] x = img.reshape((1,32 * 32, *3))
4.Consider the two following random arrays "a" and "b".
a = np.random.randn(2, 3) # a.shape = (2, 3)
b = np.random.randn(2, 1) # b.shape = (2, 1)
c = a + b
What will be the shape of "c"? (1 / 1 point)
[] The computation cannot happen because the sizes don't match. It's going to be "Error"!
[] c.shape = (3, 2)
[x] c.shape = (2, 3)
[] c.shape = (2, 1)
5. Consider the two following random arrays "a" and "b":
a = np.random.randn(4, 3) # a.shape = (4, 3)
b = np.random.randn(3, 2) # b.shape = (3, 2)
c = a*b
What will be the shape of "c"? (1 / 1 point)
[] c.shape = (3, 3)
[] c.shape = (4, 3)
[] c.shape = (4,2)
[x] The computation cannot happen because the sizes don't match. It's going to be "Error"!
6. Suppose you have n~x~ input features per example. Recall that X=[x(1),x(2),…x(m)]. What is the dimension of X? (1/1 point)
[] (m,1)
[] (1,m)
[] (m, nx)
[x] (nx,m)
7. Recall that np.dot(a,b)
performs a matrix multiplication on a
and b
, whereas a*b
performs an element-wise multiplication. Consider the two following random arrays a
and b
:
a = np.random.randn(12288, 150) # a.shape = (12288, 150)
b = np.random.randn(150, 45) # b.shape = (150, 45)
c = np.dot(a,b)
What is the shape of c? (1 / 1 point)
[] c.shape = (150,150)
[] c.shape = (12288, 150)
[x] c.shape = (12288, 45)
[] The computation cannot happen because the sizes don't match. It's going to be "Error"!
8. Consider the following code snippet:
# a.shape = (3,4)
# b.shape = (4,1)
for i in range(3):
for j in range(4):
c[i][j] = a[i][j] + b[j]
How do you vectorize this? (1 / 1 point)
[] c = a.T + b
[] c = a.T + b.T
[x] c = a + b.T
[] c = a + b
9. Consider the following code:
a = np.random.randn(3, 3)
b = np.random.randn(3, 1)
c = a*b
What will be c? (If you’re not sure, feel free to run this in python to find out). (1 / 1 point)
[x] This will invoke broadcasting, so b is copied three times to become (3,3), and *
is an element-wise product so c.shape will be (3, 3)
[] This will invoke broadcasting, so b is copied three times to become (3, 3), and *
invokes a matrix multiplication operation of two 3x3 matrices so c.shape will be (3, 3)
[] This will multiply a 3x3 matrix a with a 3x1 vector, thus resulting in a 3x1 vector. That is, c.shape = (3,1).
[] It will lead to an error since you cannot use *
to operate on these two matrices. You need to instead use np.dot(a,b)
10. Consider the following computational graph:
What is the output J? (1 / 1 point)
[] J = (c - 1) * (b + a)
[x] J = (a - 1) * (b + c)
[] J = a * b + b * c + a * c
[] J = (b - 1) * (c + a)


Dashboard
Tables
{{success}}
{{message}}
Area
State
Contact Person
Email
Mobile
{{#each data}}
{{AreaName}}
{{stateName}}
{{contactPerson}}
{{Email}}
{{Mobile}}
{{/each}}
More table coming soon...
Ready to Create a New Area
×
Area Managament
Area Name
State
Select State*
Contact Person
Email
Mobile
Ready to Update Area
×
Area Managament
Area Name
State
Select State*
Contact Person
Email
Mobile
Delete confirmation
×
Will be permanently deleted. Are you sure you want to do this?


Tools for estimating incidence from biomarker data in cross- sectional surveys, and for calibrating tests for recent infection. Implements and extends the method of Kassanjee et al. (2012) <doi:10.1097/EDE.0b013e3182576c07>.
| Version: | 1.0.14 |
| Depends: | R (≥ 3.4.0) |
| Imports: | stats, utils, magrittr, rlang, dplyr, tibble, cubature, tmvtnorm, ggplot2, glm2, plyr, pracma, foreach, parallel, doParallel |
| Suggests: | survey, knitr, rmarkdown |
| Published: | 2018-09-21 |
| Author: | Alex Welte [aut], Eduard Grebe [cre, aut], Avery McIntosh [aut], Petra Bäumler [aut], Reshma Kassanjee [ctb], Hilmarie Brand [ctb], Cari Van Schalkwyk [ctb], Yuruo Li [ctb], Simon Daniel [ctb], Stefano Ongarello [aut], Yusuke Asai [ctb], Jeffrey Eaton [ctb] |
| Maintainer: | Eduard Grebe <eduardgrebe at sun.ac.za> |
| BugReports: | https://github.com/SACEMA/inctools/issues |
| License: | GPL-3 |
| URL: | http://www.incidence-estimation.org/page/inctools |
| NeedsCompilation: | no |
| CRAN checks: | inctools results |
| Reference manual: | inctools.pdf |
| Vignettes: |
Estimating incidence Overview of inctools Survey design Test calibration |
| Package source: | inctools_1.0.14.tar.gz |
| Windows binaries: | r-devel: inctools_1.0.14.zip, r-release: inctools_1.0.14.zip, r-oldrel: inctools_1.0.14.zip |
| OS X binaries: | r-release: inctools_1.0.14.tgz, r-oldrel: inctools_1.0.14.tgz |
| Old sources: | inctools archive |
Please use the canonical form https://CRAN.R-project.org/package=inctools to link to this page.


Page is used to test scripts and other non-dynamic items. Just a Sanity Checker html page.
This Page lives in the github repo on Ricks Imac. It is only synced when opened with VS 2013 using github client.


Command will run to turn the projector on. Suitable for sending command through infrared and HDMI-CEC
You can find some example, they may not compatible with your display
- To cut the signal
- /opt/vc/bin/tvservice -o
- To restore the signal
- /opt/vc/bin/tvservice -p
- Turns off the display
- echo "standby 0" | cec-client -s
- Turns on the display
- echo "on 0" | cec-client -s


Emmanuel Haankwenda Shared a post
The students in Africa are so intelligent
2
8
Edinyanga Ottoho Shared a post
At the rate in which the world is moving, AI will surpass human intelligence
5
10


- generate_id() - Static method in class org.ngi.NodeGraph
-
Generate a unique ID for Nodes,Inputs, and Outputs.
- getA() - Method in class org.ngi.nodes.math.BaseOperator
-
Provided for special cases - not used, see getB()
- getB() - Method in class org.ngi.nodes.math.BaseOperator
-
Provided for special cases - ok only the division operator...
- getBorder() - Method in class org.ngi.NodeGraph
-
- getBounds() - Method in class org.ngi.Element
-
Get the Bounds of the Element
- getBounds() - Method in class org.ngi.quadtree.QuadTreeNode
-
- getCameraScale() - Method in class org.ngi.PanelCamera
-
- getCameraTargetInWorld() - Method in class org.ngi.PanelCamera
-
- getConnection() - Method in class org.ngi.NodeInput
-
- getConnectionPoint() - Method in class org.ngi.NodeTile
-
Get the Connection Point for drawing wires.
- getDataRequirements() - Method in class org.ngi.NodeInput
-
- getDataType() - Method in class org.ngi.NodeInput
-
- getDataType() - Method in class org.ngi.NodeOutput
-
- getDataType() - Method in class org.ngi.NodeTile
-
Get the specific Data Type the Tile either inputs or outputs
- getDescription() - Method in class org.ngi.DialogFileFilter
-
- getDescription() - Method in class org.ngi.Element
-
Get the description of this Element.
- getDeviceCoords() - Method in class org.ngi.PanelCamera
-
- getDialogOk() - Method in class org.ngi.StaticValueDialog
-
Check for Ok clicked.
- getDialogResult() - Method in class org.ngi.StaticValueDialog
-
Get the dialog result: the new static value.
- getElse() - Method in class org.ngi.nodes.conditionals.If
-
- getErrorMessage() - Method in class org.ngi.Node
-
- getErrorMessage() - Method in class org.ngi.NodeTile
-
- getFocusNode() - Method in class org.ngi.MouseFocus
-
- getFocusTile() - Method in class org.ngi.MouseFocus
-
- getFocusType() - Method in class org.ngi.MouseFocus
-
- getFragementSpec() - Method in class org.ngi.nodes.geometry.BaseMesh
-
Get the Fragment Specification.
- getId() - Method in class org.ngi.Element
-
Get the Id of the Element
- getIndex() - Method in class org.ngi.nodes.language.Children
-
Get the index.
- getInputNode() - Method in class org.ngi.menus.actions.DeleteConnectionAction
-
- getInputNode() - Method in class org.ngi.menus.actions.DeleteOptionalInputAction
-
- getInputNode() - Method in class org.ngi.menus.actions.SetStaticValueAction
-
- getInputs() - Method in class org.ngi.Node
-
Get the list of all inputs.
- getInputValue() - Method in class org.ngi.NodeInput
-
Get the Input value, either from the Connection or Static Value if no
connection is present
- getMenuBar() - Method in class org.ngi.menus.MenuSystem
-
Get the Menu Bar Object for attaching to them main frame.
- getMenuSystem() - Method in class org.ngi.NodeGraph
-
- getMinimumSize() - Method in class org.ngi.NodeGraph
-
- getName() - Method in class org.ngi.Element
-
get the Name of the Element
- getNode() - Method in class org.ngi.menus.actions.AddOptionalInputAction
-
- getNode() - Method in class org.ngi.menus.actions.DeleteNodeAction
-
- getNode() - Method in class org.ngi.menus.actions.DuplicateNodeAction
-
- getNode() - Method in class org.ngi.menus.actions.RenameNodeAction
-
- getNodeConnections() - Method in class org.ngi.NodeOutput
-
- getNodeInput() - Method in class org.ngi.NodeConnection
-
- getNodeOutput() - Method in class org.ngi.NodeConnection
-
- getNodes() - Method in class org.ngi.NodeGraph
-
Get the list of nodes.
- getOuputs() - Method in class org.ngi.Node
-
Get the list of all outputs.
- getOut() - Method in class org.ngi.nodes.math.BaseOperator
-
Provided for special cases - not used....
- getOutputValue() - Method in class org.ngi.NodeConnection
-
Get the output value from the connections NodeOutput.
- getOutputValue() - Method in class org.ngi.NodeOutput
-
Get the output value
- getParameters() - Method in class org.ngi.nodes.language.BaseParameters
-
Get the parameters in comma delineated string form.
- getParent() - Method in class org.ngi.NodeInput
-
Get the Parent of this Input node.
- getParent() - Method in class org.ngi.NodeOutput
-
Get the Parent of this Output node.
- getPathsString() - Method in class org.ngi.nodes.geometry.Polygon
-
Get the Paths Vector.
- getPreferredSize() - Method in class org.ngi.NodeGraph
-
- getQuadrantNE() - Method in class org.ngi.Bounds
-
Get the sub-bonds from the center x and min y to the center/right.
- getQuadrantNW() - Method in class org.ngi.Bounds
-
Get the sub-bonds from the min x and min y to the center.
- getQuadrantSE() - Method in class org.ngi.Bounds
-
Get the sub-bonds from the center x and center y to the bottom/right.
- getQuadrantSW() - Method in class org.ngi.Bounds
-
Get the sub-bonds from the min x and center y to the bottom/center.
- getSCADFileName() - Method in class org.ngi.FileHandler
-
Get the Output CAD file path - used specifically by the File Output Node.
- getStaticValue() - Method in class org.ngi.NodeInput
-
- getTileType() - Method in class org.ngi.NodeInput
-
- getTileType() - Method in class org.ngi.NodeOutput
-
- getTileType() - Method in class org.ngi.NodeTile
-
Get the general type of Tile: Input or Output.
- getTransform() - Method in class org.ngi.PanelCamera
-
- getWorldCoords() - Method in class org.ngi.PanelCamera
-
- Greater - Class in org.ngi.nodes.conditionals.relational
-
Greater than relational operator (>).
- Greater() - Constructor for class org.ngi.nodes.conditionals.relational.Greater
-
- GreaterOrEqual - Class in org.ngi.nodes.conditionals.relational
-
Greater than or equal to relational operator (>=).
- GreaterOrEqual() - Constructor for class org.ngi.nodes.conditionals.relational.GreaterOrEqual
-


idlutils is a collection of IDL utilities useful for astronomical applications, developed by an assortment of folks over the years. Various pipelines for the Sloan Digital Sky Survey and other projects rely on tools from this product.
Documentation of individual routines can be found below:
To download the latest tagged version of idlutils, use svn ("subversion"). On most Unix machines you should be able to execute:
svn export https://projects.lbl.gov/svn/idlutils/tags/v5_4_2 idlutils
To list other available tags, use the command:
svn ls https://projects.lbl.gov/svn/idlutils/tags
If you want to keep up-to-date on the latest, evolving version (the "trunk" in SVN parlance), then execute:
svn co https://projects.lbl.gov/svn/idlutils/trunk idlutils
Afterward, an "svn up" in the idlutils directory will update your working copy.
These access points are read-only. If you want to develop or add to the idlutils software please contact for more information "djschlegel lbl gov" (with the "ats" and "dots" in the obvious places).
After exporting or checking out the code, set the environmental variable IDLUTILS_DIR to the location of your idlutils directory. Then set the variables:
export PATH=$IDLUTILS_DIR/bin:$PATH export IDL_PATH=+$IDLUTILS_DIR/pro:$IDL_PATH export IDL_PATH=+$IDLUTILS_DIR/goddard/pro:$IDL_PATH
Of course, you should put those commands into your ".bash_profile" file where appropriate.
To build the code, then execute:
cd $IDLUTILS_DIR evilmake all
It should build the documentation as well as all of the C libraries.
Special cases: For EUPS-users (you know who you are), there is an idlutils.table file in the ups directory. For users of the SDSS-3 "sas" product, a full export/make/install can be executed with "sdss3install".
No warranty is expressed or implied or anything regarding this software.


Set the number of listings to appear on each page. Selecting the "Automatic" option will automatically determine the highest possible number of items to be listed on your screen based on your browser height.
Download Warnings
Select "Yes" if you would like to be warned about downloads that will affect your daily quota.*Changes will not take effect until you refresh the page


Cozy Corner
Menu
Home
Collection
Donate
About Us
Locations
Login
Cozy Corner
Menu
Home
Collection
Donate
About Us
Locations
Login
Donate Now
Name
Email
Book Title
Author
Genre
Condition
Location
Submit


Site Contributors
Byron Keyes
Before moving to become a software engineer I worked in claims intake at Nationwide. I have been interested in software development since 2016 when I found out coding bootcamps existed. I have found coding interesting since it was described to me as having a super power. I would love to use my knowledge in software development to help make some form of entertainment better. I have had to work on many different teams so I am comfortable accomplishing tasks with anyone.
Arik Mackenburg
Before I began at DeltaV I worked in the automotive field and then at Quaker. I believe my prievious experience diagnosing problems in the automotive field will serve as a beneficial skill set to me in this field. I hope to eventually use the knowledge I acquire to work for myself.
Christian Lievrouw
Before starting DeltaV I worked as a delivery driver for Kabrick Dist. I have always found an interest in coding and technology in general. I had taken a few classes in college for HTML and CSS, but never really thought I could pick up coding. I had decided that I wanted to do more with my life so I started looking into coding bootcamps to give coding another try and found DeltaV. Now almost done with 201, I am picking things but better than I thought I would. My plans for after DeltaV are to find my spot in the world of tech and continue to grow as a software developer.


"COVETOUSNESS "a strong desire after the possession of worldly things(Colossians 3:5; Ephesians 5:5; Hebrews 13:5; 1 Timothy 6:9, 10; Matthew 6:20). It assumes sometimes the more aggravated form of avarice, which is the mark of cold-hearted worldliness.
"COVETOUSNESS "a strong desire after the possession of worldly things(Colossians 3:5; Ephesians 5:5; Hebrews 13:5; 1 Timothy 6:9, 10; Matthew 6:20). It assumes sometimes the more aggravated form of avarice, which is the mark of cold-hearted worldliness.


All Classes
DesignGridLayout
DesignGridLayoutManager
IBarRow
IGridRow
IHideable
INonGridRow
IRow
IRowCreator
ISpannableGridRow
ISubGridStarter
LabelAlignment
RowGroup
Tag


The goal of this type is to provide clients with a solid reference for how the known SSZ objects should be encoded. Each object described in the Phase 0 spec is covered. This is important, as many of the clients aiming to serialize/deserialize objects directly into structs/classes do not support (or have alternatives for) generic SSZ encoding/decoding.
This test-format ensures these direct serializations are covered.
Note that this test suite does not cover the invalid-encoding case: SSZ implementations should be hardened against invalid inputs with the other SSZ tests as guide, along with fuzzing.
Each SSZ type is a handler
, since the format is semantically different: the type of the data is different.
One can iterate over the handlers, and select the type based on the handler name. Suites are then the same format, but each specialized in one randomization mode. Some randomization modes may only produce a single test case (e.g. the all-zeroes case).
The output parts are: roots.yaml
, serialized.ssz
, value.yaml
roots.yaml
root: bytes32 -- string, hash-tree-root of the value, hex encoded, with prefix 0x
serialized.ssz
The raw encoded bytes.
value.yaml
The same value as serialized.ssz
, represented as YAML.
A test-runner can implement the following assertions:
value
, SSZ-serialize it: the output should match serialized
serialized
value, and see if it matches the parsed value
serialized
, then serialize the result,
and verify if the bytes match the original serialized
.value
(or deserializing serialized
), Hash-tree-root it: the output should match root
serialized
—SSZ serialization
root
—hash_tree_root function
SSZ SimpleSerialize


We facilitate the analysis of full factorial mating designs with mixed-effects models. The observed data functions extract the variance explained by random and fixed effects and provide their significance. We then calculate the additive genetic, nonadditive genetic, and maternal variance components explaining the phenotype. In particular, we integrate nonnormal error structures for estimating these components for nonnormal data types. The resampled data functions are used to produce bootstrap confidence intervals, which can then be plotted using a simple function. This package will facilitate the analyses of full factorial mating designs in R, especially for the analysis of binary, proportion, and/or count data types and for the ability to incorporate additional random and fixed effects and power analyses. The paper associated with the package including worked examples is: Houde ALS, Pitcher TE (2016) <doi:10.1002/ece3.1943>.
| Version: | 1.2 |
| Depends: | R (≥ 3.3.3) |
| Imports: | lme4, afex |
| Published: | 2017-04-12 |
| Author: | Aimee Lee Houde [aut, cre], Trevor Pitcher [aut] |
| Maintainer: | Aimee Lee Houde <aimee.lee.houde at gmail.com> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | https://www.r-project.org |
| NeedsCompilation: | no |
| CRAN checks: | fullfact results |
| Reference manual: | fullfact.pdf |
| Package source: | fullfact_1.2.tar.gz |
| Windows binaries: | r-devel: fullfact_1.2.zip, r-release: fullfact_1.2.zip, r-oldrel: fullfact_1.2.zip |
| OS X binaries: | r-release: fullfact_1.2.tgz, r-oldrel: fullfact_1.2.tgz |
| Old sources: | fullfact archive |
Please use the canonical form https://CRAN.R-project.org/package=fullfact to link to this page.


After the last question, go to the previous page to save your score.
Score counter:
0
Alan Shepard
Gas Grissom
Walter Shirra Jr
21
3
1
Dog
Cat
Ham(shempanze)
LC-5
FA-18
LC-1
Hem
Enos
Joy
48 hours
42 weeks
2 hours
35
18
77
John Glenn
Alan Shepard
John Carpenter
Leroy Cooper
Gas Grissom
Walter Shirra
Previous page
Exit


Invest in CSB Bank’s Rs 410cr IPO for listing gains only
Those desirous of long term price appreciation would be better off looking elsewhere. The reasons are not hard to decipher. Firstly, CSB just about turned profitable on the net level and that, too, for the first half of the current financial year. It reported losses (see table) for the previous three financial years stretching back to 2017 and its Return on Net Worth was negative as well for FY 2016-17, FY 2017-18 and FY 2018-19.
by Moneycontrol NewsShailendra Bhatnagar, CNBC Awaaz
CSB Bank Ltd’s 410-crore rupee initial public offering, which closes for subscription on Tuesday, could be subscribed at least 50 times, going by the chatter in the market. That may give lucky allottees a nice bounce on December 4th when shares list. But the moot point is: should investors cash out on listing day or hold on to the shares in the fond hope of reaping a fortune in the medium term?
Those desirous of long term price appreciation would be better off looking elsewhere. The reasons are not hard to decipher. Firstly, CSB just about turned profitable on the net level and that, too, for the first half of the current financial year. It reported losses (see table) for the previous three financial years stretching back to 2017 and its Return on Net Worth was negative as well for FY 2016-17, FY 2017-18 and FY 2018-19.
Intense competition down South, a key market for CSB, resulted in its financial benchmarks being on the modest side, relative to its rivals. CSB’s net interest margin, has risen from 2.9% in FY18-19 to 3.43% in the first six months of the current year, but lags most competitors.
Interestingly, the IPO is more an Offer For Sale from 26 existing investors who are collectively offering 1.9778 crore shares in a price band of 193-195 rupees per share. This totals to 385.6 crore rupees @195/share. Additionally, the bank is issuing 12.43 lakh shares to raise 24 crore rupees to augment Tier 1 capital and to meet future capital requirements. Minimum lot is of 75 shares (`14625@195/shr) for retail investors and in multiples thereafter.
So, pretty much a lion’s share of the funds raised are going mainly to institutional investors, many of whom such as HDFC Standard Life Insurance Company, Reliance Nippon Life, ICICI Prudential Life and Federal Bank, are exiting altogether.
The main promoter of CSB is FIH Mauritius Investments Ltd., owned by Canadian billionaire Prem V Watsa. FIHM will retain a 49.73 percent stake post-issue from 50.09 percent now.
Another overhang on the listed stock will be the Reserve Bank of India’s guidelines where bank promoters (FIHM) have to pare stake to 40 percent within 5 years of listing and to 15 percent within 15 years. An equity supply overhang in a mediocre bank beset with cut-throat competition is hardly a recipe for long term equity gains.
Now, let us look into CSB’s main businesses. The 98-year old lender is a major beneficiary of Indians’ growing lust for gold. Loans against the precious metal account for 31 percent of total loans. Typically, CSB lends an average ticket size of 60,000 rupees as gold loan to an average borrower. The lender had 522,248 active loan accounts spread over 3,333 crore rupees. Loans against gold are rising rapidly as the value of the metal appreciates and more borrowers use it as a collateral. Such loans stood at 3,782 crore rupees at the end of September 30. The bank mentions in its risk factors that a potential drop in gold prices may impact NPAs adversely.
Investors wanting to hold the stock for the longer term could draw comfort from the presence of well known investors like Vallabh Bhanshali and Satpal Khattar. Bhanshali has 2.185 million CSB shares and Khattar owns 1.773 million shares in the bank. Both investors will be retaining their stakes in the bank.
Moreover, CSB will focus on more than doubling its existing network of 414 branches over the next five years in a bid to reduce its geographic dependency on the four southern states.
CSB Bank’s Financials: Source DRHP.
| Financial Year | Net Profit/Loss (Rs Crs) | Basic EPS (Rs) | RONW % | Net NPA (Rs Crs & %) | GNPA ( Rs Crs & %) | Provisioning coverage Ratio (PCR) | Gold Loan as % of Total Loans | NIM (In %age) |
| 1HFY20 | 44.3 | 3.86 | 2.88 | Rs 222 cr (1.96%) | Rs 326 cr (2.86%) | 79.45 | 33.2 | 3.43 |
| FY18-19 | -65.7 | -7.9 | -6.74 | Rs 241 cr (2.27%) | Rs 531 cr (4.87%) | 78.16 | 31 | 2.8 |
| FY17-18 | -127 | -15.7 | -35.94 | Rs 264 cr (2.87%) | Rs 764 cr (7.89%) | 75.83 | 26 | 2.57 |
| FY16-17 | -58 | -7.66 | -10.62 | Rs 329 cr (4.12%) | Rs 600 cr (7.25%) | 65.5 | 24 | 2.11 |
CSB’s Financial Year 2018-19 ~ peer comparison
| Bank | Net Profit/Loss Rs Crs | Basic EPS Rs | RONW % | Net NPA Rs Crs & % | GNPA Rs Crs & % | NIM % |
| CSB Bank | -65.7 | -7.9 | -6.74 | Rs 241 cr (2.27%) | Rs 531 cr (4.87%) | 3.43 |
| DCB Bank | 325.4 | 10.5 | 11.3 | Rs 154 cr (0.65%) | Rs 439.5 cr (1.84%) | 3.78 |
| Federal Bank | 1316.2 | 6.7 | 9.8 | Rs 1626 cr (1.48%) | Rs 3261 cr (2.92%) | 3.17 |
| South Indian Bank | 248 | 1.4 | 4.9 | Rs 2164 cr (3.45%) | Rs 3132 cr (4.92%) | 2.46 |
| City Union Bank | 682.9 | 9.6 | 14.1 | Rs 592 cr (1.81%) | Rs 977 cr (2.95%) | 4.4 |
| Karur Vysya Bank | 211 | 2.6 | 3.3 | Rs 2420 cr (4.98%) | Rs 4450 cr (8.79%) | 3.88 |
Varun Dubey and Sumit Mehrotra contributed to the article.


LiveFieldValue
class LiveFieldValue
Field value is an object that holds json values for a DvsField model
Methods
Create a new FieldValue object from json string
[__id description]
[__type description]
Avoids null pointer exceptions by treating this like the empty string we only ever reach this magical method when we have attempted to fetch a key that does not exist on this FieldValue object
Allows us to set default values on a key if we do not have that key set in this FieldValue object
This thing is just a string.
Gets this field with this name, returns default if nothing is found.
Overrides this data with the new input array
Merges in the array data into the field object json
Returns this object as json string
Returns this object as array
This extracts the variables so they may be used.
Un extracts all the keys on this thing could be useful if we need to undo an extract
Details
at line 25
__construct($json, $fieldId, $type)
Create a new FieldValue object from json string
at line 40
[type]
__id()
[__id description]
at line 49
[type]
__type()
[__type description]
at line 64
FieldValue
__get(string $name)
Avoids null pointer exceptions by treating this like the empty string we only ever reach this magical method when we have attempted to fetch a key that does not exist on this FieldValue object
at line 78
mixed
__call(string $name, mixed $args)
Allows us to set default values on a key if we do not have that key set in this FieldValue object
at line 90
string
__toString()
This thing is just a string.
..
at line 103
mixed
get(string $name, mixed $default = null)
Gets this field with this name, returns default if nothing is found.
..
at line 117
void
override(array $input)
Overrides this data with the new input array
at line 132
void
merge(array $input)
Merges in the array data into the field object json
at line 144
string
toJSON()
Returns this object as json string
at line 154
array
toArray()
Returns this object as array
at line 167
void
extract()
This extracts the variables so they may be used.
This is not recommended to do as it will mess up LiveUpdate, but it is needed in certain cases (for example in FieldManager)
at line 181
void
unextract()
Un extracts all the keys on this thing could be useful if we need to undo an extract


{% extends 'base.html' %} {% block title %}Qxf2 Trainer: Tutorial{% endblock %} {% block content %}
We expect this exercise to take you somewhere between 15-minutes to 2 hours. If you take more than two hours, please post what you tried along wtih error messages to our skype channel.
Python has two versions (3.x and 2.7.x) and multiple distributions (official, IronPython, Conda, etc.). Python 3.x is the latest and ideally what we would all use. We'd love to recommend you use Python 3.x. Therefore, for this tutorial, you are going to install the latest official Python 3.x version from the official site.
In keeping with our attempt to help you think in different ways, we have listed three approaches that work. There is no shame or pride in choosing anyone of them. Just choose the method you are comfortable with and proceed.
Once you are done, add the Python executable to your path environment variable. Hint: Google for 'add Python to path environment variable your operating system name'.
After you are done with the exercise listed above, it is time to verify your Python installation. It is a good habit to take small steps and verify them immediately. This will help you avoid getting stuck later on. To verify your setup, pull up your terminal prompt and type python --version. You should see the version you installed listed.
{% endblock %}


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
This indulgent dish combines a prime cut of pork, lashings of butter, cream and delicious Armagnac.
Lay the slices of pork fillet between two sheets of cling film and flatten using a rolling pin to a thickness of about 1cm/½in. Season the flattened slices of pork with salt and freshly ground black pepper.
Heat a knob of the butter in a frying pan over a medium-high heat. Add the pork slices (in batches if necessary) and fry for 1-2 minutes on each side, or until lightly browned and just cooked through. Remove the pork from the pan and set aside on a plate. Keep warm.
Add another knob of butter to the pan and fry the shallot for 1-2 minutes, or until just softened. Increase the heat to high, pour in the Armagnac, then set the alcohol alight using a match. Allow the flames to flare up and then die down. (Caution: Do not allow your face or hair to get too close to the flames. Do not leave unattended.)
Add the stock and 150ml/5fl oz of the cream to the pan and bring the mixture to the boil. Reduce the heat until the mixture is simmering, then add the prunes and return the cooked pork and any pork juices to the pan. Continue to cook for a further 2-3 minutes, or until the pork is completely cooked through.
In a separate pan, heat the mashed potato with the remaining butter and cream until warmed through and well combined.
To serve, divide the mashed potato equally among four serving plates. Place a few slices of the pork onto each serving plate and spoon over the sauce.


1
Click below to download the package files and get started!
Download package files
2
Locally add / update your model code, resources and papers.
3
Use the
Files
tab to sync changes back to EcoSML.
4
Use the
Details
tab to add model documentation, keywords and themes.
5
Use the
Releases
tab to create a versioned release of the model allowing the package show in search.
Close


The Santa Monica Fitness Club is all about getting people fit while keeping it interesting, fun and challenging. It is an accessible fitness regimen designed to produce measurable improvements in function and performance. No hype, no gimmicks and no fads; only really hard workouts from a variety of sources set up to get more out of the time you spend training.
Running, boxing, kettlebell swinging, sandbag lifting, plyometrics and much more are utilized to make you as fit as you can be. Most movements can be scaled to accommodate varying abilities, so whether your as fit as a decathlete or a couch potato, you can still get a great workout!
The classes are run on a “pay what you want” system so there’s no financial obligation to you. You just workout and pay what you think it was worth! Come down and be a part of the SaMo Fitness Club today!


@inproceedings{Belhe:2012:HHW:2432553.2432556,
author = {Belhe, Swapnil and Paulzagade, Chetan and Deshmukh, Akash and Jetley, Saumya and Mehrotra, Kapil},
title = {Hindi Handwritten Word Recognition Using HMM and Symbol Tree},
booktitle = {Proceeding of the Workshop on Document Analysis and Recognition},
series = {DAR '12},
year = {2012},
isbn = {978-1-4503-1797-9},
location = {Mumbai, India},
pages = {9--14},
numpages = {6},
url = {http://doi.acm.org/10.1145/2432553.2432556},
doi = {10.1145/2432553.2432556},
acmid = {2432556},
publisher = {ACM},
address = {New York, NY, USA},
keywords = {HMM, HOG features, Hindi handwritten word recognition, symbol tree},
}


Middleware to proxy requests through a specified index page, useful for Single Page Applications that utilise the HTML5 History API.
Single Page Applications (SPA) typically only utilise one index file that is
accessible by web browsers: usually index.html
. Navigation in the application
is then commonly handled using JavaScript with the help of the
HTML5 History API.
This results in issues when the user hits the refresh button or is directly
accessing a page other than the landing page, e.g. /help
or /help/online
as the web server bypasses the index file to locate the file at this location.
As your application is a SPA, the web server will fail trying to retrieve the file and return a 404 - Not Found
message to the user.
This tiny middleware addresses some of the issues. Specifically, it will change
the requested location to the index you specify (default being /index.html
)
whenever there is a request which fulfills the following criteria:
text/html
,.
(DOT) character andThe middleware is available through NPM and can easily be added.
npm install --save connect-history-api-fallback
Import the library
var history = require('connect-history-api-fallback');
Now you only need to add the middleware to your application like so
var connect = require('connect');
var app = connect()
.use(history())
.listen(3000);
Of course you can also use this piece of middleware with express:
var express = require('express');
var app = express();
app.use(history());
You can optionally pass options to the library when obtaining the middleware
var middleware = history({});
Override the index (default /index.html
)
history({
index: '/default.html'
});
Override the index when the request url matches a regex pattern. You can either rewrite to a static string or use a function to transform the incoming request.
The following will rewrite a request that matches the /\/soccer/
pattern to /soccer.html
.
history({
rewrites: [
{ from: /\/soccer/, to: '/soccer.html'}
]
});
Alternatively functions can be used to have more control over the rewrite process. For instance, the following listing shows how requests to /libs/jquery/jquery.1.12.0.min.js
and the like can be routed to ./bower_components/libs/jquery/jquery.1.12.0.min.js
. You can also make use of this if you have an API version in the URL path.
history({
rewrites: [
{
from: /^\/libs\/.*$/,
to: function(context) {
return '/bower_components' + context.parsedUrl.pathname;
}
}
]
});
The function will always be called with a context object that has the following properties:
url.parse
.String.match(...)
.This middleware does not log any information by default. If you wish to activate logging, then you can do so via the verbose
option or by specifying a logger function.
history({
verbose: true
});
Alternatively use your own logger
history({
logger: console.log.bind(console)
});
Override the default Accepts:
headers that are queried when matching HTML content requests (Default: ['text/html', '*/*']
).
history({
htmlAcceptHeaders: ['text/html', 'application/xhtml+xml']
})
Disables the dot rule mentioned above:
[…] is not a direct file request, i.e. the requested path does not contain a
.
(DOT) character […]
history({
disableDotRule: true
})


$freshChatProvider
sw.freshdesk-chat
The provider for the $freshChat
service. Allows boot-time configuration of the FreshChat widget.
Set the FreshDesk account name. Internally, this will set the link to your support portal.
| Param | Type | Details |
|---|---|---|
| account | string | Your account name |


This is the name that's displayed when you share photos via Photo Mail.
Edit your nameYou can add additional email addresses so that any Photo Mail sent to them will be forwarded to this Everpix account.
Add new email••••••••
Change passwordThe above information is updated live
When syncing to Everpix, each photo is processed and analyzed with our image analysis, before being added to your collection. Collection views are updated soon afterwards.The above stats are updated once a day
Updated … never
Requires OS X 10.6 or newer
Requires Windows XP or newer
iOS 5.1+, iPhone 3GS or iPad 1 and newer
Requires Android 2.2 or newer
Albums and tagged photos of you
Sharing Only
Sync pending…
Error, click reconnect to sync
Sharing Only
All photos
Sync pending…
Error, click reconnect to sync
Photos in sets
Sync pending…
Error, click reconnect to sync
Photo albums
Sync pending…
Error, click reconnect to sync
Photo attachments in your inbox
Sync pending…
Error, click reconnect to sync
Sharing Only
The following devices are connected to Everpix. Click Disconnect to remotely sign out a device:
Your collection contains photos from the following sources:
Subscribe to Everpix and go unlimited
Unlimited PhotosSign up through Daring Fireball
12 MonthsSync some photos from Mac or Windows
6 MonthsGet the Everpix iOS or Android app
6 MonthsShare some photos through Photo Mail or a Photo Page
3 MonthsLet your friends know about Everpix
6 Months 6 months per friendThese are groups of photos that have been shared to photo pages and are accessible by public link.


$ Accessing restricted files..
grabbing files..
$ 404 File not found
Site configured at this address does not contain the requested file.
$ You should go back on road...
Portfolio...


Ruud Helderman
<EMAIL_ADDRESS>April 2021
MIT licensed
Under construction.
Experimental algorithm for gradient noise, with the ambition of being simpler than Perlin noise, with less directional artifacts. Should be suitable for games and simple animations.
Click the image to see it in full size (1024 × 1024 pixels).
The image has been produced with the help of this C module, which implements the following formula:
| x + i |
| d |
| y + j |
| d |
| x + i |
| d |
| y + j |
| d |
where d = 4, s = 4.67970975809363 (far from obvious; explained below) and h1, h2, h3 are hash functions generating pseudo-random numbers in the range (−1, 1). These can be three different functions, or (more likely) the same function with 3 different salts.
To be able to truly appreciate Perlin noise, you have to know where we were coming from. Imagine you would like to randomly generate a heightmap, to be used for terrain rendering in a video game. It is easy enough to generate some random numbers, then interpolate between them. The resulting value noise may look smooth enough in a one-dimensional curve, but in two dimensions, you will clearly see the grid lines, giving our noise an artificial look.
Ken Perlin proved that gradient noise is much more suitable for the job. It's the clever math behind it that makes Perlin noise and Simplex noise everybody's darling. But it's the same math that always made me feel uncomfortable. The interpolations, the coordinate skewing... It made me wonder: isn't there a simpler, more 'direct' function?
In an attempt to keep it readable for a broad audience, I will start off really simple: a one-dimensional curve, defined by a piecewise function, with every subdomain having the same length. Every endpoint (where two subdomains meet) has a pseudo-random height. It is straightforward to connect the dots with straight lines. The result is a 'curve' with G0 continuity: the function is continous (there are no 'jumps'), but steepness (the function's derivative) is not continuous, making the line jagged.
To make the line smooth, we give every endpoint a pseudo-random steepness, and obey that steepness as we connect endpoints. This is easy enough by using third-degree polynomials instead of straight lines to connect the endpoints. The resulting curve has G1 continuity: both the height function and its first derivative are continuous, but the second derivative is not.
We can make the curve even smoother by aiming for G2 continuity. Again, this is not too hard: for every endpoint, explicitly specify a value for the second derivative, and obey that curve as we connect endpoints. Typically, this value is zero. It is also possible to introduce yet another pseudo-random number, specifically for the second derivative of the endpoint, but I suppose that level of randomness is typically considered overkill.
G2 continuity demands a fifth-degree polynomial to connect the endpoints. For G3, you need a 7th-degree polynomial. The smoother the line, the more elaborate the function becomes.
All this is nothing new: Perlin noise was already using third-degree polynomials, and later fifth-degree polynomials, in the way it interpolated between gradients (smoothstep). But it was at this point that I was wondering: is it really necessary to have so many coefficients in the polynomial? Three for G1 continuity, four for G2, and so on. Please note, I am not worried about the performance of these calculations. I am just concerned about the complexity of any such formula. I like to keep things as simple as possible.
Let's try something else: let's use polynomials that are always 'grounded' at their endpoints. Zero height, zero derivative, and depending on our demands, one or more higher-order derivatives that are zero. Nothing random there. The random factor will be in the center of the subdomain. There we will pseudo-randomly choose a height and a steepness, but we will not explicitly specify the higher-order derivatives. So only two pseudo-random numbers are needed to define a single subfunction. And every such number belongs to a single subdomain, rather than being shared between two neighboring subdomains. Nice and simple.
For example, let's say we want G1 continuity. Imagine for subdomain (−1, 1), we have picked two pseudo-random numbers: a for the steepness and b for the height at the center of the subdomain (x = 0). In other words, the curve has a tangent y = ax + b. We need to find a subfunction f that satisfies the following conditions:
The following fifth-degree polynomial does just that:
A polynomial is always perfectly smooth, but continuity is limited at the endpoints, where two different polynomials meet. We can make the endpoints smoother with the following condition, in addition to the conditions listed earlier. This will give us G2 continuity:
It is easy to prove the following 7th-degree polynomial satisfies all conditions:
Notice this looks very similar to our previous polynomial. It isn't hard to guess how to generalize this for higher levels of continuity:
This basically means we can increase smoothness as far as we want, simply by increasing s. But that does not necessarily make the curve better. So far, I have ignored the 'valleys' between the different polynomials:
These 'holes' in our 1D curve will show up as grid lines in 2D noise. We will try to compensate by using overlapping subdomains, taking the sum of the overlapping subfunctions to produce a function without valleys:
This is more difficult for higher values of s. Look what happens to the previous picture when s = 9:
This is because the increasing demand for smoothness at the endpoints, makes the 'valleys' around the endpoints wider, and the hills narrower. Below, I will show how to compensate this by increasing the amount of overlap.
I am taking the liberty of decomposing function f into two separate functions m and c.
This is reminiscent of amplitude modulation: we have a perfectly regular 'carrier' c being modulated by a pseudo-random 'message' m. In line with that analogy, our carrier should be a periodic function. I will not modify c directly; keeping c the way it is makes it easier to replace it later on by other (similar) window functions. Instead I will start defining a new function g as a periodic wrapper around c.
First of all, I will let g transform x to give it a more convenient domain [0, 1].
Domain [0, 1] is a perfect fit for {x}, the fraction of x, defined as x − ⌊x⌋. This extends the domain to (−∞, +∞) and makes g periodic. The period is 1.
I can now use the 'carrier' to explore the idea of overlapping subdomains. By considering only the regular part of the function, leaving the random 'message' m out of the equation, it becomes possible to witness just how effective overlaps will be to fill up the 'valleys'. Basically, this is the same as using constant coefficients a = 0 and b = 1 rather than random numbers.
Let's continue tweaking function g from the previous section. Overlaps warrant some more transformations on x. We must be able to stretch the curve horizontally, making its period d. We must also be able to change its phase by i.
| x + i |
| d |
Now we can overlap d curves with phase 0, 1, ... , d − 1.
| x + i |
| d |
For example, d = 2 means every subdomain has a length of 2. Subdomains are at integer intervals (i), so neighboring subfunctions overlap for 50%. Every (infinitesimal) piece of the X-axis is covered by exactly 2 subfunctions.
From the looks of it, this is insufficient to fill the holes. We should strive to make that curve as straight as possible to prevent directional artifacts when employing the formulas in 2D.
d = 4 looks a lot better:
Obviously, the more overlap, the better the valleys will be filled up. But too much overlap is computationally expensive and may make the landscape bland, due to prominent peaks being averaged out.
One may argue that the overlaps are forcing us to share pseudo-random numbers between neighboring subdomains, thereby eliminating the 'nice and simple' advantage mentioned earlier. Indeed, overlaps are basically our substitute for the interpolations found in other noise algorithms. But where other algorithms require the interpolation formula to be rewritten when there is a need to involve more neighbors, we only need to increase a parameter d. It may not seem like the most efficient approach, but it parallelizes quite well, and it sure is simple.
Yes, I am reluctant to increase d too far. Fortunately, we have another parameter in our formula: it appears the continuity s plays an important role in shaping the curves in such a way that they even out each other. To flatten the curve, you need to 'tune' the two parameters d and s.
The image above was made with d = 4, s = 2. It's pretty good already, but it becomes even flatter when increasing s to 4 or 5. Above 6, valleys become visible again. This was already explained earlier: the 'hills' become narrower as s increases, and eventually they cannot even fill up 25% of their domain, meaning that an overlap d of 4 is no longer sufficient.
Basically we are trying to minimize the range of function g, i.e. the difference between the two extremes of g. Extremes can be found at the following points on the X-axis.
We can calculate the range of g with:
| 2i |
| d |
| 2i + 1 |
| d |
Some results for various combinations of d and s:
| s = 2 | s = 3 | s = 4 | s = 5 | s = 6 | s = 7 | s = 8 | s = 9 | s = 10 | s = 11 | s = 12 | s = 13 | s = 14 | s = 15 | s = 16 | s = 17 | s = 18 | s = 19 | |
| d = 2 | 0.125 | 0.156 | ||||||||||||||||
| d = 3 | 0.0370 | 0.0617 | 0.0581 | 0.00401 | 0.0723 | |||||||||||||
| d = 4 | 0.0156 | 0.0283 | 0.0146 | 0.00584 | 0.0159 | 0.0122 | 0.00410 | 0.0301 | ||||||||||
| d = 5 | 0.00800 | 0.0150 | 0.00490 | 0.00302 | 0.00400 | 0.000892 | 0.00276 | 0.00446 | 0.00285 | 0.00262 | 0.0120 | |||||||
| d = 6 | 0.00463 | 0.00887 | 0.00200 | 0.00147 | 0.00122 | 0.0000685 | 0.000813 | 0.000645 | 0.000134 | 0.000973 | 0.00131 | 0.000692 | 0.00122 | |||||
| d = 7 | 0.00292 | 0.00565 | 0.000931 | 0.000749 | 0.000435 | 0.0000962 | 0.000249 | 0.000100 | 0.000107 | 0.000193 | 0.000104 | 0.000109 | 0.000328 | 0.000400 | 0.000169 | 0.000507 | ||
| d = 8 | 0.00195 | 0.00381 | 0.000480 | 0.000408 | 0.000176 | 0.0000577 | 0.0000844 | 0.0000146 | 0.0000393 | 0.0000389 | 0.00000116 | 0.0000373 | 0.0000459 | 0.0000137 | 0.0000483 | 0.000109 | 0.000125 | 0.0000406 |
The smallest range in every row has been made bold. In general, increasing d makes the ranges smaller. But be careful which one to pick: some rows have a smallest range that is worse (i.e. bigger) than the preceding row.
The range of g can be optimized even further if we are willing to use non-integer values of s. The base of the exponentiation (1 − x2) is always positive within its designated subdomain, so there is no problem in applying a fractional exponent.
It seems plausible (though I haven't proven this) an optimum should be at (or at least near) a combination of d and s that satisfy r(d, s) = 0. This is equivalent to:
Take for example d = 4. The equation then becomes:
One of the roots of this equation is s ≈ 4.67970975809363. The resulting function g looks pretty straight at first sight.
Of course, even with an 'optimal' s, function g will never be a straight line, as it is still the sum of a finite number of polynomials. Here is the same 'line', with the Y-axis scaled a factor 300.
Notice the extremes identified earlier (e.g. x = 0 and x = ½) are no longer opposing extremes; in the diagram above they are both minima! There is a new maximum in between where g'(x) = 0.
It is also worth noting that there is typically more than one value of s that is an optimum for any given d. In fact, the number of optima appears to be equal to d − 1 (I haven't proven this). Here is an exhaustive list for d ≤ 5.
| d | equation to calculate optimal s | optimal s | range(g(x)) |
| 2 | 4s − 2 ⋅ 3s = 0 | 2.40942 | 8.387 ⋅ 10−3 |
| 3 | 2 ⋅ 8s − 2 ⋅ 5s − 9s = 0 | 2.239 | 2.327 ⋅ 10−3 |
| 5.05807 | 7.704 ⋅ 10−4 | ||
| 4 | 16s + 2 ⋅ 12s − 2 ⋅ 7s − 2 ⋅ 15s = 0 | 2.16937 | 9.747 ⋅ 10−4 |
| 4.67971 | 1.690 ⋅ 10−4 | ||
| 7.80135 | 4.569 ⋅ 10−5 | ||
| 5 | 2 ⋅ 16s + 2 ⋅ 24s − 2 ⋅ 9s − 2 ⋅ 21s − 25s = 0 | 2.13128 | 5.016 ⋅ 10−4 |
| 4.50491 | 5.477 ⋅ 10−5 | ||
| 7.22765 | 9.737 ⋅ 10−6 | ||
| 10.6063 | 1.842 ⋅ 10−6 |
Unsurprisingly, more overlap (higher d) gives g a smaller range, meaning the grid lines will be harder to spot. Overlap comes with a price (more calculations), so it's a trade-off. Whatever d you choose, you may want to pick the accompanying s with the smallest range (shown in bold).
We managed to make the range of g very small, though not zero. Basically, we did this by shaping the curves of c so that they (almost) even each other out. It is worth noting that for the combination d = 2, s = 2.40942, there is an easy alternative that does make the range zero. In other words, it perfectly flattens the line defined by g. Just take some kind of mirrored sigmoid function p that approximates c on domain (−1, +1), for example:
| π |
| 2 |
d = 2 is not very interesting (it looked pretty bad in my experiments), but similar alternatives may exist for other optima. For example, any approximation p2 from the list above can be transformed into an approximation of c for the combination d = 4, s ≈ 4.67971 using the following formula:
| p2(2|x| − 1) |
| 4 |
As for the cosine-based approximation, we can generalize this for every even value of d:
| π |
| 2 |
That may even work for every approximation p2. However, many approximations will result in 'bumps', especially for relatively small values of d.
| d |
| 2 |
So far, we have used a simple linear equation as the 'message' function m:
It may be worth investigating other functions. In theory, any function m will do that is smooth on subdomain (−1, +1). The carrier ensures f will be smooth on the endpoints.
For example, m(x) = a x (in other words, simply making b zero) seems to make f band-limited, at the cost of more directional artifacts (though less than in Perlin noise). I still need to investigate this further.
Evaluating g(x) involves d exponentiations with exponent s. Exponentiation with a fractional exponent is typically more expensive than an integer exponent. Instead of pursuing an optimal s, one could also settle for an integer s and instead increase d until the desired range has been reached. That is a trade-off, since increasing d also comes with a price, especially in higher dimensions.
For example, suppose you demand a range < 10−4. With fractional exponents, this is feasible with an overlap d of 4 (when combined with s = 7.80135). For one-dimensional noise, evaluation of g(x) would then require 4 exponentiations. For 2D noise (see below), you'd need 42 = 16 exponentiations, and in 3D, the number is 43 = 64.
With integer exponents, you would be forced to increase d to 6. The exponent s has to be 7; see the table of optima. Such an exponentiation can be implemented with 4 multiplications. The total number of multiplications in one, two and three dimensions will be 4 ⋅ 6 = 24, 4 ⋅ 62 = 144 and 4 ⋅ 63 = 864, respectively. When optimizing for speed, you should carefully investigate how exponentiation performs compared to multiplication. Also keep in mind that exponentiation could probably be accelerated with a lookup table and interpolation, especially since the exponent is a constant, and the base is always in [0, 1].
All we have to do now is bring the random numbers back into the formula:
| x + i |
| d |
| x + i |
| d |
The number of hash calculations (h1 and h2 together) is 2d per unit length. With caching, the number of hash calculations could be optimized to 2 per unit length.
We already saw this formula at the start of this document:
| x + i |
| d |
| y + j |
| d |
| x + i |
| d |
| y + j |
| d |
The number of hash calculations (h1, h2 and h3 together) is 3d 2 per unit square. With caching, the number of hash calculations could be optimized to 3 per unit square.
Extending the formula to higher dimensions should be straightforward, but the number of hash calculations grows exponentially with the dimension. Perlin noise has the same problem. You may be better off with Simplex noise or OpenSimplex noise.
For d = 4, s = 4.67970975809363, I have done amplitude analysis using analysis.c. I let the program generate a 2D noise image 1,000,000 times, calculating the mean and the variance for each individual pixel.
Grid lines are clearly visible in the variance, but the 'depth' of these grooves is subtle. The variance varied between 0.447760 (represented by black pixels in the image) and 0.456864 (the white pixels). That's a difference of only 2%. That suggests grid lines can be detected statistically, but not with the naked eye.
I did the same test with one of the alternate carriers (the cosine). As this carrier is a perfect fit, I was expecting less directional artifacts, but instead the grid lines were more prominent (variance differs by 5.8%). Needs investigation.
To my surprise, doing the same analysis on simplex noise was giving a strong orthogonal grid. That should not be happening, as simplex noise uses coordinate skewing. Grid lines, if any, should be triangular. I must be doing something wrong. Needs investigation.
For d = 4, s = 4.67970975809363, I did spectrum analysis, again using analysis.c. I used FFTW to generate the magnitude of the discrete Fourier transform. My algorithm is giving clear directional artifacts, similar to those in Perlin noise. Simplex noise is much better: frequencies are evenly distributed in all directions.
The following implementations were written with a focus on readability, not on execution speed.
You can plot the 1D curve in Desmos using the following stack of formulas:
I made a 2D reference implementations in C: fpn.c
Other implementations can be found on:
https://helderman.github.io/fractional-polynomial-noise/
Perlin noise may not be perfect, but it sure is fast. My reference implementations of fractional polynomial noise are much slower, especially for higher values of d. Fortunately, there are ways to greatly speed it up.
I am not a mathematician, I am a software engineer with just enough knowledge and experience to understand some of the challenges in this area. I am open for criticism; please let me know if I missed anything.
In case anybody already came up with this idea before I did: my apologies for re-inventing the wheel.
All diagrams have been rendered by Desmos.
Thanks to WolframAlpha for helping me solve a good number of equations.
Thanks to FFTW for helping me do spectrum analysis.


Lesson 6 - One Dimensional Trajectories
This lesson, part of a "fictional" set of physics lessons, created as a demo of JavaScript animation of SVG. The subject is the physics of simple one-dimensional trajectories. The demonstration uses a "high striker" featured at carnivals and fairs. The artwork was created in Adobe Illustrator, exported as SVG and then hand-edited to add the JavaScript.
The lesson consists of a HTML page which comprises the text of the lesson, laid out in standard HTML5. The HTML has two main div elements. One contains the HTML markup that is the text of the lesson. The other has a single HTML object tag that loads the actual SVG. The SVG could just be placed inline within the HTML, but for ease of editing and maintenance it is easier to load it with the object tag. One aspect to note is that the HTML div has a large (10em) margin where the SVG is rendered. The "SVG" div is positioned absolutely so it gets composited on top of the HTML and appears to be beside the HTML when in fact it is on top of it, only it is in the margin of the HTML.
The SVG in turn loads the JavaScript with the SVG script object. Again, the script could be inline, but it is easier to maintain if separate. Also, the script could have been within the HTML, but it would be a little more convoluted to get a handle to the SVG's document object. Also, note that the SVG script object uses xlink:href instead of the src attribute of the HTML script tag.
<script type="text/javascript" xlink:href="../js/lesson6.js" />
The SVG's root svg element looks like this:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" width="280px" height="1024px" viewBox="-20 0 273.268 721.3623" onload="on_load(evt)"/>
A few points to note. First, we need to declare the xlink namespace because it is needed for SVG's script element. Seond we declare the view position , which could be omitted as (0,0) is the default. And the height and width, which are essential. We also declare the viewBox, which are the real-world coordinates that are mapped to the corners of th height and width box we declare.
This is needed because Illustrator creates all drawings in points and has no concept of coordinate systems, so we determine the coordinates of the corner of the drawing in Illustrator's point (page) based coordinate systems and declare the viewBox with those coordinates. Fortunately, we don't have to do that. The script used to export the code from Illustrator (see the Colophon for details) calculates the values and writes out the viewBox for us.
Finally, note that we have also set up our SVG to receive the "onload" event . The handler on_load will be called with a SVG event object (which is slightly different than a vanilla HTML event) when the SVG section of our EPUB has been loaded.
The SVG itself is fairly straightforward. The various pieces, the high striker boady, labels, etc. are all fairly normal. Two key elements are that the "traveller" (the weight that moves up and down) and the sedgehammer are separate groups so we can easily animate them. Now, let's look at the JavaScript itself.
First, the handler for the onload event:
function on_load(evt) {
svgDoc = getSVGDoc(evt.target);
sledge = svgDoc.getElementById('Sledge');
traveller = svgDoc.getElementById('Traveller');
info = svgDoc.getElementById('Velocity');
bellSound = window.parent.document.getElementById("audio-bell");
hitSound = window.parent.document.getElementById('audio-hit');
}
function getSVGDoc(node) {
if (node.nodeType == 9)
return node;
else
return node.ownerDocument;
}
First, we call getSVGDoc to get the SVG document object. Usually, the event object passed to our handler is an HTML node which whose owner document is the SVG document, but in older browsers it was sometimes the SVG document itself.
Then we we search for three special SVG elements we want for the animation: the traveller, the sledge and a text object we will use to output information about the animation as it occurs. We also search for two audio elements so we can play sounds. Note that these audio elements are actually in the HTML body, NOT in the SVG. Audio support in SVG is a little iffy from browser to browser so it is easier and more consistent to put the audio in the HTML and call those elements from our JavaScript.
The next important piece is the handler for the mousedown on the sledge, which we use to trigger the animation:
<g id="Sledge" onmousedown="OnMouseDownSledge(evt)">
And the handler looks like this:
function OnMouseDownSledge(evt) {
if (traveling == false) {
traveling = true;
setSledge( -90 );
startTime = new Date();
initialVelocity = 13.85;
hitSound.play();
intervalID = window.setInterval('next_update()', 16);
}
}
We first check that we aren't already in the middle of an animation - if not we set the flag to indicate that we have started animating. Then we rotate the sledgehammer to hit the fulcrum and start the traveler upwards. We record the start time, set the initial velocity to an arbitrary constant that is just sufficient to ring the bell. Then we call the HTML audio element to make the sound of the sledge hitting the fulcrum. Finally, we call the browser's setInterval function, telling it to call the next_update function every 16 milliseconds. The is effectively telling it to call as often as it can. It will continue to call that function until we call the clearInterval function on the browser and pass the intervalID returned by the call to setInterval.
The setSledge function is quite simple:
function setSledge( angle ) {
sledge.setAttribute("transform", "rotate("+ angle + " " + sledgeAnchorX + " " + sledgeAnchorY + ")");
}
It just sets the transform attribute of the sledge's group element to rotate the sledge around the sledgeAnchorX and sledgeAnchorY.
All the real work happens in the next_update method:
function next_update () {
elapsed = (Date.now() - startTime.getTime()) / 1000.0;
velocity = initialVelocity - deltaTime * gravity;
posY = elapsed * initialVelocity - 0.5 * gravity * elapsed * elapsed;
if (posY >= 9.7) {
posY = 9.7;
bellSound.play();
}
else if (posY <= 0 ) {
posY = 0;
traveling = false;
hitSound.play();
window.clearInterval( intervalID );
}
if (deltaTime > 1.0)
setSledge(0);
traveller.setAttribute("y", posY + 0.4778 );
info.firstChild.nodeValue = ( 't: ' + elapsed.toFixed(1) + ' v: '
+ velocity.toFixed(1) + ' y: ' + posY.toFixed(1));
}
We first fetch the current time and get the elapsed time in seconds since the animation started. We use that to calculate current velocity and from that the current y position of the traveler. If the traveler has reached the belll, we make sure it doesn't go too far upwards and call the HTML audio element to ring the bell.
If, on the other hand, the traveler has reached the bottom, we ensure it doesn't drop further, set the animation flag to false and call the HTML audio element to make the thump sound again. The we call the browser with the intervalID to stop the calls to next_update.
Note that we also check to see if one second has passed since the animation started and, if so, we put the sledge back where it started.
Finally, we set the traveler's position and update the info text.
And that's it! Click on this link and see the animation in all it's traveling glory!


Introduction
This is a minimal working example of a research blog. It is based on templates I found online, extended with bits and pieces to make it easier to use for programming language researchers.
What it does
- It uses
jekyll-scholar
to make it easy to cite papers in a blogpost and/or build bibliographies. - It has Google Analytics ready for use.
- It is easy to add Disqus comments to individual posts
- It has
mathjax
enabled so you can type in some fancy greek.
Why?
I was wanting an easy blog tool to write blog posts about my research. However, using Wordpress and the linkes requires a webserver which has PHP and whatnot enabled. I am a researcher. I dont want to spend time configuring that stuff.
Most researchers have a webspace available at their university and can put some static html files on there. That is what this thing does. You build it, you rsync it and you are done. Easy.
Initial setup
There is some setup involved to get this blog up and running for you personally. We will go over each part.
Comments
To enable comments you will need a Disqus account. Go over to
https://disqus.com/ and create an account. After you have set that up and have
verified your account you should be able to add Disqus to your website by going
to https://disqus.com/admin/create/. Follow the tutorial and then you should
see the code to add Disqus to a universal webpage. An example might look like
the one below. Once you have this code, replace the existing code in
_includes/comments.html
with yours. Be sure to keep in the if
-test, this is
what enables you to add them to your site.

Please enable JavaScript to view the comments powered by Disqus.
Assuming you have set all this up you can open up any post from the _posts
directory and add a commenting section to the bottom of that post by changing
the header.
A regular post will look something like this:
---
layout: post
title: My super cool post
---
If you want comments in the end just change it to the following:
---
layout: post
title: My super cool post
comments: true
---
Any management of your comments and/or settings should be taken care of on the Disqus website.
Google Analytics
To enable analytics you will have to create a free account on
http://www.google.com/analytics/. Again, you will get some simple
copy/paste-able code. Replace the code in _include/google_analytics.html
with
your own code.
Once you have that copied all your webpages will be tracked by the Google
Analytics engine. This is done because of the templating system of Jekyll. If
you head over to _layout/default.html
page, which is the default template for
all your pages, you will see that there is a line:
{% include google_analytics.html %}
which includes the JavaScript on each page. If you don’t want fancy analytics
you can simply turn them off by removing the line from the
_layout/default.html
page.
Citations
Citations are a bit of a trick to get working. You can either use them to list your own publications, or to actually add resources to a webpost. Let’s assume for a moment here I have publications. Ahum.
I have a bibtex file named journals.bib
:
@inproceedings{pyla2011composing,
author = {Pyla, Hari K.},
title = {Composing Locks by Decomposing Deadlocks},
booktitle = {Proceedings of the ACM International Conference Companion on Object Oriented Programming Systems Languages and Applications Companion},
series = {OOPSLA '11},
year = {2011},
isbn = {978-1-4503-0942-4},
location = {Portland, Oregon, USA},
pages = {67--70},
numpages = {4},
url = {http://doi.acm.org/10.1145/2048147.2048176},
doi = {10.1145/2048147.2048176},
acmid = {2048176},
publisher = {ACM},
address = {New York, NY, USA},
keywords = {concurrent programming, deadlock detection and recovery, program analysis, runtime systems, speculative parallelism and coarse-grain speculation},
}
@inproceedings{swalens2014towards,
author = "Swalens, Janwillem and Marr, Stefan and De Koster, Joeri and Van Cutsem, Tom",
year = "2014",
title = "Towards Composable Concurrency Abstractions",
editor = "Donaldson, Alastair F. and Vasconcelos, Vasco T.",
booktitle = "{\rm Proceedings 7th Workshop on}
Programming Language Approaches to Concurrency and Communication-cEntric Software,
{\rm Grenoble, France, 12 April 2014}",
series = "Electronic Proceedings in Theoretical Computer Science",
volume = "155",
publisher = "Open Publishing Association",
pages = "54-60",
doi = "10.4204/EPTCS.155.8",
}
To add all all the references listed in the file journals.bib
into a post I
just have to put {% bibliography --file journals.bib %}
into the post and that will generate the following output.
- [swalens2014towards] Swalens, J., Marr, S., De Koster, J., & Van Cutsem, T. (2014). Towards Composable Concurrency Abstractions. In A. F. Donaldson & V. T. Vasconcelos (Eds.), \rm Proceedings 7th Workshop on Programming Language Approaches to Concurrency and Communication-cEntric Software, \rm Grenoble, France, 12 April 2014 (Vol. 155, pp. 54–60). Open Publishing Association. doi:10.4204/EPTCS.155.8
- [pyla2011composing] Pyla, H. K. (2011). Composing Locks by Decomposing Deadlocks. In Proceedings of the ACM International Conference Companion on Object Oriented Programming Systems Languages and Applications Companion (pp. 67–70). New York, NY, USA: ACM. doi:10.1145/2048147.2048176 PDF
You can also attach a .pdf file to a reference entry as well. First, check the
keyword of the bibtex entry. In my example I have used pyla2011composing
for
the first reference. Notice that in this git repository there is a directory
named repository/
. If you put a file in there with the name being a keyword in
any bibtex entry (e.g., pyla2011composing.pdf
), jekyll will detect this file
and automatically insert a pdf link after the citation.
Bibliography
There is a page available to list your own bibliography. This allows you to list
your own publications based on seperate bib files. Check out bibliography.md
for more details. Basically the page just generates three seperate bibliography
tables. One for journals, conferences and workshops. You can replace the content
in this files to your liking.
Citing
You can cite papers as well from any bibliography (Pyla, 2011). To do so you can take several approaches. Recall that your
blog has a “default” references file. In this particular case it is
bibliography.bib
which is located in _bibliography/
. Any entry from that
file can be cited using {% cite key %}
. However, if you
want to cite a specific reference from a file you have to specify that file
explicitly. For example, the citation (Pyla, 2011) is inserted using {% cite pyla2011composing --file journals %}
because the entry is not present in the default .bib
file, but in an
arbitrary file called journals.bib
.
To list all the references that you have listed in a post you have to explicitly
tell Jekyll to generate them. For example, I have cited entries from the file
journals.bib
so at the end of this post I have inserted {%
bibliography --cited --file journals %}
. The --cited
flag means
that only cited references will be listed and the --file
specifies the files
from which the imports came. Obviously, if you cite from mutliple files you have
to insert all the files seperately.
Mathjax
Mathjax is a very powerful Latex renderingtool in JavaScript. However, it is not
as simple as copy-pasting some code in between $$
. I have provided a few
abstractions (mathpartir in particular) in a file _includes/mathjaxmacros.html
. If
you want to write using these abstractions, make sure to include them in every
blog post you need them in by adding the {% include mathjaxmacros.html %}
directive
to the top of your post.
Then it is somewhat easier to paste mathpartir code in there. To demonstrate, have the STLC application rule.
The above rule has been generated by the following syntax in the post. Note that there are some nasty prefixed and suffixes to keep the markdown parser in check.
{% include mathjaxmacros.html %}
{% raw %}{::nomarkdown}
$$
\inferrule[T-App]
{\Gamma \vdash t_1 : T_{11} \rightarrow T_{12} \quad \Gamma \vdash t_2 : T_{11} }
{\Gamma \ \vdash t_1 t_2 : T_{12} }
$$
{:/}{% endraw %}
References
- [pyla2011composing] Pyla, H. K. (2011). Composing Locks by Decomposing Deadlocks. In Proceedings of the ACM International Conference Companion on Object Oriented Programming Systems Languages and Applications Companion (pp. 67–70). New York, NY, USA: ACM. doi:10.1145/2048147.2048176 PDF


Directions for using the Course Request Form:
Step 1. User Information:
Fill in your Plato username and password, then click the button to
authenticate. Depending on how you arrived to this page, this authentication step
may be performed for you; on such cases, simply start at Step 2.
Step 2. Courses Selection:
After authenticating, click on the 'Step 2. Courses Selection'
tab. Select a department, term, and course. Doing so will display the sections offered.
Select one or more sections, and click the 'Add Selected Sections to the
Request' button. These sections will appear to the right, in the 'Requested
Courses' box. Repeat Step 2 as needed.
Step 3. Requested Courses:
The 'Requested Courses' box will display the list of courses you are requesting to have
created in Plato. At the bottom of each requested course will be icon
button controls to copy previous content (which now includes archived
course content), add the course to a cross-listing set, and
remove that particular course from the request. The Icon Button Legend
at the top of the 'Requested Courses' box identifies which icon button
corresponds to which control.
Step 4. Review & Submit Course Request:
Be sure to add any wanted previous content or specify cross-listing sets before doing this step!
(See Step 3)
Click the 'Step 4. Review & Submit Course Request' button (this button will
display below the box for Steps 1 & 2 once one or more courses have been added to
the course request) to review what will be submitted for your course request. If the request looks
accurate, click on the 'Submit Course Request' button.


Final six teams unveiled for inaugural ATP Cup
SYDNEY, Nov 14 — A Grigor Dimitrov-led Bulgaria was among the final six teams announced today for the ATP Cup in Australia — the new world tennis team event.
Chile, Poland, Uruguay, Moldova and Norway were the other countries to make the grade, based on the ranking of their number one singles player at the second entry deadline of November 13.
The rest of the 24-nation field was announced in September, although Switzerland later pulled out after Roger Federer opted to skip the tournament.
The field will be split into six groups across Sydney, Brisbane and Perth.
As the highest-qualifying country at the second deadline, Bulgaria replace the Swiss and join Belgium and the Andy Murray-led Great Britain in Group C in Sydney.
The championship takes place from January 3-12 in the lead-up to the year’s first Grand Slam, the Australian Open in Melbourne.
World number one Novak Djokovic will begin his 2020 season representing Serbia with Dusan Lajovic in Brisbane, against France, South Africa and Chile.
Spain’s Rafael Nadal will kick off his campaign in Perth alongside Roberto Bautista Agut facing Japan, Georgia and Uruguay.
Eight teams — with up to five players each — will emerge from the round-robin stage to compete in the knockout phase in Sydney until one is left standing with ties comprising two singles and one doubles match.
Most of the world’s top 30, minus Federer, are taking part.
The new-look start to the year offers A$22 million (RM62.3 million) in prize money and a maximum of 750 singles and 250 doubles ATP rankings points.
It will be held on the back of a revamped Davis Cup, run by the International Tennis Federation in November, bringing together 18 nations in one place for a week at the end of the 2019 season.
ATP Cup draw:
Group A (Brisbane) - Serbia, France, South Africa, Chile
Group B (Perth) - Spain, Japan, Georgia, Uruguay
Group C (Sydney) - Bulgaria, Belgium, Great Britain, Moldova
Group D (Perth) - Russia, Italy, USA, Norway
Group E (Sydney) - Austria, Croatia, Argentina, Poland
Group F (Brisbane) - Germany, Greece, Canada, Australia — AFP


License¶
BSD 3-Clause License¶
Copyright (c) 2017-2018, ML4AAD
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


--- layout: page full-width: true title: Bradley Kennedy subtitle: BSc (Hons) MSc GMBPsS AFHEA cover-img: - "/assets/img/bigimg/welcome.webp" - "/assets/img/bigimg/mac_code.webp" - "/assets/img/bigimg/mac_coffee.webp" ---


Juno <IP_ADDRESS> is a major update.
Core API changes
-
New Jena-based
RdfSerializer for serializing POJOs to RDF/XML, RDF/XML-ABBREV, N-Triple, Turtle, and N3.
Serializes ANY POJOs to RDF, even simple objects and primitives.
-
New Jena-based
RdfParser for parsing RDF/XML, RDF/XML-ABBREV, N3, Turtle, and N-Triple back into POJOs.
-
XmlSerializerContext.XML_autoDetectNamespacesdefault changed to true.
The old default value would cause XML with unmapped namespaces if you didn't manually specify them via the XmlSerializerContext.XML_namespaces annotation.
While setting the default to true is somewhat slower (since the serializer must crawl the POJO tree to find namespaces), the benefits of having it work out-of-the-box outweighs the performance concerns.
For developers concerned about performance, they can always change it back to false and specify the namespaces themselves.
REST server API changes
-
Allow inheritance of
@RestResource annotation.
Serializers, parsers, filters, properties , guards, and converters definitions are automatically inherited from parent classes and interfaces.
-
Enhancements to
RestMethod @RestMethodannotation:
-
New RestMethod.filters() annotation for defining POJO filters at the method level.
-
New
RestMethod.serializersInherit()and RestMethod.parsersInherit() annotations for controlling how serializers and parsers (and associated filters and properties) are inherited from the class.
This replaces the previous addSerializers and addParsers annotations.
-
New
RestServletJenaDefault servlet that includes serialization/parsing support for all Jena-based serializers and parsers.
-
New
DefaultJenaProviderJAX-RS provider that includes serialization/parsing support for all Jena-based serializers and parsers.
-
Eliminated RestServletChild class.
It's redundant with the introduction of inheritable annotations.
-
New methods on
RestServlet:
- RestServlet.createConfigFactory()
- RestServlet.createSerializers()
- RestServlet.createParsers()
These augment the existing getBeanContext() / getSerializers() / getParsers() methods.
REST client API changes
-
New RestCall.setDateHeader(String,Object) method for setting ISO8601 datetime headers.


Maaemo
– Stories
Main navigation
Stories
Home
Book a table
Show menu
Close menu
Home
Menu
About
Press
Career
FAQ
Stories
Shop
Stories
Experiences from the heart of
the restaurant and beyond
Stories
New artwork on the walls of the restaurant
Read story
Maaemo 2017
Read story
Artwork by Christian Houge
Read story
Darkness Burns Bright - Artwork by Christian Houge
Read story
Heartwood Norway. Honed by hand.
Read story
Danny Larsen artwork in the Maaemo kitchen
Read story
Arctic circle gonads got me high
Read story
The people, processes and principles behind our visual identity.


If you have any suggestions for new products or designs you'd like to see or if you have any questions feel free to email us at info@epicirl.shop