These release notes cover new developer and user-facing incompatibilities, features, and major improvements.
Ensure that SequenceFileOutputFormat isn't tied to Writables and can be used with other Serialization frameworks.
HADOOP-4433 | Major | Improve data loader for collecting metrics and log files from hadoop and system
Added Test cases for Start streaming at specific offset
Changed reporting in the NameNode Web UI to more closely reflect the behavior of the re-balancer. Removed no longer used config parameter dfs.datanode.du.pct from hadoop-default.xml.
Made Configuration Writable and rename the old write method to writeXml.
Changed command "hadoop dfsadmin -report" to be consistent with Web UI for both Namenode and Datanode reports. "Total raw bytes" is changed to "Configured Capacity". "Present Capacity" is newly added to indicate the present capacity of the DFS. "Remaining raw bytes" is changed to "DFS Remaining". "Used raw bytes" is changed to "DFS Used". "% used" is changed to "DFS Used%". Applications that parse command output should be reviewed.
Removed the deprecated class org.apache.hadoop.fs.ShellCommand.
Improved Hive metastore and ql to use the refactored SerDe library.
Changed job history format to add a dot at end of each line.
Implemented getFileChecksum(Path) in HftpFileSystemfor distcp support.
Introduced new SerDe library for src/contrib/hive.
Changed scripts to pass initialization script for EC2 instances at boot time (as EC2 user data) rather than embedding initialization information in the EC2 image. This change makes it easy to customize the hadoop-site.xml file for your cluster before launch, by editing the hadoop-ec2-init-remote.sh script, or by setting the environment variable USER_DATA_FILE in hadoop-ec2-env.sh to run a script of your choice.
Changed DataNode protocol version without impact to clients other than to compel use of current version of client application.
Added time, permission and user attribute support to libhdfs.
Added LIMIT to Hive query language.
Introduced "EXPLAIN" plan for Hive.
Introduced new configuration parameter mapred.max.tasks.per.job to specifie the maximum number of tasks per job.
Added a synthetic load generation facility to the test directory.
Implemented MD5-of-xxxMD5-of-yyyCRC32 which is a distributed file checksum algorithm for HDFS, where xxx is the number of CRCs per block and yyy is the number of bytes per CRC.
Changed DistCp to use file checksum for comparing files if both source and destination FileSystem(s) support getFileChecksum(...).
Added getEscapedCompactString() and fromEscapedCompactString() to Counters.java to represent counters as Strings and to reconstruct the counters from the Strings.
Modified libhdfs to return NULL or error code when unrecoverable error occurs rather than exiting itself.
Added new FileSystem APIs: FileChecksum and FileSystem.getFileChecksum(Path).
Added a new option -delete to DistCp so that if the files/directories exist in dst but not in src will be deleted. It uses FsShell to do delete, so that it will use trash if the trash is enable.
Introducted byte space quotas for directories. The count shell command modified to report both name and byte quotas.
Changed TaskScheduler to expose API for Web UI and Command Line Tool.
Added a check to fsck options to make sure -files is not the first option so as to resolve conflicts with GenericOptionsParser.
Improved Fuse-dfs better error message if llibhdfs.so doesn't exist.
Changed DistCp error messages when there is a RemoteException. Changed the corresponding return value from -999 to -3.
Added two new options -filelimit <n> and -sizelimit <n> to DistCp for limiting the total number of files and the total size in bytes, respectively.
Added a configuration property hadoop.http.filter.initializers and a class org.apache.hadoop.http.FilterInitializer for supporting servlet filter. Cluster administrator could possibly configure customized filters for their web site.
Changed streaming tasks to adhere to task timeout value specified in the job configuration.
Introduced new config parameter org.apache.hadoop.mapred.SkipBadRecords.setMapperMaxSkipRecords to set range of records to be skipped in the neighborhood of a failed record.
Skipped records can optionally be written to the HDFS. Refer org.apache.hadoop.mapred.SkipBadRecords.setSkipOutputPath for setting the output path.
Changed Fuse configuration to use mount options.
Changed exit code from hadoop.fs.FsShell -test to match the usual Unix convention.
Introduced Fair Scheduler.
Added a JobConf constructor that disables loading default configurations so as to take all default values from the JobTracker's configuration.
Changed streaming StreamJob and Submitter to implement Tool and Configurable, and to use GenericOptionsParser arguments -fs, -jt, -conf, -D, -libjars, -files, and -archives. Deprecated -jobconf, -cacheArchive, -dfs, -cacheArchive, -additionalconfspec, from streaming and pipes in favor of the generic options. Removed from streaming -config, -mapred.job.tracker, and -cluster.
Introduced Chukwa data collection and analysis framework.
Adds a new contrib, bash-tab-completion, which enables bash tab completion for the bin/hadoop script. See the README file in the contrib directory for the installation.
Introduced ChainMapper and the ChainReducer classes to allow composing chains of Maps and Reduces in a single Map/Reduce job, something like MAP+ REDUCE MAP*.
Added an ability in HOD to start multiple workers (TaskTrackers and/or DataNodes) per node to assist testing and simulation of scale. A configuration variable ringmaster.workers_per_ring was added to specify the number of workers to start.
Allowed user to overwrite clone function in a subclass of TaggedMapOutput class.
Removed the following deprecated methods from JobConf: addInputPath(Path) getInputPaths() getMapOutputCompressionType() getOutputPath() getSystemDir() setInputPath(Path) setMapOutputCompressionType(CompressionType style) setOutputPath(Path)
Removed deprecated org.apache.hadoop.mapred.OutputFormatBase.
Introduced support for bzip2 compressed files.
Introduced Hive Data Warehouse built on top of Hadoop that enables structuring Hadoop files as tables and partitions and allows users to query this data through a SQL like language using a command line interface.
Removed deprecated methods for mapred.combine.once functionality.
Added FailMon as a contrib project for hardware failure monitoring and analysis, under /src/contrib/failmon. Created User Manual and Quick Start Guide.
Added the ability to kill process trees transgressing memory limits. TaskTracker uses the configuration parameters introduced in HADOOP-3759. In addition, mapred.tasktracker.taskmemorymanager.monitoring-interval specifies the interval for which TT waits between cycles of monitoring tasks' memory usage, and mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill specifies the time TT waits for sending a SIGKILL to a process-tree that has overrun memory limits, after it has been sent a SIGTERM.
Improved error reporting for libhdfs so permission problems now return EACCES.
Extended file globbing alternation to cross path components. For example, {/a/b,/c/d} expands to a path that matches the files /a/b and /c/d.
Introduce write support for Fuse; requires Linux kernel 2.6.15 or better.
Changed reducers to fetch maps in the same order for a given host to speed up identification of the faulty maps; reducers still randomize the host selection to distribute load.
Introduced Capacity Task Scheduler.
Added the ability to chose between many schedulers, and to limit the number of running tasks per job.
Introduced recovery of jobs when JobTracker restarts. This facility is off by default. Introduced config parameters mapred.jobtracker.restart.recover, mapred.jobtracker.job.history.block.size, and mapred.jobtracker.job.history.buffer.size.
Moved task file promotion to the Task. When the task has finished, it will do a commit and is declared SUCCEDED. Job cleanup is done by a separate task. Job is declared SUCCEDED/FAILED after the cleanup task has finished. Added public classes org.apache.hadoop.mapred.JobContext, TaskAttemptContext, OutputCommitter and FileOutputCommiitter. Added public APIs: public OutputCommitter getOutputCommitter() and public void setOutputCommitter(Class<? extends OutputCommitter> theClass) in org.apache.hadoop.mapred.JobConf
Introduced MultipleOutputs class so Map/Reduce jobs can write data to different output files. Each output can use a different OutputFormat. Outpufiles are created within the job output directory. FileOutputFormat.getPathForCustomFile() creates a filename under the outputdir that is named with the task ID and task type (i.e. myfile-r-00001).
Introduced additional log records for data transfers.
Added a partitioner that effects a total order of output data, and an input sampler for generating the partition keyset for TotalOrderPartitioner for when the map's input keytype and distribution approximates its output.
Improved space reporting for NameNode Web UI. Applications that parse the Web UI output should be reviewed.
Introduced LZOP codec.
Added support for c1.* instance types and associated kernels for EC2.
Hadoop now requires Java 6.
Introduced numerical key comparison for streaming.
Added HDFS file access times. By default, access times will be precise to the most recent hour boundary. A configuration parameter dfs.access.time.precision (milliseconds) is used to control this precision. Setting a value of 0 will disable persisting access times for HDFS files.
bzip2 provided as codec in 0.19.0 https://issues.apache.org/jira/browse/HADOOP-3646
Introduced append operation for HDFS files.
Enabled task JVMs to be reused via the job config mapred.job.reuse.jvm.num.tasks.
Introduced record skipping where tasks fail on certain records. (org.apache.hadoop.mapred.SkipBadRecords)


