text:
Five ways to combat mental fatigue
As We Age Tips to help you care for your loved one
As We Age How to be a smart e-health consumer
By Kate Silver
Illness can be exhausting and not just in the physical sense. When someone learns they have a chronic disease, whether it's cancer, leukemia or another condition, it can be a lifealtering experience, according to Rosalind S. Dorlen, PsyD, a clinical psychologist at Overlook Medical Center in Summit, NJ. "It's rare that I come across a person, post diagnosis, who hasn't experienced shock, fear or denial," says Dorlen. Many can feel like their prior sense of comfort, joy and connection with the world is somehow violated. "It can often create feelings of chaos and confusion, which can lead to a complete mental overload."
Not to mention exhaustion. There are doctors' visits, treatments, possible complications, insurance and financial concerns, appointments with specialists, excessive online information and worrying about what the present and future hold. With all these burning questions surrounding chronic disease—which Dorlen refers to as a person's "new normal"—it can bring on a profound sense of emotional fatigue. "When we are dealing with this kind of fatigue, it means a person is likely experiencing really difficult thoughts, feelings and attitudes," says Dorlen. Just as the fatigue itself can be a result of mental exhaustion, the response to it may be a matter of mental conditioning. Dorlen shared this advice on how to cope with chronic illness and the psychological fatigue it may bring.
Attitude can make a difference
How a person copes with bad news isn't just about the bad news itself. The person's own thoughts and perceptions make a big difference as well, advises Dorlen. "It's our attitude that may determine how resilient or not resilient we are or how we react to a health crisis," she says. According to Dorlen, there are certain traits that can help you cope better with illness, and one of those is flexibility. "Maintaining a flexible mindset can give you a better capacity for resilience," she says. Maybe flexibility isn't your thing? The good news—it can be learned. Dorlen says to start by mixing up your routine. It could be writing with your nondominant hand, taking a different route to work or shopping at an off-the-beaten-path store. "Though simple, these small experiments are activities that can help you enhance your flexibility and turn it into a skill," she notes.
"I ask most of the people I work with to think about gratitude every day," says Dorlen. She asks her patients to keep a journal and write down three things each day that they appreciate. These could be simple things, like the sunrise, a tasty meal or a beautiful flower. It makes a difference. "When you are challenged with life circumstances that are beyond your control, a dose of appreciation can help change your outlook," she says.
When you're exhausted, everything feels a little more difficult. A cheeseburger might sound better than a salad. Making it to the gym might seem like a feat of impossible strength. If you're stressed and worried, even getting a full night's sleep might sound like a fantasy, despite your exhaustion. But it's important to strive for a healthy routine. "No matter your circumstances—self-care must be a priority," insists Dorlen. By eating a nutritious diet and working toward quality sleep, you may improve not only your outlook, but your energy levels. Also, by incorporating some kind of physical activity, you may also see big returns. "Exercise reduces anxiety and enhances well-being, and I tell that to every patient I see," says Dorlen. (Note: Always consult a doctor before starting any new health routine.)
Lower your stress levels
A chronic illness can add a whole new level of stress to your life. Dorlen encourages engaging in mindful meditation as a way to manage stress. "You don't have to go to a dedicated meditation studio either; there are many different apps available that help you practice mindfulness in your own home and throughout the day," she says.
Spend time with others
Being around other people can help you become more understanding, and that, in turn, can inform you on your own journey, notes Dorlen. "We found that one thing that may help people cope with illness and the potential side effects of illness has to do with nurturing their own empathy," she says. She suggests a number of ways of connecting with others: find a support group that helps people with your illness; visit your local community or senior center and spend time with new faces; lend a helping hand at a volunteer organization and reach out to friends and family to schedule get-togethers.
You can't control being ill, but you can control how you respond to that illness, and that response can empower and energize you. Dorlen says that when people get over the initial shock and isolation of chronic illness, there may be a silver lining. "It can move you to 'rally your resources' and reach out," she says. "Often, before you know it, you've created a new community." That, in turn, can lead to growth, understanding and a deeper appreciation for allthat you have.
The information contained within this article is based upon the knowledge and opinions of the author and experts.
Education, Bladder, Blood, Breast, Colorectal, Kidney, Lung, Pancreatic, Prostate, Skin, Other
Dealing with a difficult choice—hospice care
Find out how hospice care can provide comfort for you and your loved one.
15 Common Cancer Words
Knowing these cancer terms may help support your conversations with your healthcare team.
Five tips to create a wellness-focused mind and body
Wellness is an ongoing, intentional way to live your best life. An exercise specialist shares five tips to support your personal wellness.


