text:
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from django.shortcuts import render_to_response, render
from . import tinderbot

import operator
import argparse
import sys
import pynder
import urllib

#rake stuff
import re
import operator

sys.path.insert(0, 'src/')

from PIL import Image
from Pixel import *
from Region import *
from utils import *

def index(request):
    return render_to_response('index.html')

def main(request):
    if request.method=='POST':
        min_percent = request.POST.get('percentage')
        compute(request, min_percent)
    return render(request,'main.html')

#nude.py functions
def contains_nudity(image_path):
    image = Image.open(image_path)
    imgPixels = image.load()
    width = image.size[0]
    height = image.size[1]
    pixels = [ [None]*height for i in range(width) ]

    for i in xrange(0, width):
        for j in xrange(0, height):
            pixels[i][j] = Pixel(i, j, imgPixels[i,j][0], imgPixels[i,j][1], imgPixels[i,j][2])

    skin_pixels = []
    skin_regions = []
    create_skin_regions(pixels, skin_pixels, skin_regions, width, height)

    if len(skin_regions) < 3:
        return 0.0
    skin_regions.sort(key = operator.attrgetter('size'), reverse=True)

    bounding_region = create_bounding_region(pixels, skin_regions, width, height)
    return analyze_regions(skin_pixels, skin_regions, bounding_region, width, height)

def color_skin(image_path):
    save_path = image_path[:-4] + "-skinified.jpg"
    color_skin_regions(image_path, save_path)

#rake functions
def is_number(s):
    try:
        float(s) if '.' in s else int(s)
        return True
    except ValueError:
        return False

def load_stop_words(stop_word_file):
    """
    Utility function to load stop words from a file and return as a list of words
    @param stop_word_file Path and file name of a file containing stop words.
    @return list A list of stop words.
    """
    stop_words = []
    for line in open(stop_word_file):
        if line.strip()[0:1] != "#":
            for word in line.split():  # in case more than one per line
                stop_words.append(word)
    return stop_words

def separate_words(text, min_word_return_size):
    """
    Utility function to return a list of all words that are have a length greater than a specified number of characters.
    @param text The text that must be split in to words.
    @param min_word_return_size The minimum no of characters a word must have to be included.
    """
    splitter = re.compile('[^a-zA-Z0-9_\\+\\-/]')
    words = []
    for single_word in splitter.split(text):
        current_word = single_word.strip().lower()
        #leave numbers in phrase, but don't count as words, since they tend to invalidate scores of their phrases
        if len(current_word) > min_word_return_size and current_word != '' and not is_number(current_word):
            words.append(current_word)
    return words

def split_sentences(text):
    """
    Utility function to return a list of sentences.
    @param text The text that must be split in to sentences.
    """
    sentence_delimiters = re.compile(u'[.!?,;:\t\\\\"\\(\\)\\\'\u2019\u2013]|\\s\\-\\s')
    sentences = sentence_delimiters.split(text)
    return sentences

def build_stop_word_regex(stop_word_file_path):
    stop_word_list = load_stop_words(stop_word_file_path)
    stop_word_regex_list = []
    for word in stop_word_list:
        word_regex = r'\b' + word + r'(?![\w-])'  # added look ahead for hyphen
        stop_word_regex_list.append(word_regex)
    stop_word_pattern = re.compile('|'.join(stop_word_regex_list), re.IGNORECASE)
    return stop_word_pattern

def generate_candidate_keywords(sentence_list, stopword_pattern):
    phrase_list = []
    for s in sentence_list:
        tmp = re.sub(stopword_pattern, '|', s.strip())
        phrases = tmp.split("|")
        for phrase in phrases:
            phrase = phrase.strip().lower()
            if phrase != "":
                phrase_list.append(phrase)
    return phrase_list

def calculate_word_scores(phraseList):
    word_frequency = {}
    word_degree = {}
    for phrase in phraseList:
        word_list = separate_words(phrase, 0)
        word_list_length = len(word_list)
        word_list_degree = word_list_length - 1
        #if word_list_degree > 3: word_list_degree = 3 #exp.
        for word in word_list:
            word_frequency.setdefault(word, 0)
            word_frequency[word] += 1
            word_degree.setdefault(word, 0)
            word_degree[word] += word_list_degree  #orig.
            #word_degree[word] += 1/(word_list_length*1.0) #exp.
    for item in word_frequency:
        word_degree[item] = word_degree[item] + word_frequency[item]

    # Calculate Word scores = deg(w)/frew(w)
    word_score = {}
    for item in word_frequency:
        word_score.setdefault(item, 0)
        word_score[item] = word_degree[item] / (word_frequency[item] * 1.0)  #orig.
    #word_score[item] = word_frequency[item]/(word_degree[item] * 1.0) #exp.
    return word_score

def generate_candidate_keyword_scores(phrase_list, word_score):
    keyword_candidates = {}
    for phrase in phrase_list:
        keyword_candidates.setdefault(phrase, 0)
        word_list = separate_words(phrase, 0)
        candidate_score = 0
        for word in word_list:
            candidate_score += word_score[word]
        keyword_candidates[phrase] = candidate_score
    return keyword_candidates

class Rake(object):
    def __init__(self, stop_words_path):
        self.stop_words_path = stop_words_path
        self.__stop_words_pattern = build_stop_word_regex(stop_words_path)

    def run(self, text):
        sentence_list = split_sentences(text)

        phrase_list = generate_candidate_keywords(sentence_list, self.__stop_words_pattern)

        word_scores = calculate_word_scores(phrase_list)

        keyword_candidates = generate_candidate_keyword_scores(phrase_list, word_scores)

        sorted_keywords = sorted(keyword_candidates.iteritems(), key=operator.itemgetter(1), reverse=True)
        return sorted_keywords

#####

def compute(request, min_percent):
    limit=3

    session = pynder.Session('chait9', 'CAAGm0PX4ZCpsBAO0R8SZAWsFZAZA2pbWs7LkyXhpLXhqDQW9kcAAZC6SDcE3Qb3ofqr2pYHmZBSQFnbctn6P8ctT9p32XPizhAQYOCVQaIPMbgq22wZBCaS00Dft9S2xhSTFKOIIbidiS2GIhngEToT4CZASnUlrU0mhWzBbJTXTyEIj188PbDB6if9uB5IZB7SMzZAmKatG96ERw6pSO1glpB')
    total_users=session.nearby_users()
    if len(total_users) > limit:
        few_users=total_users[:limit]
    else:
        few_users=total_users
    userid=0
    count=0
    for user in few_users:
        print('\n')

        total_skin_percent=0.0
        bio_score=0.0
        final_percent=0.0

        try:
            for i in range(3):
                image_name = 'photo' + str(count) + str(i) + '.jpg'
                photo_url = str(user.get_photos(width='640')[i])
                print photo_url
                image = urllib.URLopener()
                image.retrieve(photo_url,image_name)

                parser = argparse.ArgumentParser(description='Detect nudity in images.')
                parser.add_argument(image_name, type=str, nargs=1)
#                parser.add_argument('-c', action='store_true')
                args = parser.parse_args()

                #color_skin(image_name)
                #print "Skin regions covered in image saved at " + image_name[:-4] + "-skinified.jpeg"
                skin_percent = 100*contains_nudity(image_name)
                print "Skin region percentage = " + str(skin_percent)
                total_skin_percent += skin_percent

                if count==0:
                    request.photo_url0=photo_url
                elif count==1:
                    request.photo_url1=photo_url
                elif count==2:
                    request.photo_url2=photo_url

        except IndexError:
                print('')

        total_skin_percent /= len(few_users)
        print total_skin_percent

        # THE BIO STUFF
        try:
            text = user.bio.lower().replace('\n','. ')
            # Split text into sentences
            sentenceList = split_sentences(text)
            #stoppath = "FoxStoplist.txt" #Fox stoplist contains "numbers", so it will not find "natural numbers" like in Table 1.1
            stoppath = "SmartStoplist.txt"  #SMART stoplist misses some of the lower-scoring keywords in Figure 1.5, which means that the top 1/3 cuts off one of the 4.0 score words in Table 1.1
            stopwordpattern = build_stop_word_regex(stoppath)

            # generate candidate keywords
            phraseList = generate_candidate_keywords(sentenceList, stopwordpattern)

            # calculate individual word scores
            wordscores = calculate_word_scores(phraseList)

            # generate candidate keyword scores
            keywordcandidates = generate_candidate_keyword_scores(phraseList, wordscores)
            #if debug: print keywordcandidates

            sortedKeywords = sorted(keywordcandidates.iteritems(), key=operator.itemgetter(1), reverse=True)
            #if debug: print sortedKeywords

            totalKeywords = len(sortedKeywords)
            #if debug: print totalKeywords

            rake = Rake("SmartStoplist.txt")
            keywords = rake.run(text)
            print text
            print keywords

            word_list = {'hook up':-10, 'hookup':-10, 'single':-5, 'booty':-9, 'fuck':-10, 'sex':-7, 'swip':-3, 'conversation':5, 'stories':7, 'right':-5, 'shag':-10, 'fit':-5, 'call':-2, 'personality':4, 'body':-6, 'cuddle':-3, 'mature':-1, 'smile':3, 'exchange':-8, 'temp':-8, 'sleep':-9}
            max_score = max(wordscores.values())

            #keywords -> list of tuples. Each element- (word, wordscore)
            for element in keywords:
                for word in word_list.keys():
                    if (element[0] in word) or (word in element[0]):
                        bio_score += ( -1.0*word_list[word]*totalKeywords/len(text.split()) ) * ( element[1]*1.0 / max_score )

        except: pass

        #print bio_score

        final_percent = (total_skin_percent/50 + bio_score/5)*100
        print final_percent

        if count==0:
            request.photo_looks0=final_percent
            few_users[0].like()
        elif count==1:
            request.photo_looks1=final_percent
            few_users[1].like()
        elif count==2:
            request.photo_looks2=final_percent
            few_users[2].like()
        if final_percent < min_percent:
            count = count - 1
        count = count + 1

redpajama_set_name: RedPajamaGithub


