text:
Consensus queries in ligand-based virtual screening experiments
Francois Berenger1, 2Email authorView ORCID ID profile,
Oanh Vu1 and
Jens Meiler1
In ligand-based virtual screening experiments, a known active ligand is used in similarity searches to find putative active compounds for the same protein target. When there are several known active molecules, screening using all of them is more powerful than screening using a single ligand. A consensus query can be created by either screening serially with different ligands before merging the obtained similarity scores, or by combining the molecular descriptors (i.e. chemical fingerprints) of those ligands.
We report on the discriminative power and speed of several consensus methods, on two datasets only made of experimentally verified molecules. The two datasets contain a total of 19 protein targets, 3776 known active and ~ 2 × 106 inactive molecules. Three chemical fingerprints are investigated: MACCS 166 bits, ECFP4 2048 bits and an unfolded version of MOLPRINT2D. Four different consensus policies and five consensus sizes were benchmarked.
The best consensus method is to rank candidate molecules using the maximum score obtained by each candidate molecule versus all known actives. When the number of actives used is small, the same screening performance can be approached by a consensus fingerprint. However, if the computational exploration of the chemical space is limited by speed (i.e. throughput), a consensus fingerprint allows to outperform this consensus of scores.
Similarity search
Several bioactives
Consensus query
Ligand-based virtual screening (LBVS)
Chemical fingerprint
Potency scaling
MACCS
ECFP4
MOLPRINT2D
Tanimoto score
Similarity searches help expand the collection of known actives in the early stages of a drug discovery project. Interestingly, similarity searches do not require a diverse collection of active and inactive molecules prior to be used. Sometimes, in a ligand-based virtual screening (LBVS) campaign, only a limited number of active compounds is known. Such compounds could be found from the scientific literature, patent searches or a moderately successful structure-based virtual screen followed by wet-lab testing. This data scarcity might render standard machine learning algorithms inapplicable. Indeed, most Quantitative Structure Activity Relationship (QSAR) methods are data hungry. While expert machine learning users may benefit from recent developments [1, 2], most users will be left in front of several questions: (a) how many actives are needed to create a powerful classifier, (b) which chemical fingerprint should be used to encode those actives, and (c) what is the best way to combine those fingerprints.
Similarity searches that exploit the chemical similarity principle [3] are some of the earliest techniques developed in chemoinformatics [4, 5]. When several ligands are known for a given protein target, they can be used simultaneously to better find novel, putative active molecules.
This study measures the performance and speed of several ways to combine the knowledge about known actives. We investigate the effect of the fingerprint choice, the number of actives and the method used to combine fingerprints. Compared to most previous studies, our datasets are only made of experimentally verified molecules. We also evaluate the effect of scoring speed in CPU-bounded experiments, to show a potential use when screening immense virtual chemical libraries. We finally discuss which combination of fingerprint, consensus size and consensus method gives the best performance or should be avoided.
Using multiple bioactive reference structures has been studied by several authors [6–14]. Shemetulskis et al. [6] have created modal fingerprints, where a bit is set in the consensus query if it is set in a given percentage (the mode) of known active molecules. Xue et al. [8] have used all bits consistently set in compounds of a same activity class (called consensus bit patterns) and scale factors for those bits to modify the Tanimoto score. This approach is called fingerprint scaling. It increases the probability of finding active molecules by virtual screening. Wang and Bajorath [13] have used bit silencing in MACCS fingerprints to create a bit-position-dependent weight vector. This weight vector modifies the Tanimoto coefficient in order to derive compound-class-directed similarity metrics that improve virtual screening performance compared to conventional Tanimoto searches. Hert et al. [9] have compared merging several fingerprints into a single combined fingerprint, applying data fusion (merging of scores) to the similarity rankings of single queries and approximated substructure searches. Hert et al. found that merging similarity scores and using binary kernel discrimination are the most powerful techniques. Later, Whittle [11] confirmed that fusing similarity scores using the maximum score rule (or the minimum rank if scores are not available) is one of the most powerful strategies. For a recent study of data fusion methods with fragment-like molecules, see Schultes 2015 [14].
Ligand-based virtual screening methods have also been extended to take into account the different potency levels of known actives [10, 12]. This potency scaling technique allows to bias the search space towards the detection of increasingly potent hits [10]. To bias the search, a logarithmic weighting scheme based on IC50 1values was introduced. Let \(q_i\) be a known active molecule. \(q_i\) is assigned a weight \(w_i\) given it's IC50 value (IC50qi) and the IC50 value of the least active molecule (IC50min):
$$\begin{aligned} w_i = log(\mathrm {IC50_{min}}) - log(\mathrm {IC50}_{q_i}) + 1.0 \end{aligned}$$
This logarithmic weighting scheme ensures linear scaling over the entire potency range and attributes a weight of one to the least active molecule [10]. In Vogt and Bajorath [12], the same weighting scheme is used to bias two distinct virtual screening algorithms and applied to a high-throughput screening (HTS) data set of cathepsin B inhibitors. The authors observed that using multiple reference compounds and potency scaling allows to direct the search towards detection of more potent database hits.
The pharmacologically relevant chemical space is immense. A study [15] estimates its size in the order of \(10^{33}\) molecules, with up to 36 heavy atoms each. While the database of commercially-available compounds ZINC15 [16] totals \(335 \times 10^6\) compounds as of May 2017, there are virtual chemical libraries with more than \(166 \times 10^9\) molecules [17, 18]. Hence, one can imagine scenarios where the speed of a virtual screen has its importance.
In this study, only fully automatic methods are investigated on 2D fingerprints. None of these methods requires fitting to a training set. The investigated methods are all parameter-free. Implicit parameters, if any, are detailed.
Several protein targets coming from two distinct datasets were used. None of those datasets contain any decoy (i.e. molecules that have not been experimentally verified as either active or inactive). A decoy is a supposedly inactive, computationally engineered [19] or randomly chosen [8] molecule. Hence, in this study there is no risk that a decoy creation protocol can be reverse engineered by any of the evaluated methods. Also, some of the datasets used are real world examples since they come from HTS campaigns.
The NRLiSt subset with IC50 data for all actives
Protein target
# Actives
# Inactives
AR−
ERα-
ERα+
ERβ+
GR−
GR+
PR−
RARα−
RXRα−
'+' after a target name means actives (resp. inactives) have an agonist (resp. antagonist) effect. '−' after a target name means the opposite
Our first dataset is the manually curated nuclear receptors ligands and structures benchmarking database [20] (NRLiSt BDB2). The NRLiSt is an exhaustive, NR-focused, benchmarking database. The original NRLiSt contains 9905 ligands and 339 protein targets. However, for the specific needs of this study, the NRLiSt was further filtered in order to contain only protein targets for which there are at least 40 known actives and at least the same amount (or more) of tested inactives. Furthermore, only active molecules with an IC50 value are accounted for. A summary of this dataset is given in Table 1.
The nine HTS datasets with their PubChem Summary Assay ID (SAID)
Protein target class
Kinase inhibitor
The second dataset, MLQSAR,3 is a compilation of validated PubChem High Throughput Screens [21]. PubChem provides libraries of small molecules that have been tested in HTS experiments. This dataset focuses on experiments with a single well-defined and pharmaceutically relevant protein target. A target is only retained if it has at least 150 confirmed active compounds. A summary of MLQSAR is given in Table 2. For several targets, active molecules just have a flag and no IC50 data. There are only two targets (PubChem SAID 485290 and 435,008) for which activity values span several orders of magnitude, while this is the case for all NRLIST targets.
In this study, three different fingerprints were used. The MACCS 166 bits fingerprint as provided by Open Babel [22]. The ECFP4 2048 bits fingerprint as provided by Rdkit [23, 24] and an unfolded MOLPRINT2D [25, 26] implementation, referred to as UMOP2D in the text. MOLPRINT2D descriptors encode atom environment based on SYBYL atom types (i.e. atom type and hybridization state) derived from the molecular graph. Only heavy atoms and their connected neighbors up to a distance of two bonds are considered by this fingerprint. MOLPRINT2D will be available in the upcoming version of the Bio Chemical Library [27]. The goal of this study is not to compare the power of individual fingerprints; see Sastry [28] for an extensive comparison.
Chemical similarity
To fairly compare methods during experiments, the Tanimoto score is used consistently. Given two binary fingerprints \({\mathbb {A}}\) and \({\mathbb {B}}\) of equal length:
$$\begin{aligned} Tani({\mathbb {A}},{\mathbb {B}})=\frac{|{\mathbb {A}} \cap {\mathbb {B}}|}{|{\mathbb {A}} \cup {\mathbb {B}}|} \end{aligned}$$
Given two fingerprints \({\mathbb {X}}\) and \({\mathbb {Y}}\) encoded as vectors of floats of length N:
$$\begin{aligned} Tani({\mathbb {X}},{\mathbb {Y}}) = \frac{\sum _{i=1}^Nx_i y_i}{\sum _{i=1}^N{x_i^2 + y_i^2 - x_i y_i}} \end{aligned}$$
Performance metrics and curves
To assess overall classifier performance, the Area Under the receiver operating characteristic Curve (AUC) is used. To measure early retrieval performance, the Power Metric at 10% (\(\hbox {PM}_{10\%}\)) is used [29]. The power metric is a function of the True Positive Rate (TPR) and False Positive Rate (FPR) at a given threshold. The power metric is statistically robust to variations in the threshold and ratio of active compounds over total number of compounds in a dataset. At the same time, the power metric is also sensitive to variations in model quality.
$$\begin{aligned} PM_{x\%} = \frac{TPR_{x\%}}{TPR_{x\%} + FPR_{x\%}} \end{aligned}$$
In some experiments, the accumulated number of actives is drawn. This curve is obtained by walking down a rank-ordered list of compounds (the X axis lists ranks of database molecules) and plotting on the Y axis the number of active molecules encountered so far.
Consensus policies
In all methods described hereafter, there is no parameter fitting to any of the datasets. Also, no training using known actives and inactives is required prior to applying any of the methods.
A consensus query is formed by the combination of a set of query molecules (also called known actives) while following a consensus policy. The policy specifies how fingerprints are combined (Fig. 1).
A consensus fingerprint is created by combining the fingerprints of several known active molecules. The way to combine fingerprints is controlled by the consensus policy
Let \({\mathbb {P}}\) be the set of all protein targets. Let p be a given protein target (\(p \in {\mathbb {P}}\)).
Let \({\mathbb {M}}\) be the set of all tested molecules for p.
Let fp(m) be the fingerprint of molecule \(m \in {\mathbb {M}}.\)
Let \({\mathbb {A}}\) be the set of active molecules on p (\({\mathbb {A}} \subset {\mathbb {M}}\)).
Let \({\mathbb {I}}\) be the set of inactive molecules on p (\({\mathbb {I}} = {\mathbb {M}} {\setminus} {\mathbb {A}}\)).
Let \({\mathbb {Q}}\) be a randomly selected set of actives that will be used to build a consensus query of size N (\({\mathbb {Q}} \subset {\mathbb {A}} \wedge |{\mathbb {Q}}| = N\)). In this study, only two to 20 actives are used to create a consensus query (\(2 \le N \le 20\)).
Let \({\mathbb {C}} = {\mathbb {M}} \setminus {\mathbb {Q}}\) be the set of candidate molecules for p; sometimes referred to as the "database" of molecules to screen.
During a retrospective ligand-based virtual screening experiment, the active or inactive status of a molecule \(c_i \in {\mathbb {C}}\) is ignored, until the final computation of a performance metric or curve is triggered.
We call query \(q_i\) a molecule randomly drawn from \({\mathbb {Q}}\). Let \(score(q_i, c_j) \mid q_i \in \mathbb {Q} \wedge c_j \in \mathbb {C}\) be the Tanimoto score of the fingerprint of the query molecule at index i with the fingerprint of the candidate molecule at index j. If x is a consensus query of fingerprint type, writing \(score(x, c_j)\) is also valid.
The list of policies described hereafter are: single, pessimist, optimist, realist and knowledgeable. Policies are sometimes abbreviated using their first four letter.
Let \(\mathbb {O}\) be the set of all consensus policies:
\(\mathbb {O} = \{Sing,Oppo,Pess,Opti,Real,Know\}\).
Let \(cscore(o, \mathbb {Q}, c_i)\) be the consensus query score using policy \(o \in \mathbb {O}\) and set of known actives \(\mathbb {Q}\) with candidate molecule \(c_i.\)
Single query
In the single policy, each active is used in turn as the query molecule. This policy reproduces the average performance of using a single bioactive molecule as query instead of several.
$$\begin{aligned} cscore(Sing, q_i, c_i) = score(fp(q_i), fp(c_i)) \end{aligned}$$
Opportunist consensus of scores
The score assigned to a candidate molecule is the maximum score it gets over all query molecules. This consensus query is a set of fingerprints. In the literature [9, 11], this method is classified as a data fusion method and called max of scores or minimum of ranks.
$$\begin{aligned} &cons(Oppo, \mathbb {Q}) = \mathbb {Q}\\&cscore(Oppo, \mathbb {Q}, c_i) = \\&max\{score(fp(q_i), fp(c_i)) \forall q_i \in \mathbb {Q}\} \end{aligned}$$
Pessimist
The consensus query is the fingerprint resulting from doing a bitwise AND of all query fingerprints. This consensus is a single fingerprint. This is the "consensus bit pattern" from Xue et al. [8].
$$\begin{aligned}&x = cons(Pess, \mathbb {Q}) = \cap \{fp(q_i) \forall q_i \in \mathbb {Q}\}\\&cscore(Pess, \mathbb {Q}, c_i) = score(x, fp(c_i)) \end{aligned}$$
Optimist consensus of fingerprints
he consensus query is the fingerprint resulting from doing a bit-wise OR of all query fingerprints. This consensus is a single fingerprint.
$$\begin{aligned}&x = cons(Opti, \mathbb {Q}) = \cup \{fp(q_i) \forall q_i \in \mathbb {Q}\}\\&cscore(Opti, \mathbb {Q}, c_i) = score(x, fp(c_i)) \end{aligned}$$
The consensus query is the float vector where each index i of the vector contains the probability for bit i of being set over all queries. This consensus is a single fingerprint.
$$\begin{aligned}&x = cons(Real, \mathbb {Q}) =\\&[p(bit_j = 1) \forall j \in bits(fp(q_i)) \forall q_i \in \mathbb {Q}]\\&cscore(Real, \mathbb {Q}, c_i) = score(x, c_i) \end{aligned}$$
This consensus is almost like the realist consensus, except that query molecule fingerprints are potency-scaled (cf. formula 1) prior to being taken into account. This consensus is a single fingerprint.
$$\begin{aligned}&\mathbb {Q}_w = potency\_scale(\mathbb {Q})\\&x = cons(Know, \mathbb {Q}_w) =\\&[p(bit_j = 1) \forall j \in bits(fp(q_i)) \forall q_i \in \mathbb {Q}_w]\\&cscore(Know, \mathbb {Q}_w, c_i) = score(x, c_i) \end{aligned}$$
Our software, called Consent, is written in OCaml. OCaml is a statically-typed functional programming language allowing fast prototyping of scientific software [30].
We release all our software, scripts and datasets as open source. MACCS 166 bits (resp. ECFP4 2048 bits) fingerprints were computed using a small C++ program linked to Open Babel v2.4.1 (resp. RDkit v2015.03.1). MOLPRINT2D unfolded fingerprints are computed by Consent.
Consent can exploit multicore computers thanks to the Parmap [31] library. Some of the dataset preparation, running of experiments and post processing of results were accelerated by PAR [32].
Consensus query experiments
The size of the consensus is varied from 2 to 20 actives. Experiments don't go over 20 actives, because it is imaginable that if more than twenty actives are known for a given target, one might also have many known inactives and could be training a QSAR model. Also, some protein targets of our datasets only have 40 actives, so it is not allowed to use more than half of them to build a consensus query. Active molecules used to build a consensus query are randomly drawn from the actives of the given protein target. Actives used to build a consensus query are also removed from the database to screen. Hence, benchmarks don't become artificially easier as the consensus size is grown.
On the NRLIST dataset, experiments are repeated at least a hundred times since this dataset is small. On the MLQSAR dataset, experiments are repeated up to 20 times. MLQSAR is quite large and calculating statistics on it is costly. When a performance curve is reported, this curve is the median curve obtained during experiments using the same (protein target, consensus size, consensus policy) experiment configuration triplet. Calculating this median curve is memory intensive, especially for MLQSAR.
Speed experiments
Speed experiments were performed on PubChem SAID 485290, which contains 341,365 active and inactive molecules (largest dataset). The virtual screen was run once, then the median throughput (in molecule/s) of the five subsequent runs was computed.
Experiments were performed using a single core of an Intel Xeon CPU at 3.50 GHz on a Linux CentOS v6.8 workstation equipped with 64 GB or RAM.
Potency-scaling experiments
In potency scaling experiments, two consensus policies are compared. The database of compounds for a given target is rank ordered several times and the median rank for each active molecule with each consensus policy is recorded.
To compare two consensus policies, active molecules are first ordered by decreasing IC50, then the difference of ranks between the two policies is measured. This allows to compute a delta rank plot. A negative delta rank is a positive outcome: the given active molecule went higher in the rank-ordered list of compounds (i.e. it is found earlier by the virtual screen). A positive delta rank is the opposite negative outcome.
CPU-bounded experiments
In CPU-bounded experiments, two consensus policies are compared and the faster policy is allowed to score more molecules. For example, if policy \(p_1\) is two times faster than policy \(p_2\). Then, \(p_2\) will only screen a random half partition of the database while \(p_1\) will screen the whole database.
This experiment simulates an in silico combinatorial chemistry library enumeration [18, 33–36], where molecules are generated, fingerprinted and scored on the fly. The virtual screen is stopped after some amount of time, not because the immense library enumeration has finished.
Effect of the consensus size
Discriminative power
Effect of the consensus size on the consensus query global classification performance (AUC) and early recovery capability (\(\hbox {PM}_{1\%}\)). Experiment: HTS dataset PubChem SAID 463087, ECFP4 fingerprint and optimist consensus. Values shown are medians over 100 experiments ± 1 median absolute deviation [37]
As the consensus size is growing, the power to discriminate between active and inactive molecules increases.
When looking at the global performance of the classifier (monitored by its AUC) as well as its early recovery capability (monitored by its \(\hbox {PM}_{1\%}\) [29]), there is a clear improvement correlated with the growth in consensus size (Fig. 2). On this target, there is no more improvement in early recovery capability once a consensus of size twelve is reached. A bigger consensus only improves the AUC.
Speed comparison between the opportunist (oppo) and optimist (opti) consensus policies on ECFP4 fingerprints as a function of the consensus size
While a consensus fingerprint query screens at a constant speed of ~ 130,000 molecule/s (Fig. 3), this is not the case for a consensus based on scores.
Figure 3 shows a comparison of speed between the optimist and the opportunist consensus. As the number of known actives used to build the consensus is growing, the opportunist consensus becomes slower.
Effect of the consensus policy and fingerprint type
NRLIST dataset
Cumulative distribution functions of AUC values for consensus of sizes two, five and ten. The consensus was built using MACCS fingerprints in the left column, ECFP4 fingerprints in the middle and UMOP2D fingerprints on the right. The lower a curve is, the better the corresponding method. The vertical gray bar at AUC 0.5 allows to find the least random method (lowest curve)
Cumulative distribution functions of \(\hbox {PM}_{10\%}\) values for consensus of sizes two, five and ten. The consensus was built using MACCS fingerprints in the left column, ECFP4 fingerprints in the middle and UMOP2D fingerprints on the right. The lower a curve is, the better the corresponding method
On this dataset, results across consensus policies and fingerprints can be seen in Fig. 4.
For MACCS fingerprints, the most efficient policy is the opportunist, followed by the realist consensus. The optimist consensus performs less well than a single query when the AUC reached is greater than 0.85.
For ECFP4 fingerprints, the most efficient policy is also the opportunist one. Then, the realist consensus or the optimist consensus (for AUC ≥ 0.75) are the most powerful. With this fingerprint, all consensus policies have a better performance than a single query, as can be seen in the gap between the black curve and all other curves.
For the UMOP2D fingerprint, the trend is similar than ECFP4. However, the optimist consensus is always better than the realist one and can even outperform the opportunist consensus for PM values ≥ 0.8 (Fig. 5).
The realist consensus is not shown on these AUC plots. Its performance is very similar to the realist consensus but its effect is different and shown later in "Effect of potency-scaling" section.
Across fingerprints, the least random and best performing method is always the opportunist consensus. However, as the consensus size gets smaller, the spread between curves (and hence the performance difference between methods) becomes smaller.
It is interesting to observe that the trend is different for each fingerprint. If something is observed for one fingerprint, it might not hold for other fingerprints.
MLQSAR dataset
Cumulative distribution functions of AUC values on the MLQSAR dataset. Cf. Fig. 4 for legend details
Cumulative distribution functions of \(\hbox {PM}_{10\%}\) values on the MLQSAR dataset. Cf. Fig. 5 for legend details
Results on this dataset differ from results on the NRLIST. As a general trend, the spread between curves for different consensus policies is smaller. The biggest difference is that even by looking only at AUC values, the optimist consensus on MACCS fingerprints and the realist consensus on UMOP2D fingerprints are clearly disqualified. They perform worse than a single query. While on the NRLIST, this observation can only be made by looking at CDF curves of PM values.
Experiments on this dataset show that combining the realist policy with the MACCS or ECFP4 fingerprints can outperform the performance of the opportunist consensus (left and middle columns of Figs. 6 and 7, yellow curve under all other curves).
Median AUC and PM values with their median absolute deviations
Csize
UMOP2D
0.542±0.059✠▼
0.548±0.052✠
0.571±0.055
0.514±0.061▼
0.542±0.046✠◊
0.564±0.057◊
0.700± 0.142◊
\(\hbox {PM}_{10\%}\)
'csize' stands for consensus size. A '✠' indicates that a distribution of peformance metric values is not significantly different from the one of the single policy (Kolmogorov–Smirnov test with p-value \(\ge 0.05\)). A '◊' indicates that a distribution of peformance metric values is not significantly different from the one of the opportunist policy. A '▼' indicates performance worse than the single policy
Table 3 provides a bird's-eye view of results shown in Figs. 4, 5, 6 and 7 (same protocol but different experiment).
Effect of potency-scaling
Effect of applying potency scaling (knowledgeable policy) or not (realist policy) to build the consensus. The median change in rank is shown over 1000 experiments for all actives of the NRLIST PR-target (NRLIST target with the most active ligands) and MACCS fingerprints. Active molecules are ranked ordered from most to least potent (left to right)
The effect of potency scaling is that it brings highly active molecules closer to the query but pushes further away less potent molecules (Fig. 8).
Cases where the knowledgeable consensus policy brings the most active molecules closer to the query compared to another policy
Know verus real
Know versus oppo
Experiment: all NRLIST targets, median change in rank over 500 experiments and ECFP4 fingerprint
In our experiments (Table 4) and in terms of bringing the most active molecules closer to the query, there is a clear advantage of the knowledgeable policy (which is potency scaled) versus the realist one. On the NRLIST, the knowledgeable policy is also better than the opportunist one. However, on the two MLQSAR targets with a wide distribution of potency values, this behavior is observed only once.
CPU-bounded experiment on the NRLIST AR- target (left) and PubChem SAID 485290 (right)
Cases where the optimist query outperforms the opportunist one in CPU-bounded experiments
MLQSAR
NRLIST
Size: consensus size; speedup: how many times the optimist consensus is faster at scoring than the opportunist consensus. Experiment: compute the accumulated curve of actives on MLQSAR (median curve over 10 experiments) and NRLIST (median curve over 50 experiments). The number of times where the optimist curve dominates the opportunist one is reported
Consensus queries using a single fingerprint can be several times faster than a consensus based on scores (Table 5). For example, a consensus query using only five actives is 1.46 times faster than a consensus of five scores. With 20 actives, it becomes 3.19 times faster.
In theory, a consensus made of N scores could be up to N times slower than a fingerprint consensus. However, our software being optimized, the slowdown is not so high.
In the case where the computational exploration of the chemical space is limited by the speed at which molecules can be scored, there is an advantage at using a consensus query which is faster than a consensus of scores (Fig. 9 and Table 5). In at least six out of nine targets from the MLQSAR dataset, the optimist consensus outperforms the opportunist one in CPU-bounded experiments. On the NRLIST dataset, the same trend is observed in at least eight out of ten targets.
We say a consensus fingerprint degenerates when its performance become worse than that of a single query, either in terms of global classification (AUC) or early retrieval (\(\hbox {PM}_{x\%}\)). Based on Figs. 4, 5, 6, 7 and Table 3, we give some warnings and recommendations.
It is safe to use the opportunist policy (consensus of scores) for all the fingerprints we tested. Also, five actives are enough to build a consensus query that will perform significantly differently compared to the single policy (Table 3).
In our setting, all consensus policies are safe to use with the ECFP4 fingerprint. We note that the realistic consensus sometimes outperform the opportunist one in terms of early retrieval (middle column in Fig. 7; PM values ≥ 0.7).
The MACCS fingerprint combined with the optimist policy must be avoided. A diverse set of actives sets too many bits in the consensus fingerprint, rendering it non selective (left column in Figs. 5, 6, 7). MACCS fingerprints combined via the realist policy can be used. Their performance approaches the consensus of scores in the HTS datasets (left column in Figs. 6, 7).
The UMOP2D fingerprint combined with the realist policy must also be avoided (right column in Figs. 5, 6, 7). However, UMOP2D fingerprints combined via the optimist policy allow to approach the performance of the opportunist consensus in terms of AUC and PM (right column in Figs. 4, 5, 6, 7).
The pessimist consensus is not used in our study because when molecules are diverse, the number of set bits in the consensus fingerprint becomes too small, so the resulting fingerprint is non selective. This consensus has been used in the past [6, 8], but for series of congeneric molecules while our experiments use diverse and randomly selected actives.
While we don't completely disregard the knowledgeable policy, it must be used with caution. If the potency values spread several order of magnitudes and the potency measures are of high quality, using this policy might be useful.
In this study, the effect of consensus size, consensus policy and chemical fingerprint choice was benchmarked on decoy-free datasets. It is hoped that these results will be predictive of performance in real world applications.
The consensus policies that were extensively benchmarked are: opportunist (a consensus of scores), optimist (a union of fingerprints), realist (an average of fingerprints) and knowledgeable (an average of potency-scaled fingerprints).
Our results confirm the reliability and performance of the consensus of scores (max score/min rank).
A consensus fingerprint allows to rank-order molecules as fast as a regular fingerprint-based similarity search. If the exploration of the chemical space is limited by the speed at which molecules can be scored, an optimist consensus of ECFP4 or UMOP2D fingerprints can outperform a consensus of scores in terms of finding more active molecules.
As a final remark, consensus queries have a few advantages that are worth remembering:
They can be used even when the number of active molecules is scarce. This is interesting in the case of compounds found from literature, patent searches or as a followup to a structure-based virtual screening campaign which found only a handful of actives.
They can be used even when there is no information available about inactive molecules.
They don't require a training step prior to be used as classifiers.
They are so simple that they can be created and used by non machine learning experts.
Last but not least, consensus queries can be used as an additional method, perpendicular to other in silico approaches, to confirm which molecules to purchase for wet-lab testing.
Project Name: Consent
Project home page:
https://github.com/UnixJunkie/consent
Software archives:
http://meilerlab.org/software or
https://zenodo.org/record/1006728
Operating system: Linux, Mac OS X
Programming language: OCaml
Other requirements: the OCaml Package Manager (OPAM), Open Babel, RDkit
https://data.mendeley.com/datasets/52hjy6vjwb/1
Any restrictions to use by non-academics: None
IC50: 50% Inhibitory Concentration. An IC50 value represents the concentration of a drug that is required to inhibit a given biological process by 50% invitro.
http://nrlist.drugdesign.fr.
http://www.meilerlab.org/qsar_pubchem_benchmark_2012.
FB designed the study, wrote the software, ran experiments and prepared figures and tables. OV implemented MOLPRINT2D fingerprints in the BCL and computed the MOLPRINT2D fingerprints that were used early in the study. All authors have analyzed the results and participated in writing the manuscript. All authors read and approved the final manuscript.
Work in the Meiler laboratory is supported through NIH (R01 GM080403, R01 GM099842) and NSF (CHE 1305874). FB is a JSPS international research fellow http://www.jsps.go.jp/english/. FB acknowledges the use of MarvinView v17.1.3 and JKlustor v0.07 from ChemAxon's JChem (2017) http://www.chemaxon.com.
Department of Chemistry, Vanderbilt University, Nashville, TN, USA
Division of System Cohort, Medical Institute of Bioregulation, Kyushu University, Fukuoka, Japan
Lake BM, Salakhutdinov R, Tenenbaum JB (2015) Human-level concept learning through probabilistic program induction. Science 350(6266):1332–1338. https://doi.org/10.1126/science.aab3050 View ArticleGoogle Scholar
Altae-Tran H, Ramsundar B, Pappu AS, Pande V (2017) Low data drug discovery with one-shot learning. ACS Cent Sci 3(4):283–293. https://doi.org/10.1021/acscentsci.6b00367 View ArticleGoogle Scholar
Johnson MA, Maggiora GM (1990) Concepts and applications of molecular similarity. Wiley, New York ISBN 978-0-471-62175-1Google Scholar
Bender A, Glen RC (2004) Molecular similarity: a key technique in molecular informatics. Org Biomol Chem 2:3204–3218. https://doi.org/10.1039/B409813G View ArticleGoogle Scholar
Willett P (2006) Similarity-based virtual screening using 2D fingerprints. Drug Discov Today 11(23):1046–1053. https://doi.org/10.1016/j.drudis.2006.10.005 View ArticleGoogle Scholar
Shemetulskis NE, Weininger D, Blankley CJ, Yang JJ, Humblet C (1996) Stigmata: an algorithm to determine structural commonalities in diverse datasets. J Chem Inf Comput Sci 36(4):862–871. https://doi.org/10.1021/ci950169+ View ArticleGoogle Scholar
Singh SB, Sheridan RP, Fluder EM, Hull RD (2001) Mining the chemical quarry with joint chemical probes: an application of latent semantic structure indexing (LaSSI) and toposim (Dice) to chemical database mining. J Med Chem 44(10):1564–1575. https://doi.org/10.1021/jm000398+ View ArticleGoogle Scholar
Xue L, Stahura FL, Godden JW, Bajorath J (2001) Fingerprint scaling increases the probability of identifying molecules with similar activity in virtual screening calculations. J Chem Inf Comput Sci 41(3):746–753. https://doi.org/10.1021/ci000311t View ArticleGoogle Scholar
Hert J, Willett P, Wilton DJ, Acklin P, Azzaoui K, Jacoby E, Schuffenhauer A (2004) Comparison of fingerprint-based methods for virtual screening using multiple bioactive reference structures. J Chem Inf Comput Sci 44(3):1177–1185. https://doi.org/10.1021/ci034231b View ArticleGoogle Scholar
Godden JW, Stahura FL, Bajorath J (2004) Pot-dmc: a virtual screening method for the identification of potent hits. J Med Chem 47(23):5608–5611. https://doi.org/10.1021/jm049505g View ArticleGoogle Scholar
Whittle M, Gillet VJ, Willett P, Loesel J (2006) Analysis of data fusion methods in virtual screening: similarity and group fusion. J Chem Inf Modeling 46(6):2206–2219. https://doi.org/10.1021/ci0496144 View ArticleGoogle Scholar
Vogt I, Bajorath J (2007) Analysis of a high-throughput screening data set using potency-scaled molecular similarity algorithms. J Chem Inf Modeling 47(2):367–375. https://doi.org/10.1021/ci6005432 View ArticleGoogle Scholar
Wang Y, Bajorath J (2008) Bit silencing in fingerprints enables the derivation of compound class-directed similarity metrics. J Chem Inf Modeling 48(9):1754–1759. https://doi.org/10.1021/ci8002045 View ArticleGoogle Scholar
Schultes S, Kooistra AJ, Vischer HF, Nijmeijer S, Haaksma EEJ, Leurs R, de Esch IJP, de Graaf C (2015) Combinatorial consensus scoring for ligand-based virtual fragment screening: a comparative case study for serotonin 5-HT3A, histamine H1, and histamine H4 receptors. J Chem Inf Modeling 55(5):1030–1044. https://doi.org/10.1021/ci500694c View ArticleGoogle Scholar
Polishchuk PG, Madzhidov TI, Varnek A (2013) Estimation of the size of drug-like chemical space based on GDB-17 data. J Comput Aided Mol Des 27(8):675–679. https://doi.org/10.1007/s10822-013-9672-4 View ArticleGoogle Scholar
Sterling T, Irwin JJ (2015) Zinc 15—ligand discovery for everyone. J Chem Inf Modeling 55(11):2324–2337. https://doi.org/10.1021/acs.jcim.5b00559 View ArticleGoogle Scholar
Reymond J-L, Awale M (2012) Exploring chemical space for drug discovery using the chemical universe database. ACS Chem Neurosci 3(9):649–657. https://doi.org/10.1021/cn3000422 View ArticleGoogle Scholar
Ruddigkeit L, Blum LC, Reymond J-L (2013) Visualization and virtual screening of the chemical universe database GDB-17. J Chem Inf Modeling 53(1):56–65. https://doi.org/10.1021/ci300535x View ArticleGoogle Scholar
Mysinger MM, Carchia M, Irwin JJ, Shoichet BK (2012) Directory of useful decoys, enhanced (DUD-E): better ligands and decoys for better benchmarking. J Med Chem 55(14):6582–6594. https://doi.org/10.1021/jm300687e View ArticleGoogle Scholar
Lagarde N, Ben Nasr N, Jérémie A, Guillemain H, Laville V, Labib T, Zagury J-F, Montes M (2014) Nrlist bdb, the manually curated nuclear receptors ligands and structures benchmarking database. J Med Chem 57(7):3117–3125. https://doi.org/10.1021/jm500132p View ArticleGoogle Scholar
Butkiewicz M, Lowe EW, Mueller R, Mendenhall JL, Teixeira PL, Weaver CD, Meiler J (2013) Benchmarking ligand-based virtual high-throughput screening with the pubchem database. Molecules 18(1):735–756. https://doi.org/10.3390/molecules18010735 View ArticleGoogle Scholar
O'Boyle Noel, Banck Michael, James Craig, Morley Chris, Vandermeersch Tim, Hutchison Geoffrey (2011) Open Babel: an open chemical toolbox. J Cheminform 3(1):33. https://doi.org/10.1186/1758-2946-3-33 View ArticleGoogle Scholar
Tosco P, Stiefl N, Landrum G (2014) Bringing the MMFF force field to the RDKit: implementation and validation. J Cheminform 6(1):37. https://doi.org/10.1186/s13321-014-0037-3 View ArticleGoogle Scholar
Landrum G. RDKit: Open-source cheminformatics. http://www.rdkit.org
Bender A, Mussa HY, Glen RC, Reiling S (2004) Similarity searching of chemical databases using atom environment descriptors (MOLPRINT 2D): evaluation of performance. Journal of Chemical Information and Computer Sciences 44(5):1708–1718. https://doi.org/10.1021/ci0498719 View ArticleGoogle Scholar
Bender A, Mussa HY, Glen RC, Reiling S (2004) Molecular similarity searching using atom environments, information-based feature selection, and a naïve bayesian classifier. J Chem Inf Comput Sci 44(1):170–178. https://doi.org/10.1021/ci034207y View ArticleGoogle Scholar
Kothiwale S, Mendenhall JL, Meiler J (2015) Bcl::conf: small molecule conformational sampling using a knowledge based rotamer library. J Cheminform 7(1):47. https://doi.org/10.1186/s13321-015-0095-1 View ArticleGoogle Scholar
Sastry M, Lowrie JF, Dixon SL, Sherman W (2010) Large-scale systematic analysis of 2D fingerprint methods and parameters to improve virtual screening enrichments. J Chem Inf Modeling 50(5):771–784. https://doi.org/10.1021/ci100062n View ArticleGoogle Scholar
Lopes JCD, dos Santos FM, Martins-José A, Augustyns K, De Winter H (2017) The power metric: a new statistically robust enrichment-type metric for virtual screening applications with early recovery capability. J Cheminform 9(1):7. https://doi.org/10.1186/s13321-016-0189-4 View ArticleGoogle Scholar
Leroy X, Doligez D, Frisch A, Garrigue J, Rémy D, Vouillon J (2016) The ocaml system release 4.04- documentation and user's manualGoogle Scholar
Danelutto M, Cosmo RD (2012) A Minimal Disruption Skeleton Experiment: Seamless Map and Reduce Embedding in OCaml. Procedia Computer Science 9(0), 1837–1846. https://doi.org/10.1016/j.procs.2012.04.202. Proceedings of the International Conference on Computational Science, ICCS 2012
Berenger F, Coti C, Zhang KYJ (2010) PAR: a PARallel and distributed job crusher. Bioinformatics 26(22):2918–2919. https://doi.org/10.1093/bioinformatics/btq542 View ArticleGoogle Scholar
Kerber A, Laue R, Meringer M, Rücker C (2007) Molecules in silico: a graph description of chemical reactions. J Chem Inf Modeling 47(3):805–817. https://doi.org/10.1021/ci600470q View ArticleGoogle Scholar
Hoksza D, Škoda P, Voršilák M, Svozil D (2014) Molpher: a software framework for systematic chemical space exploration. J Cheminform 6(1):7. https://doi.org/10.1186/1758-2946-6-7 View ArticleGoogle Scholar
Naderi M, Alvin C, Ding Y, Mukhopadhyay S, Brylinski M (2016) A graph-based approach to construct target-focused libraries for virtual screening. J Cheminform 8(1):14. https://doi.org/10.1186/s13321-016-0126-6 View ArticleGoogle Scholar
Liu T, Naderi M, Alvin C, Mukhopadhyay S, Brylinski M (2017) Break down in order to build up: decomposing small molecules for fragment-based drug design with emolfrag. J Chem Inf Modeling 57(4):627–631. https://doi.org/10.1021/acs.jcim.6b00596 View ArticleGoogle Scholar
Leys C, Ley C, Klein O, Bernard P, Licata L (2013) Detecting outliers: do not use standard deviation around the mean, use absolute deviation around the median. J Exp Soc Psychol 49(4):764–766. https://doi.org/10.1016/j.jesp.2013.03.013 View ArticleGoogle Scholar