text:
Person: Gelbrich, Thomas
(2-(Phenyliminomethyl)phenyl)-(trifluoroacetato)-(triphenylphosphine)-palladium. C33H25F3NO2PPd [eCrystal]
Scordia, V. J. M. and Hursthouse, Michael B. and Gelbrich, Thomas and Coles, Simon J. and Cazin, C. S. J. and Bedford, R. B. (2001)
(3a-Methyl-1a-trimethylsilanyl-hexahydro-4,5-diaza-cyclopropa[c]pentalen-5-yl)-phenyl-methanone. C18H26N2OSi [eCrystal]
Gelbrich, Thomas and Patient, Lee and Hursthouse, Michael B. and Kilburn, Jeremy D. (2001)
(E)-5-Phenyl-pent-1-enyl-boronic acid. C11 H15 B O2 [eCrystal]
Gelbrich, Thomas and Sampson, David and Hursthouse, Michael B. (2000)
(Morpholine-N)-trifluoroacetato-O)-(2-((dimethylamino)methyl)phenyl-C,N)-palladium. C15H21F3N2O3Pd [eCrystal]
Cazin, C. S. J. and Bedford, R. B. and Hursthouse, Michael B. and Gelbrich, Thomas and Horton, Peter N. and Light, Mark E. and Coles, Simon J. (2002)
(Tricyclohexylphosphine)-(trifluoroacetato-O)-(2-((dimethylamino)methyl)phenyl-C,N)-palladium. C29H45F3NO2PPd [eCrystal]
(Tricyclohexylphosphine)-(trifluoromethanesulfonato-O)-(2-((dimethylamino)methul)phenyl-C,N)-palladium. C28H45F3NO3PPdS [eCrystal]
Gelbrich, Thomas and Hursthouse, Michael B. and Cazin, C. S. J. and Bedford, R. B. and Horton, Peter N. and Light, Mark E. and Coles, Simon J. (2002)
(Tricyclohexylphosphine)-iodo-(2-((dimethylamino)methyl)phenyl-C,N)-palladium. C27H45INPPd [eCrystal]
00SRC186(764). C13H10OS4 [eCrystal]
Murphy, P J and Gelbrich, Thomas and Hursthouse, Michael B. (2000)
00SRC325(775). ClH5O6 [eCrystal]
Ward, Robert S. and Gelbrich, Thomas and Hursthouse, Michael B. (2000)
00SRC612(787). C36H102Na6O30Si6 [eCrystal]
Taylor, Peter. G. and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC264(1150). C19H14F4I2N4O [eCrystal]
Plater, John (M.J.) and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC265(1151). C20H14F4N4I2O2 [eCrystal]
01SRC265_2(1149). C13H14N4O . 2C4F4I [eCrystal]
01SRC280(1162). C34H24Fe2O2 [eCrystal]
Butler, Ian. R. and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC304(1181). C10H10FeI3 [eCrystal]
Bricklebank, Neil and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC326(1179). C~28~H~26~Cl~2~Cu~N~4~O~10~ [eCrystal]
Amoroso, Angelo and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC465(1164). C32H32N8O8 [eCrystal]
Fallis, Ian A. and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC666(1147). C52H57NOP2Cl4Ru2 . 3CDCl3 [eCrystal]
Smith, Matin, B. and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC791(759). C62H42Fe . CH2Cl2 [eCrystal]
Richards, Chris J. and Gelbrich, Thomas and Hursthouse, Michael B. (2001)
01SRC883(755). C16H24O12Si8 [eCrystal]
01SRC899(1173). C34H71CuN7O10 [eCrystal]
1,7-Dichloro-3-methyl-bicyclo[4.2.0]octan-3-ol. C9H14Cl2O [eCrystal]
Gelbrich, Thomas and Peron, G. and Hursthouse, Michael B. and Kilburn, Jeremy D. (2000)
25,26,27,28-tetrakis(1-Propoxy)calix(4)arene-5,17-dicarboxylic acid. C42H48O8 [eCrystal]
Gelbrich, Thomas and Light, Mark E. and Prokes, I. and Tucker, J. H. R. and Dudic, M. and Miyaji, .H. and Hursthouse, Michael B. and Stibor, I. and Lhotak, P. L. and Brammer, L. (2001)
4,4-Dimethyl-3-methylideneoctahydronaphthalene-2,4a(2H)-diol. C13H22O2 [eCrystal]
4-Amino-N-thiazol-2-ylidenebenzene-sulfonamide (form III). C9H9N3O2S2 [eCrystal]
Bingham, Ann L. and Gelbrich, Thomas and Threlfall, Terence L. and Hursthouse, Michael B. (2004)
4-Methylene-1-(2-methylene-cyclopropyl)-octahydro-isochromen-4a-ol. C14H20O2 [eCrystal]
Gelbrich, Thomas and Watson, Faye and Hursthouse, Michael B. and Kilburn, Jeremy D. (2000)
4-Nitrobenzoic acid 2-[4-(hydroxy-dimethyl-silanyl)-1-methyl-3-methylene-4-phenyl-cyclohexyloxy]-ethyl ester. C25H31NO6Si [eCrystal]
5-(4,4-Diethoxybut-2-yn-1-yl)phenanthridin-6(5H)-one. C21H21NO3 [eCrystal]
Gelbrich, Thomas and Le Strat, Frederic and Harrowven, David C and Hursthouse, Michael B. (2001)
5-Methyl-3,6-diphenyl-hexahydro-furo-[3,4-c]pyrrol-4-one. C19H19NO2 [eCrystal]
Gelbrich, Thomas and Swain, Nigel and Hursthouse, Michael B. and Brown, Richard (2001)
5-Methyl-3,6-diphenyl-hexahydrofuro[3,4-c]pyrrol-4-one. C19H19NO2 [eCrystal]
6a-Methyl-2,3,3-trioxo-octahydro-1-oxa-3lamda*6*-thia-cyclopenta[cd]pentalene-6b-carboxylic acid ethyl ester. C12H16O6S [eCrystal]
Gelbrich, Thomas and Lucas, Matthew and Hursthouse, Michael B. and Harrowven, David C (2000)
Heron, Mark (B.M.) and Gelbrich, Thomas and Hursthouse, Michael B. (1999)
99SRC238(740). [eCrystal]
Kelly, Dave G. and Gelbrich, Thomas and Hursthouse, Michael B. (1999)
99SRC425(1199). C~23~H~21~Fe~N~3~O~3~ [eCrystal]
Tucker, James H. R. and Gelbrich, Thomas and Hursthouse, Michael B. (1999)
99SRC474(1200). C60H69LaN6O24 [eCrystal]
Bruce, Duncan W. and Gelbrich, Thomas and Hursthouse, Michael B. (1999)
bis(2-Hydroxy-2,2-diphenylacetato)-triphenyl-antimony. C46H37O6Sb [eCrystal]
Hursthouse, Michael B. and Gelbrich, Thomas and Costello, J. F. and Coles, Simon J. and Barucki, H. (1999)
bis(2-Hydroxy-2,2-diphenylacetato)-triphenyl-bismuth. C46H37BiO6 [eCrystal]
bis(μ2-Trifluoroacetato-O,O')-bis(2-((isopropylimino)methyl)phenyl-C,N)-di-palladium. C24H24F6N2O4Pd2 [eCrystal]
Light, Mark E. and Hursthouse, Michael B. and Gelbrich, Thomas and Horton, Peter N. and Coles, Simon J. and Cazin, C. S. J. and Bedford, R. B. (2001)
Di-1-phenylethylammonium tartrate. 2(C8H12N) . (C4H4O6) [eCrystal]
Callear, Samantha K. and Gelbrich, Thomas and Threlfall, Terence L. and Hursthouse, Michael B. (2008)
N,N,N-Trimethylmethanaminium 2-(acetylamino)propanoate. (C5H8NO3)-(C4H12N)+ [eCrystal]
Gelbrich, Thomas and Shepherd, Emma and Hursthouse, Michael B. and Kilburn, Jeremy D. (2000)

redpajama_set_name: RedPajamaCommonCrawl


Nature's fury can damage homes, farms, roads, and more across the United States every year, and one of the biggest challenges is preparing homeowners for the destruction of a hurricane, especially on the East Coast. Recently, Hurricane Irma dealt enough damage to cost taxpayers $90 billion, but if a homeowner knows what to do, hurricanes can be endured, and a home can stand tall when the storm dies down. Designing a house with this in mind can go a long way, or even purchasing one, ready-made.


text:
CHAN 2020, AFCON 2021 : Pressure on Cameroon to deliver
by Francis AJUMANE
CHAN 2020, AFCON 2021 in cameroon
Cameroon now have the challenge to deliver as they look set to host the continent's two flagship competitions organised by the Confederation of African Football
As the2019 Africa Cup of Nations shuts its doors last weekend with Algeria crowned champions after a one nil victory over Senegal, the doors of the 2021 immediately opened as all roads now lead to Cameroon. Immediately after Friday's final, the President of the Confederation of African Football, Ahmad Ahmad handed the flag for the 2021 competition to the President of the Cameroon Football Federation Seidou Mbombo Njoya. Beyond the symbolic hand-over, the onus is now on Cameroon to fine tune preparations ahead of the competition. This, given that the draw for the qualifiers of the competition took place just 24 hours before the final of the 2019 AFCON. Despite hosting the competition, Cameroon have been drawn in group F of the qualifiers against Cape Verde, Mozambique and Rwanda. All attention will now be turned to Cameroon as the nation accelerates the technical and the infrastructural preparations. There is no better way to assess Cameroon's readiness to host the 2021 AFCON than the 2020 African Nations Championship, CHAN, which the nation hosts in January. The competition will serve as a test and dress rehearsal for Cameroon's preparations to host the continent in 2021. Cognisant of the task ahead of the Cameroon, the Minister of Sports and Physical Education earlier this month rolled out a set of recommendations after visiting the various construction sites in Douala to host the two competitions. Prof. Narcisse Mouelle Kombi urged the grounds men to be meticulous in their treatment of the various turfs so as to keep them in shape ahead of the CHAN in January. He urged the various construction companies, to ensure the compatibility of the various equipment (electrical, water, telephone, internet…) during their various test runs in order to detect any technical fault that may arise and fix the problem(s) on time. The Minister urged the various companies (Camtel, Eneo, Camwater etc) involved to take strict measures to begin connecting the various construction sites to host the competition while respecting the deadlines for the 2020 CHAN. At the administrative level, the Local organising committee was urged to build a strong working relationship with the heads of the various construction sites in order to accelerate preparations ahead of a CAF inspection mission scheduled in the weeks ahead.
Cameroon/AFCON2021: Salah Saves Pharaohs...
Cameroon/AFCON 2021: Senegal, Guinea Sha...
Cameroon/AFCON 2021:Malawi Flame Up Qual...


text:
Part 1. What Are Audit Trails?
Part 2. Automating Audit Trails
Part 3. Why Automate Audit Trails?
Part 4. Embracing Today's Digital Transformation
Part 5. PDF Audit Trails and Concluding Notes
Home » Knowledge » Exploring the Automation of Audit Trails
Exploring the Automation of Audit Trails
by Donnie Chavez/ June 23, 2022
Audit trails, when managed well, play a critical role in regulating internal business controls. As technology continues to grow, we've seen audit trails come a long way in terms of development, with vital historical data now readily accessible, absolutely accurate, and continually usable. Generally, audit trails are facilitated via upper management, running through different departments, all the way down to IT personnel. Any significant addition or alteration needs to be immediately "red flagged"; when this is handled quickly and efficiently, it becomes easier for an organization to safeguard important data against threats of cyberattacks, security breaches, and corruption or misuse of data.
In this article, we'll look at how audit trails are automated, where PDFs come into the picture, and the importance of managing audit trail data effectively. But first, let's explore the definition, role, and scope of audit trails.
Organizations require records that record, track, and catalog events and processes in chronological order, irrespective of whether they are manual or electronic. These records are known as audit trails - they facilitate documentation and history to authenticate actions within the domain of the data, and essentially oversee security and operational actions, mitigating threats and challenges in the process. Audit trails play a critical role on different levels, as they double up as evidence of compliance and are carriers of the integrity of the organization's operations. Whether the records pertain to financial transactions for an online store, product design alterations for a tech company, or healthcare activity, audit trails validate operational actions and managerial outcomes.
Information Technology plays a vital role in the management of audit trails. IT professionals use the audit trail system as an essential tool in analyzing operations and technical controls. And this is where automation of audit trails becomes such an integral component in the technological transformation continuing to take place throughout industries today; an organization can now continually monitor activities, maintaining information and system integrity, all with utmost efficiency and accuracy.
Documents that Constitute an Audit Trail
Let's look at the types of documents that constitute an audit trail. While some of these are a given, others may not seem so obvious.
Receipts, bills, and invoices for company transactions
Records of approvals for transactions from the relevant authority
Changes in logs for updates and alterations to requests and purchase approvals
Record of reasons provided in cases where documents are insufficient or not available.
Audit trails help the internal teams and financial professionals comply with the necessary level of authenticity when processing the above documents. To ensure that these audit documents maintain their integrity, users often turn to the ubiquitous PDF format. The reasons:
Consistency across devices and operating systems
Difficulty in modifying content without PDF editors and other tools
Easy sharing and transferring of files
Security options such as passwords, permission restrictions and digital signatures
Financial audit trails mostly pertain to transactions: money flows inwards into the organization and purchases go out. In order to automate audit trails, an organization needs a comprehensive solution that can digitize the entire process, maintaining documents in the form of accessible PDFs and capturing important data at the time of the payment. Hard to imagine as it may seem today, previously, all of this had to be done manually.
With automated audit trails in place, each of the following key stages will be targeted individually and effectively:
Approvals and Requests
Every transaction of the organization calls for some form of approval, even in cases of pre-approval. Where this occurs before payment - as in the case of purchase orders - or after the transaction, as is the case with expense claims, the relevant authority has to give the final approval. In most cases, this takes place in the form of a letter or email, and the organization then adds it to the records.
The most effective method is to make the approval a requirement within the payment system. Take, for instance, virtual credit cards in the case of online purchases; when an employee wants to make the payment for the purchase or subscription, the funds become unlocked for them - but before this is done, the manager needs to approve it within the system and this is recorded as part of the compliance process.
A similar process can be followed for company cards or corporate expense cards, which can today take the form of digitized expense reports. An employee has to make a request for the funds through an electronic system, which automatically notifies the relevant authority or senior manager. A record of each subsequent request and approval, with all the relevant details like, time, data, reason, etc., is maintained and managed by the organization.
Needless to say, the most crucial aspect of the audit trails is it provides an organization with access to its entire history of transaction. Things can get trickier when there are multiple and, sometimes, disconnected modes of payment.
Looking retrospectively through credit card statements, petty cash, expense claims, receipts and invoices, can be a really daunting task. A much more effective method of managing transactions would be to capture all the relevant data at its source, for it to be categorized in a single repository of information.
This is exactly what is achieved through the automation of audit trails. In-person card payments, virtual card payments, reimbursements for employees, can all be effectively managed from the same source, and you will have continual access to the relevant transactional data. Every transaction is recorded and stored automatically in a single place that is easy for auditors to locate, identify, and access.
Going beyond its numerous and undeniable benefits, automating audit trails can actually give an organization's team members an incentive to provide important details on time, without which things can get really difficult with regard to following up with them on receipts and invoices. When the entire process is streamlined, employees can focus on core operations and no one has to spend an unnecessary number of hours on complying with procedures.
The most important aspect of a comprehensive data hub is that it allows records to be accessed easily for managing effectively. Look at it from another angle: let's say you stick with the expense processes that have worked for you over a long time - can you still automate with the processes that are already in place. A number of practices are keeping companies tethered to the past.
Going Paperless
Effective automation calls for complete, 360-degree digitization. With the scope of transactions rapidly increasing, especially in larger organizations, one can no longer rely on paper receipts, invoices, purchase orders, expense claims, or any other records maintained on paper. These call for human intervention, where the margin for errors is much higher than is necessary today.
Digitized receipts, or electronic receipts (e-receipts), are now accepted across the board and even actively encouraged by governments. The obvious advantages are that they are easier to maintain, but they are also much easier to access when important audits take place.
In order to handle these digital workflows, users need a PDF utility such as UPDF, which is a free PDF editor that comes with editing, annotation, and page organizing features. These powerful features further streamline PDF workloads and audit trails by providing the tools to manage such requirements.
In cases where employees have to make large purchases on behalf of the company, they have to get approval from the concerned authority - usually a manager right above. In order to track these approvals, a number of organizations create email chains that can be accessed later.
While emails are by nature digital, the process of accessing them is still manual and often ineffective, as a manager or employee has to wade through different chains of emails to find the relevant ones. A much more effective method of email management is to have all workflows pertaining to approvals built into the purchasing systems themselves. This way, managerial approval is recorded continually, rather than something that needs to be located at a crucial stage.
Company Cards
The main issue with company cards is that they are not specifically designed to be shared among employees. Therefore, while this is done pretty much everywhere, in a lot of cases, each time it is used, employees have to follow the mandatory requirement of sending emails and showing the statements. This can be a daunting and time-consuming process when done in large numbers.
One way of mitigating these issues is to maintain moving the relevant record of transactions into a single space for both office managers and team members to access. Every purchase made is followed up with the necessary procedure which is then moved right into this space.
Why wait for an audit to take place to have a more secure system in place to record all your transactions? Now that we've explored the numerous benefits of automating audit trails on various levels, it would seem almost absurd to wait for another error to take place before marching into the digital era and embracing everything that technology has to offer. Moreover, as an organization, you may want to avoid putting yourself in situations of panic when you cannot afford to make mistakes.
Smart tools and technologies take the extra burden of compliance and mandatory procedures off your shoulders and allow you to focus on your core business. It would hardly be an overstatement to call this a crucial development in the managerial world. At the time of an audit, it can be empowering to be in command of the organization's financial situation, and to know exactly what information to access for a particular purpose.
Thus far, we've discussed audit trails in general. However, there are also audit trails specific to PDF workflows. In this context, an audit trail is a document or log (or a set of such files) that tracks the chronological sequence of events related to particular documents. For instance, public company regulatory filings or legal paperwork requires evidence that the chain of custody hasn't been broken, thereby preserving the integrity of the contents of such documents.
In such instances, PDF audit tools such as Adobe Acrobat Pro DC can complement the capabilities of PDF editors like UPDF that we were introduced to earlier. In many use cases, such audit trails and the tools used to maintain and manage them are often mission-critical, such as healthcare, legal, contractual, and other core areas. These PDF tools, such as UPDF and Acrobat Pro DC are, therefore, immensely useful in making sure that regulatory compliance is met at all times, and not just when external audits are due.
In conclusion, the PDF format is best suited to preserve and record audit trails because they need special software like UPDF to be modified or edited. This is further complemented by digital signatures and other audit features provided by advanced tools like Acrobat Pro DC. Overall, whenever a user needs to keep track of timeline events, an audit trail is the best way to accomplish this. As such, PDF files and PDF audit trails provide the right platforms on which to build such frameworks and competencies.


This is the place for you if you are looking for top bargains as well as review for Lawn Mower Replacement Parts The following is info regarding Toro 59195 21″ R3 SP BAG KIT Lawn mower catcher assembly – one of Toro item suggestion for Lawn Mower Replacement Parts category.
Finally, when look for the very best lawnmower see to it you inspect the requirements and also evaluations. The Toro 59195 21″ R3 SP BAG KIT Lawn mower catcher assembly is suggested and have great testimonials as you can inspect for on your own. Hope this quick guide help you to find lawn mower sales.


Could the ancient Greeks help us with our social media skills? It's a question I was encouraged to ask after reading Mark Forsyth's recent book 'The Elements of Eloquence'. Forsyth delights in revealing the rhetorical tricks behind our most memorable poems, plays, novels and speeches. Nevertheless, some of his examples suggest the ancient Greeks could also lend a helping hand with less wordy forms of communication. Here are five figures of speech that might enliven your next Twitter campaign, Facebook update or press release quote.
Repeating the same initial letter sounds in a sentence is one of the easiest rhetorical devices to use. The result is a short, sharp, shock that the reader will not easily forget, which is why newspapers love alliteration. Their world is one where a tanker driver strike and a tax on takeaways lead to 'Pasties, petrol and the politics of panic.' In fact, alliteration can be used to make any point you want. CND wanted to 'ban the bomb' and animal rights activists to 'stop senseless slaughter' but the government, and tea-cup manufacturers, still urge us to 'keep calm and carry on'.
If the point you're trying to get across includes a list, keeping it to three things will make it more memorable. The old construction industry safety slogan, 'A fall, a slip, a hospital trip', is still remembered because it rhymes and contains three elements. Including both 'a fall' and 'a slip' is perhaps a bit redundant but a list of two things is not enough; just as four is definitely too many. In the Second World War, Winston Churchill warned the British people that he could only offer 'blood, toil, tears and sweat' but he needn't have bothered because today we only remember 'blood, sweat and tears'.
The order of words is also important. If one element of the list is longer than the rest, it's best to leave it to the end, as in 'Life, liberty and the pursuit of happiness' The same is true for any element of a list that breaks the pattern established by the other two. Left to the end, the element of surprise can add humour, as in 'Lies, damn lies and statistics' or urgency as in 'One world, one future, one chance'.
If your aim is to point up similarities or differences, an effective way to do it is to use two clauses that are grammatically parallel. Whether it's, 'Have a break. Have a Kit-Kat' or, 'The future's bright. The future's Orange', advertisers love to use the trick to imply some link between a desirable activity or quality and their own product. However, the isocolon, as the Greeks called it, is just as useful for social campaigners. 'Think global. Act local' is simple and memorable while who could argue with Susan B Anthony's 'isocolonic' even handedness, 'Men, their rights, and nothing more; women, their rights, and nothing less'.
Finally, if you want to inspire a bit of thoughtful reflection or reciprocity, why not try Chiasmus? This Greek term for inverted parallelism is ingeniously simple and simply ingenious. All you need to do is repeat the same words, grammatical constructions or concepts in reverse order in the same or a modified form. The symmetry encourages us to see the same situation from a different perspective, as President Jimmy Carter did in his farewell address; 'America did not invent human rights. In a very real sense human rights invented America'.


text:
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/views/controls/combobox/combobox.h"

#include <algorithm>
#include <memory>
#include <utility>

#include "base/bind.h"
#include "base/check_op.h"
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
#include "ui/accessibility/ax_action_data.h"
#include "ui/accessibility/ax_enums.mojom.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/base/ime/input_method.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/base/models/image_model.h"
#include "ui/base/models/menu_model.h"
#include "ui/base/ui_base_types.h"
#include "ui/color/color_id.h"
#include "ui/color/color_provider.h"
#include "ui/events/event.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/color_palette.h"
#include "ui/gfx/scoped_canvas.h"
#include "ui/gfx/text_utils.h"
#include "ui/views/animation/flood_fill_ink_drop_ripple.h"
#include "ui/views/animation/ink_drop.h"
#include "ui/views/animation/ink_drop_impl.h"
#include "ui/views/background.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/button/button_controller.h"
#include "ui/views/controls/combobox/combobox_util.h"
#include "ui/views/controls/combobox/empty_combobox_model.h"
#include "ui/views/controls/focus_ring.h"
#include "ui/views/controls/focusable_border.h"
#include "ui/views/controls/menu/menu_config.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/prefix_selector.h"
#include "ui/views/layout/layout_provider.h"
#include "ui/views/mouse_constants.h"
#include "ui/views/style/platform_style.h"
#include "ui/views/style/typography.h"
#include "ui/views/widget/widget.h"

namespace views {

namespace {

// Used to indicate that no item is currently selected by the user.
constexpr int kNoSelection = -1;

SkColor GetTextColorForEnableState(const Combobox& combobox, bool enabled) {
  const int style = enabled ? style::STYLE_PRIMARY : style::STYLE_DISABLED;
  return style::GetColor(combobox, style::CONTEXT_TEXTFIELD, style);
}

// The transparent button which holds a button state but is not rendered.
class TransparentButton : public Button {
 public:
  explicit TransparentButton(PressedCallback callback)
      : Button(std::move(callback)) {
    SetFocusBehavior(FocusBehavior::NEVER);
    button_controller()->set_notify_action(
        ButtonController::NotifyAction::kOnPress);

    InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON);
    SetHasInkDropActionOnClick(true);
    InkDrop::UseInkDropForSquareRipple(InkDrop::Get(this),
                                       /*highlight_on_hover=*/false);
    InkDrop::Get(this)->SetCreateRippleCallback(base::BindRepeating(
        [](Button* host) -> std::unique_ptr<views::InkDropRipple> {
          return std::make_unique<views::FloodFillInkDropRipple>(
              host->size(),
              InkDrop::Get(host)->GetInkDropCenterBasedOnLastEvent(),
              host->GetColorProvider()->GetColor(ui::kColorLabelForeground),
              InkDrop::Get(host)->GetVisibleOpacity());
        },
        this));
  }
  TransparentButton(const TransparentButton&) = delete;
  TransparentButton& operator&=(const TransparentButton&) = delete;
  ~TransparentButton() override = default;

  bool OnMousePressed(const ui::MouseEvent& mouse_event) override {
#if !BUILDFLAG(IS_MAC)
    // On Mac, comboboxes do not take focus on mouse click, but on other
    // platforms they do.
    parent()->RequestFocus();
#endif
    return Button::OnMousePressed(mouse_event);
  }

  double GetAnimationValue() const {
    return hover_animation().GetCurrentValue();
  }
};

#if !BUILDFLAG(IS_MAC)
// Returns the next or previous valid index (depending on |increment|'s value).
// Skips separator or disabled indices. Returns -1 if there is no valid adjacent
// index.
int GetAdjacentIndex(ui::ComboboxModel* model, int increment, int index) {
  DCHECK(increment == -1 || increment == 1);

  index += increment;
  while (index >= 0 && index < model->GetItemCount()) {
    if (!model->IsItemSeparatorAt(index) || !model->IsItemEnabledAt(index))
      return index;
    index += increment;
  }
  return kNoSelection;
}
#endif

}  // namespace

// Adapts a ui::ComboboxModel to a ui::MenuModel.
class Combobox::ComboboxMenuModel : public ui::MenuModel {
 public:
  ComboboxMenuModel(Combobox* owner, ui::ComboboxModel* model)
      : owner_(owner), model_(model) {}
  ComboboxMenuModel(const ComboboxMenuModel&) = delete;
  ComboboxMenuModel& operator&(const ComboboxMenuModel&) = delete;
  ~ComboboxMenuModel() override = default;

 private:
  bool UseCheckmarks() const {
    return MenuConfig::instance().check_selected_combobox_item;
  }

  // Overridden from MenuModel:
  bool HasIcons() const override {
    for (int i = 0; i < GetItemCount(); ++i) {
      if (!GetIconAt(i).IsEmpty())
        return true;
    }
    return false;
  }

  int GetItemCount() const override { return model_->GetItemCount(); }

  ItemType GetTypeAt(int index) const override {
    if (model_->IsItemSeparatorAt(index))
      return TYPE_SEPARATOR;
    return UseCheckmarks() ? TYPE_CHECK : TYPE_COMMAND;
  }

  ui::MenuSeparatorType GetSeparatorTypeAt(int index) const override {
    return ui::NORMAL_SEPARATOR;
  }

  int GetCommandIdAt(int index) const override {
    // Define the id of the first item in the menu (since it needs to be > 0)
    constexpr int kFirstMenuItemId = 1000;
    return index + kFirstMenuItemId;
  }

  std::u16string GetLabelAt(int index) const override {
    // Inserting the Unicode formatting characters if necessary so that the
    // text is displayed correctly in right-to-left UIs.
    std::u16string text = model_->GetDropDownTextAt(index);
    base::i18n::AdjustStringForLocaleDirection(&text);
    return text;
  }

  std::u16string GetSecondaryLabelAt(int index) const override {
    std::u16string text = model_->GetDropDownSecondaryTextAt(index);
    base::i18n::AdjustStringForLocaleDirection(&text);
    return text;
  }

  bool IsItemDynamicAt(int index) const override { return true; }

  const gfx::FontList* GetLabelFontListAt(int index) const override {
    return &owner_->GetFontList();
  }

  bool GetAcceleratorAt(int index,
                        ui::Accelerator* accelerator) const override {
    return false;
  }

  bool IsItemCheckedAt(int index) const override {
    return UseCheckmarks() && index == owner_->selected_index_;
  }

  int GetGroupIdAt(int index) const override { return -1; }

  ui::ImageModel GetIconAt(int index) const override {
    return model_->GetDropDownIconAt(index);
  }

  ui::ButtonMenuItemModel* GetButtonMenuItemAt(int index) const override {
    return nullptr;
  }

  bool IsEnabledAt(int index) const override {
    return model_->IsItemEnabledAt(index);
  }

  void ActivatedAt(int index) override {
    owner_->SetSelectedIndex(index);
    owner_->OnPerformAction();
  }

  void ActivatedAt(int index, int event_flags) override { ActivatedAt(index); }

  MenuModel* GetSubmenuModelAt(int index) const override { return nullptr; }

  raw_ptr<Combobox> owner_;           // Weak. Owns this.
  raw_ptr<ui::ComboboxModel> model_;  // Weak.
};

////////////////////////////////////////////////////////////////////////////////
// Combobox, public:

Combobox::Combobox(int text_context, int text_style)
    : Combobox(std::make_unique<internal::EmptyComboboxModel>()) {}

Combobox::Combobox(std::unique_ptr<ui::ComboboxModel> model,
                   int text_context,
                   int text_style)
    : Combobox(model.get(), text_context, text_style) {
  owned_model_ = std::move(model);
}

Combobox::Combobox(ui::ComboboxModel* model, int text_context, int text_style)
    : text_context_(text_context),
      text_style_(text_style),
      arrow_button_(new TransparentButton(
          base::BindRepeating(&Combobox::ArrowButtonPressed,
                              base::Unretained(this)))) {
  SetModel(model);
#if BUILDFLAG(IS_MAC)
  SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
#else
  SetFocusBehavior(FocusBehavior::ALWAYS);
#endif

  UpdateBorder();

  arrow_button_->SetVisible(true);
  AddChildView(arrow_button_.get());

  // A layer is applied to make sure that canvas bounds are snapped to pixel
  // boundaries (for the sake of drawing the arrow).
  SetPaintToLayer();
  layer()->SetFillsBoundsOpaquely(false);

  FocusRing::Install(this);
}

Combobox::~Combobox() {
  if (GetInputMethod() && selector_.get()) {
    // Combobox should have been blurred before destroy.
    DCHECK(selector_.get() != GetInputMethod()->GetTextInputClient());
  }
}

const gfx::FontList& Combobox::GetFontList() const {
  return style::GetFont(text_context_, text_style_);
}

void Combobox::SetSelectedIndex(int index) {
  if (selected_index_ == index)
    return;
  // TODO(pbos): Add (D)CHECKs to validate the selected index.
  selected_index_ = index;
  if (size_to_largest_label_) {
    OnPropertyChanged(&selected_index_, kPropertyEffectsPaint);
  } else {
    content_size_ = GetContentSize();
    OnPropertyChanged(&selected_index_, kPropertyEffectsPreferredSizeChanged);
  }
}

base::CallbackListSubscription Combobox::AddSelectedIndexChangedCallback(
    views::PropertyChangedCallback callback) {
  return AddPropertyChangedCallback(&selected_index_, std::move(callback));
}

bool Combobox::SelectValue(const std::u16string& value) {
  for (int i = 0; i < GetModel()->GetItemCount(); ++i) {
    if (value == GetModel()->GetItemAt(i)) {
      SetSelectedIndex(i);
      return true;
    }
  }
  return false;
}

void Combobox::SetOwnedModel(std::unique_ptr<ui::ComboboxModel> model) {
  // The swap keeps the outgoing model alive for SetModel().
  owned_model_.swap(model);
  SetModel(owned_model_.get());
}

void Combobox::SetModel(ui::ComboboxModel* model) {
  if (!model) {
    SetOwnedModel(std::make_unique<internal::EmptyComboboxModel>());
    return;
  }

  if (model_) {
    DCHECK(observation_.IsObservingSource(model_.get()));
    observation_.Reset();
  }

  model_ = model;

  if (model_) {
    model_ = model;
    menu_model_ = std::make_unique<ComboboxMenuModel>(this, model_);
    observation_.Observe(model_.get());
    SetSelectedIndex(model_->GetDefaultIndex());
    OnComboboxModelChanged(model_);
  }
}

std::u16string Combobox::GetTooltipTextAndAccessibleName() const {
  return arrow_button_->GetTooltipText();
}

void Combobox::SetTooltipTextAndAccessibleName(
    const std::u16string& tooltip_text) {
  arrow_button_->SetTooltipText(tooltip_text);
  if (accessible_name_.empty())
    accessible_name_ = tooltip_text;
}

void Combobox::SetAccessibleName(const std::u16string& name) {
  accessible_name_ = name;
}

std::u16string Combobox::GetAccessibleName() const {
  return accessible_name_;
}

void Combobox::SetInvalid(bool invalid) {
  if (invalid == invalid_)
    return;

  invalid_ = invalid;

  if (views::FocusRing::Get(this))
    views::FocusRing::Get(this)->SetInvalid(invalid);

  UpdateBorder();
  OnPropertyChanged(&selected_index_, kPropertyEffectsPaint);
}

void Combobox::SetSizeToLargestLabel(bool size_to_largest_label) {
  if (size_to_largest_label_ == size_to_largest_label)
    return;

  size_to_largest_label_ = size_to_largest_label;
  content_size_ = GetContentSize();
  OnPropertyChanged(&selected_index_, kPropertyEffectsPreferredSizeChanged);
}

bool Combobox::IsMenuRunning() const {
  return menu_runner_ && menu_runner_->IsRunning();
}

void Combobox::OnThemeChanged() {
  View::OnThemeChanged();
  SetBackground(
      CreateBackgroundFromPainter(Painter::CreateSolidRoundRectPainter(
          GetColorProvider()->GetColor(ui::kColorTextfieldBackground),
          FocusableBorder::kCornerRadiusDp)));
  OnContentSizeMaybeChanged();
}

int Combobox::GetRowCount() {
  return GetModel()->GetItemCount();
}

int Combobox::GetSelectedRow() {
  return selected_index_;
}

void Combobox::SetSelectedRow(int row) {
  int prev_index = selected_index_;
  SetSelectedIndex(row);
  if (selected_index_ != prev_index)
    OnPerformAction();
}

std::u16string Combobox::GetTextForRow(int row) {
  return GetModel()->IsItemSeparatorAt(row) ? std::u16string()
                                            : GetModel()->GetItemAt(row);
}

////////////////////////////////////////////////////////////////////////////////
// Combobox, View overrides:

gfx::Size Combobox::CalculatePreferredSize() const {
  // Limit how small a combobox can be.
  constexpr int kMinComboboxWidth = 25;

  // The preferred size will drive the local bounds which in turn is used to set
  // the minimum width for the dropdown list.
  const int width = std::max(kMinComboboxWidth, content_size_.width()) +
                    LayoutProvider::Get()->GetDistanceMetric(
                        DISTANCE_TEXTFIELD_HORIZONTAL_TEXT_PADDING) *
                        2 +
                    kComboboxArrowContainerWidth + GetInsets().width();
  const int height = LayoutProvider::GetControlHeightForFont(
      text_context_, text_style_, GetFontList());
  return gfx::Size(width, height);
}

void Combobox::OnBoundsChanged(const gfx::Rect& previous_bounds) {
  arrow_button_->SetBounds(0, 0, width(), height());
}

bool Combobox::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) {
  // Escape should close the drop down list when it is active, not host UI.
  if (e.key_code() != ui::VKEY_ESCAPE || e.IsShiftDown() || e.IsControlDown() ||
      e.IsAltDown() || e.IsAltGrDown()) {
    return false;
  }
  return !!menu_runner_;
}

