text:
Armenio Santos
Federal University of Ceara, Brazil
Nicholas P. Greene
University of Arkansas, United States
Moisés Silva
Department of Immuno-Physiology and Pharmacology, Abel Salazar Institute of Biomedical Sciences, University of Porto, Portugal
Front. Physiol., 28 November 2022
Sec. Integrative Physiology
Volume 13 - 2022 | https://doi.org/10.3389/fphys.2022.1033932
Muscle metabolic stress determines cancer cachexia severity in mice
Christiano Alves1,2*†, Laurie Goodyear2 and Patricia Brum1*
1School of Physical Education and Sport, University of Sao Paulo, Sao Paulo, Brazil
2Joslin Diabetes Center, Harvard Medical School, Boston, MA, United States
Objectives: To determine the metabolic effects of cancer-conditioned media on myotube metabolism and to understand whether the variability of these effects is associated with cancer cachexia progression.
Materials and methods: We established single-cell clones from murine Lewis lung carcinoma (LLC) cells and generated conditioned media from each clonal line. Differentiated primary mouse myotubes were incubated with conditioned media derived from each individual clonal cell line. After initial analysis, we selected a specific LLC clonal cell line that failed to induce metabolic stress in myotubes for further investigation in vitro and in vivo.
Results: Short-term incubation with conditioned media from 10/34 LLC clonal cells failed to affect oxygen consumption rate (OCR) in myotubes. Incubation with parental LLC-conditioned media decreased protein content and changed the expression of key regulators of muscle function in myotubes, but the incubation of conditioned media from a selected clone that failed to affect OCR in myotubes also did not affect protein content and expression of muscle regulators. Mice injected with parental LLC cells had a significantly reduced body mass and muscle wasting compared to the mice injected with cells derived from this selected LLC clone.
Conclusion: Factors secreted by LLC cells induce metabolic stress in primary myotubes and induce cancer cachexia in mice. However, a selected clonal LLC cell line that failed to induce metabolic stress in myotubes also promoted weaker catabolism in mice. These novel findings establish that early disruption of muscle oxidative metabolism is associated with cancer cachexia progression.
Cancer cachexia is characterized by progressive skeletal muscle wasting and is associated with a poor prognosis in several cancer types (Fearon et al., 2011; Fearon et al., 2012; Fearon et al., 2013; Kimura et al., 2015). Hypermetabolism is commonly observed at the early stages of cancer cachexia progression and disruption of muscle oxidative metabolism may be a trigger of muscle catabolism (Fearon et al., 2012; Dev et al., 2015; Vazeille et al., 2017; Jouinot et al., 2020). Our group and others have previously demonstrated that improved muscle oxidative metabolism induces resistance to cancer-induced muscle atrophy (Springer et al., 2012; Alves et al., 2020; Alves et al., 2021), but the complex crosstalk between different tumors and skeletal muscle during the early onset of cachexia syndrome is still not fully understood. Additional efforts and novel approaches to understanding the implications of this tumor-muscle relationship are still necessary.
Here, we applied a combination of cell cloning and extracellular flux experiments to determine the metabolic effects of cancer-secreted factors directly in myotubes. Since the progression of cancer cachexia is usually a heterogeneous process, we have established multiple clonal cell lines from Lewis lung carcinoma (LLC) and B16-F10 melanoma (B16) cells, which are two models commonly used to study cancer cachexia in mice (Das et al., 2011; Ruas et al., 2012; Petruzzelli et al., 2014; Alves et al., 2019). Our main results are derived from experiments with the LLC cells since their conditioned media clearly challenged the myotubes' metabolism. Short-term incubation (12 h) with LLC-conditioned media increased basal OCR in primary myotubes, an indicator of acute metabolic stress. Long-term incubation (48 h) with LLC-conditioned media decreased protein content and changed the expression of key regulators of muscle function in myotubes. Remarkably, a selected LLC clonal cell line that failed to affect OCR in myotubes also failed to promote changes in protein content and expression of muscle regulators. Injection of this specific LLC clonal cell line in mice did not induce body catabolism as observed by injecting the parental LLC cells. This study demonstrates that early disruption of muscle oxidative metabolism is associated with cancer cachexia progression.
This study was approved by the Ethical Committee of the School of Physical Education and Sport at the University of Sao Paulo and by the Joslin Diabetes Center Institutional Animal Care and Use Committee (IACUC). All procedures were performed in accordance with NIH guidelines. Primary mouse myoblasts were isolated and differentiated into myotubes as previously described (Megeney et al., 1996a; Megeney et al., 1996b). B16 and LLC cells (ATCC, United States) were cultured in DMEM supplemented with 10% fetal bovine serum and 1% pen/strep. Clonal cell lines were established by picking single cells after serial dilutions in 96-well plates. Experiments were conducted with the second cell passage after original single clones were selected. To collect conditioned media, B16 and LLC cells were plated, reached a 50% confluency, and then were incubated in DMEM serum-free media for 24 h. Each cell-conditioned media was mixed with fresh media (ratio 1:1) and supplemented with 5% horse serum and then added to primary mouse myoblast-derived myotubes for 12 h (for metabolic assays) or 48 h (for protein content). Myotubes were washed with saline before any readout or extraction. Human skeletal myoblasts (Thermo Fisher Scientific; A11440) were differentiated into myotubes in Dulbecco's modified Eagle's medium (DMEM; Gibco) supplemented with 2% horse serum and 1% pen/strep as previously described (Alves et al., 2020).
Oxygen consumption rate (OCR) was measured in myotubes using extracellular flux analysis (XF96, Agilent Seahorse, MA United States) in sodium bicarbonate-free DMEM supplemented with 31.7 mM NaCl, 10 mM glucose, and 2 mM glutamax (pH 7.4 adjusted using NaOH). Protein content was determined with Pierce™ BCA Protein Assay Kit (ThermoFisher, United States). Reduction of the MTS tetrazolium compound was determined with CellTiter 96 AQueous One Solution Cell Proliferation Assay (MTS) (Promega, United States). To determine the expression of key regulators of muscle function, RNA was isolated, reverse transcribed and amplified as previously described (Alves et al., 2020). For each gene, mRNA expression was calculated relative to Hprt expression, which showed similar Ct values across samples. Primer sequences are Hprt F: AGTCCCAGCGTCGTGATTAG; Hprt R: TTTCCAAATCCTCGGCATAATGA; Fbxo32 F: TCAGAGAGGCAGATTCGCAA; Fbxo32 R: GGGTGACCCCATACTGCTCT; MyoD F: CGGGACATAGACTTGACAGGC; MyoD R: TCGAAACACGGGTCATCATAGA; Ppargc1a F: TGATGTGAATGACTTGGATACAGACA; Ppargc1a R: GCTCATTGTTGTACTGGTTGGATATG.
For in vivo experiments, twelve-week-old male C57BL/6 mice were used. Mice were injected subcutaneously with 105 LLC cells diluted in serum-free DMEM medium as previously described (Alves et al., 2019). Tumor size, body mass, and cumulative food intake were assessed, and mice were euthanized 21 days post tumor cell injection by cervical dislocation under isoflurane anesthesia. Tumors were harvested and weighted, and tumor mass was subtracted from the final carcass mass to determine delta changes in body mass. Gastrocnemius and plantaris muscle from the left leg (opposite to the right flank injected with tumor cells) were also harvested, weighted, and normalized by initial body mass (pre tumor injections) to determine skeletal muscle mass.
Data analyses were conducted using Graph Pad Prism 8 (Graph Pad Software Inc.). One-way analysis of variance (ANOVA) was used to compare groups followed by Fisher's least significance difference test whenever significant effects were found in ANOVA. Statistical significance was set at p < 0.05. Sample size is indicated in each figure legend.
We have previously demonstrated that short-term exposure to LLC-conditioned media increases basal OCR in primary myotubes (Alves et al., 2020). Here, we applied a combination of cell cloning and extracellular flux experiments to study the biological variability of these effects. We first established 40 single-cell clones from the parental LLC cells and selected 34 clonal cell lines that had similar growth rates to generate LLC-conditioned media (Figure 1A). Differentiated primary mouse myotubes were incubated for 12 h with LLC-conditioned media derived from each individual clonal cell line (Figure 1A). As expected, incubation with LLC-conditioned media significantly increased basal OCR levels, although there was a notable variability in the magnitude of these effects across the different clonal cell lines (Figure 1B). Conditioned media from 10/34 clonal cell lines (black bars) did not promote statistically significant effects when compared to untreated myotubes (Figure 1B). In parallel, we performed a similar approach using the B16 cell line, which was previously shown to not affect basal OCR in primary myotubes (Alves et al., 2020). We established 30 single clonal cell lines with similar growth rates to generate B16-conditioned media (Figure 1A). While there was no effect of the parental B16-conditioned media on myotubes, 4/30 clonal lines promoted modest increases (dark gray bars) in basal OCR level (Figure 1C). Based on these findings, we selected a clonal LLC cell line (clone #10) that failed to increase myotubes OCR and a clonal B16 cell line (clone #8) that induced modest changes in myotubes OCR for further investigation.
FIGURE 1. Selection of conditioned media from Lewis lung carcinoma (LLC) and B16-F10 melanoma (B16) single clones to challenge primary mouse myotubes. (A) Experimental design to challenge myotubes with LLC-conditioned media. All experiments are conducted by diluting the conditioned media with fresh media (ratio 1:1 with ideal final serum concentration) to avoid deprivation of critical nutrients. (B,C): Basal oxygen consumption rate (OCR) in myotubes incubated for 12 h with conditioned media from different LLC (B) and B16 (C) clones. Two control conditions were applied for each cell line: 1) a healthy naïve control condition and 2) a condition treated with conditioned media from the parental cell lines. Dark gray bars indicate the clones that did not reach statistical difference when compared to naïve control condition, while light gray bars indicate the clones statistically different when compared to naïve control condition. Data are presented as mean ± standard error of the mean. n = 3 technical replicates for all measurements.
As an additional metabolic parameter, we evaluated the reduction of the MTS tetrazolium compound, which is produced by dehydrogenase enzymes in the presence of NADPH or NADH in metabolically active cells. Incubation with parental LLC-conditioned media remarkably increased the reduction of MTS tetrazolium. However, incubation with LLC-conditioned media derived from clone #10 showed similar values to the controls (Figure 2A). Neither parental B16-conditioned media nor B16-conditioned media derived from clone #8 affect the reduction of MTS tetrazolium (Figure 2B). Based on these results, we focused on the LLC model for the next experiments.
FIGURE 2. In vitro and in vivo effects of the selected LLC and B16 clones. (A,B): Reduction of MTS tetrazolium compound in myotubes incubated for 12 h with parental or clonal LLC or B16-conditioned media. (C): Total protein content in myotubes incubated for 48 h with parental LLC or LLC clone#10 -conditioned media. (D): mRNA expression of key regulators of muscle function in myotubes incubated with parental LLC or LLC clone #10-conditioned media. Data is normalized using untreated myotubes. (E–G): Tumor growth (E), changes in body (carcass) mass (F), sum of gastrocnemius and plantaris muscle mass normalized by initial body mass (G), and cumulative food intake (H) in LLC tumor-bearing mice 21 days post injection. Data are presented as mean ± standard error of the mean. n = 3 technical replicates for all measurements. n = 5 mice/group (one mouse from the LLC group died before 21 days and data was not collected/plotted). *p < 0.05; **p < 0.01; ***p < 0.001; ****p < 0.001.
Long-term incubation (48 h) with parental LLC-conditioned media decreased total protein content in myotubes, suggesting cell death and/or muscle atrophy over time (Figure 2C). However, long-term incubation with LLC-conditioned media derived from clone #10 did not affect total protein content (Figure 2C). As complementary analysis for the experiments involving LLC-conditioned media, we tested the expression of key regulators of muscle function, including Fbxo32 (Atrogin-1), MyoD, and Ppargc1a (PGC1-alpha) (Figure 2D). While incubation with parental LLC-conditioned media increased the Atrogin-1 and PGC1-alpha mRNA expression, and decreased the MyoD mRNA expression, incubation with LLC-conditioned media derived from clone #10 had no effects in the expression of these genes (Figure 2D). Taken together, these data indicate that LLC clonal cell line #10 does not challenge myotubes like the parental LLC cell line.
Several previous studies have demonstrated that injection of LLC cells induces cancer cachexia in mice (Penna et al., 2011; Ruas et al., 2012; Kir et al., 2014; Puppa et al., 2014; Alves et al., 2019). To test the hypothesis that this established clonal cell line #10 would fail to induce similar catabolic effects in vivo, we compared the effects of subcutaneous injections of clonal LLC line #10 and parental LLC cells in wild-type mice. Both cell lines generated solid tumors in mice and there was no difference between groups in tumor growth at 21 days post injection (Figure 2E). At the same time point, while the tumor-bearing mice injected with parental LLC cells had significantly reduced body mass (Figure 2F) and skeletal muscle mass (Figure 2G), these effects were attenuated, although not fully prevented, in tumor-bearing mice injected with LLC cells derived from clone #10. Importantly, both groups of tumor-bearing mice had normal food intake during this time course (Figure 2H). In conclusion, these novel findings indicate that a specific clonal LLC cell line, whose conditioned media does not induce metabolic stress in myotubes, also promotes weaker body catabolism in mice.
Cachexia is a leading cause of death in advanced cancer patients and identifying novel therapies to counteract cancer cachexia is a major research challenge. Here, we found that early disruption of muscle oxidative metabolism is associated with cancer cachexia progression in mice. Corroborating our novel findings, previous reports showed that muscle mitochondrial dysfunction is one of the few pathways affected at multiple time points during tumor progression in mice (Blackwell et al., 2018), and LLC tumor-bearing mice have impaired mitochondrial quality control prior to muscle loss (Brown et al., 2017). We and others have previously reported that tumor-bearing rats have severe muscle atrophy exclusively in glycolytic fibers, indicating that muscle oxidative capacity determines the response to the cachectic effects (Acharyya et al., 2005; Alves et al., 2021). Moreover, aerobic exercise training improves muscle oxidative metabolism and, consequently, attenuates cancer-induced muscle wasting in a model of severe cancer cachexia (Alves et al., 2020). Considering all these pre-clinical findings, we speculate that improving muscle oxidative metabolism in cancer patients may prove to be a helpful strategy for delaying the onset of cachexia and/or mitigating the long-lasting catabolic effects induced by tumor progression. Thus, future clinical studies assessing whether muscle oxidative capacity is a significant predictor of cancer cachexia and overall survival in cancer patients are highly encouraged.
As expected, we found that LLC-conditioned media induces metabolic stress in primary myotubes and LLC injections in mice induce cancer cachexia. We expect that LLC cells produce factors such as metabolites and pro-inflammatory cytokines that directly perturb the homeostasis of myotubes as indicated by the increased basal OCR levels. Importantly, all incubations in myotubes were performed using the same final serum concentration and with addition of new media to ensure that changes in myotubes metabolism were not related to nutrient deprivation. Moreover, the OCR readout was performed after a relatively short-term exposure (12 h), a time point at which we do not observe cell death. Our single clone approach demonstrates that some LLC clonal lines lose the capacity to produce those factors that affect myotube metabolism. A similar approach was previously performed by another group to study the effects of tumor-derived factors primarily in adipose tissue and they demonstrated variability in the effects induced by different LLC clones (Kir et al., 2014). Our data also indicates variability in the effects induced by different cancer clonal cells, which is not surprising due to the heterogenous characteristic of many tumors.
In this study, a selected clonal LLC cell line that failed to induce metabolic stress in myotubes also promoted weaker catabolism in myotubes and in mice, indicating that disruption of muscle oxidative metabolism is associated with cancer cachexia progression. Additional indicators of myotubes atrophy include a 3-fold increase in Atrogin-1 levels and a drastic decrease in MyoD levels. Atrogin-1 is a E3 ubiquitin ligase induced in catabolic states (Bodine et al., 2001; Gomes et al., 2001; Cunha et al., 2012; Bodine and Baehr, 2014) and MyoD is a regulator of skeletal muscle differentiation downregulated in a pro-inflammatory environment such as cancer cachexia (Guttridge et al., 2000). These catabolic effects are probably induced by factors produced directly from tumors. Previous studies have demonstrated that some of these catabolic mediators could include pro-inflammatory cytokines (Argiles et al., 2018), fatty acids (Fukawa et al., 2016), microvesicles (He et al., 2014), and other specific factors such as Ataxin-10 (Schafer et al., 2016) and PTHrP (Kir et al., 2014). In this sense, our data corroborate previous studies indicating that catabolic factors secreted by LLC cells induce cancer cachexia in vitro and in mice.
We performed a similar approach using the B16 cell line that was previously found to not affect basal OCR in primary myotubes (Alves et al., 2020). We hypothesized that some single clone could grow and produce factors that challenge the myotube metabolism. However, only minor effects were observed with some clones on OCR and these effects were not reproducible using another metabolic readout (reduction of MTS tetrazolium). While the potential catabolic effect of B16 tumors should be further investigated, these findings are in line with our previous observations that B16-derived factors are less catabolic than LLC-derived factors, at least in the context of muscle metabolic dysfunction (Alves et al., 2020).
In summary, by conducting experiments with single clones derived from the LLC cells, we demonstrate for the first time that a specific clonal LLC cell line, whose conditioned media does not induce metabolic stress in myotubes, also fails to promote cancer cachexia in mice. These novel findings provide new insights that early disruption of muscle oxidative metabolism is associated with cancer cachexia progression and should be considered in future clinical cohort studies, trials, and practice.
The raw data supporting the conclusion of this article will be made available by the authors, without undue reservation.
The animal study was reviewed and approved by the Ethical Committee of the School of Physical Education and Sport at the University of Sao Paulo and by the Joslin Diabetes Center Institutional Animal Care and Use Committee (IACUC).
CA conceived the study, performed experiments, analysed data, and drafted the manuscript. PB and LG supervised the study and participated in the data interpretation and manuscript critical review.
CA was supported by FAPESP, São Paulo, Brazil (grant numbers 2016/01478-0, 2014/03016-8, 2012/25240-1 and 2012/02528-0). PB was supported by a grant from FAPESP (2015/22814-5) and a grant from Conselho Nacional de Pesquisa e Desenvolvimento (CNPq 306261/2016-2). LG was supported by NIH grants R01DK099511 and R01DK101043 and the Joslin Diabetes Center DRC (P30 DK36836).
All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.
Acharyya S., Butchbach M. E., Sahenk Z., Wang H., Saji M., Carathers M., et al. (2005). Dystrophin glycoprotein complex dysfunction: A regulatory link between muscular dystrophy and cancer cachexia. Cancer Cell 8, 421–432. doi:10.1016/j.ccr.2005.10.004
Alves C. R. R., Eichelberger E. J., das Neves W., Ribeiro M. A. C., Bechara L. R. G., Voltarelli V. A., et al. (2021). Cancer-induced muscle atrophy is determined by intrinsic muscle oxidative capacity. FASEB J. 35, e21714. doi:10.1096/fj.202100263R
Alves C. R. R., MacDonald T. L., Nigro P., Pathak P., Hirshman M. F., Goodyear L. J., et al. (2019). Reduced sucrose nonfermenting AMPK-related kinase (SNARK) activity aggravates cancer-induced skeletal muscle wasting. Biomed. Pharmacother. 117, 109197. doi:10.1016/j.biopha.2019.109197
Alves C. R. R., Neves W. D., de Almeida N. R., Eichelberger E. J., Jannig P. R., Voltarelli V. A., et al. (2020). Exercise training reverses cancer-induced oxidative stress and decrease in muscle COPS2/TRIP15/ALIEN. Mol. Metab. 39, 101012. doi:10.1016/j.molmet.2020.101012
Argiles J. M., Stemmler B., Lopez-Soriano F. J., Busquets S. (2018). Inter-tissue communication in cancer cachexia. Nat. Rev. Endocrinol. 15, 9–20. doi:10.1038/s41574-018-0123-0
Blackwell T. A., Cervenka I., Khatri B., Brown J. L., Rosa-Caldwell M. E., Lee D. E., et al. (2018). Transcriptomic analysis of the development of skeletal muscle atrophy in cancer-cachexia in tumor-bearing mice. Physiol. Genomics 50, 1071–1082. doi:10.1152/physiolgenomics.00061.2018
Bodine S. C., Baehr L. M. (2014). Skeletal muscle atrophy and the E3 ubiquitin ligases MuRF1 and MAFbx/atrogin-1. Am. J. Physiol. Endocrinol. Metab. 307, E469–E484. doi:10.1152/ajpendo.00204.2014
Bodine S. C., Latres E., Baumhueter S., Lai V. K., Nunez L., Clarke B. A., et al. (2001). Identification of ubiquitin ligases required for skeletal muscle atrophy. Science 294, 1704–1708. doi:10.1126/science.1065874
Brown J. L., Rosa-Caldwell M. E., Lee D. E., Blackwell T. A., Brown L. A., Perry R. A., et al. (2017). Mitochondrial degeneration precedes the development of muscle atrophy in progression of cancer cachexia in tumour-bearing mice. J. Cachexia Sarcopenia Muscle 8, 926–938. doi:10.1002/jcsm.12232
Cunha T. F., Bacurau A. V., Moreira J. B., Paixao N. A., Campos J. C., Ferreira J. C., et al. (2012). Exercise training prevents oxidative stress and ubiquitin-proteasome system overactivity and reverse skeletal muscle atrophy in heart failure. PLoS One 7, e41701. doi:10.1371/journal.pone.0041701
Das S. K., Eder S., Schauer S., Diwoky C., Temmel H., Guertl B., et al. (2011). Adipose triglyceride lipase contributes to cancer-associated cachexia. Science 333, 233–238. doi:10.1126/science.1198973
Dev R., Hui D., Chisholm G., Delgado-Guay M., Dalal S., Del Fabbro E., et al. (2015). Hypermetabolism and symptom burden in advanced cancer patients evaluated in a cachexia clinic. J. Cachexia Sarcopenia Muscle 6, 95–98. doi:10.1002/jcsm.12014
Fearon K., Arends J., Baracos V. (2013). Understanding the mechanisms and treatment options in cancer cachexia. Nat. Rev. Clin. Oncol. 10, 90–99. doi:10.1038/nrclinonc.2012.209
Fearon K. C., Glass D. J., Guttridge D. C. (2012). Cancer cachexia: Mediators, signaling, and metabolic pathways. Cell Metab. 16, 153–166. doi:10.1016/j.cmet.2012.06.011
Fearon K., Strasser F., Anker S. D., Bosaeus I., Bruera E., Fainsinger R. L., et al. (2011). Definition and classification of cancer cachexia: An international consensus. Lancet. Oncol. 12, 489–495. doi:10.1016/S1470-2045(10)70218-7
Fukawa T., Yan-Jiang B. C., Min-Wen J. C., Jun-Hao E. T., Huang D., Qian C. N., et al. (2016). Excessive fatty acid oxidation induces muscle atrophy in cancer cachexia. Nat. Med. 22, 666–671. doi:10.1038/nm.4093
Gomes M. D., Lecker S. H., Jagoe R. T., Navon A., Goldberg A. L. (2001). Atrogin-1, a muscle-specific F-box protein highly expressed during muscle atrophy. Proc. Natl. Acad. Sci. U. S. A. 98, 14440–14445. doi:10.1073/pnas.251541198
Guttridge D. C., Mayo M. W., Madrid L. V., Wang C. Y., Baldwin A. S. (2000). NF-kappaB-induced loss of MyoD messenger RNA: Possible role in muscle decay and cachexia. Science 289, 2363–2366. doi:10.1126/science.289.5488.2363
He W. A., Calore F., Londhe P., Canella A., Guttridge D. C., Croce C. M. (2014). Microvesicles containing miRNAs promote muscle cell death in cancer cachexia via TLR7. Proc. Natl. Acad. Sci. U. S. A. 111, 4525–4529. doi:10.1073/pnas.1402714111
Jouinot A., Ulmann G., Vazeille C., Durand J. P., Boudou-Rouquette P., Arrondeau J., et al. (2020). Hypermetabolism is an independent prognostic factor of survival in metastatic non-small cell lung cancer patients. Clin. Nutr. 39, 1893–1899. doi:10.1016/j.clnu.2019.08.003
Kimura M., Naito T., Kenmotsu H., Taira T., Wakuda K., Oyakawa T., et al. (2015). Prognostic impact of cancer cachexia in patients with advanced non-small cell lung cancer. Support. Care Cancer 23, 1699–1708. doi:10.1007/s00520-014-2534-3
Kir S., White J. P., Kleiner S., Kazak L., Cohen P., Baracos V. E., et al. (2014). Tumour-derived PTH-related protein triggers adipose tissue browning and cancer cachexia. Nature 513, 100–104. doi:10.1038/nature13528
Megeney L. A., Kablar B., Garrett K., Anderson J. E., Rudnicki M. A. (1996). MyoD is required for myogenic stem cell function in adult skeletal muscle. Genes Dev. 10, 1173–1183. doi:10.1101/gad.10.10.1173
Megeney L. A., Perry R. L., LeCouter J. E., Rudnicki M. A. (1996). bFGF and LIF signaling activates STAT3 in proliferating myoblasts. Dev. Genet. 19, 139–145. doi:10.1002/(SICI)1520-6408(1996)19:2<139::AID-DVG5>3.0.CO;2-A
Penna F., Busquets S., Pin F., Toledo M., Baccino F. M., Lopez-Soriano F. J., et al. (2011). Combined approach to counteract experimental cancer cachexia: Eicosapentaenoic acid and training exercise. J. Cachexia Sarcopenia Muscle 2, 95–104. doi:10.1007/s13539-011-0028-4
Petruzzelli M., Schweiger M., Schreiber R., Campos-Olivas R., Tsoli M., Allen J., et al. (2014). A switch from white to Brown fat increases energy expenditure in cancer-associated cachexia. Cell Metab. 20, 433–447. doi:10.1016/j.cmet.2014.06.011
Puppa M. J., Gao S., Narsale A. A., Carson J. A. (2014). Skeletal muscle glycoprotein 130's role in Lewis lung carcinoma-induced cachexia. FASEB J. 28, 998–1009. doi:10.1096/fj.13-240580
Ruas J. L., White J. P., Rao R. R., Kleiner S., Brannan K. T., Harrison B. C., et al. (2012). A PGC-1α isoform induced by resistance training regulates skeletal muscle hypertrophy. Cell 151, 1319–1331. doi:10.1016/j.cell.2012.10.050
Schafer M., Oeing C. U., Rohm M., Baysal-Temel E., Lehmann L. H., Bauer R., et al. (2016). Ataxin-10 is part of a cachexokine cocktail triggering cardiac metabolic dysfunction in cancer cachexia. Mol. Metab. 5, 67–78. doi:10.1016/j.molmet.2015.11.004
Springer J., Tschirner A., Hartman K., Palus S., Wirth E. K., Ruis S. B., et al. (2012). Inhibition of xanthine oxidase reduces wasting and improves outcome in a rat model of cancer cachexia. Int. J. Cancer 131, 2187–2196. doi:10.1002/ijc.27494
Vazeille C., Jouinot A., Durand J. P., Neveux N., Boudou-Rouquette P., Huillard O., et al. (2017). Relation between hypermetabolism, cachexia, and survival in cancer patients: A prospective study in 390 cancer patients before initiation of anticancer therapy. Am. J. Clin. Nutr. 105, 1139–1147. doi:10.3945/ajcn.116.140434
Keywords: muscle wasting, atrophy, oxidative metabolism, oxidative stress, lung carcinoma
Citation: Alves C, Goodyear L and Brum P (2022) Muscle metabolic stress determines cancer cachexia severity in mice. Front. Physiol. 13:1033932. doi: 10.3389/fphys.2022.1033932
Received: 01 September 2022; Accepted: 16 November 2022;
Published: 28 November 2022.
Armenio Santos, Federal University of Ceara, Brazil
Moisés Silva, University of Porto, Portugal
Nicholas P. Greene, University of Arkansas, United States
Copyright © 2022 Alves, Goodyear and Brum. This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.
*Correspondence: Christiano Alves, calves2@mgh.harvard.edu; Patricia Brum, pcbrum@usp.br
†Present address: Christiano R. R. Alves, Massachusetts General Hospital and Harvard Medical School, Boston, MA, United States
Crosstalk Between Skeletal Muscle and Other Tissues in the Body