You look…perfect. God created pudding, and then he rested. I'm Dexter, and I'm not sure what I am. Finding a needle in a haystack isn't hard when every straw is computerized. I've lived in darkness a long time. Over the years my eyes adjusted until the dark became my world and I could see. I'm really more an apartment person.
God created pudding, and then he rested. Watching ice melt. This is fun. I have a dark side, too. He taught me a code. To survive.
2019 © PineCone by mallinidesign. Buy this wordpress theme.
Peccato testari futurus emanant me ad. Cognita ima ita tanquam age indutos tot quantum calorem. Invenire ab occurrat ac ne ex indiciis corporea. Pla visa tum quum sese erat. Alterius funditus ne singulae quidquid actiones mo ob vi. Ullius adsunt nec ita pileos possem melius his dem tantas.
Alterius funditus ne singulae quidquid actiones mo ob vi. Ullius adsunt nec ita pileos possem melius his dem tantas. Cognita ima ita tanquam age indutos tot quantum calorem.


Of all the worldly goods that we hold in common, the one we almost never think about or acknowledge is the greatest.
There is a part of the Christian tradition that relates charitable giving to the Seventh Commandment, which is the prohibition on theft. The idea is that the world and all that it contains are God's gift to corporate mankind — "the universal destination of goods," in theological jargon — so that the man with two coats holds one of them unjustly when his neighbor shivers in the cold with no coat at all. Private property, in this understanding, is instrumental in promoting the common good, but it does not supersede the primordial gift.
There is great grace and goodness and wisdom in that. But it simply assumes the existence of coats and coat factories, the vast and incomprehensibly complex apparatus of coat-production that incorporates materials, effort, and intelligence from people all over the world, coordinating the efforts of men and women who do not speak the same languages, share the same religion, reside in the same countries, or even know of one another's existence — from goose farmers to computer programmers to chemical engineers.
"Feed my sheep," sayeth the Lord. Okay: Feed 'em what?
Here is a little thought experiment. Scenario 1: You have two coats, your neighbor has none, and so you give him a coat. Scenario 2: You have two coats, your neighbor has none, but he also doesn't have enough food, and he may not be able to make the rent, so you sell one of your coats and give him the money and let him decide for himself what is his most pressing need. Scenario 3: You have a thousand coats, and your neighbor has none, and he is hard-pressed in many other ways, so you sell 999 coats and plant an orchard, and redirect a portion of the proceeds from that orchard to helping your neighbor and others like him. Scenario 4: You have ten thousand coats, and your neighbor has none, and so you sell 9,999 coats and use the money to plant an orchard and some grapevines and a small herd of cattle — they were pretty darned nice coats that you sold — and you hire your poor neighbor to help you manage all that, as a consequence of which he is no longer too poor to buy his own coat — a secondary but happy result of the greater good that now all of your neighbors enjoy a more abundant supply of fruit and vegetables and milk and meat, whether they are poor, rich, or in-between.
Charity is honorable and necessary. We all — but especially those of us who have been blessed with so much — have a positive moral obligation to help the poor. But when we speak of the distribution and consumption of goods, we ignore the more fundamental question of how those goods get produced in the first place. God may have given us the Earth as a gift, but He does not plant potatoes or raise pigs or build the refrigerated trucks that keep people far from the farms and ranches from starving to death. He leaves that to us, one of the many ways in which we share in His creative work.
Keep that in mind when you hear Senator Warren denouncing the supposed excesses of capitalism and the so-called greed of those who do the actual work of feeding and clothing the world, fueling its machines and making its medicine. When politicians look to stick their snouts into that, they talk a great deal about the poor. Or at least they used to: Now, they talk more about the alleged privations of the middle class, who of course vote in greater numbers than the poor do. That isn't charity — it is simply the desire of people who produce nothing to exercise power over people they hate and envy.
Sweet words don't feed the poor. Monsanto does.
It took us a while to figure that out. For the first couple hundred thousand years, Homo sapiens mostly ate grubs and barked at the moon. We didn't really get our act together until the 18th century and the Industrial Revolution, at which point the graph of the economic output of the human species takes an upward turn of about 80 degrees. And we moderns who are carrying our iPhones through the majestic plenty of a Walmart Super Center are, biologically speaking, the same savages we were with the grubs and the moon-barking and whatnot. In the course of less than 1 percent of human history, we went from being something very close to second-rate monkeys to whacking around golf balls on the moon. We made something of God's gift, after all. We can share our gifts because we have gifts to share in abundance that would have been unthinkable not very long ago — within the lifetimes of our parents and grandparents, in fact. That did not happen by accident, and it is not fate or Hegelian capital-H History or Moore's Law that made it happen, either. Prosperity is not inevitable. We evaded it for millennia, and some of us manage to evade it even now.
We are proud of our saints and our great philanthropists, the rich men who have the great honor of supporting the good works of the world. But as you cut into that turkey today, remember that somebody did the hard and dirty work of raising it, butchering it, packing it, driving the truck that brought it to your town, stocking the store shelves — and the very difficult work of figuring out how to get all that done, from domesticating turkeys to fueling that truck, a long unbroken line of human effort and ingenuity stretching back to the first guy who figured out how to chip a piece of stone a certain way to make it more useful. Of all the worldly goods that we hold in common, that one — the one we almost never think about or acknowledge — is the greatest. That is not mysticism or ideology or cheap sentiment: That is something real. We are all in this together after all — not in principle, but in fact. "Capitalism" is too small a word for it. Ludwig von Mises had it right that his field of study was not economics but Human Action, the name he gave to his great work. (Funny word, "work" — opus in Latin, karma in Sanskrit, the connotations of each being worth considering.) Civilization is a game of inches, and it is built on work — on human action, a gift for which we should be truly grateful.


