text:
Expertise in Obesity: HELP
Mary Ellen Harper
Based on 20 articles published since 2008
The expertise of Mary Ellen Harper ranks in the
Top 0.66%
... of 265,858 published authors worldwide on Obesity
... from 2008 through 2019
... based on contributions to 20 articles on the topic.
Graphical view (beta)
Get your prestigious
Expert badge
similar to this:
Aliases Harper, M-E · Harper, Mary E · Harper, Mary-Ellen · Harper, Mary Ellen
Most likely: University of Ottawa
Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada. · Ruddy Canadian Cardiovascular Genetics Centre, University of Ottawa Heart Institute, Ottawa, Ontario, Canada. · Department of Cellular and Molecular Medicine, Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada. · School of Human Kinetics, Faculty of Health Sciences, University of Ottawa, Ottawa, Ontario, Canada. · School of Kinesiology, University of British Columbia, Vancouver, British Columbia, Canada. · Nestle Institute of Health Sciences, Lausanne, Switzerland. · Newborn Screening Ontario, Children's Hospital of Eastern Ontario, Ottawa, Ontario, Canada. · Faculty of Medicine and Health Sciences, United Arab Emirates University, Al-Ain, United Arab Emirates. · Ottawa Hospital Weight Management Clinic, Ottawa, Ontario, Canada. · Pubmed 29151592
Department of Biochemistry, Microbiology, and Immunology, Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada. · Ruddy Canadian Cardiovascular Genetics Centre, Ottawa, Ontario, Canada. · Ruddy Canadian Cardiovascular Genetics Centre, Ottawa, Ontario, Canada; Atherogenomics Laboratory, and Division of Cardiology, Department of Medicine, University of Ottawa Heart Institute, Ottawa, Ontario, Canada. · Ottawa Hospital Weight Management Clinic, Ottawa, Ontario, Canada. Electronic address: · Pubmed 28800932
Anesthesiology Department, University of Utah School of Medicine, Salt Lake City, UT, USA. · Pharmacology Department, Case Western Reserve University, Cleveland, OH, USA. · United States Department of Agriculture-Agricultural Research Service Western Human Nutrition Research Center, Davis, CA, USA. · Sports Medicine Program, School of Medicine, University of California, Davis, CA, USA. · Department of Nutrition, University of California, Davis, CA, USA. · Department of Nutrition Sciences, University of Alabama, Birmingham, AL, USA. · Human Studies Department, University of Alabama, Birmingham, AL, USA. · Department of Biochemistry, Microbiology and Immunology, University of Ottawa, Ottawa, ON, Canada. · Genome Center and West Coast Metabolomics Center, University of California, Davis, CA, USA. · Biochemistry Department, King Abdulaziz University, Jeddah, Saudi-Arabia. · Arkansas Children's Nutrition Center, Little Rock, AR, USA. · Department of Pediatrics, University of Arkansas for Medical Sciences, Little Rock, AR, USA. · Pubmed 27730694
Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada. · Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada. · Pubmed 27804267
Department of Biochemistry, Microbiology and Immunology, University of Ottawa, Ottawa, ON, Canada. · Interdisciplinary School of Health Sciences, University of Ottawa, Ottawa, ON, Canada. · Department of Mathematics and Statistics, University of Ottawa, Ottawa, ON, Canada. · CHEO Research Institute, Ottawa, ON, Canada. · Department of Pediatrics, University of Ottawa, Ottawa, ON, Canada. · School of Human Kinetics, University of Ottawa, Ottawa, ON, Canada. · Départment de Nutrition, Université de Montréal, Montreal, QC, Canada. · Institut de Recherches Cliniques de Montréal, Montréal, QC, Canada. · Institut de recherche de l'Hôpital Montfort, Hôpital Montfort, Ottawa, ON, Canada. · Interdisciplinary School of Health Sciences, University of Ottawa, Ottawa, ON, Canada. · Faculty of Health Sciences, 451 Smyth, Ottawa, ON, K1H 8M5, Canada. · Pubmed 27515448
Department of Medicine, The Ottawa Hospital Weight Management Clinic, Ottawa, Ontario, Canada. · Ruddy Canadian Cardiovascular Genetics Centre, University of Ottawa Heart Institute, Ottawa, Ontario, Canada. · Department of Biochemistry, Microbiology, and Immunology, University of Ottawa, Ottawa, Ontario, Canada. · Division of Cardiology, University of Ottawa Heart Institute, Ottawa, Ontario, Canada. · Department of Medicine, The Ottawa Hospital Weight Management Clinic, Ottawa, Ontario, Canada. Electronic address: · Pubmed 26897181
The Ottawa Hospital Weight Management Clinic, Ottawa, Canada. · Ruddy Canadian Cardiovascular Genetics Centre, University of Ottawa Heart Institute, Ottawa, Canada. · Department of Biochemistry, Microbiology and Immunology, University of Ottawa, Ottawa, Canada. · Pubmed 26853430
From the University of Ottawa Heart Institute, Ottawa, Canada (D.K., L.R., M.G., D.B., R.J.G., K.J.R.) · and Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, Ottawa, Canada (M.-E.H., K.J.R.). · Pubmed 26427794
Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, 451 Smyth Rd, Ottawa, ON, Canada, K1H 8M5. · Department of Cellular and Molecular Medicine, Faculty of Medicine, University of Ottawa, Ottawa, ON, Canada. · Atherogenomics Laboratory, University of Ottawa Heart Institute, Ottawa, ON, Canada. · Ottawa Hospital Weight Management Clinic, The Ottawa Hospital, Ottawa, ON, Canada. · Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, 451 Smyth Rd, Ottawa, ON, Canada, K1H 8M5. · Pubmed 26404066
Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada; · Molecular, Cellular, & Integrative Physiology Graduate Program, University of California, Davis, California, USA; Obesity & Metabolism Research Unit, United States Department of Agriculture-Agricultural Research Service Western Human Nutrition Research Center, Davis, California, USA; · Obesity & Metabolism Research Unit, United States Department of Agriculture-Agricultural Research Service Western Human Nutrition Research Center, Davis, California, USA; Department of Nutrition, University of California, Davis, California, USA; · Division of Cardiology, University of Ottawa Heart Institute, Ottawa, Ontario, Canada; · Ottawa Hospital Weight Management Clinic, Ottawa, Ontario, Canada; · Immunity & Disease Prevention Research Unit, U.S. Department of Agriculture-Agricultural Research Service Western Human Nutrition Research Center, Davis, California, USA Department of Nutrition, University of California, Davis, California, USA; · Molecular, Cellular, & Integrative Physiology Graduate Program, University of California, Davis, California, USA; Obesity & Metabolism Research Unit, United States Department of Agriculture-Agricultural Research Service Western Human Nutrition Research Center, Davis, California, USA; Department of Nutrition, University of California, Davis, California, USA; · Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada; · Pubmed 25342132
USDA-ARS Western Human Nutrition Research Center, Davis, California, United States of America. · West Coast Metabolomics Center, University of California Davis, Davis, California, United States of America. · West Coast Metabolomics Center, University of California Davis, Davis, California, United States of America ; Genome Center, University of California Davis, Davis, California, United States of America. · Sports Medicine Program, University of California, Davis School of Medicine, Sacramento, California, United States of America. · USDA-ARS Western Human Nutrition Research Center, Davis, California, United States of America ; Department of Nutrition, University of California Davis, Davis, California, United States of America. · Department of Nutrition Sciences, University of Alabama, Birmingham, Alabama, United States of America ; Human Studies Department, University of Alabama, Birmingham, Alabama, United States of America. · Department of Nutrition Sciences, University of Alabama, Birmingham, Alabama, United States of America. · Department of Biochemistry, Microbiology and Immunology, University of Ottawa, Ottawa, Ontario, Canada. · Pharmacology Department, Case Western Reserve University, Cleveland, Ohio, United States of America. · Genome Center, University of California Davis, Davis, California, United States of America. · Pubmed 24416208
Department of Biochemistry, Microbiology, and Immunology (A.B.T., R.Z., W.C., E.L.S., J.K.Q., M.-E.H.), Faculty of Medicine, University of Ottawa, Ottawa, Ontario, Canada K1H 8M5 · Department of Pathology, Anatomy, and Cell Biology (E.L.S.), Thomas Jefferson University, Philadelphia, Pennsylvania 19107 · Division of Cardiology (R.M.), University of Ottawa Heart Institute, Ottawa, Ontario Canada K1Y 4W7 · Ottawa Hospital Weight Management Clinic (R.D.), Ottawa Hospital, Ottawa, Ontario, Canada K1Y 4E9. · Pubmed 25148230
Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, Ontario, Canada. · Pubmed 23786211
Department of Biochemistry, University of Ottawa, Ottawa, ON K1H 8M5, Canada. · Pubmed 23685312
Atherogenomics Laboratory, University of Ottawa Heart Institute, Ottawa, Ontario, Canada. · Pubmed 23591406
Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, 451 Smyth Rd., Ottawa, ON, Canada K1H 8M5. · Pubmed 23168281
Centre for Stroke Recovery, Neuroscience, Ottawa Health Research Institute, University of Ottawa, 451 Smyth Road, Ottawa, ON K1H 8M5, Canada. · Pubmed 21874351
Department of Biochemistry, Microbiology and Immunology, Faculty of Medicine, University of Ottawa, 451 Smyth Rd, Ottawa, ON, Canada. · Pubmed 20332421
Possible: Ottawa Hospital
Possible: Miscellaneous institutions in Research Triangle
Biomedical Biotechnology Research Institute, North Carolina Central University, Durham, North Carolina, USA. · Pubmed 20885385
Biomedical Biotechnology Research Institute, North Carolina Central University, Durham, USA. · Pubmed 21122113
Here are the titles of the 10 most recent articles (out of 20 total) written by Mary Ellen Harper about Obesity:
Diet-resistant obesity is characterized by a distinct plasma proteomic signature and impaired muscle fiber metabolism. 2018
Is Type 2 Diabetes in Adults Associated With Impaired Capacity for Weight Loss? 2018
Acylcarnitines as markers of exercise-associated fuel partitioning, xenometabolism, and potential signals to muscle afferent neurons. 2017
Reactive Oxygen Species and Oxidative Stress in Obesity-Recent Findings and Empirical Approaches. 2016
Acyl-CoA synthetase long-chain 5 genotype is associated with body composition changes in response to lifestyle interventions in postmenopausal women with overweight and obesity: a genetic association study on cohorts Montréal-Ottawa New Emerging Team, and Complications Associated with Obesity. 2016
Adverse Effects of β-Blocker Therapy on Weight Loss in Response to a Controlled Dietary Regimen. 2016
Can response to dietary restriction predict weight loss after Roux-en-Y gastroplasty? 2016
Therapeutic Inhibition of miR-33 Promotes Fatty Acid Oxidation but Does Not Ameliorate Metabolic Dysfunction in Diet-Induced Obesity. 2015
Impaired mitochondrial oxidative phosphorylation and supercomplex assembly in rectus abdominis muscle of diabetic obese individuals. 2015
Acylcarnitines: potential implications for skeletal muscle insulin resistance. 2015
Show List of Full Article Records
Learn more about Mary Ellen Harper using the ready-made Google searches below.
Mary Ellen Harper, Obesity
Harper, University of Ottawa
Harper, Obesity, University of Ottawa
Harper site:uottawa.ca
Ottawa Hospital
Harper, Ottawa Hospital
Harper, Obesity, Ottawa Hospital
Harper site:ohri.ca
Harper site:ottawahospital.on.ca
Miscellaneous institutions in Research Triangle
Harper, Research Triangle
Harper, Obesity, Research Triangle