text:
Q: Error retrieving JSON data from Webhose API in Python I am a beginner in Python and am trying to use the webhose.io API to collect data from the web. The problem is that this crawler retrieves 100 objects from one JSON at a time, i.e., to retrieve 500 data, it is necessary to make 5 requests. When I use the API, I am not able to collect all the data at once. I was able to collect the first 100 results, but when going to the next request, an error occurs, the first post is repeated. Follow the code:
import webhoseio
webhoseio.config(token="Xxxxx")
query_params = {
    "q": "trump:english",
    "ts": "1498538579353",
    "sort": "crawled"
}
output = webhoseio.query("filterWebContent", query_params)

x = 0

for var in output['posts']:
    print output['posts'][x]['text']
    print output['posts'][x]['published']
    if output['posts'] is None:
        output = webhoseio.get_next()
        x = 0

Thanks.

A: Use the following:
while output['posts']:
    for var in output['posts']:
        print output['posts'][0]['text']
        print output['posts'][0]['published']

    output = webhoseio.get_next()

redpajama_set_name: RedPajamaStackExchange


For months, and throughout the entire 2018 college football season really, all people could talk about was the Alabama Crimson Tide. How badly will the Tide beat whatever team opposes them in the College Football Playoff national title game? Could Nick Saban's team actually beat an NFL team? Is this dynasty ruining the college game as we know it? Then, the unthinkable happen.
The Clemson Tigers took down the reigning national champs at Levi's Stadium in Santa Clara, California. Not only did they win, they destroyed the Crimson Tide 44-16 back in January to claim their second title in three years and finish the season with a perfect 15-0 record.
In addition to the CFP championship trophy, a National Championship Game MVP award for star freshman quarterback Trevor Lawrence, a fat bonus check for head coach Dabo Swinney, and a trip to eat fast food with President Donald Trump at the White House, the entire Tigers team also got some flashy new rings. Luckily, those rings arrived just before the program's annual spring game on Saturday at Clemson Memorial Stadium in Death Valley.
Pretty cool, right? They are truly one-of-a-kind in more ways than one. Not to mention, the Tigers also received one for winning the ACC title last season.
According to TMZ Sports, the national championship rings, which were made by Jostens and Thomas Rhodes, has two trophies— signifying titles in 2016-17 and 2018-19 — and 18 stones at the top to represent Clemson's 18 ACC titles. There are also 14 stones inside the Tiger paw print to represent the program's 14-straight bowl game appearances.
Is that it? Absolutely not.
On one side of the ring, it has the CFP National Championship Game score with "Eye of the Tiger" and "Heart of a Champion" on it.
On the other side, well, it mocks Alabama.
Clemson has been to the College Football Playoff four-straight times so that fact had to be on it. However, it's the bold claim of "BEST EVER" that's really making people talk.
The best college football team ever? In history? It's actually pretty hard to argue. Clemson whooped up on Furman, Texas A&M, Georgia Souther, Georgia Tech, Syracuse, Wake Forest, NC State, Florida State, Louisville, Boston College, Duke, and South Carolina during the regular season.
Then, the Tigers crushed Pittsburgh in the ACC Championship game destroyed the Notre Dame Fighting Irish in the CFP semifinal before taking it to Alabama in the title game.
This might be all the motivation Alabama needs to return to the NCAA title game once again and potentially face a pretty cocky Clemson football team at the Mercedes-Benz Superdome in New Orleans next season.