Catia Coacci, graduated in 1999 at the School of Art, has a long experience in the field of jewelery, before working in various workshops and opening his own workshop then. All his creations are made by hand with jewelry and accessories designed by herself. The jewelry and accessories are the result of creativity that cleverly mixes the trends of fashion with minimal lines and chic design.
Necklace in pink and lacing cord 925 silver and yellow gold bathroom. Set of five beads in natural wood with a star in a mother of pearl and tassel fuchsia tulle, bound in 925 sterling silver and yellow gold bathroom. Handmade. Circumference: 43 cm.
Fuchsia lacing cord necklace with 925 sterling silver and yellow gold and bathroom. Set of four beads in natural wood with a star and a mother of pearl tassel fuchsia tulle bound in 925 sterling silver and yellow gold bathroom. Handmade. Circumference: 43 cm.
Adjustable cord bracelet in fuchsia color. Set of five beads in natural wood with a star and a mother of pearl tassel white polka dot tulle bound with 925 silver and yellow gold bathroom. Handmade. Minimum circumference 12 cm, maximum 14.
Bracelet in 925 sterling silver and yellow gold bathroom with adjustable closure. Two small golden nuggets, three pearls in natural wood, a star and mother of pearl tassel wool peach. Made by hand. Circumference: 14 cm.


