text:
Employees Want Additional Opportunities for Career, Skills Development
#Paul Bergeron
By Paul Bergeron March 24, 2022
The Great Resignation of the past two years has HR departments striving for solutions to retain and recruit key workers. Some are finding that the way to solve this challenge is to start by improving the employee experience—specifically, their career and skills development.
Joe Dusing, senior director of learning and development for Paylocity, urged HR practitioners not to get tied up in the term "Great Resignation."
"You shouldn't be doing anything about the Great Resignation," he said. "You should be doing something about employee experience. Every potential employee wants to know two things: 'What are the skills that I need?' and 'What are the programs that you have in place to support me?' If you don't have answers, they likely won't want to work for your company.
"At this point, everyone wants to go to the next level and be informed of how to do it," he added. "You need to have this structure and opportunity in the first place to attract talent."
Combining Automation and Ambition
The University of Phoenix's Annual Career Optimism Index 2022, an analysis of 5,000 employees and 500 companies conducted Dec. 12, 2021, through Jan. 6, 2022, and released March 14, delved into workers' feelings about their worth and career goals.
Automation is creating some fear in workers' minds as they contemplate what's ahead. Consider that the index found 52 percent of today's employees believe they are "easily replaceable in their jobs" and 57 percent of employers said the same of their employees. In addition, 41 percent of employees fear losing their jobs.
Nearly half (40 percent) said they "worry their job skills will become outdated because of advancements in technology such as automation, artificial intelligence and robots." This attitude was found to be more prevalent among members of Generation Z (47 percent) and Millennials (45 percent) than Baby Boomers (35 percent) and members of Generation X (41 percent).
That sentiment is also greater among Black Americans (49 percent), Latino Americans (48 percent) and Asian-Americans (49 percent) than white Americans (38 percent).
Still, according to the index, 81 percent of Americans are hopeful about their careers and 95 percent of employers are optimistic about the future of their employees' careers.
Playing Catch-Up on Skills Development
In 2020 and 2021, many workers either left their jobs or took some time off to re-energize. They are now realizing they need to catch up on skills development, said Stacey Berk, founder and managing Consultant at Expand HR Consulting.
"Employees are realizing that they need to broaden their skills in many areas to keep fresh, focused and current and move forward," Berk said. "With the technology tools available in learning and development, they are also finding that these programs can be engaging and exciting. Plus, they can add their acquired skills to their resumes potentially for internal (and sometimes external) promotions."
Yvonne Bell, senior vice president of people and culture at global learning innovation company D2L, said employees are more aware than ever of the gap between their current skills and ones they might need for future roles inside—or outside—their organizations.
"At the current rate of change, skills are expiring faster than many teams can respond to," she said. "And while employees might recognize their skills are outdated, it's important businesses begin to find ways to support employees, both financially and with enough time to devote to gaining new skills. We've been talking about the future of work for a few years now; that future is here."
Gap Between Desires and Opportunities
The index reported that 68 percent of workers say they would stay with their employer throughout their career if the employer made an effort to upskill them, while 65 percent of workers said they would stay throughout their career if their employer made an effort to reskill them.
Yet the index showed that 40 percent of employees do not see a clear path to advance their careers; younger and Latino workers and those making under $50,000 per year are most likely to feel that way.
Workers need more skills development opportunities and their employers know it, according to the index: 49 percent of employees want to develop their skills but don't know where to begin—this is up 6 percentage points compared to 2021—and 66 percent of employers believe the same.
More than half (52 percent) of workers said they need to learn new skills within the next year to continue their careers; 46 percent of employees said they are not as skilled as they need to be. However, 29 percent don't feel optimistic about the opportunities they have for training, upskilling or learning new skills.
Measure Employee Competencies
Paylocity measures every employee's competencies throughout the time the employee has been with the company.
"We measure not only what skills and competencies are needed for the next level, but [also] what skills and competencies will make the individual a successful member of our organization," Dusing said.
"It's all about recognition, and if someone says, 'Hey I want to be a leader here,' we have a model in place to say, 'Well, you need to exhibit X progression now, Y progression later and then you'll be at Z level.' It's a consistent guideline, and that's how we determine whether someone's skills are outdated or if they're excelling."
Ongoing learning opportunities are part of Camden's new benefits structure, said Allison Dunavant, vice president of organizational development at the apartment operator.
"Candidates want to know how we are going to grow them," she said. "We ensure that employees have opportunities based on their individual strengths. We are introducing new tools that help leaders leverage individuals' strengths across their team. We conduct leadership training for employees at the manager level and above to align everyone on what it means to lead at Camden."
Kristie Leigh, talent development manager for JK Moving Services and CapRelo, said her company evaluates employee growth and succession planning and performs strengths/skills assessments so it can provide upward mobility to employees.
JK Moving educates staff on the educational tools it offers and implements professional development workshops that focus on building confidence, improving time management skills, setting priorities, and communicating with tact and finesse. "A majority of our enrollment in these programs is self-initiated," Leigh said. "Employees are eager for growth, development and upskilling."
Jessica Eberbach, vice president of people and culture for apartment operator TriCap Residential, said career-pathing is a great focus.
"We're a growing company, and we've been adding new jobs," she said. "For our current employees, we assign mentors who can explain and demonstrate leadership roles in our company so employees can see if they want to scale up.
"We let our employees choose if they want to grow into these positions. So, for example, a person might be in sales but could explore a leadership career path in accounting. We want employees to feel empowered in their career journeys and not simply be told what fields they can and cannot train in."
Christina Gialleli, director of people operations at learning technology company Epignosis, said providing new managers and team leaders with leadership training is a top priority and that finding the right content is the No. 1 obstacle to most learning and development initiatives.
"A hybrid approach is most effective," she said. "For compliance training, or when we want to teach the basics of a specific subject, we use our learning management system's library of ready-made courses, which are fun, short and engaging. This combination is ideal for the hybrid workforce because it gives the employee flexibility to complete the training on their own time."
The management system also offers live webinars and hands-on workshops with external training to facilitate interaction, Q&As and application of the newly acquired knowledge, said Gialleli, who allocates a specific training budget per employee so employees can choose the training they prefer, ranging from live workshops to online courses.
A Clear View of Their Future
Companies are facing barriers in their efforts to skill their employees, the Career Optimism Index found. The top reasons for not investing in employee upskilling/reskilling include:
Finding time (cited by 42 percent of respondents).
Lack of employee interest in participating (39 percent).
Identifying and understanding what skills gaps exist (38 percent).
Budgeting for the training (35 percent).
Dusing said leadership teams sometimes can be a barrier, especially those that are heavily tenured and set in their ways.
"The 'put-your-head-to-the-grindstone' mentality that got them to where they are is not necessarily how people want to get there today," Dusing said. "It's a balance of work and quality of life. Employees are OK if it takes longer to get there if they have this balance."
He said some leadership teams don't understand the importance of this balance. "You need an ecosystem for your employees so they can see their futures," he said. "It's OK if that future is further away, as long as they can see it. There's a misconception that you need to provide employees with exactly where they'll be at a certain point, and that it has to be fast. It doesn't have to be fast—it just has to be clear."
Paul Bergeron is a freelance writer based in Herndon, Va.
Member Benefit: Ask-An-Advisor Service
SHRM's HR Knowledge Advisors offer guidance and resources to assist members with their HR inquiries.
People Manager
How to Dissuade Micromanagers
How to Train Young Managers to Supervise Older Employees