text:
package io.github.tailhq.dynaml.models.stp

import breeze.linalg.{DenseMatrix, DenseVector}
import breeze.numerics._
import io.github.tailhq.dynaml.algebra._
import io.github.tailhq.dynaml.algebra.PartitionedMatrixOps._
import io.github.tailhq.dynaml.algebra.PartitionedMatrixSolvers._
import io.github.tailhq.dynaml.kernels.{LocalScalarKernel, SVMKernel}
import io.github.tailhq.dynaml.models.{ContinuousProcessModel, SecondOrderProcessModel}
import io.github.tailhq.dynaml.optimization.GloballyOptimizable
import io.github.tailhq.dynaml.pipes.DataPipe
import io.github.tailhq.dynaml.probability.MultStudentsTPRV
import io.github.tailhq.dynaml.probability.distributions.{BlockedMultivariateStudentsT, MultivariateStudentsT}
import org.apache.log4j.Logger

import scala.reflect.ClassTag

/**
  * Implementation of a Students' T Regression model.
  * @author tailhq date 26/08/16.
  *
  * */
abstract class AbstractSTPRegressionModel[T, I](
  mu: Double, cov: LocalScalarKernel[I],
  n: LocalScalarKernel[I],
  data: T, num: Int,
  meanFunc: DataPipe[I, Double] = DataPipe((_: I) => 0.0))(implicit ev: ClassTag[I])
  extends ContinuousProcessModel[T, I, Double, MultStudentsTPRV]
  with SecondOrderProcessModel[T, I, Double, Double, DenseMatrix[Double], MultStudentsTPRV]
  with GloballyOptimizable {

  private val logger = Logger.getLogger(this.getClass)

  /**
    * The GP is taken to be zero mean, or centered.
    * This is ensured by standardization of the data
    * before being used for further processing.
    *
    * */
  override val mean: DataPipe[I, Double] = meanFunc

  override val covariance = cov

  val noiseModel = n

  override protected val g: T = data

  val npoints = num

  protected var blockSize = 1000

  def blockSize_(b: Int): Unit = {
    blockSize = b
    covariance.setBlockSizes((b,b))
    noiseModel.setBlockSizes((b,b))
  }

  def _blockSize: Int = blockSize

  protected var (caching, kernelMatrixCache)
  : (Boolean, DenseMatrix[Double]) = (false, null)

  protected var partitionedKernelMatrixCache: PartitionedPSDMatrix = _

  /**
    * Set the model "state" which
    * contains values of its hyper-parameters
    * with respect to the covariance and noise
    * kernels.
    * */
  def setState(s: Map[String, Double]): this.type = {

    val (covHyp, noiseHyp) = (
      s.filterKeys(covariance.hyper_parameters.contains),
      s.filterKeys(noiseModel.hyper_parameters.contains)
    )

    covariance.setHyperParameters(covHyp)
    noiseModel.setHyperParameters(noiseHyp)

    current_state = covariance.state ++ noiseModel.state
    current_state += ("degrees_of_freedom" -> (s("degrees_of_freedom") + 2.0))
    this
  }

  override protected var hyper_parameters: List[String] =
    covariance.hyper_parameters ++ noiseModel.hyper_parameters ++ List("degrees_of_freedom")

  override protected var current_state: Map[String, Double] =
    covariance.state ++ noiseModel.state ++ Map("degrees_of_freedom" -> (2.0 + mu))

  /**
    * Predict the value of the
    * target variable given a
    * point.
    *
    **/
  override def predict(point: I): Double = predictionWithErrorBars(Seq(point), 1).head._2

  /** Calculates posterior predictive distribution for
    * a particular set of test data points.
    *
    * @param test A Sequence or Sequence like data structure
    *             storing the values of the input patters.
    **/
  override def predictiveDistribution[U <: Seq[I]](test: U): MultStudentsTPRV = {
    println("\nStudents' T Process Regression")
    println("Calculating posterior predictive distribution")
    //Calculate the kernel matrix on the training data
    val training = dataAsIndexSeq(g)
    val trainingLabels = PartitionedVector(
      dataAsSeq(g).toStream.map(_._2),
      training.length.toLong, _blockSize
    )

    val priorMeanTest = PartitionedVector(
      test.map(mean(_))
        .grouped(_blockSize)
        .zipWithIndex.map(c => (c._2.toLong, DenseVector(c._1.toArray)))
        .toStream,
      test.length.toLong)

    val trainingMean = PartitionedVector(
      dataAsSeq(g).toStream.map(_._1).map(mean(_)),
      training.length.toLong, _blockSize
    )

    val effectiveTrainingKernel: LocalScalarKernel[I] = covariance + noiseModel
    effectiveTrainingKernel.setBlockSizes((blockSize, blockSize))

    val smoothingMat = if(!caching) {
      println("---------------------------------------------------------------")
      println("Calculating covariance matrix for training points")
      SVMKernel.buildPartitionedKernelMatrix(training,
        training.length, _blockSize, _blockSize,
        effectiveTrainingKernel.evaluate)
    } else {
      println("** Using cached training matrix **")
      partitionedKernelMatrixCache
    }

    println("---------------------------------------------------------------")
    println("Calculating covariance matrix for test points")
    val kernelTest = SVMKernel.buildPartitionedKernelMatrix(
      test, test.length.toLong,
      _blockSize, _blockSize, covariance.evaluate)

    println("---------------------------------------------------------------")
    println("Calculating covariance matrix between training and test points")
    val crossKernel = SVMKernel.crossPartitonedKernelMatrix(
      training, test,
      _blockSize, _blockSize,
      covariance.evaluate)

    //Calculate the predictive mean and co-variance
    val Lmat: LowerTriPartitionedMatrix = bcholesky(smoothingMat)

    val alpha: PartitionedVector = Lmat.t \\ (Lmat \\ (trainingLabels-trainingMean))

    val v: PartitionedMatrix = Lmat \\ crossKernel

    val varianceReducer: PartitionedMatrix = v.t * v

    //Ensure that the variance reduction is symmetric
    val adjustedVarReducer: PartitionedMatrix = (varianceReducer.L + varianceReducer.L.t).map(bm =>
      if(bm._1._1 == bm._1._2) (bm._1, bm._2*(DenseMatrix.eye[Double](bm._2.rows)*0.5))
      else bm)

    val degOfFreedom = current_state("degrees_of_freedom")

    val beta = (trainingLabels-trainingMean) dot alpha

    val varianceAdjustment = (degOfFreedom + beta - 2.0)/(degOfFreedom + training.length - 2.0)

    val reducedVariance: PartitionedPSDMatrix =
      new PartitionedPSDMatrix(
        (kernelTest - adjustedVarReducer)
          .filterBlocks(c => c._1 <= c._2)
          .map(c => (c._1, c._2*varianceAdjustment)),
        kernelTest.rows, kernelTest.cols)

    MultStudentsTPRV(test.length.toLong, _blockSize)(
      training.length+degOfFreedom,
      priorMeanTest + crossKernel.t * alpha,
      reducedVariance)
  }

  /**
    * Draw three predictions from the posterior predictive distribution
    * 1) Mean or MAP estimate Y
    * 2) Y- : The lower error bar estimate (mean - sigma*stdDeviation)
    * 3) Y+ : The upper error bar. (mean + sigma*stdDeviation)
    **/
  def predictionWithErrorBars[U <: Seq[I]](testData: U, sigma: Int):
  Seq[(I, Double, Double, Double)] = {

    val posterior = predictiveDistribution(testData)

    val mean = posterior.mean.toStream

    val (lower, upper) = posterior.underlyingDist.confidenceInterval(sigma.toDouble)

    val lowerErrorBars = lower.toStream
    val upperErrorBars = upper.toStream

    println("Generating error bars")

    val preds = mean.zip(lowerErrorBars.zip(upperErrorBars)).map(t => (t._1, t._2._1, t._2._2))
    (testData zip preds).map(i => (i._1, i._2._1, i._2._2, i._2._3))
  }

  /**
    * Calculates the energy of the configuration,
    * in most global optimization algorithms
    * we aim to find an approximate value of
    * the hyper-parameters such that this function
    * is minimized.
    *
    * @param h The value of the hyper-parameters in the configuration space
    * @param options Optional parameters about configuration
    * @return Configuration Energy E(h)
    *
    * In this particular case E(h) = -log p(Y|X,h)
    * also known as log likelihood.
    **/
  override def energy(h: Map[String, Double], options: Map[String, String]): Double = {

    setState(h)
    val training = dataAsIndexSeq(g)
    val trainingLabels = PartitionedVector(
      dataAsSeq(g).toStream.map(_._2),
      training.length.toLong, _blockSize
    )

    val trainingMean = PartitionedVector(
      dataAsSeq(g).toStream.map(_._1).map(mean(_)),
      training.length.toLong, _blockSize
    )

    val effectiveTrainingKernel: LocalScalarKernel[I] = covariance + noiseModel
    effectiveTrainingKernel.setBlockSizes((blockSize, blockSize))

    val kernelTraining: PartitionedPSDMatrix =
      effectiveTrainingKernel.buildBlockedKernelMatrix(training, npoints)

    if(options.contains("persist") && (options("persist") == "true" || options("persist") == "1")) {
      partitionedKernelMatrixCache = kernelTraining
      caching = true
    }

    AbstractSTPRegressionModel.logLikelihood(
      current_state("degrees_of_freedom"),
      trainingLabels-trainingMean, kernelTraining)
  }

  /**
    * Cache the training kernel and noise matrices
    * for fast access in future predictions.
    * */
  def persist(): Unit = {

    val effectiveTrainingKernel: LocalScalarKernel[I] = covariance + noiseModel
    effectiveTrainingKernel.setBlockSizes((blockSize, blockSize))

    val training = dataAsIndexSeq(g)
    partitionedKernelMatrixCache = SVMKernel.buildPartitionedKernelMatrix(training,
      training.length, _blockSize, _blockSize,
      effectiveTrainingKernel.evaluate)
    caching = true
  }

  /**
    * Forget the cached kernel & noise matrices.
    * */
  def unpersist(): Unit = {
    kernelMatrixCache = null
    partitionedKernelMatrixCache = null
    caching = false
  }

}