bool Combobox::OnKeyPressed(const ui::KeyEvent& e) {
  // TODO(oshima): handle IME.
  DCHECK_EQ(e.type(), ui::ET_KEY_PRESSED);

  // TODO(pbos): Do we need to handle selected_index_ == -1 for unselected here?
  // Ditto on handling an empty model?
  DCHECK_GE(selected_index_, 0);
  DCHECK_LT(selected_index_, GetModel()->GetItemCount());
  if (selected_index_ < 0 || selected_index_ >= GetModel()->GetItemCount())
    SetSelectedIndex(0);

  bool show_menu = false;
  int new_index = kNoSelection;
  switch (e.key_code()) {
#if BUILDFLAG(IS_MAC)
    case ui::VKEY_DOWN:
    case ui::VKEY_UP:
    case ui::VKEY_SPACE:
    case ui::VKEY_HOME:
    case ui::VKEY_END:
      // On Mac, navigation keys should always just show the menu first.
      show_menu = true;
      break;
#else
    // Show the menu on F4 without modifiers.
    case ui::VKEY_F4:
      if (e.IsAltDown() || e.IsAltGrDown() || e.IsControlDown())
        return false;
      show_menu = true;
      break;

    // Move to the next item if any, or show the menu on Alt+Down like Windows.
    case ui::VKEY_DOWN:
      if (e.IsAltDown())
        show_menu = true;
      else
        new_index = GetAdjacentIndex(GetModel(), 1, selected_index_);
      break;

    // Move to the end of the list.
    case ui::VKEY_END:
    case ui::VKEY_NEXT:  // Page down.
      new_index = GetAdjacentIndex(GetModel(), -1, GetModel()->GetItemCount());
      break;

    // Move to the beginning of the list.
    case ui::VKEY_HOME:
    case ui::VKEY_PRIOR:  // Page up.
      new_index = GetAdjacentIndex(GetModel(), 1, -1);
      break;

    // Move to the previous item if any.
    case ui::VKEY_UP:
      new_index = GetAdjacentIndex(GetModel(), -1, selected_index_);
      break;

    case ui::VKEY_RETURN:
    case ui::VKEY_SPACE:
      show_menu = true;
      break;
#endif  // BUILDFLAG(IS_MAC)
    default:
      return false;
  }

  if (show_menu) {
    ShowDropDownMenu(ui::MENU_SOURCE_KEYBOARD);
  } else if (new_index != selected_index_ && new_index != kNoSelection) {
    DCHECK(!GetModel()->IsItemSeparatorAt(new_index));
    SetSelectedIndex(new_index);
    OnPerformAction();
  }

  return true;
}