text:
Q: Kivy ScreenManager can't reference class from .py file class any more. Attribute error: 'super' has I just started developing my first app in python using kivy. I generated the general layout of the app and also some logic in an python file in addition to my main py to seperate everything a bit. This worked perfectly fine and the app was running without any issues. I wanted to add some screens when hitting buttons that provide extra information. Managed to do so, but now the app crashes when hitting the buttons that worked before adding the extra screens. Those buttons use classes that aren't implemented in the main.py but in a side file. Like I explained, they worked before adding the ScreenManager. here's the short version of the error I get: AttributeError: 'super' object has no attribute '__getattr__'
Main.py:
peenomat.py
import kivy
# -*- coding: iso-8859-1 -*-
from kivy.app import App

from kivy.uix.button import Label
from kivy.uix.widget import Widget
from kivy.uix.textinput import TextInput
from kivy.lang import Builder
from kivy.uix.anchorlayout import AnchorLayout
from kivy.core.text import LabelBase
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty
from kivy.properties import ObjectProperty
from kivy.config import Config

Builder.load_file('Header.kv')
Builder.load_file('Statusbar.kv')
Builder.load_file('Inputparameters.kv')
Builder.load_file('Outputparameters.kv')
Builder.load_file('Extra.kv')
#loading main kv
Builder.load_file('peenomat.kv')

class Peenomat(Screen):
    pass

class Instruction(Screen):
    pass

class Additional(Screen):
    pass

# Create the screen manager
sm = ScreenManager()
sm.add_widget(Peenomat(name='peenomat'))
sm.add_widget(Instruction(name='instruction'))
sm.add_widget(Additional(name='additional'))

class PeenomatApp(App):
    def build(self):
        self.icon = 'icon.png'
        #return pm
        return sm
        #return Peenomat()

if __name__=="__main__":

    PeenomatApp().run()

the main kv.file:
peenomat.kv
<Peenomat>

    AnchorLayout:
        anchor_x: 'left'
        anchor_y: 'bottom'
        GridLayout:
            cols: 1

            InputParameters:
                id:_input_parameters

            StatusBar:
                id:_status_bar

<Instruction>:
    AnchorLayout:
        anchor_x: 'left'
        anchor_y: 'bottom'
        GridLayout:
            cols: 1
            canvas.before:
            Label:
                text:

            Button:
                text:
                on_release:
                    app.root.current = "peenomat"
                    app.root.transition.direction = "up"

<Additional>:
    AnchorLayout:
        anchor_x: 'left'
        anchor_y: 'bottom'
        GridLayout:
            cols: 1
            Button:
                text:
                on_release:
                    app.root.current = "peenomat"
                    app.root.transition.direction = "left"

the .kv file where I reference the function of the buttons:
statusbar.kv
#: import statusbar StatusBar

<StatusBar@BoxLayout>

    orientation:'horizontal'
    padding:
    spacing:

    Label:
        size_hint: 0.05, 1

    Button:
        text: 'Leeren'
        on_press: root.btn_clear()

    Button:
        text: "Mehr"
        on_release:
            app.root.current = "additional"
            app.root.transition.direction ="right"

    Button:
        text: u"Los schl\u00e4gts"
        on_press: root.btn_submit()

    Button:
        text: "?"
        on_release:
            app.root.current = "instruction"
            app.root.transition.direction ="down"

and finally the python file that provides the classes where i generate the functions of the buttons that now crash:
StatusBAr.py
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.properties import ObjectProperty
from kivy.properties import StringProperty
from kivy.app import App
from kivy.lang import Builder
#from Inputparameters import InputParameters

ver = ''
class InputParameters(GridLayout):
    verfahren =ObjectProperty(None)

    def on_state(self, togglebutton):
        tb = togglebutton
        global ver
        if tb.state == 'down':
            self.verfahren = tb.text
            ver = tb.text
            print(self.verfahren, ver)
            return self.verfahren

class StatusBar(BoxLayout):
    #InputGrößen
    group_mode = False
    prozess = ObjectProperty(None)
    vorbehandlung = ObjectProperty(None)
    material = ObjectProperty(None)
    haerte = ObjectProperty(None)
    rauheit = ObjectProperty(None)
    verfahren = ObjectProperty(None)

    #OutputGrößen
    frequency = StringProperty(None)
    speed = StringProperty(None)
    hub = StringProperty(None)

    def btn_submit(self):
        global ver
        ip = App.get_running_app().root.ids._input_parameters
        op = App.get_running_app().root.ids._output_parameters

        frequenz = 0
        if ip.haerte.value < 50:
            op.frequency = str(180) +" Hz"
            op.speed = str(2.4) +" mm/s"
            op.hub = str(3.4) + " mm"
        elif ip.haerte.value < 60:
            op.frequency = str(200) +" Hz"
            op.speed = str(3.5) + " mm/s"
            op.hub = str(5.23) + " mm"
        else:
            op.frequency = str(220) +" Hz"
            op.speed = str(1.2) + " mm/s"
            op.hub = str(7.2) + " mm"
        #control to see if right value is taken
        print(op.frequency)

    def btn_clear(self):
        ip = App.get_running_app().root.ids._input_parameters
        op = App.get_running_app().root.ids._output_parameters
        ip.pro1.state = "normal"
        ip.pro2.state = "normal"
        ip.pro3.state = "normal"
        ip.material.text = "Auswahl treffen"
        ip.vorbehandlung.text = "Auswahl treffen"
        ip.haerte.value = 55
        ip.rauheit.value = 5.5
        op.frequency = "---"
        op.speed = "---"
        op.hub = "---"