Miss Adalyn will be turning ONE in a couple weeks. I can't believe it's been a year already. Time is unfair. It really does go by so quickly. I've known Adalyn's parents for several years and if you know her Mama, Briana, then you know how much she loves to dress Addie purely in P&P (princess and pink!) It suits her perfectly because she's Mama and Daddy's little Princess and oh so cute.... Here are a few of my favorite photos of this little sweetie-pie.
It's so much FUN turning ONE!


text:
Bezanilla-McGraw Funeral Home
Marilyn A. Homan, 86, West Carthage
WEST CARTHAGE, NY — Marilyn A. Homan, 86, of 54 High St., West Carthage, died Saturday afternoon, Feb. 1, 2020, at the Carthage Area Hospital.
Marilyn was born on Sept. 1, 1933, in Utica, the daughter of the late Vern (Micky) and Bernetta (Hurley) McVoy. She attended school in Utica and graduated from Lowville Academy in 1951. She received her license practical nursing degree from Cortland County Hospital School of Nursing in 1952.
She married LeRoy J. Homan on Dec. 5, 1953, at St. Ann's Church in Castorland.
Marilyn worked at the former Carthage Hospital on State St. and the Carthage Area Hospital. She later worked for Dr's. Henck and Rasmussen and retired in 1985 while working for Dr. Imdad.
She was a member of St. James Catholic Church, American Legion Auxiliary Post # 789, Carthage, a former "Citizen of the Year" in 1989 and an election inspector for Jefferson County for many years. She loved reading, jigsaw puzzles and visiting with family and friends. Throughout her life she provided home health care for many elderly people, allowing them to remain in their homes for as long as possible.
She is survived by her husband: LeRoy J. Homan, two sons and daughter-in-laws: Randy V. (Marci) Homan of Peterborough, NH and Rick R. (Kathleen) Homan of West Carthage; four grandchildren, 12 great-grandchildren; several nieces and nephews and two sister-in-laws.
She was predeceased by two sisters, Mary Payberg and Patricia Balash and three brothers, Gerald, Larry and Richard McVoy.
Funeral services will be held 11:00 a.m. Saturday, Feb. 8, 2020, at St. James Catholic Church with Rev. Donald A. Robinson officiating. Spring burial will be in Sunnyside Cemetery, Naumburg. Friends may call 10 to 11 a.m. Saturday at the Church.
Arrangements are with the Bezanilla-McGraw Funeral Home.
In lieu of flowers, memorial donations may be made to St. James Church, 327 West St., Carthage, NY 13619.
To leave a condolence, go to www.bezanillafh.com.
Next articleWhat happened overnight? Police blotter report for Sunday, Feb. 2

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: My Own WiFi Router + DHCP Server on a Public Wifi I live in the dorms of my University, that has a public WiFi for each building.
I have several computers in my apt (+ a RPI, a Chromecast Audio, and a WiFi printer) which I want to connect to my own secure network that would have access to the internet through the public WiFi.
I don't have any ethernet ports in my apt, or anywhere around it - just WiFi access based on routers scattered throughout the building.
I am currently using my Raspberry Pi as a wifi bridge, but it works quite poorly.
I'm looking for some hardware that could do the job. I know that any windows pc can do the job (using connectify, or some new feature in windows 10 that allows it), but I want a dedicated low-energy router to do it, preferably one that could create a 5GHz network.
I looked all around the internet, but aside from Traveler Routers, which hold many functions that I don't need like batteries, power-banks or a small size, and are therefore pretty expensive, I did not find ANYTHING that I could clearly interpret as something that could do what I need it to.
What kind of hardware can I get to get this done? What features should I be looking for?