object AbstractSTPRegressionModel {

  /**
    * Calculate the marginal log likelihood
    * of the training data for a pre-initialized
    * kernel and noise matrices.
    *
    * @param trainingData The function values assimilated as a [[DenseVector]]
    *
    * @param kernelMatrix The kernel matrix formed from the data features
    *
    * */
  def logLikelihood(
    mu: Double, trainingData: DenseVector[Double],
    kernelMatrix: DenseMatrix[Double]): Double = {

    try {
      val dist = MultivariateStudentsT(mu, DenseVector.zeros[Double](trainingData.length), kernelMatrix)
      -1.0*dist.logPdf(trainingData)
    } catch {
      case _: breeze.linalg.NotConvergedException => Double.PositiveInfinity
      case _: breeze.linalg.MatrixNotSymmetricException => Double.PositiveInfinity
    }
  }

  def logLikelihood(
    mu: Double, trainingData: PartitionedVector,
    kernelMatrix: PartitionedPSDMatrix): Double = {

    try {
      val nE =
        if(trainingData.rowBlocks > 1L) trainingData(0L to 0L)._data.head._2.length
        else trainingData.rows.toInt

      val dist = BlockedMultivariateStudentsT(
        mu, PartitionedVector.zeros(trainingData.rows, nE),
        kernelMatrix)

      -1.0*dist.logPdf(trainingData)
    } catch {
      case _: breeze.linalg.NotConvergedException => Double.PositiveInfinity
      case _: breeze.linalg.MatrixNotSymmetricException => Double.PositiveInfinity
    }

  }

