Due to limited applications we have had to cancel the Datathon. Apologies to those who submitted entries and we shall try to run the Datathon again in two years’ time. Beyond the sheer competition, the main purpose of the Datathon is to provide a common space for practical discussion and challenges around the applicability of open data and its value to society, business and science. Of course this idea still holds. Please stick with us at the conference for interesting and lively discussion on these topics!
Free and premium open data and APIs – an opportunity to explore the best of both worlds
Join from anywhere in the world!
In recent years data has become the new oil. Indeed, just like oil, it needs to be discovered, extracted from its sources and refined from the raw material into products with a high added value. Following the analogy, this is rarely an easy task and consequently more and more sophisticated methods and machinery have been developed that allow for cost-efficient means that assist the whole data lifecycle. As a consequence a large amount of actionable datasets is now available for exploitation in data-intensive applications and domains, following different business models. This is especially the case of structured data accessible in the Web both through dedicated APIs or freely available in the form of (Linked) Open Data. However, though important steps have been taken in this direction, there seems to be still a gap between the potential social and economic benefits of the use of large-scale data in applications and the current level of adoption.
This scenario has inspired the K-CAP 2013 Datathon, whose main objective is to demonstrate the value of Open Data through innovative applications. Additional objectives include to identify possible pitfalls along the value chain of the data, and second, to draw a number of conclusions that allow the communities involved in generating and exploiting large-scale data, to deal with such difficulties and flatten the ground for data-intensive applications in the near future.
The Challenge
We invite researchers, developers and practitioners to join us in the Datathon and turn this vision into a reality. We are calling for teams with a maximum of four members to develop the best data-intensive applications that the current technologies and members’ skills permit in a challenging setting and with a limited amount of time.
We expect highly innovative data-intensive applications, this is the most important thing! So, you are free to decide the topic and domain. However, we recommend applications that cover one or several of the following categories:
- Social responsibility applications for solving problems in societies and the world.
- Business applications around a business idea to improve economic competitiveness.
- Surprising applications, bringing fresh air and inspiration to the K-CAP 2013 audience.
The Resources
Though you are free to use any kind of open data or resource for your application#, provided it is available online, this datathon is powered by several market places, APIs and analytics tools to speed up the process to value. This way you can minimize the time spent on data discovery, cleansing, and structuring and concentrate on your application while having access to high quality data.
- Data Markets/Sources:
- datamarket.com/
- factual.com/
- datamarket.azure.com/browse/data
- www.infochimps.com/marketplace
- www.qunb.com/
- http://www.quandl.com/
- Companies Sharing their data:
- bbyopen.com/
- ebayodata.cloudapp.net/docs
- www.lendingclub.com/info/download-data.action
- www.prosper.com/tools/DataExport.aspx
- www.yelp.com/academic_datase
- APIs:
- Prediction: https://bigml.com/developers
- Prediction: https://developers.google.com/prediction/
- Open Data: http://www.junar.com
- Text APIs:
- http://www.alchemyapi.com/
- http://www.uclassify.com/
- http://www.bitext.com/bitext-api-2.html
- http://kbsportal.com/docs
Several companies mentioned in the table are sponsoring the datathon by providing free access to their paid resources for the duration of the Datathon.
Keep your applications open and modular! At the Datathon, we will reveal a new requirement. Participant teams who manage to achieve this new requirement and extend their application with it will receive five extra points. This may well mean the difference between winning the challenge or staying anonymous!
Final Day of the Datathon
The Datathon will end with a one-day workshop held in collocation with K-CAP 2013 in Banff (Alberta, Canada), where participant teams will have the opportunity to finalize their applications. The companies and organizations offering data and/or API resources will be non-stop available during that day through video conferencing tools for questions and support. All teams will have the opportunity to demo their applications live at a session of the K-CAP 2013 conference.
Awards
The best application of the Datathon will be awarded with $2000.
Once the workshop is over, an online voting system will be available until the final day of of K-CAP 2013 for anyone willing to vote for the best Datathon application. To this purpose, all applications will need to be online. Moreover, all K-CAP participants will also vote your presentation at the demo session.
We will choose the winner combining the online votes obtained by your applications, the votes obtained during K-CAP, and the points you earned during the Datathon through the additional requirements.
The award will be handed out Prof Nigel Shadbolt (co-founder, together with Sir Tim Berners-Lee) of the recently created Open Data Institute (http://www.theodi.org/)
Registration
Although we want to see as many of you as possible in Banff, we are aware this is not always possible. The team members who cannot make it to Banff will still be allowed to work with their teams remotely during the workshop.
Fill in the submission form at https://www.easychair.org/conferences/?conf=kcap2013datathon and send us a 1 page document with the following information:
-
Name and abstract of your application idea (200 words maximum).
-
Main category it belongs to (social responsibility, business, or surprising).
-
Team members (Name, Last Name, email address, institution)
- Datasets
Important dates
Registration deadline – May 23rd
Datathon starts – May 24th
Datathon workshop at K-CAP – June 23rd.
Applications available on the Web for everybody to vote – June 23rd (upon workshop finishes)
Online voting system available from June 24th and 25th
Demo session at KCAP where applications are showcased and attendees vote – June 24 or 25th
Winners are announced – June 25 or 26th


📱 With her blog post about toxic bro-culture at Uber, Susan Fowler proved that one person can make a difference - Recode
🏛 The Better Care Reconciliation Act: the Senate bill to repeal and replace Obamacare, explained - Vox


Module actionlib
Actionlib implementation for Lua. This module and its sub-modules provide tools to make use of actionlib from within Lua.
Copyright© Tim Niemueller, Carnegie Mellon University, Intel Research Pittsburgh
Release: Released under BSD license
Functions
| action_client (name, type, flags) | Create a new action client. |
| action_server (name, type, goal_cb, spin_cb, cancel_cb) | Create a new action server. |
Functions
- action_client (name, type, flags)
-
Create a new action client. This is a convenience method for ActionClient:new(). Since no registration is performed it is ok to use the constructor directly.
Parameters
- name: name of the action client
- type: type of the action (i.e. the package-prefixed action file)
- flags: Optional table of flags, passed as named arguments exactly as in the table
- action_server (name, type, goal_cb, spin_cb, cancel_cb)
-
Create a new action server. This is a convenience method for ActionServer:new(). Since no registration is performed it is ok to use the constructor directly.
Parameters
- name: name of the action server
- type: type of the action (i.e. the package-prefixed action file)
- goal_cb: goal callback
- spin_cb: spin callback
- cancel_cb: cancel callback (optional)


WE SERVE OUR CUSTOMERS WITH
Organic growing
Our street-style drinks are bold, imaginative and deliciously messy.
You can't drink all day if you don't start in the morning.


Share your holiday dreams
And find the perfect partner to fullfill it
hello
And find the perfect partner to fullfill it
Based in Chicago. I love playing tennis and loud music.
I'm a happy person that loves cats and climbing on mountains.
I get my inspiration from nature and objects around me. I have a passion to colours, typography and skateboards.
Based in Chicago. I love playing tennis and loud music.


You are viewing an historical archive of past issues. Please
report new issues to the appropriate project issue tracker on
GitHub.
Comments
-
Greg Hurrell
Quick reminder on how to do this:
aws put s3.wincent.com/synergy/releases/synergy-4.4.zip \ ~/local/path/to/Synergy4.4.zip
Would upload
Synergy4.4.zip
to the buckets3.wincent.com
with keysynergy/releases/synergy-4.4.zip
, from where it could be downloaded using any of: -
Greg Hurrell
And to be publicly readable:
aws put s3.wincent.com/synergy/releases/synergy-4.4.zip?acl --set-acl=public-read
Or more briefly:
aws put s3.wincent.com/synergy/releases/synergy-4.4.zip?acl --public
-
Greg Hurrell
It's out.
-
Greg Hurrell
Status changed:
- From: new
- To: closed
Add a comment
Comments are now closed for this issue.


Login
Register
php if(isset($_GET['error'])) echo "
*Username already exists!
"; ?>
Enter as Guest
Forgot Password?
php if(isset($_GET['error'])) echo "
*Username already exists!
"; ?>
php if(isset($_GET['error'])) echo "
*Email already exists!
"; ?>
*Passwords do not match!"; ?>
×
Insert your email to get a new password
Email:
Confirm
Close


Policies.UCBoost module¶
The UCBoost policy for bounded bandits (on [0, 1]).
Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
Warning
The whole goal of their paper is to provide a numerically efficient alternative to kl-UCB, so for my comparison to be fair, I should either use the Python versions of klUCB utility functions (using kullback
) or write C or Cython versions of this UCBoost module. My conclusion is that kl-UCB is always faster than UCBoost.
-
Policies.UCBoost.
c
= 0.0¶ Default value for better practical performance.
-
Policies.UCBoost.
tolerance_with_upperbound
= 1.0001¶ Tolerance when checking (with
assert
) that the solution(s) of any convex problem are correct.
-
Policies.UCBoost.
CHECK_SOLUTION
= False¶ Whether to check that the solution(s) of any convex problem are correct.
Warning
This is currently disabled, to try to optimize this module! WARNING bring it back when debugging!
-
Policies.UCBoost.
squadratic_distance
(p, q)[source]¶ The quadratic distance, \(d_{sq}(p, q) := 2 (p - q)^2\).
-
Policies.UCBoost.
solution_pb_sq
(p, upperbound, check_solution=False)[source]¶ Closed-form solution of the following optimisation problem, for \(d = d_{sq}\) the
biquadratic_distance()
function:\[\begin{split}P_1(d_{sq})(p, \delta): & \max_{q \in \Theta} q,\\ \text{such that } & d_{sq}(p, q) \leq \delta.\end{split}\]The solution is:
\[q^* = p + \sqrt{\frac{\delta}{2}}.\]\(\delta\) is the
upperbound
parameter on the semi-distance between input \(p\) and solution \(q^*\).
-
class
Policies.UCBoost.
UCB_sq
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.IndexPolicy.IndexPolicy
The UCB(d_sq) policy for bounded bandits (on [0, 1]).
It uses
solution_pb_sq()
as a closed-form solution to compute the UCB indexes (using the quadratic distance).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
c
= None¶ Parameter c
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= P_1(d_{sq})\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
Policies.UCBoost.
biquadratic_distance
(p, q)[source]¶ The biquadratic distance, \(d_{bq}(p, q) := 2 (p - q)^2 + (4/9) * (p - q)^4\).
-
Policies.UCBoost.
solution_pb_bq
(p, upperbound, check_solution=False)[source]¶ Closed-form solution of the following optimisation problem, for \(d = d_{bq}\) the
biquadratic_distance()
function:\[\begin{split}P_1(d_{bq})(p, \delta): & \max_{q \in \Theta} q,\\ \text{such that } & d_{bq}(p, q) \leq \delta.\end{split}\]The solution is:
\[q^* = \min(1, p + \sqrt{-\frac{9}{4} + \sqrt{\frac{81}{16} + \frac{9}{4} \delta}}).\]\(\delta\) is the
upperbound
parameter on the semi-distance between input \(p\) and solution \(q^*\).
-
class
Policies.UCBoost.
UCB_bq
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.IndexPolicy.IndexPolicy
The UCB(d_bq) policy for bounded bandits (on [0, 1]).
It uses
solution_pb_bq()
as a closed-form solution to compute the UCB indexes (using the biquadratic distance).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
c
= None¶ Parameter c
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= P_1(d_{bq})\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
Policies.UCBoost.
hellinger_distance
(p, q)[source]¶ The Hellinger distance, \(d_{h}(p, q) := (\sqrt{p} - \sqrt{q})^2 + (\sqrt{1 - p} - \sqrt{1 - q})^2\).
-
Policies.UCBoost.
solution_pb_hellinger
(p, upperbound, check_solution=False)[source]¶ Closed-form solution of the following optimisation problem, for \(d = d_{h}\) the
hellinger_distance()
function:\[\begin{split}P_1(d_h)(p, \delta): & \max_{q \in \Theta} q,\\ \text{such that } & d_h(p, q) \leq \delta.\end{split}\]The solution is:
\[q^* = \left( (1 - \frac{\delta}{2}) \sqrt{p} + \sqrt{(1 - p) (\delta - \frac{\delta^2}{4})} \right)^{2 \times \boldsymbol{1}(\delta < 2 - 2 \sqrt{p})}.\]\(\delta\) is the
upperbound
parameter on the semi-distance between input \(p\) and solution \(q^*\).
-
class
Policies.UCBoost.
UCB_h
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.IndexPolicy.IndexPolicy
The UCB(d_h) policy for bounded bandits (on [0, 1]).
It uses
solution_pb_hellinger()
as a closed-form solution to compute the UCB indexes (using the Hellinger distance).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
c
= None¶ Parameter c
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= P_1(d_h)\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
Policies.UCBoost.
eps
= 1e-15¶ Threshold value: everything in [0, 1] is truncated to [eps, 1 - eps]
-
Policies.UCBoost.
kullback_leibler_distance_on_mean
(p, q)[source]¶ Kullback-Leibler divergence for Bernoulli distributions. https://en.wikipedia.org/wiki/Bernoulli_distribution#Kullback.E2.80.93Leibler_divergence
\[\mathrm{kl}(p, q) = \mathrm{KL}(\mathcal{B}(p), \mathcal{B}(q)) = p \log\left(\frac{p}{q}\right) + (1-p) \log\left(\frac{1-p}{1-q}\right).\]
-
Policies.UCBoost.
kullback_leibler_distance_lowerbound
(p, q)[source]¶ Lower-bound on the Kullback-Leibler divergence for Bernoulli distributions. https://en.wikipedia.org/wiki/Bernoulli_distribution#Kullback.E2.80.93Leibler_divergence
\[d_{lb}(p, q) = p \log\left( p \right) + (1-p) \log\left(\frac{1-p}{1-q}\right).\]
-
Policies.UCBoost.
solution_pb_kllb
(p, upperbound, check_solution=False)[source]¶ Closed-form solution of the following optimisation problem, for \(d = d_{lb}\) the proposed lower-bound on the Kullback-Leibler binary distance (
kullback_leibler_distance_lowerbound()
) function:\[\begin{split}P_1(d_{lb})(p, \delta): & \max_{q \in \Theta} q,\\ \text{such that } & d_{lb}(p, q) \leq \delta.\end{split}\]The solution is:
\[q^* = 1 - (1 - p) \exp\left(\frac{p \log(p) - \delta}{1 - p}\right).\]\(\delta\) is the
upperbound
parameter on the semi-distance between input \(p\) and solution \(q^*\).
-
class
Policies.UCBoost.
UCB_lb
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.IndexPolicy.IndexPolicy
The UCB(d_lb) policy for bounded bandits (on [0, 1]).
It uses
solution_pb_kllb()
as a closed-form solution to compute the UCB indexes (using the lower-bound on the Kullback-Leibler distance).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
c
= None¶ Parameter c
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= P_1(d_{lb})\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
Policies.UCBoost.
distance_t
(p, q)[source]¶ A shifted tangent line function of
kullback_leibler_distance_on_mean()
.\[d_t(p, q) = \frac{2 q}{p + 1} + p \log\left(\frac{p}{p + 1}\right) + \log\left(\frac{2}{\mathrm{e}(p + 1)}\right).\]Warning
I think there might be a typo in the formula in the article, as this \(d_t\) does not seem to “depend enough on q” (just intuition).
-
Policies.UCBoost.
solution_pb_t
(p, upperbound, check_solution=False)[source]¶ Closed-form solution of the following optimisation problem, for \(d = d_t\) a shifted tangent line function of
kullback_leibler_distance_on_mean()
(distance_t()
) function:\[\begin{split}P_1(d_t)(p, \delta): & \max_{q \in \Theta} q,\\ \text{such that } & d_t(p, q) \leq \delta.\end{split}\]The solution is:
\[q^* = \min\left(1, \frac{p + 1}{2} \left( \delta - p \log\left(\frac{p}{p + 1}\right) - \log\left(\frac{2}{\mathrm{e} (p + 1)}\right) \right)\right).\]\(\delta\) is the
upperbound
parameter on the semi-distance between input \(p\) and solution \(q^*\).
-
class
Policies.UCBoost.
UCB_t
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.IndexPolicy.IndexPolicy
The UCB(d_t) policy for bounded bandits (on [0, 1]).
It uses
solution_pb_t()
as a closed-form solution to compute the UCB indexes (using a shifted tangent line function ofkullback_leibler_distance_on_mean()
).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
Warning
It has bad performance, as expected (see the paper for their remark).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
c
= None¶ Parameter c
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= P_1(d_t)\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
Policies.UCBoost.
is_a_true_number
(n)[source]¶ Check if n is a number or not (
int
,float
,complex
etc, any instance ofnumbers.Number
class.
-
class
Policies.UCBoost.
UCBoost
(nbArms, set_D=None, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.IndexPolicy.IndexPolicy
The UCBoost policy for bounded bandits (on [0, 1]).
It is quite simple: using a set of kl-dominated and candidate semi-distances D, the UCB index for each arm (at each step) is computed as the smallest upper confidence bound given (for this arm at this time t) for each distance d.
set_D
should be either a set of strings (and NOT functions), or a number (3, 4 or 5). 3 indicate usingd_bq
,d_h
,d_lb
, 4 addsd_t
, and 5 addsd_sq
(see the article, Corollary 3, p5, for more details).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, set_D=None, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
set_D
= None¶ Set of strings that indicate which d functions are in the set of functions D. Warning: do not use real functions here, or the object won’t be hashable!
-
c
= None¶ Parameter c
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= \min_{d\in D} P_1(d)\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
class
Policies.UCBoost.
UCBoost_bq_h_lb
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.UCBoost.UCBoost
The UCBoost policy for bounded bandits (on [0, 1]).
It is quite simple: using a set of kl-dominated and candidate semi-distances D, the UCB index for each arm (at each step) is computed as the smallest upper confidence bound given (for this arm at this time t) for each distance d.
set_D
isd_bq
,d_h
,d_lb
(see the article, Corollary 3, p5, for more details).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= \min_{d\in D} P_1(d)\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
class
Policies.UCBoost.
UCBoost_bq_h_lb_t
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.UCBoost.UCBoost
The UCBoost policy for bounded bandits (on [0, 1]).
It is quite simple: using a set of kl-dominated and candidate semi-distances D, the UCB index for each arm (at each step) is computed as the smallest upper confidence bound given (for this arm at this time t) for each distance d.
set_D
isd_bq
,d_h
,d_lb
,d_t
(see the article, Corollary 3, p5, for more details).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= \min_{d\in D} P_1(d)\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
class
Policies.UCBoost.
UCBoost_bq_h_lb_t_sq
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.UCBoost.UCBoost
The UCBoost policy for bounded bandits (on [0, 1]).
It is quite simple: using a set of kl-dominated and candidate semi-distances D, the UCB index for each arm (at each step) is computed as the smallest upper confidence bound given (for this arm at this time t) for each distance d.
set_D
isd_bq
,d_h
,d_lb
,d_t
,d_sq
(see the article, Corollary 3, p5, for more details).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
computeIndex
(arm)[source]¶ Compute the current index, at time t and after \(N_k(t)\) pulls of arm k:
\[\begin{split}\hat{\mu}_k(t) &= \frac{X_k(t)}{N_k(t)}, \\ I_k(t) &= \min_{d\in D} P_1(d)\left(\hat{\mu}_k(t), \frac{\log(t) + c\log(\log(t))}{N_k(t)}\right).\end{split}\]
-
__module__
= 'Policies.UCBoost'¶
-
Policies.UCBoost.
min_solutions_pb_from_epsilon
(p, upperbound, epsilon=0.001, check_solution=False)[source]¶ List of closed-form solutions of the following optimisation problems, for \(d = d_s^k\) approximation of \(d_{kl}\) and any \(\tau_1(p) \leq k \leq \tau_2(p)\):
\[\begin{split}P_1(d_s^k)(p, \delta): & \max_{q \in \Theta} q,\\ \text{such that } & d_s^k(p, q) \leq \delta.\end{split}\]The solution is:
\[\begin{split}q^* &= q_k^{\boldsymbol{1}(\delta < d_{kl}(p, q_k))},\\ d_s^k &: (p, q) \mapsto d_{kl}(p, q_k) \boldsymbol{1}(q > q_k),\\ q_k &:= 1 - \left( 1 - \frac{\varepsilon}{1 + \varepsilon} \right)^k.\end{split}\]\(\delta\) is the
upperbound
parameter on the semi-distance between input \(p\) and solution \(q^*\).
-
class
Policies.UCBoost.
UCBoostEpsilon
(nbArms, epsilon=0.01, c=0.0, lower=0.0, amplitude=1.0)[source]¶ Bases:
Policies.IndexPolicy.IndexPolicy
The UCBoostEpsilon policy for bounded bandits (on [0, 1]).
It is quite simple: using a set of kl-dominated and candidate semi-distances D, the UCB index for each arm (at each step) is computed as the smallest upper confidence bound given (for this arm at this time t) for each distance d.
This variant uses
solutions_pb_from_epsilon()
to also compute the \(\varepsilon\) approximation of thekullback_leibler_distance_on_mean()
function (see the article for details, Th.3 p6).Reference: [Fang Liu et al, 2018](https://arxiv.org/abs/1804.05929).
-
__init__
(nbArms, epsilon=0.01, c=0.0, lower=0.0, amplitude=1.0)[source]¶ New generic index policy.
nbArms: the number of arms,
lower, amplitude: lower value and known amplitude of the rewards.
-
c
= None¶ Parameter c
-
epsilon
= None¶ Parameter epsilon
-
__module__
= 'Policies.UCBoost'¶


fQR weave is an anti-counterfeit solution built on Arweave blockchain.
With the immutability of blockchain technology, each fQR is unique, and exist forever!
Arweave makes decentralized permanent storage possible by relying on “a new blockchain-like data structure called the blockweave” which looked perfect to create fQR Weave on its top
© Copyright 2020. all rights reserved


Runs a CCT calculation.
int jmpRunCctCalculation (void);
This function has no parameters.
JMP_STATUS_OK |
Request has been successfully completed. |
JMP_STATUS_ERROR |
An error has occurred. |
cct.out
The output of a CCT calculation is written to this file in several blocks of data. Standard transformation temperatures are printed in the header, which is followed by the temperature-time pairs for each product phase to reach its start fraction, calculated as a function of cooling rate or t85 parameter. These are given in separate blocks for ferrite, pearlite, and bainite, unless any of these phases cannot be found in the system. Similar results are printed next for the transformation end point, as well as for martensite start, 50%, and 90% formation levels (whenever martensite is present in the alloy). The final block provides the room-temperature microstructure (in volume fraction) and mechanical properties, calculated as a function of cooling rate or t85 parameter.
Runtime/win32
(for 32-bit applications) or Runtime/x64
(for 64-bit applications), found in the API installation directory, should be placed at the same level as your executable file.| Headers | jmpcore.h jmpcct.h |
| Library | jmpcct.lib /jmpcct_x64.lib |
| DLLs | jmpcore.dll /jmpcore_x64.dll
jmpsolver.dll /jmpsolver_x64.dll
jmpcoldfire.dll /jmpcoldfire_x64.dll
jmpcct.dll /jmpcct_x64.dll
|


--- layout: default id: home title: Create your own coding companion ---
Coding is better with friends, especially when they bring their own mods. As the mascot for the .NET community, dotnet-bot helps with checking pull requests on .NET repos on GitHub. Create your own custom coding companion by modding the dotnet-bot.
Choose the parts for your adventure.
Create your ultimate bot mod.
Share your dotnet-bot with the world.


Data Exchange with ISO 10303
Utilize components of ISO10303—together or individually—to exchange data.
How STEPcode works →STEP isn't exactly an easy standard to understand. Do you need to examine the handling of a particular construct? Or maybe you want to be able to squash bugs if/when you encounter them. Either way, you can poke around under the hood if you so desire.
Code overview →C? C++? Python? EXPRESS without a STEP serialization format? IFC, or other standards not part of ISO10303? All are possible with STEPcode.
Examples →Quick-start Instructions
~ $ sudo apt-get install git cmake gcc make
~ $ git clone https://github.com/stepcode/stepcode.git stepcode
~ $ cd stepcode; mkdir build; cd build
~ $ cmake .. -DSC_BUILD_SCHEMAS=ap214
~ $ make -j4
# => This generates code for the specified schema (AP214) and compiles it.
# => Utilities and support libs are compiled as well. All are placed in ./bin and ./lib


interface DatagramReadChannel
incoming
abstract val incoming: ReceiveChannel<Datagram>
receive
open suspend fun receive(): Datagram
DatagramReadWriteChannel
interface DatagramReadWriteChannel : DatagramReadChannel, DatagramWriteChannel


About Us
We're inventors. The App Developer Club is an organization at Stanford University created for hackers, designers, and entrepreneurs to come together and collaborate in order to produce apps you never knew you needed. But these are the apps that you deserve.


Anti-Chafing products help prevent chafing on your rear and any other body parts that rub together or against clothing, so it is often used by runners and other athletes.
Anti-Chafe Beer allows the body to experience the same sensation it would if you applied anti-chafe cream before any physical activity. Because the same result is achieved by drinking the beer, it’s the first of its kind..
First brewed in 1445, Bluesteel’s anti-chafe beer is made with wheat, coriander and yeast with a hint of tea tree oil for it’s anti-chafe qualities.


Uploading video files directly with vanilla Javascript to your Vimeo account.
Enter vimeo access token, name and description then drag your video file into the dotted area below to upload to your vimeo account.


September is beach season here in the Bay Area! Time to finally get out to the beach and cut fresh new versions of our libraries.
Finagle 18.9.0, Finatra 18.9.0, Scrooge 18.9.0, TwitterServer 18.9.0, and Util 18.9.0.
finagle-core: c.t.f.FailureFlags
is now a public API. This is Finagle’s
API for attaching metadata to an exception. As an example this is used to
check if an exception is known to be safe to retry. Java compatibility has
also been added. e6389831
finagle-core: Introducing StackTransformer, a consistent mechanism for accessing and transforming the default ServerStack. 0b6844cd
finagle-netty4: Allow sockets to be configured with the SO_REUSEPORT option when using native epoll, which allows multiple processes to bind and accept connections from the same port. 0316ac89
finagle-core: Address.hashOrdering
now takes a seed parameter and
PeerCoordinate.setCoordinate
does not take a peerOffset
any longer.
9e6734b2
finagle-core: Removed deprecated members c.t.f.Failure.{Interrupted, Ignorable, DeadlineExceeded,
Rejected, NonRetryable, flagsOf}
. 54435221
finagle-core: SingletonPool now takes an additional parameter which indicates if interrupts should propagate to the underlying resource. c83ad5d1
finagle-core: Remove TimeoutFactory.Role
in favor of passing a role to the module
function.
Since this module is a re-used within the client stack, it needs unique identifiers for each
distinct module. 4c46b80d
finagle-core: the valid range for the argument to WindowedPercentileHistogram.percentile
is now [0.0..1.0], e.g., 0.95 means 95th percentile. 8ad96f96
finagle-mux: The old pull-based mux implementations have been removed. d1baeff9
finagle-netty3: The type of context of a ChannelTransport
has been changed from a
LegacyContext
to a ChannelTransportContext
. 4cdd15d9
finagle-netty4: The type of context of a ChannelTransport
has been changed from a
Netty4Context
to a ChannelTransportContext
. edce8093
finagle-netty4: c.t.f.netty4.param.useUnpoolledByteBufAllocator
flag has been removed. There is
no good reason to opt-out of a more efficient, pooled allocator. 07495a14
finagle-thrift: DeserializeCtx
became ClientDeserializeCtx
for client side response
classification, add ServerDeserializeCtx
to handle server side response classification.
a8be34bd
finagle-serversets: ZkMetadata.shardHashOrdering
now takes a seed parameter.
9e6734b2
finagle-thrift: Thrift clients created via .servicePerEndpoint
now propagate exceptions
appropriately when the method return type is void. bb2654e1
finagle-thrift, finagle-thriftmux: Response classification is enabled in server side. a8be34bd
finagle-memcached: A Memcached client (c.t.f.Memcached.Client
) is now backed by a more efficient,
push-based implementation. c0a1f295
finagle-netty4: Finagle’s Netty 4 implementation now defaults to use Linux’s native epoll
transport, when available. Run with -com.twitter.finagle.netty4.useNativeEpoll=false
to opt out.
137f5672
c.t.f.FailureFlags
.
This allows exceptions to carry Finagle metadata such as non-retryable. 438599b0Move logic to parse the server build.properties
file out the c.t.server.handler.ServerInfoHandler
and into a utility object, c.t.server.BuildProperties
to allow for accessing by other server
logic such that the properties do not need to be re-parsed anytime access is desired. Failure to
load the properties can result in the server not starting in the case of a Fatal exception
being thrown. 4c193594
Update TwitterServer
trait to override the inherited ShutdownTimer
to be the Finagle
DefaultTimer
instead of the c.t.util.JavaTimer
defined by default in c.t.app.App
. Also
update the overridden suppressGracefulShutdownErrors
in TwitterServer
to be a val since
it is constant (instead of a def). 944b7294
util-logging: New way to construct ScribeHandler
for java interoperability.
845620b4
util-core: Added Reader#fromAsyncStream for consuming an AsyncStream
as a Reader
.
39ec9849
util-core: Introducing Reader.chunked
that chunks the output of a given reader.
1a7c54f9
util-core: Added Reader#framed for consuming data framed by a user supplied function. 2316aa5d
util-security: Add NullSslSession
related objects for use with non-existent
SSLSession
s. f12de479f
util-tunable: Introducing Tunable.asVar
that allows observing changes to tunables.
94864832
util-core: c.t.io.Reader
and c.t.io.Writer
are now abstracted over the type
they produce/consume (Reader[A]
and Writer[A]
) and are no longer fixed to Buf
.
7718fa29
util-core: InMemoryStatsReceiver
now eagerly creates the mappings for Counters
and Stats
instead of waiting for the first call to Counter.incr
and Stat.add
.
97f0f0fa
util-core: c.t.io.Reader.Writable
is now c.t.io.Pipe
. Both Writable
type and
its factory method are deprecated; use new Pipe[A]
instead. cbff9760
util-slf4j-api: Ensure that marker information is used when determining if log level is enabled for methods which support markers. 02d80820
util-slfj4-api: Finalize the underlying logger def in the Logging trait as it is not expected that this be overridable. If users wish to change how the underlying logger is constructed they should simply use the Logger and its methods directly rather than configuring the the underlying logger of the Logging trait. Add better Java compatibility for constructing a Logger. 56569b9f


Why do I need to provide my birthday?
By clicking Create Account, you agree to our Terms and that you have read our Data Policy, including our Cookie Use. You may receive SMS Notifications from Facebook and can opt out at any time.


Collaborating within
(and across) Smart Cities
w/
@geogangster
&
@vyki_e
lets get in the mood
we still need to improve
intra-
agency communication
'how', not 'why'
(our case study: LA)
the pothole mayor
disparate GIS >
Open Data >
GeoHub
beating FUD
open data with a
purpose
image credits:
http://www.easeus.com/resource/drive/floppy-drive.htm
© EaseUS
http://www.123rf.com/photo_48042869
© franzidraws
http://www.latimes.com/local/cityhall/la-me-illegal-dumping-20150815-story.html


WHAT'S EATING GILBERT GRAPE A film review by James Berardinelli Copyright 1994 James Berardinelli
Rating (Linear 0 to 10): 6.9
Date Released: 3/4/93 (general) Running Length: 1:57 Rated: PG-13 (Mature themes, language)
Starring: Johnny Depp, Leonardo DiCaprio, Juliette Lewis, Mary Steenburgen, Darlene Cates Director: Lasse Hallstrom Producers: Meir Teper, Bertil Ohlsson, and David Matalon Screenplay: Peter Hedges from his novel Music: Alan Parker and Bjorn Isfalt Released by Paramount Pictures
WHAT'S EATING GILBERT GRAPE, from renowned Swedish director Lasse Hallstrom (MY LIFE AS A DOG), is a grim tale about being trapped in Endora, Iowa, the self-proclaimed "End of the Line." Recounting the unhappy life of Gilbert Grape, the movie is not the kind of experience that many viewers are likely to find enjoyable. Even the humor--what little there is of it--is of the gallows variety.
Gilbert (Johnny Depp) has the weighty responsibility of assuming the role of father-figure in a dysfunctional family. His real dad is long dead, the victim of a suicide, and his exceptionally obese mother (Darlene Cates) is generally incapable of moving from the sofa where she spends most of her life. Gilbert's brain-damaged younger brother Arnie (Leonardo DiCaprio) has to be constantly watched lest he climb to the top of a watertower and throw himself off. Away from home, Gilbert works in the local grocery store, hangs out with his friends, and carries on an affair with Better Carver (Mary Steenburgen), the wife of a local insurance salesman.
If you want to see someone who has it worse off than you, take a look at Gilbert Grape. Virtually nothing goes right for him, and that's the reason why, while the film is well-written (albeit a little too long) and competently acted (with one exception), GILBERT GRAPE is often an unpleasant experience. This is the kind of motion picture that can get a viewer squirming in his or her seat.
Gilbert is trapped, and this comes across with deafening volume through the wonderfully understated performance by Johnny Depp. We can see the walls of his life threatening to crush him--the grinding monotony of his job, the desperation of his affair, and the lack of freedom demanded by his home life. He is George to Leonardo DiCaprio's Lenny, and it doesn't take a literary genius to recognize the OF MICE AND MEN similarities.
Into all of this gnawing monotony comes a fresh face in the form of Juliette Lewis' Becky. Of course, Gilbert falls in love with her, and Arnie develops his own sort of crush. Like most of the characters in the film, what we see of Becky is vividly drawn, but there's not much depth to her. It's a full-color snapshot, but there's no way to tell what lies beyond the borders.
Part of the problem with Becky is Juliette Lewis. The young actress, who was so impressive in CAPE FEAR, has continuously turned in one-note performances since then. There's not a whole lot to differentiate any of her characters from the others, and it's becoming increasingly apparent that what we saw in her debut was the apex of her abilities. Since then, it's been all downhill, and GILBERT GRAPE represents a new low.
Leonardo DiCaprio is convincing as Arnie, even if his performance is, of necessity, over-the-top. For a more subtle and telling example of his skills, see THIS BOY'S LIFE. The rest of the cast handles their roles with aplomb, especially Mary Kate Schellhardt, who makes the most of limited screen time as Gilbert and Arnie's youngest sister, Ellen. Judging by the job she does here, Ms. Schellhardt has a lot of promise.
If you're in the mood to be cheered up, WHAT'S EATING GILBERT GRAPE? isn't the movie for you. The claustrophobia felt by Gilbert as his world slowly suffocates him is effectively translated to the audience. Had the film been a little better-focused, this could have been a devastating character study. As it is, it rambles a little too much. This leads to an uneven, albeit stark, examination of the life of one man trying desperately to escape a prison whose bars have been fashioned by fate out of responsibility.
- James Berardinelli<EMAIL_ADDRESS>.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Earning money is good.
To earn money you typically need a job.
Spending is what money is mainly used for.
Buying cheap things often not cost-effective.
The most expensive thing is often not the most cost-effective either.
You can lend your money to other people.
If you spend money or invest money, sooner or later you will lose money.
Usually if you lose money it's because you made a mistake.


Finite Element Bases¶
Interval Element Basis Functions¶
-
class
FEMpy.FEBasis.
IntervalBasis1D
(basis_type)[source]¶ Defines a finite element basis function set on a one-dimensional interval.
Creates a complete set of finite element basis functions for a one-dimensional domain of either linear or quadratic basis types.
Parameters: basis_type ({101, ‘linear’, 102, ‘quadratic’}) – Finite element basis type. Can either be called as a integer code or a string identifier to indicate the type of basis function we are using.
- 101, ‘linear’ : 1-dimensional, linear basis.
- 102, ‘quadratic’ : 1-dimensional, quadratic basis.
-
basis_type
¶ int – Basis type standardized to an integer code.
Raises: TypeError
– If the basis type is not a string identifier or an integer code.-
basis_type
Basis type standardized to an integer code.
-
fe_local_basis
(x, vertices, basis_idx, derivative_order)[source]¶ Defines the finite element local basis functions.
Parameters: - x (float or array_like) – A value or array of points to evaluate the function on.
- vertices (array_like) – Global node coordinates for the mesh element En.
- basis_idx (int) – Local basis index value.
- derivative_order (int) – The derivative order to take the basis function to.
Returns: The local basis function (or derivative of funtion) evaluated at the points in x.
Return type:
2D Triangular Element Basis Functions¶
-
class
FEMpy.FEBasis.
TriangularBasis2D
(basis_type)[source]¶ Defines a finite element basis function set on a two-dimensional domian with triangular elements.
Creates a complete set of finite element basis functions for a two-dimensional domain with triangular elements of either linear or quadratic basis types.
Parameters: - basis_type ({201, ‘linear’, ‘linear2D_tri’, 202, ‘quadratic’, ‘quadratic2D_tri’})
- Finite element basis type. Can either be called as a integer code or a string identifier to indicate the
- type of basis function we are using.
- - 201, ‘linear’, ‘linear2D_tri (1-dimensional, linear basis on triangular elements.)
- - 202, ‘quadratic’, ‘quadratic2D_tri (1-dimensional, quadratic basis on triangular elements.)
-
basis_type
¶ int – Basis type standardized to an integer code.
Raises: TypeError
– If the basis type is not a string identifier or an integer code.-
fe_local_basis
(coords, vertices, basis_idx, derivative_order)[source]¶ Defines the finite element local basis functions.
Parameters: - coords (array_like) – The x and y coordinate values to evaluate the function on. e.g.,
(`x`, `y`)
. - vertices (array_like) – Global node coordinates for all vertices of triangular mesh nodes on the mesh element En.
- basis_idx (int) – Local basis index value.
- derivative_order (tuple of int) – The derivative orders to take the basis function to. Should be specified as a tuple with the
orders corresponding to the coordinate axes in the basis functions. e.g.,
(`x_order`, `y_order`)
.
Returns: The local basis function (or derivative of function) evaluated at the points in coords.
Return type: - coords (array_like) – The x and y coordinate values to evaluate the function on. e.g.,


During my spare time, I relish the great outdoors, conversing in French, and jamming with musicians on percussion. In the temperate climate of northern California, luxuriating in the mountain and coastal air rejuvenates and regenerates. Seasons of transitions have inspired longboard surfing in the Pacific and comedy acts for amateur open mic nights.
Common to many internet users, I also enjoy cat videos and the occasional hype about Bitcoin's next breakthrough.


Rugby: Gatland says no to All Blacks top job
WELLINGTON: Former Wales coach Warren Gatland confirmed on Tuesday (Nov 12) he has turned down an offer to apply for the All Blacks head coaching job.
The New Zealand-born Gatland told Radio Sport his loyalties lie with the Waikato Chiefs club and coaching the British and Irish Lions in 2021.
New Zealand Rugby has invited 26 New Zealand coaches to apply for the All Blacks coaching post vacated by Steve Hansen, and has previously said if Gatland wanted to be considered then he would have to give up the Lions role.
"It was nice to be contacted. I politely declined putting my name forward," Gatland said.
"I'm a little bit old school. I'd made the commitment to the Chiefs and I'd made the commitment to the Lions, it was important that I carry on with that ... honour the commitment I made to those two sides."
Gatland said if the chance to coach the All Blacks arose again in the future he would consider it, but if not then he had no regrets.
"I'm a great believer in what will be will be," he said.
"If you are successful, other opportunities will come along. It was time for me to make a decision to leave Wales and the northern hemisphere and come back to New Zealand and I'm excited by that."
Gatland will coach the Barbarians against his former Wales side on December 1 before returning to New Zealand to take over the Super Rugby club Chiefs on a four-year contract which includes a sabbatical to coach the Lions.
His 12 years with Wales ended when they were beaten by the Hansen-coached All Blacks in the play-off for third at the recent World Cup.
New Zealand Rugby expects to appoint Hansen's successor before Christmas.


Candidate name: Urvish Ramaiya |
School number:     004876 |
||||
Solution title: Digital Test-Taking Software |
Candidate session number:     hyb478 |
||||
Client name: Mr. Siddhart Anand |
User name: Denali (Password: katsokos7) |
||||
Links to: README | Links to: LICENSE |
||||
Links to: Product (refer README) | |||||
Directions to access product or any other additional information |
This product may not load correctly on a Windows environment. Run the Product(win).bat file in Product/Python_code by double clicking on it for Windows. On Unix/Linux, run the included bash script "Product(UNIX).command" in the Product/Python_code folder. For detailed instructions, go to the included README |
||||
Links to documentation are below |
|||||
Planning |
Planning | ||||
Design |
Record of tasks | ||||
| Design | |||||
Development |
Development | ||||
Functionality |
Video of product | ||||
Evaluation |
Evaluation | ||||
Appendix A/ Bibliography |
Appendix | ||||
Appendix B/ Product Code |
Appendix | ||||
Appendix C/ Interview Transcript |
Appendix | ||||
Appendix E/ Client Feedback |
Appendix | ||||
WORD COUNT |
2000 |
||||


15 Epigenome-wide association analysis (EWAS)
EWAS requires basically the same statistical methods as those used in DGE. It should be notice that the pooled analysis we are going to illustrate here can also be performed with transcriptomic data since each study must have different range values. If so, gene expression harmonization should be performed, for instance, by standardizing the data at each study. For EWAS where methylation is measured using beta values (e.g CpG data are in the range 0-1) this is not a problem. In any case, adopting the meta-analysis approach could be a safe option.
We have downloaded data from GEO corresponding to the accesion number GSE66351 which includes DNA methylation profiling (Illumina 450K array) of 190 individuals. Data corresponds to CpGs beta values measured in the superior temporal gyrus and prefrontal cortex brain regions of patients with Alzheimer’s. Data have been downloaded using GEOquery package that gets GEO data as ExpressionSet
objects. Researchers who are not familiar with ExpressionSet
s can read this Section. Notice that data are encoded as beta-values that ensure data harmonization across studies.
In order to illustrate how to perform data analyses using federated data, we have split the data into two ExpressionSet
s having 100 and 90 samples as if they were two different studies. Figure 6.2 shows the two resources defined for both studies (GSE66351_1 and GSE66351_2)
In order to perform omic data analyses, we need first to login and assign resources to DataSHIELD. This can be performed using the as.resource.object()
function
builder <- DSI::newDSLoginBuilder()
builder$append(server = "study1", url = "https://opal-demo.obiba.org",
user = "dsuser", password = "password",
resource = "RSRC.GSE66351_1", driver = "OpalDriver")
builder$append(server = "study2", url = "https://opal-demo.obiba.org",
user = "dsuser", password = "password",
resource = "RSRC.GSE66351_2", driver = "OpalDriver")
logindata <- builder$build()
conns <- DSI::datashield.login(logins = logindata, assign = TRUE,
symbol = "res")
# Assign to the original R class (e.g ExpressionSet)
datashield.assign.expr(conns, symbol = "methy",
expr = quote(as.resource.object(res)))
Now, we can see that the resources are actually loaded into the R servers as their original class
$study1
[1] "ExpressionSet"
attr(,"package")
[1] "Biobase"
$study2
[1] "ExpressionSet"
attr(,"package")
[1] "Biobase"
Then, some Bioconductor-type functions can be use to return non-disclosive information of ExpressionSet
s from each server to the client, using similar functions as those defined in the dsBaseClient
package. For example, feature names can be returned by
$study1
[1] "cg00000029" "cg00000108" "cg00000109" "cg00000165" "cg00000236" "cg00000289"
$study2
[1] "cg00000029" "cg00000108" "cg00000109" "cg00000165" "cg00000236" "cg00000289"
Experimental phenotypes variables can be obtained by
$study1
[1] "title" "geo_accession" "status" "submission_date"
[5] "last_update_date" "type" "channel_count" "source_name_ch1"
[9] "organism_ch1" "characteristics_ch1" "characteristics_ch1.1" "characteristics_ch1.2"
[13] "characteristics_ch1.3" "characteristics_ch1.4" "characteristics_ch1.5" "characteristics_ch1.6"
[17] "characteristics_ch1.7" "characteristics_ch1.8" "molecule_ch1" "extract_protocol_ch1"
[21] "label_ch1" "label_protocol_ch1" "taxid_ch1" "hyb_protocol"
[25] "scan_protocol" "description" "data_processing" "platform_id"
[29] "contact_name" "contact_email" "contact_phone" "contact_laboratory"
[33] "contact_institute" "contact_address" "contact_city" "contact_zip/postal_code"
[37] "contact_country" "supplementary_file" "supplementary_file.1" "data_row_count"
[41] "age" "braak_stage" "brain_region" "cell type"
[45] "diagnosis" "donor_id" "sentrix_id" "sentrix_position"
[49] "Sex"
$study2
[1] "title" "geo_accession" "status" "submission_date"
[5] "last_update_date" "type" "channel_count" "source_name_ch1"
[9] "organism_ch1" "characteristics_ch1" "characteristics_ch1.1" "characteristics_ch1.2"
[13] "characteristics_ch1.3" "characteristics_ch1.4" "characteristics_ch1.5" "characteristics_ch1.6"
[17] "characteristics_ch1.7" "characteristics_ch1.8" "molecule_ch1" "extract_protocol_ch1"
[21] "label_ch1" "label_protocol_ch1" "taxid_ch1" "hyb_protocol"
[25] "scan_protocol" "description" "data_processing" "platform_id"
[29] "contact_name" "contact_email" "contact_phone" "contact_laboratory"
[33] "contact_institute" "contact_address" "contact_city" "contact_zip/postal_code"
[37] "contact_country" "supplementary_file" "supplementary_file.1" "data_row_count"
[41] "age" "braak_stage" "brain_region" "cell type"
[45] "diagnosis" "donor_id" "sentrix_id" "sentrix_position"
[49] "Sex"
attr(,"class")
[1] "dsvarLabels" "list"
15.1 Single CpG analysis
Once the methylation data have been loaded into the opal server, we can perform different type of analyses using functions from the dsOmicsClient
package. Let us start by illustrating how to analyze a single CpG from two studies by using an approach that is mathematically equivalent to placing all individual-level.
ans <- ds.lmFeature(feature = "cg07363416",
model = ~ diagnosis + Sex,
Set = "methy",
datasources = conns)
ans
Estimate Std. Error p-value
cg07363416 0.03459886 0.02504291 0.1670998
attr(,"class")
[1] "dsLmFeature" "matrix" "array"
15.2 Multiple CpG analysis
The same analysis can be performed for all features (e.g. CpGs) just avoiding the feature
argument. This process can be parallelized using mclapply
function from the multicore
package.
This method corresponds to the pooled analysis approach and can be very time consiming since the function repeatedly calls the DataSHIELD function ds.glm()
. We can adopt another strategy that is to run a glm of each feature independently at each study using limma
package (which is really fast) and then combine the results (i.e. meta-analysis approach).
Then, we can visualize the top genes at each study (i.e server) by
$study1
# A tibble: 6 x 10
id logFC CI.L CI.R AveExpr t P.Value adj.P.Val B SE
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 cg13138089 -0.147 -0.191 -0.103 0.380 -6.62 0.00000000190 0.000466 10.6 0.0122
2 cg23859635 -0.0569 -0.0741 -0.0397 0.200 -6.58 0.00000000232 0.000466 10.4 0.00520
3 cg13772815 -0.0820 -0.107 -0.0570 0.437 -6.50 0.00000000327 0.000466 10.0 0.0135
4 cg12706938 -0.0519 -0.0678 -0.0359 0.145 -6.45 0.00000000425 0.000466 9.76 0.00872
5 cg24724506 -0.0452 -0.0593 -0.0312 0.139 -6.39 0.00000000547 0.000466 9.51 0.00775
6 cg02812891 -0.125 -0.165 -0.0860 0.247 -6.33 0.00000000731 0.000466 9.23 0.0163
$study2
# A tibble: 6 x 10
id logFC CI.L CI.R AveExpr t P.Value adj.P.Val B SE
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 cg04046629 -0.101 -0.135 -0.0669 0.345 -5.91 0.0000000621 0.0172 7.18 0.0128
2 cg07664323 -0.0431 -0.0577 -0.0284 0.776 -5.85 0.0000000822 0.0172 6.90 0.00390
3 cg27098804 -0.0688 -0.0924 -0.0452 0.277 -5.79 0.000000107 0.0172 6.64 0.0147
4 cg08933615 -0.0461 -0.0627 -0.0296 0.166 -5.55 0.000000298 0.0360 5.64 0.00791
5 cg18349298 -0.0491 -0.0671 -0.0311 0.157 -5.42 0.000000507 0.0489 5.12 0.00848
6 cg02182795 -0.0199 -0.0272 -0.0125 0.0947 -5.36 0.000000670 0.0538 4.84 0.0155
The annotation can be added by using the argument annotCols
. It should be a vector with the columns of the annotation available in the ExpressionSet
or RangedSummarizedExperiment
that want to be showed. The columns of the annotation can be obtained by
$study1
[1] "ID" "Name" "AddressA_ID"
[4] "AlleleA_ProbeSeq" "AddressB_ID" "AlleleB_ProbeSeq"
[7] "Infinium_Design_Type" "Next_Base" "Color_Channel"
[10] "Forward_Sequence" "Genome_Build" "CHR"
[13] "MAPINFO" "SourceSeq" "Chromosome_36"
[16] "Coordinate_36" "Strand" "Probe_SNPs"
[19] "Probe_SNPs_10" "Random_Loci" "Methyl27_Loci"
[22] "UCSC_RefGene_Name" "UCSC_RefGene_Accession" "UCSC_RefGene_Group"
[25] "UCSC_CpG_Islands_Name" "Relation_to_UCSC_CpG_Island" "Phantom"
[28] "DMR" "Enhancer" "HMM_Island"
[31] "Regulatory_Feature_Name" "Regulatory_Feature_Group" "DHS"
[34] "RANGE_START" "RANGE_END" "RANGE_GB"
[37] "SPOT_ID"
$study2
[1] "ID" "Name" "AddressA_ID"
[4] "AlleleA_ProbeSeq" "AddressB_ID" "AlleleB_ProbeSeq"
[7] "Infinium_Design_Type" "Next_Base" "Color_Channel"
[10] "Forward_Sequence" "Genome_Build" "CHR"
[13] "MAPINFO" "SourceSeq" "Chromosome_36"
[16] "Coordinate_36" "Strand" "Probe_SNPs"
[19] "Probe_SNPs_10" "Random_Loci" "Methyl27_Loci"
[22] "UCSC_RefGene_Name" "UCSC_RefGene_Accession" "UCSC_RefGene_Group"
[25] "UCSC_CpG_Islands_Name" "Relation_to_UCSC_CpG_Island" "Phantom"
[28] "DMR" "Enhancer" "HMM_Island"
[31] "Regulatory_Feature_Name" "Regulatory_Feature_Group" "DHS"
[34] "RANGE_START" "RANGE_END" "RANGE_GB"
[37] "SPOT_ID"
attr(,"class")
[1] "dsfvarLabels" "list"
Then we can run the analysis and obtain the output with the chromosome and gene symbol by:
ans.limma.annot <- ds.limma(model = ~ diagnosis + Sex,
Set = "methy",
annotCols = c("CHR", "UCSC_RefGene_Name"),
datasources = conns)
$study1
# A tibble: 6 x 12
id CHR UCSC_RefGene_Name logFC CI.L CI.R AveExpr t P.Value adj.P.Val B SE
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 cg131380~ 2 "ECEL1P2" -0.147 -0.191 -0.103 0.380 -6.62 1.90e-9 0.000466 10.6 0.0122
2 cg238596~ 2 "MTA3" -0.0569 -0.0741 -0.0397 0.200 -6.58 2.32e-9 0.000466 10.4 0.00520
3 cg137728~ 17 "" -0.0820 -0.107 -0.0570 0.437 -6.50 3.27e-9 0.000466 10.0 0.0135
4 cg127069~ 19 "MEX3D" -0.0519 -0.0678 -0.0359 0.145 -6.45 4.25e-9 0.000466 9.76 0.00872
5 cg247245~ 19 "ISOC2;ISOC2;ISOC2" -0.0452 -0.0593 -0.0312 0.139 -6.39 5.47e-9 0.000466 9.51 0.00775
6 cg028128~ 2 "ECEL1P2" -0.125 -0.165 -0.0860 0.247 -6.33 7.31e-9 0.000466 9.23 0.0163
$study2
# A tibble: 6 x 12
id CHR UCSC_RefGene_Name logFC CI.L CI.R AveExpr t P.Value adj.P.Val B SE
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 cg04046629 11 "CD6" -0.101 -0.135 -0.0669 0.345 -5.91 0.0000000621 0.0172 7.18 0.0128
2 cg07664323 6 "MUC21" -0.0431 -0.0577 -0.0284 0.776 -5.85 0.0000000822 0.0172 6.90 0.00390
3 cg27098804 11 "CD6" -0.0688 -0.0924 -0.0452 0.277 -5.79 0.000000107 0.0172 6.64 0.0147
4 cg08933615 1 "" -0.0461 -0.0627 -0.0296 0.166 -5.55 0.000000298 0.0360 5.64 0.00791
5 cg18349298 3 "RARRES1;RARRES1" -0.0491 -0.0671 -0.0311 0.157 -5.42 0.000000507 0.0489 5.12 0.00848
6 cg02182795 8 "" -0.0199 -0.0272 -0.0125 0.0947 -5.36 0.000000670 0.0538 4.84 0.0155
Then, the last step is to meta-analyze the results. Different methods can be used to this end. We have implemented a method that meta-analyze the p-pvalues of each study as follows:
# A tibble: 481,868 x 4
id study1 study2 p.meta
<chr> <dbl> <dbl> <dbl>
1 cg13138089 0.00000000190 0.00000763 4.78e-13
2 cg25317941 0.0000000179 0.00000196 1.12e-12
3 cg02812891 0.00000000731 0.00000707 1.63e-12
4 cg12706938 0.00000000425 0.0000161 2.14e-12
5 cg16026647 0.000000101 0.000000797 2.51e-12
6 cg12695465 0.00000000985 0.0000144 4.33e-12
7 cg21171625 0.000000146 0.00000225 9.78e-12
8 cg13772815 0.00000000327 0.000122 1.18e-11
9 cg00228891 0.000000166 0.00000283 1.38e-11
10 cg21488617 0.0000000186 0.0000299 1.62e-11
# ... with 481,858 more rows
We can verify that the results are pretty similar to those obtained using pooled analyses. Here we compute the association for two of the top-CpGs:
res1 <- ds.lmFeature(feature = "cg13138089",
model = ~ diagnosis + Sex,
Set = "methy",
datasources = conns)
res1
Estimate Std. Error p-value
cg13138089 -0.1373348 0.01712405 1.057482e-15
attr(,"class")
[1] "dsLmFeature" "matrix" "array"
res2 <- ds.lmFeature(feature = "cg13772815",
model = ~ diagnosis + Sex,
Set = "methy",
datasources = conns)
res2
Estimate Std. Error p-value
cg13772815 -0.06786137 0.009128915 1.056225e-13
attr(,"class")
[1] "dsLmFeature" "matrix" "array"
We can create a QQ-plot by using the function qqplot
available in our package.
Here In some cases inflation can be observed, so that, correction for cell-type or surrogate variables must be performed. We describe how we can do that in the next two sections.
15.3 Adjusting for Surrogate Variables
The vast majority of omic studies require to control for unwanted variability. The surrogate variable analysis (SVA) can address this issue by estimating some hidden covariates that capture differences across individuals due to some artifacts such as batch effects or sample quality sam among others. The method is implemented in SVA package.
Performing this type of analysis using the ds.lmFeature
function is not allowed since estimating SVA would require to implement a non-disclosive method that computes SVA from the different servers. This will be a future topic of the dsOmicsClient
. NOTE that, estimating SVA separately at each server would not be a good idea since the aim of SVA is to capture differences mainly due to experimental issues among ALL individuals. What we can do instead is to use the ds.limma
function to perform the analyses adjusted for SVA at each study.
ans.sva <- ds.limma(model = ~ diagnosis + Sex,
Set = "methy",
sva = TRUE, annotCols = c("CHR", "UCSC_RefGene_Name"))
ans.sva
$study1
# A tibble: 481,868 x 12
id CHR UCSC_RefGene_Name logFC CI.L CI.R AveExpr t P.Value adj.P.Val B SE
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 cg101814~ 19 "GNG7" -0.0547 -0.0721 -0.0373 0.338 -6.25 1.31e-8 0.00591 8.51 0.0103
2 cg137728~ 17 "" -0.0569 -0.0757 -0.0381 0.437 -6.00 3.91e-8 0.00591 7.43 0.00425
3 cg118020~ 19 "PODNL1;PODNL1;POD~ 0.0334 0.0223 0.0445 0.568 5.97 4.53e-8 0.00591 7.29 0.00897
4 cg272310~ 17 "SLC47A2;SLC47A2" 0.0274 0.0182 0.0365 0.548 5.95 4.91e-8 0.00591 7.21 0.00696
5 cg210789~ 6 "" -0.0453 -0.0609 -0.0297 0.799 -5.78 1.05e-7 0.00666 6.46 0.00733
6 cg238596~ 2 "MTA3" -0.0327 -0.0440 -0.0215 0.200 -5.77 1.09e-7 0.00666 6.42 0.0149
7 cg102974~ 16 "SALL1;SALL1" 0.0366 0.0240 0.0492 0.137 5.77 1.10e-7 0.00666 6.42 0.00688
8 cg249245~ 1 "" 0.0317 0.0208 0.0427 0.821 5.76 1.11e-7 0.00666 6.41 0.00969
9 cg136631~ 9 "" -0.0326 -0.0440 -0.0213 0.367 -5.72 1.32e-7 0.00705 6.24 0.00562
10 cg131380~ 2 "ECEL1P2" -0.106 -0.144 -0.0686 0.380 -5.61 2.15e-7 0.00835 5.76 0.00137
# ... with 481,858 more rows
$study2
# A tibble: 481,868 x 12
id CHR UCSC_RefGene_Na~ logFC CI.L CI.R AveExpr t P.Value adj.P.Val B SE
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 cg16766632 12 "LRP1" -0.0418 -0.0548 -0.0289 0.388 -6.42 7.82e-9 0.00374 9.05 0.00917
2 cg25036710 1 "" -0.0664 -0.0874 -0.0453 0.569 -6.27 1.55e-8 0.00374 8.37 0.00373
3 cg12938128 11 "NRXN2;NRXN2" -0.0273 -0.0367 -0.0179 0.728 -5.81 1.13e-7 0.0149 6.42 0.00901
4 cg07349815 3 "" -0.0393 -0.0529 -0.0258 0.160 -5.78 1.24e-7 0.0149 6.32 0.00737
5 cg07664323 6 "MUC21" -0.0427 -0.0579 -0.0276 0.776 -5.61 2.63e-7 0.0163 5.59 0.00682
6 cg00228891 1 "CR1L" -0.0568 -0.0771 -0.0365 0.350 -5.56 3.18e-7 0.0163 5.40 0.0139
7 cg11743675 12 "CNTN1;CNTN1" -0.0443 -0.0601 -0.0284 0.152 -5.56 3.18e-7 0.0163 5.40 0.00786
8 cg03470754 7 "PGAM2;PGAM2" -0.0442 -0.0600 -0.0283 0.211 -5.56 3.26e-7 0.0163 5.38 0.00790
9 cg07015749 1 "KCNAB2;KCNAB2" 0.0611 0.0392 0.0831 0.659 5.54 3.47e-7 0.0163 5.31 0.00469
10 cg25647784 17 "WNK4" -0.0392 -0.0533 -0.0251 0.512 -5.52 3.70e-7 0.0163 5.25 0.00157
# ... with 481,858 more rows
attr(,"class")
[1] "dsLimma" "list"
Then, data can be combined meta-anlyzed as follows:
# A tibble: 481,868 x 4
id study1 study2 p.meta
<chr> <dbl> <dbl> <dbl>
1 cg00228891 0.00000397 0.000000318 3.58e-11
2 cg01301319 0.00000609 0.00000123 2.00e-10
3 cg22962123 0.00000106 0.00000767 2.17e-10
4 cg24302412 0.0000139 0.000000762 2.77e-10
5 cg02812891 0.000000408 0.0000327 3.47e-10
6 cg23859635 0.000000109 0.000190 5.29e-10
7 cg13138089 0.000000215 0.000105 5.74e-10
8 cg24938077 0.0000125 0.00000254 8.02e-10
9 cg13772815 0.0000000391 0.00132 1.27e- 9
10 cg21212881 0.000000340 0.000248 2.04e- 9
# ... with 481,858 more rows
The DataSHIELD session must by closed by:


6.1 "Here's Looking at You, Kid"
For most software systems, a graphical user interface (GUI) has
become an expected part of the package. Even if the GUI acronym is
new to you, chances are that you are already familiar with such
interfaces -- the windows, buttons, and menus that we use to
interact with software programs. In fact, most of what we do on
computers today is done with some sort of point-and-click graphical
interface. From web browsers to system tools, programs are routinely
dressed-up with a GUI component to make them more flexible and easy
to use.
In this part of the book, we will learn how to make Python scripts
sprout such graphical interfaces too, by studying examples of
programming with the Tkinter module -- a portable GUI library that
is a standard part of the Python system. As we'll see,
it's easy to program user interfaces in Python scripts, thanks
both to the simplicity of the language and the power of its GUI
libraries. As an added bonus, GUIs programmed in Python with Tkinter
are automatically portable to all major computer systems.
6.1.1 GUI Programming Topics
Because GUIs are a major area, I want to say a few more words about
this part of the book. To make them easier to absorb, GUI programming
topics are split over the next four chapters of this book:
This chapter begins with a quick Tkinter tutorial to teach coding
basics. Interfaces are kept simple here on purpose, so you can master
the fundamentals before moving on to the following chapter's
interfaces. On the other hand, this chapter covers all the basics:
event processing, the pack geometry manager, using
inheritance and composition in GUIs, and more. As we'll see,
OOP (object-oriented programming) isn't required for Tkinter,
but it makes GUIs structured and reusable.
Chapter 7
and Chapter 8 take you on a tour of the Tkinter
widget set. Roughly, Chapter 7,
presents simple widgets, and Chapter 8, covers
more advanced widgets and related tools. Most of the interfaces
devices you're accustomed to seeing show up here: sliders,
menus, dialogs, images, and their kin. These two chapters are not a
fully complete Tkinter reference (which could easily fill a large
book by itself), but should be enough to help you get started coding
substantial Python GUIs. The examples in these chapters are focused
on widgets and Tkinter tools, but Python's support for code
reuse is also explored along the way.
Chapter 9, presents more complex examples that
use coding and widget techniques presented in the three preceding
chapters. It begins with an exploration of techniques for automating
common GUI tasks with Python. Although Tkinter is a full-featured
library, a small amount of reusable Python code can make its
interfaces even more powerful and easy to use. This chapter wraps up
by presenting a handful of complete GUI programs that implement text
editors, image viewers, clocks, and more.
Because GUIs are really cross-domain tools, other GUI examples will
also show up throughout the remainder of this book. For example,
we'll later see email GUIs, calculators, tree viewers, table
browsers, and so on. See the fourth GUI chapter for a list of forward
pointers to other Tkinter examples in this text.
One point I'd like to make right away: most GUIs are dynamic
and interactive interfaces, and the best I can do here is show static
screen shots representing selected states in the interactions such
programs implement. This really won't do justice to most
examples. If you are not working along with the examples already, I
encourage you to run the GUI examples in this and later chapters on
your own.
On Windows, the standard Python install comes with Tkinter support
built-in, so all these examples should work immediately. For other
systems, Pythons with Tkinter support are readily available as well
(see Appendix B, and the top-level
README-PP2E.txt file for more details).
It's worth whatever extra install details you may need to
absorb, though; experimenting with these programs is a great way to
learn about both GUI programming, and Python itself.
|
Python's creator didn't originally set out to build a GUI
development tool, but Python's ease of use and rapid turnaround
have made this one of its primary roles. From an implementation
perspective, GUIs in Python are really just instances of C
extensions, and extendability was one of the main ideas behind
Python. When a script builds push-buttons and menus, it ultimately
talks to a C library; and when a script responds to a user event, a C
library ultimately talks back to Python.
But from a practical point of view, GUIs are a critical part of
modern systems, and an ideal domain for a tool like Python. As
we'll see, Python's simple syntax and object-oriented
flavor blend well with the GUI model -- it's natural to
represent each device drawn on a screen as a Python class. Moreover,
Python's quick turnaround lets programmers experiment with
alternative layouts and behavior rapidly, in ways not possible with
traditional development techniques. In fact, you can usually make a
change to a Python-based GUI, and observe its effects in a matter of
seconds. Don't try this with C or C++.
|
|


This content is in a scrollable panel. It also makes use of the
htmlcontent
class, which will automatically apply some basic
typography to the content. Some filler text:
This is a title
This is a subhead
This is some text of dubious character. Isn’t the use of “quotes” just lazy writing—and theft of ‘intellectual property’ besides? I think the time has come to see a block quote.
This is a block quote. I’ll admit it’s not the most exciting block quote ever devised.
Simple list:
- one
- two
- three
Multi-level list:
- one
- aye
- bee
- see
- two
- x
- y
- three
Mixed list:
- Point one
- Point two
- Step 1
- Step 2
-
- Step 3
- Point three
- Sub point 1
- Sub point 2
Well, that went well. How about we insert an old-fashioned hypertext link? Will the quote marks in the tags get messed up? No!
this is a header this is a row this is another row An image:
- Librarians rule
- Yes they do
-
- But you knew that
Some more text of dubious character. Here is a noisome string of CAPITAL letters. Here is something we want to emphasize.
That was a linebreak. And something to indicate strength. Of course I could use my own HTML tags if I felt like it.Coding
This
is some code, "isn't it"
. Watch those quote marks! Now for some preformatted text:$text = str_replace("
%::%
","",$text); $text = str_replace("%::%;","",$text); $text = str_replace("%::%","",$text);This isn't code.
So you see, my friends:
- The time is now
- The time is not later
- The time is not yesterday
- We must act
- But you knew that


Egyptian Hieroglyphic Recognition: Transliteration Technique
by Amr Farouq
Home
Transliterate
Contact
Top
Egyptian Hieroglyph Recognition | Transliterate
Transliterate From English To Hieroglyph
Transliterate From Hieroglyph To English
Text
Hieroglyphs
Transliterate
Reset
Change Target Language


[gecode-users] propagation Algorithm
Christian Schulte
cschulte at kth.se
Thu Mar 10 17:00:56 CET 2016
No, it has nothing to do with AC3. Check the following papers:
http://www.gecode.org/~schulte/paper.html?id=SchulteStuckey:TOPLAS:2008
and
http://www.gecode.org/~schulte/paper.html?id=LagerkvistSchulte:CP:2007
They describe the algorithm used.
Best
Christian
--
Christian Schulte, www.gecode.org/~schulte
Professor of Computer Science, KTH, cschulte at kth.se
Expert Researcher, SICS, cschulte at sics.se
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of mehdi m
Sent: Thursday, March 10, 2016 04:57 PM
To: users at gecode.org
Subject: [gecode-users] propagation Algorithm
Hi everyone,
i'am wondering, about the propagation algorithm that Gecode is using, i
think is AC3. but i'm not sure and didn't find clarification on mpg.
Can you confirm for AC3 ? or another algorithm.
Best
------
Maamar Mehdi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20160310/40842670/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4623 bytes
Desc: not available
URL: <http://www.gecode.org/pipermail/users/attachments/20160310/40842670/attachment.bin>
More information about the users
mailing list


“the smallest sequence of programmed instructions that can be managed independently by a scheduler ”
class MyThread extends Thread {
public void run() {
System.out.println("thread is running...");
}
public static void main(String args[]) {
MyThread t1 = new MyThread();
t1.start();
}
}
def createUser(user: User): Future[UserId] = ???
def assignUserToRoles(userId: UserId, roles: List[Roles]): Future[Done] = ???
def activateUser(userId: UserId): Future[Done] = ???
for {
userId <- createUser(userToCreate)
userAssignedToRoles <- assignUserToRoles(userId, roles)
userActivated <- activateUser(userId)
} yield Done
“threads that are scheduled by a runtime library or virtual machine (VM) instead of natively by the underlying operating system (OS)”
// https://www.programcreek.com/java-api-examples/?api=co.paralleluniverse.fibers.Fiber
public static void main(String[] args) throws Exception {
int count = 9999;
CountDownLatch done = new CountDownLatch(count);
Stopwatch stopwatch = Stopwatch.createStarted();
IntStream.range(0,count).forEach(i ->
new Fiber((SuspendableRunnable) () -> {
try (CloseableHttpResponse response = client.execute(new HttpGet(url))){
response.getStatusLine().getStatusCode();
} catch (Exception e) {
e.printStackTrace();
} finally {
done.countDown();
}
}).start()
);
done.await(15, TimeUnit.SECONDS);
TaskRunner.print(
new TaskRunner.Result(stopwatch.elapsed(TimeUnit.MILLISECONDS), Runtime.getRuntime().totalMemory()),
done.getCount(),
FiberHttpRequest.class.getSimpleName());
}
// https://gist.github.com/mattetti/3798173
func asyncHttpGets(urls []string) []*HttpResponse {
ch := make(chan *HttpResponse, len(urls)) // buffered
responses := []*HttpResponse{}
for _, url := range urls {
go func(url string) {
fmt.Printf("Fetching %s \n", url)
resp, err := http.Get(url)
resp.Body.Close()
ch <- &HttpResponse{url, resp, err}
}(url)
}
for {
select {
case r := <-ch:
fmt.Printf("%s was fetched\n", r.url)
responses = append(responses, r)
if len(responses) == len(urls) {
return responses
}
case <-time.After(50 * time.Millisecond):
fmt.Printf(".")
}
}
return responses
}
http://michaelkuty.github.io/vertx-gdg/img/hybrid.png
https://allegro.tech/img/articles/2015-11-06-real-time-web-application-with-websockets-and-vert.x/vertx_architecture.png
“An actor is a computational entity that, in response to a message it receives, can concurrently - send a finite number of messages to other actors; - create a finite number of new actors; - designate the behavior to be used for the next message it receives.”
class HelloActor extends Actor {
def receive = {
case "hello" => println("hello world!")
case _ => println("Couldn't process unrecognized message")
}
}
object Main extends App {
val system = ActorSystem("HelloSystem")
// default Actor constructor
val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")
helloActor ! "hello"
helloActor ! "other message"
}
https://www.codeguru.com/imagesvr_ce/4692/AKKA1.jpg
http://markusjura.github.io/akka-intro-slides/assets/hierarchy-3.png
https://www.youtube.com/watch?v=EMv_8dxSqdE
https://www.youtube.com/watch?v=QFB_3uUGzR4


0.1 Data Mining for Student Success and Perseverance
This repository hosts the code needed to generate the final report for the PAREA grant.
The electronic version of this report is always up-to date and on the web, viewable at sameerbhatnagar.github.io/studentsuccess_finalreport
0.1.1 To contribute to the report:
- go to https://github.com/sameerbhatnagar/studentsuccess_finalreport and fork the repository
- go to your home directory
- clone the repository you just forked (from the terminal:
git clone <insert name of your forked repo
) - from the terminal:
cd studentsuccess_finalreport
- from the terminal:
git remote add upstream https://github.com/sameerbhatnagar/studentsuccess_finalreport.git
- from the terminal:
mkdir bin/data
- copy or move the data to the newly created
bin/data
- Open the R Project file
studentsuccess_finalreport.Rproj
with un updated version of- R
- RStudio
- create a text file and save it as
.Rprofile
(NOTE: it must be named.Rprofile
without.txt
at the end) - in the newly created
.Rprofile
enter the following line:
R_path_to_data_directory = '<Enter Absolute Path to your local copy of Data>'
For example, my .Rprofile
file looks like this:
R_path_to_data_directory = "/home/sahir/git_repositories/studentsuccess_finalreport/bin/data/"
- Open the script
data-setup.R
in the folderbin
- run the script to produce some of useful R objects (will automatically be placed in the folder
bin/data
) - press
build-book
in RStudio IDE to get a local preview of the entire book in - Modify only the
.Rmd
files. Commit, and make a pull request back to me (Sameer), and I will merge to master branch, which will automatically update the live web version
0.1.2 PDF version
- should always available at https://github.com/sameerbhatnagar/studentsuccess_finalreport/blob/master/docs/studentsuccess_final_report.pdf
### Collaborating Colleges - for any CEGEP that would like to extract their CLARA tables, into the same anonymized format as what was used for this project, please refer to the SQL procedures in the folder bin/SQL
0.2 This project was made possible by:
- PAREA (Programme d’Aide de Recherche et Enseignment et Apprentissage)
- Derek Gaucher and Anna Likht, from the Dawson College department of Information Systems and Technology, for writing the data extraction scripts that could be used by collaborating colleges
- Diane Gauvin, Academic Dean, Dawson College, for setting in motion the process of creating a mirror database of CLARA, for the purposes of research into Student Success and Perseverance
- Partners at Collaborating Colleges
- Larry Calahan, and Ross Tzankov (especially for additional feedback in generalizing SQL procedures)
- Kim Rousseau and Greg Bagshaw from John Abbott College


Neural Layer Configuration
When creating a NeuralNet from NeuralNetFactory, the layer structure is set by passing an IList<NeuralLayerConfig>
. This IList<NeuralLayerConfig>
must begin with an InputLayer
and end with an OutputLayer
. For example,
List<NeuralLayerConfig> layerStrucutre = new ()
{
new InputLayer(size: 100),
new HiddenLayer(size: 70, activation: new ReluActivation(leak: 0.01)),
new HiddenLayer(size: 30, activation: new ReluActivation(leak: 0.01)),
new OutputLayer(size: 10, activation: new SoftmaxActivation())
};
...
NeuralNet net = NeuralNetFactory.OptimisedForRelu(layerStrucutre, ... );
Vector<double> inputVector = Vector<double>.Build.Dense(length: 100, value: 0); // length of input vector must match `size` supplied to `InputLayer`
Vector<double> outputVector = net.GetOutputVector(inputVector); // `outputVector` is of length 10, since 10 is the value of `size` supplied to `OutputLayer`
NeuralLayerConfig
NeuralLayerConfig
is the base record for
Input Layer
InputLayer
stores the size of the first (i.e. input) layer. Once the NeuralNet
is created, InputLayer.Size
will be the size of the input vectors accepted by the NeuralNet
.
Hidden Layer
HiddenLayer
stores the size and activator used by a hidden layer. These are intermediary layers. They are not required, but they give complexity to the Neural Network.
Output Layer
OutputLayer
stores the size and activator used by the final (i.e. output) layer. Once the NeuralNet
is created, OutputLayer.Size
will be the size of the output vectors returned by the NeuralNet
, and OutputLayer.Activation
will be applied to these output vectors.
Technical Note:
Note that the IList<NeuralLayerConfig>
does not represent how NeuralNet
works internally. In creating a NeuralNet
from NeuralNetFactory
, the IList<NeuralLayerConfig>
is purely used to initialise a Parameter
object of the right size and to supply the right Activation[]
to the NeuralNet
. Once this is done, the NeuralNet
uses the Parameter
object and Activation[]
array.


Frequency¶
-
bgen_reader.
allele_frequency
(expec)[source] Compute allele frequency from its expectation.
- Parameters
expec (array_like) – Allele expectations encoded as a samples-by-alleles matrix.
- Returns
Allele frequencies encoded as a variants-by-alleles matrix.
- Return type
Examples
>>> from bgen_reader import read_bgen, example_filepath >>> from bgen_reader import allele_expectation, allele_frequency >>> >>> filepath = example_filepath("example.32bits.bgen") >>> >>> bgen = read_bgen(filepath, verbose=False) >>> >>> variants = bgen["variants"] >>> samples = bgen["samples"] >>> genotype = bgen["genotype"] >>> >>> variant = variants[variants["rsid"] == "RSID_6"].compute() >>> variant_idx = variant.index.values[0] >>> >>> p = genotype[variant_idx].compute()["probs"] >>> # For unphased genotypes only. >>> e = allele_expectation(bgen, variant_idx) >>> f = allele_frequency(e) >>> >>> alleles = variant["allele_ids"].values[0].split(",") >>> print(alleles[0] + ": {}".format(f[0])) A:<PHONE_NUMBER>8810434 >>> print(alleles[1] + ": {}".format(f[1])) G:<PHONE_NUMBER>118956 >>> print(variant) id rsid chrom pos nalleles allele_ids vaddr 4 SNPID_6 RSID_6 01 6000 2 A,G 19377


{{define "example"}}
Include Directive: {{if .BundleAssets }} enabled {{else}} disabled {{end}} (toggle)
Javascript with include directive
Stylesheet with require directive
CoffeeScript (source)
Invalid CoffeeScript (source)
SASS (source)
SCSS (source)
Invalid SASS (source)


{{myIssueError}}
| Issue Id | Phone Number | Issue |
|---|---|---|
|
{{myIssue.issueId}} |
{{myIssue.phoneNumber}} |
{{myIssue.issue |limitTo: issueLimit}}... |


Dad left with half a skull and 'sunken brain' in vegetative state after attack
Steven Augustine is fighting for his life in hospital, unable to communicate with his family and friends after the horror incident in New York
by Danya Bazaraa, https://www.mirror.co.uk/authors/danya-bazaraa/A dad-of-two was left paralysed with half a skull and a 'sunken brain' after a horrific attack on his way home from work.
Steven Augustine, 32, was attacked in New York by Charles Miles who was jailed for only two and a half months.
Miles received a misdemeanour charge after pleading guilty to assault and served just 72 days of his 10 month sentence at Ulster County Jail, according to reports.
Meanwhile, Steven has been in hospital fighting for his life in New Jersey since the incident in May 2018 - and will need further surgery.
He doesn't respond to anything, his mum says, describing him as being in a vegetative state.
A gofundme page set up for his medical treatment says: "Steve's sons will never go fishing with their daddy again.
"They will never feel his arms around them when they get hurt."
It adds: "It wasn't only Steve's life that changed forever. It's all the people who love him whose lives changed forever.
"We have no justice. We have no peace."
The left side of Steven's skull had to be removed after it was shattered during the assault.
Now he needs a special plastic skull to protect his brain as he suffers from sunken brain syndrome – a rare complication after a craniectomy, a procedure to remove part of his skull.

“Charles Miles was given a light sentence and I want justice for my son who is fighting every single day for his life."
She described Stephen as a fun-loving guy and said he was always smiling.
Donna added: "He loves his children and family more than anything in the world and to see him now, severely brain damaged, is devastating. I am heartbroken – my son is in a [vegetative] state."

Doctors believed Steven's injuries appeared to be from blunt force trauma similar to a baseball bat - but a lawyer claims Miles punched Steven once causing him to fall backwards onto the ground.
Ulster County District Attorney Holley Carnright said since Miles did not intend to cause serious physical harm to Augustine, they could not bring felony assault charges against him.
But Steven's mum still struggles to believe her son's injuries could be a result of just one punch.
She said he has been left only blinking to indicate 'yes' or 'no' and cries when he sees his two sons.
Steven's family are hopeful that vital surgery - funded by a New York government agency - could help save his life.
They continue to fundraise for his medical treatment on a gofundme page. To donate click here.


Turn on GitHub pages
Open a pull request
Build the HTML document structure
Add a title tag
Merge my first pull request
Change my username to an h1 tag
Add an image
Merge my second pull request
Create a list
Add links
Merge my third pull request
Make it beautiful
Merge the final pull request


DUST IN THE WIND (1987) by George Wu Rating: **** (out of 4)
The Hou Hsiao-hsien retrospective at New York's Walter Reade theater is doubtlessly one of 1999's movie-going highlights. The Taiwanese Hou is perhaps the greatest director of the past two decades, yet because of the state of foreign film distribution in the United States, none of his films have received commercial release here. Instead, we cinephiles have been left to discover his extraordinary works at museums and festivals. I had seen about half of his repertoire before this retro, but it was still revelatory.
In Hou's work, one can visibly trace his cinematic influences, and in turn, he has influenced many others. Hou has a style somewhere between Michelangelo Antonioni and Yasujiro Ozu enhanced by Hou's own striking sense of camera placement and framing. His mostly provincial subject matter would also do Italian Neorealists such as Vittorio De Sica and Roberto Rossellini proud. Like De Sica in his earlier films, Hou uses mostly nonprofessional actors. Some of Hou's most verbal supporters include directors Olivier Assayas and Kore-eda Hirokazu, both of whom have shot documentaries on him. To be more like his Chinese filmmaking idols, Hou and Edward Yang, Hirokazu now inverts his name so that his surname appears first in credits, which is contrary to Japanese convention. Along with Hirokazu's beautiful Maborosi, Tsai Ming-liang's Rebels of a Neon God and Bruno Dumont's La vie de Jesus are particularly obvious descendents of Hou's work.
Given American ideology's emphasis on individuality, this country's filmmakers put the camera's focus on the character above all else. Hou, however, with his careful framing, long takes and long shots accentuates space and environment while depicting character. This greater sense of place shows how characters are inextricably bound to their surroundings which contribute as much to who and what they are as their own actions. In Dust in the Wind, for example, in one take, long shot with no camera movement, Hou shows us some old men sitting on the front steps of a house during a sudden electrical black out. A loud bang comes from within the house puzzling the men. The wife of the house hysterically enters frame left and rushes up the steps inside. We hear her talking to old Grandpa, who appears in the doorway cursing about how he mistook a firecracker for a candle. Not only is this funny, but it feels more real as Hou keeps us detached in our role of observer yet involved in caring for what happens to these people.
Dust in the Wind is about Wan and his girlfriend, Huen, who quit their jobs in their small mining town of Jio-fen and move to Taipei to find work. Wan becomes a delivery boy while Huen assists a seamstress. Wan is a little too proud for his own good, but is earnest in taking care of the introverted Huen. He can barely take care of himself however. Hou makes an apparent reference to De Sica's Bicycle Thief when Wan finds his motorcycle stolen. His resulting depression leads him to wander in the rain, getting him a case of bronchitis. Then he finds himself drafted by the army.
Hou collaborated with Chu T'ien-wen, who has written or co-written all of Hou's films, to give Dust in the Wind marvelously vivid details. Upon first moving to Taipei, Huen asks Wan what he thinks about various shoes in a store. After selecting a pair they both like, Wan finds that Huen is not asking for herself but for her family. She pulls out pieces of paper with the outlines of her family's feet traced on them so she can buy them the right sized shoes.   Many images -- the characters marching up to their hillside home next to a mountain cast in the shadows of passing clouds, a Buddhist ritual in front of a raging ocean, soldiers silhouetted against an overcast sky -- are breathtaking. Dust in the Wind, being more diffuse and directionless than its predecessor The Time to Live and the Time to Die, ultimately doesn't equal that film's impact. It is nevertheless, one of the best films of the 1980s.
Hou's films have only now finally found video distribution in the U.S., but they will have none of their impact on the big screen. The travesty is that most will never have the opportunity to view them as they should be seen. This Lincoln Center retrospective helps to correct that a little bit.
George Wu's Obsessed About Movies Page http://pages.prodigy.net/zvelf/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


| |
EntityManager is a object that acts as the 'database' of the system.
It's used for looking up entities, getting their list of components, creating
them (managing that they all have unique ID's), etc.
When using components as arguments, you can use either a component of that
type as the argument or (recommended) calling for the class_name of the component
like so: EntityManager.getEntitiesHavingComponent(HealthComponent.__name__),
except if the class explicitly says the opposite (read comments).
NOTE: restricted to one component type per entity, so the same entity cannot
have, as an example, two instances of HealthComponent. In order to change
that, 2nd dict value should be a list instead of a single component. |
| |
Methods defined here:
- __delitem__(self, entity)
- Defines the usage of
del y[entity]
which removes the entity from the entity manager.
- __getitem__(self, entity)
- Defines the usage of:
x = y[entity]
which gets all the components for that entity.
- __init__(self)
- Constructor.
@self.__entities: used for keeping all the active entities id's.
@self.__components_by_class: dict that will hold a list of each type of components.
-structure: dictionary of dictionaries:
- key first dictionary = class name of component
- value first dictionary = dictionary
- key 2nd dictionary = entity id
- value 2nd dictionary = the component itself
@self.__lowest_assigned_id: used for assigning a id whenever a new entity is created.
- __setitem__(self, entity, component)
- Defines the usage of:
y[entity] = component
which adds the component to the entity.
- addComponent(self, entity, component)
- Adds the given component to the given entity.
@entity: must be a entity instance, not an id.
@component: component instance.
- createEntity(self)
- Creates and returns a new entity object.
Adds the entity to entity list.
- generateNewId(self)
- Returns a new unique ID and increments counter of ID's.
- getComponent(self, entity, component)
- Given a entity and a component or a component type, returns the component
if the entity has it.
Returns None if not found.
@entity: must be a entity instance, not an id.
@component: can be either a string or a component (which will be traduced
to a string internally).
- getComponentName(self, component)
- Given a component, returns it's name.
- getComponentsOfEntity(self, entity)
- Returns a list of all the components that the given entity has.
@entity: entity instance.
- getComponentsOfType(self, component)
- Returns a list of every component of the given type.
@component: component class name or component instance.
- getEntitiesHavingComponent(self, component)
- Returns a list of all the entities (not their id) that have the given
component.
@component: class name or instance of the component.
- getEntitiesHavingComponents(self, *args)
- Returns a list of all the entities that have all the args (which will be
components).
@args: indefinite tuple of arguments. They should all be components
instances or components names.
- hasComponent(self, entity, component)
- Returns True if given entity has given component, False instead.
@entity: entity instance.
@component: name or instance of the component.
- removeComponent(self, entity, component)
- Removes the given component of the given entity. If entity or component
aren't found, this method does nothing.
@entity: entity instance.
@component: class name name or instance of the component.
- removeEntity(self, entity)
- Removes the given entity from the entity manager.
@entity: entity instance, not id.
Data descriptors defined here:
- __dict__
- dictionary for instance variables (if defined)
- __weakref__
- list of weak references to the object (if defined)
- componentsByClass
- Read only property for the mapping components-entities.
- entities
- Read only property for the entities id list.
|


p5* js
This presentation is about p5.js. What is p5.js? Who should or might you be to learn about it? What might you use it for? Let me give you a little context first.
Processing
A flexible software sketchbook and a language for learning how to code within the context of visual arts
There is a thing called Processing that is a flexible software sketchbook and a language for learning how to code within the context of visual arts. Processing is
a project started in 2001 by Casey Reas and Benjamin Fry, two students at the MIT media lab trying to make a tool that could help them do their work.
Interestingly enough, Processing, when it was first created back in 2001, was built on top of the language called Java, which can be easily explained. Why? Yes, because of
Java Applets, which at the time were used to display dynamic content on a Web-page. However, if you fast-forward 18 years later, to 2019...
Where have you last seen a Java Applet on the Web? The language used in the browser these days is something called JavaScript.
So the question arose - what language would you pick if Processing was invented today?
Creator of p5* js
Lauren McCarthy
And the person who answered this question was Lauren McCarthy, an LA-based artist, who started a new project called p5,js, in collaboration with the Processing Foundation. It
eventually ended up in creating the p5 library, which one might use to create sketches, art, data visualization etc. You might even make websites like a web-designer... There's a lot of different paths
you can choose and take. So, here are the ways how we can use it.
https://editor.p5js.org/
There's a tool called p5.js web editor. Using it you can try to create something right on the web-page.
Clean and pretty simple interface. I would just recommend to check the “Auto-refresh” checkbox to enable auto-refreshing as you type your code and, maybe, choose
the dark theme in the settings.
let sketch = function (p5) {
p5.setup = function () {
let c1 = p5.createCanvas(200, 200);
c1.parent('firstCanvas');
p5.createP("<h1>This is some text<h1>");
}
p5.draw = function () {
p5.background(220, 50, 45);
p5.rect(20,40,10, 50);
}
};
new p5(sketch, window.document.getElementById('container'));
To avoid jumbling the p5 code up with other code, and the p5 functions with functions from other libraries you might use, there's a way to “isolate” p5
using its instance mode. We can also restrict its scope to a particular container
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220, 50, 45);
ellipse(50, 50, 30, 80);
}
However, in further examples I will be using so-called global mode. So let's take a look at the basic syntax.
In order to draw with p5, we need a canvas. And some sort of a coordinate system to work inside it.
Coordinate system
In the geometry class, we use the Cartesian coordinate system.
The Cartesian system has the X-axis going from left to right, and the Y-axis going from bottom to top. Zero-zero is right in the middle, and all numbers below it are
negative ones on the Y-axis, and all numbers to the left of zero-zero are negative on the X-axis. In the canvas, the coordinate system is different.
Here, the zero-zero point is the top left. And the X-number is getting bigger as you go to the right, and the Y-number gets bigger as you go down.
createCanvas()
function setup() {
createCanvas(400, 400);
background(205, 0, 0);
line(0, 0, width, height);
}
First, we need a setup. In this particular example we're creating a square canvas, 400 pixels wide and tall, giving it some nice
grey background using a shorthand notation of 205, 0, 0, and adding a line with its starting point at x-zero, y-zero, and the second point at x-width, y-height.
draw()
let yPos = 0;
function setup() {
createCanvas(150, 150);
frameRate(30);
}
function draw() {
background(205);
yPos = yPos - 1;
if (yPos < 0) {
yPos = height;
}
line(0, yPos, width, yPos);
}
While the setup function runs only once, there's another function, draw(), which draws and redraws the canvas elements, being a replacement for
the RequestAnimationFrame, render and update functions usually used in normal JavaScripts. A brief overview - here, we're creating a square
canvas with the side of 150 pixels. Then, we are setting the frame rate. And then, within the block of the draw() function, we're writing the logic of
the line's movement.
These are very basic sketches, though, nothing to be proud of. So on the next slides you can see some really beautiful sketches created by Étienne Jacob
* All sketches by Étienne Jacob
p5 Addons
Of course, being an actively developing project, over time, the p5 library has got additional features and functionality, and has been extended using many addons.
To name just a few.
p5.dom
Lets you interact with HTML5 objects beyond the canvas, including video, audio, webcam, input, and text.
p5.sound
Extends p5 with Web Audio functionality including audio input, playback, analysis and synthesis.
p5.accessibility
Makes the p5 canvas more accessible to people who are blind and visually impaired.
p5.experience
Extensive library for p5.js that adds additional event-listening functionality for creating canvas-based web applications.
Official documentation
Articles
YouTube videos