The mulberry tree is a storied tree with a fascinating history. Chinese legend has it that the wife of an ancient emperor was the inventor of silk, and the silk cultivating process dates back between six and seven thousand years in China. Silkworms consume mulberry leaves, so as a result the mulberry tree became critical to Chinese economy and later to the production of silk around the world. You might encounter four types of mulberry trees: paper, red, white, and black mulberries. Each of these trees' leaves has telltale signs to help you identify it.
The mulberry tree has a fascinating history.
Check for lobes and leaflets.
Check for lobes and leaflets. Mulberry leaves are single, lobed leaves--they do not have secondary leaflets attached to the same stem ( called "compound" leaves), and they they have projections jutting out like a maple leaf instead of a smooth edge all the way around. If the leaf is lobed and not compound, it may be a mulberry.
Make sure the leaves are asymmetric.
Make sure that the leaf in question is asymmetric. Mulberry leaves are rare in that they have lobes that are unbalanced, distributed unevenly around the leaf.
Take a look at the leaf base, and feel the surface of the leaf. If the leaf is short and the base is heart-shaped, it is probably a black mulberry leaf. If the leaves have rounded teeth on the edges, it is either white or red mulberry; white mulberry leaves are glossy while red ones are less so. If the leaf is densely hairy, it comes from a paper mulberry tree.
What Kind of Tree Grows Spikes?


To be and be recognized, by any measure, as the best offshore construction contractor in the world in carefully selected segments and regions of the market.
To deliver projects safely, on time and within budget. We strive to exploit new market opportunities without compromising our culture and reputation built over the years. The business climate demands that we plan the work and work the plan.


Since 1996, CRS Electronics has been a leader in the research and development of innovative LED product solutions. In addition to cutting edge R&D, exemplified by numerous patents, CRS Electronics maintains its own state-of-the-art manufacturing facility located in North America to design and manufacture LED products for major customers, as well as its own product brands. CRS Electronics delivers optimal LED solutions for a number of interior and exterior architectural lighting applications.
As we prepare to take a giant step forward marketing two new brands, each sold through different sales channel partners, promoted by separate regional sales management teams, and serviced via brand-specific inside sales coordinators; this ambitious upgrade is critical to providing industry-leading service. Six S Partners and the next-generation Epicor ERP solution are the perfect solution to meet our needs.
Extremely fast growth and rising sales opportunities with national commercial distributors put pressure on their systems. New supply chain systems were required to manage their international supply requirements and to handle the challenges of long lead times and forecast planning. CRS Electronics also needed to meet the financial requirements and controls of being a publicly traded entity. Realizing that the company had outgrown its legacy software-a financially-centric software package from Sage-the management team began evaluating options to address their growth needs. Given the growth needs and the business timing of the move to a new system, CRS Electronics desired a fast implementation of 60 days.
After evaluating its vendor options, CRS Electronics decided to take a closer look at the next-generation Epicor enterprise resource planning (ERP) solution and teamed up with Epicor local partner Six S Partners for an in-depth review. Epicor was the only vendor who could address all scenarios and meet CRS Electronics' unique requirements, as well as meet the company's implementation timeline.
Together with a tailored "quick start" implementation strategy, CRS Electronics was able to go live and get up and running on the core finance and supply chain aspects of the system allowing them to meet the demands of their distribution and commercial client base. Following the Epicor best practices methodology for implementation carried out by Six S Partners, CRS Electronics is better enabled to increase and streamline its operational effectiveness in meeting the day-to-day challenges and replace the individual spreadsheets and islands of information that were not previously integrated, shared effectively, or properly controlled.
"Six S Partners was great at helping us understand the software and the best practices to meet our needs without limiting the flexibility for the future," says Justin Koetsier, director of IT, CRS Electronics. "The quick start program and knowledgeable consultants from Six S Partners guided our project to get us up and running effectively."
Six S Partners takes a unique approach to the implementation that puts the customer in control of the amount of functionality that they wish to employ along with the time, budget, and scope elements. By managing the project with its lean tools and leveraging the Epicor Signature Implementation Methodology, the customer's assessment becomes the blue print for the project success. By forging a strong partnership with its clients and ensuring clear expectations, the Six S Partners team is able to meet and exceed customer expectations within the budget and scope that was agreed upon.
"Every customer's requirements are unique. For CRS Electronics, they were interested in a platform for growth-so getting results early was key," says John Preiditsch, president and founder, Six S Partners. "Today, they are expanding and opening new markets and launching new products. By extending a systematic approach to the use of Epicor, we have already helped CRS Electronics realize the benefits of a standard package and best practices where most firms would have gone through the trials of manual or custom tools that would eventually need to be brought back in line with the organizational objectives and systems. Six S Partners has learned that regardless of customer size, sticking to the proven implementation process allows us to remain within scope and on budget."
organization, including forecasting, purchasing, bill of materials, job travelers, and a comprehensive MRP system.
From an IT standpoint, Epicor is an intuitive and easy-to-use system. User-specific dashboards are easy to configure which in practice means employees from different divisions, including finance, sales, shipping, purchasing and engineering, have access to information that is relevant to their job needs. "New modules can be applied as we need them and information stays behind a wall until we're ready for it. We're able to easily create dashboards to tailor information for the entire company so each department has the right information for their day-to-day work," says Koetsier.


After tipping 25 tokens in a day, you'll be able to vote regarding your satisfaction with Bigdickdagar733.
You have tipped Bigdickdagar733 over 25 tokens today. Please share your feedback regarding your satisfaction with this broadcaster.
Your confidential vote regarding Bigdickdagar733 has been recorded. You may change your vote at any time today. Thank you for your feedback.


Bestselling author and literary consultant Mem Fox states in her book Reading Magic that "rhymers will be readers". Based on research by experts in literacy and child development, she claims that children who know eight nursery rhymes by heart by the time they are four years old will be among the best readers by the time they are eight years old.
Childhood experts say that nursery rhymes can help stimulate your child's memory, improve their language skills and develop their appreciation for music. Parents and children have liked them for centuries without the PhD's approval because they are fun.
Here is a link to a nice Nursery Rhyme site.