void Combobox::OnPaint(gfx::Canvas* canvas) {
  OnPaintBackground(canvas);
  PaintIconAndText(canvas);
  OnPaintBorder(canvas);
}

void Combobox::OnFocus() {
  if (GetInputMethod())
    GetInputMethod()->SetFocusedTextInputClient(GetPrefixSelector());

  View::OnFocus();
  // Border renders differently when focused.
  SchedulePaint();
}

void Combobox::OnBlur() {
  if (GetInputMethod())
    GetInputMethod()->DetachTextInputClient(GetPrefixSelector());

  if (selector_)
    selector_->OnViewBlur();
  // Border renders differently when focused.
  SchedulePaint();
}

void Combobox::GetAccessibleNodeData(ui::AXNodeData* node_data) {
  // ax::mojom::Role::kComboBox is for UI elements with a dropdown and
  // an editable text field, which views::Combobox does not have. Use
  // ax::mojom::Role::kPopUpButton to match an HTML <select> element.
  node_data->role = ax::mojom::Role::kPopUpButton;
  if (menu_runner_) {
    node_data->AddState(ax::mojom::State::kExpanded);
  } else {
    node_data->AddState(ax::mojom::State::kCollapsed);
  }

  node_data->SetName(accessible_name_);
  node_data->SetValue(model_->GetItemAt(selected_index_));
  if (GetEnabled()) {
    node_data->SetDefaultActionVerb(ax::mojom::DefaultActionVerb::kOpen);
  }
  node_data->AddIntAttribute(ax::mojom::IntAttribute::kPosInSet,
                             selected_index_);
  node_data->AddIntAttribute(ax::mojom::IntAttribute::kSetSize,
                             model_->GetItemCount());
}