- Journal List
- Br J Clin Pharmacol
- v.50(6); 2000 Dec
- PMC2015011
Identification of the human cytochrome P450 isoforms mediating in vitro N-dealkylation of perphenazine
Abstract
Aims
To identify the human cytochrome P450 (CYP) isoforms mediating the N-dealkylation of the antipsychotic drug perphenazine in vitro and estimate the relative contributions of the CYP isoforms involved.
Methods
cDNA-expressed CYP isoforms were used to identify the isoforms that are able to mediate the N-dealkylation of perphenazine, which is considered a major metabolic pathway for the drug. Using human liver microsomal preparations (HLM), inhibition studies were carried out to establish the relative contributions of the CYP isoforms involved in the N-dealkylation reaction.
Results
CYP isoforms 1A2, 3A4, 2C8, 2C9, 2C18, 2C19 and 2D6 were able to mediate the N-dealkylation of perphenazine. Reaction velocities and their relative abundance in HLM suggested that CYP1A2, 3A4, 2C19 and 2D6 were the most important contributors to N-dealkylation. Apparent Km values of CYP1A2 and CYP2D6 were in the range 1–2 μm and Km values of CYP2C19 and CYP3A4 were 14 μm and 7.9 μm, respectively. Ketoconazole inhibition of N-dealkylation mediated by a mixed HLM indicated that CYP3A4 accounted for about 40% of perphenazine N-dealkylation at therapeutically relevant concentrations. The contribution of the CYP isoforms 1A2, 2C19 and 2D6 amounted to 20–25% each as measured by the percentage inhibition obtained by addition of furafylline, fluvoxamine or quinidine, respectively. HLM-mediated N-dealkylation of perphenazine accounted for 57% of the total amount of substrate consumed during incubation.
Conclusions
The present in vitro study suggests that CYP isoforms 1A2, 3A4, 2C19 and 2CD6 are primarily involved in the N-dealkylation of perphenazine. The relatively modest role of CYP2D6 is at variance with in vivo studies, which indicate a greater contribution of this isoform. Alternative metabolic pathways, corresponding to 43% of the HLM-mediated metabolism of the drug, may depend more strongly on CYP2D6.
Introduction
Perphenazine is a phenothiazine derivative, which was developed in the years following the introduction of chlorpromazine as an antipsychotic drug in 1952. The metabolism and urinary excretion of perphenazine have been studied both in rats and man, and measurements of the concentration of perphenazine in serum are used for therapeutic drug monitoring (TDM) [1–7]. The major steps in the metabolism of perphenazine in humans are N-dealkylation leading to loss of the hydroxyethyl group, oxidation of the sulphur atom and ring hydroxylation at position 7 (Figure 1). Minor metabolic pathways may be N-oxidation and direct glucuronidation of the primary alcohol group [3, 8]. Receptor binding studies indicate that 7-OH-perphenazine has about 70% of the antipsychotic activity of the parent compound, while the other metabolites are considered to be inactive [9]. Determination of perphenazine and metabolites in serum from patients at steady-state have shown concentrations of N-dealkylated perphenazine corresponding to three times those of perphenazine, whereas perphenazine sulphoxide concentrations were in the same range as those of the parent compound [10]. No information about the concentration of 7-OH-perphenazine in serum is available, but this compound is excreted in the urine mainly as the glucuronide [3, 8]. N-dealkylated perphenazine is eliminated as its sulphoxide, whereas about 13% of a dose is excreted in the urine as perphenazine-sulphoxide [4].
The cytochrome P450 (CYP) isoforms involved in the metabolism of perphenazine have not been studied systematically, but indirect evidence points towards a role for CYP2D6. Perphenazine acts as an inhibitor of the conversion of nortriptyline to (E)-10-hydroxy-nortripty-line, a process almost exclusively mediated by CYP2D6 at therapeutic nortriptyline concentrations, and this may lead to a clinically significant increase of the plasma nortriptyline concentration in patients treated with both drugs [11–13]. Serum perphenazine concentration is increased by addition of the selective serotonin reuptake inhibitor (SSRI) paroxetine, which is known as a potent inhibitor of CYP2D6 [14]. Finally, higher serum levels of perphenazine corrected for dose have been found in patients lacking CYP2D6 (poor metabolizers) than in patients having a functional enzyme (extensive metabolizers) [15, 16]. Other CYP isoforms, however, are also likely to contribute to the metabolism of perphenazine. Thus, a considerable interindividual variation of the concentration to dose ratio (C/D) at steady-state has been found in both CYP2D6 extensive and poor metabolizers leading to a considerable overlap of this ratio in the two groups [16]. This pattern together with the finding that the median C/D was only increased by 100% in poor metabolizers points towards the involvement of additional enzymes.
In the present in vitro study the human CYP isoforms mediating the N-dealkylation of perphenazine were identified. In human liver microsomal preparations (HLM), the relative individual contributions of the CYP isoforms involved in the N-dealkylation of perphenazine were determined by defining the effect of selective inhibitors on the formation of N-dealkylated perphenazine. The relative importance of N-dealkylation to the total metabolism of perphenazine by HLM was also assessed.
Methods
Chemicals and reagents
N-dealkylated perphenazine was a gift from Schering-Plough Research Institute (Kenilworth, NJ). Fluvoxa-mine, ketoconazole and (E)-10-hydroxy-nortriptyline (used as internal standard) were donated by Solvay Duphar B.V. (Weesp, the Netherlands), Janssen Pharma-ceutica N.V. (Beerse, Belgium) and Lundbeck A/S (Copenhagen, Denmark), respectively. Quinidine and perphenazine were from Sigma Chemical Co. (St Louis, MO), and furafylline was obtained from Ultrafine Chemicals (Manchester, UK). Other chemicals were of analytical grade. cDNA-expressed human CYPs 1A2, 3A4, 2C8, 2C9, 2C18, 2C19, 2E1 and 2D6, prepared from baculovirus infected insect cells, were purchased from Gentest Co. (Woburn, MA). Human liver microsomal preparations (HLMs) were also obtained from Gentest Co. According to the supplier, all donors were Caucasians, and the specimens were obtained post mortem. One HLM (H161Pool, Lot 6) was a pool prepared as a mixture of microsomes from 10 different donors. Gender was equally represented in this pool. Three other HLMs (HG23, HG30 and HG112) were from individual donors. The concentrations of the individual CYP isoforms in the HLMs have been determined by Western blotting by the supplier (Table 1). With regard to the CYP2C family, only the content of CYP2C9 was determined. The microsomal preparations were received frozen and were stored at −80°C until use.
Experimental procedure
The enzymatic reactions were carried out at pH 7.4 in propylene tubes at 37°C in a total volume of 300 μl of 100 mm phosphate buffer as described previously [17]. The NADPH generating system consisted of 1 U isocitrate dehydrogenase, 5 mm NADP, 5 mm isocitrate and 5 mm MgCl2. The reaction was started by addition of 50–200 fig HLM protein or 2.5–10 pmol of the individual CYP isoforms and stopped 10 min later by addition of 1 ml ice-cold 1 m carbonate/bicarbonate buffer, pH 10.5. Control values were obtained at all substrate concentrations by adding the stop reagent before the microsomes. In order to assess the CYP isoforms involved in the N-dealkylation of perphenazine and to study the linearity of N-dealkylated perphenazine formation, incubation times up to 60 min were used for substrate concentrations of 2, 10 and 100 μm. For all processes proportionality was found between the amount of enzyme added and the product formed, and N-dealkylated perphenazine formation was linear up to about 12 min of incubation.
Inhibitor studies
Chemical inhibitors were added to the reaction medium in order to determine the quantitative contribution of the individual CYP isoforms to the formation of total N-dealkylated perphenazine in HLM. Furafylline, ketoco-nazole, fluvoxamine and quinidine were used as inhibitors of CYP1A2, 3A4, 2C19 and 2D6, respectively [18–23]. Furafylline was used as a competitive inhibitor in the present study (23). This inhibitor is almost insoluble in water but soluble in dimethyl sulphoxide (DMSO). A final concentration of 1% DMSO was used in both the control (uninhibited) reaction medium and the medium containing the inhibitor. The specificity of CYP inhibitors is usually only relative and depends on the concentration of an inhibitor. The activity of several CYP isoforms may be inhibited to various extents by an individual inhibitor [22]. Furthermore, given a competitive mechanism of inhibition, the extent of inhibition of the reaction rate depends on the substrate concentration, Km, concentration of the inhibitor and the affinity of the inhibitor Ki [24]. Thus, initial inhibition experiments were carried out to determine suitable inhibitor concentrations in the present context.
Assay of perphenazine and dealkylated perphenazine
The N-dealkylated perphenazine formed during the incubation period was determined by h.p.l.c. essentially as described previously for the determination of citalopram metabolites [25]. After addition of 50 μl 3 μm (E)-l0-OH-nortriptyline as internal standard, N-dealkylated perphenazine in the incubate was extracted into 7.5 ml heptane-isoamylalcohol (97.5 :1.5; v/v) by shaking. After centrifugation the aqueous phase was frozen by immersing the tubes in a mixture of dry ice and ethanol. The organic phase was transferred to new tubes, and the analytes were back-extracted into 125 μl of 250 mm phosphoric acid, of which 75 μl was injected onto a h.p.l.c. instrument equipped with a Hypersil BDS C18 column. The mobile phase was an acetonitrile-44 mm KH2PO4 buffer, pH 2.5 (67.5 :32.5; v/v), which contained 10 mm triethylamine. The lower level of quantification was 3 pmol N-dealkylated perphenazine. The interday precision was < 8%.
Analysis of data
Reaction velocities (V) were expressed as nmol h−1 mg−1 protein, when HLM was used, and as nmol h−1 nmol−1 CYP, when the activities of the CYP isoforms were measured. Apparent Km and Vmax values were calculated by nonlinear regression analysis according to the Michae-lis-Menten equation using GraphPad Prism software (San Diego, CA). An F-test indicated whether a one-or two-binding site model was optimal. An Eadie-Hofstee plot, V vs V/S, where S is the substrate concentration, was used to illustrate multiple binding sites [26]. Degrees of inhibition were expressed as a percentage of the corresponding uninhibited control reaction. A Student's t-test was used to test for statistical significance.
Results
N-Dealkylation of perphenazine by cDNA-expressed CYP isoforms
Initially, we screened the cDNA-expressed CYP isoforms 1A2, 3A4, 2C8, 2C9, 2C18, 2C19, 2D6 and 2E1 for their ability to catalyse the N-dealkylation of perphenazine. Only CYP2E1 did not display a measurable activity. The reaction rate of N-dealkylation as a function of the substrate concentration in the range 0–50 μM was measured, and the calculated Km, Vmax and CLint(Vmax/Km) values are given in Table 2. For CYP1A2, CYP3A4 and CYP2D6 significantly better fits were obtained, when the Michaelis-Menten equation using two binding sites was used. The CLlnt values point towards major contributions by CYP1A2, CYP3A4, CYP2C19 and CYP2D6, and Figure 2 displays the relation between reaction rate (V) and the ratio of reaction rate to substrate concentration (V/S) for these CYP isoforms (Eadie-Hofstee plots). The shapes of the plots for CYPs 1A2, 3A4, and 2D6 are in accordance with the presence of more than one binding site.
Specificity of CYP inhibitors
Initial inhibition experiments were carried out using cDNA-expressed CYP isoforms in order to determine inhibitor concentrations characterized by a high inhibition of the target CYP isoform and a reasonably low inhibitory effect towards the other CYP isoforms (Figure 3). A substrate concentration of 4 μm was used for all inhibitor experiments. Furafylline was added to the incubation medium in the concentration range 1.25–50 μm, and the inhibitory effect on the CYP1A2-mediated N-dealkylated perphenazine formation was measured. In order to obtain more than 80% inhibition of the control reaction, a furafylline concentration of 50 μm was necessary, but concentrations exceeding 25 μm resulted in more than 20% inhibition of the CYP2C19-mediated reaction. No significant inhibition of CYP2D6 or CYP3A4 activities was found, when 25 μm furafylline was added to the medium. Thus, this concentration, which yielded 75% inhibition of CYP1A2, was chosen for inhibition of HLM-mediated reactions. In the same manner, ketoco-nazole was studied in the range 0.125 μm to 1 μm, and the optimum concentration was found to be 0.5 μm. At this concentration, CYP3A4 was inhibited by 98%, and the other reactions were either insignificantly inhibited or only slightly inhibited (13% as regards CYP2C19). For fluvoxamine, the range 0.125 μm to 5 μm was considered with selection of 0.25 μm as the optimum value. The target enzyme, CYP2C19, was only inhibited by 52% at this concentration, but an increase of the fluvoxamine concentration to more than 0.25 μm resulted in a too high inhibition of CYP1A2 and also led to significant inhibition of CYP3A4 and CYP2D6. Finally, the inhibitory effect of quinidine was tested over the range 0.125 μm to 10 μm, and 5 μm was selected as the optimum concentration for further experiments. This relatively high concentration was needed to attain 80% inhibition of CYP2D6 activity. CYP3A4 activity was inhibited by 16%, whereas that of the other two isoforms not were subject to significant inhibition by 5 μm quinidine.
N-Dealkylation of perphenazine by human liver microsomal preparations
The rate of N-dealkylated perphenazine formation at various substrate concentrations mediated by the HLM pool is shown in Figure 4 in the form of an Eadie-Hofstee plot. The shape of the plot may be interpreted as a significant involvement of several CYP isoforms with one exhibiting substrate inhibition.
The contributions of the individual CYP isoforms to perphenazine N-dealkylation were assessed by inhibition experiments using the HLM pool and the three individual HLM preparations. The optimal inhibitor concentrations outlined above were used. Figure 5 presents the mean values for inhibition together with the quantitative amounts of the CYP isoforms in the various HLM preparations (see Table 1). Of the CYP2C family only CYP2C9 was quantified, but according to studies by other authors the mean catalytic activity of CYP2C19 amounts to about 25% of CYP2C9 activity [27]. The contribution of CYP1A2 was verified by a significant inhibition by furafylline in all but the HLM assigned HG112, which had a very low CYP1A2 content. In the latter HLM, only 2.6% inhibition was observed. The involvement of CYP3A4 as measured by ketoconazole inhibition varied roughly in proportion to the CYP3A4 content of the four HLMs. In microsomes from liver HG112 fluvoxamine but not furafylline had a significant inhibitory effect on perphenazine metabolism, indicating the involvement of CYP2C19. Finally, the contribution of CYP2D6 is demonstrated by inhibition by quinidine, the extent of which was related to the amount isoform present. In microsomes from HG30 quinidine inhibited perphenazine N-dealkylation significantly by 13%, although the preparation did not contain a measurable amount of CYP2D6. This may be ascribed to a small degree of inhibition of CYP3A4 activity by quinidine (see Figure 3). Assuming H161Pool microsomes represent an average HLM, our data indicate that the mean contribution of CYP3A4 to perphenazine N-dealkylation is about 40% of total N-dealkylated perphenazine formed, and those of CYPs 1A2, 2C19 and 2D6 are 20–25% each. With respect to the three individual HLMs, the contribution of CYP2D6 varied from 13% to 44% and that of CYP3A4 from 14% to
Substrate consumption and N-dealkylated perphenazine
In order to investigate the importance of the N-dealkylation reaction as a function of the total metabolism of perphenazine by HLM, the amount of N-dealkylated perphenazine formed was compared with the decrease in the substrate concentration after an incubation period of 10 min. The initial substrate concentration was 4 μm, and 200 μg protein of the H161Pool per assay was used. The mean substrate concentration decreased by 1.010 ± 0.322 μm (s.d.; n = 12), and the mean amount of N-dealkylated perphenazine formed was 0.577±0.062 μm. Thus, the N-dealkylation pathway represented 57% of the total perphenazine metabolism catalysed by microsomes from the H161Pool microsomes.
Discussion
Our studies using recombinant enzymes suggest that CYPs 1A2, 3A4, 2C19 and 2D6 can catalyse the N-dealkylation of perphenazine. Further work in HLM using selective inhibitors of individual CYPs show that most of the metabolite formation could be ascribed to the sum of the activities of these four isoforms. This interpretation of the results is based on the assumption that the inhibition patterns observed for the cDNA-expressed isoforms are also valid for these in HLM. The individual contributions of the four isoforms to N-dealkylated perphenazine formation may vary with the perphenazine concentration. The relatively high affinities and high capacities of CYP1A2 and CYP2D6 may result in higher relative contributions to total N-dealkylation by these two isoforms at lower substrate concentrations. The clinically relevant concentration range of perphenazine in human liver tissue is unknown, but post mortem analyses of perphenazine concentrations in humans, who had ingested an overdose of perphenazine, showed liver concentrations of the drug that were up to 50 times higher than those in blood [28, 29]. At steady-state, the usual trough plasma perphenazine concentration is in the range 2–6 nm, increasing to about 20 nm during the drug absorption phase [5, 7, 28–30]. Thus, clinically relevant hepatic concentrations are probably in the low micromolar range. The value of 4 μm was chosen as a compromise between the use of a relatively low perphenazine concentration and the achievement of a high analytical precision.
Chemical inhibitors may be more or less specific for their target CYP isoform depending among other factors on the concentration used (21–23). We thus evaluated the minimum required concentration for attaining a reasonably high inhibition of the target form in relation to N-dealkylation of perphenazine and the associated specificity of inhibition. Given a competitive pattern of inhibition, relatively high inhibitor concentrations are necessary to displace a substrate with a high affinity. Quinidine inhibition of N-dealkylation of perphenazine by CYP2D6 exemplifies this situation. Perphenazine is known to have a high affinity for CYP2D6 giving rise to important kinetic drug interactions, and accordingly the Km value recorded here for the CYP2D6 mediated N-dealkylation was low (1.9 μm) [12, 13 31]. A relatively high quinidine concentration (5 μm) was necessary to achieve an inhibition of more than 80%. This is a quinidine concentration somewhat higher than that used by others. For example, inhibition of 1'-hydroxylation of bufuralol can be accomplished by concentrations below 1 μm [32]. Similarly, perphenazine exhibits a high affinity to CYP1A2 (Km 0.87 μm), and it was necessary to apply a relatively high concentration of furafylline to achieve an acceptable degree of inhibition. Furafylline may be used either as a competitive inhibitor without preincubation or as a mechanism-based inhibitor requiring preincubation [23]. We used furafylline as a competitive inhibitor, because this approach is compatible with the supplier's recommended procedure of starting the reaction by addition of recombinant enzyme. Further, our preliminary investigations indicated that in agreement with other studies furafylline preincubation may lead to activation of CYP3A4 [33].
The mean steady-state plasma concentration/dose (C/D) ratio of patients lacking CYP2D6 (poor metabolizers) is about twice that of extensive metabolizers, and based on a population kinetic study the use of CYP2D6 genotype has been suggested for optimizing the dose of perphenazine in patients [34]. Our in vitro findings indicate that on average CYP2D6 is only responsible for about 25% of the N-dealkylated perphenazine formation in the liver, but the contribution of this isoform may vary considerably from subject to subject because of quantitative variation in liver CYP2D6 content and the genetic polymorphism of CYP2D6. The relative abundance and catalytic activity of CYPs 1A2, 3A4 and 2C19, involved in the N-dealkylation of perphenazine, also displays large inter-individual variation [35].
The involvement of four isoforms in the N-dealkylated perphenazine formation may help to explain the large interindividual variation of the perphenazine C/D observed in patients treated with the drug. However, the modest role of CYP2D6 found in the present study does not explain that poor metabolizers have an average C/D-value at steady-state twice that of extensive metabolizers [16]. By measurement of substrate disappearance, we found that N-dealkylation amounted to only 57% of total perphenazine metabolism mediated by our pooled HLM preparation. Thus, it is likely that the other metabolic routes like sulphoxidation and ring-hydroxyla-tion depend more strongly on CYP2D6.
Acknowledgments
We thank Pia Ploughmann and Birgit Poulsen for excellent technical assistance. Financial support was obtained from: The Psychiatric Research Foundation, K & V Petersen's Foundation, The Lundbeck Foundation, The Foundation for Medical Research, The Novo Nordic Foundation, Marshall's Foundation, The Foundation of 1870.
References
Formats:
- Article
- |
- PubReader
- |
- ePub (beta)
- |
- PDF (145K)
- |
- Citation