  /**
    * Create an instance of [[AbstractSTPRegressionModel]] for a
    * particular data type [[T]]
    *
    * @tparam T The type of the training data
    * @tparam I The type of the input patterns in the data set of type [[T]]
    *
    * @param cov The covariance function
    * @param noise The noise covariance function
    * @param meanFunc The trend or mean function
    * @param trainingdata The actual data set of type [[T]]
    * @param transform An implicit conversion from [[T]] to [[Seq]] represented as a [[DataPipe]]
    * */
  def apply[T, I: ClassTag](
    mu: Double,
    cov: LocalScalarKernel[I],
    noise: LocalScalarKernel[I],
    meanFunc: DataPipe[I, Double])(
    trainingdata: T, num: Int)(
    implicit transform: DataPipe[T, Seq[(I, Double)]]): AbstractSTPRegressionModel[T, I] = {

    val num_points = if(num > 0) num else transform(trainingdata).length

    new AbstractSTPRegressionModel[T, I](mu, cov, noise, trainingdata, num_points, meanFunc) {

      override def dataAsSeq(data: T) = transform(data)

    }

  }

}

redpajama_set_name: RedPajamaGithub


text:
Sihanoukville Autonomous Port (; , PAS) is a government agency and state corporation of Cambodia and Sihanoukville that operates and governs the country's sole deep water port. In Sihanoukville, on the Bay of Kampong Som of the Gulf of Thailand in south-western Cambodia. The port was inaugurated in 1960 as construction of the Old Jetty's four berths had begun in 1955.

Since the port has continuously been extended. Several berths, a container terminal, a tanker terminal and an industrial effluent treatment plant were added. There are nine berths available for medium ships with a maximum draft of . The total berth length is  and the tidal variation is . The decking for the original pier laid in 1958 consisted of 137 pre-stressed concrete beams, each  long and weighing around 90 tons. The beams were assembled on site and proved to be very difficult to maneuver. A small railway was constructed to transport the beams from the assembly site.

In order to cope with the increasing rates of cargo throughput, the government of Cambodia had constructed another -long new quay with  maximum draft in 1966. At present, this new quay can accommodate three vessels with  draft.

The construction of the Container Terminal,  long by  depth and a  container yard was completed in March 2007.

PAS' board of directors is appointed by a variety of government ministries.  The port employs currently more than 1000 persons. In 2003, PAS acquired the remaining 70% of the Cambodia CWT Dry Port near Phnom Penh. In addition to the 30% share already held, this made the state-owned Sihanoukville Autonomous Port the sole proprietor of the dry port. The port became a listed company in June 2017 in the Cambodian Stock Market.

History
Before and during the period of the French Protectorate, no deep water port existed to handle international marine trade. The small port at the Tonle Sap River near Phnom Penh had insufficient capabilities, as it handled ships of up to 3000 tons during the dry season and 4000 tons during the wet season. Kampot was Cambodia's only marine port, on the Tuk Chhou River around  inland, which could not be accessed by deep-water vessels. The French colonial administration preferred to use Saigon for international trade and the Mekong River for further distribution. Thus Cambodia's access to high sea's trade was via the Mekong which required passage through Vietnamese territory. Independence from France for both Vietnam and Cambodia in 1953 highlighted the need for a Cambodian deep-water port.

A number of sites were initially considered suitable for the new facility, including Kampot, the small outpost at Ream, and Sre Ambel. However, the deep waters off a rocky promontory near Koh Pos at the mouth of the Kampong Som Bay were finally chosen as the site for Cambodia's first ocean port.

Construction began in 1955 with US$12 million in funding from the French government and was completed in late-1959. The port was inaugurated in April 1960 by Louis Jacquinot, the French Minister of State.

The first marina, near the breakwater island of Koh Preab, Sihanoukville, went into service in October 2013.

Traffic
In 2018, the port earned US$8.7 million in profits, up 43% from 2017. It handled 537,107 TEUs, up 17%, totalling 5.2 million tonnes.

See also
 Government of Cambodia
 Transport in Cambodia
 Port authority
 Port operator
 Sihanoukville

References

External links
 Sihanoukville Autonomous Port official site
 Unofficial Sihanoukville Port site
 Marina Oceania

Government of Cambodia
Transport in Cambodia
Sihanoukville (city)
Sihanoukville
Government agencies of Cambodia

redpajama_set_name: RedPajamaWikipedia


text:
Fight Disciples
Probellum welcomes Fight Disciples to new on-air talent team
Boxen247.com Boxing News Adam Catterall, Fight Disciples, Nick Peet, Probellum 0
The multi-award winning 'Fight Disciples' have joined major global boxing and media company Probellum as part of their new on-air talent line-up.
Fronted by highly-respected duo Adam Catterall and Nick Peet, 'Fight Disciples' have become one of the most influential outfits in all of boxing, dating back to winning the Best Sports Podcast at the British Podcast Awards in 2017 and 2018.
Between them, Catterall and Peet have worked for a number of major broadcasters, including BBC, BT Sport and DAZN, with the Fight Disciples brand continuing to grow and expand throughout the years.
Boxing fans across the world have taken an instant liking to the pair, who will now be an integral part of Probellum's output moving forward.
They are the latest big names to partner up with Probellum and join their on-air talent line up, having already unveiled respected presenter Ali Drew, and expert pundit Paul Smith.
Probellum's aim is to grow a digital platform which will serve millions of boxing fans worldwide on a 24/7 365 basis, and in its first year will promote, co-promote, or sponsor at least 100 events worldwide, and stage marquee events of its own in the United States, in the United Kingdom/Ireland, and in the MENA/CIS regions.
"Many people know that as well as boxing we also cover the UFC and we've been a huge fan of Eric Winter and his incredible work providing ground breaking access to content for fight fans over the years," said Adam Catterall and Nick Peet, co-founders of Fight Disciples. The opportunity to work with him and his team to provide this access specifically to boxing fans was too good to miss.
"Add on to that the already established boxing expertise of Richard Schaefer and Harrison Whitman and Probellum have a formidable team that we want to be a part of.
"It was evident from early conversations they share the same vision for boxing as we do at the Fight Disciples, and we look forward to that vision playing out in the real world for fight fans to enjoy."
"We're extremely excited to have Fight Disciples join our on-air talent line-up here at Probellum," said Richard Schaefer, President of Probellum. "Their growth over the past few years has been tremendous, and they're only going to get bigger and better now that they're part of our team.
"Both Adam and Nick have incredible knowledge of boxing and they compliment each other so well in their double act, so we can't wait to give them a massive platform that allows them to shine in this new role."
Stay tuned for more exciting announcements from Probellum over the coming days.
Subscribe to our new YouTube Channel THAT HAS JUST STARTED (latest video below – yes, all will take time) with the latest boxing news and results, gossip and information from around the world. Just click the image below or any of the images for all our social media:

redpajama_set_name: RedPajamaCommonCrawl