bool Combobox::HandleAccessibleAction(const ui::AXActionData& action_data) {
  // The action handling in View would generate a mouse event and send it to
  // |this|. However, mouse events for Combobox are handled by |arrow_button_|,
  // which is hidden from the a11y tree (so can't expose actions). Rather than
  // forwarding ax::mojom::Action::kDoDefault to View and then forwarding the
  // mouse event it generates to |arrow_button_| to have it forward back to the
  // callback on |this|, just handle the action explicitly here and bypass View.
  if (GetEnabled() && action_data.action == ax::mojom::Action::kDoDefault) {
    ShowDropDownMenu(ui::MENU_SOURCE_KEYBOARD);
    return true;
  }
  return View::HandleAccessibleAction(action_data);
}

void Combobox::OnComboboxModelChanged(ui::ComboboxModel* model) {
  DCHECK_EQ(model_, model);

  // If the selection is no longer valid (or the model is empty), restore the
  // default index.
  if (selected_index_ >= model_->GetItemCount() ||
      model_->GetItemCount() == 0 ||
      model_->IsItemSeparatorAt(selected_index_)) {
    SetSelectedIndex(model_->GetDefaultIndex());
  }

  OnContentSizeMaybeChanged();
}

const base::RepeatingClosure& Combobox::GetCallback() const {
  return callback_;
}

const std::unique_ptr<ui::ComboboxModel>& Combobox::GetOwnedModel() const {
  return owned_model_;
}

void Combobox::UpdateBorder() {
  std::unique_ptr<FocusableBorder> border(new FocusableBorder());
  if (invalid_)
    border->SetColorId(ui::kColorAlertHighSeverity);
  SetBorder(std::move(border));
}

void Combobox::AdjustBoundsForRTLUI(gfx::Rect* rect) const {
  rect->set_x(GetMirroredXForRect(*rect));
}

void Combobox::PaintIconAndText(gfx::Canvas* canvas) {
  gfx::Insets insets = GetInsets();
  insets += gfx::Insets(0, LayoutProvider::Get()->GetDistanceMetric(
                               DISTANCE_TEXTFIELD_HORIZONTAL_TEXT_PADDING));

  gfx::ScopedCanvas scoped_canvas(canvas);
  canvas->ClipRect(GetContentsBounds());

  int x = insets.left();
  int y = insets.top();
  int contents_height = height() - insets.height();

  // Draw the icon.
  ui::ImageModel icon = GetModel()->GetIconAt(selected_index_);
  if (!icon.IsEmpty()) {
    gfx::ImageSkia icon_skia = icon.Rasterize(GetColorProvider());
    int icon_y = y + (contents_height - icon_skia.height()) / 2;
    gfx::Rect icon_bounds(x, icon_y, icon_skia.width(), icon_skia.height());
    AdjustBoundsForRTLUI(&icon_bounds);
    canvas->DrawImageInt(icon_skia, icon_bounds.x(), icon_bounds.y());
    x += icon_skia.width() + LayoutProvider::Get()->GetDistanceMetric(
                                 DISTANCE_RELATED_LABEL_HORIZONTAL);
  }

  // Draw the text.
  SkColor text_color = GetTextColorForEnableState(*this, GetEnabled());
  // TODO(pbos): Do we need to handle selected_index_ == -1 for unselected here?
  // Ditto on handling an empty model?
  DCHECK_GE(selected_index_, 0);
  DCHECK_LT(selected_index_, GetModel()->GetItemCount());
  if (selected_index_ < 0 || selected_index_ >= GetModel()->GetItemCount())
    SetSelectedIndex(0);

  std::u16string text = GetModel()->GetItemAt(selected_index_);

  int disclosure_arrow_offset = width() - kComboboxArrowContainerWidth;

  const gfx::FontList& font_list = GetFontList();
  int text_width = gfx::GetStringWidth(text, font_list);
  text_width =
      std::min(text_width, disclosure_arrow_offset - insets.right() - x);

  gfx::Rect text_bounds(x, y, text_width, contents_height);
  AdjustBoundsForRTLUI(&text_bounds);
  canvas->DrawStringRect(text, font_list, text_color, text_bounds);

  gfx::Rect arrow_bounds(disclosure_arrow_offset, 0,
                         kComboboxArrowContainerWidth, height());
  arrow_bounds.ClampToCenteredSize(ComboboxArrowSize());
  AdjustBoundsForRTLUI(&arrow_bounds);

  PaintComboboxArrow(text_color, arrow_bounds, canvas);
}

void Combobox::ArrowButtonPressed(const ui::Event& event) {
  if (!GetEnabled())
    return;

  // TODO(hajimehoshi): Fix the problem that the arrow button blinks when
  // cliking this while the dropdown menu is opened.
  if ((base::TimeTicks::Now() - closed_time_) > kMinimumTimeBetweenButtonClicks)
    ShowDropDownMenu(ui::GetMenuSourceTypeForEvent(event));
}

void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) {
  constexpr int kMenuBorderWidthTop = 1;
  // Menu's requested position's width should be the same as local bounds so the
  // border of the menu lines up with the border of the combobox. The y
  // coordinate however should be shifted to the bottom with the border with not
  // to overlap with the combobox border.
  gfx::Rect lb = GetLocalBounds();
  gfx::Point menu_position(lb.origin());
  menu_position.set_y(menu_position.y() + kMenuBorderWidthTop);

  View::ConvertPointToScreen(this, &menu_position);

  gfx::Rect bounds(menu_position, lb.size());

  Button::ButtonState original_state = arrow_button_->GetState();
  arrow_button_->SetState(Button::STATE_PRESSED);

  // Allow |menu_runner_| to be set by the testing API, but if this method is
  // ever invoked recursively, ensure the old menu is closed.
  if (!menu_runner_ || IsMenuRunning()) {
    menu_runner_ = std::make_unique<MenuRunner>(
        menu_model_.get(), MenuRunner::COMBOBOX,
        base::BindRepeating(&Combobox::OnMenuClosed, base::Unretained(this),
                            original_state));
  }
  menu_runner_->RunMenuAt(GetWidget(), nullptr, bounds,
                          MenuAnchorPosition::kTopLeft, source_type);
  NotifyAccessibilityEvent(ax::mojom::Event::kExpandedChanged, true);
}

void Combobox::OnMenuClosed(Button::ButtonState original_button_state) {
  menu_runner_.reset();
  arrow_button_->SetState(original_button_state);
  closed_time_ = base::TimeTicks::Now();
  NotifyAccessibilityEvent(ax::mojom::Event::kExpandedChanged, true);
}

void Combobox::OnPerformAction() {
  NotifyAccessibilityEvent(ax::mojom::Event::kValueChanged, true);
  SchedulePaint();

  if (callback_)
    callback_.Run();

  // Note |this| may be deleted by |callback_|.
}

gfx::Size Combobox::GetContentSize() const {
  const gfx::FontList& font_list = GetFontList();
  int height = font_list.GetHeight();
  int width = 0;
  for (int i = 0; i < GetModel()->GetItemCount(); ++i) {
    if (model_->IsItemSeparatorAt(i))
      continue;

    if (size_to_largest_label_ || i == selected_index_) {
      int item_width = gfx::GetStringWidth(GetModel()->GetItemAt(i), font_list);
      ui::ImageModel icon = GetModel()->GetIconAt(i);
      if (!icon.IsEmpty()) {
        gfx::ImageSkia icon_skia;
        if (GetWidget())
          icon_skia = icon.Rasterize(GetColorProvider());
        item_width +=
            icon_skia.width() + LayoutProvider::Get()->GetDistanceMetric(
                                    DISTANCE_RELATED_LABEL_HORIZONTAL);
        if (MenuConfig::instance().check_selected_combobox_item) {
          item_width +=
              kMenuCheckSize + LayoutProvider::Get()->GetDistanceMetric(
                                   DISTANCE_RELATED_BUTTON_HORIZONTAL);
        }
        height = std::max(height, icon_skia.height());
      }
      width = std::max(width, item_width);
    }
  }
  return gfx::Size(width, height);
}

void Combobox::OnContentSizeMaybeChanged() {
  content_size_ = GetContentSize();
  PreferredSizeChanged();
}

PrefixSelector* Combobox::GetPrefixSelector() {
  if (!selector_)
    selector_ = std::make_unique<PrefixSelector>(this, this);
  return selector_.get();
}

BEGIN_METADATA(Combobox, View)
ADD_PROPERTY_METADATA(base::RepeatingClosure, Callback)
ADD_PROPERTY_METADATA(std::unique_ptr<ui::ComboboxModel>, OwnedModel)
ADD_PROPERTY_METADATA(ui::ComboboxModel*, Model)
ADD_PROPERTY_METADATA(int, SelectedIndex)
ADD_PROPERTY_METADATA(bool, Invalid)
ADD_PROPERTY_METADATA(bool, SizeToLargestLabel)
ADD_PROPERTY_METADATA(std::u16string, AccessibleName)
ADD_PROPERTY_METADATA(std::u16string, TooltipTextAndAccessibleName)
END_METADATA

}  // namespace views

redpajama_set_name: RedPajamaGithub