FIZZ BUZZ REFACTOR
Enter a number between 1 - 100.
Your number will Fizz if it is divisible by 3, Buzz if it is divisible by 5.
Your number will FizzBuzz if it is divisible by both 3 and 5
Reset
See the Fizz and Buzz from 1 to your number:


ngTile provides a simple way to display an overview of statistics. By default the tiles colors will randomly generate from a set of predefined colors, which can be overwritten.
A tile can be created as an individual or multiple by using the directives provided in the plugin.
Multiple tiles use ng-repeat so will require an array of objects that must be named using the naming convention specified below
ngTile requires the following dependecies to function correctly:
The easiest way to install is with npm:
npm install --save ngTile
Download via GitHub:
Links via unpkg cdn:
To import the plugin to angular simply declare the ngTile module in your Angular app.
angular.module("myApp", ["ngTile"])
An individual tile is set up using the tag:
<single-tile />
| Attribute | Usage | Example |
|---|---|---|
| icon | You may use whatever icon plugin you wish, the examples shown are using the Font Awesome icon set. | icon="fa fa-gbp" |
| stat | The stat attribute will render the value set as plain text. | stat="£4560.75" |
| title | The title attribute will render the title as plain text. | title="Money Spent" |
| color | The color attribute is used to set the hex color code for the tile. (This is used to stop generating a random color for the tile). | color="#879998"" |
| tile-type | The tile type chosen will decide which type of tile is displayed e.g. small rectangle, large square | tile-type="tile-sm-rect |
| link | The link will set a href on the tile. | link="https://www.google.co.uk" |
| target | The target attr will set a target for the specified href. | target="_blank" |

 <single-tile icon="fa fa-users" stat="146" title="Users" color="#879998" tile-type="tile-lg-rect" link="ViewStats/2016-10-10" target="_self"/>

The repater tiles are set up using the tag:
<tiles />
| Attribute | Usage | Example |
|---|---|---|
| tile-params | The attributes for the repeated tiles will be set up using an object. | tile-params="settings1" |
| Property | Usage | Required |
|---|---|---|
| data |
You will need to use the naming convention specfied below.
|
Yes |
| colSize | The repeated tiles need to be contained within a row, so a column needs to be specified. | Yes |
| tileType | Specify the type of tiles you want repeated. Examples on this page. | Yes |
| colors | Use this property to overwrite the provided colour pallet. For example use one color to set the repeater tiles to one color. | No |
$scope.tileSettings = { data: [{ icon: 'fa fa-search', stat: '365', title: 'Days', link: "https://www.google.co.uk", target: "_blank" }, { icon: 'fa fa-twitter', stat: '15987', title: 'Twitter Users' }], colSize: "col-lg-6", tileType: "tile-md-square", colors: ["#663399", "#2c3e50", "#95a5a6", "#26C281"] };

 <tiles tile-params="tileSettings" />

Use the predefined css in the
 tags to set the specific tile.
tile-lg-rect
tile-lg-rect
tile-sm-rect
tile-lg-square
tile-md-square
tile-sm-square
tile-lg-circle
tile-md-circle
tile-sm-circle


About me
My experience
Contact
Phạm Quốc Huy (quochuydev)
Fullstack Developer
+1 year of professional experience in HTML, CSS, JQuery, Bootstrap, PHP, Laravel.
Download CV
Hire me