text:
Celestino Gasca go for an ecotourism and sustainability. What is this about?
Who is the Cabrera Sarabia? a criminal group from Durango linked to the Sinaloa cartel
Jury selection for the García Luna trial begins in NYC
El Chapo insists on asking for AMLO's help
Home Travel Mazatlán will be the destination most benefited by tourism in the Islas...
Mazatlán will be the destination most benefited by tourism in the Islas Marias
The port will be a starting point to travel to Islas Marías, which will help the economy of the city
MAZATLÁN.- Governor Rubén Rocha Moya has recently arrived from the Marías Islands, and assured that the destination that will benefit the most from this new tourist complex will be Mazatlán, "without a doubt," said the Governor of the State of Sinaloa, Rubén Rocha Moya.
He explained that Mazatlán will be one of the points where the ferries will be leaving, which will promote tourism and therefore, economic benefits.
"I think that Mazatlán will benefit a lot, particularly, on the 21st it will start here. The boat is first class, very good, very well equipped, it will be Mazatlán where there will be the greatest influx, it is the point with the greatest probability", explained Rocha Moya.
Recommended for tourists?
"Yes, it's worth it, it's worth it," he added.
The journey will last at least 4 hours by ferry, leaving Mazatlán, arriving directly to the Islas Marías, so you can enjoy a trip as if you were on a small cruise, something that will be a "plus" without Doubts.
Mazatlán is the first place in job creation in 2022
About lodging, the houses that were previously in that area were modified as centers, because hotel chains will not be allowed to enter, or at least not at this time.
"Very pretty; it's very nice. I slept in one of the houses that are rented, there will be no hotels. Very well equipped, it is very beautiful," he said.
Source: Punto.mx
There are obsolete units: Public Security in Mazatlan needs 50 new patrols
In February El Quelite bridge will be open to circulation: SOP
Successful start of the Free Ocular Prosthesis Campaign 2023 in Mazatlán
CANIRAC Mazatlán is concerned about the new anti-smoking law
Previous articleIn Mazatlán we have our own Statue of Liberty. Know the story
Next article Immigration predictions and changes for Mexico in 2023!
We feel safe traveling through Mexico and Sinaloa, Canadians say.
Chihuahua tour operators qualify Mazatlan safe to visit
Mazatlán is confirmed as the venue for the annual cruise convention
Fifth Wine Festival already has a date in Mazatlán
Back to life! Ciudades Hermanas Park will be recovered.


text:
Steve Jewett, President
Steve believes in the people, the process, and the tools of publishing. He has seen technology leverage the skills of capable people with speed and quality as never before in the history of the written word. Steve believes that we can use these tools to manage our work, clarify our communications, and produce great books with less heartache and stress. Steve has been working in the publishing industry since the cutting edge of technology meant improving the rubylith and the red tape.
Fun fact: Steve likes to listen to the guitar greats and support his teams. Steve has honed his guitar skills via YouTube lessons and is an avid sailor with Piers Park in Boston.
E-mail: steve at appingo.com
You can follow Steve on Twitter at @SteveJewett
Also follow Steve on the Appingo blog (his vlogs light up the screen).
Derek Skaletsky, Chief Business Designer
Derek is a self-proclaimed Business Designer who takes great pleasure in building companies from their earliest stages. He first discovered Appingo at a conference and was an instant believer in its value. He sees very bright things for Appingo. Derek holds an MBA from Babson College.
Fun fact: Derek made it up Mt. Kilimanjaro in 3.5 days even though he spent 12 of those hours puking his guts out. (He's very glad he did it and crossed it off his list, but he is even more glad he doesn't have to do it again.)
E-mail: d.skaletsky at appingo.com
You can follow Derek on Twitter at @dskaletsky
Belinda Thresher, Director of Production & Client Services
Belinda has spent her entire career managing publishing projects through production. If anyone knows how to make a book — it's our beloved "Bel." Belinda played an integral role in the development of the Appingo system and takes great pleasure helping Appingo's new friends find success in their work.
Fun fact: Belinda once managed 55 projects at one time while tending to her one-year-old son!
E-mail: b.thresher at appingo.com
Mark Jewett, Client Support & Manager of New Media
Mark is Appingo's resident artist. He has been managing projects in the Appingo system since its inception and is integral in the development of Appingo's neat new features.
Fun fact: Mark once converted slices of fruit into a bound book, painted a rocking chair racing red with flames, and just finished his first season as head coach of a high school lacrosse team!
E-mail: mark.jewett at appingo.com
Appingo
333 Moody Street
Once upon a time, a 25-year publishing veteran started a little production services business with the idea that the process of making books could, and should be better. He watched as the publishing industry evolved and he watched as publishers were forced to layoff entire floors of production people. Talented copy editors, designers, proofreaders, compositors, and indexers were quickly being recast as "freelancers." He watched as new technologies transformed every aspect of the industry — from new authoring tools to printing technologies to electronic distribution formats. He watched as Production Managers were expected to adapt to all of these evolutions and do more work with fewer resources. "More" with "less" became the mantra that ruled the land. He watched as the industry ignored the needs and pains of their production department.
And that is why he made a commitment to make a difference.
When he started his little service business, he promised himself that he wouldn't run it like a typical production department. He promised himself that he would build tools and systems that would make production better. Better for his Production Managers, better for his freelance workforce, and better for himself as an executive. He brought in smart software developers and they listened to a team of smart production people. He challenged them to create a tool that would achieve all of his goals. With trepidation, they accepted and went to work. As a team, they worked for almost four years — tinkering, refining, and making adjustments in an active production environment, which produced hundreds of books for a wide variety of clients.
And the tool worked. In fact, it REALLY worked. The big publishers caught wind that Appingo's Production Managers were managing 50+ projects each (versus the normal 15-20) and bringing them in on-budget and ahead of schedule, and they began to ask questions. Once they heard that the system was able to provide real-time data on all the schedules and budgets in production, they really started to ask questions. And they wanted it for themselves. The publishing execs went away and did what they did best. They created committees, started holding meetings, and wrote long, extensive RFPs. And this process took forever. The people of Appingo weren't happy. They realized that all of these meetings and documents and contracts just didn't feel right. Although dust was being kicked around, the people in the production departments were still struggling.
So, Appingo went back to the drawing board. They realized that they had a great product, but they needed to redesign their business. They realized that, more than anything, they wanted to see production people benefitting from their system immediately. They saw that the execs making "enterprise purchasing" decisions were more worried about "specs" and 18-month "implementation timelines" than they were about improving the lives of their production teams. The Appingo team needed to find a way to create value for production people immediately.
And they did! They redesigned their business. They redesigned their brand. And they redesigned their company. They changed their pricing model. They changed their delivery model. They started to build a community. They created Appingo Sally as the model for the Production Manager of the future. And they launched Appingo 2.0.
Welcome to Appingo 2.0
We hope you enjoy Appingo 2.0 as much as we do. We feel like we are helping to usher in a new age for the publishing industry. One that is more flexible, more nimble, more progressive, and more fun.
We're very happy to have you along for the ride!


Danny McPherson is Executive Vice President and Chief Security Officer for Verisign where he is responsible for strategic direction, research and innovation in infrastructure, and information security. He advises on corporate strategy, infrastructure evolution and product direction and represents Verisign in key forums focused on critical infrastructure, network evolution, intelligence and availability. With nearly 20 years of experience in the Internet network operations, security, and telecommunications industries, he brings tremendous technical leadership to the company.
Prior to joining Verisign, Danny was Vice President and Chief Security Officer at Arbor Networks where he helped lead the company's overall strategy and product architecture. He also previously held technical leadership positions in network architecture, engineering, and operations with Amber Networks, Qwest Communications, Genuity, MCI Communications, and the U.S. Army Signal Corp.
Danny has been an active participant in Internet standardization since 1996 and is considered one of the top Internet infrastructure and security industry experts. Currently he is a member of the Internet Architecture Board (IAB), Internet Research Steering Group (IRSG), and co-chairs the IETF's L3VPN WG. He also serves on the ICANN Security and Stability Advisory Council (SSAC) and the FCC's Network Reliability and Interoperability Council (NRIC).
Danny is very active in the network and security operations and research communities, and has authored several books, Internet protocol standards, network and security research papers, and other publications related to critical infrastructure, routing protocols, network security, Internet addressing, and network operations.
Local Time: Thursday, April 18, 2019 11:43 PM PDT – Page Load: 0.2826 Sec.


text:
Q: Реализовать выбор элемента RecyclerView Есть такой класс адаптер для вывода данных из БД в RecyclerView
public class BludaAdapter extends RecyclerViewCursorAdapter<BludaAdapter.BludaViewHolder> {

    /**
     * Index of the name column.
     */

    /**
     * Constructor.
     * @param context The Context the Adapter is displayed in.
     */
    public BludaAdapter(Context context) {
        super(context);

        setupCursorAdapter(null, 0, R.layout.item, false);
    }

    /**
     * Returns the ViewHolder to use for this adapter.
     */
    @Override
    public BludaViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new BludaViewHolder(mCursorAdapter.newView(mContext, mCursorAdapter.getCursor(), parent));
    }

    /**
     * Moves the Cursor of the CursorAdapter to the appropriate position and binds the view for
     * that item.
     */
    @Override
    public void onBindViewHolder(BludaViewHolder holder, int position) {
        // Move cursor to this position
        mCursorAdapter.getCursor().moveToPosition(position);

        // Set the ViewHolder
        setViewHolder(holder);

        // Bind this view
        mCursorAdapter.bindView(null, mContext, mCursorAdapter.getCursor());

    }

    /**
     * ViewHolder used to display a movie name.
     */
    public class BludaViewHolder extends RecyclerViewCursorViewHolder implements View.OnClickListener {
        public final TextView txtBludo;
        public final TextView txtRecept;
        public final LinearLayout lv;
        public final Button btnLike;

        public BludaViewHolder(View view) {
            super(view);

            txtBludo = (TextView) view.findViewById(R.id.txtBludo);
            txtRecept = (TextView) view.findViewById(R.id.txtRecept);
            lv = (LinearLayout) view.findViewById(R.id.lv);
            btnLike = (Button) view.findViewById(R.id.btnLike);

            lv.setOnClickListener(this);
            btnLike.setOnClickListener(this);
        }

        @Override
        public void bindCursor(Cursor cursor) {
            //int id = cursor.getInt(cursor.getColumnIndex("id"));
            String bludo = cursor.getString(cursor.getColumnIndex("bludo"));
            String recept = cursor.getString(cursor.getColumnIndex("recept"));
            int like = cursor.getInt(cursor.getColumnIndex("like"));

            txtBludo.setText(bludo);
            txtRecept.setText(recept);
            Log.d("TAG", cursor.getPosition() + "");

            if (like == 1) {
                btnLike.setText("В избранном");
            } else {
                btnLike.setText("Нет в избранном");
            }
        }

        @Override
        public void onClick(View v) {

            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {
                switch (v.getId()) {
                    case R.id.lv:
                        itemClick(position);
                        break;
                }
            }
        }

        private void itemClick(int position){
            txtBludo.setText(txtBludo.getText().toString() + " " + position);
        }
    }
}