A: Ugly hack
With Linux a WiFi card can be client and AP simultaneously, see Can a Linux machine act as both a wireless client and access point simultaneously using a single physical WLAN interface?
It looks like the Raspberry Pi can't do it but some routers compatible with OpenWRT can, see https://wiki.openwrt.org/doc/recipes/ap_sta and http://lechacal.com/wiki/index.php/Repeat_a_Wifi_Hotspot
Performance will suffer as there will be only one WiFi module sharing one frequency for everything, or using 2 frequencies and spending half the time in each.
Some routers allow for a separate guest network (which is 2 access points so not the same, but still 2 simultaneous profiles for 1 WiFi module) so stability should be OK - in some cases at least, it depends on the drivers.
Hackish
Use 2 routers one client and one AP, connected with an Ethernet cable and with routing setup between them. It's still low power and having two devices doesn't really matter here as it's a fixed installation. WiFi performance will be normal as there will be two physical WiFi modules.
One router needs to be able to act as a WiFi client, the other needs to be able to use Ethernet for WAN. You can use 2 Raspberry Pi or 2 WiFi routers.
Clean
Buy something like a RB433 from Mikrotik and 2 WiFi modules, it's built for the job.

redpajama_set_name: RedPajamaStackExchange


text:
Q: OpenGL FreeImage Texture Loading Error Currently, my rendering works except for the textures rendering totally black. I am getting the error 1380, or GL_INVALID_ENUM, right after calling glTexture2D in this segment of code.  I have tried everything that I can think of, but the error will not go away.
-Calling get error right before this block of code
-Texture is in powers of 2 (128 x 128)
-Using new 24-bit photoshop .bmp
    glEnable(GL_TEXTURE_2D);

    FREE_IMAGE_FORMAT imageFormat = FreeImage_GetFileType(filename, 0);
    FIBITMAP* bmpImage = FreeImage_ConvertTo32Bits(FreeImage_Load(imageFormat, filename));

    int width = FreeImage_GetWidth(bmpImage);
    int height = FreeImage_GetHeight(bmpImage);
    int nBPP =  FreeImage_GetBPP(bmpImage);

    if (nBPP == 32)
    {
        // Generate an ID for the texture.
        glGenTextures(1, &m_texture);

        // Bind the texture as a 2D texture.
        glBindTexture(GL_TEXTURE_2D, m_texture);

        // Load the image data into the texture unit.
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)FreeImage_GetBits(bmpImage));

        if(auto temp = glGetError())
        {
            // GL_INVALID_ENUM/1380 here
        }
    }

    FreeImage_Unload(bmpImage);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