#754ffe
#79758f
#19cb98
#e53f3c
#ffaa46
#6ad2ff
#f5f4f8
#18113C
#e3dcff
#e4e3e9
#d1f5ea
#fad9d8
#ffeeda
#e1f6ff
#d1cfd8
#593cc1
#5c596d
#139a74
#ae302e
#c28135
#51a0c2
#f5f4f8
#ecebf1
#e8e7ed
#beb9cd
#a8a3b9
#79758f
#5c5776
#413C5E
#18113C
.text-primary
.text-secondary
.text-success
.text-danger
.text-warning
.text-info
.text-light
.text-dark
.text-body
.text-muted
.text-white
.text-black-50
.text-white-50
Similar to the contextual text color classes, easily set the background of an element to any
contextual class. Anchor components will darken on hover, just like the text classes. Background
utilities do not set color
, so in some
cases you’ll want to use .text-*
utilities.
By adding a .bg-light-gradient
, .bg-light-gradient-top
, .bg-light-gradient-bottom
, .bg-gradient-mix-shade
class, a linear gradient is added as background image to the backgrounds.


[gecode-users] Reified Distinct Constraint
Max Ostrowski
ChaosAngel at gmx.de
Mon Feb 16 14:21:24 CET 2009
I just found the distinct constraint, that hopefully makes all variables distinct. This could greatly reduce the number of constraints, as i am translating from a logic program.
But i would need a reified version of the distinct constraint.
I there any or can i at least emulate thie behaviour?
Thank you in advance,
Max
--
Jetzt 1 Monat kostenlos! GMX FreeDSL - Telefonanschluss + DSL
für nur 17,95 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a
More information about the gecode-users
mailing list


Hashing¶
-
class
category_encoders.hashing.
HashingEncoder
(verbose=0, n_components=8, cols=None, drop_invariant=False, return_df=True, hash_method='md5')[source]¶ A basic hashing implementation with configurable dimensionality/precision
Parameters: verbose: int
integer indicating verbosity of output. 0 for none.
cols: list
a list of columns to encode, if None, all string columns will be encoded
drop_invariant: bool
boolean for whether or not to drop columns with 0 variance
return_df: bool
boolean for whether to return a pandas DataFrame from transform (otherwise it will be a numpy array)
hash_method: str
which hashing method to use. Any method from hashlib works.
References
[R3] Kilian Weinberger; Anirban Dasgupta; John Langford; Alex Smola; Josh Attenberg (2009). Feature Hashing for Large Scale Multitask Learning. Proc. ICML.
Methods
-
fit
(X, y=None, **kwargs)[source]¶ Fit encoder according to X and y.
Parameters: X : array-like, shape = [n_samples, n_features]
Training vectors, where n_samples is the number of samples and n_features is the number of features.
y : array-like, shape = [n_samples]
Target values.
Returns: self : encoder
Returns self.
-
static
hashing_trick
(X_in, hashing_method='md5', N=2, cols=None, make_copy=False)[source]¶ A basic hashing implementation with configurable dimensionality/precision
Performs the hashing trick on a pandas dataframe, X, using the hashing method from hashlib identified by hashing_method. The number of output dimensions (N), and columns to hash (cols) are also configurable.
Parameters: X_in: pandas dataframe
description text
hashing_method: string, optional
description text
N: int, optional
description text
cols: list, optional
description text
make_copy: bool, optional
description text
Returns: out : dataframe
A hashing encoded dataframe.
References
Cite the relevant literature, e.g. [R4]. You may also cite these references in the notes section above. .. [R4] Kilian Weinberger; Anirban Dasgupta; John Langford; Alex Smola; Josh Attenberg (2009). Feature Hashing for Large Scale Multitask Learning. Proc. ICML.
-


Brackets
Contribute
API DOCS
Blog
Extensions
Support
A modern, open source text editor that
understands web design.
Download Brackets 1.13
Other Downloads


Helping Hands:
Login
Log in to see your events.
Create New Event:
Event Name
Event Location
Event Date
Event Time
Event Description
Submit
See who has signed up. Enter an event_id:
Submit


JSFastPack Demo
JSFastPack is an in-browser Javascript minification utility specifically designed for speed. It deletes comments and extraneous whitespace, but doesn't yet offer fancier options like variable substitution.
Paste source code here
Packed result
Elapsed:
Pack rate:
Source bytes:
Result bytes:
Saved bytes :
Saved percent:


Security Policy
FreePrivacyPolicy.com requires all users to exercise a duty of care in relation to the operation
and use of its information systems.
Authorised users of information systems with the exception of information published for public
consumption, all users of FreePrivacyPolicy.com information systems must be formally authorised
by appointment as a member of staff or contractor.
Authorised users will pay due care and attention to protect FreePrivacyPolicy.com information in
their personal possession. Confidential, personal or private information must not be copied or
transported without consideration of:
Permission of the information owner
The risks associated with loss or falling into the wrong hands
How the information will be secured during transport and at its destination.
Acceptable use of information systems use of FreePrivacyPolicy.com information systems by
authorised users will be lawful, honest and decent and shall have regard to the rights and
sensitivities of other people.
FreePrivacyPolicy.com Information System Directors who are responsible for information systems
are required to ensure that:
1. Systems are adequately protected from unauthorised access.
2. Systems are secured against theft and damage to a level that is cost-effective.
3. Adequate steps are taken to ensure the availability of the information system, commensurate with
its importance (Business Continuity).
4. Electronic data can be recovered in the event of loss of the primary source. I.e. failure or
loss of a computer system. It is incumbent on all system owners to backup data and to be able to
restore data to a level commensurate with its importance (Disaster Recovery).
5. Data is maintained with a high degree of accuracy.
6. Systems are used for their intended purpose and that procedures are in place to rectify
discovered or notified misuse.
7. Any electronic access logs are only retained for a justifiable period to ensure compliance with
the data protection, investigatory powers and freedom of information acts.
8. Any third parties entrusted with FreePrivacyPolicy.com data understand their responsibilities
with respect to maintaining its security.


This is the basic type of the editor (it doesn't have enabled the image upload and the preview).
$('#example-id').bbcodeditor({
defaultValue: "", // This option must be included whenever the editor is called (it can be left empty) !important
content_class: "example-id-content" // This "option" is optional but you must call it if you want the get the value of the content area (editor)
});
Add the includedButtons
option to the editor and in the option you can specify all the button that will be rendered by the editor. Example:
$('#example-id').bbcodeditor({
defaultValue: "",
content_class: "example-id-content",
includedButtons: [
['bold', 'italic', 'underline'], ['strikethrough', 'supperscript', 'subscript'], ['font-name', 'font-size', 'color'], ['unordered-list', 'ordered-list', 'align'], ['link', 'image', 'media'], ['misc', 'advcode', 'table'] ['preview']
]
});
After that you must add the following values to the editor:
You'll receive something like this on the server side:
bbcode: W2JdSGVsbG8gV29ybGQhWy9iXQ==
_token: vf5Un8KUDa
It is a GET request by default (you can change it by adding the previewRequestType
to the editor). The bbcode's value is encoded in base64 and it must be decoded (You can use this function to decode it in php: base64_decode($value);
).
Example:
$('#example-id').bbcodeditor({
defaultValue: "",
content_class: "example-id-content",
customRequestToken: true,
previewRequestTokenName: "_token", // This is the token's name in laravel!
previewRequestToken: "vf5Un8KUDa",
previewRequestUrl: "https://example.com/request_preview.php"
});
And the server must return the following values in a json format:
{
parsed: "<b>Hello World!</b>",
raw: "[b]Hello World![/b]"
}
Note: the parsed and raw values must actually be the bbcode, the code above is just an example!
Note: if you want to send an error message instead of the bbcode use the following json format:
{
error: "Example error message!"
}
Example:
<?php
class PreviewClass
{
public $value;
public $bbocde;
private $_output;
public function bbcodeParse($value)
{
$this->value = $value;
// Parse the code
}
public function __construct()
{
$this->bbcode = $_GET['bbcode'];
$this->bbcode = base64_decode($this->bbcode);
if(!empty($this->bbcode))
{
$this->_output = json_encode([
'parsed' => $this->bbcodeParse($this->bbcode),
'raw' => $this->bbcode
]);
}
else
{
$this->_output = json_encode([
'error' => 'Please don\'t leave the bbcode field empty!'
]);
}
return $this->_output;
}
}
You must add the following options to your editor:
The default submitting method is POST (It can be changed through adding the imageUploadType
option to the editor, it is not recommanded to change the upload method to GET!).
You can get/call the file via $_POST['bbcodeditor-image-upload']
in your php script.
Example:
$('#example-id').bbcodeditor({
defaultValue: "",
content_class: "example-id-content",
enableImageUpload: true,
uploadFileName: "filename",
uploadFile: "bbcodeditor-image-upload",
uploadFileTokenName: "_token",
uploadFileToken: "vf5Un8KUDa"
});
You get/call the file easier following this example:
$filename = $_POST['filename'];
$this->file = $_FILE[$filename];
If you have specified the content_class
you can get the value of the editor the following way:
// Call the editor
$('#example-id').bbcodeditor({
// ...
content_class: "example-id-content",
// ...
});
// This will insert the value of the editor in the console
console.log($('#example-id-content').val());
The content_class
will be outputed as an ID so you must use the # operator to access it. You can get the value of it with the following code $('#example-id-content').val()
. This is just an example!


About Suffolk Libraries
We’re a charity improving the lives of thousands of Suffolk people by providing safe, fun and inspiring spaces and services. We expand knowledge, connect people, stimulate creativity and foster a sense of community. And we lend physical and digital books – millions of them every year.
Making life better
Whether it’s through an inspiring read, meeting over a tea and a game of Scrabble or bringing families and carers together at children’s events, we make a huge difference to the lives of Suffolk people.
The future
As the community’s needs and the environment we work in continue to change, we’re developing a new way of running a library service.
Support us
We’re a charity that provides all of Suffolk’s library services. You might not realise we’re independent from Suffolk County Council, and that we haven’t closed any libraries since taking over their control in 2012.
Jobs
We make the lives of thousands of Suffolk people better by providing safe, fun and inspiring spaces and services. Join a modern, forward-thinking library service.


You can save the state of the last node selected, using the saveState option.
When saveState is true, a cookie with the last selected tree node is saved.
When the user revisits the page, the tree is expanded to this saved node. A good example is a shopping cart in which the tree opens to the last item the user viewed on their previous visit to the website.
This demo also demonstrates some of the different HTML elements that you can include in your tree.
Since the tree is generated from HTML, it is easy to include checkboxes
and other form elements. As you can see, by changing the HTML code, you can
easily customize the look of the tree nodes.
Click on any node and reload page. That node will be selected