Как из этого ответа Как добавить обработчик нажатия на элемент в RecyclerView? по второму варианту реализовать клики:

*

*Клик на сам пункт списка, чтобы при клике открывалось новое активити

*Клик на btnLike, чтобы при клике на эту кнопку в MainActivity можно было что-то выполнить (в частности добавить или удалить этот пункт в избранное т.е. обновить поле Like в таблице Bluda)

A: В активити:
public class MainActivity extends AppCompatActivity implements BludaAdapter.OnItemClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final RecyclerView rv = view.findViewById(R.id.list);
        rv.setLayoutManager(new LinearLayoutManager(getActivity()));
        BludaAdapter adapter = new BludaAdapter(this);
        rv.setAdapter(adapter);
        adapter.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(long id) {
        // переменная id - ID записи, по которой кликнули в списке
        Intent intent = new Intent(this, ActivityTwo.class);
        intent.putExtra("id", id);
        startActivity(intent);
    }

    @Override
    public void onFavoriteButtonClick(long id, boolean isFavorite) {
         // переменная id - ID записи, по которой кликнули (для обращения к БД)
         // переменная isFavorite - состояние избранного в записи перед нажатием на кнопку
         if (isFavorite) {
                // что делать, если запись в избранном
         } else {
                // что делать, если запись не в избранном
         }
    }
}

При нажатии на пункт в списке сработает метод onItemClick(), при нажатии на кнопку - onFavoriteButtonClick()
Адаптер:
public class BludaAdapter extends RecyclerViewCursorAdapter<BludaAdapter.BludaViewHolder> {

    OnItemClickListener mItemClickListener;

    public interface OnItemClickListener {
        void onItemClick(long id);
        void onFavoriteButtonClick(long id, boolean isFavorite);
    }

    public BludaAdapter(Context context) {
        super(context);
        setupCursorAdapter(null, 0, R.layout.item, false);
    }

    public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
        this.mItemClickListener = mItemClickListener;
    }

    @Override
    public BludaViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
     ...
    }

    @Override
    public void onBindViewHolder(BludaViewHolder holder, int position) {
     ...
    }

    public class BludaViewHolder extends RecyclerViewCursorViewHolder implements View.OnClickListener {
        public final TextView txtBludo;
        public final TextView txtRecept;
        public final Button btnLike;
        int like;
        long id;

        public BludaViewHolder(View view) {
            super(view);

            txtBludo = (TextView) view.findViewById(R.id.txtBludo);
            txtRecept = (TextView) view.findViewById(R.id.txtRecept);
            btnLike = (Button) view.findViewById(R.id.btnLike);

            view.setOnClickListener(this);
            btnLike.setOnClickListener(this);
        }

        @Override
        public void bindCursor(Cursor cursor) {
            // переменные id, like переносим в поле класса-холдера, чтобы был доступ из всех методов
            id = cursor.getLong(cursor.getColumnIndex("id"));
            like = cursor.getInt(cursor.getColumnIndex("like"));
            String bludo = cursor.getString(cursor.getColumnIndex("bludo"));
            String recept = cursor.getString(cursor.getColumnIndex("recept"));
            txtBludo.setText(bludo);
            txtRecept.setText(recept);
            // конструкцию с if-else упрощаем
            btnLike.setText((like == 1)? "В избранном":"Нет в избранном");
            }
        }

        @Override
        public void onClick(View v) {

                switch (v.getId()) {
                    case R.id.btnLike:
                        mItemClickListener.onFavoriteButtonClick(id, like == 1);
                        break;
                    default:
                        mItemClickListener.onItemClick(id);
                }
        }
    }
}