text:
Articles Buyers Guides
Epiphone vs. Gibson – What are the Differences Between Epiphone and Gibson Models?
May 27, 2021 September 18, 2022 Simon Morgan 19 min read
Back in 1957, Gibson acquired the Epiphone brand, but allowed them to continue production of their own proprietary instruments for many years after. However, in the early '80s, Gibson licensed production of Gibson models to the Epiphone brand in order to create an affordable range of equivalent models to their flagship US guitars.
Since then, Gibson's most popular models, the Les Paul and the SG have been available under the Epiphone name, as the only officially licensed copies of those designs.
In this KillerGuitarRigs Guide you'll learn
What are the differences between the Gibson Les Paul and the Epiphone Les Paul?
What are the differences between the Gibson SG and the Epiphone SG?
How To Spot A Fake Epiphone Les Paul
How To Spot A Fake Gibson Les Paul
Best Pickups For A Les Paul
Ultimate Les Paul Upgrade Guide
Les Paul Junior
Les Paul Studio
Les Paul Standard 50s/60s
Les Paul Custom
SG Standard
SG Standard '61 Reissue
SG Custom
Final Thoughts On The Differences Between Gibson and Epiphone Models
There are several common models of Les Paul made by both Gibson and Epiphone – keep reading to find out more about each.
The Les Paul Junior was the original "budget Les Paul", and was primarily aimed at students and novice players.
Both the Gibson and the Epiphone Les Paul Junior are made from a slab of mahogany. The most noticeable difference between the two when it comes to the wood is the grain. On the Epiphone, the grain is a lot stripier, and much more noticeable – there is clearly a lot more thought given to wood selection at the Gibson plant.
Finish is also something that sets the two apart – the Epiphone has a hard wearing polyurethane lacquer coating that will stand up will to years of abuse. The Gibson is finished (as most Gibsons are) in an old school nitrocellulose lacquer. Nitro finishes are a lot more time consuming to apply, and therefore more costly, but ultimately the guitar will age in a much more appealing way.
The neck is another area in which the Gibson and the Epiphone are very similar. Both are made from mahogany, which is great for feel and tone, and both have the infamous Vintage '50's profile. The Vintage '50s profile is so thick, it is widely known for feeling like a baseball bat.
The Epiphone model shows some areas in which costs have been cut on the neck, it uses an Indian Laurel fretboard, whereas the Gibson uses a more premium rosewood. Both guitars come with a 12" radius, dot inlay markers, 22 medium jumbo frets, and a Graphtech nut, though it's worth noting that the Gibson's nut uses a proprietary formula for increased resonance.
The Gibson and The Epiphone Les Paul Junior both ship with a single dogear P90 pickup. The Epiphone uses an Epiphone P-90 Pro, which is pleasant, but definitely not as hot as the Gibson Equivalent today. The tone it delivers is somewhat clean for a P-90, whereas the Gibson dogear P-90 delivers the throaty, angry tones that P-90 players crave.
As for pots, the Epiphone is very well equipped. It features full size CTS USA master tone and volume dials, that provide a nice swell and great tonal control. The Gibson uses Gibson's own hand wired potentiometers, which are just a little smoother than those on the Epiphone.
The most noticeable difference between the Epiphone and the Gibson is that the Epi uses a lightning bar wraparound bridge, whereas the Gibson uses a plain wraparound. The lightning bar is a compensated bridge designed to assist with intonation. The thought process is that the factory setup on the Gibson is typically superior, and thus the additional compensation is not required. Both come with vintage Gibson Deluxe style tuners, although the Epiphone tuners are branded Epiphone Deluxe. Both are smooth and hold tune well.
Designed as the "working musician's" Les Paul, the Studio embodies the spirit of the style while saving weight and cutting cost.
The Epiphone and Gibson Les Paul Studio are both made with a mahogany body with a carved maple top, and a mahogany neck. The Gibson, however, is weight relieved. Both come in a range of finishes, some of which, like Ebony, Alpine White, and Smokehouse Burst are shared between both Gibson and Epiphone. As you'd expect, you'll get a PU clearcoat on the Epiphone, and nitro lacquer on the Gibson.
Sticking with the theme of weight saving, the Gibson and the Epiphone both have slim necks. Gibson has installed a regular slim taper on the US made version, while Epiphone opted for the even slimmer 60's slim taper "D" profile – both are fast and comfortable. On the Epiphone, the fretboard is Pau Ferro, while the Gibson gets rosewood which offers a much more tactile feel. Both guitars have the classic trapezoid fret markers, a Graphtech nut, and 22 medium jumbo frets.
Pickups are a real differentiator between the Gibson and the Epiphone. The Epiphone features a matched paid of Epiphone Alnico Classic humbuckers, which offer excellent warmth and good distortion response, although they can lack clarity. The Gibson is also fitted with a pair of humbuckers, but in this case a 490R in the neck and a 498T in the bridge. Both guitars actually feature coil splitting/tapping, too, by pulling out on the volume knob you're able to unlock a whole range of single coil tones.
Both the Gibson and the Epiphone are equipped with Grover tuners, in the Epi's case they're standard Grover 18:1, which are accurate and provide great stability. The Gibson gets an upgraded set of Grover Rotomatics. At the bridge end, both are equipped with a nickel plated stopbar tailpiece. The Epiphone is set up with an ABR Tune-O-Matic bridge, while the Gibson gets the Nashville Tune-O-Matic. Both are solid bridges, with the primary difference being that the saddles adjust from the top on the Epiphone, and from the bottom on the Gibson.
The Les Paul Standard is the original flagship model. Today it comes as either a 50s or 60s version in Both Gibson and Epiphone, both offering a slightly different experience based upon the original specs of those eras.
Both the 50s and 60s versions in both Epiphone and Gibson form come with a solid mahogany body topped with a carved maple cap for additional clarity and snap. There is little difference between the Gibsons and the Epiphones, although the grade of the maple on the Gibson examples is far superior, giving a much more aesthetically pleasing flamed effect. For added visual effect, all 50s and 60s LPs from Gibson and Epiphone have binding on the top side of the body only, and for finish the Epiphones have polyurethane, while the Gibsons get nitro.
Mahogany is used throughout the entire range from Gibson and Epiphone, but the neck profiles differ depending on which brand you choose. The 50s Epiphone gets a '59 Rounded Medium C, which is noticeably slimmer than the Les Paul Standard '50s on the 50s Gibson Standard. On the 60s models, the Epiphone has a Slim taper 60s C shape, which is, again, slimmer than the Gibson, which has the Les Paul Standard 60s neck. Epiphones get Indian Laurel Fretboards, and the Gibsons get rosewood. All models have bound necks, trapezoid fret markers, and 22 medium jumbo frets.
The Epiphones are equipped with CTS pots and wiring, and a pair of Probucker pickups with Alnico II magnets, and are voiced for warm tones with bell like highs. The Gibsons are fitted with period correct Burstbuckers that deliver incredible vintage PAF tone.
Hardware, like everything else on these guitars is period correct. All models get ABR Tune-O-Matic bridges. The 50s models get Vintage Deluxe tuners, while the 60s models are treated to 18:1 Grover Rotomatic tuners – tuning stability is solid across the board.
Often referred to as the "tuxedo" guitar, the Les Paul Custom comes with premium appointments and design features not found on any other model.
The Deluxe models, both Epiphone and Gibson are only available in Tuxedo colors, Ebony, and Alpine White. Construction is mahogany, with the customary carved maple top. They have fully bound bodies, front and back and contrasting pickguards. There is very little discernable difference between the Gibson and the Epiphone when it comes to the body.
Both the Epiphone and the Gibson have lightning fast, solid mahogany necks with slim taper profiles. The Epiphone is actually fitted with the same luxurious ebony fretboard as the Gibson, which really goes to show how incredible the value of the Epiphone model is. Both the neck and headstock are fully bound on both brands and both have 22 medium jumbo frets. A difference maker here is that the Epiphone gets pearloid block inlay, whereas the Gibson boasts genuine mother of pearl.
Of course, both brands are equipped with 2 humbuckers and a 3 way toggle switch, but it's the wiring of those pickups that makes the difference. The Epiphone gets the same Probuckers as the Standard models, while the Gibson is treated to the ultra clear Gibson 490R and 498T pups.
As this is the Custom model, gold hardware is found on both models, including tuners, bridge, output jack, pickguard bracket, and pickup covers. Both the Gibson and the Epiphone are equipped with Tune-O-Matic bridges with stopbar tailpieces. The control knobs are the only non-gold hardware on board, and rather than the top hat dials featured on all of the other models, the Custom gets clear speed knobs on the Gibson and the Epiphone
Keep reading to find out all about the similarities between the original Gibson SG and its licensed copy, the Epiphone SG. While both Epiphone and Gibson make a fairly wide variety of SGs, from the ultra budget Epiphone SG Special all the way up to signature Gibson SG Customs, we focused again on the core models.
The SG Standard is a guitar that helped to define the hard rock genre. It boasts iconic looks, superb performance and is a lot more versatile than many give it credit for.
The Gibson SG Standard is constructed around a beautiful mahogany body, as is the Epiphone. The prime difference being the nitrocellulose finish on the Gibson and the hard wearing polyurethane lacquer on the Epiphone. Both guitars have the iconic "devil horn" double cut, and superb ergonomics thanks to the shaped body.
On the Epiphone, you'll find a '60s slim taper neck shape that comfortable for everyone from beginners to experts, where on the Gibson you get a beefy, round neck profile. If you are in to thicker necks, the Gibson is incredibly comfortable, and definitely fast for having a thicker neck.
The fretboard is bound on both guitars, they come with 22 medium jumbo frets, and you'll get a pleasant, if unremarkable Indian laurel Fretboard on the Epi, or a plush rosewood board on the Gibson. Fret markers are trapezoid (pearloid on Epiphone, acrylic on Gibson), and both guitars get a sweet Graphtech nut that helps with tuning stability, tone, and string longevity.
This is another area in which the Gibson shines bright over the Epiphone – the Gibson SG is loaded with 2 humbuckers, both perfectly voiced for this guitar's incredible versatility. There is a Gibson 490R in the neck, and a 490T in the bridge. These pickups span the genres, and can hit the cleans required by country twangers, or they can own the crunch that hard rockers need. On the Epiphone, you get a matched pair of Alnico Classic Pro humbuckers. They are definitely adequate, and can handle most genres, but they do lack the finesse that you find in the Gibsons.
Potentiometers are quality across the board. The Epiphone gets high end quarter sized CTS USA pots, and the Gibson is supplied with hand wired Gibson models. Both offer smooth tapering for huge tonal variety.
Other than the obvious differences between the headstock shape, the only other visual giveaway between the two guitars is the tuners. The Gibson features nickel plated Grover Rotomatics, whereas the Epiphone gets Epiphone Deluxe vintage style, regardless of the difference, both offer excellent stability and smooth action.
Look very closely, and the trained eye might also notice that the Gibson sports a Nashville Tune-O-Matic bridge, whereas the Epiphone has an ABR Tune-O-Matic. The difference is slight, but the Gibson bridge is definitely an upgrade. Finally, both guitars are equipped with the more contemporary 3 ply "batwing" pickguard.
The SG Standard '61 Reissue is an authentic remake of the very first Gibson SG, as it was made back in 1961, back when it became an instant icon.
The body on both the Epiphone and the Gibson is the same, comfortable, tapered, doublecut mahogany slab as you find on the SG Standard, after all, it's this warm, resonant mahogany that drives the unmistakable SG tones. finishes are also the same – polyurethane on the Epiphone, and gloss nitro on the Gibson. It's believed by many that the use of a nitrocellulose lacquer allows the wood of the guitar to breathe, which improves resonance and overall tone
Both the Gibson and the Epiphone have mahogany necks in the same slim taper profile that was used on the original 1961 classic. It's fast and comfortable, and ideal for players of all skill levels. Both instruments have Graphtech nuts, 22 medium jumbo frets, and bound fretboards.
The biggest difference between the two is the fretboard material, which in the Epiphone's case is Indian laurel, vs the rosewood found on the Gibson. The Indian laurel is much more open grained than rosewood, which can feel rough depending on the cut that was selected during manufacturing.
The Epiphone is equipped with the brand's go-to vintage style pickups, the Probuckers, while the Gibson has matched Burstbuckers. The Burstbuckers are significantly hotter than the Probuckers, which helps to voice the hard rock snarl that the SG has become famous for. As with the standard, Epiphone has ensured smooth volume and tone taper by equipping CTS pots, while Gibson has opted for in house designed and wired controls.
The most striking difference between the '61 reissue and the regular standard is the half pickguard. Both the Epiphone and the Gibson have the same 3 ply scratch plate, Vintage Deluxe Tuners, and black top hat knobs. Both are equipped with nickel plated Tune-O-Matic bridges and pickup covers, too.
The '61 issue can also be bought with a Maestro Vibrola Tremolo System on both the Epiphone and the Gibson Models. Both have the iconic harp engraving, and they look incredible. The Maestro system isn't going to allow EVH divebombs, but it does provide a way to squeeze more tonal diversity out of the SG.
The SG Custom is the pinnacle of SG design, loaded with high end trim, and attitude for days.
The SG Custom stands apart from all other SG models here. While still made from mahogany, the Custom is crafted from a single piece, a technique that requires an artisan luthier finding and selecting the perfect piece of wood in order to carve the body. The Epiphone, per the other SG models is also made from mahogany, but from joined pieces.
Both the Epiphone and the Gibson get slim taper necks, fully bound necks and headstocks, and 22 medium jumbo frets on their ebony fretboards. The Gibson is further upgraded over the Epiphone on the fretboard, where you'll find genuine mother pearl inlay.
The Gibson is also PLEK'd, and the action is about as perfect as an action can be. You'll get be able to play huge bends with no choke ups, and playability is overall second to none.
On the Gibson you'll find a pair of Gibson designed and built humbuckers, a 490R in the neck and a 498T in the bridge position. They are extra crunchy under high gain, but sweet and clear when played clean. On the Epiphone, you get a matched pair of Alnico Custom Pro humbuckers, which are voiced exclusively for the SG Custom. They are at the top end of pickups offered from Epiphone, and in their own right are excellent all-rounders than can handle cleans and distortion well.
As is typical on Gibson and Epiphone custom models, hardware is gold. Both have Tune-O-Matic bridges, pickup covers, and gold capped top hat dials. The Gibson is fitted with Grover Rotomatic tuners with kidney style knobs, while the Epiphone, disappointingly, features gold shafted vintage classic tuners with plastic ivory knobs.
Especially since the introduction of Epiphone's Inspired By Gibson Line, the gap between the two brands, both quality and materials-wise has closed significantly. Yes, the Gibson instruments are still superior (vastly in some cases), and there is unlikely to ever be a mass produced instrument that can match the quality of a hand made equivalent, but the advent of CNC machining has really improved the consistency in Epiphone's quality, something they were infamous for in years gone by.
With the current direction that Epiphone are moving in, it is incredibly hard to deny what phenomenal value for money they now represent when you consider how similar they are compared to many of their Gibson counterparts in everything but price tag!
← Boss TU2 Vs Boss TU3 – Classic Boss Tuner Pedals
The Devil Wears Prada – "I am in fact a clinical gear head" →