Bounding Box Aligned Text
A JavaScript module for positioning p5.js text based on its bounding box. If you are looking to go just straight to the API documentation, you'll want to start here: BboxAlignedText.
(Note: if you are viewing this on GitHub or NPM, you might want to check out the HTML documentation here.)
Introduction
p5.js is a wonderful creative coding library for JavaScript. The methods that p5.js provides for text placement (i.e. text anchor points) are based on a font's ascent, descent & baseline (see "Typography Metrics"). This is exactly what you want when laying out words as legible text.
Still, there are times when you would want to position text based on its exact bounding box. For example, you might have a particle system where words are particles that you want to position based on the center of the word and/or you want to do collision detection between words. (Demo code coming soon.)
That's what this module provides - an easy way to position (and rotate) p5.js text based on its exact bounding box.
Examples
Example 1 & 2 (live demo):
Example 3 (live version):
Typography Metrics
Installation
Standalone Script
If you just want the standalone script to drop into a project:
- Unminified: bbox-aligned-text.js
- Minified: bbox-aligned-text.min.js
NPM
If you have Node.js & NPM (packaged with Node) installed, open a terminal in your project and run:
npm install p5-bbox-aligned-text
This will install the module in ./node_modules/p5-bbox-aligned-text
. You can then include the code into your project like this:
<script src="./node_modules/p5-bbox-aligned-text/dist/p5-bbox-aligned-text/bbox-aligned-text.min.js"></script>
Or, if you are using browserify with your project, you can import the constructor function in your JS via:
var BboxText = require("p5-bbox-aligned-text");
Full API Documentation
Documentation is online here.


GameConfig is the object you pass when contructing a new Game.
Hierarchy
- GameConfig
Index
Properties
- clearGrid
- containerId
- create
- defaultDotColor
- frameRate
- gridHeight
- gridWidth
- onDotClicked
- onKeyPress
- update
Properties
Optional
clearGrid
• clearGrid? : undefined | false | true
Specifies whether 24a2 should clear the grid at the beginning of each frame. 24a2 clears the grid by setting the colour of every dot to GameConfig.defaultDotColor. Setting clearGrid to false lets you simplify the code for some games by letting 24a2 store the state for each dot. You can use Game.getDot to read back the colour of dots. By default, this is set to true.
Optional
containerId
• containerId? : undefined | string
The ID of a container to create the canvas in.
Optional
create
• create? : undefined | function
create(game)
is a function which is called once, just before the game
starts running. You can use it to initialise game state, if needed.
Optional
defaultDotColor
• defaultDotColor? : Color
Set the default color of the dots. By default, this is set to Color.Gray.
Optional
frameRate
• frameRate? : undefined | number
Sets the game’s frame rate. By default, this is set to 24.
Optional
gridHeight
• gridHeight? : undefined | number
Sets the height of the grid. By default, this is set to 24.
Optional
gridWidth
• gridWidth? : undefined | number
Sets the width of the grid. By default, this is set to 24.
Optional
onDotClicked
• onDotClicked? : undefined | function
onDotClicked(x, y)
is a function which is called when the player clicks
on a dot.
Optional
onKeyPress
• onKeyPress? : undefined | function
onKeyPress(direction)
is a function which is called when the player
presses one of the arrow keys.
Optional
update
• update? : undefined | function
update(game)
is repeatedly called as the game runs. You can use it to
define the main functionality of your game.


--- layout: post title: Flexible Enumerations date: '2009-12-02T05:36:00.001Z' author: solrevdev tags: modified_time: '2009-12-02T05:36:44.205Z' blogger_id: tag:blogger.com,1999:blog-31446756.post-5120965627274465619 blogger_orig_url: http://www.solrevdev.com/2009/12/flexible-enumerations.html ---
A good article about replacing normal enums with something a bit more flexible but still being immutable.
http://phazed.com/blog/flexible-enumerations/
I have seen this design pattern before but I do not know if it has a proper design pattern name.


--- layout: post title: A legacy Atlassian Plugin SDK for Homebrew date: 2014-06-12 19:40:28.000000000 +01:00 type: post published: true status: publish categories: - Productivity - Programming tags: - atlassian - atlassian plugin sdk - confluence - homebrew - maven meta: _edit_last: '1' _syntaxhighlighter_encoded: '1' tmac_last_id: '618797302715543553' author: David Simpson excerpt_separator: ---
Atlassian released version 5.0.0 of their plugin SDK earlier this month and like a fanboy I upgraded immediately. It updates Maven from 2.1.0 to 3.2.1, so that's a big change in itself.
Today, I started work on updating an add-on for Confluence 4.3.x (yes, really). Guess what? My development environment is now completely incompatible with the target Confluence version. What to do?
Being a Homebrew fan, I'd like to use that to reinstall the old version. You can do this with old versions of some software such as Maven e.g.
brew tap homebrew/versions
brew install maven2
I'd like to do the same with the Atlassian Plugin SDK. Could I? Nope.
So I rolled my own. It was very easy.
You can use it too. Here's how:
brew tap dvdsmpsn/tap
brew install dvdsmpsn/tap/atlassian-plugin-sdk-42
This currently installs version 4.2.19 of the SDK.
The code is available on GitHub. I'm sure there are better ways of doing this, but it fills a gap and that's enough for me.
Update 2014-06-18:
Atlassian have added their own legacy version just like mine. You can try it out:
brew tap atlassian/tap
brew install atlassian/tap/atlassian-plugin-sdk-4
Thanks to Marcos Scriven for providing the update and letting me know.


G Deliveries
Order Delivery
(current)
Menu
Order
Smoked Ribs
$14.99
ADD TO ORDER
Arugula Pizza
$11.99
ADD TO ORDER
Royal with Cheese
$8.99
ADD TO ORDER
Ice Cream Biscuit
$7.99
ADD TO ORDER
Item
Price
Subtotal
Tax
Total
Your Name
Phone Number
Address
Submit


|
Bitstream Interpretation Library (BIL)
0.1
|
Contains declaration of V5PacketProcessor class. More...
#include <bitstream/V5BitstreamSyntaxChecker.hpp>
#include <configuration/V5Configuration.hpp>
#include <packetprocessor/RegisterLookup.hpp>
#include <packetprocessor/WordRegister.hpp>
#include <packetprocessor/V5CMDRegister.hpp>
#include <packetprocessor/V5CRCRegister.hpp>
#include <packetprocessor/V5FARRegister.hpp>
#include <packetprocessor/V5FDRIRegister.hpp>
#include <packetprocessor/V5IDCODERegister.hpp>
#include <packetprocessor/V5MFWRRegister.hpp>
Go to the source code of this file.
Classes | |
| class | bil::V5PacketProcessor |
| Executes bitstreams in order to get their configuration data. More... |
Namespaces | |
| namespace | bil |
Macros | |
| #define | BIL_V5PACKETPROCESSOR_HPP |
Contains declaration of V5PacketProcessor class.
Definition in file V5PacketProcessor.hpp.
| #define BIL_V5PACKETPROCESSOR_HPP |
Definition at line 8 of file V5PacketProcessor.hpp.


TwilTwil ChaCha using Twilio's TaskRouter
Want to Help?
Login to our portal to start receiving and answering questions based on your skills.
{% include 'snippets/status.html' %}Need Help?
Send a text message to or call the number below to ask a question.


--- layout: post title: Moth Moth Moth! date: 2006-04-17 00:00:00 category: personal ---
Hey - short notice, but if you're in Brighton on Wednesday evening (19th) then head along to the Sanctuary Cafe. My lovely auntie Vic's band, Moth, are playing there from 8pm. They're ace.


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Makes 10-15
Dietary
Make these oven-baked green-pea pastry bites to serve as canapés at a party, or as part of an Indian-style feast.
Equipment and preparation: For this recipe you will need a food processor.
Each serving provides 151kcal, 5g protein, 20g carbohydrate (of which 1g sugars), 5g fat (of which 1g saturates), 3g fibre and 0.7g salt.
Preheat the oven to 180C/160C Fan/Gas 4. Lightly grease a baking tray with a little oil.
For the filling, blend the ginger and green chillies to a paste in a food processor, then remove from the food processor and set aside.
Blend the peas in the food processor (there is no need to wash the bowl). Remove and set aside.
Heat the oil in a lidded frying pan over a medium heat. Add the mustard seeds and fry, covered with the lid, until they start to pop. Take care to keep your eyes and face away from the pan.
Add the ginger-and-chilli paste and stir-fry for 1-2 minutes. Add the pea purée and continue to fry, stirring well, for a further 4-5 minutes.
Stir in the cinnamon, garam masala, turmeric, salt and chilli powder and fry for a further 2-3 minutes, or until there is little to no moisture left in the pan but the peas are still bright green. Transfer the pan contents to a bowl and set aside.
For the pastry, put the flour into a mixing bowl and make a well in the centre. Add the salt and oil to the well, then rub the mixture together using your fingertips until it resembles fine breadcrumbs.
Pour in 120ml/4fl oz of the water and stir the mixture until it comes together as a dough. Gradually add the remaining water, kneading it into the dough until it feels firm and pliant. Roll the dough into a ball, then rub your hands with a teaspoonful of oil and pat the dough all over to cover it in the oil - this will keep it moist.
Pinch apricot-sized pieces of dough and roll each piece into a 10cm/4in circle on a lightly floured work surface.
Place 1 heaped teaspoonful of the filling mixture into the middle of each pastry circle and bring the edges of the pastry up tightly around the peas. Seal at the top by pinching the edges closed and trimming off any excess pastry. Roll each parcel into a ball and place onto the prepared baking tray.
 Bake for 20-30 minutes, or until the pastry is golden-brown.


Continue on Alcoa Highway for about 2 miles, exit right onto I-140 marked "Oak Ridge".
Follow I-140 until it tees into Pellissippi Parkway. Take a left (north) onto Pellissippi Parkway.
Drive north on Pellissippi Parkway toward Oak Ridge. The road will fork, take the left branch and you will drive through Solway and across a bridge and the Clinch River.
You will the see a large cemetery on your right side. Turn right just past this cemetery, and you will be following (U.S. 62) into Oak Ridge and this road will become Illinois Avenue.
Go past the first stop light (intersection of Illinois Avenue and Lafayette Avenue), and you will see the "Ramada Inn and Suites" on your left side.