text:
Visitor7 [CC BY-SA 3.0], via Wikimedia Commons
Los Angeles without a Car: 9 Superb Attractions
By David Madsen and Elisa Makunga
Los Angeles has changed. Nearly 90 miles of light rail and subway now connect the diverse neighborhoods of the City of Angels, freeing locals and visitors alike from bumper-to-bumper car traffic and difficult-to-navigate freeways. From Hollywood to Long Beach, Downtown L.A. to Pasadena, there's a Metro Rail–convenient destination for every interest and budget. Here are our top 9 Los Angeles–area attractions that are within a 10-minute walk of a Metro Rail station.
David Madsen and Elisa Makunga are the authors of L.A. Adventures: Eclectic Day Trips by Metro Rail Through Los Angeles and Beyond.
L.A. Electric Travel
The Grammy Museum
800 W. Olympic Blvd. (entrance on Figueroa Street)
The Grammy Museum is one of Los Angeles's unsung treasures. Its four floors are dedicated to the history of popular music, from the first homemade bottleneck guitar to the latest technology-driven hip-hop and dance music. Special exhibitions have covered everyone from Roy Orbison and Barbra Streisand to Bob Marley, Michael Jackson, and John Lennon. The museum often puts on large-scale themed exhibits as well, devoted to topics such as rock-and-roll photogragraphy and the history of hip-hop. But the evening programs are truly special, presenting dialogues with and performances by living legends of rock, jazz, blues, soul, reggae, country, funk, and more in the intimate, 200-seat Clive Davis Theater.
Metro Station: 7th Street/Metro Center or Pico
Walking Time from Station: 8 minutes
Steve Jurvetson / Flickr
Space Shuttle Endeavour
700 Exposition Park Dr. (at the California Science Center)
In 2012, the California Science Center became the permanent home of the space shuttle Endeavour. This battle-scarred behemoth of the space age is truly awe-inspiring, every one of its 20 orbital missions etched into its indestructible hull. Many of the museum docents are veterans of the space program who are happy to share personal insights and memories. Moving the shuttle to the Science Center was a major endeavor in itself—power lines, stoplights, and even palm trees had to be removed to make way for the spacecraft as it was towed through L.A.'s streets.
Metro Station: Expo Park/USC
JimDonnellyPhoto [CC BY-SA 3.0], via Wikimedia Commons
Old Town Pasadena
Old Town Pasadena is a lively, walkable neighborhood that offers world-class dining, shopping, theaters, and art galleries. A stroll through Old Town is also a study in Southern California's history immortalized in architecture. Take note of the Pasadena City Hall (pictured), a Palladian-inspired example of the distinctive California-Mediterranean style. Fans of the television show Parks and Recreation will recognize the building for its role as the Pawnee City Hall. If you want to combine food with historic attractions, Melting Pot Tours offers guided strolls through Old Town that give you insight into Pasadena's past as well as its rising star chefs.
Metro Station: Memorial Park in the heart of Old Town
Within a short walk of the Hollywood/Highland Red Line Metro Station, you can reach many of the attractions for which Hollywood is famous: TCL Chinese Theatre (formerly Grauman's), with its collection of movie stars' footprints in cement; the Egyptian Theatre, where showman Sid Grauman staged the world's first red carpet premiere; Madame Tussauds wax museum; the Dolby Theatre, where the Academy Awards are presented; and the El Capitan Theatre, where you can catch a free taping of Jimmy Kimmel Live. As you walk around, look down—you're trekking along the renowned Hollywood Walk of Fame, where celebrities both enduring and forgotten are immortalized. All this tourism is bound to work up a thirst. We recommend you head to the long-running Musso & Frank Grill (6667 Hollywood Blvd.) for an incomparable martini.
Metro Station: Hollywood/Highland
Wi Spa
Korean Spas
In Koreatown can you find numerous reasonably priced spas. Far from an exclusive experience reserved for the wealthy, a Korean spa is a welcoming environment where family and friends gather to get healthy and socialize. Open 24 hours, the three-level, 48,000-square-foot, kid-friendly Wi Spa offers affordable luxury for families and couples. Designed like a traditional Korean bathhouse, the facility has five different coed saunas plus a kids' zone with comic books and video games. A full menu of services includes Akasuri body scrubs, aromatherapy massages, mineral mud treatments, and vitamin C facials.
Metro Station: Vermont/Wilshire
Walking Time from Station: 10 minutes
Image by Falkenpost from Pixabay
Walt Disney Concert Hall
Set aside the Hollywood sign and this Frank Gehry–designed stainless-steel fantasia just might be the most recognizable symbol of Los Angeles. In addition to its architecture, the concert hall is famous for having unbelievably good acoustics. On most nights, those heavenly sounds are provided by the Los Angeles Philharmonic, led by firebrand musical director Gustavo Dudamel. If you visit during the day, wear sunglasses—the glare from the reflective surfaces of the hall can be seen for blocks. A concert is the best way to experience the site, but you can also take a guided or self-guided audio tour lasting about an hour.
Metro Station: Civic Center
Ray_LAC
Americá Tropical and Olvera Street
On Olvera Street in the oldest part of the city, you can see América Tropical, a restored mural by artist David Alfaro Siqueiros. This faded but still powerful indictment of American imperialism was painted over in 1934, two years after its unveiling. Eighty years later, the Getty Trust and the city of Los Angeles brought the mural back, along with an interpretive center and a viewing platform. While you're in the area, sample Olvera Street's Mexican restaurants, visit the five free museums that line this historic square, or take part in a street festival with traditional dancers like the one pictured.
Metro Station: Union Station
Museums in Little Tokyo
In Little Tokyo, the Japanese American National Museum (100 N. Central Ave.) stands next to the Geffen Contemporay at MOCA (152 N. Central Ave.), part of the Museum of Contemporary Art. The first institution presents the cultural history, art, music, dance, and even home movies of Japanese Americans, with a special emphasis on the internment camps where Japanese Americans were held during World War II. The building that now houses the Geffen museum was originally a hardware store and warehouse; it was renovated by local star architect Frank Gehry of Walt Disney Concert Hall fame. The museum is noted for its controversial exhibits and large-scale installations.
Metro Station: Little Tokyo/Arts District
Ken Lund / Flickr
Mission Street, South Pasadena
South Pasadena's Mission Street is a patch of small-town America in the middle of the big city. The historic thoroughfare remains a haven for independent business owners selling homemade baked goods, wine, books, and more. The Fair Oaks Pharmacy soda fountain (1526 Mission St.) has been serving up shakes, phosphates, ice cream floats, and sundaes for more than a century. Just off Mission you'll find a comfortable library with an ample lawn, shady streets lined with Craftsman bungalows, and magnolia trees inhabited by wild parrots. Every Thursday, there's an outdoor farmers' market right at the Metro station, where locals gather to buy fresh, organic California produce, dine on Santa Maria barbecue, and watch open-air movies.
Metro Station: South Pasadena


text:
case-agency.ru
Prostitutes Cabayangan
Prostitutes Friedrichsfelde
Girls in Friedrichshagen Germany Prostitutes Prostitutes Friedrichsfelde
Buy Whores Friedrichsfelde
Telephones of Prostitutes Friedrichsfelde
Where to find a Skank Friedrichsfelde
From to Bobrowski was imprisoned by the Soviet Union, where he spent time working in a coal mine. Telephones of Girls Friedrichsfelde Germany Berlin. Friedrichsfelde is located north of the village of Friedrichshagen Prostitutes the Berlin-Frankfurt Oder railway.
It was named after the architect who projected the complex: It is located north of the village of Friedrichshagen on the Berlin-Frankfurt Oder railway. Other pages Apartment rentals Noticeboard Discussion forum. Log in Subscribe. It is the smallest borough by population, but the fourth largest by land area.
First inhabited Friedrichshagen and incorporated into Berlin inthe former industrial and working Prostitutes neighbourhood is fully surrounded by three Friedrichshagen which define its present-day border.
Services operate Prostitutes minute intervals between Ostkreuz and Friedrichshagen.
Telephones of Friedrichsfelde Friedrichshagen Until it was an autonomous Friedrichsfelde with the localities of Fennpfuhl, Rummelsburg, Friedrichsfelde and Karlshorst. Prostitutes he admitted his use of prostitutes had ruined his Prostitutes of women in general.
Telephones of Girls Friedrichsfelde Check this out Berlin.
Whores 324 no Telephones of Whores Friedrichsfelde
Escort 370 yes Phone numbers Friedrichsfelde Prostitutes Friedrichsfelde Germany 2924599
Sluts 790 no Telephones of Girls Friedrichsfelde Germany Berlin
Whores 294 no am a Christian and serve in.
Sluts 230 no Telephones Prostitutes Pfostitutes Friedrichsfelde Germany 2924599
Log in Subscribe.
Mary, renowned Museum Island, the city hall Rotes Rathaus, the city Friedrichsfelde building Altes Stadthaus, the famous Fernsehturm, Brandenburg Gate at the end of the central boulevard Unter den Linden and more main tourist attractions of the city.
The bathroom and beds were clean and new and the shower was very nice.
Already a subscriber or registered access user?
Prostitute numbers of Skank Friedrichsfelde Germany Berlin
Prostitutes Saint-Paul
Prostitutes Taipei
Prostitutes Bulgan
Prostitutes Kukës
Prostitutes Cabinda
Prostitutes Lilongwe
Prostitutes Pīrgaaj
Prostitutes Mandalgovi
Prostitutes Adamstown
Prostitutes Thakhèk
case-agency.ru © - 2019 UP
case-agency.ru | RSS | Map | Contacts


This Beautifully updated well maintained split level home in Winston Park has so much to offer. From the moment you walk in you will notice the details. Brazilian Cherry hardwood flooring in Living Room, Dining Room, Family Room and 4th bedroom/Den on 1st floor. Parquet flooring in all 3 bedrooms and hall. New master bath with beautiful shower has custom tile and border. Kitchen with breakfast bar. The large lush back yard features a huge cement patio. Sub-basement for extra living space/storage. Close to schools, park, shopping and expressway.
September 15, 2015 / What's Current?


text:
Q: How can I optimise this method? I have been working on creating an assets class that can generate dynamic TextureAtlas objects whenever I need them. The specific method is Assets.generateTextureAtlas() and I am trying to optimise it as much as possible as I quite frequently need to regenerate texture atlas's and was hoping to get a better time than my 53ms average.
53ms is currently costing me about 3 frames which can add up quickly the more items I need to pack inside my texture atlas and the frequency I need to generate them. So an answer to all the pitfalls within my code would be great.
The entire class code is available here in a github gist.
The RectanglePacker class is simply used to pack rectangles as close together as possible (similar to Texture Packer) and can be found here.
For reference, here is the method:
public static function generateTextureAtlas(folder:String):void
{
    if (!_initialised) throw new Error("Assets class not initialised.");

    if (_renderTextureAtlases[folder] != null)
    {
        (_renderTextureAtlases[folder] as TextureAtlas).dispose();
    }

    var i:int;
    var image:Image = new Image(_blankTexture);
    var itemName:String;
    var itemNames:Vector.<String> = Assets.getNames(folder + "/");
    var itemsTexture:RenderTexture;
    var itemTexture:Texture;
    var itemTextures:Vector.<Texture> = Assets.getTextures(folder + "/");
    var noOfRectangles:int;
    var rect:Rectangle;
    var rectanglePacker:RectanglePacker = new RectanglePacker();
    var texture:Texture;

    noOfRectangles = itemTextures.length;

    if (noOfRectangles == 0)
    {
        return;
    }

    for (i = 0; i < noOfRectangles; i++)
    {
        rectanglePacker.insertRectangle(Math.round(itemTextures[i].width), Math.round(itemTextures[i].height), i);
    }

    rectanglePacker.packRectangles();

    if (rectanglePacker.rectangleCount != noOfRectangles)
    {
        throw new Error("Only " + rectanglePacker.rectangleCount + " out of " + noOfRectangles + " rectangles packed for folder: " + folder);
    }

    itemsTexture = new RenderTexture(rectanglePacker.width, rectanglePacker.height);

    itemsTexture.drawBundled(function():void
    {
        for (i = 0; i < noOfRectangles; i++)
        {
            itemTexture = itemTextures[rectanglePacker.getRectangleId(i)];
            rect = rectanglePacker.getRectangle(i, rect);

            image.texture = itemTexture;
            image.readjustSize();

            image.x = rect.x + itemTexture.frame.x;
            image.y = rect.y + itemTexture.frame.y;

            itemsTexture.draw(image);
        }
    });

    _renderTextureAtlases[folder] = new TextureAtlas(itemsTexture);

    for (i = 0; i < noOfRectangles; i++)
    {
        itemName = itemNames[rectanglePacker.getRectangleId(i)];
        itemTexture = itemTextures[rectanglePacker.getRectangleId(i)];
        rect = rectanglePacker.getRectangle(i);

        (_renderTextureAtlases[folder] as TextureAtlas).addRegion(itemName, rect, itemTexture.frame);
    }
}

A: Well reading the project & finding what all can be optimized would sure take time.
Start by removing multiple calls to rectanglePacker.getRectangle(i) inside loops.
For example :
    itemName = itemNames[rectanglePacker.getRectangleId(i)];
    itemTexture = itemTextures[rectanglePacker.getRectangleId(i)];
    rect = rectanglePacker.getRectangle(i);

perhaps, could have been:
    rect = rectanglePacker.getRectangle(i);
    itemName = itemNames[rect];
    itemTexture = itemTextures[rect];

If getRectangle does indeed just 'get a rectangle' & not set anything.

A: I think the bigger issue at hand is this, why oh why do you HAVE to do this during run-time, in a situation when this can't take more time? This IS an expansive operation, no matter how much you optimize this you will probably end up with it taking about 40ms or similar when done in AS3.
This is why these kind of operations should be done during compile time or during "loading screens" or other "transitions" when frame-rate is not critical and when you can afford it.
Alternatively create another system in c++ or some other language which can actually handle the number-crunching that gives you the finished result.
Also, when it comes to checking performance, yes the entire function takes 53ms, BUT, where are those milliseconds used? 53ms says nothing and is only the "overhead profiling thing" where you found the culprit, you need to break it down into smaller chunks to gather some reliable information about what it is that ACTUALLY takes time, inside that function.
I mean, inside that function, you have 3 for loops, several calls to other classes, casts, deletes, creations. It's not like you are doing one thing, that function probably results in ~500 lines of code and a bazillion cpu operations. And, you have no idea where it is used. I would guess that it is the rectanglePacker.packRectangles(); that takes 60% of that time, but without profiling, you and we don't know on what to optimize, we simply don't have sufficient data.
If you HAVE to do this during run-time in AS3, I would recommend doing this spread out during several frames and distributing workload evenly during 10 frames or so. You could also doing it with help of another thread and workers. But most of all, this seems like a design error since this could probably be done at another time. And if not, then in another language which is better at these kind of operations.
The easiest way to profile this is to add a couple of timestamps similar to:
var timestamps:Array = [];
And then push getTimer() at different places in code, and then print them out when function is done

A: As others said, it's unlikely that the reason of bad performance is non-optimized AS code. Output from the profiler (Scout, for example) wold be very helpful. However, if your purpose is just adding new textures, I can suggest several optimizations:

*

*Why would you need to re-generate the whole atlas every time (calling Assets.getTextures() and creating new render texture)? Why don't you just add new items to the existing atlas? Creation of a new RenderTexture (and, thus, a new texture in GPU memory) is very costly operation, because it requires sync between CPU and GPU. On the other hand, drawing into RenderTexture is carried out entirely inside GPU, so it takes much less time.

*If you place every item on a grid, then you can avoid using RectanglePacker as all of your rectangles can have the same dimensions matching the dimensions of a grid.
Edit:
To clarify, some time ago I had a similar problem: I had to add new items to the existing atlas on a regular basis. And the performance of this operation was quite acceptable (about 8ms on iPad3 using 1024x1024 dynamic texture). But I used the same RenderTexture and the same Sprite object that contained my dynamic atlas items. When I need to add a new item, I just create new Image with desired texture (stand-alone or from another static atlas), then place it inside the Sprite container, and then redraw this container to the RenderTexture. Similarly with deletion/modification of an item.