text:
Q: Difference in density matrix where prob. 1/2 in both $|0\rangle$ and $|1\rangle$ In my course, we had an example: give the density matrix of a system arising from a proces that generates a [0> with probability 1/2 and a [1> with prob. 1/2. The answer is
$1/2[0\rangle\langle0] +1/2[1\rangle\langle1]$.
But it seems to me that $\sqrt{1/2}[0\rangle + \sqrt{1/2}[1\rangle$ does the same, which has a different density function, $1/2[0\rangle\langle0]+1/2[1\rangle\langle0]+1/2[0\rangle\langle1]+1/2[1\rangle\langle1]$. What is my mistake?

redpajama_set_name: RedPajamaStackExchange


text:
A news update from the National Latin@ Network
NLN Blog
NLN News
Network News and Resources
Blog Post Submissions
Language Access in the Courts: Before Court
he Increasing Language Access in the Courts toolkit examines advocates' observations about the court experiences of survivors with limited English proficiency, and offers guidance and resources to build systems change efforts for language accessibility.
This toolkit is designed to guide and inform advocates working with survivors with limited English proficiency (LEP) who are involved in civil legal proceedings.
Click here to read this blog
Click here to download the toolkit
Increasing Language Access in the Courts
Click here to download the Increasing Language Access in the Courts Toolkit
Haga clic aquí para descargar el Conjunto de Herramientas 'Mejorando el Acceso al Idioma en las Cortes'
Request for proposals: 2017 National Sexual Assault Conference
Deadline: Friday, November 11, 2016
The National Sexual Assault Conference (NSAC) is an annual conference that brings together over 1,500 people to share information, advance learning opportunities, and support professional growth to those who work to address the needs of survivors of sexual assault, to raise awareness about sexual assault, and to prevent sexual assault from happening.
The Texas Association Against Sexual Assault is excited to announce a call for workshop proposals for the 2017 National Sexual Assault Conference, in Dallas, TX, at the Hilton Anatole. The theme of the conference is "From Courageous Conversations to Critical Action."
We welcome workshop proposals that focus on the uniqueness and value of sexual assault specific programs and services. Proposals that engage in a culturally resonant approach to traditionally underserved populations and those that involve interactive learning techniques and innovative methods are encouraged.
We will be focusing on four categories this year:
Prevention - Presentation or workshop submissions to the Prevention category should describe efforts to strengthen and engage states and communities in the prevention of sexual assault, with an emphasis on primary prevention. Workshop proposals should address the needs of state grantees from the Rape Prevention and Education program of the Centers for Disease Control and Prevention, their partners and/or the programs they support. Proposals should draw on the best available research and / or prevention practices and include information about the impact of featured efforts.
Survivor Services
Policy and Systems Advocacy
Organizational Development and Strategy
Click here for instructions on how to sumbit in English
Haga clic aquí para leer las instrucciones en español de cómo debe enviar su propuesta
Call for Abstract Submissions: National Conference on Health and Domestic Violence
Deadline: January 13, 2017
Every two years the National Health Resource Center on Domestic Violence hosts the National Conference on Health and Domestic Violence. The conference highlights the latest research and promising practices to advance the health care system's response to domestic and sexual violence, bringing together the field's leading medical, public health, and domestic violence experts from across the United States and the world. Stay tuned for more information on submitting an abstract!
Pre-Conference Institutes: Tuesday, September 26th, 2017
Two Day Conference: September 27th-28th, 2017
Marriott Marquis, San Francisco, California
Click here for more information on how to submit an abstract
ThisGEN: Youth Summit
March 6th-10th 2017
We are excited to announce that Raliance is convening ThisGEN: Youth Summit in Washington DC from March 6th - 10th 2017. There are several ways to join in on this event, which will bring together youth activists from around the US states and territories to work together to end Gender-based violence. Please go to Raliance.org to learn more about this event and to join us in this unique event by:
* Applying to participate (due Nov. 11th 2016)
* Submitting a proposal to present (due Nov. 4th 2016)
* Sponsoring an activist to attend
Click here for all network news and resources
2017 Critical PAR Institute
CUNY Graduate Center in New York City
The Critical Participatory Action Research Institute is designed to introduce the theory, methods, and ethics of critical participatory action research (PAR) to graduate students, faculty, and members of community based organizations. Through seminars, roundtables, and hands-on workshops with experienced researchers, participants gain the necessary skills and knowledge to integrate a critical PAR approach into their scholarship, research, and/or organizing.
What will attendees learn?
The history, theory, method, and ethics of Critical PAR
Building partnerships with community & community -based organizations
Creating conditions for meaningful collaboration within research collectives
Designing Critical PAR with IRBs & community review boards
Participatory approaches to methods and analysis: mapping, visual methods, surveys, interviews, focus groups
Engaging the arts and performance as research tools
Click here for all training opportunities
Casa de Esperanza: Project Coordinator(s)
Casa de Esperanza has position openings on their national team for Project Coordinators in the areas of campus sexual assault, domestic violence homicide prevention, and Limited English Proficiency. The deadline for submission is November 4, 2016, however, the position will be opened until filled.
Visit our website to see all open positions.
National Resource Center on Domestic Violence: Housing Projects Manager
Responsibilities include: ensuring effective implementation of a detailed annual work plan; providing housing-related technical assistance; working with national partners to support advocacy efforts; development of resources and technical assistance materials to be housed on SafeHousingPartnerships.org.
Guided by a strong intersectional analysis and high-quality research, the ideal candidate is impassioned to help improve responses to survivors of domestic violence and their families across the continuum of publicly and privately funded homeless services and housing programs.
The position requires substantial experience in housing, social justice, systems advocacy and social change work. Experience in the domestic violence movement preferred.
View full job description and requirements here.
American Immigration Council: Cara Pro Bono Project
Advocacy Coordinator
(3-month paid engagement)
Dilley, Texas
Advocacy Coordinator who plays a leading role in our on the ground staff and the
management of volunteers assisting mothers and children detained in Dilley, Texas and assist
in compilation of data to end family detention. A commitment to advocating for the rights of asylum-seekers, in addition to the ability to work long hours, including some weekends, is required.
of work is inclusive of the following:
 Liaising with national and local partners
 Speaking on behalf of the CARA Project
 Managing project consultant
 Identifying trends and liaising with government agencies in Dilley
 Participate in bi-weekly advocacy and quarterly advocacy strategy and communications
meetings.
 Case management assistance
 Document management
 Volunteer management
 Project office management
 Data compilation
Law school, legal assistant or paralegal experience helpful. Knowledge of immigration law a plus.
Spanish proficiency is required for project.
Please forward resume and letter of interest to hr@immcouncil.org
We need a consultant will support staff and volunteers assisting women and children detained in Dilley, Texas and assist in compilation of data to end family detention.
Scope of work is inclusive of the following:
* Case management assistance, including intake and informational meetings with clients.
* Maintaining database integrity and information
* Working with volunteers
* Data collection and compilation
Please forward resume and letter of interest to hr@immcouncil.org.
Click here for all job openings
Now accepting submissions
We welcome submissions on a number of topics pertaining to domestic violence, family violence, and gender-based violence. These topics include, but are not limited to:
Gender-based violence intervention and prevention programs that are culturally specific
Working with Latin@ youth
Working with immigrant Latin@s
Health care and gender-based violence
LGBTQ Latin@ communities
Children and domestic violence
Building Latin@ leadership in Latin@ communities
We also welcome photography, video, resources, and other digital material that organizations or people wish to share with our network.
If you're interested in submitting a blog post, click here to email Rebecca De Leon, Communications and Marketing Coordinator
POLICY & ACTION
ABOUT THE NATIONAL LATIN@ NETWORK FOR HEALTHY FAMILIES AND COMMUNITIES
The National Latin@ Network for Healthy Families and Communities is a network of individuals and organizations committed to improving the health and well-being of Latin@ communities. The National Latin@ Network is led by Casa de Esperanza, a national Latina organization whose mission is to mobilize Latinas and Latin@ communities to end domestic violence. The National Latin@Network for Healthy Families and Communities builds on Casa de Esperanza´s experience working in local communities to support families, end domestic violence, and increase meaningful access to services for Latina@s and incorporates a research center, public policy initiative, and training.
National Latin@ Network | http://www.nationallatinonetwork.org | 651.646.5553

redpajama_set_name: RedPajamaCommonCrawl


Box Kit Home Theaters | We live in a world where convenience is increasingly growing in demand. For this reason many home theater buyers expect convenience when it comes to the purchase and set up of their home theater systems. It goes without saying that there are all kinds of consumers in the world and even in matters of convenience supply and demand have not emerged to create a one size fits all society. We all want similar things in many ways yet we still want autonomy and selections from which to choose.


text:
This example shows how to use Babel in conjunction with Mocha, Istanbul, and
Gulp.

### Installation

1. Clone this repository
2. Navigate to this directory via `cd examples/mocha-gulp`
3. Install the `npm` dependencies via `npm install`

### Running the tests

To only run the unit tests, run `npm test`. For coverage reports, run
`npm coverage`.

### How it works

The `npm test` command is explained in
[the `mocha-gulp` example](../mocha-gulp#how-it-works); it's identical to the
one here.

The `npm run coverage` command is new, though. It's basically a minor
refactor of the example given in the `gulp-istanbul`
[documentation](https://github.com/SBoudrias/gulp-istanbul#nodejs-testing);
whereas they recommend using two gulp tasks, it can be made into one by using
stream events.

In addition, the [`instrumenter` property](https://github.com/SBoudrias/gulp-istanbul#instrumenter)
is utilized, which is the recommended way to use isparta with `gulp-istanbul`.

#### `.babelrc`

There's one last important detail that makes all of this work: the `.babelrc`
file. Our configuration in that file tells Babel that we want to transpile
ES2015 code into ES5 code. This is necessary because Babel makes no assumptions
about how you want to transform the code as of v6.

#### `gulpfile.babel.js`

By installing the `babel-core` module, we're able to write ES2015 in our
Gulpfile by naming the file `gulpfile.babel.js`. Keep in mind that the only
reason we need `babel-core` is to enable this feature. If you don't wish to
use ES2015 in your Gulpfile, then you do not need to specify that dependency.

#### A note on Chai

These examples all use Chai as the assertion library for the tests. It should be
relatively straightforward to swap it out for your assertion library of choice,
which is why I haven't included other examples. If you're having trouble,
[raise an issue](https://github.com/jmeas/testing-with-babel/issues) and I'll be
glad to help out.


BEGINNINGS: In 1848 at the football field of FK Sutjeska, the first basketball court in Nikšić was build and not long after KK Sutjeska was established. Vojislav Spasojević introduced the basic elements of basketball to young Nikšić people. Immediately afterwards Vule Vulaković started coaching the team, with the help of Crvena Zvezda player Dragan Jakšić. In 1953 the united league began and in 1962, Sutjeska won the Montenegrin champion without a single defeat. However, between 1955 and 1974 club changed its name several times – Nikšić, Partizan, Mladost and finally Sutjeska again.
GLORY DAYS: The only trophy the club has won so far came in 2013 when they have lifted the Montenegrin National Cup trophy. However, there was another peak worth mentioning, as in 2015/16 season, Sutjeska became ABA League member for the first time.


With that goal in mind, she relocates to a quiet town in Northern California where she conveniently rents an already Goth-themed apartment in an imposing mansion on a hill. There, she makes fast friends with her laid-back landlady, Trish (Laura Waddell), while setting a trap for a string of unsuspecting suitors via a combination of spells and love potions.
After burying the corpse in her backyard, it's on to the next conquest for Elaine, who sets her sights on everyone from Trish's husband, Richard (Robert Seeley), to Griff (Gian Keys), the police Sergeant investigating Wayne's disappearance. Thus unfolds The Love Witch, a campy horror comedy written, produced and directed by Anna Biller (Viva). The movie marks her sophomore offering, and stars Samantha Robinson in the title role.
The visually captivating adventure is a rarity nowadays in that it was shot on 35mm film, and it is also a highly-stylized throwback in the sense that it is an unapologetic homage to the trashy sexploitation flicks of the sixties and seventies.
So, don't expect to invest emotionally in this cornball adventure at all, particularly given how the heroine delivers virtually every one of her lines in a halfhearted, tongue-in-cheek tone. Ultimately, this period piece harks back less to a cultural era than to a bygone genre of moviemaking.


text:
Q: Comparar e atualizar dados de uma tabela HTML com dados retornados via JSON? Problema: Tenho uma tabela que é populada por dados vindos de multiplos arquivos JSON, até ai nenhum problema. A questão é que, preciso atualizar os dados caso os valores contidos no JSON sejam diferentes do que está na tabela, mas sem alterar a ordem dos itens.
Todo esse processo deve preferencialmente ser feito utilizando somente AngularJS.
Se um código (symbol) que veio no JSON não existir na tabela eu o adiciono, se já existir eu atualizo. No momento só tenho concluido o código abaixo:
<!DOCTYPE html>

        <meta charset="UTF-8"/>
        <title>BMF&Bovespa</title>
        <link rel="stylesheet" href="assets/css/bootstrap.min.css">

                    Código
                    Cotação
                    Variação (RS)
                    Variação (%)
                    Maior cotação
                    Menor cotação
                    Abertura
                    Fechamento
                    Volume

                    {{valor.Symbol}}
                    R$ {{valor.LastTradePriceOnly}}
                    R$ {{valor.Change}}
                    {{valor.ChangeinPercent}}
                    R$ {{valor.DaysHigh}}
                    R$ {{valor.DaysLow}}
                    R$ {{valor.Open}}
                    R$ {{valor.PreviousClose}}
                    {{valor.Volume}}

Mapeamento das colunas da tabela para o JSOn:

*

*Código => Symbol

*Cotação => LastTradePriceOnly

*Variação (RS) => Change

*Variação (%) => ChangeinPercent

*Maior cotação => DaysHigh

*Menor cotação => DaysLow

*Abertura => Open

*Fechamento => PreviousClose

*Volume => Volume

Arquivo JSON que popula a tabela:
{
    "query": {
        "count": 1,
        "created": "2017-02-22T12:29:35Z",
        "lang": "pt-br",
        "results": {
            "quote": {
                "symbol": "CTSA3.SA",
                "Ask": "2.07",
                "AverageDailyVolume": "6374",
                "Bid": "1.91",
                "AskRealtime": null,
                "BidRealtime": null,
                "BookValue": "6.24",
                "Change_PercentChange": "-0.06 - -2.90%",
                "Change": "-0.06",
                "Commission": null,
                "Currency": "BRL",
                "ChangeRealtime": null,
                "AfterHoursChangeRealtime": null,
                "DividendShare": null,
                "LastTradeDate": "2/21/2017",
                "TradeDate": null,
                "EarningsShare": "-0.37",
                "ErrorIndicationreturnedforsymbolchangedinvalid": null,
                "EPSEstimateCurrentYear": null,
                "EPSEstimateNextYear": null,
                "EPSEstimateNextQuarter": "0.00",
                "DaysLow": "2.00",
                "DaysHigh": "2.07",
                "YearLow": "1.46",
                "YearHigh": "3.29",
                "HoldingsGainPercent": null,
                "AnnualizedGain": null,
                "HoldingsGain": null,
                "HoldingsGainPercentRealtime": null,
                "HoldingsGainRealtime": null,
                "MoreInfo": null,
                "OrderBookRealtime": null,
                "MarketCapitalization": "78.99M",
                "MarketCapRealtime": null,
                "EBITDA": "136000.00",
                "ChangeFromYearLow": "0.55",
                "PercentChangeFromYearLow": "+37.67%",
                "LastTradeRealtimeWithTime": null,
                "ChangePercentRealtime": null,
                "ChangeFromYearHigh": "-1.28",
                "PercebtChangeFromYearHigh": "-38.91%",
                "LastTradeWithTime": "4:29pm - 2.01",
                "LastTradePriceOnly": "2.01",
                "HighLimit": null,
                "LowLimit": null,
                "DaysRange": "2.00 - 2.07",
                "DaysRangeRealtime": null,
                "FiftydayMovingAverage": "2.03",
                "TwoHundreddayMovingAverage": "1.84",
                "ChangeFromTwoHundreddayMovingAverage": "0.17",
                "PercentChangeFromTwoHundreddayMovingAverage": "+9.44%",
                "ChangeFromFiftydayMovingAverage": "-0.02",
                "PercentChangeFromFiftydayMovingAverage": "-0.77%",
                "Name": "SANTANENSE  ON",
                "Notes": null,
                "Open": "2.07",
                "PreviousClose": "2.07",
                "PricePaid": null,
                "ChangeinPercent": "-2.90%",
                "PriceSales": "0.23",
                "PriceBook": "0.33",
                "ExDividendDate": "5/4/2015",
                "PERatio": null,
                "DividendPayDate": null,
                "PERatioRealtime": null,
                "PEGRatio": "0.00",
                "PriceEPSEstimateCurrentYear": null,
                "PriceEPSEstimateNextYear": null,
                "Symbol": "CTSA3.SA",
                "SharesOwned": null,
                "ShortRatio": "0.00",
                "LastTradeTime": "4:29pm",
                "TickerTrend": null,
                "OneyrTargetPrice": null,
                "Volume": "6800",
                "HoldingsValue": null,
                "HoldingsValueRealtime": null,
                "YearRange": "1.46 - 3.29",
                "DaysValueChange": null,
                "DaysValueChangeRealtime": null,
                "StockExchange": "SAO",
                "DividendYield": null,
                "PercentChange": "-2.90%"
            }
        }
    }
}

Outro exemplo de JSON:
{
    "query": {
        "count": 1,
        "created": "2017-02-22T12:29:35Z",
        "lang": "pt-br",
        "results": {
            "quote": {
                "symbol": "BPHA3.SA",
                "Ask": "7.70",
                "AverageDailyVolume": "230233",
                "Bid": "7.46",
                "AskRealtime": null,
                "BidRealtime": null,
                "BookValue": "5.54",
                "Change_PercentChange": "-0.15 - -1.96%",
                "Change": "-0.15",
                "Commission": null,
                "Currency": "BRL",
                "ChangeRealtime": null,
                "AfterHoursChangeRealtime": null,
                "DividendShare": null,
                "LastTradeDate": "2/21/2017",
                "TradeDate": null,
                "EarningsShare": "-9.42",
                "ErrorIndicationreturnedforsymbolchangedinvalid": null,
                "EPSEstimateCurrentYear": "-0.50",
                "EPSEstimateNextYear": null,
                "EPSEstimateNextQuarter": "0.00",
                "DaysLow": "7.47",
                "DaysHigh": "7.90",
                "YearLow": "3.92",
                "YearHigh": "19.20",
                "HoldingsGainPercent": null,
                "AnnualizedGain": null,
                "HoldingsGain": null,
                "HoldingsGainPercentRealtime": null,
                "HoldingsGainRealtime": null,
                "MoreInfo": null,
                "OrderBookRealtime": null,
                "MarketCapitalization": "848.11M",
                "MarketCapRealtime": null,
                "EBITDA": "-296.97M",
                "ChangeFromYearLow": "3.58",
                "PercentChangeFromYearLow": "+91.33%",
                "LastTradeRealtimeWithTime": null,
                "ChangePercentRealtime": null,
                "ChangeFromYearHigh": "-11.70",
                "PercebtChangeFromYearHigh": "-60.94%",
                "LastTradeWithTime": "6:04pm - 7.50",
                "LastTradePriceOnly": "7.50",
                "HighLimit": null,
                "LowLimit": null,
                "DaysRange": "7.47 - 7.90",
                "DaysRangeRealtime": null,
                "FiftydayMovingAverage": "6.39",
                "TwoHundreddayMovingAverage": "8.00",
                "ChangeFromTwoHundreddayMovingAverage": "-0.50",
                "PercentChangeFromTwoHundreddayMovingAverage": "-6.30%",
                "ChangeFromFiftydayMovingAverage": "1.11",
                "PercentChangeFromFiftydayMovingAverage": "+17.40%",
                "Name": "BR PHARMA   ON      NM",
                "Notes": null,
                "Open": "7.65",
                "PreviousClose": "7.65",
                "PricePaid": null,
                "ChangeinPercent": "-1.96%",
                "PriceSales": "0.41",
                "PriceBook": "1.38",
                "ExDividendDate": "5/2/2012",
                "PERatio": null,
                "DividendPayDate": null,
                "PERatioRealtime": null,
                "PEGRatio": "0.00",
                "PriceEPSEstimateCurrentYear": null,
                "PriceEPSEstimateNextYear": null,
                "Symbol": "BPHA3.SA",
                "SharesOwned": null,
                "ShortRatio": "0.00",
                "LastTradeTime": "6:04pm",
                "TickerTrend": null,
                "OneyrTargetPrice": null,
                "Volume": "268800",
                "HoldingsValue": null,
                "HoldingsValueRealtime": null,
                "YearRange": "3.92 - 19.20",
                "DaysValueChange": null,
                "DaysValueChangeRealtime": null,
                "StockExchange": "SAO",
                "DividendYield": null,
                "PercentChange": "-1.96%"
            }
        }
    }
}

Publiquei o código em: https://github.com/fabiojaniolima/money

A: Preserve os valores retornados em um objeto mapeado, cujas chave de propriedade seja a posição do papel no array papeis. A seguir, altere apenas o valor da propriedade de acordo com o retorno da API.
As seguintes alterações foram feitas:
$scope.mapa = {};

Um objeto é criado no escopo do controle para conter os resultados retornados. Note que não é um array, e que não é redefinido a cada ciclo de carga.
angular.forEach(papeis, function(papel, index) {[...]

O método forEach() provê uma propriedade extra, passada como segundo parâmetro da chamada - o índice do item na coleção de origem.
$scope.mapa[index] = resultado;

O retorno da consulta à API é armazenado no mapa de acordo com o índice.
E, na view:

O formato (key, value) em um ngRepeat permite que um objeto seja utilizado como fonte, as propriedades como chaves de valores.
A chave (que é apenas o índice do papel no array original) pode ser ignorada, mas o valor é utilizado para popular sua view.
(Adicionalmente um outro objeto-mapa foi criado, $scope.prev, para ajudar a identificar diferenças de valor entre a requisição atual e a anterior.)
Exemplo funcional a seguir:

angular.module("money", []);
angular.module("money")
    .controller("moneyController", function($scope, $http, $interval) {
        var papeis = ["ABEaV3.SA", "BBTG12.SA", "AGRO3.SA", "BPAN4.SA", "BPHA3.SA", "BRML3.SA", "BRSR6.SA", "BTOW3.SA", "CARD3.SA", "CIEL3.SA", "CMIG4.SA", "CTKA4.SA", "CTSA3.SA"];
        $scope.mapa = {};
        $scope.prev = {};

        function consultarCotacao() {
            angular.forEach(papeis, function(papel, index) {
                var yql = 'select * from yahoo.finance.quotes where symbol in ("' + papel + '")';
                var api = "https://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent(yql);
                var url = api + "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=";
                $http({
                        method: "GET",
                        url: url,
                        timeout: 3000,
                        headers: { 'Content-Type': "json" }
                    })
                    .then(function successCallback(response) {
                        resultado = response.data.query.results.quote;
                        if (resultado.Name !== null) {

                            if (angular.toJson($scope.mapa[index]) !== angular.toJson(resultado)) {

                                if ($scope.mapa[index]){
                                    var clone =angular.fromJson(angular.toJson($scope.mapa[index]));
                                    $scope.prev[resultado.Symbol] = clone;
                                }

                                $scope.mapa[index] = resultado;
                            }
                        } else {
                            console.log(resultado.Symbol + " não foi encontrado!");
                        }
                    }, function errorCallback(response) { console.log("Falha na chamada do recurso."); });
            });
        }

        $scope.color = function(valor) {
            if (valor.indexOf("+") !== -1) {
                return "green";
            }
            return "red";
        };
        $scope.markDiff = function(a, b) {
            if (a !== b) {
                return "bold-text";
            }
            return "normal-text";
        };
        consultarCotacao();
        $interval(consultarCotacao, 5000, 0);
    });

        <meta charset="UTF-8"/>
        <title>BMF&Bovespa</title>

        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

                    Código
                    Cotação
                    Variação (RS)
                    Variação (%)
                    Maior cotação
                    Menor cotação
                    Abertura
                    Fechamento
                    Volume

                    {{valor.Symbol}}

                    R$ {{valor.LastTradePriceOnly}}
                    R$ {{valor.Change}}
                    {{valor.ChangeinPercent}}
                    R$ {{valor.DaysHigh}}
                    R$ {{valor.DaysLow}}
                    R$ {{valor.Open}}
                    R$ {{valor.PreviousClose}}
                    {{valor.Volume}}

{{mapa | json}}

{{prev | json}}

A: Use um dicionário
Para que atualize o array interno fazendo apenas o update dos itens, sem ter que limpar e regerar o array, você pode usar um dicionário que relacione a chave com o índice do item e atualizar quando o resultado trouxer a mesma chave e inserir quando não encontrar.
Sugestão baseado no seu código no Github. Eu utilizei o campo Symbol como chave mas você pode colocar aquele que melhor fizer esse papel, ou seja, que possa ser identificado unicamente nos registros:
    angular.module("money", []);
    angular.module("money").controller("moneyController", function ($scope, $http, $interval) {

        var papeis = ['ABEaV3.SA','BBTG12.SA', 'AGRO3.SA', 'BPAN4.SA', 'BPHA3.SA', 'BRML3.SA', 'BRSR6.SA', 'BTOW3.SA', 'CARD3.SA', 'CIEL3.SA', 'CMIG4.SA', 'CTKA4.SA', 'CTSA3.SA'];
        var dict = {};
        $scope.valores = [];

        function consultarCotacao(papeis) {

            angular.forEach(papeis, function (papel) {

                var yql = 'select * from yahoo.finance.quotes where symbol in ("' + papel + '")';
                var api = 'https://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent(yql);
                var url = api + '&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=';

                $http({
                    method: 'GET',
                    url: url,
                    timeout: 3000,
                    headers: {'Content-Type': 'json'}
                }).then(function successCallback(response) {
                    resultado = response.data.query.results.quote;
                    if (resultado.Name !== null) {
                        var key = resultado.Symbol;
                        if (!dict.hasOwnProperty(key)) {
                            dict[key] = $scope.valores.push(resultado) - 1;
                            console.log('insert: ' + key);
                        } else {
                            $scope.valores[dict[key]] = resultado;
                            console.log('update: ' + key);
                        }
                    } else {
                        console.log(resultado.Symbol + ' não foi encontrado!');
                    }
                }, function errorCallback(response) {
                    console.log('Falha na chamada do recurso.');
                });
            });

        }

        $scope.color = function (valor)
        {
            if (valor.indexOf("+") !== -1) {
                return "green";
            }
            return "red";
        }

        consultarCotacao(papeis);
        $interval(consultarCotacao, 5000, 0, 0, papeis);
    });

A: Como o @Rafael B. Marcílio sugeriu, vc pode mapear o json para um objeto javascript, utilizando por exemplo o JSON.parse:
var json = JSON.parse('[{
"symbol": "CTSA3.SA",
"Ask": "2.07",
"AverageDailyVolume": "6374"}]')

E no lugar de uma tabela estática, vc pode usar o ng-repeat para popular a tabela dinamicamente, como nesse exemplo:
Documentação ng-repeat

        Código
        Descrição
        Categoria
        Preço Atual

        {{item.codMaterial}}
        {{item.description}}
        {{item.category.description}}
        {{item.currentPrice | currency:"R$ "}}

Onde o materialList é o seu array que foi convertido do json, assim qualquer modificação na lista automaticamente altera toda a tabela

A: Um modo que pode simplificar bastante para você é o uso de angular.merge(), que faz com que 2 listas sejam unificadas em uma só, atualizando os valores das propriedades em comum.
Ou seja, a cada requisição que você faz, basta atualizar a lista, assim os campos atualizam automaticamente, veja:
$scope.valores = [];

var arr = [];

angular.forEach(papeis, function (papel) {
    $http({
        method: 'GET',
        url: url,
        timeout: 3000,
        headers: {'Content-Type': 'json'}
    }).then(function successCallback(response) {
        resultado = response.data.query.results.quote;
        if (resultado.Name !== null) {
            arr.push(resultado);
        } else {
            console.log(resultado.Symbol + ' não foi encontrado!');
        }
    }, function errorCallback(response) {
        console.log('Falha na chamada do recurso.');
    });
})

$scope.valores = angular.merge($scope.valores, arr);

Importante!!
Neste modelo, por ele ser bem automatizado, você não tem controle de verificações. Por exemplo, se por acaso você receber uma lista e, após 10 minutos, receber outra lista, exatamente igual (em questão de estrutura), PORÉM em uma ordem diferente, o angular.merge irá atualizar, mudando a ordem também. Ou seja, se o objeto que era o primeiro vier em 3º na próxima chamada, ele será o terceiro objeto na nova lista, etc..
Se isso não for um problema, não há muito com o que se preocupar.

Se você deseja fazer uma análise mais profunda do objeto, creio que o melhor seja efetuar um for, analisar os objetos que atualizaram e efetuar a atualização "manualmente". Algo mais ou menos assim:
for ( var i=0; i < $scope.valores.length; i++ ) {
    for ( var in=0; in < arr.length; in++ ) {
        if ( $scope.valores[i].id === arr[in].id ) {
            angular.extend( $scope.valores[i], arr[in] );
        }
    }
}

Onde angular.extend irá copiar os valores das propriedades de um objeto para o objeto de origem.
Deste modo você garante que irá atualizar o objeto correto ao qual os dados pertencem.

Fiz este plunker para exemplificar o cenário, já funcionando. Utilizei apenas dados mais simples e simulei o request através de um clique no botão. Basta clicar nos botões e ver as mudanças.


Till Sunrise is a singer/guitarist musical duo specializing in jazz, blues and classic R&B covers. We're based out of Bellevue and enjoy playing in the greater Seattle and Eastside areas.
Please welcome our new singer – Virginia!
...is a jazz/blues/R&B cover band based out of Bellevue. Contact us today for booking inquiries!
© 2019 Till Sunrise – A Jazz, Blues and R&B Duo. All Rights Reserved.


text:
GEO-GEE project: Ice Shelf Monitoring in Antarctica
Antarctica's ice sheet is melting so rapidly that now over 200 billion tonnes of ice is pouring into the ocean annually, causing sea levels to increase by a half-millimetre every year.
Scientists and communities across the globe hold concerns for the future and are asking questions around how the ice shelves will evolve in our changing climate, i.e. "How much smaller will they get?" and "How fast will they shrink?".
This uncertainty is mainly due to the limited understanding of the process that determines the instability of ice shelves. To reduce this uncertainty, the Ice Shelf Monitoring project by research consortium, HiRISE, has been focusing on ice shelves in Antarctica and mapping them out accurately using field measurements, satellite data and models.
The project is one of the recently announced Group on Earth Observations (GEO) - Google Earth Engine (GEE) Program winners that were granted funding to tackle environmental and social challenges using open Earth data.
We spoke with Project Supervisor, Stef Lhermitte, from the Delft University of Technology to learn about how HiRISE will be using Google Earth Engine (GEE) to investigate the role of ice shelf instability on sea level rise.
Stef, can you tell us about your project to monitor ice shelves in Antarctica?
With this project, we want to build a GEE platform to analyse and demonstrate the use of satellite data over Antarctic ice shelves. This will allow insight into the surface, subsurface and basal conditions of the ice shelves, which are major sources of uncertainty in determining future sea level projections.
We will focus on using GEE for processing the following satellite imagery sources:
Sentinel-1/2/3
The outcome of our project will be easily accessible satellite and model products on current Antarctic ice shelf status. These will be available for use by the broader community.
This developed GEE platform will complement the HiRISE consortium, which was recently funded by the Dutch Research Council (NWO) and consists of TUDelft, IMAU, KNMI, NIOZ and ULB.
What is the challenge that you want to tackle?
The main challenge will be to translate our developed algorithms to Antarctic-wide scale using all the satellite data that is available to us.
Ice shelf stability is a crucial parameter for determining future sea level rise. In addition to the wider public interest in polar climate change, products monitoring the status over all Antarctic ice shelves are incredibly important for the broader cryosphere, ocean and sea level rise community.
How does Google Earth Engine help you achieve your project-related goals?
GEE enables us to scale up the methodologies used to access large scale satellite archives across Antarctica and provide a platform (app) to quickly browse and download insightful data sets.
Making these data available can help make more accurate estimations of how the stability of ice shelves is set to change in the coming centuries - and the possible impact this will have on communities and our environment.
How will the GEO-GEE funding help your project?
The support available within the GEO-GEE program will help us to improve the processing chain, data accessibility, visibility, and increase the available processing capability of our project.
What does success look like to you?
We hope this project will enable scientific breakthroughs by allowing insights on a larger scale (Antarctic-wide) and create societal impact by bringing polar satellite data closer to the scientific community and wider public.
EO Data Science's role in the GEO - GEE Program
EO Data Science partnered with Google Earth Engine and the Group on Earth Observations to launch the GEO-GEE Program, which supports GEO member countries to operationalise their science as they strive to tackle the world's biggest sustainable development challenges.
In July 2020, 32 projects across 22 countries were selected into the program which offers $3 million USD towards product licenses and $1 million USD in technical support from EO Data Science. This funding and support will help these projects tackle global challenges using open Earth data. Read the announcement and list of winners here.
Follow us on Twitter, LinkedIn or Facebook to hear about more GEO-GEE winning projects!


SPECIAL DEAL IN PLACE FOR WIGAN HOSPITALITY!
The Bantams are offering an introductory price of only £40.00 for existing season ticket holders to sample the hospitality suite this coming Saturday (24 October 2015) for the club's mouth-watering home match with Wigan Athletic.
For this, you'll be sat within the executive suites and served a scrumptious three-course meal, receive a complimentary match day programme, plus you'll get to watch the game from the executive seats on the half-way line - one of the best views in the house!
This sort of package would usually cost a supporter £80.00.
This package is also open to non-season ticket holders priced at £60.00 and there's also a children's option priced at £30.00.
The cut-off time to reserve your place in hospitality is 5:00pm this Wednesday (21 October 2015).
To find out more about the hospitality packages please contact commercial@bradfordcityfc.co.uk or go to www.bcafccommercial.co.uk to make an on-line booking.
Please note that BCFC season ticket holders must bring their season ticket with them on the day.


I act like a cat, I look like a cat, Yet I am not a cat. What am I?
If 5 cats catch 5 mice in 5 minutes, how long will it take one cat to catch a mouse?
What hired killer never goes to jail?
I love to dance and twist and prance, I shake my tail, as away I sail, wingless I fly into the sky.
When John was six years old he hammered a nail into his favorite tree to mark his height. Ten years later at age sixteen, John returned to see how much higher the nail was. If the tree grew by five centimeters each year, how much higher would the nail be?
The nail would be at the same height since trees grow at their tops.
Can you write down eight eights so that they add up to one thousand?
888 + 88 + 8 + 8 + 8 = 1000.


text:
Benjamin Welsh
Our Faculty/Staff
Advanced Studies Leadership & Policy
Benjamin Welsh, PhD
Coordinator, Higher Education Masters & Doctoral Programs
Banneker Building #315A
benjamin.welsh@morgan.edu
Dr. Welsh joined the faculty of Advanced Studies, Leadership, and Policy in the spring of 2009. Prior to that, he served as associate professor of teacher education at Alfred University and Keuka College and assistant professor of educational foundations at Ball State University. Related positions that he has held include remedial English instructor at the Community College of Philadelphia, English teacher at Bartram High School in Philadelphia, and ACT Coordinator at the Philadelphia Job Corps Center. His dissertation focused on the research methods of the early educational researchers who were part of Stanford University's founding faculty. What he uncovered was the racist and sexist ideology that appears to be at the heart the American public school system. Other teaching and research interests include white studies, multicultural education, the history of education, analytic philosophy of education, and the long term impact of social Darwinism on our public schools.


text:
The personal website of Chris Coyier
Blog Timeline Interviews Speaking
Avatar: The Last Airbender had a Style Guide
It's been 10 years since the finale! Andrew Whalen talks to the creators, Michael DiMartino and Bryan Konietzko:
Still, when looking back at the series bible—a document developed to serve as an internal guide to the characters, settings and overall narrative of a show in the early stages of development—Konietzko and DiMartino found many of their ideas for the finale already in place, years before Avatar premiered in February of 2005.
That's pretty cool. It feels like a show that had a very solid plan all along and a world that wasn't just winged. Unlike LOST, in which the writers just did whatever the wanted:
"I had friends that were writing on Lost, I can't say who they were. And I was watching football with one of them and I was telling them how much I loved the show…and I'm like, "How are you going to pay all this stuff off?" And he looked at me and goes, "We're not." And I go, "What do you mean you're not?" He said, "We literally just think of the weirdest most fcked up thing and write it and we're never going to pay it off." And I look at him and I'm like, "That's such bullshit! You are completely f*cking with the audience."
I still feel scorned by LOST. It was such an incredible journey, fueled by the idea that this must be the most ingenious intertwined puzzle plot ever and the payoff is going to be incredible… maybe we can even figure out little bits along the way. Only to have it end with close to zero payoff and the admission it was just winged.
chriscoyier@gmail.com CodePen Dribbble Twitter GitHub Instagram


It's been a while since I've waded into the circus known as "diversity." (One of my most popular all-time posts is one from June 2014 titled "Is Lack Of 'Diversity' At Big Law Firms A Crisis?") But with the recent affair at Google all over the news, I can't resist returning to the topic.
If you haven't read the now-famous memo by Google engineer James Damore that ultimately got him fired, it is here. Try reading it and see if you can figure out what he said that was so offensive. The statement from Google CEO Sundar Pichai asserted that Damore had crossed "the line by advancing harmful gender stereotypes in our workplace." OK, can you quote which words of Damore you say crossed that line? Not that I can find, either in that statement or anywhere else.
we don't see equal representation of women in tech and leadership.
It does appear that on many, many different human attributes -- height, weight, propensity for criminality, overall IQ, mathematical ability, scientific ability -- there is relatively clear evidence that whatever the difference in means -- which can be debated -- there is a difference in the standard deviation, and variability of a male and a female population. And that is true with respect to attributes that are and are not plausibly, culturally determined.
● Programs, mentoring, and classes only for people with a certain gender or race.
● A high priority queue and special treatment for "diversity" candidates. . . .
Not to mention that Google has an entire department dedicated to increasing the "diversity" in its work force. And with all that, what are the results? Here is a summary of Google's own "Diversity Report" for 2016. Women as a percentage of the workforce are 31%, but in "technical roles" only 20%. Blacks are only 2% of the Google work force, and Latinos 4%. (Wow -- no major law firm could get away with those numbers!) Asians, of course, are way over-represented at 35% of the work force.
I for one am completely prepared to believe that the reason for Google's failure to hire and retain women and minorities is systematic racial and gender discrimination and oppression. After all, there must be some good reason for the widespread sense of guilt and self-loathing among Google's executives.
[T]hough women and men are equally represented in the population at large, women make up only 17 percent of engineering degrees conferred compared to 83 percent conferred to men. . . . Seventy-seven percent of education majors are women and so are 64 percent of social sciences majors.
How exactly is Google -- or any other tech company -- supposed to get to 50% of its software engineers being women, when the percentage of women in the engineering major in college is less than 20%?
I came into work one Monday morning and joined the guys at our work table, and one of them said "What did you do this weekend?" I was in the throes of a brief, doomed romance. I had attended a concert that Saturday night. I answered the question with an account of both. The guys stared blankly. Then silence. Then one of them said: "I built a fiber-channel network in my basement," and our co-workers fell all over themselves asking him to describe every step in loving detail. At that moment I realized that fundamentally, these are not my people. I liked the work. But I was never going to like it enough to blow a weekend doing more of it for free. Which meant that I was never going to be as good at that job as the guys around me.
I'm not claiming to have the complete explanation for why women are such a small percentage of the technical staff at tech companies. There can be many different factors at play. But I do know that we're never going to get a better understanding of the reasons if reasonable hypotheses are arbitrarily excluded from the discussion on the basis of ideology.


We want you to come to our Empty Bowls Community Luncheon on September 24, 2015 in Arroyo Grande. If you can't join us at the lunch, you can still help by giving us your lunch money! It's that simple.
You give. We act. Families find homes and hope.
Delectable soups in handcrafted bowls (that you get to keep) will be served by our celebrity servers at the 5Cities Homeless Coalition's 4th Annual Empty Bowl Community Luncheon, Thursday Sept. 24, 2015 Join us anytime from 11:30 to 2:00 p.m. at St. Patrick's Catholic Church Parish Hall in Arroyo Grande. We'll have to-go bowls too for those who need to come and go This is just too tasty an event to pass up, buy your ticket here!
Perhaps you can't join us for lunch that day. You can still help us to change lives. Please put your lunch money in our virtual "Bowl of Hope" to help us raise an additional $500 for those who are homeless in the South County.
Donating your lunch money will be far more satisfying than the quick lunch you were probably going to spend it on anyway.
Homelessness presents a serious threat to children's learning and achievement. Lucia Mar Unified School District has identified more than 900 school-age children who are considered homeless. They need our help.
Oftentimes it is the lack of funds for a deposit or rental application fee that stands in the way of a family or individual being re-housed.
Bryan Crawford Charles Schwab & Co., Inc.


text:
"We All Have Levers We Can Pull": Reforming Graduate Education
By Rachel Arteaga, Brian DeGrazia, Jimmy Hamill, Stacy M. Hartman, Stephanie Malak, Ashley Cheyemi McNeil, Katina Rogers, Beth Seltzer
LARB IS ALWAYS OPEN — open-minded, open access, open for debate, open-ended, open to you.
The Los Angeles Review of Books is a reader-supported nonprofit, providing free coverage of culture, politics, and the arts. Like so many literary and arts organizations, our funding has been upended and we need your support now more than ever. Membership starts at just $5 a month. JOIN TODAY >>
IN JANUARY 2020, we attended the Modern Language Association's annual conference in Seattle. There we convened with a working group — organized by Katina Rogers and Stacy Hartman — of professionals, professors, and graduate students who work across various roles in higher education or adjacent institutions. This piece on humanities doctoral programs that follows was co-written by six working group members.
— Rachel Arteaga and Stephanie Malak
Graduate Education in a Moment of Malleability
The interlocking crises of this moment — a global pandemic, economic instability, and renewed protests against systemic racism and police brutality in the wake of the killings of Ahmaud Arbery, Breonna Taylor, and George Floyd, the most recent incidents in a long history of violence — teach us that what we may have previously understood to be immutable can, and must, be changed. Our responses to a new and serious threat to public health, the urgent needs of those who live in economic precarity, and the persistent and undeniable evidence of racial injustice in the United States will take different forms across the many institutions and communities that make up our society. In Higher Education, as elsewhere, this is a moment for reflection and action. Those of us who work in this sector are now called upon to remake the practices of teaching, learning, and research.
In this essay, we reflect on how we can and must contribute to this needed transformation. We suggest possibilities for how to rebuild the dynamic systems and institutions of Higher Education from within through intentional creation and change, rather than through the haste and triage of crisis management — or, worse, through the performance of reforms that superficially alter the veneer of our sector while leaving its fundamental realities intact.
We focus here on graduate education, specifically, on the humanities PhD and the challenges that doctoral students face as they are apprenticed into leadership roles in our institutions of higher learning. Graduate education is an important nexus for change: many humanities doctoral students work in instructional roles, at once learning and teaching in their fields of study. The doctoral students of today are preparing to serve as the next generation of scholarly leaders, and as such, changes to the programs that shape these students will be felt for decades to come across the entire system.
But existing norms and values are sticky, and change comes haltingly. Reform work has been happening in this space for decades, often supported by the National Endowment for the Humanities and The Andrew W. Mellon Foundation; many of the co-authors of this essay have undertaken this work with support from these very sources, and we have witnessed both the potential and the limitations of reform. What we and many others have observed is that, by and large, graduate education replicates itself. It produces academics who value and protect the prevailing structures in which they are trained. A linear system of education — valuing the product of the thinker, rather than the process of thinking and creating new knowledge — discourages mistakes and risks, two elements that are crucial to effective teaching, learning, and research. With high stakes and failure sharply penalized, emerging scholars are in a precarious position, first-generation and scholars of color even more so than their white colleagues. In a system that prizes a genealogical model of scholarly formation, graduate students have strong incentives to absorb the spoken and unspoken codes of their university and departments and then pass them on to undergraduate students.
However, even the most change-averse institutions have been thrust into disarray by the COVID-19 pandemic and its impacts, and even the most hesitant participants in discussions of racial justice have been forced to consider how they might act with more resolve to build an equitable and just world. Nationwide — indeed, globally — we have seen that structures that were assumed to be intractable can actually be rapidly changed under these pressures. In a moment when the status quo appears unusually vulnerable, how might we incite changes that are real and lasting?
Product versus Process
Many of the challenges we are seeing in colleges and universities right now reflect an overvaluing of product, or research, and an undervaluing of process, or teaching and mentorship. Veronica Barrera-Kolb, professor of Humanities at Seattle Central College, notes that much of this imbalance originates with the American capitalist overvaluing of property at the expense of labor:
Many of the challenges we are seeing in colleges and universities reflect an overvaluing of product, or research, and an undervaluing of process, or teaching and mentorship. I came to my graduate studies as an immigrant, working-class, first-generation student believing deeply that the project of Higher Education was a pedagogical one. I quickly learned that my training would be at the service of a capitalist economy that privileged the production of knowledge over everything else. My intellectual labor was to produce knowledge that could quickly be published and become my property, or belong to the institution where I do my work. Property that could be sold and exchanged in a market that in turn would produce prestige for my career and my institution. In contrast, the labor of teaching, the very project I thought was at the ground of Higher Education, was the place where I witnessed the most exploitation and alienation. The devaluing of teaching as non-productive labor, in the context of the prestige economy puts the very relevance of our intellectual projects into jeopardy.
Academic products include the various markers of prestige for scholars and students: a publication, a good grade, a large grant, a tenure-track job. These markers, by their nature, are built around exclusion. Exclusion is one of the primary metrics by which universities judge themselves against their peers: selectivity, as measured by the number of people admitted relative to the number who applied. That ratio is an indicator of the university's prestige. Institutions like Harvard (acceptance rate: five percent) and Stanford (acceptance rate: four percent) are considered "elite" largely because they exclude so many undergraduate applicants. [1] Exclusion is used as a stand-in for excellence, even though a school's acceptance rate says nothing at all about the quality of its teaching or research, or how well it prepares its students for life and work.
A person's background — their race, class, educational status, or gender — influences the reaction they have to these exclusionary practices. Unsurprisingly, that reaction is likely influenced by whether or not they feel like an insider in a Higher Education setting — whether they feel that the space is for them, that they belong. First-generation college students or those who historically have had limited access to Higher Ed are more likely to feel out-grouped in prestigious spaces in Higher Education.
Among humanities doctoral students, these factors are especially acute. Nowhere is this emphasis on prestige more evident than in humanities PhD programs.
Within graduate education, especially at the doctoral level, we can articulate the ethos of valuing process over product as the difference between the production of scholarship and the act of "being scholarly." Valuing advanced study primarily as a site of production for a single, inflexible end product both reduces the substantive richness of education and strips agency from the student. Being scholarly, in contrast, is a process-oriented approach which highlights the role of community and civic responsibility, and values the development of the scholar and their communities.
Scholarly Work for the Public Good
Many humanities PhDs land in "alternative" professional positions, inside of Higher Education, but outside of the tenure track. In our vision of a better academy, we see humanities PhDs who are engaged in working toward the public good, even if this work lives outside of academia. Many of the authors of this piece are in one way or another involved in this important work.
An oft-repeated note of resistance to the idea of humanities PhDs working outside of the academy is that it represents a caving-in to capitalist logics of job development. For example, it's one thing to have a career development boot camp that helps prepare students widely for their working lives, and quite another to imagine a PhD program curriculum that is not primarily designed around the production of traditional forms of scholarship and the placement of PhDs into tenure-track, research-focused professorships.
In recent years, doctoral programs at places like the University of Iowa and The Graduate Center of the City University of New York, and in the career boot camps run by organizations like Humanities Without Walls and the Modern Language Association (MLA), have called the unquestioned value of prestige to account. Participants have realized that they are not the problem; it's the system working exactly as it was designed to work. Sites of resistance to such a system have developed within and without institutional walls, serving as a home for those who feel that the university is not for them. But these sites remain, in most places, peripheral, serving a fraction of the students they wish they could serve.
To take another example, the intellectual formation of graduate students has long been the focus of doctorate training, often to the exclusion of their social and emotional formation. How can individuals and institutions more effectively support doctoral students — the stewards of our disciplines [2] — and where do we direct them for said support? Humanities PhDs will be better positioned to find and contribute to communities outside of their scholarly disciplines if their programs of study acknowledge and underwrite these components of their development.
However, there is no single approach, as there is no single entity governing Higher Education. Putting aside the impossible task of changing a whole system at once allows us to think and act locally, and to "lead from where we are," as Kathleen Fitzpatrick puts it in a recent blog post. Fitzpatrick reminds us that revising locally controlled documents — departmental bylaws and policies, for instance — can lead to real and lasting change, and that ad hoc measures can grow through emulation and influence.
Indeed, in the case of doctoral education, codified power exists only at the local level: the pulling of levers within departments and programs is what actually changes structures, one institution at a time. There is no governing body to oversee or enforce such changes more broadly across institutions, or to make more sweeping "structural" changes. National organizations like the MLA possess a soft power — to create resources to support this work, to convene those doing it, and to bring them into conversation and help legitimate best practices. This soft power can affect the culture change that is necessary for — indeed, that perhaps amounts to — what might be called systemic change: a better balanced system, a thriving ecosystem of doctoral education. But soft power has no teeth without individual advocates and change-makers working at the local level, building a healthier system node by node.
Ultimately, we must move from perceiving the need to change, to developing ad hoc and short-term solutions, which will in turn foster systemic change in graduate education.
Testimonies for Change
In this section, we offer ways of reframing humanities doctoral studies. All of these first-person accounts engage the central provocations of this essay.
A Graduate Student
Our colleague and collaborator Jimmy Hamill, PhD candidate in English at Lehigh University, describes what a graduate assistantship opportunity revealed about the product/process tension — which we understand as a tension more broadly between prestige and equity — as it takes shape in doctoral education in the humanities:
Early in my doctoral program, I felt divided between the expected desire of a tenure-track position and other kinds of administrative work in Higher Education. An opportunity came up to work as a graduate assistant at Lehigh's Pride Center, an advocacy center dedicated to intersectional queer justice and education. The center's work fit well with my scholarly interests in LGBTQIA+ literature and queer theory, but I was worried it would take me away from teaching in a college classroom and its potential to "distract" me from my studies. I also worried what future employers would think about me taking an alt-ac position instead of committing to my research. As I reflected on whether or not to apply, it was clear to me that I had internalized limited understandings of what pedagogy and scholarship could look like.
Thankfully, my director of Graduate Studies and faculty advisor were there to help me deconstruct these assumptions. Both of them encouraged me to look at my doctoral program as a time to go deeper into my interests, which sometimes meant exploring unforeseen opportunities and paths. They helped me realize that this position wouldn't be a distraction from my scholarship but, in fact, would concretize many of the theories I had only encountered in seminars. Ultimately, they were pushing me to look at my doctoral education as a process of discovery that would produce multitudes of products in different spaces. If it wasn't for their reframing, I would've passed up one of the most formative experiences of my doctoral education simply because it didn't initially fit within the image I had created for myself.
These experiences, shared by so many doctoral students in the humanities, demonstrate that there is anxiety around redefining what our scholarly and pedagogical pursuits could be. By valuing products of tradition rather than processes of discovery, institutions tend to (intentionally or inadvertently) create systems that work against broader access and public relevance. They also exclude the people who may be most likely to drive change.
An Administrative Team
Two of us, Stacy Hartman and Katina Rogers, work as administrators at The Graduate Center, City University of New York. The Graduate Center (GC) is a unique interdisciplinary space at a large public urban university dedicated to graduate (primarily doctoral) education. At the GC, we strive to address the disconnect between the values and the structures of Higher Ed at both the institutional and the individual levels. At the institutional level, we develop programs and structures that are realistic about constraints while also envisioning different possible futures. At the individual level, we work to mitigate students' feelings of alienation as part of our efforts to help them flourish. In effect, we help students to navigate questions of belonging and alienation that they confront every day in educational spaces. We would like to share a bit of what that looks like in the day-to-day, and what we see as the stakes of our roles.
We spend a lot of time talking about labor — specifically, emotional labor — with each other, with our students, and with our faculty allies. Our fellowship programs exist in interstitial spaces, outside of departments; they push boundaries and create spaces that are less circumscribed by the traditional rules and economies of the academy. We've deliberately created interdisciplinary, non-evaluative, public-oriented programs that are more collaborative and less competitive than many academic departments. We don't grade our students. We don't decide who will advance to candidacy and who won't.
It is probably for this reason that our students are comfortable revealing to us the anxieties and struggles that erupt in the course of their PhD programs. These anxieties and struggles are all quite normal for people in their situations — people who are trying to live on too small stipends in a too expensive city. Uncertainty about the future in both an immediate, personal sense and in an existential, political sense adds to the stress that our students experience. In group meetings and one-on-one mentoring sessions, as we plan public events and innovative courses and undergraduate leadership programs, students in our programs consistently step up with creative ideas without the fear of judgment or performativity that pervades many graduate seminars. This is possible because we build trust among our groups, slowly, by sharing ideas and joys and concerns (and baked goods). We pride ourselves on having created programs that nurture our students, and we hope that the support we provide is helpful in navigation through the PhD.
However, through the course of engaging in so much emotional labor — labor that other parts of the university do not take on, because it exists outside the bounds of a prestige-based incentive structure — we are aware of the fundamental ways in which doctoral education is failing our students.
Our roles encompass so much of this type of work in part because our programs are a space for students to process their positions relative to the institution. By reminding graduate students of their agency, we're also inviting them to question their assumptions about Higher Education, about equity and merit, about their identities as emerging scholars in their fields. The process of self-reflection often involves moments of frustration as students realize that the system of Higher Education is not broken, but rather is working exactly as intended: a prestige economy doesn't function unless it excludes more people than it includes. Once we understand that the goals of the system are focused around prestige, we more readily understand students' relationship to that system.
Many of the students in our programs emerge from this process ready to fight for a system that has equity and inquiry at its core rather than prestige. And so, the challenge becomes how to envision and design systems that offer a completely different value system and to find ways to move the kind of sustaining work that happens in co-curricular programs like ours into the core spaces of universities.
Community-Based Working Groups
MLA Career Boot Camp
Several of us worked on January's Career Boot Camp at the Modern Language Association Annual Convention, a group that brought together a cohort of 30 graduate students for professional development activities designed to connect them with their values and help them get past the hurdles to finding fulfilling work. Participants attended panels, a career fair, and a site visit to meet humanities PhDs in a range of careers, while also connecting with their own profiles and interests.
It's no accident that many boot camps require participants to reframe the way they think about themselves as products of academic labor. Many career development programs rely on reframing an individual's experience in a way that challenges grad students to think about the tasks they did in graduate school in a more holistic, process-based way. Participants are challenged to reframe the time they spent talking with students during office hours, figuring out how to use the school learning management system, or their "non-academic" interests as a vital part of their career profile. 2020 Bootcamp alum Treviene Harris says,
The boot camp helped me isolate, with specificity and concreteness, the most fulfilling aspects of the work I do in academia. Part of that process involved actually learning how to name and therefore translate my expertise and social commitments for a wider professional audience. This in turn helped me identify viable career pathways, beyond academia, where my advanced humanities training would be valuable. Attending the bootcamp better equipped me to embark on a broad and diverse job search with competence and confidence.
For those of us leading this programming, it is far less about teaching these graduate students something new than it is about helping them relearn what they already know — seeing their training in a different way, seeing their personal values as something worth preserving, understanding that their family needs are valid and not distractions, and above all, a message of empowerment. To sum it up, our message is: "You do actually know how to do things."
While bootcamps are often limited in participant capacity and, at best, take place only adjacent to institutional spaces, the ad hoc nature of these types of programs nevertheless can foster real structural change because of the potential for transformative community building. Depending on the cohort convened, our experience shows that there is a unique reciprocity among the relationships of the participants; they themselves are changed and they change one another in their willingness to come together. They share anxieties, find common ground in experiences and vulnerability, and begin working toward reimagining the world and their capacity to contribute to it. The participants often share a common interest in taking their new thinking back to their colleagues, friends, and departments and thereby reinforce the value of being scholarly.
At the January 2020 Boot Camp, we ended with an activity in which participants brainstormed how they were planning to bring back the information they had learned. The boot camp participants covered a whole wall in post-it notes of ideas. Some focused on the other graduate students in their departments, thinking how they could share resources and run their own workshops. Others brainstormed campus events, ways to connect with alumni and different programs on campus. Quite a few wanted to start with a heartfelt talk with a chair or a mentor about what their graduate programs could be doing better. Of course, not all of these ideas will materialize, and not all of them might lead to much visible change, but some of those conversations might trigger another conversation. A student might bring new ideas to a chair, a chair might bring concerns back to a departmental meeting, and then the conversation could be taken up by a curriculum revision committee.
Ideally, these values and empowerment will ultimately be re-integrated into graduate programs, so that we can fully celebrate humanities PhDs as full people with a great deal to contribute within and beyond the academy. The real goal would be a PhD in which this translation effort is not necessary, because the connections have been made obvious from the beginning, built into the process.
Humanities for the Public Good
Other efforts are underway to aim and land interventions inside the institution that reach outward. In 2018, the University of Iowa received a grant from The Andrew W. Mellon Foundation to design a new interdisciplinary humanities PhD program, Humanities for the Public Good (HPG). This PhD program will be student-centered, practice-based, in service to the public good, and enacted through deep humanistic research and professional preparation for a sweeping range of careers.
"While we often hear about the devaluing of the humanities," HPG principal investigator Teresa Mangum explains, "I proposed this grant because I hold the opposite view." We need to reimagine what it means to "do" the humanities both within and beyond academe, which in part means embracing how "businesses as well as political, nonprofit, and cultural organizations see the importance of humanistic values — commitment to equity, inclusion, justice, empathy, and compassion — and humanistic methods and emphases on interpretation, storytelling, and meaning-making."
The HPG initiative plans to leverage the courses, faculty expertise, and community-oriented goals already espoused at the University of Iowa in order to create a radically new programmatic architecture to support the mission of the initiative. For example, the grant welcomes its second cohort of PhD candidate interns in summer 2020. The doctoral interns applied to work with curated public partners for two months over the summer, devising projects with their site mentors that benefit the needs and goals of the organization and capitalize on the academic training, scholastic aptitude, and personal interests of the interns.
The inaugural cohort of interns from summer 2019 provided a rich example of the practical and intangible benefits of PhD students learning from and contributing to communities beyond their traditional disciplinary parameters. Through their internships, they articulated new facets of their dissertation research, refilled their personal wells of energy, and (re)discovered joy in being differently challenged and in being empathetic new learners. The summer internship component of the HPG program will continue in years to come and, in all likelihood, be expanded into additional full-year internship opportunities.
The grant also just completed its first full academic year, which was devoted to researching and exploring transformative ideas to build the new PhD program. Much of this work was engaged through the considerable efforts of its advisory board, organized into working groups, each of which included faculty, staff, and graduate students from a broad range of humanities-based units and departments, from University of Iowa museums, Office of Engagement, and Center for Teaching, to English, Philosophy, and World Languages, Literatures, and Cultures.
Members of the advisory board are committed to radically imagine otherwise in terms of doctoral humanities education today. The builders of the HPG program not only must reckon with the current state of graduate training, but also must boldly situate the merit, utility, and place of humanists in the world. Because of this, the HPG PhD program "presumes that humanities scholars can contribute much-needed commitment to culture, values, careful research, historically and culturally sensitive practices, and civic dialogue to every sector," as Mangum remarks. That COVID-19 brings to stark relief both the precarity and the promise of the HPG program (and humanities graduate studies writ large) only confirms that systemic change is at once urgent and prescient, and that graduate training must be conceived of beyond academe, to service the many publics by which it has always been shaped.
It is a unique and unexpected moment that we find ourselves in given the renewed energy to combat police brutality, protests demanding racial equity, and COVID-19. It is not lost on us that uplifting opportunities often present themselves on the heels of crisis-based change. Make no mistake: In the semesters and years to come after a vaccine is created, the academy will work to rebuild itself and will use all its fiscal and social capital to do so. What if we throw out the blueprints of exclusionary prestige and instead fuel a resistance that defunds the traditions of Higher Ed that lionize product over process and therefore inevitably fail graduate students and the public? Sometimes stress and sadness can sharpen our sense of what is imperative, what is ethical, and what has been accumulated over time in efforts for prestige or tradition. We invite our colleagues and readers to perceive this time as a clarion call to more intentionally make universities sites of resistance to everything that has been outed as fickle and false.
Before pursuing change, take the time to assess the situation and your positionality within it. Learn about the institutional histories that have shaped your current reality, and find out about reform efforts that preceded you. Why did they succeed or fail? How can you build on what has already been accomplished?
Acknowledge your privilege in the existing system, especially if you are white. Develop an awareness of the ways in which the people around you are being differently impacted by the events of the world.
Recognize and resist the prestige economy within Higher Ed by rendering more visible the importance of process, and try to see where in the process (of teaching, research, and mentorship) we can make different choices.
Offer spaces for doctoral students to reflect on their academic, professional, and personal trajectories, whether through peer-to-peer conversations or formal events.
If you are a white faculty member or administrator, do your homework and find ways to be explicitly anti-racist in your teaching, mentoring, and administrative work.
How do you embrace your students as full people? In advising them, do you make space for them to center their values and personal goals and needs? How will you actively support their emotional and social, as well as intellectual formation?
Rather than assessing if a scholar or their scholarship is "rigorous," question the arbiter, and arbitrariness, of that rigor.
Fight for stable and sufficient funding — including TAships — for graduate students and contingent faculty, especially BIPOC individuals.
Speak up for reinvestment in public Higher Education at the city and state level. Contact your representatives directly and talk with them about the value of Higher Ed.
If you are a faculty member, ask to serve on review committees in your department for tenure and promotion guidelines, and work to integrate language that recognizes publicly engaged scholarship, excellence in teaching, and mentorship of students as important facets of professional life within the academy.
If you're on a hiring committee, do research in advance on institutional practices, particularly on how diversity in hiring committees impacts hiring outcomes.
Build new peer-mentorship structures to foster trust, support, and community.
Shift toward holistic forms of doctoral admissions and advising. Students bring many experiences, skills, and commitments with them. Acknowledge those as important and valuable and help students incorporate them into their work. Ask students to share not only their research but their skills with their peers.
Seek authentic input from current and former graduate students about which parts of their experience were/are valuable to them. Revise curricular structures that are not serving students well.
Establish new TAships or advanced level internships in your department with positions in other areas of the university (administrative, centers, advising).
Launch a career boot camp at your institution or offer funding to your doctoral students to attend one.
Explicitly train doctoral students to center diversity and accessibility as a core part of their work. Mentor students through designing class syllabi and policies for equity.
Revise the language on your department's website to be more intentional and representative about which students you are recruiting and why.
Revise application process and metrics of "fit" in existing humanities PhD programs to be more inclusive.
Offer opportunities for graduate students to meet and network with staff and administration in areas of Higher Education outside their department.
Celebrate all career outcomes.
Share Resources and Start Discussions
Read Putting the Humanities PhD to Work, Katina Rogers (Duke University Press, July 2020).
Read about new and emerging interdisciplinary graduate programs that are hospitable to process-centered pedagogy, community-based inquiry, and the public humanities, such as at University of Iowa and Georgetown.
Use the MLA's Doctoral Student Career Planning Guide and consult ImaginePhD.
Consider creating a crowdsourced "guide to the hidden curriculum" for your program so that people can share knowledge and questions without judgment.
If you are in a department with a highly competitive atmosphere, take actions to counteract it. Share resources equitably. Work collaboratively with others on your research and teaching.
Involve diverse teams of faculty, staff, and students from units across campus to engage discussions of humanities for the public good.
Ask PhD alums in a wide range of fields to give feedback on your graduate training curriculum. Were the courses useful? What did they need more of to prepare them for their roles? Commit to making at least one change based on their feedback.
If you are a faculty member, find out what other humanities departments, the dean's office, the graduate school, and career advisors are doing for students at your institution. Can you support existing initiatives, or replicate support structures within your department?
Our purpose in these reflections has been to categorize and assess efforts toward systemic change in Higher Ed and describe how we have come to reimagine the purpose of doctoral education at the intersection of the US economy and social values. It seems much easier right now to imagine the future of Higher Ed as a place of increasing precarity and resource-scarcity. But fear of the future makes for poor decision-making. If we want a different future, we have to imagine it differently. The examples that we've offered are a blueprint for what a different future might look like: one in which prestige is not the coin of the realm in Higher Ed, where process is valued over product, and where students and educators are invited to bring their whole selves to their educational experiences. A wholesale rethinking of education as a public good, rather than a private benefit is necessary, but it is not necessary to wait for it; indeed we cannot wait for it. We all have methods of soft power; we all have levers we can pull.
Katina Rogers is an administrator, researcher, and faculty member at The Graduate Center, City University of New York. She is the author of Putting the Humanities PhD to Work: Thriving in and beyond the Classroom (Duke University Press, July 2020).
Stacy M. Hartman is the director of the PublicsLab at The Graduate Center, City University of New York.
Jimmy Hamill is a doctoral candidate in English at Lehigh University in Bethlehem, Pennsylvania. His research focuses on writing pedagogy and the intersection of queer identity and Christianity.
Beth Seltzer is an academic technologist based in the Bay Area. She works on digital pedagogy and scholarship and professional development for PhDs.
Ashley Cheyemi McNeil is an Andrew W. Mellon postdoctoral fellow in the humanities at the University of Iowa. Her work has appeared in Public: A Journal of Imagining America and Racial Ecologies, among other publications.
Brian DeGrazia is a New York–based higher education professional, writer, and translator. He has a PhD in Italian Studies from New York University.
Rachel Arteaga is a writer based in Seattle. Her work has appeared in New American Notes Online, Inside Higher Ed, and Profession.
Stephanie Malak is the director of Strategic Partnerships at the Community of Literary Magazines and Presses.
Featured image: "Members of Occupy Cal Deliberate Demands for UC Berkeley's Anthropology Library" by Colleen Young is licensed under CC BY-SA 4.0.
Banner image: "Studying Students inside of Powell Library" by Josh Lee is licensed under CC BY-SA 3.0.
[1] Based on fall 2018 enrollment data as reported by US News.
[2] "Stewards of the discipline" is a phrase coined by Chris M. Golde and George E. Walker in their work for the Carnegie Initiative on the Doctorate. See Envisioning the Future of Doctoral Education: Preparing Stewards of the Discipline (2006).
Is Safe-Enough Pragmatism Good Enough?
By Richard Eldridge
Higher Ed on Autopilot
By Christopher Newfield
A Market Correction in the Humanities — What Are You Going to Do with That?
By Leigh Claire La Berge
Are PhD Students Irrational?
By Aaron R. Hanlon
The Elephant in the Seminar Room: Should the PhD Be Saved?
By Stephen Milder


A individual connected to the hacking group TheDarkOverlord has been given a three year jail sentence for fraud and blackmail offenses, although not for any cyberattacks or extortion efforts related to the The Dark Overlord gang.
Nathan Wyatt, 36, resident in Wellingborough, England, using an online pseudonym the Crafty Cockney, pleaded guilty to 20 counts of fraud by false representation, a further two counts related to blackmail, and one count of possession of a false identity document with the aim of to deceiving.
Recently, at Southwark Crown Court, Wyatt was sentenced to serve three years in jail by Judge Martin Griffiths. At the sentencing hearing, Judge Griffiths stated Wyatt was responsible for many more crimes including those pursued via the courts. Some of those offenses are connected to the TheDarkOverlord.
In September 2017, Wyatt was arrested for trying to broker the sale of images of Pippa Middleton, which had been taken from a hack of her iPhone. Pippa Middleton is the sister of the Duchess of Cambridge. The charges connected to that incident were dropped and Wyatt claims he was not to blame for the hack.
During the course of that particular investigation, Wyatt's computer was apprehended. An analysis of the device showed he had been active in other crimes. At first, Wyatt was arrested for using a false identity document and fraud offenses in January 2017, and was arrested a second time in March in offenses.relating to blackmail offenses.
Police found that Wyatt had used stolen details to apply for a payment card, although the application was turned down. Wyatt had also used his dead step father's credit card to make a string of online purchases, including purchases of computer games and cell phones. Wyatt ran up debts in the region of £4,750 on the card, according to a report in the Northamptonshire Telegraph.
An extortion effort saw Wyatt use the name "The Dark Overlords" on a ransom demand in which he tried to obtain a payment of €10,000 in Bitcoin from a UK legal practice. Wyatt stole approximately 10,000 files from the unnamed Humberside law firm using malware to access to the files on the law firm's IT server.
In that extortion attempt, Wyatt said that he was trying to offload the stolen files to buyers in Russia and China if the ransom demand wasn't paid. The files included detailed scans of driver's licenses and passports. It is unclear whether Wyatt hacked the law practice or if he used stolen credentials to obtain access to its system to install malware.
Wyatt's partner, Kelly Walker, aged 35, was also arrested and charged with handling stolen goods and encouraging or aiding offenses, but she was acquitted when prosecutors could not provide any proof to support the charges.
It is not known whether Wyatt was a main member of the Dark Overlord hacking group, a fringe player, or if he was a copycat that used the group's handle. Dissent from Databreaches.net stated in a recent blog post that Wyatt was allegedly supposed to make a call to one of the Dark Overlord's victims in Georgia to force the clinic to pay the ransom request. Wyatt was also allegedly to blame for opening back accounts in the UK on behalf of the Dark Overlord to take payments issued from hacking victims in the United States.
Wyatt is likely to be set free in 18 months. In the United Kingdom, prisoners serving between 1 and 4-year jail sentences are normally released after they have served half of their sentence, with the remainder of the sentence served on probation. Wyatt has not been charged for any offenses committed in the USA.