public class Notification
extends java.lang.Object
User
| Modifier and Type | Field and Description |
|---|---|
(package private) com.google.firebase.auth.FirebaseAuth |
auth |
private java.lang.String |
bookTitle |
static int |
BORROW_REQUEST_BOOK |
static int |
CANCEL_PICKUP |
static int |
CHANGE_LOCATION |
(package private) com.google.firebase.firestore.FirebaseFirestore |
DB |
private java.lang.String |
message |
static int |
OWNER_ACCEPT_REQUEST |
static int |
OWNER_DELETE |
(package private) com.google.firebase.database.FirebaseDatabase |
RTDB |
private java.lang.String |
sourceUsername |
(package private) static java.lang.String |
TAG |
private java.lang.String |
targetUsername |
private int |
type |
(package private) com.google.firebase.firestore.CollectionReference |
userRef |
| Constructor and Description |
|---|
Notification(java.lang.String sourceUsername,
java.lang.String targetUsername,
java.lang.String bookTitle,
int type)
Contructor for a notification
|
| Modifier and Type | Method and Description |
|---|---|
void |
prepareMessage()
Prepare the message being sent to the user, depending on the type of notification being sent
|
void |
sendNotification()
Initiate the sending of the Notification by writing it to the database
https://www.javatpoint.com/java-get-current-date
|
public static final int BORROW_REQUEST_BOOK
public static final int CANCEL_PICKUP
public static final int OWNER_ACCEPT_REQUEST
public static final int OWNER_DELETE
public static final int CHANGE_LOCATION
static final java.lang.String TAG
private final java.lang.String sourceUsername
private final java.lang.String targetUsername
private final java.lang.String bookTitle
private final int type
private java.lang.String message
com.google.firebase.auth.FirebaseAuth auth
com.google.firebase.firestore.FirebaseFirestore DB
com.google.firebase.database.FirebaseDatabase RTDB
com.google.firebase.firestore.CollectionReference userRef
public Notification(java.lang.String sourceUsername, java.lang.String targetUsername, java.lang.String bookTitle, int type)
sourceUsername
- The user whose action sends a notificationtargetUsername
- The user who the notification is being sent tobookTitle
- The title of the book used within the notificationtype
- The type of notification being sentpublic void prepareMessage()
public void sendNotification()


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.maven.plugin.AbstractMojo org.apache.sling.maven.bundlesupport.BundleDeployMojo
public class BundleDeployMojo
Deploy a JAR representing an OSGi Bundle. This method posts the bundle built
by maven to an OSGi Bundle Repository accepting the bundle. The plugin uses
a multipart/format-data POST request to just post the file to
the URL configured in the obr
property.
| Field Summary |
|---|
| Fields inherited from interface org.apache.maven.plugin.Mojo |
|---|
ROLE |
| Constructor Summary | |
|---|---|
BundleDeployMojo()
|
| Method Summary | |
|---|---|
protected java.io.File |
changeVersion(java.io.File file,
java.lang.String oldVersion,
java.lang.String newVersion)
Change the version in jar |
void |
execute()
Execute this Mojo |
protected java.io.File |
fixBundleVersion(java.io.File jarFile)
Optionally fixes up the version of the bundle given in the jar File. |
protected java.lang.String |
getBundleSymbolicName(java.io.File jarFile)
Returns the symbolic name of the given bundle. |
protected java.lang.String |
getJarFileName()
Returns the path and name of the jar file containing the bundle to be uploaded. |
| Methods inherited from class org.apache.maven.plugin.AbstractMojo |
|---|
getLog, getPluginContext, setLog, setPluginContext |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public BundleDeployMojo()
| Method Detail |
|---|
public void execute() throws org.apache.maven.plugin.MojoExecutionException
execute
in interface org.apache.maven.plugin.Mojo
org.apache.maven.plugin.MojoExecutionException
protected java.lang.String getJarFileName()
null
name but
throws a MojoExecutionException
if the name is not known.
null
.protected java.io.File fixBundleVersion(java.io.File jarFile) throws org.apache.maven.plugin.MojoExecutionException
jarFile
may just be
returned.
jarFile
- The file whose bundle version should be fixed
jarFile
if the version was not fixed.
org.apache.maven.plugin.MojoExecutionException
- May be thrown in case of any problemsprotected java.io.File changeVersion(java.io.File file, java.lang.String oldVersion, java.lang.String newVersion) throws org.apache.maven.plugin.MojoExecutionException
newVersion
- file
-
org.apache.maven.plugin.MojoExecutionException
protected java.lang.String getBundleSymbolicName(java.io.File jarFile)
jarFile
does not contain a manifest with a
Bundle-SymbolicName
header null
is
returned. Otherwise the value of the Bundle-SymbolicName
header is returned.
This method may also be used to check whether the file is a bundle at all
as it is assumed, that only if the file contains an OSGi bundle will the
Bundle-SymbolicName
manifest header be set.
jarFile
- The file providing the bundle whose symbolic name is
requested.
Bundle-SymbolicName
manifest header or
null
if no manifest exists in the file or the
header is not contained in the manifest. However, if
null
is returned, the file may be assumed to not
contain an OSGi bundle.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Created by Jeesun Kim / @jeesunikim
An open-source computer hardware and software company
Started in 2005 as a project for students at the Interaction Design institute Ivrea in Italy
Arduino Uno
Breadboard
LED
Resistor
Switch
Wires
and more...
The JavaScript Robotics and Hardware Programming Framework.
Rick Waldron's Johnny-Five
No more C language..?
Probably not


span 12
span 8
span 4
span 7
span 5
span 6
span 6
span 4
span 4
span 4
span 3
span 3
span 3
span 3
span one fifth
span one fifth
span one fifth
span one fifth
span one fifth
span golden big
span golden small
span two sixths
span four sixths
span 12
span 8
span 4
span 7
span 5
span 6
span 6
span 4
span 4
span 4
span 3
span 3
span 3
span 3
span one fifth
span one fifth
span one fifth
span one fifth
span one fifth
span golden big
span golden small
span two sixths
span four sixths


Methodology¶
The methodology used in this work to characterize the coherent structures are divided in three main steps: the calculation of a local function to detect the vortex; the localization of the maxima of this function; and the adjustment (fitting) of this field to the proposed model.
Detection methods¶
In this section, the detection methods implemented in the code for vortex identification are presented. These methods are based on the velocity gradient tensor, , that can be written as:
As this is a second order tensor, it can be decomposed into a symmetric and anti-symmetric part, where:
is known as the rate-of-strain tensor and is the vorticity tensor.
The characteristic equation for is given by
where P, Q and R are the three invariants of the velocity gradient tensor. Using the decomposition into symmetric and anti-symmetric parts, these invariants can be expressed as:
Q criterion¶
The Q criterion proposed by Hunt et al (1988) [HUNT1988] identifies the vortices as flow regions with positive second invariant of $nabla u$. An additional condition is that the pressure in the eddy region should to be lower than the ambient pressure. Chakraborty et al (2005) [CHAKRA2005] quoted “in an incompressible flow Q is a local measure of the excess rotation rate relative to the strain rate”.
In practical terms, the vortex is detected in case of the second invariant .
criterion¶
Chong et al (1990) [CHONG1990] define a vortex core to be the region where has complex eigenvalues. In order to determine if the eigenvalues are complex, we examine the discriminant of the characteristic equation, considering the flow incompressible (P = 0).
Swirling strength criterion¶
The swirling strength criterion () was developed by Zhou et al (1999) [ZHOU1999]. It defines a vortex core to be the region where has complex eigenvalues. It is based on the idea that the velocity gradient tensor in Cartesian coordinates can be decomposed as:
where is the real eigenvalue, related to the eigenvector , and the complex conjugate pair of complex eigenvalues is , related to the eigenvectors . The strength of this swirling motion can be quantified by , called the local swirling strength of the vortex. The threshold for is not well-defined, but theoretically any value greater than zero should be considered a vortex. Experimental results [ZHOU1999] shows that give smoother results.
Localization of the extrema¶
To have smooth results on the swirling strength, we apply a normalization of the field. The swirling strength is divided by the wall-normal profile of its RMS value:
Then the local maxima of the detection can be identified. The normalization is not required for the HIT cases, it is only used when we have an non-homogeneous direction.
In figure Fig. 1 we see the original swirling strength field, where 104 vortices were found, mostly near the wall, where the boundary layer plays an important role in increasing the swirling strengtht. The yellow circles corresponds to the vortices rotating clockwise and the green circles for the counter-clockwise rotation.
In figure Fig. 2 we show the fluctuation of the swirling strength field, by applying the Reynolds decomposition, now with 202 vortices found, minimizing the wall influence over the detection.
We can play with the distance between one detected vortex and another, by increasing the box size of the peak detection. In figure Fig. 3 we set the box size to 12, instead of box size 6 used in figures Fig. 1 and Fig. 2. With this setting we reduce the detected vortices to 154, by removing the overlapping ones.
One interesting fact about the swirling strength (as well the other methods) is that the local maximum values does not always match the center of the vortex. We show in Fig. 4 one example of this mismatch between them.
Fitting of coherent structures¶
Using the peak of maximum swirling strength or identifying the places where the Q or criterion are higher than 0 gives us a rough estimation of a possible vortex and its center. But even using a threshold on these methods, the presence of a real vortex is not always true. To improve this detection we use a Lamb-Oseen vortex model to be fitted on top of the actual detected peak to check if it is really a vortex.
The correlation coefficient between the fitted model and the velocity field is calculated according to equation ref{eq:corr} and if it’s higher than 0.75 we can consider it a vortex.
Lamb-Oseen vortex¶
The Lamb-Oseen vortex is a mathematical model for the flow velocity in the circumferential direction ($theta$), shown in equation ref{eq:oseenDecay}. It models a line vortex that decays due to viscosity.
where $r$ is the radius, $r_0 = sqrt{4 nu t}$ is the core radius of vortex, $nu$ is the viscosity and $Gamma$ is the circulation contained in the vortex.
In this work we are dealing with a time-independent flow, so we have no decaying due to viscosity. And since the coherent structures are in movement, we add the convective velocity to the Lamb-Oseen vortex model shown in equation ref{eq:oseen}.
Non-linear least squares¶
Levenberg Marquardt method¶
The Levenberg–Marquardt algorithm, also known as the damped least-squares method, is used to solve non-linear least squares problems. These minimization problems arise especially in least squares curve fitting.
Powell’s dogleg method¶
The Powell’s method is an algorithm for finding a local minimum of a function. This function doesn’t need to be differentiable and no derivatives are taken. It does this using a combination of Newton’s method and the steepest descent method. This is a so-called trust region method. This means that every step moves the current point to within a finite region. This makes the method more stable than Newton’s method.
| [HERPIN2009] | Sophie Herpin. Étude de linfluence du nombre de Reynolds sur lorganisation de la turbulence de paroi. PhD thesis, Ecole Centrale de Lille, 2009. |
| [ZHOU1999] | (1, 2) Zhou J., Adrian R. J., Balachandar S., and Kendall T. M. Mechanisms for generating coherent packets of hairpin vortices in channel flow. J. Fluid Mech., 387:353–396, 1999. |
| [CHAKRA2005] | Chakraborty P., Balachandar S., and Adrian R. J. On the relationships between local vortex identification schemes. J. Fluid Mech., 535:189–214, 2005. |
| [CHONG1990] | Chong M. S., Perry A. E., and Cantwell B. J. A general classification of three-dimensional flow fields. Phys. Fluids, 2:765–777, 1990. |
| [HUNT1988] | Hunt, J. C. R., Wray, A. A. & Moin, P. Eddies, stream, and convergence zones in turbulent flows. Center for Turbulence Research Report, CTR-S88, 1988 |


COLLEGE
Let's see that....
I really like my campus, because I feel happy to be accepted here, and I am very grateful to Allah SWT, because of the blessing I still can study until today. And I have a lecturer who is very extraordinary and very genius in my opinion, and he is very cool in my opinion, his name is Mr. Jazman, thanks sir for his guidance so far