so if the buttons submit or clear are used I get the following error:
[INFO   ] [Base        ] Leaving application in progress...
 Traceback (most recent call last):
   File "kivy\properties.pyx", line 860, in kivy.properties.ObservableDict.__getattr__
 KeyError: '_input_parameters'

 During handling of the above exception, another exception occurred:

 Traceback (most recent call last):
   File "C:/Users/schum/Dokumente/TUD/Masterthesis/Peenomat.py", line 79, in <module>
     PeenomatApp().run()
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\app.py", line 855, in run
     runTouchApp()
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\base.py", line 504, in runTouchApp
     EventLoop.window.mainloop()
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\core\window\window_sdl2.py", line 747, in mainloop
     self._mainloop()
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\core\window\window_sdl2.py", line 479, in _mainloop
     EventLoop.idle()
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\base.py", line 342, in idle
     self.dispatch_input()
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\base.py", line 327, in dispatch_input
     post_dispatch_input(*pop(0))
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\base.py", line 233, in post_dispatch_input
     listener.dispatch('on_motion', etype, me)
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\core\window\__init__.py", line 1402, in on_motion
     self.dispatch('on_touch_down', me)
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\core\window\__init__.py", line 1418, in on_touch_down
     if w.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\screenmanager.py", line 1191, in on_touch_down
     return super(ScreenManager, self).on_touch_down(touch)
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\widget.py", line 549, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\relativelayout.py", line 288, in on_touch_down
     ret = super(RelativeLayout, self).on_touch_down(touch)
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\widget.py", line 549, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\widget.py", line 549, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\widget.py", line 549, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\widget.py", line 549, in on_touch_down
     if child.dispatch('on_touch_down', touch):
   File "kivy\_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\uix\behaviors\button.py", line 151, in on_touch_down
     self.dispatch('on_press')
   File "kivy\_event.pyx", line 703, in kivy._event.EventDispatcher.dispatch
   File "kivy\_event.pyx", line 1214, in kivy._event.EventObservers.dispatch
   File "kivy\_event.pyx", line 1098, in kivy._event.EventObservers._dispatch
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\venv\lib\site-packages\kivy\lang\builder.py", line 64, in custom_callback
     exec(__kvlang__.co_value, idmap)
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\Statusbar.kv", line 38, in <module>
     on_press: root.btn_submit()
   File "C:\Users\schum\Dokumente\TUD\Masterthesis\StatusBar.py", line 41, in btn_submit
     ip = App.get_running_app().root.ids._input_parameters
   File "kivy\properties.pyx", line 863, in kivy.properties.ObservableDict.__getattr__
 AttributeError: 'super' object has no attribute '__getattr__'

the function of the buttons is to get selected parameter out of this .kv.file
inputparameters.kv
#: import statusbar StatusBar

<InputParameters@GridLayout>
    #Initialisierung .py zu .kv Ids
    prozess: _prozess
    pro1: _prozess1
    pro2: _prozess2
    pro3: _prozess3
    vorbehandlung: _vorbehandlung
    material: _material
    haerte: _haerte
    rauheit: _rauheit

    cols: 2
    padding: 25
    spacing: 10

    #Prozess
    Label:
        text:'Prozess:              '

    BoxLayout:
        orientation: 'horizontal'
        id: _prozess

        ToggleButton:
            id:_prozess1
            text:'P-MOH'
            group: "proc_group"
            on_state: root.on_state(self)

        ToggleButton:
            id:_prozess2
            text:'E-MOH'
            group: "proc_group"
            on_state: root.on_state(self)

        ToggleButton:
            id:_prozess3
            text:'PE-MOH'
            group: "proc_group"
            on_state: root.on_state(self)

    #Material

    Label:
        text: 'Material:'

    Spinner:
        id: _material
        text: "Auswahl treffen"
        values: ['1.2379', 'Gusseisen', 'Kautschuk', 'Carbon', 'Adamantium']

    # Herstellschritte
    Label:
        text:'Fertigungsschritte:'

    Spinner:
        id: _vorbehandlung
        text: "Auswahl treffen"
        values: [u'Fr\u00e4sen', 'Erodieren', 'Schleifen', 'Polieren']

    # Haerte
    Label:
        text: u"H\u00e4rte:"

    BoxLayout:
        orientation: 'vertical'

        Label:
            text: str(_haerte.value) + ' HRC'

        Slider:
            id: _haerte
            min: 45
            max: 65
            step: 1
            value_track: True

    # Rauheit
    Label:
        text:'Rauheit:'

    BoxLayout:
        orientation: 'vertical'
        Label:
            text: str("%.1f" % _rauheit.value) + ' Rz' #eine Nachkommastelle

        Slider:
            id: _rauheit
            min: 1
            max: 10
            value_track: True

whats weirrd is that the togglebuttons can still use the function generatet in the statusbar.py and do their job.
I hope you can help me out with this and don't even know where to start...
Thank's in advance!

A: The ids dictionary is created for each rule in the kv file, and those ids are placed in the dictionary for the root of that rule. So the _input_parameters id is only in the ids of the Peenomat instance.
So, I think you need to change:
    ip = App.get_running_app().root.ids._input_parameters

to something like:
    ip = App.get_running_app().root.get_screen('peenomat').ids._input_parameters

The root of your App is the ScreenManager, and get_screen('peenomat') gets the Peenomat Screen instance.

redpajama_set_name: RedPajamaStackExchange


text:
Doctor Delegates 'Hot' Wired After Clinton's Talk
by David Pittman David Pittman, Washington Correspondent, MedPage Today September 06, 2012
CHARLOTTE, N.C. -- The life of a delegate at a national political convention involves attending a lot of rallies and caucus meetings -- but the "thrill" of the event is having a ringside seat for the speeches delivered by party luminaries like former president Bill Clinton, First Lady Michelle Obama and, of course, the acceptance speech by President Barack Obama.
As the convention's final day dawned, Charlotte and the conventioneers were still riding high on Clinton's keynote speech Wednesday night, and two doctor delegates from the host Tar Heel state were no different.
"I particularly liked how he talked about Medicare and Medicaid," Eric Mansfield, MD, an ear, nose, and throat surgeon from Fayetteville, N.C., said. "I think there's a big misnomer among people who think Medicaid is only for the welfare moms."
But in North Carolina, Mansfield said 80% of Medicaid spending is consumed by 17% of the population; those are the elderly and disabled.
Each were points former President Bill Clinton addressed in his keynote speech Wednesday night.
"When he said that, I think that should resonate across the country," Mansfield said. "What we're really talking about is cutting funding for seniors and the disabled."
To J. Wayne Riggins, OD, MD, an ophthalmologist from Fayetteville, N.C., Clinton has an everyday-man approach from Arkansas that can also develop and articulate policies in a way that captures audiences.
But Tuesday's address from the first lady was also a highlight for Riggins.
"Michelle Obama reminded us that there are two people in the White House who are among the smartest people to ever occupy the White House," he said.
Just attending the convention this week reminded Riggins of why he's a doctor.
"This looks like America. This looks like the people I take care of. This looks like what I was supposed to do when I signed up to be a physician," Riggins said.
Like many of his fellow Democrats here, Riggins supports the Affordable Care Act and the concept of a First-World country having an obligation of caring for its people.
"There may be some policy differences in the early stage in the development of these policies as we move forward as a country that we need to negotiate," Riggins said. "But the central question of whether or not this is the right thing to do is off the table as far as I am concerned."