text:
By Sunday Standard Reporter
When South Africa's President Cyril Ramaphosa delayed in congratulating his Botswana counterpart, President Mokgweetsi Masisi on his election victory, conspiracy theorists went into overdrive.
Curiously, the African National Congress (ANC) a fraternal party of the ruling Botswana Democratic Party (BDP) did not even bother to send a goodwill message.
Then Ramaphosa skipped Masisi's inauguration and flew off to Tokyo to support the Springbok, South African national team in the Rugby World Cup final and the hitherto fringe conspiracy theory went mainstream. Even reputable media outlets simply joined the dots and a sinister outline emerged: That what started off as Botswana's push back against South Africa's businesswoman, Bridgette Motsepe Radebe's campaign to unseat President Masisi was now threatening to become a far wider and ominous cold war between the two Southern African neighbours.
The tension between the two countries is now playing itself out in the Directorate on Corruption and Economic Crime (DCEC) and Directorate of Intelligence and Security Services (DIS) corruption case which implicated Motsepe Radebe alongside former DIS intelligence agent Wilhelmina Maswabi code named Butterfly, former President Lt Gen Ian Khama and former DIS Director General Isaac Kgosi in the alleged Bank of Botswana P100 billion heist.
As the dispute grows and neither side shows any intention of holding back, the potential fallout between Masisi government and South Africa might jeopardize the stable sub-continent that looks up to South Africa as the regional leader.
Beneath the surface, a new tone has begun to emerge as the South African government moves to close rank around Motsepe Radebe. South African Minister of International Relations Minister Naledi Pandor has gone on record telling the media that she believed Motsepe-Radebe did not commit any crime in Botswana.
What was billed as Botswana's biggest corruption case is being framed in South Africa as a plot by the Botswana government and President Mokgweetsi Masisi in particular to malign Ramaphosa's sister in law. Motsepe Radebe is ramping up the paranoia, telling the South African media that there is a bullet in Botswana with her name on it.
Deploying their local and international propaganda arms, the newspapers, television channels and social media, Khama, Motsepe Radebe and the South African intelligence are honing this message.
The DCEC and The DIS have been caught flat footed and by Friday evening it was obvious that they had lost this battle of competing narratives and were in danger of being swamped by the unlimited local and international propaganda resources at their adversaries' disposal.
The DIS information output which started as a roar last month when Maswabi was arrested had shrunk to a squeak this week as the spy agency reeled from the blowback. The DIS however denies that they are being routed in the information warfare and are instead shifting goal posts and spinning stories of a victory in the not so distant future.
The story is still unfolding, however bits of information which are emerging suggest that the DIS boss Peter Magosi and his colleague at the DCEC Joseph Mathambo may have been blindsided by their crafty adversaries who served them a red herring in a nifty disinformation warfare attack. This has resulted in one of Botswana's biggest intelligence failures ever, reminiscent of the CIA mea culpa which led to the Gulf war on the back of false intelligence about Iraq's non-existent weapons of mass destruction.
Sunday Standard investigations have revealed that at least two of the DIS and DCEC covert sources were not some rogue agent provocateurs, but were double agents and possibly sponsored faux dossier peddlers with links to Motsepe Radebe and Isaac Kgosi.
A source close to the case told the Sunday Standard that the whoppers in the dodgy dossier bore the mark of professional intelligence disinformation with accurate basic facts provided as bait to convince the DCEC and the DIS that the fake information was real. Indications are that the DIS had a serious blind spot and failed to see through the window dressing.
For the past two weeks, however, their questionable dossier has been fraying like a fong-kong pantyhose, with Khama and Motsepe Radebe using the apparently false intelligence to dismiss real evidence on their role in the plot to oust Masisi and the Bank of Botswana's hundreds of millions that cannot be accounted for.
Most of the information contained in the dossier which serves as the backbone of the case against Maswabi, Khama, Kgosi and Motsepe-Radebe has failed to check out. It appears DCEC and DIS sources sold them a dummy to tarnish the investigation and undermine President Masisi's campaign against corruption.
The situation is not helped by the fact that Motsepe Radebe and her South African backers enjoy the home ground advantage in the ensuing information warfare as most of the banks and alleged co-conspirators are based in South Africa.
For the past two weeks, the focus of the case has been on the flurry of documentation from South African banks discrediting the DCEC and DIS dossier, while the audio tape recordings of Motsepe Radebe planning the ouster of Masisi and the Auditor General report that hundreds of millions of BoB money cannot be accounted for have been conveniently veiled in the information warfare smoke and mirrors.
The Auditor General last year issued a qualified audit opinion on government's main pula accounts with the Bank of Botswana because transactions running into billions of pula cannot be accounted for.
The Auditor General further called for an investigation into the account. Government cannot account for debits of P 4 933 156 857 in its remittances account which is the main government account at the Bank of Botswana, it emerged in the 2016/2017 Auditor General's report.
"The reconciliation statement of this figure with the bank statement balance included among others unidentified debits totalling P4 932 156 857 in the bank statement and receipts totalling P114 459 342 728 in the general ledger which should be investigated", stated the Auditor General's report.
In Propaganda: The Formation of Men's Attitudes, Jacques Ellul discusses psychological warfare as a common peace policy practice between nations as a form of indirect aggression. This type of propaganda drains the public opinion of an opposing regime by stripping away its power on public opinion. This form of aggression is hard to defend against because no international court of justice is capable of protecting against psychological aggression since it cannot be legally adjudicated. "Here the propagandists is [sic] dealing with a foreign adversary whose morale he seeks to destroy by psychological means so that the opponent begins to doubt the validity of his beliefs and actions."
Intrigues behind the DCEC and DIS encounters
DCEC on the back-foot on allegations against DIS boss
Spy wars rock Botswana's security
Sunday Standard Reporter - 28th January 2020
In what could be Botswana's biggest clone firm scam ever – court records filed two weeks ago suggests that former Basis Points...
For the second year running, Botswana has failed to emerge as Africa's least corrupt country in Transparency International's Corruption Perception Index (CPI).
BNF Central Committee in the dark about protest march
The Central Committee of the main partner in the Umbrella for Democratic Change, the Botswana National Front, never met to discuss a...

redpajama_set_name: RedPajamaCommonCrawl