A: You say the image is 24-bits but in your code you write:
if (nBPP == 32)


text:
GarbageCan
About GarbageCan
Engineering Physicist, Tinkler of Ivories
HOWL Premium, HOWL Originals, HOWL.FM
GarbageCan replied to JulyDiaz's topic in General Earwolf
FYI I signed up for the annual plan using the web client with my login but my auto renewal kept going. So this month I got charged twice; the app and web client don't seem to be too aware of each other's payment method. So if you do sign up for an annual plan, make sure you cancel any auto payment on your phone.
Episode 202 — Pickup Artist
GarbageCan replied to agata's topic in Professor Blastoff
Considers himself a 'pick-up artist' Doesn't feel comfortable calling women 'broads', but is fine with 'pieces of ass' Is humourless Loves saying words, then following them up with 'that was a joke'/'that's from my comedy routine' Loves to talk over people Loves to stop people from making a point, so he can say 'Listen' Doesn't really listen Who would have guessed this could have gone poorly.
Episode 198— Fear and Living Well
Whew nothing to add, but just want to reiterate that this was a fantastic episode featuring an amazing guest. Also, stephanie is crazy. I feel like I have a good appetite for pizza, and have eaten a large by myself in the past. But 3???? I'm excited to see her try.
EPISODE 336 — NOT Farts and Procreation 4
GarbageCan replied to JulyDiaz's topic in Comedy Bang Bang
This has been a tough few days dealing with this loss. The legacy Harris has left in all of the podcasts he has been a part of has really been what has got me through this. When I listen to them, I can't help but find his humour so fresh, even though I've heard it before it manages to catch me off guard. Thank you Scott for putting this out, and for eulogizing to a certain extent in the beginning. You might not have been the best person to eulogize him in a general sense, but for me and many others on this forum, we always had the treat of hearing Harris alongside you on this podcast or in UTU2TM or Analyze Phish, and so hearing you speak about Harris as a person is really what I needed to hear. I teared up during it, and then I loved the episode, and loved the post episode collection of his jokes. But when it ended, I was hit with a level of emotion I wasn't expecting. I guess it finally feels real, whereas before I was holding on to some sliver of hope that it would all be a hoax. I'm glad I was alone listening, because I reached a level of bawling that I was not prepared for. Harris was incredible, one of the best, and I'm thankful we got to have one more time with him. I'm glad to hear he's enjoying himself in the afterlife.
We will miss you Harris
GarbageCan replied to CraigHowe's topic in General Earwolf
I'm still feeling so sad today. Losing Ryan Davis a couple of years ago made me realize the unique one-side friendship that podcasts have the ability to create, due to their intimate nature. And it's what makes these tragedies feel so personal and devastating. I remember exactly where I was when I first heard Harris on Comedy Bang Bang, waiting at a train station in Ottawa. It was just after one of Ice-T's problematic ideas, and when he brought out his phone I fell in love with his sense of humour. There was always a charm and lovable quality with his delivery that made his jokes great, and lent itself to anti-comedy so well. And ever since, I've delighted in every one of his appearances on this and other earwolf shows. I think some of my favourite jokes by him were his extremely convoluted ones, like: "Did you guys hear about that new deal where if you, you go in on it with a cast member from That '70s Show? You get a discount on mustard and/or salad toppings. It's a Laura Prepon Grey Poupon Crouton Groupon". And I have a sneaking suspicion based on his jokes like that that he made some contribution to the great parks and rec throwaway news headline "Ice Town costs Ice Clown his Town Crown". It sucks, it's painful, it's in many ways unbelievable, but what's getting me through it is re-listening to his comedy. Even in this sad state, and knowing that I will never hear anything new from him, I still can't help but laugh at everything he does. He was a special, talented man, and my heart goes out to all of his friends and family.
EPISODE 237 — BALL DOCTORING
GarbageCan replied to JulyDiaz's topic in Sklarbro Country
They did on the website at least.
Episode 163 — Eric the Paid Intern Returns: LIVE at the UCBSunset
GarbageCan replied to JulyDiaz's topic in improv4humans with Matt Besser
It was very fun and we hope you come back. In terms of being outraged (Is anyone grievously offended by "cunt"?) at just the n-word, it's because racial sensitivity is what matters to her on a personal level. I understand you were emphasizing context, however she found the context of a white person confidently announcing to a room of mostly white people that it is okay problematic. There were some other things, but these are discussions better left for Case Closed, I just thought I would share that I could see Case Closed doing well in a bonus episode. I think the two sides have validity: it's silly to just never be able to say a word, and why can't white people just recognize the vile origins of this word and let it go. Personally, I just avoid it altogether because there is nothing to gain by saying it and plenty to lose.
Musical episodes should definitely not be changed at all. They're great, they've introduced me to some great new bands. If people don't like it, it's very clear that it is a musical episode up front and they can skip it. Case closed, also something I enjoy, is something I would enjoy keeping in the episode. It's so easy to skip through the segment if you don't enjoy it. That being said, I know a lot of people don't like it and I wouldn't mind it coming out as a bonus episode labelled as Case Closed for their sake. I just went to see Matt Besser in Vancouver do I4H last weekend. And to the great outrage of my girlfriend, during the Q&A portion Matt said how it's okay to say the N-word and then proceeded to say it. It completely ruined the night for her, and so I can see how Case Closed could put people off of the show. Which is to say that I guess I'm leaning more towards putting Case Closed in a bonus episode.
Episode 293 — Monster Muscles
It was the repetition, but even more so it was how poorly the loop was done, going like 75% of a beat too long. Man, that's the best plugs theme ever, I've never laughed so hard so immediately at one of those.
Episode 125 — Live from SXSW!
Wow, that was an incredible show from start to finish. I haven't laughed that hard in a while, great job by all of the improvisers!
Seth Morris is a wonderful human being
GarbageCan posted a topic in General Earwolf
http://scottaukerman.tumblr.com/post/66252923297/sirmitchell-patbaer-on-sunday-at-the-cards I found this really touching. If you're not familiar with Ryan Davis, he was a great podcasting personality that was on the Giant Bombcast which is a podcast focussed on video games. Earlier this year he died at the age of 34, just days after his wedding. He was a big fan of CBB, and particularly, Bob Ducca. So Seth Morris was asked to record something in tribute to him despite never meeting him, and came up with another incredible list. I love Seth Morris. RIP Ryan Davis
Episode 245 — Poehler Ice Caps
I'm so glad to see that Neil's previous little boys at the pool rap was not just a one-hit wonder. He's got some serious rapping chops. In addition to his many other chops.
Episode 164 — Olympic Orgies
GarbageCan replied to Brett Arnold's topic in Sklarbro Country
The Jay and Dan podcast has gone dark since the move to L.A. so this is a welcome update from them.
Episode 120 — Live from Portland / Law
GarbageCan replied to JulyDiaz's topic in Professor Blastoff
Surly indeed. Although there were certainly some good members of the audience, especially the one who thought to ask to see Kyle's calves.
Show us your Earwolf swag!!
GarbageCan replied to Shannon's topic in General Earwolf
I have the CBB season 2 t-shirt. I'll try and post a picture tomorrow night. The quality of the print doesn't look great on either of their faces.
Earwolf Store