redpajama_set_name: RedPajamaCommonCrawl


FIDO: Hey, Fluff, you and your mom left early today. Where did you go?
FLUFFY: We went to the veterinarian. Ugh. I hate riding in the car.
FIDO: I love car rides. But I'm not too crazy about going to the vet. How was it?
FLUFFY: Not too bad. But the vet was telling my mom about all the things other pet parents had done to upset their vets.
FLUFFY: Oh, stuff like… you know what? This is pretty important. Let's tell Meryl so she can help pet parents understand how to help their vets keep us healthy.
FIDO: Good idea. Let's go!
…And so they did. Here are a few things that make your vet crazy…and one that does exactly the opposite.
Bringing uncaged cats and off leash dogs into the office. We know that Fluffy and Fido are the sweetest, most adorable creatures on the planet, but even those wonderful beings can get pretty freaked out when visiting the vet. Many innocent people and animals have been scratched, clawed, bitten, and even knocked over by cats or dogs running amok at the vet. Remember, this is a stressful experience for your animal, and even the most placid pet may exhibit unexpectedly aggressive behaviors in this situation. You can minimize any potential damage by keeping dogs on a short leash, and cats in a sturdy carrier.
Answering your phone. It's funny how people seem to forget all the rules of polite society when their cell phones beckon. They text during job interviews, check emails during dinner dates and even answer the phone while at the vet! Your vet is busy, and he or she has lots of other patients waiting. Every time a pet parent answers the phone during their visit, it puts them a little more behind. They will really appreciate it if you will put your phone on silent and wait to return calls until after your visit.
Ignoring or changing the care plan. Some people just can't give pills or injections, clip nails, clean ears or keep up with grooming. There's no shame in that; we all have different skill sets. But do share that information with your vet so that he or she can work with you on an alternate plan! Vets have a lot of tools in their toolboxes, but they won't offer them if they think you're good with the one they've already recommended. So as soon as you realize that a particular protocol isn't going to work for you, give your vet a call and get some guidance.
Refusing to pay. This happens more often than you would think. Your vet or veterinary assistant should explain everything to you, including fees, before doing any procedure or test, and you will always have the opportunity to refuse the service. But if you accept it, please pay for it! If you have honestly misunderstood something, or feel that it wasn't communicated clearly, talk it over with your vet. He or she will work with you to come up with a solution that's fair to both of you.
Bonus Tip! Know what vets and their staffs absolutely love? A pet parent who says "thank you" at the end of the appointment. So the next time you visit, offer a smile and a word of thanks before you leave. It'll make their day.


This is my record of the week.
Before I write a review of a record I like to scan what's out there already so I don't repeat what has already been said to death. Then I came across this EPIC REVIEW of the record and thought there was no way I could possibly come close to giving this genius collection of obscure punk from Wales nearly as much love.
Just when I think I have a slight knowledge of underground weirdo post punk - a record like this comes out and makes me realize how little I actually know. My only complaint about the record is as detailed and full of facts the booklet is - all 22 pages - it doesn't read in track listing order so you have to flip around if you are listening to the disc and trying to match the liner notes to each new song. Not a big deal but a flaw to me none the less.
You can hear a few tracks here as well as read another review of the comp.
Go to Hyped 2 Death to purchase this comp and many others (link below). I personally recommend the Hyped2death compilation series of obscure old school punk rock from all over the world.


text:
Q: php 5.3 avoid try/catch duplication nested within foreach loop (code sandwich) I have a class with methodA, which has existing structure as following
function methodA() {
  $providers = $this->getFirstSetOfProviders();
  foreach ($providers as $provider) {
    try {
      $this->method1($provider);
    } catch ( Exception $e ) {
      // exception handling
    }
  }

  $providers = $this->getSecondSetOfProviders();
  foreach ($providers as $provider) {
    try {
      $this->method2($provider);
    } catch ( Exception $e ) {
      // exception handling
    }
  }
}

The content for the catch clauses are identical.  Is there some way to organize the code to avoid repeating the structure of try/catch nested in a foreach loop?  Conceptually, I am trying to do
function methodA() {
  foreach ($providers as $provider) {
    $method1 = function($provider) {
      $this->method1($provider);
    }
    $this->withTryCatch($method1);
  }
  ...
}

function withTryCatch($method) {
  try {
    $method;  // invoke this method somehow
  } catch (Exception $e) {
    // exception handling
  }
}

This looks similar to the Code sandwich, but I am not sure how to proceed in php.
UPDATE:
The try/catch is nested inside the foreach loop so that when an exception is thrown, it's handled and the execution continues to the next iteration in the loop instead of terminating the loop.

A: The nice thing about Exceptions is that they are objects that can be passed around like any others. So you can remove the duplicate code (except the basic boilerplate) without changing much:
foreach ($providers as $provider) {
    try {
      $this->method1($provider);
    } catch ( Exception $e ) {
      $this->handleException($e);
    }
}

Note: If you also need some context within the exception handling (i.e. $provider), just give handleException() more parameters.
Part 2: Refactoring the whole method
You wanted to know how to further remove duplication. I don't know if this makes sense in your actual code, it could as well be over-engineering. You will have to decide that by yourself. The following is an implementation of the Template Method pattern. Forgive the crude naming but I tried to follow your example and I have no idea what you are doing.
abstract class ClassThatDoesThingsWithProviders
{
    public function methodA($providers)
    {
        foreach($provicers as $provider) {
            try {
                $this->methodThatActuallyDoesSomethingWithProvider($provider);
            } catch(Exception $e) {
                $this->handleException($e);
            }
        }
    }
    protected function handleException(Exception $e)
    {
        // handle exception
    }
    abstract protected function methodThatActuallyDoesSomethingWithProvider($provider);
}
class ClassThatDoesThing1WithProviders extends ClassThatDoesThingsWithProviders
{
    protected function methodThatActuallyDoesSomethingWithProvider($provider)
    {
        // this is your method1()
    }
}
class ClassThatDoesThing2WithProviders extends ClassThatDoesThingsWithProviders
{
    protected function methodThatActuallyDoesSomethingWithProvider($provider)
    {
        // this is your method2()
    }
}