{% extends 'layouts/layout.html' %} {% block pageTitle %} NHS login prototypes {% endblock %} {% block beforeContent %} {% endblock %} {% block content %}
Testing the Paycasso Docusure SDK to capture images of the user's ID.
This prototype is designed for a mobile screen size (i.e. less than 600 pixels wide).
Enter prototypePrototype contact: Jack Haith


We serve authenic food from El Salvador and Honduras in Cockeysville, Maryland.
Our bold dishes start with fresh ingredients because we believe they are at the heart of great cuisine.
In the meantime, check out our location, catering and takeout options, and our menu.


Pages should be structured in a hierarchical manner, generally with one 1st degree headings (h1) being the most important (usually page titles or main content heading), then 2nd degree headings (h2 - usually major section headings), down to 3rd degree headings (sub-sections of the h2), and so on.
Technically, lower degree headings should be contained within headings of the next highest degree (i.e., one should not skip heading levels, such as from an h2 to an h4, going down the document).
This is an example where heading levels have been skipped and are not in a logical order, which makes the page difficult to understand and navigate for people using assitive technologies such as screen reader.


This Differential pair model is one of the five benchmark circuits described in the SPICE3 Version e3 User's Manual (see information of package Spice3).
The differential pair circuit is operating in the differential mode. This means the input voltage VIN that is only applied at one transistor is amplified. To comprehend this behavior the user is recommended to simulate from t=0 to t=1s and observe "VIN.p.v" which is the input voltage and "Outputvoltage" which is the amplified output voltage.
Original SPICE3 netlist of the Differential pair:
SIMPLE DIFFERENTIAL PAIR
VCC 7 0 12
VEE 8 0 -12
VIN 1 0 AC 1
RS1 1 2 1K
RS2 6 0 1K
Q1 3 2 4 MOD1
Q2 5 6 4 MOD1
RC1 7 3 10K
RC2 7 5 10K
RE 4 8 10K
.MODEL MOD1 NPN BF=50 VAF=50 IS=1.E-12 RB=100 CJC=.5PF TF=.6NS
.TF V(5) VIN
.AC DEC 10 1 100MEG
.END
In the Modelica representation the tiny capacity CJC was set to 1e-9F to get a higher numerical robustness. In future the numerical behavior will be analysed to be able to apply the original value CJC=.5PF.


NO-STATUS
The network_monitor example demonstrates how to listen for changes to the
status of the network interfaces on this computer.
This API is normally
only available to packaged apps with 'network-state' socket permission,
but can be enabled for debugging purposes using the
--allow-nacl-socket-api=<hostname>
command line
flag.
| Index | Display Name | Name | Type | State | IP Addresses | MTU |
|---|


Class: Wraith.BaseView
| Defined in: | src/baseview.coffee |
| Inherits: | Wraith.Base |
Overview
The core Wraith View responsible for rendering a single instance of a view. It will bind to a models update event and re-render each time it changes. Additionally it will handle setting classes up based on the data-class directive, and other bindings that might be required in the future.
Direct Known Subclasses
Wraith.Controller, Wraith.ViewModel
Instance Method Summary
- - (void) constructor($el) Constructor Constructor
- - (void) bindUIEvents($view) Bound Iterates over a view and its children looking for the data-events attribute which should be a comma separated list of events.
- - (void) bindUIEvent($view, event) Bound Binds to a UI event on a given view.
- - (void) wrapUIEvent(cb) Bound Used as a wrapper for handling UI events and maintaining the proper context.
- - (void) handleUIEvent(e, cb) Bound Handles a UI event on the view level.
- - (void) unbindUIEvents($view) Bound Unbinds a given view and its childrens UI events.
- - (void) unbindUIEvent($view, event) Bound Unbinds a given view from the given set of events.
- - (void) applyViewUpdate($old, $new) Bound Crawls the old nodes and new nodes, compares their contents and attributes, and updates the old node accordingly.
- - (void) updateAttribute(name, $old, $new) Updates a given attribute on $old to the current value on $new.
Inherited Method Summary
Methods inherited from Wraith.Base
#constructor, #bind, #unbind, #emit, #proxy
Constructor Details
- (void) constructor($el)
Constructor
Instance Method Details
- (void) bindUIEvents($view) (bound)
Iterates over a view and its children looking for the data-events attribute which should be a comma separated list of events. The scheme is defined by #bindUIEvent
- (void) bindUIEvent($view, event) (bound)
Binds to a UI event on a given view. Relies on the data-events attribute to be a space or comma delimited list of events. A valid event is given in the schema event:callback The event must be part of Wraith.UIEVENTS
- (void) wrapUIEvent(cb) (bound)
Used as a wrapper for handling UI events and maintaining the proper context.
- (void) handleUIEvent(e, cb) (bound)
Handles a UI event on the view level. Calls stopPropagation by default to prevent bubbling. Also will emit a uievent for the parent controller to listen to so it can invoke the proper method in the controller.
- (void) unbindUIEvents($view) (bound)
Unbinds a given view and its childrens UI events.
- (void) unbindUIEvent($view, event) (bound)
Unbinds a given view from the given set of events. Follows the same schema as Wraith.BaseView#bindUIEvent does for binding.
- (void) applyViewUpdate($old, $new) (bound)
Crawls the old nodes and new nodes, compares their contents and attributes, and updates the old node accordingly. This prevents the entire view from re-rendering each time data changes.
- (void) updateAttribute(name, $old, $new)
Updates a given attribute on $old to the current value on $new. Used to update values on a DOM element without having to rewrite the entire DOM structure (children etc).


|
App Engine Python SDK
v1.6.9 rev.445
The Python runtime is available as an experimental Preview feature.
|
Public Member Functions | |
| def | __init__ |
| def | fillBuffer |
| def | getNodeIndex |
| def | addNavigationNode |
| def | get |
| def | LT |
| def | getCurrentSymbol |
| def | LB |
| def | getTreeSource |
| def | getSourceName |
| def | getTokenStream |
| def | setTokenStream |
| def | getTreeAdaptor |
| def | hasUniqueNavigationNodes |
| def | setUniqueNavigationNodes |
| def | consume |
| def | LA |
| def | mark |
| def | release |
| def | index |
| def | rewind |
| def | seek |
| def | push |
| def | pop |
| def | reset |
| def | size |
| def | replaceChildren |
| def | __str__ |
| def | toString |
| def | __iter__ |
| iterator interface | |
| Public Member Functions inherited from google.appengine._internal.antlr3.tree.TreeNodeStream | |
| def | get |
| def | LT |
| def | getTreeSource |
| def | getTokenStream |
| def | getTreeAdaptor |
| def | setUniqueNavigationNodes |
| def | toString |
| def | replaceChildren |
| Public Member Functions inherited from google.appengine._internal.antlr3.streams.IntStream | |
| def | consume |
| def | LA |
| def | mark |
| def | index |
| def | rewind |
| def | release |
| def | seek |
| def | size |
| def | getSourceName |
Public Attributes | |
| down | |
| up | |
| eof | |
| nodes | |
| root | |
| tokens | |
| adaptor | |
| uniqueNavigationNodes | |
| p | |
| lastMarker | |
| calls | |
@brief A buffered stream of tree nodes. Nodes can be from a tree of ANY kind. This node stream sucks all nodes out of the tree specified in the constructor during construction and makes pointers into the tree using an array of Object pointers. The stream necessarily includes pointers to DOWN and UP and EOF nodes. This stream knows how to mark/release for backtracking. This stream is most suitable for tree interpreters that need to jump around a lot or for tree parsers requiring speed (at cost of memory). There is some duplicated functionality here with UnBufferedTreeNodeStream but just in bookkeeping, not tree walking etc... @see UnBufferedTreeNodeStream
| def google.appengine._internal.antlr3.tree.CommonTreeNodeStream.__str__ | ( | self | ) |
Used for testing, just return the token type stream
| def google.appengine._internal.antlr3.tree.CommonTreeNodeStream.addNavigationNode | ( | self, | |
| ttype | |||
| ) |
As we flatten the tree, we use UP, DOWN nodes to represent the tree structure. When debugging we need unique nodes so instantiate new ones when uniqueNavigationNodes is true.
| def google.appengine._internal.antlr3.tree.CommonTreeNodeStream.fillBuffer | ( | self | ) |
Walk tree with depth-first-search and fill nodes buffer. Don't do DOWN, UP nodes if its a list (t is isNil).
| def google.appengine._internal.antlr3.tree.CommonTreeNodeStream.getNodeIndex | ( | self, | |
| node | |||
| ) |
What is the stream index for node? 0..n-1 Return -1 if node not found.
| def google.appengine._internal.antlr3.tree.CommonTreeNodeStream.LB | ( | self, | |
| k | |||
| ) |
Look backwards k nodes
| def google.appengine._internal.antlr3.tree.CommonTreeNodeStream.pop | ( | self | ) |
Seek back to previous index saved during last push() call. Return top of stack (return index).
| def google.appengine._internal.antlr3.tree.CommonTreeNodeStream.push | ( | self, | |
| index | |||
| ) |
Make stream jump to a new location, saving old location. Switch back with pop().


--1-- CRA No.785/2013 02.09.2015 Shri Balkrishna Upadhyay, learned counsel for the appellant. Shri P.V. Namjoshi, learned counsel for the respondents.
Heard on I.A. No.6318/2015, an application for abatement of State appeal due to death of respondent No.2
- Madanlal Maheshwari/accused.
Present appeal has been preferred by M.P. Pollution Control Board against the judgment dated 16.07.2010 passed by C.J.M., Ujjain in Criminal Case No.233/2005 acquitting the respondent No.2 of charges under section 43 and 44 of Water (Prevention and Control of Pollution) Act, 1974 as well as section 25 of Pollution Control Act.
Learned counsel for the petitioner submits that sole proprietor of M/s. Maheshwari Industries, Ujjain namely
--2--
Madanlal Maheshwari has died on 02.12.2014 hence, none remains there for execution of jail sentence at least.
Learned counsel for the appellant Pollution Board submits that true it is that by virtue of death of the respondent, material part of cause of action has come to an end for all practical purposes however for the sake of name, properitor firm remains in existence against whom action can be continued.
In response, learned counsel for the respondents submits that entire partnership as such has also come to an end and nothing is surviving on behalf of the partnership also on the scene of occurrence.
Considering the aforesaid, in considered opinion of this court, nothing survives in the matter against the respondents because death of the sole accused has finally decided this matter practically for all purposes.
--3--
Accordingly, I.A. is allowed and the appeal stands dismissed as abated.
Certified copy as per rules.
(T.K. Kaushal) Judge Sourabh


