From fffb738a4eb124ce46f0c5b66d8368730a21816e Mon Sep 17 00:00:00 2001 From: Matthew Gaughan Date: Wed, 5 Feb 2025 20:39:48 -0800 Subject: [PATCH] hw1 --- .gitignore | 9 + hw1/hw1.Rmd | 213 +++++++++ hw1/hw1.html | 437 ++++++++++++++++++ hw1/hw1.log | 2 + hw1/hw1.tex | 138 ++++++ .../figure-html/unnamed-chunk-13-1.png | Bin 0 -> 56989 bytes rstudio-server.job | 100 ++++ 7 files changed, 899 insertions(+) create mode 100644 .gitignore create mode 100644 hw1/hw1.Rmd create mode 100644 hw1/hw1.html create mode 100644 hw1/hw1.log create mode 100644 hw1/hw1.tex create mode 100644 hw1/hw1_files/figure-html/unnamed-chunk-13-1.png create mode 100644 rstudio-server.job diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..198b817 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# ignore the R studio docker image needed by hyak +rstudio_latest.sif + + +# do not need to include any R items +.Rhistory +.cache/ +.config/ +.local/ diff --git a/hw1/hw1.Rmd b/hw1/hw1.Rmd new file mode 100644 index 0000000..7fa81db --- /dev/null +++ b/hw1/hw1.Rmd @@ -0,0 +1,213 @@ +--- +title: "Homework 1" +output: html_document +--- +Matthew Gaughan, Assignment 1 for Sociology 476: Computational Content Analysis. + + +## Task 0 + +```{r} +library(stringr) +library(dplyr) +string_0 <- "Before you get started, I have to ask you for a quick favor. I lost my +key. Could you please search for it and grab it from this string here +using regex?" + +string_1 <- "Ah, thanks! But, actually, that was the wrong key. Actually, it’s this +key that I need. I don’t need the first key. Can you get this one using +a single regex?" + +string_2 <- "Given the confusion we’ve had with keys lately, I was wondering whether +it would make sense to use colored keys. For instance, we’d have a yellow +key, a purple key, and a red key, etc. And then you could just grab all +those at once with a single regex, but you wouldn’t accidentally get +some other key. Couldn’t you? By the way, I found my NU-ID - this purple +keycard I had been searching for so long." + +#string 0 +str_extract_all(string_0, regex("key")) +#string 1 +str_extract_all(string_1, regex("\\bkey\\b(?!\\.)")) +#string 2 +str_extract_all(string_2, regex("\\bkey\\b(?!\\.)")) + +``` + +## Task 1 + +The corpus consists of comment data on WikiMedia Foundation platforms in and around software feature deployments that likely impacted the operation of user bots and scripts. The user bots and scripts community is an important, peripheral software development community for the WikiMedia Foundation platforms. There are two primary formats for the data, parsed WikiTalk (general forum areas in various parts of the platform) pages and parsed Phabricator discussions (the platform's software engineering management work board.) For all data, we will have access to the comment's text, original author, and time of publication. We will sometimes have information pertaining to the task or subject that the comment is published in reply to. This homework assignment will focus on the data that we have from 3 years (2012-1-1 to 2014-12-31) of Phabricator discussions around the VisualEditor project. + +```{r} +#getting the filepath for the comment data +ve_phab <- "/mmfs1/gscratch/comdata/users/mjilg/mw-repo-lifecycles/0205_convo_data/phab_data/visualeditor/0205_ve_phab_comments.csv" +ve_phab_df = read.csv(ve_phab, header = TRUE) +comment_level_phab_df = ve_phab_df +head(comment_level_phab_df) +``` +Given that these are comments on a work board, the simplest unit of analysis is each individual comment. I have loaded the corpus in as individual comments (n=32506) above. However, as Phabricator is a work management system, these comments are all discussing specific items of software engineering work. Below, I have re-shaped the data to be organized by parent Task (n=4583). +```{r} +# using R pipe operations to group by the unique TASK PHIDs and then collate the comments, +# separating the different comments with a punctutation term that will be removed at cleaning +task_level_phab_df <- ve_phab_df |> + group_by(TaskPHID) |> + summarise(comment_text = paste(comment_text, collapse = ":-;-:")) +head(task_level_phab_df) +``` +## Task 2 +```{r} +library(quanteda) +library(quanteda.textstats) + +# we need to have unique comment_ids for quanteda +comment_level_phab_df <- comment_level_phab_df |> + mutate(comment_index = row_number()) +#loading into quanteda +corpus <- quanteda::corpus(comment_level_phab_df, text_field = "comment_text", docid_field = "comment_index") +``` +Given the messy nature of these discussions (significant jargon and a high count of URLs) more heavy-handed pre-processing is necessary to turn this into text that we can analyze. +```{r} +# there are a large amount of urls, so removing those will hopefully be useful +# there is also a lot of discussion re: different tasks by their ID, +# I am skeptical that I can currently make meaning of this, so I am removing numbers +tokens <- tokens(corpus, at = "word", + remove_punct = TRUE, + remove_symbols = TRUE, + remove_numbers = TRUE, + remove_url = TRUE, + remove_separators = TRUE, + split_hyphens = FALSE) +# trying to standardize the data across sentences +tokens = tokens_tolower(tokens, keep_acronyms = TRUE) +# the "raw" dfm +comment_dfm_raw = dfm(tokens) +# we then have to remove stop words +tokens_nostop <- tokens_remove(tokens, pattern = stopwords("en")) +``` +Now I will turn the mostly cleaned tokens into a DFM. +```{r} +library(lexicon) +comment_level_dfm <- dfm(tokens_nostop) +# we'll then lemmatize the words +comment_dfm_lemmatized = dfm_replace(comment_level_dfm, + pattern = lexicon::hash_lemmas$token, + replacement = lexicon::hash_lemmas$lemma) +``` +Alternatively, we can just get the 300 most common features. +```{r} +feature_counts = colSums(comment_level_dfm) +comment_300_feat = sort(feature_counts, decreasing = T)[1:300] +``` + +## Task 3 +To work with a simple dictionary for this homework, I must first provide context on this event. VisualEditor was a Wikipedia feature deployment in July 2013 that was met with immediate community backlash. The failed deployment reshaped the relationship between the WikiMedia Foundation and its community members for years to come. I am interested in how the subcommunity of user bots and scripts operators were discussed in this setting; a cursory read-over showed other community members invoking VisualEditor's impact on user bots and scripts as their justification for opposing the feature roll-out. I will populate a dictionary with terms that I associate with discussion of user bots and scripts in this context, to see how many documents contain these terms. +```{r} +breaking_bots_dict = dictionary(list(breaking_bots = c("bots", "scripts", "gadgets", "community", "foundation", "staff", "disregard", "impact", + "break", "operation", "failing", "scrap*", "parse*", "robots", "tools")), + file = NULL, +) +fast_bot_dict_counts <- dfm_lookup(comment_dfm_lemmatized , dictionary = breaking_bots_dict, levels = 1) +print(fast_bot_dict_counts) +``` +This quick and dirty dictionary is not a very good measure, as shown by the 92.8% sparsity in the data set; the words that I personally associate with discussions about visualeditor's impact on user bots and scripts are hardly present in our data. This deductive approach is a limitation of the dictionary method as a tool. While dictionary methods can be useful for initial data exploration, their utility falters as the bounds of the data or the aims of the researcher broaden. + +## Task 4 +Given the computational burden of a corpus this larger, I have to subset my data features for the creation of the co-occurence matrix. Thus I will study a term I know to be popular: VisualEditor. I will get co-occurence values for when people refer to the project that their work orbits around. +```{r} +#because we are supposed to use the raw dfm, we're going to use the co-occurence function from lab +make_term_coocur_matrix <- function(dtm, verbose = FALSE) { + tdm <- t(dtm) + term_coocurrence_matrix <- tdm %*% dtm %>% as.matrix() + shared_terms_matrix <- dtm %*% tdm %>% as.matrix() + #gracefully exit + return(term_coocurrence_matrix) +} +#saving some compute +rcdfm <- dfm_select(comment_dfm_raw, pattern = names(topfeatures(comment_dfm_raw, 200))) +#make the co-occur matrix for the raw dfm +comment_co_occur <- make_term_coocur_matrix(rcdfm) +sort(comment_co_occur[,"visualeditor"], decreasing = T)[1:9] +``` +I am a bit underwhelmed by these results, though they are surely a function of using the raw dfm instead of the cleaned and lemmatized one. + +## Task 5 +We first have to load in the fasttext embeddings and do some pre-processing to make our later operations more efficient. +```{r} +fasttext_embeddings = data.table::fread("/mmfs1/gscratch/comdata/users/mjilg/cc.en.300.vec", skip = 1, quote ="") +# transforming the embeddings into matrices so that we can do matrix algebra on it. +fasttext_mat = as.matrix(fasttext_embeddings[, -1]) +rownames(fasttext_mat) = fasttext_embeddings$V1 +#vector_lengths = sqrt(rowSums(fasttext_mat^2)) +head(fasttext_mat[,1:10]) +``` +Now we can define our class for further analysis. Given that we're looking at comments on a work management platform for software engineering. I want to establish a class of common verbiage around different work tasks and actions of software development. +```{r} +swe_terms = c("merge", "deploy", "permissions", "rights", "code", + "engineer", "review", "churn", "conflict", "develop", + "sprint", "retrospective", "planning", "user", "design") +swe_mat = fasttext_mat[swe_terms, ] +#head(swe_mat) +``` +Now we can use principal component analysis to try to understand the variance between these terms. +```{r} +swe_pca_results = prcomp(swe_mat) +swe_pca_sum = summary(swe_pca_results) + +variance_proportion = swe_pca_sum$sdev^2 / sum(swe_pca_sum$sdev^2) +variance_proportion[1:5] +``` +It looks like our first 5 dimensions are able to capture a significant amount of variance. Let's plot the data. +```{r} +library(ggplot2) +ggplot(as.data.frame(swe_pca_results$x)) + + geom_text(aes(PC4, PC5, label = swe_terms)) + + ylab(paste0("")) + + theme_bw() +``` +I have spent some time clicking through the different PC plots and trying to interpret what the "meanings" of each of them could be. The first dimension seems to cluster terms by activity; the more active terms (deploy, merge) are more alike. The second dimension follows a similar logic, the third seems to latch cluster via a common understanding of "engineering work". The fourth dimension is the one that I am primairly interested in, as it seems to group terms that hint at the organizational concept of 'decision rights.' Who has the permissions to make decisions and affect organizational and technical change is a pre-eminent nexus for any organization. It is funny then, that my intentional inclusion into the class of "rights" to try to provoke this semantic cluster seems to have been rejected. + +I find PCAs very useful in explaining different semantic variance and provoking further research avenues. However I am hesitant to assign too much value onto their capabilities of meaning making. Fasttext's weights are trained on common crawl and wikipedia. While these corpus are incredible resources for general text analysis, their utility in robust semantic meaning are limited by that very generality. I would be curious to know the resources for more localized, context-specific word embeddings. It seems like a useful tool for developing more grounded and specific explanations of semantic variance. + +## Task 6 +I am interested in how references to the user bots and scripts community changes over time, especially over the time-window of the VisualEditor deployment. The WikiMedia platform and the MediaWiki software that supports it is organized in a core-peripheral development model, a common software engineering structure. It is often difficult to dilineate developers as core or peripheral, but in this case it is relatively straightforward. We can use Carliss Baldwin's framework of 'mirroring' between a technical artifact and the organization that builds it to identify the different actors in this software development: the engineers who work on core libraries are core developers, they are also largely employed by the WikiMedia Foundation; the non-employee contributors who work on extension libraries and bots are peripheral developers. My hunch is that these categorizations --- which are technically enforced via write-permissions on the constituent software libraries --- are invoked in the broader community's response to popular or unpopular feature deployments by the core organization. The last jump in that analysis is to identify the underlying commit changes during these periods of community response. + +I am interested in the different ways people talk about contributor agency in this setting: who has it, who doesn't. I want to take the first step in exploring that (an initial, descriptive analysis) through similar methods to Kozlowski's class and gender explorations. This pole exploration is a useful preliminary, validation analysis for later studies of how people discuss certain communities' agency. First we can define our poles in terms of the tokens closest and furthest from the action of "merging," the critical decision regarding what code is included and excluded from the project. Core developers often have merge permissions to a project; peripheral developers often do not. By studying the weighted relationships between how these engineers discuss power in the context of how they discuss the action of merging code, we can gain a better understanding of Phabricator engineers' discussions of work. Given that this exploration combines two methods from class to develop a method that is not introduced in class, it is also a bit of a test of the method's validity. +```{r} +fcm_matrix = tokens %>% + tokens_remove(stopwords("en"), padding = FALSE) %>% + quanteda::fcm(context = "window", window = 3) %>% as.matrix() + +like_merge_pole <- names(sort(fcm_matrix[,"merging"], decreasing = T)[1:20]) +like_merge_label <- "Like Merge" +dislike_merge_pole <- names(sort(fcm_matrix[,"merging"], decreasing = F)[1:20]) +dislike_merge_label <- "Dislike Merge" + +#we define our target pool as the different stakeholder groups of software projects +targets <- names(sort(fcm_matrix[,"power"], decreasing = T)[1:4]) + +library(lsa) +``` +Then, we can use the Kozlowski function to find the difference between the two poles that we have constructed. +```{r} +project_term_on_dimension = function(pole_1, label_1, pole_2, label_2, term_to_project, embedding_matrix){ + pole_1_centroid = colMeans(embedding_matrix[pole_1, ]) + pole_2_centroid = colMeans(embedding_matrix[pole_2, ]) + + axis = pole_2_centroid - pole_1_centroid + + if(length(term_to_project) > 1){ + cosine_w = lsa::cosine(axis, t(embedding_matrix[term_to_project, ])) + } else { + cosine_w = lsa::cosine(axis, embedding_matrix[term_to_project, ]) + } + return(data.frame(from = label_1, + to = label_2, + term = term_to_project, projection = cosine_w)) +} +``` +We then pass the values to the term projection. +```{r} +merge_projection <- project_term_on_dimension(like_merge_pole, like_merge_label, dislike_merge_pole, dislike_merge_label, targets, fasttext_mat) + +``` +The projection function fails when trying to calculate the column means. It seems that the error is that certain terms in the pole vectors are not identifiable in the embedding matrix --- the localized terminology "zend" "parsoid" and likely the acronym "HHVM" are not present in the common crawl and Wikipedia training data. Some of this is certainly a function of testing the bounds of the method, but I also think that it speaks to the limitations of relying on embeddings for the analysis of localized semantics. \ No newline at end of file diff --git a/hw1/hw1.html b/hw1/hw1.html new file mode 100644 index 0000000..f53e209 --- /dev/null +++ b/hw1/hw1.html @@ -0,0 +1,437 @@ + + + + + + + + + + + + + +Homework 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +

Matthew Gaughan, Assignment 1 for Sociology 476: Computational +Content Analysis.

+
+

Task 0

+
library(stringr)
+
+string_0 <- "Before you get started, I have to ask you for a quick favor. I lost my
+key. Could you please search for it and grab it from this string here
+using regex?"
+
+string_1 <- "Ah, thanks! But, actually, that was the wrong key. Actually, it’s this
+key that I need. I don’t need the first key. Can you get this one using
+a single regex?"
+
+string_2 <- "Given the confusion we’ve had with keys lately, I was wondering whether
+it would make sense to use colored keys. For instance, we’d have a yellow
+key, a purple key, and a red key, etc. And then you could just grab all
+those at once with a single regex, but you wouldn’t accidentally get
+some other key. Couldn’t you? By the way, I found my NU-ID - this purple
+keycard I had been searching for so long."
+
+#string 0
+str_extract_all(string_0, regex("key"))
+
## [[1]]
+## [1] "key"
+
#string 1
+str_extract_all(string_1, regex("\\bkey\\b(?!\\.)"))
+
## [[1]]
+## [1] "key"
+
#string 2
+str_extract_all(string_2, regex("\\bkey\\b(?!\\.)"))
+
## [[1]]
+## [1] "key" "key" "key"
+
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/hw1/hw1.log b/hw1/hw1.log new file mode 100644 index 0000000..b4fc24c --- /dev/null +++ b/hw1/hw1.log @@ -0,0 +1,2 @@ + +! sh: 1: pdflatex: not found diff --git a/hw1/hw1.tex b/hw1/hw1.tex new file mode 100644 index 0000000..0950c5f --- /dev/null +++ b/hw1/hw1.tex @@ -0,0 +1,138 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode}{hyperref} +\PassOptionsToPackage{hyphens}{url} +\documentclass[ +]{article} +\usepackage{xcolor} +\usepackage[margin=1in]{geometry} +\usepackage{amsmath,amssymb} +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +\usepackage{iftex} +\ifPDFTeX + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex + \usepackage{unicode-math} % this also loads fontspec + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +\usepackage{lmodern} +\ifPDFTeX\else + % xetex/luatex font selection +\fi +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +\usepackage{color} +\usepackage{fancyvrb} +\newcommand{\VerbBar}{|} +\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} +% Add ',fontsize=\small' for more characters per line +\usepackage{framed} +\definecolor{shadecolor}{RGB}{248,248,248} +\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}} +\newcommand{\AlertTok}[1]{\textcolor[rgb]{0.94,0.16,0.16}{#1}} +\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}} +\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{#1}} +\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}} +\newcommand{\BuiltInTok}[1]{#1} +\newcommand{\CharTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}} +\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}} +\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}} +\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}} +\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}} +\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{#1}} +\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}} +\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}} +\newcommand{\ErrorTok}[1]{\textcolor[rgb]{0.64,0.00,0.00}{\textbf{#1}}} +\newcommand{\ExtensionTok}[1]{#1} +\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.00,0.00,0.81}{#1}} +\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}} +\newcommand{\ImportTok}[1]{#1} +\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}} +\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.13,0.29,0.53}{\textbf{#1}}} +\newcommand{\NormalTok}[1]{#1} +\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.81,0.36,0.00}{\textbf{#1}}} +\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{#1}} +\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textit{#1}}} +\newcommand{\RegionMarkerTok}[1]{#1} +\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.81,0.36,0.00}{\textbf{#1}}} +\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}} +\newcommand{\StringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}} +\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.00,0.00,0.00}{#1}} +\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.31,0.60,0.02}{#1}} +\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.56,0.35,0.01}{\textbf{\textit{#1}}}} +\usepackage{graphicx} +\makeatletter +\newsavebox\pandoc@box +\newcommand*\pandocbounded[1]{% scales image to fit in text height/width + \sbox\pandoc@box{#1}% + \Gscale@div\@tempa{\textheight}{\dimexpr\ht\pandoc@box+\dp\pandoc@box\relax}% + \Gscale@div\@tempb{\linewidth}{\wd\pandoc@box}% + \ifdim\@tempb\p@<\@tempa\p@\let\@tempa\@tempb\fi% select the smaller of both + \ifdim\@tempa\p@<\p@\scalebox{\@tempa}{\usebox\pandoc@box}% + \else\usebox{\pandoc@box}% + \fi% +} +% Set default figure placement to htbp +\def\fps@figure{htbp} +\makeatother +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +\usepackage{bookmark} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} +\hypersetup{ + pdftitle={Homework 1}, + hidelinks, + pdfcreator={LaTeX via pandoc}} + +\title{Homework 1} +\author{} +\date{\vspace{-2.5em}} + +\begin{document} +\maketitle + +Matthew Gaughan, Assignment 1 for Sociology 476: Computational Content +Analysis. + +\subsection{Task 0}\label{task-0} + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{string\_0 }\OtherTok{\textless{}{-}} \StringTok{"Before you get started, I have to ask you for a quick favor. I lost my} +\StringTok{key. Could you please search for it and grab it from this string here} +\StringTok{using regex?"} + +\NormalTok{string\_1 }\OtherTok{\textless{}{-}} \StringTok{"Ah, thanks! But, actually, that was the wrong key. Actually, it’s this} +\StringTok{key that I need. I don’t need the first key. Can you get this one using} +\StringTok{a single regex?"} + +\NormalTok{string\_2 }\OtherTok{\textless{}{-}} \StringTok{"Given the confusion we’ve had with keys lately, I was wondering whether} +\StringTok{it would make sense to use colored keys. For instance, we’d have a yellow} +\StringTok{key, a purple key, and a red key, etc. And then you could just grab all} +\StringTok{those at once with a single regex, but you wouldn’t accidentally get} +\StringTok{some other key. Couldn’t you? By the way, I found my NU{-}ID {-} this purple} +\StringTok{keycard I had been searching for so long."} +\end{Highlighting} +\end{Shaded} + + +\end{document} diff --git a/hw1/hw1_files/figure-html/unnamed-chunk-13-1.png b/hw1/hw1_files/figure-html/unnamed-chunk-13-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d098775455406d573aacf025f735c71f4b3569 GIT binary patch literal 56989 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 literal 0 HcmV?d00001 diff --git a/rstudio-server.job b/rstudio-server.job new file mode 100644 index 0000000..9a66c20 --- /dev/null +++ b/rstudio-server.job @@ -0,0 +1,100 @@ +#!/bin/sh + +#SBATCH --job-name=comp-text-analysis +#SBATCH --partition=cpu-g2 #update this line - use hyakalloc to find partitions you can use + +#SBATCH --time=03:00:00 +#SBATCH --nodes=1 +#SBATCH --ntasks=4 +#SBATCH --mem=32G + +#SBATCH --signal=USR2 +#SBATCH --output=%x_%j.out + +# This script will request a single CPU with four threads with 20GB of RAM for 2 hours. +# You can adjust --time, --nodes, --ntasks, and --mem above to adjust these settings for your session. + +# --output=%x_%j.out creates a output file called rstudio-server_XXXXXXXX.out +# where the %x is short hand for --job-name above and the X's are an 8-digit +# jobID assigned by SLURM when our job is submitted. + +RSTUDIO_CWD="/mmfs1/home/mjilg/git/soc-text-assignments" # UPDATE THIS LINE +RSTUDIO_SIF="rstudio_latest.sif" # update this line + +# Create temp directory for ephemeral content to bind-mount in the container +RSTUDIO_TMP=$(/usr/bin/python3 -c 'import tempfile; print(tempfile.mkdtemp())') + +mkdir -p -m 700 \ + ${RSTUDIO_TMP}/run \ + ${RSTUDIO_TMP}/tmp \ + ${RSTUDIO_TMP}/var/lib/rstudio-server + +cat > ${RSTUDIO_TMP}/database.conf < ${RSTUDIO_TMP}/rsession.sh <&2 <&2 +exit $APPTAINER_EXIT_CODE