class YourOriginalClass
{
    protected $thingsdoer1;
    protected $thingsdoer2;

    public function __construct()
    {
        $this->thingsdoer1 = new ClassThatDoesThing1WithProviders;
        $this->thingsdoer2 = new ClassThatDoesThing2WithProviders;
    }
    public function methodA()
    {
        $this->thingsdoer1->methodA($this->getFirstSetOfProviders());
        $this->thingsdoer2->methodA($this->getSecondSetOfProviders());
    }
}

You could easily make an array out of thingsdoer1 and thingsdoer2 and maybe abstract getFirstSetOfProviders and getSecondSetOfProviders alongside. Also I don't know what the actual method1 and method2 implementations depend on, maybe you cannot extract them like that without breaking cohesion.
But as I don't know your real code and what you are doing I cannot recommend a concrete strategy, regard my example above as a starting point.

A: function methodA() {
  try {
      $providers = $this->getFirstSetOfProviders();
      foreach ($providers as $provider) {
          $this->method1($provider);
      }

      $providers = $this->getSecondSetOfProviders();
      foreach ($providers as $provider) {
          $this->method2($provider);
      }
  } catch ( Exception $e ) {
    // exception handling
  }

}


The Northwestern Mutual WayThe ambition of the Northwestern has been less to be large than to be safe; its aim is to rank first in benefits to policyowners rather to first in size. Valuing quality above quantity, it has preferred to secure its business under certain salutary restrictions and limitations rather than to write a much larger business at the possible sacrifice of those valuable points which have made The Northwestern pre-eminently the policyowner's company.
My mission as a Northwestern Mutual Financial Network Advisor is to help bring clarity to your current financial picture along with your future financial goals. Drawing upon the support of a network of financial specialists, I will provide innovative solutions using world-class insurance services and internationally recognized investment products to help you achieve financial security.


An XML firewall differs from a conventional firewall because its major task is to control access to web services rather than to filter untrusted addresses. An XML firewall can effectively protect web services from being attacked by inspecting a complete XML message including its head and data segments, and rejecting unauthorized web services invocation. In this paper, we propose a formal XML firewall security model using role-based access control (RBAC). Our proposed model supports user authentication and user authorization according to information stored in a user database and a policy database associated with an XML firewall. The formal model is designed compositionally using Petri nets, which can serve as a high-level design for XML firewall implementation. The key components of our compositional security model are the application model and the XML firewall model. To illustrate the advantages of our formal approach, we use an existing Petri net tool to verify some key properties of our model, such as boundedness and liveness.


Vaulted Ceiling Lighting Provide The Same Amount Regular But Use Less Energy That Means Pay Less .
Cost Of Vaulted Ceiling #9 Here, The Lighter Pine Beams Support The Vaulted Roof Of This Attic Family Room.
Cost Of Vaulted Ceiling was uploaded at October 17, 2018 at 7:47 am. This blog post is uploaded at the Ceiling category. Cost Of Vaulted Ceiling is tagged with Cost Of Vaulted Ceiling, Cost, Of, Vaulted, Ceiling..
Cost Of Vaulted Ceiling is not simply functional incorporate your backyard, but also increase convenience. Incorporating intensive backyard stand and comfy seats could turn a yard into a room foods. Pick a backyard stand smartly by after the guidelines stated below. It's important to consider the yard search you want. Do as you or a diningroom simply need to produce a spot to relax, you want to use?
Predicated on your preferences, you'll be able to contemplate purchasing a backyard table-based about the dimension and construction resources. You then should spend more time about the maintenance of the stand instead of enjoying your relaxing occasion if you use a backyard desk with its advanced attributes. You should buy a table made from material, bamboo or fir wood maintenance that is much does not be required by that.
You're able to prolong living of one's backyard stand by storing them in an area that is protected when not inuse. You're able to place it while in the attic or garage when not inuse. Thinking about the quality of the obtained Cost Of Vaulted Ceiling. Take a look at the resources used in the production of backyard table and never predicated on cheapness backyard desk that is expensive. This ensures furniture for the backyard lasts longer than-expected a seed that climbs segmented, and contains thorns.
Category: Ceiling. Ceiling Projection Clock was published on June 6th, 2018 by and tagged as: Ceiling Projection Clock, Ceiling, Projection, Clock.
Category: Ceiling. New Pop Design For Ceiling was published on February 11th, 2019 by and tagged as: New Pop Design For Ceiling, New, Pop, Design, For, Ceiling.
Category: Ceiling. Ceiling Decals was published on January 8th, 2019 by and tagged as: Ceiling Decals, Ceiling, Decals.


text:
Beafadas, por vezes biafadas ou biafares, é um grupo étnico cujas populações estão repartidas pelos territórios da Guiné-Bissau, Senegal e Gâmbia, sendo considerado parte dos povos tenda. O grupo é também designado por bidyola, dfola, dyola, fada e yola. Falam vários dialectos da língua beafada, um idioma pertencente à família das línguas Níger-Congo.

Demografia
Na Guiné-Bissau, os beafadas estão divididos em quatro grupos: (1) um pequeno grupo que vive na margem norte do rio Geba e fala o dialecto gool; (2) e (3) dois grandes grupos que residem na região de Quinara, a parte sudoeste do país, e falam os dialectos bubwas e guinala; E (4) um quarto grupo que vive na província meridional de Tombali, na fronteira com Guiné-Conakry, e fala o dialecto bagandada.

Estes grupos estavam historicamente organizados em três reinos: Biguda, Guinala e Bissege.

Referências

Grupos étnicos da Guiné-Bissau

redpajama_set_name: RedPajamaWikipedia