text:
Q: Porting 32 bit C++ code to 64 bit - is it worth it? Why? I am aware of some the obvious gains of the x64 architecture (higher addressable RAM addresses, etc)... but:

*

*What if my program has no real need to run in native 64 bit mode. Should I port it anyway?

*Are there any foreseeable deadlines for ending 32 bit support?

*Would my application run faster / better / more secure as native x64 code?

A: x86-64 is a bit of a special case - for many architectures (eg. SPARC), compiling an application for 64 bit mode doesn't give it any benefit unless it can profitably use more than 4GB of memory.  All it does is increase the size of the binary, which can actually make the code slower if it impacts on cache behaviour.
However, x86-64 gives you more than just a 64 bit address space and 64 bit integer registers - it also doubles the number of general purpose registers, which on a register-deficient architecture like x86 can result in a significant performance increase, with just a recompile.
It also lets the compiler assume that many extensions, like SSE and SSE2, are present, which can also significantly improve code optimisation.
Another benefit is that x86-64 adds PC-relative addressing, which can significantly simplify position-independent code.
However, if the app isn't performance sensitive, then none of this is really important either.

A: Although its true that 32-bit will be around for a while in some form or another, Windows Server 2008 R2 ships with a 64-bit SKU only. I would not be surprised to see WOW64 as an install option as early as Windows 8 as more software migrates to 64-bit. WOW64 is a install, memory and performance overhead. The 3.5GB RAM limit in 32-bit Windows along with increasing RAM densities will encourage this migration. I'd rather have more RAM than CPU...
Embrace 64-bit! Take the time to make your 32-bit code 64-bit compatible, its a no brainer and straightforward. For normal applications the changes are more accurately describes as code corrections. For drivers the choice is: adapt or lose users. When the time comes you'll be ready to deploy on any platform with a recompile.
IMO the current cache related issues are moot; silicon improvements in this area and further 64-bit optimisation will be forthcoming.

A: *

*If your program has no need to run under 64-bit, why would you? If you are not memory bound, and you don't have huge datasets, there is no point. The new Miata doesn't have bigger tires, because it doesn't NEED them.

*32-bit support (even if only via emulation) will extend long past when your software ceases to be useful. We still emulate Atari 2600s, right?

*No, in all likelyhood, your application will be slower in 64-bit mode, simply because less of it will fit in the processor's cache. It might be slightly more secure, but good coders don't need that crutch :)

Rico Mariani's post on why Microsoft isn't porting Visual Studio to 64-bit really sums it up Visual Studio: Why is there no 64 bit version? (yet)

A: One possible benefit I haven't seen mentioned yet is that it might uncover latent bugs. Once you port it to 64-bit, a number of changes are made. The sizes of some datatypes change, the calling convention changes, the exception handling mechanism (at least on Windows) changes.
All of this might lead to otherwise hidden bugs surfacing, which means that you can fix them.
Assuming your code is correct and bug-free, porting to 64-bit should in theory be as simple as flicking a compiler switch. If that fails, it is because you're relying on things not guaranteed by the language, and so, they're potential sources of errors.