Tricia's Art: Happy New Year - A return to blogging?
My Creative Journey with paper, paint, pastel and print.
Hello all! It has been quite some time since I posted here!!! Although I hope to spend less time on the computer, I did think I should try blogging on a regular basis. Fingers crossed! Last year I have done a lot of printing, which I love doing, I hope to continue this year, either on my own, or on a new course. Also mixed media seems to call me more and more, although I did quite a lot of pastels over the last year. I did 3 x 3 day art courses at www.jackbeck.co.uk I love going there and have been on courses at Jack Beck for over 10 years now.
great to see your post lots of work and exploration ...happy hew year to you tricia ...best wishes for your husband ... i'd love to try the gelli plates .


One little part of the whole.
We climb high to the snowiest peak, to reach the limits of what we seek. We search down below through the sea, down and down through the mystery. But we can't live upon the snow, just as the water won't let us grow. We are in the middle and will always be, on land, in sand, returning neutrally. Our minds they grasp for something higher. To the heavens we aspire. But we all fall from the mountain. We all rise up from the sea. Highs and lows never stick so easily. The excitement of happiness fades to a lull. The stings of grief eventually dull. We grasp and grasp for anything more, the hole is grows, our lives a chore. We think the answers are something to be found, something above or below, a treasure deep underground. Or perhaps in the stars, it waits for us. Waits to fix all who are lost. We grasp at those feelings, hope they stay, and we are left all alone when they go away. Be okay with here, be okay with now, because we will always be set back on the ground. Grasp at nothing, and accept it all. This perfect existence has never left us at all.
We cannot stay with the birds in flight, we cannot stay with the fish at night. Let us return to the animal that we are. Let us return to pure love and light.
Found my eyes washed away.


text:
Industry Expert
Power List Galleries
PROMO FEATURES
Catering Insight Awards 2019
Catering Insight Awards Microsite
VISIT OTHER WEBSITES FROM PROMEDIA
Meiko details its journey to the digital highway
AnalysisIN-DEPTHWarewashing by Clare Nicholls	on May 28, 2019
All Meiko preventative maintenance appointments are generated automatically according to contract and asset requirements.
Warewasher manufacturer Meiko UK has been an Asolvi customer since 2012. So why has the relationship endured and why does the supplier feel that Asolvi's field service management software is a good fit for the industry?
Originally established 90 years ago in the Black Forest, Germany, Meiko is now a global brand with production facilities in Germany, China and the US. The firm manufactures, installs and maintains dish and glass washers, washer-disinfectors and food waste disposal systems for professional kitchens in bars, hotels, pubs, restaurants, cafes and staff canteens. Its client base includes JD Wetherspoon, Marston's Brewery and DHL.
In the UK, Meiko's service and maintenance operation consists of approximately 35,000 preventative and reactive calls a year, which today are all managed using Asolvi's Tesseract solution. In 2012, Tesseract was selected to replace a piece of service management software that reportedly wasn't fit for purpose anymore.
Nigel Walters, technical services controller for Meiko explained: "There were a lot of things the old system couldn't do, mainly because it wasn't a fully functioning system. It didn't provide engineers with the information they needed in the field, and the information they could get wasn't live. There was no quotation system, no stock control. Engineers could only use it on PDAs. It got to the point where we needed something a lot more advanced."
It was word of mouth that brought Meiko to Asolvi and, specifically, to Tesseract. "A number of us had heard of Tesseract," said Walters. "So we did some research and visited a number of Asolvi customers to see the Tesseract system in action. We were able to visualise how the system would work for us."
In addition to giving engineers more flexibility in the field, Tesseract has enabled Meiko to automate a number of routine and/or time-intensive processes in the office. This includes stock replenishment, previously an entirely manual and unintegrated process, and invoicing, which used to be done in a separate system.
But what's really changed is how Meiko undertakes preventative maintenance. Now, all preventative maintenance appointments are generated automatically according to contract and asset requirements. This saves the manufacturer's planners from having to manually check spreadsheets and paper contracts to find out when maintenance is due before going into the system to manually log the call. It also lets them schedule field engineers up to 3 months in advance so that they can more easily maintain service levels.
Meiko's engineers now have all service call information to hand.
Walters said: "With Tesseract, everything is simpler and more streamlined. Parts are attached to calls – and stay attached to calls – without engineers having to manually input quantities and parts numbers. We have complete visibility of all stock at all times. Costings for invoices are calculated automatically, reducing scope for error. We can complete the invoicing process in the Tesseract system, too. Before Tesseract, we had to export the data to a different system."
Another big change for Meiko has been in the way it creates and logs quotes for new works. The fact that Tesseract's quoting tool is integrated with the rest of the system makes it easy to convert a quote into a call or a call into a quote. "We never had this level of linking in the system before," said Walters. "We had to quote using an entirely different system."
Now when a quote is raised, most of the information required is already there. He explained: "We used to have to input all the information about the customer and the asset manually each time a new quote was raised. With Tesseract, 70% of the data is already there, saving our salespeople 10-15 minutes per quote. This is having a huge and welcome impact on our productivity, particularly given how many quotes we have to do."
Walters admits that reporting was poor on the old system. Meiko had to use an external system and it took a lot of time to compile and process the data. "Tesseract comes with a lot of really good reports," he said. "These are standard reports that we're able to tweak easily to fit our needs. Now everyone has access to the reports they need on a regular basis. The fact that our data is centralised means that reports are compiled with a minimum of effort."
He continued: "Tesseract is a good fit for the catering industry for the same reasons it is a good fit for any kind of repair industry. Asolvi has worked hard to make sure the fundamental elements such as service contract management, preventative maintenance management, mobility, invoicing and reporting, are really strong. Our engineers and our office staff have everything they need to make sure our customers' machines are properly maintained."
Walters went on to explain that it's Asolvi's approach to helping customers that makes its software an even better fit for Meiko's industry. "The way Asolvi listens to its customers is one of the big reasons our relationship with the company has endured. It is constantly investing in its software, trying to improve what it does for us and for our industry. The firm listens to recommendations and if we have a problem or a need, the team never just says 'no'. They want to solve our problems, not just for us, but for them. They want to progress with us."
Tags : asolviMeikosoftwareWarewashing
Catering Design Group races ahead with local business gains
Parsley in Time brings France's 'best wine glasses' to the UK
The author Clare Nicholls
Warewashing brand readies for recovery with upgrade advice
Meiko reveals more details of bottle washer
Wexiodisk unveils most compact combi-warewashing system yet
Meiko dishes up smarter phone access for warewash users
IN DEPTH: Soaking up Brexit preparation
HSE increases spot checks on businesses during lockdown
Rieber brings the canteen to the classroom
Cater-Kwik directors 'more than satisfied' with business performance
Maidaid welcomes Lewis Hodgetts to the team
Recent Comments »
Steven Waterworth on Mark Drazen dedicates Kitchen & Equipment Awards win to late mother
Peter Kitchin on Mark Drazen dedicates Kitchen & Equipment Awards win to late mother
Adam on BREAKING NEWS: Dealer loses court case over 'unreasonable' charges


The Personal Agent are pleased to present this beautiful two bedroom spacious apartment, located in the heart of the highly desirable College Area. The Personal Agent are offering the chance to rent this property for only £950pcm FOR THE FIRST THREE MONTHS of tenancy (the rent will then increase to £1,100pcm from the fourth month).
This first floor purpose built apartment is located close to the centre of Epsom and is just 0.6 miles from the railway station. The accommodation consists of large living room, galley style modern kitchen, two spacious bedrooms and a contemporary family bathroom. This property also benefits from double glazing, allocated parking and access to a garage.
The property is well presented throughout and would make the perfect home for a small family. This property is sure to go quick so please call 01372 726 666 to arrange a viewing.