text:
Northern Territory Menu
Longitude 131 Northern Territory, Australia
Offer ID: H786
Yulara Drive, Ayers Rock
Northern Territory, Australia
Get directions from airport (AYQ) OR anywhere.
Click on the red marker to access driving directions and more.
Longitude 131° operates complimentary transfers with fellow guests, connecting with all Ayers Rock Airport flights. Connections with charter flights require a Private Transfer at an additional cost
Longitude 131° is located on a secluded sand dune close to the boundary of the Uluru-Kata Tjuta National Park. Air Only three hours' flight from most Australian capital cities, regular flights are available to Ayers Rock Airport (AYR). Virgin Australia operates daily flights directly to Ayers Rock Airport from Sydney (SYD). Jetstar (Qantas code share) also flies directly to Ayers Rock Airport on selected days. Qantas operates daily flights to Ayers Rock Airport via Alice Springs (ASP) from Sydney, Melbourne, Adelaide and Darwin. Qantas also offers direct daily flights from Cairns (CNS) and Alice Springs (ASP). All three airlines provide connecting flights from most major domestic destinations.
For those guests traveling between Longitude 131° and sister property Southern Ocean Lodge, Qantas operate an excellent daily service from Ayers Rock (AYR) via Alice Springs (ASP) to Adelaide (ADL) with air connections to Kingscote (KGC) Kangaroo Island via Regional Express. Charter Flights A range of charter flight options are available to/from Ayers Rock Airport from most capital cities. For guests travelling between Baillie Lodges Longitude 131° and Southern Ocean Lodge, a range of exclusive air charter services may be arranged on application.
Self Drive Australia's diverse landscape offers an adventurous driving holiday, the roads are open and the scenery is spectacular. Self drive is a popular option with parking available at the nearby Ayers Rock Resort (prior arrangement required).
Car Hire" A great way to explore Central Australia at one's own pace. All major national car rental companies operate from Alice Springs. Alice Springs to Longitude 131° is 450km, approximately 4.5 hours drive on sealed roads. Hire cars are also available from Ayers Rock Airport for guests planning a road trip following a stay at Longitude 131°.
The semi-arid climate of the Uluru region makes for great traveling conditions. Warm, sunny days with minimal rainfall are the norm for much of the year, allowing enjoyment of the stunning desert landscapes and rock formations. Typical desert weather patterns make for reasonable fluctuations in temperature between day and night. During the summer months, average temperatures range from 35°C during the day to 18°C overnight. In the winter months, the average daytime temperature is 22°C and 0°C overnight.
AYQ Ayers Rock, Northern Territory, Australia 6.2 Miles
Travel Shoppe
7112 N Fresno Street, STE 310
www.shoppetravel.com
CST# 2004780-10


text:
You are at:Home»Features»Housing»New RSPCA free farrowing standards come into force
New RSPCA free farrowing standards come into force
By	admin on	 December 5, 2015 Housing
New RSPCA welfare standards in relation to farrowing, and indoor free farrowing in particular, have been introduced. Available as an insert sheet ahead of the next full reprint of the RSPCA Welfare Standards for Pigs towards the end of 2016, they require full implementation by Freedom Food/RSPCA Assured members from December 2, 2015.
The new free farrowing standards are the culmination of several years of work by the RSPCA Farm Animals department. Since July 2010, the organisation has been engaging with producers (both Freedom Food and non-Freedom Food members), equipment manufacturers and researchers to ensure that these new standards are informed by the latest scientific research, as well as practical farming innovation and experience.
This process took some time as the RSPCA wanted to ensure that the new standards were robust and to avoid any further amendments in the near future. The draft standards were discussed at the inaugural meeting of the RSPCA Pig Standards Advisory Group meeting in May 2015. These discussions helped to ensure that the RSPCA welfare standards continue to be at the forefront of farm animal care and welfare, and are also achievable on commercial farms.
All Freedom Food members were informed of the new standards back in September 2015; members are always given at least three months notice of any changes. In terms of what the new standards mean for producers, full details can be found on the RSPCA website, but, in short, the main changes relate to minimum space requirements, flooring and ensuring that the sow cannot be confined for farrowing.
The 2014 version of the standards included an information box highlighting that, in addition to turning around, space is needed for increased activity, nursing, and separate dunging and feeding areas. This view was based on scientific research and practical experience, including that gained from the Defra-funded PigSAFE research programme and from producers already using indoor free farrowing systems.
The new standards require a bedded lying/nest area measuring at least 2.8 square metres (excluding the creep area) and a minimum total pen size, including the lying area/nest area, of 5.0 square metres. Any feeding stall provided is in addition to the minimum total pen size, that is it can't be counted as part of the minimum pen size.
Research indicates that 2.8 square metres is the minimum space required for the sow to lie down laterally and for parturition. However, providing more space than this is key; an inability to separate the dunging area from the lying area/nest area or feeding area is likely to result in poor hygiene and resultant heath issues. Likewise, an inability to separate the lying area/nest area is likely to result in increased activity that could increase the risk of piglet crushing by the sow. Research indicates that a minimum of 5.0 square metres can satisfy these requirements as well as nest-site seeking behaviour.
As reported in Pig World in November 2014, another issue that was considered was the ability of some designs of pen, such as hinged-crate systems, to confine the sow. Like the partial stall ban on the Continent, the way in which such systems are used day-to-day is very difficult to assess as scheme field staff can only audit what they see on the day of the visit. We highlighted these concerns in the article, stating that in order to ensure compliance with the RSPCA's requirement for non-confinement, the system must not be at all capable of being closed. For example, hinged-crate type systems must be permanently welded open. With this in mind the standard in relation to this requirement has been made clearer; the use of voluntary feeding stalls is permitted, but equipment that has the potential to confine the sow for farrowing must not be present.
With regards to floor type, the previous standard required that at least 75% of the floor pen is solid. Acknowledging that there can be benefits to allowing small perforations in the solid floor area in order to aid drainage and maintain a dry floor area, but needing to be mindful that too much void area can be uncomfortable and lead to difficulties maintaining suitable quantities of bedding, nesting and enrichment material, the nest/lying area, which must be solid, may have evenly distributed occasional perforations of up to 1%.
A full list of the new requirements can be found at: http://science.rspca.org.uk/sciencegroup/farmanimals/standards/pigs
A useful website with more general information on the topic of free farrowing has been developed by researchers at Scotland's Rural College and the University of Newcastle see: http://www.freefarrowing.org
'We want to inspire people – it's about embedding good biosecurity every time'
Could balcony systems be the answer to our housing problems?