The fickle aggregate
What is an aggregate class?
Aggregate class types make up a special family of class types that can be,
particularly, initialized by means of aggregate initialization, using
direct-list-init or copy-list-init, T aggr_obj{arg1, arg2, ...}
and T aggr_obj = {arg1, arg2, ...}
, respectively.
The rules governing whether a class is an aggregate or not are not entirely straight-forward, particularly as the rules have been changing between different releases of the C++ standard. In this post we’ll go over these rules and how they have changed over the standard release from C++11 through C++20.
Before we visit the relevant standard passages, consider the implementation of the following contrived class type:
namespace detail {
template <int N>
struct NumberImpl final {
const int value{N};
// Factory method for NumberImpl<N> wrapping non-type
// template parameter 'N' as data member 'value'.
static const NumberImpl& get() {
static constexpr NumberImpl number{};
return number;
}
private:
NumberImpl() = default;
NumberImpl(int) = delete;
NumberImpl(const NumberImpl&) = delete;
NumberImpl(NumberImpl&&) = delete;
NumberImpl& operator=(const NumberImpl&) = delete;
NumberImpl& operator=(NumberImpl&&) = delete;
};
} // namespace detail
// Intended public API.
template <int N>
using Number = detail::NumberImpl<N>;
where the design intent has been to create a non-copyable, non-movable singleton
class template which wraps its single non-type template parameter into a
public constant data member, and where the singleton object for each
instantiation is the only that can ever be created for this particular class
specialization. The author has defined an alias template Number
solely to
prohibit users of the API to explicitly specialize the underlying
detail::NumberImpl
class template.
Ignoring the actual usefulness (or, rather, uselessness) of this class template,
have the author correctly implemented its design intent? Or, in other words,
given the function wrappedValueIsN
below, used as an acceptance test for the
design of the publicly intended Number
alias template, will the function
always return true
?
template <int N>
bool wrappedValueIsN(const Number<N>& num) {
// Always 'true', by design of the 'NumberImpl' class?
return N == num.value;
}
We will answer this question assuming that no user abuses the interface by
specializing the semantically hidden detail::NumberImpl
, in which case the
answer is:
- C++11: Yes
- C++14: No
- C++17: No
- C++20: Yes
The key is, as one might guess given the title of this post, that the class
template detail::NumberImpl
(for any non-explicit specialization of it) is an
aggregate in C++14 and C++17, whereas it is not an aggregate in C++11 and C++20.
As covered above, initialization of an object using direct-list-init or
copy-list-init will result in aggregate initialization if the object is of
an aggregate type.
Thus, what may look like value initialization (e.g. Number<1> n{}
here)—which we may expect will have the effect of zero initialization followed
by default initialization as a user-declared but not user-provided default
constructer exists—or direct initialization (Number<1> n{2}
here) of a class
type object will actually bypass any constructors, even deleted ones, if the
class type is an aggregate.
struct NonConstructible {
NonConstructible() = delete;
NonConstructible(const NonConstructible&) = delete;
NonConstructible(NonConstructible&&) = delete;
};
int main() {
//NonConstructible nc; // error: call to deleted constructor
// Aggregate initialization (and thus accepted) in
// C++11, C++14 and C++17.
// Rejected in C++20 (error: call to deleted constructor).
NonConstructible nc{};
}
Thus, we can fail the wrappedValueIsN
acceptance test in C++14 and C++17 by
bypassing the private and deleted user-declared constructors of
detail::NumberImpl
by means of aggregate initialization, specifically where we
explicitly provide a value for the single value
member thus overriding the
default member initializer (... value{N};
) that otherwise sets its value to
N
.
constexpr bool expected_result{true};
const bool actual_result =
wrappedValueIsN(Number<42>{41}); // false
// ^^^^ aggr. init. int C++14 and C++17.
Note that even if detail::NumberImpl
were to declare a private and explicitly
defaulted destructor (~NumberImpl() = default;
with private
access
specifyer) we could still, at the cost of a memory leak, break the acceptance
test by e.g. dynamically allocating (and never deleting) a detail::NumberImpl
object using aggregate initialization ( wrappedValueIsN(*(new Number<42>{41}))
).
But why is detail::NumberImpl
an aggregate in C++14 and C++17, and why is
it not an aggregate in C++11 and C++20? We shall turn to the relevant standard
passages for the different standard versions for an answer.
Aggregates in C++11
The rules governing whether a class is an aggregate or not is covered by {dcl.init.aggr}/1, where we refer to N3337 (C++11 + editorial fixes) for C++11 [ emphasis mine]:
An aggregate is an array or a class (Clause [class]) with no user-provided constructors ([class.ctor]), no brace-or-equal-initializers for non-static data members ([class.mem]), no private or protected non-static data members (Clause [class.access]), no base classes (Clause [class.derived]), and no virtual functions ([class.virtual]).
The emphasized segments are the most relevant ones for the context of this post.
User-provided functions
The detail::NumberImpl
class does declare four constructors, such that it
has four user-declared constructors, but it does not provide definitions for
any of these constructors; it makes use of explicitly-defaulted and
explicitly-deleted function definitions at the constructors' first
declarations, using the default
and delete
keywords, respectively.
As governed by {dcl.fct.def.default}/4, defining an explicitly-defaulted or explicitly-deleted function at its first declaration does not count as the function being user-provided [extract, emphasis mine]:
[…] A special member function is user-provided if it is user-declared and not explicitly defaulted or deleted on its first declaration. […]
Thus, the detail::NumberImpl
fulfills the aggregate class requirement
regarding having no user-provided constructors.
Example: out-of-line definitions for explicitly defaulted constructors
In the following example B
has a user-provided default constructor, whereas
A
does not:
struct A {
A() = default; // not user-provided.
int a;
};
struct B {
B(); // user-provided.
int b;
};
// Out of line definition: a user-provided
// explicitly-defaulted constructor.
B::B() = default;
with the result that A
is an aggregate, whereas B
is not. This, in turn,
means that initialization of B
by means of an empty direct-list-init will
result in its data member b
being left in an uninitialized state. For A
,
however, the same initialization syntax will result in (via aggregate
initialization of the A
object and subsequent value initalization of its data
member a
) zero-initialization of its data member a
:
A a{};
// Empty brace direct-list-init:
// -> A has no user-provided constructor
// -> aggregate initialization
// -> data member 'a' is value-initialized
// -> data member 'a' is zero-initialized
B b{};
// Empty brace direct-list-init:
// -> B has a user-provided constructor
// -> value-initialization
// -> default-initialization
// -> the explicitly-defaulted constructor will
// not initialize the data member 'b'
// -> data member 'b' is left in an unititialized state
This may come as a surprise, and with the obvious risk of reading the
uninitialized data member b
with the result of undefined behaviour:
A a{};
B b{}; // may appear as a sound and complete initialization of 'b'.
a.a = b.b; // reading uninitialized 'b.b': undefined behaviour.
A takeaway from this example can be to, as a rule of thumb, never to define explicitly-defaulted constructors out-of-line.
Default member initializers
Albeit the detail::NumberImpl
class has no user-provided constructors, it does use a brace-or-equal-initializer for the single non-static data member value
, such that the data member value
has a default
member initializer. This is the sole reason as to why the detail::NumberImpl
class is not an aggregate in C++11.
Aggregates in C++14
For C++14, we once again turn to {dcl.init.aggr}/1, now referring to N4140 (C++14 + editorial fixes), which is nearly identical to the corresponding paragraph in C++11, except that the segment regarding brace-or-equal-initializers has been removed [ emphasis mine]:
An aggregate is an array or a class (Clause [class]) with no user-provided constructors ([class.ctor]), no private or protected non-static data members (Clause [class.access]), no base classes (Clause [class.derived]), and no virtual functions ([class.virtual]).
Thus, the detail::NumberImpl
class fulfills the rules for it to be an
aggregate in C++14, thus allowing circumventing all private, defaulted or
deleted user-declared constructors by means of aggregate initialization.
We will get back to the consistently emphasized segment regarding
user-provided constructors once we reach C++20 in a minute, but we shall first
visit some explicit
puzzlement in C++17.
Aggregates in C++17
True to its form, the aggregate once again changed in C++17, now allowing an
aggregate to derive publicly from a base class, with some restrictions, as
well as prohibiting explicit
constructors for aggregates. {dcl.init.aggr}/1
from N4659 ((March 2017 post-Kona working draft/C++17 DIS), states [ emphasis
mine]:
An aggregate is an array or a class with
- (1.1) no user-provided,
explicit
, or inherited constructors ([class.ctor]),- (1.2) no private or protected non-static data members (Clause [class.access]),
- (1.3) no virtual functions, and
- (1.4) no virtual, private, or protected base classes ([class.mi]).
The segment in about explicit
is interesting in the context of this post, as
we may further increase the aggregate cross-standard-releases volatility by
changing the declaration of the private user-declared explicitly-defaulted
default constructor of detail::NumberImpl
from:
template <int N>
struct NumberImpl final {
// ...
private:
NumberImpl() = default;
// ...
};
into:
template <int N>
struct NumberImpl final {
// ...
private:
explicit NumberImpl() = default;
// ...
};
with the effect that detail::NumberImpl
is no longer an aggregate in C++17,
whilst still being an aggregate in C++14. Denote this example as (*)
. Apart
from copy-list-initialization with an empty braced-init-list:
struct Foo {
virtual void fooIsNeverAnAggregate() const {};
explicit Foo() {}
};
void foo(Foo) {}
int main() {
Foo f1{}; // OK: direct-list-initialization
// Error: converting to 'Foo' from initializer
// list would use explicit constructor 'Foo::Foo()'
Foo f2 = {};
foo({});
}
the case shown in (*)
is the only situation where explicit
actually has an
effect on a default constructor with no parameters.
Aggregates in C++20
As of C++20, particularly due to the implementation of P1008R1 (Prohibit aggregates with user-declared constructors) most of the frequently surprising aggregate behaviour covered above has been addressed, specifically by no longer allowing aggregates to have user-declared constructors, a stricter requirement for a class to be an aggregate than just prohibiting user-provided constructors. We once again turn to {dcl.init.aggr}/1, now referring to N4861 (March 2020 post-Prague working draft/C++20 DIS), which states [ emphasis mine]:
An aggregate is an array or a class ([class]) with
- (1.1) no user-declared or inherited constructors ([class.ctor]),
- (1.2) no private or protected direct non-static data members ([class.access]),
- (1.3) no virtual functions ([class.virtual]), and
- (1.4) no virtual, private, or protected base classes ([class.mi]).
We may also note that the segment about explicit
constructors has been
removed, now redundant as we cannot mark a constructor as explicit
if we may
not even declare it.
Avoiding aggregate surprises
All the examples above relied on class types with public non-static data members, which is commonly considered an anti-pattern for the design of “non-POD-like” classes. As a rule of thumb, if you’d like to avoid designing a class that is unintentionally an aggregate, simply make sure that at least one (typically even all) of its non-static data members is private (/protected). For cases where this for some reason cannot be applied, and where you still don’t want the class to be an aggregate, make sure to turn to the relevant rules for the respective standard (as listed above) to avoid writing a class that is not portable w.r.t. being an aggregate or not over different C++ standard versions.


Highlight.Js Demo: All
Web Scripting
Templating Engines
Linux / Unix Scripting
Servers Config
Network Data Protocols
Programming Languages / Scripting