Multi level marketing is a type of business that include network marketing, direct selling or referral marketing through the pyramid scheme. It stands as a best platform for the companies to distribute their products by the sales promoters through the word of mouth marketing. Indian market welcomes many international and domestic companies to market their products by direct selling. Mainly these companies focus on the chain system where the sales promoters receive rewards not only for the sales but also for the sales done by their hierarchy. Following are the list of Best Multi Level Marketing Companies In India that have been succeeded in promoting their marketing.
5. Tupperware: It is one of the leading MLM Company in India. It was established in 1932 and headquartered in Mumbai, Maharashtra. It is owned by Anglo Dutch Company "Unilever" that owns 67% share in HUL. It deals with the wide range of products that include foods, beverages, cleaning agents and personal care products. It distributes its products through the sales promoters located in different regions of the world. Knorr soups, Bru coffee, Rin, Axe deodorants, Lux soaps, Vim, Sunsilk shampoos, Pears, Pepsodent tooth paste are some of the popular products offered by the company.
4. Avon: It is one of the leading MLM Company in the world that deals with the beauty products. It has been ranked as one of the Americas most admired company for more than decade. It holds presence in more than 100 countries and distributes its products through the franchisees and sales offices located in different parts of the country. It offers quality products to the customers and includes the expertise staff to market and distribute the company products. Beauty products range from the skin care to the personal care and hair care are offered by the company. It holds millions of customers located in various parts of world.
Address: Raj Bhavan Quarters Colony, Somajiguda, Hyderabad, Andhra Pradesh 500082.
3. Amway: It is an American multinational company that deals with the production and marketing of the products worldwide. It was founded in the year 1959 and offers wide range of products under categories like health, beauty, home care products, personal care products, jewelry, electronics, Nutrilite dietary supplements, water purifiers, air purifiers, insurance and cosmetics. It markets its products through a number of affiliated companies located in more than 100 countries and territories in the world. It is one of the largest private MLM Company in the world by research done by Forbes. Artistry, attitude, dynamite, persona, santique are the popular products offered by the company.
2. Oriflame : It is a Sweden based company that was established in the year 1967. It manufactures and sells wide range of cosmetic brands, personal care, accessories and nutritional products. It markets its products through independent sales by using the sale promoters in more than 60 countries. It is a leading MLM company in the cosmetics sector and the company even listed in Nasdaq OMX Nordic Exchange. It holds millions of consultants worldwide and also include R&D department who work with the commitment to offer the best and innovative products of the company. About 1000 products are offered by the company and these are distributed through its 11 franchisees located in different parts of the world.
1. RMP Infotec Private Limited: It is the leading MLM Company that was established in 2001. It was headquartered in Chennai, Tamilnadu and deals with the marketing of cosmetics, kitchen and home products. It is a member of FICCI group that have been providing the best quality products in order to maintain sustainability among other companies. By following the modern techniques company aims to provide the self employment to the customers. It runs its business through the independent distributors located in different parts of the country and the products can be purchased in the showrooms of the respective franchisee and retail outlets.


text:
After Successfully Trolling Fans, Title For Third Sony/Marvel Studios' Spider-Man Film Finally Revealed
Does the whiteboard hint at a WandaVision connection?
Source: Theo Wargo / Getty
Finally, the title of Peter Parker's third cinematic adventure in the Marvel Studios Cinematic Universe has been revealed.
True believers rejoice. The next installment in the Spider-Man movie franchise will be Spider-Man: No Way Home.
As with anything Marvel, there has to be some theatrics. Wednesday (Feb.24), comic book nerds lost their minds when Tom Holland shared on Instagram that the movie would be called Spider-Man: Phone Home along with the still photo from the film.
As expected, the MCU sirens went off with everyone believing that the next film's title was until Jacob Batalon, who plays his best friend Ned in the films, dropped another title, Spider-Man: Home-Wrecker, with a different photo from the film.
Fans immediately knew something was up and instantly believed Zendaya, who plays Peter Parker's love interest, MJ, in the superhero movies, would be the one with the official title. As expected, she too dropped a title, Spider-Man: Home Slice. Yes, she also had a new photo to share from the upcoming film.
No one was really buying that was the name of the film either, and then a couple of minutes later, a post from the official Spider-Man movie Instagram account dropped the real bomb. The post features a video of Holland walking out of director Jon Watts disappointed, revealing to Batalon and Zendaya that he gave them another fake title. Holland expresses confusion about why Watts keeps giving him fake names with Batalon and Zenday pointing to Holland's propensity to spill the beans about his Spidey movies accidentally.
While the trio continues to bickers, they happen to walk past a whiteboard with the film's actual title, Spider-Man: No Way Home, written on surrounded by all the other rejected titles.
Immediately fans began to pick the whiteboard apart for clues, with some believing the hex drawings that appear on it somehow hint that film will somehow have a connection with the Disney+ original Marvel series WandaVision.
Some fans think those fake titles aren't that fake and suggest that it could mean a particular villain could be showing up in the film.
Last but certainly not least, there was that big rumor that we could see the return of Tobey Maguire and Andrew Garfield in their roles as the webhead, a rumor that Holland denied when speaking with Jimmy Fallon while promoting his new film Cherry. We're gonna take his denial with a grain of salt, being that Jamie Foxx's Electro from Amazing Spider-Man 2 and Alfred Molina's Doctor Octopus from Spider-Man 2 have been confirmed to return.
Well, we will have to wait and see. We don't expect a trailer anytime soon, being that Spider-Man: No Way Home isn't set to swing into theaters until December, but one thing we are will to put our money on is the multiverse will play a serious role in the film.
Photo: Theo Wargo / Getty
Marvel Studios Newsletter spider man Spider-Man: No Way Home


text:
barrack obamaconfucianismdemocracyhuman rightspoliticssouth east asia
Benjamin Chiang
Benjamin Chiang is an enthusiast of good advertising, deep thinking, labour issues and chocolate. He writes also at www.rangosteen.com and occasionally on Yahoo! The views expressed are his own.
Marcus Tam says:
There is no doubt that your mention of public safety , the ease to work /conduct business and without fear from crooks are representation of freedoms. But there are obviously other forms of freedom like the freedom to assemble , to protest etc, which citizens of a modern and civilised nation should not be deprived of.
Your example of walking safely in dimly lit streets and leaving car unlocked to suggest safety in Singapore is not fair . Singapore is a small island , which crooks are "easier" to apprehened and car thieves are not able to get stolen cars out. The best measure is to drop your wallet on a busy street and see if it ends up with the police .
If you are to use examples of poor democratic countries in Asia and Africa to demostrate the failures of liberal democratic , how about the success stories of (US-backed) Japan , South Korea , Taiwan and (former British colony) Hongkong ? I am not saying they have no problems , but they have economic successes too.
If you intend to suggest that Singapore is not ready for liberal democracy as it has not meet its pre-requisites. It's really sad because Singapore has one of the highest GDP per capita in the world, so shouldnt we be looking at what is the real problem ?
Confucianism : this i feel is really over-rated by some 'veteran policitian'to justify his talks. The average 'oriental' guy does not even know what Confucianism is, in academic terms.
Ah – my first comment!
Thank you, thank you… I appreciate well constructed replies.
Freedom to assemble and freedom to protest are interesting demonstrations of a people's unhappiness to particular policies, but how constructive is this to a young nation, especially one that is en-route to creating both economical and political stability? Granted, we have a little bit of this now – which probably explains why we are given contained avenues of such expression ie. Hong Lim park, but as far as I know, that park is far from used. I don't agree with picketing, demonstrations and protests in the streets, not in Singapore and not yet at least. Moreover if there is a large enough group voicing a petition in a civilized manner, there have been many situations that the Government has taken heed and given way to such requests.
The Japan, South Korea, Hong Kong and Taiwan you've mentioned are all Oriental societies with Confucian backgrounds also Marcus :) I'm not sure which "veteran politician" you're talking about, but the Confucian I know comes from understanding our Oriental roots. Like I mentioned earlier, even if you've never studied Confucianism, you're probably observing it unknowingly: our code of showing respect to elders, how we conduct our family matters, our decisions in life etc.
No, unfortunately GDP per capita is not the only measure of how ready a country is for liberal freedom. Responsibility and education are more important. In a nutshell, if you find that if people keep to the left on the escalators, stop driving like they own the roads, stop quarrelsome and aggressive behavior (the AWARE saga is a good example) and when a provision shop can trust individuals to pay correctly for their goods even without being monitored – then perhaps we are ready. These may seem like trivial matters to you, but it is a benchmark of what people would do when faced with liberal freedom: would they use it to fulfill the selfish interests of a few, or are they thinking of a society at large?
Ah-Johned says:
The post above suggest an underlying misconception about the "Western World Democracy". The democracies of the Western World was fostered and created in the context and backdrop of Christianity. Christianity's believe in the 'original sin of man' translated into an innate distrust of people. This is in contrast with traditional Confucius's believe of "人之出,心本善". Under this backdrop, the founders of America decided to create a superior system of check and balances to avoid a dictator of Nazi proportion. Thus, in all sense of the word, the American democracy was built based on the intention that an good system will survive incapable leaders. This has largely been proven to be true as the US survive a civil war and even a treacherous President in it's course of history.
That same, unfortunately, cannot be said of Singapore. Who is to say that Singapore can survive after just a few years of an inept leader in office. Already, there is certain pessimism about Singapore's future post-Lew Kuan Yew.
Thus, Western emphasis on Rights and Freedom has allowed it to built an society that is both prosperous but also rich in social capital. While Singapore remain one of the highest GDP per capital states in the world, statistics points to a dismal social capital including deep distrust among it's own citizen.
Your points regarding democracy having pre-requisites are true, however, keep in mind that the infant America was neither rich nor educated.
Oomaam says:
Description : In Pictures: Singapore. Apr 6, 2011 ? 8:42 pm No Comments. Photographer Awais Shah takes us to the heart of Singapore through his vianbrt pictures of the Marina Bay Sands Resort and the city skyline along the Singapore River. .. […]
Ryan Teo says:
Singapore's political system is indeed unique – born of a mish mash of both the Communist Politoburo and the British political system, which is probably why Lee Kuan Yew chose to remain in moderate power for so long, just to see how leadership transition and renewing can work out (how many of us wish that Mandela was still in power?) So far it turns out well and until signs of failure show, power slanted to the ruling party is not that bad an idea (as it is observable). Our system of voting also helps in instlling a "safety release valve" in the case should the PAP ever really fail to manage the country – a safety feature of democracy.
Infant America is made up of a whole wealth of immigrants (something that the politically/economically unenglightened are trying to fight) that brought them the support of European busness networks. Moreover, they have had many hundreds of years of work before getting to this level of freedom (which in the past few decades is also showing signs of buckling). Singapore (and China for that matter) realized explosive economical power and is able to move large amounts of their citizens out of poverty in mere decades.
Above normal discipline, all of us enjoy the same freedom (if not more) than the average Westerner. If you stand back and have a general feel – it is not that bad and there are no indicators that point to the need of a change of system.
As for the matter of social capital distrust, I'd like to discuss that in a future post… still gathering information at the moment.
Most of my points of views and opinions are slanted towards economic management (citizens have jobs and they have a chance to make their lives happier – through their own means). So it is on this paradigm that I am writing my articles, not Human Rights, not the Magna Carta and most definately not Western ideals.
I've lived in Europe – I love the freedom they enjoy… but I feel this system would not work here until us Singaporeans sort out our political maturity.


text:
Q: When the refresh token is expired in JWT then how we can alive in the same session? As the refresh token is expired we have to re-login the user again for new access and refresh token so my question is how we can alive in the same session even after the refresh token is expired?
I have tried this in settings.py
SIMPLE_JWT = {
   'ACCESS_TOKEN_LIFETIME': timedelta(seconds=60),
   'REFRESH_TOKEN_LIFETIME': timedelta(seconds=120),
}

redpajama_set_name: RedPajamaStackExchange


The owners of the Baron Hotel in Aleppo helped Armenian and Assyrian refugees in 1916. They are helping refugees in the war-torn city today.
Why should we care about the destruction of an evil empire and the great humanitarian efforts of a hundred years ago? Read my blog regularly to find out.


Https Buffalo Craigslist Org Boa D Chris Craft Foot Html is free HD wallpaper. This wallpaper was upload at April 21, 2019 upload by admin in .You can download it in your computer by clicking resolution image in Download by size:. Don't forget to rate and comment if you interest with this wallpaper.