text:
X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile
Ismet Baran (Corresponding Author), Ilya Straumit, Oksana Shishkina, Stepan V. Lomov
Critical assessment of the internal geometry after manufacturing of fiber reinforced polymer composites is essential for developing more reliable and robust production. In the present work, manufacturing induced defects such as fiber misalignment and porosity in a glass/polyester pultruded composite profile are evaluated. The internal geometry of the composite is characterized by X-ray micro-computed tomography (micro-CT) and analyzed using the VoxTex software which allows validated and detailed characterization of the internal geometry. Resin rich areas are observed in between the glass rovings at which the unidirectional fibers are misaligned with respect to the desired pulling direction. Results show that the misalignment in in-plane fiber orientation is more severe (30–40°) than the out-plane fiber orientation (10–20°). Two different types of porosities are quantified: the first one is discontinuous and located inside the resin rich areas; the second one is more severe and continuously located between the glass rovings. The area of the total continuous porosity is estimated approximately as 0.212–0.246 mm2 per unit length in the pulling direction. The fiber misalignments and resin rich areas cause 15–20% reduction in the studied part stiffness in the longitudinal direction.
Composite structures
https://doi.org/10.1016/j.compstruct.2018.04.030
10.1016/j.compstruct.2018.04.030
Dive into the research topics of 'X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile'. Together they form a unique fingerprint.
Polyesters Engineering & Materials Science 100%
Tomography Engineering & Materials Science 91%
Polyester Chemistry 84%
Characterization (materials science) Engineering & Materials Science 83%
Glass Roving Chemistry 75%
Glass Engineering & Materials Science 75%
Baran, I., Straumit, I., Shishkina, O., & Lomov, S. V. (2018). X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile. Composite structures, 195, 74-82. https://doi.org/10.1016/j.compstruct.2018.04.030
Baran, Ismet ; Straumit, Ilya ; Shishkina, Oksana ; Lomov, Stepan V. / X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile. In: Composite structures. 2018 ; Vol. 195. pp. 74-82.
@article{4880c3375a0743c19dcbd0e15e73ef5f,
title = "X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile",
abstract = "Critical assessment of the internal geometry after manufacturing of fiber reinforced polymer composites is essential for developing more reliable and robust production. In the present work, manufacturing induced defects such as fiber misalignment and porosity in a glass/polyester pultruded composite profile are evaluated. The internal geometry of the composite is characterized by X-ray micro-computed tomography (micro-CT) and analyzed using the VoxTex software which allows validated and detailed characterization of the internal geometry. Resin rich areas are observed in between the glass rovings at which the unidirectional fibers are misaligned with respect to the desired pulling direction. Results show that the misalignment in in-plane fiber orientation is more severe (30–40°) than the out-plane fiber orientation (10–20°). Two different types of porosities are quantified: the first one is discontinuous and located inside the resin rich areas; the second one is more severe and continuously located between the glass rovings. The area of the total continuous porosity is estimated approximately as 0.212–0.246 mm2 per unit length in the pulling direction. The fiber misalignments and resin rich areas cause 15–20% reduction in the studied part stiffness in the longitudinal direction.",
author = "Ismet Baran and Ilya Straumit and Oksana Shishkina and Lomov, {Stepan V.}",
doi = "10.1016/j.compstruct.2018.04.030",
journal = "Composite structures",
Baran, I, Straumit, I, Shishkina, O & Lomov, SV 2018, 'X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile', Composite structures, vol. 195, pp. 74-82. https://doi.org/10.1016/j.compstruct.2018.04.030
X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile. / Baran, Ismet (Corresponding Author); Straumit, Ilya; Shishkina, Oksana; Lomov, Stepan V.
In: Composite structures, Vol. 195, 01.07.2018, p. 74-82.
T1 - X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile
AU - Baran, Ismet
AU - Straumit, Ilya
AU - Shishkina, Oksana
AU - Lomov, Stepan V.
N2 - Critical assessment of the internal geometry after manufacturing of fiber reinforced polymer composites is essential for developing more reliable and robust production. In the present work, manufacturing induced defects such as fiber misalignment and porosity in a glass/polyester pultruded composite profile are evaluated. The internal geometry of the composite is characterized by X-ray micro-computed tomography (micro-CT) and analyzed using the VoxTex software which allows validated and detailed characterization of the internal geometry. Resin rich areas are observed in between the glass rovings at which the unidirectional fibers are misaligned with respect to the desired pulling direction. Results show that the misalignment in in-plane fiber orientation is more severe (30–40°) than the out-plane fiber orientation (10–20°). Two different types of porosities are quantified: the first one is discontinuous and located inside the resin rich areas; the second one is more severe and continuously located between the glass rovings. The area of the total continuous porosity is estimated approximately as 0.212–0.246 mm2 per unit length in the pulling direction. The fiber misalignments and resin rich areas cause 15–20% reduction in the studied part stiffness in the longitudinal direction.
AB - Critical assessment of the internal geometry after manufacturing of fiber reinforced polymer composites is essential for developing more reliable and robust production. In the present work, manufacturing induced defects such as fiber misalignment and porosity in a glass/polyester pultruded composite profile are evaluated. The internal geometry of the composite is characterized by X-ray micro-computed tomography (micro-CT) and analyzed using the VoxTex software which allows validated and detailed characterization of the internal geometry. Resin rich areas are observed in between the glass rovings at which the unidirectional fibers are misaligned with respect to the desired pulling direction. Results show that the misalignment in in-plane fiber orientation is more severe (30–40°) than the out-plane fiber orientation (10–20°). Two different types of porosities are quantified: the first one is discontinuous and located inside the resin rich areas; the second one is more severe and continuously located between the glass rovings. The area of the total continuous porosity is estimated approximately as 0.212–0.246 mm2 per unit length in the pulling direction. The fiber misalignments and resin rich areas cause 15–20% reduction in the studied part stiffness in the longitudinal direction.
U2 - 10.1016/j.compstruct.2018.04.030
DO - 10.1016/j.compstruct.2018.04.030
JO - Composite structures
JF - Composite structures
Baran I, Straumit I, Shishkina O, Lomov SV. X-ray computed tomography characterization of manufacturing induced defects in a glass/polyester pultruded profile. Composite structures. 2018 Jul 1;195:74-82. https://doi.org/10.1016/j.compstruct.2018.04.030


text:
/**
 * Opendrop.
 *
 * @author   Patrick Schroen / https://github.com/pschroen
 * @license  MIT Licensed
 */

/*jshint
 strict:true, boss:true, eqeqeq:true, newcap:false,
 loopfunc:true, shadow:true, browser:true, indent:4
*/

function toTimer(time) {
    "use strict";
    var h, m, s;
    h = Math.floor(time/3600);
    h = isNaN(h) ? '--' : h > 9 ? h : '0'+h;
    m = Math.floor(time/60%60);
    m = isNaN(m) ? '--' : m > 9 ? m : '0'+m;
    s = Math.floor(time%60);
    s = isNaN(s) ? '--' : s > 9 ? s : '0'+s;
    return h+':'+m+':'+s;
}

var background = document.getElementsByClassName('background')[0],
    container = document.getElementsByClassName('container')[0],
    controls = document.getElementsByClassName('controls')[0],
    timecode = controls.getElementsByTagName('code')[0],
    buttons = controls.getElementsByTagName('span'),
    audio = null,
    video = null,
    nowplaying = null,
    timeout = null;

var mediaElements = document.getElementsByClassName('media');
for (var i = 0; i < mediaElements.length; i++) {
    var element = mediaElements[i],
        type = element.getAttribute('data-type'),
        media = null;

    if (/audio/.test(type)) {
        if (!audio) {
            audio = document.createElement('audio');
            audio.ontimeupdate = function () {
                "use strict";
                timecode.innerHTML = toTimer(audio.currentTime);
            };
        }
        media = audio;
    }
    if (/video/.test(type)) {
        if (!video) {
            video = document.createElement('video');
            video.ontimeupdate = function () {
                "use strict";
                timecode.innerHTML = toTimer(video.currentTime);
            };
            background.appendChild(video);
        }
        media = video;
    }
    if (media && media.canPlayType(type)) {
        element.onclick = function () {
            "use strict";
            var href = this.getAttribute('href'),
                type = this.getAttribute('data-type'),
                media = /audio/.test(type) ? audio : /video/.test(type) ? video : null;

            if (media) {
                container.className = 'container fadeout';
                media.src = href;
                media.type = type;
                media.play();
                nowplaying = media;
                background.className = 'background fadein';
                showControls();
            }
            return false;
        };
        element.className = 'media canplay';
    }
}

buttons[0].onclick = function () { // esc
    "use strict";
    if (nowplaying) mediaStop();
    return false;
};

buttons[1].onclick = function () { // space
    "use strict";
    if (nowplaying) mediaTogglePlay();
    return false;
};

buttons[2].onclick = function () { // left
    "use strict";
    if (nowplaying) mediaRewind();
    return false;
};

buttons[3].onclick = function () { // right
    "use strict";
    if (nowplaying) mediaFastForward();
    return false;
};

window.onkeydown = function (e) {
    "use strict";
    if (nowplaying) {
        if (e.keyCode === 27) { // esc
            mediaStop();
        } else {
            if (e.keyCode === 32) { // space
                mediaTogglePlay();
            } else if (e.keyCode === 37) { // left
                mediaRewind();
            } else if (e.keyCode === 39) { // right
                mediaFastForward();
            }
            showControls();
        }
    }
};

window.onmousemove = function (e) {
    "use strict";
    if (nowplaying) showControls();
};

function showControls() {
    "use strict";
    clearTimeout(timeout);
    controls.className = 'controls fadein';
    timeout = setTimeout(function () {
        controls.className = 'controls fadeout';
    }, 5000);
}

function mediaStop() {
    "use strict";
    nowplaying.pause();
    controls.className = 'controls fadeout';
    container.className = 'container fadein';
    nowplaying = null;
}

function mediaTogglePlay() {
    "use strict";
    if (!nowplaying.paused) {
        nowplaying.pause();
    } else {
        nowplaying.play();
    }
}

function mediaRewind() {
    "use strict";
    nowplaying.currentTime -= 30;
}

function mediaFastForward() {
    "use strict";
    nowplaying.currentTime += 30;
}

redpajama_set_name: RedPajamaGithub


Why Are Psychologists Obsessed with Mindfulness?
I was fortunate enough to meet the Dalai Lama as a Freshman in college. What a waste that was. Likely a once-in-a-lifetime opportunity was wasted on a 17-year-old who was nowhere near in thought to mindfulness, elevated planes of consciousness, and probably thought of the tenants of Buddhism as rubbing a fat statue's belly.
Twelve years and 3,000 miles later, I would give my crown chakra to meet him again and ask about the ancient practice of mindfulness. While the practice has expanded from its ancient Buddhist roots to more mainstream psychotherapeutic applications, I would have loved to go straight to the source on this one. After all, have you ever seen anyone that is happier than the Dalai Lama?
According to the American Psychological Association (APA), one of the accrediting bodies for our psychology programs, the benefits of mindfulness extend well beyond emotional intelligence. "Among its theorized benefits are self-control, objectivity, increased tolerance, enhanced flexibility, equanimity, improved concentration, and mental clarity, and the ability to relate to others and one's self with kindness, acceptance, and compassion," wrote APA-authors Daphne M. Davis, PhD, and Jeffrey A. Hayes, PhD.
I was recently introduced to the psychological impact of mindfulness through a California School of Professional Psychology webinar. Before that, I asked myself how effective this practice could be, and why it was of such importance to our professors. As it turns out, teaching future psychologists about mindfulness can make them far more effective practitioners.
A study conducted in 2007 shows that, after nine weeks of treatment, clients of trainees who practiced mindfulness and Zen meditation showed greater reductions in overall symptoms, faster rates of change, scored higher on measures of well-being and perceived their treatment to be more effective than clients of nonmeditating trainees. Shining light on the idea that at Alliant, we really are bettering ourselves — in more ways than one— in order to better the world.
Further empirical evidence shows that mindfulness promotes empathy, improves counseling skills, and even increases patience in therapists. While the efficacy of mindfulness is plain to see in therapy— so much so that it is a tenant of CSPP's integrated psychology emphasis area in the Clinical Psychology PsyD Degree Program — it extends beyond therapy and into the workplace.
Last week, our organizational psychology program hosted a speaker series event titled Exploring Mindfulness to Improve Your Work, Life, and Relationships, featuring doctoral candidate Sarah Maxwell. Sarah introduced participants to key elements of mindfulness, engaged them in some experiential activities to sample some of those elements, and spoke about the increasing attention to mindfulness practices and their benefits in organizations.
I asked Bernardo Ferdman, Ph.D., Distinguished Professor in the Organizational Psychology Program, to tell me why mindfulness has been receiving more attention from organizational psychologists recently. "Mindfulness can help us pay closer attention to our experience and to what is happening around us, and so prepare us to be more effective in interacting with others and in achieving our goals. There is more and more evidence about the benefits of mindfulness practices for many work- and life-related outcomes, including managing stress. Sarah Maxwell's dissertation research on mindfulness, along with the growing body of work in the field, will help us learn more about these benefits and find ways to translate them into practice. In our program, we are eager to support students in learning how to apply this type of knowledge," Ferdman said.
When I moved back to California, I couldn't understand why everyone was obsessed with yoga, after all, San Diego has one of the largest concentrations of yoga studios in the nation. And when I joined the Alliant family and started hearing the word mindfulness over and over again, I didn't understand our professors' obsession with it. A few documentaries, a book or two, and a couple webinars helped me tie it all together. I now understand why so many people are obsessed with meditation and yoga. And I now understand why psychologists are obsessed with mindfulness.
Cielo Villasenor is Alliant's Communications Director.


text:
THE MOST IMPORTANT EVENTS OF 1988
Posted: 7/5/1999 7:40:42 PM
Reprinted from the San Francisco Sunday Examiner and Chronicle
Nearly one in three American adults queried by the National Science Foundation said the sun revolves around the earth.
In another survey, youngsters between 8 and 12 were able to name more brands of alcoholic beverages than former presidents. One 11-year-old boy who named eight brands of beer and wine said there are 16 inches in a foot.
A gerbil was elected president of the student union at the University of East Anglia in England.
An animal rights group bought seven lobsters from a Chinese restaurant in Maryland and flew them to Maine, where a Coast Guard boat took them back to the ocean.
The president of New England's largest electric utility was killed by lightning.
Two men in Sierra Leone dug up a 307-carat diamond--one of the largest ever found--and then broke it into three pieces while arguing over whether it was really a diamond.
Rhode Island's Small Businessman of the Year was indicted on federal charges of racketeering and illegally dumping hazardous waste.
On her tour of America, Queen Silvia of Sweden asked heart surgeon Dr. Michael DeBakey why Americans are so fat.
A bystander watching a despondent man prepare to leap to his death from a bridge above the Los Angeles River approached the jumper to ask for his car since "you're not going to need it any more."
More than 20 Little Leaguers in St. Petersburg, Fla., quit the organization in disgust after watching continuous brawls among their father-coaches.
President Reagan commissioned a Salt Lake City firm to create a jelly-bean-flavoured ice cream.
The White House proclaimed October as National AIDS Awareness Month on November 1.
The Department of Education refused to fund a Holocaust ducation programme for public schools because the curriculum did not take into account the Nazi and Ku Klux Klan points of view.
In confirming that Nancy Reagan consults an astrologer to shape the president's appointment schedule, a White House aide said Reagan approved of the practice, but wanted it "kept very, very secret because he feared the public might misunderstand.
In a speech at the College of Southern Idaho, President-elect Bush said of Reagan: "I'm proud to be his partner. We've had triumphs. We've made mistakes. We've had sex." Bush later said he meant to say "setbacks."
Mother Jones magazine revealed that Reagan, who has opposed laws guaranteeing safer meat, keeps a private herd of organically-fed, hormone-free cattle near his Santa Barbara ranch from which his table-meat is drawn.
A Toronto man was found not guilty of killing his mother-in-law when the jury accepted the defense theory that he drove 14 miles to her house, hit her with an iron bar and stabbed her while sleepwalking.
In San Jose, Calif., a woman was jailed for refusing to clear her small two-bedroom home of 25 tons of rotting, rat-infested garbage. Members of the woman's family said she hated to throw trash away because, "in the future, she might be able to use it for something else."
A San Antonio man arrested for hiring an assassin to slay Mayor Henry Cisneros said he believed the U. S. constitution gave him the right to kill the city's mayor if his policies were unsound.
A judge in Santa Ana, Calif., levied a $58 fine against a driver for a mortuary transport service who failed to convince the court that four frozen cadavers in his van were legal car-pool passengers.
A ten-year-old Tucson boy stole his mother's car and drove it 65 miles to the Mexican border where he tried to sell it.
A Houston man, paralyzed from the neck down, killed his wife by mounting a pistol on his wheelchair and pulling the trigger by tugging on a string held in his mouth.
A Denver man, dissatisfied with the haircut he had just received--a total scalp-shave that left a bloody three-inch scar on the back of his head--returned to the salon and killed the barber.
In Ottawa, a man killed 22 neighborhood house cats, telling police he was distraught because his own cat had rejected him.
A jury in San Luis Obispo, Calif., awarded $6 million in damages to a woman whose jealous ex-husband, a gynecologist, sewed her vagina shut while she was undergoing a hysterectomy
performed by another doctor. Meanwhile, in Hong King, a woman went to jail after cutting off the tip of her sleeping husband's penis with a pair of scissors and flushing it down
the toilet. In both cases, the perpetrators were convinced their victims had been seeing other people.
A spokesman for the California Board of Dental Examiners revealed the board's enforcement personnel carry guns because "There are some dentists out there who have a criminal kind of leaning."
Herbert Connolly of Newton, Mass., got to the polls minutes late on Election Day and was unable to cast his ballot. He lost his seat on the Massachusetts Governor's Council by one vote.
The FBI said it had conducted six years of surveillance on a 17-year-old New Jersey student ever since, as a sixth-grader, he wrote to the Soviet Union asking for scientific information for a school project.
The city of Honolulu paid $100,000 to a man who had been forced by two police officers to bob for toads in a drainage ditch.
The Centers for Disease Control gave Baltimore a $48,000 grant to scoop up used condoms at a sewer treatment plant to count how many city residents use "safe sex" measures.
Michelle Corwin, San Francisco's registrar of voters, quit abruptly three weeks before November's election, which featured the longest ballot in the city's history. An "astonished" Chief Administrative Officer Rudy Nothenberg said, "Her letter
indicated that, since she was planning to leave in January and because there was a lot of unpleasant work to be done between now and then, she would just leave now and save herself the trouble."
Media mogul Rupert Murdoch, whose Fox Television Network was presenting "The Late Show" hosted by comedian Arsenio Hall, was approached by Hall in the parking lot of a Los Angeles restaurant. Murdoch handed Hall his valet parking stub and said, "It's the green Jaguar."
Giving new meaning to the term "white sale," a chain store in Newark was found to have a memo posted by the cash register that read: "If any black person returns any sheet sets, deny a cash voucher or exchange or credit for any reason."
Touring Ireland, Michael Jackson refused to kiss the Blarney Stone, saying, "No way am I going to kiss that thing. I might get AIDS or something worse."
Nevada Gaming Control Board agents found a printing plate used by the Imperial Palace Casino in Las Vegas to print bumper stickers saying "Hitler Was Right." The agents also found a private room at the casino where owner Ralph Engelstad held private parties amidst his collection of Nazi war memorabilia.
In a TV interview, House of Representatives Republican leader Robert Michel bemoaned the end of black-face minstrel shows, saying, "I used to love to imitate Amos 'n Andy."
During a meeting with gay leaders in Garden Grove, Los Angeles County, the wife of U.S. Rep. Robert Dornan yelled, "Shut up, fag!" to a member of the audience. She later apologized, saying she was distraught because her brother was dying of AIDS. The brother volunteered for an HIV test arranged by the Los Angeles Times. It was negative.
After a 19-year old black woman was found beaten to death with the letters "KKK" carved in her body, the Kingston, N.Y., district attorney said, "One investigative lead we are pursuing is that the murder may have been racially motivated."
Federal agents in New York seized 5,000 pounds of pure cocaine and $2 million in case stuffed into bags labeled "Just Say No To Drugs."
Mexican drug smugglers reportedly put out $30,000 contracts on Rocky, Duko, and Barco--three narcotics-sniffing dogs working the U.S.-Mexican border. The dogs were thereupon fitted with bulletproof vests.
An Oakland woman was charged with assault after shooting her 16-year-old daughter because the youngster refused to sell her $20 worth of rock cocaine.
Coors paid a six-figure settlement to an Austin, Texas, police officer who seven years ago found the headless body of a mouse in a bottle of Coors beer he was drinking. Since the incident, the policeman has been unable to watch television shows with beer commercials in them, has developed a fear of rodents that ended his hunting career and becomes physically ill when arresting driving-while-intoxicated suspects who have liquor on their breath.
Los Angeles astrologer Rockie Gardiner said the planet that rules television is Uranus.
In the ultimate answer to those who think professional wrestling is faked, a 336-pound British grappler named Big Daddy killed his 350-pound opponent, King Kong Kirk, by executing his famous "splashdown" maneuver on the prostrate Kirk during a match in Great Yarmouth. It took eight men to lift Kirk's stretcher into the ambulance.
A 51-year-old Peoria woman went into her house, grabbed her husband's souvenir bayonet and ran it through the head of a man who'd dropped a beer can in her yard and refused to pick it up.
A $300 million B-1B bomber crashed, killing three crew members,
after being hit by a pelican.
A man getting a haircut in a Boston barber's chair was paralyzed from the neck down when a carpenter working on an adjoining building fired a high-velocity stud gun through a
wall, hitting the victim in the neck.
A 34-year-old Pontiac, Mich., man who lost an eye after a skyrocket exploded in his face during a backyard July 4th celebration sued his parents because, he said, they didn't have
a permit for a fireworks display and should have stopped him from using fireworks because he was obviously drunk.
A bored pediatrician from Redlands, Calif., admitted he faked his own attempted murder, including inserting a spent bullet into his abdomen and burning his penis to fake a sexual attack. The doctor burned and bruised his skin with a grinding tool, anesthetized his head and abdomen and jammed a rod into those areas to simulate being shot and then pushed a spent .32-caliber projectile into his stomach. After that he burned himself to make it appear he'd been sodomized with a flaming object. Then he injected himself with Demerol, bound his own legs, wrists and neck and lay down on the sidewalk, where police found him unconscious and injured.
Because the groom "looked very feminine and was heavily made up," a court officer in Copenhagen asked him to drop his pants to prove he was a man before the wedding ceremony could proceed.
A Florida woman whose appeals for public help generated $689,000 in donations for her son's unsuccessful liver transplants refused to pay the boy's hospital bill after his death and allegedly spent much of the money on herself and her boyfriend, buying jewelry, property and a BMW.
Nine days after Los Angeles Dodgers manager Tommy Lasorda hosted a celebration party at his restaurant for the World Series champions, Los Angeles County health officials closed
Tommy Lasorda's Rigs & Pasta for "one of the worst rat infestations" the health inspector had ever seen.
The widow and two children of a Knoxville, Ill., man tended his body for eight years after his death, changing his clothing and putting fresh sheets on his bed in the apparent belief that he was just sick. The widow and her new boyfriend, a dentist, told police they were using potent herbal healing techniques on the mummified corpse.
A woman in Louisville, Ky., tried to submit as a contest entry a display of nine dead animals--four squirrels, two opossums, two house cats and a chicken--wired to a board in the shape of a radio station's call letters. She was cited by the local animal protection agency.
A defense attorney in Sonora, Calif., appealed his client's burglary conviction on the ground that the prosecutor disrupted the four-week trial by repeatedly passing gas. The defense lawyer charged "misconduct" on the part of the prosecutor, who, he said, "farted about 100 times during the trial. He even lifted his leg." The lawyer said the tactic was particularly disturbing to the jury during the defense's closing argument.


Recipe by Contributing Writer G. Thurman.
Good food is a thing of beauty and joy in life. Food has the ability to lift a person's spirits, satisfy hunger and comfort the mind. Nowhere is this more apparent than on long wilderness backpacking and hunting trips. There are a plethora of options out there today on the market for freeze dried back packing food that provide much needed calories with minimal weight. My biggest complaint about these meals is the sodium content is astronomical and after about day three of eating them, to me they all taste the same.
After my last high country deer hunt I knew there had to be a way to make my own meals that were palatable but also provided the necessary nutrition for these types of calorie burning activities. This is when I invested in a bigger home dehydrator and a couple of other simple tools to make my own meals.
For making your own dehydrated meals you will need a dehydrator that you can control the drying temperature. Solid tray liners for drying, I personally like the silicone kind that are primarily sold to make fruit leather as they are easy to clean, and a vacuum food sealer to package and help preserve the meals. For reference on drying times, temperatures and general food preparation on dehydrating, I highly recommend the book, Trail Food: Drying and Cooking Food for Backpacking and Paddling by: Alan Kesselheim.
When preparing these meals the combination is only limited by your imagination. Fruit, vegetables, and meat can all be dehydrated to create a meal. You can dehydrate ingredients separately but most meals can be dried all together. I personally like hearty meals on the trail that fill me up and keep a good calorie burn throughout the day. My favorite trail meal is homemade venison spaghetti with spaghetti squash instead of noodles for that added nutrient boost.
Once the meat is browned add the quart jar of marinara sauce, and all other ingredients to the skillet and allow too simmer for 15 minutes.
Spread the cooked mixture onto the lined dehydrator trays as evenly as possible and about a half inch thick.
When ready to cook your meal it is as easy as adding boiling water to the mixture. You can cook it in a pot allowing it to simmer for 10-15 minutes. My preferred way is to dump it in a quart size freezer Ziploc bag, add six to 8 ounces of boiling water, seal the bag and let it set for 10-15 minutes. Making your own meals for back country hunting is just another way to personalize the adventure with the added bonus of knowing exactly what is going into your body.
The Best Beer Battered Fish and Chips… Ever!


text:
package com.siimkinks.sqlitemagic.writer;

import com.siimkinks.sqlitemagic.Environment;
import com.siimkinks.sqlitemagic.WriterUtil;
import com.siimkinks.sqlitemagic.element.ColumnElement;
import com.siimkinks.sqlitemagic.element.ExtendedTypeElement;
import com.siimkinks.sqlitemagic.element.IndexElement;
import com.siimkinks.sqlitemagic.element.TableElement;
import com.siimkinks.sqlitemagic.element.TransformerElement;
import com.siimkinks.sqlitemagic.element.ViewElement;
import com.siimkinks.sqlitemagic.processing.GenClassesManagerStep;
import com.siimkinks.sqlitemagic.structure.MigrationsHandler;
import com.siimkinks.sqlitemagic.util.Callback2;
import com.siimkinks.sqlitemagic.util.Dual;
import com.siimkinks.sqlitemagic.util.FormatData;
import com.siimkinks.sqlitemagic.util.TopsortTables;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;

import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.annotation.processing.Filer;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;

import static com.siimkinks.sqlitemagic.Const.CLASS_MODIFIERS;
import static com.siimkinks.sqlitemagic.Const.STATIC_METHOD_MODIFIERS;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_CLEAR_DATA;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_COLUMN_FOR_VALUE;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_CONFIGURE_DATABASE;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_CREATE_SCHEMA;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_GET_DB_NAME;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_GET_DB_VERSION;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_GET_NR_OF_TABLES;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_GET_SUBMODULE_NAMES;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_IS_DEBUG;
import static com.siimkinks.sqlitemagic.GlobalConst.METHOD_MIGRATE_VIEWS;
import static com.siimkinks.sqlitemagic.WriterUtil.COLUMN;
import static com.siimkinks.sqlitemagic.WriterUtil.FROM;
import static com.siimkinks.sqlitemagic.WriterUtil.MUTABLE_INT;
import static com.siimkinks.sqlitemagic.WriterUtil.NON_NULL;
import static com.siimkinks.sqlitemagic.WriterUtil.NOT_NULLABLE_COLUMN;
import static com.siimkinks.sqlitemagic.WriterUtil.NULLABLE;
import static com.siimkinks.sqlitemagic.WriterUtil.SIMPLE_ARRAY_MAP;
import static com.siimkinks.sqlitemagic.WriterUtil.SQL_UTIL;
import static com.siimkinks.sqlitemagic.WriterUtil.STRING;
import static com.siimkinks.sqlitemagic.WriterUtil.STRING_ARRAY_SET;
import static com.siimkinks.sqlitemagic.WriterUtil.SUPPORT_SQLITE_DATABASE;
import static com.siimkinks.sqlitemagic.WriterUtil.SUPPRESS_WARNINGS;
import static com.siimkinks.sqlitemagic.WriterUtil.TABLE;
import static com.siimkinks.sqlitemagic.WriterUtil.UTIL;
import static com.siimkinks.sqlitemagic.WriterUtil.addDebugLogging;
import static com.siimkinks.sqlitemagic.WriterUtil.anyWildcardTypeName;
import static com.siimkinks.sqlitemagic.WriterUtil.createMagicInvokableMethod;
import static com.siimkinks.sqlitemagic.WriterUtil.notNullParameter;
import static com.siimkinks.sqlitemagic.WriterUtil.nullableParameter;
import static com.siimkinks.sqlitemagic.util.NameConst.FIELD_TABLE_SCHEMA;
import static com.siimkinks.sqlitemagic.util.NameConst.FIELD_VIEW_QUERY;
import static com.siimkinks.sqlitemagic.util.NameConst.METHOD_COLUMN_FOR_VALUE_OR_NULL;
import static com.siimkinks.sqlitemagic.util.NameConst.PACKAGE_ROOT;
import static com.siimkinks.sqlitemagic.writer.ColumnClassWriter.VAL_VARIABLE;
import static com.siimkinks.sqlitemagic.writer.EntityEnvironment.getGeneratedHandlerClassName;
import static com.siimkinks.sqlitemagic.writer.ModelWriter.MODULE_NAME_VARIABLE;

@Singleton
public class GenClassesManagerWriter {

  @Inject
  public GenClassesManagerWriter() {
  }

  public void writeSource(Environment environment, GenClassesManagerStep managerStep) throws IOException {
    final List<Dual<TypeElement, String>> submoduleDatabases = environment.getSubmoduleDatabases();
    if (!environment.getAllTableElements().isEmpty() || (submoduleDatabases != null && !submoduleDatabases.isEmpty())) {
      MigrationsHandler.Companion.handleDebugMigrations(environment, managerStep);

      final Filer filer = environment.getFiler();
      final String className = environment.getGenClassesManagerClassName();
      TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className)
          .addModifiers(CLASS_MODIFIERS)
          .addMethod(databaseConfigurator(environment, className))
          .addMethod(databaseSchemaCreator(environment, managerStep, className))
          .addMethod(clearData(environment, className))
          .addMethod(migrateViews(environment, managerStep, className))
          .addMethod(nrOfTables(environment, className));

      if (!environment.isSubmodule()) {
        classBuilder
            .addMethod(columnForValue(environment, managerStep, className))
            .addMethod(dbVersion(environment, className))
            .addMethod(dbName(environment, className))
            .addMethod(submoduleNames(environment, className))
            .addMethod(isDebug(environment, className));
      } else {
        classBuilder.addMethod(columnForValueOrNull(environment, managerStep, className));
      }
      WriterUtil.writeSource(filer, classBuilder.build(), PACKAGE_ROOT);
    }
  }

  private MethodSpec databaseConfigurator(Environment environment, String className) {
    final MethodSpec.Builder method = createMagicInvokableMethod(className, METHOD_CONFIGURE_DATABASE)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .addParameter(SUPPORT_SQLITE_DATABASE, "db");
    if (hasAnyForeignKeys(environment.getAllTableElements())) {
      method.addStatement("db.setForeignKeyConstraintsEnabled(true)");
    }
    forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
      @Override
      public void call(TypeMirror type, String moduleName) {
        method.addStatement("$T.$L(db)",
            type,
            METHOD_CONFIGURE_DATABASE);
      }
    });
    return method.build();
  }

  private boolean hasAnyForeignKeys(List<TableElement> allTableElements) {
    for (TableElement allTableElement : allTableElements) {
      for (ColumnElement columnElement : allTableElement.getColumnsExceptId()) {
        if (columnElement.isOnDeleteCascade()) {
          return true;
        }
      }
    }
    return false;
  }

  private MethodSpec databaseSchemaCreator(Environment environment, GenClassesManagerStep managerStep, String className) {
    final MethodSpec.Builder method = createMagicInvokableMethod(className, METHOD_CREATE_SCHEMA);
    final CodeBlock.Builder sqlTransactionBody = CodeBlock.builder();
    addSubmoduleSchemasIfNeeded(environment, sqlTransactionBody);
    sqlTransactionBody.add(buildSchemaCreations(environment));
    sqlTransactionBody.add(buildViewSchemaCreations(managerStep));
    sqlTransactionBody.add(buildIndicesCreations(managerStep));
    return WriterUtil.buildSqlTransactionMethod(method, sqlTransactionBody.build());
  }

  private void addSubmoduleSchemasIfNeeded(Environment environment, final CodeBlock.Builder sqlTransactionBody) {
    forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
      @Override
      public void call(TypeMirror type, String moduleName) {
        sqlTransactionBody.addStatement("$T.$L(db)",
            type,
            METHOD_CREATE_SCHEMA);
      }
    });
  }

  private CodeBlock buildSchemaCreations(Environment environment) {
    CodeBlock.Builder builder = CodeBlock.builder();
    addDebugLogging(builder, "Creating tables");
    for (TableElement tableElement : TopsortTables.sort(environment)) {
      ClassName modelHandler = getGeneratedHandlerClassName(tableElement);
      builder.addStatement("db.execSQL($T.$L)", modelHandler, FIELD_TABLE_SCHEMA);
    }
    return builder.build();
  }

  private CodeBlock buildViewSchemaCreations(GenClassesManagerStep managerStep) {
    final CodeBlock.Builder builder = CodeBlock.builder();
    final List<ViewElement> allViewElements = managerStep.getAllViewElements();
    if (!allViewElements.isEmpty()) {
      addDebugLogging(builder, "Creating views");
      for (ViewElement viewElement : allViewElements) {
        final ClassName viewDao = EntityEnvironment.getGeneratedDaoClassName(viewElement);
        builder.addStatement("$T.createView(db, $T.$L, $S)",
            SQL_UTIL,
            viewDao,
            FIELD_VIEW_QUERY,
            viewElement.getViewName());
      }
    }
    return builder.build();
  }

  private CodeBlock buildIndicesCreations(GenClassesManagerStep managerStep) {
    final CodeBlock.Builder builder = CodeBlock.builder();
    final List<IndexElement> allIndexElements = managerStep.getAllIndexElements();
    if (!allIndexElements.isEmpty()) {
      addDebugLogging(builder, "Creating indices");
      for (IndexElement indexElement : allIndexElements) {
        builder.addStatement("db.execSQL($S)", indexElement.indexSQL());
      }
    }
    return builder.build();
  }

  private MethodSpec clearData(Environment environment, String className) {
    final MethodSpec.Builder method = createMagicInvokableMethod(className, METHOD_CLEAR_DATA)
        .returns(STRING_ARRAY_SET)
        .addAnnotation(NON_NULL);
    final CodeBlock.Builder body = CodeBlock.builder();
    body.addStatement("final $1T allChangedTables = new $1T($2L(null))",
        STRING_ARRAY_SET, METHOD_GET_NR_OF_TABLES);
    addSubmodulesClearDataIfNeeded(environment, body);
    addDebugLogging(body, "Clearing data");
    final CodeBlock.Builder resultBuilder = CodeBlock.builder()
        .add("allChangedTables.addAll(new String[]{");
    boolean firstTime = true;
    for (TableElement tableElement : environment.getAllTableElements()) {
      final String tableName = tableElement.getTableName();
      body.addStatement("db.execSQL($S)", "DELETE FROM " + tableName);
      if (firstTime) {
        firstTime = false;
      } else {
        resultBuilder.add(", ");
      }
      resultBuilder.add("$S", tableName);
    }
    resultBuilder.add("});\n");
    resultBuilder.addStatement("return allChangedTables");
    return WriterUtil.buildSqlTransactionMethod(method, body.build(), resultBuilder.build(), true)
        .toBuilder()
        .build();
  }

  private void addSubmodulesClearDataIfNeeded(Environment environment, final CodeBlock.Builder body) {
    forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
      @Override
      public void call(TypeMirror type, String moduleName) {
        body.addStatement("allChangedTables.addAll($T.$L(db))",
            type,
            METHOD_CLEAR_DATA);
      }
    });
  }

  private MethodSpec migrateViews(Environment environment, GenClassesManagerStep managerStep, String className) {
    final MethodSpec.Builder builder = createMagicInvokableMethod(className, METHOD_MIGRATE_VIEWS)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .addParameter(SUPPORT_SQLITE_DATABASE, "db");

    forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
      @Override
      public void call(TypeMirror type, String moduleName) {
        builder.addStatement("$T.$L(db)",
            type,
            METHOD_MIGRATE_VIEWS);
      }
    });

    final List<ViewElement> allViewElements = managerStep.getAllViewElements();
    if (!allViewElements.isEmpty()) {
      addDebugLogging(builder, "Migrating views");
      for (ViewElement viewElement : allViewElements) {
        builder.addStatement("db.execSQL($S)",
            "DROP VIEW IF EXISTS " + viewElement.getViewName());

        final ClassName viewDao = EntityEnvironment.getGeneratedDaoClassName(viewElement);
        builder.addStatement("$T.createView(db, $T.$L, $S)",
            SQL_UTIL,
            viewDao,
            FIELD_VIEW_QUERY,
            viewElement.getViewName());
      }
    }
    return builder.build();
  }

  private MethodSpec submoduleNames(Environment environment, String className) {
    final MethodSpec.Builder builder = createMagicInvokableMethod(className, METHOD_GET_SUBMODULE_NAMES)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .addAnnotation(NULLABLE)
        .returns(String[].class);
    if (!environment.hasSubmodules()) {
      builder.addStatement("return null");
    } else {
      builder.addCode("return new String[] {");
      forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
        int i = 0;

        @Override
        public void call(TypeMirror type, String moduleName) {
          if (i > 0) {
            builder.addCode(", ");
          }
          builder.addCode("$S", moduleName);
          i++;
        }
      });
      builder.addCode("};\n");
    }
    return builder.build();
  }

  private MethodSpec nrOfTables(Environment environment, String className) {
    final MethodSpec.Builder builder = createMagicInvokableMethod(className, METHOD_GET_NR_OF_TABLES)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .addParameter(nullableParameter(STRING, MODULE_NAME_VARIABLE))
        .returns(TypeName.INT);
    final boolean hasSubmodules = environment.hasSubmodules();
    final CodeBlock.Builder resultBuilder = CodeBlock.builder();
    if (hasSubmodules) {
      resultBuilder.beginControlFlow("if ($L == null)", MODULE_NAME_VARIABLE);
    }
    final int moduleNrOfTables = environment.getAllTableElements().size();
    resultBuilder.add("return $L", moduleNrOfTables);
    forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
      @Override
      public void call(TypeMirror type, String moduleName) {
        resultBuilder.add(" + $T.$L(null)",
            type,
            METHOD_GET_NR_OF_TABLES);
      }
    });
    resultBuilder.add(";\n");
    if (hasSubmodules) {
      resultBuilder.endControlFlow();
      resultBuilder.beginControlFlow("switch ($L)", MODULE_NAME_VARIABLE);
      final CodeBlock.Builder switchBody = CodeBlock.builder();
      forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
        @Override
        public void call(TypeMirror type, String moduleName) {
          switchBody.add("case $S:\n", moduleName)
              .indent()
              .addStatement("return $T.$L($L)",
                  type,
                  METHOD_GET_NR_OF_TABLES,
                  MODULE_NAME_VARIABLE);
          switchBody.unindent();
        }
      });
      switchBody.add("default:\n")
          .indent()
          .addStatement("return $L", moduleNrOfTables)
          .unindent();
      resultBuilder.add(switchBody.build());
      resultBuilder.endControlFlow();
    }
    return builder
        .addCode(resultBuilder.build())
        .build();
  }

  private MethodSpec dbVersion(Environment environment, String className) {
    final Integer dbVersion = environment.getDbVersion();
    return createMagicInvokableMethod(className, METHOD_GET_DB_VERSION)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .returns(TypeName.INT)
        .addStatement("return $L", (dbVersion != null) ? dbVersion : 1)
        .build();
  }

  private MethodSpec dbName(Environment environment, String className) {
    return createMagicInvokableMethod(className, METHOD_GET_DB_NAME)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .returns(String.class)
        .addStatement("return $L", environment.getDbName())
        .build();
  }

  private MethodSpec isDebug(Environment environment, String className) {
    return createMagicInvokableMethod(className, METHOD_IS_DEBUG)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .returns(TypeName.BOOLEAN)
        .addStatement("return $L", environment.isDebugVariant())
        .build();
  }

  private MethodSpec columnForValue(Environment environment, GenClassesManagerStep managerStep, String className) {
    final TypeVariableName valType = TypeVariableName.get("V");
    final ParameterizedTypeName returnType = ParameterizedTypeName.get(COLUMN,
        valType, valType, valType,
        anyWildcardTypeName(), NOT_NULLABLE_COLUMN);
    final MethodSpec.Builder builder = createMagicInvokableMethod(className, METHOD_COLUMN_FOR_VALUE)
        .addTypeVariable(valType)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .addParameter(notNullParameter(valType, VAL_VARIABLE))
        .addAnnotation(AnnotationSpec
            .builder(SUPPRESS_WARNINGS)
            .addMember("value", "$S", "unchecked")
            .build())
        .returns(returnType)
        .beginControlFlow("if ($L == null)", VAL_VARIABLE)
        .addStatement("throw new $T($S)", NullPointerException.class, "Value cannot be null")
        .endControlFlow()
        .addStatement("final $T className = val.getClass().getCanonicalName()", STRING)
        .addStatement("final $T strVal", STRING)
        .beginControlFlow("switch (className)");
    final CodeBlock.Builder switchBody = columnForValueSwitchBody(environment, managerStep);
    switchBody.add("default:\n")
        .indent();
    forEachSubmoduleDatabase(environment, new Callback2<TypeMirror, String>() {
      int i = 0;

      @Override
      public void call(TypeMirror type, String moduleName) {
        final String tmpVariableName = "_" + i;
        switchBody.addStatement("final $T $L = $T.$L(className, $L)",
            returnType,
            tmpVariableName,
            type,
            METHOD_COLUMN_FOR_VALUE_OR_NULL,
            VAL_VARIABLE)
            .beginControlFlow("if ($L != null)", tmpVariableName)
            .addStatement("return $L", tmpVariableName)
            .endControlFlow();
        i++;
      }
    });
    switchBody.addStatement("return new $T<>($T.ANONYMOUS_TABLE, \"'\" + val.toString() + \"'\", false, $T.STRING_PARSER, false, null)",
        COLUMN,
        TABLE,
        UTIL)
        .unindent();
    builder.addCode(switchBody.build())
        .endControlFlow();
    return builder.build();
  }

  private MethodSpec columnForValueOrNull(Environment environment, GenClassesManagerStep managerStep, String className) {
    final TypeVariableName valType = TypeVariableName.get("V");
    final ParameterizedTypeName returnType = ParameterizedTypeName.get(COLUMN,
        valType, valType, valType,
        anyWildcardTypeName(), NOT_NULLABLE_COLUMN);
    final MethodSpec.Builder builder = MethodSpec.methodBuilder(METHOD_COLUMN_FOR_VALUE_OR_NULL)
        .addTypeVariable(valType)
        .addModifiers(STATIC_METHOD_MODIFIERS)
        .addAnnotation(NULLABLE)
        .addParameter(notNullParameter(STRING, "className"))
        .addParameter(notNullParameter(valType, VAL_VARIABLE))
        .returns(returnType)
        .addStatement("final $T strVal", STRING)
        .beginControlFlow("switch (className)");
    final CodeBlock.Builder switchBody = columnForValueSwitchBody(environment, managerStep);
    switchBody.add("default:\n")
        .indent()
        .addStatement("return null")
        .unindent();
    builder.addCode(switchBody.build())
        .endControlFlow();
    return builder.build();
  }

  private CodeBlock.Builder columnForValueSwitchBody(Environment environment, GenClassesManagerStep managerStep) {
    int i = 0;
    final boolean submodule = environment.isSubmodule();
    final Collection<TransformerElement> transformers = managerStep.getAllTransformerElements().values();
    final Map<String, Integer> transformerRepetitions = findTransformerRepetitions(transformers);
    final Set<String> handledTransformers = new HashSet<>(transformers.size());
    final CodeBlock.Builder switchBody = CodeBlock.builder();
    for (TransformerElement transformer : transformers) {
      if (submodule && transformer.isDefaultTransformer()) {
        continue;
      }
      final String qualifiedDeserializedName = transformer.getQualifiedDeserializedName();
      if (handledTransformers.contains(qualifiedDeserializedName)) {
        continue;
      }
      handledTransformers.add(qualifiedDeserializedName);
      switchBody.add("case $S:\n", qualifiedDeserializedName)
          .indent();
      final Integer repetitionCount = transformerRepetitions.get(qualifiedDeserializedName);
      if (repetitionCount > 1) {
        switchBody.addStatement("throw new $T($S)",
            UnsupportedOperationException.class,
            "Unable to disambiguate transformer for " + qualifiedDeserializedName)
            .unindent();
        continue;
      }
      final String objValName = "objVal" + i;
      switchBody.addStatement("final $1T $2L = ($1T) $3L",
          transformer.getDeserializedType().asTypeName(),
          objValName,
          VAL_VARIABLE);
      final ExtendedTypeElement serializedType = transformer.getSerializedType();
      final FormatData valueGetter = transformer.serializedValueGetter(objValName);
      if (serializedType.isPrimitiveElement()) {
        final TypeName boxedType = TypeName.get(serializedType.getTypeMirror()).box();
        switchBody.addStatement(String.format("strVal = $T.toString(%s)", valueGetter.getFormat()),
            valueGetter.getWithOtherArgsBefore(boxedType));
      } else if (serializedType.isStringType(environment)) {
        switchBody.addStatement(valueGetter.formatInto("strVal = %s"), valueGetter.getArgs());
      } else {
        switchBody.addStatement(String.format("strVal = %s.toString()", valueGetter.getFormat()),
            valueGetter.getArgs());
      }
      switchBody.addStatement("return new $T($T.ANONYMOUS_TABLE, strVal, $T.$L, false, null)",
          ClassName.get(PACKAGE_ROOT, ColumnClassWriter.getClassName(transformer)),
          TABLE,
          UTIL,
          transformer.cursorParserConstantName(environment, false))
          .unindent();
      i++;
    }
    return switchBody;
  }

  private static Map<String, Integer> findTransformerRepetitions(Collection<TransformerElement> transformers) {
    final HashMap<String, Integer> transformerRepetitions = new HashMap<>(transformers.size());
    for (TransformerElement transformer : transformers) {
      final String qualifiedDeserializedName = transformer.getQualifiedDeserializedName();
      final Integer repetitionCount = transformerRepetitions.get(qualifiedDeserializedName);
      if (repetitionCount != null) {
        transformerRepetitions.put(qualifiedDeserializedName, repetitionCount + 1);
      } else {
        transformerRepetitions.put(qualifiedDeserializedName, 1);
      }
    }
    return transformerRepetitions;
  }

  static ParameterSpec columnsParam() {
    return ParameterSpec.builder(ParameterizedTypeName.get(SIMPLE_ARRAY_MAP, STRING, TypeName.INT.box()),
        "columns")
        .addAnnotation(NULLABLE)
        .addModifiers(Modifier.FINAL)
        .build();
  }

  static ParameterSpec columnOffsetParam() {
    return ParameterSpec.builder(MUTABLE_INT, "columnOffset")
        .addAnnotation(NON_NULL)
        .build();
  }

  static ParameterSpec fromSelectClauseParam() {
    return ParameterSpec.builder(FROM,
        "from")
        .addAnnotation(NON_NULL)
        .build();
  }

  static ParameterSpec selectFromTablesParam() {
    return ParameterSpec.builder(STRING_ARRAY_SET,
        "selectFromTables")
        .addAnnotation(NULLABLE)
        .build();
  }

  static ParameterSpec tableGraphNodeNamesParam() {
    return ParameterSpec.builder(ParameterizedTypeName.get(SIMPLE_ARRAY_MAP, STRING, STRING),
        "tableGraphNodeNames")
        .addModifiers(Modifier.FINAL)
        .build();
  }

  static ParameterSpec select1Param() {
    return ParameterSpec.builder(TypeName.BOOLEAN,
        "select1")
        .build();
  }

  private static void forEachSubmoduleDatabase(Environment environment, Callback2<TypeMirror, String> callback) {
    final List<Dual<TypeElement, String>> submoduleDatabases = environment.getSubmoduleDatabases();
    if (submoduleDatabases != null && !submoduleDatabases.isEmpty()) {
      for (Dual<TypeElement, String> element : submoduleDatabases) {
        callback.call(element.getFirst().asType(), element.getSecond());
      }
    }
  }
}