text:
Etiquette & Languages
How Swearing Works
by Tracy V. Wilson
According to the "Hitchhiker's Guide to the Galaxy," the most offensive word in the universe is "Belgium." The"Firefly" universe, on the other hand, uses invented swears and Chinese curses.
We all know what "bad words" are. Unlike most other language rules, we learn about swearwords and how to use them without any real study or classroom instruction. Even very young children know which words are naughty, although they don't always know exactly what those words mean.
But swearwords aren't quite as simple as they seem. They're paradoxical -- saying them is taboo in nearly every culture, but instead of avoiding them as with other taboos, people use them. Most associate swearing with being angry or frustrated, but people swear for a number of reasons and in a variety of situations. Swearing also serves multiple purposes in social interactions. Not only that, your brain treats swear words differently than it treats other words.
A Note On Geography and Swearing in Other Languages
Most research on swearing printed in English discusses swearing in English. Although every culture has its own swearwords, the statistics in this article primarily come from research involving English-speaking people in the United States and Great Britain. Research related to swearing and the brain, however, should apply to speakers of any language.
People learning a new language often learn its swearwords first or learn and use swearwords from a variety of languages. Anyone who learns through immersion rather than in a classroom tends to use more swearwords and colloquialisms. People who speak more than one language often use swearwords from different languages, but feel that the words from their primary language have the most emotional impact. For this reason, some multilingual speakers will switch to a second language to express taboo subjects.
In this article, we'll explore what makes words into swearwords, why most Americans use them and how society responds to swearing. We'll also look at one of its most fascinating aspects -- the way it affects your brain.
Virtually every language in every culture in the world has its own unique swearwords. Even different dialects of the same language can have different expletives. The very first languages probably included swearwords, but since writing evolved after speaking did, there's no record of who said the first swearword or what that word was. Because of the taboos surrounding it, written language histories also include few records of the origins of swearing. Even today, many dictionaries don't include profanity, and comparatively few studies have examined swearing.
Most researchers agree that swearing came from early forms of word magic. Studies of modern, non-literate cultures suggest that swearwords came from the belief that spoken words have power. Some cultures, especially ones that have not developed a written language, believe that spoken words can curse or bless people or can otherwise affect the world. This leads to the idea that some words are either very good or very bad.
While spoken swearwords from different languages don't sound alike, they generally fall into one of two categories. Most of the time, they are either deistic (related to religion) or visceral (related to the human body and its functions). Some expletives also relate to a person's ancestry or parentage. While some linguists classify racial slurs and epithets as swearwords, others place them in a separate category. So the words themselves are similar, but in different cultures people swear at different times and in different contexts.
By the second book in the series, the world of Harry Potter had its own racial epithet -- "mudblood," a repugnant word for wizards of non-magical parentage.
In the Western, English-speaking world, people from every race, class and level of education swear. In America, 72 percent of men and 58 percent of women swear in public. The same is true for 74 percent of 18 to 34 year olds and 48 percent of people who are over age 55 [ref]. Numerous language researchers report that men swear more than women, but studies that focus on women's use of language theorize that women's swearing is simply more context specific.
So why do so many people swear? We'll look at how swearing works in relationships and social interactions next.
'Gender-friendly' Tips For a Nonbinary World
Do You Have to Pull Over for a Funeral Procession?
The Memorable Mnemonics Quiz
Do You Have to Open Gifts In Front of Guests?
Why 'Poop' and 'Wiggle' Are Funny Words, According to Science


Known for manufacturing, supplying and trading of a wide range of premium quality adjustable stainless steel self lock kitchen cabinet drawer slide in angola, we are banked with years of experience in industrial working, involved in offering a wide range of adjustable stainless steel self lock kitchen cabinet drawer slide in angola to our clients.
As one of the leading manufacturers, supplier, traders and exporters of this commendable range ofadjustable stainless steel self lock kitchen cabinet drawer slide in angola, ever since our incorporation in the year 2011. The offered range is made up of the finest products like adjustable stainless steel self lock kitchen cabinet drawer slide in angola which are widely acclaimed and asked for in the market.
We are able to offer adjustable stainless steel self lock kitchen cabinet drawer slide in angola with high performance as well as quality service support and solutions to our customers home and abroad. We have cultivated a professional engineering team equipping and one efficient after-sales service team who can respond customers' concerns quickly.
Cheap stainless steel adjustable spring hinge door closer. ... door hinge,drawer slide,door bolt,cabinet hinge,furniture hardware. country/region: china (mainland) total revenue: ... stainless steel 180 degree locking kitchen accessories heavy duty folding concealed invisible hinge.
Since the company was established in 1930 in tokyo, sugatsune has developed a variety of cabinet hardware, including stainless steel drawer slides, door handles, magnetic catches, sliding door latches, and invisible door hinges.we have a rich tradition of manufacturing high-quality cabinet hardware.
If you need decorative standards and adjustable wood shelf brackets for your office, folding shelf brackets for a flip up work surface in your laundry room, or heavy duty adjustable wood shelf brackets and standards for your basement or garage we've got you covered. we also carry an extensive line of pin supports for adjustable shelving hardware for inside cabinets and bookcases.
Find great deals on ebay for stainless steel cabinet lock. shop with confidence. skip to main content. ebay logo: ... drawers cabinet stainless steel door lock bolt slide latch silver tone 4pcs. brand new. $9.38. from hong kong. buy it now. ... drawer cabinet lock durable stainless steel 2 reversible rotation washers new see more like this.


text:
Q: Set theory injective function&partition proof Suppose $f:A\rightarrow B$ is an injective function and $\{A_i\}_{i\in I}$ is a partition of $A$.
Prove that $\{f(A_i)\}_{i\in I}$ is a partition of $f(A)$.
This is a homework proof question and I have no idea. Could somebody write out the proof so I can understand? Thank you

A: A partition of a set $X$ is a family of non empty disjoint subsets whose union is $X$.
Suppose we take a partition $(A_i)_i$ of $A$
Now take the respective "partition" $(f(A_i))_i$ let $f(A_i)=F_i$ (for ease of notation)
Assume $F_i\cap F_j\ne\emptyset\Rightarrow\exists x_1,x_2:x_1\ne x_2:f(x_1)=f(x_2)$
Which contradicts injectivity.
All $F_i$ are non empty as they are images of non empty sets.
And the union is the entire image, just by the definition of an image.
Thus this forms a partition.

A: $\left\{ A_{i}\right\} _{i\in I}$ is a partition of set $A$ if
(1) $i\ne j$ implies that $A_{i}\cap A_{j}=\emptyset$
(2) $\cup_{i\in I}A_{i}=A$
(3) $A_{i}\ne\emptyset$ for each $i\in I$
So to be shown is that
(i) $i\ne j$ implies that $f\left(A_{i}\right)\cap f\left(A_{j}\right)=\emptyset$
(ii) $\cup_{i\in I}f\left(A_{i}\right)=f\left(A\right)$
(iii) $f\left(A_{i}\right)\ne\emptyset$ for each $i\in I$
Here (ii) and (iii) follow immediately from (2) and (3) combined with the fact that $f$ is a function. (i) is a consequence of (1) combined with the fact that $f$ is injective.