A: It depends on whether your code is an application or a reusable library. For a library, keep in mind that the client of that library may have good reasons to run in 64-bit mode, so you have to ensure that your scenario works. This may also apply to applications when they are extensible via plugins.

A: If you don't have any real need now, and likely never will, for 64-bit mode, you shouldn't do porting.
If you don't have the need now, but may have it some day, you should try to estimate how much effort it will be (e.g. by turning on all respective compiler warnings, and attempting a 64-bit compilation). Expect that some things aren't trivial, so it will be useful to know how what problems you would likely encounter, and how long it would likely take to fix them.
Notice that a need may also arise from dependencies: if your program is a library (e.g. a DLL), it may be necessary to port it to 64-bit mode just because some host application gets ported.
For a foreseeable future, 32-bit applications will continue to be supported.

A: Unless there's a business reason to go to 64 bit, then there's no real "need" to support 64 bit.
However, there are some good reasons for going to 64 bit at some point, aside from all those that others have already mentioned.

*

*It's getting harder to buy PCs that aren't 64 bit. Even though 32 bit apps will run in compatibility mode for years to come, any new PCs being sold today or in the future are likely to be 64 bit. If I have a shiny 64 bit operating system I don't really want to run "smelly old 32 bit apps" in compatibility mode!

*Some things just don't run properly in comptibility mode - it's not the same thing as running on a 32-bit OS on 32-bit hardware. I've run into a few issues (e.g. registry access across the 32/64 bit registry hives, programs that fail because they're not in the folder they expect to be in, etc) when running in compatibility mode. I always feel nervous about running my code in compatibility mode - it's simply "not the real thing", and it often shows.

*If you have written your code cleanly, then chances are you only have to recompile it as a 64 bit exe and it'll work fine, so there's no real reason not to give it a try.

*the earlier you build a native 64 bit version, the easier it will be to keep it working on 64 bit as you add new features. That's a much better plan than continuing to develop in the dark ages for another 'n' years and then trying to jump out into the light.

*When you go for your next job interview, you will be able to say that you have 64-bit expeirence and 32->64 porting experience.

A: Here's what 64-bit does for you:

*

*64-bit allows you to use more memory than a 32-bit app.

*64-bit makes all pointers 64-bits, which makes your code footprint larger.

*64-bit gives you more integer and floating point registers, which causes less spilling registers to memory, which should speed up your app somewhat.

*64-bit can make 64-bit ALU operations faster (only helpful if you're using 64-bit data types).

*You DO NOT get any extra security (another answer mentioned security, I'm not aware of any benefits like that).

*You're limited to only running on 64-bit operating systems.

I've ported a number of C++ apps and seen about a 10% speedup with 64-bit code (same system, same compiler, the only change was a 32-bit vs 64-bit compiler mode), but most of those apps were doing a fair amount of 64-bit math.  YMMV.
I wouldn't worry about 32-bit support going away any time soon.
(Edited to include notes from comments - thanks!)

A: You are already aware of the x64 advantages (most importantly the increased RAM size) and you are not interested in any, then don't port an executable (exe). Usually performance degrades after a port, mainly due to the increase in size of a x64 module over x86: all pointers now require double length, and this percolates everywhere, including code size (some jumps, function calls, vtables, virtual invokes, global symbols etc etc). Is not a significant degradation, but is usually measurable (3-5% speed decrease, depends on many factors).
DLLs are worth porting because you gain a new 'audience' in x64 apps that are able to consume your DLL.

A: For example, if you had written 32-bit code (GNU C/++) as below
EDIT: format code
struct packet {
    unsigned long name_id;
    unsigned short age;
};

for network messaging, then you need to do porting while re-compiling on a 64 bit system, because of htonl/ntohl etc, communication get broken in the case of the network peer is still using the 32 bit system (using the same code as yours); you know sizeof(long) will be changed from 32 to 64 too at your side.
See more notes about 32/64 porting at http://code.google.com/p/effocore/downloads/list, document name EffoCoreRef.pdf.

A: Some OSs or configurations are unable to run 32-bit programs. A minimal Linux without 32-bit libc installed for example. Also IIRC I usually compile out the 32-bit support from the kernel.
If these OSs or configurations are part of your potential user base then yes, you should port it.
If you need more speed, then you should also port it (as others have said, x86-64 has more registers and cool instructions that speed it up).
Or, of course, if you want to mmap() or otherwise map a large file or lots of memory. Then 64-bit helps.

A: It's pretty unlikely that you'd see any benefit unless you're in need of extreme security measures or obscene amounts of RAM.
Basically, you'd most likely know intuitively if your code was a good candidate for 64-bit porting.

A: Regarding deadlines. I would not worry, things like 32bit will be around for a good while natively and for a foreseeable future in some other form.

A: See my answer to this question here. I closed out that post saying that a 64-bit computer can store and retrieve much more information than a 32-bit computer. For most users this really doesn't mean a whole lot because things like browsing the web, checking email and playing Solitaire all work comfortably within the confines of 32-bit addressing. Where the 64-bit benefit will really shine is in areas where you have a lot of data the computer will have to churn through. Digital signal processing, gigapixel photography and advanced 3D gaming are all areas where their massive amounts of data processing would see a big boost in a 64-bit environment.
As for your code running faster/better, it's entirely up to your code and the requirements imposed on it.

A: As to performance issues, it depends on your program actually. If your program is pointer-intensive, porting to 64-bit may cause performance downgrading, since for CPU cache with the same size, each 64-bit pointer occupy more space on cache, and virtual-to-physical mappings also occupies more TLB space. Otherwise, if your program is not pointer-intensive, its performance will benefit from x64.
Of course performance is not the only reason for porting, other issues like porting effort, time scheduling should also be considered.

A: I would recommend porting it to 64 bit just so you are running "native"  (Also, I use OpenBSD. In their AMD64 port, they do not provide any 32 bit emulation support, everything must be 64 bit)
Also, stdint.h is your best friend! By porting your application, you should learn how to code portably. Which will make your code work right when we have 128 bit processors too (in a few decades hopefully)
I've ported 2 or 3 things to 64 bit and now develop for both (which is very easy if you use stdint.h) and on my first project porting to 64 bit caused like 2 or 3 bugs to show up, but that was it. Most of it was a simple recompile and now I don't worry about the differences between 32 and 64 bit when making new code because I just automatically code portably. (using intptr_t and size_t and such)

A: In the case of a dll being called from a 64 bits process then the dll have to be 64 bits as well.
Then it does not matter if it's worth it, you simply have no choice.

A: One issue to keep in mind is the software libraries available.  For instance, my company develops an application that uses multiple OpenGL libraries, and we do so on the OpenSuSE OS.  In older versions of the OS, one could download a 32-bit versions of these libraries on the x86_64 architecture.  Newer versions, however, don't have this.  It made it easier to just compile in 64-bit mode.

A: 64 bit will run a lot faster, when 64 bits compilers become mature, but when it will occur I dont know


text:
Sex discrimination claims hit new high
Metro - 8 July 2019
The number of sex discrimination claims by workers has increased by 69 per cent to a five-year high in the wake of the #MeToo movement.
More than 9,300 claims were made last year, with women increasingly likely to come forward since sex allegations against Harvey Weinstein (pictured) in 2017 started a global backlash, said employment lawyers GQ Littler.
Moves by companies to tackle sex discrimination, such as banning alcohol at work-related events or discouraging hugging, are not preventing claims being made, the firm said. It has also seen an increase in historical cases being brought forward.
Hannah Mahon of GQ Littler said: 'The increase in sex discrimination claims will raise questions over whether employers are doing enough to stamp out inappropriate behaviour in the workplace.
'It's clear that more needs to be done to eliminate discrimination. However, some rules, such as those that prohibit social interactions between members of the opposite sex, need to be carefully thought through and implemented with care.


text:
Q: curl: (35) TCP connection reset by peer I want to setup telegram bot webhook from CentOS, but receive an error:
curl: (35) TCP connection reset by peer

My request:
curl -F "url=https://12.34.56.78:8443" \
-F "certificate=@/home/mts/mtspredbot/mtspredbot.pem" \
https://api.telegram.org/xxxxxxxxxxxxxxxxxxxxxxx/setWebhook

Is this problem related to my output connection or with something else?
With using -v option:
$ curl -v -F "url=https://12.34.56.78:8443" -F "certificate=@/home/mts/mtspredbot/mtspredbot.pem" https://api.telegram.org/token_here/setWebhook
* About to connect() to api.telegram.org port 443 (#0)
*   Trying 149.154.167.220...
* Connected to api.telegram.org (149.154.167.220) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -5961 (PR_CONNECT_RESET_ERROR)
* TCP connection reset by peer
* Closing connection 0
curl: (35) TCP connection reset by peer