source
in setup.py
from setuptools import setup
setup(name='my_project',
version='0.1.0',
packages=['my_project'],
entry_points={
'console_scripts': [
'my_project = my_project.__main__:main'
]
},
)
in __main__.py in project directory
import sys
def main(args=None):
"""The main routine."""
if args is None:
args = sys.argv[1:]
print("This is the main routine.")
print("It should do something interesting.")
# Do argument parsing here (eg. with argparse) and anything else
# you want your project to do.
if __name__ == "__main__":
main()
Monday, April 3, 2017
Wednesday, March 22, 2017
Moving around the screen with bash and ascii escape characters
source
Using something like echo -e "\033[3A" lets you move up by 3 lines, indicated by the 3 in "[3A".
- Position the Cursor:
\033[L;CH
Or
\033[L;Cf
puts the cursor at line L and column C.
- Move the cursor up N lines:
\033[NA
- Move the cursor down N lines:
\033[NB
- Move the cursor forward N columns:
\033[NC
- Move the cursor backward N columns:
\033[ND
- Clear the screen, move to (0,0):
\033[2J
- Erase to end of line:
\033[K
- Save cursor position:
\033[s
- Restore cursor position:
\033[u
Using something like echo -e "\033[3A" lets you move up by 3 lines, indicated by the 3 in "[3A".
- Position the Cursor:
\033[L
Or
\033[L
puts the cursor at line L and column C.
- Move the cursor up N lines:
\033[N
- Move the cursor down N lines:
\033[N
- Move the cursor forward N columns:
\033[N
- Move the cursor backward N columns:
\033[N
- Clear the screen, move to (0,0):
\033[2J
- Erase to end of line:
\033[K
- Save cursor position:
\033[s
- Restore cursor position:
\033[u
Thursday, March 16, 2017
Wednesday, March 8, 2017
xmonad screen mirroring
This assumes you have the vnc software installed:
On workspace to mirror:
On workspace to display on projector:
sudo apt-get install x11vnc
sudo apt-get install vncviewer
On workspace to mirror:
x11vnc -usepw -clip xinerama0 -noxdamage -geometry 1920x1080
On workspace to display on projector:
vncviewer -viewonly -nocursorshape localhost:0
Wednesday, April 27, 2016
How To Sound Smart At Your Next Team Meeting by Matthew Jones
source
I try to remember, though, that the vast majority of actions done by people which may seem malicious are not intentionally so. Rather, it's because they don't know any better. This is the crux of an adage known as Hanlon's Razor, which states:
In short, the fastest way to solve many problems at once is the find and fix their common root cause.
Eagleson's Law describes this situation quite accurately:

The problem revealed by the Peter Principle is that workers tend to get evaluated on how well they are currently doing, and their superiors assume that those workers would also be good at a different role, even though their current role and their intended role may not be the same or even similar. Eventually, such promotions place unqualified candidates in high positions of power, and in particularly bad cases you can end up with pointy-haired bosses at every step of an organization's hierarchy.
I totally made upI use to shorthand both Sayre's Law and Parkinson's Law of Triviality. I call it the Law of Argumentative Comprehension:
Occam's Razor
This widely-known adage dates to a philosopher and friar from the fourteenth century named William of Ockham. Occam's Razor is often stated as:"Among competing hypotheses, the one with the fewest assumptions should be selected."It's no surprise that the whole reason we can recall an adage from 600+ years ago is that it works so well. Occam's Razor is so basic, so fundamental, that it should be the first thing we think of when deciding between two competing theories. I'd even go so far as to argue that in the vast majority of cases, simpler is better.
Hanlon's Razor
Sometimes I feel like users are intentionally trying to piss me off. They push buttons they weren't supposed to, found flaws that shouldn't have been visible to them (since they weren't to me), and generally make big swaths of my life more difficult than it would otherwise be.I try to remember, though, that the vast majority of actions done by people which may seem malicious are not intentionally so. Rather, it's because they don't know any better. This is the crux of an adage known as Hanlon's Razor, which states:
"Never attribute to malice what can be adequately explained by stupidity."Don't assume people are malicious; assume they are ignorant, and then help them overcome that ignorance. Most people want to learn, not be mean for the fun of it.
The Pareto Principle
The last Basic Law of Software Development is the Pareto Principle. Romanian-American engineer Joseph M Juran formulated this adage, which he named after an idea proposed by Italian economist and thinker Vilfredo Pareto. The Pareto Principle is usually worded as:"80% of the effects stem from 20% of the causes."Have you even been in a situation where your app currently has hundreds of errors, but when you track down one of the problems, a disproportionate amount of said errors just up and vanish? If you have (and you probably have), then you've experienced the Pareto Principle in action. Many of the problems we see, whether coding, dealing with customers, or just living our lives, share a small set of common root issues that, if solved or alleviated, can cause most or all of the problems we see to disappear.
In short, the fastest way to solve many problems at once is the find and fix their common root cause.
Dunning-Kruger Effect
Researchers David Dunning and Justin Kruger, conducting an experiment in 1999, observed a phenomenon that's come to be known as the Dunning-Kruger effect:"Unskilled persons tend to mistakenly assess their own abilities as being much more competent than they actually are."What follows from this is a bias in which people who aren't very good at their job think they are good at it, but aren't skilled enough to recognize that they aren't. Of all the laws in this list, the Dunning-Kruger effect may be the most powerful, if for no other reason than it has been actively investigated in a formal setting by a real-life research team.
Linus's Law
Author and developer Eric S. Raymond developed this law, which he named after Linus Torvalds. Linus's Law states:"Given enough eyeballs, all bugs are shallow."In other words, if you can't find the problem, get someone else to help. This is why concepts like pair programming work well in certain contexts; after all, more often than not, the bug is in your code.
Robustness Principle (AKA Postel's Law)
One of the fundamental ideas in software development, particularly fields such as API design, can be concisely expressed by the Robustness Principle:"Be conservative in what you do, be liberal in what you accept from others."This principle is also called Postel's Law for Jon Postel, the Internet pioneer who originally wrote it down as part of RFC 760. It's worth remembering, if for no other reason than an gentle reminder that often the best code is no code at all.
Eagleson's Law
Ever been away from a project for a long time, then returned to it and wondered "what idiot wrote this crap?" only to find out that the idiot was you?Eagleson's Law describes this situation quite accurately:
"Any code of your own that you haven't looked at for six or more months might as well have been written by someone else."Remember that the next time you're rejoining a project you've been away from for months. The code is no longer your code; it is someone else's that you've now been tasked with improving.
Peter Principle
One of the fundamental laws that can apply to managers (of any field, not just software) is the Peter Principle, formulated by Canadian educator Laurence J Peter:"The selection of a candidate for a position is based on the candidate's performance in their current role, rather than on abilities relevant to the intended role."The Peter Principle is often sarcastically reduced to "Managers rise to their level of incompetence." The idea of this principle looks like this:
The problem revealed by the Peter Principle is that workers tend to get evaluated on how well they are currently doing, and their superiors assume that those workers would also be good at a different role, even though their current role and their intended role may not be the same or even similar. Eventually, such promotions place unqualified candidates in high positions of power, and in particularly bad cases you can end up with pointy-haired bosses at every step of an organization's hierarchy.
Dilbert Principle
Speaking of pointy-haired bosses, cartoonist Scott Adams (who publishes the comic strip Dilbert) proposed an negative variation of the Peter Principle which he named the Dilbert Principle. The Peter Principle assumes that the promoted workers are in fact competent at their current position; this is why they got promoted in the first place. By contrast, the Dilbert Principle assumes that the least competent people get promoted the fastest. The Dilbert Principle is usually stated like this:"Incompetent workers will be promoted above competent workers to managerial positions, thus removing them from the actual work and minimizing the damage they can do."This can be phrased another way: "Companies are hesitant to fire people but also want to not let them hurt their business, so companies promote incompetent workers into the place where they can do the least harm: management."
Hofstadter's Law
Ever noticed that doing something always takes longer than you think? So did Douglas Hofstadter, who wrote a seminal book on cognitive science and self-reference called Godel, Escher, Bach: An Eternal Golden Braid. In that book, he proposed Hofstadter's Law:"It always takes longer than you expect, even when you take into account Hofstadter's Law."Always is the key word: nothing ever goes as planned, so you're better off putting extra time in your estimates to cover some thing that will go wrong, because it unfailingly does.
The 90-90 Rule
Because something always goes wrong, and because people are notoriously bad at estimating their own skill level, Tom Cargill, an engineer at Bell Labs in the 1980's, proposed something that eventually came to be called the 90-90 rule:"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."Perhaps this explains why so many software projects end up over budget and short on features.
Parkinson's Law
What is possibly the most astute observation that can be applied to the art of estimation comes from British naval historian C. N. Parkinson. He jokingly proposed an adage called Parkinson's Law, which was originally understood to be:"Work expands so as to fill the time available for its completion."Remember this next time you pad your estimates.
Sayre's Law
Economist and professor Charles Issawi proposed an idea that came to be known as Sayre's Law, named after a fellow professor at Columbia University. Issawi's formulation of this law looks like this:"In any dispute the intensity of feeling is inversely proportional to the value of the issues at stake."In short, that the less significant something is, the more passionately people will argue about it.
Parkinson's Law of Triviality (AKA Bikeshedding)
Sayre's Law segues directly into another law that applies to meetings, and here we again encounter the ideas of C.N. Parkinson. Parkinson's Law of Triviality states:"The time spent on any agenda item will be in inverse proportion to the sum of money involved."Parkinson imagined a situation in which a committee of people were tasked with designing a nuclear reactor. Said committee then spends a disproportionate amount of time designing the reactor's bikeshed, since any common person will have enough life experience to understand what a bikeshed should look like. Clearly the "core" functions of the reactor are more important, but they are so complex that no average person will understand all of them intimately. Consequently, time (and opinions) are spent on ideas that everyone can comprehend, but which are clearly more trivial.
Law of Argumentative Comprehension
The last law is one"The more people understand something, the more willing they are to argue about it, and the more vigorously they will do so."
Thursday, April 21, 2016
Design path via testing
http://www.satisfice.com/blog/archives/856
https://vimeo.com/80533536
http://pyvideo.org/video/1670/boundaries
https://vimeo.com/80533536
http://pyvideo.org/video/1670/boundaries
Monday, April 18, 2016
How People Learn to Become Resilient By Maria Konnikova
source
Norman Garmezy, a developmental psychologist and clinician at the University of Minnesota, met thousands of children in his four decades of research. But one boy in particular stuck with him. He was nine years old, with an alcoholic mother and an absent father. Each day, he would arrive at school with the exact same sandwich: two slices of bread with nothing in between. At home, there was no other food available, and no one to make any. Even so, Garmezy would later recall, the boy wanted to make sure that “no one would feel pity for him and no one would know the ineptitude of his mother.” Each day, without fail, he would walk in with a smile on his face and a “bread sandwich” tucked into his bag.
Norman Garmezy, a developmental psychologist and clinician at the University of Minnesota, met thousands of children in his four decades of research. But one boy in particular stuck with him. He was nine years old, with an alcoholic mother and an absent father. Each day, he would arrive at school with the exact same sandwich: two slices of bread with nothing in between. At home, there was no other food available, and no one to make any. Even so, Garmezy would later recall, the boy wanted to make sure that “no one would feel pity for him and no one would know the ineptitude of his mother.” Each day, without fail, he would walk in with a smile on his face and a “bread sandwich” tucked into his bag.
The
boy with the bread sandwich was part of a special group of children. He
belonged to a cohort of kids—the first of many—whom Garmezy would go on
to identify as succeeding, even excelling, despite incredibly difficult
circumstances. These were the children who exhibited a trait Garmezy
would later identify as “resilience.” (He is widely credited with being
the first to study the concept in an experimental setting.) Over many
years, Garmezy would visit schools across the country, focussing on
those in economically depressed areas, and follow a standard protocol.
He would set up meetings with the principal, along with a school social
worker or nurse, and pose the same question: Were there any children
whose backgrounds had initially raised red flags—kids who seemed likely
to become problem kids—who had instead become, surprisingly, a source of
pride? “What I was saying was, ‘Can you identify stressed children who
are making it here in your school?’ “ Garmezy said, in a 1999 interview.
“There would be a long pause after my inquiry before the answer came.
If I had said, ‘Do you have kids in this school who seem to be
troubled?,’ there wouldn’t have been a moment’s delay. But to be asked
about children who were adaptive and good citizens in the school and
making it even though they had come out of very disturbed
backgrounds—that was a new sort of inquiry. That’s the way we began.”
Resilience
presents a challenge for psychologists. Whether you can be said to have
it or not largely depends not on any particular psychological test but
on the way your life unfolds. If you are lucky enough to never
experience any sort of adversity, we won’t know how resilient you are.
It’s only when you’re faced with obstacles, stress, and other
environmental threats that resilience, or the lack of it, emerges: Do
you succumb or do you surmount?
Environmental
threats can come in various guises. Some are the result of low
socioeconomic status and challenging home conditions. (Those are the
threats studied in Garmezy’s work.) Often, such threats—parents
with psychological or other problems; exposure to violence or poor
treatment; being a child of problematic divorce—are chronic. Other
threats are acute: experiencing or witnessing a traumatic violent
encounter, for example, or being in an accident. What matters is the
intensity and the duration of the stressor. In the case of acute
stressors, the intensity is usually high. The stress resulting from
chronic adversity, Garmezy wrote, might be lower—but it “exerts repeated
and cumulative impact on resources and adaptation and persists for many
months and typically considerably longer.”
Prior
to Garmezy’s work on resilience, most research on trauma and negative
life events had a reverse focus. Instead of looking at areas of
strength, it looked at areas of vulnerability, investigating the
experiences that make people susceptible to poor life outcomes (or that
lead kids to be “troubled,” as Garmezy put it). Garmezy’s work opened
the door to the study of protective factors: the elements of an
individual’s background or personality that could enable success
despite the challenges they faced. Garmezy retired from research before
reaching any definitive conclusions—his career was cut short by
early-onset Alzheimer’s—but his students and followers were able to
identify elements that fell into two groups: individual, psychological
factors and external, environmental factors, or disposition on the one
hand and luck on the other.
In
1989 a developmental psychologist named Emmy Werner published the
results of a thirty-two-year longitudinal project. She had followed a
group of six hundred and ninety-eight children, in Kauai, Hawaii, from
before birth through their third decade of life. Along the way, she’d
monitored them for any exposure to stress: maternal stress in utero,
poverty, problems in the family, and so on. Two-thirds of the children
came from backgrounds that were, essentially, stable, successful, and
happy; the other third qualified as “at risk.” Like Garmezy, she soon
discovered that not all of the at-risk children reacted to stress in the
same way. Two-thirds of them “developed serious learning or behavior
problems by the age of ten, or had delinquency records, mental health
problems, or teen-age pregnancies by the age of eighteen.” But the
remaining third developed into “competent, confident, and caring young
adults.” They had attained academic, domestic, and social success—and
they were always ready to capitalize on new opportunities that arose.
What
was it that set the resilient children apart? Because the individuals
in her sample had been followed and tested consistently for three
decades, Werner had a trove of data at her disposal. She found that
several elements predicted resilience. Some elements had to do with
luck: a resilient child might have a strong bond with a supportive
caregiver, parent, teacher, or other mentor-like figure. But another,
quite large set of elements was psychological, and had to do with how
the children responded to the environment. From a young age, resilient
children tended to “meet the world on their own terms.” They were
autonomous and independent, would seek out new experiences, and had a
“positive social orientation.” “Though not especially gifted, these
children used whatever skills they had effectively,” Werner wrote.
Perhaps most importantly, the resilient children had what psychologists
call an “internal locus of control”: they believed that they, and not
their circumstances, affected their achievements. The resilient children
saw themselves as the orchestrators of their own fates. In fact, on a
scale that measured locus of control, they scored more than two standard
deviations away from the standardization group.
Werner
also discovered that resilience could change over time. Some resilient
children were especially unlucky: they experienced multiple strong
stressors at vulnerable points and their resilience evaporated.
Resilience, she explained, is like a constant calculation: Which side of
the equation weighs more, the resilience or the stressors? The
stressors can become so intense that resilience is overwhelmed. Most
people, in short, have a breaking point. On the flip side, some people
who weren’t resilient when they were little somehow learned the skills
of resilience. They were able to overcome adversity later in life and
went on to flourish as much as those who’d been resilient the whole way
through. This, of course, raises the question of how resilience might be
learned.
George
Bonanno is a clinical psychologist at Columbia University’s Teachers
College; he heads the Loss, Trauma, and Emotion Lab and has been
studying resilience for nearly twenty-five years. Garmezy, Werner, and
others have shown that some people are far better than others at dealing
with adversity; Bonanno has been trying to figure out where that
variation might come from. Bonanno’s theory of resilience starts with an
observation: all of us possess the same fundamental stress-response
system, which has evolved over millions of years and which we share with
other animals. The vast majority of people are pretty good at using
that system to deal with stress. When it comes to resilience, the
question is: Why do some people use the system so much more frequently
or effectively than others?
One of
the central elements of resilience, Bonanno has found, is perception:
Do you conceptualize an event as traumatic, or as an opportunity to
learn and grow? “Events are not traumatic until we experience them as
traumatic,” Bonanno told me, in December. “To call something a
‘traumatic event’ belies that fact.” He has coined a different term:
PTE, or potentially traumatic event, which he argues is more accurate.
The theory is straightforward. Every frightening event, no matter how
negative it might seem from the sidelines, has the potential to be
traumatic or not to the person experiencing it. (Bonanno focusses on
acute negative events, where we may be seriously harmed; others who
study resilience, including Garmezy and Werner, look more broadly.) Take
something as terrible as the surprising death of a close friend: you
might be sad, but if you can find a way to construe that event as filled
with meaning—perhaps it leads to greater awareness of a certain
disease, say, or to closer ties with the community—then
it may not be seen as a trauma. (Indeed, Werner found that resilient
individuals were far more likely to report having sources of spiritual
and religious support than those who weren’t.) The experience isn’t
inherent in the event; it resides in the event’s psychological
construal.
It’s for this reason,
Bonanno told me, that “stressful” or “traumatic” events in and of
themselves don’t have much predictive power when it comes to life
outcomes. “The prospective epidemiological
data shows that exposure to potentially traumatic events does not
predict later functioning,” he said. “It’s only predictive if there’s a
negative response.” In other words, living through adversity, be it
endemic to your environment or an acute negative event, doesn’t
guarantee that you’ll suffer going forward. What matters is whether that
adversity becomes traumatizing.
The
good news is that positive construal can be taught. “We can make
ourselves more or less vulnerable by how we think about things,” Bonanno
said. In research at Columbia, the neuroscientist Kevin Ochsner has
shown that teaching people to think of stimuli in different ways—to
reframe them in positive terms when the initial response is negative, or
in a less emotional way when the initial response is emotionally
“hot”—changes how they experience and react to the stimulus. You can
train people to better regulate their emotions, and the training seems
to have lasting effects.
Similar work has been done with explanatory styles—the techniques we use to explain events. I’ve written before about the research of Martin Seligman,
the University of Pennsylvania psychologist who pioneered much of the
field of positive psychology: Seligman found that training people to
change their explanatory styles from internal to external (“Bad events
aren’t my fault”), from global to specific (“This is one narrow thing
rather than a massive indication that something is wrong with my life”),
and from permanent to impermanent (“I can change the situation, rather
than assuming it’s fixed”) made them more psychologically successful and
less prone to depression. The same goes for locus of control:
not only is a more internal locus tied to perceiving less stress and
performing better but changing your locus from external to internal
leads to positive changes in both psychological well-being and objective
work performance. The cognitive skills that underpin resilience, then,
seem like they can indeed be learned over time, creating resilience
where there was none.
Unfortunately,
the opposite may also be true. “We can become less resilient, or less
likely to be resilient,” Bonanno says. “We can create or exaggerate
stressors very easily in our own minds. That’s the danger of the human
condition.” Human beings are capable of worry and rumination: we can
take a minor thing, blow it up in our heads, run through it over and
over, and drive ourselves crazy until we feel like that minor thing is
the biggest thing that ever happened. In a sense, it’s a self-fulfilling
prophecy. Frame adversity as a challenge, and you become more flexible
and able to deal with it, move on, learn from it, and grow. Focus on it,
frame it as a threat, and a potentially traumatic event becomes an
enduring problem; you become more inflexible, and more likely to be
negatively affected.
In December the New York Times Magazine published an essay
called “The Profound Emptiness of ‘Resilience.’ “ It pointed out that
the word is now used everywhere, often in ways that drain it of meaning
and link it to vague concepts like “character.” But resilience doesn’t
have to be an empty or vague concept. In fact, decades of research have
revealed a lot about how it works. This research shows that resilience
is, ultimately, a set of skills that can be taught. In recent years,
we’ve taken to using the term sloppily—but our sloppy usage doesn’t mean
that it hasn’t been usefully and precisely defined. It’s time we invest
the time and energy to understand what “resilience” really means.
Subscribe to:
Posts (Atom)