I heard the GHG reduction news on CBC a couple of days ago. Even in that short segment it seemed fairly obvious the reductions had come about due to accounting (we have trees, apparently) and provincial work, not federal.
Will self-edit and not rant about environment minister who doesn't know much about the environment….
The changes to forestry accounting are only part of the story.
The answer to Tony Clark from Canadian revenue minister Gail Shea opens up a line of inquiry that is in line with my own thoughts on the Fraser Institute.
The Fraser Institute may possibly be underreporting its political activity, but I'm not sure that they are in technical violation of the law as regards such activity.
Rather, I believe a complaint based on the clear illegitimacy of much of the "research" and "education" emanating from Fraser would be much harder to refute, especially if it was supported by rigourous critiques from subject matter experts.
The words are slightly different than in US, but it's the same idea as in Fake science, ….
It is much easier to critique a thinkank's public communications than it is to find the behind-the-scenes political stuff.
Canadian law also distinguishes between political activity and partisan activity; the former is limited as mentioned and latter is not permitted at all. For example, it's OK to send material regarding a public policy issue to every elected official; it's not OK to invite only one's preferred party to speak at public policy events. (So Natural Resources Minister Joe Oliver speaking at FCPP was probably in violation).
By the way, partisan activity was the reason given by U of C for shutting down Barry Cooper's "climate change" research account (essentially a conduit for Friends of Science PR projects run by APCO, Fleishman-Hillard and Morten Paulsen). But apparently there were no consequences even for that egregious flouting of CRA rules.
Hey folks, has anyone else noticed a personalized, haute couture cavity being prepared for you in the media demonic-narrative-o-sphere?
To call it out increases the threat, but if others besides me are being smothered into silence, better to speak up.
I'm not sure to what you're referring. Can you give a hint in the form of a link or brief explanation?
If it's happening to others, they'll know. If not, 'nuff said; no need to fuel the soap opera/wurlitzer, which is, at this point, probably desperate to distract from the heat and the science.
Many may have seen this, but if not, see See No Evil, Speak Little Truth, Break Rules, Blame Others.
It's worse that I thought in March.
New lols from GMU: I heard an econ professor complain about regulations to his students before physics lecture – they preach and don't teach and they can't think about anything other than money .


text:
Q: Django Rest Framework model object returns stored value of a field with choices I have a project with Django Rest Framework and I have a complex ViewSet that uses several models and serializers to compound a large and complex json. Everything works fine, but I notice that HotelSerializer, that is a ModelSerializer, is returning the stored value of field category, instead of the human readable value of its model choices.
This is the model:
class Hotel(models.Model):
    ONE_STAR = '*'
    TWO_STARS = '**'
    THREE_STARS = '***'
    FOUR_STARS = '****'
    FIVE_STARS = '*****'
    GRAND_TOURISM = 'GRAND_TOURISM'
    NA = 'NA'
    SPECIAL = 'SPECIAL'
    ECO = 'ECO'
    BOUTIQUE = 'BOUTIQUE'

    HOTEL_CATEGORY_CHOICES = (
        (ONE_STAR, _('*')),
        (TWO_STARS, _('**')),
        (THREE_STARS, _('***')),
        (FOUR_STARS, _('****')),
        (FIVE_STARS, _('*****')),
        (GRAND_TOURISM, _('Grand Tourism')),
        (NA, _('NA')),
        (SPECIAL, _('Special')),
        (ECO, _('Eco-Hotel')),
        (BOUTIQUE, _('Boutique-Hotel'))
    )

    company = models.OneToOneField(Company, on_delete=models.CASCADE, primary_key=True, verbose_name=_('Company'))
    code = models.CharField(max_length=10, verbose_name=_('Code'))
    zone = models.ForeignKey(Zone, on_delete=models.PROTECT, related_name='hotels', verbose_name=_('Zone'))
    category = models.CharField(max_length=20, choices=HOTEL_CATEGORY_CHOICES, verbose_name=_('Category'))
    capacity = models.IntegerField(verbose_name=_('Capacity'))
    position = models.DecimalField(max_digits=11, decimal_places=2, default=0.00, verbose_name=_('Position'))
    in_pickup = models.BooleanField(default=False, verbose_name=_('In pickup?'))
    is_active = models.BooleanField(default=True, verbose_name=_('Is active?'))
    latitude = models.FloatField(null=True, blank=True, verbose_name=_('Latitude'))
    longitude = models.FloatField(null=True, blank=True, verbose_name=_('Longitude'))

This is the serializer:
class HotelSerializer(serializers.ModelSerializer):
    category = serializers.ChoiceField(choices=models.Hotel.HOTEL_CATEGORY_CHOICES)
    class Meta:
        model = models.Hotel
        fields = ('company', 'code', 'zone', 'category', 'capacity', 'position', 'in_pickup', 'is_active', 'latitude', 'longitude')
        depth = 4

    def __init__(self, *args, **kwargs):
        exclude = kwargs.pop('exclude', None)

        super(HotelSerializer, self).__init__(*args, **kwargs)

        if exclude is not None:
            for field_name in exclude:
                self.fields.pop(field_name)

This is the ViewSet function where I get the Hotel model information:
def get_hotel(self, company_id):
    hotel = Hotel.objects.get(company=company_id)

    import ReservationsManagerApp.serializers
    return ReservationsManagerApp.serializers.HotelSerializer(hotel, exclude=('company',)).data

And this is the result I get:
"hotel": {
        "code": "xxxx...",
        "zone": {
            "id": 1,
            "name": "Zona hotelera",
            "city": {
                "id": 5,
                "name": "Cancun",
                "code": "998",
                "state": {
                    "id": 2,
                    "name": "Quintana Roo",
                    "code": "98",
                    "country": {
                        "id": 1,
                        "name": "Mexico",
                        "code": "MX",
                        "calling_code": "52"
                    }
                }
            }
        },
        "category": "GRAND_TOURISM",
        "capacity": 300,
        "position": "1.00",
        "in_pickup": true,
        "is_active": true,
        "latitude": null,
        "longitude": null
    },

You can see that the Category field returns the value 'GRAND_TOURISM', instead of  its human readable version of its choices: 'Grand Tourism'. It even misses the translation, so it must return 'Gran Turismo'.
I don't know what I am missing.

A: This is correct behavior AFAIK, but it is easy to fix.
One solution is to just do
class HotelSerializer(serializers.ModelSerializer):
  category = serializers.ChoiceField(choices=Hotel.HOTEL_CATEGORY_CHOICES)
  company = CompanySerializer()
  ...


Development of an infill site part of a small development of five properties. The site is located in the centre of Wellingborough and as such benefits from a wide range of community facilities. The project was designed with clearly designated public and private spaces. The use of fences, soft landscaping and changes in the floor finish help to define one property to the next. Common themes have been used throughout the landscape design to create a micro-community beyond the realms of the immediate sense of ownership. This will further strengthen the sense of identity helping to foster community spirit. The design is lifetime homes compliant. Lifetime Homes are ordinary homes designed to incorporate 16 Design Criteria that can be universally applied to new homes at minimal cost.