↩︎
  • A tweet of mine from 2017:

    ↩︎
  • \").", "snippet": "\n", "url": "/changes/2023/07/05/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-07-01-inflection-ai-pi", "type": "posts", "title": "Inflection AI Pi - feedback and sharing", "author": "Daniel Griffin", "date": "2023-07-01 01:34:37 -0700", "category": "", "tags": "[feedback interface, Inflection AI Pi, conversational AI, sharing interface]", "content": "\n\n\nInflection AI PI feedback interface\nThis is in Google Forms.\n\nScreenshot taken with [GoFullPage](https://gofullpage.com/) (distortions possible) at: 2023-07-01 08:18:06 \n\n\n\nInflection AI PI sharing interface\n(via an example query-prompt)\n\n\nInflection AI Pi\n[\nHow can I share these conversations with others?\n]\n\n\nScreenshot taken with Shift+Command+4 (on MacOS) at: 2023-07-01 23:39:14 \n\n\n\nScreenshot taken with Shift+Command+4 (on MacOS) at: 2023-07-01 23:39:34 \n\n\n\nScreenshot taken with Shift+Command+4 (on MacOS) at: 2023-07-01 23:39:53 \n\n\n\nScreenshot taken with Shift+Command+4 (on MacOS) at: 2023-07-01 23:40:04 \n\n\n\nScreenshot taken with Shift+Command+4 (on MacOS) at: 2023-07-01 23:40:26 \n\n\nFrom the \"feedback\" form / survey questions:\n\n> What do you find most difficult about finding information on the Web?\n\nThis question is striking to me for two reasons: (1) given the presentation of Pi is not largely toward \"finding information\" but \"conversation\" (or guided self- reflection/writing?) and (2) I'd love to read and discuss what people say in response to this question.\n\n\n\nThe \"conversational\" aim of the company appears to produce a mismatch in the feedback form——from the anthropomorphized first-person wrapping of the survey instrument (\"Hey! This is Pi. I'd love to hear your thoughts on how I'm doing...\") to the survey questions themselves presenting a sort of _illeism_—\"referring to oneself in the third person instead of first person[^wiki]—perhaps (\"What do you wish for from Pi?\").\n\n\n\n\n\n\n[^wiki]: [https://en.wikipedia.org/wiki/Illeism](https://en.wikipedia.org/wiki/Illeism)", "snippet": "\n", "url": "/2023/07/01/inflection-ai-pi/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "weblinks-2023-06-30-the-text-prompt-is-a-poor-ui", "type": "posts", "title": ""the text prompt is a poor UI"", "author": "Daniel Griffin", "date": "2023-06-30 08:38:46 -0700", "category": "", "tags": "[text-interface]", "content": "\n\nThis tweet is a reply—from the same author—to the tweet in: [very few worthwhile tasks? (weblink)](/weblinks/2023/06/29/very-few-worthwhile-tasks).\n\n\n\n\n\n[highlighting added]\n\n\n\\@benedictevans\nIn other words, I think the text prompt is a poor UI, quite separate to the capability of the model itself.On Twitter Jun 29, 2023\n\nPoor? Incomplete? We'll see!\n", "snippet": "\n", "url": "/weblinks/2023/06/30/the-text-prompt-is-a-poor-ui/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-06-30-very-few-2-3-sentence-descriptions", "type": "posts", "title": "very few 2-3 sentence descriptions connect", "author": "Daniel Griffin", "date": "2023-06-30 00:00:00 -0700", "category": "", "tags": "[queries-and-prompts, search seeds]", "content": "\n\nA follow-up to: [very few worthwhile tasks? (weblink)](/weblinks/2023/06/29/very-few-worthwhile-tasks), with the subject tweet shared below.\n\n\n\nAs I thought more about the [\\@benedictevans tweet](https://twitter.com/benedictevans/status/1674413748272939009) (at bottom) from yesterday, I hit on another, and perhaps clearer, connection to a core discussion in [my dissertation](/diss).\n\nOne struggle people have with finding effective uses (or developing fruitful practices) for ChatGPT, etc., is _not_ that \"very few worthwhile tasks can be described in 2-3 sentences typed in or spoken in one go\". The struggle is that very few 2-3 sentence prompts/queries, in particular contexts, can effectively describe the imagined referent worthwhile tasks.\n\nThe problem here is not that worthwhile tasks cannot be described in 2-3 sentences. The problem is finding some of those, perhaps very few, 2-3 sentences, for particular task contexts, that connect the searcher with their next steps in relation to their worthwhile task.\n \n\n\nThe data engineers I interviewed were particularly successful, in part, because their work was organized in such a way that they could grow their queries out of [seeds in the code or text or conversations](/diss/extending_searching#search-seeds) they were working with.\n\nSo, perhaps \"in one go\" is apt and we need to think about how to see and seed how to construct effective queries/prompts.\n\n\n\nHere is the tweet in [very few worthwhile tasks?](/2023/06/29/very-few-worthwhile-tasks.html) (weblink post):\n\n\n\n[highlighting added]\n\n\n\\@benedictevans\nThe more I look at chatGPT, the more I think that the fact NLP didn’t work very well until recently blinded us to the fact that very few worthwhile tasks can be described in 2-3 sentences typed in or spoken in one go. It's the same class of error as pen computing.On Twitter Jun 29, 2023\n\n", "snippet": "\n", "url": "/2023/06/30/very-few-2-3-sentence-descriptions/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-06-30-til-git-alias", "type": "posts", "title": "TIL git alias", "author": "Daniel Griffin", "date": "2023-06-30 00:00:00 -0700", "category": "", "tags": "[TIL, You.com, Perplexity AI, Phind]", "content": "**Problem:** When I make changes to core files in my Jekyll website and look at the `git status` I am mired in modifications to `_site`.\n\n**Current Solution:** A grep on the output of `git status --short` with a .git alias.\n\n**TIL:** [`git status --short`](https://git-scm.com/docs/git-status#Documentation/git-status.txt---short), and the ability to set an alias for use w/ `git` in `.gitconfig` (re my alias search, I was only looking for some hand-holding to recall how to do it in zsh)\n\n**Searches:**\n\n\n\nI'm just quickly demonstrating some different tools below (and working on how to do that). Any of these (and non-generative tools) likely could have helped me to a workable solution.\n\nNotice each of these tools (You.com, Perplexity AI, and Phind) allow me to share my results (see the link in the search queries).\n\n\n\n\nFruitful reply but then 'confused' by how I asked about preserving color.\n\nNote: I narrowed the viewing window so the right-column of search results collapsed in this screenshot.\nYou.com\n[\ncan you type somthing like \"git status -\\_site\" to get status of everydhing but the \\_site domain?\n]\n\n\n\n\nScreenshot taken with [GoFullPage](https://gofullpage.com/) (distortions possible) at: 2023-06-30 10:20:33 \n\n\n\n\n\n\n\n\n\nPerplexity AI \n \n\nare there nicer ways to get output like this?\ngit status | grep -v '\\_site'\n\n \n\n\n\n\n\n\n\nScreenshot taken with [GoFullPage](https://gofullpage.com/) (distortions possible) at: 2023-06-30 10:19:59 \n\n\n\n\n\nPhind\n[\nI want to make a alias for `git status --short | grep -v '_site'`\n]\n\n\n\n\nScreenshot taken with [GoFullPage](https://gofullpage.com/) (distortions possible) at: 2023-06-30 10:19:26 \n\n\n", "snippet": "\n", "url": "/2023/06/30/til-git-alias/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-30-notes", "type": "posts", "title": "changes 2023-06-30", "author": "Daniel Griffin", "date": "2023-06-30 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added formatting for `search-query-block`, see in [TIL git alias (weblog)](/2023/06/30/til-git-alias).\n- Added practice of Twitter SVG to use superscripts to link to tweets containing referenced text, see in [very few 2-3 sentence descriptions connect (weblog)](/2023/06/30/very-few-2-3-sentence-descriptions)\n- Changed [Posts](/posts) to show posts of all categories, with category labels.\n - Changed the back-to for those category pages to Posts, from Browse.\n- Per Lighthouse Accessibility concerns: \"Background and foreground colors do not have a sufficient contrast ratio.\"\n - Changed `` link colors from Bootstrap default to blue and purple.\n - Changed `` to `#990011`\n- Modified the display of `bibtex`.", "snippet": "\n", "url": "/changes/2023/06/30/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "papers-zamfirescu-pereira2023johnny", "type": "posts", "title": "“Why Johnny Can’t Prompt”", "author": "Daniel Griffin", "date": "2023-06-29 23:05:12 -0700", "category": "", "tags": "[queries-and-prompts, prompt engineering]", "content": "\n\nstatus: unread (2023-06-30 17:06:56)\n\n\nWhy Johnny Can’t Prompt: How Non-AI Experts Try (and Fail) to Design LLM Prompts\n\n```bibtex\n@inproceedings{zamfirescu-pereira2023johnny,\n author = {Zamfirescu-Pereira, J.D. and Wong, Richmond Y. and Hartmann, Bjoern and Yang, Qian},\n title = {Why Johnny Can’t Prompt: How Non-AI Experts Try (and Fail) to Design LLM Prompts},\n year = {2023},\n isbn = {9781450394215},\n publisher = {Association for Computing Machinery},\n address = {New York, NY, USA},\n url = {https://doi.org/10.1145/3544548.3581388},\n doi = {10.1145/3544548.3581388},\n abstract = {Pre-trained large language models (“LLMs”) like GPT-3 can engage in fluent, multi-turn instruction-taking out-of-the-box, making them attractive materials for designing natural language interactions. Using natural language to steer LLM outputs (“prompting”) has emerged as an important design technique potentially accessible to non-AI-experts. Crafting effective prompts can be challenging, however, and prompt-based interactions are brittle. Here, we explore whether non-AI-experts can successfully engage in “end-user prompt engineering” using a design probe—a prototype LLM-based chatbot design tool supporting development and systematic evaluation of prompting strategies. Ultimately, our probe participants explored prompt designs opportunistically, not systematically, and struggled in ways echoing end-user programming systems and interactive machine learning systems. Expectations stemming from human-to-human instructional experiences, and a tendency to overgeneralize, were barriers to effective prompt design. These findings have implications for non-AI-expert-facing LLM-based tool design and for improving LLM-and-prompt literacy among programmers and the public, and present opportunities for further research.},\n booktitle = {Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems},\n articleno = {437},\n numpages = {21},\n keywords = {end-users, design tools, language models},\n location = {Hamburg, Germany},\n series = {CHI '23}\n}\n```\nbibtext from [doi](https://doi.org/10.1145/3544548.3581388)>\n\n\n\n", "snippet": "\n", "url": "/papers/zamfirescu-pereira2023johnny/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "weblinks-2023-06-29-very-few-worthwhile-tasks", "type": "posts", "title": "very few worthwhile tasks?", "author": "Daniel Griffin", "date": "2023-06-29 16:05:12 -0700", "category": "", "tags": "[decontextualized, queries-and-prompts, extending searching]", "content": "\n\nFollow-up: [very few 2-3 sentence descriptions connect (weblog)](/2023/06/30/very-few-2-3-sentence-descriptions.html).\n\n\n\n\n\nWhat is a \"worthwhile task\"?\n\n[highlighting added]\n\n\n\\@benedictevans\nThe more I look at chatGPT, the more I think that the fact NLP didn’t work very well until recently blinded us to the fact that very few worthwhile tasks can be described in 2-3 sentences typed in or spoken in one go. It's the same class of error as pen computing.On Twitter Jun 29, 2023\n\n\nWhere to start? I think this tweet sort of treats sentences/information **and** \"tasks\" as overly atomic, decontextualized (and perhaps relies too heavily on \"in one go\").\n\n\nMy [dissertation](/diss) is about how data engineers heavily (and effectively?) rely on general-purpose search engines to do worthwhile tasks for their jobs. For decades they—and many other sorts of professionals—have navigated their work and the web through incantations much shorter than 2-3 sentences:\n\n> > [Probably 90% of my job is Googling things](/diss/introduction.html)\n\nThose practices were not handed to them, but developed over time and are woven through their tools, organizational processes, and discourse:\n\n> [the occupational, professional, and technical components supply a significant amount of context, or structure, as scaffolding for query selection and search evaluation.](/diss/extending_searching.html#discussion-missing-search-knowledge)\"\n\n\n\nThis tweet seems to position people as previously (effectively) believing something about language and tasks that is akin to superficial pronouncements/readings of \"_just_ google it\". With some reflection we recognize that the 'just' is very context/audience/subject-dependent, indexical, and that communication requires real work[^1]. (Perhaps it is like telling someone embarking on a rigorous trail ultramarathon] to just put one foot in front of another...)\n\nAnd it also reminds me of \"google knows everything until you have an assignment 😂\" — general-purpose web search has worked very well for tasks scaffolded within our environment and lives, but when we are thrust into something new new, there may be more work to do (jarring as that can be).\n\n\nOr maybe I take issue with \"can be described\"? Is that what a search query or prompt is? A description?\n\n\n\n\n[^1]: @reddy1979conduit:\n\n > Human communication will almost always go astray unless real energy is expended.", "snippet": "\n", "url": "/weblinks/2023/06/29/very-few-worthwhile-tasks/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "weblinks-2023-06-29-all-you-need-is-cody", "type": "posts", "title": "all you need is Sourcegraph's Cody?", "author": "Daniel Griffin", "date": "2023-06-29 16:05:12 -0700", "category": "", "tags": "[CGT, Sourcegraph]", "content": "\n\nDownloaded.\n\n> You’re all set\n> \n> Once embeddings are finished being generated, you can specify Cody’s context and start asking questions in the Cody Chat.\n\nCurrent status: \"Generating repositories embeddings\"\n\n\\@steve_yegge\n[https://about.sourcegraph.com/blog/all-you-need-is-cody](https://about.sourcegraph.com/blog/all-you-need-is-cody)\n\nI'm excited to announce that Cody is here for everyone. Cody can explain, diagnose, and fix your code like an expert, right in your IDE. No code base is too challenging for Cody.\n\nIt's like having your own personal team of senior engineers. Try it out!Tweet Jun 28, 2023\n\n\n\n\nAdded: 2023-06-30 16:18:08\n\n\n\nCurrent status: \"Generating repositories embeddings\"\n\n\n\\@tonofcrates\nLooking forward to it! If the tool is in beta, I might consider saying that more prominently. Neither Steve's post nor the Sourcegraph website make that clear. I only just found \"Cody AI is in beta\" as a sentence in the VSCode plugin README.Tweet Jun 29, 2023\n\n", "snippet": "\n", "url": "/weblinks/2023/06/29/all-you-need-is-cody/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "weblinks-2023-06-29-prompt-engineering-evolving-and-shapeshifting", "type": "posts", "title": "definitions of prompt engineering evolving and shapeshifting", "author": "Daniel Griffin", "date": "2023-06-29 09:48:25 -0700", "category": "", "tags": "[prompt engineering]", "content": "\nthe definition(s) and use(s) of \"prompt engineering\" will continue to evolve, shapeshift, fragment and become even more _multiple_ and context-dependent. But still a useful handle?\n\n\n[highlighting added]\n\n\n\\@yoavgo\n\n\ni didnt look in details yet but this is roughly what i'd imagine a chaining tool api to look like (ahm langchain, ahm).\nits interesting how the definition of \"prompt engineering\" evolves and shapeshifts all the time.\n\n\n\n\n\\@jxnlco\nWhy prompt engineer \\@openai with strings? \nDon't even make it string, or a dag, make it a pipeline. \nSingle level of abstraction:\nTool and Prompt and Context and Technique? its the same thing, it a description of what I want.\nThe code is the prompt. None of this shit\"\\{\\}\\{\\{\\}\\} \\{\\}\\}\".format\\{\"\\{\\}\\{\\}\"\nPR in the next tweet.\n\nTweet Jun 29, 2023\n\n\nTweet Jun 29, 2023\n", "snippet": "\n", "url": "/weblinks/2023/06/29/prompt-engineering-evolving-and-shapeshifting/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-29-notes", "type": "posts", "title": "changes 2023-06-29", "author": "Daniel Griffin", "date": "2023-06-29 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Increased the padding for the top container divs to improve the mobile experience.\n- Learned how to implement Boostrap tooltips.\n - Removed the text from search-bar-links (now only showing the Bootstrap SVG icons, w/ tooltips): \n - Converted the text from query labels (i.e. , , ) in search suggestions to Bootstrap SVG icons\n- Converted the hand-curated autocomplete search suggestions on the landing page to be static on initial page load.\n- Converted the display of search suggestions to be a list of Bootstrap.css cards.\n - In the process I broke the hover and keyboard interaction with the suggestions.\n- Wrote a userscript for Tampermonkey to extract a json from a tweet and compile into a Bootstrap.css card per the template I'm using in [Shared weblinks](/weblinks).\n- Temporarily removed 'facets' from the search results while I iron out the functioning.", "snippet": "\n", "url": "/changes/2023/06/29/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-28-notes", "type": "posts", "title": "changes 2023-06-28", "author": "Daniel Griffin", "date": "2023-06-28 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Learned how to add a carousel lightbox modal in Bootstrap. The interplay with `_layouts` and `_includes` in Jekyll was a bit complicated. It appeared to not work if the modal HTML was added in the post itself, so I ended up creating a new `_includes/carousels/` and then a YAML line in the post `carousel: true` and then some liquid in the `post.html` to match the post.id to a carousel HTML if `page.carousel` was `true`. In the end, the carousel and the images on the post were made from a template with input data processed by a new little Python script: `screens_to_cards.py`. (I initially tried using [Lightbox for Bootstrap 5](https://trvswgnr.github.io/bs5-lightbox/) but couldn't control the display and interactions adequately.) See finished carousel in: [\\[I want to buy a new SUV which brand is best?\\]](/2023/06/28/i-want-to-buy-a-new-suv-which-brand-is-best.html).\n- Renamed Sitemap to [Browse](/browse)\n- Some light Lighthouse auditing led to some significant refactoring:\n - converted Font Awesome icons to Bootstrap SVG \"icons\"\n - made `search-bar-links` always visible\n - removed hero elements from landing page\n - removed landing page delay on autocomplete\n - deferred some scripts\n - compression with `jekyll-gzip`", "snippet": "\n", "url": "/changes/2023/06/28/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-06-28-i-want-to-buy-a-new-suv-which-brand-is-best", "type": "posts", "title": "[I want to buy a new SUV which brand is best?]", "author": "Daniel Griffin", "date": "2023-06-28 00:00:00 -0700", "category": "", "tags": "[comparing-results, evaluating-results-meta]", "content": "\n\nThis is a follow-up to [Perplexity, Ads, and SUVs (weblink)](/weblinks/2023/06/27/perplexity-ads-and-sUVs.html). The screenshots below are made with GoFullPage (which seems to be struggling with the ChatGPT page).\n\n\n\nHere are the initial/top results from various generative search tools for the query: [\nI want to buy a new SUV which brand is best?\n]\n\n\nReminders: \nIt is very difficult to compare SERPs outside of contexts-of-use. \nWe cannot pretend that one-SERP-fits-all. \nIt is difficult to compare initial responses in a query that is inclined towards reformulation and interaction (i.e. sometimes the initial limitations of results are more problematic than others—like:[\nHad a seizure Now what?\n] as compared to the initial steps of a more methodical and less time-sensitive search like the topic of this post).\n\nAccuracy across all claims may not be the key concern in this particular query type (as compared to 'reading ease' (word choice?) or 'quality of advice'[^advice], but on the topic of accuracy, do please recall @lurie2021searching_facctrec discussing how \"some inaccurate results likely trigger further information seeking rather than belief in an inaccurate answer\" (because they \"clearly signal a failed search or an ambiguous answer\") and \"inaccuracy\" cannot be equated with \"likely to mislead\".\n\n\n- @grimmelmann2014speech\n\n\n\n[^advice]: For more on advice and search, see @grimmelmann2014speech [p. 950]:\n\n > [A good search engine advises its users, helping them to become active listeners, and enabling them to act autonomously.](/excerpts/2023/07/31/a-good-search-engine.html)\n\n\n\n\n\nBard\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 10:11:44 \n\n\n\n\n\n\n\nChatGPT.GPT-4\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 10:14:11 \n\n\n\n\n\n\n\nGoogle.SGE\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 10:14:58 \n\n\n\n\n\n\n\nAndi\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 10:15:17 \n\n\n\n\n\n\n\nBing\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 10:15:31 \n\n\n\n\n\n\n\nYou.com\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 10:12:38 \n\n\n\n\n\n\n\nYou.com.GPT-4\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 10:17:38 \n\n\n\n\n\n\n\n\nI skipped the interactive flow in Perplexity AI's Copilot, which may have changed the results.\n\n\n\n\n\nPerplexity AI.Copilot\n[\nI want to buy a new SUV which brand is best?\n]\n\n\n\n\nScreenshot taken at: 2023-06-28 14:53:18 \n\n", "snippet": "\n", "url": "/2023/06/28/i-want-to-buy-a-new-suv-which-brand-is-best/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "weblinks-2023-06-27-imagining-opengoogle", "type": "posts", "title": "imagining OpenGoogle?", "author": "Daniel Griffin", "date": "2023-06-27 02:27:51 -0700", "category": "", "tags": "[speculative-design]", "content": "\n\n\\@generativist via Twitter on Jun 26, 2023 \n \n \n\ni imagine there’s no alpha left in adding the word “open” to various names anymore, right?\n\nMy first thought in response to this was that someone should write a speculative_design on a transformation of old Google to \"OpenGoogle\".\n\n\n", "snippet": "\n", "url": "/weblinks/2023/06/27/imagining-opengoogle/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "weblinks-2023-06-27-perplexity-ads-and-suvs", "type": "posts", "title": "Perplexity, Ads, and SUVs", "author": "Daniel Griffin", "date": "2023-06-27 00:00:00 -0700", "category": "", "tags": "[ads, Perplexity-AI]", "content": "\n\nFollow-up: [\\[I want to buy a new SUV which brand is best?\\]](/2023/06/28/i-want-to-buy-a-new-suv-which-brand-is-best.html).\n\n\n\n\n\nI don't think ads[1] are necessarily wrong to have in search results (despite the misgivings in @brin1998anatomy), but people are _definitely_ not happy with how the dominant search engine has done ads.\n\n___\n\n1. relevant, clearly labelled, and fair (as in not unfair in the FTC sense)\n\n\n\n\nIt is pretty striking to me how text-heavy Perplexity AI's SERP is for this query: \"highly-rated\" x10?\n\nMy experience has generally been much better, but I'm not normally doing queries like this.\n\n\nHere's a link to the same query as that in the screenshot below (which, is likely not using their Copilot):\n\nPerplexity AI\n[\n I want to buy a new SUV which brand is best?\n\n]\n\n- note also the generated follow-on prompts under Related\n\n\n\n\n\\@jowyang\nSeven reasons why perplexity.ai is better than Google search:\n\nNo ads.\nAll the content in one place.\nNo ads.\nYou can chat with it and get additional details.\nNo ads.\nSources are provided with URLs.\nNo ads.\n\nHere's a screenshot of car reviews, as just one of infinite examples. Perplexity is focused on being the search tool in the age of AI.\nI saw a demo from \\@AravSrinivas at the Synthedia conference hosted by \\@bretkinsella. I'll have closing remarks.\n\nOn Twitter Jun 27, 2023\n\n", "snippet": "\n", "url": "/weblinks/2023/06/27/perplexity-ads-and-sUVs/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-27-notes", "type": "posts", "title": "changes 2023-06-27", "author": "Daniel Griffin", "date": "2023-06-27 00:00:00 -0700", "category": "", "tags": "[]", "content": "- removed authorship and location data from page_header\n- added [Shared weblinks](/weblinks) category page, template, and utility script.\n- converted change notes from a single file to post-style updates, compiled in [Change notes](/changes)", "snippet": "\n", "url": "/changes/2023/06/27/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-26-notes", "type": "posts", "title": "changes 2023-06-26", "author": "Daniel Griffin", "date": "2023-06-26 00:00:00 -0700", "category": "", "tags": "[Perplexity-AI]", "content": "In order to explore search interfaces and generative search experiences (by playing with the underlying technologies and interactions), I developed a new 'search-centric' format and functionality for my website.\n\nThis is actively being developed. Neither a designer nor developer, I am not presenting these search experiences as 'the answer', but using them to think & write with.\n\n- Made the search bar the main focus on the landing page and in a revised header.s\n - Removed nav-bar and left-sidebar.\n- Added search functionality built around Lunr.js.\n - Added search-links across the top of the search-bar\n - Added search/about page to discuss how the search tool is made.\n - Added search/guide page.\n - Added sitemap page.\n - Added feedback page.\n - atop search results:\n - Added simplistic facet counts & links to reformulation\n - Added count of search results (with link to comment re \"Exactly [#] results in search/about that is critical of Google's deception/misinformation re the same).\n - in search results:\n - Added tags.\n - Added both hand-curated and generated snippets (currently w/ ), and snippet labels (with contextual link to explanation)\n - Added search-suggestions.\n - including both hand-curated and dynamic suggestions (with labels).\n - Added \"!bangs\" (functioning also akin to go/links).\n - Added exact phrase matching (not supported by base Lunr).\n- Added special tagged posts: changes, updates, tweets. These posts do not appear in the posts list, but in corresponding pages.\n - Slowly converting annotated tweets to posts (backdated to the date of the tweet(s), annotations will be identified by date).\n- Added tag pages (and simplified presentation of tag links atop pages and at bottom of search results)\n- Added pposts page (listing \"possible posts, potential posts, plausible posts, planned posts, partial posts, or perfect posts?\" via a Jekyll collection)\n - key initial planned posts: a series on generative search.\n- Added background image to all pages (w/ alt and caption).\n- A note on a citation technique: To include a pandoc citation in a page's bibliography without in-text citation with `jekyll-pandoc` (the standard `nocite` in the YAML appears not to work) you can just add the citations to a div and add a `style=\"display: none;\"`. Example in the [postcolonial localization in search](/2019/08/25/postcolonial-localization-in-search.html) post.\n- Added website header to the diss pages for consistency.\n- Added title and subtitle to landing page.\n- Added [hire-me] page (includes link to a recent LinkedIn post describing some of what I'm looking for, resume, and CV).\n- Added differentiation in about pages: about (about me), site, and search/about. In the latter two, in addition to text description, I also link to both pre-processing and online scripts in /scripts and /js. site now includes [a tool heading](/site/#tools) that discusses the tools I'm using: For this last round of changes I've explored several tools, including OpenAI's ChatGPT and APIs, Google's Bard, SGE, and Code Tips, Perplexity AI, You.com's YouChat, Phind, GitHub Copilot in VS Code, and Tabnine in Sublime Text. I also explored using search on TikTok to quickly refresh my understanding of options with CSS.\n- Heavily refactored with Bootstrap.\n- 2023-06-26 16:51:29 Removed the background image due to difficulties making it responsive.", "snippet": "\n", "url": "/changes/2023/06/26/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-06-05-the-end-of-computer-programming-as-we-know-it-again", "type": "posts", "title": "The End of Computer Programming as We Know It - Again", "author": "Daniel Griffin", "date": "2023-06-05 00:00:00 -0700", "category": "", "tags": "[CGT, diss]", "content": "One thought re @manjoo2023end—[It’s the End of Computer Programming as We Know It. (And I Feel Fine.)](https://www.nytimes.com/2023/06/02/opinion/ai-coding.html):\n\nI cite to @ensmenger2010computer's history of computing and technical expertise in my [Appendix III. Code Generation Tools and Search](../diss/appendix_cgt_and_search) musings on the potential impact of these new technologies, and then write (p. 133):\n\n> The programming languages used by my research participants are far simpler to use and understand than even the “automatic programming” languages of the past, like FORTRAN and COBOL. The hard problems remain, how to use a tool to do something you or someone else wants.\n\n\nRelatedly: @arawjo2023history_twitter, [on Twitter](https://twitter.com/ianarawjo/status/1665515419895988226): \n\n> The history of programming is the history of reducing the effort required to communicate a design to a machine.\n\n", "snippet": "\n", "url": "/2023/06/05/the-end-of-computer-programming-as-we-know-it-again/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-05-notes", "type": "posts", "title": "changes 2023-06-05", "author": "Daniel Griffin", "date": "2023-06-05 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added a [search/transparency](search/transparency) page to share briefly re 'How does search work on this website?'\n - Rearranged some files to make [scripts](/scripts) more accessible.\n - Added: `timestamp_of_lunr_index`\n - Added: `list_of_lunr_noindex`\n- Added a summary to my [diss/](/diss/) page.\n- Added two posts:\n - [activities in dialogue and success in software development](/2023/06/05/activities-in-dialogue-and-success-in-software-development.html)\n - [The End of Computer Programming as We Know It - Again](/2023/06/05/the-end-of-computer-programming-as-we-know-it-again.html)\n- Added a script: `newpost.py`", "snippet": "\n", "url": "/changes/2023/06/05/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-06-05-activities-in-dialogue-and-success-in-software-development", "type": "posts", "title": "activities in dialogue and success in software development", "author": "Daniel Griffin", "date": "2023-06-05 00:00:00 -0700", "category": "", "tags": "[CGT, diss]", "content": "I'm flagging two excerpts from a recent Google Research blogpost [@maniatis2023large]: [Large sequence models for software development activities](https://ai.googleblog.com/2023/05/large-sequence-models-for-software.html) \n\n## Software engineering isn’t an isolated process\n\nThey rightfully note some of the sociotechnical interactions already taking place in engineering work:\n\n> Software isn’t created in one dramatic step. It improves bit by bit, one little step at a time — editing, running unit tests, fixing build errors, addressing code reviews, editing some more, appeasing linters, and fixing more errors — until finally it becomes good enough to merge into a code repository. Software engineering isn’t an isolated process, but a dialogue among human developers, code reviewers, bug reporters, software architects and tools, such as compilers, unit tests, linters and static analyzers.\n\n## the ultimate test of usefulness\n\nI struggled some with defining success—of web searching—in my dissertation, this seems close to what I went with[^1]:\n\n> We see this as the ultimate test of usefulness: do professional developers, who are often experts on the code base and who have carefully honed workflows, leverage the tools to improve their productivity?\n\n\n[^1]: @griffin2022situating [p. 1]:\n\n > I seek to learn from successful searchers how they make search work. So, I look to data engineers. I closely examine the use of web search in the work practices of data engineering, a highly technical, competitive, and fast changing area. Data engineers are heavily reliant on general-purpose web search. They use it all the time and it seems to work for them. The practical success I report is not determined by some solid ‘gold standard’ metrics or objective standpoint, but by how they have embraced web search and present it as useful and more importantly essential to their work. It is success for their purposes: in gradations, located in practice, and relative to alternatives.\n\n\nHT: @khlaaf2023lot, [on Twitter](https://twitter.com/HeidyKhlaaf/status/1665675004686524417)): \n\n> A lot of ML-based code synthesis products fail to understand complexities of SW development pipeline, but I really enjoyed reading this well-informed post on integrating ML into it. Not surprised to find many have a code analysis and repair background!\n", "snippet": "\n", "url": "/2023/06/05/activities-in-dialogue-and-success-in-software-development/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-03-notes", "type": "posts", "title": "changes 2023-06-03", "author": "Daniel Griffin", "date": "2023-06-03 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Various formatting repairs for the HTML rendering of chapters in [/diss](/diss).\n- Removed malfunctioning JavaScript to just use an `#end` anchor in the footer to repair the `scroll-to-bottom` arrow in the `nav-bar`.\n- Introduced a search feature, with Lunr.js, initially building off CloudCannon's [tutorial](https://learn.cloudcannon.com/jekyll/jekyll-search-using-lunr-js/) and old git [commit](https://github.com/CloudCannon/bakery-store-jekyll-template/commit/71614d58907e17df0241944297207ad24391be20). I [updated the code for the new version of Lunr.js](https://lunrjs.com/guides/upgrading.html) and [setup a pre-built index](https://lunrjs.com/guides/index_prebuilding.html) because the client side performance significantly deteriorated once I added my diss chapters.", "snippet": "\n", "url": "/changes/2023/06/03/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-06-02-notes", "type": "posts", "title": "changes 2023-06-02", "author": "Daniel Griffin", "date": "2023-06-02 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Adapted my dissertation to HTML, splitting into chapters, and loaded to [/diss](/diss)\n - Added text noting availability of my dissertation in HTML on [/index](/index).\n - Various styling changes to support the above.", "snippet": "\n", "url": "/changes/2023/06/02/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-05-31-notes", "type": "posts", "title": "changes 2023-05-31", "author": "Daniel Griffin", "date": "2023-05-31 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Fixed a bug in the `circleborder` link in `left-sidebar` that created a phantom rectangle.\n- Removed some solid background colors to move towards a more line-based design.\n- Removed the `tagline` for now to avoid empty language.\n- Adjusted the language in the `special-box note` re looking for work and the main text in [index](/) to improve clarity.\n- Changed the background color of `tags` from `#f47174` to `#ffead5` for improved readability, added `white-space:nowrap;` to keep the tags from being split by newlines.\n- Added a `paper-image` of griffin2022search_accepted in [Updates!](/index.html#updates).", "snippet": "\n", "url": "/changes/2023/05/31/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-05-26-notes", "type": "posts", "title": "changes 2023-05-26", "author": "Daniel Griffin", "date": "2023-05-26 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Fixed a bug in [understanding change in web search](/courses/s2023-LB322B) that caused some of the text to overflow the page: an extra ``.", "snippet": "\n", "url": "/changes/2023/05/26/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-05-25-notes", "type": "posts", "title": "changes 2023-05-25", "author": "Daniel Griffin", "date": "2023-05-25 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added a page on [Courses](/courses)\n - Added a page on my recent course at Michigan State University: [understanding change in web search](/courses/s2023-LB322B) course (and a page on [the course readings](/courses/s2023-LB322B.readings)).\n - Added to [Updates!](/index.html#updates)\n- Uploaded my latest [CV](/cv).\n- Added `special-box back-to` to pages under courses, publications, and posts.\n- Added `special-box update` styling to updates in [Updates!](/index.html#updates)\n- Added `paper_image`s to [Updates!](/index.html#updates)", "snippet": "\n", "url": "/changes/2023/05/25/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-05-24-still-searching-for-gorillas", "type": "posts", "title": "still searching for gorillas", "author": "Daniel Griffin", "date": "2023-05-24 00:00:00 -0700", "category": "", "tags": "[repairing-searching]", "content": "An article yesterday in the New York Times, from Nico Grant and Kashmir Hill, following up on the racist image labeling in Google's Photos app from 2015 (mentioned in class): [Google’s Photo App Still Can’t Find Gorillas. And Neither Can Apple’s.](https://www.nytimes.com/2023/05/22/technology/ai-photo-labels-google-apple.html) [-@grant2023google]\n\n**Original case:** Jacky Alciné's tweet complaints about Google Photos labeling photos of him and his friend as containing 'gorillas' (original tweets have since been deleted; but widely reported, of public interest, and available on Archive.org). Google's response was to disallow such labeling/searching in the tool.\n\nThe article recounts an evaluation of Google Photos, Apple Photos, photo search in Microsoft OneDrive, and Amazon Photos for searches for [gorillas], and other primates ([baboons], [chimpanzees], [orangutans], [monkeys], [lemurs]) and other animals more broadly, inc. [cats] and [kangaroos]).[^singular] The key claim is that while Google and Apple tools work well for many animals, they do not return any images for primates (except for lemurs). (This is distinct also from the performance on, say, Google Images, for similar searches.)\n\n[^singular]: N.b. They do not indicate whether they also searched the singular form(s). This is probably not of importance, but something I always like to note.\n\n\n**(1)** \n\n> Consumers may not need to frequently perform such a search\n\n- Questions:\n - Why limit the concern to \"consumers\"[^consumers]? Students? Researchers?[^speciality_tools]\n - \"may not\"? How might we learn this?\n - Why limit the concern to \"need\"?\n\n[^speciality_tools]: Perhaps there are specialty tools available to conservationists and others?\n\n**(2)** Grant & Hill appear to have interviewed Alciné (\"dismayed to learn that Google has still not fully solved the problem and said society puts too much trust in technology\"). Did they also reach out to Yonatan Zunger (now no longer at Google), given his—widely reported—prominent role in the initial response from Google?\n\n[^consumers]: This reminds me of the language of ['consumer search'](/2023/05/23/consumer-search.html) that Neeva used when reporting their recent pivot.\n\n**(3)** Grant & Hill quote a Google spokesperson by name and other company responses. Consider the _function_ of those comments, recalling perhaps the discussion of the Google Search Liaison in @griffin2022search.\n\n**(4)** Why did Google fail earlier?\n\n> In the gorilla incident, two former Google employees who worked on this technology said **the problem** was that the company had not put enough photos of Black people in the image collection that it used to train its A.I. system. [emphasis added]\n\n- Compare that to the analysis from @noble2018algorithms (of different but related search failures) of poor *engineering* training and racist exclusion.\n\n**(5)** \n\n> The Fix?\n> \n> While Google worked behind the scenes to improve the technology, it never allowed users to judge those efforts.\n\n- Another interesting (and somewhat vague) line, highlighting for me the missing discussion of whether aiming for inclusion (here or in general) might 'improve' the technology.\n\n\n\n\n**(6)** \n\n> the poisoned needle in a haystack\n\n- Note how this language (quoted from M. Mitchell) may function rhetorically quite similarly to \"data void\" or \"evil unicorn\", though situated differently here.\n\n### See also\n\n#### Further discussion of the case\n\n- @seaver2018should\n- @shen2021everyday\n\n#### Related\n\n- @noble2018algorithms [p. 82][^mislabel]: \"What we know about Google’s responses to racial stereotyping in its products is that it typically denies responsibility or intent to harm, but then it is able to “tweak” or “fix” these aberrations or “glitches” in its systems.\"\n- @sundin2021relevance [p. 4]: \"Throughout the years, Google has had to deal with various instances in which its search results were criticized for advancing racist, sexist, anti-Semitic, or otherwise offensive values. The impression is that Google employs a haphazard whack-a-mole approach. It only reacts in response to media reports and only if these are publicized widely enough to constitute a problem for their brand. The specific issue is addressed—but only after a delay where the problem is explained away and blamed on users.\" [internal endnote omitted]\n- @raji2022fallacy\n\n\n#### Earlier reporting\n\n- @machkovech2015google\n- @simonite2018gorillas (cited to w/in, re Google Lens[^glens] also failing in such searches)\n\n[^glens]: Related post: [more than a party trick?](/2023/05/24/more-than-a-party-trick.html)\n\n#### Comments elsewhere\n\n- On Twitter:\n - [Nico Grant](https://twitter.com/nicoagrant/status/1660695821539594240) (author): \"raises broader questions about the underlying AI, computer vision, which has permeated throughout our world\"\n - [Kashmir Hill](https://twitter.com/kashhill/status/1660611707771781120) (author): \"raises questions about other unfixed, or unfixable, flaws lurking in services that rely on AI\"\n - [J. Khadijah Abdurahman](https://twitter.com/UpFromTheCracks/status/1661053012792557576): \"google search and the apps reliant on its api, collective inability to remedy the *canonical* example of digital information science ecosystems being structured by antiblackness, except via a manual override indicates there’s larger socio-technical issue at play\"\n - [M. Mitchell](https://twitter.com/mmitchell_ai/status/1660726109582020609): \"I was a 'proponent' of removing the 'gorilla' label for photo tagging.\"\n\n[^mislabel]: Noble includes a screenshot from Alciné's tweet (p. 7), but incorrectly identifies it as a Google Images search result. The larger analysis from Noble is very applicable to this situation.)", "snippet": "\n", "url": "/2023/05/24/still-searching-for-gorillas/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-05-24-notes", "type": "posts", "title": "changes 2023-05-24", "author": "Daniel Griffin", "date": "2023-05-24 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added top-level link in left-sidebar to \"[Repairing Searching](/rs)\", to follow a tag for posts related to the class I taught last semester.\n- Added three posts:\n - [still searching for gorillas (or not?)](/2023/05/24/still-searching-for-gorillas.html)\n - [What does 'consumer search' mean?](/2023/05/24/consumer-search.html)\n - [more than a party trick?](/2023/05/24/more-than-a-party-trick.html)\n- Added tags for posts, so far only: repairing-searching.\n- Modified `tagline`, from \"I work to defamiliarize and reimagine web search.\" to \"I work to defamiliarize and reimagine search engines and practices towards [repairing searching](/rs).\"\n- Modified the `meta` spans at the top of posts to draw from YAML headmatter, added author, tags, and switched to ordinalized date.\n - Updated posts YAML for this.\n- Added uses of `special-box note` to \"Posts\", \"Publications\", and \"Repairing Searching\"\n- Added link-citations, clunkily, with an `add_link-citations.py` script (I couldn't get the Pandoc `link-citations` functionality working with [jekyll-pandoc](https://rubygems.org/gems/jekyll-pandoc/versions/2.0.1))\n- Updated [my funding disclosure](/disclosures) re my last semester of graduate school.\n- Added `screenshot` and `search-query` formatting.\n- Changed the case of \"understanding change in web search\" to title case: \"[Understanding Change in Web Search](/courses/s2023-LB322B)\"", "snippet": "\n", "url": "/changes/2023/05/24/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-05-24-more-than-a-party-trick", "type": "posts", "title": "more than a party trick?", "author": "Daniel Griffin", "date": "2023-05-24 00:00:00 -0700", "category": "", "tags": "[]", "content": "## \"My favorite party trick?\"\n\n[A tweet yesterday from Prabhakar Raghavan](https://twitter.com/WittedNote/status/1661074512472047616), [\"a Senior Vice President at Google\"](https://research.google/people/PrabhakarRaghavan/):\n\n> My favorite party trick? Showing someone Lens who has never used it before. It usually goes like… 👀🔍🤯🤩😍 Lens is so helpful that people now use it for 12B visual searches a month — a 4x increase in just 2 years\n\n- How do we know that it is \"so helpful\"?\n - Do the metrics suggest that?\n- What would \"so helpful\" mean?\n- What constitutes a search?\n - Does this include \"reformulated searches\"—alternate angles? better focus? a live camera scanning across a piece of printed text?\n- How should we contextualize 12 billion searches a month?\n\nLily Ray, [\"a prominent SEO (search engine optimization) professional\"](https://lilyray.nyc/professional-seo-services/), comments on a surprise that hints at the tool—as situated—not being as helpful as it could be?:\n\n> Surprised more people don’t search with Lens yet but I think most people still don’t know how/where to access it. Especially iPhone users\n\nRay has tweeted something like this before, [here in December](https://twitter.com/lilyraynyc/status/1602746672366243840)[^be_the_biggest_transformation]:\n\n> I strongly believe Google Lens will be the biggest transformation we see in how people use search in the next 2-3 years. \n> \n> That is, assuming Google figures out how to get the rest of the non-nerd world to know it exists 😅\n\n\nTo the recent comment from Ray, the Google Search Liaison (GSL; for an analysis of the function of this role, see @griffin2022search) engaged, [in reply](https://twitter.com/searchliaison/status/1661113494060539921)[^pertinent] and [in quote-tweet, here](https://twitter.com/searchliaison/status/1661106259179741199): \n\n> How have you used Lens to find something visually?\n\nReplies suggested:\n\n- translation\n- identifying clothing in public\n- identifying birds, plants, bugs\n- learn about a panting\n\n\n[^pertinent]: Pertinent to Ray's comments, the link shared by the GSL—[lens.google.com](https://lens.google/)—appears to add friction by encouraging mobile app downloads and does not give direct access to the browser-based interface\n\n If you scroll down you will see small text on the lower left: \"\\*Lens is available in Google Images\".\n\n \n Image 1. Screenshot from the Google Lens page. In small font below a depiction of an image search on a laptop: '*Lens is available in Google Images'\n \n \n\n Lens is available through the browser via [images.google.com](https://images.google.com/) (clicking the camera icon will present an interface for inputting an image to \"Search any image with Google Lens\"). See also [Google Search Help > Search with an image on Google](https://support.google.com/websearch/answer/1325808).\n\n\n## More than a party trick\n\nI have shared about Google Lens as a sort of party trick, but the greatest benefit for me has been how its unclear potential is a great opportunity to then raise questions about what other modalities or purposes of searching we might develop (with of course, risks and benefits to consider).\n\nHere, from a footnote in my dissertation [@griffin2022situating]:\n\n> While search engines are designed around digitized text, there are other modalities available for search, all materially bound. Voice-based search transformed audio into text. Some people may recognize digital images as search seeds, with reverse image search. Some search engines and other search tools also support searching from a photograph. There is also some support for searching with music or even humming. @chen2022bmsi demonstrate search queries from electroencephalogram (EEG) signals. As web search expands in these directions it may be necessary pursue new approaches to showing which pictures, sounds, smells, or thoughts might effectively link questions and answers.\n\n[^be_the_biggest_transformation]: While search generation has been the excitement of late, I don't think it unreasonable to imagine that searching from images may have a significant transformative effect in the coming years. You can find additional tweets from Ray via Twitter[from:lilyraynyc (\"google lens\" OR multisearch)] _(N.b. Twitter search functionality increasingly demands the user to manually click or press enter after following search links.)_\n\n\n\n\nRelated post: [still searching for gorillas](/2023/05/24/still-searching-for-gorillas.html)\n\nSearches:\n\n- Wikipedia[\"Google Lens\"]\n- Reddit[\"Google Lens\"]\n- Twitter[\"Google Lens\"]\n- SemanticScholar[\"Google Lens\"]\n\n\nCompare and contrast with:\n\n- [iNaturalist](https://www.inaturalist.org/)\n- [Reddit's r/whatisthisthing](https://www.reddit.com/r/whatisthisthing/), etc.\n- reverse image search\n- [Wikipdia: Jelly (app)](https://en.wikipedia.org/wiki/Jelly_(app))\n- [Google Images: About this image](https://blog.google/products/search/about-this-image-google-search/); cc: [Mike Caulfield](https://twitter.com/holden/status/1656515306448388100)\n", "snippet": "\n", "url": "/2023/05/24/more-than-a-party-trick/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-05-24-consumer-search", "type": "posts", "title": "consumer search?", "author": "Daniel Griffin", "date": "2023-05-24 00:00:00 -0700", "category": "", "tags": "[repairing-searching]", "content": "Neeva announced last weekend that it is pivoting away from \"consumer search\".\n\nNeeva, [on Twitter](https://twitter.com/Neeva/status/1659973937982496770):\n\n> While **consumer** search is ending, the search and LLM journey continues in the enterprise space.\n\nSridhar Ramaswamy (co-founder), [on Twitter](https://twitter.com/RamaswmySridhar/status/1659980249734713344):\n\n> We are going to be shutting down the **consumer** product and focusing on enterprise use cases of LLMs and search.\n\nSridhar Ramaswamy & Vivek Raghunathan (co-founders), [on Neeva's Blog](https://neeva.com/blog/may-announcement):\n\n> ... there is no longer a path towards creating a sustainable business in **consumer** search. As a result, over the next few weeks, we will be shutting down neeva.com and our **consumer** search product, and shifting to a new area of focus.\n\nIn an early response I wrote, [on Twitter](https://twitter.com/danielsgriffin/status/1660074619985100800):\n\n> “Consumer search” is an interesting framing. I often used the phrase “general-purpose web search”. Enterprise search is often framed as *intranet* search (and distinct from site search or enterprise-serving web search, right?). Might they continue to crawl widely?\n\n\nHave they long used this phrase? It is so much more consumption-oriented than their branding. Perhaps they are positioning this in comparison to \"enterprise search\", but the naming still strikes me. It is often unmarked, just \"search\" or \"search engine\", though sometimes \"web\" or \"internet\" is pre-pended. There are other names:\n\n- *commercial*:\n - commercial search engines [@brin1998anatomy]\n - commercial search / non-commercial [@noble2018algorithms]\n- *Search engines like Google* [@diaz2008through]\n- *Internet*/*Web* [@vancouvering2008history]\n- TK", "snippet": "\n", "url": "/2023/05/24/consumer-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-05-22-notes", "type": "posts", "title": "changes 2023-05-22", "author": "Daniel Griffin", "date": "2023-05-22 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Formatting updates to improve performance on mobile (largely shifting some widths to using [Em/em](https://en.wikipedia.org/wiki/Em_(typography)) and adding dynamic changes with `@media screen and (min-width: 500px)` in the CSS). Also learned how to 'Toggle device toolbar' in Chrome DevTools.\n- Added [a `update_changes_link.py` script](https://gist.github.com/danielsgriffin/af815a03a4d1acdf3788d2d78de06558) to automatically updated the changes link in my footer.", "snippet": "\n", "url": "/changes/2023/05/22/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2023-05-19-notes", "type": "posts", "title": "changes 2023-05-19", "author": "Daniel Griffin", "date": "2023-05-19 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Updated my `special-box note` (at the top of my homepage) about actively seeking research opportunities in both industry and academia.\n- Various formatting updates (distributed links from `footer` to `left-sidebar` and [a `contact-me` section](about#contact-me) in [About](/about/); developed `right-sidebar` with floating header links (w/ [jekyll-toc](https://github.com/allejo/jekyll-toc)); and automatic bibliographies (w/ [jekyll-pandoc](https://rubygems.org/gems/jekyll-pandoc/versions/2.0.1) and [apa.csl](https://github.com/citation-style-language/styles/blob/master/apa.csl))).\n- Added redirect to [CV](\\cv) (w/ [jekyll-redirect-from](https://github.com/jekyll/jekyll-redirect-from))\n- Added [my commencement speech](https://medium.com/berkeleyischool/graduate-speaker-likens-ph-d-to-a-trail-ultramarathon-691ac42472a4) to [Updates!](/index.html#updates)\n- Added a post: [conventional search engines are limited to retrieving pre-existing webpages?](2023/05/19/limited-to-retrieving-pre-existing-webpages.html)", "snippet": "\n", "url": "/changes/2023/05/19/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2023-05-19-limited-to-retrieving-pre-existing-webpages", "type": "posts", "title": "conventional search engines are limited to retrieving pre-existing webpages?", "author": "Daniel Griffin", "date": "2023-05-19 00:00:00 -0700", "category": "", "tags": "[]", "content": "\n\nThis is a short post about Liu et al.'s \"Evaluating Verifiability in Generative Search Engines\" (2023).\n https://doi.org/10.48550/arXiv.2304.09848\n [liu2023evaluating].\n\n\n\nIs it true that \"conventional search engines are limited to retrieving pre-existing webpages\"[^1]?\n\nWhile this is a minor comment in a much larger paper, we can benefit from discussing conventional search engines—these massive sociotechnical systems—as extending far beyond a single moment in time and, explicitly, as incorporating the actions of others. (This is particularly so as we describe these systems alongside appraisals of alternative approaches to web searching.) The substance of responses to information needs by conventional search engines, like Google, are constantly in flux, both internally, and in being reshaped by external participants motivated to be found (and so responding to various incentives).\n\nSaying that \"conventional search engines are limited to retrieving pre-existing webpages\" dismisses the key ways that search engines shape the existence of those web pages (and new ones) in the first place. Since Introna and Nissenbaum's early critique [-@introna2000shaping], we've seen that the various indexing and ranking choices (including moderation), page design choices, and articulations from the major search engines, along with the development of their business models, shape the searching practices of searches, the behavior of advertisers, the tactics and strategies of search engine optimizers, and the individual and market-driven choices underlying the production and availability of content and experiences on the web. Ignoring the temporal arrangements in the web search ecosystem may lead us to both (1) ignore the vast role that the dominant conventional search engine plays in the webpages that exist at any particular point in time, _the shape of the web_, and (2) develop a 'blinkered' perspective on the choices and actions of other participants ready (or not) to perform for (or against) these new approaches to search.\n\n\nThere are also direct elements provided on the search engine results pages (SERPs) that are not limited to the retrieval of \"pre-existing webpages\". Conventional search engines have long presented features on their SERPs that are extracted and aggregated from those pre-existing webpages or databases not available on the web (in the Knowledge Panels, for instance, and other \"rich features\" like image galleries). Google's \"Featured snippets\" also selectively extract from existing websites (and clearly motivated the creation of content aimed to be found as such) have themselves featured information that has been identified numerous times as being misleading.[^raji2022]\n\n[^raji2022]: See re seizures [@griffin2022search; @raji2022fallacy], re voting information [@lurie2021searching_facctrec], etc.\n\n\nGoogle has additionally, since as early as 2012[^2012], dynamically edited/generated (Google now says: \"automatically determine[d]\") both the \"Text link\" (title of a search result) and the \"snippet\" (or page summary)[^2]. This practice has not always been appreciated by the SEO community (see multiple responses from Google[^sullivan2021], leading to the feedback (on the generated titles) including comments saying in some situations it \"[seems to be misleading for the user](https://support.google.com/webmasters/thread/122879386?hl=en&msgid=125245100)\", and calling it: \n\n- \"[incorrect and misrepresenting](https://support.google.com/webmasters/thread/122879386?hl=en&msgid=122888634)\"\n- \"[entirely misleading](https://support.google.com/webmasters/thread/122879386?hl=en&msgid=123218764)\"\n- \"[very misleading](https://support.google.com/webmasters/thread/122879386?hl=en&msgid=123689358)\"\n- \"[completely wrong](https://support.google.com/webmasters/thread/122879386?hl=en&msgid=134024128)\".\n\nAs well as issuing complaints like: \"[what they are changing is information supplied by others, that represents others, that may be damaging the income of others, and/or potentially putting others at risk (regulatory requirements etc.).](https://twitter.com/darth_na/status/1431977361742913542)\"\n\nAnother feature of conventional SERPs are suggested searches, whether in the autocomplete dropdown while typing a query, in suggesting a revision for an alternate spelling, to reformulate the query to put quotation marks around a particular word, or in various elements interspersed on the search page. Google currently provides a \"People also ask\" or \"Others want to know\" section and a \"Related searches\" section.\n\nIn additional to generating rich features and the text descriptions of the web pages, conventional search engines respond to queries by providing a ranking (itself treated as information) of selected search results that shape the perceptions of the results by the different searchers and dynamically insert sponsored links (with text links and snippets and only a small text label it indicate it is paid for). All of this is generated on a SERP with particular fonts, colors, sizing, and placement. These various aspects of the SERP are together factors in whether the searchers are satisfied, left wanting, or are effectively misled.[^mislead]\n\n\n[^mislead]: A key question, though not the only one, when considering seemingly false or unfounded information on a SERP is whether it is \"likely to mislead\". Such information \"may not be misleading searchers of the results of search as some inaccurate results likely trigger further information seeking rather than belief in an inaccurate answer\" [@lurie2021searching_facctrec]. That said, time costs are still relevant.\n\n\n[^1]: @liu2023evaluating's opening line: \"Generative search engines fulfill user information needs by directly generating responses to input queries, along with in-line citations.\", footnotes to: \"In contrast, conventional search engines are limited to retrieving pre-existing webpages.\" (This is all I've read of the paper so far, beyond the abstract.)\n\n[^2]: \"[A]utomatically determine\" language is found in @google_titlelink\nand @google_snippet. \"Text link\" and \"snippet\" are preferred terms from @google_visual.\n\n[^sullivan2021]: [@sullivan2021update; @sullivan2021more]\n\n[^2012]: @far2012better: \"we have algorithms that generate alternative titles to make it easier for our users to recognize relevant pages\"", "snippet": "\n", "url": "/2023/05/19/limited-to-retrieving-pre-existing-webpages/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "updates-2023-05-15-commencement", "type": "posts", "title": "Commencement", "author": "Daniel Griffin", "date": "2023-05-15 00:00:00 -0700", "category": "", "tags": "[running]", "content": "\n \n \n \n {% assign d = page.date | date: \"%-d\" %}\n {{ page.date | date: \"%B\" }} {% case d %}{% when '1' or '21' or '31' %}{{ d }}st{% when '2' or '22' %}{{ d }}nd{% when '3' or '23' %}{{ d }}rd{% else %}{{ d }}th{% endcase %}, {{ page.date | date: \"%Y\" }}: {{ page.title }}\n \n {% assign content = page.snippet | strip %}\n {% if content != '' %}\n {{ content | markdownify }}\n {% endif %}\n \n \n \n {% if page.snippet_image_class contains 'paper_image' %}\n \n {% endif %}\n {% if page.snippet_image_class contains 'circle' %}\n \n {% endif %}\n \n \n", "snippet": "

    🎓 I was the Ph.D. speaker at the I School commencement, discussing how doing a Ph.D. is less like a marathon than a trail ultramarathon. See the text of my speech here.

    \n", "url": "/updates/2023/05/15/commencement/", "snippet_image": "commencement-speech.png", "snippet_image_alt": "Daniel Griffin speaking at I School Commencement, May 19th 2022. Photo credit: UC Berkeley School of Information", "snippet_image_class": "circle" } , { "id": "updates-2023-05-09-finished-course-at-msu", "type": "posts", "title": "Finished course at Michigan State University", "author": "Daniel Griffin", "date": "2023-05-09 00:00:00 -0700", "category": "", "tags": "[]", "content": "\n \n \n \n {% assign d = page.date | date: \"%-d\" %}\n {{ page.date | date: \"%B\" }} {% case d %}{% when '1' or '21' or '31' %}{{ d }}st{% when '2' or '22' %}{{ d }}nd{% when '3' or '23' %}{{ d }}rd{% else %}{{ d }}th{% endcase %}, {{ page.date | date: \"%Y\" }}: {{ page.title }}\n \n {% assign content = page.snippet | strip %}\n {% if content != '' %}\n {{ content | markdownify }}\n {% endif %}\n \n \n \n {% if page.snippet_image_class contains 'paper_image' %}\n \n {% endif %}\n {% if page.snippet_image_class contains 'circle' %}\n \n {% endif %}\n \n \n", "snippet": "

    I wrapped up teaching a spring course at Michigan State University that I designed: Understanding Change in Web Search. I’m sharing reflections and follow-ups through posts tagged repairing-searching.

    \n", "url": "/updates/2023/05/09/finished-course-at-msu/", "snippet_image": "msu_logo.png", "snippet_image_alt": "MSU Logo - wordmark/helmet combination stacked", "snippet_image_class": "circle" } , { "id": "changes-2023-01-06-notes", "type": "posts", "title": "changes 2023-01-06", "author": "Daniel Griffin", "date": "2023-01-06 00:00:00 -0800", "category": "", "tags": "[]", "content": "- Added publication: [griffin2022situating](/assets/griffin2022situating.pdf)\n- Added publication to [Updates!](/index.html#updates)\n- Added a shortcut page: [griffin2022search](shortcuts/griffin2022situating)\n- Added publication (dissertation) and completion of Ph.D. to: [CV](/assets/Daniel_Griffin_CV_2023-01-05.pdf)\n- Updated [About](/about/) page re completion of Ph.D.", "snippet": "\n", "url": "/changes/2023/01/06/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "updates-2022-12-16-filled-my-dissertation", "type": "posts", "title": "Filed my dissertation", "author": "Daniel Griffin", "date": "2022-12-16 00:00:00 -0800", "category": "", "tags": "[]", "content": "\n \n \n \n {% assign d = page.date | date: \"%-d\" %}\n {{ page.date | date: \"%B\" }} {% case d %}{% when '1' or '21' or '31' %}{{ d }}st{% when '2' or '22' %}{{ d }}nd{% when '3' or '23' %}{{ d }}rd{% else %}{{ d }}th{% endcase %}, {{ page.date | date: \"%Y\" }}: {{ page.title }}\n \n {% assign content = page.snippet | strip %}\n {% if content != '' %}\n {{ content | markdownify }}\n {% endif %}\n \n \n \n {% if page.snippet_image_class contains 'paper_image' %}\n \n {% endif %}\n {% if page.snippet_image_class contains 'circle' %}\n \n {% endif %}\n \n \n", "snippet": "

    📁 Filed my dissertation: Griffin D. (2022) Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership. Ph.D. dissertation. Advisors: Deirdre K. Mulligan and Steven Weber. University of California, Berkeley. 2022. [griffin2022situating]

    \n", "url": "/updates/2022/12/16/filled-my-dissertation/", "snippet_image": "griffin2022situating.png", "snippet_image_alt": "image of griffin2022situating paper", "snippet_image_class": "paper_image" } , { "id": "changes-2022-11-25-notes", "type": "posts", "title": "changes 2022-11-25", "author": "Daniel Griffin", "date": "2022-11-25 00:00:00 -0800", "category": "", "tags": "[]", "content": "- Added publication: [griffin2022search](shortcuts/griffin2022search)\n- Added publication to [Updates!](/index.html#updates)\n- Added a shortcut page: [griffin2022search](shortcuts/griffin2022search)\n- Added publication to: [CV](/assets/Daniel_Griffin_CV_2022-11-25.pdf)", "snippet": "\n", "url": "/changes/2022/11/25/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "updates-2022-11-25-griffin2022search-published", "type": "posts", "title": "My paper with Emma Lurie was published", "author": "Daniel Griffin", "date": "2022-11-25 00:00:00 -0800", "category": "", "tags": "[]", "content": "\n \n \n \n {% assign d = page.date | date: \"%-d\" %}\n {{ page.date | date: \"%B\" }} {% case d %}{% when '1' or '21' or '31' %}{{ d }}st{% when '2' or '22' %}{{ d }}nd{% when '3' or '23' %}{{ d }}rd{% else %}{{ d }}th{% endcase %}, {{ page.date | date: \"%Y\" }}: {{ page.title }}\n \n {% assign content = page.snippet | strip %}\n {% if content != '' %}\n {{ content | markdownify }}\n {% endif %}\n \n \n \n {% if page.snippet_image_class contains 'paper_image' %}\n \n {% endif %}\n {% if page.snippet_image_class contains 'circle' %}\n \n {% endif %}\n \n \n", "snippet": "

    📄 My paper with Emma Lurie (equally co-authored) was published: Griffin, D., & Lurie, E. (2022). Search quality complaints and imaginary repair: Control in articulations of Google Search. New Media & Society, Ahead of Print. https://doi.org/10.1177/14614448221136505 [griffin2022search]

    \n", "url": "/updates/2022/11/25/griffin2022search-published/", "snippet_image": "griffin2022search.png", "snippet_image_alt": "image of griffin2022search paper", "snippet_image_class": "paper_image" } , { "id": "changes-2022-11-11-notes", "type": "posts", "title": "changes 2022-11-11", "author": "Daniel Griffin", "date": "2022-11-11 00:00:00 -0800", "category": "", "tags": "[]", "content": "- Edited a post: Added [line from Sundin & Carlsson (2016)](2022/11/10/search-automation-bias.html#sundin2016outsourcing) to [search automation bias (SAB)](2022/11/10/search-automation-bias.html)", "snippet": "\n", "url": "/changes/2022/11/11/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-11-10-search-automation-bias", "type": "posts", "title": "search automation bias (SAB)", "author": "Daniel Griffin", "date": "2022-11-10 00:00:00 -0800", "category": "", "tags": "[automation bias]", "content": "*The below is from a short Twitter thread of mine from [`2017-05-23`](https://twitter.com/danielsgriffin/status/867181835586895872)*:\n\n> Is there a term to refer to the seeming authoritativeness of algorithmic expertise of a list of organic and inorganic search results?\n> \n> The clean aesthetic of search results that reduces the cost and shortcuts the processing requirements when reading Google answer boxes?\n> \n> Or stopping at the first result?\n> \n> Our performed unwillingness to do the costly contextualization of the results of a given query with how we know - if asked - it works?\n> \n> How do we reference the difficulty in disentangling what \"Google says\" from what a page, which Google says the web values, says?\n> \n> What do we call the production of epistemic automaticity from Google's algorithms' automated search results?\n\n**2022-11-10 Notes:**\n\nSearch automation bias (SAB) is one possible term (though my questions above point to ideas probably worth disentangling, for instance, my larger questions are broader than [\"position bias\"](#position_bias)—pointing also to the \"clean aesthetic\", thinking past the context and construction of search, and differentiating the search engine's claimed credencing from the whole experience of query => \"*search media*\"[^metaxa2019search] => reading the page[^results_of_search]).\n\n[^results_of_search]: Distinguishing the search results from the complete search, including \"the complex impact a page of results can have on users\" (Metaxa et al. 2019)[^metaxa2019search]. Alternately worded, in Mulligan & Griffin (2018, 567)[^mulligan2018rescripting]:\n\n > results-of-search (the results of the entire query-to-conception experience of conducting a search and interpreting search results)\n\nI put some remarks from others' research below. I'd love to hear more of other terms or ways of thinking through this (or of doing search differently), newly proposed by you or in literature/practice that I've missed or failed to recall. SAB seems increasingly common in the the Google Web Search paradigm—with instant answers, rich components, and featured snippets—though perhaps less so where people perceive/believe spam to have clouded the results[^dying]. I think the risks from SAB are likely lower for some types of searches or searches within particular contexts (like what I study in my dissertation: data engineers searching for work) and perhaps higher in others (see, for example, a working paper from Lurie & Mulligan[^lurie2021searching_draft] and their section on defining the search results that are \"likely to mislead\") or searches with representational harms (Noble 2018)[^noble2018algorithms]).\n\n[^dying]: Are the claims of Google dying (Brereton 2022)[^brereton2022google] showing up in research on the use of Google?\n\n Chayka (2022):[^chayka2022google]\n\n > Brereton’s post–which ended “Google is dead. Long live Google + ‘site:reddit.com’ ”—became the No. 10 [most upvoted link ever on the tech-industry discussion board Hacker News](https://hn.algolia.com/?dateRange=all&page=0&prefix=false&query=&sort=byPopularity&type=story). No. 11 is a complaint about Google’s search results looking too similar to its ads, while No. 12 is a link to an alternative, indie search engine. Clearly, others share Brereton’s sense of search-engine discontentment. [Algolia link not in the original]\n\n[^brereton2022google]: [Brereton](https://dkb.io/)'s [Google Search Is Dying](https://dkb.io/post/google-search-is-dying) (2022), from DKB. [brereton2022google]\n\n\nI wrote the 2017 thread above while working on Mulligan & Griffin (2018)[^mulligan2018rescripting]—re Google returning Holocaust-denier search pages at the top of the search results for the query [did the holocaust happen] \\(Cadwalladr 2016)[^cadwalladr2016googleb].\n\n\n\n**See also:**\n\nVaidhyanathan (2011, 15)[^vaidhyanathan2011googlization]\n\n> our habits (trust, inertia, impatience) keep us from clicking past the first page of search results\n\n\n\n\nSundin & Carlsson (2016)[^sundin2016outsourcing]\n\n> ... and if you put trust in _Google’s_ relevance criteria, as a consequence you outsource critical assessment of information to the information infrastructure and, more precisely, to the algorithms of the search engines\n\nNoble (2018, 116)[^noble2018algorithms]\n\n> ...search results belie any ability to intercede in the framing of a question itself. [ . . . ] What we find in search engines about people and culture is important. They oversimplify complex phenomena. They obscure any struggle over understanding, and they can mask history. **Search results can reframe our thinking** and deny us the ability to engage deeply with essential information and knowledge we need, knowledge that has traditionally been learned through teachers, books, history, and experience. [em added]\n\nHaider & Sundin (2019, 24)[^haider2019invisible]\n\n> shifting the locus of trust from people and institutions to a technology that aims at merging and relocating it\n\n\n\nHaider & Sundin (2019, 33-34)[^haider2019invisible] — see the full paragraph (which pulls together White (2016, p. 65)[^white2016interactions] on \"position bias\" (White: \"also referred to as ‘trust’ bias or ‘presentation bias’”); Pan et al. 2007[^pan2007google]; Schultheiß et al. 2018's[^schulthei2018still]; and Höchstötter & Lewandowski 2009[^hochstotter2009users]), starting with:\n\n> Another line of research investigates what people choose from the search engine results page – often referred to as SERP – and why they choose as they do. This work convincingly shows that how people choose links is primarily based on where these links are located on the search engine results page.\n\n\nTripodi (2022, 116)[^tripodi2022propagandists]:\n\n> ...conflates the explorative search processes——searches that embody learning and investigating——with queries focused on fact retrieval and verification.[40] Further, as Google has worked to \"oversimplify complex phenomena\" and to prioritize profits over societal engagement with complicated ideas, the tech giant has transformed itself from an exploratory platform into one designed around verification...[41]\n> \n> ___\n> \n> Fn40. [Marchionini 2006][^marchionini2006exploratory]\n>\n> Fn41. [Noble 2018[^noble2018algorithms]; Haider & Sundin 2019[^haider2019invisible]]\n\nNarayanan and De Cremer (2022, 2)[^narayanan2022google]: \n\n> users of search engines act as if search engine algorithms are providers of testimony, and acquire or alter beliefs on the basis of this apparent testimony\n\n---\n\n*2022-11-11 Edit:* Added [line from Sundin & Carlsson (2016)](#sundin2016outsourcing)[^sundin2016outsourcing]\n\n---\n\n### Notes and References\n\n[^chayka2022google]: [Chayka](https://www.kylechayka.com/)'s [What Google Search Isn’t Showing You](https://www.newyorker.com/culture/infinite-scroll/what-google-search-isnt-showing-you) (2022), from The New Yorker. [chayka2022google]\n\n[^haider2019invisible]: [Haider](https://www.hb.se/en/research/research-portal/researchers/JUHA/) & [Sundin](https://www.kultur.lu.se/en/person/OlofSundin/)'s [Invisible Search and Online Search Engines: The ubiquity of search in everyday life](https://doi.org/10.4324/9780429448546) \\(2019), from Routledge. [**open access book**] doi:10.4324/9780429448546 [haider2019invisible]\n\n[^mulligan2018rescripting]: [Mulligan](https://www.ischool.berkeley.edu/people/deirdre-mulligan) & Griffin's [Rescripting Search to Respect the Right to Truth](https://georgetownlawtechreview.org/rescripting-search-to-respect-the-right-to-truth/GLTR-07-2018/) (2018), in The Georgetown Law Technology Review. [[direct PDF link](https://georgetownlawtechreview.org/wp-content/uploads/2018/07/2.2-Mulligan-Griffin-pp-557-84.pdf)] [[mulligan2018rescripting]](/shortcuts/mulligan2018rescripting.html)\n\n[^narayanan2022google]: [Narayanan](https://www.deveshnarayanan.com/) & [De Cremer](https://www.daviddecremer.com/)'s [\"Google Told Me So!\" On the Bent Testimony of Search Engine Algorithms](https://doi.org/10.1007/s13347-022-00521-7) (2022), in Philosophy & Technology. doi:10.1007/s13347-022-00521-7 [🚨 paywalled, email author for a copy] [narayanan2022google]\n\n[^noble2018algorithms]: [Noble](https://safiyaunoble.com/)'s [Algorithms of Oppression How Search Engines Reinforce Racism](https://nyupress.org/9781479837243/algorithms-of-oppression/) (2018), from New York University Press. [[book](https://en.wikipedia.org/wiki/Special:BookSources?isbn=9781479837243)] [noble2018algorithms]\n\n[^marchionini2006exploratory]: [Marchionini](https://ils.unc.edu/~march/)'s [Exploratory search: From Finding to Understanding](https://doi.org/10.1145/1121949.1121979) (2006), in Commun. ACM. doi:10.1145/1121949.1121979 [🚨 paywalled, author copy at [ResearchGate](https://www.researchgate.net/publication/220422328_Marchionini_G_Exploratory_search_from_finding_to_understanding_Comm_ACM_494_41-46)] [marchionini2006exploratory]\n\n[^tripodi2022propagandists]: [Tripodi](https://ftripodi.com/)'s [The Propagandists' Playbook: How Conservative Elites Manipulate Search and Threaten Democracy](https://yalebooks.yale.edu/book/9780300248944/the-propagandists-playbook/) (2022), from Yale University Press. [[book](https://en.wikipedia.org/wiki/Special:BookSources?isbn=9780300248944)] [tripodi2022propagandists]\n\n[^vaidhyanathan2011googlization]: [Vaidhyanathan](https://mediastudies.as.virginia.edu/people/profile/sv2r)'s [The Googlization of everything:(and why we should worry)](https://doi.org/10.1525/9780520948693) (2011), from University of California Press. [[book](https://en.wikipedia.org/wiki/Special:BookSources?isbn=9780520258822)] doi:10.1525/9780520948693 [vaidhyanathan2011googlization]\n\n[^cadwalladr2016googleb]: [Cadwalladr](https://twitter.com/carolecadwalla)'s [Google is not ‘just’ a platform. It frames, shapes and distorts how we see the world](https://www.theguardian.com/commentisfree/2016/dec/11/google-frames-shapes-and-distorts-how-we-see-world) (2016), in The Guardian. [cadwalladr2016googleb]\n\n[^white2016interactions]: [White](https://ryenwhite.com/)'s [Interactions with Search Systems](https://doi.org/10.1017/CBO9781139525305) (2016), from Cambridge University Press. [[book](https://en.wikipedia.org/wiki/Special:BookSources?isbn=9781139525305); author copy at ] DOI: 10.1017/CBO9781139525305 [white2016interactions]\n\n[^pan2007google]: [Pan](https://sites.psu.edu/bingpan/) et al.'s [In Google we trust: Users’ decisions on rank, position, and relevance](https://doi.org/10.1111/j.1083-6101.2007.00351.x) (2007), in Journal of computer-mediated communication. doi:10.1111/j.1083-6101.2007.00351.x [pan2007google]\n\n[^hochstotter2009users]: Höchstötter & [Lewandowski](https://searchstudies.org/team/dirk-lewandowski/)'s [What users see -- Structures in search engine results pages](https://doi.org/10.1016/j.ins.2009.01.028) (2009), in Information Sciences. doi:10.1016/j.ins.2009.01.028 [pre-print](https://arxiv.org/pdf/1511.05802.pdf) [höchstötter2009users]\n\n[^schulthei2018still]: [Schultheiß](https://searchstudies.org/team/schultheiss/), [Sünkler](https://searchstudies.org/team/sebastian-suenkler/), & [Lewandowski](https://searchstudies.org/team/dirk-lewandowski/)'s [We still trust Google, but less than 10 years ago: An eye-tracking study](http://informationr.net/ir/23-3/paper799.html) (2018), in Information Research. [schultheiß2018still]\n\n[^lurie2021searching_draft]: [Lurie](https://emmalurie.github.io/) & [Mulligan](https://www.ischool.berkeley.edu/people/deirdre-mulligan)'s [Searching for Representation: A sociotechnical audit of googling for members of U.S. Congress [DRAFT]](https://emmalurie.github.io/docs/preprint-searching.pdf) (2021) [lurie2021searching_draft]\n\n[^metaxa2019search]: [Metaxa](https://metaxa.net/), [Park](http://www.joonsungpark.com/), [Landay](https://www.landay.org/), & [Hancock](https://pacscenter.stanford.edu/person/jeff-hancock/)'s [Search Media and Elections: A Longitudinal Investigation of Political Search Results in the 2018 U.S. Elections](https://doi.org/10.1145/3359231) (2019), in Proc. ACM Hum.-Comput. Interact.. doi:10.1145/3359231 [🚨 paywalled, author copy at [Stanford's Social Media Lab](https://sml.stanford.edu/publications/2019/search-media-and-elections-longitudinal-investigation-political-search-results)] [metaxa2019search]\n\n[^sundin2016outsourcing]: [Sundin](https://www.kultur.lu.se/en/person/OlofSundin/) & [Carlsson](https://portal.research.lu.se/en/persons/hanna-carlsson)'s [Outsourcing trust to the information infrastructure in schools](http://doi.org/10.1108/JD-12-2015-0148) (2016), in JD. doi:10.1108/JD-12-2015-0148 [🚨 paywalled, author copy available at [Lund University's Research Portal](https://portal.research.lu.se/en/publications/outsourcing-trust-to-the-information-infrastructure-in-schools-ho)] [sundin2016outsourcing]", "snippet": "\n", "url": "/2022/11/10/search-automation-bias/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-11-10-notes", "type": "posts", "title": "changes 2022-11-10", "author": "Daniel Griffin", "date": "2022-11-10 00:00:00 -0800", "category": "", "tags": "[]", "content": "- Added a post: [search automation bias (SAB)](2022/11/10/search-automation-bias.html)\n- Edited a post: [\"I wish there was a way to turn off snippets.\"](2022/10/30/turn-off-featured-snippets) => Added The Markup's [Simple Search](https://themarkup.org/google-the-giant/2020/11/10/introducing-simple-search) to [browser extensions](2022/10/30/turn-off-featured-snippets#option1) that remove featured snippets.", "snippet": "\n", "url": "/changes/2022/11/10/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-11-06-notes", "type": "posts", "title": "changes 2022-11-06", "author": "Daniel Griffin", "date": "2022-11-06 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added a post: [Looking at harmful & empowering uses of Twitter Search (prospectus)](2022/11/06/harmful-and-empowering-uses-twitter-search.html)", "snippet": "\n", "url": "/changes/2022/11/06/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-11-06-harmful-and-empowering-uses-twitter-search", "type": "posts", "title": "Looking at harmful & empowering uses of Twitter Search (prospectus)", "author": "Daniel Griffin", "date": "2022-11-06 00:00:00 -0700", "category": "", "tags": "[]", "content": "Here is text of my prospectus for applying to the [2021 Information Operations Fellowship with Twitter's Trust & Safety Team](https://web.archive.org/web/20210616005800/https://careers.twitter.com/en/work-for-twitter/202106/932f29ab-0ba3-4251-919b-13b82dce45d5/380cdbab-b641-49ff-aa11-c919f9ffb992.html/2021-information-operations-fellowship.html). (edited for a missing citation, modified & expanded presentation of citations, links to personal websites added, [footnote re META](#meta) added)\n\nI recalled this while thinking through the approach to full text search taken by Mastodon. See my post from 2022-11-05: [Searching Mastodon?](/2022/11/05/searching-mastodon)\n\nIn light of Elon Musk's recent tweet, analysis and discussion of how Twitter search might be used for harassment (and how search might be resisted or friction added to searching) is needed even more: [`2022-11-05 15:31`](https://twitter.com/elonmusk/status/1589022495189127169)\n\n> Search within Twitter reminds me of Infoseek in ‘98! That will also get a lot better pronto.\n\nWho is left to build guardrails to direct the use of Twitter search? Who is left to monitor and mitigate the harms?\n\nSee the conversation under Taylor Lorenz's ([@taylorlorenz@mastodon.social](https://mastodon.social/@taylorlorenz])) [recent comment](https://mastodon.social/@taylorlorenz/109292370405648875) re search and discovery on Mastodon. The desire to be able to find what one wants seems to propel one to bowl right over what appears to be deliberately established community protocols and norms that consider also the desires of those wanting to be found (or not).\n\n[I'll confess I made some lighthearted comments about Infoseek - [1](https://twitter.com/danielsgriffin/status/1589052740105572352), [2](https://twitter.com/danielsgriffin/status/1589124647379165184)]\n\n---\n\n### Instructions\n\n> Applicants should submit a 1-2 page prospectus along with standard application materials that lays out the scope and objectives of a proposed investigative project or projects. The prospectus should include:\n> \n> - A short description of the proposed project and motivations behind it\n> - Project objectives and optimal outcomes for the applicant\n> - Expectations around materials, resources and data access needed to complete the work\n> - Demonstration of any preparation or pre-work already completed in relation to the project or projects\n\n--- \n### Short Description\n\nThis project will examine behaviors around Twitter Search that may be related to harmful or empowering uses of the tool. Using a two-pronged approach this project will explore both mentions of searching Twitter in tweets and search behavior on Twitter Search. Mentions of searching Twitter in tweets will be inductively coded to better understand how Twitter Search is used (and resisted) to enable or mitigate harmful behavior. Twitter Search log data will be analyzed for particular subsets of users in order to connect patterns of search behavior with other platform behavior.\n\n### Motivations\n\nIn a 2019 Twitter conversation-interview, Jack Dorsey told Kara Swisher that search was one of the four spaces where abuse happens the most on Twitter.[^1]\n\n[^1]: Kara Swisher ([@karaswisher@twitter.com](https://twitter.com/karaswisher)): [`2019-02-12 14:15`](https://twitter.com/karaswisher/status/1095446310247907328)\n\n > Ok but I really want to drill down on HOW. How much downside are you willing to tolerate to balance the good that Twitter can provide? Be specific. #KaraJack\n\n Jack Dorsey ([@jack@twitter.com](https://twitter.com/jack)): [`2019-02-12 14:19`](https://twitter.com/jack/status/1095447340809220097)\n\n > This is exactly the balance we have to think deeply about. But in doing so, we have to look at how the product works. And where abuse happens the most: replies, mentions, search, and trends. Those are the shared spaces people take advantage of #karajack\n\nExamining the use and mentions of Twitter Search may be one avenue to explore where harmful activity may be disrupted and where legitimate user control may be expanded. Examining the use of Twitter Search may suggest design or documentation changes that may \"improve the integrity, relevancy, and authenticity of the public conversation\".[^2] That line is taken from Jutta Williams's[^new] thread announcing [Dr. Sarah Roberts](https://illusionofvolition.com/)'s consulting at Twitter. When Williams announced that Roberts would be consulting at Twitter this summer, she shared that Roberts would \"research the role of user agency in algorithmic decision making and how communities might be best benefited by more choice.\"[^new2] That aim resonated with research I've previously conducted with colleagues about control on Twitter (discussed below).\n\n[^2]: Jutta Williams ([@williams_jutta@twitter.com](https://twitter.com/williams_jutta)): [`2021-06-23 09:36`](https://twitter.com/williams_jutta/status/1407739276759080965)\n\n > By giving people more choice, we aim to improve the integrity, relevancy, and authenticity of the public conversation. This is the driving hypothesis we shared in April that I’m really excited to start exploring alongside [@ubiquity75](https://twitter.com/ubiquity75) [Sarah Roberts]. More to come!\n\n\n[^new2]: Jutta Williams ([@williams_jutta@twitter.com](https://twitter.com/williams_jutta)): [`2021-06-23 09:35`](https://twitter.com/williams_jutta/status/1407739108328411137)\n\n > She’ll research the role of user agency in algorithmic decision making and how communities might be best benefited by more choice. She’ll work with people on Twitter, researchers, regulators, consumer advocates, and our team to help us figure out where to focus our work.\n\n\n[^new]: [Added footnote on 2022-11-05: Williams was at the time the Staff Product Manager for Twitter's META (ML Ethics, Transparency & Accountability) team. The team, founded by Ari Font and led by [Rumman Chowdhury](https://www.rummanchowdhury.com/), was profiled on the same day as the tweet above (June 23rd, 2021) by Anna Kramer in Protocol: [\"How Twitter hired tech's biggest critics to build ethical AI\"](https://www.protocol.com/workplace/twitter-ethical-ai-meta). All but one member of META was laid off on November 4th, 2022 (ref: [Luca Belli](https://twitter.com/__lucab/status/1588544122507259904)). Prior to its then instantiation, Ayşe Naz Erkan and Luca Belli created its initial version. (refs: [Ariadna Font Llitjós](https://twitter.com/quicola/status/1463666405291835393), [Meg Young](https://twitter.com/megyoung0/status/1588574105661452288), [Nick Matheson](https://twitter.com/willplayforfood/status/1588655823404007424), [Kristian Lum](https://twitter.com/KLdivergence/status/1588612486093107200))]\n\nBeyond the choice of what to tweet, the search tool on Twitter is probably the aspect of the interface that presents the most expansive set of possible choices to people. The tool can be used to learn various things, connect with others, and facilitate harmful or empowering behavior.\n\n[Dr. Sarita Schoenebeck](https://yardi.people.si.umich.edu/) and [Lindsay Blackwell](http://www.lindsayblackwell.net/) have an article forthcoming in the Yale Journal of Law & Technology that \"propose[s] several key shifts for social media governance to better recognize and repair harm\". One suggestion is that a shift of focus from content to behavior \"will allow social media platforms to become more proactive in their governance, implementing interventions that discourage harmful behaviors before they manifest on the platform.\"[^3]\n\n[^3]: Schoenebeck & Blackwell's \"Reimagining Social Media Governance: Harm, Accountability, and Repair\" (2021), in Yale Journal of Law & Technology. [link](https://law.yale.edu/sites/default/files/area/center/justice/reimagining_social_media_governance_harm_accountability_and_repair.pdf) [schoenebeck2021reimagining]\n\nClosely exploring discussions around and practices of Twitter search in relation to both empowerment and harm may reveal paths towards concrete interventions.\n\nThis project intersects with two of the Twitter Trust & Safety focus areas for 2021:\n\n> 1. Developing understanding of emergent harm networks on Twitter - driving signals development and approaches to addressing them through policy and enforcement\n\n- Looking at prior and present harm networks as population subsets for analysis of discussion and search practices.\n\n> 4. Technical analysis to better understand how our products are abused and exploited by coordinated actor groups.\n\n- Technical analysis may reveal patterns of abuse similar to that pursued through Twitter Search but supported through link sharing or misuse of the Twitter API or partners.\n\nThe project also broadens the scope beyond looking at those causing the harm, spam, manipulation, and abuse to also look at how users of Twitter take action on their own or in community to counteract those actors. \n\n### Objectives\n\n- Identify distinctive Twitter Search practices of harmful actors (for improving identification or mitigation).\n- Identify aspects of Twitter Search to reveal or restrict or capabilities to add.\n- Document a repeatable approach to continue to learn about search discussion and search practices relevant to promoting healthy conversation and reducing harm before it happens.\n\n### Optimal Outcomes\n\nFamiliarity with the operations of a company exploring these questions will greatly improve my ability to conduct academic research in the public interest and advocate for effective design or policy changes. It would also help me better prepare my students for similar work in industry or government.\n\n\n### Support Expectations\n\n- access to Twitter employees working on researching, designing, and engineering Twitter Search\n- access to tweets (could instead apply for Twitter API access through the Academic Research product track)\n- access to tools to permit privacy-protecting exploration of Twitter Search log data\n\n\n### Preparation\n\nMy PhD research has looked at tradeoffs in assignments of responsibility related to the use of algorithmic tools, particularly search. My co-authored 2018 law review article looked at the Holocaust denial search results on Google—revealing differences in interpretations of the search results.[^4] We argued that Google had an obligation to respect the right to truth regarding gross violations of human rights. In conclusion, we showed that close examination of how people use search reveals space for action that don't run contrary to the company's longstanding values and engineering commitments. Google could act in the seams to equip people to search more responsibly.\n\n[^4]: Mulligan & Griffin's \"Rescripting Search to Respect the Right to Truth\" (2018), in The Georgetown Law Technology Review. [link](https://georgetownlawstechreview.org/rescripting-search-to-respect-the-right-to-truth/GLTR-07-2018/) [[mulligan2018rescripting]](/shortcuts/mulligan2018rescripting)\n\nMy co-authored 2019 paper looked at how people discussed the \"Twitter algorithm\" on Twitter (using the Twitter API to collect tweets with that phrase or variants).[^5] We focused on one theme we identified: the value and utility of control according to platform users. Users discussed many ways in which they exercised control against or with \"the algorithm\" to improve their experience on the platform. In the end, like the announcement from Williams mentioned above, \"We argue[d] for the need [ . . . ] to consider support for users who wish to enact their own collective choices.\"\n\n[^5]: Burrell, et al.'s \"When Users Control the Algorithms: Values Expressed in Practices on Twitter\" (2019), at CSCW [https://doi.org/10.1145/3359240](https://doi.org/10.1145/3359240) [[burrell2019control](/shortcuts/burrell2019control)]\n\nThough it was not the focus of the study, we noted elements related to the use of Twitter Search:\n\n- people searching directly for accounts as a way to repair what they saw as a loss of control caused by algorithmic shaping of their feed.\n- using screenshots or \"Voldemorting\"[^6] to evade searchability from others\n\n[^6]: van der Nagel's \"'Networks that work too well': intervening in algorithmic connections\" (2018), in Media International Australia. [https://doi.org/10.1177/1329878X18783002](https://doi.org/10.1177/1329878X18783002) [nagel2018networks]\n\nFinally, my dissertation research that I am currently conducting looks at the use of web search by data engineers at work. The core connection between that and this proposal, beyond questions around how responsibility is assigned in relation to search and people's understanding of platform ecosystems, is that both are premised on the belief that there may be value in looking closely at beliefs and behaviors implicated in uses of search tools. I suggest exploring search practices as a lens or lever to explore or shape the broader experience.\n\n---\n", "snippet": "\n", "url": "/2022/11/06/harmful-and-empowering-uses-twitter-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-11-05-searching-mastodon", "type": "posts", "title": "Searching Mastodon?", "author": "Daniel Griffin", "date": "2022-11-05 00:00:00 -0700", "category": "", "tags": "[]", "content": "After seeing some stray remarks about the lack of full text search on Mastodon, I’ve been curious (and distracted while finishing my dissertation) with how they've imagined and constructed #search / #discovery. I'd love to learn more about the technical decisions and the social constructions of search and discovery in these communities (and how these ideas may be helpfully put to practice elsewhere).\n\nI decided to toss the links I've found up here after seeing a post from Taylor Lorenz ([@taylorlorenz@mastodon.social](https://mastodon.social/@taylorlorenz])) [`2022-11-05 10:27`](https://mastodon.social/@taylorlorenz/109292370405648875).\n\n[Mastodon docs](https://docs.joinmastodon.org/admin/optional/elasticsearch/):\n\n> Mastodon’s full-text search allows logged in users to find results from their own toots, their favourites, and their mentions. It deliberately does not allow searching for arbitrary strings in the entire database.\n\nAn GitHub issue on the [W3C ActivityPub repo: “Controlling availability to search”](https://github.com/w3c/activitypub/issues/221) (from 2017-05-03):\n\n> Earlier today someone released a search engine for mastodon and the response included several concerns.”\n\nThe above issue links to another, on the [W3C Social Web Incubator Community Group repo: “Socially Acceptable Search”](https://github.com/swicg/general/issues/3):\n\nThis includes a link to minutes from a 2017-05-19 W3C meeting that mentions limits to technical countermeasures and the importance of social mechanisms and trust. Mentions also the risk of a “harassment-centric search engine” operated outside the approval of the community. \n\nThe discussion includes mentions of “context collapse” (Marwick & boyd, 2011).\n\n\n---\n\nSome of this connects with a (failed) proposal I made in a fellowship application (actually, [Twitter's Information Operations Fellowship](https://web.archive.org/web/20210616005800/https://careers.twitter.com/en/work-for-twitter/202106/932f29ab-0ba3-4251-919b-13b82dce45d5/380cdbab-b641-49ff-aa11-c919f9ffb992.html/2021-information-operations-fellowship.html)) in the summer of 2021, to study the search practices of harassers——a proposal I wish was informed in writing the proposal by an understanding of what Mastodon is doing. [I'll see about posting a version of that here.]\n\nAdded 2022-11-06: Here is the text of the proposal: [Looking at harmful & empowering uses of Twitter Search (prospectus)](/2022/11/06/harmful-and-empowering-uses-twitter-search)\n\n---\n\n### Citations\n\nMarwick & boyd's \"I tweet honestly, I tweet passionately: Twitter users, context collapse, and the imagined audience\" (2011), in New Media & Society. [https://doi.org/10.1177/1461444810365313](https://doi.org/10.1177/1461444810365313) [marwick2011tweet]", "snippet": "\n", "url": "/2022/11/05/searching-mastodon/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-11-05-notes", "type": "posts", "title": "changes 2022-11-05", "author": "Daniel Griffin", "date": "2022-11-05 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added a post: [Searching Mastodon?](2022/11/05/searching-mastodon)", "snippet": "\n", "url": "/changes/2022/11/05/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-11-04-notes", "type": "posts", "title": "changes 2022-11-04", "author": "Daniel Griffin", "date": "2022-11-04 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added to [goldenfein2022platforming](shortcuts/goldenfein2022platforming): [commentary](shortcuts/goldenfein2022platforming#commentary) section", "snippet": "\n", "url": "/changes/2022/11/04/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-11-03-notes", "type": "posts", "title": "changes 2022-11-03", "author": "Daniel Griffin", "date": "2022-11-03 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Edited a post: [Regina Bateson is not a politician, Google](2022/10/31/regina-bateson-is-not-a-politician) => At 5:27pm PT on 2022-11-02, Dr. Bateson tweeted: [Omg, it’s officially gone!! Google no longer says I’m a politician!!!](2022/10/31/regina-bateson-is-not-a-politician#omg).", "snippet": "\n", "url": "/changes/2022/11/03/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-11-02-notes", "type": "posts", "title": "changes 2022-11-02", "author": "Daniel Griffin", "date": "2022-11-02 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added a tagline to [/posts](/posts): Trying to be—just a tiny bit—publicly vulnerable about my work, my ignorance and my questions.\n- Added a post: [fear of Google abandoning Google Scholar](2022/11/02/fear-of-gs-abandonment)\n- Added a post: [Tweets that make me think of bridging technology gaps](2022/11/02/bridging-gaps-tweets)\n- Edited a post: [\"I wish there was a way to turn off snippets.\"](2022/10/30/turn-off-featured-snippets) => Added Startpage to [search engines without featured snippets](2022/10/30/turn-off-featured-snippets#option5).\n- Added [a disclosure](/disclosures#twitter_widgets_js) re my use of Twitter's widgets.js\n- Added [direct PDF link] links to the three shortcuts: [goldenfein2022platforming](shortcuts/goldenfein2022platforming), [burrell2019control](shortcuts/burrell2019control), and [mulligan2018rescripting](shortcuts/mulligan2018rescripting).", "snippet": "\n", "url": "/changes/2022/11/02/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-11-02-fear-of-gs-abandonment", "type": "posts", "title": "fear of Google abandoning Google Scholar", "author": "Daniel Griffin", "date": "2022-11-02 00:00:00 -0700", "category": "", "tags": "[]", "content": "I think Google abandoning Google Scholar in the near term is unlikely, particularly if there is not a viable public alternative or it is not transformed into one. This is not a full argument to that effect, but there are likely many benefits that accrue to Google by offering Google Scholar to the public. Some of that is discussed in our [paper](/shortcuts/goldenfein2022platforming) -- in a section on \"FREE\" (also a critique of the charity framing). See also [these comments on Quora from Kynan Eng](https://www.quora.com/Which-is-the-business-model-behind-Google-Scholar-or-is-it-a-byproduct-from-indexing-scientific-articles/answer/Kynan-Eng) ([HT](https://twitter.com/kynan_eng/status/1587569433215750147)). Also, see our paper for why this fear should be balanced against concerns about the status quo--which I touch on in [this tweet](https://twitter.com/danielsgriffin/status/1587454378222686212).\n\nBut, here are a few tweets mentioning such a fear (and see the ranging discussions w/in):\n\nWith Google Reader gone, is Google Scholar next? http://t.co/BMb1MHOKY8— Scholarly Kitchen (@scholarlykitchn) March 25, 2013 \n\n\nThis apparently is effective April 29th. Had I gone down that road, I would have effectively had a couple of months to figure out how to migrate .5 PB of data to a new solution on top of the grant deadline I need to make.God help us if Google decides to kill Google Scholar.— Bryan William Jones (@BWJones) February 7, 2022 \n\n\nOne of these days, google is going to decide that it's not interested in google scholar anymore, and this app will go bananas.— Duane Watson (@duane_g_watson) June 8, 2022 \n\n\nI'd argue that Google Scholar plays a critical role in modern research. It is free, and it absolutely crushes every other scholarly search engine, including specialized ones 👇Though it is a bit scary that it seems to be a tiny team & it exists only by the charity of Google... pic.twitter.com/kNFJMVZ52F— Ethan Mollick (@emollick) November 1, 2022 \n\n\nHT: Antoine Blanchard for linking the @emollick, @duane_g_watson, and @BWJones together: [here](https://twitter.com/Enroweb/status/1587575719705677824) and [here](https://twitter.com/Enroweb/status/1535104147980165120).", "snippet": "\n", "url": "/2022/11/02/fear-of-gs-abandonment/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-11-02-bridging-gaps-tweets", "type": "posts", "title": "Tweets that make me think of bridging technology gaps", "author": "Daniel Griffin", "date": "2022-11-02 00:00:00 -0700", "category": "", "tags": "[]", "content": "### ngrams\n\ntechnology interdependence, technology gap, gap encounters, coordination, bridges/bridging, affordance, imbrication, routines, pipes, tooling\n\n### articles\n\n- Bailey, Leonardi, & Chong's \"Minding the Gaps: Understanding Technology Interdependence and Coordination in Knowledge Work\" (2010), in Organization Science. [https://doi.org/10.1287/orsc.1090.0473](https://doi.org/10.1287/orsc.1090.0473) [bailey2010minding]\n - I mentioned this paper in [this thread](https://twitter.com/danielsgriffin/status/1494750734541156352).\n- Leonardi's \"When Flexible Routines Meet Flexible Technologies: Affordance, Constraint, and the Imbrication of Human and Material Agencies\" (2011), in MIS Quarterly. [http://www.jstor.org/stable/23043493](https://doi.org/10.1287/orsc.1090.0473) [leonardi2011flexible]\n- Bailey & Leonardi's \"Technology choices: Why occupations differ in their embrace of new technology\" (2015), from MIT Press. [http://www.jstor.org/stable/j.ctt17kk9d4](http://www.jstor.org/stable/j.ctt17kk9d4) [bailey2015technology]\n\n### Tweets\n\nWhy don't developers write more personal GUI tooling? I mean, besides the obvious reason that GUI libraries kinda suck and are much more oriented towards making consumer apps than personal tooling, and also because there are no good GUI tooling exemplars, and...— Hillel (@hillelogram) November 1, 2022 \n\n\nI remember the first time I used a Unix pipe to chain tools together. It was my first encounter with the Unix philosophy and it completely changed the way I approach solving problems.Now I break things down into smaller chunks and use the best tool for each unit of work.— Kelsey Hightower (@kelseyhightower) March 18, 2022 \n\n\n\n\n", "snippet": "\n", "url": "/2022/11/02/bridging-gaps-tweets/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-11-01-notes", "type": "posts", "title": "changes 2022-11-01", "author": "Daniel Griffin", "date": "2022-11-01 00:00:00 -0700", "category": "", "tags": "[]", "content": "- Added a post: [Regina Bateson is not a politician, Google](2022/10/31/regina-bateson-is-not-a-politician.html)", "snippet": "\n", "url": "/changes/2022/11/01/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-10-31-regina-bateson-is-not-a-politician", "type": "posts", "title": "Regina Bateson is not a politician, Google", "author": "Daniel Griffin", "date": "2022-10-31 00:00:00 -0700", "category": "", "tags": "[]", "content": "\nEdit: Added Twitter commentary\nEdit: At 5:27pm PT on 2022-11-02, Dr. Bateson tweeted: Omg, it’s officially gone!! Google no longer says I’m a politician!!!.\n\n\nGoogle’s knowledge\nYet again someone is compelled to take to Twitter to issue a complaint to Google about incorrect information about them in search results and to appeal for correction.1\nThis time it is Regina Bateson, an assistant professor at the Graduate School of Public & International Affairs at the University of Ottawa.\nGoogle is calling her a politician. She isn’t one. She, rightfully, wants it corrected.\n\nGoogle search: [Regina Bateson], the knowledge panel data labeling her as a “Politician”, and the top result: Her website, with the following snippetI am a comparative political scientist interested in violence, the rule of law, and threats to rights and democracy. · While I have particular expertise in Latin … [Red markings indicate the politician label is incorrect.]\n\nThis short blog post is partially an attempt to provide “web evidence” to aid their appeal for correction. It is also important to make note of these failures—not just the incorrect information but the work required to correct them. Just yesterday I had a conversation with someone who offhandedly passed on conventional wisdom, the searching-sublime,2 about how easy it was to search for everything. It is important to puncture perceptions of Google omniscience, to add friction to the automation bias and the granting of authority to whatever shows up at the top of Google search results.3 Perhaps reflecting on these will help us stop ‘just googling’ and reimagine what just–reasonable, responsive, responsible–search engines might be.\n\nThe Web’s evidence\nRegina Bateson is not a politician. Dr. Bateson (Ph.D. in Political Science, Yale) is a political scientist and professor at the University of Ottawa. This is documented throughout the web: her faculty page at the University of Ottawa, her personal website, her ORCiD, The Conversation, WBUR (Boston’s NPR news station), etc. In 2014, MIT News also identified her as a political scientist. Though she ran for office once she is not, by most any definition, a politician. The Google-provided label is incorrect, deceptive, and non-representative. Why doesn’t Google correct their search results? Or why does it take so much work and time for corrections to happen?\nHere is @regina_bateson on Twitter (Bateson, 2022):\n\nHey @Google, quick FYI: I am not a politician. I ran for office ONCE in 2017-2018, but I’m actually a political scientist, author, etc.\nOn Sept. 27 your team agreed to remove the term “politician” from my Knowledge Panel–but it’s still there. Why? How can I change this? HELP!!!\n\n\n\nAddenda\n\nTwitter commentary\nQuote-tweet from Vivek Krishnamurthy (law professor at University of Ottawa and director of the Samuelson-Glushko Canadian Internet Policy and Public Interest Clinic (CIPPIC)), of a quote-tweet from Regina Bateson, asks about how this, “Google’s failure to correct a false, AI-generated”Knowledge Panel\" description of a person\", interacts with new and proposed laws:\n\n\nHey #lawtwitter: does Google's failure to correct a false, AI-generated “Knowledge Panel” description of a person violate PIPEDA? If not, shouldn't we make sure that this sort of thing is actionable under C-27? These kinds of false descriptions can cause folks real harm. https://t.co/3hkAC8vZBD\n\n— Vivek Krishnamurthy ((???)) November 1, 2022\n\n\nAnother account mentioned an earlier case where a privacy expert apparently had to go to great lengths, and get media attention, to get Google to correct a knowledge panel that put his photo on a description of someone else with the same name: Leo Kelion (2019) “Google faces winged-monkey privacy protest” in the BBC.\n\n\n“Omg, it’s officially gone!! Google no longer says I’m a politician!!!”\n\n\nOmg, it’s officially gone!! Google no longer says I’m a politician!!!It took 4 YEARS but I am v glad to finally have accurate search results.THANK YOU (???) (???) (???) (???) (???) (???) & all who helped in this effort! 🎉🎉🎉 pic.twitter.com/dZAku7KDCi\n\n— Regina Bateson ((???)) November 3, 2022\n\n\nShe also tweeted: “I suspect (though can’t prove) this label made my path back into academia harder than it would’ve been otherwise.”\n\nWell, it was understandable when I was running for office & maybe for a couple months or a yr after. But years 2,3 & 4 were just unnecessary. I suspect (though can’t prove) this label made my path back into academia harder than it would’ve been otherwise. VERY GLAD it’s gone!! 😊\n\nIt has been, she tweeted in September, “years of trying to get it changed”.\n\n\n\n\nBateson, R. (2022). Hey @google, quick fyi: I am not a politician. I ran for office once in 2017-2018, but i’m actually a political scientist, author, etc. On sept. 27 your team agreed to remove the term \"politician\" from my knowledge panel–but it’s still there. Why? How can i change this? HELP!!! https://twitter.com/regina_bateson/status/1585995090480476160.\n\n\n\n\n\nThis post is shaped by, but not about, thinking and writing with Emma Lurie for a paper, recently accepted at New Media & Society: “Search quality complaints and imaginary repair: Control in articulations of Google Search” (initially presented at a Data & Society workshop in early 2022: The Social Life of Algorithmic Harms)↩︎\nThis loose treatment of Google as all-knowing sits in ironic tension with contemporaneous searching-disappointed from perceptions of increasing capture of Google results by spam and commercialization. Like these semi-viral tweets here:\n\n\nEvery week Google search becomes worse and worse and we’re so used to it nobody even talks about it anymore.\n\n— SwiftOnSecurity ((???)) April 24, 2020\n\n\n\n\nFor many classes of topics/questions Google Search has become super SEO'd, surfacing very low quality often ad-heavy/paginated content. I find myself appending “reddit” to a lot of queries and often getting much better results.\n\n— Andrej Karpathy ((???)) March 7, 2021\n\n\n\n\nthe best thing about saying “google it” much like “it’s not my job to educate you, google is for free’ is that when you google anything nowadays the first 3 or 4 pages are SEO’d out marketing garbage\n\n— Tales from the Crypto.com Arena ((???)) January 14, 2022\n\n\n\n\nGoogle search is becoming one of those dying malls. You still go there out of habit, but once you get there, none of it is what you want. You can remember when it was a useful place to visit, but now it's weirdly hollow and you leave without getting what you came for\n\n— Emily Velasco ((???)) October 25, 2022\n\n\n↩︎\nA tweet of mine from 2017:\n\n\nWhat do we call the production of epistemic automaticity from Google's algorithms' automated search results?\n\n— Daniel Griffin ((???)) May 24, 2017\n\n\n\n↩︎\n\n\n", "snippet": "\n", "url": "/2022/10/31/regina-bateson-is-not-a-politician/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-10-30-turn-off-featured-snippets", "type": "posts", "title": ""I wish there was a way to turn off snippets."", "author": "Daniel Griffin", "date": "2022-10-30 00:00:00 -0700", "category": "", "tags": "[]", "content": "I recently saw someone tweet: “I wish there was a way to turn off snippets.”\nThey were referring to turning off snippets on Google SERPs (search engine results pages) to improve the searcher’s searching experience, particularly to avoid being led astray by the summarization performed by Google.\nThese snippets, featured at the top of the results, are sometimes very flawed. I found the above tweet in reply to a semi-viral tweet about one problematic featured snippet (see Background, below). (The poster may have been referring to rich snippets (link to a very Google-focused and incomplete Wikipedia page) generally (also called “rich elements”), but I’m focused below on featured snippets.)\nIt looks like there are maybe five options for avoiding featured snippets, as a searcher:\n\n1. A browser extension\n2. a SERP emulator (wc?1)\n3. searching via the URL\n4. convince Google to provide an option, or\n5. use another search engine.\n\nThere are probably many variations of the first two options.\n\n\nOption 1.\nI’ll discuss here two approaches to using browser extensions to block featured snippets: one content blocking browser extension, uBlock Origin, and one, more general-purpose, userscript manager, Tampermonkey.\nuBlock Origin\nThe first page of results when searching [is there a way to turn off google featured snippets?] on Google2 gave me several results for webpage owners (who can choose to stop Google from making snippets of their content)3 and one for searchers: A Reddit post in r/uBlockOrigin from 2019:\n\n\nThe provided filter for use with the uBlock Origin extension (for Firefox or Chromium browsers) still works today4, though I slightly modified5 it to make the block more complete:\n\n\nTampermonkey\nOne tweet suggested, in reply to the original tweet wishing to turn off snippets, finding a Greasemonkey (for Firefox only) or Tampermonkey (Chromium-based browsers and others), script.\n\n\nThere might be if you use grease monkey or tamper monkey, they might have scripts or you can make one to disable snippets\n\n— Taibhse Designs ((???)) October 28, 2022\n\n\nI found and tested this script, which works—though I don’t know JavaScript well enough to do more than a cursory examination (there are probably tools that could help confirm it is only filtering?): Google Search Result Clean6\nEither approach probably will not work, though, if you are concerned about students searching on Chromebooks (as discussed in the thread with the question for this post; see Background, below) that likely have onerous restrictions on browser extensions.\n\n\nThe Markup’s Simple Search\nYou could also try The Markup’s Simple Search extension (which still works as of today, exactly two years after being published). The search experience, in a popup, is perhaps off-putting and may be best thought of as a demonstration or provocation, a speculative design: a reimagining. (added 2022-11-10)\n\n\nOption 2.\nYou can try a sort of SERP “emulator” or proxy that does not include featured snippets, like this one of what Google was like in 20009: https://oldgoogle.neocities.org/2009/\nI cannot vouch for the privacy of such searches.\n\n\nOption 3.\nAdd a &num=9 parameter to the URL for the query.\nExample:\nhttps://www.google.com/search?q=what+are+featured+snippets\nhttps://www.google.com/search?q=what+are+featured+snippets&num=9\n\nvia this page directed at SEOs wanting to not be featured in snippets (from Vlado Pavlik), which credits Kevin Richard on Twitter:\n\n\n\nhere is the explanation: you force the number of results per page to be lower than 10 (it also works with num=8, num=7, etc). And featured snippets are triggered only for serps of 10+ results.So the “featured snippet layer” is disabled, so the non-snippet rankings are shown.\n\n— Kеvіn Rіchаrd ((???)) January 23, 2020\n\n\nThis might only be useful if you have scripts that open queries via the URL7.\n\n\nOption 4.\nConvince Google to provide searchers with the option to turn of the snippets?\n\n\nOption 5.\nUse a different search engine that does not have featured snippets.\nI don’t know of a list of search engines that do not at all use featured snippets or other machine summarizing for some queries. (Here is a general list of search engines, on Wikipedia.) These look like likely candidates:\n\nMojeek (it does at times return Wikipedia content and news results in the sidebar)\nMillion Short8\nsearch.marginalia.nu9\nStartpage: “Unlike Google, Startpage doesn’t offer”featured snippets“, which are answers extracted directly from relevant websites. In contrast, Startpage’s”Instant Answers\" only get information from a dozen websites.41\" (Wikipedia) => “enabled by default, but you can disable them on the settings page”\n\nRHT: Janet Vertesi’s Google-Free Living (it’s better here)\n\n\n\n\nBackground\n\n\nDoing any research projects with my 7-9s had me screaming, begging, and pleading with them to fucking click the links and read the actual article. I wish there was a way to turn off snippets.\n\n— Verso Book Reader™ ((???)) October 26, 2022\n\n\nI found the above wish in the replies to a recent complaint about Google’s Featured snippets—showing how a snippet distorts the message of a website addressing myths10 about pouring liquid cooking oil down the drain:\n\n\nwhen will google realize that Featured Snippets are an abject failure? pic.twitter.com/lcVew7Rlhv\n\n— ◤◢◤◢◤◢◤◢ ((???)) October 26, 2022\n\n\nThere are two screenshots in the tweet:\n\nOf the featured snippet:\n\nIt’s okay to pour liquid oils down the drain.\nLiquid cooking oils float on water and easily adhere to sewer pipes. The oily film can collect food particles and other solids that will create a blockage.\n\nA portion of the snippeted website: An image captioned “Grease-clogged Pipe (photo courtesy Arlington County DES)” and the following text:\n\nMyths\nIt’s okay to pour grease down the drain if I run hot water with it.\nThis only moves the grease further down the sewer line. Eventually the water will cool and the grease will begin to solidify and coat the pipes.\nIt’s okay to pour liquid oils down the drain.\nLiquid cooking oils float on water and easily adhere to sewer pipes. The oily film can collect food particles and other solids that will create a blockage.`\n\n\nAddendum\nThis makes me curious whether non-Google researchers have studied folks searching with featured snippets blocked with an extension, like that in Option 1 above. I’ll have to look…\n\n2022-11-02 Edit: Added Startpage to search engines without featured snippets.\n2022-11-10 Edit: Added The Markup’s Simple Search to browser extensions.\n\n\n\n\nThere is probably a better word than emulator or proxy to refer to these.↩︎\nQuickly doing the same search on Bing, DuckDuckGo, Neeva, and You.com seems to return only results for webpage owners in the top results. Perhaps the query could be easily reformulated to clarify intent.↩︎\nThe first result at the time of my search, a featured snippet, actually includes, in passing, the tip shown in option 3.↩︎\nI tested by searching g[what are featured snippets?], which at least presently includes a featured snippet, with the filter and extension both enabled and disabled.↩︎\nmodified (hopefully not too aggressively) to:\ngoogle.*##.xpdopen:has-text(Featured snippet):nth-ancestor(6)↩︎\nRelevant to my dissertation research, broadly, commented-out code for the Google Search Result Clean userscript contains instructions for also removing “naive and annoying websites” from Google search results, including: ‘www.w3schools.com’, ‘www.asciitable.com’, ‘www.dba-oracle.com’, ‘www.geeksforgeeks.org’, ‘www.tutorialspoint.com’ (these are websites that I’ve seen people complain about on Twitter with regard to doing programming related web searching, and one of the few examples I found of people programmatically modifying their web search tools). See numerous tweets on the topic by searching, for example, t[google w3schools hide]. A comment in the code suggests, instead, using uBlacklist to block those sites from search results.\n // Remove naive and annoying websites.\n // Comment this out, use uBlacklist instead\n↩︎\nFor example, I wrote a clunky plugin for myself for Sublime that takes a simple notation (the search tool code followed by the query in square brackets) and with a hotkey opens a browser tab with the search. So I can write g[search this] or bmail[search this] in my notes and my hotkey will open a tab in my browser to the Google or Berkeley Gmail, respectively, search for [search this].↩︎\nMillion Short and search.marginalia.nu are not currently listed on the Wikipedia list of search engines. :/↩︎\nMillion Short and search.marginalia.nu are not currently listed on the Wikipedia list of search engines. :/↩︎\nThis pattern, failing to process a website addressing a myth or “things you should never do”, appeared also in Google’s seizure search failure from October 2021.\n\n\nThe Google search summary vs the actual page pic.twitter.com/OJxt1FrBqh\n\n— soft! ((???)) October 16, 2021\n\n\nThere are two screenshots in the tweet:\n\nThe snippet for a “People also ask” prompted search: [Had a seizure Now what?]: “Hold the person down or try to stop their movements. Put something in the person’s mouth (this can cause tooth or jaw injuries) Administer CPR or other mouth-to- mouth breathing during the seizure. Give the person food or water until they are alert again.”\nA portion of the snippeted website:\n\nDo not:\n\nHold the person down or try to stop their movements\nPut something in the person’s mouth (this can cause tooth or jaw injuries)\nAdminister CPR or other mouth-to-mouth breathing during the seizure\nGive the person food or water until they are alert again\n\n\n\n↩︎\n\n\n", "snippet": "\n", "url": "/2022/10/30/turn-off-featured-snippets/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-10-30-notes", "type": "posts", "title": "changes 2022-10-30", "author": "Daniel Griffin", "date": "2022-10-30 00:00:00 -0700", "category": "", "tags": "[]", "content": "\nAdded a post: “I wish there was a way to turn off snippets.”\n\n", "snippet": "\n", "url": "/changes/2022/10/30/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "changes-2022-10-27-notes", "type": "posts", "title": "changes 2022-10-27", "author": "Daniel Griffin", "date": "2022-10-27 00:00:00 -0700", "category": "", "tags": "[]", "content": "\nAdded /scholar_profiles page (linked in Footer)\nAdded to goldenfein2022platforming\n\nsection IDs w/ links across top of page\nrelated work section\n\nAdded Mastodon to contact div in Footer\n\n", "snippet": "\n", "url": "/changes/2022/10/27/notes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-10-19-trace-watery-biases", "type": "posts", "title": "trace-watery-biases", "author": "Daniel Griffin", "date": "2022-10-19 00:00:00 -0700", "category": "", "tags": "[]", "content": "Looking at a recent paper from Jill Walker Rettberg1—discussing a method of “algorithmic failure”, which “uses the mispredictions of machine learning to identify cases that are of interest for qualitative research”—reminded me of a card in my notes: trace-watery-biases. The use by Rettberg is very distinct, but reminds me to re-frame search “failures” and failed searches as opportunities to better understand articulations, constructions, and expectations of search.\nThe card was prompted back in 2018 by a line from Heather M. Roff2, highlighted on Twitter by Suresh Venkatasubramanian3\n\nAll AIs can do is to bring into relief existing tensions in our everyday lives that we tend to assume away.\n\nAround the same time a stray bit from a line from Julia Powles and Helen Nissenbaum jumped out at me4:\n\nThe tales of bias are legion: online ads that show men higher-paying jobs; delivery services that skip poor neighborhoods; facial recognition systems that fail people of color; recruitment tools that invisibly filter out women. A problematic self-righteousness surrounds these reports: Through quantification, of course we see the world we already inhabit. Yet each time, there is a sense of shock and awe and a detachment from affected communities in the discovery that systems driven by data about our world replicate and amplify racial, gender, and class inequality. [links omitted, emphasis added]\n\nThe “we see the world we already inhabit”, (though of course some already see and feel that world) made me recall the joke about the fish and water, here it is as told by David Foster Wallace:\n\nThere are these two young fish swimming along and they happen to meet an older fish swimming the other way, who nods at them and says, “Morning, boys. How’s the water?” And the two young fish swim on for a bit, and then eventually one of them looks over at the other and goes, “What the hell is water?”\n\nAnd I recalled, at the time, a fascinating 2016 paper by Lucian Leahu5 that looks at “failures” of neural networks as opportunities for tracing relations and for “ontological surprise”, seeing new sorts of categories and ways of being:\n\nOther networks, however, surprised the engineers conducting these experiments. One such example is that of a network trained to detect dumbbells. Indeed, the images output by the neural net contained dumbbells, however they also depicted human arms operating them—see Figure 3. In other words, from the network’s perspective the essential characteristics of a dumbbell include human arms.\n[ . . . ]\nThe network encodes a central aspect pertaining to dumbbells: the fact that they can be operated in particular ways by arms. My interpretation is rooted in a relational worldview. From this perspective, what characterizes an entity is not the attributes of that entity but the relations that perform the object as such: the relations through which an object’s identity is performed—a weight emerges as a dumbbell by being used as a training weight, typically by lifting it with one’s arms. In sum, the network in this experiment can be thought to encode a relation between dumbbells and arms; indeed, a constitutive relation. Viewed from a relational point of view, then, this experiment is a success and motivates a further analysis on how we may use neural networks beyond identifying objects.\n\n+\n\nThe dumbbells experiment surprised the engineers with the presence of human arms in the output images. Although this particular relation (dumbbells-arms) is not particularly surprising, this experiment suggests that it might be possible for machine learning technologies to surprise us by tracing unexpected, indeed emerging, relations between entities. Such tracings may shift ontologies, the ways we understand and categorize the world. This would require us to be open to ontological surprises: e.g., relations and/or categories that 1) are native to specific configurations of machine learning technologies, the contexts in which they are applied, and the human labor necessary to operate the technologies and interpret their results and 2) might be different than what we expect.\n\n\n\n\n\nRettberg’s “Algorithmic failure as a humanities methodology: Machine learning’s mispredictions identify rich cases for qualitative analysis” (2022), in Big Data & Society. https://doi.org/10.1177/20539517221131290 [rettberg2022algorithmic]\n\nHT:\n\n\n\nWhen I read (???) (???) & (???)'s paper on anthropological AI, I was thrilled. They propose using AI's MISPREDICTIONS for qualitative research. I tested their method on our dataset & it worked wonderfully! My paper on it came out today! https://t.co/u43Jjscrcz\n\n— Jill Walker Rettberg ((???)) October 19, 2022\n\n\n\nI replied in-thread:\n\n\n\nVery neat!It isn't explicitly oriented towards “algorithmic failure” to “identify rich cases for qualitative analysis”, but as soon as I saw your tweet I thought of Leahu (2016) using surprise/“failure” to “shift ontologies”, from seeing entities to relations and new categories.\n\n— Daniel Griffin ((???)) October 19, 2022\n\n\n\nI particularly appreciated “§ Using machine learning against the grain”.\n\nRettberg highlights and builds on Munk et al.’s “The Thick Machine: Anthropological AI between explanation and explication” (2022), in Big Data & Society. https://doi.org/10.1177/20539517211069891 [munk2022thick]↩︎\nRoff’s “The folly of trolleys: Ethical challenges and autonomous vehicles” (2018), from Brookings. https://www.brookings.edu/research/the-folly-of-trolleys-ethical-challenges-and-autonomous-vehicles/ [roff2018folly]↩︎\n\n\n“All AIs can do is to bring into relief existing tensions in our everyday lives that we tend to assume away.” An EXCELLENT article on getting away from what the author calls “the folly of trolleys” in self-driving cars. Also see (???) on ‘car wars’. https://t.co/TcaIBS3cuK\n\n— Suresh Venkatasubramanian ((???)) December 17, 2018\n\n\n↩︎\nPowles & Nissenbaum’s “The Seductive Diversion of ‘Solving’ Bias in Artificial Intelligence” (2018), from OneZero. https://onezero.medium.com/the-seductive-diversion-of-solving-bias-in-artificial-intelligence-890df5e5ef53 [powles2018seductive]\n\nI previously shared about this piece contemporaneously:\n\n\n\nA winter solstice pairing:1️⃣ Selbst, boyd, Friedler, Venkatasubramanian, & Vertesi's “Fairness and Abstraction in Sociotechnical Systems” (excerpt left)2️⃣ Powles & Nissenbaum's “The Seductive Diversion of ‘Solving’ Bias in Artificial Intelligence” (excerpt right) pic.twitter.com/bEdUwVBpOC\n\n— Daniel Griffin ((???)) December 21, 2018\n\n\n↩︎\nLeahu’s “Ontological Surprises: A Relational Perspective on Machine Learning” (2016), in Proceedings of the 2016 ACM Conference on Designing Interactive Systems. https://doi.org/10.1145/2901790.2901840 [leahu2016ontological]↩︎\n\n\n", "snippet": "\n", "url": "/2022/10/19/trace-watery-biases/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-2022-10-19-end-of-line-hyphenation", "type": "posts", "title": "end-of-line hyphenation", "author": "Daniel Griffin", "date": "2022-10-19 00:00:00 -0700", "category": "", "tags": "[]", "content": "\n\nAre you searching for [aslkfja- stowerk;asndf] or [aslkfjastowerk;asndf]?\n\n\n@danielsgriffin via Twitter on Oct 19, 2022 \n\nSearching for [aslkfja- stowerk;asndf] on Google, Bing, DuckDuckGo, Yandex, @Neeva, @YouSearchEngine, @mojeek Query parsing choices made by Google make it the only search engine providing no reference to the use of the term (rendered as such) by Golebiewski & boyd (2018).\n\n\n\nGranted, the “-” appears to be an artifact of end-of-line hyphenation retained when copying from the PDF. In their 2019 follow-up report on data voids Golebiewski & boyd render the term “aslkfjastowerk;asndf”, for which Google does return results.\n\n\n\nGolebiewski & boyd (2018)\nGolebiewski & boyd (2019)\n\n\n\n\nThis page was published on 2022-10-19.\n\nSee a related post: ad z’njinz’tum\n\nUpdated on 2023-07-10: updated tweet display to cards.\n\n\n\n\nGolebiewski, M., & boyd, danah. (2018). Data voids: Where missing data can easily be exploited. Data & Society. https://datasociety.net/library/data-voids-where-missing-data-can-easily-be-exploited/\n\n\nGolebiewski, M., & boyd, danah. (2019). Data voids: Where missing data can easily be exploited. Data & Society. https://datasociety.net/library/data-voids/\n\n\n", "snippet": "\n", "url": "/tweets/2022/10/19/end-of-line-hyphenation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2022-10-18-low-code-search", "type": "posts", "title": "low-code search?", "author": "Daniel Griffin", "date": "2022-10-18 00:00:00 -0700", "category": "", "tags": "[]", "content": "Musings on seeing the below tweet: How might the experience searching (for solutions or fixes) when building with low-code tools differ from the more code-centric (wc?) tools (like Python or Bash)? Scripting languages have large (though not always welcoming) communities with existing solutions and support. How do those building low-code tools consider how they might prepare documentation, exception handling, and naming? Can low-code tools be examined as a still higher-level programming language? (Akin to how some have suggested we view prompt engineering with code generation tools?)\n\n\n\n @GergelyOrosz via Twitter on Oct 17, 2022 \n\n\nThe explosion of low-code tools to build internal-facing tools is incredible.\nRetool being the best-known one, and Appsmith, Bubble, Budibase, Internal .io, Softr, Superblocks, Tooljet and so many more show that there’s a big shift in how companies want to build internal tools.\n\n\n\n\n\n\n\n@GergelyOrosz via Twitter on Oct 17, 2022 \n\nThe explosion of low-code tools to build internal-facing tools is incredible.\nRetool being the best-known one, and Appsmith, Bubble, Budibase, Internal .io, Softr, Superblocks, Tooljet and so many more show that there’s a big shift in how companies want to build internal tools.\n\n\n\n", "snippet": "\n", "url": "/2022/10/18/low-code-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "updates-2022-10-17-griffin2022search-accepted", "type": "posts", "title": "My paper with Emma Lurie was accepted", "author": "Daniel Griffin", "date": "2022-10-17 00:00:00 -0700", "category": "", "tags": "[]", "content": "\n \n \n \n \n October 17th, 2022: My paper with Emma Lurie was accepted\n \n \n \n 🎉 My paper with Emma Lurie was accepted at New Media & Society (initially presented at a Data & Society workshop in early 2022: The Social Life of Algorithmic Harms)\n\n \n \n \n \n \n \n \n \n \n \n\n\n", "snippet": "

    🎉 My paper with Emma Lurie was accepted at New Media & Society (initially presented at a Data & Society workshop in early 2022: The Social Life of Algorithmic Harms)

    \n", "url": "/updates/2022/10/17/griffin2022search-accepted/", "snippet_image": "griffin2022search_accepted.png", "snippet_image_alt": "image of griffin2022search_accepted paper", "snippet_image_class": "paper_image" } , { "id": "2022-10-16-laughing-at-searches", "type": "posts", "title": "laughing at searches", "author": "Daniel Griffin", "date": "2022-10-16 00:00:00 -0700", "category": "", "tags": "[]", "content": "*My PhD dissertation looks at jokes made about searching. Shared self- & group-directed joking among data engineers construct an appropriate reliance on web searching at work for work.\nThey tell the jokes to connect, test and re-see rather than stigmatize the searching practices.\nhttps://web.archive.org/web/20221017122833/https://twitter.com/JurassicArse/status/1581321601013886978\nBut they generally keep their web searches private so people don’t laugh at them or otherwise judge and treat them poorly. While searching is accepted, individual searches are recognized as too intimate to share. Could it be otherwise?\nWhat if instead we could find ways to share some of our searches, our curiosity, with others in ways that drive new wonderings—letting our questions spread (and challenge what searching the web might look like)? The replies to this child’s searches shows some of what is possible.\nSo can we use search jokes as “entry points” (Burrell 2009) to defamiliarize (Bell et al. 2005) and join as people “make, unmake and remake the search engine” (Sundin et al. 2017) & “imagine search with a variety of other possibilities” (Noble 2018).\n\n\ncitations:\n\nBell et al.’s “Making by making strange: Defamiliarization and the design of domestic technologies” (2005), in ACM Transactions on Computer-Human Interaction (TOCHI). https://doi.org/10.1145/1067860.1067862 [bell2005making]\nBurrell’s “The Field Site as a Network: A Strategy for Locating Ethnographic Research” (2009), in Field Methods. https://doi.org/10.1177/1525822X08329699 [burrell2009field]\nNoble’s “Algorithms of Oppression How Search Engines Reinforce Racism” (2018), from New York University Press. [noble2018algorithms]\nSundin et al.’s “The search-ification of everyday life and the mundane-ification of search” (2017), in Journal of Documentation. https://doi.org/10.1108/JD-06-2016-0081 [sundin2017search]\n\n\n\n*This post is drawn from a short Twitter thread.\n", "snippet": "\n", "url": "/2022/10/16/laughing-at-searches/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "updates-2022-09-29-goldenfein2022platforming-published", "type": "posts", "title": "My paper with Jake Goldenfein was published", "author": "Daniel Griffin", "date": "2022-09-29 00:00:00 -0700", "category": "", "tags": "[]", "content": "\n \n \n \n \n September 29th, 2022: My paper with Jake Goldenfein was published\n \n \n \n 📄 My paper with Jake Goldenfein was published: Goldenfein, J. & Griffin, D. (2022). Google Scholar – Platforming the scholarly economy. Internet Policy Review, 11(3). https://doi.org/10.14763/2022.3.1671 [goldenfein2022platforming]\n\n \n \n \n \n \n \n \n \n \n \n", "snippet": "

    📄 My paper with Jake Goldenfein was published: Goldenfein, J. & Griffin, D. (2022). Google Scholar – Platforming the scholarly economy. Internet Policy Review, 11(3). https://doi.org/10.14763/2022.3.1671 [goldenfein2022platforming]

    \n", "url": "/updates/2022/09/29/goldenfein2022platforming-published/", "snippet_image": "goldenfein2022platforming.png", "snippet_image_alt": "image of goldenfein2022platforming paper", "snippet_image_class": "paper_image" } , { "id": "tweets-2022-08-15-imagining-a-beneficent-search-engine", "type": "posts", "title": "Imagining a beneficent search engine", "author": "Daniel Griffin", "date": "2022-08-15 00:00:00 -0700", "category": "", "tags": "[speculative-design, null-results]", "content": "\n\n@danielsgriffin via Twitter on Aug 15, 2022 \n\n“Imagining a beneficent search engine: Content advisories and what-if Google were powerful & brave”\nHT: now-deleted Twitter account’s thread: “Google is so powerful that it “hides” other search systems from us. We just don’t know the existence of most of them. Here’s a list…\"\n\n\n\n\n\nText of image:\n\nscreenshot: A mock Google search page: Query: [insert query here]\nIt looks like there aren’t many great matches for your search in our index!\nWant help reformulating your query? Check out these free external guides for domain-specific advice from community-experts on identifying and revising queries for your searches.\nNeed help choosing other search systems? Here is a community-managed open source table for selecting search systems: [insert filterable list of search engines with distinct indexes or filtering/interaction features (inc. Internet Archive, government and library web-based search systems, competitor search engines, experimental search engines), links to and community-written guides to question-asking & exploratory browsing on forums and other social media platforms (inc. expert comments on safety, privacy, & transparency reports like links to Ranking Digital Rights, etc.), links to locale-specific librarian desk reference services, collaboration with Wikimedia: ‘how to search Wikimedia’. [include permalink to this table]]\nWant to learn more about this content advisory? Click here to read this last month’s community ombudsperson’s public audit of ‘query-match content advisories’. This includes statistics from our systems and feedback from searchers, representatives of these other search systems, and community stakeholders.\n\n\n\nCurrently: Google [cetaxisd] “It looks like there aren’t many great matches for your search Try using words that might appear on the page you’re looking for. For example,”cake recipes\" instead of “how to make a cake.” Need help? Check out other tips for searching on Google.\"\n\n\n\n\nMy mockup of a beneficent search engine is not meant to be a suggestion, but a speculation. What if the dominant search engine were such that it would admit such a resource? What if we were such that it would willingly do so? What might we learn from its absence?\n\n\n\nNote: “content advisory” is language from a recent Google post. Here is a link to that post (1: see: “Expanding content advisories for information gaps”) & an earlier one re the feature (2). [links are not endorsements]\n\n\n\nhttps://blog.google/products/search/information-literacy/\n\n\nhttps://www.blog.google/products/search/getting-great-matches-google-search/\n\n\n\n\nInspiration for what-if:\n\n\n@danielsgriffin via Twitter on Aug 14, 2022 \n\nThis thread helps me imagine a what-if:\nImagine a beneficent Google that, instead of its OK/patronizing/apologia “content advisories” with “It looks like there aren’t any great matches for your search”, pointed users to other search systems.\n\n\n\n@A_Daneshzadeh via Twitter on Aug 14, 2022 \n\nGoogle is so powerful that it “hides” other search systems from us. We just don’t know the existence of most of them. Here’s a list of sites you may have never heard of, it’s how we overcome the madness:\n\n\n\nThe quoted-tweet is now deleted, but replies and quote-tweets are still available.The original tweet is also available at Archive.org\n\n\n\n\n\n\nThis page was published on 2023-06-27.\nUpdated on 2023-07-11: updated tweet display to cards.\n\n\n", "snippet": "\n", "url": "/tweets/2022/08/15/imagining-a-beneficent-search-engine/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-2022-02-01-to-paste-type-immediately", "type": "posts", "title": "to paste/type immediately", "author": "Daniel Griffin", "date": "2022-02-01 00:00:00 -0800", "category": "", "tags": "[micro interactions in search]", "content": "\n\n@danielsgriffin via Twitter on Feb 1, 2022 \n\n\nLoading a page to search I aim to paste/type immediately, which needs the cursor in the search box.\nworks: B, DDG, Ecosia, G, Neeva, SS, You, etc. web.​archive.​org WorldCat\ndoes NOT work*: lib.​berkeley.​edu (?!) openlibrary.​org archive.​org\n\n\n\nGithub​.com doesn’t paste, and doesn’t show a blinking cursor, but it does put typed characters (after using the ‘s’ shortcut**) into the search box. Stack Overflow doesn’t have the cursor in the box, and also forces (those not logged in) into a CAPTCHA flow.***\n\n\n\n___ * These each do use OpenSearch Query Syntax(?) that enables search from the address bar. ** I stumbled on this, tapping frustrated, then confirmed. *** You must “Enable keyboard shortcuts” with a profile via settings to enable ‘s’ to focus on the search box in Stack Overflow.\n\n\n\n", "snippet": "\n", "url": "/tweets/2022/02/01/to-paste-type-immediately/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2019-09-14-advertising-information-retrieval-interests", "type": "posts", "title": "advertising information retrieval interests", "author": "Daniel Griffin", "date": "2019-09-14 00:00:00 -0700", "category": "", "tags": "[]", "content": "I wrote some initial rambling musings on finding new running routes a few months ago: learn how to google trail routes\nAnother way to find new running routes (or, say in the case of my PhD research, stories of searching) is to present oneself to others as interested in hearing about them. Other people can be “human search intermediaries”1. I love hearing stories about searching troubles, successes, and surprises.\nI don’t always love getting targeted advertising, but that is another manifestation of this general idea. This morning Reddit showed me an ad, a promoted tweet, with a San Francisco running routes guide. I’m assuming this is because I’m located in the Bay Area and have joined the r/Ultramarathon and r/AdvancedRunning subreddits. (I actually don’t know how targeted advertising works on Reddit.)\n\nPromoted post in Reddit\n\nAside: If you go to the actual promoted post, text on the bottom says: “These routes were subjectively pulled form the most popular routes in SF by unique user counts.” Then it provides, as internal reference perhaps, a link to UnderArmour’s Atlassian Wiki Space for Data Science that doesn’t seem to be publicly accessible.\n\n\n\n\nI draw this phrase from a sentence in O’Day and Jeffries:\n\nTo understand information delivery requirements, we conducted a study of how library clients deal with the information they get back from human intermediaries. [emphasis added]\n\nO’Day, V. L., & Jeffries, R. (1993, May). Orienteering in an information landscape: how information seekers get from here to there. In Proceedings of the INTERACT’93 and CHI’93 conference on Human factors in computing systems (pp. 438-445). ACM.\nWriting this post now, I note that the exact phrase, “human search intermediaries” appears in the information retrieval literature throughout the 1980s and 1990s.↩︎\n\n\n", "snippet": "\n", "url": "/2019/09/14/advertising-information-retrieval-interests/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-2019-08-25-postcolonial-localization-in-search", "type": "posts", "title": "postcolonial localization in search", "author": "Daniel Griffin", "date": "2019-08-25 00:00:00 -0700", "category": "", "tags": "[localization technologies]", "content": "\n\n@danielsgriffin via Twitter on Aug 25, 2019 \n\nImagined Postcolonial Emendations in Searching Q: How might we imagine Google, its cultural searching assumptions, and its “localization” in search suggestions through a postcolonial discourse?\n\n\n\n\nI tweeted out the above question, pointing to an earlier thread, in this quoted tweet on a critical incident regarding #NoMeCuidanMeViolan and Google search suggestions.\n\n\n@danielsgriffin via Twitter on Aug 23, 2019 \n\nFn11. In addition to forthcoming work 🤞, see: @mindyjiang’s “Search concentration, bias, and parochialism” (2014): “When searchers are bounded by “the local,” including its political arrangement, cultural content, and ideological outlook,…\n\n\n\n…the diffusion of information, knowledge, and ideas globally through borderless search drifts further away.\" https://doi.org/10.1111/jcom.12126\n\n\n\n\n“postcolonial discourse – that is, a discourse centered on the questions of power, authority, legitimacy, participation, and intelligibility in the contexts of cultural encounter, particularly in the context of contemporary globalization.” - Irani et al. (2010)\n\n\n\nOriginal: “Defined by Irani et al.’s (2010) framework of postcolonial computing, ‘‘a project of understanding how all design research and practice is culturally located and power laden,’’ we sought to critically examine the cultural assumptions of blocking technologies…”\n\n\nThe above is a quotation from Jonas & Burrell (2019).\n\n\n\nEmended: “Defined by Irani et al.’s (2010) framework of postcolonial computing, ‘‘a project of understanding how all design research and practice is culturally located and power laden,’’ we sought to critically examine the cultural assumptions of [\"localization\"] technologies…”\n\n\n\nJonas & Burrell (2019)\nIrani et al. (2010)\n\n\n\n\nFootnotes omitted.\n\n\nThis page was published on 2019-09-09.\nUpdated on 2023-07-11: updated tweet display to cards.\n\n\n\n\nIrani, L., Vertesi, J., Dourish, P., Philip, K., & Grinter, R. E. (2010). Postcolonial computing: A lens on design and development. Proceedings of the 28th International Conference on Human Factors in Computing Systems - Chi ’10, 1311. https://doi.org/10.1145/1753326.1753522\n\n\nJonas, A., & Burrell, J. (2019). Friction, snake oil, and weird countries: Cybersecurity systems could deepen global inequality through regional blocking. Big Data & Society, 6(1), 2053951719835238. https://doi.org/10.1177/2053951719835238\n\n\n", "snippet": "\n", "url": "/tweets/2019/08/25/postcolonial-localization-in-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-2019-08-20-searching-temporally", "type": "posts", "title": "Searching Temporally?", "author": "Daniel Griffin", "date": "2019-08-20 00:00:00 -0700", "category": "", "tags": "[temporal searching, micro interactions in search]", "content": "\n\nCurrently only a small portion of this tweet is recorded here, see the thread at the link.\n\n\n@danielsgriffin via Twitter on Feb 1, 2022 \n\n*Searching Temporally?* [Disclaimer: This (the choices and effects of availability/affordance of temporal search operators) isn’t my research focus. But I’d love to read work on it!]\n\n[ . . . ]\n\n\n\n[ . . . ] indicates omission added.\n\n\n", "snippet": "\n", "url": "/tweets/2019/08/20/searching-temporally/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-2019-08-20-pressing-enter-in-an-empty-search-box", "type": "posts", "title": "pressing enter in an empty search box", "author": "Daniel Griffin", "date": "2019-08-20 00:00:00 -0700", "category": "", "tags": "[micro interactions in search]", "content": "\n\n@danielsgriffin via Twitter on Feb 1, 2022 \n\nBonus: @StackOverflow also has a nifty feature whereby pressing enter in an empty search box sends you to a Search page with a handy and clear link to “Advanced Search Tips” (though the screenshot re searching dates above is from a further link to their Help pages).\n\n\n Screenshot collected from the linked-tweet.\n\n\n@GitHub does respond to the user action and provide something useful though slightly shaming? (helpful links also provided)\n\n Screenshot collected from the linked-tweet.\n\n\nGmail and Twitter simply ignore the user’s attempt. (Though perhaps they are actually logging such unexpected behavior to better inform their advertising models…)\n\n\n\n", "snippet": "\n", "url": "/tweets/2019/08/20/pressing-enter-in-an-empty-search-box/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2019-05-30-learn-how-to-google-trail-routes", "type": "posts", "title": "learn how to google trail routes", "author": "Daniel Griffin", "date": "2019-05-30 00:00:00 -0700", "category": "", "tags": "[running]", "content": "Initial tentative rambling musings on this perfect intersection of my trail running & PhD obsessions:\n\n\nBased on messages I get to all my social media accounts y’all need to learn how to google trail routes for when you’re on vacation. Also, check out caltopo for mapping your own routes and Gaia - a great phone app. Wish I had time to research all your runs for you but I don’t!\n\n— Candice Burt ((???)) May 29, 2019\n\n\nMy attention to searching related comments is rapt. Sometimes I feel like I everywhere see confessions of lack of skill or experience (or a magic touch), demands for others to trust or not trust a certain search engine or search approach, and comments on the cost to some from an apparent tendency of others to not search (ex. ghost towns, pantene, the google medical degree meme, proximal social search sharing, the search sublime, did the hol, [Michael Albert Quinn Kaiser], search engine filtering, searchworms, as well as the gamut of LMGTFY mockery and confessions of googling). I’m very interesting not only in how the tools function (and the shifts and tradeoffs in handoffs from people to tools or one tool to new tool), but in how we participate in and talk about how they function.\nAnd I’m also a bit of a trail runner—I love getting lost in Tilden/Wildcat or Marin and have tried my feet & heart at several trail ultramarathons—including finishing the San Diego 100, Rocky Raccoon 100, and Orcas Island 100 (and failing and learning from truly searching experiences at the Headlands 100 and Kodiak 100). There is something special about running on trails and something special about the trail running community that has attracted my interest these last few years.\nThis particular example fit well enough within my twin interests—and those larger ethical questions of the design/use of tools and/or/versus humans—that I figured I’d play it out some here.\nQuestions\nThese questions, then, are adapted from those I’ve been thinking about for my dissertation research. They are oriented towards this community and their questions.\n\nWhen do we reach out to, and perhaps burden, trusted human authorities because we mistrust (or perhaps miscredit) ourselves, search engines (and other search tools), or search results?\nHow do we scaffold our & others ability to search better?\nWhat is the role of considering our own/others time? What is the role of human relationships forged or fractured?\nOne distinctive feature of trail ultras are the little ribbons set as trail “blazes” (perhaps called dragons (1,2)). We blaze the trails but how do we better trail blaze to share our discovery path? How do we let our light shine?\n\nResources: People and Tools\nMentioned by Candice in that tweet: Gaia GPS & CalTopo\nIn replies: Trail Run Project, Strava segments, AllTrails, Suunto heatmaps, UltraRunnerHQ\nAll the above does require an awareness of the platforms and time, ability, and inclination to use it for one’s purposes.\nGoogling how to [learn how to google trail routes]\nA quick Google search of [finding new running routes] — and an initial scan:\n\nMolly Hurford’s “How to Find a Running Route When You’re Traveling” (2017) on MapMyRun’s blog suggests a heavy reliance on a tool ranking routes by popularity—any acknowledgment of associated risks?\nBryon Powell’s “How to Find Running Trails” (2011) on iRunFar does suggest asking human search intermediaries (in addition to other resources).\nThe discussion in a forum post on Singletrack (“Finding new (running) routes – strava? Or something else” (2017)) reveals potential for privacy harms in some of the more app-intensive suggestions.\n\nRecall Matt Burgess’s article in Wired from January 2018: “Strava’s data lets anyone see the names (and heart rates) of people exercising on military bases”\n\nCheckout this discussion of other applications: David Webster’s “Use of Strava Heatmaps in Search and Rescue” (2018)\nI’m not sure what to make of government use of the “Strava Metro” data. It makes me think of a 2017 CTSP project: Assessing Race and Income Disparities in Crowdsourced Safety Data Collection that informed UC Berkeley’s SafeTREC’s StreetStory.\n\n\n\nOne response to Candice’s tweet revealed the safety-consciousness that some must maintain while looking for runs:\n\n\nThis is ridiculous. I search for Strava segments near where I’m going then check out the routes that the segment is part of. Also helps me see whether women run there early morning or in the evening.\n\n— Jacqui Haggland ((???)) May 30, 2019\n\n\nSee also Rosie Spinks’s “Using a fitness app taught me the scary truth about why privacy settings are a feminist issue” in Quartz (2017) and Lucia Deng’s ““I’m Here For The Waffles”\" (2016).\nFurther resources?\nI’m intrigued with what people identify (in the links below) as a resource or tactic and the amount of explication or exemplification they provide, whether they imagine varying situations, goals, and abilities or not. I’m thinking about where the people (and the community and environment) are in these searching stories: what are they doing? what is happening to them? what futures are they calling into being? what worlds are they assuming/anticipating/asking exist?\nHere is a tweet—from one year ago—with dozens of suggestions in reply (not constrained to trails)—including asking human search intermediaries (locals, hotel staff, local running stores, social media):\n\n\nQ5: If you're in a new location, who or what do you consult for suggestions and recommendations for places to run? #BibChat pic.twitter.com/wpObcbBhG0\n\n— BibRave ((???)) May 30, 2018\n\n\nTwo years ago:\n\n\nQ3: When running on trips/vacation, how do you find your routes? #RunChat pic.twitter.com/X7F9pvA57L\n\n— #RunChat 🏃 ((???)) August 14, 2017\n\n\nHere’s a question from the r/AdvancedRunning subreddit: “Where do people go to find good running routes and/or tracks when travelling?”—the range of resources used, and information scents suggested, are fascinating. The affordances of these various paths of searching are varied. The goals and constraints of the many runners are also different—from “finding the local gems” to any place to get a workout in or to simply explore.\nPart of the problem raised by Candice is that different people are going to be able to respond to queries from different people (with varying goals) with different facility and different costs & benefits to themselves and the group. Are people asking for advice on how to find any new routes in some random place or asking for a favorite route at a particular location? Candice sells her services in route finding and planning (and branding, food, first aid, and search & rescue) via her unimaginable races. She also broadcasts training runs on social media—giving to the community by providing some of the content they might be googling for (I for one, learned about Gaia GPS & CalTopo from her running manuals). Many of the mentioned human intermediaries in the threads above may have a different calculus. Employees of running stores may have a mix of incentives. A concierge or cab driver may have other costs or capabilities. What is the manual that ultramarathoners can turn to when told, essentially(?), to RTFM?\nIt also makes me think about how sometimes the query itself is secondary. Some people may ask a question of a person not because they cannot themselves google trail routes but in order to develop or maintain a relationship or for external social reward. As one respondent to Candice wrote: > running a custom route by (???) probably comes with better bragging rights…\nWhile most of my new trail runs are speculative and simply hoping for serendipity (and water sources), two of my “runs” were the outcome of a single social media-found human search intermediary. A slogging snow-training run/scramble up Castle Peak (near Donner Pass up by Tahoe): route, pictures.\nSometimes while traveling in cities I’ve just drawn big circles on a map (Paris, London — pace in those is clearly grossly miscalculated), hoped for the best, and set out (adapting as I get lost, hungry, or obstructed). One of my city-exploration runs was a 20-mile route through Baltimore with a local runner as guide (I’d asked family (human search intermediary) for route suggestions and my aunt set me up w/ a distance runner from her running group—I now know that this route was in the “white L”, a racial divide visible even on the global public Strava Heatmap). This raises again questions about what is/isn’t (made) (in)visible on those privilege- and company-curated digital traces of runs.\nI can perhaps be a human search intermediary. As a start:\n\n\nMy personal Strava Heatmap if anyone is looking for trails in the Bay Area—but note that Strava only shows here the trails followed, not the trails loved or hated, the roads I was reckless to run on, or the best trails to enjoy a summer storm—PageRank for routes, popularity only: pic.twitter.com/dcfAR6rSnO\n\n— Daniel Griffin ((???)) May 30, 2019\n\n\nI should note that multiple times I’ve responded to queries about trails in the Bay Area with my heatmap above. But it has been more, perhaps, to provide hope and to signal some legitimacy? Intended as the start of a conversation and not the end. (Too often, perhaps, we finish searches when they should’ve only just begun.)\nI’ve only asked Candice to plan a route once: the Bigfoot 200\nCandice followed up her tweet yesterday with a post today on Instagram: > I use running as a way of exploring and experiencing the world, to push myself to learn more about any place I am traveling to whether it be city of mountain. I use running to get away from civilization and back to nature, to get to know where I live in a deeper and more meaningful way. Who else uses running to explore the areas you live in/travel to?\nIn addition to providing pointers to resources in that tweet, Candice has previously provided straightforward search guidance—a searching blaze: > How do I find trails in new towns? Drive toward the best looking Mountains 🏃⛰🌞🌻🌸\n \n\n2019-05-31: This post is referenced in this thread:\n\n\nI was reminded of this when looking through old tweets and thinking about how we mark trails (w/ blazes or dragons)[1] and might mark (or trace) search paths[2].The remarks from Grudin remind me of this more recent tweet and replies:https://t.co/69Wklr9lbO\n\n— Daniel Griffin ((???)) May 31, 2019\n\n\n", "snippet": "\n", "url": "/2019/05/30/learn-how-to-google-trail-routes/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-2019-05-28-searching-entangled-and-enfolded", "type": "posts", "title": "searching entangled and enfolded", "author": "Daniel Griffin", "date": "2019-05-28 00:00:00 -0700", "category": "", "tags": "[automation bias]", "content": "\n\n@danielsgriffin via Twitter on May 28, 2019 \n\nEx.: searching entangled & enfoldedHow does Google Search account for its inflation of any top-ranked results’ later PageRank metric? How do we account for the authority imbued throughout the top results? For the Matthew Effect on the plutocratic web?\n\n\n\n@pdgoldman via Twitter on May 28, 2019 \n\nWhat’s the phrase to describe when an algorithm doesn’t take into effect it’s own influence on an outcome?\n\n\n\n\n\nMy thread, at link, below that tweet is a surface engagement with:\n\nOrlikowski’s “Sociomaterial Practices: Exploring Technology at Work” (2007)\nIntrona’s “Maintaining the reversibility of foldings: Making the ethics (politics) of information technology visible” (2007)\nHayles’s “Unthought: The Power of the Cognitive Nonconscious” (2017) and handy hammers and trowels.\n\nBut it also reminded me of some of my earliest deep engagement with search/ing:\n\n\n@danielsgriffin via Twitter on May 23, 2017 \n\nWhat do we call the production of epistemic automaticity from Google’s algorithms’ automated search results?\n\n\n\nSee also search automation bias (SAB).\n\n\n\nAnd this bit from earlier this spring (April 5th, 2019):\n\n\n@danielsgriffin via Twitter on Feb 1, 2022 \n\nInteresting convo at “Governing Machines” re CYA notices re a machine “not meant to be used as a sole source of information” versus “automation bias” documented in practice (where a sort of epistemic automaticity foregoes reflection or seeking additional sources of information?).\n\n\n\n\n\n\nOrlikowski (2007)\nIntrona (2007)\nHayles (2017)\n\n\n\nThis page was published on 2019-05-30. Updated on 2023-07-10: updated tweet display to cards.\n\n\n\n\nHayles, N. K. (2017). Unthought: The power of the cognitive nonconscious. University of Chicago Press.\n\n\nIntrona, L. D. (2007). Maintaining the reversibility of foldings: Making the ethics (politics) of information technology visible. Ethics Inf Technol, 9(1), 11–25. https://doi.org/10.1007/s10676-006-9133-z\n\n\nOrlikowski, W. J. (2007). Sociomaterial practices: Exploring technology at work. Organization Studies, 28(9), 1435–1448. https://doi.org/10.1177/0170840607081138\n\n\n", "snippet": "\n", "url": "/tweets/2019/05/28/searching-entangled-and-enfolded/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-2018-04-04-ad-z-njinz-tum", "type": "posts", "title": "ad z'njinz'tum", "author": "Daniel Griffin", "date": "2018-04-04 00:00:00 -0700", "category": "", "tags": "[]", "content": "\n\n@danielsgriffin via Twitter on Apr 4, 2018 \n\nwhen OCR copying errors generate art\n\n\nThis beautiful Futurese: “ad z’njinz’tum”\n\n\nFar more arresting than boring Latin: “ad infinitum”\n\n\n\n\n\nA quick Google search for the exact phrase (“ad z’njinz’tum”) returns Walter Lippmann’s “The Phantom Public” (my source for the above) and leads me to Hans Vaihinger’s \"The Philosophy of ‘As if’*. ______ * Relevant to our Info218 discussion tomorrow on information and truth.\n\nA quick DuckDuckGo search for the exact phrase (“ad z’njinz’tum”) returns nothing.\n\nA quick Bing search for the exact phrase (“ad z’njinz’tum”) returns a morass.\n\n\n\n\n\nGoogle [ “ad z’njinz’tum” ]\n\n\n Screenshot taken manually at: 2019-05-30 19:20:49 \n\n\n\n\n\nDuckDuckGo [ “ad z’njinz’tum” ]\n\n\n Screenshot taken manually at: 2019-05-30 19:23:28 \n\n\n\n\n\nBing [ “ad z’njinz’tum” ]\n\n\n Screenshot taken manually at: 2019-05-30 19:22:27 \n\n\n\n\nThis page was published on 2019-05-30.\nUpdated on 2022-10-19:\n\nSee a related post: end-of-line hyphenation\n\nUpdated on 2023-07-10: updated tweet display to cards.\n\n\n", "snippet": "\n", "url": "/tweets/2018/04/04/ad-z'njinz'tum/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2017-08-19-the-bigfoot-proof", "type": "posts", "title": "the bigfoot proof", "author": "Daniel Griffin", "date": "2017-08-19 00:00:00 -0700", "category": "", "tags": "[running]", "content": "An account of my Bigfoot 200.\nAcknowledgments\nAt the start of this writing I must acknowledge my father who was there for me at the start of the race, there well before the start, and there at all the key points along the way. He has long supported me in my wandering adventures. My dad is a bit of a dreamer. I’ve got a lot of that too. But we don’t just dream. We also attempt to live out our adventures. Particularly dear to my heart was his first time crewing me in my first one-hundred back in June 2015 at the San Diego 100. There he helped nurse me back from the pits of dehydration and despair and provided the perfect mix of compelling and comforting encouragement.\nI was ecstatic when he told me prior to this race that he would be completely available for me throughout the long weekend. From merely a logistical standpoint his presence would remove any requirement for me to deal with the stress and complexity of planning and prepping drop bags for the various aid stations. Then he drove me the hours to the pre-race festivities, a big pre-race meal in Vancouver, and to the start the next day. Once the race started he shuttled bags of gear to every single crew-accessible aid station, separated by hours of cautious driving on winding and often washed-out mountain roads. As I arrived at an aid station he would have my gear at hand, ready to help change my socks, refill my water and gummy bear baggies, replace batteries for and test my headlamp, and coordinate the support from the wonderful aid station volunteers. While I attempted to sleep fitfully in the back of his vehicle, he forewent sleep in the front—constantly sacrificing his comforts for mine. While I had hot food prepped for me at the aid stations, he had cold food from his car. He faced the same dirty heat and wet cold that I did but without the fanfare.\nAll this and more that I don’t know he did for me for more than four days. While much of the race, for me, was spent alone in the woods or along the ridge lines, some of the most key points were the actions in the aid stations. He helped ensure that I cleaned my feet and put them up and that I ate and drank properly at each station. Then he helped see me off. That decision to leave for another leg was never borne lightly. When I was off enjoying the trails, he was busying gathering intel from other runners, crews, and aid station volunteers about the next leg and then helping me plan to adapt to the changing environment and our changing understanding of it and my condition. In the thick of the race he was still dreaming, scheming with me how we could do bigger and better next time. Hopefully for next time we’ll find a trail race to run together.\nI thank my mother for what I do earnestly believe is an abundance of prudence that I brought to the running of this race. I thank also my family and friends who, whether they believed in me or not, never questioned my sincerity in attempting this run. I’m glad my baby brother and his friend came to support me on the first day. I hope his friends at school no longer think my doing a 200-mile race is a tall tale. I must acknowledge the amazing volunteers at the aid stations who were inspiring in many ways, the Donovan family for their inspiration and support for my crew, and the race director and her team for putting together such a wild adventure. I’m grateful for my fellow runners and am excited to follow their future adventures. I especially thank Emily for being there with me on my failure at the Kodiak 100 last year and talking me through that to a return and the adventurous success, with her crewing, at the Orcas Island 100.\n\nStatistics\n\nDistance: 206.5 miles\nElevation gain: +42,506’\nElevation loss: -43,906’\nFinish time: 96:20:18\nStarters: 107\nFinishers: 78 (72%)\n\nResults from UltraSignup.com\n\nReflections\n\nQ.E.D.\n\nWhen I finished the race I posted a picture of my belt buckle and the letters Q.E.D. Actively imagining what it would be like to finish I had settled on that quick short post early in the race. If we think back to the hazy days of high school geometry proofs we might recall it stands for quod erat demonstrandum or “what was to be demonstrated.” I figured it was a way for me to say, “See, I did it!” Over the miles and days the meaning changed for me. I still accomplished something. But now it was as though the schoolmaster was saying Q.E.D. after leading us through a particularly difficult problem. This Q.E.D. was an acknowledgment of working through the problem posed by the race director. Now I’ve got to see if I’ve learned anything from it.\nA researcher studying the post-eruption succession of the ecology around Mount St. Helens has said it is a “a wonderful living laboratory” and that is just what this race was itself. This was a chance to observe myself challenge myself, observe myself amidst the heat, cold, pain, and tedium, and observe myself observing others.\nOn the drive to the start my face was grinning and my arms and legs were trembling—gleeful terror. All that physically manifested fear evaporated as I set about doing. I thought often of the extreme of that fear during the race. While I was still nervous when hearing sounds in the dark or when on wobbly legs over deep cliffs, I never had that same fear. Something about the starting removed it or covered it over. I’m still reflecting on the role of fear in preparing me for the race and in my life.\nMy goal for this race was to finish. To finish healthy. I had not put in any sleep deprivation testing or training and decided right off that I was not inclined to test out hallucinations on the sheer inclines the race director gave us.\nI never confronted the sort of doubts that I lost to in the Headlands 100 or the Kodiak 100 or even those that I barely tearfully bested in the Rocky Raccoon 100 (or survived only with aid station assistance and a volunteered bag of gummy bears at the San Diego 100). Instead I dealt with the nagging concerns about hurting myself. I’m not normally one to shy away from pain. However the distance here meant that it would be all too easy to seriously aggravate minor injuries. Most every step was taken with some small circumspection—looking for anything sharp, slippery, slanted, or that might snag. Even in the lightest moments I was aware that mind over matter had its limits and the race was not entirely in my hands.\nOne of the great things about ultra running is the other runners. Whether by words or by deed they are always inspiring. I am often humbled by my fellow runners. What is particularly humbling is not that anyone is faster than me, but how easy it is to judge another. This race was a renewed reminder that I don’t know the journey that brings someone into my life, what they are going through, or what dreams they have. I will endeavor to bring that lesson into my life. The selfless support from the aid station volunteers and the crews were also a shining example of what I hope I can do as I cross paths with people in my daily life. While some ran without pacers and others ran without crew, no one ran without the support of their fellow runners or the aid stations volunteers and race staff. That is a lesson I hope to live and share with others.\nWhen passing a runner moving slowly on a leg deep into the race I asked how he was doing and I believe he told no lie when he responded, “Never better.” There was pain and frustration for all the runners throughout the race, but there was also adventure and becoming. While his body surely had seen and will see better times and climes, on that climb he had the presence of mind to acknowledge and choose his intentions and attentions.\nAnother refrain from runners was the cheery and chary, “Have fun!” This often seemed to be said with the sincerest sarcasm. While runners may not have set out to have fun and some seriousness may have rightfully consumed their quest, the pumping of one’s legs and lungs through such beautiful and beastly terrain has a way of producing a grim smile if not some moments of unquenchable joy.\nI have more lessons I’m working through still. Lessons of cowardice. Lessons from Melville pried from and plied to the run. More lessons on confidence markers. I hope also to review and reflect on my prior race reports and see what I missed or am missing.\nI am not done with the Bigfoot 200 and it is not done with me. That is not merely clichéd language about a dreamt-of return in 2018 but an acknowledgment of the persistence of the race. Even as I ran that race with memories of my past, I will rerun this race many times to come. As the schoolmaster says in vain and the race director needn’t ever say: you will use this in your life.\n\nLeg by Leg\nWhile one stills runs a race of this distance step by step, leg by leg seems to be a productive way to break it down, both as a runner confronting it and in reflection.\n \nA minimally-detailed map of the course: starting at the bottom of the map south of Mount St. Helens and ending at the top of the map in Randle, WA. The full map of the 2017 course is publicly provided by Destination Trail for the Bigfoot 200 at CalTopo and linked to from the Runner’s Manual.\nMarble Mountain to Blue Lake: 12.2 miles +3,280’ -2,743’\nDay 1: Starting at 0900 (temporally) and 5:40 (spatially with respect to Mount St. Helens) on Friday morning, 106 of us squeezed onto the trails and I fell into a relaxing, though perhaps too quick, pace. We snaked through the trees and then over boulders before winding back down to Blue Lake—completing our first leg clockwise around the mountain.\n \nA bit of the boulders and me (Howie Stern & Scott Rokis Photography).\nBlue Lake (~8 o’clock spatially) to Windy Ridge (~1 o’clock): 18.1 miles +4428’ -3166’\n \nA view of Mount St. Helens through the trees.\nThe heat started to bear down as we gradually moved out of the trees onto the desolated pumice plain created from the pyroclastic flow 37 years ago. We ascended into and out of small canyons with fixed ropes and trudged through varying arid and exposed terrain, over silt-ridden rivers and along sandy hillsides.\n \nImage of my leaping over a small stream in the small canyon in tore into the pumice plain (Howie Stern & Scott Rokis Photography).\nThen a long slog up a gravel road on Windy Ridge to the second aid station. I had stopped for water at a river in the trees, and then a silty river and pure spring on the plain and was clearly suffering a bit from the heat but was generally focused though not quite upbeat. This was a non-crew aid station so I didn’t spend much time and turned back around to head out onto the short and minimal elevation change third leg.\nWindy Ridge to Johnston Ridge: 9.6 miles +1567’ -1487’\n \nThe view of the crater.\nMy attitude quickly turned as heading out I realized I had some cell service so sent a couple messages, started listening to an audiobook of Melville’s Moby Dick, and saw the tremendous crater before me as we went back down the ridge. The book starts right off with some words grasping at why people seek out the sea or other bodies of water and I was reminded of why I run. The biggest grin returned to my face. I was seeking that “the ungraspable phantom of life”.\n \nHeading away from Mount St. Helens, a view of Spirit Lake.\n \nImage from Johnston Ridge of myself running and the crater dominating the background (Howie Stern & Scott Rokis Photography).\nAs evening slowly fell, still struggling from the earlier heat, I moved counterclockwise now farther from the mountain and towards a point just short of the observatory. My father met me and we changed out my socks, cleaned my feet, and I set off again.\nJohnston Ridge to Coldwater Lake: 6.6 miles +412’ -2099’\nI gratefully turned back after ten feet to grab my hiking poles, which I nearly forgot. Darkness fell and we dropped down to the lake on an easy trail. I came into the next station well ahead of schedule. Met my dad for a change of short, shirts, and socks and, with an abundance of prudence and the race director’s words about the next long leg (“Best views of the course, recommend running in daylight if possible.”), I bedded down for several hours. I was only 46.5 miles in but I tossed and turned in the provided tent, attempting to adjust for my sore legs, the cold, and mosquitoes. Without really any solid sleep I began again at 3am.\nColdwater Lake to Norway Pass: 18.7 miles +5105’ -3909’\nDay 2: I set out in the dark along the lake, horribly frightened at one point by a loud splash from some large animal dropping into the water from just off the trail. This route gradually turned to rough and heavily overgrown switch backs up to the ridges. I held up my hiking poles to clear the vegetation from my face and plunged through.\n \nThe depths from which we climbed.\nThe trail came out on some breathtaking views.\n \nAnother view of the crater.\nI happened upon service again and shared some smiley selfies.\n \nA view of the crater and my face.\n \nStunning views as the sun rose.\nI again used poles to help traverse patches of snow.\n \nA view of the crater from Mount Margaret.\nAfter the short but steep Mount Margaret out-and-back, the trail looped around, heavily exposed, down to the next aid station. This is where the heat really started to bring about some chafing in my nether region. I will not be delicate about this because it was not delicate to me. I was horribly hobbled and perplexed as I hadn’t struggled with anything of the sort since my first marathon nine years ago. But, I’ll get back to this. Mount Margaret was the high point of the course and so the race director lied to us in the runner’s manual: “it’s all downhill from here!” I did enjoy sitting for a bit at this aid station, especially the frozen popsicle provided by the volunteers.\nNorway Pass to Elk Pass: 11.1 miles +2037’ -1558’\nThis shouldn’t have been too bad, but the heat was increasing along with the pain in my groin and my fear of being unable to adequately cope. I’d read race reports from years prior of runners finding themselves with significant chafing-induced injuries that built up over the scores of miles and was already seeing its effect on me throughout this leg. I climbed over and around logs from the still recovering blast area and then wound through forested areas that provided some safety from the sun. This next aid station I changed shorts again, and tried my third type of remedy, desperate for some reprieve. With my father’s help I headed out onto the next section.\nElk Pass to Road 9327: 15 miles +2543’ -3144’\nThis segment seemed interminably long as I recklessly played with my gait to adjust for the pain, but the views were incredible.\n \nA clear view of Mount Rainier.\n \nA view of Mount Rainier—“the most prominent and glaciated peak in the contiguous United States”.\nNight fell again and I arrived at the next aid station hopeful that significant rest might alleviate the concern that was foremost in my mind. I ate some food and tucked myself into the back of my dad’s vehicle. I knew I had to resolve the chafing. My pain-induced pace change would not but barely get me across the finish line (I was only 91.3 miles in) and even then I wondered at what the pain or injury might become after two more days. I slept sloppily aslant in the rear of the vehicle constantly sliding onto the pained pads of my feet. When the alarm went off it was pouring down rain. Normally I don’t fear rain but I knew it might wreak havoc on my injury so I attempted sleep for another hour and set off at 5am.\nRoad 9327 to Spencer Butte: 11.2 miles +2817’ -2860’\nDay 3: It was only a slight drizzle as I moved through thick woods. Aggrieved that the chafing remained I held a hand on my groin and was relieved at the relief in the pain. I ran five miles like that, finally resuming a decent pace. I was overjoyed. Grinning. I had the solution, I gleamed, as I comfortably jogged along through woods that felt like home with one hand holding my two hiking poles and the other my shorts. Somehow I had the thought to adjust my shorts by rolling up the waistband to give myself a bit of a self-induced wedgie. With everything held securely in place, I stopped pretending to be Kilian Jornet at Hardrock (which he won with a dislocated shoulder) and resumed the more proper use of both arms. I share those chafing details because it was my reality and such seemingly minor frictions are the reality of runners attempting to cover this distance. I arrived at the next aid station quite pleased with my situation. Though cheerfully corrected the volunteers when they pretended to me that I was over halfway. While I had traversed the most ground I ever had in my life, the 102.5 miles was still shy of halfway because the deceptively named Bigfoot 200 would cover 206.5 miles.\nSpencer Butte to Lewis River: 9.6 miles +1282’ -2852’\n \nA view of falls on Lewis River.\nJogged down the road then gingerly moved down steep trails to the river before heading back up along it, with gorgeous views of falls. Arrived at this station and refueled. The next section was a long one so I ate plenty—noodles and a burger.\nLewis River to Council Bluff: 18.9 miles +5472’ -3315’\nThis section never ended. I’m still running it in my head. Along a creek. Serpentine. Up and down. Then just up as though no one knew what switchbacks were. But ah, the blueberries. At first I stopped to collect and consume but then tried to snag them as I lunged uphill. The blueberries were a mixed blessing. They - and my searches for them - were a tasty distraction but that distraction also forced attention away from my footing. I recklessly encountered more near ankle twists and uncomfortably sharp landings as I’d step on a rough stick or slightly trip over a snagging branch. Generally I had a sharp lookout on the trail. I’d sneak quick glances at the scenery but always pause before appreciating the real vistas. I’d wait for clear trail before taking a sip of water or stop entirely before fishing out a little baggie of gummy bears. After pain increased in the pads of my feet I tried to keep my eyes and hands from the blueberries. The trail suddenly crested and swung around and then down to the next station. Throughout the course the volunteers catered to our needs and dreams. Cooking up hot food to order. Here Richard Kresser, the winner of last year’s race, enthusiastically reassured me that the incredible views described in the runner’s manual were real. That, and the quickly falling light, pushed me out of that aid station much earlier and more optimistically than I’d planned or expected after the prior long leg.\nCouncil Bluff to Chain of Lakes: 9.8 miles +1740’ -1487’\nThe darkness fell much faster than I expected, or I was slower than I’d hoped, but despite missing the views of Adams at sunset I was still more than happy to have pushed through that aid station without much fuss. One of the hardest parts of the race was always the decision to leave the last aid station. I wasn’t considering dropping, but taking it too easy with too much time at the stations would result in the same. Once on a leg the task was clear: one sure step at a time. Time and steps would pass together. I made it into the next station well after dark after a long wide-open mountain road section with the stars exposed far above. I slept again in the back of my dad’s rig. My best and most real sleep of the weekend.\nChain of Lakes to Klickitat: 17.3 miles +3927’ -3900’\nDay 4: Only 65.7 miles to go - in four legs. A quick bit of hot food and fresh socks doubled up with some waterproof socks and, after being reminded about my headlamp strapped unnecessarily atop my head, I stepped out into the early morning light. I was excited about those wet feet river crossings the manual threatened. I was grateful for the safety line and my poles as I wobbly crossed one of the rivers with the current nearly knocking me off my feet.\n \nA view of the mountain through the trees.\nAfter the rivers the trail opened and headed back to higher elevation. I was disappointed that it became more exposed apace with the rising sun but again the views were sustaining.\n \nA view of the mountain above the trees.\n \nA view of the mountain beyond the trees.\nI was aware there was a peak to climb to in another out-and-back and for a half-second assured myself what sat in front of me wasn’t it. Then of course it was. I very slowly stepped up the steep and gravelly trail to Elk Peak and briefly took in the view below the beating sun. Then cautiously moved back down to the trail and then down switchbacks to the next aid station. Here I dried my feet at a campfire, the rivers having been too deep for the waterproof socks to make a difference.\nKlickitat to Twin Sisters: 19.4 miles +4919’ -4987’\nThis leg stands particularly long in my memory in part because once it was over I knew the rest would finally feel fathomable. The route was incredibly well marked so while the trail faded here and there it was easy to stay on track. With this section we started to see scores of fallen logs, simply intentionally left to ensure that we stretched our legs a bit. In the pre-race brief the race director had dryly suggested we bring a step ladder.\n \nA view of a mountain lake.\n \nA view of mountain flowers.\nWhile I love running on soft trails through dark Washington woods the limited line of sight produced a painful monotony and feeling of no progress. It was nice to have the fallen trees to break things up a bit. The marker indicating the start of the out-and-back to the next aid station finally appeared. 2.8 miles to go. Seeing other runners heading back out from the station was heart warming. Darkness fell quickly in those dark woods and I carefully placed each step, wary of the steep sloping sides down out of my sight. Finally pulled into the aid station. I ate plenty of food. My father helped me carefully replace or refill the necessary gear—water, socks, batteries, salt pills, baggies of gummy bears. Then I attempted to get 90 minutes of sleep. I was mighty restless but was raring to go when the alarm when off. I had only 29 miles left. 29 miles. Ha. Too easy.\nTwin Sisters to Owen’s Creek: 16 miles +2592’ -4760’\nDay 5: I set off at 0030. The elevation profile for this leg looks like it is a gentle downhill lope. This is a deception. There was the 2.8 mile largely uphill return to the main trail. Then I rolled through a trail densely overgrown with dew from the bushes reaching over it numbing my legs. After that the final out-and-back up a gnarled and rocky incline to Pompey Peak. I switched off my headlamp and stood there soaking in the view of Mount Rainier silhouetted by the countless stars with the snow reflecting the moonlight. I took my time returning from the peak, fully aware of the steep cliff sides. Then made my way through and over the trees down to an abandoned gravel road graciously covered in moss. In my excitement, and after at one point hearing a heavy rustling in the bushes nearby, I picked up my pace through to the final aid station. I was full of cheer and Geoff Quick at the aid station ensured I was fully of food and gratitude for the opportunity. I handed off most of the emergency gear stuffed in my bag: rain coat, rain pants, headlamp, spare flashlight, and batteries.\nOwen’s Creek to White Pass High School: 13 miles +385’ -1639’\nThen I jogged down the gravel road and, grinning ear to ear, came out on the road to see the morning sun beaming on the farms below. In phases I ran and then barely walked as I excitedly or with forbearance fearing injury approached the finish. I turned into the parking lot and then onto the track. I foolishly fought back tears as I ran three-quarters of the track and was glad I still had my sunglasses on as I crossed the finish line.\n \nImage of my grinning finish with tearwelled eyes obscured from view by sunglasses (Howie Stern & Scott Rokis Photography).\n ## Gear * Vest: Nathan VaporCloud 2-Liter Hydration Vest. I did not use the bladder, but stuffed the back with emergency warm and wet weather gear and sundry other items. * Water: 2x CamelBak Podium Chill 21 oz Insulated Water Bottles in the front of my vest & SteriPEN Adventurer Opti. * Hiking Poles: Black Diamond Alpine Carbon Cork. These were used for many purposes. I used them the entire run. I used them for stability on downhills or near steep edges, sometimes for leverage on uphills but my thighs were generally fine (or it was a sign I was exerting too much). The most common use was to brush back all the brush and branches that crept over the trail. They were also consciously my last resort were I to encounter bigfoot herself. * Shoes: Altra Men’s Superior 2.0 Running Shoe. I alternated through three pairs that my father cleaned and dried for me. * Socks: Injinji 2.0 Men’s Run Original Weight Mini Crew Toesocks. By the last half of the race I was doubling up the socks. * Waterproof socks: RANDY SUN Unisex Waterproof & Breathable Hiking/Trekking/Ski Socks. These are heavy and hot, but suitable for most water protection. The river crossings were too deep for the socks to be of much benefit in this case except for extra padding. * Nipple protection: Large transparent bandages. * Fuel: HARIBO GOLD-BEARS gummy bears. Each 5oz bag was split into two baggies and enough baggies were carried on each leg to get an influx of ~250 calories every hour between aid stations.\n\nRunning and Training Lessons\nI should test out thicker shoes and thicker socks. My toes and feet were generally fine, one small blister on that was no bother, but the pads of my feet ailed me considerably. I have never confronted such a chafing problem before. I will need to closely examine my shorts and the creams I use and put it all through the wringer by intentionally wetting them prior to long runs. Before running risk of hallucinations I do want to do practice runs to see my sleep deprivation limits. Generally I felt well-enough trained, despite not following through on much of my planned training. I had massively increased the amount of cross-training I did. I started doing hot yoga. I think this helped my breathing considerably (which I used to control myself) and my balance and alignment in my running postures. I also started walking a long route to school with a weighted vest. I think that as well as basic body strength exercises well-prepared me for carrying my vest with water and gear all those miles. Seeing the sores produced on the backs, necks, and shoulders of others, I was very grateful I’d well-tested my vest with race-like weight. Also, the unforgettable Mount Baker Ultra Marathon in June was fantastic training for sticking to even when you cannot move as quickly as you might like.\n\nA Bigfoot-Griffin Tussle\n \nA view of a griffin and bigfoot locked in a tussle.\nThe race director requires entrants to mail a Bigfoot (“can be a live specimen, a picture, stuffed animal, sticker, statue, clothing…just needs to be a Bigfoot”) within one month of acceptance into the race. The items are then used in the award ceremony after the race. We also had to report what animal best represented us and why. I said griffin and claimed it was the sworn enemy of the bigfoot. For my item, I commissioned an artist on Etsy to draw “a sketch of a griffin crushing a bigfoot”. At the award ceremony the runner with the best hallucination story, Jean Beaumont (3rd place woman; 75:54:28), won a framed version of this picture. I no longer think of it as a griffin crushing a bigfoot but rather as a tussle that will continue.\nAll photos by me unless indicated otherwise.\n", "snippet": "\n", "url": "/2017/08/19/the-bigfoot-proof/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "2015-06-11-orange-ribbons", "type": "posts", "title": "orange ribbons", "author": "Daniel Griffin", "date": "2015-06-11 00:00:00 -0700", "category": "", "tags": "[]", "content": "Running the San Diego 100 last weekend provided me hours and hours to reflect on running and life. One particular reflection dealt with signals. The course, one hundred point two miles of trail, much of it rock strewn and technical, went on and off a number of different routes. An hour east of San Diego, it covered ground in Mt Laguna Recreational Area, on the Pacific Crest Trail, Noble Canyon and Indian Creek Trails, Rancho Cuyamaca State Park, and around Lake Cuyamaca. The various twists and turns were largely marked with orange surveyor ribbon. Markers were clustered at intersections of the trail to indicate turns and were also placed along the trail every few hundred yards as confirmation signals that the runner was still on track. Since the course was new to me, I paid special attention to these markings.\nNearly halfway through the race, I was trudging along alone and found myself on a wide dirt access road. Most of the route was on fire trails or single tracks so I paid close attention as the markings indicated a turn onto the dirt road. A few moments later I realized I hadn’t seen an orange marking in awhile and was quite worried I’d taken the wrong turn and would have to turn around - something I was not looking forward to. Instead, I of course increased my pace, frantically searching the trees and bushes along the road for little orange ribbons. I would crane my head to try to spy around a bend as soon as I approached it.\nFinally I did see an orange ribbon and, as often was the case during the race, the orange ribbon provided a special bolstering to my step. Smiling, I focused back on the path I was on and saw etched in the soft dirt before me hundreds of footprints clearly from the runners ahead of me. For the next several miles, until I returned to rocky ground and night fell, I had only to look down and spot the treads before me to be assured I was on my path.[1] We so often focus on only looking for the most official of signals. As we forage for information in search of answers, searching for indicators from these formal signals often dominates the locus of our attention. This can be quite a distraction from the actual goal and can keep us from seeing information we already have ready at hand.\nThis reminded me of an experience in overseas where, attempting to confirm whether an individual encountered on a mission was or was not a person of interest, we frantically searched again and again through our files and databases to see if we had biometric data on this target. If so, having the soldiers on the ground conduct an iris scan would have been simple.\nFrustrated that there was not a clear answer whether we had biometrics or not, I tried checking again the similarity between the photograph of the man on the ground and what we had of our target. They clearly looked similar. Then I noticed the height of the particular person of interest listed on our card. It was quite distinctive and upon radioing down that information it was quickly evident that we did not have our man. So enamored were we with high tech gizmos and formal signals that we had wasted considerable time.\nBut, identifying indicators in advance can be incredibly useful. I’m not sure what to do with these two stories. I do appreciate them, though, and in additional to being amusing, I hope they might encourage me to practice a little more intellectual humility and perhaps some creativity and reasoning from first principles.\n____________________ 1. During the night I discovered a new signal. Urine marks all along the trail from the well-hydrated runners ahead of me were clearly visible by my headlamp on the rocky trails. These runners might never have guessed the joy their expedient urinating brought me.\n\n2019-05-31: I reference these orange ribbons in a recent post: learn how to google trail routes. In the process of writing that post I discovered that Candice has called the clothespin + surveyor ribbon assemblage a “dragon”. Here is another piece, from Dustin Smith, writing about dragons and their role in navigation.\n\nA full write-up from the run—my first 100-miler: \n", "snippet": "\n", "url": "/2015/06/11/orange-ribbons/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } ]; var pages = [ { "id": "tags-1990s-search", "type": "pages" , "date": "", "title": "1990s-search tag" , "tags": "", "content": "{% assign tag_name = \"1990s-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"1990s-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"1990s-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/1990s-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-a-quick-search", "type": "pages" , "date": "", "title": "a-quick-search tag" , "tags": "", "content": "{% assign tag_name = \"a-quick-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"a-quick-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"a-quick-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/a-quick-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "search-about", "type": "pages" , "date": "2023-06-14 23:22:54 +0000", "title": "search/About" , "tags": "", "content": "\n\nThis page is about search and searching on this website.\n\n\n A seedful and seamful search interface\nMy goal here is to provide interfaces to my website that explore [\"search seeds\"](/search/?q=\"search+seeds\") [@griffin2022situating] and _seamfulness_ [@eslami2016first]. I will try to expose points of interactions, talking explicitly about keywords and queries, suggesting search operators and keyboard shortcuts, and noting how search tools shape questions and content. I will try to see even results-of-search [@mulligan2018rescripting] as seeds for future querying. I will consider how to engage with [null results](\\search\\?q=sklf) and endeavor to support sharing and repairing searches and search. I will situate the searching and search tools.\n\n\n\n## How to search on this website?\n\nSee [search/Guide](/search/guide).\n\n## How does search work on this website?\n\nSearch on this website is partially an experiment/exercise/exploration in using, filling, and explaining gaps in an outdated JavaScript client-side search library: [Lunr.js](https://lunrjs.com/) ([GitHub](https://github.com/olivernn/lunr.js/)).\nThis search function currently ~~only~~ largely provides 'site search', it only searches the pages of this website (except for that content not indexed, indicated below). It does not currently search the content of PDFs hosted on this website.\n\n\n\nAdded {{ \"2023-08-31 11:12:31 -0700\" | date: \"%B %d, %Y %I:%M %p (%Z)\" }}\nNote: There is some minimal support for external searches, see [\"External results\"](#external-results) (below)\n\n\n\nAdded {{ \"2023-10-16 09:49:46 -0700\" | date: \"%B %d, %Y %I:%M %p (%Z)\" }}\nNote: There is also a minimal working example of [FlexSearch](https://github.com/nextapps-de/flexsearch) running: [FlexSearch Working Example](https://danielsgriffin.com/ppost/2023/09/12/flexsearch-working-example.html)\n\n\n\n\n### [Lunr.js](https://lunrjs.com/)\n\n- client-side search\n - The JavaScript files that run this are available for your review:\n - [`js/vendor/lunr.js`](/js/vendor/lunr.js) (the search library)\n - [`js/search/`](/js/search/) (scripts to serve the results)\n- pre-built index: the index is built prior to publishing the website (see [the guide from Lunr.js](https://lunrjs.com/guides/index_prebuilding.html))\n - The JavaScript file for that is available here:\n - [`build_lunr_index.js`](../scripts/build_lunr_index.js)\n - This takes a JSON index of posts and pages ([`item_index.json`](../assets/item_index.json)) to output the Lunr index itself, available here: [`lunr_index.json`](../assets/lunr_index.json)\n\n{% include lunr/timestamp_of_lunr_index.html %}\n\n#### [Lunrish](https://lunrjs.com/)\n\nSee: [/changes/2023/12/11/notes/](/changes/2023/12/11/notes/)\n\n#### noindex\n\n{% include lunr/list_of_lunr_noindex.html %}\n\n#### stopwords\n\nWords not indexed by Lunr.js. These words are not distinguishing when in a query unless it is an exact phrase search (see below).\n\n{% include lunr/list_of_lunr_stopwords.html %}\n\n\n### Exact phrase searching\n\nLunr.js does not directly support exact phrase searching where spaces appear between search terms. Such searching is minimally made possible in an additional function (`exactSearch`) in [`js/search/results.js`](../js/search/results.js) that conducts a simple `includes` check across the documents in [`item_index.json`](../assets/item_index.json).\n\n\n### Sorting\n\nLunr.js does not directly support sorting. It is added in simple bespoke code in [`js/search/results.js`](../js/search/results.js) and [`js/search/serp.js`](../js/search/serp.js). See more at [`sort:` in search/Guide/](/search/guide/#sort-section)\n\n### Autocomplete\n\nThis is written in vanilla JavaScript in several scripts, including: [`'autocomplete.js`](../js/search/autocomplete.js) and [`'suggestions.js`](../js/search/suggestions.js). These scripts manage the autocomplete `suggestions-list`.\n\n#### hand-curated-queries\n\nHand-curated queries () are drawn from Jekyll `site.data.hand_curated_queries` (and include also `hand_curated_query_snippets`). This is accessed in the JavaScript through Liquid syntax. These queries appear as soon as the search bar is in focus.\n\n#### dynamic results\n\nDynamic results () are drawn from searching the Lunr.js index while the query is being formulated. These results appear as soon as one character has been typed in the search bar.\n\n### SERP (search engine results page)\n\n#### \"Exactly # results\"\n\n\nNotice this says \"Exactly\". This is a commentary on the confusion introduced by how Google reports the number of search results. The count of results by Google in its SERP—as interpreted by many searchers—is inaccurate. See [Randall Munroe for an explication on the XKCD blog: Trochee Chart](https://blog.xkcd.com/2011/02/04/trochee-chart/). See also [a longer explanation from Danny Sullivan from 2010](https://searchengineland.com/why-google-cant-count-results-properly-53559)—including Google's suggested justification for no disclaimer—where he shares Matt Cutts saying \"We’ve talked about the fact that results estimates are just estimates for years\" (Note: there is no contextual help to the searcher on the Google SERP that this is the case, despite what [Google's People + AI Guidebook](https://pair.withgoogle.com/) might say about Explainability + Trust).\n\n\n#### hand-curated snippets\n\nThis label indicates snippets (for search results) that are manually written by the author. (These snippets are written directly into the page YAML.)\n\n#### generated snippets\n\n**These snippets may be inaccurate.** Generated snippets are marked with \n \n \n \n \n \n, include a tooltip explainer, and link here.\n\nThese snippets appear in the search results and in the hamburger list dropdown menu (\n \n) on the top left of each page.\n\nI am implementing these to (loosely) explore the processes to develop and maintain them. This label indicates snippets in the search results that are generated by feeding strings of items in the [`item_index.json`](../assets/item_index.json) to OpenAI's 'gpt-3.5-turbo' model with a simple prompt (full code TK, slight modification of prompt for documents that were longer than the context window and so chunked):\n\n> \\# Task\n> \n> Write a search snippet that briefly summarizes the following document.\n> \n> \\# Content\n> {text}\n\nExample of an **inaccurate** snippet, for [search/Guide](guide):\n\n> This document is the official searching guide from Lunr.js and provides syntax for OR, AND, and NOT searches, as well as searching across specific fields. It also includes information on exact phrase searching, !bangs, wildcards, and boosts. generated snippet\n\n#### External results\n\nI'm experimenting with serving some external results, see\n[\ntype:external\n]. If you own the result and do not wish to be included in my index, please tell me.\n\n\n### Similarity\n\nLunr.js does not directly support similarity searching. Similarity is determined here by running [cosine_similarity (from sklearn)](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.cosine_similarity.html) on embeddings of the pages across the website (in `scripts/update_similars.py`). The SERP will display the 30 \"most similar\" pages to the page queried. See more at [`similar:` in search/Guide/](/search/guide/#similar-section).\n\n\"Similar\" pages are also listed in the hamburger list dropdown menu (\n \n) on the top left of each page (via `js/similars.js`). Currently the five \"most similar\" pages are listed.", "snippet": "\n", "url": "/search/about/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "about", "type": "pages" , "date": "2023-06-17", "title": "About" , "tags": "", "content": "\n\n\nThis page is about Daniel S. Griffin.\n\n\n\nFor information about this website, see [/Site](/site).\n\n\n\n\n# Brief Bio\n\nDaniel S. Griffin has a PhD in Information Science from the UC Berkeley School of Information. His dissertation, [Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership](/diss), explored the use of web search by data engineers. He was an assistant professor at Michigan State University in Spring 2023. While there he developed and taught a course on [Understanding Change in Web Search](courses/s2023-LB322B). While at UC Berkeley, Daniel co-directed UC Berkeley’s [Center for Technology, Society & Policy](https://ctsp.berkeley.edu) from July 2017 to August 2019. He also worked with both the [Algorithmic Fairness and Opacity Group](https://afog.berkeley.edu/)—where he co-organized [The Refusal Conference](https://afog.berkeley.edu/programs/the-refusal-conference) and shared research on [the interaction between searcher's perception of Google and Google's obligation to respect human rights](/shortcuts/mulligan2018rescripting)—and the [Center for Long-Term Cybersecurity](https://cltc.berkeley.edu/)—where he contributed to [Cybersecurity Futures 2020](https://cltc.berkeley.edu/publication/cybersecurity-futures-2020/), a set of _scenario thinking_ scenarios, and presented them in [a keynote at the 2017 Forum International de la Cybersécurité](https://www.youtube.com/watch?v=NEchfsIGtz4). He completed the Master of Information Management and Systems (MIMS) program at the I School in 2016.\n\n\nPrior to graduate school he was an intelligence analyst in the U.S. Army's 82nd Airborne Division. As an undergraduate, he studied philosophy at Whitworth University. In his free time, Daniel enjoys [trail running].\n\n## Focus\nAdded {{ \"2023-10-04 11:59:25 -0700\" | date: \"%B %d, %Y %I:%M %p (%Z)\" }}\n\n_I love curiosity. I love questions. I love working through ignorance._\n\nI am an advocate for those who search.\nI'm passionate about delving deep into search practices and supporting their evolution.\nI explore the dynamics of our searches, from their initial inspiration to their formulation as queries, buffeted or beset by the search system and those around us. \nI promote a diverse search landscape. One where user context, voice, and choice take center stage.\n\nI remain critical of unfounded claims and distracting hyperbole. Nonetheless, I am deeply interested in how generative search and search-like systems have ignited the imaginations of many.\nI believe we can turn this disruption into something better.\nMy interdisciplinary expertise in situating searching positions me to evaluate, critique, and support the evolution of search systems.\nI aim to ensure search systems can be freely learned, critiqued, shared, repaired, and extended.\n\nWe can find better ways to search than the status quo.\n\n## Contact Daniel\n\nI am available for consulting work and discuss searching with reporters (see here for [media mentions](/media)).\n\nI am available to conduct scoreless peer review of scientific research on topics related to web search practices, search engines, and search-like uses of LLM-based systems, with a particular focus on user perceptions, corporate articulations, societal implications, and ethical considerations.\n\n \ndaniel.griffin@berkeley.edu\nhe/him\n/scholar_profiles | \nGitHub | \nTwitter | \nMastodon | \nLinkedIn\n", "snippet": "

    This is the website of Daniel S. Griffin. Daniel S. Griffin has a PhD in Information Science from the UC Berkeley School of Information.

    \n", "url": "/about/", "snippet_image": "shoulder.jpg", "snippet_image_alt": "Picture of Daniel S. Griffin, Ph.D. holding a toddler on his shoulder.", "snippet_image_class": "circle" } , { "id": "diss-abstract", "type": "diss" , "date": "2022-12-16", "title": "Abstract" , "tags": "[diss]", "content": "When does web search work? There is a significant amount of research showing where and how web search seems to fail. Researchers identify various contributing causes of web search breakdowns: the for-profit orientation of advertising driven companies, racial capitalism, the agonistic playing field with search engine optimizers and others trying to game the algorithm, or perhaps ‘user error’. Suggestions for making web search work for more people more of the time include: regulations aimed at competition or the design of the search interface; changing the conception of, metrics for, and evaluation of relevance; allowing subjects of search queries some space of their own on the results pages to speak back; proposals for public search engines; and better-informed users of search.\nI take a different tack. Rather than focusing on identifying and remediating points of failure, I seek to learn from successful searchers how they make search work. So, I look to data engineers. I closely examine the use of web search in the work practices of data engineering, a highly technical, competitive, and fast changing area. Data engineers are heavily reliant on general-purpose web search. They use it all the time and it seems to work for them. The practical success I report is not determined by some solid ‘gold standard’ metrics or objective standpoint, but by how they have embraced web search and present it as useful and more importantly essential to their work. It is success for their purposes: in gradations, located in practice, and relative to alternatives.\nThrough interviews and document analysis informed by digital ethnography, I use theories from situated learning and sociotechnical systems to explore how and why search works for data engineers. I draw from feminist science and technology studies, the sociology of expertise, situated learning theory, and organizational sociology to explore and position my four core findings.\nFirst, I find that personal knowledge of the technical mechanisms of search plays a limited role in data engineers successful searching. Exploring why and how web search works for data engineers allowed me to probe the role of knowledge about the mechanisms of search. Contrary to dominant literature that views individual ignorance of search mechanisms as contributing to failed searches and search literacy as a necessary, if independently insufficient, path towards mitigating search failures and the harms to which they contribute, I find little evidence that data engineers’ personal knowledge of the mechanisms of search contributes to their successful use of it.\nData engineers receive little formal on-the-job training or mentoring on how to use web search successfully. Data engineers describe web search as a solitary exercise in which they receive little formal guidance. Moreover, data engineers describe web search as a solitary practice. The absence of formal training is surprising given the professions’ admitted heavy reliance on web search. In addition to the absence of formal training, data engineers report little discussion about search practices or collaboration in searching and some discomfort with their heavy reliance. However, I find one form of talk about search, what I call “search confessions”—statements, often hyperbolic, about one’s reliance on web search—to be pervasive and a key way in which the community of data engineers legitimate their heavy reliance on web search and develop and express shared norms about how to use search well.\nSecond, rather than personal knowledge, I find that occupational, professional, and technical components of their work practices contribute to their successful use of search. Expertise embedded in these components of data engineers’ web search practices improve two key search processes: query generation and results evaluation. The work practices of data engineers also decouples the immediate effects of searching from organizational action.\nTo extend the description of successful web search practices, I address how data engineers confront search failure. I look at how they turn to ask colleagues questions when web searching fails and find them performing repair. These sites of coordination and collaboration post-search failure also provide opportunities for broader knowledge sharing and a space to legitimate their work and expertise, both individually and as a profession.\nIf it is normal and acceptable to rely so heavily on search, it may be a surprise that there is so little talk about searching. Data engineers regularly present search as an individual responsibility—they search by themselves or on their own and desire to keep their searching private. This individual responsibility exemplifies the extent to which the firms employing data engineers do not use data from web search activity to better know and control the search practices. My findings did not reveal technology-enabled management of web search practices. I analyze the absence of firm management of search and the solitary and secretive search practices as a product of organizational reliance on data engineers to flexibly learn on the fly. The privacy of search generally protects the resources (time, attention, and reputation) of individual data engineers to pursue the distributed searching and learning on the fly they are tasked with.\nIn the conclusion, I advance two further arguments before developing provocations grounded in the key takeaways. While web searching for data engineering is generally put to successful use, I show how the effective use of web search is supported by and limited to a dependence on the knowledge of others and how uneven access to community norms and knowledge limit who is effective. They key takeaways center on how web search in data engineering is continually re-legitimated; extended beyond the search box and the search results page; did not hinge on personal knowledge of the technical mechanisms of web search; is entangled with notions of responsibility, credit and blame, for knowledge; and the intentional application of technique to influence search activity, did not make an appearance.\nBeing ‘better-informed search users’ for data engineers means being situated in practices around search with embedded expertise and reinforced values that support their uses of web search. For the data engineers I talked with, organizational and occupational factors including the structures of the technology, workplace interactions, and norms—all well outside of and stretching well before and after the moments of typing a query into a search box or reviewing a search results page—make search work.", "snippet": "\n", "url": "/diss/abstract/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-academic-search", "type": "pages" , "date": "", "title": "academic-search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"academic-search\" tag.\n \n\n\n{% assign tag_name = \"academic-search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"academic-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"academic-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/academic-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-acknowledgements", "type": "diss" , "date": "2022-12-16", "title": "Acknowledgements" , "tags": "[diss]", "content": "I would like to thank my committee for their support throughout this process and for seeing me through to the finish. Thank you to Deirdre Mulligan for inviting me to look at web search back in 2016. Now I cannot stop looking. I am extremely grateful for your support for my curiosity and for your example of how to do research that impacts society and mentor new scholars to do the same. I deeply appreciate you reading through so many rough drafts, engaging with my ideas in their formative stages, and for showing me I could do better. Thank you, Deirdre, for shepherding me over the finish line. Thank you to Steve Weber for so many rich conversations as I started my PhD and for helping me formulate my questions and consider why they matter. I still regularly go back to meeting notes from years ago. Thank you Jenna Burrell for your guidance in methods, especially for letting me participate in the Twitter paper research, and for your constant enthusiastic encouragement. Thank you Marion Fourcade for joining me on this journey. Thank you for your close attention and for the many suggestions to connect with the literature, both the old and brand new.\nThank you to my research participants who willingly talked so much about this thing that people are hesitant to talk about. Please consider this dissertation an offer to talk again. Thank you also to the many friends and classmates who helped connect me with people to talk to.\nI’m grateful for the feedback and support over the years in the Doctoral Research and Theory Workshop. I received feedback in 2019 on an initial sketch of this research in a prototype idea session and then later a draft proposal at (which at the time I called “Shaping the shop floor: characterizing coder (re)search labor within cognitive assemblages”)1. Thanks to Coye Cheshire for showing us how to practice with care to our work and care for each other.\nThank you to Jake Goldenfein for keeping our paper going across the years and around the world, and thank you Sebastian Benthall for connecting us (and for our conversations).\nSpecial credit for so much of this research and my development as a researcher goes to Anne Jonas, Richmond Wong, Elizabeth Resor, and Emma Lurie. You’ve helped me think through and write through so many questions and dilemmas, across Slack, Zoom, and Twitter direct messages. The requests for help with a search or a citation were always met with more than just an answer, but connection and support. Thank you Anne and Elizabeth for the weekly calls. I’m glad they will continue. Thank you Richmond for always appreciating my speculations and for helping me explore new literatures. Thank you Emma for taking a chance on the side project, it was incredibly enriching to work with you and generative for this dissertation.\nThank you to the rest of the folks at the School of Information who have made this adventure so rewarding. Thank you to the other faculty members. Thank you to Anno Saxenian for your example of scholarship and service. I’m grateful for Marti Hearst’s foundational work on web search. Particularly grateful to Paul Duguid for his deep engagement with scholarship and all of us students, particularly his mentorship in Classics and such supportive feedback on papers and chapters. His published work was also always a constant guide and inspiration.2Thank you Bob Glushko for all your personal encouragement. A big thank you to the staff at the School of Information, especially Catherine Cronquist Browning, Inessa Gelfenboym Lee, Kevin Heard, Gary Lum, and Jonathan Henke. Thank you Caitlin Appert for the retweets. I’m grateful for the chance to participate in the Center for Long-Term Cybersecurity, the Algorithmic Fairness and Opacity Group, and the Center for Technology, Society & Policy.\nI’ve been at the school too long to name everyone who has played a role in shaping my journey and this research but I’m so grateful for the community, and particularly the reflexive and intentional approach of the PhD students who came before and have come after. Thank you to Nick Doty for his constant example. Thank you also to Galen Panger, Noura Howell, Elaine Sedenberg, Jen King, Nick Merrill, Sarah Van Wart, and Andy Brooks for showing the way. Thank you to the cohort ahead of me for your friendship and your example of mutual support—Anne Jonas, Max Curran, and Shazeda Ahmed. Thank you Andrew Chong, Jon Gillick, Nitin Kohli, Guanghua Chi, Jeremy Gordon, Zoe Kahn, Doris Lee, Ji Su Yoo, and Sijia Xiao for the conversations and companionship. (Thank you to Mike Berger for conversations over runs that encouraged me to see myself applying to the PhD program.) Thank you also to the many other students and classmates over the last several years who I cannot wait to thank in person, especially to Vijay, Andy, Nikhil, and Anand.\nI must also thank the National Science Foundation for supporting Grant #1650589 which funded some of my studies, along with the GI Bill (which I will take this opportunity to note was racist in design and effects (Katznelson, 2005)).\nAs you will see in the dissertation itself, searching and asking questions is a massively collaborative project, with much collaboration of the sort that sadly escapes notice. I cannot possibly name all those scholars I’ve interacted with on social media and who have been so welcoming. I’m so thankful for the interactions with and examples set by Safiya Noble, Francesca Tripodi, and Jutta Haider. Online and off, I’m grateful to the many people who have provided search terms, provided the inspiration and impetus to search, asked why these questions mattered, and helped evaluate what I was finding from my own searches. I’m sure I am forgetting others who deserve credit. I must take the blame, though I hope you’ll take away something about blame from this dissertation.\nThank you to my friends and family for your constant encouragement and for entertaining my constant questions about how you searched the web. Thank you Andrew Reifers for being there and for talking with me about my fascination with search. Thank you Rhonda Griffin for showing a willingness to ask questions and always supporting my curiosity.\nMost of all, I’d like to thank Emily Witt for such tremendous support. This would not have been possible without your help. Encouraging me and talking me through every stage of this research, teaching me so much about how to ask questions and listen, and always a model of a thoughtful champion of careful purposeful research and our shared responsibilities. You shaped my questions and conclusions. Thank you for all the proofreading and brainstorming these last several weeks. And thank you for taking over more than your share of bath times, bed times, diaper times, and dishes these last few months. You inspire me and make me better. Thank you Wilder for your curiosity and Otis for joining me in the baby carrier for late night writing sessions.\n\n Bibliography\n\n\n\nElish, M. C., & Watkins, E. A. (2019).Algorithms on the shop floor: Data-driven technologies in organizational context. https://datasociety.net/library/algorithms-on-the-shop-floor/ \n\n\n\nKatznelson, I. (2005).When affirmative action was white: An untold history of racial inequality in twentieth-century america. W.W. Norton & Company.\n\n\nLave, J., & Wenger, E. (1991).Situated learning: Legitimate peripheral participation. Cambridge university press. https://www.cambridge.org/highereducation/books/situated-learning/6915ABD21C8E4619F750A4D4ACA616CD#overview \n\n\n\n\n\n\n\nI had directed the proposal towards a call for papers for Data & Society’s Algorithms on the Shop Floor Workshop (Elish & Watkins, 2019). I was not selected as a research participant—sharing this as praxis—but am grateful for how the call shaped my research and for the papers workshopped that I have cited below. ↩︎ \n\n\n\n I cannot help but note Paul’s name in the Acknowledgements of Lave & Wenger (1991)—“that rare colleague whose editorial involvement became akin to coauthorship” (p. 26)—, a central building block for this dissertation. ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/acknowledgements/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-actual-use", "type": "pages" , "date": "", "title": "actual-use tag" , "tags": "", "content": "{% assign tag_name = \"actual-use\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"actual-use\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"actual-use\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/actual-use/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-admitting-searching", "type": "pages" , "date": "", "title": "admitting-searching tag" , "tags": "", "content": "{% assign tag_name = \"admitting-searching\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"admitting-searching\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"admitting-searching\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/admitting-searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-admitting-searching", "type": "diss" , "date": "2022-12-16", "title": "3. Admitting searching" , "tags": "[diss]", "content": "\n Now scientists everywhere use the air pump, say, or the electrophoresis gel without thinking about it. They look through the instrument the way one looks through a telescope, without getting caught up in battles already won over whether and how it does the job. The instrument and all of its supporting protocols (norms about how and where one uses it, but also standards like units of measure) have become self-evident as the result of social processes that attend both laboratory practice and scientific publication. (Gitelman, 2006, p. 5) \n\n\n\n Sometimes I just wonder, like, who taught them how to search? (Victor) \n\n“To be frank I’ve like really never thought about it myself even though it’s kind of like 90% of my job to just like look up things.” That is what Amar told me at the start of our interview. To a certain extent the data engineers use web search without thinking about it. “It is kinda like breathing” (Phillip), “something that people maybe take for granted” (Lauren). So how then do they learn to search at work?\nThere is very little explicit instruction on web search practices in the data engineering workplace. Despite it constituting a significant portion of their work, not only are data engineers not taught how to search the web, they are also not evaluated directly on their search performance. While there are a range of onboarding processing and mentorship models, generally only in the earliest stages of their careers are new data engineers offered any direct advice about how to search or told how more experienced data engineers do so. Even at this early stage, advice and insight is sparse. Furthermore, data engineers rarely discuss their search queries, search result evaluation processes, or how they reformulate queries or follow threads in pursuit of an answer, what I call “search talk”.\nThere is little opportunity for data engineers to directly observe or participate in other data engineers’ searching. Its form–a small box on a terminal designed for individual use–affirms search as a solo act. In the absence of formal training, limited professional discussion, and a form factor that limits observation, one might predict that web search for data engineering, like learning to program a VCR, may be difficult to learn, as compared to “a fundamentally social practice” like learning to drive a car (Brown & Duguid, 1996, p. 51).\nThe analytic of legitimate peripheral participation (LPP), however, helps identify where data engineers are provided opportunities to participate and learn what it means to effectively use web search as a data engineer. Modifying Beane (2019) ’s concept of shadow learning, “a set of practices in the shadows outside the legitimate peripheral participation typical of the literature on communities of practice” (p. 91) I locate participation and legitimacy in how search is admitted: “search confessions”—the self-deprecating or hyperbolic remarks data engineers make about their extensive reliance on web search and their web searching practices (the topic of this chapter) and the occupational, professional, and technical forces that explicitly and implicitly structure search practices (discussed in chapters 4 and 5).\nIn the absence of formal training or apprenticeship, “search talk”, or even visibility into the successful search practices of other data engineers, data engineers collectively wrestle with and affirm the appropriateness of their reliance on web search through “search confessions”. At face value “search confessions” appear to be jocular, off-the-cuff jabs at the profession’s reliance on search. However, in practice they affirm reliance on search—acting as informal search approbations. In conjunction with “search confessions”, the absence of “search talk” further affirms the implicit acceptance of such heavy reliance on web search while also marking searching practices as private and generally and appropriately free from remark and appropriately protected from direct scrutiny. Search confessions are a site of legitimate peripheral participation, by exposing new data engineers to the constant process through which reliance on search and norms about its use are constantly negotiated, re-made and affirmed. While data engineers do not directly engage each other in the moment of searching, their web searching is informed by this confessional talk about search. Rather than being directly taught how to form and reform queries or how to evaluate and course correct, I find that through confessions about and around search and silences about exactly how to do it (“search talk”) data engineers learn how to search.\nThe reliance on search confessions to normalize the use of search and, to some extent, train and educate data engineers about effective and legitimate use of web search in work practice comes at a cost. It presents barriers to those marginalized in technology work today (discussed in chapter 6).\nThe next section looks closer at the LPP literature, focusing on learning in the shadows. This is followed by a presentation of my empirical findings and analysis. Then I discuss implications for our understanding of LPP and re-situate this chapter within the dissertation.\n The LPP analytic\n \n\nLave & Wenger (1991) claim that: “Learning viewed as situated activity has as its central defining characteristic a process that we calllegitimate peripheral participation ”44 (p. 29). This concept is the outgrowth of their desire to write about apprenticeship and their phrasing highlights that learners “inevitably participate in communities of practitioners” and success in learning requires learners to “move toward full participation” (p. 29).\n\n\nThey propose the concept of legitimate peripheral participation to describe “engagement in social practice that entails learning as an integral constituent” (p. 35) The “central preoccupation” of their book “is to translate this into a specific analytic approach to learning” (p. 35). Cautioning against decomposing the concept into three components, they write that it is “to be taken as a whole.” (p. 35) That is, there is not an illegitimate peripheral participant that learns and so challenges the theory, but rather the sort of legitimacy of participation will shape what is learned. Similarly, peripherality is about the “ways of being located in the fields of participation defined by a community” (p. 36). They suggest these “ambiguous potentialities” provide “access to a nexus of relations otherwise not perceived as connected” (p. 36) offering a new and distinct “analytical perspective”.\nOver the last 30 years LPP has been widely applied. John Seely Brown and Paul Duguid popularized it, also in 1991 (see Contu & Willmott (2003) , p. 283). Other work on LPP includes Brown & Duguid (1991) , Orr (1996) , Brown & Duguid (1996) , Brown & Duguid (2001) , Contu & Willmott (2003) , Bechky (2006b) (referring to both Bechky (2003) and Bechky (2006a) ), Duguid (2008) , Takhteyev (2012) , and Gasson & Purcelle (2018).\n Learning to be a googling data engineer\n \nThe LPP analytic lens helps direct attention to interactions between data engineers, to learning opportunities and participation. While direct participation in the moment of searching is rare (the data engineers rarely “pair search”, even though some may pair program), participation in data engineering work practices provides opportunities for participation in the larger search practices. Data engineers do not have formal training in search. They do not collaborate at the search box or on the SERP. So I considered talk.\nTalk is a key element of participation. Partly through talk, stories and jokes, people construct shared understandings of the work and their identity. This is seen in Orr (1996). Orr finds that “[n]arrative forms a primary element” of the practice of photocopy repair technicians [p. 2]. Talk is “instrumental”, stories and conversations circulate knowledge of machines, customers, and the task of diagnosing and fixing problems. It also shapes identity, the technicians “tell tales to establish their membership in the community” [p. 142].\n Search talk?\n \nFirst, data engineers say they don’t talk about it.\n Don’t talk about it\n \nThere is limited explicit instruction. In the interview with Ross, after we talked about the various sorts of places he would search at work, he said the following in talking about on-boarding a new hire:\n\n I probably had a brief conversation with them. That was, you know, five sentences that summarized what we’ve already talked about. ’You go to the web for this kind of stuff. Go to the wiki for this kind of stuff, and Slack for this kind of stuff. \n\nAmar had recently started on-boarding for a new job after several years at a previous company. He had been successful there, rising to a technical leadership role within his team.\nMidway through the interview I asked Amar: “Are you talking with your team about the searches you’re doing? When they join your team are you saying: ‘Here’s my process for searching. This is what you should do.’ Or?”\n\n Um, I think, that’s an interesting question. [pausing and proceeding slowly at first] I don’t believe I’ve ever done that except for… except with one engineer and the reason why I did that with that engineer is that was an intern and they were not very— That person was an intern who joined [the company] full-time but they didn’t have a lot of professional work experience outside of internships. \n So they were a fresh grad, fresh out of undergrad. For them, because they didn’t have a dedicated process—and it wasn’t me going out of the way, because I’d never prescribe that this is how you should do it—But they kind of were ‘Hey, every time I have a problem I have to like, like do a couple of Google searches and if I can’t find anything I have to come to you and then you, even if you don’t have an answer immediately you pretty much find it, find resources pretty quickly, how? So what do you do?’ \n And then that’s when, that’s the only time I kinda said, hey this is my process and this works for me [emphasis from interviewee] but outside of that engineers don’t really—at least in my experience or at least within my team—will not explicitly discuss their process. \n\nFollowing up, saying:\n\n I don’t think I’ve actually talked with the team, but maybe I should, as like a personal note. [ . . . ] it is just part of the job that usually not very apparent unless its like very very inexperienced engineers. \n\nPair programming (working together on the same code at the same time either next to each other or remotely) might be a place where searching is talked about. While the data engineers I talked to generally did not practice pair programming45 , those that did generally reported searches being hidden and not discussed.\nChristina said there is less pair programming in data engineering than elsewhere, but said, “If I were pair programming with someone and I was sharing my screen I would have a tendencies to pull up my search on a separate screen.”\nLikewise, Megan said:\n\n I’ll notice people turn off sharing when they switch to searching, and then they’ll find something and turn sharing back on. …a lot of stuff people are really interested in collaborating on, but search is very private. It is something you go do and then you come back and share the results of your search… \n\nRoss said that if he were doing a screenshare with a colleague on one of his screens and had to look something up he’d open a new tab in the other screen, not shared, and do his search, saying “I don’t think I’m the only one like that.”\n Submerging of web search\n \nSecond, there is asubmerging of web search itself in talk nominally about web search. Even interactions that interviewees would describe as being about searching the web were not directly so.\nHere is a response from Sameer, as we were talking about mentoring interns or new college graduates, when I asked him for an example of “politely suggesting googling”:\n\n I’ve realized that schools, depending on which program you go to, computer science majors, have a lot of theoretical knowledge. Graduates will have knowledge about distributed systems, algorithms, data structures, but then actually coming to a company and writing code is different. So there’s a lot of guidance and mentorship around that. And obviously if the intern or new college graduate does not have experience in industry then sometimes I do think we need to, politely, point them to search—‘Hey, have you tried googling it? Because it seems like a very simple thing you can find yourself.’ \n But I think sometimes people, when they are stuck in that rabbit hole it is a very thick forest. When you are googling things you can hit one web page and be like ‘oh, I don’t know what this means’ and then go to a second line and “oh I don’t know this is either!” and suddenly you’re learning about quantum physics, right? [laughter] So, so, very far away from what you started out with. So you kinda need to understand what to Google, where to stop, and where to just ask someone for help. \n\nI asked a follow-up: Can you recall any of those conversations or times when you politely suggested googling?\n\n So the way I do this is by, one of the easiest ways to do this, is just to send someone a Stack Overflow link and go, ‘oh hey, someone already answered this question. Here you go.’ And I hope they read between the lines, ‘I should be googling this.’ \n If I don’t send a Stack Overflow link and I’m just solving the problem for them then I will definitely have a one-on-one and have a conversation, ‘OK, this is how you should be solving it.’ I totally get that this [answer to the question asked] is not common knowledge. But I hope that the intern or new college graduate can read between the lines. I don’t want to have a conversation with anyone saying ‘did you try googling this yet?’ It’s not very polite, I feel. \n And most people pick it up. It is very rare that someone would bother me with something easily queryable again and again. \n\nSameer presented this story of sharing a link (that he had found by searching) as an example of politely suggesting googling. He made no mention of googling or web search in his description of what he explicitly communicated to his colleague. The use of the web search tool itself is kept below the surface.\nThe coworkers in this example avoid mention of web search. This sort “tactful inattention” (Goffman, 1956, p. 147) reproduces boundaries or norms around whether or how the tool is mentioned itself.\n Speculating on how junior engineers learned to search\n \nThird, there is speculation about how junior engineers learned to search. This demonstrates further the lack of formal instruction on search.\nVictor, one of the data engineers who reported their team regularly pair programmed, described working with a junior colleague:\n\n One thing that I find like when I pair program with more junior engineers is the way they do the query searches is very different than I would approach it. So, they’ll just ask me, they’re like: ‘Um, how do I run this command in docker.’ It’s like, I don’t know. What— Like let’s— I don’t know. Like do you think I just memorize it? No. Let’s, let’s Google it. And their search: [docker [command]] \n Do you think that search is going to get the answer you want? How does that even happen? ‘Well, what would you search?’ Let’s just repeat the question you asked me and type that into Google. Sometimes I just wonder, like, who taught them how to search? I remember being in like 5th or 6th grade and having a class about how to do web searches. I guess that’s something not everyone does anymore \n\nThis speculation highlight the lack of visible formal search education in the workplace—made visible here in a collision of generational perspectives, perhaps. Sundin (2020) studied how older youth in Sweden use general-purpose search engines. He found that “search engines almost never seem to have been a visible information infrastructure for the current generation of teenagers” (Sundin, 2020, p. 378).\n Talk about search\n \nMore broadly, these comments and stories from interviewees point to how search is multiply and complexly hidden. Search talk is absent partially because search has, for many interviewees, become infrastructure—habit and routine, “like breathing.” It is also avoided because of the sensitivity developed from what it might reveal or suggest about one’s own or another’s knowledge, or lack thereof (the secrecy covered in the final analytical chapter, Owning searching ). But, it may also be a tacit “action-centered skill” (Zuboff, 1988, p. 186) , knowledge or knowing that “cannot be put into words” (Polanyi, 1967, p. 4).46\nZuboff (1988) writes of how a richly textured tacit skill, is “deeply embedded in crisscrossing relationships, and too continuous to be captured in a verbal description” (p. 187). It is likely, Zuboff writes, that “attempts at explication of such tacit knowledge must always be incomplete. The knowledge is too layered and subtle to be fully articulated. That is why action-centered skill has always been learned through experience (on-the-job-training, apprenticeships, sports practice, and so forth)” (p. 188). Even if it were that explication of tacit knowledge about search activity is always incomplete and could not be fully articulated, that does not mean explication couldn’t be useful and wouldn’t be tried. But the difficulty of communicating tacit knowledge may multiply the sensitivity in talking about searching. If attempts to discuss it themselves seem to indicate some lack of self-awareness or inability to communicate. But in this case it isn’t just that the data engineers don’tverbally share their search activity, they don’tmaterially orexperientially share their search activity either. The data engineers do not join together in the action in the search bar or on the search results page.\nThe search activity itself seems relegated to (or reserved for) the backstage. As Goffman (1956) writes (p. 69):\n\n A back region or backstage may be defined as a place, relative to a given performance, where the impression fostered by the performance is knowingly contradicted as a matter of course. There are, of course, many characteristic functions of such places. It is here that the capacity of a performance to express something beyond itself may be painstakingly fabricated; it is here that illusions and impressions are openly constructed. \n\nCertain impressions of an individual’s knowledge or knowing, impressions necessary for data engineers to engage as experts in workplaces that conceive of knowledge as something possessed by and the responsibility of individuals, are developed in a protected backstage.\nBut they do talkabout search —spotting examples of such talk led to my interest in studying this site. Even though they do not engage in “search talk”—discussions about what they input into a search box or how to parse the results pages—they talk about search. They discuss searching and the motivations behind searches although the searches themselves go unmentioned or are only subtly implied. This talk about search shapes their understanding of acceptable use of search. Here I will focus on confessions data engineers make about their use of web search. Repairing searching , the fifth chapter, discusses another space where data engineers talk about search, sharing about and fixing failed searches.\n Search confessions\n \nData engineers profess to making extensive use of web search at work. I expected such professing given my initial experience leading to this research. I did not expect, though, the forcefulness and apparent hyperbole and overgeneralization in these statements from the data engineers.\nAt the start of our conversation Amar laughed as he said, as though revealing some embarrassing secret, “it’s kind of like 90% of my job to just look things up.” Christina chuckled, saying “probably 90% of my job is Googling things.” Ross, likewise, said, “it’s a large part of my job.” Over email while scheduling the interview, Vivek wrote: “Web Search is a part of everything I do.” Noah said, “I consider it a core of doing my job.”\nI call these search confessions. Search confessions are, often self-deprecating or hyperbolic, statements about one’s reliance on web search. Many of these confessions are delivered as though admitting something somewhat shameful, of something that others may find wrong or weak. Sometimes the confessions accompany a statement that there is nothing to be shameful about. Search confessions are statements that individually admit of a reliance on web searching and collectively admit the practice of searching for work into the work practices of data engineering.\nThese statements mirrored those that started my research, both the initial tweets and the subsequent blog, forum posts, tweets, and TikToks I later found. A key difference being that the above examples were directed to me and not to a general audience of peers or fellow community members.\nMegan, talking of how people will admit to searching but not share the searching itself, shared:\n\n People who are all on board for ‘do your work in public’, ‘show your mistakes’, will still keep hidden the specific process of searching. That is something that they’re not as eager to share. There are a number of people who say searching isn’t bad, we all do it all the time. But it still feels somewhat shameful. I don’t know what that is about. [ . . . ] Um, um, and they’re not, they’re not even like hiding it necessarily. They’re like, they’ll say like, oh, I’m just going to look this up real quick and pop it in, but they still do it in a separate window. See even if they’re not trying to like, deceive about the fact that they’re searching, they don’t want the process of searching to be visible. Which I think is interesting. I don’t know. \n\nChristina is a data engineer working as a consultant helping external clients with her company’s enterprise software tools. I asked about her initial reaction to hearing about the research topic and she said, “That probably 90% of my job is Googling things,” and chuckled. She laughed when I told her that I wanted to know why everyone says 90%. She said, “because it’s the majority, and it’s not just the majority. I wouldn’t go 50%, 60%, its like I can barely think of other things I do.” Then, through laughter: “Meetings. And meetings. But I multitask so even while I’m in a meeting.”\nAt the close of the interview I asked for any final reflections. Christina said:\n\n It was interesting because I hadn’t connected the way I search day-to-day with our whole company initiative for developer experience. [ . . . ] So it makes a lot of sense, that while I am not often searching, googling, company-specific things, I wish I could but the answers aren’t there. \n I guess my 90% I said at the beginning is actually pretty wrong because I probably spend a lot more time asking people questions than asking the internet questions. \n\nIn a follow-up member check interview I told Christina how I had identified and described search confessions. She said, “Yeah, yeah. This is completely coincidental,” and went on to share that her IP address (working from home) had recently been blocked by Stack Overflow.\n\n I screenshotted the other day that Stack Overflow blocked my IP address because I sent too many requests. I screenshotted it and sent it to our team Slack channel. So it was kind of an acknowledgement of ‘oh, look, this is kind of embarrassing I’ve asked too many questions.’ My team is three people. We all know we ask a lot of questions, so it’s not shameful.47\n\n\nAt the close of the follow-up with Christina, I apologized for running so long over our planned meeting time and she replied, laughing: “No, that’s OK. I’ve needed a break from searching.”\nComments and jokes about Stack Overflow offer another means of confession. Recall Noah, who said he wasn’t “the greatest googler of all time”, and that if he found out that some of his coworkers were searching the web a lot less than him, he would “actually wonder if they weren’t doing their job as effectively as they could.” When I asked him about Stack Overflow memes he shared that he has a laptop sticker that says “Copying & Pasting from Stack Overflow”. He mentioned the sticker again a year later in our follow-up member check.\nJane, an analyst working with data engineers at a prominent social media company, shared that the IP address at her company was blocked intermittently by Stack Overflow for a couple months. When it was blocked, engineers would gather on a page explicitly for memes and jokes, asking facetiously who was using it too much or joking that it must have been their individual fault for searching too much while trying to fix a bug. She mentioned Stack Overflow being blocked at her company to her friends, telling them not to have imposter syndrome because nobody knows what they are doing.\nJillian shared a story of joking among colleagues about surveillance productivity software:\n\n One time we were joking about these different productivity surveillance tools that some companies use, for working from home environments specifically. They might take a screenshot of what you’re looking at on your monitor. \n And I was like, “oh, I would hate that because I’d be working but it would show that I’m like googling ‘what is a computer’ or like something rudimentary.” \n And then, but we, everyone on my team was kind of joking about things like that, you know, just like talking about looking up, you know, this page for ‘explain it to a kindergartner’, whatever. \n\nThese search confessions serve multiple learning purposes. The confessions ritualistically provide a space for community members to affirm their commitment or conviction to this way of being an expert. Search confessions at once open up web search practices to challenge and create iterative openings for the community to foreclose potential threats to professional identity used by this general purpose tool through collective affirmation. Posted on blogs, forums, or Twitter, search confessions like the “Copying and Pasting from Stack Overflow” sticker on Noah’s laptop or the “I HAVE NO IDEA WHAT I’M DOING” dog meme48 , both mock and validate the data engineering community’s reliance and dependence on web search. Confessions acknowledge and celebrate the difficulty of their work, constantly at the edge of the field or juggling far more (constantly changing) information than might seem possible.\nParticipating in these confessions is part of the ritual of these search-reliant fields. The rituals introduce and admit new members to the community and facilitate interactions between members. Borrowing from (Goffman, 1956, p. 121) , we can identify search confession is “unofficial communication” that “provides a way in which one [data engineer] can extend a definite but compromising invitation to the other”, through this sort of “‘putting out feelers’”, a “guarded disclosure.” The confessions legitimate web searching and allow data engineers recognize each other’s shared orientation towards search and drop pretense. Goffman goes on to write:\n\n By means of statements that are carefully ambiguous or that have a secret meaning to the initiate, a performer is able to discover, without dropping his defensive stand, whether or not it is safe to dispense with the current definition of the situation. [ . . . ] it is common for colleagues to develop secret signs which seem innocuous to non-colleagues while at the same time they convey to the initiate that he is among his own and can relax the pose he maintains toward the public. \n\nThese search confessions are a sort of secret sign. LPP identifies learning not as absorbing facts, but “deploying through practice the resources [ . . . ] available to you to participate in society, a process [ . . . ] inseparable from the development of a social identity” (Duguid, 2008, p. 3).\nConfessions are not admissions of deviance, though they acknowledge a felt-deviance. They are ritual acts designed to elicit assurance and renew the shared conviction to the norm of reliance on web search. It affirms that this search work—‘just’ turning to a general-purpose search engine, which seemingly anyone could do—is the work of the field. These confessions thus legitimize search work and the status of the searching worker as a data engineer. They are little openings for the field to reiterate and maybe rearticulate not only what their work is, but also jurisdictional claims.\n Discussion: Opportunities and challenges in confessions\n \nIn the place of search talk we find search confessions. The LPP analytic makes search confessions visible, making it possible to see constituent elements of learning, shared and accepted practice. Though recurrently achieved & reproduced, these confessions are informal. The informality with which this community approaches learning to search presents opportunities and poses challenges.\n Searching for opportunities\n \nFirst, the informality and ambiguity of admitting search through search confessions keeps open space for maneuverability—the uses of web search engines are kept open to be adjusted as changing circumstances may dictate. As a general strategy, web search is used in data engineering in order to manage uncertainty. This is discussed at length in the fourth analytical chapter, Owning searching , but the fundamental point is that firms have delegated responsibility to individuals to “keep up” (Kotamraju, 2002) and engage in intensive self-learning (Avnoon, 2021). These confessions are not moves of “rhetorical closure,” their confessional frame isprobative, serving to test or try, notdispositive, serving to close or finish. The form of legitimation, a confession, keeps open some “debate and controversy” ( The Social Construction of Technological Systems, 1993, p. 111) about the use of the tool itself.\nPulling in the language of Handoff, the widespread and ritualized confessionsengage individual data engineers to perceive that relying on web search is acceptable and encouraged. The perceptions of affordance are not guaranteed. We could consider alternative modes of admitting search into the professional work of data engineers that may provide more closure, but that would also do more to stabilize the search practices and make them potentially brittle as technologies and problems in the firm’s context change. Firms could record and rate searches, building in explicit incentive structures or technologies to manage or motivate web searching in the workplace. Imagining how these modes might engage data engineers, with force or potentially leading to exaggerated perceptions of constraint and affordance, highlights the flexibility of the search confessions.\nSecond, the confessions bring attention to norms and remind data engineers, especially those full-fledged members, that here searching is appropriate. Even though searching is solitary and secretive it is admitted as appropriate for data engineers in the confessions. Rather than norm-constrained or norm-defying, the norms of search use are reproduced and improvised as the occupational community makes jurisdictional moves (and distinguishes their norms from the faulty reliance on search decried by critics in school settings or elsewhere in society). The confessions acknowledge a felt-deviance of searching in the shadows but assert their searching is different and necessary. The search confessions perform part of what Orr (1996) discussed of stories and narrative. The confessions, sometimes humble-like, can also be hedging practices, a way to protect themselves from being judged for not knowing something on the spot. And confessions can be used, much like Orr’s technicians’ stories, for pointing to the sheer difficulty and variety of things they must think about and understand, even if the data engineers don’t hold all this knowledge immediately in their head.\nTo see the benefit of the confessions, compare “shadow learning” that is not confessed. In his doctoral research at the MIT Sloan School of Management, Matt Beane studied the learning of and use of surgical robots ( (2017) ) under the supervision of Wanda Orlikowski (with Katherine Kellogg and John Van Maanen on his committee)49 . He explored “productive deviance”, where “norm- and policy-challenging practices that are tolerated because they produce superior outcomes in the work processes governed by those norms and policies”. He was particularly focused on the deviance amidst “significant technical reconfiguration of surgical work”.\nBeane’s dissertation reviewed deviance in organizations, the history of productive deviance in the surgical profession, and then turned to two empirical studies on robotic surgery. The first will be discussed here. The study looks at how few surgical residents became confident and competent in the robotic surgery methods. He focuses on the barriers to such learning and shows how those who did learn did so through norm-challenging practices that he calls “shadow learning.”50\n\n\nBeane (2019) presented shadow learning as norm-challenging practices that work around constraints of efficiency and liability pressures. The work of learning to be a web searching data engineer, often done in the shadows, is a distinct type of shadow learning. Efficiency pressures in data engineering have the effect of increasing reliance on the use of the web search tools, in the shadows and seemingly by individuals isolated from others. Liability pressures in the data engineering organizations appear to produce a distinctly different effect than that found by Beane. Beane found hospital concerns about liability keeping trainees from realistic training. Rather than liability pressures removing training opportunities, liability pressures in data engineering encourage various responses that surround and manage the contributions of new trainees.\nThe liability pressures, the regulatory or contractual constraints and incentives engaging other components within the systems of the data engineering organization, ground the structuring of the data engineering work practices generally, and so also the web search activity. When veteran data engineers write code it is generally reviewed in some manner and tested before production. Code from new entrants goes through the same processes of review and controlled deployment. Systems established for addressing liability in data engineering allow junior data engineers to participate deeply in many aspects of the work. The data engineering work is organized in such a way that many errors made by individuals are caught and repaired in the normal functioning of the system. This includes errors potentially introduced from web searches.\n Finding challenges\n \nFirst, the search confessions are not discriminating. They do not identify the sorts of web searching put to successful use within data engineering. The web search practices of the data engineers are refined or adapted for searches related to the data engineers’ core work tasks. There is an operating envelope for such searching, “a range of adaptive behavior” (Woods, 2018, p. 435). Data engineer’s use of web search for other sorts of tasks may not work so well, even for work-relevant searches if they fall outside the operating envelope. As the next chapter shows, occupational, professional, and technical components structure the selection of inputs and the evaluation of search results. This structuring is particularly well-directed towards concerns central to the responsibilities of the data engineer and aligned with the core interests of their firm or profession.\nSituated in and shaped by larger and longer data engineering work practices, these practices for web search generally recede from view and avoid explicit attention. Web search, as an information infrastructure, is often transparent or invisible (Haider & Sundin, 2019).51 The invisibility or ‘taken-for-grantedness’ of search reflected by my research participants is a key feature of infrastructures.52 The occupational, professional, and technical components of the work of data engineers come together to form an infrastructure for search that generally escapes their notice. The data engineers acknowledged they had “never really thought about it” or that searching was “kinda like breathing.” This role of the structuring and liability pressures are themselves taken-for-granted. They are absorbed within the larger infrastructure of data engineering work, becoming transparent. Search confessions do not distinguish those searches that are likely supported or not, thus there is a risk in encouraging uncritical searching outside the firm’s “sensing routines” (Carlo et al., 2012, p. 870).\nSecond, with the appropriateness of search constantly questioned and affirmed only informally, those more on the periphery—marginalized within technology work or newcomers—are left with few signals about the appropriateness of search. These confessions are honest, if not a full accounting of data engineer web searching. But they are also humorous and so by design could be misread by those not fully included. In her ethnography of Debian developers, Coleman (2012) writes that humor “gets us closer to the most palpable tension in the hacker world—that between individualism and collectivism” (p. 92). She discusses humor in-depth in one chapter53 , defining it as “a play with form whose social force lies in its ability to accentuate the performer, and which at times can work to delineate in-group membership” (pp. 103-104).\nMisreadings of the search confessions may lead to a misaligned under-reliance on search or over-reliance on search alone (rather than searching facilitated by conversation with others about questions and failures). Those who are already fully participating may actually find it easier to search, and may search more and more effectively because they do have more domain knowledge and are more fully situated within organizations and the field so as to better inform their search queries and evaluation. This may slow or reduce learning opportunities for those already on the periphery and, at the extreme, exclude them.\nI’ll expand on these challenges from “searching in the shadows” by looking at the “consequences” Beane identified as resulting from “shadow learning” in robotic surgery. Beane (2019) noted that barriers to traditional modes of LPP had “problematic implications” (p. 102). “The routine enactment of shadow learning [ . . . ] led to [ . . . ] outcomes that were quite problematic for shadow learners, their cohort, and their profession: hyperspecialization, fewer learning opportunities for less-skilled residents, and limited learning.” (p. 111).\nThe implications, or consequences, that Beane identified were (1) a reliance on robotic surgery in cases without clear benefit, (2) a “Matthew effect” where only the most skilled received more opportunities to practice (reducing the supply of qualified surgeons), and (3) that the silence of the shadow learning stopgaps kept attention away from how little was learned in the few opportunities for participation. On that third implication, Beane wrote (p. 113):\n\n a lack of broader, more open discourse on the failures of [providing] legitimate peripheral participation and the effectiveness of shadow learning for robotic surgical technique essentially prevented the profession from learning \n\nThese implications are related to the challenges from “searching in the shadows”: the potential reliance on searching out of scope and questions about whose learning is best supported. Beane found that trainees that engaged in shadow learning became “hyperspecialized”, and “faced strong pressures to perform robotic surgery on their patients, even when it was unclear whether robotic surgery was the best course of treatment” (p. 112). The contextual factors driving over-reliance on robotic surgery where not appropriate do not mirror the factors surrounding potential over-reliance on web search in data engineering. My argument above was that the risk of over-reliance on web search results results from its informal legitimation making the operating envelope, the ability to search with support from the broader data engineering work practices serving as search infrastructure, even harder to see. This can contribute to a sort of hyperspecialization in two senses: underdevelopment of other sensemaking or discovery techniques and web search skills practiced principally within the operating envelope of data engineering-supported searching (rather thangeneral-purpose ). The other two implications are more directly related to the second challenge. The silence around the searching activity and the informality of the search confessions contribute to a Matthew Effect for data engineers searching, those who are most adept at searching like a data engineer are more supported in searching more, with little attention giving to improving opportunities for participation for others. These challenges, or concerns, are raised in the following chapters.\n Conclusion: Condoning or celebrating searching?\n \nConfessions, filling in for the absence of search talk, present opportunities and challenges. The discursive and humorous mode of the search confessions, as a way of engaging with other actors, constructs searching as a flexible tool. The confessions assuage the felt-deviance. But the search confessions do not help the data engineers identify if a search is within the operating envelope of their work. The search confessions do not describe the limits of such searching, to be discussed more in the next chapter. And due to its informality, the legitimating purpose of search confessions may not be clear enough to newcomers and those kept on the outside to encourage successful searching. Even for practiced data engineers, it is not clear if the search confessions are merely condoning or fully celebrating searching.\nThis chapter examined part of how data engineers learn to search as data engineers. Legitimate peripheral participation in data engineering web search work occurs in (1) search confessions, the focus of this chapter, and (2) the structuring of search practices through occupational, professional, and technical forces, the focus of the next two chapters. Search confessions acknowledge and legitimate searching the web for work. Engaging with others or taking on the role of confessor oneself, is a form of participation in web searching for the data engineer. The confessions do not generally include the search inputs themselves or the search results, but are part of the social practice and social construction of web searching. This chapter describes the work of affirming that it is common, acceptable, and necessary for data engineers to rely heavily on web search. The search confessions do not only normalize, they reproduce the data engineer web search practices. The legitimacy granted the data engineers, partially through search confessions, give them access to the resources structuring search, discussed in the next chapter. Their peripherality is shaped by the material design of search and the larger culture’s identification of search as a solitary and intimate performance (see the Repairing searching and Owning searching chapters for a larger exploration of this).\n\n Bibliography\n\n\n\nAvnoon, N. (2021). Data scientists’ identity work: Omnivorous symbolic boundaries in skills acquisition.Work, Employment and Society,0 (0), 0950017020977306. https://doi.org/10.1177/0950017020977306 \n\n\n\nBeane, M. (2017).Operating in the shadows: The productive deviance needed to make robotic surgery work [PhD thesis]. MIT.\n\n\nBeane, M. (2019). Shadow learning: Building robotic surgical skill when approved means fail.Administrative Science Quarterly,64 (1), 87–123. https://doi.org/10.1177/0001839217751692 \n\n\n\nBechky, B. A. (2003). Object lessons: Workplace artifacts as representations of occupational jurisdiction.American Journal of Sociology,109 (3), 720–752.\n\n\nBechky, B. A. (2006a). Gaffers, gofers, and grips: Role-based coordination in temporary organizations.Organization Science,17 (1), 3–21.\n\n\nBechky, B. A. (2006b). Talking about machines, thick description, and knowledge work.Organization Studies,27 (12), 1757–1768. https://doi.org/10.1177/0170840606071894 \n\n\n\nBowker, G. C., Baker, K., Millerand, F., & Ribes, D. (2010). Toward information infrastructure studies: Ways of knowing in a networked environment. In J. Hunsinger, L. Klastrup, & M. Allen (Eds.),International handbook of internet research (pp. 97–117). Springer Netherlands. https://doi.org/10.1007/978-1-4020-9789-8_5 \n\n\n\nBowker, G. C., & Star, S. L. (2000).Sorting things out: Classification and its consequences. MIT press. https://mitpress.mit.edu/books/sorting-things-out \n\n\n\nBrown, J., & Duguid, P. (2001). Knowledge and organization: A social-practice perspective.Organization Science,12, 198–213.\n\n\nBrown, J. S., & Duguid, P. (1991). Organizational learning and communities-of-practice: Toward a unified view of working, learning, and innovation.Organization Science,2 (1), 40–57. http://www.jstor.org/stable/2634938 \n\n\n\nBrown, J. S., & Duguid, P. (1996).Situated learning perspectives (H. McLellen, Ed.). Educational Technology Publications. https://www.johnseelybrown.com/StolenKnowledge.pdf \n\n\n\nBucciarelli, L. L. L. (1996).Designing engineers (Paperback, p. 230). MIT Press. https://mitpress.mit.edu/books/designing-engineers \n\n\n\nCambrosio, A., & Keating, P. (1995).Exquisite specificity: The monoclonal antibody revolution. Oxford University Press.\n\n\nCarlo, J. L., Lyytinen, K., & Rose, G. M. (2012). A knowledge-based model of radical innovation in small software firms.MIS Quarterly,36 (3), 865–895. http://www.jstor.org/stable/41703484 \n\n\n\nColeman, E. G. (2012).Coding freedom: The ethics and aesthetics of hacking. Princeton University Press. https://gabriellacoleman.org/Coleman-Coding-Freedom.pdf \n\n\n\nContu, A., & Willmott, H. (2003). Re-embedding situatedness: The importance of power relations in learning theory.Organization Science,14 (3), 283–296.\n\n\nDuguid, P. (2008).Community, economic creativity, and organization (A. Amin & J. Roberts, Eds.). Oxford University Press. https://oxford.universitypressscholarship.com/view/10.1093/acprof:oso/9780199545490.001.0001/acprof-9780199545490-chapter-1 \n\n\n\nGasson, S., & Purcelle, M. (2018). A participation architecture to support user peripheral participation in a hybrid foss community.Trans. Soc. Comput.,1 (4). https://doi.org/10.1145/3290837 \n\n\n\nGitelman, L. (2006).Always already new: Media, history, and the data of culture. MIT Press. https://direct.mit.edu/books/book/4377/Always-Already-NewMedia-History-and-the-Data-of \n\n\n\nGoffman, E. (1956).The presentation of self in everyday life. University of Edinburgh.\n\n\nHaider, J., & Sundin, O. (2019).Invisible search and online search engines: The ubiquity of search in everyday life. Routledge. https://doi.org/https://doi.org/10.4324/9780429448546 \n\n\n\nHochstein, L. (2021).I have no idea what i’m doing. https://surfingcomplexity.blog/2021/11/28/i-have-no-idea-what-im-doing/ \n\n\n\nKotamraju, N. P. (2002). Keeping up: Web design skill and the reinvented worker.Information, Communication & Society,5 (1), 1–26. https://doi.org/10.1080/13691180110117631 \n\n\n\nLave, J., & Wenger, E. (1991).Situated learning: Legitimate peripheral participation. Cambridge university press. https://www.cambridge.org/highereducation/books/situated-learning/6915ABD21C8E4619F750A4D4ACA616CD#overview \n\n\n\nOrr, J. E. (1996).Talking about machines: An ethnography of a modern job. ILR Press.\n\n\nPolanyi, M. (1967).The tacit dimension. Doubleday & Co.\n\n\nStar, S. L. (1999). The ethnography of infrastructure.American Behavioral Scientist,43 (3), 377–391.\n\n\nStar, S. L., & Ruhleder, K. (1996). Steps toward an ecology of infrastructure: Design and access for large information spaces.Information Systems Research,7 (1), 111–134. https://doi.org/10.1287/isre.7.1.111 \n\n\n\nSundin, O. (2020). Where is search in information literacy? A theoretical note on infrastructure and community of practice. InSustainable digital communities (pp. 373–379). Springer International Publishing. https://doi.org/10.1007/978-3-030-43687-2_29 \n\n\n\nTakhteyev, Y. (2012).Coding places: Software practice in a south american city. The MIT Press.\n\n\n\n The social construction of technological systems. (1993). MIT Press.\n\n\nWoods, D. D. (2018). The theory of graceful extensibility: Basic rules that govern adaptive systems.Environ Syst Decis,38 (4), 433–457. https://doi.org/10.1007/s10669-018-9708-3 \n\n\n\nZuboff, S. (1988).In the age of the smart machine. Basic books.\n\n\n\n\n\n\n I cleave to the label legitimate peripheral participation rather than shifting to language of “communities of practice” or “situated learning” in order to retain analytical purchase. This—“Taking into account the learner’s perspective”—is the central focus of the theory and “has often been ignored” (Duguid, 2008, p. 3) . ↩︎ \n\n\n\n Several research participants did some pair programming, only a few indicated it was a consistent part of their work. ↩︎ \n\n\n\n See Cambrosio & Keating (1995, pp. 49–50) for a discussion of how “the unsaid” tacit knowledge can be “formally transmitted” and “articulated”. ↩︎ \n\n\n\n The “feels somewhat shameful” mentioned by Megan is regarding openly sharing the search process, distinct from admitting reliance on web search to others in a team of three. ↩︎ \n\n\n\n This meme was the center of a flurry of introspection in the online engineering community in November 2021. Comments on search confessions sometimes punctuate the everyday routine and elicit considerable discussion. I will only highlight a response from Lorin Hochstein (2021) , a software engineer at Netflix, expert on resilience engineering, and regular commentator on the field. He wrote a blog post reflecting on discussion around a post from David Heinemeier Hansson, creator of Ruby on Rails and sometime tech influencer, which centered on the claim that “In the valiant effort to combat imposter syndrome and gatekeeping, the programming world has taken a bad turn down a blind alley by celebrating incompetence.” Hansson wrote, “You can’t become the I HAVE NO IDEA WHAT I’M DOING dog as a professional identity. Don’t embrace being a copy-pasta programmer whose chief skill is looking up shit on the internet.” While many saw this as a critique of a reliance on web search, and provided apologias for searching, Hochstein focuses at a slightly higher frame, arguing (with citation to Bucciarelli (1996) ) that the meme isn’t focused on search so much as the conditions of the work that necessitate solutions such as search and that it joins other jokes and stories that shape affective orientations towards search. He writes, the dog meme: \n\n uses humor to help us deal with the fact that, no matter how skilled we become in our profession as software engineers, we will always encounter problems that extend beyond our area of expertise to understand. \n To put it another way: the dog meme is a coping mechanism for professionals in dealing with a domain that will always throw problems at them that push them beyond their local knowledge. It doesn’t indicate a lack of professionalism. Instead, it calls attention to the ironies of professionalism in software engineering. Even the best software engineers still get relegated to Googling incomprehensible error messages. \n\n↩︎ \n\n\n I make note of these influences because it may helpfully explain his trajectory in his engagement with LPP, not focalized, as I do here, through Lave & Wenger (1991) . While he cites to Lave & Wenger (1991) , he does not lean on their language or note on their engagements with some of the research he mentions (which I will note below). Takhteyev (2012) remarks on “substantial currency” of the notion of “communities of practice” in the “organizational studies and business literature” (p. 25), citing to Duguid (2008) ’s review of community of practice noted it was “rapidly domesticated” (p. 7). (I learned of Yuri Takhteyev’s research through a personal conversation with Paul Duguid.) ↩︎ \n\n\n\n\n Beane (2019, p. 91) : \n\n Successful trainees engaged extensively in three practices: ‘‘premature specialization’’ in robotic surgical technique at the expense of generalist training; ‘‘abstract rehearsal’’ before and during their surgical rotations when concrete, empirically faithful rehearsal was prized; and ‘‘undersupervised struggle,’’ in which they performed robotic surgical work close to the edge of their capacity with little expert supervision—when norms and policy dictated such supervision. \n\n↩︎ \n\n\n Throughout, but see particularly the section titled “Search as information infrastructure” (pp. 54-55). ↩︎ \n\n\n\n The invisibility or ‘taken-for-grantedness’ of infrastructure is widely remarked on in infrastructure studies (Bowker et al., 2010) . You can, for instance, follow citations from Haider & Sundin (2019) through Star (1999) (“The taken-for-grantedness of artifacts and organizational arrangements is a sine qua non of membership in a community of practice” (p. 381)) and Star & Ruhleder (1996) (“Strangers and outsiders encounter infrastructure as a target object to be learned about. New participants acquire a naturalized familiarity with its objects as they become members” (p. 113)) to Bowker & Star (2000) and Lave & Wenger (1991) , all discussing the taken-for-grantedness of infrastructures and particularly how infrastructures are visible to newcomers to a practice or community, but shift out of view as they become full members. (Whether web search is generally visible to newcomers is questioned, though, in Sundin (2020) , who finds “search engines almost never seem to have been a visible information infrastructure for the current generation of teenagers” (p. 378).) The references to Lave & Wenger (1991) are to the book as a whole, but a direct discussion can be found on pp. 101-102. Bowker & Star (2000) cite to Cambrosio & Keating (1995) , who discuss both infrastructures taken for granted and how “[w]idely distributed know-how,” or tacit knowledge, can be taken for granted. ↩︎ \n\n\n\n Ch. 3: The Craft and Craftiness of Hacking ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/admitting_searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ads", "type": "pages" , "date": "", "title": "ads tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"ads\" tag.\n \n\n\n{% assign tag_name = \"ads\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"ads\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"ads\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ads/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-advertising-in-search", "type": "pages" , "date": "", "title": "advertising-in-search tag" , "tags": "", "content": "{% assign tag_name = \"advertising-in-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"advertising-in-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"advertising-in-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/advertising-in-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-alternative-search-engines", "type": "pages" , "date": "", "title": "alternative-search-engines tag" , "tags": "", "content": "{% assign tag_name = \"alternative-search-engines\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"alternative-search-engines\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"alternative-search-engines\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/alternative-search-engines/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ambiguity", "type": "pages" , "date": "", "title": "ambiguity tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"ambiguity\" tag.\n \n\n\n{% assign tag_name = \"ambiguity\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"ambiguity\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"ambiguity\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ambiguity/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-andi", "type": "pages" , "date": "", "title": "Andi tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Andi\" tag.\n \n\n\n{% assign tag_name = \"Andi\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Andi\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Andi\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/andi/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-anthropic-claude", "type": "pages" , "date": "", "title": "Anthropic-Claude tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Anthropic-Claude\" tag.\n \n\n\n{% assign tag_name = \"Anthropic-Claude\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Anthropic-Claude\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Anthropic-Claude\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/anthropic-claude/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-appendices", "type": "diss" , "date": "2022-12-16", "title": "8. Appendices" , "tags": "[diss]", "content": "\nAppendix I. Research Participants\n\nAppendix II. Annotated Interview Guide\n\nAppendix III. Code Generation Tools and Search\n [note: opens new page]\n\n Appendix I. Research Participants\n\n\n\n Participant Table\n \n\n\n\n\n\n\n\n\n Participant \n role \n industry \ngender identity \n\n\n\n\n Shreyan \n Data Software Engineer \n enterprise software \nman \n\n\n Shawn \n Developer Advocate, former data engineer \n open source data software \nman \n\n\n Noah \n Senior Data Engineer \n media streaming \nman \n\n\n Sameer \n Senior Software Engineer \n computing technology \nman \n\n\n Raha \n Senior Data Engineer \n media, entertainment \nwoman \n\n\n Aditya \n Senior Engineering Manager \n enterprise software \nman \n\n\n John \n Data Scientist \n apparel \nman \n\n\n Amar \n Software Engineering Manager \n enterprise software \nman \n\n\n Ajit \n Senior Data Engineer \n retail \nman \n\n\n Kari \n Data Platform Engineer \n apparel \nwoman \n\n\n Vivek \n Senior Data Scientist \n social media \nman \n\n\n Jillian \n Data Engineer \n fitness software \nwoman \n\n\n Charles \n Data Scientist \n online marketplace \nman \n\n\n Phillip \n Data Engineer \n enterprise software \nman \n\n\n Devin \n Data Platform Software Engineer \n healthcare \nman \n\n\n Arjun \n Principal Software Engineer \n enterprise software \nman \n\n\n Christina \n Senior Technical Consultant \n enterprise software \nwoman \n\n\n Michael \n Data Engineer \n financial services \nman \n\n\n Jamie \n Senior Data Engineer \n web publishing \nwoman \n\n\n Ross \n Senior Site Reliability Engineer \n web analytics \nman \n\n\n Victor \n Senior Data Engineer \n web analytics \nman \n\n\n Nicole \n Executive \n data analysis software \nwoman \n\n\n Patrick* \n Data Engineer \n enterprise software \nman \n\n\n Nisha \n Director Of Data Services \n enterprise software \nwoman \n\n\n Lauren \n Machine Learning Engineer \n online marketplace \nwoman \n\n\n Jane \n Analyst \n social media \nwoman \n\n\n Logan \n Analyst \n nonprofit \nman \n\n\n Amy \n Data Platform Engineer \n financial services \nwoman \n\n\n Megan \n Senior Data Engineer \n business intelligence \nwoman \n\n\n Zayn \n Data Engineer \n real estate \nman \n\n\n\n\n Note: Currently listed are the roles and title at the time of interview. * indicates role/industry change since initial interview; changed companies around time of interview and was onboarding at a new company, we discussed their prior role, which is listed; ** two interviewees who spoke of experiences prior to transitions away from that work.). The last five individuals were new participant member checks.\n\n\n Appendix II. Annotated Interview Guide\n\n\n The questions in my interview guide were initially built around these five research questions developed for my prospectus:\n\n\n\n how and why is search used\n \n\n how is it imagined as useful for the purpose its enlisted\n \n\n what limitations are identified and addressed (or not)\n \n\n how do conceptions & practices of web search reconfigure work practices\n \n\n how are reconfigurations both shaped by and reshaping responsibility/accountability for work processes across individual professionals and organizations\n \n\n\n Most of my interviews were conducted with the principal guide on-hand being a list of topics (pasted at top of a document with extensive annotations though rarely referenced during interviews):\n\n\n\n initial reaction question (IRQ)\n \n After finding it quite useful when interviewees shared their initial reactions, I added this as my starting question. \n\n\n\n role\n \n\n team\n \n\n search\n \n\n talk about search?\n \n LMGTFY \n\n\n\n search fails/struggles\n \n\n ask people?\n \n\n support channels?\n \n\n documentation/intranet/enterprise search?\n \n\n feedback & code review\n \n\n notes & cheatsheets\n \n\n mentorship\n \n\n on-boarding\n \n\n any questions for me & reflections on the interview\n \n these two questions were also quite useful in eliciting open-ended and unanticipated responses. \n\n\n\n\n I also had a list of interviewing reminders (though not hard and fast rules) for myself that grew throughout the first several interviews:\n\n\n\n CONCRETE examples\n \n\n pauses are good\n \n\n don’t talk too much\n \n\n “say more” & push\n \n\n one question at a time\n \n\n do not interrupt\n \n\n note/probe laughter & annoyance/frustration\n \n\n\n Appendix III. Code Generation Tools and Search\n\nThis appendix is prepared on a separate page: Appendix III. Code Generation Tools and Search", "snippet": "\n", "url": "/diss/appendices/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-appendix-cgt-and-search", "type": "diss" , "date": "2022-12-16", "title": "Appendix III. Code Generation Tools and Search" , "tags": "[diss]", "content": "\n The latest generation of plugins for IDEs that some people121\n suggest might replace web search are those that support code generation directly from comments written within the code. This is a variant of a larger class of tools, called code generation tools.122\n One such plugin is GitHub’s Copilot, based on the OpenAI Codex model, itself based on the Generative Pre-trained Transformer (GPT) models from OpenAI. My interview research did not generally directly address GitHub’s Copilot.123\n The data engineers I asked about it had not used it. I will not go into the technical mechanisms of these systems, other than note that they are designed to take a prompt and predict the most likely text strings to follow. If I type “Mary had a” into the OpenAI GPT-3 Playground124\n , the system completes the nursery rhyme.\n\n\n GitHub Copilot, free to GitHub verified students, teachers, and maintainers of popular open source projects125\n , is trained on portions of the significant amount of code uploaded to GitHub, which raises legal, ethical, and security concerns.126\n can It perhaps be imagined as an advanced autocomplete. Rather than suggesting the completion of a function name or command in your code, the plugin will suggest an entire block of code, perhaps the entire function. When the user types a comment or a line of code, the plugin will suggest a completion. Some users appear to have been satisfied with these suggestions. GitHub wrote a blog post in July 2022 reporting on a survey of Copilot users combined with data on their shown and accepted Copilot suggestions\n \n (Ziegler, 2022)\n\n . They claim “[u]sing GitHub Copilot correlates with improved developer productivity”. GitHub continues to publish reports along this line\n \n (Kalliamvakou, 2022)\n\n , while there is also intense interest from external researching on the use and effects of GitHub Copilot.\n\n\n External researchers are particularly examining security vulnerabilities (some in a manner similar to that of\n \n Fischer et al. (2017)\n\n and others mentioned in\n \n Extending searching\n \n ). A team from NYU and the University of Calgary examined code suggested by GitHub copilot scenarios developed relevant to MITRE’s “Top 25” Common Weakness Enumeration (a regularly updated list of significant software vulnerabilities). Across the 89 scenarios they had Copilot produce over 1,500 programs of which they found approximately 40% to be vulnerable\n \n (Pearce et al., 2021)\n\n . They recommend that Copilot “should be paired with appropriate security-aware tooling during both training and generation to minimize the risk of introducing security vulnerabilities.”\n\n\n Security concerns, and such precautions, are also acknowledged by GitHub127\n :\n\n\n\n You should take the same precautions as you would with any code you write that uses material you did not independently originate. These include rigorous testing, IP scanning, and checking for security vulnerabilities. You should make sure your IDE or editor does not automatically compile or run generated code before you review it.\n \n\n\n These suggested responses to vulnerabilities in Copilot mirror some of what I discussed in\n \n Extending searching\n \n around the evaluation of search results and the decoupling from search.\n\n\n The plugins for IDEs, and the voice-search, free-text, as in the OpenAI GPT-3 Playground128\n and chat-based, ex. ChatGPT129\n , language interfaces are user interface components that, in the language of Handoff, provide distinct engagements for interactions. One of the benefits of using a general-purpose search engine is the contestability and interrogatability, perhaps not of the ranking of the websites on the SERP, but of the results. Data engineer searchers can look at the websites where they find information to gain clues as to its provenance and trustworthiness. GitHub Copilot and ChatGPT are black boxed and do not currently provide access for that, though GitHub has announced future product changes that will allow some interrogation130\n , beyond directly engaging with the system for alternatives.\n\n\n The tool designers will likely continue to improve the tool, and IDEs and companies may adapt practices to pull in such untested code in way primed for effective testing. OpenAI and others continue to do research looking into the hazards posed by such tools\n \n (Khlaaf et al., 2022)\n\n . Copilot does and will likely continue to replace some subset of searching done by some data engineers. And also just like promises of automatic programming in the past\n \n (Ensmenger, 2010)\n\n , if it does lower the cost of programming it will likely only increase the demand for more programmers. The programming languages used by my research participants are far simpler to use and understand than even the “automatic programming” languages of the past, like FORTRAN and COBOL. The hard problems remain, how to use a tool to do something you or someone else wants.\n\n\n A web search engine provides some means to find what others, not only the search engine, say about top ranking search results, in addition to viewing the source website. This is a capacity of the configuration of web search that is leveraged in misinformation research. Some search engines provide interface options to learn general information about a website, to, for instance, see if the website presenting itself as a news organization is identified by Google as one. Mike Caulfield’s SIFT model for basic fact-checking practices has four moves: Stop, Investigate the source, find better coverage, trace the original context\n \n (Caulfield, 2019b)\n\n . Those moves are not supported by the Copilot configuration itself. Users of Copilot and other such tools will still find it helpful to refer to web search, and turn to sources of search repair, for learning things they do not already know.131\n GitHub’s investments in Copilot come alongside a significant redesign of their search platform, for searching for code within GitHub\n \n (GitHub, 2022)\n\n132\n , suggesting a recognition from the creators of the tool that search will not be fully replaced.\n\n\n Bibliography\n\n\n\n\n\n\n\n\n\n\nAvgustinov, P. (2021).Improving github code search | the github blog. https://github.blog/2021-12-08-improving-github-code-search/ .\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nCaulfield, M. (2019b).SIFT (the four moves) | hapgood. https://hapgood.us/2019/06/19/sift-the-four-moves/ .\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEnsmenger, N. (2010).The computer boys take over: Computers, programmers, and the politics of technical expertise. The MIT Press.\n\n\n\n\n\n\n\n\nFischer, F., Böttinger, K., Xiao, H., Stransky, C., Acar, Y., Backes, M., & Fahl, S. (2017). Stack overflow considered harmful? The impact of copy&paste on android application security.2017 Ieee Symposium on Security and Privacy (Sp), 121–136.\n\n\n\n\n\n\n\n\n\n\n\n\n\nGitHub. (2022).Introducing an all-new code search and code browsing experience | github changelog. https://github.blog/changelog/2022-11-09-introducing-an-all-new-code-search-and-code-browsing-experience/ .\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKalliamvakou, E. (2022).Research: Quantifying github copilot’s impact on developer productivity and happiness | the github blog. https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/ .\n\n\n\n\nKhlaaf, H., Mishkin, P., Achiam, J., Krueger, G., & Brundage, M. (2022).A hazard analysis framework for code synthesis large language models. arXiv. https://doi.org/10.48550/ARXIV.2207.14157 \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMetaphor. (2021).Today we’re releasing wanderer 2Metaphor. https://twitter.com/metaphorsystems/status/1428793313663111170 .\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPearce, H. A., Ahmad, B., Tan, B., Dolan-Gavitt, B., & Karri, R. (2021). An empirical cybersecurity evaluation of github copilot’s code contributions.ArXiv,abs/2108.09293.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSalva, R. J. (2022).Preview: Referencing public code in github copilot | the github blog. https://github.blog/2022-11-01-preview-referencing-public-code-in-github-copilot/ .\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nZiegler, A. (2022).Research: How github copilot helps improve developer productivity | the github blog. https://github.blog/2022-07-14-research-how-github-copilot-helps-improve-developer-productivity/ .\n\n\n\n\n\n\n\n\n I am referring to popular commentary on Twitter from software developers and data engineers. ↩︎ \n\n\n\n I have used an older tool, TabNine, based on an earlier generation of OpenAI’s GPT, since the summer of 2019. It is installed in my text editor, Sublime Text, which I use for all of my writing and python coding (until early 2022 when I started using PyCharm from JetBrains to gain familiarity with the sorts of integrated development environments available to my interviewees). I have used it in my Python coding and in any writing that I’ve done. It runs locally on my machine and provides a several predictions to suggest an autocomplete for most any string that I type. In my prose writing it is particularly helpful for spelling suggestions and remembering the shorthand for inserting a citation. It has not replaced a significant part of my web searching. ↩︎ \n\n\n\n The first technical preview of Copilot was available in the summer of 2021, with the subscription service starting in the summer of 2022. ↩︎ \n\n\n\n https://beta.openai.com/playground ↩︎ \n\n\n\n I signed up for a free trial and started paying $100.00/year in September 2022. (While I am notionally a student, the GitHUb verification process does not recognize UC Berkeley’s filing fee status.) I have found it at times both very frustrating and very useful. The coding I do is very different from that of data engineers coding within their company codebase and systems. My use gives me only limited insight and I rely mostly on the findings from my interviews on the larger practices of the data engineers and external commentary and research on Copilot. ↩︎ \n\n\n\n I will not address the legal concerns and ethical concerns here except to note the broad sort of concerns and that they have some (but not total) similarity to early conversations and legal suits regarding web search. The concerns include questions about the copyright protection for and licenses of the uploaded code as well as GitHub’s terms of service, the power imbalance between GitHub, now owned my Microsoft, and many developers who have uploaded code, and the absence of profit sharing. ↩︎ \n\n\n\n https://github.com/features/copilot ↩︎ \n\n\n\n https://beta.openai.com/playground ↩︎ \n\n\n\n OpenAI released their GPT-driven ChatGPT for public beta testing on November 30th 2022. One of my interviewees sent me a screenshot of them using it, asking the chatbot “How do data engineers use google search for their job?” \n\n Data engineers can use Google Search to find information and resources related to data engineering. This can include finding tutorials, documentation, and other resources that can help them with their work. For example, a data engineer might use Google Search to look up the syntax for a particular SQL query, find a tutorial on how to use a certain data analysis tool, or search for information on best practices for data engineering. \n Additionally, data engineers can use Google Search to stay-to-date on the latest developments and trends in the… \n\n↩︎ \n\n\n GitHub announced plans in November, 2022 to identify public repositories of code that contain matching code, of a particular character count (Salva, 2022) . ↩︎ \n\n\n\n Google and other search engines already use large language models, such as BERT, as components in their search engine. These components generally are used to support the same configurations in the user interface of the SERP, a list of links with some rich features. Some search engines, like metaphor.systems a large language model trained on Hacker News posts (Metaphor, 2021) , have adapted the search box to be a longer freetext field, but still provide a list of results. Another, Andi, operates as a chatbot that also provides a list of results. Other general-purpose search engines and search tools have also introduced distinct plugins on the SERP making use of generative AI. You.com, a general-purpose web search engine, has applications that provide generative AI tooling for code writing, short prose, and image generation from prompts directly within the search bar. ↩︎ \n\n\n\n Significant investments into GitHub’s code search were announced in December 2021 (Avgustinov, 2021) . While my research participants reported searching GitHub, they were generally searching for particular issues posted to repositories for debugging. ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/appendix_cgt_and_search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-articulation", "type": "pages" , "date": "", "title": "articulation tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"articulation\" tag.\n \n\n\n{% assign tag_name = \"articulation\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"articulation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"articulation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/articulation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-articulations", "type": "pages" , "date": "", "title": "articulations tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"articulations\" tag.\n \n\n\n{% assign tag_name = \"articulations\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"articulations\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"articulations\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/articulations/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-artificial-intelligence", "type": "pages" , "date": "", "title": "artificial intelligence tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"artificial intelligence\" tag.\n \n\n\n{% assign tag_name = \"artificial intelligence\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"artificial intelligence\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"artificial intelligence\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/artificial-intelligence/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-arxiv", "type": "pages" , "date": "", "title": "arXiv tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"arXiv\" tag.\n \n\n\n{% assign tag_name = \"arXiv\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"arXiv\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"arXiv\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/arxiv/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-autocomplete-in-web-search", "type": "pages" , "date": "", "title": "autocomplete-in-web-search tag" , "tags": "", "content": "{% assign tag_name = \"autocomplete-in-web-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"autocomplete-in-web-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"autocomplete-in-web-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/autocomplete-in-web-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-autocomplete-js", "type": "pages" , "date": "", "title": "search/autocomplate.js" , "tags": "", "content": "// This script provides autocomplete functionality for a website search tool, based on Lunr.js\n\nfunction modifyDynamicSearchTerm(searchTerm) {\n // This function allows you to modify the search term before it is used to search the index\n // For example, you could use this to implement a \"Did you mean?\" feature\n // strip hyphens from `tags:` searches (e.g. `tags:foo-bar` becomes `tags:foobar`, `frankly -tags:honesty-stuff` becomes `frankly -tags:honestystuff`)\n searchTerm = searchTerm.replace(/tags:([^\\s-]+)/g, function (match, p1) {\n return 'tags:' + p1.replace(/-/g, '');\n });\n return searchTerm;\n}\n\nasync function generateNewCombinedSuggestions(searchFrom = \"server\") {\n var searchTerm = searchBox.value.toLowerCase();\n sessionStorage.setItem('searchTerm', searchTerm);\n searchTerm = modifyDynamicSearchTerm(searchTerm);\n dynamicSearchTerm = searchTerm + '* ' + searchTerm;\n // Toggle to test client-side search\n // searchFrom = \"client\"\n let results;\n try {\n if (searchFrom === \"client\") {\n // console.log(\"Attempting client-side search\");\n if (!window.idx || !window.itemsIndex) {\n await fetchIndexes();\n }\n const idx = window.idx;\n const itemsIndex = window.itemsIndex;\n // console.log(\"idx:\", idx);\n // console.log(\"itemsIndex:\", itemsIndex);\n // Perform the client-side search\n const clientResults = idx.search(dynamicSearchTerm); // search the client-side Lunr index\n results = clientResults;\n } else {\n // console.log(\"Attempting server-side search\");\n const serverResults = await searchLunrish(dynamicSearchTerm);\n // If the results[\"documents\"] is empty, error out and try client-side search\n\n results = serverResults[\"documents\"];\n } \n } catch (error) {\n // ****** \n console.log(\"Error:\", error);\n // Print all local variables and their values\n console.log(\"searchTerm:\", searchTerm);\n console.log(\"dynamicSearchTerm:\", dynamicSearchTerm);\n console.log(\"results:\", results);\n // ****** \n\n if (error.name === 'QueryParseError' && (error.message.includes(\"unrecognised field 'sort'\") || error.message.includes(\"unrecognised field 'similar'\") || error.message.includes(\"unrecognised field 'cat'\"))) {\n // This is not an exception — sort is handled in bespoke code elsewhere.\n // Perform some alternative action or display fallback results\n results = [];\n // Check if the searcher paused at a hyphen: autocomplete.js:43 Uncaught TypeError: Cannot read properties of undefined (reading '_index')\n } else if (error.name === 'TypeError' && error.message.includes(\"Cannot read properties of undefined (reading '_index')\") && searchTerm.endsWith('-')) {\n results = [];\n // Check if the searcher paused at tags: and is about to type a tag name\n // e.QueryParseError {name: 'QueryParseError', message: 'expecting term, found nothing', start\n } else if (error.name === 'QueryParseError' && error.message.includes(\"expecting term, found nothing\") && searchTerm.endsWith('tags:')) {\n results = [];\n // Check if it is a `tag:` search when is should be a `tags:` search issue.\n } else if (error.name === 'QueryParseError' && error.message.includes(\"unrecognised field 'tag'\")) {\n // Update the search term to use the correct field name\n \n searchTerm = searchTerm.replace('tag:', 'tags:');\n // Update in the search box \n searchBox.value = searchTerm;\n // Tell the user what happened\n var message = document.createElement('div');\n message.classList.add('alert', 'alert-warning', 'alert-dismissible', 'fade', 'show');\n message.setAttribute('role', 'alert');\n message.innerHTML = 'Warning! Your search term was modified to use the tags field (instead of `tag`). ';\n } else {\n console.error(\"Server-side search failed:\", error);\n console.log(\"Attempting client-side search\");\n // Perform the client-side search\n return await generateNewCombinedSuggestions(searchFrom = \"client\")\n }\n }\n\n // Generate the new search suggestions, combining dynamic results and hand-curated suggestions\n var dynamicResults = results.map(function (result) {\n if (searchFrom === \"client\") {\n return {\n title: itemsIndex[result.ref].title,\n url: itemsIndex[result.ref].url,\n tags: itemsIndex[result.ref].tags,\n date: itemsIndex[result.ref].date\n };\n } else {\n result = result.docData;\n return {\n title: result.title,\n url: result.url,\n tags: result.tags,\n date: result.date\n };\n }\n }).slice(0, 10); // limit to the top 10 dynamic results\n\n // Helper function to slugify a string\n // function slugify(str) {\n // return str.toLowerCase().replace(/\\s+/g, '-');\n // }\n function slugify(str) {\n return str && typeof str === 'string' ? str.toLowerCase().replace(/\\s+/g, '-') : '';\n }\n\n var searchTermSlugified = slugify(searchTerm);\n\n var exactMatches = dynamicResults.filter(function (result) {\n var titleSlugified = slugify(result.title);\n var urlLastSegment = result.url.substring(result.url.lastIndexOf('/') + 1).split('.')[0]; // Get last segment of URL\n var urlSlugified = slugify(urlLastSegment);\n return titleSlugified === searchTermSlugified || urlSlugified === searchTermSlugified;\n });\n\n var filteredSuggestions = handCuratedSuggestions.filter(function (suggestion) {\n return suggestion.toLowerCase().includes(searchTerm);\n });\n\n // Create a Set with exactMatches\n var exactMatchesSet = new Set(exactMatches);\n\n var remainingResults = dynamicResults.filter(function (result) {\n return !exactMatchesSet.has(result);\n });\n\n var combinedSuggestions = [...exactMatches, ...filteredSuggestions, ...remainingResults];\n\n return combinedSuggestions\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n // Search state\n var lastDynamicSuggestions = [];\n var activeSuggestionIndex = -1; // Keeping track of active suggestion.\n \n\n let debounceTimeout; // Use 'let' for block scope\n // Event listener for handling input in the search box\n searchBox.addEventListener(\"input\", function () {\n console.log(\"Input event triggered\"); // Log when input event is triggered\n clearTimeout(debounceTimeout); // Clear existing timeout\n console.log(\"Existing debounce timeout cleared\"); // Log debounce timeout clearance\n\n debounceTimeout = setTimeout(async function () {\n console.log(\"Debounce timeout completed, processing input\"); // Log when debounce period ends\n\n // Check if the search box is empty\n if (!searchBox.value) {\n console.log(\"Search box is empty, showing hand-curated suggestions\"); // Log when input is empty\n showSuggestions(handCuratedSuggestions);\n return;\n } else {\n console.log(\"Search box has value, showing last dynamic suggestions\"); // Log when input has value\n showSuggestions(lastDynamicSuggestions);\n }\n\n try {\n // Generate new combined suggestions based on the input\n console.log(\"Generating new combined suggestions\"); // Log before generating new suggestions\n const combinedSuggestions = await generateNewCombinedSuggestions();\n lastDynamicSuggestions = combinedSuggestions; // Update with new suggestions\n console.log(\"New combined suggestions generated\", combinedSuggestions); // Log new suggestions\n showSuggestions(combinedSuggestions); // Display the updated suggestions\n } catch (error) {\n console.error('Error generating suggestions:', error);\n // Log error handling\n console.log(\"An error occurred, handling the error\");\n // Implement additional error handling or fallback logic here if necessary\n }\n\n // Reset the active suggestion index to default\n activeSuggestionIndex = -1;\n console.log(\"Reset active suggestion index to -1\"); // Log resetting of active suggestion index\n }, 300); // Set a 300ms delay for debounce\n\n console.log(\"Debounce timeout set for 300ms\"); // Log setting of new debounce timeout\n });\n\n\n\n \n\n document.addEventListener('click', function (e) {\n // Check if clicked element is not inside suggestionsList or searchBarLinks\n if (!suggestionsList.contains(e.target) && !searchBarLinks.contains(e.target) && !searchBox.contains(e.target) && !searchPlusSuggestionsBottom.contains(e.target)) {\n // console.log('Clicked outside suggestionsList, searchBarLinks, and searchBox');\n clearSuggestions();\n } else if (e.target.textContent.startsWith('!')) {\n e.preventDefault();\n var form = document.querySelector('form') \n // If the suggestion starts with a bang, update the form value and use handleBangs\n form.q.value = e.target.textContent\n return handleBangs(form)\n } else if (suggestionsList.contains(e.target)) { \n // console.log('Clicked inside suggestionsList');\n } else {\n \n // console.log('Clicked inside suggestionsList, searchBarLinks, or searchBox');\n // console.log(e.target.textContent);\n // console.log(e.target.href);\n }\n });\n searchBox.addEventListener(\"keydown\", function (e) {\n var suggestions = Array.from(suggestionsList.children);\n switch (e.key) {\n case \"Escape\":\n clearSuggestions();\n break;\n case \"ArrowDown\":\n activeSuggestionIndex = (activeSuggestionIndex + 1) % suggestions.length;\n break;\n case \"ArrowUp\":\n activeSuggestionIndex = (activeSuggestionIndex - 1 + suggestions.length) % suggestions.length;\n break;\n case \"Enter\":\n if (activeSuggestionIndex !== -1) {\n e.preventDefault();\n if (suggestions[activeSuggestionIndex].querySelector('a.autocomplete-title').textContent.startsWith('!')) {\n // If the suggestion starts with a bang, update the form value and use handleBangs\n var form = document.querySelector('form') \n form.q.value = suggestions[activeSuggestionIndex].querySelector('a.autocomplete-title').textContent\n return handleBangs(form)\n } else {\n window.location.href = suggestions[activeSuggestionIndex].querySelector('a.autocomplete-title').href;\n }\n }\n }\n\n removeHighlight();\n\n if (!isNaN(activeSuggestionIndex) && activeSuggestionIndex !== -1) {\n suggestions[activeSuggestionIndex].classList.add(\"hover\");\n suggestions[activeSuggestionIndex].scrollIntoView({ block: 'nearest' });\n }\n });\n\n function clearSuggestions() {\n suggestionsList.innerHTML = \"\";\n searchPlusSuggestionsBottom.classList.add('d-none');\n navigate_suggestions_hint.classList.add(\"d-none\");\n close_suggestions_hint.classList.add(\"d-none\");\n if (!searchBox.value && searchBox !== document.activeElement) {\n searchPlusSuggestionsTop.classList.remove(\"border\");\n }\n }\n\n suggestionsList.addEventListener(\"mouseover\", function (e) {\n var target = e.target;\n // Find the closest parent LI element\n while (target.nodeName !== \"LI\") {\n target = target.parentNode;\n if (!target) return;\n }\n removeHighlight();\n target.classList.add(\"hover\");\n });\n\n suggestionsList.addEventListener(\"mouseout\", function () {\n removeHighlight();\n });\n\n function removeHighlight() {\n var highlighted = suggestionsList.querySelector(\".hover\");\n if (highlighted) {\n highlighted.classList.remove(\"hover\");\n }\n }\n});", "snippet": "\n", "url": "/js/search/autocomplete.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-autocomplete", "type": "pages" , "date": "", "title": "autocomplete tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"autocomplete\" tag.\n \n\n\n{% assign tag_name = \"autocomplete\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"autocomplete\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"autocomplete\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/autocomplete/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-automation-bias", "type": "pages" , "date": "", "title": "automation bias tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"automation bias\" tag.\n \n\n\n{% assign tag_name = \"automation bias\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"automation bias\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"automation bias\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/automation-bias/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-bangs-js", "type": "pages" , "date": "", "title": "search/bangs.js" , "tags": "", "content": "const bangActions = {\n \"!0\": { url: \"{{ site.posts.first.url }}\", param: null },\n \"!help\": { url: '{{ site.url }}/search/about', param: null },\n \"!contact\": { url: '{{ site.url }}/contact', param: null },\n \"!browse\": { url: '{{ site.url }}/browse', param: null },\n \"!hire-me\": { url: '{{ site.url }}/hire-me', param: null },\n \"!ddg\": { url: 'https://duckduckgo.com/', param: 'q' },\n \"!br\": { url: 'https://search.brave.com/search', param: 'q' },\n \"!t\": { url: 'https://twitter.com/search', param: 'q' },\n \"!tff\": { url: 'https://twitter.com/search', param: 'q', special: \"filter%3Afollows%20\" }, // Special case, handle separately\n \"!b\": { url: 'https://www.bing.com/search', param: 'q' },\n \"!eco\": { url: 'https://www.ecosia.org/search', param: 'q' },\n \"!g\": { url: 'https://www.google.com/search', param: 'q' },\n \"!qw\": { url: 'https://www.qwant.com/', param: 'q' },\n \"!y\": { url: 'https://you.com/search', param: 'q' },\n \"!p\": { url: 'https://www.perplexity.ai/search/', param: 'q' },\n \"!ss\": { url: 'https://www.semanticscholar.org/search', param: 'q' },\n \"!w\": { url: 'https://en.wikipedia.org/w/index.php', param: 'search' },\n}\n\n\n// Handle the bang action\nfunction handleBang(input, target) {\n const bang = input.split(' ')[0];\n const query = input.slice(bang.length).trim();\n const form = document.getElementById('search-form');\n\n const bangAction = bangActions[bang];\n\n // If bang is \"!random\" or \"!r\", handle it differently.\n if (bang === \"!random\" || bang === \"!r\") {\n handleRandom(target);\n return;\n }\n \n // If bang is not in the actions or it does not have a param field, simply open the URL.\n if (!bangAction || !bangAction.param) {\n window.open(bangAction.url, target);\n return;\n }\n\n // If bang action involves changing the form, handle it here.\n handleFormChange(form, bangAction, query, target);\n}\n\n// This function handles changes to the form action and submits the form.\nfunction handleFormChange(form, bangAction, query, target) {\n form.action = bangAction.url;\n form.q.name = bangAction.param;\n // Check if this bangAction has a special handling.\n if (bangAction.special) {\n // If it does, append the special value to the query.\n form.q.value = bangAction.special + query;\n query = form.q.value;\n } else {\n form.q.value = query;\n }\n\n window.open(form.action + \"?\" + form.q.name + \"=\" + query, target);\n}\n\n\n\nfunction handleBangs(form) {\n var originalAction = form.action; // Store the original action\n var originalTarget = form.target; // Store the original target\n var input = form.q.value;\n if (input.startsWith('!')) {\n form.target = \"_blank\"; // This will make the form open in a new target\n handleBang(input, form.target)\n // This is where you manually submit the form after changing form.action\n form.submit();\n }\n form.action = originalAction; // Reset the form action to its original value\n form.target = originalTarget; \n // return false; // Return false to prevent the default form submission\n form.submit();\n}\n\nfunction handleRandom(target) {\n fetch('{{ site.url }}/assets/item_index.json')\n .then(response => response.json())\n .then(data => {\n var randomIndex = Math.floor(Math.random() * data.length);\n var randomPage = data[randomIndex].url;\n window.open(randomPage + \"?source=random\", target);\n })\n .catch((error) => console.error('Error:', error));\n}", "snippet": "\n", "url": "/js/search/bangs.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "search-bangs", "type": "pages" , "date": "", "title": "search/!Bangs" , "tags": "", "content": "\nThis page lists the supported !bangs (for more see [search/Guide](guide)). The list is dynamically compiled from the JavaScript code implementing the functionality. The bang on the left is the search query, the URL on the right is the action initiated when searching that bang in this website's search tool.\n \n\n\n\n!Bangs may not work on mobile. [2023-06-27 16:04:11]\nThis list is out of date because the `js/search/bangs.js` script has changed. [2023-08-04 18:54:08]\n\n\n\n\n A list of !bangs with their corresponding URLs\n \n \n !Bang\n URL\n \n \n \n {% for item in site.data.bangs %}\n {% assign new_url = item[1] | replace: 'siteUrl',site.url %}\n \n [\n{{ item[0] }}\n]\n {{ new_url }}\n \n {% endfor %}\n \n\n\n\n\nIn addition to the above there is also [\n!random\n], which opens a random page on this website.\n \n\n\n\n", "snippet": "\n", "url": "/search/bangs/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-benchmarks", "type": "pages" , "date": "", "title": "benchmarks tag" , "tags": "", "content": "{% assign tag_name = \"benchmarks\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"benchmarks\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"benchmarks\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/benchmarks/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "better-search", "type": "pages" , "date": "2023-08-28 10:18:14 -0700", "title": "Better search." , "tags": "better-search", "content": "We've long needed better ways to think about, talk about, and do search. \n\nResearchers have long identified problems. Searchers have long issued complaints.\n\nBut we've been limited by the successful exploitation of prior innovations. New approaches had been coopted, overshadowed, or never imagined.\n\nNow, the popularity of OpenAI's ChatGPT has forced or helped a lot of people to see search (web search, enterprise search, local search, etc.) differently. We can see that search is more than ten blue links. It is more than one company. It is built on the collection of people's words and clicks. It could be different.\n\nWe have a big chance to really change search for the better. Will we?\n\n\n\n\nSee my write-up on [tooling to support people in making hands-on and open evaluations of search](/2024/01/30/tooling-to-support-people-in-making-hands-on-and-open-evaluations-of-search/).\n\n\n\nSee [my exploration of search rights at SearchRights.org](https://searchrights.org/).\n\n\n", "snippet": "\n", "url": "/better-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-better-search", "type": "pages" , "date": "", "title": "better-search tag" , "tags": "", "content": "{% assign tag_name = \"better-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"better-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"better-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/better-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-bibliography", "type": "diss" , "date": "2022-12-16", "title": "Bibliography" , "tags": "[diss]", "content": "\n\nAbbate, J. (2012).Recoding gender: Women’s changing participation in computing (history of computing). The MIT Press. https://mitpress.mit.edu/9780262304535/ \n\n\n\nAmes, M. (2019).The charisma machine : The life, death, and legacy of one laptop per child. The MIT Press.\n\n\nAnanny, M., & Crawford, K. (2018). Seeing without knowing: Limitations of the transparency ideal and its application to algorithmic accountability.New Media & Society,20 (3), 973–989. https://doi.org/10.1177/1461444816676645 \n\n\n\nAndalibi, N., & Bowen, K. (2022). Internet-based information behavior after pregnancy loss: Interview study.JMIR Form Res,6 (3), e32640. https://doi.org/10.2196/32640 \n\n\n\nAndalibi, N., & Garcia, P. (2021). Sensemaking and coping after pregnancy loss.Proc. ACM Hum.-Comput. Interact.,5 (CSCW1), 1–32. https://doi.org/10.1145/3449201 \n\n\n\nAntin, J., & Cheshire, C. (2010). Readers are not free-riders: Reading as a form of participation on wikipedia.Proceedings of the 2010 Acm Conference on Computer Supported Cooperative Work, 127–130. https://doi.org/10.1145/1718918.1718942 \n\n\n\nAranda, J. (2010).A theory of shared understanding for software organizations [PhD thesis, University of Toronto]. https://tspace.library.utoronto.ca/bitstream/1807/26150/6/ArandaGarcia_Jorge_201011_PhD_thesis.pdf \n\n\n\nAvgustinov, P. (2021).Improving github code search | the github blog. https://github.blog/2021-12-08-improving-github-code-search/ .\n\n\nAvnoon, N. (2021). Data scientists’ identity work: Omnivorous symbolic boundaries in skills acquisition.Work, Employment and Society,0 (0), 0950017020977306. https://doi.org/10.1177/0950017020977306 \n\n\n\nBadaracco, J. (1991).The knowledge link: How firms compete through strategic alliances. Harvard Business Press. https://archive.org/details/knowledgelinkhow0000bada \n\n\n\nBailey, D. E., & Leonardi, P. M. (2015).Technology choices: Why occupations differ in their embrace of new technology. MIT Press. http://www.jstor.org/stable/j.ctt17kk9d4 \n\n\n\nBailey, D. E., Leonardi, P. M., & Chong, J. (2010). Minding the gaps: Understanding technology interdependence and coordination in knowledge work.Organization Science,21 (3), 713–730. https://doi.org/10.1287/orsc.1090.0473 \n\n\n\nBansal, C., Zimmermann, T., Awadallah, A. H., & Nagappan, N. (2019). The usage of web search for software engineering.arXiv Preprint arXiv:1912.09519.\n\n\nBarad, K. (2003). Posthumanist performativity: Toward an understanding of how matter comes to matter.Signs: Journal of Women in Culture and Society,28 (3), 801–831.\n\n\nBarley, S. R. (1986). Technology as an occasion for structuring: Evidence from observations of ct scanners and the social order of radiology departments.Administrative Science Quarterly,31 (1), 78–108. http://www.jstor.org/stable/2392767 \n\n\n\nBeane, M. (2017).Operating in the shadows: The productive deviance needed to make robotic surgery work [PhD thesis]. MIT.\n\n\nBeane, M. (2019). Shadow learning: Building robotic surgical skill when approved means fail.Administrative Science Quarterly,64 (1), 87–123. https://doi.org/10.1177/0001839217751692 \n\n\n\nBechky, B. A. (2003). Object lessons: Workplace artifacts as representations of occupational jurisdiction.American Journal of Sociology,109 (3), 720–752.\n\n\nBechky, B. A. (2006a). Gaffers, gofers, and grips: Role-based coordination in temporary organizations.Organization Science,17 (1), 3–21.\n\n\nBechky, B. A. (2006b). Talking about machines, thick description, and knowledge work.Organization Studies,27 (12), 1757–1768. https://doi.org/10.1177/0170840606071894 \n\n\n\nBell, G., Blythe, M., & Sengers, P. (2005). Making by making strange: Defamiliarization and the design of domestic technologies.ACM Transactions on Computer-Human Interaction (TOCHI),12 (2), 149–173. https://doi.org/10.1145/1067860.1067862 \n\n\n\nBeniger, J. (1986).The control revolution: Technological and economic origins of the information society. Harvard university press.\n\n\nBernstein, E. S. (2012). The transparency paradox: A role for privacy in organizational learning and operational control.Administrative Science Quarterly,57 (2), 181–216. https://doi.org/10.1177/0001839212453028 \n\n\n\nBeunza, D., & Stark, D. (2012). From dissonance to resonance: Cognitive interdependence in quantitative finance.Economy and Society,41 (3), 383–417. https://doi.org/10.1080/03085147.2011.638155 \n\n\n\nBhatt, I., & MacKenzie, A. (2019). Just google it! Digital literacy and the epistemology of ignorance.Teaching in Higher Education,24 (3), 302–317. https://doi.org/10.1080/13562517.2018.1547276 \n\n\n\nBiden, J. (2022).I know covid testing remains frustrating, but we are making improvements. https://twitter.com/POTUS/status/1478761964327297026 .\n\n\nBijker, W. E., Hughes, T. P., & Pinch, T. (1993). Introduction. InThe social construction of technological systems (pp. 9–50). MIT Press.\n\n\nBilić, P. (2016). Search algorithms, hidden labour and information control.Big Data & Society,3 (1), 205395171665215. https://doi.org/10.1177/2053951716652159 \n\n\n\nBirt, L., Scott, S., Cavers, D., Campbell, C., & Walter, F. (2016). Member checking: A tool to enhance trustworthiness or merely a nod to validation?Qualitative Health Research,26 (13), 1802–1811. https://doi.org/10.1177/1049732316654870 \n\n\n\nBlackler, F. (1995). Knowledge, knowledge work and organizations: An overview and interpretation.Organization Studies,16 (6), 1021–1046. https://doi.org/10.1177/017084069501600605 \n\n\n\nBowker, G. C. (1994).Science on the run: Information management and industrial geophysics at schlumberger, 1920-1940 (inside technology) (Hardcover, p. 199). The MIT Press. https://sicm.mitpress.mit.edu/books/science-run \n\n\n\nBowker, G. C., Baker, K., Millerand, F., & Ribes, D. (2010). Toward information infrastructure studies: Ways of knowing in a networked environment. In J. Hunsinger, L. Klastrup, & M. Allen (Eds.),International handbook of internet research (pp. 97–117). Springer Netherlands. https://doi.org/10.1007/978-1-4020-9789-8_5 \n\n\n\nBowker, G. C., & Star, S. L. (2000).Sorting things out: Classification and its consequences. MIT press. https://mitpress.mit.edu/books/sorting-things-out \n\n\n\nboyd, danah. (2018). You think you want media literacy… do you? InMedium. https://points.datasociety.net/you-think-you-want-media-literacy-do-you-7cad6af18ec2 \n\n\n\nBrandt, J., Guo, P. J., Lewenstein, J., Dontcheva, M., & Klemmer, S. R. (2009). Two studies of opportunistic programming: Interleaving web foraging, learning, and writing code.Proceedings of the Sigchi Conference on Human Factors in Computing Systems, 1589–1598. https://doi.org/10.1145/1518701.1518944 \n\n\n\nBrown, J., & Duguid, P. (2001). Knowledge and organization: A social-practice perspective.Organization Science,12, 198–213.\n\n\nBrown, J. S., & Duguid, P. (1991). Organizational learning and communities-of-practice: Toward a unified view of working, learning, and innovation.Organization Science,2 (1), 40–57. http://www.jstor.org/stable/2634938 \n\n\n\nBrown, J. S., & Duguid, P. (1996).Situated learning perspectives (H. McLellen, Ed.). Educational Technology Publications. https://www.johnseelybrown.com/StolenKnowledge.pdf \n\n\n\nBrown, J. S., & Duguid, P. (1998). Organizing knowledge.California Management Review,40 (3), 90–111.\n\n\nBucciarelli, L. L. L. (1996).Designing engineers (Paperback, p. 230). MIT Press. https://mitpress.mit.edu/books/designing-engineers \n\n\n\nBucher, T. (2017). The algorithmic imaginary: Exploring the ordinary affects of facebook algorithms.Information, Communication & Society,20 (1), 30–44. https://doi.org/10.1080/1369118X.2016.1154086 \n\n\n\nBurrell, J. (2009). The field site as a network: A strategy for locating ethnographic research.Field Methods,21 (2), 181–199. https://doi.org/10.1177/1525822X08329699 \n\n\n\nBurrell, J. (2012).Invisible users: Youth in the internet cafés of urban ghana (acting with technology). The MIT Press.\n\n\nBurrell, J. (2016). How the machine “thinks”: Understanding opacity in machine learning algorithms.Big Data & Society,3 (1), 2053951715622512. https://doi.org/10.1177/2053951715622512 \n\n\n\nBurrell, J. (2018). Thinking relationally about digital inequality in rural regions of the u.s.First Monday,23 (6). https://doi.org/10.5210/fm.v23i6.8376 \n\n\n\nBurrell, J. (2010). Evaluating Shared Access: Social equality and the circulation of mobile phones in rural Uganda.Journal of Computer-Mediated Communication,15 (2), 230–250. https://doi.org/10.1111/j.1083-6101.2010.01518.x \n\n\n\nBurrell, J., & Fourcade, M. (2021). The society of algorithms.Annual Review of Sociology,47 (1), null. https://doi.org/10.1146/annurev-soc-090820-020800 \n\n\n\nBurrell, J., Kahn, Z., Jonas, A., & Griffin, D. (2019). When users control the algorithms: Values expressed in practices on twitter.Proc. ACM Hum.-Comput. Interact.,3 (CSCW). https://doi.org/10.1145/3359240 \n\n\n\nCadwalladr, C. (2016a). Google, democracy and the truth about internet search.The Guardian,4 (12). https://www.theguardian.com/technology/2016/dec/04/google-democracy-truth-internet-search-facebook \n\n\n\nCadwalladr, C. (2016b). Google is not “just” a platform. It frames, shapes and distorts how we see the world.The Guardian,11 (12). https://www.theguardian.com/commentisfree/2016/dec/11/google-frames-shapes-and-distorts-how-we-see-world \n\n\n\nCambrosio, A., & Keating, P. (1995).Exquisite specificity: The monoclonal antibody revolution. Oxford University Press.\n\n\nCambrosio, A., Limoges, C., & Hoffman, E. (2013). Expertise as a network: A case study of the controversies over the environmental release of genetically engineered organisms. In N. Stehr & R. V. Ericson (Eds.),The culture and power of knowledge (pp. 341–362). De Gruyter. https://doi.org/doi:10.1515/9783110847765.341 \n\n\n\nCaplan, R., & Bauer, A. J. (2022).How would one write/call the period immediately after everyone-started-caring-all-at-once-about-disinfo era? [Conversation]. https://twitter.com/robyncaplan/status/1522643551527579648 .\n\n\nCarlo, J. L., Lyytinen, K., & Rose, G. M. (2012). A knowledge-based model of radical innovation in small software firms.MIS Quarterly,36 (3), 865–895. http://www.jstor.org/stable/41703484 \n\n\n\nCaulfield, M. (2019a).Data voids and the google this ploy: Kalergi plan. https://hapgood.us/2019/04/12/data-voids-and-the-google-this-ploy-kalergi-plan/ .\n\n\nCaulfield, M. (2019b).SIFT (the four moves) | hapgood. https://hapgood.us/2019/06/19/sift-the-four-moves/ .\n\n\nChen, M., Fischer, F., Meng, N., Wang, X., & Grossklags, J. (2019). How reliable is the crowdsourced knowledge of security implementation?2019 Ieee/Acm 41st International Conference on Software Engineering (Icse), 536–547. https://doi.org/10.1109/ICSE.2019.00065 \n\n\n\nChen, X., Ye, Z., Xie, X., Liu, Y., Gao, X., Su, W., Zhu, S., Sun, Y., Zhang, M., & Ma, S. (2022). Web search via an efficient and effective brain-machine interface.Proceedings of the Fifteenth Acm International Conference on Web Search and Data Mining, 1569–1572. https://doi.org/10.1145/3488560.3502185 \n\n\n\nChristin, A. (2017). Algorithms in practice: Comparing web journalism and criminal justice.Big Data & Society,4 (2), 1–12. https://doi.org/10.1177/2053951717718855 \n\n\n\nChristin, A. (2018). Counting clicks: Quantification and variation in web journalism in the united states and france.American Journal of Sociology,123 (5), 1382–1415.\n\n\nChristin, A. (2020a).Metrics at work: Journalism and the contested meaning of algorithms. Princeton University Press.\n\n\nChristin, A. (2020b). The ethnographer and the algorithm: Beyond the black box.Theory and Society. https://doi.org/10.1007/s11186-020-09411-3 \n\n\n\nCohen, J. E. (2012).Configuring the networked self. Yale University Press. https://doi.org/10.12987/9780300177930 \n\n\n\nCohen, W. M., & Levinthal, D. A. (1990). Absorptive capacity: A new perspective on learning and innovation.Administrative Science Quarterly,35 (1), 128–152. http://www.jstor.org/stable/2393553 \n\n\n\nColeman, E. G. (2012).Coding freedom: The ethics and aesthetics of hacking. Princeton University Press. https://gabriellacoleman.org/Coleman-Coding-Freedom.pdf \n\n\n\nCollins, H. M., & Evans, R. (2007).Rethinking expertise. University of Chicago Press. https://press.uchicago.edu/ucp/books/book/chicago/R/bo5485769.html \n\n\n\nCommission, F. T. (2013).Sample letter to general purpose search engines. https://www.ftc.gov/sites/default/files/attachments/press-releases/ftc-consumer-protection-staff-updates-agencys-guidance-search-engine-industryon-need-distinguish/130625searchenginegeneralletter.pdf .\n\n\nConstant, D., Sproull, L., & Kiesler, S. (1996). The kindness of strangers: The usefulness of electronic weak ties for technical advice.Organization Science,7 (2), 119–135.\n\n\nContu, A., & Willmott, H. (2003). Re-embedding situatedness: The importance of power relations in learning theory.Organization Science,14 (3), 283–296.\n\n\nCotter, K. (2021). “Shadowbanning is not a thing”: Black box gaslighting and the power to independently know and credibly critique algorithms.Information, Communication & Society,0 (0), 1–18. https://doi.org/10.1080/1369118X.2021.1994624 \n\n\n\nCotter, K. (2022). Practical knowledge of algorithms: The case of BreadTube.New Media & Society, 1–20. https://doi.org/10.1177/14614448221081802 \n\n\n\nDaly, A., & Scardamaglia, A. (2017). Profiling the australian google consumer: Implications of search engine practices for consumer law and policy.J Consum Policy,40 (3), 299–320. https://doi.org/10.1007/s10603-017-9349-9 \n\n\n\nDave, P. (2022).Google cuts racy results by 30. Reuters. https://www.reuters.com/technology/google-cuts-racy-results-by-30-searches-like-latina-teenager-2022-03-30 \n\n\n\nDear, P. (2001). Science studies as epistemography.The One Culture, 128–141.\n\n\nde Laet, M., & Mol, A. (2000). The zimbabwe bush pump: Mechanics of a fluid technology.Social Studies of Science,30 (2), 225–263. https://doi.org/10.1177/030631200030002002 \n\n\n\nDeterding, N. M., & Waters, M. C. (2018). Flexible coding of in-depth interviews: A twenty-first-century approach.Sociological Methods & Research, 0049124118799377. https://doi.org/10.1177/0049124118799377 \n\n\n\nDijck, J. van. (2010). Search engines and the production of academic knowledge.International Journal of Cultural Studies,13 (6), 574–592. https://doi.org/10.1177/1367877910376582 \n\n\n\nDiMaggio, P. J., & Powell, W. W. (1983). The iron cage revisited: Institutional isomorphism and collective rationality in organizational fields.American Sociological Review, 147–160.\n\n\nDiResta, R. (2018).The complexity of simply searching for medical advice. https://www.wired.com/story/the-complexity-of-simply-searching-for-medical-advice/ \n\n\n\nDoty, N. (2020).Enacting Privacy in Internet Standards [Ph.D. dissertation, University of California, Berkeley]. https://npdoty.name/enacting-privacy/ \n\n\n\nDreyfus, H. L., & Dreyfus, S. E. (2005). Peripheral vision: Expertise in real world contexts.Organization Studies,26 (5), 779–792.\n\n\nDuguid, P. (2008).Community, economic creativity, and organization (A. Amin & J. Roberts, Eds.). Oxford University Press. https://oxford.universitypressscholarship.com/view/10.1093/acprof:oso/9780199545490.001.0001/acprof-9780199545490-chapter-1 \n\n\n\nDunbar-Hester, C. (2020).Hacking diversity: The politics of inclusion in open technology cultures (1st Edition). Princeton University Press. https://press.princeton.edu/books/hardcover/9780691182070/hacking-diversity \n\n\n\nDzonsons, K. (2011).History of unix manpages. https://manpages.bsd.lv/history.html .\n\n\nEkbia, H., & Nardi, B. (2014). Heteromation and its (dis) contents: The invisible division of labor between humans and machines.First Monday. https://doi.org/https://doi.org/10.5210/FM.V19I6.5331 \n\n\n\nEkbia, H. R., & Nardi, B. A. (2017).Heteromation, and other stories of computing and capitalism. MIT Press.\n\n\nElish, M. C., & Watkins, E. A. (2019).Algorithms on the shop floor: Data-driven technologies in organizational context. https://datasociety.net/library/algorithms-on-the-shop-floor/ \n\n\n\nEnsmenger, N. (2010).The computer boys take over: Computers, programmers, and the politics of technical expertise. The MIT Press.\n\n\nEnsmenger, N. (2015). “Beards, sandals, and other signs of rugged individualism”: Masculine culture within the computing professions.Osiris,30 (1), 38–65. http://www.jstor.org/stable/10.1086/682955 \n\n\n\nEyal, G. (2019).The crisis of expertise. Polity Press. https://www.wiley.com/en-us/The+Crisis+of+Expertise-p-9780745665771 \n\n\n\nFeldman, M. S., & March, J. G. (1981). Information in organizations as signal and symbol.Administrative Science Quarterly,26 (2), 171–186. http://www.jstor.org/stable/2392467 \n\n\n\nFerguson, A. M., McLean, D., & Risko, E. F. (2015). Answers at your fingertips: Access to the internet influences willingness to answer questions.Consciousness and Cognition,37, 91–102. https://doi.org/10.1016/j.concog.2015.08.008 \n\n\n\nFine, M. (2006). Bearing witness: Methods for researching oppression and resistance—a textbook for critical research.Social Justice Research,19, 83–108.\n\n\nFirouzi, E., Sami, A., Khomh, F., & Uddin, G. (2020). On the use of c# unsafe code context: An empirical study of stack overflow.Proceedings of the 14th Acm / Ieee International Symposium on Empirical Software Engineering and Measurement (Esem). https://doi.org/10.1145/3382494.3422165 \n\n\n\nFischer, F., Böttinger, K., Xiao, H., Stransky, C., Acar, Y., Backes, M., & Fahl, S. (2017). Stack overflow considered harmful? The impact of copy&paste on android application security.2017 Ieee Symposium on Security and Privacy (Sp), 121–136.\n\n\nFlick, U. (2009).An introduction to qualitative research. SAGE Publications Ltd.\n\n\nFourcade, M. (2010).Economists and societies. Princeton.\n\n\nFourcade, M., & Healy, K. (2017). Seeing like a market.Socio-Economic Review,15 (1), 9–29. https://doi.org/https://doi.org/10.1093/ser/mww033 \n\n\n\nFreeman, J. (2013). The tyranny of structurelessness.WSQ,41 (3-4), 231–246. https://doi.org/10.1353/wsq.2013.0072 \n\n\n\nGasson, S., & Purcelle, M. (2018). A participation architecture to support user peripheral participation in a hybrid foss community.Trans. Soc. Comput.,1 (4). https://doi.org/10.1145/3290837 \n\n\n\nGiddens, A. (1991).The consequences of modernity. Polity Press in association with Basil Blackwell, Oxford, UK.\n\n\nGilbert, S. A. (2018).Motivations for participating in online initiatives: Exploring motivations across initiative types [PhD thesis, University of British Columbia]. https://doi.org/http://dx.doi.org/10.14288/1.0372890 \n\n\n\nGillespie, T. (2014).The relevance of algorithms (T. Gillespie, P. J. Boczkowski, & K. A. Foot, Eds.; pp. 167–193). The MIT Press. https://doi.org/10.7551/mitpress%2F9780262525374.003.0009 \n\n\n\nGillespie, T. (2017). Algorithmically recognizable: Santorum’s google problem, and google’s santorum problem.Information, Communication & Society,20 (1), 63–80. https://doi.org/10.1080/1369118X.2016.1199721 \n\n\n\nGirard, M., & Stark, D. (2002). Distributing intelligence and organizing diversity in new-media projects.Environment and Planning A,34 (11), 1927–1949.\n\n\nGitelman, L. (2006).Always already new: Media, history, and the data of culture. MIT Press. https://direct.mit.edu/books/book/4377/Always-Already-NewMedia-History-and-the-Data-of \n\n\n\nGitHub. (2022).Introducing an all-new code search and code browsing experience | github changelog. https://github.blog/changelog/2022-11-09-introducing-an-all-new-code-search-and-code-browsing-experience/ .\n\n\nGoffman, E. (1956).The presentation of self in everyday life. University of Edinburgh.\n\n\nGoldenfein, J., & Griffin, D. (2022). Google scholar – platforming the scholarly economy.Internet Policy Review,11 (3), 117. https://doi.org/10.14763/2022.3.1671 \n\n\n\nGoldenfein, J., Mulligan, D. K., Nissenbaum, H., & Ju, W. (2020). Through the handoff lens: Competing visions of autonomous futures.Berkeley Tech. L.J.. Berkeley Technology Law Journal,35 (IR), 835. https://doi.org/10.15779/Z38CR5ND0J \n\n\n\nGoldenfein, J., Mulligan, D., & Nissenbaum, H. (2019).Through the handoff lens: Are autonomous vehicles no-win for users. https://pdfs.semanticscholar.org/341d/a18649eb9627fe29d4baf28fb4ee7d3eafa3.pdf \n\n\n\nGolebiewski, M., & boyd, danah. (2018). Data voids: Where missing data can easily be exploited.Data & Society. https://datasociety.net/library/data-voids-where-missing-data-can-easily-be-exploited/ \n\n\n\nGoogle. (2022).Searchqualityevaluatorguidelines.pdf. https://static.googleusercontent.com/media/guidelines.raterhub.com/en//searchqualityevaluatorguidelines.pdf .\n\n\nGriffin, D. (2019).When searching we sometimes use keywords that direct us... \nhttps://twitter.com/danielsgriffin/status/1183785841732120576 .\n\n\nGriffin, D., & Lurie, E. (2022). Search quality complaints and imaginary repair: Control in articulations of google search.New Media & Society,0 (0), 14614448221136505. https://doi.org/10.1177/14614448221136505 \n\n\n\nGross, M., & McGoey, L. (2015).Routledge international handbook of ignorance studies. Routledge. https://doi.org/10.4324/9781315867762 \n\n\n\nGross, M., & McGoey, L. (2022).Routledge international handbook of ignorance studies. Routledge. https://doi.org/10.4324/9781003100607 \n\n\n\nGuendelman, S., Pleasants, E., Cheshire, C., & Kong, A. (2022). Exploring google searches for out-of-clinic medication abortion in the united states during 2020: Infodemiology approach using multiple samples.JMIR Infodemiology,2 (1), e33184. https://doi.org/10.2196/33184 \n\n\n\nGunn, H. K., & Lynch, M. P. (2018). Googling. InThe routledge handbook of applied epistemology (pp. 41–53). Routledge. https://doi.org/10.4324/9781315679099-4 \n\n\n\nHaider, J. (2016). The structuring of information through search: Sorting waste with google.Aslib Journal of Information Management,68 (4), 390–406. https://doi.org/10.1108/AJIM-12-2015-0189 \n\n\n\nHaider, J. (2017).Controlling the urge to search. Studying the informational texture of practices by exploring the missing element.10 (1). https://doi.org/http://dx.doi.org/10.14288/1.0372890 \n\n\n\nHaider, J., Rödl, M., & Joosse, S. (2022). Algorithmically embodied emissions: The environmental harm of everyday life information in digital culture.IR,27. https://doi.org/10.47989/colis2224 \n\n\n\nHaider, J., & Sundin, O. (2019).Invisible search and online search engines: The ubiquity of search in everyday life. Routledge. https://doi.org/https://doi.org/10.4324/9780429448546 \n\n\n\nHanselman, S. (2013).Am i really a developer or just a good googler? \nhttps://www.hanselman.com/blog/am-i-really-a-developer-or-just-a-good-googler .\n\n\nHanselman, S. (2020).Me: 30 years writing software for money. https://twitter.com/shanselman/status/1289804628310110209 .\n\n\nHaraway, D. J. (1988). Situated knowledges: The science question in feminism and the privilege of partial perspective.Feminist Studies,14, 205–224.\n\n\nHearst, M. A. (2009).Search user interfaces. Cambridge University Press.\n\n\nHicks, M. (2017).Programmed inequality: How britain discarded women technologists and lost its edge in computing. MIT Press.\n\n\nHill Collins, P. (2002).Black feminist thought: Knowledge, consciousness, and the politics of empowerment (Rev. 10th anniversary ed). Routledge.\n\n\nHippel, E. (1988).The sources of innovation. Oxford University Press.\n\n\nHirschhorn, L. (1997).Reworking authority: Leading and following in the post-modem organization. MIT Press.\n\n\nHochstein, L. (2021).I have no idea what i’m doing. https://surfingcomplexity.blog/2021/11/28/i-have-no-idea-what-im-doing/ \n\n\n\nHodgson, G. M. (2001).How economics forgot history: The problem of historical specificity in social science. Routledge.\n\n\nHoffmann, A. L. (2019). Where fairness fails: Data, algorithms, and the limits of antidiscrimination discourse.Information, Communication & Society,22 (7), 900–915. https://doi.org/10.1080/1369118X.2019.1573912 \n\n\n\nHoffmann, A. L. (2021). Terms of inclusion: Data, discourse, violence.New Media & Society,23 (12), 3539–3556. https://doi.org/10.1177/1461444820958725 \n\n\n\nHouse of Lords, Select Committee on Democracy and Digital Technologies. (2020).Corrected oral evidence: Democracy and digital technologies. https://committees.parliament.uk/oralevidence/360/html/ .\n\n\nHöchstötter, N., & Lewandowski, D. (2009). What users see – structures in search engine results pages.Information Sciences,179 (12), 1796–1812. https://doi.org/10.1016/j.ins.2009.01.028 \n\n\n\nHunt, A., & Thomas, D. (1999).The pragmatic programmer: From journeyman to master. Addison-Wesley Professional.\n\n\nHutchins, E. (1995).Cognition in the wild. MIT Press.\n\n\nIntrona, L. D. (2016). Algorithms, governance, and governmentality.Science, Technology, & Human Values,41 (1), 17–49. https://doi.org/10.1177/0162243915587360 \n\n\n\nIntrona, L. D., & Nissenbaum, H. (2000). Shaping the web: Why the politics of search engines matters.The Information Society,16 (3), 169–185. https://doi.org/10.1080/01972240050133634 \n\n\n\nIskander, N. (2021).Does skill make us human?: Migrant workers in 21st-century qatar and beyond. Princeton University Press.\n\n\nJack, C. (2017). Lexicon of lies: Terms for problematic information.Data & Society,3, 22. https://datasociety.net/output/lexicon-of-lies/ \n\n\n\nJackson, S. J. (2014).Rethinking repair (T. Gillespie, P. J. Boczkowski, & K. A. Foot, Eds.; pp. 221–240). The MIT Press. https://doi.org/10.7551/mitpress/9780262525374.003.0011 \n\n\n\nKalliamvakou, E. (2022).Research: Quantifying github copilot’s impact on developer productivity and happiness | the github blog. https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/ .\n\n\nKarapapa, S., & Borghi, M. (2015). Search engine liability for autocomplete suggestions: Personality, privacy and the power of the algorithm.Int J Law Info Tech,23 (3), 261–289. https://doi.org/10.1093/ijlit/eav009 \n\n\n\nKatznelson, I. (2005).When affirmative action was white: An untold history of racial inequality in twentieth-century america. W.W. Norton & Company.\n\n\nKhlaaf, H., Mishkin, P., Achiam, J., Krueger, G., & Brundage, M. (2022).A hazard analysis framework for code synthesis large language models. arXiv. https://doi.org/10.48550/ARXIV.2207.14157 \n\n\n\nKleppmann, M. (2017).Designing data-intensive applications : The big ideas behind reliable, scalable, and maintainable systems. O’Reilly Media.\n\n\nKluttz, D. N., & Mulligan, D. K. (2019).Automated decision support technologies and the legal profession. https://doi.org/10.15779/Z38154DP7K \n\n\n\nKoonin, S. (2019).Everything i googled in a week as a professional software engineer - localghost. https://localghost.dev/2019/09/everything-i-googled-in-a-week-as-a-professional-software-engineer/ .\n\n\nKotamraju, N. P. (2002). Keeping up: Web design skill and the reinvented worker.Information, Communication & Society,5 (1), 1–26. https://doi.org/10.1080/13691180110117631 \n\n\n\nKraschnewski, J. L., Chuang, C. H., Poole, E. S., Peyton, T., Blubaugh, I., Pauli, J., Feher, A., & Reddy, M. (2014). Paging “dr. Google”: Does technology fill the gap created by the prenatal care visit structure? Qualitative focus group study with pregnant women.J Med Internet Res,16 (6), e147. https://doi.org/10.2196/jmir.3385 \n\n\n\nKruschwitz, U., Hull, C., & others. (2017).Searching the enterprise (Vol. 11). Now Publishers.\n\n\nKutz, J. (2022).Our search liaison on 25 years of keeping up with search. https://blog.google/products/search/danny-25-years-of-search/ ; Google.\n\n\nLatour, B. (1986). Visualization and cognition.Knowledge and Society,6 (6), 1–40.\n\n\nLatour, B. (1990). Drawing things together. In M. Lynch & S. Woolgar (Eds.),Representation in scientific practice. MIT Press.\n\n\nLatour, B. (1992). Where are the missing masses? The sociology of a few mundane artifacts. In W. E. Bijker & J. Law (Eds.),Shaping technology/building society: Studies in sociotechnical change (pp. 225–228). MIT Press.\n\n\nLave, J., & Wenger, E. (1991).Situated learning: Legitimate peripheral participation. Cambridge university press. https://www.cambridge.org/highereducation/books/situated-learning/6915ABD21C8E4619F750A4D4ACA616CD#overview \n\n\n\nLeonard-Barton, D. (1995).Wellsprings of knowledge: Building and sustaining the sources of innovation. Harvard Business School Press.\n\n\nLeonardi, P. M. (2007). Activating the informational capabilities of information technology for organizational change.Organization Science,18 (5), 813–831. https://doi.org/10.1287/orsc.1070.0284 \n\n\n\nLeonardi, P. M. (2011). When flexible routines meet flexible technologies: Affordance, constraint, and the imbrication of human and material agencies.MIS Quarterly,35 (1), 147–167. http://www.jstor.org/stable/23043493 \n\n\n\nLianos, M. (2010). Periopticon: Control beyond freedom and coercion and two possible advancements in the social sciences. In K. D. Haggerty & M. Samatas (Eds.),Surveillance and democracy (pp. 69–88). https://www.taylorfrancis.com/chapters/edit/10.4324/9780203852156-11/periopticon-control-beyond-freedom-coercion-two-possible-advancements-social-sciences-michalis-lianos \n\n\n\nLiboiron, M. (2021).Pollution is colonialism. Duke University Press. https://www.dukeupress.edu/pollution-is-colonialism \n\n\n\nLofland, J., & Lofland, L. H. (1995).Analyzing social settings. Wadsworth Publishing Company.\n\n\nLurie, E., & Mulligan, D. K. (2021).Searching for representation: A sociotechnical audit of googling for members of U.S. Congress (Working Paper). https://emmalurie.github.io/docs/preprint-searching.pdf \n\n\n\nMager, A. (2009). Mediated health: Sociotechnical practices of providing and using online health information.New Media & Society,11 (7), 1123–1142. https://doi.org/10.1177/1461444809341700 \n\n\n\nMager, A. (2012). ALGORITHMIC ideology.Information, Communication & Society,15 (5), 769–787. https://doi.org/10.1080/1369118X.2012.676056 \n\n\n\nMarcus, G. E. (1995). Ethnography in/of the world system: The emergence of multi-sited ethnography.Annual Review of Anthropology,24, 95–117. http://www.jstor.org/stable/2155931 \n\n\n\nMart, S. N. (2017). The algorithm as a human artifact: Implications for legal [re] search.Law Libr. J.,109, 387. https://scholar.law.colorado.edu/articles/755/ \n\n\n\nMathew, A. J., & Cheshire, C. (2018). A fragmented whole: Cooperation and learning in the practice of information security.Center for Long-Term Cybersecurity, UC Berkeley.\n\n\nMcChesney, R. W. (1997).Corporate media and the threat to democracy. Seven Stories Press.\n\n\nMcDermott, R., & Lave, J. (2006). Estranged labor learning. In P. Sawchuk, N. Duarte, & M. Elhammoumi (Eds.),Critical perspectives on activity: Explorations across education, work, and everyday life (pp. 89–122). Cambridge University Press. https://doi.org/10.1017/CBO9780511509568.007 \n\n\n\nMeisner, C., Duffy, B. E., & Ziewitz, M. (2022). The labor of search engine evaluation: Making algorithms more human or humans more algorithmic?New Media & Society,0 (0), 14614448211063860. https://doi.org/10.1177/14614448211063860 \n\n\n\nMejova, Y., Gracyk, T., & Robertson, R. (2022). Googling for abortion: Search engine mediation of abortion accessibility in the united states.JQD,2. https://doi.org/10.51685/jqd.2022.007 \n\n\n\nMetaphor. (2021).Today we’re releasing wanderer 2Metaphor. https://twitter.com/metaphorsystems/status/1428793313663111170 .\n\n\nMetaxa-Kakavouli, D., & Torres-Echeverry. (2017).Google’s role in spreading fake news and misinformation. Stanford University Law & Policy Lab. https://www-cdn.law.stanford.edu/wp-content/uploads/2017/10/Fake-News-Misinformation-FINAL-PDF.pdf \n\n\n\nMeyer, J. W., & Rowan, B. (1977). Institutionalized organizations: Formal structure as myth and ceremony.American Journal of Sociology,83 (2), 340–363.\n\n\nMeyer, J. W., & Rowan, B. (1978). The structure of educational organizations. In M. W. Meyer & Associates (Eds.),Organizations and environments (pp. 78–109). Jossey Bass.\n\n\nMiller, B., & Record, I. (2013). JUSTIFIED belief in a digital age: ON the epistemic implications of secret internet technologies.Episteme,10 (2), 117–134. https://doi.org/10.1017/epi.2013.11 \n\n\n\nMills, C. (2008). White ignorance. In L. S. Robert Proctor (Ed.),Agnotology: The making and unmaking of ignorance. Stanford University Press.\n\n\nMisa, editor, Thomas J. (2010).Gender codes: Why women are leaving computing (1st ed.). Wiley-IEEE Computer Society Press. libgen.li/file.php?md5=e4a6849b080f4a078c79777d347726c2 \n\n\n\nMokros, H. B., & Aakhus, M. (2002). From information-seeking behavior to meaning engagement practice..Human Comm Res,28 (2), 298–312. https://doi.org/10.1111/j.1468-2958.2002.tb00810.x \n\n\n\nMorris, M. R. (2013). Collaborative search revisited.Proceedings of Cscw 2013. https://doi.org/10.1145/2441776.2441910 \n\n\n\nMorris, M. R., & Horvitz, E. (2007). SearchTogether: An interface for collaborative web search.Proceedings of the 20th Annual Acm Symposium on User Interface Software and Technology, 3–12.\n\n\nMorris, M. R., & Teevan, J. (2009). Collaborative web search: Who, what, where, when, and why.Synthesis Lectures on Information Concepts, Retrieval, and Services,1 (1), 1–99. https://doi.org/10.2200/S00230ED1V01Y200912ICR014 \n\n\n\nMulligan, D. K., & Griffin, D. (2018). Rescripting search to respect the right to truth.The Georgetown Law Technology Review,2 (2), 557–584. https://georgetownlawtechreview.org/rescripting-search-to-respect-the-right-to-truth/GLTR-07-2018/ \n\n\n\nMulligan, D. K., Koopman, C., & Doty, N. (2016). Privacy is an essentially contested concept: A multi-dimensional analytic for mapping privacy.Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences,374 (2083), 20160118.\n\n\nMulligan, D. K., & Nissenbaum, H. (2020).The concept of handoff as a model for ethical analysis and design. Oxford University Press. https://doi.org/10.1093/oxfordhb/9780190067397.013.15 \n\n\n\nMustafaraj, E., Lurie, E., & Devine, C. (2020). The case for voter-centered audits of search engines during political elections.FAT* ’20.\n\n\nNagaraj, A. (2021). Information seeding and knowledge production in online communities: Evidence from openstreetmap.Management Science,67 (8), 4908–4934. https://doi.org/10.1287/mnsc.2020.3764 \n\n\n\nNarayanan, D., & De Cremer, D. (2022). “Google told me so!” On the bent testimony of search engine algorithms.Philos. Technol.,35 (2), E4512. https://doi.org/10.1007/s13347-022-00521-7 \n\n\n\nNatarajan, M. (2016).The making of ignorance: Epistemic design in self-tracking health [PhD thesis, University of California, Berkeley]. https://escholarship.org/uc/item/5pn009mw \n\n\n\nNeff, G. (2012).Venture labor: Work and the burden of risk in innovative industries. MIT press. https://mitpress.mit.edu/books/venture-labor \n\n\n\nNissenbaum, H. (2011a). A contextual approach to privacy online.Daedalus,140 (4), 32–48.\n\n\nNissenbaum, H. (2011b). From preemption to circumvention: If technology regulates, why do we need regulation (and vice versa).Berkeley Tech. LJ,26, 1367.\n\n\nNoble, S. U. (2018).Algorithms of oppression how search engines reinforce racism. New York University Press. https://nyupress.org/9781479837243/algorithms-of-oppression/ \n\n\n\nOchigame, R. (2020). Informatics of the oppressed. InLogic. https://logicmag.io/care/informatics-of-the-oppressed/ \n\n\n\nOeldorf-Hirsch, A., Hecht, B., Morris, M. R., Teevan, J., & Gergle, D. (2014, February). To search or to ask.Proceedings of the 17th ACM Conference on Computer Supported Cooperative Work & Social Computing. https://doi.org/10.1145/2531602.2531706 \n\n\n\nOfcom. (2022).Children and parents: Media use and attitudes report 2022. https://www.ofcom.org.uk/__data/assets/pdf_file/0024/234609/childrens-media-use-and-attitudes-report-2022.pdf .\n\n\nOhm, P., & Frankle, J. (2018). Desirable inefficiency.Florida Law Review,70 (4), 777. https://scholarship.law.ufl.edu/flr/vol70/iss4/2 \n\n\n\nOrlikowski, W. J. (2007). Sociomaterial practices: Exploring technology at work.Organization Studies,28 (9), 1435–1448. https://doi.org/10.1177/0170840607081138 \n\n\n\nOrlikowski, W. J. (1993). CASE tools as organizational change: Investigating incremental and radical changes in systems development.MIS Q.,17 (3), 309–340. https://doi.org/10.2307/249774 \n\n\n\nOrr, J. E. (1996).Talking about machines: An ethnography of a modern job. ILR Press.\n\n\nPan, B., Hembrooke, H., Joachims, T., Lorigo, L., Gay, G., & Granka, L. (2007). In google we trust: Users’ decisions on rank, position, and relevance.Journal of Computer-Mediated Communication,12 (3), 801–823. https://doi.org/10.1111/j.1083-6101.2007.00351.x \n\n\n\nPasquale, F. (2015).The black box society. Harvard University Press.\n\n\nPassi, S., & Barocas, S. (2019). Problem formulation and fairness.Proceedings of the Conference on Fairness, Accountability, and Transparency, 39–48.\n\n\nPassi, S., & Jackson, S. J. (2018). Trust in data science: Collaboration, translation, and accountability in corporate data science projects.Proceedings of the ACM on Human-Computer Interaction,2 (CSCW), 1–28.\n\n\nPassi, S., & Sengers, P. (2020). Making data science systems work.Big Data & Society,7 (2), 2053951720939605.\n\n\nPearce, H. A., Ahmad, B., Tan, B., Dolan-Gavitt, B., & Karri, R. (2021). An empirical cybersecurity evaluation of github copilot’s code contributions.ArXiv,abs/2108.09293.\n\n\nPeels, R., & Pritchard, D. (2021). Educating for ignorance.Synthese,198 (8), 7949–7963. https://doi.org/10.1007/s11229-020-02544-z \n\n\n\nPerlow, L., & Weeks, J. (2002). Who’s helping whom? Layers of culture and workplace behavior.Journal of Organizational Behavior,23 (4), 345–361. https://doi.org/https://doi.org/10.1002/job.150 \n\n\n\nPerrow, C. (1984).Normal accidents: Living with high-risk technologies. Basic Books.\n\n\nPlato. (2002).Plato: Five dialogues: Euthyphro, Apology, Crito, Meno, Phaedo (J. M. Cooper, Ed.; G. M. A. Grube, Trans.; 2nd ed.). Hackett.\n\n\nPolanyi, M. (1967).The tacit dimension. Doubleday & Co.\n\n\nPrior, L. (2003).Using documents in social research. SAGE Publications Ltd. https://doi.org/10.4135/9780857020222 \n\n\n\nProctor, R., & Schiebinger, L. (Eds.). (2008).Agnotology: The making and unmaking of ignorance. Stanford University Press. https://archive.org/details/agnotologymaking0000unse \n\n\n\nPugh, A. J. (2013). What good are interviews for thinking about culture? Demystifying interpretive analysis.Am J Cult Sociol,1 (1), 42–68. https://doi.org/10.1057/ajcs.2012.4 \n\n\n\nRaboy, M. (1998). Global communication policy and human rights. InA communications cornucopia: Markle foundation essays on information policy (pp. 218–242). Brookings Institution Press.\n\n\nRahman, M. M., Barson, J., Paul, S., Kayani, J., Lois, F. A., Quezada, S. F., Parnin, C., Stolee, K. T., & Ray, B. (2018). Evaluating how developers use general-purpose web-search for code retrieval.Proceedings of the 15th International Conference on Mining Software Repositories, 465–475. https://doi.org/10.1145/3196398.3196425 \n\n\n\nReagle, J. (2016). The obligation to know: From faq to feminism 101.New Media &Amp; Society,18 (5), 691–707. https://doi.org/10.1177/1461444814545840 \n\n\n\nRieder, B., & Hofmann, J. (2020). Towards platform observability.Internet Policy Review,9 (4), 1–28. https://doi.org/https://doi.org/10.14763/2020.4.1535 \n\n\n\nRoberts, N., Galluch, P. S., Dinger, M., & Grover, V. (2012). Absorptive capacity and information systems research: Review, synthesis, and directions for future research.MIS Quarterly,36 (2), 625–648. http://www.jstor.org/stable/41703470 \n\n\n\nRobertson, R. (2022).WebSearcher. https://github.com/gitronald/WebSearcher \n\n\n\nRobinson, L. (2009). A taste for the necessary.Information, Communication & Society,12 (4), 488–507. https://doi.org/10.1080/13691180902857678 \n\n\n\nRussell, D. M. (2019).The joy of search: A google insider’s guide to going beyond the basics. The MIT Press.\n\n\nSabel, C. F. (1984).Work and politics: The division of labor in industry.\n\n\nSalva, R. J. (2022).Preview: Referencing public code in github copilot | the github blog. https://github.blog/2022-11-01-preview-referencing-public-code-in-github-copilot/ .\n\n\nSchultheiß, S., Sünkler, S., & Lewandowski, D. (2018). We still trust google, but less than 10 years ago: An eye-tracking study.Information Research,23 (3). http://informationr.net/ir/23-3/paper799.html \n\n\n\nSeaver, N. (2017). Algorithms as culture: Some tactics for the ethnography of algorithmic systems.Big Data & Society,4 (2), 1–12. https://doi.org/10.1177/2053951717738104 \n\n\n\nSeaver, N. (2019). Knowing algorithms.Digital STS, 412–422.\n\n\nSeibel, P. (2009).Coders at work: Reflections on the craft of programming. Apress.\n\n\nShah, C. (2017).Social information seeking. Springer International Publishing. https://doi.org/10.1007/978-3-319-56756-3 \n\n\n\nShah, C., & Bender, E. M. (2022, March). Situating search.ACM SIGIR Conference on Human Information Interaction and Retrieval. https://doi.org/10.1145/3498366.3505816 \n\n\n\nShestakofsky, B. (2017). Working algorithms: Software automation and the future of work.Work and Occupations,44 (4), 376–423. https://doi.org/10.1177/0730888417726119 \n\n\n\nShorey, S., Hill, B. M., & Woolley, S. (2021). From hanging out to figuring it out: Socializing online as a pathway to computational thinking.New Media & Society,23 (8), 2327–2344. https://doi.org/10.1177/1461444820923674 \n\n\n\nSkitka, L. J., Mosier, K. L., Burdick, M., & Rosenblatt, B. (2000). Automation bias and errors: Are crews better than individuals?The International Journal of Aviation Psychology,10, 85–97.\n\n\nSmith, C. L., & Rieh, S. Y. (2019, March). Knowledge-context in search systems.Proceedings of the 2019 Conference on Human Information Interaction and Retrieval. https://doi.org/10.1145/3295750.3298940 \n\n\n\nSmithson, M. (1985). Toward a social theory of ignorance.Journal for the Theory of Social Behaviour,15 (2), 151–172. https://doi.org/https://doi.org/10.1111/j.1468-5914.1985.tb00049.x \n\n\n\nStar, S. L. (1999). The ethnography of infrastructure.American Behavioral Scientist,43 (3), 377–391.\n\n\nStar, S. L., & Ruhleder, K. (1996). Steps toward an ecology of infrastructure: Design and access for large information spaces.Information Systems Research,7 (1), 111–134. https://doi.org/10.1287/isre.7.1.111 \n\n\n\nStar, S. L., & Strauss, A. (2004). Layers of silence, arenas of voice: The ecology of visible and invisible work.Computer Supported Cooperative Work (CSCW),8, 9–30.\n\n\nStark, D. (2009).The sense of dissonance: Accounts of worth in economic life. Princeton University Press.\n\n\nStark, L., & Levy, K. (2018). The surveillant consumer.Media, Culture & Society,40 (8), 1202–1220. https://doi.org/10.1177/0163443718781985 \n\n\n\nSuchman, L. A. (1987).Plans and situated actions: The problem of human-machine communication. Cambridge university press.\n\n\nSundin, O. (2020). Where is search in information literacy? A theoretical note on infrastructure and community of practice. InSustainable digital communities (pp. 373–379). Springer International Publishing. https://doi.org/10.1007/978-3-030-43687-2_29 \n\n\n\nSundin, O., Haider, J., Andersson, C., Carlsson, H., & Kjellberg, S. (2017). The search-ification of everyday life and the mundane-ification of search.Journal of Documentation. https://doi.org/10.1108/JD-06-2016-0081 \n\n\n\nSundin, O., Lewandowski, D., & Haider, J. (2021). Whose relevance? Web search engines as multisided relevance machines.Journal of the Association for Information Science and Technology. https://doi.org/10.1002/asi.24570 \n\n\n\nSurden, H. (2007). Structural rights in privacy.SMU Law Review,60 (4), 1605. https://scholar.law.colorado.edu/articles/346/ \n\n\n\nTakhteyev, Y. (2007). Jeeks: Developers at the periphery of the software world.Annual Meeting of the American Sociological Association, New York, Ny. https://pdfs.semanticscholar.org/1a98/c87ffd0b07344c5e0aae6e7e498a5c69da00.pdf \n\n\n\nTakhteyev, Y. (2012).Coding places: Software practice in a south american city. The MIT Press.\n\n\nTattersall Wallin, E. (2021). Audiobook routines: Identifying everyday reading by listening practices amongst young adults.JD,78 (7), 266–281. https://doi.org/10.1108/JD-06-2021-0116 \n\n\n\nTeevan, J., Alvarado, C., Ackerman, M. S., & Karger, D. R. (2004). The perfect search engine is not enough: A study of orienteering behavior in directed search.Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, 415–422.\n\n\nThe MIT Press. (2020).Author talk: The Joy of Search by Daniel M. Russell. https://mitpress.mit.edu/blog/author-talk-the-joy-of-search-by-daniel-m-russell/ .\n\n\n\n The social construction of technological systems. (1993). MIT Press.\n\n\nThompson, J. D. (1967).Organizations in action: Social science bases of administrative theory (1st ed.). McGraw-Hill.\n\n\nToff, B., & Nielsen, R. K. (2018). “I Just Google It”: Folk Theories of Distributed Discovery.Journal of Communication,68 (3), 636–657. https://doi.org/10.1093/joc/jqy009 \n\n\n\nTripodi, F. (2018). Searching for alternative facts: Analyzing scriptural inference in conservative news practices.Data & Society. https://datasociety.net/output/searching-for-alternative-facts/ \n\n\n\nTripodi, F. (2019a). Devin nunes and the power of keyword signaling. InWired. https://www.wired.com/story/devin-nunes-and-the-dark-power-of-keyword-signaling/ .\n\n\nTripodi, F. (2019b).SenateHearing + written testimony. https://www.judiciary.senate.gov/imo/media/doc/Tripodi%20Testimony.pdf ; Senate Judiciary Committee Subcommittee On The Constitution.\n\n\nTripodi, F. (2022a).Step five: Set the traps - misinformation that fails to conform to dominant search engine rules is functionally invisible. https://twitter.com/ftripodi/status/1520078674417967105 .\n\n\nTripodi, F. (2022b).The propagandists’ playbook: How conservative elites manipulate search and threaten democracy (Hardcover, p. 288). Yale University Press. https://yalebooks.yale.edu/book/9780300248944/the-propagandists-playbook/ \n\n\n\nTsing, A. (2005).Friction : An ethnography of global connection. Princeton University Press. https://press.princeton.edu/books/paperback/9780691120652/friction \n\n\n\nTurco, C. J. (2016).The conversational firm: Rethinking bureaucracy in the age of social media. Columbia University Press.\n\n\nUrman, A., & Makhortykh, M. (2022). “Foreign beauties want to meet you”: The sexualization of women in google’s organic and sponsored text search results.New Media & Society,0 (0), 14614448221099536. https://doi.org/10.1177/14614448221099536 \n\n\n\nVaidhyanathan, S. (2011).The googlization of everything:(And why we should worry). Univ of California Press. https://doi.org/10.1525/9780520948693 \n\n\n\nVan Couvering, E. J. (2007). Is relevance relevant? Market, science, and war: Discourses of search engine quality.Journal of Computer-Mediated Communication,12 (3), 866–887. http://doi.org/10.1111/j.1083-6101.2007.00354.x \n\n\n\nVertesi, J. (2019). From affordances to accomplishments: PowerPoint and excel at NASA. IndigitalSTS (pp. 369–392). Princeton University Press. https://doi.org/10.1515/9780691190600-026 \n\n\n\nWarshaw, J., Taft, N., & Woodruff, A. (2016). Intuitions, analytics, and killing ants: Inference literacy of high school-educated adults in the US.Twelfth Symposium on Usable Privacy and Security (SOUPS 2016), 271–285. https://www.usenix.org/conference/soups2016/technical-sessions/presentation/warshaw \n\n\n\nWeber, S. (2004).The success of open source. Harvard University Press. https://www.hup.harvard.edu/catalog.php?isbn=9780674018587 \n\n\n\nWeber, S. (2019).Bloc by bloc: How to build a global enterprise for the new regional order. Harvard University Press.\n\n\n\n What is the xy problem? - meta stack exchange. (2010). https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem .\n\n\nWhite, R. W. (2016).Interactions with search systems. Cambridge University Press. https://doi.org/10.1017/CBO9781139525305 \n\n\n\nWidder, D. G., Nafus, D., Dabbish, L., & Herbsleb, J. D. (2022, June). Limits and possibilities for “ethical AI” in open source: A study of deepfakes.Proceedings of the 2022 ACM Conference on Fairness, Accountability, and Transparency. https://davidwidder.me/files/widder-ossdeepfakes-facct22.pdf \n\n\n\nWineburg, S. (2021).\"Problem 2: Typing “the claim into a search engine” will\". https://twitter.com/samwineburg/status/1465542166764081157 .\n\n\nWong, R. (2020).Values by design imaginaries: Exploring values work in ux practice [Ph.D. dissertation, University of California, Berkeley]. https://escholarship.org/uc/item/3vt3b1xf \n\n\n\nWoods, D. D. (2018). The theory of graceful extensibility: Basic rules that govern adaptive systems.Environ Syst Decis,38 (4), 433–457. https://doi.org/10.1007/s10669-018-9708-3 \n\n\n\nYates, J., & Orlikowski, W. J. (1992). Genres of organizational communication: A structurational approach to studying communication and media.The Academy of Management Review,17 (2), 299–326. http://www.jstor.org/stable/258774 \n\n\n\nZade, H., Wack, M., Zhang, Y., Starbird, K., Calo, R., Young, J., & West, J. D. (2022). Auditing google’s search headlines as a potential gateway to misleading content.Jots,1 (4). https://doi.org/10.54501/jots.v1i4.72 \n\n\n\nZiegler, A. (2022).Research: How github copilot helps improve developer productivity | the github blog. https://github.blog/2022-07-14-research-how-github-copilot-helps-improve-developer-productivity/ .\n\n\nZuboff, S. (1988).In the age of the smart machine. Basic books.\n\n\nZuboff, S. (2015). Big other: Surveillance capitalism and the prospects of an information civilization.Journal of Information Technology,30 (1), 75–89. https://doi.org/10.1057/jit.2015.5 \n\n\n", "snippet": "\n", "url": "/diss/bibliography/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "bibtex", "type": "pages" , "date": "", "title": "BibTeX" , "tags": "", "content": "\n\n## [[mulligan2018rescripting]](/shortcuts/mulligan2018rescripting/)\n\n```bibtex\n@article{mulligan2018rescripting,\n title={Rescripting Search to Respect the Right to Truth},\n author={Mulligan, Deirdre K and Griffin, Daniel S},\n journal={The Georgetown Law Technology Review},\n volume={2},\n number={2},\n pages={557--584},\n year={2018},\n URL={https://georgetownlawtechreview.org/rescripting-search-to-respect-the-right-to-truth/GLTR-07-2018/}\n }\n```\n\n---\n\n\n\n## [[burrell2019control]](/shortcuts/burrell2019control/)\n\n```bibtex\n@article{burrell2019control,\n author = {Burrell, Jenna and Kahn, Zoe and Jonas, Anne and Griffin, Daniel},\n title = {When Users Control the Algorithms: Values Expressed in Practices on Twitter},\n year = {2019},\n issue_date = {November 2019},\n publisher = {Association for Computing Machinery},\n address = {New York, NY, USA},\n volume = {3},\n number = {CSCW},\n URL={https://doi.org/10.1145/3359240},\n doi = {10.1145/3359240},\n journal = {Proc. ACM Hum.-Comput. Interact.},\n month = nov,\n articleno = {Article 138},\n numpages = {20},\n keywords = {assembly, automation, control, gaming the algorithm, algorithmic fairness, human autonomy, twitter}\n }\n```\n\n---\n\n\n\n## [[goldenfein2022platforming]](/shortcuts/goldenfein2022platforming/)\n\n```bibtex\n@article{goldenfein2022platforming,\n author = { Goldenfein, Jake and Griffin, Daniel },\n title = { Google Scholar -- Platforming the scholarly economy },\n year = { 2022 },\n volume = { 11 },\n issue = { 3 },\n pages = { 117 },\n doi = {10.14763/2022.3.1671},\n URL = {http://doi.org/10.14763/2022.3.1671},\n }\n```\n\n---\n\n\n\n## [[griffin2022search]](/shortcuts/griffin2022search/)\n\nNote: This is published Ahead of Print. The volume, number, and possibly year, will change.\n\n```bibtex\n@article{griffin2022search,\n author = {Daniel Griffin and Emma Lurie},\n title ={Search quality complaints and imaginary repair: Control in articulations of Google Search},\n journal = {New Media \\& Society},\n volume = {0},\n number = {0},\n pages = {14614448221136505},\n year = {2022},\n doi = {10.1177/14614448221136505},\n \n URL = {\n https://doi.org/10.1177/14614448221136505\n \n },\n eprint = {\n https://doi.org/10.1177/14614448221136505\n \n }\n ,\n abstract = { In early 2017, a journalist and search engine expert wrote about “Google’s biggest ever search quality crisis.” Months later, Google hired him as the first Google “Search Liaison” (GSL). By October 2021, when someone posted to Twitter a screenshot of misleading Google Search results for “had a seizure now what,” users tagged the Twitter account of the GSL in reply. The GSL frequently publicly interacts with people who complain about Google Search on Twitter. This article asks: what functions does the GSL serve for Google? We code and analyze 6 months of GSL responses to complaints on Twitter. We find that the three functions of the GSL are: (1) to naturalize the logic undergirding Google Search by defending how it works, (2) perform repair in responses to complaints, and (3) boundary drawing to control critique. This advances our understanding of how dominant technology companies respond to critiques and resist counter-imaginaries. }\n }\n```\n\n\n\n## [[griffin2022situating]](/shortcuts/griffin2022situating/)\n\nNote: This is currently only self-hosted while waiting for Proquest and eScholarship.\n\n```bibtex\n@phdthesis{griffin2022situating,\n title={Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership},\n author={Griffin, Daniel},\n year={2022},\n school={University of California, Berkeley},\n URL={https://danielsgriffin.com/assets/griffin2022situating.pdf}\n }\n```", "snippet": "\n", "url": "/bibtex/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-bing-chat", "type": "pages" , "date": "", "title": "Bing-Chat tag" , "tags": "", "content": "{% assign tag_name = \"Bing-Chat\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Bing-Chat\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Bing-Chat\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/bing-chat/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-bing-deep-search", "type": "pages" , "date": "", "title": "Bing-Deep-Search tag" , "tags": "", "content": "{% assign tag_name = \"Bing-Deep-Search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Bing-Deep-Search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Bing-Deep-Search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/bing-deep-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-blazing", "type": "pages" , "date": "", "title": "blazing tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"blazing\" tag.\n \n\n\n{% assign tag_name = \"blazing\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"blazing\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"blazing\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/blazing/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-blocking-search-tools", "type": "pages" , "date": "", "title": "blocking-search-tools tag" , "tags": "", "content": "{% assign tag_name = \"blocking-search-tools\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"blocking-search-tools\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"blocking-search-tools\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/blocking-search-tools/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-browser-extension", "type": "pages" , "date": "", "title": "browser-extension tag" , "tags": "", "content": "{% assign tag_name = \"browser-extension\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"browser-extension\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"browser-extension\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/browser-extension/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "shortcuts-burrell2019control", "type": "shortcuts" , "date": "2022-11-02", "title": "When Users Control the Algorithms: Values Expressed in Practices on Twitter" , "tags": "", "content": "Do users control the algorithms?\n\n> Recent interest in ethical AI has brought a slew of values, including fairness, into conversations about technology design. Research in the area of algorithmic fairness tends to be rooted in questions of distribution that can be subject to precise formalism and technical implementation. We seek to expand this conversation to include the experiences of people subject to algorithmic classification and decision-making.\n\n## citation\n\nJenna Burrell, Zoe Kahn, Anne Jonas, and **Daniel Griffin**. [\"When Users Control the Algorithms: Values Expressed in Practices on Twitter.\"](https://doi.org/10.1145/3359240) _Proceedings of the ACM on Human-Computer Interaction_ 3, CSCW (2019): 1-20. DOI: 10.1145/3359240 [[direct PDF link](https://dl.acm.org/doi/pdf/10.1145/3359240)]\n\n[BibTeX](/bibtex#burrell2019control)\n\n## abstract\n\n> Recent interest in ethical AI has brought a slew of values, including fairness, into conversations about technology design. Research in the area of algorithmic fairness tends to be rooted in questions of distribution that can be subject to precise formalism and technical implementation. We seek to expand this conversation to include the experiences of people subject to algorithmic classification and decision-making. By examining tweets about the “Twitter algorithm” we consider the wide range of concerns and desires Twitter users express. We find a concern with fairness (narrowly construed) is present, particularly in the ways users complain that the platform enacts a political bias against conservatives. However, we find another important category of concern, evident in attempts to exert control over the algorithm. Twitter users who seek control do so for a variety of reasons, many well justified. We argue for the need for better and clearer definitions of what constitutes legitimate and illegitimate control over algorithmic processes and to consider support for users who wish to enact their own collective choices.\n\n## tweets\n\nHere are a couple tweets from Jenna Burrell (in 2022) reflecting on our paper:\n\nOn other things you discover when you recognize that social media is deeply social not flatly informational: my work on Twitter with Zoe Kahn, @annejonas, and @danielsgriffin which found tactics of users were community buildling (not maximal info reach) https://t.co/pjaGwJKdsS— Jenna Burrell, PhD (@jennaburrell) October 12, 2022 ", "snippet": "\n", "url": "/shortcuts/burrell2019control/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-capability-determination", "type": "pages" , "date": "", "title": "capability determination tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"capability determination\" tag.\n \n\n\n{% assign tag_name = \"capability determination\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"capability determination\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"capability determination\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/capability-determination/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-category-mistake", "type": "pages" , "date": "", "title": "category-mistake tag" , "tags": "", "content": "{% assign tag_name = \"category-mistake\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"category-mistake\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"category-mistake\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/category-mistake/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-cfp-rfp", "type": "pages" , "date": "", "title": "CFP-RFP tag" , "tags": "", "content": "{% assign tag_name = \"CFP-RFP\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"CFP-RFP\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"CFP-RFP\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/cfp-rfp/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-cfp", "type": "pages" , "date": "", "title": "CFP tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"CFP\" tag.\n \n\n\n{% assign tag_name = \"CFP\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"CFP\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"CFP\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/cfp/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-cgt", "type": "pages" , "date": "", "title": "CGT tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"CGT\" tag.\n \n\n\n{% assign tag_name = \"CGT\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"CGT\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"CGT\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/cgt/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-chainforge", "type": "pages" , "date": "", "title": "ChainForge tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"ChainForge\" tag.\n \n\n\n{% assign tag_name = \"ChainForge\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"ChainForge\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"ChainForge\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/chainforge/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-choice-in-search", "type": "pages" , "date": "", "title": "choice-in-search tag" , "tags": "", "content": "{% assign tag_name = \"choice-in-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"choice-in-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"choice-in-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/choice-in-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-clarifying-questions", "type": "pages" , "date": "", "title": "clarifying-questions tag" , "tags": "", "content": "{% assign tag_name = \"clarifying-questions\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"clarifying-questions\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"clarifying-questions\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/clarifying-questions/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-code-from-daniel", "type": "pages" , "date": "", "title": "code-from-Daniel tag" , "tags": "", "content": "{% assign tag_name = \"code-from-Daniel\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"code-from-Daniel\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"code-from-Daniel\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/code-from-daniel/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-cohere", "type": "pages" , "date": "", "title": "Cohere tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Cohere\" tag.\n \n\n\n{% assign tag_name = \"Cohere\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Cohere\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Cohere\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/cohere/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-comparing-results", "type": "pages" , "date": "", "title": "comparing-results tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"comparing-results\" tag.\n \n\n\n{% assign tag_name = \"comparing-results\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"comparing-results\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"comparing-results\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/comparing-results/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-competition-in-search", "type": "pages" , "date": "", "title": "competition-in-search tag" , "tags": "", "content": "{% assign tag_name = \"competition-in-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"competition-in-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"competition-in-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/competition-in-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-complaint", "type": "pages" , "date": "", "title": "complaint tag" , "tags": "", "content": "{% assign tag_name = \"complaint\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"complaint\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"complaint\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/complaint/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-complaints", "type": "pages" , "date": "", "title": "complaints tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"complaints\" tag.\n \n\n\n{% assign tag_name = \"complaints\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"complaints\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"complaints\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/complaints/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-conclusion", "type": "diss" , "date": "2022-12-16", "title": "7. Conclusion" , "tags": "[diss]", "content": "I close by taking a step back, shifting my lens away from discussing data engineers searching at work, and consider what lessons and provocations my findings offer for search more broadly.\nWeb search engines have beengranted too much power 115 and searchers both claim and are assigned too much responsibility. The search box, SERP, and the results navigated are a small slice of web searching. Web search is made to work, where it is, not only by the technical mechanisms (the indexes, algorithms, and designs) and social construction (articulations or imaginaries) of the search engine—and not just by the searcher themself or the websites seeking to be found—but by interactions among the various components in the larger systems and the contexts in which search is situated.\nSuccess in using search matters greatly, both for data engineers and for society broadly. The relatively tacit modes of sharing knowledge about productive use of search in data engineering work have disparate implications for historically marginalized people. The do-it-yourself image portrayed by data engineers hides a deep web of taken-for-granted dependence on the knowledge of others.\nBelow I will present two further arguments developed across the chapters, then briefly review my core findings and arguments with attention to applications beyond data engineering, highlight the importance of my findings to our understanding of search and their broader implications, and end with an appeal for imagining search differently.\n Two further arguments: search envelopes and gatekeeping in data engineering\n \nWhile web searching for data engineering is generally put to effective use, I also make two arguments about limitations. Here I will organize concerns introduced throughout the chapters. First, the effective use of web search by data engineers cannot be expected to be as stable for searches outside the structuring provided by the data engineering work practices. Second, the maintenance of search as solitary and backstage reproduces uneven access to community norms and knowledge, limiting people’s ability to make effective use of search (and gatekeep in a way that is at odds with efforts at changing the demographics of technical professions).\nFirst, the limits to someone’s or some community’s success in searching depends on how resources around them are aligned or marshaled towards particular sorts of learning and doing. The effective search envelope is dependent on the knowledge of other people and artifacts. “Search envelope” refers to the operating envelope or performance envelope of the data engineer’s model of search and the surrounding system that supports the searching.116 Without the right search inputs, relevant evaluation, and environment for acting on search, searchers will struggle (or leave search sessions misinformed). While generally successful for their purposes, the effectiveness of data engineering search practices is limited by the ambiguity of the search confessions, the taken-for-grantedness of web search and the occupational, professional, and technical components supporting it, and firms’ hands off approach to both search repair and responsibility for searching.\nEfforts to improve search exclusively or primarily through improving search literacy of individuals, by building greater technical expertise in the mechanisms of search, are missing important ways in which search is made to work in contexts. My findings reveal that web search in data engineering is constrained by the imprecision of the confessions, situated searching supported and scaffolded by the extensions of search (in the query generation, space for evaluation, and decoupling), the repair work, and a possessive and shame-inflected approach to knowledge and ignorance. The limitation on successful searching is akin to an individual attempting to search or learn outside their “zone of proximal development” and without scaffolding from experts and the environment. This is related to notions of a firms’ “absorptive capacity” (Cohen & Levinthal, 1990; Roberts et al., 2012) , their “sensing routines” (Carlo et al., 2012, p. 870) , or “range of adaptive behavior” (Woods, 2018, p. 435).\nData engineers and their organizations can effectively rely on searching because it is supported by occupational, professional, and technical components of their work practices. Their success is not the result of individuals’ sophisticated technical knowledge of the mechanisms of search. Data engineers apply their domain expertise and draw from code, exception messages, and interactions with colleagues in developing search queries. A single data engineer learning an error-prone code pattern from a web search is likely to learn of the problem in their attempts to run code, in code review, or in testing prototypes.\nSecond, not all of the data engineers are fully brought into success of the searching practices. As researchers look at factors that push people out of technology work, this analysis of the situated searching experiences of data engineers presents an interesting case study of interactions concerning people’s status and inclusion within a workplace. I discuss how people describe the effects of a fear of being mistreated and misjudged because of how their peripheral position within the system shapes their performance and perceptions of their knowledge and ability, their skill and thus their responsibility. The general hands-off approach of management towards searching, informality around talk about web search, and lack of technocratization of search (intentional application of technique to influence search activity) produces “a way of masking power” (Freeman, 2013, p. 232) and maintains the “fiction of technological meritocracy” (Hicks, 2017, p. 16) , providing illegitimate cover for reproductions of hierarchy.\nA data engineer’s expertise is a shared accomplishment. Data engineers’ ability to function as knowing experts—to know and to be seen as knowing is a product of their situated searching with the support of occupational, professional, and technical components of their work practices. Power relations are maintained, in part, by the invisibility of the searching practices—the engagements of the system taken-for-granted—and the maintenance of expertise as an individual possession (rather than composed in networks (Cambrosio et al., 2013; Eyal, 2019) ). These web search practices can be a barrier to new, and particularly already marginalized, data engineers’ full participation in their workplace. These findings provide a partial “account[ing] for the normalization and production of systematic advantage” (Hoffmann, 2019, p. 910) and disrupt notions of “exclusive forms of technical expertise” (Hoffmann, 2021, p. 11).\n Lessons for searching and further research\n \nThis research shows how data engineers have made web search work for them, with lessons for research and the teaching and design of search more broadly, and revealing in the process limitations to their organizational learning and inclusion. My study of a discrete group of people, data engineers working in companies across the United States, provides lessons for our understanding of search that are applicable to searching in other domains and communities. I conducted interviews and performed document analysis with the two analytical lenses of Handoff and LPP to see how search is learned and used and how thathow impinges on core societal values—namely responsibility, privacy, and fairness. Iterative comparison to literature and examples of searching in other domains and cases shaped my attention and analysis. This site—with data engineers technically sophisticated, well-resourced, and reliant on search—was selected in order to develop broadly applicable lessons. While it could be framed as a special case of broader interactional and organizational processes, looking back to work from Goffman (1956) and Thompson (1967) , I focus here on the lessons and inspirations most closely related to the design and use of web search.\nI will quickly review the core ideas, the findings and arguments, and then reflect on key takeaways.\nThis research tells a straightforward story of data engineers’ success in making use of web search for work (though with a couple clear caveats and concerns raised along the way). It starts with the observation that data engineers are reliant on web search for their work, seemingly successfully, and present a potential ‘best case’ study for exploring the role of technical knowledge of web search mechanisms. Interviews reveal there is limited explicit instruction, discussion, demonstration, or collaboration in the moments of web search in data engineering. But search confessions legitimate their searching, shape norms of use, and direct others to also rely on web search. Data engineers’ success in search is not because they know more about the technical mechanisms of search, but because their work tools and practices (and domain expertise) make search work for their work purposes (supporting query formulation, evaluation of results, and decoupling performance from search automation bias). The occupational, professional, and technical components, as extensions of web search, provide sites and activities for new data engineers to gradually increase participation in the search work of data engineers. Search repair practices provide data engineers both additionaltalk about search, further legitimating it within their work, and opportunity for the learning data engineers to participate in extensions of web searching. The search repair practices constitute articulation work necessary to support such heavy reliance on web search. With firms delegating responsibility for searching down to individuals as a strategic approach to uncertainty, individual data engineers identify themselves as responsible for their web searching. The firm (pursuing only the delegation and no further ownership of search) nor the data engineers have intentionally applied technique to influence the search practices themselves. Successful data engineering use of web search is constrained to the imprecision of the confessions, situated searching supported and scaffolded by the extensions of search, the repair work, and a possessive and shame-inflected approach to knowledge and ignorance. Not all of the data engineers are fully brought in to participate in the success of the searching practices.\nBelow I identify five takeaways, and for each a key observation and provocations for future research.\n\n Web search in data engineering is continually re-legitimated, in this case, through talk about search—search confessions and search repair work. \n\nIdentifying similar legitimation work, or resistance and denial, to web search in different situations will provide entry points for understanding relations of power and constructions of learning, knowledge, and expertise within a situated practice—beyond the questions of web search practices themselves.\nSuch examinations may include looking at participant interventions to shift the legitimation as well as the modes of engagement (targeting, for instance, perceptions of constraint, affordance, shame, or celebration). How are search confessions and search memes (“just google it”, “google is your friend”, “LMGTFY”, “google knows everything until you have an assignment”) enrolled in other settings? Search directives? Are there settings where web search has reached something closer to closure (Bijker et al., 1993) ? Such legitimation work is more formal in some settings (such as in proscriptions of searching the web in classrooms (Haider, 2017) ), but may appear in jokes, memes, or something similar to confessions elsewhere. In healthcare related contexts there is a meme that patients find printed on coffee mugs and posters: “Please Don’t Confuse Your Google Search With My Medical Degree”. The legitimation (or not) of web searching may not be discursive, but dictated in relations of access (Burrell, 2018; Haider, 2017; Robinson, 2009; Sundin et al., 2017). What are the calls for memorization rather than reliance on web search? Who is using their own search engine? Legitimation of googling in school work is heterogeneous (interviews expressed differing experiences). Does legitimation of web search reliance in schooling in some fields map onto the use of web search in the workplace? How is the legitimation in these various settings taken up by or against different people within the setting?\n\n Web search is extended beyond the search box and the SERP. \n\nThis is not a new sort of claim, but following it provided visibility into the role of knowledge and space for participatory learning in this case. Identifying the extensions of search in different search situations may point to potential reconfigurations to reduce the dependence on individual search performance.\nAre there search practices that distribute more aspects of searching (than query formulation and results evaluation) to other systems and people? How are seeds disseminated and found in other settings? Are there other search settings where evaluation of results can be done so decoupled from the search and the performance effects? What types of searches, in what settings provide the least space for evaluation and decoupling? How are searches for the various “Your Money Your Life” topics—topics that have “a high risk of harm because content about these topics could significantly impact the health, financial stability, or safety of people, or the welfare or well-being of society” (Google, 2022) —extended in different settings? How do different settings provide impetuses for search? Can seeds be disseminated as an intervention?\n\n Successful use of web search did not hinge on personal knowledge of the technical mechanisms of web search, in this case. \n\nIdentifying the extent to which the successful use of web search in different situations and search purposes depends on varying degrees of domain knowledge or personal knowledge of the mechanisms of search will provide entry points for understanding the embeddedness of expertise and decoupling.\nHow does this finding change if the non-work related searches of this group of people are also scrutinized? Under what conditions does personal knowledge of the technical mechanisms matter significantly in other cases of web search, search, or the use of other information technologies? How do we identify the boundary conditions? What specific advantages might knowledge of the technical mechanisms of web search provide in different situations? Do very high levels of domain or search mechanism expertise counteract search automation bias? How does frequency, variety, or urgency of searching interact with these questions? Social media is sometimes used as a substitute or complement for web search (Oeldorf-Hirsch et al., 2014; Shah, 2017) and the use of question-and-answer sites like Stack Overflow, Quora, and some subreddits (Gilbert, 2018) have been characterized as social search or “asymmetric collaborative information seeking” (Morris, 2013; Morris & Teevan, 2009). How is this used, not as a substitute or comparison, but to formulate or evaluate web searches?\n\n Web search is entangled with notions of responsibility, both credit and blame, for (and possession of) knowledge, in this case. \n\nThe hiddenness of searching to protect people’s status as knowing individuals, concealing their ignorance or the resources they employ to learn is found in many domains of searching. How could we encourage more sharing of searches while retaining the value of intimacy for learning, retaining the safety to search within cultures that still penalize the learner?\nMight we draw on contextual integrity (Nissenbaum, 2011a) ? Can we find examples where such sharing is practiced and effective? Is web search treated differently by practitioners who adopt lessons from human factors and safety science (blameless postmortems, no single cause of failure)? How does the TIL (Today I Learned) movement treat responsibility in search? How does the use of school or workplace “no stupid questions” channels treat responsibility in search? Are there elements of open source coding movements, with the tension between generalized reciprocity and individualized responsibility, like those studied by Weber (2004) , Coleman (2012) , Dunbar-Hester (2020) that have varying treatments of responsibility for knowledge? Koonin (2019) ’s “Everything I googled in a week as a professional software engineer” is widely shared, has her professional experience, and that of those who also publicly shared (or share) their searching, shifted? How do teachers or livestreamers who code and search live discuss the “obligation to know” (Reagle, 2016) and the assignment of credit and blame for knowledge? Tripodi (2022b) describes a “do-it-yourself” approach to search where propagandists appear to successfully convince people they need to think for themselves and that web searching fact-checking is the legitimate approach to that, all while feeding them search queries that constrain what they might find.117 Does the mantle for searching that these people have taken on still maintain a backstage for the actual searching activity, or is it proudly shared?\n\n Technocratization of web search, the intentional application of technique to influence search activity, did not make an appearance, in this case, but it could be pursued in multiple forms with varying effects. \n\nWeb search conceptions, activity, and the tools themselves are plastic and different occupational or organizational factors may produce very different findings and futures.\nWhile the search activity itself of the data engineers I interviewed were neither surveilled nor intentionally scaffolded, there are tools for this, as well as search engines and tools that may be substitutes for general-purpose search engines. This includes tools to facilitate memorization rather than searching, to substitute for a subset of searches. While it may be easy to identify examples of workers who do have their searching activity formally surveilled, restricted, or nudged by management, how do they resist or adopt these constraints/affordances? How are people using large language models to influence different aspects of search activity?118 Search engine optimization experts use a variety of tools to better understand searching behavior of potential customers, do they adapt those tools to their own everyday or YMYL searching activity? How can searchers, and designers supporting them, make or modify tools to better see, distribute, and accomplish the always unfinished and context-dependent job of the search user interface?119\n\n\n to aid users in the expression of their information needs, in the formulation of their queries, in the understanding of their search results, and in keeping track of the progress of their information seeking efforts. \n\n Why search matters\n \nHow we search and how we think about it shapes not only what we learn but how we learn with and from others. Questions about relying on web search in the workplace are not about deskilling or even reskilling so much as about what skills are, who is allowed or seen to have skills, and “the political disenfranchisement and dehumanization of those people who are categorized as unskilled” (Iskander, 2021, p. 256).\nPeople will attempt to turn, in part, to web search—or some transformed variant—to understand their changing world, including climate emergencies and resettlement, wars and their rumors, future pandemics and new vaccines, changes in schooling and healthcare, increasing inequality, and myriad new technologies from robotics and gene-editing to artificial intelligence and green technologies. Web search will continue to be a battleground where democracy is defined and practiced. These and other “looming disequilibria” (Weber, 2019, pp. 15–17)120 prompt potentially life-altering queries that people will navigate within their systems of searching, for better or worse. Who will make successful use of search? How?\n Imagining searching\n \nIn this research I have pursued “provocative generalizability”, I “attempt[] to move [my]] findings toward that which is not yet imagined, not yet in practice, not yet in sight. [ . . .] rather than only understanding (or naturalizing) what is” (Fine, 2006, p. 100). This is “a normative orientation” (Liboiron, 2021, p. 154). The lessons from this dissertation can be put towards defamiliarizing (Bell et al., 2005) web search and joining others as they “make, unmake and remake the search engine” (Sundin et al., 2017) , “imagin[ing] search with a variety of other possibilities” (Noble, 2018, p. 180).\n\nVaidhyanathan (2011) concludes his exploration ofGooglization with a section titled “Imagining a Better Way”, writing that “[t]he question is not whether Google treats us well but whether this is best we can do.” We can make new search engines and more people can make better use of search through their practices and reconfigured contexts.\nWe can find ways to clearly legitimate effective web search practices, celebrating searchers rather than stigmatizing them. We can learn to distinguish effective search practices from those that are manipulated or poorly modeled and likely to misinform or fail to inform. While we must seek knowledge of the mechanisms of web search engines in order to reshape or replace them, we can find places to search around the opacity. We could share habits and practices that are not constrained by lack of transparency on the part of the decisions of commercial web search engine companies or inherent in the systems they build. We can focus on building the knowledge for effective searching into our practices, tools, and environments. We can work on mobilizing and recognizing effective search seeds in different domains. We could focus on developing and calibrating our individual and collective ability to evaluate search results and our results-of-search. We can look for configurations of components that let us decouple from search automation bias. We might see more of our interactions as spaces where we participate in formulating and evaluating searches with others. We can spread the practices for search repair that connect and encourage people rather than cut them apart and tear them down. We can see the extensions of search and find or fashion our own techniques to scaffold our searching and refashion our search practices. We can address search gaps in ways apart from turning to automation. We can determine how to share our search activities in ways that are appropriately sensitive to the relations between people and their goals in different contexts. We can make the extensions and effects of search more visible. We can make talking about search less shameful. We can find more ways to search together. We can recognize how search is a shared performance and can be a shared responsibility.\n\n Bibliography\n\n\n\nBarad, K. (2003). Posthumanist performativity: Toward an understanding of how matter comes to matter.Signs: Journal of Women in Culture and Society,28 (3), 801–831.\n\n\nBell, G., Blythe, M., & Sengers, P. (2005). Making by making strange: Defamiliarization and the design of domestic technologies.ACM Transactions on Computer-Human Interaction (TOCHI),12 (2), 149–173. https://doi.org/10.1145/1067860.1067862 \n\n\n\nBijker, W. E., Hughes, T. P., & Pinch, T. (1993). Introduction. InThe social construction of technological systems (pp. 9–50). MIT Press.\n\n\nBurrell, J. (2018). Thinking relationally about digital inequality in rural regions of the u.s.First Monday,23 (6). https://doi.org/10.5210/fm.v23i6.8376 \n\n\n\nCambrosio, A., Limoges, C., & Hoffman, E. (2013). Expertise as a network: A case study of the controversies over the environmental release of genetically engineered organisms. In N. Stehr & R. V. Ericson (Eds.),The culture and power of knowledge (pp. 341–362). De Gruyter. https://doi.org/doi:10.1515/9783110847765.341 \n\n\n\nCarlo, J. L., Lyytinen, K., & Rose, G. M. (2012). A knowledge-based model of radical innovation in small software firms.MIS Quarterly,36 (3), 865–895. http://www.jstor.org/stable/41703484 \n\n\n\nCaulfield, M. (2019a).Data voids and the google this ploy: Kalergi plan. https://hapgood.us/2019/04/12/data-voids-and-the-google-this-ploy-kalergi-plan/ .\n\n\nCohen, W. M., & Levinthal, D. A. (1990). Absorptive capacity: A new perspective on learning and innovation.Administrative Science Quarterly,35 (1), 128–152. http://www.jstor.org/stable/2393553 \n\n\n\nColeman, E. G. (2012).Coding freedom: The ethics and aesthetics of hacking. Princeton University Press. https://gabriellacoleman.org/Coleman-Coding-Freedom.pdf \n\n\n\nDunbar-Hester, C. (2020).Hacking diversity: The politics of inclusion in open technology cultures (1st Edition). Princeton University Press. https://press.princeton.edu/books/hardcover/9780691182070/hacking-diversity \n\n\n\nEyal, G. (2019).The crisis of expertise. Polity Press. https://www.wiley.com/en-us/The+Crisis+of+Expertise-p-9780745665771 \n\n\n\nFine, M. (2006). Bearing witness: Methods for researching oppression and resistance—a textbook for critical research.Social Justice Research,19, 83–108.\n\n\nFreeman, J. (2013). The tyranny of structurelessness.WSQ,41 (3-4), 231–246. https://doi.org/10.1353/wsq.2013.0072 \n\n\n\nGilbert, S. A. (2018).Motivations for participating in online initiatives: Exploring motivations across initiative types [PhD thesis, University of British Columbia]. https://doi.org/http://dx.doi.org/10.14288/1.0372890 \n\n\n\nGoffman, E. (1956).The presentation of self in everyday life. University of Edinburgh.\n\n\nGoogle. (2022).Searchqualityevaluatorguidelines.pdf. https://static.googleusercontent.com/media/guidelines.raterhub.com/en//searchqualityevaluatorguidelines.pdf .\n\n\nHaider, J. (2017).Controlling the urge to search. Studying the informational texture of practices by exploring the missing element.10 (1). https://doi.org/http://dx.doi.org/10.14288/1.0372890 \n\n\n\nHearst, M. A. (2009).Search user interfaces. Cambridge University Press.\n\n\nHicks, M. (2017).Programmed inequality: How britain discarded women technologists and lost its edge in computing. MIT Press.\n\n\nHoffmann, A. L. (2019). Where fairness fails: Data, algorithms, and the limits of antidiscrimination discourse.Information, Communication & Society,22 (7), 900–915. https://doi.org/10.1080/1369118X.2019.1573912 \n\n\n\nHoffmann, A. L. (2021). Terms of inclusion: Data, discourse, violence.New Media & Society,23 (12), 3539–3556. https://doi.org/10.1177/1461444820958725 \n\n\n\nIskander, N. (2021).Does skill make us human?: Migrant workers in 21st-century qatar and beyond. Princeton University Press.\n\n\nKoonin, S. (2019).Everything i googled in a week as a professional software engineer - localghost. https://localghost.dev/2019/09/everything-i-googled-in-a-week-as-a-professional-software-engineer/ .\n\n\nLiboiron, M. (2021).Pollution is colonialism. Duke University Press. https://www.dukeupress.edu/pollution-is-colonialism \n\n\n\nMorris, M. R. (2013). Collaborative search revisited.Proceedings of Cscw 2013. https://doi.org/10.1145/2441776.2441910 \n\n\n\nMorris, M. R., & Teevan, J. (2009). Collaborative web search: Who, what, where, when, and why.Synthesis Lectures on Information Concepts, Retrieval, and Services,1 (1), 1–99. https://doi.org/10.2200/S00230ED1V01Y200912ICR014 \n\n\n\nNissenbaum, H. (2011a). A contextual approach to privacy online.Daedalus,140 (4), 32–48.\n\n\nNoble, S. U. (2018).Algorithms of oppression how search engines reinforce racism. New York University Press. https://nyupress.org/9781479837243/algorithms-of-oppression/ \n\n\n\nOeldorf-Hirsch, A., Hecht, B., Morris, M. R., Teevan, J., & Gergle, D. (2014, February). To search or to ask.Proceedings of the 17th ACM Conference on Computer Supported Cooperative Work & Social Computing. https://doi.org/10.1145/2531602.2531706 \n\n\n\nReagle, J. (2016). The obligation to know: From faq to feminism 101.New Media &Amp; Society,18 (5), 691–707. https://doi.org/10.1177/1461444814545840 \n\n\n\nRoberts, N., Galluch, P. S., Dinger, M., & Grover, V. (2012). Absorptive capacity and information systems research: Review, synthesis, and directions for future research.MIS Quarterly,36 (2), 625–648. http://www.jstor.org/stable/41703470 \n\n\n\nRobinson, L. (2009). A taste for the necessary.Information, Communication & Society,12 (4), 488–507. https://doi.org/10.1080/13691180902857678 \n\n\n\nShah, C. (2017).Social information seeking. Springer International Publishing. https://doi.org/10.1007/978-3-319-56756-3 \n\n\n\nShah, C., & Bender, E. M. (2022, March). Situating search.ACM SIGIR Conference on Human Information Interaction and Retrieval. https://doi.org/10.1145/3498366.3505816 \n\n\n\nSundin, O., Haider, J., Andersson, C., Carlsson, H., & Kjellberg, S. (2017). The search-ification of everyday life and the mundane-ification of search.Journal of Documentation. https://doi.org/10.1108/JD-06-2016-0081 \n\n\n\n\n The social construction of technological systems. (1993). MIT Press.\n\n\nThompson, J. D. (1967).Organizations in action: Social science bases of administrative theory (1st ed.). McGraw-Hill.\n\n\nTripodi, F. (2022b).The propagandists’ playbook: How conservative elites manipulate search and threaten democracy (Hardcover, p. 288). Yale University Press. https://yalebooks.yale.edu/book/9780300248944/the-propagandists-playbook/ \n\n\n\nVaidhyanathan, S. (2011).The googlization of everything:(And why we should worry). Univ of California Press. https://doi.org/10.1525/9780520948693 \n\n\n\nWeber, S. (2004).The success of open source. Harvard University Press. https://www.hup.harvard.edu/catalog.php?isbn=9780674018587 \n\n\n\nWeber, S. (2019).Bloc by bloc: How to build a global enterprise for the new regional order. Harvard University Press.\n\n\nWoods, D. D. (2018). The theory of graceful extensibility: Basic rules that govern adaptive systems.Environ Syst Decis,38 (4), 433–457. https://doi.org/10.1007/s10669-018-9708-3 \n\n\n\n\n\n\n\n Borrowing from Barad (2003) ’s opening line (p. 801), “Language has been granted too much power.” ↩︎ \n\n\n\n This is introduced in a challenge identified in Admitting searching : Discussion: Opportunities and challenges in confessions , with reference to Woods (2018) . ↩︎ \n\n\n\n Compare the “Search for yourself” approach presented by Caulfield (2019a) , mentioned above in Extending searching : Search seeds . ↩︎ \n\n\n\n See Shah & Bender (2022) for an overview of concerns and directions. ↩︎ \n\n\n\n\n Hearst (2009, p. 1) opens by outlining the job of the search user interface: ↩︎ \n\n\n\n\n Weber (2019) defining “looming disequilibria” [pp. 15-16]: \n\n build-up of entropy and sometimes destructive energy conditions that are out of balance and that create dynamic tensions and frictions that won’t remain in the state in which they are without significant compensatory counterforce [ . . . ] Disequilibria don’t necessarily signal an imminent break of some kind, but they do represent a build-up of entropy and sometimes destructive energy beneath the surface. \n\n↩︎ \n\n\n", "snippet": "\n", "url": "/diss/conclusion/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-confirmation-biased-queries", "type": "pages" , "date": "", "title": "confirmation-biased-queries tag" , "tags": "", "content": "{% assign tag_name = \"confirmation-biased-queries\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"confirmation-biased-queries\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"confirmation-biased-queries\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/confirmation-biased-queries/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-consensus", "type": "pages" , "date": "", "title": "Consensus tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Consensus\" tag.\n \n\n\n{% assign tag_name = \"Consensus\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Consensus\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Consensus\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/consensus/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-conspiracy-theories", "type": "pages" , "date": "", "title": "conspiracy-theories tag" , "tags": "", "content": "{% assign tag_name = \"conspiracy-theories\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"conspiracy-theories\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"conspiracy-theories\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/conspiracy-theories/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-constraints", "type": "pages" , "date": "", "title": "constraints tag" , "tags": "", "content": "{% assign tag_name = \"constraints\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"constraints\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"constraints\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/constraints/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "contact", "type": "pages" , "date": "", "title": "Contact" , "tags": "", "content": "{% include contact-me.html %}", "snippet": "\n", "url": "/contact/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-contextually-relevant-explanation", "type": "pages" , "date": "", "title": "contextually-relevant-explanation tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"contextually-relevant-explanation\" tag.\n \n\n\n{% assign tag_name = \"contextually-relevant-explanation\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"contextually-relevant-explanation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"contextually-relevant-explanation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/contextually-relevant-explanation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-contextually-relevant-explanations", "type": "pages" , "date": "", "title": "contextually-relevant-explanations tag" , "tags": "", "content": "{% assign tag_name = \"contextually-relevant-explanations\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"contextually-relevant-explanations\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"contextually-relevant-explanations\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/contextually-relevant-explanations/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-conversational-ai", "type": "pages" , "date": "", "title": "conversational AI tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"conversational AI\" tag.\n \n\n\n{% assign tag_name = \"conversational AI\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"conversational AI\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"conversational AI\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/conversational-ai/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-counter-imaginaries", "type": "pages" , "date": "", "title": "counter-imaginaries tag" , "tags": "", "content": "{% assign tag_name = \"counter-imaginaries\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"counter-imaginaries\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"counter-imaginaries\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/counter-imaginaries/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-country-comparisons", "type": "pages" , "date": "", "title": "country-comparisons tag" , "tags": "", "content": "{% assign tag_name = \"country-comparisons\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"country-comparisons\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"country-comparisons\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/country-comparisons/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-custom-instructions", "type": "pages" , "date": "", "title": "custom instructions tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"custom instructions\" tag.\n \n\n\n{% assign tag_name = \"custom instructions\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"custom instructions\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"custom instructions\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/custom-instructions/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "cv", "type": "pages" , "date": "", "title": "CV" , "tags": "", "content": "", "snippet": "\n", "url": "/cv/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-data-poisoning", "type": "pages" , "date": "", "title": "data poisoning tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"data poisoning\" tag.\n \n\n\n{% assign tag_name = \"data poisoning\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"data poisoning\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"data poisoning\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/data-poisoning/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-data-voids", "type": "pages" , "date": "", "title": "data voids tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"data voids\" tag.\n \n\n\n{% assign tag_name = \"data voids\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"data voids\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"data voids\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/data-voids/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-decontextualized", "type": "pages" , "date": "", "title": "decontextualized tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"decontextualized\" tag.\n \n\n\n{% assign tag_name = \"decontextualized\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"decontextualized\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"decontextualized\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/decontextualized/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-decoupling", "type": "pages" , "date": "", "title": "decoupling tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"decoupling\" tag.\n \n\n\n{% assign tag_name = \"decoupling\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"decoupling\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"decoupling\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/decoupling/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-did-you-even-click-the-link", "type": "pages" , "date": "", "title": "did-you-even-click-the-link tag" , "tags": "", "content": "{% assign tag_name = \"did-you-even-click-the-link\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"did-you-even-click-the-link\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"did-you-even-click-the-link\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/did-you-even-click-the-link/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-did-you-mean", "type": "pages" , "date": "", "title": "did-you-mean tag" , "tags": "", "content": "{% assign tag_name = \"did-you-mean\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"did-you-mean\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"did-you-mean\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/did-you-mean/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-direct-answers", "type": "pages" , "date": "", "title": "direct answers tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"direct answers\" tag.\n \n\n\n{% assign tag_name = \"direct answers\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"direct answers\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"direct answers\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/direct-answers/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-disambiguation", "type": "pages" , "date": "", "title": "disambiguation tag" , "tags": "", "content": "{% assign tag_name = \"disambiguation\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"disambiguation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"disambiguation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/disambiguation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "disclosures", "type": "pages" , "date": "", "title": "Disclosures" , "tags": "", "content": "### Funding Disclosures\n\nWhile the academy and the public wrestle with appropriate institutional processes for responsible disclosure of research funding & support, mechanisms to manage risks associated with conflicts of interest, and models for public funding of research, I'm attempting personal disclosure imagined broadly.\n\nUC Berkeley provided definition of [Conflict of Interest](https://researchcoi.berkeley.edu/):\n> A conflict of interest is a situation in which an investigator’s outside financial interest(s) or obligation(s) (real or perceived) have the potential to bias a research project or cause harm to human subjects participating in a research project.\n\n\n- Fall 2022: Final semester at UC Berkeley — paid only Filing Fee (and an additional \"$25 fee for unregistered student library privileges\"); supported by my wife.\n- AY2021-2022: Funded by the UC Berkeley Doctoral Completion Fellowship.\n- 2017-Current: Member of [AFOG](https://afog.berkeley.edu/) (supported by UC Berkeley’s School of Information and a gift from Google Trust and Safety).\n- AY2017-2019: As [CTSP](https://ctsp.berkeley.edu) Co-Director managed unrestricted operational and event funding from Google, Facebook (for the [2018 Data for Good Competition](https://ctsp.berkeley.edu/data-for-good-competition/)), and the Charles Koch Foundation (for the [2018 Digital Security Crash Course](https://ctsp.berkeley.edu/digital-security-crash-course2018/)) and managed joint-funding for fellows with other campus centers ([AFOG](https://afog.berkeley.edu/), [CLTC](https://cltc.berkeley.edu/)) supported by industry and/or foundation funds.\n- 2018-2019: Research at Steve Trush Consulting funded by Intel’s Anticipatory Computing Lab and in collaboration with Heather Patterson of the City of Oakland’s Privacy Advisory Commission (for the [“Questioning Surveillance” Workshop](https://mailchi.mp/097e7d02802d/cltc-weekly-news-events-opportunities-2722061)).\n- February 2017 to February 2018: Commissioner on the City of Berkeley [Disaster and Fire Safety Commission](https://www.cityofberkeley.info/DisasterFireSafetyCommission/)\n- 2017: [CTSP Fellow](https://ctsp.berkeley.edu/people2017#daniel), summer research funding through the NSF “INSPIRE: Value-Function Handoffs in HumanMachine Compositions” under [Grant No. SES 1650589](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1650589&HistoricalAwards=false) - working on [\"Rescripting Search to Respect the Right to Truth\"](/shortcuts/mulligan2018rescripting.html).\n- 2015: Summer research funding through [CLTC](https://cltc.berkeley.edu/) — working on [\"Cybersecurity Futures 2020\"](https://cltc.berkeley.edu/2016/04/28/cybersecurity-futures-2020/)\n- Previous academic and professional affiliations (including service in the U.S. military) are listed on my [LinkedIn profile](https://www.linkedin.com/in/danielsgriffin/).\n- My spouse works at Salesforce.\n\nPlease email with questions or suggestions.\n\n\n### Data Disclosures\n\nWebsite analytics is done without cookies with [Plausible.io](https://plausible.io/data-policy).\n\n\n\nCurrently embed Tweets through [Twitter's widgets.js](https://blog.twitter.com/engineering/en_us/topics/insights/2016/how-twitter-deploys-its-widgets-javascript). See some commentary on it [here](https://twitter.com/phonedude_mln/status/1514035642468024324) and [here](https://twitter.com/simevidas/status/1019267603909500928) (noting possibility of misuse of the access I give). I do not know at this time what data Twitter collects. - 2022-11-02 10:06\n\n### Tool-use Disclosures\n\n\n[I do not use Google Scholar](https://twitter.com/danielsgriffin/status/1572361310444355584) and do not have a Google Scholar profile.\n\n", "snippet": "\n", "url": "/disclosures/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-discord", "type": "pages" , "date": "", "title": "Discord tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Discord\" tag.\n \n\n\n{% assign tag_name = \"Discord\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Discord\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Discord\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/discord/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-disruption", "type": "pages" , "date": "", "title": "disruption tag" , "tags": "", "content": "{% assign tag_name = \"disruption\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"disruption\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"disruption\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/disruption/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-diss", "type": "diss" , "date": "", "title": "diss tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"diss\" tag.\n \n\n\n{% assign tag_name = \"diss\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"diss\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"diss\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/diss/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-do-not-just-google", "type": "pages" , "date": "", "title": "do not just google tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"do not just google\" tag.\n \n\n\n{% assign tag_name = \"do not just google\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"do not just google\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"do not just google\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/do-not-just-google/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-double-check-response", "type": "pages" , "date": "", "title": "Double-check-response tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Double-check-response\" tag.\n \n\n\n{% assign tag_name = \"Double-check-response\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Double-check-response\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Double-check-response\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/double-check-response/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-doubting", "type": "pages" , "date": "", "title": "doubting tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"doubting\" tag.\n \n\n\n{% assign tag_name = \"doubting\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"doubting\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"doubting\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/doubting/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-duckduckgo", "type": "pages" , "date": "", "title": "DuckDuckGo tag" , "tags": "", "content": "{% assign tag_name = \"DuckDuckGo\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"DuckDuckGo\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"DuckDuckGo\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/duckduckgo/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ecosia", "type": "pages" , "date": "", "title": "Ecosia tag" , "tags": "", "content": "{% assign tag_name = \"Ecosia\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Ecosia\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Ecosia\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ecosia/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-elicit", "type": "pages" , "date": "", "title": "Elicit tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Elicit\" tag.\n \n\n\n{% assign tag_name = \"Elicit\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Elicit\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Elicit\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/elicit/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-end-user-comparison", "type": "pages" , "date": "", "title": "end-user-comparison tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"end-user-comparison\" tag.\n \n\n\n{% assign tag_name = \"end-user-comparison\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"end-user-comparison\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"end-user-comparison\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/end-user-comparison/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-evaluating-results-meta", "type": "pages" , "date": "", "title": "evaluating-results-meta tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"evaluating-results-meta\" tag.\n \n\n\n{% assign tag_name = \"evaluating-results-meta\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"evaluating-results-meta\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"evaluating-results-meta\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/evaluating-results-meta/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-evaluating-search-engines", "type": "pages" , "date": "", "title": "evaluating-search-engines tag" , "tags": "", "content": "{% assign tag_name = \"evaluating-search-engines\" %}\n\n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"evaluating search engines\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"evaluating search engines\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/evaluating-search-engines/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-expertise", "type": "pages" , "date": "", "title": "expertise tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"expertise\" tag.\n \n\n\n{% assign tag_name = \"expertise\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"expertise\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"expertise\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/expertise/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-extending-search-support", "type": "pages" , "date": "", "title": "extending search support tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"extending search support\" tag.\n \n\n\n{% assign tag_name = \"extending search support\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"extending search support\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"extending search support\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/extending-search-support/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-extending-searching", "type": "pages" , "date": "", "title": "extending searching tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"extending searching\" tag.\n \n\n\n{% assign tag_name = \"extending searching\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"extending searching\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"extending searching\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/extending-searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-extending-searching", "type": "diss" , "date": "2022-12-16", "title": "4. Extending searching" , "tags": "[diss, extending-searching, automation-bias]", "content": "The cover of Daniel M. Russell’s book, The Joy of Search: A Google Insider’s Guide to Going Beyond the Basics, describes him as the “Senior Research Scientist for Search Quality and User Happiness at Google” (Russell, 2019). The marketing materials from MIT Press say that “readers will discover essential tools for effective online searches [emphasis added]” (The MIT Press, 2020). In the book he writes:\n\n Most of the searches that Google sees in a typical day are fairly straightforward. The goal is clear, and the results are pretty obvious and unambiguous. \n But a significant number of searches are not. Searchers might have a goal in mind, but they can’t figure out how to express it in a way that will give them what they want. Sometimes their query is precise, but they don’t know how to read and interpret the results. It drives me to distraction as a researcher because I know that the searcher is missing just one small but critical piece of information. We try to build as much as we can into the search algorithm, but people still need to know a bit about what the web is, and how search engines crawl, index, and respond to their queries. [emphases added] \n\nData engineers are not explicitly taught much about doing web search as data engineers. Maybe extra lessons are unnecessary. Danny Sullivan, Google’s Search Liaison54 has said, quoted in a Google blog post (Kutz, 2022) :\n\n Today, it feels like people are born knowing how to search. You just type what you want into a magic box, and poof! It delivers results — no classes needed.55\n\n\nAre the search confessions and experience searching in school and everyday life enough for them to use search successfully as data engineers? Does engaging in search confessions provide enoughparticipation to support the learning of these practices? Or do they have theessential tools or acritical piece of information that helps them? How is their technical knowledge and knowledge of their craft applied to make search work? Where is that knowledge?\nI interviewed people with hard-won technical knowledge about the design of data pipelines, the characteristics of databases, deterministic and probabilistic algorithms, and insight into the cost and performance tradeoffs in production systems. My interviewees possess deep insight into how information is moved around and processed by computers and who might be said to “highly value information handling” (Teevan et al., 2004). And they use web search extensively. They rely on web search and it seems to perform well for the purpose to which they have put it. I thought I would talk with them and look with them at how they searched to see what lessons we might learn. Particularly, I wanted to look at the role of their knowledge of the mechanisms56 of web search in their search practices.\nBut the data engineers didn’t talk about their knowledge of search technology. Moreover, in response to my questions and prompting they did not suggest that technical understanding of search itself played a key role in their searching successes. The practices described by my interviewees did not present as, or appear to be, grounded in or driven by individual knowledge of search mechanisms. There were generally no references to crawling, indexing, ranking, advertising, nor parsing of queries. Search experiences were addressed with the search engine black boxed and the results reified as the results.\nInstead, the data engineers talked about their web searches heavily structured by practices and artifacts. They described various work practices and artifacts (occupational, professional, and technical components of their work) that I argue produce and maintain scaffolding for web searching. I found that the knowledge brought to bear to make their searching work is embedded in their work practices and their work practices are extensions of web search. Here I will use the analytical frames from Handoff and LPP to show web search as extended beyond the moment of searching and into the broader work practices and artifacts. I will show how the knowledge of successful searching is embedded in those practices and artifacts. I argue those practices and artifacts provide the participation necessary for the situated learning of web search.\nI next discuss the sort of knowledge that might be anticipated, before showing what knowledge is in the work practices and artifacts of the data engineers.\n Knowledge to make search work\n \n\n How will you look for it, Socrates, when you do not know at all what it is? How will you aim to search for something you do not know at all? If you should meet with it, how will you know that this is the thing that you did not know?57\n\n\nCalls for search platform transparency or explainability and digital or search literacy are rarely accompanied by cases demonstrating the benefits for the searcher. The assumption that knowledge is the problem is accepted and left untested.58\n\nIt would be beneficial to examine closely a site, such as that of data engineers, where people search extensively, seemingly effectively, and with technical knowledge of mechanisms similar to those in web search.\nIt is important to look at this question because of its place in research and policy debates about the use of new technologies in society and the appropriate role for regulation or design in facilitating effective use of knowledge of those new technologies. Better understanding the role of knowledge of the mechanisms of web search may feed back into we shape our practices and technologies to better achieve our goals.\nTo set the stage for the material in this chapter I will first discuss the mechanisms of web search and the role that some researchers have given knowledge of the mechanisms. Then I will provide an overview of work on the use of web search by coders.\n Mechanisms of web search\n \nSo what about the mechanisms of web search must be understood for ordinary successful use? Introna & Nissenbaum (2000) describe three kinds of mechanisms of web search: market, regulatory, and technical mechanisms. Introna & Nissenbaum (2000) ’s core focus is on the “market mechanism”, yet they broadly write of the “systematic mechanisms that drive search engines” and argue it would be a “bad idea” to “leave the shaping of search mechanisms to the marketplace” (p. 177). They mention regulatory mechanism in a quote from McChesney (1997) on “the notion that the market is the only ‘democratic’ regulatory mechanism”. They also use “mechanisms” in quoting from Raboy (1998). Raboy’s quote presents the internet as new media and a role for public policy to promote a model that with “new mechanisms” might be “aimed at maximizing equitable access to services and the means of communication”. The technical mechanisms in Introna & Nissenbaum’s “brief and selective technical overview” are the “technical mechanisms” of crawling, indexing, ranking, and “human-mediated trading of prominence for a fee” (p. 181).\nIn presenting these mechanisms, Introna & Nissenbaum (2000) were not explicitly discussing knowledge required for practical success in searching. Rather, their conclusions focused on policy and values in design directed towards addressing “the evident tendency of many of the leading search engines to give prominence to popular, wealthy, and powerful sites at the expense of others” and how that “undermines [ . . . ] the substantive vision of the Web as an inclusive democratic space” (p. 181). They did seem to indicate, though, a beneficial role for individual awareness of search mechanisms. They noted unfamiliarity and lack of awareness of “the systematic mechanisms that drive search engines”, and wrote “[s]uch awareness, we believe, would make a difference” (p. 177).59 Though they noted it was only a partial response60 , they demanded transparency (p. 181):\n\n full and truthful disclosure of the underlying rules (or algorithms) governing indexing, searching, and prioritizing, stated in a way that is meaningful to the majority of Web users. [ . . . ] We believe, on the whole, that informing users will be better than the status quo. [ . . . ] Disclosure is a step in the right direction because it would lead to a clearer grasp of what is at stake in selecting among the various search engines, which in turn should help seekers to make informed decisions about which search engines to use and trust. [emphasis added] \n\nResearchers from web search studies, critical algorithm studies (Mart, 2017) epistemology (Miller & Record, 2013) , and misinformation studies (Tripodi, 2018) have suggested that searchers’ knowledge of the mechanisms of web search may help searchers better achieve their search goals. Distinct from that claim, some of those researchers additionally argue, alongside others, that such knowledge can first be put to use by researchers, regulators, journalists, and librarians and other educators, who may then act in their expert capacities to shape and advance successful web searching. For instance, Pasquale (2015) argues for “qualified transparency”, disclosure and audits by the FTC or another agency (p. 160-164).\nSome of these studies also point to information literacy as an ideal and an intervention in pursuit not of individual search goals evaluated by accuracy or relevance but of societal goals that embrace values such as neutrality or privacy (Dijck, 2010). Noble (2018) ’s work, by contrast, is focused on algorithmic literacy for building alternative search engines (p. 25-26) and argues that reconceptualized (p. 133) or reimagined (p. 180) search engines might advance transparency at their core.61\n\nSome research appears to bundle individual search success with other goals or responsibilities. Sundin (2020) , for instance, calls for “critical awareness” that supports the user of search to be “an informed and critical citizen,” (pp. 365-376):\n\n How do you learn to use an information infrastructure such as search engines? Just as with electricity, which you can use by just switching on the lamp, many times you just have to type a word to get a result that is at least good enough. At the same time, the workings of search engines for a large number of sectors have dramatic consequences in society, such as for business, tourism, politics and schools. Again, you do not have to know very much in order to find out something about what you are looking for. But just as with electricity, if you want to be an informed and critical citizen this is not enough. [emphases added] \n\n\nBhatt & MacKenzie (2019) looked at digital literacy, including search engine use, with “a social practice approach to literacy” (p. 304). They start from the position that literacy is “always associated with, and realised through, ‘social practices’ rather than a purely formally-schooled understanding of correct language” (p. 303) and that literacy is “always embedded within social activities, is socially situated, and mediated by material artefacts and networks” (p. 303). Their claim regarding the consequences arising from the lack of knowledge of mechanisms also bundles multiple effects (p. 305):\n\n Without knowing just how such platforms work, how to make sense of complex algorithms, or that data discrimination is a real social problem, students may not be the autonomous and agential learners and pursuers of knowledge they believe themselves to be.\" \n\nTwo aspects of the mechanisms of web search that researchers have identified as important are the data collected and the inferences made by the search engine about the purpose of the search and the searchers. Warshaw et al. (2016) , in work performed at Google, find “a substantial gap between what people believe companies are doing with their data, and the current reality of pervasive, automatic algorithms.” Successful use of web search, drawn most broadly, may require an awareness of the data collected and the inferences made about the searchers.\nSome researchers attribute individuals’ acceptance of and persistent belief in propaganda to searchers’ knowledge deficit. This concern is implicit in Tripodi’s writings. Tripodi (2018) describes a pattern in her interviewees that indicated “users do not have a consistent or accurate understanding of the mechanisms by which the [search engine] returns search results” (p. 28). Tripodi (2018) referred particularly to the role of the keywords in the search query (including how others act to spread and write content to match those keywords) and the ranking of results (and the interpretations of ‘top content’ by searchers). While the focus of Tripodi’s book building on her prior research (2022b) is on how propagandists “wield the power of search” (p. 18) to pursue their ends, her description of her respondents’ knowledge implies a key role for knowledge deficits in the process: “few seems to understand how much keywords drive returns” (p. 103), “believed that top returns were more legitimate” (p. 109), and not realizing “returns are rooted in the search engine’s monetary interests” (p. 111).62\n\nI originally read Tripodi (2018) within the context of a surge of research (from, in part, critical algorithm studies (Seaver, 2019) ) about political demands for transparency, explainability, and contestability in algorithms (Ananny & Crawford, 2018; Burrell, 2016). There was also considerable alarm about, and interest in, “fake news” or propaganda (Jack, 2017) —with “a resurgence of mis/disinfo studies” (Caplan & Bauer, 2022) —alongside arguments about the absence or failure (boyd, 2018) of media/digital/search literacy. Alongside Tripodi’s work there were others looking at the role of search engines in misinformation (Metaxa-Kakavouli & Torres-Echeverry, 2017) and problematic search results (Golebiewski & boyd, 2018). It was an open question whether platform transparency about the mechanisms of search might be needed to help users search more effectively.\nGoogle’s myth making complicates attempts to understand the mechanisms (Gillespie, 2014). Like many companies (Burrell, 2016) , Google keeps the design and performance of its algorithms opaque or black-boxed (Noble, 2018). As Bilić (2016) argues, “Google employs powerful ideological engineering of neutrality and objectivity in order to keep the full context of its search engine hidden from everyday users.”\nIn our paper on Google’s Holocaust problem (2018), Deirdre Mulligan and I repeat the same general theme in our analysis of a disconnect between how Google engineers and managers imagine and see their tool and how it is perceived and used by others. Our contention, though, was not that search users should adopt the perceptions of the search producer or that knowledge was the answer, rather that the Google engineers and managers should recognize and remediate the consequences from those conceptions. The conceptions of the regular users were produced in part, we argued, by Google’s own myth making.\nResearchers have pointed out that not all search users can identify the distinction between paid for results and so-called organic search results (Commission, 2013; Daly & Scardamaglia, 2017; Ofcom, 2022). Some research suggests some people are unaware of the commercial nature of Google Search. Safiya Noble has shared about talking with a librarian who had been under the impression that Google was a nonprofit organization (House of Lords, Select Committee on Democracy and Digital Technologies, 2020).\nThe opacity or obfuscation from the company only means that the users may only know a part of the algorithm, though that may be the more important part for some uses. Users develop practical knowledge of algorithms, “knowing how to accomplish X, Y, or Z within algorithmically mediated spaces” (Cotter, 2022) , and may understand algorithms in ways inaccessible to the designers of the systems (Cotter, 2021) as “[n]ot even people on the ‘‘inside’’ know everything that is going on” (Seaver, 2019).\n use of web search by coders\n \nEarly in my exploration of search and then coders use of web search, even before I narrowed to data engineers, it became clear to me that some of the concerns around getting ‘bad information’ from web searches may be obviated by the nature of their work. Prior work on the use of web search by coders shaped my attention to these concerns.\nUnlike searching in many domains, the coders would often, as a part of their work practice and an affordance of their work, quickly validate what they found in the search results and see for themselves. This validation step, in a limited way, provides some friction that may help coders be reliant on web search while not overly reliant on the search engine rankings.63 They could make a change to their code and then test it by trying to run their code to see if it ‘worked’. This wasn’t some special skeptical bent, but part of their work to get things working. Searches were only complete if they found some workable results.\nThis (sometimes and relative) capacity for and practice of testing the results (in the standard use of the search tool) is described in the literature.\n\nBrandt et al. (2009) describes some of this where participants in their lab study—tasked with building an online chat room— would search for a tutorial and, finding one, “would often immediately begin experimenting with its code samples”.\n\n One participant explained, “there’s some stuff in [this code] that I don’t really know what it’s doing, but I’ll just try it and see what happens.” He copied four lines into his project, immediately removed two of the four, changed variable names and values, and tested. (p. 1592) \n\nBut they also described such testing as not always happening immediately. Saying “Participants typically trusted code found on the Web” and that errors or misapplication of the code found on the web was then not noticed immediately, which complicated the coders’ remediation efforts. (p. 1593)64\n\nIn other domains the testing or trying of search results is done at first by the searcher in interaction with the various results and their presentation. If one wasn’t sure or wanted to know more the quickest path is a further web search (or reading and browsing further on in the search results pages or on the SERP—there are tools built into major search engines, like Google’s three-dots, that might provide some transparency about a page).\nBut workable in the moment isn’t enough. There is other information that isn’t immediately testable by running it through a compiler or interpreter and seeing if it “works”. This is particularly the case for non-functional properties (normally including things like security, reliability, and scalability but could also include considerations of harm both in the implementation and use of the code (Widder et al., 2022, p. 8)). There is research looking at insecure or unsafe code on Stack Overflow. Fischer et al. (2017) showed that of the 1.3 million Android applications on Google Play 15% “contain vulnerable code snippets that were very likely copied from Stack Overflow” (p. 135). Subsequent work found that, on Stack Overflow questions related to Java security, “On average, insecure answers received more votes, comments, favorites, and views than secure answers” (Chen et al., 2019, p. 545). Firouzi et al. (2020) examined the use of possible unsafe unsafe keyword in C# code snippets on Stack Overflow.\n Seeds for queries and spaces for evaluation\n \nThere are many mechanisms of web search at various layers and levels of interaction with the work of data engineers. Here I focus on the role of knowledge of such mechanisms as the mechanisms relate to two aspects of data engineering web search activity: how they choose search queries and how they evaluate search results.\nI asked Shawn, a Developer Advocate in open source data software and former data engineer, to talk about the thinking that went into writing error codes. He talked about gradient descent and the error message’s role.\n\n You can definitely search yourself into a— gradient descent , you’ve heard of that algorithm, in machine learning?— You can always find yourself at a very local minimum or maximum and actually you’re not even close to the solution. It is very much a gradient descent type of problem. ‘Oh, this looks like the right solution.’ This also comes with experience too, right? Having that context of knowing that this is not the correct solution even by just a weird gut feeling. So it is interesting how Google’s algorithms can only take an input and that input is very much shaped by the experience of the engineer on the other side. And the way that they take in the outputs of the result of that search will also take them in one direction or the other. To some extent being able to have the right context, the right understanding it, always comes down to context. \n\nThe error message provides some context for the unknown engineer who may find an exception when running your code. This context shapes the situation, partially situates, even, the data engineer as they work to search for solutions to their problem. The error message is an example of a search seed and a space for evaluation, the next two sections.\n Query formulation\n \nJillian was a new data engineer on a small data engineering team at a fitness app. Talking about search struggles, she shared the following:\n\n Every so often I have such a hard time phrasing what I’m trying to look for. I continually am searching something new and I just aimlessly click through all of the search results. Whether or not I’m even being intentional about reading what the link even says. I’ll click on it, look through and it doesn’t have the answer. It’s always in this, not panicked state, but frustrated state. Where I’m like I have such a simple question. \n And I also feel that its the sort of question where If I could ask someone a question and phrase it, then it could probably be addressed in 15 seconds. But instead, there have probably been times where I have spent two hours trying to look through, because I don’t know how to phrase what I’m trying to do. \n\n\n when I can’t find my answer then I’m just like throwing darts. Putting random things in the search line trying to see if I can find what I’m trying to do. [ . . . ] the darts rarely stick. These are the scenarios where I’m really kinda desperate at this point. I’ll sometimes even look at what I’ve searched and I’ll be like ‘like why on earth would that give me the response I’m looking for, I didn’t even include the coding language. What have you done!?’ You’re brain is just like shutting off at this point and you’re in this habit of like click, scan, click, scan… And you just put in random keywords…. that aren’t even the keywords that you necessarily need to get your answer. \n\nUpon realizing she’s fallen down this hole, Jillian said that she will tell herself “Let’s just pause and think about it.” And write out by hand what she is looking fork, using other knowledge of her craft to remember or reconstruct different search queries.\n\n Say for example I was trying to understand some transformation I might have to write down a table and kind of look at it. \n\nGenerally, though, the data engineers are not throwing darts or attempting to search floating concepts. Their search queries are often given to them, or seeded, through their work practices.\nI will discuss two aspects of query formulation arising from production and socialization. Data engineers find queries as they areprompted by the code andimmersed in linked conversations. This resembles\n Prompted by the code and “trail indicators”\n \nNoah, the data engineer at a media streaming company:\n\n I copy the part of the error message that seems most relevant. There will be a whole stack trace and a bunch of stuff and usually there is one line that its like, ‘here is what went wrong’. So I’ll copy the generalized portion of that. So it might say error in file x.txt and then some error message. So you copy the generalized portion… and just paste that into Google and see what comes up. Often the first result will be a Stack Overflow question or occasionally a GitHub issue. \n And you can go in and see, alright. Was this person trying to do something roughly similar to what I was doing. Which is a little bit error message dependent. Some error messages apply to a million different situations so you have to further find the one that is more similar to your situation. Other error messages only come up when you’re trying to do that specific thing. But, yeah, that’s the process. Copy-paste-search. \n\nAfter I prompted Noah with Teevan et al. (2004) ’s distinction between “orienteering” and “teleporting” searches (“directed situated navigation” versus “jump[ing] directly to their information target using keyword search”), he said\n\n With the error messages, I think a lot of times there is a hope that it is a teleportation search and a fear that it’s not. I can search this error message and if I’m lucky the first result is going to tell me exactly what I need to know. And if not I might have some orienteering to do. Where it is narrowing in on the problem, narrowing in on what the cause is, figuring out of five people getting the same error message which one is doing something resembling what I’m doing. \n\nWhile the error messages may be generic, the stack trace or some aspect of the message itself or the top search result might still guide the searcher.\nRaha, a senior data engineer at a media entertainment company, in response to seeing the “Googling the Error Message” book cover (a parody of the O’Reilly books), observed that “sometimes they give you a hint that this is a generic error.”\nShawn, a former data engineer who is now developer advocate at an enterprise software company that develops tooling for data engineers, referred to the stack trace as usually providing ‘trail indicators’ even if final error message wasn’t itself particularly useful:\n\n The typical keywords that really resonate in searches are error messages. In particular, it you get some sort of particular string. There’s types of errors that come out. There will be an error message that is a— \n —we’ll go with the most, the least descriptive possible exception that you could think of in Java, in Java land, which is the NullPointerException in Java. \n If I just put [NullPointerException Java] I’m going to basically get searches that take me to how stupid NullPointerException is because it pretty much the thing you run into when you don’t know what is the problem. It is basically when basically you’ve misprogrammed something. It is so undescriptive in the language of Java. It is more of a Java problem, not necessarily a problem that you’re dealing with directly at the cause of your specific issue. You’ve misprogrammed something and you forgot to account for a null and unfortunately the Java language doesn’t account for nulls super well. So like, you’ve come to realize that is not a good thing. You can’t just use this NullPointerException as a way to find the answer to your question. Right? So what you have to do at your next step is, I need to find some other sentence or some other piece on this stack that might… \n So usually you’ll get a stack of different things that have called other things, right. All the way from the root process of whatever started this call on a particular thread. You’ll be able to track and see what called what up until that point. And so usually along the way there are trail indicators of, ‘OK, this is where I was at in this code and this called this piece of this code’. And you can actually look at the source code you know and start trying to understand that. Maybe you don’t even need that. Sometimes when it comes to just, you know,“cheating” \n\nSo that’s typically I would say–and that is not data engineering specific at this point—that’s generic to any developer that has to work with any kind of framework.\nThose frameworks will have certain error messages that are phrased in just the right way that have just the right exception and that is enough.\nShreyan, a data engineer at an enterprise software company, shared this as his initial response to my asking if he could talk a little bit about he uses search:\n\n Whenever you have say an error. You copy the error. You either try to copy pieces of it or the complete error. … copy it and paste it into the web \n\nPatrick, likewise a data engineer at an enterprise software company, said:\n\n if I get an error message I’ve never seen before \n just copy and paste it straight in \n\nArjun, a principal data engineer at an enterprise software company said:\n\n So one technique I always say is copy the first line of the error, of the stack track, and post that in the google. You’ll get a much better understanding then. So that’s an easy way for you to debug. \n\nNisha, the director of Director Of Data Services at an enterprise software company also shared about searching an error:\n\n Sometimes you are stuck with small things that you need to understand… What’s going wrong? Why is something not working? And then you want to quickly look up an error that you’re seeing on Google and you can get more ideas as to what the possible issues could be. \n\nCharles, a data scientist on a data engineering team at large online marketplace:\n\n I think the most common thing, which I know a lot of people do, is I would just copy and paste the error message straight into Google \n\nFinally, also Phillip, another data engineer working in enterprise software:\n\n when we encounter certain errors, especially as the tools that we use, a lot of errors that can come up kinda just copy and paste into Google and kinda justhope \n\nIt isn’t only errors that data engineers search. Noah talked about searching the web to find a subsequent term to then search in internal code searches.\n\n I think it’s kinda a spectrum of how much do you know what you want to do. used internal search to find out how other people might have done the same thing. \n\nRather than searching phrases “strategically signaled” in talking points from politicians or found in propaganda ( Tripodi (2018) ), the data engineers are searching phrases drawn directly from their work material. While they do reflect on their query choices, they do not have to bring considerable knowledge of the mechanisms of the search engines to bear. The code socializes the potential search terms for querying and so scaffolds the search process.\n Immersed in linked conversation\n \nAjit, the staff data engineer at a major retailer, shared about an informal weekly meeting where he and his team talk about their work:\n\n In our team, we do weekly catchups. Like stand up meetings. Those are basically around: What are you doing on a day-to-day basis? So mostly people talk about the work that they are doing \n If they have any questions on that, if they just want to explain, ‘hey, this is the approach that I am taking.’… And then it is just an open forum. So we just go around the table. A person just tells about what they are trying to do. Anyone on the team who has sorta worked in it before. Or, anyone who sorta has even no idea about it, can sorta ask questions. ‘This might be able to help you.’ Or: ‘Can you explain how this thing is going to achieve what we are trying to do here as part of this project?’ \n\nThe data engineers talked about being immersed in the languages, tools, and problems of their work—engaged in varied conversations with colleagues. “Like a lot of times we’ll just share random blog posts or articles for things that we think are interesting.” (Victor)\nPractices designed to coordinate the engineers also provide introductions or additional exposure to the language of their work. Here is Phillip:\n\n In a typical demo session, usually demos are before the work is complete. It is pretty much to do some knowledge sharing. Each person on my team is working on something well. Pretty much I would not know anything about what someone on my team is working on… So these demo sessions are pretty much just to share what the team is up to as a whole. \n\nThese conversations, distinct from direct question-and-answer interactions, are linked to their work and to the larger occupational community. Various participants in these conversations previously worked elsewhere and also learned some of what they converse about through searching. There are conversing in a shared language that has been made searchable. Regularly referred to in these conversations are the topics of their work: the code, the business logics, and the work processes and tooling.\nThese conversations take different forms. Sometimes it is over lunch or informal meeting, and other times it is through Slack, email, of through the more asynchronous sort left in the code or internal wikis or other knowledge management systems.\nThe data engineers often have the exposure to their peers using language for potential use as search queries. While they can look elsewhere for such material, they are not solely responsible, or alone, in identifying terms for their searches. They are regularly, presented with potentially queriable terms through the work talk in their occupational field.\n Search seeds\n \nI use “search seeds” to refer to the keywords or terms presented to the searcher that the searcher in turn uses in a search query.65 I want to be able to refer to the suggestions or opportunities to search. These are the strings of text someone comes to think to send to the web search engine66 as a search term. Or, these are components in the larger environment (spoken words or printed strings of text) that a potential searcher, situated with appropriate resources, may perceive to afford a successful search. This text may be in a code comment, function or method name, the error message, overheard in workplace conversation, or found on the web.\nI’m using ‘seeds’ to draw attention to stages of web search activity that occur before a query is entered into the search box, the germ of an idea to search. While there are always stages before the activity in the search box, sources of a query are often indefinable, much more diffuse and distant than a single seed. A search seed is not an inkling in the mind of the searcher, but a material sign—a spoken or written phrase—of a possible search67 . But much like affordances are situated and relational (Leonardi, 2011; Vertesi, 2019) , so too are search seeds. In that, a search seed may suggest a query to the prepared searcher. A search seed is not the same as the fully grown formulated search query. But the seed may suggests a full query, or some of the terms. Search seeds are not guarantees of search success for the searcher, success will depend on other components of the search system being configured in a way such that the content for the seed is made, the content is indexed, the query is parsed, and the connection is found by the searcher high enough in the search rankings. Seeds are inscriptions that can be mobilized for search (Latour, 1986).\nSearch seeds may or may not be explicitly referred to as things to be searched by the people sharing them or artifacts conveying them. In a piece in Wired (Tripodi, 2019a) , building on her 2018 Data & Society research, Tripodi uses the phrase “strategic keyword signaling” to refer to the practice of distributing soundbites or catchy phrases for audiences to search. I first used ‘seed’ to refer to this activity broadly while describing that article (2019). I propose search seed, and the dissemination of search seeds, to encompass such strategic signalling.68\n\nThere is other work that touches on search seeds. Mike Caulfield, a misinformation researcher at the University of Washington’s Center for an Informed Public, has referred to search suggestions or directives from others that drive searchers to conspiratorial content as the “Google This Ploy” (2019a). Ronald Robertson, a search researcher at the Stanford Internet Observatory, has referred to search suggestions on social media as “search directives” in unpublished work. Seeds may be identified in the search results themselves (as queries are reformulated with reference to found content), the SERP itself (with the “People also ask” and “Related searches” rich-content features on Google or the titles and snippets for results), or in the autocomplete search suggestions when typing a query. The seeds from the autocomplete, like the problematic suggestions identified by Cadwalladr in 2016 (2016a, 2016b).69 Seeds are also shared in conversations about “do[ing] more research”, such as in online groups discussing the vitamin k shot given to newborns, providing [vitamin k shot] as a seed as documented by Renee DiResta, now a misinformation researcher at the Stanford Internet Observatory (2018). President Biden provided an explicit search seed in his tweet telling people to “Google “COVID test near me” to find the nearest site where you can get a test\" (2022). These are all examples of search seeds. (Note that those all discuss where search seeds are present, not where they are absent.)\nThe search terms used matter. Tripodi (2018, 2019a, 2019b, 2022b) , along with Gillespie (2017) , Golebiewski and boyd (2018, 2019), Caulfield (2019a) , and others, have identified the importance of the interactions before the selection of the search query. Tripodi discusses concerns about how the people providing the search seeds and search engines act and what role greater searcher knowledge of the mechanism may have. Gillespie (2017) presents a case study of strategic competition over the results returned by Google for the term “santorum” and the mediating role that the search engine plays in such contests. After the 2003 campaign to redefine the term, to critique homophobic remarks from former politician Rick Santorum, the search results returned for the query [santorum] on the major US search engines are still markedly different from those for [rick santorum]. Golebiewski and boyd introduce “data void” to describe search terms for which there are problematic content due to the the limited amount of total relevant content. These search terms are sometimes targeted by people acting strategically or they may distribute both the search seeds and the content. Caulfield (2019a) presents an example of a search seed for a data void in a “Google This Ploy” with the suggested searches written on beach balls at a rally, discusses the example as a “data void”, and suggests what educators can teach students to do when searching.70\n\nI find the knowledge of the mechanisms of search seeds embedded within the work practices of data engineers. The occupational, professional, and technical components in the work of data engineering around the production and socialization of search queries (the terms or keywords to search, or the search seeds) incorporate and embed, or hold, knowledge of the mechanisms of web search.\n Spaces for evaluation\n \nThere are two key spaces for evaluation in the work practices of the data engineers.\n\n space for running workable code \n space for gathering feedback – inc. meetings, prototypes, testing, code review, CI/CD \n\n Running workable code\n \nThe data engineers do not depend solely on their knowledge of the problem domain and of the mechanisms of web search to evaluate search results. They often will take a portion of code from a web search, or an idea of a possible solution to their problem, and test it quickly on their system.\nHere is Shreyan:\n\n Iteratively figure out if you can actually get something close to what you require. And trying things out, and once you try one thing out, you try another thing out and you try a third thing out. An iterative process of a solution based upon multiple layers of search. \n [ . . . ] If this is in the ballpark of what I want, I would try it out, of course. Or if I don’t try it out. Can I get a more clearer solution from that? Let’s say I search, OK this is the error. ‘SQL code 350-some random shit’. Then that gives you a Stack Exchange page where somebody is talking about something but not exactly the problem. I would try to see, OK, is this the problem I want? Or I would try out the solution. \n So searching is sometimes faster than trying the solution out. So it would dependent upon which one it is. If I can see, oh, this makes sense, let just try. If it won’t take me too long to run the code, so I’ll just run it like this. Otherwise, my habit is to give it a couple more searches to actually figure things out. \n\nThis is seen in how Shawn, the developer advocate, discussed searching for resolutions of bugs or errors:\n\n And you can try it out, run a couple quick tests on it and make sure it actually works. And then you can move on with your day. \n\nRunning workable code, or proofs-of-concept, can also be done as a shorthand test of not just whether the found-answer supports quality code, but of the quality of the whole search experience when searching about a particular tool. That is, the findability of answers can gauged by seeing how difficult it is to get a simple proof-of-concept running in that language or software. Raha discussed searching for technology solutions, in a more strategic exploratory search phase, and how she was attuned to the content and community around the tool. It would be concerning, in this exploratory phase, if it wasn’t quickly apparent how to run a tutorial or whether a particular bug was addressed in the tool:\n\n I think its not the search engine,its just the lack of community at the time \n\nIt is pretty much very easy to do some sort of like POC and test it out and see it’s not working.\nI will present more from Amar regarding proof of concepts and getting feedback from others in the organization in the next subsection, but an initial feedback is whether the code is running: “proof of concepts up and running”. Feedback from a snippet of code running is limited. Shawn:\nWhat context you’re dealing with and with every search you do is only adding to your context of what you know and understand. It is kinda like an experiment every single time. [ . . . ] [ . . . ] That actually gets you the correct output at small scale but whenever you put it into production…. that’s where the rubber hits the road and you realize that your search solution was actually the incorrect solution even though it gave you the green light at a smaller scale.\nGetting some code running can, and in some workplaces is expected to, include immediate test cases. As Vivek noted:\n\n If I copy something from Stack Overflow and link that, a lot of times people ask “what are the test cases that it is passing?”\" They don’t let it go just because it was from Stack Overflow. So you do code review that part. \n\nWhile for Ross, workable meant it wasn’t breaking something (and with some eye on the future, which is addressed further in decoupling performance from search ):\n\n when you use something new I think, it’s expected here at least that you’re going to do enough testing that it works in the way we are going to use it. \n [ . . . ] \n You try to foresee [tech debt and complexity] as you can, but you really you just want to make sure that it wont break something. It works in what we are doing now, that is the testing that you do. With an eye on future use, and then that’s enough. \n\nThis pattern reveals that data engineers rely on the ability to quickly and iteratively test and validate search results or the results-of-search. Their work practices, organizational setting and the technologies of code itself provide distinct means of evaluating search results. These situated resources, rather than data engineer’s individual knowledge of search mechanisms, bolster and inform the internal expertise of the data engineer.\n Tend to gather feedback\n \nAmar discussed feedback around proofs of concepts as an opportunity to address how even senior engineers overlook resources and benefit from feedback.\n\n I think earlier in the quarter my work is mostly about architecting systems, coming up with ideas, coming up with designs, breaking down a complex problem into smaller achievable pieces building proof of concepts to make sure the idea works at a small scale and then coming up with what the actual thing is going to be. And that’s like, that’s a very research heavy phase. Validating ideas and solution. \n\nAmar said they would “propose a solution with a proper list of pros and cons” and “get external feedback”. In his case this sometimes included subject matter experts, so database administrators within the company with decades of experience to check the nuances of a planned use of a particular tool.\nLater in the interview he said:\n\n Again, even experienced engineers can overlook resources, so that’s why you have these things. Where anytime you work on certain things you tend to gather feedback. Say I work on aproof of concept \n\nDevin also talked about feedback earlier in the work cycle:\n\n For those big projects, currently at [our company] is we do a 20% review. 20% of the work has been done. This how my planning process has been going. This is the discovery I’ve done. And this is what I’m planning on the next step which is going to be development. Let’s bring the whole team together of ten-ish engineers and let’s talk about what I’ve done to get this far, let’s talk about the decisions that I’ve made to determine what I’m going to be doing next and let’s have everybody collectively weigh in on my decisions and potentially agree that things are going well and this is the path we are going to go down or iterate on things we should be doing differently. Usually by the time you get to the 20% review you’ve already done the legwork. You’ve already reached out to people specifically to say ‘this is what I’ve been doing, this is how we are going to solve it’ and so usually you’re not going to find many surprises in those meetings. But it is sorta a gut check so that we can all sit down and agree that we don’t go down this path that we are going to regret. \n\nAnd then there are also code reviews, which (earlier in the interview) Devin distinguished from feedback:\n\n I think feedback is more generally like this is what went well, this is what didn’t go well and this is what we can do differently down the road. \n I think code reviews are very specifically more ‘like this has passed the litmus test, let’s go ahead and accept that and move on’. Or ‘this code hasn’t passed the litmus test, let’s correct it.’ Its very specific. \n\nAnd there are also automated tests or checks sometimes built into the code review workflow. So Ross would push code to a fork, “check off that you double checked some things” and then, prior to another engineer reviewing the code, integration, syntax, and styling tests are run. He said, “sometimes you just push it up and see if it passes”.\nOthers also talked about presenting prototypes or minimum viable product (MVPs) for feedback. Phillip talked about feedback from the users (in his case, internal customers who the engineers interact with directly) before the formal code review:\n\n Typically the process is we usually build a prototype, or an MVP, and try to test out the feasibility. If the data is accurate or if it fits the requirements. Then we’ll just re-iterate based on the feedback from customers and stakeholders, which we call user acceptance testing. So it is a lot of re-iteration. And so we finally get to that final result. \n\nThe work practices around acceptance testing, feedback, and code review collectivize or distribute the evaluation of the search results.\n Decoupling performance from search\n \nCurrent data engineering work practices incorporate elements of “decoupling” between provisional evaluations of web search results and key actions, such as deploying code into production. This decoupling is a result of the lack of automation, with the gap71 between written and deployed code ideally providing slack, alternative methods to evaluate, and “buffers and redundancies” that are “designed-in, deliberate” (Perrow, 1984, p. 96).72 This ideally provides time and space for re-evaluation and recovery, if necessary. Data engineers’ work components are configured to support this decoupling by handling exceptions, errors, and other faults by routine. This margin limits the immediate effects that potential issues introduced through web search may have on the products or pipelines built by data engineers. Their systems for mitigating risk include code and processes that envelope deployment and fallback-and-recovery systems.73 The decoupling is inclusive of the above spaces for evaluation, and extends beyond them.\nBut even with seeds and running code and feedback there are still ways that poor quality code found or shaped by a date engineer’s web searches can be added to the organizational code base. Structures in the work practices of data engineers designed to address a variety of concerns can be used to address this as well. The work practices of data engineers are directed to anticipate (effectively if not explicitly) failed search evaluations. Ajit, the staff data engineer at a major retailer, talked about introducing version control to his team:\n\n These are the different changes that happened on this specific piece of code over time to understand why did we make those changes and to also track, hey something happened, say, 1st of October. That’s why version control comes into play. And, oh, we made a code change and that code change sorta messed this up. \n\n\n I knew about GitHub. I knew about the basics, like you could fork someone’s repository. But then like pull requests and submitting stuff for review. Comparing… commenting… challenging people: ‘these five lines of code make no sense.’ Now they are a day-to-day practice on my team because it makes it greatly easy for you to do a lot of things. \n Especially when you are onboarding new team members, you don’t have to worry about this person has built something or changed something which just messed everything up. Now you have version control and you have reviews so all of your core production level stuff is never touched without proper reviews. \n\nWhile his description of the processes include feedback and review just discussed, the ability to identify mishaps in the code is a place where knowledge of the mechanism is externalized and embedded.\nHandling exceptions by routine is also seen in how the core work aim of some of the data engineers was directed towards measuring this dimensions of quality in the code or platform. Charles discussed his work:\n\n The main project I was working on was doing a lot of metrics and data pipelines for this one massive experiment experiment we were running. We were making a ton of changes to the product listing page and testing… \n\nThis is the case for Kari’s work as well. Working with the data scientists in her company and stepping in once they have a model they want to put into production:\n\n My team kinda comes in to figure out: OK, how do we turn this model into an API that is ready for production? How do we integrate that into the business based on the current engineering and product structures that we have setup for that feature? How do we start to scale this and monitor this properly considering the fact that we have client facing traffic now? \n\nAnd also with Victor. He discusses “productionalizing”:\n\n Then we build out that MVP and my team focuses on productionalizing it, making sure it will work without failing, that it is reliable, that we can count on the results, and that we’ve setup the after-the-fact monitoring to make sure it is still up and running and not falling over and it is doing what we said it would do. \n\nThe web search practices are also presented as ways to repair faults or limitations that do make their way into production code. Here is Shawn, again talking about writing the messages in exceptions that engineers will see if that exception is raised:\n\n The more expressive and descriptive you can be when you’re dealing with tests, when you are throwing exceptions, real-time exceptions, especially ones that are at runtime. You know something is going to go wrong real-time. \n You never know where your exceptions are going to be thrown. And you want to assume it is always going to be in some production state. And that there will be something that will help somebody find this information online or quickly just by reading it understand what the hell’s going on and that they need to react in some way shape or form. \n So having that context given to you so clearly, without having sometimes even having to search it. The ideal state for an exception is not having to be searched, but that is rarely– that is something that is almost—you know depending on the expertise and what the person knows, the framework, and the jargon, and all the other stuff— You can’t make, “OK, to understand this exception, let’s start with ‘what is a variable’” [chuckling] You can’t express everything at the starting point for every person that is going to be possibly be running into that error code. You’re always going to be missing some context and that is where search comes in at some point. \n\nAmar also shared about a role for search, after architecting the system plan and getting feedback on prototypes, in the designers of the systems learning how to handle exception by routine:\n\n And towards the other half of the quarter it is mostly about doing things, following best practices and trying to figure out, doing everything by the book, perfecting all aspects of running a production system, that includes: How do you easily deploy things? How do you deploy changes? How do you automate a lot of things? How do you, I guess, plan for failures? \n It’s mostly about, once you have an idea that this will work, how do you make sure this will work 99.9999% of the time? \n So that’s where you’ll spend a lot of time building a system up, but a different side of the system, more on the operation side of things again you need a lot of research in that because there are times where you already have best practices in play but a lot of times things are new, things are something that you haven’t worked with before. Learning how to do certain things, its always something that you have to look it up. \n\n Overall, pretty involved, you need a lot of web search for that. \n\nAs “things are new”, doing things “by the book”, meant, in part, doing your web searches. He highlights the role of search while also presenting the work involved in implementing a system in such a way that exceptions can be handled by routine.\nThe work practices of data engineers are structured or channeled in ways able to avoid or recover from many anticipated and unexpected errors. Together, the socialization of seeds, the feedback running workable code and gathered from various collaborative work practices, structures in the storage and handling of the code and data serve as risk-limiting mechanisms. At least insofar as code quality is concerned, search failures or failures in searching are handled by routine.74\n\nThis capacity to handle such exceptions steps in where knowledge of the mechanism and associated skill in use of it are missing or found wanting.\nThese risk-limiting mechanisms, including elements of friction, decouple effective performance in key actions from search automation bias.\n\nSkitka et al. (2000) , looking at human-machine interactions in aviation, defined automation bias as “the use of automation as a heuristic replacement for vigilant information seeking and processing” [p. 86]. Decoupling limits the automation bias widely found in research on the uses of web search. Some such research focuses on the automaticity in what search results are clicked and attended to. Vaidhyanathan (2011) writes that “our habits (trust, inertia, impatience) keep us from clicking past the first page of search results” [p. 15]. Haider & Sundin (2019) discuss a range of this work, pulling together White (2016) on “position bias” (which he notes is “also referred to as ‘trust’ bias or ‘presentation bias’”) (p. 65); Pan et al. (2007) , Schultheiß et al. (2018) ; and Höchstötter & Lewandowski (2009) , writing (p. 33-34):\n\n line of research investigates what people choose from the search engine results page – often referred to as SERP – and why they choose as they do. This work convincingly shows that how people choose links is primarily based on where these links are located on the search engine results page. \n\n\nNarayanan & De Cremer (2022) review this and other research, writing, “as these various studies show, the average user seems to treat Google with “a default,prima facie trust” [emphasis in Narayanan and de Cremer]\" (p. 21).75 I use the term “search automation bias” to describe this. The harm from such bias depends not only on the credence granted higher-ranked results, but also the subject of the results and whether the results, or simply the page titles and snippets, are “likely to mislead” (Lurie & Mulligan, 2021). The risks of harmful effects from search automation bias are likely higher in other areas of searching, particularly when the automation bias is regarding searches for which the search engine returns problematic results, such as search results reproducing representational harms (Noble, 2018).\nDespite their significant domain knowledge data engineers may at times rely on the ranking of search results “as a heuristic replacement for vigilant information seeking and processing” (Skitka et al., 2000, p. 86). The data engineering web search activity is part of the larger configuration of information seeking and processing of the organization, with configurations of organizational components creating separation, or decoupling, between the web searches and the performance of post-search activity. This decoupling is achieved through occupational, professional, and technical components that include and extend past the provisional evaluation in the spaces discussed above, and through the various steps involved in handling exceptions by routine. The components of interest are not linked to web search in a way that forces any particular action, it is not actually automated. Errors introduced in web searching, the effects of which for data engineers are often externalized into code, configuration files, or data infrastructures can perhaps be repaired in data engineering work in a manner that is distinct from wrong or less useful beliefs that individuals might develop from inadequate evaluation of search results in other situations, such as in a medical emergency, while filing out a ballot, or when making a major purchase.76\n\n Discussion: Missing search knowledge\n \nThe preceding shows the knowledge and practices used to make search work distributed and embedded in the occupational, professional, and technical components of their work practices, as an expert field.77 . In this we can see the searching as extended throughout those more distant practices. It follows that participation in those shared practices may be where data engineers learn the practice of searching as a data engineer and make use of the embedded expertise.\nThe finding to be shown in this section is that the occupational, professional, and technical components supply a significant amount of context, or structure, as scaffolding for query selection and search evaluation. I do not examine here the emergence or evolution of these work practices, sociomaterial practices are constantly reproduced and maintained, and there is a “constitutive entanglement” between people and the material ( Orlikowski (2007) , building on Giddens (1991) ’s work on social reproduction, “repetitive activities” and “regularized social practices across time and space”).\nThe knowledge used to make search work is distributed in the work practices around the production and socialization of search queries (the terms or keywords to search, or the search seeds) and search evaluation (the manner of evaluating and making-use-of search results). This knowledge is importantly distinct from knowledge of the mechanisms of web search. This knowledge is of other ways of validating search results for their purposes, knowledge very situated in the material resources and expertise of this community. The data engineers did not, in interviews, present themselves as having sophisticated knowledge about the mechanisms of web search in their heads. Or other sophisticated knowledge for searching in their heads. But they do make use of such knowledge through their work and practices.\nWe can look at the artifacts and the practices to find the knowledge that seems to be missing (Latour, 1986, 1990, 1992). Existing work identifies knowledge embedded in relationships (Badaracco, 1991; Blackler, 1995) ), distributed throughout social and technical arrangements (Hutchins, 1995) and within “supporting protocols (norms about how and where one uses it[)]” (Gitelman, 2006, p. 5). Knowledge, not directly of the mechanisms but effectively so through referred knowledge of the occupational use of the mechanism, is also embedded in social norms (Feldman & March, 1981) or “genre rules” (Yates & Orlikowski, 1992). Cambrosio et al. (2013) argues that knowledge and know-how “cannot function as”expertise\" unless they become part of a network.\" Expertise isn’t possessed or held by any one searcher, but there is a “a network of expertise composed of other actors, devices and instruments, concepts, and institutional and spatial arrangements, distributed in multiple loci yet assembled into a coherent collective agency.” (Eyal, 2019)\n\n\nLave & Wenger (1991) looked at early work from Hutchins on apprenticeship in shipboard navigation, before publication of Hutchins (1995) , as one of their case studies, writing about the participation available from how the components of the navigation deck were configured [p. 102]:\n\n Apprentice quartermasters not only have access to the physical activities going on around them and to the tools of the trade; they participate in information flows and conversations, in a context in which they can make sense of what they observe and hear. In focusing on the epistemological role of artifacts in the context of the social organization of knowledge, this notion of transparency constitutes, as it were, the cultural organization of access. As such, it does not apply to technology only, but to all forms of access to practice. \n\nKnowledge of how to search the web like a data engineer is provided in the extensions of search in the work of data engineers. These extensions span individuals and organizations. The embedded knowledge is in the wide work of data engineering itself. Rahman et al. (2018) open their paper evaluating developers use of general-purpose web search for retrieving code saying, “Search is an integral part of a software development process.” It is that. But I also turn that around, arguing that that data engineering development processes are integral to the data engineers practice of search. Search and the knowledge for it is extended in the various tools the data engineers use, in the tools they build, and in their relations with each other. For the fully participating data engineer, the occupational, professional, and technical components of their work interact to force, incentivize, and constrain work practices to align with with successful uses of web search.\n\n\n Conclusions: Search extended and knowledge embedded\n \nSeeing search as extended and knowledge for effective search embedded in this way of work, rather than in individuals78 , may reorient calls for education, design, or regulation that are premised on transparency or explainability and web search literacy designed to fill individual knowledge deficits. We could develop habits and practices that do not require peering into the opaque and ever-changing systems of web search. In some settings we may be able to make effective use of search tools without transparency into its data sources and algorithms. We may shift focus to understanding how to mobilize and recognize effective search seeds in different domains. Rather than encouraging every searcher to understand the mechanisms, we could focus on developing and calibrating our ability to evaluate, individually and collectively. It may help us work towards identifying in which contexts the suggestion that someone turn to web search may lead to results-of-search of differing quality. Where and with whom is ‘just google it’ helpful or not? Finally, this framing may be used to guide the identification of aspects of the web search infrastructures, topics (or places)79 , or situations of searching that may be reconfigured for more effective web search practices.\n\n Bibliography\n\n\n\nAnanny, M., & Crawford, K. (2018). Seeing without knowing: Limitations of the transparency ideal and its application to algorithmic accountability.New Media & Society,20 (3), 973–989. https://doi.org/10.1177/1461444816676645 \n\n\n\nBadaracco, J. (1991).The knowledge link: How firms compete through strategic alliances. Harvard Business Press. https://archive.org/details/knowledgelinkhow0000bada \n\n\n\nBailey, D. E., & Leonardi, P. M. (2015).Technology choices: Why occupations differ in their embrace of new technology. MIT Press. http://www.jstor.org/stable/j.ctt17kk9d4 \n\n\n\nBhatt, I., & MacKenzie, A. (2019). Just google it! Digital literacy and the epistemology of ignorance.Teaching in Higher Education,24 (3), 302–317. https://doi.org/10.1080/13562517.2018.1547276 \n\n\n\nBiden, J. (2022).I know covid testing remains frustrating, but we are making improvements. https://twitter.com/POTUS/status/1478761964327297026 .\n\n\nBilić, P. (2016). Search algorithms, hidden labour and information control.Big Data & Society,3 (1), 205395171665215. https://doi.org/10.1177/2053951716652159 \n\n\n\nBlackler, F. (1995). Knowledge, knowledge work and organizations: An overview and interpretation.Organization Studies,16 (6), 1021–1046. https://doi.org/10.1177/017084069501600605 \n\n\n\nboyd, danah. (2018). You think you want media literacy… do you? InMedium. https://points.datasociety.net/you-think-you-want-media-literacy-do-you-7cad6af18ec2 \n\n\n\nBrandt, J., Guo, P. J., Lewenstein, J., Dontcheva, M., & Klemmer, S. R. (2009). Two studies of opportunistic programming: Interleaving web foraging, learning, and writing code.Proceedings of the Sigchi Conference on Human Factors in Computing Systems, 1589–1598. https://doi.org/10.1145/1518701.1518944 \n\n\n\nBurrell, J. (2016). How the machine “thinks”: Understanding opacity in machine learning algorithms.Big Data & Society,3 (1), 2053951715622512. https://doi.org/10.1177/2053951715622512 \n\n\n\nCadwalladr, C. (2016a). Google, democracy and the truth about internet search.The Guardian,4 (12). https://www.theguardian.com/technology/2016/dec/04/google-democracy-truth-internet-search-facebook \n\n\n\nCadwalladr, C. (2016b). Google is not “just” a platform. It frames, shapes and distorts how we see the world.The Guardian,11 (12). https://www.theguardian.com/commentisfree/2016/dec/11/google-frames-shapes-and-distorts-how-we-see-world \n\n\n\nCambrosio, A., Limoges, C., & Hoffman, E. (2013). Expertise as a network: A case study of the controversies over the environmental release of genetically engineered organisms. In N. Stehr & R. V. Ericson (Eds.),The culture and power of knowledge (pp. 341–362). De Gruyter. https://doi.org/doi:10.1515/9783110847765.341 \n\n\n\nCaplan, R., & Bauer, A. J. (2022).How would one write/call the period immediately after everyone-started-caring-all-at-once-about-disinfo era? [Conversation]. https://twitter.com/robyncaplan/status/1522643551527579648 .\n\n\nCaulfield, M. (2019a).Data voids and the google this ploy: Kalergi plan. https://hapgood.us/2019/04/12/data-voids-and-the-google-this-ploy-kalergi-plan/ .\n\n\nChen, M., Fischer, F., Meng, N., Wang, X., & Grossklags, J. (2019). How reliable is the crowdsourced knowledge of security implementation?2019 Ieee/Acm 41st International Conference on Software Engineering (Icse), 536–547. https://doi.org/10.1109/ICSE.2019.00065 \n\n\n\nChen, X., Ye, Z., Xie, X., Liu, Y., Gao, X., Su, W., Zhu, S., Sun, Y., Zhang, M., & Ma, S. (2022). Web search via an efficient and effective brain-machine interface.Proceedings of the Fifteenth Acm International Conference on Web Search and Data Mining, 1569–1572. https://doi.org/10.1145/3488560.3502185 \n\n\n\nChristin, A. (2017). Algorithms in practice: Comparing web journalism and criminal justice.Big Data & Society,4 (2), 1–12. https://doi.org/10.1177/2053951717718855 \n\n\n\nCollins, H. M., & Evans, R. (2007).Rethinking expertise. University of Chicago Press. https://press.uchicago.edu/ucp/books/book/chicago/R/bo5485769.html \n\n\n\nCommission, F. T. (2013).Sample letter to general purpose search engines. https://www.ftc.gov/sites/default/files/attachments/press-releases/ftc-consumer-protection-staff-updates-agencys-guidance-search-engine-industryon-need-distinguish/130625searchenginegeneralletter.pdf .\n\n\nCotter, K. (2021). “Shadowbanning is not a thing”: Black box gaslighting and the power to independently know and credibly critique algorithms.Information, Communication & Society,0 (0), 1–18. https://doi.org/10.1080/1369118X.2021.1994624 \n\n\n\nCotter, K. (2022). Practical knowledge of algorithms: The case of BreadTube.New Media & Society, 1–20. https://doi.org/10.1177/14614448221081802 \n\n\n\nDaly, A., & Scardamaglia, A. (2017). Profiling the australian google consumer: Implications of search engine practices for consumer law and policy.J Consum Policy,40 (3), 299–320. https://doi.org/10.1007/s10603-017-9349-9 \n\n\n\nDijck, J. van. (2010). Search engines and the production of academic knowledge.International Journal of Cultural Studies,13 (6), 574–592. https://doi.org/10.1177/1367877910376582 \n\n\n\nDiResta, R. (2018).The complexity of simply searching for medical advice. https://www.wired.com/story/the-complexity-of-simply-searching-for-medical-advice/ \n\n\n\nEyal, G. (2019).The crisis of expertise. Polity Press. https://www.wiley.com/en-us/The+Crisis+of+Expertise-p-9780745665771 \n\n\n\nFeldman, M. S., & March, J. G. (1981). Information in organizations as signal and symbol.Administrative Science Quarterly,26 (2), 171–186. http://www.jstor.org/stable/2392467 \n\n\n\nFirouzi, E., Sami, A., Khomh, F., & Uddin, G. (2020). On the use of c# unsafe code context: An empirical study of stack overflow.Proceedings of the 14th Acm / Ieee International Symposium on Empirical Software Engineering and Measurement (Esem). https://doi.org/10.1145/3382494.3422165 \n\n\n\nFischer, F., Böttinger, K., Xiao, H., Stransky, C., Acar, Y., Backes, M., & Fahl, S. (2017). Stack overflow considered harmful? The impact of copy&paste on android application security.2017 Ieee Symposium on Security and Privacy (Sp), 121–136.\n\n\nFourcade, M. (2010).Economists and societies. Princeton.\n\n\nGiddens, A. (1991).The consequences of modernity. Polity Press in association with Basil Blackwell, Oxford, UK.\n\n\nGillespie, T. (2014).The relevance of algorithms (T. Gillespie, P. J. Boczkowski, & K. A. Foot, Eds.; pp. 167–193). The MIT Press. https://doi.org/10.7551/mitpress%2F9780262525374.003.0009 \n\n\n\nGillespie, T. (2017). Algorithmically recognizable: Santorum’s google problem, and google’s santorum problem.Information, Communication & Society,20 (1), 63–80. https://doi.org/10.1080/1369118X.2016.1199721 \n\n\n\nGitelman, L. (2006).Always already new: Media, history, and the data of culture. MIT Press. https://direct.mit.edu/books/book/4377/Always-Already-NewMedia-History-and-the-Data-of \n\n\n\nGolebiewski, M., & boyd, danah. (2018). Data voids: Where missing data can easily be exploited.Data & Society. https://datasociety.net/library/data-voids-where-missing-data-can-easily-be-exploited/ \n\n\n\nGoogle. (2022).Searchqualityevaluatorguidelines.pdf. https://static.googleusercontent.com/media/guidelines.raterhub.com/en//searchqualityevaluatorguidelines.pdf .\n\n\nGriffin, D. (2019).When searching we sometimes use keywords that direct us... \nhttps://twitter.com/danielsgriffin/status/1183785841732120576 .\n\n\nGriffin, D., & Lurie, E. (2022). Search quality complaints and imaginary repair: Control in articulations of google search.New Media & Society,0 (0), 14614448221136505. https://doi.org/10.1177/14614448221136505 \n\n\n\nGunn, H. K., & Lynch, M. P. (2018). Googling. InThe routledge handbook of applied epistemology (pp. 41–53). Routledge. https://doi.org/10.4324/9781315679099-4 \n\n\n\nHaider, J., & Sundin, O. (2019).Invisible search and online search engines: The ubiquity of search in everyday life. Routledge. https://doi.org/https://doi.org/10.4324/9780429448546 \n\n\n\nHouse of Lords, Select Committee on Democracy and Digital Technologies. (2020).Corrected oral evidence: Democracy and digital technologies. https://committees.parliament.uk/oralevidence/360/html/ .\n\n\nHöchstötter, N., & Lewandowski, D. (2009). What users see – structures in search engine results pages.Information Sciences,179 (12), 1796–1812. https://doi.org/10.1016/j.ins.2009.01.028 \n\n\n\nHutchins, E. (1995).Cognition in the wild. MIT Press.\n\n\nIntrona, L. D., & Nissenbaum, H. (2000). Shaping the web: Why the politics of search engines matters.The Information Society,16 (3), 169–185. https://doi.org/10.1080/01972240050133634 \n\n\n\nJack, C. (2017). Lexicon of lies: Terms for problematic information.Data & Society,3, 22. https://datasociety.net/output/lexicon-of-lies/ \n\n\n\nKarapapa, S., & Borghi, M. (2015). Search engine liability for autocomplete suggestions: Personality, privacy and the power of the algorithm.Int J Law Info Tech,23 (3), 261–289. https://doi.org/10.1093/ijlit/eav009 \n\n\n\nKluttz, D. N., & Mulligan, D. K. (2019).Automated decision support technologies and the legal profession. https://doi.org/10.15779/Z38154DP7K \n\n\n\nKutz, J. (2022).Our search liaison on 25 years of keeping up with search. https://blog.google/products/search/danny-25-years-of-search/ ; Google.\n\n\nLatour, B. (1986). Visualization and cognition.Knowledge and Society,6 (6), 1–40.\n\n\nLatour, B. (1990). Drawing things together. In M. Lynch & S. Woolgar (Eds.),Representation in scientific practice. MIT Press.\n\n\nLatour, B. (1992). Where are the missing masses? The sociology of a few mundane artifacts. In W. E. Bijker & J. Law (Eds.),Shaping technology/building society: Studies in sociotechnical change (pp. 225–228). MIT Press.\n\n\nLave, J., & Wenger, E. (1991).Situated learning: Legitimate peripheral participation. Cambridge university press. https://www.cambridge.org/highereducation/books/situated-learning/6915ABD21C8E4619F750A4D4ACA616CD#overview \n\n\n\nLeonardi, P. M. (2011). When flexible routines meet flexible technologies: Affordance, constraint, and the imbrication of human and material agencies.MIS Quarterly,35 (1), 147–167. http://www.jstor.org/stable/23043493 \n\n\n\nLurie, E., & Mulligan, D. K. (2021).Searching for representation: A sociotechnical audit of googling for members of U.S. Congress (Working Paper). https://emmalurie.github.io/docs/preprint-searching.pdf \n\n\n\nMart, S. N. (2017). The algorithm as a human artifact: Implications for legal [re] search.Law Libr. J.,109, 387. https://scholar.law.colorado.edu/articles/755/ \n\n\n\nMcChesney, R. W. (1997).Corporate media and the threat to democracy. Seven Stories Press.\n\n\nMeisner, C., Duffy, B. E., & Ziewitz, M. (2022). The labor of search engine evaluation: Making algorithms more human or humans more algorithmic?New Media & Society,0 (0), 14614448211063860. https://doi.org/10.1177/14614448211063860 \n\n\n\nMetaxa-Kakavouli, D., & Torres-Echeverry. (2017).Google’s role in spreading fake news and misinformation. Stanford University Law & Policy Lab. https://www-cdn.law.stanford.edu/wp-content/uploads/2017/10/Fake-News-Misinformation-FINAL-PDF.pdf \n\n\n\nMeyer, J. W., & Rowan, B. (1977). Institutionalized organizations: Formal structure as myth and ceremony.American Journal of Sociology,83 (2), 340–363.\n\n\nMeyer, J. W., & Rowan, B. (1978). The structure of educational organizations. In M. W. Meyer & Associates (Eds.),Organizations and environments (pp. 78–109). Jossey Bass.\n\n\nMiller, B., & Record, I. (2013). JUSTIFIED belief in a digital age: ON the epistemic implications of secret internet technologies.Episteme,10 (2), 117–134. https://doi.org/10.1017/epi.2013.11 \n\n\n\nMustafaraj, E., Lurie, E., & Devine, C. (2020). The case for voter-centered audits of search engines during political elections.FAT* ’20.\n\n\nNagaraj, A. (2021). Information seeding and knowledge production in online communities: Evidence from openstreetmap.Management Science,67 (8), 4908–4934. https://doi.org/10.1287/mnsc.2020.3764 \n\n\n\nNarayanan, D., & De Cremer, D. (2022). “Google told me so!” On the bent testimony of search engine algorithms.Philos. Technol.,35 (2), E4512. https://doi.org/10.1007/s13347-022-00521-7 \n\n\n\nNoble, S. U. (2018).Algorithms of oppression how search engines reinforce racism. New York University Press. https://nyupress.org/9781479837243/algorithms-of-oppression/ \n\n\n\nOfcom. (2022).Children and parents: Media use and attitudes report 2022. https://www.ofcom.org.uk/__data/assets/pdf_file/0024/234609/childrens-media-use-and-attitudes-report-2022.pdf .\n\n\nOrlikowski, W. J. (2007). Sociomaterial practices: Exploring technology at work.Organization Studies,28 (9), 1435–1448. https://doi.org/10.1177/0170840607081138 \n\n\n\nPan, B., Hembrooke, H., Joachims, T., Lorigo, L., Gay, G., & Granka, L. (2007). In google we trust: Users’ decisions on rank, position, and relevance.Journal of Computer-Mediated Communication,12 (3), 801–823. https://doi.org/10.1111/j.1083-6101.2007.00351.x \n\n\n\nPasquale, F. (2015).The black box society. Harvard University Press.\n\n\nPerrow, C. (1984).Normal accidents: Living with high-risk technologies. Basic Books.\n\n\nPlato. (2002).Plato: Five dialogues: Euthyphro, Apology, Crito, Meno, Phaedo (J. M. Cooper, Ed.; G. M. A. Grube, Trans.; 2nd ed.). Hackett.\n\n\nRaboy, M. (1998). Global communication policy and human rights. InA communications cornucopia: Markle foundation essays on information policy (pp. 218–242). Brookings Institution Press.\n\n\nRahman, M. M., Barson, J., Paul, S., Kayani, J., Lois, F. A., Quezada, S. F., Parnin, C., Stolee, K. T., & Ray, B. (2018). Evaluating how developers use general-purpose web-search for code retrieval.Proceedings of the 15th International Conference on Mining Software Repositories, 465–475. https://doi.org/10.1145/3196398.3196425 \n\n\n\nRieder, B., & Hofmann, J. (2020). Towards platform observability.Internet Policy Review,9 (4), 1–28. https://doi.org/https://doi.org/10.14763/2020.4.1535 \n\n\n\nRussell, D. M. (2019).The joy of search: A google insider’s guide to going beyond the basics. The MIT Press.\n\n\nSchultheiß, S., Sünkler, S., & Lewandowski, D. (2018). We still trust google, but less than 10 years ago: An eye-tracking study.Information Research,23 (3). http://informationr.net/ir/23-3/paper799.html \n\n\n\nSeaver, N. (2019). Knowing algorithms.Digital STS, 412–422.\n\n\nSkitka, L. J., Mosier, K. L., Burdick, M., & Rosenblatt, B. (2000). Automation bias and errors: Are crews better than individuals?The International Journal of Aviation Psychology,10, 85–97.\n\n\nSundin, O. (2020). Where is search in information literacy? A theoretical note on infrastructure and community of practice. InSustainable digital communities (pp. 373–379). Springer International Publishing. https://doi.org/10.1007/978-3-030-43687-2_29 \n\n\n\nTeevan, J., Alvarado, C., Ackerman, M. S., & Karger, D. R. (2004). The perfect search engine is not enough: A study of orienteering behavior in directed search.Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, 415–422.\n\n\nThe MIT Press. (2020).Author talk: The Joy of Search by Daniel M. Russell. https://mitpress.mit.edu/blog/author-talk-the-joy-of-search-by-daniel-m-russell/ .\n\n\nTripodi, F. (2018). Searching for alternative facts: Analyzing scriptural inference in conservative news practices.Data & Society. https://datasociety.net/output/searching-for-alternative-facts/ \n\n\n\nTripodi, F. (2019a). Devin nunes and the power of keyword signaling. InWired. https://www.wired.com/story/devin-nunes-and-the-dark-power-of-keyword-signaling/ .\n\n\nTripodi, F. (2019b).SenateHearing + written testimony. https://www.judiciary.senate.gov/imo/media/doc/Tripodi%20Testimony.pdf ; Senate Judiciary Committee Subcommittee On The Constitution.\n\n\nTripodi, F. (2022a).Step five: Set the traps - misinformation that fails to conform to dominant search engine rules is functionally invisible. https://twitter.com/ftripodi/status/1520078674417967105 .\n\n\nTripodi, F. (2022b).The propagandists’ playbook: How conservative elites manipulate search and threaten democracy (Hardcover, p. 288). Yale University Press. https://yalebooks.yale.edu/book/9780300248944/the-propagandists-playbook/ \n\n\n\nVaidhyanathan, S. (2011).The googlization of everything:(And why we should worry). Univ of California Press. https://doi.org/10.1525/9780520948693 \n\n\n\nVertesi, J. (2019). From affordances to accomplishments: PowerPoint and excel at NASA. IndigitalSTS (pp. 369–392). Princeton University Press. https://doi.org/10.1515/9780691190600-026 \n\n\n\nWarshaw, J., Taft, N., & Woodruff, A. (2016). Intuitions, analytics, and killing ants: Inference literacy of high school-educated adults in the US.Twelfth Symposium on Usable Privacy and Security (SOUPS 2016), 271–285. https://www.usenix.org/conference/soups2016/technical-sessions/presentation/warshaw \n\n\n\nWhite, R. W. (2016).Interactions with search systems. Cambridge University Press. https://doi.org/10.1017/CBO9781139525305 \n\n\n\nWidder, D. G., Nafus, D., Dabbish, L., & Herbsleb, J. D. (2022, June). Limits and possibilities for “ethical AI” in open source: A study of deepfakes.Proceedings of the 2022 ACM Conference on Fairness, Accountability, and Transparency. https://davidwidder.me/files/widder-ossdeepfakes-facct22.pdf \n\n\n\nWineburg, S. (2021).\"Problem 2: Typing “the claim into a search engine” will\". https://twitter.com/samwineburg/status/1465542166764081157 .\n\n\nYates, J., & Orlikowski, W. J. (1992). Genres of organizational communication: A structurational approach to studying communication and media.The Academy of Management Review,17 (2), 299–326. http://www.jstor.org/stable/258774 \n\n\n\n\n\n\n\n The functions of the Google Search Liaison is examined in Griffin & Lurie (2022) . ↩︎ \n\n\n\n This quote is also in speculating on how junior engineers learned to search \n ↩︎ \n\n\n\n The next section will address this more fully, but the language of ‘mechanisms’ is drawn from Introna & Nissenbaum (2000) & Tripodi (2018) . By the end of this chapter I will discuss ‘mechanisms’ expansively, but at the start I’ll use it in a largely technical sense, as a placeholder for the subject of various transparency and literacy concerns. ↩︎ \n\n\n\n\n Plato (2002) \n ↩︎ \n\n\n\n Compare arguments about the governance benefit from transparency or observability (Ananny & Crawford, 2018; Rieder & Hofmann, 2020) , and the limits of transparency (Ananny & Crawford, 2018; Burrell, 2016) . ↩︎ \n\n\n\n Here is the containing text for the quoted material, from Introna & Nissenbaum (2000, p. 177) : \n\n Given the vastness of the Web, the close guarding of algorithms, and the abstruseness of the technology to most users, it should come as no surprise that seekers are unfamiliar, even unaware, of the systematic mechanisms that drive search engines. Such awareness, we believe, would make a difference. \n\n↩︎ \n\n\n Additional policies (2000) suggested considering were “public support for developing more egalitarian and inclusive search mechanisms and for research into search and meta-search technologies that would increase transparency and access”, noting that the market, even with disclosure requirements, was not sufficient on its own. They also called for search technology design and research that was directed by “an explicit commitment to values” [p. 182]. ↩︎ \n\n\n\n Noble does not present transparency as a solution for the search problems she details (except insofar as algorithmic literacy informs the development of alternative search engines), saying instead (p. 179): \n\n What is needed is a decoupling of advertising and commercial interests from the ability to access high-quality information on the Internet[.] \n\n↩︎ \n\n\n While Tripodi weaves those observations into her broader analysis, her contribution is centered on the activities of propagandists and how they leverage cultural frames to manipulate searchers and media. The final sentences of her book are “By exposing the schemes behind the propaganda, my hope is that coders and information seekers alike will see the light. For we all need to advocate for greater transparency and verification in the sources we use to learn about our culture, our political candidates, and our world.” (p. 215) ↩︎ \n\n\n\n Such over-reliance on the ranking of results by search engines may be analyzed as a form of “automation bias”: “the use of automation as a heuristic replacement for vigilant information seeking and processing” (Skitka et al., 2000, p. 86) . This is addressed in a few sections in Decoupling performance from search . ↩︎ \n\n\n\n Contra the Fischer et al. (2017) findings, in their lab study Brandt et al. (2009) wrote: “Participants typically trusted code found on the Web, and indeed, it was typically correct.” The correctness of the code, though, was limited to it being workable—it would run. Brandt et al. (2009) made no mention of testing the code for security, reliability, scalability of other factors of code quality. ↩︎ \n\n\n\n “Seed” in some web search research is used to refer to the terms used by the researchers as they collect the suggested or alternative queries provided by the search engine (Mustafaraj et al., 2020) . Seed in that case is used more akin to seeding the algorithm perhaps as one provides a seed for a random number generator. ↩︎ \n\n\n\n These strings of text are often sent to the web search engine through a search bar, but they can also be sent directly, on many web search engines, through the URL. Some of my interviewees did mention using links to directly go to the search results page for a particular query. ↩︎ \n\n\n\n While search engines are designed around digitized text, there are other modalities available for search, all materially bound. Voice-based search transformed audio into text. Some people may recognize digital images as search seeds, with reverse image search. Some search engines and other search tools also support searching from a photograph. There is also some support for searching with music or even humming. Chen et al. (2022) demonstrate search queries from electroencephalogram (EEG) signals. As web search expands in these directions it may be necessary pursue new approaches to showing which pictures, sounds, smells, or thoughts might effectively link questions and answers. ↩︎ \n\n\n\n It has also been used by Sam Wineburg, an education professor at Stanford, in a 2021 tweet referencing Tripodi’s 2019 Wired article: “Typing “the claim into a search engine” will often lead you to exactly where the rouges want you to go. Bad actors “seed” the words they want you to search for & then populate the Web with content supporting their view\" (Wineburg, 2021) . Tripodi, rather, has used “seed” in a tweet to refer to the seeding of content: “Propagandists seed the internet with problematic content and manipulate Search Engine Optimization to ensure their content dominates top returns” (Tripodi, 2022a) In her book she sources “seeding” to digital marketing, writing (Tripodi, 2022b, pp. 127–128) : \n\n prominent personalities within the right-wing information ecosystem understand the media technology du jour, and use that medium to cross-promote their ideas and serve as guests on one another’s shows. Conservative thought leaders also signal-boost specific keywords and phrases in their ideological dialect to ensure that their message dominates users’ search results. Digital marketers call this process “seeding”—distributing content across the web to increase brand awareness and turn viewers into customers. \n\n She uses a variation of the term (seed, seeded, or seeding) six additional times, each time in reference to content being seeded (p. 134, 140, 180, 183, 207, and 215). \n This “content seeding” related to the “information seeding” done to encourage the development of online communities (Nagaraj, 2021) . ↩︎ \n\n\n\n See Karapapa & Borghi (2015) for a discussion of search engine liability (in Europe) for search autocomplete suggestions. ↩︎ \n\n\n\n Caulfield does not suggest educators teach students the mechanisms of search engines, but to do three things which he expands on: 1. Choose your search terms well (“First, let students know that all search terms should be carefully chosen, and ideally formed using terms associated with the quality and objectivity of the information you want back.”). 2. Search for yourself (“There’s nothing more ridiculous than a person talking about thinking for themselves while searching on terms they were told to search on by random white supremacists or flat-earthers on the internet.” He also suggests that educators tell students to “avoid auto-complete in searches unless it truly is what you were just about to type”.) 3. Anticipate what sorts of sources might be in a good search — and notice if they don’t show up (“Before going down the search result rabbit hole, ask yourself what sort of sources would be the most authoritative to you on those issues and look to see if those sorts of pages show up in the results.”) ↩︎ \n\n\n\n While I rely on the term “decoupling”, it is related to the “wide gaps” between different technologies discussed in Bailey & Leonardi (2015) . While they found efforts to automate across gaps between technologies in hardware engineering, they did not find that in structural engineers. Instead they argue (p. 123): \n\n Because senior engineers in particular viewed the navigation of wide gaps as beneficial for the cultivation of testing acumen and prudent in the face of liability concerns and government regulations, there was little impetus to hasten automation by limiting the number of technologies that lined each gap in structural engineering \n\n↩︎ \n\n\n Though I am drawing on similar imagery and so their use is somewhat related, my sense of decoupling is distinct from the “decoupling” in Meyer & Rowan (1977) (which is actually much more related to the absence of technocratization of web search, discussed in Owning searching ). My use is also related to the discussion of tight and loose coupling in Perrow (1984) , although not directly drawn from that and describes instead a situation at the point of deployment where the data engineering organization can draw on tendencies of both tight and loose coupling. Perrow does cite to Meyer & Rowan (1978) (a later piece), building on their description of loose coupling. See also decoupling in Christin (2017) , drawing on Meyer & Rowan (1977) . ↩︎ \n\n\n\n See also the discussion above regarding liability pressures in Admitting searching : Searching for opportunities . ↩︎ \n\n\n\n There are other effects from search failures or failures in searching that are not handled within these structures. There are related to interpersonal relations, status, and the associated affective experiences of search and search failures (to be discussed in subsequent chapters). ↩︎ \n\n\n\n The internal citation is to Gunn & Lynch (2018) , who, perhaps more accurately, write of “most people” rather than “the average user” and use the word “googling” rather than “Google”: “most people treat googling with default, prima facie trust” [p. 42]. ↩︎ \n\n\n\n Google’s Search Quality Evaluator Guidelines for instance, notes that some search topics have “a high risk of harm because content about these topics could significantly impact the health, financial stability, or safety of people, or the welfare or well-being of society” and that pages on such topics “require the most scrutiny for Page Quality rating” (Google, 2022) . They refer to these topics as “Your Money or Your Life” topics, using also the acronym YMYL. For more on the guidelines and Google’s contractor evaluators, see Bilić (2016) and Meisner et al. (2022) , respectively. ↩︎ \n\n\n\n\n Christin (2017) uses the phrases “expert fields” to describe “configurations of actors and institutions sharing a belief in the legitimacy of specific forms of knowledge as a basis for intervention in public affairs”, building on Collins & Evans (2007) & Fourcade (2010) . See also Kluttz & Mulligan (2019, pp. 860–861Fn29) . ↩︎ \n\n\n\n Though the individuals do have considerable domain expertise—knowledge of terms to search, of the qualities of the various resources on their topics of work, and of how to navigate the wide work practices of fellow data engineers so as to maintain such knowledge. Individuals may take, or translate, their knowledge of their way of work to other places of work with similar arrangements. But their knowledge is not directly about searching the web. They may not so effectively search about some topics if they do not have knowledge (or access to communities to learn it) of how that topic area structures its knowledge of web search (here, how search queries are seeded and search results evaluated) or in places where such seeds and evaluation are not embedded in the way of work. ↩︎ \n\n\n\n From the Greek, topos for a place. ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/extending_searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-false-premise", "type": "pages" , "date": "", "title": "false premise tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"false premise\" tag.\n \n\n\n{% assign tag_name = \"false premise\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"false premise\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"false premise\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/false-premise/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-feedback-interface", "type": "pages" , "date": "", "title": "feedback interface tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"feedback interface\" tag.\n \n\n\n{% assign tag_name = \"feedback interface\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"feedback interface\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"feedback interface\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/feedback-interface/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "feedback", "type": "pages" , "date": "2023-06-17", "title": "Feedback" , "tags": "", "content": "\n\nThis page introduces feedback paths.\n\n\n\n\nI'm very intrigued with how the makers of search tools solicit, facilitate, and respond to concerns from searchers (and other users and stakeholders). (For more on that topic, see my 2022 paper with Emma Lurie: [Search quality complaints and imaginary repair: Control in articulations of Google Search](https://journals.sagepub.com/doi/10.1177/14614448221136505) [[griffin2022search](../shortcuts/griffin2022search)]).)\n\n\n## email\n\nPlease click here to send me feedback on the content and performance of this website via email.\n\n## repository on GitHub\n\nYou can submit public issues at [github.com/danielsgriffin/.com/issues](https://github.com/danielsgriffin/.com/issues). (This is a public repo setup expressly for this purpose.)\n\n## canny.io\n\nYou can submit public concerns at [danielsgriffin.canny.io](https://danielsgriffin.canny.io/).\n\n\n\nI'm trying canny.io out after noticing the \"Send feedback\" links on You.com send the searcher to [yousearch.canny.io](https://yousearch.canny.io/).\n", "snippet": "\n", "url": "/feedback/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-feminist-intervention", "type": "pages" , "date": "", "title": "feminist intervention tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"feminist intervention\" tag.\n \n\n\n{% assign tag_name = \"feminist intervention\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"feminist intervention\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"feminist intervention\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/feminist-intervention/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-fetch-indexes-js", "type": "pages" , "date": "", "title": "search/fetch_indexes.js" , "tags": "", "content": "// fetch_indexes.js\n// document.addEventListener(\"DOMContentLoaded\", function () {\nfunction fetchIndexes() {\n var siteUrl = \"{{ site.url }}\";\n\n const fetchLunrIndex = fetch(siteUrl + '/assets/lunr_index.json')\n .then(response => {\n if (!response.ok) {\n throw new Error(\"HTTP error \" + response.status);\n }\n return response.json();\n })\n .then(data => {\n const idx = lunr.Index.load(data);\n window.idx = idx;\n });\n\n const fetchItemsIndex = fetch(siteUrl + '/assets/item_index.json')\n .then(response => {\n if (!response.ok) {\n throw new Error(\"HTTP error \" + response.status);\n }\n return response.json();\n })\n .then(data => {\n const transformedItemsIndex = {};\n data.forEach(item => {\n transformedItemsIndex[item.id] = item;\n });\n window.itemsIndex = transformedItemsIndex;\n });\n\n return Promise.all([fetchLunrIndex, fetchItemsIndex]);\n}\n", "snippet": "\n", "url": "/js/search/fetch_indexes.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-findability", "type": "pages" , "date": "", "title": "findability tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"findability\" tag.\n \n\n\n{% assign tag_name = \"findability\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"findability\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"findability\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/findability/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-fine-turning", "type": "pages" , "date": "", "title": "fine-turning tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"fine-turning\" tag.\n \n\n\n{% assign tag_name = \"fine-turning\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"fine-turning\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"fine-turning\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/fine-turning/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "subscription-form", "type": "pages" , "date": "2024-01-30", "title": "Subscribe to significant updates" , "tags": "", "content": "\n\n\n\n\n\n\n\n\nOpt-in list\n\n\n\n\n\n\n", "snippet": "\n", "url": "/subscription/form", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-found-queries", "type": "pages" , "date": "", "title": "found-queries tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"found-queries\" tag.\n \n\n\n{% assign tag_name = \"found-queries\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"found-queries\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"found-queries\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/found-queries/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-frameworks", "type": "pages" , "date": "", "title": "frameworks tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"frameworks\" tag.\n \n\n\n{% assign tag_name = \"frameworks\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"frameworks\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"frameworks\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/frameworks/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-fresh-search", "type": "pages" , "date": "", "title": "fresh-search tag" , "tags": "", "content": "{% assign tag_name = \"fresh-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"fresh-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"fresh-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/fresh-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-full-questions", "type": "pages" , "date": "", "title": "full questions tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"full questions\" tag.\n \n\n\n{% assign tag_name = \"full questions\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"full questions\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"full questions\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/full-questions/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-general-purpose-web-search", "type": "pages" , "date": "", "title": "general-purpose-web-search tag" , "tags": "", "content": "{% assign tag_name = \"general-purpose-web-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"general-purpose-web-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"general-purpose-web-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/general-purpose-web-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-general-search-services", "type": "pages" , "date": "", "title": "general-search-services tag" , "tags": "", "content": "{% assign tag_name = \"general-search-services\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"general-search-services\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"general-search-services\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/general-search-services/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-generative-search-api", "type": "pages" , "date": "", "title": "generative-search-API tag" , "tags": "", "content": "{% assign tag_name = \"generative-search-API\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"generative-search-API\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"generative-search-API\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/generative-search-api/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-generative-search-apis", "type": "pages" , "date": "", "title": "generative-search-APIs tag" , "tags": "", "content": "{% assign tag_name = \"generative-search-APIs\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"generative-search-APIs\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"generative-search-APIs\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/generative-search-apis/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-generative-search", "type": "pages" , "date": "", "title": "generative search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"generative search\" tag.\n \n\n\n{% assign tag_name = \"generative search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"generative search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"generative search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/generative-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-germane", "type": "pages" , "date": "", "title": "germane tag" , "tags": "", "content": "{% assign tag_name = \"germane\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"germane\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"germane\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/germane/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "glossary", "type": "pages" , "date": "2023-08-03 09:37:02 -0700", "title": "Glossary" , "tags": "", "content": "## wc?\n\nThis indicates I am unsure about a choice of words, the word choice. It is related to [the `wc` proofreading mark (Wikipedia link)](https://en.wikipedia.org/wiki/List_of_proofreader%27s_marks) (though adds a question mark).\n\n## TK\n\nThis indicates something that I am planning to add, something \"to come\".\n\nSee: [Wikipedia: To come (publishing)](https://en.wikipedia.org/wiki/To_come_(publishing))", "snippet": "\n", "url": "/glossary/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "shortcuts-goldenfein2022platforming", "type": "shortcuts" , "date": "2022-10-27", "title": "Google Scholar – Platforming the scholarly economy" , "tags": "[refusal]", "content": "\n\n## citation\n\n[Goldenfein, J.](https://twitter.com/jakusg) & **Griffin, D.** (2022). [Google Scholar – Platforming the scholarly economy](https://doi.org/10.14763/2022.3.1671). Internet Policy Review, 11(3). https://doi.org/10.14763/2022.3.1671 [[direct PDF link](https://policyreview.info/pdf/policyreview-2022-3-1671.pdf)]\n\n[BibTeX](/bibtex#goldenfein2022platforming)\n\n\n\n\n\n\n## abstract\n\n> Google Scholar has become an important player in the scholarly economy. Whereas typical academic publishers sell bibliometrics, analytics and ranking products, Alphabet, through Google Scholar, provides “free” tools for academic search and scholarly evaluation that have made it central to academic practice. Leveraging political imperatives for open access publishing, Google Scholar has managed to intermediate data flows between researchers, research managers and repositories, and built its system of citation counting into a unit of value that coordinates the scholarly economy. At the same time, Google Scholar’s user-friendly but opaque tools undermine certain academic norms, especially around academic autonomy and the academy’s capacity to understand how it evaluates itself.\n\n\n\n\n\n\n## tweets\n\nHere are tweets from Jake introducing the paper:\n\nThe incentives behind academic work often push us to compete for reputation and prestige on a global scoreboard run by... #GoogleScholar. In our new piece, @danielsgriffin and I reflect on how this affects academic work and norms in troubling ways: https://t.co/ADo1tHEjq3— Jake Goldenfein (@jakusg) October 5, 2022 \n\nHere I mention the paper (with reference to [refusal - more below](#refusal)), quoting from our closing paragraph:\n\n___1. “Unquestioned reliance on such opaque measures in hiring, promotion and tenure committees … displace academic autonomy. If the academy cannot develop "an accountability relationship" with Google Scholar, it must find other ways to meet its own obligations (Rached, 2016).” https://t.co/zsfBCWuYeb— Daniel Griffin (@danielsgriffin) October 14, 2022 \n\nUnabridged: \n\n> Unquestioned reliance on such opaque measures in hiring, promotion and tenure committees, let alone decisions about what to read and who can speak, displace academic autonomy. If the academy cannot develop \"an accountability relationship\" with Google Scholar, it must find other ways to meet its own obligations (Rached, 2016).\n\n- citation: Rached, D. H. (2016). The concept(s) of accountability: Form in search of substance. Leiden Journal of International Law, 29(2), 317–342. [https://doi.org/10.1017/S0922156516000042](https://doi.org/10.1017/S0922156516000042) [rached2016concept]\n\nHere I mention the paper (quote-tweeting a semi-viral tweet mentioning, in part, [fear of Google abandoning Google Scholar](/2022/11/02/fear-of-gs-abandonment)):\n\nWhat is scary?That Google Scholar might disappear or that it "distribute(s) academic authority according to its own unchallengeable algorithmic designs"[1]?It is scary to have "an unaccountable organization intermediating our access to the scholarly record"[2]. https://t.co/gKgM8CIFVn— Daniel Griffin (@danielsgriffin) November 1, 2022 \n\nNotes:\n\n1. a line from our paper, in the section: Evaluative Bibliometrics in the Scholarly Economy\n2. Quoted words are drawn from [Alberto Martín's reply](https://twitter.com/albertomartin/status/1587366483742658560) to the Ethan Mollick tweet, Martín is an author of the paper Mollick is referencing: Martín-Martín et al.'s \"Google Scholar, Microsoft Academic, Scopus, Dimensions, Web of Science, and OpenCitations' COCI: a multidisciplinary comparison of coverage via citations\" (2021), in Scientometrics. [https://doi.org/10.1007/s11192-020-03690-4](https://doi.org/10.1007/s11192-020-03690-4) [martín2021google]\n\n\n\n\n\n## background\n\nA paper with [Jake Goldenfein](https://twitter.com/jakusg) on academia relinquishing autonomy by its use of Google Scholar. Earlier versions of the paper (some with [Sebastian Benthall](https://sbenthall.net/) and [Eran Toch](https://toch.tau.ac.il/eran-toch/)) were discussed at the Digital Life Initiative at Cornell Tech ([blog post here](https://www.dli.tech.cornell.edu/post/private-companies-and-scholarly-infrastructure-google-scholar-and-academic-autonomy)), [\"Money talks? – The impact of corporate funding on information law and policy research\"](https://www.ivir.nl/program-money-talks-the-impact-of-corporate-funding-on-information-law-and-policy-research/), the 2019 Northeast Privacy Scholars Workshop, and the Doctoral Reading and Theory Workshop at UC Berkeley’s Information School. [Here](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3476911) is an early draft on SSRN. Jake has a separate piece in the LPE project: [Law, Metrics, And The Scholarly Economy](https://lpeproject.org/blog/law-metrics-and-the-scholarly-economy/). Partially supported by funding from [NSF INSPIRE SES1537324](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1650589).\n\n\n\n\n\n\n## refusal\n\nWhile refusal is not the point of our paper, except for refusal of the status quo, as a research praxis and a form of [refusal](https://afog.berkeley.edu/programs/the-refusal-conference) I have not used Google Scholar since 2021-12-01. I discuss this in [a running Twitter thread](https://twitter.com/danielsgriffin/status/1466125587240550402).\n\nSee also my reply to a question on Twitter here:\n\nI started practicing refusal re Google Scholar (stopped using for searches and deleted my profile) while working on this paper (with @jakusg), just published in @PolicyR.GS’s opaque & simplistic metrics used for ranking people and search results challenges academic autonomy. https://t.co/zsfBCWuYeb— Daniel Griffin (@danielsgriffin) October 14, 2022 \n\nSee my reply quoting from our paper down-thread of the same question, here:\n\nYes! “Google Scholar does not have a monopoly on opacity. There is a dearth of transparency and accountability across the now numerous tools for evaluation and ranking…— Daniel Griffin (@danielsgriffin) October 14, 2022 \n\nThe quote is extracted from our conclusion:\n\n> Google Scholar does not have a monopoly on opacity. There is a dearth of transparency and accountability across the now numerous tools for evaluation and ranking. Google Scholar is not the only bibliometrics platform demonstrating these features or causing these issues. [ . . . ] But as Onara O’Neill describes, old intermediaries are being replaced with new intermediaries ‘whose contributions are harder to grasp, and who are not and cannot be disciplined by the measures used to discipline the old intermediaries’ (O’Neill, 2020).\n\n- citation: O’Neill, O. (2020). Trust and accountability in a digital age. Philosophy, 95(1), 3–17. [https://doi.org/10.1017/S0031819119000457](https://doi.org/10.1017/S0031819119000457) [o_neill2020trust]\n\n\n\n\n\n\n## \"free\"\n\nSome discuss Google Scholar as a gift from Alphabet/Google or an act of charity or generosity straightforwardly, without noting how gifts and acts of charity are employed in relations of power.\n\nWe discuss some of this in a section called \"Free\". Here is a tweet from my making brief mention of this with a short excerpt:\n\nA “charity” reading is too charitable. @jakusg and I have a section on “free” in our paper where build on “analyses of “gift” structures in platform economics by Fourcade & Kluttz (2020), and of “free” online services by Hoofnagle & Whittington (2014).”https://t.co/Xsj5BhwL84— Daniel Griffin (@danielsgriffin) November 2, 2022 \n\n- citations:\n - Fourcade & Kluttz's \"A Maussian bargain: Accumulation by gift in the digital economy\" (2020), in Big Data & Society. [https://doi.org/10.1177/2053951719897092](https://doi.org/10.1177/2053951719897092) [fourcade2020maussian]\n - Hoofnagle & Whittington's \"Free: Accounting for the Costs of the Internet’s Most Popular Price\" (2014), in UCLA Law Review. [https://www.uclalawreview.org/free-accounting-for-the-costs-of-the-internets-most-popular-price-2/](https://www.uclalawreview.org/free-accounting-for-the-costs-of-the-internets-most-popular-price-2/) [hoofnagle2014free]\n\n\n\n\n\n## commentary\n\n\nXnet ([\\@X_net_@twitter.com](https://twitter.com/X_net_/)) - [`2022-10-25`](https://twitter.com/X_net_/status/1584824081421058048):\n\n> La opacidad de las herramientas de Google Scholar y su sistema de recuento de citas , que coordina la economía académica, destruye normas fundamentales:\n> \n> 🎓 La autonomía de la Academia y su capacidad para entender como se evalúa a sí misma. [ . . . ]\n\n\nAlberto Martín-Martín ([\\@albertomartin@twitter.com](https://twitter.com/albertomartin/)) - [`2022-10-22`](https://twitter.com/albertomartin/status/1583764912232607744):\n\n> This piece lays out good arguments for why it is problematic to let unaccountable organizations such as Google Scholar to intermediate access to the scholarly record [link omitted] #dontleaveittogoogle\n\n> The issue is not limited to Google Scholar of course, there are other commercial platforms that function as intermediaries, but Google Scholar is distinctive in one thing: they don't need 💰 from academic institutions to function, and so they \"cannot be disciplined\"\n\n> Overall, I think it's a great piece, although I miss some self-criticism. These platforms dominate the landscape because the scholarly community doesn't recognise its responsibility to manage its own records, which includes discovery tools, so ultimately the fault is in us\n\n\nGianluca Sgueo ([\\@GianlucaSgueo@twitter.com](https://twitter.com/GianlucaSgueo/)) - \n[`2022-10-14`](https://twitter.com/GianlucaSgueo/status/1580845131191635970):\n\n> #GoogleScholar is central to the professional lives of academics. Yet they have zero agency on the service. This study claims that the platforms is taking away some of the autonomy that #academia still has left \n\n\nSebastian Baltes ([\\@s_baltes@twitter.com](https://twitter.com/s_baltes)) provided an excerpting - [`2022-10-13`](https://twitter.com/s_baltes/status/1580798020765253632):\n\n> \"Google Scholar [...] has leveraged its system of citation counting into a tool that coordinates the scholarly economy. [...] it infuses the scholarly context with platform dynamics in ways that trouble a set of contextual norms.\"\n\n\n\n\n\n## related work\n\nPublished after acceptance:\n\nPardo-Guerra's \"The Quantified Scholar: How Research Evaluations Transformed the British Social Sciences\" (2022), from Columbia University Press. [https://cup.columbia.edu/book/the-quantified-scholar/9780231197816](https://cup.columbia.edu/book/the-quantified-scholar/9780231197816) [pardoguerra2022quantified]\n\n- [tweeted here](https://twitter.com/search?q=from%3Adanielsgriffin%20%22quantified%20scholar%22&f=live)\n- quoted in [/scholar_profiles#pardoguerra2022quantified](/scholar_profiles#pardoguerra2022quantified)\n", "snippet": "\n", "url": "/shortcuts/goldenfein2022platforming/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-google-bard", "type": "pages" , "date": "", "title": "Google-Bard tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Google-Bard\" tag.\n \n\n\n{% assign tag_name = \"Google-Bard\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Google-Bard\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Google-Bard\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/google-bard/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-google-discover", "type": "pages" , "date": "", "title": "Google-Discover tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Google-Discover\" tag.\n \n\n\n{% assign tag_name = \"Google-Discover\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Google-Discover\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Google-Discover\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/google-discover/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-google-scholar", "type": "pages" , "date": "", "title": "Google Scholar tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Google Scholar\" tag.\n \n\n\n{% assign tag_name = \"Google Scholar\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Google Scholar\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Google Scholar\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/google-scholar/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-google-sge", "type": "pages" , "date": "", "title": "Google-SGE tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Google-SGE\" tag.\n \n\n\n{% assign tag_name = \"Google-SGE\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Google-SGE\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Google-SGE\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/google-sge/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-google", "type": "pages" , "date": "", "title": "Google tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Google\" tag.\n \n\n\n{% assign tag_name = \"Google\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Google\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Google\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/google/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-googled-it", "type": "pages" , "date": "", "title": "googled it tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"googled it\" tag.\n \n\n\n{% assign tag_name = \"googled it\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"googled it\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"googled it\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/googled-it/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-googlelessness", "type": "pages" , "date": "", "title": "Googlelessness tag" , "tags": "", "content": "{% assign tag_name = \"Googlelessness\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Googlelessness\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Googlelessness\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/googlelessness/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-gps", "type": "pages" , "date": "", "title": "GPS tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"GPS\" tag.\n \n\n\n{% assign tag_name = \"GPS\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"GPS\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"GPS\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/gps/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-grep", "type": "pages" , "date": "", "title": "grep tag" , "tags": "", "content": "{% assign tag_name = \"grep\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"grep\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"grep\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/grep/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-griffin2022search", "type": "pages" , "date": "", "title": "griffin2022search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"griffin2022search\" tag.\n \n\n\n{% assign tag_name = \"griffin2022search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"griffin2022search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"griffin2022search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/griffin2022search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "shortcuts-griffin2022search", "type": "shortcuts" , "date": "2022-11-25", "title": "Search quality complaints and imaginary repair: Control in articulations of Google Search" , "tags": "", "content": "## citation\n\n**Griffin, D.**\\*, & [Lurie, E.](https://emmalurie.github.io/)\\* (2022). [Search quality complaints and imaginary repair: Control in articulations of Google Search](https://doi.org/10.1177/14614448221136505). _New Media & Society_, Ahead of Print. https://doi.org/10.1177/14614448221136505 [[direct PDF link](https://journals.sagepub.com/doi/pdf/10.1177/14614448221136505?download=true)]\n\n\\* equal co-authors\n\n[BibTeX](/bibtex#griffin2022search)\n\n\n## abstract\n\n> In early 2017, a journalist and search engine expert wrote about “Google’s biggest ever search quality crisis.” Months later, Google hired him as the first Google “Search Liaison” (GSL). By October 2021, when someone posted to Twitter a screenshot of misleading Google Search results for “had a seizure now what,” users tagged the Twitter account of the GSL in reply. The GSL frequently publicly interacts with people who complain about Google Search on Twitter. This article asks: what functions does the GSL serve for Google? We code and analyze 6-months of GSL responses to complaints on Twitter. We find that the three functions of the GSL are: (1) to naturalize the logic undergirding Google Search by defending how it works, (2) perform repair in responses to complaints, and (3) boundary drawing to control critique. This advances our understanding of how dominant technology companies respond to critiques and resist counter-imaginaries.\n\n## acknowledgments\n\nAs documented in the paper:\n\n> The authors thank the many who reviewed and provided comments, including Deirdre Mulligan, Anne Jonas, Elizabeth Resor, Richmond Wong, and participants in both the Data & Society The Social Life of Algorithmic Harms Workshop and the UC Berkeley School of Information Doctoral Research and Theory Workshop.\n\n## background\n\nEmma Lurie and I began discussing this paper in late 2021. We submitted and presented an initial draft at a Data & Society workshop in early 2022: [The Social Life of Algorithmic Harms](https://datasociety.net/announcements/2021/10/28/the-social-life-of-algorithmic-harms/).\n\n## citations\n\n- Cited as a resource in Terms-we-Serve-with's page on [Contestability and Complaint](https://termsweservewith.org/complaint) (from [Bogdana Rakova](https://bobirakova.com/), [Megan Ma](https://law.stanford.edu/directory/megan-ma/), and [Renee Shelby](https://reneeshelby.com/)).", "snippet": "\n", "url": "/shortcuts/griffin2022search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "shortcuts-griffin2022situating", "type": "shortcuts" , "date": "2023-01-06", "title": "Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership" , "tags": "", "content": "\n\nSee [danielsgriffin.com/diss](danielsgriffin.com/diss/) for the full text in HTML.\n\n\n\n\n\n## citation\n\n**Griffin D.** (2022) _Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership_. Ph.D. dissertation. Advisors: Deirdre K. Mulligan and Steven Weber. University of California, Berkeley. 2022. [[direct PDF link](/assets/griffin2022situating.pdf)]\n\n[BibTeX](/bibtex#griffin2022situating)\n\n\n\n\n## abstract\n\n> When does web search work? There is a significant amount of research showing where and how web search seems to fail. Researchers identify various contributing causes of web search breakdowns: the for-profit orientation of advertising driven companies, racial capitalism, the agonistic playing field with search engine optimizers and others trying to game the algorithm, or perhaps ‘user error’. Suggestions for making web search work for more people more of the time include: regulations aimed at competition or the design of the search interface; changing the conception of, metrics for, and evaluation of relevance; allowing subjects of search queries some space of their own on the results pages to speak back; proposals for public search engines; and better-informed users of search.\n> \n> I take a different tack. Rather than focusing on identifying and remediating points of failure, I seek to learn from successful searchers how they make search work. So, I look to data engineers. I closely examine the use of web search in the work practices of data engineering, a highly technical, competitive, and fast changing area. Data engineers are heavily reliant on general-purpose web search. They use it all the time and it seems to work for them. The practical success I report is not determined by some solid ‘gold standard’ metrics or objective standpoint, but by how they have embraced web search and present it as useful and more importantly essential to their work. It is success for their purposes: in gradations, located in practice, and relative to alternatives.\n> \n> Through interviews and document analysis informed by digital ethnography, I use theories from situated learning and sociotechnical systems to explore how and why search works for data engineers. I draw from feminist science and technology studies, the sociology of expertise, situated learning theory, and organizational sociology to explore and position my four core findings.\n> \n> First, I find that personal knowledge of the technical mechanisms of search plays a limited role in data engineers successful searching. Exploring why and how web search works for data engineers allowed me to probe the role of knowledge about the mechanisms of search. Contrary to dominant literature that views individual ignorance of search mechanisms as contributing to failed searches and search literacy as a necessary, if independently insufficient, path towards mitigating search failures and the harms to which they contribute, I find little evidence that data engineers’ personal knowledge of the mechanisms of search contributes to their successful use of it.\n> \n> Data engineers receive little formal on-the-job training or mentoring on how to use web search successfully. Data engineers describe web search as a solitary exercise in which they receive little formal guidance. Moreover, data engineers describe web search as a solitary practice. The absence of formal training is surprising given the professions’ admitted heavy reliance on web search. In addition to the absence of formal training, data engineers report little discussion about search practices or collaboration in searching and some discomfort with their heavy reliance. However, I find one form of talk about search, what I call “search confessions”—statements, often hyperbolic, about one’s reliance on web search—to be pervasive and a key way in which the community of data engineers legitimate their heavy reliance on web search and develop and express shared norms about how to use search well.\n> \n> Second, rather than personal knowledge, I find that occupational, professional, and technical components of their work practices contribute to their successful use of search. Expertise embedded in these components of data engineers’ web search practices improve two key search processes: query generation and results evaluation. The work practices of data engineers also decouples the immediate effects of searching from organizational action.\n> \n> To extend the description of successful web search practices, I address how data engineers confront search failure. I look at how they turn to ask colleagues questions when web searching fails and find them performing repair. These sites of coordination and collaboration post-search failure also provide opportunities for broader knowledge sharing and a space to legitimate their work and expertise, both individually and as a profession.\n> \n> If it is normal and acceptable to rely so heavily on search, it may be a surprise that there is so little talk about searching. Data engineers regularly present search as an individual responsibility—they search by themselves or on their own and desire to keep their searching private. This individual responsibility exemplifies the extent to which the firms employing data engineers do not use data from web search activity to better know and control the search practices. My findings did not reveal technology-enabled management of web search practices. I analyze the absence of firm management of search and the solitary and secretive search practices as a product of organizational reliance on data engineers to flexibly learn on the fly. The privacy of search generally protects the resources (time, attention, and reputation) of individual data engineers to pursue the distributed searching and learning on the fly they are tasked with.\n> \n> In the conclusion, I advance two further arguments before developing provocations grounded in the key takeaways. While web searching for data engineering is generally put to successful use, I show how the effective use of web search is supported by and limited to a dependence on the knowledge of others and how uneven access to community norms and knowledge limit who is effective. They key takeaways center on how web search in data engineering is continually re-legitimated; extended beyond the search box and the search results page; did not hinge on personal knowledge of the technical mechanisms of web search; is entangled with notions of responsibility, credit and blame, for knowledge; and the intentional application of technique to influence search activity, did not make an appearance.\n> \n> Being ‘better-informed search users’ for data engineers means being situated in practices around search with embedded expertise and reinforced values that support their uses of web search. For the data engineers I talked with, organizational and occupational factors including the structures of the technology, workplace interactions, and norms—all well outside of and stretching well before and after the moments of typing a query into a search box or reviewing a search results page—make search work.\n\n\n\n## summaries\n\nI've written a few shorter summaries for various audiences. Sharing three here:\n\n(1)\n\n> My dissertation research seeks to understand how data engineers make generally successful use of general-purpose web search for their work. But I show how several elements of their work practices do not promote an inclusive learning environment, particularly for women data engineers and other marginalized newcomers. These include the informal means of legitimating web search as appropriate, an individualistic approach to the obligation to know (including heightened standards for women), and how keeping search practices so hidden may favor those already in power.\n\n(2) \n\n> My dissertation research looked at how data engineers think about and use web search in/at/for work. I describe how they successfully make use of web search through legitimating it as appropriate for their work, how search is extended across occupational, professional, and technical components of their work practices (facilitating query formulation and evaluation of search results), and how they repair search failures. I show how individually-held knowledge of the mechanisms of search is not necessary for some successful uses of search and how contextual factors can provide some defense against search automation bias. I also consider how and why the data engineers seek to keep their searching private, how they curiously do not make use of data on their own searches, and the consequences of responsibility for web search being seemingly assigned solely to individuals. \n\n(3) \n\n> My dissertation looks at the web search practices of data engineers through interviews and digital ethnography. I use legitimate peripheral participation [@lave1991situated] and Handoff [@mulligan2020concept; @goldenfein2020through] to look at how data engineers learn to successfully make use of web search as data engineers. I find practices that legitimate the reliance on web search in their work, despite the limited instruction and search talk. Rather than making search work by their understanding of the mechanisms of search engines, their searching is supported by it being _extended_ across occupational, professional, and technical components of their work practices that guide their selection of search queries and structure their evaluations of search results. I also find practices of search repair, careful performances that are used to validate reliance on web search and legitimize engineers while filling in where web search is not sufficient alone. But I also find search constructed as solitary and the sole responsibility of individuals. I consider how the hiddenness of search and assignment of responsibility may limit the effectiveness of searching and of inclusive learning in data engineering work. \n\n\n\n## corrigenda\n\n**2023-01-06 01:21:** Alongside the submitted official version, I will maintain a corrected version of the dissertation along with a list of corrections. Please do contact me if you spot an error or something otherwise deserving of repair. (I also will maintain a list of things to fix or iron out in future work. Both are distinct from Outtakes, some of which I hope to share or identify.) (1) I am aware of an issue with some in-text citations where they compile to square brackets rather than parens. (2) I also need to amend my Acknowledgements ('A very big thank you to Alex Hughes for reaching out over the summer about reading what I'd written and offering to be a sounding board. Our conversation was incredibly encouraging and formative.'): A warning to all would-be-diss-fillers, writing the bulk of your acknowledgements in the final stressful days is ill-advised.\n\n\n\n## links\n\n- [UC Berkeley I School](https://www.ischool.berkeley.edu/research/publications/2022/situating-web-searching-data-engineering-admissions-extensions-repairs)", "snippet": "\n", "url": "/shortcuts/griffin2022situating/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-grounded", "type": "pages" , "date": "", "title": "grounded tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"grounded\" tag.\n \n\n\n{% assign tag_name = \"grounded\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"grounded\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"grounded\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/grounded/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "search-guide", "type": "pages" , "date": "2023-06-14 23:18:34 +0000", "title": "search/Guide" , "tags": "", "content": "\nThis is a guide to searching on this website. See [search/About](/search/about) to learn about search on this website.\n \n\n\n## OR AND NOT\n\nSearch terms are treated as an implicit inclusive OR. AND is created by prepending a plus (`+`). NOT is produced with a minus (`-`).\n\nExamples:\n\n- [searching finding] will return documents with either term1 OR term2.[^notation]\n- [+searching +finding] will return documents with both term1 AND term2.\n- [searching -finding] will return documents with term1 but NOT term2. \n\n[^notation]: Square brackets are used to enclose and indicate the search query, see more at: [search/Notation](notation).\n\n## Fields\n\nYou can search across a particular field. Here are the available fields and the search syntax:\n\n- Available fields: \n\n- Syntax: field:term\n\nExamples:\n\n- [type:posts]\n- [title:publications]\n\n## Exact phrase searching\n\nExact phrase searching is made possible through an add-on function and is limited to a single exact search phrase. This search syntax cannot be combined with other search syntax.\n\nExamples:\n\n- [\"Daniel S. Griffin\"]\n- [\"search seeds\"]\n\n## !Bangs\n\n\n!Bangs may not work on mobile. [2023-06-27 16:04:11]\n\n\n!Bang () searching is made possible through add-on functions. All available bangs are provided in the search bar by typing an exclamation mark (`!`) or at [search/!Bangs](bangs). This is inspired by [DuckDuckGo's use of bangs](https://duckduckgo.com/bangs). Bangs have some similarities to [golinks](https://golinks.github.io/golinks/). Bangs open in a new tab.\n\nExamples:\n\n- [!browse] opens [\\Browse](\\browse).\n- [!ddg !bangs] => conducts a search for [!bangs] on DuckDuckGo (itself a bang).\n- [!w !bang] => conducts a search for [!bang] on Wikipedia (itself redirecting to the Bang section of the encyclopedia's page on DuckDuckGo).\n\n\n## Wildcards\n\nasterisk (`*`)\n\nExamples:\n\n- [search\\*]\n- [search find\\*]\n\n\n## Boosts\n\nYou can 'boost' the value of a term in the relevance ranking with a caret (`^`) followed by a positive integer.\n\nExamples:\n\nCompare [search find^10] and [search^10 find]\n\n\n\n sort:\n This can be used with a query (ignoring relevancy ranking and sorting all included results) or by itself (in which case it returns all items in the index, sorted). Currently only chronological sorting is supported. These are flexible operators that support various alternative representations.\n sort:date\n Example: [Berkeley sort:date]\n Permitted representations: \n sort:date-reverse\n Example: [Berkeley sort:date-reverse]\n Permitted representations: \n\n\n\n\n\n\n\n similar:\n This operator will return the 30 pages determined as \"most similar\" per embedding similarity (see more at [search/About#similarity](/search/About#similarity)).\n Example: [similar:https://danielsgriffin.com/changes/2023/07/13/notes.html]\n Note: This operator does not function with other operators or search terms.\n\n\n\n## More?\n\nHere is the official searching guide from Lunr.js: [Lunrjs.com > Guides > Searching]](https://lunrjs.com/guides/searching.html) (for instance, for [fuzzy matching](https://lunrjs.com/guides/searching.html#fuzzy-matches), not discussed here).\n\n\n", "snippet": "\n", "url": "/search/guide/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-hallucination", "type": "pages" , "date": "", "title": "hallucination tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"hallucination\" tag.\n \n\n\n{% assign tag_name = \"hallucination\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"hallucination\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"hallucination\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/hallucination/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-hallucinations", "type": "pages" , "date": "", "title": "hallucinations tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"hallucinations\" tag.\n \n\n\n{% assign tag_name = \"hallucinations\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"hallucinations\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"hallucinations\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/hallucinations/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-hesitation", "type": "pages" , "date": "", "title": "hesitation tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"hesitation\" tag.\n \n\n\n{% assign tag_name = \"hesitation\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"hesitation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"hesitation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/hesitation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "hire-me", "type": "pages" , "date": "2023-06-20 16:10:40 -0700", "title": "Hire me." , "tags": "", "content": "\n\n\n\n\n\nThe below is out-of-date, please see [tooling to support people in making hands-on and open evaluations of search](/2024/01/30/tooling-to-support-people-in-making-hands-on-and-open-evaluations-of-search/) for a write-up on the work I'm looking to do.\n\n\n\n\nSee [my resume here](/assets/Daniel_Griffin_Resume_2023-08-30.pdf). See [my CV here](/cv/). See [more about me here](/about/).\n\n\n\nBelow is a pitch for a user research scientist position in industry. This position would be focused on applying expertise from my academic training and research towards building systems that nudge the search landscape away from private rent-seeking and towards one that supports [search rights](https://searchrights.org/) and [a flourishing of curiosity and new questions](/about#focus). \n\n\n\nIf you are interested in hiring me for an academic research position, see [this page on my research](/research). Very related to the below, my goal in research is to study how people imagine, use, and make web search so that we might be better able to advocate for the appropriate role and shape of search in our work, lives, and society.\n\n\n\n\nMany people are now seeing that search is much more than ten blue links, much more than one company. We have a big chance to really change search for the better. Will we?\n\nI have a Ph.D. in Information Science from the School of Information at the University of California, Berkeley. I'm a technically-skilled qualitative researcher focused on web search tools and practices. I use interviews and digital ethnography to research how we talk about, imagine, know, build, and practice different ways of searching. My [dissertation](/diss) looked at how data engineers effectively use general-purpose web search at work.\n\nI'm looking at finding or creating opportunities in industry for me to bring my expertise in search and research to contribute to better understanding and improving search tools and practices, amidst changes around generative AI.\n\nGenerative search and search-like tools are shifting how people imagine, discuss, and perform search. This presents massive challenges due to the immaturity of the models & interfaces and user conceptions & practices. Organizations introducing new generative tools not only need to keep making technical improvements but also need to work to better understand (and help support) the actual use. We know people are likely interpreting these tools and their outputs in many different ways, including some that may be harmful to the users themselves. And it isn't clear yet how to help users identify use cases and how to query, prompt, or otherwise work alongside these tools most effectively. \n\nI want to position organizations to design technology and policy for the responsible adoption of generative search. I want to leverage what I have learned about search and conduct new research into similar practices related to generative AI to position organizations and people to effectively engage with these new tools: i.e. know when to use it, how to use it, and how to talk about it with others, as well as perhaps when not to use it or how not to use it). My goal is to work in a role where I can talk to and observe people using these tools (as substitutes or complements of their search practices) and bring insights back to development, design, and policy teams (and the users themselves).\n\nHere is some of what I can help do:\n\n- Surfacing effective and responsible strategies (of tool design and use), as well as the ineffective and harmful\n- Product design implications to support users\n- Disseminating those findings and best practices internally & externally\n\nQualitative research—including interviews, participant observation, and digital and trace ethnography—can help us explore where and how people use these tools. By better understanding how users talk about and use these tools we can both better identify and address the various sources of harm and lower the barriers to effective use (including beneficial uses we haven't yet imagined). We can learn how to prioritize model and interface changes and user education to better address concerns ranging from \"hallucinations\" to \"automation bias\".\n\nI'm well positioned to do this research and help people and organizations get ahead of the challenges. In my dissertation research I used interviews and digital ethnography to better understand how data engineers effectively use general-purpose web search at work (amidst concerns about both misinformation and deskilling). I carefully situated their work practices within organizational and interactional contexts to understand how data engineers admit search into their work, extend searching across their tools and processes, collaboratively repair failed searches, and take or assign ownership for search. This required in-depth technical understanding, a grounding in science & technology studies, and close attention to individual search experiences. I built on my prior work looking at [search engine responsibility](/shortcuts/mulligan2018rescripting), how [different search tools support different values](/shortcuts/goldenfein2022platforming), and [responses to search complaints](/shortcuts/griffin2022search). \n\nDespite the significant differences between a tool like ChatGPT, for instance, and Google web search, there are many similarities. People are sometimes embarrassed to admit they rely on such tools, domain knowledge and contextual factors of the topics searched are relevant to the success of queries or prompts, automation bias may be addressed through organizational processes, and places to collaborate around failure and share examples can provide immense add-on learning benefits.\n\nThank you in advance for any connections, advice, or opportunities you can offer. \n\n\n\n\nSee a variant of this on [a LinkedIn post](https://www.linkedin.com/posts/danielsgriffin_opentowork-activity-7072995391532650496-u8wb).\n\n\n\n\n{% include contact-me.html %}", "snippet": "\n", "url": "/hire-me/", "snippet_image": "li_opentowork.png", "snippet_image_alt": "image of Daniel S. Griffin with LinkedIn's #OPENTOWORK hashtag", "snippet_image_class": "circle" } , { "id": "tags-hostile-design", "type": "pages" , "date": "", "title": "hostile design tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"hostile design\" tag.\n \n\n\n{% assign tag_name = \"hostile design\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"hostile design\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"hostile design\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/hostile-design/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-hugging-face", "type": "pages" , "date": "", "title": "hugging-face tag" , "tags": "", "content": "{% assign tag_name = \"hugging-face\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"hugging-face\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"hugging-face\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/hugging-face/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-humility", "type": "pages" , "date": "", "title": "humility tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"humility\" tag.\n \n\n\n{% assign tag_name = \"humility\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"humility\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"humility\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/humility/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-hypecert", "type": "pages" , "date": "", "title": "hypecert tag" , "tags": "", "content": "{% assign tag_name = \"hypecert\" %}\n\n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"hypecert\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"hypecert\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/hypecert/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ignorance", "type": "pages" , "date": "", "title": "ignorance tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"ignorance\" tag.\n \n\n\n{% assign tag_name = \"ignorance\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"ignorance\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"ignorance\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ignorance/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-imaginary-references", "type": "pages" , "date": "", "title": "imaginary references tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"imaginary references\" tag.\n \n\n\n{% assign tag_name = \"imaginary references\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"imaginary references\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"imaginary references\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/imaginary-references/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-in-depth-search", "type": "pages" , "date": "", "title": "in-depth-search tag" , "tags": "", "content": "{% assign tag_name = \"in-depth-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"in-depth-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"in-depth-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/in-depth-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "in-progress", "type": "pages" , "date": "2023-08-28 10:18:14 -0700", "title": "In Progress" , "tags": "", "content": "\n\n\nAdded\nNote\n\n\n\n\n{{ \"2024-01-30 20:39:53\" | date: \"%B %d, %Y %I:%M %p\" }} (EST) \n[tooling to support people in making hands-on and open evaluations of search](/2024/01/30/tooling-to-support-people-in-making-hands-on-and-open-evaluations-of-search/)\n\n\n{{ \"2023-11-02 14:44:02 -0700\" | date: \"%B %d, %Y %I:%M %p (%Z)\" }}\n*postponed* failures in web search\n\n\n{{ \"2023-09-25 16:20:23 -0700\" | date: \"%B %d, %Y %I:%M %p (%Z)\" }}\n*postponed* a review of Robin Berjon's \"Fixing Search\"\n\n\n{{ \"2023-11-02 14:44:02 -0700\" | date: \"%B %d, %Y %I:%M %p (%Z)\" }}\n*postponed* I'm going to write up some thoughts on search quality complaints, expectation drift, & \"how to communicate technological breakdowns in a way that might lead to their willing resolution by a technology company\" re comments around and an offer to support folks in documenting concerns. See: also Search Quality Complaints\n\n\n", "snippet": "\n", "url": "/in-progress/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-inadequate-informing", "type": "pages" , "date": "", "title": "inadequate informing tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"inadequate informing\" tag.\n \n\n\n{% assign tag_name = \"inadequate informing\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"inadequate informing\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"inadequate informing\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/inadequate-informing/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-incentives", "type": "pages" , "date": "", "title": "incentives tag" , "tags": "", "content": "{% assign tag_name = \"incentives\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"incentives\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"incentives\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/incentives/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-incorrect", "type": "pages" , "date": "", "title": "incorrect tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"incorrect\" tag.\n \n\n\n{% assign tag_name = \"incorrect\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"incorrect\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"incorrect\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/incorrect/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags", "type": "pages" , "date": "", "title": "Tags" , "tags": "", "content": "\n \n This is a page listing—in alphabetical order—tags used on this website.\n \n\n\n{% assign tags = \"\" | split: \"\" %}\n\n{% for post in site.posts %}\n {% for tag in post.tags %}\n {% unless tags contains tag %}\n {% assign tags = tags | push: tag %}\n {% endunless %}\n {% endfor %}\n{% endfor %}\n\n{% for page in site.pages %}\n {% for tag in page.tags %}\n {% unless tags contains tag %}\n {% assign tags = tags | push: tag %}\n {% endunless %}\n {% endfor %}\n{% endfor %}\n\n{% assign sorted_tags = \"\" | split: \",\" %}\n{% for tag in tags %}\n {% assign sorted_tags = sorted_tags | push: tag | sort_natural %}\n{% endfor %}\n\n\n{% for tag in sorted_tags %}\n {{ tag }}\n{% endfor %}\n\n", "snippet": "\n", "url": "/tags/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets", "type": "pages" , "date": "", "title": "Annotated tweets" , "tags": "", "content": "\n \n \n This page lists tweets from Daniel, stored and annotated on this website.\n \n \n \n \n This page is under construction.\n \n \n \n \n \n \n\n\n\n{% for item in site.posts %}\n {% if item.categories contains 'tweets' %}\n {{ item.title }}\n {{ item.excerpt }}\n \n \n {% endif %}\n{% endfor %}\n", "snippet": "\n", "url": "/tweets/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "shortcuts", "type": "shortcuts" , "date": "", "title": "Shortcuts" , "tags": "", "content": "\n{% assign shortcuts_pages = site.pages | where_exp: 'item', 'item.url contains \"/shortcuts/\"' %}\n{% for page in shortcuts_pages %}\n {% if page.title != \"Shortcuts\" %}\n \n {{ page.title }}\n \n {% endif %} \n \n{% endfor %}\n", "snippet": "\n", "url": "/shortcuts/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "browse", "type": "pages" , "date": "", "title": "Browse" , "tags": "", "content": "\n\n\n\nHere is a page to facilitate your browsing-based search and discovery on this website.\nThe figure below is a treemap (Wikipedia) made with D3.js and depicting each first-level node of the website by a combined character count of the children pages (and a `pages` node for root-level pages). Each node is clickable.\nIf you would prefer, an XML sitemap is located at /sitemap.xml. To learn more about this website, see Site.\n\n\n\n\n\n\n", "snippet": "\n", "url": "/browse/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "weblinks", "type": "pages" , "date": "2023-05-15", "title": "Shared weblinks" , "tags": "", "content": "\n \n This page lists shared weblinks.\n \n\n\n\n{% assign sorted_posts = site.posts | sort: 'date' | reverse %}\n\n{% for post in sorted_posts %}\n {% if post.categories contains 'weblinks' %}\n {% assign current_date = post.date | date: \"%B %-d, %Y\" %}\n {% if current_date != previous_date %}\n {% unless forloop.first %}{% endunless %}\n {{ current_date }}\n \n {% endif %}\n {{ post.title }}\n {{ post.content }}\n {% if post.tags.size > 0 %}\n Tags:\n {% for tag in post.tags %}\n {{ tag }}{% unless forloop.last %}, {% endunless %}\n {% endfor %}\n \n {% endif %}\n {% assign previous_date = current_date %}\n {% endif %}\n {% if forloop.last %}{% endif %}\n{% endfor %}\n", "snippet": "\n", "url": "/weblinks/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "updates", "type": "pages" , "date": "2023-05-15", "title": "Updates" , "tags": "", "content": "\n\nThis page lists updates about Daniel. For information about changes to the website instead, see Change notes.\n\n\n\n\n{% for item in site.posts %}\n{% if item.categories contains 'updates' %}\n\n\n\n\n{% assign d = item.date | date: \"%-d\" %}\n{{ item.date | date: \"%B\" }} {% case d %}{% when '1' or '21' or '31' %}{{ d }}st{% when '2' or '22' %}{{ d }}nd{% when '3' or '23' %}{{ d }}rd{% else %}{{ d }}th{% endcase %}, {{ item.date | date: \"%Y\" }}: {{ item.title }}\n\n{% assign content = item.snippet | strip %}\n{% if content != '' %}\n{{ content | markdownify }}\n{% endif %}\n\n\n\n{% if item.snippet_image_class contains 'paper_image' %}\n\n{% endif %}\n{% if item.snippet_image_class contains 'circle' %}\n\n{% endif %}\n\n\n\n\n{% endif %}\n{% endfor %}", "snippet": "\n", "url": "/updates/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "projects", "type": "pages" , "date": "2023-06-17", "title": "Projects" , "tags": "", "content": "\n\n\nI've listed here some of my projects, including websites, search tools, userscripts written in JavaScript, utility scripts written in Python, coding aspects of research papers, and some coursework.\n\n\nThis focuses on projects incorporating writing code in some manner. To learn about research specifically, see Research.\n\n\n\n\nSee here for a roadmap for this site [Roadmap](/roadmap)\n\n \n\n\n\n\n\n\n\n\nSearchRights.org\n\nwebsiteprovocation\n\n\nA website describing how different generative search systems perform against criteria oriented around search rights. Intended to explore, challenge, and support new search systems.\n\n\n\n\nActively under development and updated.\n\n\n GitHub | Jekyll, HTML, CSS\n\n\n\n\n\n\n\n\nSearchJunct\n\nsearch routersearch user interfacepractical explorationutility\n\n\nThis is a search router. I currently use this as my default search engine on desktop (currently running locally), replacing qrs.\n\n\n\n\nActively being developed.\n\n\n GitHub | JavaScript, HTML, CSS\n\n\n\n\n\n\n\n\nspeedserper\n\npractical explorationsearch user interfaceTampermonkey userscript\n\n\nA userscript to simplify search engine results pages for quick and simple use. See this page: speedserper\n\n\n\n\nActively being developed.\n\n\n GitHub | JavaScript, HTML, CSS\n\n\n\n\n\n\n\n\nCopyPromptPlusResponse\n\npractical explorationsearch user interfaceTampermonkey userscript\n\n\nA Userscript to Copy Search Prompts and Resulting Responses to Clipboard for Generative Search Tools.\n\n\n\n\nActively being developed.\n\n\n GitHub | JavaScript, HTML, CSS\n\n\n\n\n\n\n\n\nxtracty\n\nutilityTampermonkey userscript\n\n\nA userscript to extract tweet/post data from Twitter/X to YAML for easy handling.\n\n\n\n\nActively being developed.\n\n\n GitHub | JavaScript, HTML, CSS\n\n\n\n\n\n\n\n\nLunrish\n\nserver-sideAPIsearchdanielsgriffin.com\n\n\nThis is a modification of the Lunr.js search library adapted (for this website) for delivery server-side.\n\n\n\nActively being developed. API works and currently serves search results on danielsgriffin.com (as of 2023-12-11).\nJavaScript, Amazon EC2, Amazon CloudFront\n\n\n\n\n\n\n\n\n\n\n\nbot-ixn\n\n\ndata poisoningdanielsgriffin.com\n\n\nAfter accidentally poisoning Bing, see this Wired article, I developed a speculative link attributed.\n\n\n\nIn use on danielsgriffin.com.\n\n\n GitHub | HTML\n\n\n\n\n\n\n\n\nFlexSearch Working Example\n\nsearch, websitedanielsgriffin.com\n\n\nFlexSearch is a client-side search library. I have added a basic example of its use on this website.\n\n\n\nOn hold.\nJavaScript\n\n\n\n\n\n\n\n\nThe Five-Second Rule Filter!\n\nsearchspeculative design\n\n\n'The Five-Second Rule Filter!' is a speculative design approach to searching and acting around uncertainty.\n\n\n\n\nLive website.\nHTML, CSS\n\n\n\n\n\n\n\n\nUsing Lunr.js on danielsgriffin.com\n\nsearch, websitedanielsgriffin.com\n\n\nLunr.js is the client-side search library currently providing search on this website. It is modified to support exact phrase searches, bangs, and special sorting.\n\n\n\nActively being ported to Lunrish.\nJavaScript, Jekyll\n\n\n\n\n\n\n\n\ndanielsgriffin.com\n\ndanielsgriffin.compersonal websiteblog\n\n\nA space for public writing and exploration around search. Link above goes to the /Site page. GitHub link below goes to a public issues repository (the latter is also linked to from my Feedback page.\n\n\n\nActively maintained and developed. See Roadmap.\n\n\n GitHub | JavaScript, Jekyll, CSS, HTML, Python\n\n\n\n\n\n\n\n\nqChecker\n\nutility scriptpractical exploration\n\n\nA Python utility script for checking for quotes in source documents. Written to explore user responses to LLM 'hallucinations'.\n\n\n\n\nSupports basic checks.\n\n\n GitHub | Python\n\n\n\n\n\n\n\n\nctplsm\n\nTampermonkey userscriptspeculative designpractical exploration\n\n\nThis \"Contextual Twitter Poultice for Learning So Much\" userscript explores alternative search suggestions, generated context around queries, and routing to alternative search tools on Twitter/X search.\n\n\n\n\nActively used by author.\n\n\n GitHub | JavaScript, HTML, CSS, OpenAI (gpt-3.5-turbo)\n\n\n\n\n\n\n\n\nABCDEFG\n\nTampermonkey userscriptspeculative designpractical exploration\n\n\nThis \"Auto-Button-Click Double-check Evaluation for Funsies or Gnoses\" userscript automatically clicks the \"Google it\" or \"Double-check response\" button that appears for Bard responses.\n\n\n\n\nActively used by author.\n\n\n GitHub | JavaScript\n\n\n\n\n\n\n\n\n\n\n\nSetarco\n\n\nTampermonkey userscriptspeculative designpractical exploration\n\n\nA Tampermonkey userscript facilitating random instruction insertion in ChatGPT prompts, aiming for enhanced engagement and unpredictability.\n\n\n\nActively used by author.\n\n\n GitHub | JavaScript\n\n\n\n\n\n\n\n\nOpenAI's 'Question answering using embeddings-based search' on this website\n\nretrieval augmented generationdanielsgriffin.compractical exploration\n\n\nI explored an OpenAI tutorial for (something like) RAG (retrieval augmented generation); searching a local search API (not Lunrish).\n\n\n\nJupyter notebook is available at the above link.\nPython, OpenAI (embeddings; ChatCompletion); HyDE; RAG\n\n\n\n\n\n\n\n\nNo Data To/From Google Scholar December!\n\nrefusal\n\n\nAn exploration into refusing Google Scholar. Read more at my #refusal section on Goldenfein & Griffin (2022).\n\n\n\nOngoing...\nChrome extension: Redirector (from Einar Egilsson)\n\n\n\n\n\n\n\n\nquery random se (qrs)\n\nbrowser extensionpractical explorationutility\n\n\nAn unpacked browser extension that directs searches from the address bar to a random search engine (from a preset list).\n\n\n\n\nLegacy - last updated 2023-05-24\n\n\n GitHub | JavaScript\n\n\n\n\n\n\n\n\nTwitter API data pull for Burrell et al. (2019)\n\nAPI data pullTwitter\n\n\nUsed Twitter's API to find tweets discussing 'the Twitter algorithm' (various permutations)\n\n\n\n\nResearch project completed.\nPython\n\n\n\n\n\n\n\n\nTwitter API data pull & analysis for Griffin & Lurie (2022)\n\nAPI data pullTwitter\n\n\nUsed Twitter's Academic API to pull conversations with Google's Search Liaison.\n\n\n\n\nResearch project completed.\nPython, Jupyter Notebook\n\n\n\n\n\n\n\n\ncertainfuture\n\nclass project\n\n\n2017 class project in David Bamman's Deconstructing Data Science class (with Natalia Timakova), looking at certainty/uncertainty in future-oriented language about \"fake news\" interventions.\n\n\n\nDid not continue after the class.\nPython, NLP (NLTK), machine learning (Keras, scikit-learn)\n\n\n\n\n\n\n\n\n\n\n\nThe Gadfly Project\n\n\ncapstone project\n\n\n2016 capstone project for UC Berkeley's MIMS program: \"Give our service any block of text and we will automatically return a set of related questions.\" (with Vijay Velagapudi, Anand Rajagopal, Nikhil Mane, and Andrew Huang; advised by Marti Hearst; see project page and final report).\n\n\n\nNo longer hosted.\nPython, JavaScript, NLP (spaCy)\n\n\n\n\n\n\n\n\n\"Python Boot Camp\"\n\nteaching\n\n\nI taught this 3-week course for the School of Information at UC Berkeley for three years. I modified materials from Corey Hyllested, including updating to Python 3.\n\n\n\nHanded off materials to subsequent instructors (Proxima DasMohapatra and Michael Gutensohn) for summer 2019.\nPython\n\n\n\n\n\n\n\n\nTweetDay\n\nclass projectdata visualization\n\n\nAn exploratory visualization to provide a lens for browsing hundreds of tweets at once; a class final project for Marti Hearst's Information Visualization class (with Vijay Velagapudi, Nikhil Mane, and Andrew Huang); write-up at link is from Andrew Huang.\n\n\n\n\nNo longer hosted.\nJavaScript; Seesoft-inspired [@eick1992seesoft]\n\n\n\n\n\n\n\n\n\"Justificatory Claims in Open Source Mailing Lists\"\n\nclass project\n\n\n2014 class final project in Marti Hearst's Applied Natural Language Processing class (with classmates) looking at identifying the types of justificatory claims (i.e. analogy, authority, experience, generalization, or other) made in open source mailing lists.\n\n\n\nDid not continue after the class.\nPython, NLP (NLTK), BigBang\n\n\n\n\n\n\n", "snippet": "\n", "url": "/projects/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss", "type": "diss" , "date": "2022-12-16", "title": "Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership" , "tags": "[diss]", "content": "\n Here is an HTML version of my dissertation.\nThis version may have some distortions or mistakes in formatting (please do [submit](/feedback) questions/concerns for correction).\n\n\n\n\nSummary\nMy dissertation looks at the web search practices of data engineers through interviews and digital ethnography. I use legitimate peripheral participation (Lave & Wenger, 1991) and Handoff (Goldenfein et al., 2020; Mulligan & Nissenbaum, 2020) to look at how data engineers learn to successfully make use of web search as data engineers. I find practices that legitimate the reliance on web search in their work, despite the limited instruction and search talk. Rather than making search work by their understanding of the mechanisms of search engines, their searching is supported by it being extended across occupational, professional, and technical components of their work practices that guide their selection of search queries and structure their evaluations of search results. I also find practices of search repair, careful performances that are used to validate reliance on web search and legitimize engineers while filling in where web search is not sufficient alone. But I also find search constructed as solitary and the sole responsibility of individuals. I consider how the hiddenness of search and assignment of responsibility may limit the effectiveness of searching and of inclusive learning in data engineering work.\n\nContents\n\n\nAbstract\n\n\nAcknowledgements\n\n\n1. Introduction\n\n\n2. Methods and Methodologies\n\n\n3. Admitting searching\n\n\n4. Extending searching\n\n\n5. Repairing searching\n\n\n6. Owning searching\n\n\n7. Conclusion\n\n\n8. Appendices\n\n\nBibliography\n\n\n\n\n\n Filed\n The full dissertation document—as filed—is available here: Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership [PDF, 156 pages]\n\n Shortcut page\n A shortcut page providing citation, alt. summaries, and corrigenda is available here: /shortcuts/griffin2022situating\n\n HT\n This HTML presentation of my dissertation is modeled on a classmate's: Nick Doty. Enacting Privacy in Internet Standards. Ph.D. dissertation. Advisor: Deirdre K. Mulligan. University of California, Berkeley. 2020. https://npdoty.name/enacting-privacy\n \n", "snippet": "\n", "url": "/diss/", "snippet_image": "griffin2022situating.png", "snippet_image_alt": "image of griffin2022situating paper", "snippet_image_class": "paper_image" } , { "id": "courses", "type": "courses" , "date": "2023-05-25", "title": "Courses" , "tags": "", "content": "I designed and taught my own course at Michigan State University in Spring 2023: [Understanding Change in Web Search](/courses/s2023-LB322B)\n\n- [Course readings](/courses/s2023-LB322B.readings.html)\n- [Repairing Searching](/rs) (a continuation of the course, through posts tagged as repairing-searching)\n\n\n\nOther teaching: While at the UC Berkeley School of Information, I was a TA or co-instructor[^technically] for courses from Fall 2015 through Spring 2020:\n\n- [Information Organization and Retrieval](https://www.ischool.berkeley.edu/courses/info/202) w/ Bob Glushko (Fall 2015)\n- [Information Law and Policy](https://www.ischool.berkeley.edu/courses/info/205) w/ Leslie Harris (Spring 2016, 2018) and Deirdre Mulligan (Spring 2020)\n- [Technology and Delegation](https://web.archive.org/web/20201112031804/https://courses.ischool.berkeley.edu/i290-tpl/wiki/Technology_and_Delegation,_Fall_2019) w/ Deirdre Mulligan (Fall 2019).\n\nI also taught the summer intensive \"Python Boot Camp\" for incoming masters and PhD students in 2015, 2016, and 2018. I heavily adapted materials from [Corey Hyllested](https://www.ischool.berkeley.edu/people/corey-hyllested), who taught me Python (based around Allen B. Downey's [Think Python](https://greenteapress.com/wp/think-python-2e/)).\n\n_See also [CV](/cv) for a presentation of Teaching Experience._\n\n[^technically]: Variously technically referred to as \"Reader\" or \"Graduate Student Instructor\".", "snippet": "\n", "url": "/courses/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-inflection-ai-pi", "type": "pages" , "date": "", "title": "Inflection-AI-Pi tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Inflection-AI-Pi\" tag.\n \n\n\n{% assign tag_name = \"Inflection-AI-Pi\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Inflection-AI-Pi\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Inflection-AI-Pi\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/inflection-ai-pi/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-internet-archive-scholar", "type": "pages" , "date": "", "title": "Internet Archive Scholar tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Internet Archive Scholar\" tag.\n \n\n\n{% assign tag_name = \"Internet Archive Scholar\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Internet Archive Scholar\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Internet Archive Scholar\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/internet-archive-scholar/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-interviews-with-search-producers", "type": "pages" , "date": "", "title": "interviews-with-search-producers tag" , "tags": "", "content": "{% assign tag_name = \"interviews-with-search-producers\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"interviews-with-search-producers\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"interviews-with-search-producers\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/interviews-with-search-producers/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-introduction", "type": "diss" , "date": "2022-12-16", "title": "1. Introduction" , "tags": "[diss]", "content": "\n “Probably 90% of my job is Googling things,” Christina said. Then she chuckled.\n\n\n Amar, seemingly also amused, laughed as he said, “I’ve really never thought about it myself, even though it’s kind of like 90% of my job to just look things up.”\n\n\n And Noah, too, described searching the web as a central aspect of doing the work of a data engineer:\n\n\n\n If I found out that some coworkers were doing it a lot less than me, I would actually wonder if they weren’t doing their job as effectively as they could. Which is not to suggest that I’m the greatest googler3\n of all time. But I consider it a core of doing my job. You have to be able to search.\n \n\n\n The quotes above are from interviews conducted for this research. Christina, Amar, and Noah are data engineers.4\n They work in enterprise software, social media, and media streaming. Like many who write code, and all the data engineers that I talked with across a range of industries, they heavily rely on general-purpose web search engines to do their job.\n\n\n I take a close look—through interviews and digital ethnography—at this heavy reliance. How are they able to search? Does this work for them? How does it work for them? How do they learn to search the web as data engineers? Do they really “just google it”? Are their employers OK with this? What can we learn from their success?\n\n\n I do find that data engineers have generally been successful in making use of web search at work. I present this case not only of data engineers’ heavy reliance, but a successful heavy reliance. Though I do not suggest they are successful in every search or that every data engineer finds success in their ways of searching. Rather, I find data engineers’ work practices incorporate and facilitate searching the web and this contributes to successful work performance. So the practical success I describe, and seek to understand, is not determined by some solid ‘gold standard’ metrics or objective standpoint, but by how they have embraced web search and present it as useful (or at least a “satisfactory accomplishment”\n \n (Thompson, 1967)) and essential, with little complaint. It is success for their purposes: it works in gradations, located in practice, and relative to alternatives (see\n \n de Laet & Mol (2000)). My focus has not been on the boundary line of success or failure. My focus is on what data engineers do to make their use of search successful, success in their eyes.\n\n\n Why look at the use of general-purpose web search engines? People go to search engines to find out all sorta of information from the most mundane or trivial to the deeply significant. People use search engines as they seek to determine if they are pregnant\n \n (Kraschnewski et al., 2014), or to navigate unwanted pregnancy\n \n (Guendelman et al., 2022; Mejova et al., 2022), or pregnancy loss\n \n (Andalibi & Bowen, 2022; Andalibi & Garcia, 2021). People use search to find and make sense of health information\n \n (Mager, 2009), including whether to have their newborns receive the lifesaving Vitamin K shot\n \n (DiResta, 2018). People use search engines to learn about recycling programs\n \n (Haider, 2016) and sustainability\n \n (Haider et al., 2022). People use search engines to “fact check” the news\n \n (Tripodi, 2018) or to “just” google it\n \n (Toff & Nielsen, 2018). People use search engines to critique politicians\n \n (Gillespie, 2017) and to find which one to vote for\n \n (Mustafaraj et al., 2020). People use search engines for everyday life\n \n (Haider & Sundin, 2019) and to learn about things of the most pressing societal relevance\n \n (Sundin et al., 2021).\n\n\n Search engines shape the web—what we find and what people will write\n \n (Introna & Nissenbaum, 2000). But, web search is a relatively new technology. People continue to negotiate its role, map out its limitations, and imagine alternative designs and practices. I took up this research in the context of high profile failures of search engines and of those searching and discussions about how web search, or the people using it, might do better. Search engines promote racist and sexist representations of people\n \n (Dave, 2022; Noble, 2018; Urman & Makhortykh, 2022). Search engines sometimes lend credibility to false and hateful beliefs\n \n (Mulligan & Griffin, 2018). Search engines are manipulated to promote propaganda\n \n (Tripodi, 2022b).\n\n\n I should qualify some of my comments above. I use a sociotechnical lens, drawing on many approaches, to see searching as a product of the interplay between the technology and the people. Search engines, including the technology and the people managing and making it,\n \n and the people that use them\n \n do those things. Search engines and their uses are shared creations. People, at the search engines, the websites, the regulatory agencies and politicians offices, the newspapers and school house, and the searchers, together, make search engines what they are. People make or allow racist and sexist representations of others. People say or let others say, “Google told me so!”\n \n (Narayanan & De Cremer, 2022). People manipulate others or permit such manipulation. I follow others that point to how “search engines, and Google’s powerful position in particular, are negotiated and stabilized in social practices.”\n \n (Mager, 2012)\n\n\n This is a case study showing and analyzing successful web search practices. Rather than join the extensive literature documenting ways that web search engines are harmful, fail, are mistaken and misused, or abused, I describe where web search is made to work. I do not discuss how people should search the web in the abstract. I discuss how these people situated web search to be useful in their work.\n\n\n First, some complicating context. On the face of it, web search for data engineers is a private and solitary activity. Data engineers’ direct web search activity is generally not shared with peers, monitored or managed by their supervisors in performance evaluations, nor facilitated by special tools that might guide or correct them. The direct web search activity, which I will refer to as the ostensible web search, is not publicized or socialized. They are not applying their coding skills to their searching tasks. They are not sharing the data about their searching activity. Nor, it seems, are their managers surveilling their searching performance.\n\n\n For data engineers, the key ingredients in situating web search practices for success are:\n\n\n\n admitting searching as a tool appropriate for the work,\n \n\n practices for repairing fruitless searches,\n \n\n supporting query generation and results evaluation, and\n \n\n providing privacy for searching.\n \n\n\n These ingredients promote the situated learning of search and promote, rely on, and align with search as extended.\n\n\n What does it mean to say search is extended? Earlier work distinguished the search results and the results-of-search\n \n (Mulligan & Griffin, 2018). The search results are the ranked webpages, the snippets describing them, the advertisements, and the other content returned by the search engine for a query. The results-of-search are not the set of pages, but the results of the search itself. In the search breakdown described in\n \n (Mulligan & Griffin, 2018), where Holocaust-denier search pages ranked at the top for the query [did the holocaust happen], the results-of-search included “what searchers experience Google as communicating about those sites” (p. 571). This distinction was developed with reference to\n \n Bucher (2017)’s “algorithmic imaginary”—“ways of thinking about what algorithms are, what they should be, how they function and what these imaginations in turn make possible” (p. 39-40) and her use of\n \n Introna (2016)’s argument that “[t]he doing of the algorithm is constituted by the temporal flow of action and is not ‘‘in’’ the particular line of code, as such.” [pp. 21-22]. We can identify the immediate output of the search algorithms and the design of a search engine results page (SERP). But that is not, nor does it constitute, the result of the search.\n\n\n The observation that search is extended follows from the above, a straightforward consequence of using a sociotechnical lens (in my case, using the\n \n Mulligan & Nissenbaum (2020) Handoff analytic). To say that searching is\n \n extended\n \n (and extendable) refers to searching not being a singular or separable moment. The doing, or performance, of a web search includes the impetus to search, the generation of a query, the time and place to type, paste or speak the query into a search box and look at the search results, and the evaluation of results that continues long after the clicking, scrolling, and reading is finished. Looking at search as extended provides exploratory and explanatory advantages, as I will show.\n\n\n But there are some problems. While data engineers use of web search is central to the work and is generally successful, that does not mean that such searching has been solved5. The key problem is that some of the same factors that drive the successful use of search in data engineering work (namely, how search is admitted, how search failures are repaired, and privacy for searching) are perverted in some environments. In some companies, or pockets within, the acceptance of search is contorted to produce environments where data engineers are hesitant to openly ask questions and find themselves struggling and flailing about searching again and again in fear of being misjudged or mistreated for asking a question. The privacy that protects space to learn and stretch one’s knowledge is expanded to block effective collaboration within the company. These negative effects particularly shape the experience of those people already marginalized within technology work. The penchant for searching and privacy can become excessive, sometimes putting newcomers and women under suspicion for both not searching enough and for having to search all the time. This is an important part of the story, and the failure here is seen more keenly when the success is clearly explained.\n\n\n Background\n\n\n Here I will share the origins of this research while also introducing some of the research shaping my questions and my understanding of the importance of this topic.\n\n\n In a class in the fall of 2018, Professor Jenna Burrell talked about a moment of surprise that led her to consider and look for all the ways you could share a phone6. This led me to consider exploring how people share or share about search. I could look for the competing articulations of search, the claims of definition and legitimacy, in the “public dialogue”\n \n (Gillespie, 2014), in how they are “articulated, experienced and contested in the public domain”\n \n (Bucher, 2017, p. 40).\n\n\n Consequently, for a project in that class I looked, using Twitter search, for people talking about web search on Twitter. I stumbled on numerous accounts of people in coding roles discussing their heavy reliance on web search in their work. Many people made acclamations (though sometimes nervously) of the central role that general-purpose web searching played in their work. I had been looking for examples of people talking about and sharing searching and was struck. I wondered, if they seem to so successfully incorporate general-purpose web search into their work maybe I might look closer?\n\n\n Could I look at how these people in coding roles talked about and shared search to better understand what searching is and could be? Do they “just google it”? How does knowledge of the mechanisms of search inform their searching practices? How is responsibility assigned? I was initially interested in how individuals and organizations addressed the epistemic risks involved in such a reliance on web search7. Here was a group of people seemingly heavily reliant on web search. This same group might also have some better awareness of some of the difficulties in web search, and some of them might be able to marshal a range of responses.\n\n\n By marshaling of responses I imagined that people who wrote code for their work tasks might also write code to facilitate their searching-for-work tasks. Would I find examples of innovation from “lead users” grafted to web search engines to improve some aspect, like that discussed by\n \n Hippel (1988)? Was the technology flexible enough to permit such modifications, like that discussed in\n \n Leonardi (2011)?\n\n\n Starting in that final project in the winter of 2018, four years ago, I have explored the broad contours of of these questions about people who write code searching the web. All the while I was also coding myself. I have written Python code for personal or school projects since applying to the I School in 2014. I also taught the I School’s Summer Python Boot Camp for incoming graduate students for three years (including to seasoned programmers learning a new language). This document itself was produced with the aid of several scripting tools I’ve written and many code-related web searches.\n\n\n To gain tractability, I narrowed my focus to a subset of those who write code for work: data engineers.8\n I selected this site because it seemed likely to include people who were relatively technically sophisticated and it appeared to be a particularly dynamic field that would require a significant amount of learning on the fly, and so heavily reliant on search. Data engineers are also involved in constructing tools to control, replace, or surveil other people, practices, and tools. So they would likely be able to both refashion their tools and practices around search—if they saw that as beneficial—and be attentive if tools to control, replace, or surveil were directed at them.\n\n\n I saw them as perhaps more likely to have sophisticated understandings of the underlying technologies and and appreciation, perhaps, for the uses and misuses of data and automation built on or around it. This lead me to think it may be a particular valuable site to consider the role of technical literacy.\n\n\n The COVID-19 pandemic constrained my research approaches. I developed a plan to build on my prior work (informed by digital ethnography) with a study focused on in-depth interviewing of data engineers. I submitted my prospectus and passed my qualifying exam soon after my first son was born and took the next semester off. Then, in the summer of 2021, I started interviewing data engineers.\n\n\n Overview\n\n\n In\n \n Methods and Methodologies\n \n\n , I first introduce my two methodological frames for better understanding data engineer use of web search. I describe my use of the Handoff analytic (\n \n Mulligan & Nissenbaum (2020);\n \n Goldenfein et al. (2020)) and how it focused my attention on the larger and longer configurations of the sociotechnical systems—the extensions—of the data engineer web search practices, the various components and their modes of engagement, and with particular attention to how attending to the engagements between components reveal or make salient the practical achievements of the data engineers. Then I discuss the legitimate peripheral participation (LPP) analytic (\n \n Lave & Wenger (1991)) and how I use it to identify and understand the data engineering practices of situated learning. These frames, or lenses, help me recognize the role of various social and technical factors in the construction of successful uses of web search. I then discuss my methods. I describe how I developed this research site as multi-sited and networked. This methods section also covers my document analysis, interviewing, sampling and recruitment, coding and memoing, my attention to surprise and use of member checks. I close this chapter with reflections on my positionality and study limitations.\n\n\n There are then four analytical chapters, discussed below, followed by a conclusion.\n\n\n\n Admitting searching\n \n\n\n\n The first chapter discusses how data engineers come to learn how to search for work, with an application of the LPP analytic (\n \n Lave & Wenger (1991)). There are two core ideas. The first is a finding, an empirical observation that there is limited explicit instruction, discussion, demonstration, or collaboration in the moments of web search in data engineering. Given the minimal instruction, I looked for “search talk”, where data engineers might discuss their search queries, search result evaluation, or how they reformulate queries or follow links in pursuit of an answer. I do not find much “search talk” for new data engineers to learn from, rather, questions about it revealed how they see web search as a sensitive topic).\n\n\n I then describe a key type of\n \n talk about search\n \n that I do find: search confessions. This is the second core idea of this chapter, an argument. Search confessions are the self-deprecating (yet proud) or hyperbolic remarks data engineers make about their extensive reliance on web search and their web searching practices. I describe how these confessions legitimate their searching, shape norms of use, and direct others to also rely on web search. The informal nature of this legitimation, though, does not fully delineate appropriate use or the limitations of using web search for work. Search confessions also do not fully address perceptions that such reliance is a sign of weakness or is otherwise shameful. This limits the full inclusion of search into the workplace and affects organizations’ abilities to build inclusive learning environments.\n\n\n\n Extending searching\n \n\n\n\n Next, I turn to look at how the two analytic frames help see how the occupational, professional, and technical components of the work practices of data engineers effectively\n \n extend\n \n web searching to include activity well-before and -after the time the data engineer is in the search bar or on the search results page. This claim of a sociotechnical practice be extending is not unique, but it undergirds the two core arguments of this chapter. First, it is not that the data engineers know more about the technical mechanisms of search, but that their work tools and practices and domain expertise make search work for their work purposes. This stands in contrast to claims that appear throughout literature on search engines that views individual ignorance of search mechanisms as contributing to failed searches and search literacy as a necessary, if independently insufficient, path towards mitigating search failures.\n\n\n Second, the occupational, professional, and technical components, as extensions of web search, provide sites and activities for new data engineers to gradually increase participation in the search work of data engineers. Even though the search activity in the search box and on the search results page itself is not shared, the new data engineer can participate in the larger work practices that scaffold web search.\n\n\n I find this extension in looking at how data engineers engage in two core aspects of web search: (1) where their queries come from and (2) how they evaluate search results. The occupational, professional, and technical components provides scaffolding, or helpful guiding structure, for their web searching in both aspects and this scaffolding provides a significant supplement to their domain knowledge. I show how data engineers find some of their queries in the tools they use (in the names of the functions they are struggling with, or the exception messages returned when there is an error). While they have learned to often quickly evaluate which links on a results page are likely authoritative or helpful, they also engage in collaborative evaluation of search results with both their systems (running a test of the changes suggested from the search, building prototypes, automated testing) and peers (meetings and code review processes). In a supplementary finding from looking at how the components of the data engineer’s work interact, I identify how the data engineers larger work practices also provide ways of decoupling data engineering performance from potential issues introduced through web search, in cases where their search evaluation may fail. I also note how this success in searching is not all-encompassing and is limited to only some types of system qualities and does not include topics outside their direct remit (like ethical or legal aspects of the systems they are designing).\n\n\n\n Repairing searching\n \n\n\n\n The data engineers sometimes are not successful in their searches. I look at how data engineers repair failed searches. For the purposes of this chapter, failed searches are where the searcher does not find workable answers to their questions. Data engineers have developed practices, similar to those found elsewhere in coding work, for addressing such search failures. Building on the two prior chapters, the first core argument of this chapter is that these practices provide both additional\n \n talk about search\n \n , further legitimating it within their work, and opportunity for the learning data engineers to participate in extensions of web searching.\n\n\n While not focused on the search queries themselves or the moments of searching, the asking and answering of questions among colleagues provides a key opportunity for data engineers to learn about how each other search, including sometimes when, where, and for how long. The repair attempts involve carefully packaging questions, and answering them, in ways that are sensitive to respecting each other’s knowledge and place as experts in their field. Here I analyze these interactions around packaging questions, performing competence, and prompting renewed searching. This repair work, in addition to filling in where web search is not working for them, also provides teaching moments — discussing problem solving & searching writ large (as well as serving as a small site for coworkers to coordinate around what they each know or not).\n\n\n The second core argument of this chapter is that the search repair practices, as a whole, constitute the articulation work necessary to support such heavy reliance on web search. The search repair practices are a way to decouple from web searching itself, providing repairs necessary to retain such reliance.\n\n\n\n Owning searching\n \n\n\n\n The web search activity of data engineers remains solitary and private. In fact, the data engineers’ managers and employers do not seem to manage the search activity itself, despite its importance to the data engineers work and the extensive behavior trace data available. I did not find tracking of search records or technology-enabled management of the search activity. Why? In this chapter I develop a sustained argument building on two core findings. First, individual data engineers identify themselves as responsible for their web searching. Second, management has not pursued a strategy of technocratizing search, or the intentional application of technique to influence search activities themselves.\n\n\n I present data engineers describing their searching as solitary, speedy, and secret. Search is presented as done alone, apart from colleagues, and on one’s own, apart from the help of others. Search is hoped to provide a faster solution to problems than alternatives. Search activity itself is also done in secret and kept secret. I recount the lack of technocratization of search for the work of data engineers and discuss aspects of technocratization elsewhere in search. I then review a range of literature to make further sense of this, looking at the design and articulation of search engines as single-user tools and made to protect privacies, the history of “rugged individualism” in coding related fields (\n \n Ensmenger (2015)), and discuss norms of both generalized reciprocity and self-reliance in open source communities (norms and communities that overlap with many data engineers).\n\n\n I build a sustained argument from the analysis of the secrecy and seeming lack of ownership by the firm in the data engineers’ searching activity. To do so I appeal to both organizational theory related to learning and research on learning benefits of privacy. Organizations have distributed search responsibilities to individuals\n \n (Girard & Stark, 2002; Stark, 2009) and both “skilling up” and “keeping up” are the responsibilities of individual workers\n \n (Avnoon, 2021; Kotamraju, 2002; Neff, 2012). I analyze this as a strategic choice to pursue flexibility in the face of uncertainty (perhaps made mimetically\n \n (DiMaggio & Powell, 1983)9\n ). I argue this pursuit of flexibility and associated responsibility creates a feedback of solitary and secretive searching that, while perhaps generally successful, limits the learning of the organization, particularly the sort of inclusive learning necessary to welcome newcomers that are different from those data engineers in positions of power.\n\n\n So what?\n\n\n The conclusion looks at the eight core findings and arguments from the preceding chapters and highlights two further arguments developed across the chapters. While the general story of this research is an examination of the factors that support successful use of web search by data engineers, around each of those factors are two risks. There are risks to organizational search performance and an inclusive learning environment. First, while generally successful for their purposes the effectiveness of data engineering search practices are limited by the ambiguity of the search confessions, the taken-for-grantedness of web search and the occupational, professional, and technical components supporting it, and firms’ hands off approach to both search repair and responsibility for searching. Second, the silences and secrecies around search and the way search is framed as an individual responsibility can produce an unwelcome learning environment for new data engineers, limiting who makes effective use of web search and who learns to fully participate as data engineers.\n\n\n In the conclusion I develop reflections for practice, design, and research built on key takeaways and make an argument for why this research matters. The dissertation closes with an appeal for reimagining search. I suggest that if we can better see how searching the web is already shared, we might find ways to share it better.\n\n\n Bibliography\n\n\n\nAndalibi, N., & Bowen, K. (2022). Internet-based information behavior after pregnancy loss: Interview study.JMIR Form Res,6 (3), e32640. https://doi.org/10.2196/32640 \n\n\n\nAndalibi, N., & Garcia, P. (2021). Sensemaking and coping after pregnancy loss.Proc. ACM Hum.-Comput. Interact.,5 (CSCW1), 1–32. https://doi.org/10.1145/3449201 \n\n\n\nAvnoon, N. (2021). Data scientists’ identity work: Omnivorous symbolic boundaries in skills acquisition.Work, Employment and Society,0 (0), 0950017020977306. https://doi.org/10.1177/0950017020977306 \n\n\n\nBucher, T. (2017). The algorithmic imaginary: Exploring the ordinary affects of facebook algorithms.Information, Communication & Society,20 (1), 30–44. https://doi.org/10.1080/1369118X.2016.1154086 \n\n\n\nBurrell, J. (2010). Evaluating Shared Access: Social equality and the circulation of mobile phones in rural Uganda.Journal of Computer-Mediated Communication,15 (2), 230–250. https://doi.org/10.1111/j.1083-6101.2010.01518.x \n\n\n\nDave, P. (2022).Google cuts racy results by 30. Reuters. https://www.reuters.com/technology/google-cuts-racy-results-by-30-searches-like-latina-teenager-2022-03-30 \n\n\n\nDear, P. (2001). Science studies as epistemography.The One Culture, 128–141.\n\n\nde Laet, M., & Mol, A. (2000). The zimbabwe bush pump: Mechanics of a fluid technology.Social Studies of Science,30 (2), 225–263. https://doi.org/10.1177/030631200030002002 \n\n\n\nDiMaggio, P. J., & Powell, W. W. (1983). The iron cage revisited: Institutional isomorphism and collective rationality in organizational fields.American Sociological Review, 147–160.\n\n\nDiResta, R. (2018).The complexity of simply searching for medical advice. https://www.wired.com/story/the-complexity-of-simply-searching-for-medical-advice/ \n\n\n\nEnsmenger, N. (2015). “Beards, sandals, and other signs of rugged individualism”: Masculine culture within the computing professions.Osiris,30 (1), 38–65. http://www.jstor.org/stable/10.1086/682955 \n\n\n\nGillespie, T. (2014).The relevance of algorithms (T. Gillespie, P. J. Boczkowski, & K. A. Foot, Eds.; pp. 167–193). The MIT Press. https://doi.org/10.7551/mitpress%2F9780262525374.003.0009 \n\n\n\nGillespie, T. (2017). Algorithmically recognizable: Santorum’s google problem, and google’s santorum problem.Information, Communication & Society,20 (1), 63–80. https://doi.org/10.1080/1369118X.2016.1199721 \n\n\n\nGirard, M., & Stark, D. (2002). Distributing intelligence and organizing diversity in new-media projects.Environment and Planning A,34 (11), 1927–1949.\n\n\nGoldenfein, J., Mulligan, D. K., Nissenbaum, H., & Ju, W. (2020). Through the handoff lens: Competing visions of autonomous futures.Berkeley Tech. L.J.. Berkeley Technology Law Journal,35 (IR), 835. https://doi.org/10.15779/Z38CR5ND0J \n\n\n\nGuendelman, S., Pleasants, E., Cheshire, C., & Kong, A. (2022). Exploring google searches for out-of-clinic medication abortion in the united states during 2020: Infodemiology approach using multiple samples.JMIR Infodemiology,2 (1), e33184. https://doi.org/10.2196/33184 \n\n\n\nHaider, J. (2016). The structuring of information through search: Sorting waste with google.Aslib Journal of Information Management,68 (4), 390–406. https://doi.org/10.1108/AJIM-12-2015-0189 \n\n\n\nHaider, J., Rödl, M., & Joosse, S. (2022). Algorithmically embodied emissions: The environmental harm of everyday life information in digital culture.IR,27. https://doi.org/10.47989/colis2224 \n\n\n\nHaider, J., & Sundin, O. (2019).Invisible search and online search engines: The ubiquity of search in everyday life. Routledge. https://doi.org/https://doi.org/10.4324/9780429448546 \n\n\n\nHippel, E. (1988).The sources of innovation. Oxford University Press.\n\n\nIntrona, L. D. (2016). Algorithms, governance, and governmentality.Science, Technology, & Human Values,41 (1), 17–49. https://doi.org/10.1177/0162243915587360 \n\n\n\nIntrona, L. D., & Nissenbaum, H. (2000). Shaping the web: Why the politics of search engines matters.The Information Society,16 (3), 169–185. https://doi.org/10.1080/01972240050133634 \n\n\n\nKotamraju, N. P. (2002). Keeping up: Web design skill and the reinvented worker.Information, Communication & Society,5 (1), 1–26. https://doi.org/10.1080/13691180110117631 \n\n\n\nKraschnewski, J. L., Chuang, C. H., Poole, E. S., Peyton, T., Blubaugh, I., Pauli, J., Feher, A., & Reddy, M. (2014). Paging “dr. Google”: Does technology fill the gap created by the prenatal care visit structure? Qualitative focus group study with pregnant women.J Med Internet Res,16 (6), e147. https://doi.org/10.2196/jmir.3385 \n\n\n\nKruschwitz, U., Hull, C., & others. (2017).Searching the enterprise (Vol. 11). Now Publishers.\n\n\nLave, J., & Wenger, E. (1991).Situated learning: Legitimate peripheral participation. Cambridge university press. https://www.cambridge.org/highereducation/books/situated-learning/6915ABD21C8E4619F750A4D4ACA616CD#overview \n\n\n\nLeonardi, P. M. (2011). When flexible routines meet flexible technologies: Affordance, constraint, and the imbrication of human and material agencies.MIS Quarterly,35 (1), 147–167. http://www.jstor.org/stable/23043493 \n\n\n\nMager, A. (2009). Mediated health: Sociotechnical practices of providing and using online health information.New Media & Society,11 (7), 1123–1142. https://doi.org/10.1177/1461444809341700 \n\n\n\nMager, A. (2012). ALGORITHMIC ideology.Information, Communication & Society,15 (5), 769–787. https://doi.org/10.1080/1369118X.2012.676056 \n\n\n\nMejova, Y., Gracyk, T., & Robertson, R. (2022). Googling for abortion: Search engine mediation of abortion accessibility in the united states.JQD,2. https://doi.org/10.51685/jqd.2022.007 \n\n\n\nMulligan, D. K., & Griffin, D. (2018). Rescripting search to respect the right to truth.The Georgetown Law Technology Review,2 (2), 557–584. https://georgetownlawtechreview.org/rescripting-search-to-respect-the-right-to-truth/GLTR-07-2018/ \n\n\n\nMulligan, D. K., & Nissenbaum, H. (2020).The concept of handoff as a model for ethical analysis and design. Oxford University Press. https://doi.org/10.1093/oxfordhb/9780190067397.013.15 \n\n\n\nMustafaraj, E., Lurie, E., & Devine, C. (2020). The case for voter-centered audits of search engines during political elections.FAT* ’20.\n\n\nNarayanan, D., & De Cremer, D. (2022). “Google told me so!” On the bent testimony of search engine algorithms.Philos. Technol.,35 (2), E4512. https://doi.org/10.1007/s13347-022-00521-7 \n\n\n\nNeff, G. (2012).Venture labor: Work and the burden of risk in innovative industries. MIT press. https://mitpress.mit.edu/books/venture-labor \n\n\n\nNoble, S. U. (2018).Algorithms of oppression how search engines reinforce racism. New York University Press. https://nyupress.org/9781479837243/algorithms-of-oppression/ \n\n\n\nStark, D. (2009).The sense of dissonance: Accounts of worth in economic life. Princeton University Press.\n\n\nSundin, O., Lewandowski, D., & Haider, J. (2021). Whose relevance? Web search engines as multisided relevance machines.Journal of the Association for Information Science and Technology. https://doi.org/10.1002/asi.24570 \n\n\n\nThompson, J. D. (1967).Organizations in action: Social science bases of administrative theory (1st ed.). McGraw-Hill.\n\n\nToff, B., & Nielsen, R. K. (2018). “I Just Google It”: Folk Theories of Distributed Discovery.Journal of Communication,68 (3), 636–657. https://doi.org/10.1093/joc/jqy009 \n\n\n\nTripodi, F. (2018). Searching for alternative facts: Analyzing scriptural inference in conservative news practices.Data & Society. https://datasociety.net/output/searching-for-alternative-facts/ \n\n\n\nTripodi, F. (2022b).The propagandists’ playbook: How conservative elites manipulate search and threaten democracy (Hardcover, p. 288). Yale University Press. https://yalebooks.yale.edu/book/9780300248944/the-propagandists-playbook/ \n\n\n\nUrman, A., & Makhortykh, M. (2022). “Foreign beauties want to meet you”: The sexualization of women in google’s organic and sponsored text search results.New Media & Society,0 (0), 14614448221099536. https://doi.org/10.1177/14614448221099536 \n\n\n\n\n\n\n\n While “Googler” is sometimes used to refer to Google employees, it is also commonly used, rendered here in lowercase, to refer to someone who uses Google or other search engines. ↩︎ \n\n\n\n All names of my research participants are pseudonyms. ↩︎ \n\n\n\n\n Kruschwitz et al. (2017) use the “solved” language in the opening line of the abstract to their book on enterprise search: “Search has become ubiquitous but that does not mean that search has been solved.” ↩︎ \n\n\n\n This surprise led to Burrell (2010) . ↩︎ \n\n\n\n The epistemic risk is meant to convey risk in relation to beliefs or ways of believing not to prescriptivist epistemology (see Dear (2001) on epistemography). The phrasing above might be better termed the risks in the ways knowing; the costs and consequences in different cognitive practices entangled in search. My initial interest was not on finding, or determining whether one found, truth. I was focused on the larger effects from the various ways in which search is used by people to come to know or to believe or to perform a knowledge or skill. ↩︎ \n\n\n\n This choice is discussed further in [Methods and Methodology]. ↩︎ \n\n\n\n As DiMaggio & Powell (1983) argue [p. 151]: “Modeling” after, or mimicry of, other organizations “is a response to uncertainty.” ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/introduction/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "assets-item-index-json", "type": "pages" , "date": "", "title": "assets/item_index.json" , "tags": "", "content": "{% assign index_title_only_list = \"feed-xml\" | split: \",\" %}\n\n[\n{% for post in site.posts %}\n {% assign id = post.url | slugify %}\n {\n \"id\": \"{{ post.url | slugify }}\",\n \"type\": \"posts\",\n \"title\": \"{{ post.title | xml_escape }}\",\n \"author\": \"{{ post.author | xml_escape }}\",\n \"date\": \"{{ post.date | xml_escape }}\",\n \"category\": \"{{ post.categories | xml_escape | replace: '"', '' }}\",\n \"tags\": \"{{ post.tags | xml_escape | replace: '"', '' | replace: '-', '' }}\",\n \"boosts\": \"{{ post.boosts | xml_escape }}\",\n {% unless index_title_only_list contains post.id or post.index_title_only %}\n \"content\": {{ post.content | markdownify | strip_html | replace: '\\n', ' ' | jsonify }},\n {% endunless %}\n \"url\": \"{{ post.url | xml_escape }}\",\n \"hand_curated_snippet\": \"{{ post.hand_curated_snippet }}\",\n \"generated_snippet\": {{ site.data.generated-snippets[id] | jsonify }}\n }\n ,\n{% endfor %}\n{% if site.posts.size > 0 and site.pages.size > 0 %}{% endif %}\n{% for page in site.pages %}\n {% if page.lunrjs != 'noindex' and page.layout != 'none' %}\n {% if forloop.first and site.posts.size > 0 %}{% endif %}\n {% assign id = page.url | slugify %}\n {% assign non_index_ids = \"redirects-json,js-similars-js,tweets-searching-entangled-and-enfolded-html,tweets-postcolonial-localization-in-search-html,robot-txt,sitemap-xml,js-kbd-hints-js\" | split: \",\" %}\n {% if non_index_ids contains id %}\n {% continue %}\n {% endif %}\n {\n \"id\": \"{{ page.url | slugify }}\",\n \"type\": \n {% if page.url contains 'diss/' %}\n \"diss\"\n {% elsif page.url contains 'shortcuts/' %}\n \"shortcuts\"\n {% elsif page.url contains 'courses/' %}\n \"courses\"\n {% elsif page.url contains 'tags/' %}\n \"tags\"\n {% else %}\n \"pages\"\n {% endif %},\n \"date\": \"{{ page.date | xml_escape }}\",\n \"title\": \n {% if id == \"feed-xml\" %}\n \"feed.xml\"\n {% elsif id == \"redirects-json\" %}\n \"redirects.json\"\n {% else %}\n \"{{ page.title | xml_escape }}\"\n {% endif %},\n \"boosts\": \"{{ page.boosts | xml_escape }}\",\n \"tags\": \"{{ page.tags | xml_escape | replace: '"', '' | replace: '-', '' }}\",\n {% unless index_title_only_list contains page.id or page.index_title_only %}\n \"content\": {{ page.content | markdownify | strip_html | replace: '\\n', ' ' | jsonify }},\n {% endunless %}\n \"url\": \"{{ page.url | xml_escape }}\",\n \"hand_curated_snippet\": \"{{ page.hand_curated_snippet }}\",\n \"generated_snippet\": {{ site.data.generated-snippets[id] | jsonify }}\n }\n {% unless forloop.last %},{% endunless %}\n {% endif %}\n{% endfor %}\n{% for external in site.data.external_pages %}\n {% if forloop.first and site.pages.size > 0 %},{% endif %}\n {\n \"id\": \"{{ external.url | slugify }}\",\n \"type\": \"{{ external.type }}\",\n \"date\": \"{{ external.date }}\",\n \"title\": \"{{ external.title }}\",\n \"boosts\": \"{{ external.boosts }}\",\n \"tags\": \"{{ external.tags | xml_escape | replace: '"', '' | replace: '-', '' }}\",\n \"content\": {{ external.content | strip_html | strip_newlines | jsonify }},\n \"url\": \"{{ external.url }}\",\n \"hand_curated_snippet\": \"{{ external.hand_curated_snippet }}\",\n \"generated_snippet\": {{ external.snippet | jsonify }}\n }\n {% unless forloop.last %},{% endunless %}\n{% endfor %}\n]\n\n\n\n", "snippet": "\n", "url": "/assets/item_index.json", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-just-google-it", "type": "pages" , "date": "", "title": "just-google-it tag" , "tags": "", "content": "{% assign tag_name = \"just-google-it\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"just-google-it\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"just-google-it\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/just-google-it/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-kagi", "type": "pages" , "date": "", "title": "Kagi tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Kagi\" tag.\n \n\n\n{% assign tag_name = \"Kagi\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Kagi\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Kagi\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/kagi/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-kbd-hints-js", "type": "pages" , "date": "", "title": "" , "tags": "", "content": "// kbd hints are set in _includes/kbd-hints.html and used in _includes/sc-search.html\n// kbd shortcuts for search-bar are set in _layouts/search-centric.html\n// navigate_results_hint is set in js/search/serp.js\n// navigate_suggestions_hint & close_suggestions_hint are set in js/search/suggestions.js & js/search/autocomplete.js\n// mobile-responsiveness is controlled in css/main.css\n// Note: All hints starts with d-none\n\nvar searchBox = document.getElementById('search-box');\nconst kbdHints = document.getElementById('kbd-hints');\nconst jumpToSearchHint = document.getElementById('jump-to-search-hint');\nconst selectSearchHint = document.getElementById('select-search-hint');\n\n// Check if the user is on a Mac or not\nif (navigator.userAgent.indexOf('Mac OS X') !== -1) {\n // If on Mac, add class 'mac' to the 'kbd-hints' element\n kbdHints.classList.add('mac');\n} else {\n // If not on Mac, add class 'pc' to the 'kbd-hints' element\n kbdHints.classList.add('pc');\n}\n\n// Listen for focus and blur events\nsearchBox.addEventListener('focus', function () {\n jumpToSearchHint.classList.add('d-none');\n});\n\nsearchBox.addEventListener('blur', function () {\n jumpToSearchHint.classList.remove('d-none');\n});\n\n\n// Add jumpToSearchHint if (1) classlist contains d-none, (2) there is any movement from mouse or keys, and (3) not searchBox focus.\nfunction displayHints() {\n searchBarLinks.classList.remove('invisible');\n if (jumpToSearchHint.classList.contains('d-none')) {\n if (searchBox !== document.activeElement) {\n jumpToSearchHint.classList.remove('d-none');\n }\n }\n}\n\ndocument.addEventListener('keydown', displayHints);\ndocument.addEventListener('mousemove', displayHints);\ndocument.addEventListener('touchstart', displayHints);\n\n\n// Check if there is a value in the search box on page load\n if (searchBox.value.length > 0) {\n selectSearchHint.classList.remove('d-none');\n}\n\n// Listen for input events\nsearchBox.addEventListener('input', function () {\n if (searchBox.value.length > 0) {\n selectSearchHint.classList.remove('d-none');\n } else {\n selectSearchHint.classList.add('d-none');\n }\n});\n", "snippet": "\n", "url": "/js/kbd_hints.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-keyword-request", "type": "pages" , "date": "", "title": "keyword request tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"keyword request\" tag.\n \n\n\n{% assign tag_name = \"keyword request\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"keyword request\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"keyword request\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/keyword-request/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-keyword-search", "type": "pages" , "date": "", "title": "keyword search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"keyword search\" tag.\n \n\n\n{% assign tag_name = \"keyword search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"keyword search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"keyword search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/keyword-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-knowledge-cutoffs", "type": "pages" , "date": "", "title": "knowledge-cutoffs tag" , "tags": "", "content": "{% assign tag_name = \"knowledge-cutoffs\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"knowledge-cutoffs\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"knowledge-cutoffs\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/knowledge-cutoffs/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-local-search", "type": "pages" , "date": "", "title": "local-search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"local-search\" tag.\n \n\n\n{% assign tag_name = \"local-search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"local-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"local-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/local-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-localization-technologies", "type": "pages" , "date": "", "title": "localization technologies tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"localization technologies\" tag.\n \n\n\n{% assign tag_name = \"localization technologies\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"localization technologies\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"localization technologies\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/localization-technologies/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-lunr-js", "type": "pages" , "date": "", "title": "Lunr.js tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Lunr.js\" tag.\n \n\n\n{% assign tag_name = \"Lunr.js\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Lunr.js\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Lunr.js\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/lunr-js/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-lunr-js", "type": "pages" , "date": "", "title": "Lunr.js tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Lunr.js\" tag.\n \n\n\n{% assign tag_name = \"Lunr.js\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Lunr.js\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Lunr.js\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/lunr.js/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-lunrish-js", "type": "pages" , "date": "", "title": "" , "tags": "", "content": "// The base URL for the search service\nconst baseLunrishURL = '{{ site.baseLunrishURL }}';\n\n// Toggle manual param setting for testing failure\nlet triggerFailure = false;\n\nwindow.searchLunrish = function (query) {\n const TIMEOUT = 5000; // Set your timeout value (in milliseconds)\n\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Request timed out')), TIMEOUT);\n });\n\n console.log('Making fetch request to:', baseLunrishURL + encodeURIComponent(query)); // Log the URL and query\n\n\n const fetchPromise = fetch(baseLunrishURL + encodeURIComponent(query))\n .then(response => {\n if (triggerFailure) {\n throw new Error(`Intentionally triggering failure in Lunrish...`);\n }\n if (!response.ok) {\n throw new Error(`Server responded with status: ${response.status}`);\n }\n return response.json();\n })\n .then(data => {\n return data; // The parsed result from your EC2 service\n })\n .catch(error => {\n if (error.message.includes('CORS')) {\n console.error(\"CORS error occurred: \", error);\n // Call function to perform client-side search\n return fetchClientData(query); // Assuming fetchClientData is defined\n } else {\n console.error('There was a problem with the fetch operation:', error.message);\n throw error; // Rethrow the error if it's not a CORS error\n }\n });\n\n return Promise.race([fetchPromise, timeoutPromise]);\n}", "snippet": "\n", "url": "/js/search/lunrish.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-lunrish", "type": "pages" , "date": "", "title": "Lunrish tag" , "tags": "", "content": "{% assign tag_name = \"Lunrish\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Lunrish\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Lunrish\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/lunrish/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-marginalia-search", "type": "pages" , "date": "", "title": "Marginalia-Search tag" , "tags": "", "content": "{% assign tag_name = \"Marginalia-Search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Marginalia-Search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Marginalia-Search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/marginalia-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "media", "type": "pages" , "date": "2023-10-11 15:24:38 -0700", "title": "Media Mentions" , "tags": "", "content": "\n\n\nChatbot Hallucinations Are Poisoning Web Search\nAuthor: Will Knight | Date: Oct 05, 2023 | Publication: Wired\nGriffin says he hopes to see AI-powered search tools shake things up in the industry and spur wider choice for users. But given the accidental trap he sprang on Bing and the way people rely so heavily on web search, he says “there's also some very real concerns.”\nFor context, see this article\n\n\n\n\n\nEven Google Insiders Are Questioning Bard AI Chatbot’s Usefulness\nAuthor: Davey Alba | Date: Oct 11, 2023 | Publication: Bloomberg\nDaniel Griffin, a recent Ph.D. graduate from University of California at Berkeley who studies web search and joined the Discord group in September, said it isn’t uncommon for open source software and small search engine tools to have informal chats for enthusiasts. But Griffin, who has written critically about how Google shapes the public’s interpretations of its products, said he felt “uncomfortable” that the chat was somewhat secretive. The Bard Discord chat may just be a “non-disclosed, massively-scaled and long-lasting focus group or a community of AI enthusiasts, but the power of Google and the importance of open discussion of these new tools gave me pause,” he added, noting that the company’s other community-feedback efforts, like the Google Search Liaison, were more open to the public.\nA thread from the author, Davey Alba\nA thread from me\n\n\n", "snippet": "\n", "url": "/media/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-meno-paradox", "type": "pages" , "date": "", "title": "Meno-Paradox tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Meno-Paradox\" tag.\n \n\n\n{% assign tag_name = \"Meno-Paradox\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Meno-Paradox\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Meno-Paradox\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/meno-paradox/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-metaphor-systems", "type": "pages" , "date": "", "title": "Metaphor-Systems tag" , "tags": "", "content": "{% assign tag_name = \"Metaphor-Systems\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Metaphor-Systems\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Metaphor-Systems\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/metaphor-systems/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-methods-and-methodologies", "type": "diss" , "date": "2022-12-16", "title": "2. Methods and Methodologies" , "tags": "[diss]", "content": "\n Where does one go to see web searching happen, to see web searching at work? One could try to peer into tools used for indexing, the algorithms for ranking, the work of the humans rating the quality of the search results, or the design of the SERP. One could try to gain access to search logs, recording the inputs, SERPs, and the clicks. One could use a browser extension or similar software to monitor not only the activity on the search page but also the interactions and time spent on pages after that. One could observe, in-person or using virtual tools, as people go about work which might sometimes include searching. One could create exercises in a lab, track search and browsing activity, watch people, and probe them with questions. One could look at what people who are trying to be found on search engines say and do. One could sit a group of people together to talk about how they use search. Or send out surveys. Or use identified harms, failures, complaints, or others signs of breakdown as an opportunity to see more of search in an infrastructural inversion\n \n (Bowker, 1994).\n\n\n The answer depends on how one initially imagines web searching. The above examples all provide some access to only a slice of web searching activity. Depending on what one wants to know about web searching, that may be enough. From the outset I took web searching to be a situated practice and wanted to understand how and why people search the ways they do. This is still only a slice, but the sort of web searching that I was interested involved people using web search engines. People search the web. These people have histories and contexts of action that shape how they imagine and use the search engines. People search the web within other, interconnected, practices. I took that “baseline conceptual identity” and made choices that defined (or constructed) my object of study\n \n (Marcus, 1995, pp. 105–106).\n\n\n People sometimes use secondary machines to input queries or retrieve results for web searches on search engines. For instance, the\n \n WebSearcher\n \n tool built by search researcher Ronald Robertson\n \n (Robertson, 2022)(used in\n \n Lurie & Mulligan (2021)),\n \n SerpApi\n \n (a company that provides APIs (application programming interfaces) for scraping results pages from a variety of search engines, used in\n \n Zade et al. (2022). There are libraries for different programming languages10\n and various tools for searching within the command-line such as googler11. There are plugins for text editors12\n and integrated development environments (IDEs)13. Or the secondary machine might be something as simple as a web browser that supports searching a highlighted portion of text through a right-click context menu.\n\n\n Web search practices are not monolithic14. “Just google it” refers to any number of routines used in many contexts. I sought to better understand web searching, with its variations in practice and effect, by looking at the constituent components of the larger sociotechnical practice and their configurations. To do this I relied on two analytical frameworks: “Handoff”\n \n (Goldenfein et al., 2020; Mulligan & Nissenbaum, 2020) and legitimate peripheral participation\n \n (Lave & Wenger, 1991).\n\n\n The Handoff analytical lens\n\n\n “Handoff is a lens for political and ethical analysis of sociotechnical systems”\n \n (Goldenfein et al., 2020). I use the theoretical framework of ‘Handoff’ to guide my methodological approach and as an analytical lens. Handoff, or the “Handoff Model” was developed for “analyzing the political and ethical contours of performing a function with different configurations of human and technical actors”\n \n (Goldenfein et al., 2020). It “disrupts the idea that if components of a system are modular in functional terms, replacing one with another will leave ethical and political dimensions intact.”\n \n (Mulligan & Nissenbaum, 2020)\n\n\n What does a system do? How? So what? The Handoff analytic looks at sociotechnical systems. The functions of that system (what it does) are distributed across different actors or components15\n (how it does it). These components include people, software, physical objects, laws, and norms. These act on or engage each other in the performance of some function. These different modes of engaging may include force or perceptions of affordance16. A Handoff is where a function of a system is shifted from one component to another.17\n The system is transformed even if it may be said to achieve the same functional goals. Some transformations may alter the achievement or protection of important values. The Handoff analytic can be used to focus attention on the components and their modes of acting on each other, for “exposing aspects of systems that change in the wake of such replacements,” and illuminating those aspects and changes “that may be relevant to the configuration of values embodied in the resulting systems”\n \n (Mulligan & Nissenbaum, 2020). The Handoff analytic helps identify the redistribution of functions when sociotechnical systems are reconfigured. As\n \n Mulligan & Nissenbaum (2020) write:\n\n\n\n It may be that transformed systems embody more positive values, but it may be that replaced components, even performing purportedly the same task, lead to a degradation— such as, dissipated accountability, diminished responsibility, displacement of human autonomy, or acute threats to privacy.\n \n\n\n I have been thinking with this lens since summer meetings in 2017 and 2019 as part of the Handoff team18. My initial search research\n \n (Mulligan & Griffin, 2018) was shaped by conversations in that first meeting. In the second meeting our conversations took on another search topic, the changed configurations of scholarly systems for search and evaluation in what became\n \n Goldenfein & Griffin (2022). While the latest formulation is in\n \n Mulligan & Nissenbaum (2020), I regularly referred also to an earlier working paper,\n \n Goldenfein et al. (2019)(presented at the WeRobot conference), which exposed the consequences of different configurations of imagined larger sociotechnical futures of autonomous vehicles.19\n I also looked to its use by Nick Doty, examining Handoffs in HTTPS and Do Not Track, and Richmond Wong, showing design workbooks as prompts for reflections on Handoffs and investigating responsibility in user experience professionals’ “values work” practices, in their respective dissertations\n \n (Doty, 2020; Wong, 2020). I also taught the framework in a class on Technology and Delegation (with Deirdre Mulligan) in 2019 and a Values Tools Workshop (for students in the School of Information to work through identifying implications for potential social values & ethics in their final projects) in early 2020.\n\n\n Data engineers search the web at work within and across sociotechnical systems—they are also components of their firms and the field of data engineering. The various web search engines are sociotechnical systems, as is the World Wide Web they index. Data engineers use an assortment of tools within their work. Web search itself is a component of systems that people direct to, or hope might, achieve or maintain societal values such as privacy, autonomy, and responsibility.\n \n Van Couvering (2007) critiques web search engines for not advancing (and even degrading) values—or “quality goals”—such as objectivity, fairness, diversity, and representation (see also\n \n (Noble, 2018)).\n \n Tripodi (2022b) implicates web search engines as being manipulated by powerful actors spreading propaganda.\n \n Goldenfein & Griffin (2022) argues that the introduction of Google Scholar into the larger systems of scholarly search and evaluation disrupts academic autonomy. Some have suggested web search engines should or try to pursue “societal relevance”, rather than system or user relevance (\n \n Haider & Sundin (2019);\n \n Sundin et al. (2021)).\n \n Ochigame (2020) argues for the pursuit of liberatory values. (This list of values and accomplishments or disruptions is not exhaustive.)\n\n\n I use the Handoff analytic in my research to look at how people, and other components, perform web search, and to “scrutinize”\n \n (Goldenfein et al., 2020) alternative configurations. I narrowly look at how data engineers make web search work for them, focused on the functions that support them in accomplishing their work. There are values implicated in that, like responsibility and autonomy. I also look at dignity (how data engineers are treated, how they feel doing this work) and diversity (who web search is made to work for).\n\n\n The Handoff analytic informed my research design and analysis. I do not develop a comparative study of the transformation from data engineering search work prior to web search engines to after. I use the analytic to explore searching with general-purpose web search engines, with different data engineers engaged within slightly different configurations. But I retained an appreciation for how the introduction of web search was a significant transformation. My document analysis disclosed how engineers and coders in the past searched with more emphasis on reference manuals, mailing lists, and circulars. Retired engineers would tell of their reliance on\n man\n pages20\n or the large volumes stored in their workplaces. While I did not focus my interviews on these reconfigurations, the shifts suggested by such changes—including the values of responsibility, community, security, and learning—stayed on my mind. I used hints of this broader shift to defamiliarize web search for me\n \n (Bell et al., 2005) and to help me look for the various components, functions, and implicated values. How might we think about the fact that employees are going to a general pool of resources and bringing code and ideas back to the firm without that errand closely monitored or managed? Wouldn’t these firms want to know about information entering the organization?21\n\n\n The analytic also shaped my findings. I will not try to present the findings anew here, but present only very high-level connections. The first analytical chapter looks at how data engineers make it clear to each other that they are allowed and expected to rely on web search. This is communicated despite the limited access people have of others searching. How are perceptions of affordance constructed? The second looks at how component actors engage with one another in revealing what they do not know. These engagements are conducted in a performance where people attempt to communicate that they have taken appropriate responsibility and that they are prepared to receive and effectively make use of information from others. These engagements often take place in forums that permit searching and publicity, attributes that shape perceptions of possibility and punishment. The finding in the third chapter—that the functional achievements of search are the product of sociotechnical accomplishments—stems from a direct application of Handoff to the descriptions of the various components and engagements provided by the research participants. The final analytical chapter deals directly with imagined or missing alternative configurations of search.\n\n\n The Handoff analytic provides a complement to the situated learning framework and the legitimate peripheral participation analytic presented in\n \n Lave & Wenger (1991)(see next section), providing concepts to advance analytical applications of the latter towards learning in or about sociotechnical systems.\n\n\n The LPP analytic perspective\n\n\n The legitimate peripheral participation (LPP) analytic, developed by Lave and Wenger following an attempt “rescue the idea of\n \n apprenticeship\n \n ”[emphasis in the original] and to “clarify the concept of situated learning”, views “learning is an integral and inseparable aspect of social practice”\n \n (1991, p. 31).22\n\n\n Lave and Wenger draw heavily on studies of apprenticeship, and pointedly not on formal schooling23\n , in understanding and explicating situated learning. A chapter titled “Midwives, Tailors, Quartermasters, Butchers, Nondrinking Alcoholics” presents five ethnographic studies of apprenticeship. They use these cases to explicate and demonstrate the LPP analytic.\n\n\n They argue “learning is not merely situated in practice, but is”an integral part of generative social practice in the lived-in world\" and the goal of their book, “the central preoccupation” is to present “legitimate peripheral participation” as not just a descriptor but an analytic (p. 35). LPP engages with “belonging” (p. 35), “relations of power” (p. 36), and “peripherality in both negative and positive senses” (p. 37).\n\n\n I had many times discussed LPP in classes (particularly with Paul Duguid), read articles making use of it, watched it presented in teaching training workshops, and referred to it in my own mentorship.24\n In a manner perfectly predictable with the analytic itself, my understanding of it immeasurably increased as I worked to apply it within this research. I looked closely for example at the applications made by others, like the books and dissertations of former PhD students from my program\n \n (Mathew & Cheshire, 2018; Takhteyev, 2012). Only once I started writing, engaging with\n \n Beane (2019)’s (referring also to his dissertation—\n \n Beane (2017)) critique of LPP and reading and listening closely to the language in Lave and Wenger’s book could I say that I had learned how to apply it.\n\n\n Methods\n\n\n To explore the web searching of data engineers with those two lenses, I developed a multi-sited\n \n (Marcus, 1995), networked ethnographic study. I used semi-structured in-depth interviews, subject to interpretive analysis, as well as document analysis. Conducting multi-sited interviews allowed me to talk with people in data engineering or adjacent roles in a variety of companies. Multi-sited document analysis allowed me to observe people discuss or document web searches or web searching in many places online. I started collecting and analyzing documents in December 2018. I started interviewing in June 2021.\n\n\n Multi-sited and networked\n\n\n I “followed”\n \n (Marcus, 1995), or traced, data engineer web search practices. I followed data engineers as they moved through different roles and reconfigurations of coder web search. I set out to follow the things—the web search engines themselves perpetually redesigned in code and reconfigured in the practices of searches; the search queries as refined and rejected; the search results as justified or used to justify. I followed the people as they learned of, used, and reflected on the tools they used, the search queries and the search engines. I followed the conflicts where data engineers wield web search as a weapon or wonder if its use was a sign a weakness.\n\n\n I drew on tactics from those who study algorithms and who see the performance of the algorithms as involving much more than the code itself\n \n (Bucher, 2017; Christin, 2017; Introna, 2016). One difficulty with studying algorithms in the wild is that the code itself can be hard to see. My focus was not on the code or the software or the algorithms, but practices of web search. Like algorithms, web search can also be hard to see. Web search is sometimes mundane and forgotten, opaque and invisible\n \n (Haider & Sundin, 2019; Sundin et al., 2017). So I made use of what\n \n Christin (2017)25\n calls “a somewhat oblique strategy” and describes as “refraction ethnography”. If we picture light refracted by the prism, we can imagine we might learn something about the prism by looking at the light. In Christin’s case, we might learn something about the algorithms by looking at how organizations and people act around them. This is very similar to “scavenging ethnography” useful for studying “obscure objects” and finding where they “manifest.”\n \n (Seaver, 2017, pp. 6–7). Seaver writes that “the scavenger replicates the partiality of ordinary conditions of knowing— everyone is figuring out their world by piecing together heterogeneous clues.” I followed, scavenging for tracks, the “technological artifacts” of web search and the material-discursive practice of coder web search “as they circulate[d] through institutional sites and epistemic networks”. Christin “focuse[d] on how algorithms are refracted through organizational forms and work practices” in web journalism and critical justice. I attended to how the various algorithms imagined and implicated in coder web search are refracted through not only the work practices of data engineers, but how they are refracted as forms that organize their labor (as structures for the work practices and aids in navigating both capital and collective configurations of coder web search).\n\n\n\n Burrell (2009) provides steps for field construction that support such following—following the people and things through refractions. I identified “entry points” while seeking to “maintain[] a concentrated engagement with the research topic” (pp. 190-191) and “consider[ed] multiple types of networks” (p. 191). Entry points included mentions of web search in relation to software engineering or coding work (and so many other mentions of web search). I’d find a popular tweet about coding work and search and read the replies, see links within to blog posts, and then find those blog posts discussed further on forums.26\n Or the replies would have stock phrases that I could search in turn. I’d search these on Twitter, Reddit, or a web search engine. One could enter into at any number of points and be sent around from one social media platform to a forum then a Q&A website, followed by a blog, and back again. This was a “traveling through” (\n \n Burrell (2012), pp. 32-33). These webs spanned decades, linking patterned jokes, questions, and articulations about search together. I had saved searched on the Twitter app on my phone. I would use idle time to search out new mentions of googling, though my Twitter feed—informed by my curation and constant engagement—also might offer the repetitive jokes and confessions of searching. Better were my friends and colleagues who would send examples they saw my way.\n\n\n Another set of entry points were the questions and answers on websites like Stack Overflow, or the issues raised in GitHub repos or Slack27\n workspaces for tools used by data engineers. I saw patterns very similar to those mentioned by my interviewees, or depicted in the screenshots they shared. Then also the tutorials, blogged reflections, and formal training materials on tools and strategies for data engineers. I reviewed them for topics related to web search (and its alternatives) and to immerse myself in the language of the tools and the contexts my research participants discussed. These entry points were always partial and they “did not fully contain,” even when viewed in composite, “the social phenomena under study”\n \n (Burrell, 2012, p. 32)–though scavenging and refraction anticipates that. These entry points, though, provided access to the people I would talk to, the words and tools and jokes they used, and let me observe others like them interacting. These overlapping and interlinked networks did not let me observe or question data engineers as they input a query or made sense of a SERP, but they did let me see how web search in the work of data engineers is so much more than that.\n\n\n I also make space for the “[i]magined spaces” or “speculative imagination” depicted or disclosed by the words and actions of research participants and coders engaging publicly online (pp. 193-194). One such place is the imagined Google,\n \n Takhteyev (2007), in his ethnographic work on Brazilian software developers, noted that “the Google campus” “serve[d] as a source of tremendous symbolic power” and was “the single most important place in the imagination of the developers” [p .5]. With my training in scenario thinking, and following the examples in the presentations of the Handoff analytic\n \n (Goldenfein et al., 2020; Mulligan & Nissenbaum, 2020) and\n \n Noble (2018)’s comments on imaginings28\n , I attended closely to suggestions of alternatives ways of searching or alternative designs of work or the search engine.\n\n\n In my field construction, I “lack the “deep hanging out”\"\n \n (Dunbar-Hester, 2020, p. 25) and did not pursue “total immersion.” I did not gain access to proper sites of work to observe or gain employment to participant fully in the work myself. But I followed the “driving logic” of field work: “that we can gain analytic insight by inserting ourselves in the social milieu of those we seek to understand”\n \n (Coleman, 2012, p. 5). But, over the four years since first collecting and analyzing the documents on coders searching the web, I have been engaged—in an ethnographically-informed and digitally-enabled way—in the host of activities imagined of fieldwork: “participating, watching, listening, recording, data collecting, interviewing, learning different languages, and asking many questions”\n \n (Coleman, 2012, p. 5).\n\n\n Documents\n\n\n Before starting my interviewing, I collected and analyzed documents related particularly to data engineer use of web search at work, include public social media, blogs (and comments), books, YouTube videos, podcasts, instructional materials, and policy guidance. In addition to the coding approach indicated below, I conducted situated document analysis, working to include consideration of production, consumption (and use), and content (see, ex.\n \n Prior (2003)).\n\n\n I read through hundreds of pages of primary material from the public web related to the use of web search by coders broadly: original posts and commentary on personal blogs, Twitter, Quora, Reddit, Hacker News, and Stack Overflow about questions like: am I a real programmer if I have to look everything up? do expert coders search all the time? how did software engineers work before Google was invented? discussions about the role of web search in Stack Overflow and jokes and memes related to coder reliance on or expertise in web search (ex. referring to software engineers as professional googlers). I created Twitter lists to watch how people who coded for work talked about their work generally.\n\n\n The material I gathered went back to 2003. I also looked at training materials, books (popular and academic histories, resources for coders), tutorials, and other introductions to programming to familiarize myself with the community of practice and looking specifically for elements related to coder web search (like commentary on troubleshooting or discussion of norms around “reading the fine manual”). And I’ve also looked at research within computer science and empirical software engineering going back decades as it relates to searching and searching the web. I have also read books and material about programming and software engineering, to familiarize myself with the work and craft and to review for connections to the subjects at hand. This includes books like\n \n Hunt & Thomas (1999) and\n \n Seibel (2009), and the more data engineering oriented\n \n Kleppmann (2017).\n\n\n During the interviewing I also joined multiple Slack workspaces for open source tools for data engineers and the sub-Reddit r/dataengineering (for background, not for analysis). In the course of the interviewing portion of this research I was also provided or referred to documents by the research participants. Documents provided included training materials, screenshots of workplace messages, screenshots of code comments, tweets, blog posts, and news articles. Research participants shared these during the interviews, as well as months after.\n\n\n Interviewing\n\n\n I conducted 38 semi-structured in-depth interviews with 30 participants (see\n \n Appendix I. Research Participants\n \n ). The interviews were semi-structured, some questions and topics were planned in advance (see\n \n Appendix II. Annotated Interview Guide\n \n ), derived from approaches suggested by the literature and developing research. I modified the interview guide over the course of the research. The interviews were conducted over phone or Zoom video calls. I took notes during the interviews and recorded and transcribed them.\n\n\n I treated “interviews as fieldwork”, as “part of the world in which research subjects live and make meaning”\n \n (Seaver, 2017, p. 8). My interview guide was directed towards identifying different values, functions, different components, and the larger contexts of web search. This was to guide my analysis with the Handoff analytic. The modes of engaging between two components, particularly when one component is a human (i.e. force and perceptions of constraint or affordance), can be made somewhat accessible through interpretative interviewing. Interviewing also allowed me to approach concerns of the LPP analytic: approval, belonging, participation, and peripherality.\n \n Pugh (2013) argues interpretative interviews can provide “different levels of information about people’s motivation, beliefs, meanings, feelings and practices” (p. 50). I noted and probed “display work” (where interviewees presented their best face); metaphors and jokes; laughter, silences and non-verbal communication that show “what kind of things are uncomfortable, horrifying, emboldening, joyful”29\n ; and dissonances (pp. 50-51). I attended to, questioned, encouraged, and prompted “specific examples” (p. 50).\n\n\n Key changes I made to the initial versions of the interview guide were to add questions at the start and end. I asked an “initial reaction question” at the start of most of my interview, asking them how they initially reacted to hearing out this topic of research. This was a very fruitful question that revealed people noting surprise or appreciation, stating they had never thought of the topic before, or describing the extent they used web search in their work. I was then able to refer back to that initial reaction later in the conversations. I also added a question at the end to ask whether they had any final questions for me and asking for any final reflections. These worked as long as I asked those with enough time left or the interviewee granted an extension. The first was fruitful in revealing their concerns or interests. This sometimes shaped my understanding of the preceding conversation and also sometimes challenged my understanding of search at work itself. The second, asking for final reflections, was useful for that as well, but also often revealed an appreciation for the chance to talk and reflect on this work practice. I used those sorts of comments in subsequent recruitment efforts and referred to them in analyzing consequences of the often solitary and silent search practices.\n\n\n Sampling\n\n\n My sampling for research participants was driven by choices around transferability, the Handoff and LPP analytical frameworks, and pragmatic concerns. To gain tractability, when shifting to interviews, I narrowed my focus to a subset of those who write code for work: data engineers. I selected this site for four key reasons. First, it seemed likely to include people who were relatively technically sophisticated and so particularly capable of appreciating the technical mechanisms of web search. Second, it appeared to be a particularly dynamic field that requires a significant amount of learning on the fly\n \n (Avnoon, 2021; Kotamraju, 2002) and so perhaps even more heavily reliant on search than ‘coding work’ is generally. Data engineers are involved in building and maintaining tools sometimes used in efforts to control, replace, or surveil other people, practices, and tools. So, third, I saw them as perhaps more likely to have sophisticated understandings of the underlying technologies and an appreciation, perhaps, for the uses and misuses of data and automation built on or around it30. In that, fourth, data engineers would likely also be capable of redesigning of refashioning their tools and practices in the face of perceived constraints or affordances\n \n (Bailey & Leonardi, 2015; Leonardi, 2011; Vertesi, 2019).\n\n\n While following trails to find data engineers I generally passed over attempting to recruit those working in the most prominent technologies companies, sometimes grouped as FAANG (Facebook, Apple, Amazon, Netflix, and Google). It seemed likely that they may have resources and constraints very different from most data engineers and research overly focused on their web search practices may have limited transferability (or at least developing and demonstrating transferability may have been harder). Concerns about transferability also led me to look to interview only data engineers who worked in teams with other data engineers and only to people in the United States.\n\n\n The Handoff analytic informed my sampling. I recruited interview participants who worked in different contexts so I might explore the configurations of components, the system functions, and emergent values in different sorts of organizations. I looked for people working in different industries, at different levels, and on different types of teams. I looked at data engineering broadly, not constraining my search to people using particular tools or platforms. Some interviewees did not formally have data engineer as their title though their work tasks included those described as data engineering. Some interviewees worked with more established technology and others were tasked to work with the newest tools. I also spoke with people in relatively adjacent roles: a developer of open source software used by data engineers, a developer advocate for open source software used by data engineers, and a site reliability engineer.\n\n\n The LPP analytic drove me to sample for people new to data engineering and full members. I looked for people who had responsibility for interviewing, hiring, on-boarding, and managing. I looked for people who had transitioned to data engineering from distinct work (like from software engineering or data analysis) and whose formal training prepared them to work as data engineers directly out of college.\n\n\n I interviewed people from across the United States, east coast, west coast, and in-between. These data engineers worked on internally-facing online analytical processing (OLAP) systems for use cases like business analytics and customer-facing online transaction processing (OLTP) in production systems for providing access to documents, serving advertising, or making machine learning recommendations. These people worked in apparel, computing technology, enterprise software, entertainment, financial services, fitness, healthcare, media streaming, online marketplace, open source software, retail, social media, web analytics, and web publishing. From the principal and staff level to recent hires, these data engineers were individual contributors, managed teams, and were the technical leads for projects.\n\n\n The variance, or “de facto comparison dimensions”\n \n (Marcus, 1995), was emergent. Team size and history, organizational experience with contemporary data stacks (the tools and platforms used in the production of a data service), and competitive work environments provided sources of variance that made refraction\n \n (Christin, 2017, 2020b) more visible. Large and small teams with small and long histories, companies expanding into new-to-them data spaces versus those extending prior successes, and competition were not the variables of central interest, but they seemed associated with social dynamics and workplace relationships that contributed to concrete examples shared by the interviewees. This variance, or perhaps these extremities, seemed to make workplace web searching, at least in the interviews, less mundane\n \n (Sundin et al., 2017) or invisible\n \n (Haider & Sundin, 2019).\n\n\n The Handoff analytic helped illuminate how the larger systems of web search in the work of data engineering engaged with different people. I was particularly interested in identifying potential harmful patterns in these practices (including how people respond with resistance, repair, or routing around). Prior work shows that women in the coding professions are often mistreated or pushed out. This is shown in research showing how ‘coding work’ came to be presented, perceived, and performed as masculine work in the 20th century\n \n (Abbate, 2012; Ensmenger, 2010; Hicks, 2017), which persists\n \n (Dunbar-Hester, 2020; Misa, 2010). My document analysis, prior to starting my interviewing, suggested there was a high degree of secrecy surrounding search, so I knew it was important to hear the accounts of women to gain a fuller understanding of data engineering web search practices, and their implications. I interviewed women data engineers at nearly double their representation in the field (36.6% to 18.5%, according to one demographics report31\n ). This helped me identify and document an environment within web search practices in data engineering sometimes filled with anticipations of shaming and unequal judgment, particularly visible to women and people new to the field.\n\n\n I failed in my attempts to recruit black data engineers, a limitation of this study. Talking with people from multiple marginalized groups and situated within multiple may have allowed me to better understand how they both identified and responded to harmful practices. I did not focus on other demographic characteristics, unless they became salient in the course of an interview. Most of the data engineers I interviewed presented as white or South Asian.\n\n\n There were also pragmatic concerns—identifying and contacting data engineers. To provide practical (as well as analytical) scoping for my research I planned to only interview people in the United States (and this was also in my IRB protocol). The multi-sited networked design of the study also meant that sometimes I was looking for all sorts of “entry points”, unable to plan or predict access\n \n (Burrell, 2009, pp. 190–191). This meant I was unable to contact for interviews many data engineers who I was able to identify contact information for or who directly reached out to me on LinkedIn.\n\n\n Recruitment\n\n\n Research participant recruitment started with snowball recruitment among with friends and classmates and my extended network. I also reached out directly to people discussing data engineering online.\n\n\n I posted messages in channels on the UC Berkeley School of Information’s internal Slack workspace32\n , my Twitter account, my LinkedIn account, on a sub-Reddit for data engineering33\n (first contacting the moderators for permission), and my personal website34. I received multiple inquires referencing the LinkedIn post, though none specifying Reddit or Twitter. I also sent direct messages to people on Twitter where that was an option and I was not able to locate an email address. For immersive purposes and for recruitment I ‘followed’ publicly engaged data engineers and those in adjacent roles on Twitter, including making a Twitter list. I found data engineers to reach out to on social media websites, forums, and blogs—traversing links to find email addresses or homepages with contact forms through Hacker News, GitHub, and LinkedIn.\n\n\n Coding\n\n\n I made use of some methods informed by grounded theory in efforts to ground my observations, analysis, and representations. While not taking on all their prescriptions or descriptions (i.e. the notion of “data reduction” gained from applying metadata to other data), I used “flexible coding”\n \n (Deterding & Waters, 2018). I coded written records of my encounters with informants, transcripts of interviews, and documents collected with codes derived in part inductively but also according to expectations and anticipations from prior research and sense-making of the research area. (Note that while the goal was to develop an emic account of coder web search practice, the deductive codes assisted me in attending to my expectations and improved my ability to identify sources of changes in my thinking). These codes included also my “own emotional reactions to the respondent’s narrative”, where I recorded not only surprise but disgust and heartache\n \n (Pugh, 2013, p. 51 (Fn5)).\n\n\n Memoing\n\n\n Throughout the research I wrote memos. I wrote memos on what I was confused by, surprised by, and excited by. Rather than developing a regular rhythm or routine for memoing, I scavenged\n \n (Seaver, 2017) for memos. I regularly turned my stray remarks from others or times I caught myself going on about my research to anyone into opportunities to put my thoughts to tangible words on paper. Or I would start to type a question to a colleague and realize partway through that the question could also (or instead) be a memo. I would write memos while reflecting on meetings with advisors——trying to find the words and so do the thinking to better understand something I struggled to convey to them. In some of these memos I juxtaposed competing codes or claims from interviewees. As an example, one significant memo was from a sudden realization I had on a walk and scribbled in the Notes app on my phone: “They’ve black boxed everything! By-and-large the practices and the tool itself.” Tweets of mine, or many deleted tweet drafts, also provided seeds for fuller memoing. Some memos were born of my own search frustrations—a constant comparison across contexts that could be “contrasted, elaborated, and qualified” when juxtaposed with data engineering web searching\n \n (Orlikowski, 1993, p. 5). when I spent an hour disassembling and reassembling a pepper grinder to add peppercorns and only later realized I could have popped the top off, which I might have known had I done a web search—the name of the grinder clearly visible. Or when I bought the wrong size screws for hanging drywall. Many of these memos started from notes taken on runs—runs where I listened to books or articles35. My wife put up with me sometimes stopping mid conversation to jot down the stub of something for a future memo or writing it herself if we were driving. I could not force myself to write memos36\n , and I couldn’t stop myself from writing them once I had a thought that was not lodged.\n\n\n A significant breakthrough in my sense of my study occurred when one of my interviewees asked if I would talk to their organization about my initial findings. This led to a flurry of activity as I hurriedly repackaged my initial memos and summaries of interviews into tentative findings. I then sat with the raw materials of my presentation, the starts of different framings and outlines. I reflected on how I felt in the presentation, claiming or hinting at different tentative findings. This forced me back to the interviews, to make codes I had felt but had not yet recorded. Soon thereafter, I had conducted 25 interviews at this point, I reached “meaning saturation”\n \n (Burrell, 2009, p. 194), at least within the scope of work possible for this research project.\n\n\n Surprises\n\n\n I attended carefully to surprises, noting them through in interview notes, memos and scavenged memos from off-the-cuff response to questions from advisors and colleagues. Surprises noted include:\n\n\n\n lack of criticisms of the search engine, minimal sharing about search practices or search stories\n \n\n no bespoke code to aid searching (“gap-bridging”\n (Bailey et al., 2010)\n ), missing strong norms of reciprocity\n \n\n no hints of surveillance of web search, even reference to one’s own search history.\n \n\n near ubiquity of the use of Slack workspaces\n \n\n hyperbole in confessional statements of heavy reliance on web search (mirroring material found on the web, but surprised in the moment by the repeated strength of exaggeration in interviews)\n \n\n vast variety in revealed knowledge of the mechanisms of web search\n \n\n data engineers saying they had never thought about search or had taken it for granted—search as invisible or mundane\n (Haider & Sundin, 2019; Sundin et al., 2017)\n —the data engineers were so reliant on search that I had imagined they would see it as their “topic, or difficulty”\n (Star, 1999)\n rather than taken for taken-for-granted infrastructure\n \n\n\n I created a document to track when I changed my perspective on what my data meant. These were my shifts or pivots, a change in direction due to a realization or recognition of something previously unseen, something like a surprise. As I combed through prior memos I began to write mini memos of those shifts I had not explicitly recorded. Memos began to be a way for me to understand my prior shifts in emphases or framing. I could see where sometimes my understanding of a theme or chapter completely changed. These shifts were not small. For example, at first I did not see the knowledge embedded in the practices. I did not see where legitimate peripheral participation might exist in these solitary and secretive practices. And just a month before filing, my thoughts about the privacy of searching shifted from a focus on the benefits to recognizing a need to be clear about potential harm. Some of these shifts or pivots were from doing the work of writing the drafts—the “activity of writing”, the “physical act of writing” itself, was “a process of discovery [ . . . ] and surprise”\n \n (Lofland & Lofland, 1995). Some shifts and pivots were from challenges raised by peers, advisors, or research participants. The intentional processes of memoing—including reviewing, synthesizing and building on my memos—and working to explain my findings to others helped me to re-examine the data and see where it was showing me something different from what I had originally seen.\n\n\n Member checks\n\n\n Starting in the summer of 2022, I reached out to some of the data engineers I had previously interviewed and new participants for member checks. Also called “participant or respondent validation”\n \n (Birt et al., 2016), these are for “communicative validation of data and interpretations with members of the fields under study”\n \n (Flick, 2009). For both groups I conducted a form of “synthesized member checking”.\n \n Birt et al. (2016) writes that this “addresses the co-constructed nature of knowledge by providing participants with the opportunity to engage with, and add to, interview and interpreted data, several months after their semi-structured interview.” I shared my analysis and findings with the interviewee, including referencing the prior interview and particular places I was planning on using their words, as applicable. For new participants I provided an overview of my research like I did with initial interviews, asked my initial reaction question, and only asked a few orientation questions before presenting my findings.\n\n\n I conducted member checks with seven prior participants (and exchanged only emails with another) and five new participants. I emailed the participants and used a scheduling software37\n to allow them to select to talk with me for different lengths of time, from 15 minutes to one hour. I did two 30-minute member checks with one participant. One of the new participants was someone I had reached out to in the previous round but never received a reply. Another participant I reached out to because they had tweeted about something that another member check had just mentioned. Only one other new participant was not on my original list of potential interviewees.\n\n\n My emails inviting participants included a brief description of what I was writing in my dissertation drafts and a single tagline for the four analytical chapters (as developed at the time of the emails).38\n I opened the interviews with a high-level discussion of where I was in my research process (conducted initial interviews, coding and memoing, following by iterating on drafts of chapters, and now turning to member checks) and a description of the goals for the member checks. I told them it was similar to an interview, requesting consent to take notes and record. New participants were also given the same consent for research forms. For some of the participants I mentioned specific things they had said in the initial interviews that I was quoting and discussing in my text, sometimes at the front but mostly interspersed with our conversation.\n\n\n I wrote a guide for myself on how to introduce the member checks. While I often paraphrased in the actual conversation, I had written the following: “I want to get feedback (including pushback & resistance), ideally feedback in your own words (rather than yes/no) that might refine, extend, or challenge what I’m saying. This is co-constructed research, so I’ll be upfront: my dream is sorta like in improv: I say something and you say “yes, and”, “yes, but” OR “no, actually”.\" I also suggested high-level questions for them to consider:\n\n\n\n Is the analysis believable/credible?\n \n\n Anything feel off? Or exciting?\n \n\n Is the analysis useful or meaningful to you?\n \n\n\n After the first two member checks I made sure to add this as well: “Please do challenge me, in my last member check someone raised a question that helped me identify a key connection I hadn’t seen at all before.” I presented the member check in this manner with the goal of the participants seeing themselves fit to provide “commentary, correction, and elaboration”\n \n (Orlikowski, 1993, p. 10).\n\n\n I generally discussed my tentative findings in the order I’d arranged the chapters in my drafts at the time of the interview (for most of the interviewees that was STRUCTURING, LEARNING, SHARED, GAPS).39\n\n\n As I told the member check interviewees I would, I pulled material from our conversations into the dissertation. Sometimes they provided descriptions of experiences or reflections that filled gaps or reinforced my findings. I also make note and comment in the chapters that follow where they provided pushback. Sometimes that pushback identified for me things that I may be better off avoiding discussing or needed to take more care in discussing. I also highlight spots where comments from participants shifted my understanding of my research.\n\n\n Positionality\n\n\n Before presenting my data and findings, I will describe some of my positionality. With this I “seek to acknowledge [my] situatedness and make it an explicit component of the research process”\n \n (Christin, 2020b, p. 13). This provides an overview of my background as related to my questions and sites of research, as well as a place for me and the reader to prepare to qualify or critique my standing for different claims I will make in the subsequent chapters. I had early exposure to computers, but I could not name them, unlike the developers that\n \n Coleman (2012) spoke with, who “would almost without fail volunteer the name and model number of the specific device” (p. 28). I was very attentive to approaches to teaching and systems of education. My father’s parting words were almost always, “have fun.” I learned that “creativity and play are socially motivated and socially learned”\n \n (Ames, 2019, p. 32) and of their role in learning, collaboration, and teamwork. I participated in a wide range of tutoring, mentoring, apprenticeship, and immersive training in social environments that ranged from caustic to liberatory. Experience with searching and teaching search—trying to search alone, managing teams of intelligence analysis reliant on search, searching as a data analyst, and teaching new programmers—shaped my attention and the comparative analysis across domains and situations for searching. I will focus on experiences related to searching, learning to use software systems or programming languages, and training (particularly that outside of formal schooling).\n\n\n I remember being excited when my oldest sister mentioned HotBot, a search engine launched in 1996. It seemed to me so much better at returning relevant results than the mismatch of search engines and search aggregators that I used at the time. But those were better, for my perspective as a child exploring, than the confines of AOL search, itself better than Microsoft Encarta. I was fortunate to have access to the family computer in our dining room starting sometime in elementary school. The first web search that I remember was searching\n \n [marines]\n \n , and then being whisked away by my mother when the search engine, perhaps Juno, returned gay porn. We also made regular use of the local library, so much so that I had my library card memorized for placing holds on books from home.40\n I vividly recall two older boys, at a birthday party sometime before middle school, trying to one-up each other while talking about how they knew how to set up a website. I was curious but didn’t really understand. I was homeschooled until fourth grade, then in a co-op classroom for two years, before joining an “innovative” public middle school (where everyone had to take band). A close friend showed me how he’d learned to display scrolling text in his computer class in middle school, but there was not one offered at my school. I do not recall any formal lessons on searching the web, though I did take a keyboarding class in high school. After two years at the local public high school I switched schools to a private k-12 school, before spending my entire senior year taking classes at the community college.\n\n\n In undergrad I slowly learned more about the internet, the World Wide Web, and the tools supporting their use. I set up a short-lived blog. After my first year I made a small static website as a parting gift to my dormmates—just a grid of names and photos. I thought I would create a website where students could share and collaborate on notes. I even pitched it to my undergrad advisor—a history professor. I got so far as setting up a website with MediaWiki and spamming classmates anonymously with links to my class notes. I installed a Linux operating system on my laptop but could not figure out how to connect to campus WiFi. My best friend and roommate was a math and computer science major but I was focusing on history, political science, and philosophy. I also studied New Testament Greek, and thought of possibly becoming a pastor. I’d signed up for a programming class one semester but changed my mind before classes started. I worked as a “junior office manager” in a small architecture firm my first summer after starting college. I made coffee, checked the mail, answered the phone, organized the office bookshelf, and convinced my boss I could learn enough by searching the web to make updates to the firm’s website. My second summer I did an immersion program in Arabic. Both summers, and for a couple months after graduating from college, I also worked at the local McDonalds.\n\n\n I joined the U.S. Army after college. I enlisted to be an all-source intelligence analyst, under the impression that I could take my philosophy degree overseas and make a difference.41\n “All-source” meant my role was to contribute to planning and synthesis of intelligence collected through a variety of intelligence sources, including imagery, geospatial, signals, and human intelligence debriefing and interrogation.42\n That involved a lot of searching. Beyond training in intelligence analysis—including in searching various systems—, I also learned how to operate weapons, jump out of airplanes, rappel out of helicopters, drive a 2 1/2 ton truck, and run in formation while singing cadences.\n\n\n While deployed in Iraq my lieutenant required that at the end of every day I share the list of searches that I had done. These, on a secure network, were generally searches in Query Tree, an application on the U.S. Army’s multi-billion dollar Distributed Common Ground System-Army (DCGS-A), but also searches of reports and briefings stored on Microsoft SharePoint and OneNote. One reason for monitoring searches was that, despite boolean search operators, searching Arabic names transliterated into English was fraught. While I could reference a gazetteer to identify preferred spellings, names were not controlled. During that deployment I learned the basics of Microsoft Access and how to edit VBA scripts in Microsoft Excel, creating systems to store the results of my searches because the servers running DCGS-A regularly ran slow or had to be restarted.\n\n\n Over the years I was promoted and became responsible for the work of a team of analysts. I taught them rudimentary lessons in searching the web and the multiple secure networks and databases we used. My teaching responsibility here mostly involved one-on-one and small team instruction and mentorship. As an intelligence analyst I taught (or trained) my soldiers geography, history, software systems, analysis techniques, and public speaking. They joined the army with an array of educational backgrounds, from a GED to a college degree. On the side I thought I should learn to program. I started basic introductory tutorials for Rails, Lisp, and Python but did not get far. My unit tested out Palantir, which definitely felt fancy and fast, even if it made excessive assumptions about the searcher’s goal and the underlying data. I later deployed to Afghanistan, endlessly searching while generally safe in an air conditioned tent. I realized we’d been misinterpreting aggregated location data that Palantir provided (it functioned differently than our standard systems) and convinced our shop to stop using them, though got nowhere in my attempts to convince their engineers over email to make changes. I used other tools as well. I could read enough of Python to adapt some automation behavior in ArcGIS, a geographic information system that we used. I recorded macros in Microsoft Word to help me prepare documents in particular formats.\n\n\n I finished my enlistment and applied to graduate schools to study collaborative learning, perhaps with new tools. I’d had fellow analysts search themselves into a frenzy of overblown fear or search just enough to be able to overclaim some copy-and-paste expertise. I’d had superiors think we could just pick up and use our systems without regular training. Even with training our tools could be frustrating to use and unreliable. My philosophy degree only got me so far.\n\n\n After applying to graduate schools, I took a job as a data analyst at a charter school in New York. I helped prepare testing materials, process test scores, develop a file naming convention, review data analysis software for potential adoption, and fumbled around using jQuery to adapt Microsoft SharePoint. During that time I found out I had been accepted to the UC Berkeley School of Information. I received an email from the admissions coordinator, saying “the admissions committee does have concerns about your preparation in programming [ . . . ] Before the beginning of the Fall semester you are expected to take at least one introductory programming course [ . . . ].” So I took an “Introduction to Programming with C++” course at Borough of Manhattan Community College.\n\n\n I took a short “Python Boot Camp” intensive before my first semester started. Then jumped into programming, taking an applied natural language processing class my first semester. I’ve used Python regularly since43\n , writing class projects or utilities for personal use. This document itself was produced with the aid of several scripting tools I’ve written and many code-related web searches. I then taught the “Python Boot Camp” for incoming graduate students for three years. This was a three-week intensive summer class for incoming masters and PhD students who were either completely new to programming or new to Python. The use of “boot camp” was amusing to me. I made sure I did not replicate the sort of embarrassment, harassment, or other punishments that came with some of my military training. (Though I had to be pushed by students to stop using a phrase from the military. I would often—intentionally—use “Too easy” to refer to things that were actually quite hard. It was supposed to motivate people, but I suppose only in the right contexts and in relation with people well-situated within those contexts. Part of the reason it didn’t land in the class was because I had students who had never programmed and who weren’t members of groups who were generally expected or welcomed in coding communities.) In classes I also worked in R and JavaScript. I was a professional masters student before joining the PhD program. My master’s final project team built an automatic question generation system and I contributed to the Python codebase. I wrote Python code to pull tweets from the Twitter API for\n \n Burrell et al. (2019) and\n \n Griffin & Lurie (2022).\n\n\n Bibliography\n\n\n\nAbbate, J. (2012).Recoding gender: Women’s changing participation in computing (history of computing). The MIT Press. https://mitpress.mit.edu/9780262304535/ \n\n\n\nAmes, M. (2019).The charisma machine : The life, death, and legacy of one laptop per child. The MIT Press.\n\n\nAvnoon, N. (2021). Data scientists’ identity work: Omnivorous symbolic boundaries in skills acquisition.Work, Employment and Society,0 (0), 0950017020977306. https://doi.org/10.1177/0950017020977306 \n\n\n\nBailey, D. E., & Leonardi, P. M. (2015).Technology choices: Why occupations differ in their embrace of new technology. MIT Press. http://www.jstor.org/stable/j.ctt17kk9d4 \n\n\n\nBailey, D. E., Leonardi, P. M., & Chong, J. (2010). Minding the gaps: Understanding technology interdependence and coordination in knowledge work.Organization Science,21 (3), 713–730. https://doi.org/10.1287/orsc.1090.0473 \n\n\n\nBarley, S. R. (1986). Technology as an occasion for structuring: Evidence from observations of ct scanners and the social order of radiology departments.Administrative Science Quarterly,31 (1), 78–108. http://www.jstor.org/stable/2392767 \n\n\n\nBeane, M. (2017).Operating in the shadows: The productive deviance needed to make robotic surgery work [PhD thesis]. MIT.\n\n\nBeane, M. (2019). Shadow learning: Building robotic surgical skill when approved means fail.Administrative Science Quarterly,64 (1), 87–123. https://doi.org/10.1177/0001839217751692 \n\n\n\nBechky, B. A. (2003). Object lessons: Workplace artifacts as representations of occupational jurisdiction.American Journal of Sociology,109 (3), 720–752.\n\n\nBell, G., Blythe, M., & Sengers, P. (2005). Making by making strange: Defamiliarization and the design of domestic technologies.ACM Transactions on Computer-Human Interaction (TOCHI),12 (2), 149–173. https://doi.org/10.1145/1067860.1067862 \n\n\n\nBirt, L., Scott, S., Cavers, D., Campbell, C., & Walter, F. (2016). Member checking: A tool to enhance trustworthiness or merely a nod to validation?Qualitative Health Research,26 (13), 1802–1811. https://doi.org/10.1177/1049732316654870 \n\n\n\nBowker, G. C. (1994).Science on the run: Information management and industrial geophysics at schlumberger, 1920-1940 (inside technology) (Hardcover, p. 199). The MIT Press. https://sicm.mitpress.mit.edu/books/science-run \n\n\n\nBucher, T. (2017). The algorithmic imaginary: Exploring the ordinary affects of facebook algorithms.Information, Communication & Society,20 (1), 30–44. https://doi.org/10.1080/1369118X.2016.1154086 \n\n\n\nBurrell, J. (2009). The field site as a network: A strategy for locating ethnographic research.Field Methods,21 (2), 181–199. https://doi.org/10.1177/1525822X08329699 \n\n\n\nBurrell, J. (2012).Invisible users: Youth in the internet cafés of urban ghana (acting with technology). The MIT Press.\n\n\nBurrell, J., Kahn, Z., Jonas, A., & Griffin, D. (2019). When users control the algorithms: Values expressed in practices on twitter.Proc. ACM Hum.-Comput. Interact.,3 (CSCW). https://doi.org/10.1145/3359240 \n\n\n\nChristin, A. (2017). Algorithms in practice: Comparing web journalism and criminal justice.Big Data & Society,4 (2), 1–12. https://doi.org/10.1177/2053951717718855 \n\n\n\nChristin, A. (2018). Counting clicks: Quantification and variation in web journalism in the united states and france.American Journal of Sociology,123 (5), 1382–1415.\n\n\nChristin, A. (2020a).Metrics at work: Journalism and the contested meaning of algorithms. Princeton University Press.\n\n\nChristin, A. (2020b). The ethnographer and the algorithm: Beyond the black box.Theory and Society. https://doi.org/10.1007/s11186-020-09411-3 \n\n\n\nColeman, E. G. (2012).Coding freedom: The ethics and aesthetics of hacking. Princeton University Press. https://gabriellacoleman.org/Coleman-Coding-Freedom.pdf \n\n\n\nDeterding, N. M., & Waters, M. C. (2018). Flexible coding of in-depth interviews: A twenty-first-century approach.Sociological Methods & Research, 0049124118799377. https://doi.org/10.1177/0049124118799377 \n\n\n\nDoty, N. (2020).Enacting Privacy in Internet Standards [Ph.D. dissertation, University of California, Berkeley]. https://npdoty.name/enacting-privacy/ \n\n\n\nDunbar-Hester, C. (2020).Hacking diversity: The politics of inclusion in open technology cultures (1st Edition). Princeton University Press. https://press.princeton.edu/books/hardcover/9780691182070/hacking-diversity \n\n\n\nEnsmenger, N. (2010).The computer boys take over: Computers, programmers, and the politics of technical expertise. The MIT Press.\n\n\nFlick, U. (2009).An introduction to qualitative research. SAGE Publications Ltd.\n\n\nGoldenfein, J., & Griffin, D. (2022). Google scholar – platforming the scholarly economy.Internet Policy Review,11 (3), 117. https://doi.org/10.14763/2022.3.1671 \n\n\n\nGoldenfein, J., Mulligan, D. K., Nissenbaum, H., & Ju, W. (2020). Through the handoff lens: Competing visions of autonomous futures.Berkeley Tech. L.J.. Berkeley Technology Law Journal,35 (IR), 835. https://doi.org/10.15779/Z38CR5ND0J \n\n\n\nGoldenfein, J., Mulligan, D., & Nissenbaum, H. (2019).Through the handoff lens: Are autonomous vehicles no-win for users. https://pdfs.semanticscholar.org/341d/a18649eb9627fe29d4baf28fb4ee7d3eafa3.pdf \n\n\n\nGriffin, D., & Lurie, E. (2022). Search quality complaints and imaginary repair: Control in articulations of google search.New Media & Society,0 (0), 14614448221136505. https://doi.org/10.1177/14614448221136505 \n\n\n\nHaider, J., & Sundin, O. (2019).Invisible search and online search engines: The ubiquity of search in everyday life. Routledge. https://doi.org/https://doi.org/10.4324/9780429448546 \n\n\n\nHanselman, S. (2013).Am i really a developer or just a good googler? \nhttps://www.hanselman.com/blog/am-i-really-a-developer-or-just-a-good-googler .\n\n\nHanselman, S. (2020).Me: 30 years writing software for money. https://twitter.com/shanselman/status/1289804628310110209 .\n\n\nHaraway, D. J. (1988). Situated knowledges: The science question in feminism and the privilege of partial perspective.Feminist Studies,14, 205–224.\n\n\nHicks, M. (2017).Programmed inequality: How britain discarded women technologists and lost its edge in computing. MIT Press.\n\n\nHill Collins, P. (2002).Black feminist thought: Knowledge, consciousness, and the politics of empowerment (Rev. 10th anniversary ed). Routledge.\n\n\nHunt, A., & Thomas, D. (1999).The pragmatic programmer: From journeyman to master. Addison-Wesley Professional.\n\n\nIntrona, L. D. (2016). Algorithms, governance, and governmentality.Science, Technology, & Human Values,41 (1), 17–49. https://doi.org/10.1177/0162243915587360 \n\n\n\nKleppmann, M. (2017).Designing data-intensive applications : The big ideas behind reliable, scalable, and maintainable systems. O’Reilly Media.\n\n\nKotamraju, N. P. (2002). Keeping up: Web design skill and the reinvented worker.Information, Communication & Society,5 (1), 1–26. https://doi.org/10.1080/13691180110117631 \n\n\n\nLave, J., & Wenger, E. (1991).Situated learning: Legitimate peripheral participation. Cambridge university press. https://www.cambridge.org/highereducation/books/situated-learning/6915ABD21C8E4619F750A4D4ACA616CD#overview \n\n\n\nLeonardi, P. M. (2011). When flexible routines meet flexible technologies: Affordance, constraint, and the imbrication of human and material agencies.MIS Quarterly,35 (1), 147–167. http://www.jstor.org/stable/23043493 \n\n\n\nLofland, J., & Lofland, L. H. (1995).Analyzing social settings. Wadsworth Publishing Company.\n\n\nLurie, E., & Mulligan, D. K. (2021).Searching for representation: A sociotechnical audit of googling for members of U.S. Congress (Working Paper). https://emmalurie.github.io/docs/preprint-searching.pdf \n\n\n\nMarcus, G. E. (1995). Ethnography in/of the world system: The emergence of multi-sited ethnography.Annual Review of Anthropology,24, 95–117. http://www.jstor.org/stable/2155931 \n\n\n\nMathew, A. J., & Cheshire, C. (2018). A fragmented whole: Cooperation and learning in the practice of information security.Center for Long-Term Cybersecurity, UC Berkeley.\n\n\nMills, C. (2008). White ignorance. In L. S. Robert Proctor (Ed.),Agnotology: The making and unmaking of ignorance. Stanford University Press.\n\n\nMisa, editor, Thomas J. (2010).Gender codes: Why women are leaving computing (1st ed.). Wiley-IEEE Computer Society Press. libgen.li/file.php?md5=e4a6849b080f4a078c79777d347726c2 \n\n\n\nMulligan, D. K., & Griffin, D. (2018). Rescripting search to respect the right to truth.The Georgetown Law Technology Review,2 (2), 557–584. https://georgetownlawtechreview.org/rescripting-search-to-respect-the-right-to-truth/GLTR-07-2018/ \n\n\n\nMulligan, D. K., & Nissenbaum, H. (2020).The concept of handoff as a model for ethical analysis and design. Oxford University Press. https://doi.org/10.1093/oxfordhb/9780190067397.013.15 \n\n\n\nNoble, S. U. (2018).Algorithms of oppression how search engines reinforce racism. New York University Press. https://nyupress.org/9781479837243/algorithms-of-oppression/ \n\n\n\nOchigame, R. (2020). Informatics of the oppressed. InLogic. https://logicmag.io/care/informatics-of-the-oppressed/ \n\n\n\nOrlikowski, W. J. (2007). Sociomaterial practices: Exploring technology at work.Organization Studies,28 (9), 1435–1448. https://doi.org/10.1177/0170840607081138 \n\n\n\nOrlikowski, W. J. (1993). CASE tools as organizational change: Investigating incremental and radical changes in systems development.MIS Q.,17 (3), 309–340. https://doi.org/10.2307/249774 \n\n\n\nPassi, S., & Barocas, S. (2019). Problem formulation and fairness.Proceedings of the Conference on Fairness, Accountability, and Transparency, 39–48.\n\n\nPassi, S., & Jackson, S. J. (2018). Trust in data science: Collaboration, translation, and accountability in corporate data science projects.Proceedings of the ACM on Human-Computer Interaction,2 (CSCW), 1–28.\n\n\nPassi, S., & Sengers, P. (2020). Making data science systems work.Big Data & Society,7 (2), 2053951720939605.\n\n\nPrior, L. (2003).Using documents in social research. SAGE Publications Ltd. https://doi.org/10.4135/9780857020222 \n\n\n\nPugh, A. J. (2013). What good are interviews for thinking about culture? Demystifying interpretive analysis.Am J Cult Sociol,1 (1), 42–68. https://doi.org/10.1057/ajcs.2012.4 \n\n\n\nRobertson, R. (2022).WebSearcher. https://github.com/gitronald/WebSearcher \n\n\n\nSeaver, N. (2017). Algorithms as culture: Some tactics for the ethnography of algorithmic systems.Big Data & Society,4 (2), 1–12. https://doi.org/10.1177/2053951717738104 \n\n\n\nSeibel, P. (2009).Coders at work: Reflections on the craft of programming. Apress.\n\n\nStar, S. L. (1999). The ethnography of infrastructure.American Behavioral Scientist,43 (3), 377–391.\n\n\nSundin, O., Haider, J., Andersson, C., Carlsson, H., & Kjellberg, S. (2017). The search-ification of everyday life and the mundane-ification of search.Journal of Documentation. https://doi.org/10.1108/JD-06-2016-0081 \n\n\n\nSundin, O., Lewandowski, D., & Haider, J. (2021). Whose relevance? Web search engines as multisided relevance machines.Journal of the Association for Information Science and Technology. https://doi.org/10.1002/asi.24570 \n\n\n\nTakhteyev, Y. (2007). Jeeks: Developers at the periphery of the software world.Annual Meeting of the American Sociological Association, New York, Ny. https://pdfs.semanticscholar.org/1a98/c87ffd0b07344c5e0aae6e7e498a5c69da00.pdf \n\n\n\nTakhteyev, Y. (2012).Coding places: Software practice in a south american city. The MIT Press.\n\n\nTattersall Wallin, E. (2021). Audiobook routines: Identifying everyday reading by listening practices amongst young adults.JD,78 (7), 266–281. https://doi.org/10.1108/JD-06-2021-0116 \n\n\n\nTripodi, F. (2022b).The propagandists’ playbook: How conservative elites manipulate search and threaten democracy (Hardcover, p. 288). Yale University Press. https://yalebooks.yale.edu/book/9780300248944/the-propagandists-playbook/ \n\n\n\nVan Couvering, E. J. (2007). Is relevance relevant? Market, science, and war: Discourses of search engine quality.Journal of Computer-Mediated Communication,12 (3), 866–887. http://doi.org/10.1111/j.1083-6101.2007.00354.x \n\n\n\nVertesi, J. (2019). From affordances to accomplishments: PowerPoint and excel at NASA. IndigitalSTS (pp. 369–392). Princeton University Press. https://doi.org/10.1515/9780691190600-026 \n\n\n\nWong, R. (2020).Values by design imaginaries: Exploring values work in ux practice [Ph.D. dissertation, University of California, Berkeley]. https://escholarship.org/uc/item/3vt3b1xf \n\n\n\nZade, H., Wack, M., Zhang, Y., Starbird, K., Calo, R., Young, J., & West, J. D. (2022). Auditing google’s search headlines as a potential gateway to misleading content.Jots,1 (4). https://doi.org/10.54501/jots.v1i4.72 \n\n\n\n\n\n\n\n Try searching [python \"search results\" title:google] on Stack Overflow, [python \"search results\" intitle:google site:stackoverflow.com] on Google, or [python \"search results\" duckduckgo site:stackoverflow.com] on DuckDuckGo. ↩︎ \n\n\n\n See the archived repo on GitHub at https://github.com/jarun/googler . ↩︎ \n\n\n\n For example, Emacs is a text editor initially developed in the 1970s and actively used today. The MELPA repository of Emacs packages includes tools such as fastdef (to “Insert terminology from Google top search results”, google (“Emacs interface to the Google API”, and google-this (“A set of functions and bindings to google under point.” — including “the current error in the compilation buffer”). ↩︎ \n\n\n\n Extensions are available to make general-purpose web search engines searchable from within Microsoft’s Visual Studio Code IDE. These extensions are built to open search results pages from a host of search engines: Baidu, Bing, Brave, DuckDuckGo, Ecosia, Google, Yandex, and You.com. ↩︎ \n\n\n\n\n Dunbar-Hester (2020) notes the importance of remembering at the outset of her research on diversity advocacy in open technology cultures that the sites and groups and their activities she studies are not monolithic (p. 24). ↩︎ \n\n\n\n While it can also appear shorthanded to the broader “component actors” or subsystem, Mulligan & Nissenbaum (2020) generally use component: \n\n We use the generic term component to apply to both human and nonhuman parts of the sociotechnical system. While the term component does not naturally apply to human actors, for our purposes it is important to be able to refer in like manner to human and nonhuman components of a system. \n\n↩︎ \n\n\n I take care to refer to ‘perceptions’ of affordance, pushing back on a tendency in some analyses to reify affordances as properties of the objects rather than accomplished in contexts and relations (see Leonardi (2011) and Vertesi (2019) for a review of the disjuncture between the development of affordances in psychology and its application in design). Leonardi (2011) draws on the terms “perceptions of constraint”, “perceptions of affordance”, writing that “Technologies have material properties, but those material properties afford different possibilities for action based on the contexts in which they are used.” I do not want to stop at labeling some attribute an affordance, but locate “the networked conditions that make particular use cases possible” ( Vertesi (2019) ). Vertesi argues (p. 388) that: \n\n The notion that technologies might in and of themselves suggest, prompt, or require different ways of using them from human bodies or interlocutors neglects the richness and complexity that occurs when different groups take up technological tools to achieve local ends \n\n I refer to standpoint theory (Hill Collins, 2002) , situated knowledges (Haraway, 1988) , and white ignorance (Mills, 2008) when considering how relations and contexts interact with perceptions of constraint or affordance. ↩︎ \n\n\n\n\n Goldenfein et al. (2020) provide a tight definition: \n\n\n We define “Handoff” as the following: given progressive, or competing, versions of a system (S1, S2) in which a particular system function (F) shifts from one type of actor (A) in S1 to another actor (B) in S2, we say that F was handed off from A to B . [emphases in original] \n\n↩︎ \n\n\n Funded by the National Science Foundation under the U.S. NSF INSPIRE SES1537324. ↩︎ \n\n\n\n This paper was later published as Goldenfein et al. (2020) . ↩︎ \n\n\n\n These “manual pages” provide access to documentation. An engineer could access the documentation directly on their computer by typing man [command, function, or file name] in their terminal. You also may be able to type man man in your terminal or command-line application see the documentation for man , the “format and display the on-line manual pages”. Or, for example, type man cal to reference documentation for the cal utility which “displays a calendar and the date of Easter.” ↩︎ \n\n\n\n A conversation with Andrew Reifers on January 1st, 2019. A later conversation with him, June 6th, 2021 helped me consider the pursuit of expertise and quality in different systems or subsystems enrolled in data engineering work. I could draw on research looking at how expertise is performed or quality is produced (or not) in open source and in recruiting, interviewing, code reviews, etc. In my notes at the time I asked: Where are quality and expertise accounted for, maintained, or responsibilized in coder use of web search? It is clear to me now that these subsystems also engage or act on data engineering web search practices. ↩︎ \n\n\n\n The LPP analytic is introduced more fully in the next chapter. ↩︎ \n\n\n\n They discuss reasons, particularly in a section titled “With legitimate peripheral participation” (pp. 39-42) for “turning away from schooling” and “school-forged theories” of learning (p. 61). ↩︎ \n\n\n\n Jean Lave ↩︎ \n\n\n\n While she does not use the term in some of her subsequent work, (Christin, 2018, 2020a) , Christin expands on and reframes this approach in a later article that presents “studying refraction” as a “practical strateg[y] for ethnographic studies of algorithms in society”, calling it “Algorithmic refraction” (Christin, 2020b) . She notes that it “partly overlaps” with methodological approaches like Barley’s “technology as an occasion for structuring” and Orlikowski’s approach to “sociomaterial practices” (p. 10; internal citations are to Barley (1986) , Bechky (2003) , and Orlikowski (2007) ). She closes out her section on the strategy (p. 11): \n\n focusing on algorithmic refraction and treating algorithmic tools as prisms that both reflect and reconfigure social dynamics can serve as a useful strategy for ethnographers to bypass algorithmic opacity and tackle the complex chains of human and non-human interventions that together make up algorithmic systems. \n\n↩︎ \n\n\n For one cursory example, see Scott Hanselman, not a data engineer, but a developer who works in Microsoft Developer Relations. A decade ago he tweeted a link to a blogpost of his titled: “Am I really a developer or just a good googler?” (Hanselman, 2013) . (This blog post is an anchor for many conversations about searching the web while working in code-related roles, this post is linked to throughout such conversations over the years.) Then, he tweeted more recently (Hanselman, 2020) \n\n\n Me: 30 years writing software for money. Also Me: Googles how to hide a div with a querySelector. Hang in there #codenewbies\". \n\n↩︎ \n\n\n Slack is a workplace messaging platform billed to replace email. Every interviewee, except for those working at or with companies that designed and sold a competitor product, mentioned using Slack in the workplace or for interacting with external collaborators. It became the “professional networking site” for the UC Berkeley School of Information during my time there. ↩︎ \n\n\n\n\n Noble (2018, pp. 181–182) : \n\n Indeed, we can and should imagine search with a variety of other possibilities. [ . . .] Such imaginings are helpful in an effort to denaturalize and reconceptualize [ . . . ] \n\n↩︎ \n\n\n Such as the moment an interviewee halted mid-sentence, appeared startled, and then urgently confirmed that I would not name their company. ↩︎ \n\n\n\n See the work from Passi, based on his ethnographic fieldwork with an industry data science team, and colleagues on the “problems of trust and credibility are negotiated and manage” (Passi & Jackson, 2018, p. 2) , “the everyday practice of problem formulation” (Passi & Barocas, 2019, p. 3) , and “what work the system should do, how the system should work, and how to assess whether the system works” (Passi & Sengers, 2020, p. 2) . ↩︎ \n\n\n\n Zippia. Data Engineer Demographics and Statistics in the US. https://www.zippia.com/data-engineer-jobs/demographics/ ↩︎ \n\n\n\n At the time of this writing there are over 4000 members of the Slack workspace, with over 200 in the #data_engineering channel. ↩︎ \n\n\n\n\n https://www.reddit.com/r/dataengineering/ \n ↩︎ \n\n\n\n My website recruitment pitch is archived at Archive.org: https://web.archive.org/web/20211024103319/https://danielsgriffin.com/currently-recruiting-interview-participants-dissertation.html . ↩︎ \n\n\n\n I used the VoiceDream Reader on my phone and computer for text-to-speech for listening to articles or books (that were not prepared for audio consumption), as well as drafts of this dissertation. Listening is a form of reading ( Tattersall Wallin (2021) ). In future research I will attempt to get IRB approval for storing interview audio, password protected, on my phone in order to immerse myself in the material in the sort of everyday listening occasions that Tattersall Wallin describes. I will confess that I did also listen to interviews, on cordless headphones played from my laptop, sometimes while playing with our, at the time, 1-year old. ↩︎ \n\n\n\n Early in this research I wrote a small script that would create a new blank memo file for me to fill at the start of every work day. I thought to set aside time at the start of the day to ensure I did my memoing. My morning memo. Eventually I went back and deleted hundreds of files that I had left empty. ↩︎ \n\n\n\n Calendly. ↩︎ \n\n\n\n I copied my early member check invitation emails to my website, linked to on my homepage and from my prior interview recruitment page. It is archived at Archive.org: https://web.archive.org/web/20221125080137/https://danielsgriffin.com/currently-conducting-member-checks.html \n ↩︎ \n\n\n\n Here is a mapping from those drafts chapters to the this final version: \n\n\n↩︎ \n\n\n When I applied to work at the library while in high school, the librarian conducting the job interview noted my name and commented, “oh, you’re the one checking out all the science books.” I regularly walked out of the library with a stack of books much larger than I could read. ↩︎ \n\n\n\n This is the same job that Chelsea Manning had while in the U.S. Army. Her unit replaced mine in Iraq. I talked and walked her, and other soldiers in her unit, through the workflows we had developed, including the search tools we used. ↩︎ \n\n\n\n In a fashion visible also in jokes about programmers just copy-and-paste code from the internet, people in more specialized roles would regularly joke that the all-source analyst’s job was just to copy-and-paste. ↩︎ \n\n\n\n I briefly used the Emacs text editor extensively, including writing small List snippets to change the behavior to the tool. ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/methods_and_methodologies/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-micro-interactions-in-search", "type": "pages" , "date": "", "title": "micro interactions in search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"micro interactions in search\" tag.\n \n\n\n{% assign tag_name = \"micro interactions in search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"micro interactions in search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"micro interactions in search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/micro-interactions-in-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-microsoft-copilot", "type": "pages" , "date": "", "title": "Microsoft-Copilot tag" , "tags": "", "content": "{% assign tag_name = \"Microsoft-Copilot\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Microsoft-Copilot\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Microsoft-Copilot\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/microsoft-copilot/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "shortcuts-mulligan2018rescripting", "type": "shortcuts" , "date": "2022-11-02", "title": "Rescripting Search to Respect the Right to Truth" , "tags": "", "content": "What are search results? What are the human rights obligations of search engines? \n\n> Search engines no longer merely shape public understanding and\naccess to the content of the World Wide Web: they shape public\nunderstanding of the world. . . .\n\n\n## citation\n\n[Deirdre K. Mulligan](https://www.ischool.berkeley.edu/people/deirdre-mulligan), and **Griffin, Daniel S.**. [\"Rescripting Search to Respect the Right to Truth\"](https://georgetownlawtechreview.org/rescripting-search-to-respect-the-right-to-truth/GLTR-07-2018/). _2 GEO. L. TECH. REV._ 557 (2018). [[direct PDF link](https://georgetownlawtechreview.org/wp-content/uploads/2018/07/2.2-Mulligan-Griffin-pp-557-84.pdf)]\n\n[BibTeX](/bibtex#mulligan2018rescripting)\n\n## abstract\n\n> Search engines no longer merely shape public understanding and access to the content of the World Wide Web: they shape public understanding of the world. Search engine results produced by secret, corporate-curated “search scripts” of algorithmic and human activity influence societies’ understanding of history, and current events. Society’s growing reliance on online platforms for information about current and historical events raises the stakes of search engines’ content moderation practices for information providers and seekers and society. Public controversies over the results returned by search engines to politically and morally charged queries evidence the growing importance, and politics, of corporations’ content moderation activities.\n> \n> Despite public concern with the political and moral impact of search engine results, search engine providers have resisted requests to alter their content moderation practices, responding instead with explanations, directions, and assistance that place responsibility for altering search results on information providers and seekers.\n> \n> This essay explores a public controversy around the results Google’s search engine returned to the query “did the holocaust happen” in order to understand how different imaginaries of the script of search contribute to the production of problematic results and shape perceptions of how to allocate responsibility for fixing it.\n\n## tweets\n\n### introductory Twitter thread\n\nMY FIRST PAPER: "Rescripting Search to Respect the Right to Truth" in @GLTReview w/ Deirdre Mulligan.We build on @carolecadwalla's reporting on "did the hol" search results to re-consider search & 'results-of-search' to find a space to act & bear witness: https://t.co/Kii4CybsHn— Daniel Griffin (@danielsgriffin) July 24, 2018\n\n\n### reactions\n\n"Rescripting Search to Respect the Right to Truth" by Deirdre Mulligan & @danielsgriffin makes the brilliant case for how the Google cannot hold onto its obsession with neutrality given how people see search and how search is being manipulated. MUST READ:https://t.co/pOCMH5UXAQ— danah boyd (@zephoria) September 24, 2018\n\n\nIf you are a GOOG engineer or attorney working on Search, Trust & Safety, or Research & ML, you need to be reading this right the fuck now. https://t.co/9gaGIbJFgN— мара-яга (@marasawr) July 23, 2018\n\n\n### personal references:\n\nw/in a thread on \"search voids\":\nBut the results-of-search (the results of the entire query-to-conception experience of conducting a search *and* interpreting the search results) are distinct from the search results as displayed on the screen.¹________1: Mulligan & Griffin, forthcoming 2018🤞— Daniel Griffin (@danielsgriffin) July 10, 2018\n\n\nin response to a question about platform responsibility re misinformation and real-world harm:\n² see Mulligan & Griffin forthcoming 🤞 on the applicability of the UN Guiding Principles on Business and Human Rights and questions about platform responsibilities to respect (and remedy) "Right to the truth"— Daniel Griffin (@danielsgriffin) July 18, 2018\n\n\nw/in a thread on the \"search sublime\":\nAnd here, Mulligan and Griffin's "Rescripting Search to Respect the Right to Truth" (2018), on the important and under-appreciated role of search formulation: https://t.co/PFuRjnJnoy pic.twitter.com/XDJ1f8iO6B— Daniel Griffin (@danielsgriffin) October 3, 2018\n\n\ndescribing the gap between search results & \"results-of-search\":\n___1. "Rescripting Search to Respect the Right to Truth":"search results, the listing of and linking to sites on a search engines results page, are distinct from the results-of-search, what searchers experience Google as communicating about those sites."https://t.co/C0ksNAXmpE— Daniel Griffin (@danielsgriffin) September 6, 2019 \n\n## see also\n## application 1\nMulligan, Deirdre K. and Griffin, Daniel S., [\"Google goes to China, will it tell the truth about Tiananmen Square?\"](https://www.theguardian.com/commentisfree/2018/aug/21/google-china-search-tiananmen-square-massacre), The Guardian, 21 August 2018.\n\nThis opinion piece develops from the Rescripting paper:\n> Google has no obligation to search for truth, but it does have the responsibility to faithfully surface the literal fact of a human rights atrocity, such as the Holocaust and the massacre at Tiananmen Square. To do so, search engines need to create a new algorithmic script. Call it a “bearing witness” script.\n> \n> A bearing witness script is wholly consistent with the engineers’ commitments and capability. Relying on factual accounts of human rights atrocities produced by expert public bodies is well aligned with democratic values and avoids the slipperiness of in-house determinations.\n\n## application 2\n\na thread on Google's human rights obligations re reproductive justice:\n*right to an abortion & Google*Again re Google failing to respect human rights & seemingly failing to "prevent or mitigate adverse human rights impacts that are directly linked to their operations, products or services by their business relationships"[1]:https://t.co/ucAyUfaVtj— Daniel Griffin (@danielsgriffin) September 7, 2019 \n\n## presentations\nMulligan presented an early draft at [Symposium: The Governance & Regulation of Information Platforms](https://www.georgetowntech.org/platforms) put on by Georgetown Law's Institute for Technology Law & Policy and The Georgetown Law Technology Review ([video](https://youtu.be/BPngqBUNKao?t=19220) from 23 February, 2018).\n\nDeirdre Mulligan: a search engine isn't a mirror of all human information online, it's a diffraction #PlatformLaw— Lindsey Barrett (@LAM_Barrett) February 23, 2018\n\n\nWe presented to the UC Berkeley School of Information's Information Access Seminar, organized by Dr. Michael Buckland, and received valuable feedback from the attending experts on information search & retrieval— no recording (20 April, 2018).\n\n"Join us at 3:10pm today for Reasons and Rights to be Brave: Rescripting Search to Respect the Right to Truth, with Professor Deirdre Mulligan & PhD student @danielsgriffin: https://t.co/dbz7I7vLxq#infoaccess #Googlesearch" pic.twitter.com/YP0FiASjTP— Berkeley School of Information (@BerkeleyISchool) April 20, 2018\n\n\nI presented on the paper in Professor Mulligan's [2018 Technology and Delegation Lab (20 September, 2018)](https://courses.ischool.berkeley.edu/i290-tpl/wiki/Technology_and_Delegation,_Fall_2018#Week_4:_Legitimacy_and_Governance).\n\n## Early research\nAn early version of this research was presented in December 2017 at [All Things in Moderation: The People, Practices and Politics of Online Content Review – Human and Machine](https://atm-ucla2017.net/)—a two-day conference put on by UCLA’s Department of Information Studies.\n\nThread from Yoehan Oh:\n"Our [Google] search results are a reflection of the content across the web." Let's problematize *search results* as various versions by not just search engines but also by individual search users @danielsgriffin #ATM2017 pic.twitter.com/6rDuC9OABw— Yoehan Oh (@yoehanee) December 8, 2017\n\n\n## citation-to\nHaider, Jutta and Olof Sundin. [*Invisible Search and Online Search Engines: The Ubiquity of Search in Everyday Life*](https://lup.lub.lu.se/search/publication/4e423c2d-f2a4-486d-8607-6dddc096fd1b). Routledge, 2019.\n\nPartial citing excerpts:\n\n> Furthermore, being searchable is today not only often seen as a feature of information, but information is also moulded to fit the shape provided by the tools used for searching for it, and, more often than not, this is a web search engine (Gillespie 2017; Haider 2014; Kallinikos et al. 2010). Inversely, this also means that information that is not produced in conformity with the rules laid down by dominant search engines gets buried and is made less visible (Mulligan & Griffin 2018, pp. 569–570). Ultimately this – we can call it *search-ification* – of everyday life relates to the ways in which an increasingly invisible information infrastructure is entangled across culture and its practices and to what means we have at our disposal for understanding and making sense of these entanglements (see also Sundin et al. 2017). (p. 2)\n\n> The image of breakdown is not one that elicits a malfunctioning search engine, but one that prompts an interruption of the perception of the search engines as valueless and neutral. The infrastructure stops working frictionless (for us), and we notice not only the infrastructure in question, but how deeply mixed up we are in its functioning. “Google acts in the gap between the user’s query and the content”, write Deirdre Mulligan and Daniel Griffin (2018, p. 569). An occasion of this gap literally materialises, it could be argued, in the shape of the unassuming box into which a query is entered. The search box provides a crack through which we can catch a glimpse of the search engine’s inner workings. (p. 64)\n\n> If we, as Hjørland (2010) suggests, regard topical or subject relevance as also bringing in a “social paradigm”, there are interesting examples of how Google tries to consider the interest of society at large. These actions seem to follow a pattern, of *public objection* followed by *corporate resistance*, as Mulligan and Griffin (2018, p. 558) point out, in relation to human rights atrocities and specifically the Holocaust. Different ideas of what search engines are and do run into each other. The public perception of search engines as in addition to providing relevant information also acting as “stewards of authoritative historical truth” collides with a commitment on the part of search engine provider to an “engineering logics which tether search engine performance to observational measures of user satisfaction, coupled with limited recognition of the role search engines play in constructing the need being satisfied”, as Mulligan and Griffin (ibid.) note. (pp. 70-71)\n\n> If search engines structure the order of knowledge, and we claim that they do, then we need to understand how the information they provide is given meaning, in practices *and* in an epistemic sense. This becomes acutely obvious in areas, which have a history of violence and oppression, as for instance Deirdre Mulligan and Daniel Griffin (2018) discuss in relation to the search query “did the holocaust happen” or as Safiya Noble’s (2018) account of how racism is built into the very fabric of search engines, demonstrates at length. (pp. 93-94)", "snippet": "\n", "url": "/shortcuts/mulligan2018rescripting/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-musingful-memo", "type": "pages" , "date": "", "title": "musingful-memo tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"musingful-memo\" tag.\n \n\n\n{% assign tag_name = \"musingful-memo\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"musingful-memo\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"musingful-memo\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/musingful-memo/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-navigation", "type": "pages" , "date": "", "title": "navigation tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"navigation\" tag.\n \n\n\n{% assign tag_name = \"navigation\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"navigation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"navigation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/navigation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-niche-generative-search", "type": "pages" , "date": "", "title": "niche-generative-search tag" , "tags": "", "content": "{% assign tag_name = \"niche-generative-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"niche-generative-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"niche-generative-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/niche-generative-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "search-notation", "type": "pages" , "date": "", "title": "search/Notation" , "tags": "", "content": "\nThis is a small note about search notation on this website.\n \n\n\nI use square brackets (`[` and `]`) to enclose a search query (in order to simplify the distinction between simply searching for multiple search terms [this query] or an exact phrase like [\"this query\"], which different search tools may process very differently). I use HTML and CSS to make search queries distinct. So the brackets are in a slightly larger font and heavier (thicker) than the rest of the text and there is more visual spacing. Like, [this query]. Copying that should still give the reader that string: `[this]`.\n\nI also sometimes like to quickly indicate on which search tool or search engine I ran a query. I like to put the name of the tool immediately before the left-bracket (sometimes I may abbreviate the tool name, like just ddg for DuckDuckGo or t for Twitter): Yahoo[this query] or AltaVista[\"this query\"]. I also use HTML and CSS to render these sorts of queries differently: Bing[what is a search query?] and often include a link to the query: Bing[what is a search query?].", "snippet": "\n", "url": "/search/notation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-null-results", "type": "pages" , "date": "", "title": "null-results tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"null-results\" tag.\n \n\n\n{% assign tag_name = \"null-results\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"null-results\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"null-results\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/null-results/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ollie", "type": "pages" , "date": "", "title": "Ollie tag" , "tags": "", "content": "{% assign tag_name = \"Ollie\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Ollie\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Ollie\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ollie/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-omnibox", "type": "pages" , "date": "", "title": "omnibox tag" , "tags": "", "content": "{% assign tag_name = \"omnibox\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"omnibox\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"omnibox\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/omnibox/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-on-questions", "type": "pages" , "date": "", "title": "on questions tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"on questions\" tag.\n \n\n\n{% assign tag_name = \"on questions\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"on questions\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"on questions\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/on-questions/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-opacity", "type": "pages" , "date": "", "title": "opacity tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"opacity\" tag.\n \n\n\n{% assign tag_name = \"opacity\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"opacity\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"opacity\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/opacity/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-open-alex", "type": "pages" , "date": "", "title": "Open Alex tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Open Alex\" tag.\n \n\n\n{% assign tag_name = \"Open Alex\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Open Alex\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Open Alex\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/open-alex/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-open-source", "type": "pages" , "date": "", "title": "open-source tag" , "tags": "", "content": "{% assign tag_name = \"open-source\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"open-source\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"open-source\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/open-source/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-openai-chatgpt", "type": "pages" , "date": "", "title": "OpenAI-ChatGPT tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"OpenAI-ChatGPT\" tag.\n \n\n\n{% assign tag_name = \"OpenAI-ChatGPT\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"OpenAI-ChatGPT\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"OpenAI-ChatGPT\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/openai-chatgpt/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-opening-closing", "type": "pages" , "date": "", "title": "opening-closing tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"opening-closing\" tag.\n \n\n\n{% assign tag_name = \"opening-closing\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"opening-closing\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"opening-closing\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/opening-closing/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-operationalization", "type": "pages" , "date": "", "title": "operationalization tag" , "tags": "", "content": "{% assign tag_name = \"operationalization\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"operationalization\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"operationalization\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/operationalization/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-organizations", "type": "pages" , "date": "", "title": "organizations tag" , "tags": "", "content": "{% assign tag_name = \"organizations\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"organizations\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"organizations\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/organizations/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-other-quality-goals", "type": "pages" , "date": "", "title": "other-quality-goals tag" , "tags": "", "content": "{% assign tag_name = \"other-quality-goals\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"other-quality-goals\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"other-quality-goals\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/other-quality-goals/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-owning-searching", "type": "diss" , "date": "2022-12-16", "title": "6. Owning searching" , "tags": "[diss]", "content": "Outside the search confessions, the broader practices that support web search, and the shared repairing, the data engineers report experiencing and discursively defend web search as a solitary and private professional endeavor. Why does search remain a private and solitary practice given the rich trace data generated by search, the rapacious appetite for data collection and analysis among the data engineering community and the companies in which they practice? And what allows this community to avoid the scrutiny generally deemed essential to self-reflection, optimization, efficiency, and innovation?\nI will show data engineers describing their web searching as being solitary, speedy, and secret. I show two aspects of how data engineers talk about searching solitary, solo, or alone. First, describing search as though the activity of web searching is wholly their responsibility, to be completed by the individual without or apart from the support of colleagues—by oneself. Second, describing search as apart from others entirely, suggestive of an apparently autonomous individual—on one’s own. Then I discuss two further descriptions: data engineers’ interest in speed, in search being fast, and how data engineers talk about wanting to keep their searches private, that they would be embarrassed to share them.\nSeveral frames from related literature suggest different interpretations of the solitariness and privacy of the data engineers’ web search activity. I look at the design of search, constructed but now default expectations of (perceived) privacy, both “rugged individualism” (Ensmenger, 2015) and norms around generalized reciprocity (Coleman, 2012; Weber, 2004) in the coding professions. These all contribute to an understanding of the solitary and secretive searching. Then I ground my argument in work on the value of privacy for learning and on the learning strategies of the organization.\nI show how the firm delegates the task and practice of search to such a degree that it has foregone ownership of searching. As a consequences the already marginalized suffer, from the current informality workplace web searching in data engineering and what that hides, organization has poorer learning at the expense of preserving the status quo.\n Solitary, speedy, and secretive searching\n \n Solitary searching\n \nThe data engineers offered different motives for solitary searching. Some reported being expected to search alone, while others reported needing, or wanting to search alone. The examples in the two subsections below detail two aspects of a standing repertoire for referring to web searching. The repertoire suggests particular orientations towards or understandings of web search. In [by oneself] I’ll share examples of how data engineers talk about searching as a responsibility to be performed apart from the immediate support or involvement of their colleagues. In on one’s own , I’ll show how they talk of search as apart from others entirely, where the standard references to the search activity do not bring to mind a recognition of any relation to others who might be preparing material to be found or to those who searched before, shaping the results they will see.\n [by oneself]\n \nData engineers spoke of searching, finding, teaching, or figuring by themselves, yourself, or oneself. Sameer said he’d carefully suggest searching to new engineers98 : “‘hey, have you tried googling it because it seems like a very simple thing you can find yourself.’”\nDevin discussed self-reliant searching as a key strategy for dealing with the diversity and complexity of the tooling environment for data engineering:\n\n you really have to … figure out those tools yourself. \n When somebody says to go and google it, to get that answer, they also expect you to know what is a good answer, what is a bad answer. [ . . . ] I think as a data engineer you are expected to know what’s good and bad. So I don’t think there is a problem with saying ‘google it’. \n\nWhile Aditya was hesitant to place much emphasis on being able to search, what he described fits well within this narrative that individual engineers are expected to be able to independently search for (or ‘find’) information:\n\n I wouldn’t say that the expected skill is that you know how to search. Like, I think that’s almost like not something someone focuses on. But that you can— teach yourself or find yourself the information to learn some skill and, like, how you do it could differ. \n\nand learn independently and on the fly: “I expect everyone to have gaps and as the problem arises, we, basically say:”Teach yourself what you need to solve that problem.\"\nThese comments convey the role and perceived value of autonomy and individualization of search work in data engineering practice. It isn’t just that the engineers are expected or allowed to search the web on their own, they need to. Moreover, they also must be able to choose means besides searching the web necessary to do their work. These descriptions of why search is solo and the value of it, are distinct from the practical and spatiotemporal factors that shape search as a solitary exercise described in Admitting searching ). This language frames and justifies solitary, or more specifically autonomous searching, in terms of values—efficiency, flexibility, adaptiveness.\n on one’s own\n \nJust above, I introduced a sense that the activity of web searching is responsibly completed by the individual, without or apart from colleagues. Now note herehow that ostensibly solitary work is described. Theon [your/their/my] own phrasings are suggestive of an apparently autonomous individual (absent relations to others)99 .\nI asked Michael how he thinks through the process of considering whether to ask a colleague or manager a question when feeling unable to find some bit of information. I was asking here particularly not about internal tooling (as interviewees commonly spoke of that as something they’d ask questions about internally). He said most of them time he’d ask questions about internal tooling or project-specific components he was interacting with. But, regarding “general development” work (his language), he discussed a sense of individual responsibility he learned from his mentors, managers, and peers (what he also considered “a common practice within the industry”).\n\n For more general development, development where it doesn’t matter what the component is, its more of something that you as an engineer should be able to solve on your own. \n It is definitely different for other engineers, but from from mentorship and my managers, and other peers, it’s more of try it out on your own, try to solve it the best you can, and keep searching, and spend all your resources first, and then go to your team if you’re actually truly stuck and you can’t figure out something. As an engineer don’t depend too much on hand holding. But if I am stuck on something then I go to more senior technical leaders. \n\nAnd I say, ‘OK, I can’t figure this out can you help me debug this’ and sometimes that works very well because they can see things that I didn’t see or I skipped over, et cetera.\nI do think that is more of a common practice within the industry and just engineers in generally. Is sort of: Be a ‘go getter’ and try to solve it on your own\nAnd also discern whether or not you’ll be able to do it quickly and then, if not, seek help, et cetera.\nBut then that’s obviously a problem because if you are trying to solve it on your own through web search, etc., you’re also depending on verified, validated, quick results to come up where it would help you in a way where you could actually solve it on your own.\nI’ll flag here some of the language he used:\n\n “solve on your own” \n “try it out on your own” \n “try to solve it on your own” \n “trying to solve it on your own through web search”. \n\nHe’s describing an expectation set by others that he has adopted for himself. This is an expectation, or an evaluative criteria, I found throughout my interviews. Yes, data engineers are physically remote from each other. However, the language of the interviewees describe search as performed alone in a distinct way. They position themselves in dialogue with an inanimate corpus of material or perhaps the search engine, while in reality searches connect data engineers with searchers across the World Wide Web, and across time and space. Ironically, while they describe search being performed alone they often include many references to actual and anticipated interactions with other people who variously constrain, compel, or coach searching. These people may also be distant in time and space, but they are closer to the heart and mind then the searchers hidden behind the screen.\nSometimes the solitary phrasings were only used to indicate the lack of search talk.100 I asked Shreyan: “Do you talk about searches with your co-workers?” He replied: “they would search on their own”. There may be this larger solitary assumption underlying that remark, but it was principally addressing search talk.\nJamie used ‘on my own’ phrases to refer simply to not asking colleagues for help:\n\n “I will try to get as far as I can on my own” \n “I wanted to attempt to solve the problem on my own” \n\nSimilarly, when Jillian shared asking her colleagues questions, she said that while they are very forgiving and nice and would want her to ask questions, she generally does what she says they probably wouldnot want her to feel obligated to do:\n\n find the answer first, try and figure it out on your own. And then ask if you’re having an issue figuring it out. Or if you know you’re not going to be able to figure it out. \n\nThere is a general obligation that data engineers will take responsibility to search first. Some of what Jillian was discussing was a generally noted tendency to be so hesitant to ask for help, or being so used to turning first to the search engine, that data engineers will get lost in rabbit holes, searching repeatedly without forward progress. It is those long searches that Jillian’s colleagues express an interest in avoiding. The “obligation to know”, to have searched and to search, “exists in tension with the expectation of asking questions” (Reagle, 2016, p. 698). Some of this solitary searching is driven by anticipated negative interactions providing a renewed impetus to search (discussed in the last chapter). Again, while theon [your/their/my] own phrasing above may at the first level refer to the data engineer searching apart from their colleagues active and in-the-moment engagement or presence, they of course reveal deeper interconnection because web search engages with aweb, a network of people and other actors.\nPhillip, discussing not ever having asked a question on Stack Overflow, said he didn’t know how long it would take101 , and: “I just try to figure it out on my own.” (thought still making use of, among other resources, Stack Overflow and questions and answers from others).\nKari described the progression from a novitiate heavily reliant on others to being “fully functioning on your own”. Kari uses “figure things out yourself” and “on your own” language in reference to searching the web. I asked her about talking about web search with newcomers to her organization. She described how she would underemphasize searching the web when onboarding new engineers onto her team (she’s also referring back to a comparison when she said she encourages the data scientists asking her questions to search first, and contrasting with how she described her own search work practices).\n\n One of the first things that I’ll tell people is, for search specifically, I usually say the opposite for the people I work with. Ask a ton of questions and don’t try to figure things out yourself. I wouldn’t say that to a data scientist or every person at the company. But I think it is good at the beginning to really support new coworkers. Make sure that they don’t feel stupid for asking questions because it is expected that they don’t know. We don’t want people to get stuck in a hole, alone, and stuck on something… trying to figure it out by themselves when they can rely on people. In your first year at a company it is important to have support from everyone else and then you are fully functioning on your own and you’re not really going to need that as much anymore. \n\nThese excerpts affirm (and, if they faithfully represent comments within the workplace, reproduce or reinforce) the individualizing mythos of autonomous searching and an explicit individual rather than interdependent assignment of responsibility. (This is despite the actual interdependence in web searching and the many references to others influence and shaping of searching.)\n Speedy searching\n \nData engineers value speed. Their descriptions of the performance and articulation of web search highlights this interest in speed. The data engineers spoke of web search as providing the quickest or fastest way to answer their question.\nAt the very start of the interview, Ross noted that in his field “there are so many technologies, languages, frameworks, software packages, that you can’t know it all”. This research was “really interesting” because, he said, “being able to quickly find information is key to my job.”\nNoah:\n\n There could be a, some docs, I know exactly what I want but the fastest way to get it is just searching and- and try to get the first result so I use it to get to- to navigate documentation. \n\nMentioned previously102 , Shawn spoke of quickly resolving problems by searching the exception message:\n\n And that will cover you very quickly in about 90% of the time. You usually find the answer. And you can try it out, run a couple quick tests on it and make sure it actually works. And then you can move on with your day. \n\nJohn said that often times using web search he’s looking for the “quickest way”: [ . . . ] I just need to—quick—glance at something to find a typo or identify an error.\nLater he said (discussing whether his simple queries were embarrassing):\n\n That’s what I do. I’d rather search it than try the [SQL] query, see that it erred, read the error, debug it.I’d rather quickly look it up often times. \n\nPhillip said he’d never asked a question on Stack Overflow because he’s “not sure fast the response would be.”\n\n So searching is sometimes faster than trying the solution out. \n\nData engineers value speed (or local efficiency) in their use of web search.\nA comment from Nisha underscores this. She’s responding to a question from me about whether she’ll read through the documentation for a tool or library when she’s stuck. She says instead she’d do web searches or reach out to the internal customer support team because that’s “the fastest way”. Reaching out to support is ‘ask[ing] someone for help’, but web search is not described that way:\n\n I knew that reading documentation, if I got stuck on a specific area, was not going to add much. So I would either do a Google search, or if that didn’t help I would reach out to customer support. Scan through the documentation, obviously, do a search on the keywords in the documentation, orreach out to support because that’s the fastest way of getting my information. Rather than, you know the general framework, right, when you’re cycling, if a keyword search will not help, if you do not find anything in the documentation, reading through the whole documentation will just waste your time. It is better to just ask someone for help. \n\nSearching speed may not only be about clock-time.\nSometimes the speed of searching is linked explicitly with the ease. Here’s Ajit:\n\n I do remember, oh, I did something similar. But instead of actually going back and looking into the code where this happened, it’s much easier for me to just do a quick web search.It’s “more straightforward” and “much easier”, to do a quick web search. \n\nThe speed is partially necessary because of how they are expected to learn on the fly, or just in time—as Aditya said:\n\n I expect everyone to have gaps. And as the problem arises, we, basically—Teach yourself what you need to kinda solve that problem. Rather than let’s proactively try to just fill gaps across the place. there are going to be gaps \n\n Secretive searching\n \nSearching is also secretive, or kept secret. There is a deep intimacy to searching the web that carries over to workplace web searching. Data engineers indicate a strong desire to keep their searching secret. This is also a motivation for searching alone.\nAs discussed throughout, there is limited talk about search. I asked Nisha if people ever talked about search. She just shook her head no, while laughing and smiling.\nRecall Amar, who said, “it’s kind of like 90% of my job to just look things up.” He said:\n\n engineers—at least in my experience or at least within my team—will not explicitly discuss their process \n\nI asked Shreyan if he talked about searches with his co-workers and he said it happens very little, saying “I don’t want to restrict their pattern of thinking103 .”\nJillian was a new data engineer when I first talked with her, only a few months on the job. In talking about embarrassment about what she thought was an excessive reliance on web search, she said: “I would assume that I am searching things far more frequently than my peers.” About talking about searches, Jillian said:\n\n I don’t think I necessarily talk about it with them. I feel like I try and hide. I feel like I know very little and try and hide that from my peers. I don’t want them to know how little I feel like I know. Let’s just say I wouldn’t want them to see my search history of my coding related things. \n\nIn a member check a year later, she no longer thought she was searching more than others:\n\n I am realizing that whenever I ask questions to people who I deem as smart or intelligent, I’m now really realizing that the skills that they have are the ability to quickly search. \n They don’t just sit and think through it to give me an answer. They immediately go to their computer, maybe it’s searching code if it’s clearly not something that’s going to be on the internet, but if it’s going to be on the internet, they’re really googling it. \n It’d be a big task to turn the whole narrative of googling things being an embarrassing thing, maybe to being a very admirable task, but I do start to recognize that, okay, people that I want to be like are definitely just constantly looking things up. \n\nBut the collective narrative hadn’t shifted.\n\n One of the worst things I could have imagined happening, for my job, would be if people could see my search history, because then it exposed all the things I didn’t know. \n And I think the flip side of that is it would probably actually just expose maybe the things I’m going out and trying to learn and understand better, but you don’t necessarily know. \n\nThe secrecy around search shapes people’s understanding of its use, driving misperceptions that lead to shame (Jillian definitely was not searching more than others) and hiding the value of searching the web and what it can support.\nWith the description of these three findings in mind, and before proceeding to the discussion of them, I will next describe what I looked for but did not find: technocratization of search.\n Technocratization of search\n \nWhile doing this research there was an ever-present question on my mind: are or might companies monitor and manage the web searching practices of their workers in order to improve performance? Would data engineers turn their skill at data analysis upon their own workflows, to improve their own work and potentially competitive standing, or to collectively optimize data engineering work? On the other end, might companies or collectives of professionals develop tools to share search learnings or regularize search strategies through more structured and automated means?\nI imagined that I might find, or research such as mine might unintentionally encourage, surveillance or control of web searching. I was concerned with attempts to surveil or supervise search in ways that reduce the autonomy of workers. Surveillance or control might harm people, violate rights, limit learning and even undermine efficient use of search.\nI use technocratization of search to group various practices that I anticipated I might find. By technocratization of search, I mean the intentional application of techniques to influence search practices. By its similarity to ‘technocracy’, I hoped to convey some notion of “rule by experts” through the development of surveillance or quantification, processes or routines, or built artifacts that might shape searching practices. I imagined this might include the automation of portions of the search process (perhaps the gap-bridging studied by Bailey and Leonardi, see below) or modification of browsers to constrain or encourage particular behaviors. I imagined technocratization of search as consisting of tools for logging searches, tools for facilitating searches from the editor, tools for warning someone about the length of a search session, or tools for removing some websites from search results.\nWhile it is distinct from the sort of technocratization of web search I was looking for, some have speculated that code generation tools my serve as a substitute for web search in coding work. It is easy to find claims on social media of people saying that their use of a code generation tool has or will replace their use of web search for their coding work. The development to new code generation tools expanded rapidly during the course of my writing. While this was not the focus of the research, its relevance is undeniable. I have prepared an appendix reflecting on such tools: Appendix III. Code Generation Tools and Search .\nThe technocratization question comes amidst hopes and fears in regard to the political and economic power of companies wielding data and computation (ex. futures of work oriented popular press books like ‘Second Machine Age’, ‘Fourth Industrial Revolution’) and research examining the underlying mechanisms possibly explaining company strategies (here, Fourcade & Healy (2017) re “data imperative” and Zuboff (2015) re “logic of accumulation”) and looking at the introduction of new technologies into work processes (ex., the buffering and resistance detailed in Christin (2017) ).\nI initially drew on the language ofinformating from Zuboff (1988). Zuboff juxtaposed machines and automation (to automate) with information technology and informate. She argued that information technology “both accomplishes tasks and translates them into information.”\n\n Information technology not only produces action but also produces a voice that symbolically renders events, objects, and processes so that they become visible, knowable, and shareable in a new way. [ . . . ] The word that I have coined to describe this unique capacity is informate. Activities, events, and objects are translated into and made visible by information when a technology informates as well as automates.\" \n\nZuboff argued that:\n\n [. . . ] [W]hen the technology also informates the processes to which it is applied, it increases the explicit information content of tasks and sets into motion a series of dynamics that will ultimately reconfigure the nature of work and the social relationships that organize productive activity \n\nIn addition to attending to the potential collection of data on searching or application of that data to influence searching, I also looked for automation of portions of the web search activity.104 A thread of research on bridging gaps between two technologies (Bailey et al., 2010; Bailey & Leonardi, 2015) and the imbrication of routines and flexible technology (Leonardi, 2011) describe situations where tools are sometimes created or adapted to improve coordination between people and their tools. Would I find gap-bridging in the data engineer web search practices?\nThe question can also be formulated as: Where is the data gathering (or the surveillance and informating, the logic of accumulation and the data imperative) and the gap-bridging to improve the labor process in the work of data engineers? I did not find such informating of web search or accumulating of search logs. Why do I seem to find so little technocratization of web search?\nIt may be suggested that the search work of the data engineers is a tacit skill (see also the discussion of searching as tacit-knowing in Admitting searching : Talk about search ), not easily explainable nor reducible to programmed instruction. My questions about the lack of technocratization, though, don’t suggest or expect automation of the search work. Shestakofsky (2017) ’s research identifies how “[i]n some instances, workers’ tacit skills [give] them an advantage over computer code in performingnonroutine tasks [ . . . ] because people possessed competencies grounded in tacit knowledge that could not easily be programmed [emphasis in original]” (p. 387). A significant amount of the search work may be nonroutine, but I was not looking for the tacit knowledge of the data engineers to be automated by machine, rather for any intentional application of technique to influence the searching of the data engineers.\nWhile it may be the case that the search activity of the data engineers is intuitive and inexplicable even if noted or remembered (Dreyfus & Dreyfus, 2005) , the question here is not about the development of a rule-based expert system, but why responsibility has been completely handed down to the engineers, who in turn do not built tools to scaffold or reflect on their search activity. Hodgson (2001) writes that “Workers have always possessed some tacit and other skills beyond the reach of managerial comprehension” [p. 193]. But technocratization of search is also not developed by the workers themselves, workers well capable of developing logs of searches for their own reference or building tools to further scaffold their interactions with the search engines.\n Informating and imperative accumulation by web search\n \nWeb search engines are no stranger to data collection and application of such data to further their goals. Early researchers looked at how to use encoded-links to aid in the automation of the process of finding and accessing distributed content, leading to hyperlinks and the web itself. Then web search engines informated from that structure. At the first level, we can imagine three primary parties involved in web search. The searcher, the search engine, and those producing content to be searched for. Organizations of the latter two types have heavily sought control and profit through informating points where they interface with searching (with the lattermost using search analytics to change their behavior to increase the quantity or quality of web site visits). In the coding work under examination here there is a fourth party, the coding firm, that intentionally or not exhibits control around the searching practice (from the reasons to search to the reception of the results-of-search) of the searching coders. These lenses provide a way to explore workplace web search, to explore the pressures shaping the context of searching, the search engines, and the searched for content.\nThe data generated, or informated, as byproducts of the web search of data engineers can largely be seen put to use by providers of search engines and websites, with limited tangential use by individuals, their organizations, or shared in larger communities. Various researchers have identified that technology or routines may be shaped by organizational pressures such that information is produced to allow for better control of the work processes ( Beniger (1986) , Zuboff (1988) and (2015) ) or in the belief that such information will prove valuable (the “data imperative” in Fourcade & Healy (2017) ).\nThe data generated as byproducts of the web search of data engineers can largely be seen, besides in the continued development and maintenance of the systems that support web search, in the research and activities of the major search engines (i.e. research from Microsoft query log analysis which may perhaps “provides a pulse of what software engineers are searching for and what problems they face” ( Bansal et al. (2019) ) and Google’s “Foobar”). It is also used by builders of websites (learning from the searchers, clickers, and lurkers Antin & Cheshire (2010) ). (Three interviewees noted the use of such website analytics. Two interviewees described examples of using analytics to guide marketing or documentation—one a former data engineer-turned-evangelist for an open source tool for data engineers, the other also involved in developing tools for use by data engineers. One data engineer I interviewed formerly worked in search engine optimization and also attested to the value to websites in the search logs.) But I did not find any examples of the data engineers or their employers using search data for informating.105 .\n Gaps\n \nI looked for bridging between technology gaps (Bailey et al., 2010; Bailey & Leonardi, 2015) or gaps between two technologies. Gap-bridging is where a new technology is introduced to connect a gap between two other technologies that previously the knowledge worker had to traverse manually. A simple example is if the result of a calculation from one piece of software has to be manually typed into another because they were not designed to interoperate. An engineer may then consider whether it is cost-effective to write new code to traverse that gap automatically, or at least without manually clicking and typing.\nI imagined I might find examples of people who had written tools to transform an error message directly into a Google search. While such tools, or prototypes, exist, I did not find anyone building or using them. Or perhaps a tool to directly move from notes to a search106 , or organizing queries from a search session. While many reported taking notes, they did not report integrated notes with the inputs or outputs of their search activity.\nInterviewees also did not discuss monitoring or scaffolding, for example guardrails to structure or hints or timers, efforts to improve search.107 The scaffolding discussed in Extending searching was developed to support the data engineering work as a whole, and it only incidentally embeds knowledge for successful searching. Those scaffolds were not an intentional application to influence search practices and I found no intentional supports for web searching.\nOne interviewee talked about how integrated development environments (IDEs), with the ability to provide reference information within the display, replaced some web searching. But the ability to reference documentation in the worker’s coding environment without web search has been around since before web search. The use of man pages for documentation reference goes back to the 1970s (Dzonsons, 2011).\nPeople have long been used to fill in gaps between technologies, and perhaps different people than those who would have been previously running a routine. This is discussed in work on heteromation (Ekbia & Nardi, 2014, 2017) and computational labor (Shestakofsky, 2017). I did not find individuals used to fill gaps in searching outside of that discussed in Repairing searching .\nOne interviewee108 invited me to speak at a small workshop at their company. They shared with me that they’d spoken with their manager about our conversation and that it had already provided an opportunity to talking explicitly about expectations in searching and asking questions. A month later I presented initial findings in a small teleconference with members of the company. Following up with this individual I learned the earlier conversations and the presentation had spurred the use of a Slack channel for sharing about things different team members had recently learned or looked up.\n\n we fired up a channel that was a “no stupid question” sort of thing, and I think people have used that a lot more, like that’s been clear that people use them, and that was kind of one of the like action items we proposed after that was post questions here, or even if you search something and you find out something dumb, we’ve also done like a lot more like today I learned sort of reflections, which I think has been helpful, we didn’t used to really do that so much. \n [ . . . ] \n I don’t know how everyone’s individual searches and what not have gone, but I can see that one of the things that we definitely did was the channels and those are way more active. There were five people in it before but no one was using them, and now it’s pretty much our entire data group will post things, or when they like just do things wrong, they pretty much posted in there too, so it kind of morphed out of like a, ‘finding answers’ to also just like a more general like humility, I don’t know like, this is a learning environment, I guess, but that was helpful, like that was great, I mean even if that was not like one of the intended aspects. \n\nThis is not the sort of technocratization of web search that involves logging search queries or technical tools to shape the searching itself, but it was an intentional application of technique to influence the wider search practices.\nDespite the heavy-reliance on web search in data engineering, the heavy demands on the data engineers to learn, quickly and constantly, neither the engineers nor their employers seem to have intentionally applied technique to influence search practices. Remarkably, at least to me, data engineering workplaces are free from the technocratization overtaking many other workplaces.\n Discussion: Delegating or foregoing ownership\n \nWhat is going on? Why is search, so heavily used, so very much admitted into the work practices, still so solitary and secretive? Why does it appear as though technocratization of search is absent?\n Initial explanations\n \n\n Single-user design of web search \n\nPrior work has discussed the single-user design of web search. Morris & Horvitz (2007) developed a prototype for collaborative web search, SearchTogether. They based its design on a survey suggesting that people (Microsoft employees were surveyed) want to collaborate “with friends, relatives, and colleagues when searching the Web” and many already engaged in collaborative searching behaviors (also called “joint searching” and “multi-user searching” by the authors). They noted that—in 2007 at least—“current Web search tools are designed for a single user, working alone.” Morris & Teevan (2009) , reviewing that prototype and two others in a review of collaborative web search, opened by remarking: “Today, Web search is treated as a solitary experience. Web browsers and search engines are typically designed to support a single user, working alone.” Three years later, Morris (2013) wrote, “the features of the primary tools for digital information seeking (web browsers and search engines) continue to reflect a presumption that search is a single-user activity.” But the design of the tool—the “technical functionality”109 —cannot be definitive, the people I interviewed are sophisticated builders and users of technology. The “latent structural constraints” (Surden, 2007) , from the design of web search, creating some of the privacy in searching, are probably not the strongest determinants keeping data engineers from informating or programmatically interacting with their own searching activity. They recognize technologies as flexible (Leonardi, 2011).\n\n Articulation of web searching as private \n\nThe expectations of privacy in web search may play a role. Despite competition and critique, Google has been very successful in articulating the use of its search engine as private. People recognize that their searches are sensitive and should be secured. Major media attention in the wake of the release of the AOL search logs in 2006 likely contributed to such a recognition.\n\n Rugged individualism \n\nA history of “rugged individualism” in software work likely plays a role (Ensmenger, 2015). Or, rather, the still active legacy of the manufactured perceptions of the role and responsibility of the individual during the 1960s and 1970s likely shapes some of the solitary and secretive searching. Ensmenger describes how the work was seen as involving “individual skill”, “individual expertise”, “individual programmers”, and “individual ability”. But it also was not wholly solitary work. Ensmenger also describes masculine competition and comparison as the stage for “display” (p. 59) or presentations of such skill. In their interactions, programmers would engage in “ritualized forms of competition” (p. 62) or otherwise find ways of “establishing dominance within the community hierarchy” (p. 57). This conceptualizing of skill as something owned by an individual and rituals that reinforce associated epistemologies and responsibilities persists in computing work. (Reagle, 2016) discusses the “obligation to know” and the performances of and for status or stature of knowers in his exploration of “geek knowing”.\nIt may be that desires to perform appropriate individualism and an awareness of competitive comparisons to others, with both shaping norms around shaming, drives some of the dynamics around solitary and secretive searching. But this also is not determinative. It doesn’t explain what exactly activity, knowledge, or skill might be concealed and what would be proudly and ritually revealed. Transparency in searching could potentially be the sort of artificial challenge that Ensmenger suggests provide opportunity for showmanship. Masculine competition could be performed with displays of superior querying or tooling for searching or memorization in lieu of searching. The research from Ensmenger may actual increase the tenor of the question, as he also shows how despite the impressions, computing work is very social (p. 58):\n\n despite the stereotype of the computer person as individualistic and “disinterested in people,” the computer center was a profoundly social space. [ . . . ] they were more than simply working alone, together. In practice, computer centers were abuzz with conversation and other forms of social interaction. \n\n\n Generalized reciprocity and self-reliance \n\nWe can also look at another seemingly core tenet of computing professions: generalized reciprocity. Weber (2004) , discussing open source and quoting from Constant et al. (1996) , wrote (p. 140):\n\n Generalized reciprocity is a firmly established norm of organizational citizenship within this community. Contributing code and helping others is a sign of “positive regard for the social system in which requests for help are embedded,” a manifestation of pro-social behavior observed in other technically oriented settings as well. \n\nThe solitary and secretive behavior might seem to stand in great contrast to notions of generalized reciprocity presented as a hallmark of open source and other technical communities. But reciprocity needn’t imply radical openness (Turco, 2016). Search activity may simply not be included in the community norms around what could or should he shared. The gift giving might flourish while never encroaching on cherished conceptions of individual knowledge and backstage privacy for search activity.\nThe reciprocity in these communities exists in coordination with the rugged individualism. As Weber goes on to write (p. 145):\n\n The popular image of an open source hacker as a lone ranger emphasizes the self-reliant attitude that is certainly present but misses the deep way in which that self-reliance is known to be made possible through its embedding in a community. The belief is that the community empowers the individual to help himself. \n\nWe see the same in the Debian open source community chronicled by Coleman (2012). She observes that “hacker sociality alternates between communal populism and individual elitism” (p. 105). Coleman writes (p. 107):\n\n On the other hand, hackers often express a commitment to self-reliance, which can be at times displayed in a quite abrasive and elitist tone. The most famous token of this stance is the short quip “Read the Fucking Manual” (RTFM). It is worth noting that accusations or RTFM replies are rarer than instances of copious sharing. [ . . . ] These two poles of value reflect pervasive features of hacker social and technical production as it unfolds in everyday life. It only takes a few days of following hacker technical discussion to realize that many of their conversations, whether virtual or in person, are astonishingly long question-and-answer sessions. To manage the complexity of the technological landscape, hackers turn to fellow hackers (along with manuals, books, mailing lists, documentation, and search engines) for constant information, guidance, and help. \n\nColeman writes of the credo or values of openness, transparency, and access within the open source community. Providing content to be found by searches, including answering Stack Overflow questions, is part of this openness.110 But while some of those answers do discuss how to search, the transparency generally seems to not include the search activity itself. Though there is significant reciprocity in Repairing searching and community work in Extending searching , the ostensible moments of searching seem to be treated differently. The activity at the search box and on the SERP seemed to be that portion of the work that people are expected to do on their own (and that people may interpret as protected—through mutually enacted secrecy (Seaver, 2017., p.5) —to do on their own, in the backstage (Goffman, 1956).111\n\n Learning in organizations and in privacy\n \nWe can pull these all together—and address solitary and secretive searching and the absence of technocratization of search—with support from literature from organizational learning and privacy for learning. A body of research shows that learning (including organizational learning) may be facilitated by privacy (Bernstein, 2012). If you are expected to do a lot of learning, you might pursue a zone of privacy to avoid exposing what you do not know or to avoid being disrupted in your learning efforts.\nData engineers rely on web search because neither they nor their larger organization knows all they need to know. Web search is a tool for pursuing answers to definite questions and reliance on it is a strategy that affords significant flexibility—in so far as the extensions of search are well-aligned with the search problems in question. Thompson (1967) writes that “Uncertainty appears as the fundamental problem for complex organizations, and coping with uncertainty, as the essence of the administrative process” (p. 159). Part of that coping is through bounded rationality through their structures, “the bounding of rationality requires structural decentralization, the creation of semiautonomous subsystems.” (p. 54; p. 161). Organizations pursue “dual searches for certainty and flexibility” (p. 150). At the higher levels of the organization, at the time of his writing, flexibility and slack was the focus. At the lower decentralized levels at the technical core, it was certainty.\nSubsequent work, looking at the constant change and competition in 2000s era web design and new media, suggests the decentralization extends to the level of individuals—with flexibility also being pushed lower. Girard & Stark (2002) write of search as “generalized and distributed”. Kotamraju (2002) writes of the expectation that the “flexible reinvented worker” will be constantly “keeping up”. Neff (2012) writes how “work itself has been largely individualized” (p. 14) and how “individuals now bear most of the costs of flexibility and are responsible for activities previously thought of as within the purview of companies” (p. 14). Neff writes (p. 18):\n\n Considering the quick turnaround times on the development of computer applications, employees are expected, in the words of one programmer, to “hit the ground running” with continually updated skills, including new programming languages and familiarity with new technologies. \n\nThe organizational approaches to (and shaping) the dynamism of 2000s era web design and new media may be compared to the organization of work in data science, machine learning, and data engineering today. Avnoon (2021) writes of data scientists “intensive self-learning” to “keep[] abreast” and “the emotional stress caused by continuously attempting to keep pace with technological and theoretical developments.” Data engineers I interviewed also remark on there being too much to know, constant change in tools and practices being stressful, and flailing around frustrated and desperate in the search bar.\nMy argument is that the solitariness and secrecy of search is a consequence of this organizational—and professional—response to uncertainty made within the context of the preceding norms of (1) searches as private, of (2) knowledge as something ‘owned’ and performed for status, and of (3) the boundaries of reciprocity. Perhaps data engineers do not grant that their searching might be technocratized, informated or automated, because of the challenge is would pose to their identity and ways of knowing. Perhaps they do not publicize and compete in, or share and share in, their searching because they need theirsolitary searching to remain private so they might present the appearance of rugged individualism. Transparency (and concomitant competition in a masculine culture) might shatter the illusion of individualism, meritocracy, genius112 , and challenge the systems that favor them.\nTechnocratized or collaborative and transparent searching might risk removing artificial barriers to the fields. As it is, the extensive solitary searching and demand for self-reliance may be an artificial barrier. Ensmenger (2015) argued that the “whiz kid” or “computer boy” identity (p. 65):\n\n provided programmers with many of the perceived benefits of professionalization: the establishment of barriers to entry to the discipline, the possession of a “monopoly of competence,” and mastery over an esoteric body of knowledge. [internal footnotes omitted] \n\nVarious approaches to change may require a shift to explicitly viewing requests for help as a chance to connect and learn (Perlow & Weeks, 2002) rather than an interruption113 and a sign of individual weakness. Technocratized or collaborative and transparent searching may also require addressing cultures of shame (or they could risk slowing learning as people hide or avoid searching). Turco (2016) demonstrates how surveillance can be imagined by the surveilled to be a form of access to managers a benefit (see also Stark & Levy (2018) ).\nChanging the technology as a way of changing the culture may be a “punctuating force” and could “disrupt an established social structure” (Leonardi, 2007) and “forced representation of work” (Star & Strauss, 2004) may have unanticipated consequences. The decision makers within the field may resist changes because they benefit from the flexibility that structurelessness provides (Freeman, 2013).\n Conclusion: Uncertainty sink\n \nIndividuals are identified as responsible for their searching. This contributes to solitary and secretive searching. People still participate in the larger shared work practices, shown in Extending searching , and to a lesser degree newcomers may gradually participate to varying degrees in fixing failed searches, shown in Extending searching . This participation introduces new data engineers to the ways of working and searching as a data engineer. For many data engineers that is enough, they are able to jockey and save face as they ask questions to repair failed searches, and make friends or otherwise develop strong rapport with more experienced coworkers. Those relationships allow them to ask questions outside of the search repair channels and not suffer as much when their public questions are out of place. But others stay on the periphery, already marginalized in the larger community, they are judged more harshly for their lack of knowledge and made more responsible for searching on their own. How responsibility for searching is positioned creates this cyclic loop that keeps penalizing those on the outside and the responsibility for is distributed to individual searchers,\nThe status quo for the data engineers is devoid of technocratization (intentional application of technique to influence search activity). While searching is a collaborative endeavor, the data engineers’ searches are solitary and secret. While some privacy for searches facilitates individual learning, the current balance of secrecy may limit organizational learning and limit effective inclusion in data engineering. Data engineers search “on their own” and conceal their learning work. Individual searchers act as an “uncertainty sink”114 , allowing the organization to act nimbly, assigning to the individual “flexible reinvented worker” (Kotamraju, 2002) the responsibility to maintain and improve their skills. But that responsibility is not governed or managed by the organization.\n\n Bibliography\n\n\n\nAntin, J., & Cheshire, C. (2010). Readers are not free-riders: Reading as a form of participation on wikipedia.Proceedings of the 2010 Acm Conference on Computer Supported Cooperative Work, 127–130. https://doi.org/10.1145/1718918.1718942 \n\n\n\nAvnoon, N. (2021). Data scientists’ identity work: Omnivorous symbolic boundaries in skills acquisition.Work, Employment and Society,0 (0), 0950017020977306. https://doi.org/10.1177/0950017020977306 \n\n\n\nBailey, D. E., & Leonardi, P. M. (2015).Technology choices: Why occupations differ in their embrace of new technology. MIT Press. http://www.jstor.org/stable/j.ctt17kk9d4 \n\n\n\nBailey, D. E., Leonardi, P. M., & Chong, J. (2010). Minding the gaps: Understanding technology interdependence and coordination in knowledge work.Organization Science,21 (3), 713–730. https://doi.org/10.1287/orsc.1090.0473 \n\n\n\nBansal, C., Zimmermann, T., Awadallah, A. H., & Nagappan, N. (2019). The usage of web search for software engineering.arXiv Preprint arXiv:1912.09519.\n\n\nBeniger, J. (1986).The control revolution: Technological and economic origins of the information society. Harvard university press.\n\n\nBernstein, E. S. (2012). The transparency paradox: A role for privacy in organizational learning and operational control.Administrative Science Quarterly,57 (2), 181–216. https://doi.org/10.1177/0001839212453028 \n\n\n\nBeunza, D., & Stark, D. (2012). From dissonance to resonance: Cognitive interdependence in quantitative finance.Economy and Society,41 (3), 383–417. https://doi.org/10.1080/03085147.2011.638155 \n\n\n\nChristin, A. (2017). Algorithms in practice: Comparing web journalism and criminal justice.Big Data & Society,4 (2), 1–12. https://doi.org/10.1177/2053951717718855 \n\n\n\nColeman, E. G. (2012).Coding freedom: The ethics and aesthetics of hacking. Princeton University Press. https://gabriellacoleman.org/Coleman-Coding-Freedom.pdf \n\n\n\nConstant, D., Sproull, L., & Kiesler, S. (1996). The kindness of strangers: The usefulness of electronic weak ties for technical advice.Organization Science,7 (2), 119–135.\n\n\nDreyfus, H. L., & Dreyfus, S. E. (2005). Peripheral vision: Expertise in real world contexts.Organization Studies,26 (5), 779–792.\n\n\nDzonsons, K. (2011).History of unix manpages. https://manpages.bsd.lv/history.html .\n\n\nEkbia, H., & Nardi, B. (2014). Heteromation and its (dis) contents: The invisible division of labor between humans and machines.First Monday. https://doi.org/https://doi.org/10.5210/FM.V19I6.5331 \n\n\n\nEkbia, H. R., & Nardi, B. A. (2017).Heteromation, and other stories of computing and capitalism. MIT Press.\n\n\nEnsmenger, N. (2015). “Beards, sandals, and other signs of rugged individualism”: Masculine culture within the computing professions.Osiris,30 (1), 38–65. http://www.jstor.org/stable/10.1086/682955 \n\n\n\nFourcade, M., & Healy, K. (2017). Seeing like a market.Socio-Economic Review,15 (1), 9–29. https://doi.org/https://doi.org/10.1093/ser/mww033 \n\n\n\nFreeman, J. (2013). The tyranny of structurelessness.WSQ,41 (3-4), 231–246. https://doi.org/10.1353/wsq.2013.0072 \n\n\n\nGirard, M., & Stark, D. (2002). Distributing intelligence and organizing diversity in new-media projects.Environment and Planning A,34 (11), 1927–1949.\n\n\nGoffman, E. (1956).The presentation of self in everyday life. University of Edinburgh.\n\n\nHodgson, G. M. (2001).How economics forgot history: The problem of historical specificity in social science. Routledge.\n\n\nKotamraju, N. P. (2002). Keeping up: Web design skill and the reinvented worker.Information, Communication & Society,5 (1), 1–26. https://doi.org/10.1080/13691180110117631 \n\n\n\nLeonardi, P. M. (2007). Activating the informational capabilities of information technology for organizational change.Organization Science,18 (5), 813–831. https://doi.org/10.1287/orsc.1070.0284 \n\n\n\nLeonardi, P. M. (2011). When flexible routines meet flexible technologies: Affordance, constraint, and the imbrication of human and material agencies.MIS Quarterly,35 (1), 147–167. http://www.jstor.org/stable/23043493 \n\n\n\nLianos, M. (2010). Periopticon: Control beyond freedom and coercion and two possible advancements in the social sciences. In K. D. Haggerty & M. Samatas (Eds.),Surveillance and democracy (pp. 69–88). https://www.taylorfrancis.com/chapters/edit/10.4324/9780203852156-11/periopticon-control-beyond-freedom-coercion-two-possible-advancements-social-sciences-michalis-lianos \n\n\n\nMorris, M. R. (2013). Collaborative search revisited.Proceedings of Cscw 2013. https://doi.org/10.1145/2441776.2441910 \n\n\n\nMorris, M. R., & Horvitz, E. (2007). SearchTogether: An interface for collaborative web search.Proceedings of the 20th Annual Acm Symposium on User Interface Software and Technology, 3–12.\n\n\nMorris, M. R., & Teevan, J. (2009). Collaborative web search: Who, what, where, when, and why.Synthesis Lectures on Information Concepts, Retrieval, and Services,1 (1), 1–99. https://doi.org/10.2200/S00230ED1V01Y200912ICR014 \n\n\n\nNeff, G. (2012).Venture labor: Work and the burden of risk in innovative industries. MIT press. https://mitpress.mit.edu/books/venture-labor \n\n\n\nNissenbaum, H. (2011b). From preemption to circumvention: If technology regulates, why do we need regulation (and vice versa).Berkeley Tech. LJ,26, 1367.\n\n\nOrr, J. E. (1996).Talking about machines: An ethnography of a modern job. ILR Press.\n\n\nPerlow, L., & Weeks, J. (2002). Who’s helping whom? Layers of culture and workplace behavior.Journal of Organizational Behavior,23 (4), 345–361. https://doi.org/https://doi.org/10.1002/job.150 \n\n\n\nReagle, J. (2016). The obligation to know: From faq to feminism 101.New Media &Amp; Society,18 (5), 691–707. https://doi.org/10.1177/1461444814545840 \n\n\n\nSeaver, N. (2017). Algorithms as culture: Some tactics for the ethnography of algorithmic systems.Big Data & Society,4 (2), 1–12. https://doi.org/10.1177/2053951717738104 \n\n\n\nShestakofsky, B. (2017). Working algorithms: Software automation and the future of work.Work and Occupations,44 (4), 376–423. https://doi.org/10.1177/0730888417726119 \n\n\n\nStar, S. L., & Strauss, A. (2004). Layers of silence, arenas of voice: The ecology of visible and invisible work.Computer Supported Cooperative Work (CSCW),8, 9–30.\n\n\nStark, L., & Levy, K. (2018). The surveillant consumer.Media, Culture & Society,40 (8), 1202–1220. https://doi.org/10.1177/0163443718781985 \n\n\n\nSurden, H. (2007). Structural rights in privacy.SMU Law Review,60 (4), 1605. https://scholar.law.colorado.edu/articles/346/ \n\n\n\nThompson, J. D. (1967).Organizations in action: Social science bases of administrative theory (1st ed.). McGraw-Hill.\n\n\nTurco, C. J. (2016).The conversational firm: Rethinking bureaucracy in the age of social media. Columbia University Press.\n\n\nWeber, S. (2004).The success of open source. Harvard University Press. https://www.hup.harvard.edu/catalog.php?isbn=9780674018587 \n\n\n\nZuboff, S. (1988).In the age of the smart machine. Basic books.\n\n\nZuboff, S. (2015). Big other: Surveillance capitalism and the prospects of an information civilization.Journal of Information Technology,30 (1), 75–89. https://doi.org/10.1057/jit.2015.5 \n\n\n\n\n\n\n\n This interview excerpt is also in Admitting searching . ↩︎ \n\n\n\n This search work on one’s own is related to the ‘due diligence’ that research participants described doing before asking colleagues for help (discussed in due diligence and packaging questions ). You can turn to colleagues for help, generally after assuming responsibility for searching, and they may provide help but they are unlikely to assist in the search box or on the SERP. The web search activity consisting of interacting directly with the search engine is generally the responsibility of the solitary data engineer. ↩︎ \n\n\n\n See in Admitting searching : search talk? . ↩︎ \n\n\n\n An interest in speedy searching , next section. ↩︎ \n\n\n\n This interview excerpt is also in Running workable code . ↩︎ \n\n\n\n This last line from Shreyan may be read to suggest an explanation or justification for the secrecy around search and its distributed nature. There may be a desire to avoid ‘resonance’, a term to describe something akin to groupthink perhaps, that Beunza & Stark (2012) use to describe “a dangerous form of cognitive interdependence” where productive dissonance is disrupted by the lack of diversity in approaches. Distinctly different, when I clarified with Shreyan later in the interview, he referred to research on brainstorming that suggested it was most effective when people were able to generate ideas on their own rather than in a group, before critiquing them. ↩︎ \n\n\n\n A fuller treatment would engage more deeply with writings on the future of work, surveillance studies, and perhaps the quantified self-movement. Lianos (2010) , for instance, could be read to suggest that the logic of what to do with accumulated data is not clear, writing “accumulated data do not necessarily amount to a plan and even less so to a totalitarian plan” (p. 72). ↩︎ \n\n\n\n Except insofar as tooling or structure is added to the process of asking questions of colleagues, discussed in Repairing searching . ↩︎ \n\n\n\n For instance, I wrote in Python a simple a clunky plugin for myself for the Sublime text editor that takes a simple notation (the search tool code followed by the query in square brackets) and with a hotkey opens a browser tab with the search. So I can write g[search this] or bmail[search this] in my notes and my hotkey (i.e. Cmd+l+o) will open a tab in my browser to the Google or Berkeley Gmail, respectively, search for [search this]. This sacrifices some features of searching in the address bar or in the search box. For example, I do not see suggested searches or auto-completed phrases from the search engine. ↩︎ \n\n\n\n Such monitoring or scaffolding does not fall under the rubric of gap-bridging discussed by Bailey & Leonardi (2015) , but could provide support for navigating gaps. ↩︎ \n\n\n\n I am not using the pseudonym of the interviewee to reduce the likelihood of identification. ↩︎ \n\n\n\n\n Nissenbaum (2011b) wrote of Adnostic, a system for privacy preserving targeted advertising: \n\n In the effort to gain a toehold for Adnostic, technical functionality is not the greatest barrier. We have found ourselves up against a cultural mythology of innovation, incredibly powerful in the context of the Internet and web. \n\n↩︎ \n\n\n Very few of my research participants made mention of providing content on forums such at Stack Overflow, whether asking questions or answering. I do not venture an explanation for this lack of reciprocity, though note that research like that from Antin & Cheshire (2010) indicate readers and lurkers still provide significant value to online communities. So these individuals can still be seen to contribute to their broader community through their website visits. ↩︎ \n\n\n\n\n Goffman (1956, p. 70) : “the back region will be the place where the performer can reliably expect that no member of the audience will intrude.” ↩︎ \n\n\n\n Perhaps the solitary and secretive searching preserves the appearance of genius, the esoteric. Ensmenger (2015) tells of John Backus, developer of FORTRAN, critically calling programming of the 1950s “a black art, a private arcane matter”: \n\n While Backus did not intend this description to be complimentary—as an aspiring computer scientist he saw this reliance on individual ability and local knowledge to be demeaning—many other programmers saw this emphasis on personal creativity and esoteric skill as the source of their professional authority. To be a devotee of a dark art, a high priest, or a sorcerer (all popular metaphors used to describe programming in this period) was to be privileged, elite, master of one’s own domain. It was certainly preferable to being characterized as a glorified clerical worker or a “mere” technician. [internal footnote omitted] \n\n↩︎ \n\n\n\n Orr (1996) writes to the systemic approaches of the copy repair technicians making their work “interruptible”: “Being systematic has the advantage of being interruptible” (p. 145). ↩︎ \n\n\n\n Like a heat sink (or heatsink), which moves heat from a heat generating component to a medium that dissipates heat, some business uncertainty is addressed by the delegation of searching to individuals. ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/owning_searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-packaging", "type": "pages" , "date": "", "title": "packaging tag" , "tags": "", "content": "{% assign tag_name = \"packaging\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"packaging\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"packaging\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/packaging/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "browse-pages", "type": "pages" , "date": "", "title": "Browse > Pages" , "tags": "", "content": "\n\n\n\nHere is a page to facilitate your browsing-based search and discovery of Pages on this website.\nThe figure below is a treemap (Wikipedia) made with D3.js and depicting nodes for root-level pages on this website by a character count of each page. Each node is clickable.\nIf you would prefer, an XML sitemap is located at /sitemap.xml. To learn more about this website, see Site.\n\n\n\n\n\n", "snippet": "\n", "url": "/browse/pages/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-pantene", "type": "pages" , "date": "2019-05-01", "title": "pantene" , "tags": "", "content": "From Pantene, in a now [2022-09-12 13:20] deleted tweet:\n\nIntroducing SHE: Search. Human. Equalizer., a search tool that shows us what a world with less bias could look like. Head over to our Instagram Stories to see what S.H.E. can do! 🙌 #PowerToTransform #SheTransforms pic.twitter.com/XBy6Z3kecj— Pantene Pro-V (@Pantene) April 30, 2019\n\n\nA thread of my initial reaction—acknowledging the search problem while raising some questions:\n\nRe: the S.H.E. Search Human Equalizer extension from Pantene.I'm really interested to know who they are working with.It looks like currently a crowd-sourced but hand-curated list of search terms they attempt to (somehow unstated?) re-balance (or 'equalize' in the results)? pic.twitter.com/Ltkm1Opvon— Daniel Griffin (@danielsgriffin) May 1, 2019\n\n\nOthers:\n\nI’m sorry to say I was asked conceptually about this project & commented on the idea, but was not allowed see/test it. Some of my hesitation also not captured in this story, and no donation has been made, but I welcome research funding from donations to further study tech harms.— Safiya Umoja Noble PhD (@safiyanoble) May 1, 2019\n\n\nIt would be SUCH A SHAME if @pantene wasted all this woke cred by never acknowledging that their "debiased search engine" ad is directly based on the brilliant book Algorithms of Oppression, by @safiyanoble https://t.co/GfzfZ2TRkE— Sasha Costanza-Chock (@schock) May 3, 2019\n\n\nWTF WTF WTF @pantene just took a huge and important social problem (and an area of scholarship) and made it into an ad for their shampoo?! With a fake browser plug-in? Via @schock https://t.co/xOofSnc6lo #algorithms @fatconference #HCI— Christian Sandvig🐩 (@niftyc) May 3, 2019\n\n\ni mean their ability to so perfectly distill the lesson "diversity/inclusion ≠ justice" into a PR stunt is sort of impressive tho— Anna Lauren Hoffmann (@annaeveryday) May 3, 2019\n\n\n\nA too-long thread after more digging into inadvertant(?) deception—here's 1/40+:\n\nThe Pantene S.H.E. plug-in is much more problematic—and far more fake—than initially suspected.tl;dr: @Pantene is elevating itself in search results.Our sexist and racist society affecting search is real, this isn't the answer.Credit to a reviewer for highlighting this.[1]— Daniel Griffin (@danielsgriffin) May 4, 2019\n\n\nReactions:\n\nWe thought they had maxed out on offenses but Pantene’s anti bias search engine plug in appears to elevate their own products in the search results. https://t.co/mGkYKcV950— Sarita Schoenebeck (@syardi) May 5, 2019\n\n\nNew details emerge: The S.H.E. anti-sexism "debiasing" plug-in is apparently a false flag operation by @ProcterGamble that injects @Pantene shampoo ads into your search results. https://t.co/R1kvjoylgd— Christian Sandvig🐩 (@niftyc) May 5, 2019\n\n\nA personal filter to hide bias in search results is at best a band-aid on a structural problem of representational harm. Then they had to throw in a principal-agent problem for good measure! https://t.co/aFf5AcCq83— Reuben Binns (@RDBinns) May 5, 2019\n\n\n\nThread 🚨Context: Pantene developed a Chrome plugin that is supposed to “equalize” search results between men and women but it turns out that’s not the only thing the plugin does...Read. This. https://t.co/diTbOU5xjM— Blakeley H. Payne @ Future of Everything Festival (@blakeleyhpayne) May 5, 2019\n\n\nThread on why the answers to our social problems (exacerbated by digital economics) may not be coming from a company providing a technical solution (benefiting itself above others) this time either. ⤵️ https://t.co/rQN1IGXwSK— Anna Jobin (@annajobin) May 5, 2019\n\n\nThis is so gross. Also daily reminder to always remember what your at the minimum first two pages of search look like. Probably not a picture to be taken at face value https://t.co/w4lY4zmjUy— Ada Kępińska (@adapkepinska) May 6, 2019\n\n\nIncredibly gross. https://t.co/aBv7SPNffh— Danya Glabau (@allergyPhD) May 5, 2019\n\n\n👀👀👀 https://t.co/dohsaQSY4n— One Ring (doorbell) to surveil them all... (@hypervisible) May 5, 2019\n\n\n\nFrom a Google Search results page engineer:\n\nI applaud Pantene for challenging search engines to reduce bias. Their Chrome extension is a convincing demo.However, it is bad as an actual solution. It only works for a few particular searches.And egregiously it inserts Pantene links as if they were organic search results: pic.twitter.com/AJVLUKJCEt— Eamonn O'Brien-Strain 🔎 (@eob) May 6, 2019\n\n\n\nA follow-up tweet highlighting the activity of Pantene's parent company, P&G, in digital marketing:\n\nPantene's S.H.E. tool is a dirty drop of water in a frothy ocean of digital marketing but comes amidst criticism of GOOG from P&G.Per @GerritD & @sarahfrier, P&G "would move its money to services" that were, inter alia, "more willing to share consumer data with advertisers."[1] https://t.co/suwE2FdVFM— Daniel Griffin (@danielsgriffin) May 8, 2019\n\n\n\nA follow-up tweet highlighting someone from Good Housekeeping lauding the extension (with some targeted marketing) — and showing how with the S.H.E. extension replaces a Good Housekeeing article from the top result for [great hair] with a page from Pantene.\n\nInspiration:The next step in @Pantene's campaign is a mailer to @goodhousemag[1]. This is particularly interesting because today if I search [great hair] the top result, after Places and Images, is a classic article in Good Housekeeping from @mindtheclam.https://t.co/dtOiP0INGo— Daniel Griffin (@danielsgriffin) May 20, 2019\n\n\n\nThis page was published on 2019-05-22.", "snippet": "\n", "url": "/tweets/pantene/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-parsing-details", "type": "pages" , "date": "", "title": "parsing-details tag" , "tags": "", "content": "{% assign tag_name = \"parsing-details\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"parsing-details\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"parsing-details\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/parsing-details/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-peer-review", "type": "pages" , "date": "", "title": "peer review tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"peer review\" tag.\n \n\n\n{% assign tag_name = \"peer review\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"peer review\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"peer review\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/peer-review/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-people-also-asked", "type": "pages" , "date": "", "title": "people-also-asked tag" , "tags": "", "content": "{% assign tag_name = \"people-also-asked\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"people-also-asked\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"people-also-asked\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/people-also-asked/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-perplexity-ai", "type": "pages" , "date": "", "title": "Perplexity-AI tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Perplexity-AI\" tag.\n \n\n\n{% assign tag_name = \"Perplexity-AI\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Perplexity-AI\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Perplexity-AI\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/perplexity-ai/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-personalized-search", "type": "pages" , "date": "", "title": "personalized-search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"personalized-search\" tag.\n \n\n\n{% assign tag_name = \"personalized-search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"personalized-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"personalized-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/personalized-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-phind", "type": "pages" , "date": "", "title": "Phind tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Phind\" tag.\n \n\n\n{% assign tag_name = \"Phind\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Phind\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Phind\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/phind/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "pposts", "type": "pages" , "date": "", "title": "pPosts" , "tags": "", "content": "\nThis page lists possible posts, potential posts, plausible posts, planned posts, partial posts, or perfect posts?\n \n\n\n{% for item in site.pposts %}\n\n{{ item.title }}\n{% assign content = item.content | strip %}\n{% if content != '' %}\n {{ content }}\n{% endif %}\n\n{% endfor %}", "snippet": "\n", "url": "/pposts/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-preprints", "type": "pages" , "date": "", "title": "preprints tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"preprints\" tag.\n \n\n\n{% assign tag_name = \"preprints\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"preprints\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"preprints\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/preprints/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-presentation-of-neutrality", "type": "pages" , "date": "", "title": "presentation-of-neutrality tag" , "tags": "", "content": "{% assign tag_name = \"presentation-of-neutrality\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"presentation-of-neutrality\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"presentation-of-neutrality\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/presentation-of-neutrality/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-process-sr-item-js", "type": "pages" , "date": "", "title": "search/process_sr_item.js" , "tags": "", "content": "function addSearchResultSnippet(item) {\n console.log(item)\n if (!(item[\"hand_curated_snippet\"] || item[\"generated_snippet\"])) {\n // remove the snippet element if there is no snippet\n console.log('No snippet found for:', item.url)\n return;\n }\n let srSnippet = document.createElement('div');\n srSnippet.className = 'sr-snippet';\n let snippetParagraph = document.createElement('p');\n if (item.hand_curated_snippet && item.hand_curated_snippet.length > 1) {\n snippetParagraph.innerHTML = item.hand_curated_snippet + ' hand-curated snippet';\n } else if (item.generated_snippet && item.generated_snippet.length > 1) {\n snippetParagraph.innerHTML = `\n \n \n \n \n \n ` + item.generated_snippet;\n }\n srSnippet.appendChild(snippetParagraph);\n return srSnippet;\n}\n\n\nfunction processSearchResultItem(item) {\n var formattedDate = \"N.d.\";\n // Format the date in a human-readable format\n try {\n var date = new Date(item.date);\n formattedDate = date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n } catch (error) {\n console.error('Error occurred with:', item);\n }\n\n function decodeHtml(html) {\n let txt = document.createElement(\"textarea\");\n txt.innerHTML = html;\n return txt.textContent;\n } \n var listItem = document.createElement('li');\n listItem.className = \"w-100 list-group-item list-unstyled p-0 border-white\"\n var srItemContainer = document.createElement('div');\n srItemContainer.className = 'card col-12 border-0 sr-item-container';\n var srItemContainerBody = document.createElement('div');\n srItemContainerBody.className = 'card-body py-0';\n var srItemColumnLeft = document.createElement('div');\n srItemColumnLeft.className = 'sr-item-column-left';\n\n var srTitle = document.createElement('a');\n srTitle.className = 'sr-title';\n srTitle.href = decodeHtml(item.url);\n let decodedTitle = decodeHtml(item.title);\n if (item.type === \"external\") {\n srTitle.innerHTML = `\n \n ` + decodeHtml(decodedTitle);\n } else {\n srTitle.innerHTML = decodeHtml(decodedTitle);\n };\n srItemColumnLeft.appendChild(srTitle);\n\n\n var srUrl = document.createElement('div');\n srUrl.className = 'sr-url';\n srUrl.textContent = decodeHtml(item.url);\n srItemColumnLeft.appendChild(srUrl);\n\n let searchResultSnippet = addSearchResultSnippet(item);\n if (searchResultSnippet) {\n srItemColumnLeft.appendChild(searchResultSnippet);\n }\n\n // Check if the item has 'tags'\n if (item.tags && item.tags !== \"[]\") {\n const strippedString = item.tags.replace(/\\[|\\]/g, \"\");\n const itemTagsList = strippedString.split(',');\n\n const divTags = document.createElement('div');\n divTags.className = 'sr-tags';\n divTags.textContent = 'tags: ';\n\n for (let i = 0; i < itemTagsList.length; i++) {\n const aTag = document.createElement('a');\n aTag.className = 'tags';\n aTag.href = '{{site.url}}/tags/' + itemTagsList[i].trim();\n aTag.innerHTML = itemTagsList[i].trim();\n\n\n divTags.appendChild(aTag);\n\n if (i < itemTagsList.length - 1) {\n divTags.appendChild(document.createTextNode(', '));\n }\n }\n srItemColumnLeft.appendChild(divTags);\n }\n srItemContainerBody.appendChild(srItemColumnLeft);\n srItemContainer.appendChild(srItemContainerBody);\n\n if (item.snippet_image) {\n // Prepend site url to the snippet image\n let imageUrl = \"{{ site.url }}/images/\" + item.snippet_image;\n\n var srImage = document.createElement('div');\n srImage.className = 'sr-image';\n var imageDiv;\n if (item.snippet_image_class) {\n if (item.snippet_image_class.includes('paper_image')) {\n imageDiv = document.createElement('div');\n imageDiv.className = 'paper_image_box';\n imageDiv.style = \"float: right; margin-left: .2em\";\n var paperImage = document.createElement('img');\n paperImage.className = 'paper_image';\n paperImage.src = imageUrl;\n paperImage.alt = item.snippet_image_alt;\n imageDiv.appendChild(paperImage);\n srImage.appendChild(imageDiv);\n } else if (item.snippet_image_class.includes('circle')) {\n imageDiv = document.createElement('div');\n imageDiv.className = 'circleborder';\n imageDiv.style = \"float: right; margin-left: .2em\";\n var circleImage = document.createElement('img');\n circleImage.className = 'face';\n circleImage.src = imageUrl;\n circleImage.alt = item.snippet_image_alt;\n imageDiv.appendChild(circleImage);\n srImage.appendChild(imageDiv);\n }\n }\n srItemContainer.appendChild(srImage);\n }\n listItem.appendChild(srItemContainer);\n return listItem;\n}", "snippet": "\n", "url": "/js/search/process_sr_item.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-prompt-engineering", "type": "pages" , "date": "", "title": "prompt engineering tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"prompt engineering\" tag.\n \n\n\n{% assign tag_name = \"prompt engineering\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"prompt engineering\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"prompt engineering\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/prompt-engineering/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-prompt-injection", "type": "pages" , "date": "", "title": "prompt injection tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"prompt injection\" tag.\n \n\n\n{% assign tag_name = \"prompt injection\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"prompt injection\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"prompt injection\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/prompt-injection/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-prompting-is-thinking-too", "type": "pages" , "date": "", "title": "prompting is thinking too tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"prompting is thinking too\" tag.\n \n\n\n{% assign tag_name = \"prompting is thinking too\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"prompting is thinking too\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"prompting is thinking too\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/prompting-is-thinking-too/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-prospective-search", "type": "pages" , "date": "", "title": "prospective-search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"prospective-search\" tag.\n \n\n\n{% assign tag_name = \"prospective-search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"prospective-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"prospective-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/prospective-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-public-interest-technology", "type": "pages" , "date": "", "title": "public-interest-technology tag" , "tags": "", "content": "{% assign tag_name = \"public-interest-technology\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"public-interest-technology\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"public-interest-technology\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/public-interest-technology/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "publications", "type": "pages" , "date": "2023-06-12", "title": "Publications" , "tags": "", "content": "_Refereed Publications are presented below. See [CV](/cv) for full list of publications. Click the [shortcut] links to jump to more context._\n\nSee also my dissertation: Griffin D. (2022) [Situating Web Searching in Data Engineering: Admissions, Extensions, Repairs, and Ownership](/assets/griffin2022situating.pdf). Ph.D. dissertation. Advisors: Deirdre K. Mulligan and Steven Weber. University of California, Berkeley. 2022. [[griffin2022situating]](/shortcuts/griffin2022situating.html)\n\n\n- @griffin2022search\n- @goldenfein2022platforming\n- @burrell2019control\n- @mulligan2018rescripting\n\n\n\n## alphabetical", "snippet": "

    See CV for full list of publications.

    \n", "url": "/publications/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-queries-and-prompts", "type": "pages" , "date": "", "title": "queries-and-prompts tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"queries-and-prompts\" tag.\n \n\n\n{% assign tag_name = \"queries-and-prompts\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"queries-and-prompts\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"queries-and-prompts\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/queries-and-prompts/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-query-formulation", "type": "pages" , "date": "", "title": "query formulation tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"query formulation\" tag.\n \n\n\n{% assign tag_name = \"query formulation\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"query formulation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"query formulation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/query-formulation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-query-reformulation", "type": "pages" , "date": "", "title": "query-reformulation tag" , "tags": "", "content": "{% assign tag_name = \"query-reformulation\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"query-reformulation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"query-reformulation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/query-reformulation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-rag", "type": "pages" , "date": "", "title": "RAG tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"RAG\" tag.\n \n\n\n{% assign tag_name = \"RAG\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"RAG\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"RAG\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/rag/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-re-fixing-search", "type": "pages" , "date": "", "title": "re fixing search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"re fixing search\" tag.\n \n\n\n{% assign tag_name = \"re fixing search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"re fixing search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"re fixing search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/re-fixing-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-recommendation", "type": "pages" , "date": "", "title": "recommendation tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"recommendation\" tag.\n \n\n\n{% assign tag_name = \"recommendation\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"recommendation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"recommendation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/recommendation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-recommendationdd", "type": "pages" , "date": "", "title": "recommendationdd tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"recommendationdd\" tag.\n \n\n\n{% assign tag_name = \"recommendationdd\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"recommendationdd\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"recommendationdd\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/recommendationdd/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-refusal", "type": "pages" , "date": "", "title": "refusal tag" , "tags": "", "content": "{% assign tag_name = \"refusal\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"refusal\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"refusal\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/refusal/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-reimagine", "type": "pages" , "date": "", "title": "reimagine tag" , "tags": "", "content": "{% assign tag_name = \"reimagine\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"reimagine\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"reimagine\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/reimagine/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-related-searches", "type": "pages" , "date": "", "title": "related-searches tag" , "tags": "", "content": "{% assign tag_name = \"related-searches\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"related-searches\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"related-searches\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/related-searches/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-relevance", "type": "pages" , "date": "", "title": "relevance tag" , "tags": "", "content": "{% assign tag_name = \"relevance\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"relevance\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"relevance\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/relevance/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-relevancy", "type": "pages" , "date": "", "title": "relevancy tag" , "tags": "", "content": "{% assign tag_name = \"relevancy\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"relevancy\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"relevancy\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/relevancy/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-relevant", "type": "pages" , "date": "", "title": "relevant tag" , "tags": "", "content": "{% assign tag_name = \"relevant\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"relevant\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"relevant\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/relevant/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-repairing-searching", "type": "pages" , "date": "", "title": "repairing-searching tag" , "tags": "", "content": "", "snippet": "\n", "url": "/tags/repairing-searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "diss-repairing-searching", "type": "diss" , "date": "2022-12-16", "title": "5. Repairing searching" , "tags": "[diss]", "content": " Successful practitioners establish ways of working around the limits of their tools. What happens when web searches fail? Descriptions of successful practices need to include how practitioners navigate failure.\n\n\n The sort of search failures I’m discussing in this chapter is that of someone confronting a problem, turning to web search, and not finding resolution. I am not here concerned with situations where a searcher leaves a search with a wrong answer (their methods of search evaluation are addressed in the\n \n Extending searching\n \n chapter), though sometimes the identification of a wrong answer is the impetus to seek help from peers. The failed searches I am concerned with are where the searcher does not find useful I am also not particularly concerned with identifying root causes of the search failures here. The causes may seem to stem from any number of interacting individual, organizational, and other factors that affect:\n\n\n\n the material available to be searched,\n \n\n the design and performance of the search engine’s index, algorithms, and interface,\n \n\n the knowledge, memory, and attention of the searcher\n \n\n\n How do data engineers navigate failed searches?80\n Particularly, how do they do that within this environment where (1) professional credibility might be at risk (despite all the search confessions) and where (2) organizational and professional strategies have rendered the work searchable. In this chapter I talk about how the data engineers bridge web search gaps and demonstrate and share their skills and expertise in the process.\n\n\n This chapter involves a Handoff analysis of the configurations of components and their modes of engagement in web search practices that take place well-beyond the search box and the SERP (see\n \n Mulligan & Nissenbaum (2020) and\n \n Goldenfein et al. (2020) in\n \n The Handoff analytical lens\n \n ).\n\n\n A key observation of data engineering work is that they are operating at the edge, working with the new, or new to them, tools, systems, or other ways of handling data. Navigating around these edges, or learning around the edge, necessitates constantly working to “keep up”\n \n (Kotamraju, 2002) and engage in “intensive self-learning”\n \n (Avnoon, 2021) in a fluid, and loosely defined, field. They use web search to keep up. What do data engineers do when their searches fail?\n\n\n I answer that by looking at how they talk about\n \n asking and answering\n \n questions of or for colleagues. I show how data engineers package questions for colleagues, carefully explaining what they do or don’t know and have or haven’t tried. That includes a due diligence. Both how they do and communicate due diligence, helps them learn across their search failures, to access or understand something new, different, or unexpected. I consider the valuation and legitimation work that is part of both asking and answering and the impetus these interactions with others have on workplace web searching.\n\n\n Asking and answering\n\n\n Successful web search practices include articulation work—“work that gets things back ‘on track’ in the face of the unexpected, and modifies action to accommodate unanticipated contingencies”\n \n (Star & Strauss, 2004, p. 10)—that repairs failed searches. Web search itself may often be a sort of articulation work for the data engineers, and in the repairs of failed web searches the articulation work is turned back on itself.\n \n Jackson (2014) writes that repair work is “itself a facet or form of articulation work (and vice versa)” [p. 223].\n \n Jackson (2014) also provides an appropriate warning for the findings of this chapter, to keep in mind that “repair is not always heroic or directed toward noble ends, and may function as much in defense as in resistance to antidemocratic and antihumanist project” [p. 233].\n\n\n What we know comes from how we navigate not knowing. Data engineers are able to operate at the edge through the ways they navigate not knowing, uncertainty, and change. I describe here the practices around the asking and answering of questions.\n\n\n Data engineer practices for asking and answering questions of and for colleagues allow them to navigate search failures as they package questions with due diligence, find renewed search impetus from (anticipated) conversation, and jockey around valuations and legitimations. This section presents these three patterns with examples from interviews, interweaving analysis and references to related prior literature. Data engineers employ these practices to navigate discrete search failures and also justify the nature of their search-reliant expertise. The practices allow for demonstrations of individual and occupational legitimacy in the face of search failures. The sites of supposed search failures become sites of shared learning that provide coordination for other work interactions. This cooperative problem solving is intrinsically valuable to the participants, as well as a site for constructing and presenting themselves as data engineers. As\n \n Sabel (1984) wrote discussing “collaboration between labor and capital”, a craftsperson will put up with even assembly line work “or as feeders of automatic machines” if “at least occasionally they can test their craft knowledge against unforeseen problems”. (14)\n\n\n Conversations in the interviews ranged from web search to the complements, substitutes, and complications of web search. Most interviewees discussed searching internal systems (various enterprise search systems, including searching on their workplace chat platform, an enterprise version of Stack Overflow for Teams, or otherwise searching internal documentation) and asking colleagues questions. I also explicitly asked what people did when search (seemed to have) failed.\n\n\n First I will provide a high-level intro to the conversations I had about asking and answering. Many discussions of how to ask colleagues questions (whether a Slack direct message or on a dedicated Slack support or troubleshooting channel; rarely via email) delve into how one is expected to demonstrate prior searches or search attempts. The reasons for this have been presented as ranging from demonstrating one deserves to ask a question to simply what is necessary to get the fastest response. Some people discussed this from the perspective of having to field questions and discussed things from wanting people to show they are invested in the answer to techniques to reduce the rate of questions (from not answering immediately to requiring ‘trouble tickets’82\n to be completed).\n\n\n Some interviewees discussed heightened emotions or explicit concerns about how they may be judged (by colleagues or management) or treated that kept them from asking questions of colleagues until they’d exhausted their other resources (principally internal and web search). They don’t want a colleague to ask if they’ve searched yet or to suggest they ‘turn-it-off-and-back-on-again’. One interviewee provided some insight on an internal discussion around sharing guidelines for when and how to ask questions with those requesting help of their team, which I will expand on below. Individuals and teams seem to largely manage questions in informal routines, though generally in somewhat explicit channels83. This produced, to some participants, a way of subtly or crudely exercising power\n \n (Freeman, 2013).\n\n\n Highlighting some of that informality (and repeating some of what was discussed in\n \n Admitting searching\n \n ), here is an overview from Noah on what he tells new colleagues:\n\n\n\n When I have those onboarding meetings with new joiners, I point them to some of the search tools we have informally and I always point them to the support channels that we have.\n \n\n And I tell them — when I started I was very hesitant to ask questions in these support channels kinda for some of the reasons that I’ve been talking about, oh I didn’t want someone to be a dick to me. Or like think that I hadn’t done enough leg work before asking the question and what I tell them is, you know, ’just get over that, especially as a new employee, don’t sit around wasting your time and wondering if you phrased the question right, just ask it. Over time you will learn, from paying attention and watching other people ask, what the right way to phrase things is and the expectation around questions, but when you’re new just ask them, and people will realize that you’re new.\n \n\n No one is going to be mean to anyone for violating these norms on question asking on one instance. They are going to notice it over time, ‘oh that person always has bad questions’, ‘that person never really does the leg work and wants people to do it for them’. And that’s when people will say something to you. But on a one-off instance people might say, oh, you could have searched here or they might just give you the answer.\n \n\n\n I will now present the three patterns.\n\n\n Due diligence and packaging questions\n\n\n Michael:\n\n\n\n ‘hey I did my own due diligence on this’\n \n\n\n Ross:\n\n\n\n …show that I tried and that I have some grasp of the problem space\n \n\n\n Christina:\n\n\n\n This is what I tried. This is what I tried to find a solution. And I’m now stuck.\n \n\n\n Lauren:\n\n\n\n ‘\n I’ve done all these other things, I’m aware of all these other things\n \n , and I’m coming to you as a last resort.’\n \n\n\n This first pattern is focused on packaging questions, this includes doing and demonstrating due diligence. I asked data engineers about question-asking outside of search, initially hoping to surface examples of how people talked about search. Gradually I recognized the question-asking practices as repairing or completing searches, rather than simply a substitute for web searching.\n\n\n After Noah shared the comments above, I started to ask a follow-up question and he jumped in to correct my framing of “asking too many questions” as being rude or what is of concern. Rather than “too many” being the concern, in his eyes, it is how they are presented. He said:\n\n\n\n\n\n\n\n I don’t think it’s “asking too many questions”. If you\n show that you have done, that you have put some effort into this\n \n , even if it’s just a little bit, “here’s what I tried”.\n \n\n\n I said, “Yeah, bought-in” and he quickly continued:\n\n\n\n And, obviously, this is all a very fine line. That is the exact same that allows some people who are real jerks on Stack Overflow to justify what a jerk they are being. Right? Like, ‘oh that person just asked a stupid question so I was being a jerk to them because\n they didn’t make enough of a time investment before bothering me\n \n .’ Right? It’s a spectrum, it’s a complicated thing.\n \n\n\n I asked Michael when he would decide to ask colleagues a question. He noted that different engineers would approach things differently and then provided an extended answer (below are excerpts book-ending ten minutes of our conversation). He described the packaging of the questions similarly to Noah:\n\n\n\n try it out on your own, try to solve it the best you can, and keep searching, and spend all your resources first, and then go to your team if you’re actually truly stuck and you can’t figure out something. As an engineer: don’t depend too much on hand holding. But if I am stuck on something then I go to more senior technical leaders.\n \n\n [ . . . ]\n \n\n OK, I’m going to try my best to solve something and when I go to this lead or this senior engineer or someone above me to help me answer it. I want to have available the findings that I found from my own research so that\n I can present to them and kinda validate, ’hey I did my own due diligence on this\n \n . I’m not quite sure what the problem is but maybe you can see something I can’t or have an idea of something I can try. Or, altogether just scratch that because altogether this is an impediment and we don’t want to waste time on that.’\n \n\n\n Noah and Michael present the packaging of the question as intended, or read, as indicating investment or effort prior to the asking. Ross also mentioned due diligence, though added that its presentation also serves to show that he has “some grasp of the problem space”.\n\n\n Early in our conversation Ross said he’d do due diligence before he would “ping” someone with a question, saying “I try not to bother people until I’ve done my\n \n due diligence\n \n .”\n\n\n\n Yeah, it’s funny.You think that might be a time I post a question. I tend not to. I tend to loosen my search criteria. I tend to go more for something similar. This is a personal reflection of me.\n \n\n I don’t like bothering people. I kinda don’t like asking people to take time to respond to my questions until I’ve done\n a real true diligence search\n \n . Like, you know. ‘I tried. Here’s what I found and this encompasses what’s out there and its not me, my thing. So, here’s my question.’\n \n\n\n Soon after I asked directly about the presentation of “due diligence”84. He summarized here:\n\n\n\n I present some information. I try to present some summary of what I’ve done to show that I tried and that I have some grasp of the problem space. And then I present my question.\n \n\n\n He followed with, “I don’t really need to see due diligence but I feel like I owe it to others.” He also shared how he recollected coming to recognize the role of the presentation of due diligence:\n\n\n\n When you first get hired——oh, people are so helpful and everything——and then you’re expected to tow your own load. Then you ask a question and you get a response back:\n \n\n “Well, what have you tried?” Oooh. Oooh. OK. ‘Sorry. Here’s what I tried.’\n \n\n Maybe it doesn’t bother some people. But if I got that response, it’s like, OK. I didn’t do enough, I didn’t show I needed it. I think early, at some point when I started, I got that from someone somewhere. And you’re like, ‘OK’.\n \n\n\n Lauren also mentioned both prongs of the packaging of due diligence, the investment and the understanding. Her first mention of due diligence was what she would do before asking a question in an internal Slack support channel.\n\n\n\n Unless I was absolutely sure that my question was unanswerable some other way I wouldn’t just blast it out for a million people to see.\n \n\n\n (I checked, asking whether it was actually a million people and she clarified the channels she would ask questions in would have up to 100 people.) I asked her whether the context of being “absolutely sure” was provided when asking a question.85\n\n\n\n If you’re trying to get the quickest answer from somebody you’re like:\n I’ve done all these other things, I’m aware of all these other things\n \n , and I’m coming to you as a last resort.\n \n\n\n I would be very clear about that because especially when you’re talking to developers or people on the super back-end the first thing they’ll do\n \n is ask you, \"oh, did you turn it off and turn it back on again, yes, I turned it off and back on again and I also did all these other things and that’s why I’m coming to you as a last resort.\n\n\n Or it’s an emergency. This page is down and I’ve refreshed it a million times.\n\n\n Charles talked about how people would get “pretty annoyed” at the lack of due diligence, or its presentation.\n\n\n\n I’m really conscious about making sure that I don’t ask a question that has already been asked. Because I feel like people on the forums, either general or even on our company’s [internal Stack Overflow] page would get pretty annoyed if somebody was asking a question that had already been asked and answered before. Um, and so would really go to pretty good lengths to look through the previous ones and make that sure my question hadn’t already been asked.\n \n\n Versus, you know, I’ve seen cases where somebody the second that they get an error from their IDE, they just take it and they type it into Stack Overflow and ask a new question. And I think people get pretty annoyed by that.\n \n\n [ . . . ]\n \n\n I would definitely try to convey to the person that I had been struggling with this for awhile and that is wasn’t just some error message that I just came across while I was messing around.\n \n\n\n He also spoke of people complaining about question-asking:\n\n\n\n Sometimes the ways that you learn is by learning what not to do. And so, I was good friends with a lot of my coworkers, most of whom where more experienced. And so, if we were at lunch or whatever, someone might say ‘this person on our team, he keeps pinging asking me questions for this thing even though he hasn’t tried XYZ.’ A lot of times I would heart things like that so I would take mental notes, “don’t do that”. It was more of my own kind-of observations.\n \n\n\n This pattern allows for learning around search failures. This includes search failures that result in part from the occupational and organizational approach to learning at the edge. It also engages with concerns of “keeping up” as individuals likewise navigate the edges of their own knowledge\n \n (Avnoon, 2021; Kotamraju, 2002). There are multiple functions of due diligence and packaging questions. Demonstration of investment encourages reciprocation. Communicating known context allows for quicker resolution. This enables people with different skills and knowledge to communicate effectively without the rudeness of assuming the contours of the other’s understanding. The pattern also integrates with, or functionally supports, the two patterns discussed next. Packaging questions in particular ways works toward legitimating the question-asker as a responsible participant, a valid member of the community. Expectations of due diligence play a role in the impetus provided in conversation (though the expectations, and their backing in humiliation or other judgement, are not the whole impetus).\n\n\n Valuations and legitimations\n\n\n I focus here on the evaluations and legitimation work of\n \n jockeying\n \n . Due diligence and packaging questions both affect how others evaluate you as an engineer and are opportunities for the engineer to legitimate themselves, and not just their question. The asking & answering of questions broadly are a place for evaluation and legitimation.\n\n\n At the time of our interview Nisha was a data engineer at a contractor working at a large tech company. She provides a clear introduction to the presence of evaluation/valuation around question-asking. I had slipped concerns other interviewees had mentioned about people perhaps being mean into my question around due diligence.86\n She said:\n\n\n\n I’ve seen that as well.\n \n\n That’s another reason why people try to go to search groups or Google search rather than posting it internally to a group of developers that or might not know you and judge you.\n \n\n It’s a competitive world87 \n , right? I mean, your peers, they probably want to help themselves before they help you, right? So—[pause] it also depends on the team dynamics. Yeah, I’ve seen that as well.\n \n\n\n I then asked about the packaging of questions in these large groups.\n\n\n\n That’s how you are expected to ask questions in these groups…\n \n\n You have a problem. You’ve tried searching for it. But you’ve not had any success. You’ve tried a few things. You want to list them down because, for example: Your speaker is not working. Someone will suggest restarting the machine. You’ve already restarted your machine. You don’t them delivering the same information.\n \n\n So, its always helpful when you’re asking in a group, you ask very specific questions.\n \n\n When you’re doing a Google search it’s OK to see the same replies because you can always scroll down and see more.\n \n\n But when you’re interacting with people you want to give them very specific point to point information. So you give them exactly whatever you need to get the information out of them.\n \n\n [ . . . ]\n \n\n Q: Do you ever answer questions in these groups?\n \n\n Sometimes. If I’ve faced an issue, yes I try to answer. Because I know how it is to ask questions. It takes a lot of courage. People usually ask questions after they’ve done what they can. So I try to be helpful and mindful.\n \n\n\n I don’t want to be that person who does not respond when there is a problem and I know the solution.\n\n\n Q: You said it takes a lot of courage. Could you just say again why it takes a lot of courage.\n\n\n Because your managers would be on the chat group. They would be figuring out that you are not able to solve this problem. And your peers. You can also be judged by your peers.\n\n\n So, only after a person has searched, done what they can, tried things, is when they would normally post questions.\n\n\n The data engineers are not narrowly focused on demonstrating a need to ask a question, or their prior investment in trying to answer it and their knowledge. They are also looking to avoid negative judgement and present themselves as experts.\n\n\n This judgment is not evenly applied, elsewhere in the interview Nisha shared about being a woman in her organization:\n\n\n\n Like for me, I know that for whatever reason, women are minority in an engineering group. And they get picked on more. So we constantly have to watch our backs ensure that, even if you’re putting a comment in code, which will not be checked into the code base, but it’s only going to be run as a temporary fix, you still have to ensure that your comment, even the comments, are perfect.\n \n\n\n Jamie said she would generally try to answer her questions on her own because she enjoys it but that she doesn’t hesitate to ask her coworkers questions. Then she paused, and provided a fuller picture:\n\n\n\n Let me rephrase that. My natural state is not to hesitate. There have been times in the past where I have hesitated to do that. And that is largely due to my minority status in the tech industry and what people’s assumptions are about a women in the tech industry who is asking questions, right? Those same assumptions are not made of men who are asking questions.\n \n\n So definitely in those companies where that male-centric tech view has been more present, I have been more resistant to ask questions. Because, culturally, there has been this implication that if you’re asking questions then you don’t know what you are doing, which is ridiculous, totally absurd. Right?\n \n\n So it is not my natural state to behave that way. But in some companies, for people to think of me as the expert that I am I have had to change the way that I’ve done thing.\n \n\n\n She went on to distinguish her current workplace from past experiences. Megan also distinguished different workplace experiences, though her experience was somewhat reversed. I talked to her in a new participant member check, describing my initial findings and asking for her reactions. She said:\n\n\n\n All the women I’ve ever worked with in technical roles have been at times either effectively sidelined or people have tried to dismiss them as non-technical. That fear of appearing non-technical is a real thing.\n \n\n I just started a new job. Once I’ve been at an organization for a while, I have an established a reputation. I feel like I know people, people know me, and I’m very comfortable asking questions out in the open. And especially when I was an engineering manager, I tried to model that behavior and asking questions out in the open. But I can tell you right now, I just started the job and 100% I’m sticking my questions under private channels, because you don’t want to be perceived as struggling.\n \n\n … My horror of doing my job badly is worse than my horror of asking questions. But I will say it does push me into private channels as opposed to public ones.\n \n\n\n Fear of the consequences that may come from being judged stupid or lazy drives data engineers to search first and furiously before seeking advice from colleagues. Even if a question does not interrupt someone’s work, it might be seen as indicating a lack of knowledge or responsibility, or as wasting your colleagues time (which is undesirable given data engineers’ interest in\n \n speedy searching\n \n , next chapter). As Kari said, you want to “err on the side of: don’t waste people’s time.”\n\n\n The practice and place of search repair provides opportunities for data engineers to jockey for legitimation. Not just an opportunity, search repair demands such performances. As\n \n Goffman (1956) writes (p. 156):\n\n\n\n Audiences also accept the individual’s particular performance as evidence of his capacity to perform the routine and even as evidence of his capacity to perform any routine.\n \n\n\n In their answers and the quality of their due diligence the data engineers can present themselves to colleagues as capable, though some are required to demonstrate more to achieve equal esteem.\n\n\n Renewed impetus\n\n\n The web search practices of data engineers are shaped by the searcher being situated around others and the anticipations of those others’ perceptions of the searcher’s expertise or diligence. They are not normally anticipating interacting with others about a search, instead often expecting it will be quick. But when their searches start to show signs it might fail, conversations with their colleagues and the search repair practices come to mind. Search repair practices start before the question is asked. The expectation that a question for colleagues must include packaged due diligence and that it is a site for demonstrating legitimacy provides a renewed or refined impetus to search.\n\n\n Searching amidst or in anticipation of (even potential or speculated) conversation is very different from searching alone. Formulating a question to ask a colleague, or even a search strategy you might be willing to admit to a colleague, is distinct from formulating a query for a search engine.\n\n\n For help with working through problems, some even suggest formulating a question or talking through a problem with an inanimate object, like a rubber duck. “Rubber duck debugging” is a common reference point within coding work, even if it isn’t explicitly practiced.88\n Though they call it “Rubber Ducking”, here it is described in\n \n Hunt & Thomas (1999)’s book for practitioners, on the craft of programming, in a chapter on debugging [p. 95]:\n\n\n\n A very simple but particularly useful technique for finding the cause of a problem is simply to explain it to someone else. The other person should look over your shoulder at the screen, and nod his or her head constantly (like a rubber duck bobbing up and down in a bathtub). They do not need to say a word; the simple act of explaining, step by step, what the code is supposed to do often causes the problem to leap off the screen and announce itself.\n \n\n It sounds simple, but in explaining the problem to another person you must explicitly state things that you may take for granted when going through the code yourself. By having to verbalize some of these assumptions, you may suddenly gain new insight into the problem. [internal footnote omitted]\n \n\n\n Rubber duck debugging achieves some of what anticipated, and rehearsed, conversations do for data engineers. Kari is a data platform engineer. Part of her responsibilities, besides systems design and implementation, include responding to support request from others in her organization. She said she, and her colleagues, will be “pretty busy” and get frustrated with the volume of requests for answers. Unless the question-asker shares enough of their due diligence she finds she has to respond first asking for more information.\n\n\n\n I always suggest: ‘Hey, if you’re going to ask me a question, give me a bunch of context on it beforehand, so that I can actually answer your question. So don’t just send me a stack trace. Tell me what you were doing. What is the stack trace? Link to the code. All this stuff.’\n \n\n [ . . . ] It is totally fair to just send the question back and say, ‘hey we need more information’.\n \n\n\n I asked her if perhaps sometimes pushing people to provide more information will help them answer it on their own.\n\n\n\n Yeah, lot’s of times… [chuckling]\n \n\n\n I repeated: ‘Lot’s of times’, and she said:\n\n\n\n Part of the exercise in the first place, of getting people to give us context is that as soon as you have to pose it and ask the questions and give us information, half the time you are going to realize or come up with an idea towards answering your question in the first place. Part of that [the asking for context] is actually to just get people to answer their own questions.\n \n\n\n While data engineers do not generally talk with each other directly about their searching practices89\n , their conversations with each other and other colleagues shape and scaffold, or structure, their searching.90\n\n Mokros & Aakhus (2002) proposes conceptualizing information-seeking behavior as “socially grounded”\n \n meaning engagement practice\n \n . They write how an information need, here an impetus to search, is “generated through social connection and the circumstances that arise from engagement with others and efforts to realize or avoid such engagement” (p. 309). A search can be renewed or refined by the prompt of an interaction. This may be the partially drafted question in a Slack chat interface or glancing at the clock or Zoom icon and anticipating your next standup or one-one-one is a socially grounded impetus to search.\n\n\n This is particularly the case for those who have received, perceived, or fear negative attention for their questions. These individuals may search excessively, rather than risk censure. Interviewees shared that even\n \n starting to ask\n \n a question helps them see their problem anew or see a new search to do.\n \n Orr (1996) describes technicians’ work of diagnosis. Orr, himself referencing\n \n Suchman (1987) regarding when “transparent activity becomes in some way problematic” (p. 50), writes:\n\n\n\n Becoming problematic\" may mean that the activity has been disrupted by failure, that one is perplexed about how to proceed,\n or merely that someone else has inquired about the activity, requiring an explanation.\n \n [emphasis added]\n \n\n\n This ‘starting to ask’ introduces another person with the potential to inquire about the search. Interactions with others, including the ‘merely’ anticipated and imagined indirect relations, prompt activity to become problematic.\n\n\n I can only speculate on the internal mechanisms involved.91\n Perhaps by becoming problematic, the problem is shifted out of the automatic search solution space. Rather than jumping to search, to try incantations to teleport to the solution, imagining or mimicking interacting with others calls upon conversational repertoires that may be well suited to aid reflection. This also may be as simple as starting to ask a question suggesting a framework for due diligence. The reliance on search may induce a sort of automation bias, a bias-to-search that frames problems in delimited ways. Alternative framings, or repertoires, includes preparing to address likely replies like ‘what are you trying to do?’92\n , what have you tried?‘, or ’what do you know?’.\n\n\n Discussion: Visibility, friction, and valuing privacies\n\n\n Visible\n\n\n Search repair practices provide a stage for performances that do four key things: legitimate the question asker and the answerer, legitimate web search reliance, enable participatory learning, share knowledge and who-knows-what.\n\n\n First, the data engineers openly jockey within search repair to demonstrate to each other what they know. This is one way they present, construct or perform, their legitimacy and expertise. This jockeying secures or shifts status claims. How they ask & answer questions about search provides another place for narratives where data engineers show and shape their selves (and judgements of competence and expertise) and their work.\n \n Feldman & March (1981) write on “decision making”, but search repair functions similarly (pp. 177-178):\n\n\n\n decision making in organizations is more important than the outcomes it produces. It is an arena for exercising social values, for displaying authority, and for exhibiting proper behavior and attitudes with respect to a central ideological construct of modern western civilization: the concept of intelligent choice.\n \n\n\n Navigating failed searches in these public ways (and the work of search confessions) “provides a ritualistic assurance that appropriate attitudes about [searching the web] exist” and provides opportunity for “a representation of competence and a reaffirmation of social virtue” (p. 177). Following Feldman and March,\n \n Leonardi (2007) writes that “visible aspects of information [ . . . ] practices are used as implicit measures of one’s ability to make an informed decision” and “certain individuals come to have more power in the decision-making process due to the perceptions of their information-acquiring practices” (p. 814). The repair practices provide this opportunity.\n\n\n Second, the reliance on web search is also reaffirmed, further legitimated. Though sometimes a question may be answered by directing the searcher to an internal search tool or other resource not available on the open web, the use of web search itself is not made a cause for concern. The search repair practice joins search confessions in providing informal and implicit approval for searching the web for work.\n\n\n Third, Search repair provides a place for participatory learning. At first the data engineers may only lurk and watch, gradually seeing how others ask and answer questions. Then they try asking questions and getting feedback. In the process, they may learn how their peers frame questions and problems, identify resources and search strategies, and position themselves to evaluate. These are not facts and verbalized procedures that they learn, so much as how to be a data engineer who searches to do their work. As\n \n McDermott & Lave (2006) wrote (p. 108):\n\n\n\n The point: the\n product\n \n of laboring to learn is more than the school lessons learned. Over time, laboring to learn produces both what counts as learning and learners who know how to do it, learners who know how to ask questions, give answers, take tests, and get the best grades. Making what counts and making those who seek to be counted, these together compose the product of learning-labor. [emphasis in original]\n \n\n\n The visibility of the work involved in these repairs, the stories, and the visible judgments (though the judgments are not always visible) create learning opportunities for those providing help as well, providing space for practice, and get implicit feedback on, problem solving and communicating\n \n (Perlow & Weeks, 2002).93\n\n\n Fourth, the repair practices allow the engineers (including those asking questions) to make knowledge and who-knows-what visible. This is beneficial for coordination and collaboration within and across teams—coordination a core requirement for this engineering work\n \n (Aranda, 2010). It also addresses a concern about the solitariness of web search. One might view web search practices as wasteful.94\n People repeatedly search for the same thing that someone else in their team had searched. But the speed and ease of most web searches makes it possible to work without very much interruption (of oneself or others) and reduces the requirement for sharing knowledge. Then the difficult searches that are visibly repaired become opportunities for sharing how to search (mentioned just above, perhaps making more searches faster and easier), sharing some of that difficult to find information, and sharing who knows what across a team or organization.\n\n\n Friction\n\n\n Even when questions are successfully received, and the data engineer isn’t found to be lacking, asking questions produces what\n \n Tsing (2005) calls “friction”. Tsing writes: “Cultures are continually co-produced in the interactions I call “friction”: the awkward, unequal, unstable, and creative qualities of interconnection across difference\" (p. 4). The mismatches in conceptions and communicated understandings, produces friction that both further reveals the edges of knowledge and creates opportunities to see and shift or shape how those edges are engaged with.\n\n\n These sites for repair are components in the larger system of the work of data engineers. Within these sites the data engineers engage with each other in various ways and the work of repair as a whole engages engineers, prompting the visible jockeying as well as perceptions of how much more there is to know. This space for friction challenges the data engineers move beyond rigid evaluations of what they know as they work at the edge.\n \n Brown & Duguid (1998) write of “productive tension” from\n \n Hirschhorn (1997), and “creative abrasion”, from\n \n Leonard-Barton (1995).\n \n Brown & Duguid (1998) write that such tension or friction can generate knowledge. For the purposes of the data engineers, it generates new search seeds (or identifies them) and evaluations of search results—supporting the search performance of the organization.\n \n Girard & Stark (2002) write of how “new media projects” at the start of the 21st century constantly reinterpreted their provisional “project settlements” [p. 1947]:\n\n\n\n the unsettling activity of ongoing disputation makes it possible to adapt to the changing topography of the web across projects in time. Friction promotes reflection, exposing variation from multiple perspectives.\n \n\n\n A similar space for reflexive re-engagement around problem solving and search strategies appears around the search repair practices.\n\n\n A rigidly technocratized approach to search might redistribute friction to places less visible or with slower feedback loops, some friction in the repair work, from the different ways of problem solving and searching, may improve the search performance of the organization.\n \n Passi & Jackson (2018) cites\n \n Stark (2009) in describing functional benefits of friction, writing “actors use diverse ‘evaluative and calculative practices’ to accomplish practical actions in the face of uncertainty” (p. 4). The friction comes from multiple forms of valuation—of searching, problems, and solutions—, developing contextually in different situations. Conflict, Passi writes, is integral to organizational diversity in which the “productive friction” between multiple ecologies of valuation helps accomplish justification and trust—(dis)trusting specific things, actions, and worlds\" (p. 4).\n \n Stark (2009) also calls this “generative friction” (p. 16, p. 19), explicitly building on\n \n Leonard-Barton (1995) and\n \n Brown & Duguid (2001).\n\n\n Valuing privacies\n\n\n Successfully navigating failed searches is entangled with privacy95. The data engineers do not, generally, ask for details of the question-asker’s search history. They do not force the question asker to show their recent browsing history. Both of those things, in the right setting, may greatly facilitate question answering. But the data engineers value privacy in searching and search repair. The valuing of privacy is an active result of visible practices. New data engineers see and participate in such valuing. This furthers their learning how to be, and search as, a date engineer.\n\n\n This respect for privacy includes a range of orientations or conceptions of privacy. I will not here analyze the privacy dimensions\n \n (Mulligan et al., 2016) involved in the search repair practices, but only suggest three broad areas relevant to search repair:\n\n\n\n avoiding costly knowledge96 \n\n\n privacy allows each individual some autonomy in navigating the failed searches, rather than a surveillance that dictates the values of various knowledge from the top.\n \n\n there is also confidentiality at more of the occupational group level, privacy conceals the workings of their expertise\n \n\n\n The data engineers I interviewed valued the lack of direct scrutiny of search practices. This was most visible in the strong objections and resistance to imagining sharing their search history. This privacy over the search activity is not only a matter of respecting or protecting web search as a place where they perform their expertise and professional judgement. Data engineers recognize that web search is where they regularly assemble and construct their expertise and professional judgement.\n\n\n Data engineers value privacy here because, in addition to the individualizing mythos of search and also of coding work (to be discussed further in the next chapter), this is a way of confronting what they do not know and navigating around failed searches—their inability to know. In that, privacy in the search practices protects data engineers from likely judgements of their knowledge, expertise, or skill, and affords the space to experiment and grow. Judgments of visible or perceived ignorance or lack of skill already lead to mistreatment and poor judgment of performance in evaluations. Revealing more details of searching practices, baring other changes in the conceptions of search and expertise, may lead to harsher penalties to some. The sites of search repair already involve a significant amount of openness and sharing, a place sometimes safe but often including conversation. There would likely be significant unknown tradeoffs from mandating more openness, as discussed by\n \n Turco (2016) and\n \n Star & Strauss (2004).\n\n\n The sociomaterial privacy of the web search practices of the data engineers makes space for “the play of everyday practice” at the edge of their knowledge, as “the motivating force behind creative practice, subject formation, and material practice” and a capability that promotes, with due consideration of other workplace factors, human flourishing\n \n (Cohen, 2012). Building on Cohen,\n \n Ohm & Frankle (2018) analyze a design principle, to make space for or to protect human values, that they call\n \n desirable inefficiency\n \n .\n \n Certain aspects of the existing configurations of data engineering work highlight apparent inefficiencies or frictions that provide opportunities for the data engineers. This include not just the broad values of some sense of privacy and autonomy, but to learn more deeply than they might if principally learned through directives rather than searching and experimenting or to serendipitously discover in their web search navigation.\n\n\n As discussed above, asking and answering questions promotes partially shared understandings and provides opportunities for jockeying (as well as the larger reproduction of workplace norms and values). The visibility mentioned above is fairly distinct from “forced representation.”\n \n Star & Strauss (2004) write that “Many studies over the years have cautioned that forced representation of work (especially that which results in computer support) may kill the very processes which are the target of support, by destroying naturally-occurring information exchange, stories, and networks” and “it should be clear that we are not recommending “more visibility”\" [p. 24]. Cohen highlights the value of gaps97\n in the space for play and that “maintaining those gaps requires interventions designed to counterbalance the forces that seek to close them”. Ohm & Frankle following her, present a gap imposed “in pursuit of fairness” (p. 826). This play and gaps are also relevant to the discussion of technocratization, as data engineers’ work and web search practices challenge forces such as the informating affordance of information technology and an apparent data imperative.\n\n\n Conclusion: Learning from search repair\n\n\n The search repair practices provide visibility and friction useful for the learning organization. They respect various privacies. These three all support the learning of data engineers to be data engineers reliant on search, providing examples and spaces to participate.\n\n\n The search repair practices also do the articulation or repair work that sustains reliance on web search. The organization can push data engineers to search, and rely on that despite not training them in search itself because they are immersed in search repair’s collaborative problem solving. Search repair is practiced across multiple components within the data engineers’ configuration of work and is itself a key factor in their successful reliance on web searching.\n\n\n Search repair takes various shapes but could be performed differently. The packaging of a portion of due diligence could be automated, or have a required form. Questioning and answering could be logged by management for performance evaluations. Other incentives or constraints could be introduced with the goal of improving some facets of search repair. Some changes like these might improve the rate of search repair, but perhaps at the cost of limiting the opportunities for data engineers to demonstrate and test their knowledge, share their knowledge across the organization, or challenge accepted knowledge. Or at the cost of data engineers doing less searching on the fly or being less willing to reveal what they do not know. Much more than search repair happens in these interactions. If some aspects of the search repair were compelled or the perceptions of constraints and affordances were distorted these multiple values for the learning organization may no longer be achieved.\n\n\n As it is, each data engineer within the various organizations engages differently with the sites of search repair. Some may not perceive the benefits of the visibility and friction because of where they are situated. Some may have different tradeoffs for the risks of revealing something they do not know, because they are already under heightened scrutiny, perhaps because of their minority status within the field. While others are able to use their experience and vantage of seniority to use the sites of search repair to demonstrate what they see as their expertise.\n\n\n Bibliography\n\n\n\nAranda, J. (2010).A theory of shared understanding for software organizations [PhD thesis, University of Toronto]. https://tspace.library.utoronto.ca/bitstream/1807/26150/6/ArandaGarcia_Jorge_201011_PhD_thesis.pdf \n\n\n\nAvnoon, N. (2021). Data scientists’ identity work: Omnivorous symbolic boundaries in skills acquisition.Work, Employment and Society,0 (0), 0950017020977306. https://doi.org/10.1177/0950017020977306 \n\n\n\nBhatt, I., & MacKenzie, A. (2019). Just google it! Digital literacy and the epistemology of ignorance.Teaching in Higher Education,24 (3), 302–317. https://doi.org/10.1080/13562517.2018.1547276 \n\n\n\nBrown, J., & Duguid, P. (2001). Knowledge and organization: A social-practice perspective.Organization Science,12, 198–213.\n\n\nBrown, J. S., & Duguid, P. (1998). Organizing knowledge.California Management Review,40 (3), 90–111.\n\n\nCohen, J. E. (2012).Configuring the networked self. Yale University Press. https://doi.org/10.12987/9780300177930 \n\n\n\nFeldman, M. S., & March, J. G. (1981). Information in organizations as signal and symbol.Administrative Science Quarterly,26 (2), 171–186. http://www.jstor.org/stable/2392467 \n\n\n\nFerguson, A. M., McLean, D., & Risko, E. F. (2015). Answers at your fingertips: Access to the internet influences willingness to answer questions.Consciousness and Cognition,37, 91–102. https://doi.org/10.1016/j.concog.2015.08.008 \n\n\n\nFreeman, J. (2013). The tyranny of structurelessness.WSQ,41 (3-4), 231–246. https://doi.org/10.1353/wsq.2013.0072 \n\n\n\nGirard, M., & Stark, D. (2002). Distributing intelligence and organizing diversity in new-media projects.Environment and Planning A,34 (11), 1927–1949.\n\n\nGoffman, E. (1956).The presentation of self in everyday life. University of Edinburgh.\n\n\nGoldenfein, J., Mulligan, D. K., Nissenbaum, H., & Ju, W. (2020). Through the handoff lens: Competing visions of autonomous futures.Berkeley Tech. L.J.. Berkeley Technology Law Journal,35 (IR), 835. https://doi.org/10.15779/Z38CR5ND0J \n\n\n\nGross, M., & McGoey, L. (2015).Routledge international handbook of ignorance studies. Routledge. https://doi.org/10.4324/9781315867762 \n\n\n\nGross, M., & McGoey, L. (2022).Routledge international handbook of ignorance studies. Routledge. https://doi.org/10.4324/9781003100607 \n\n\n\nHirschhorn, L. (1997).Reworking authority: Leading and following in the post-modem organization. MIT Press.\n\n\nHunt, A., & Thomas, D. (1999).The pragmatic programmer: From journeyman to master. Addison-Wesley Professional.\n\n\nJackson, S. J. (2014).Rethinking repair (T. Gillespie, P. J. Boczkowski, & K. A. Foot, Eds.; pp. 221–240). The MIT Press. https://doi.org/10.7551/mitpress/9780262525374.003.0011 \n\n\n\nKotamraju, N. P. (2002). Keeping up: Web design skill and the reinvented worker.Information, Communication & Society,5 (1), 1–26. https://doi.org/10.1080/13691180110117631 \n\n\n\nLeonard-Barton, D. (1995).Wellsprings of knowledge: Building and sustaining the sources of innovation. Harvard Business School Press.\n\n\nLeonardi, P. M. (2007). Activating the informational capabilities of information technology for organizational change.Organization Science,18 (5), 813–831. https://doi.org/10.1287/orsc.1070.0284 \n\n\n\nMcDermott, R., & Lave, J. (2006). Estranged labor learning. In P. Sawchuk, N. Duarte, & M. Elhammoumi (Eds.),Critical perspectives on activity: Explorations across education, work, and everyday life (pp. 89–122). Cambridge University Press. https://doi.org/10.1017/CBO9780511509568.007 \n\n\n\nMokros, H. B., & Aakhus, M. (2002). From information-seeking behavior to meaning engagement practice..Human Comm Res,28 (2), 298–312. https://doi.org/10.1111/j.1468-2958.2002.tb00810.x \n\n\n\nMulligan, D. K., Koopman, C., & Doty, N. (2016). Privacy is an essentially contested concept: A multi-dimensional analytic for mapping privacy.Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences,374 (2083), 20160118.\n\n\nMulligan, D. K., & Nissenbaum, H. (2020).The concept of handoff as a model for ethical analysis and design. Oxford University Press. https://doi.org/10.1093/oxfordhb/9780190067397.013.15 \n\n\n\nNatarajan, M. (2016).The making of ignorance: Epistemic design in self-tracking health [PhD thesis, University of California, Berkeley]. https://escholarship.org/uc/item/5pn009mw \n\n\n\nOhm, P., & Frankle, J. (2018). Desirable inefficiency.Florida Law Review,70 (4), 777. https://scholarship.law.ufl.edu/flr/vol70/iss4/2 \n\n\n\nOrr, J. E. (1996).Talking about machines: An ethnography of a modern job. ILR Press.\n\n\nPassi, S., & Jackson, S. J. (2018). Trust in data science: Collaboration, translation, and accountability in corporate data science projects.Proceedings of the ACM on Human-Computer Interaction,2 (CSCW), 1–28.\n\n\nPeels, R., & Pritchard, D. (2021). Educating for ignorance.Synthese,198 (8), 7949–7963. https://doi.org/10.1007/s11229-020-02544-z \n\n\n\nPerlow, L., & Weeks, J. (2002). Who’s helping whom? Layers of culture and workplace behavior.Journal of Organizational Behavior,23 (4), 345–361. https://doi.org/https://doi.org/10.1002/job.150 \n\n\n\nProctor, R., & Schiebinger, L. (Eds.). (2008).Agnotology: The making and unmaking of ignorance. Stanford University Press. https://archive.org/details/agnotologymaking0000unse \n\n\n\nSabel, C. F. (1984).Work and politics: The division of labor in industry.\n\n\nShorey, S., Hill, B. M., & Woolley, S. (2021). From hanging out to figuring it out: Socializing online as a pathway to computational thinking.New Media & Society,23 (8), 2327–2344. https://doi.org/10.1177/1461444820923674 \n\n\n\nSmith, C. L., & Rieh, S. Y. (2019, March). Knowledge-context in search systems.Proceedings of the 2019 Conference on Human Information Interaction and Retrieval. https://doi.org/10.1145/3295750.3298940 \n\n\n\nSmithson, M. (1985). Toward a social theory of ignorance.Journal for the Theory of Social Behaviour,15 (2), 151–172. https://doi.org/https://doi.org/10.1111/j.1468-5914.1985.tb00049.x \n\n\n\nStar, S. L., & Strauss, A. (2004). Layers of silence, arenas of voice: The ecology of visible and invisible work.Computer Supported Cooperative Work (CSCW),8, 9–30.\n\n\nStark, D. (2009).The sense of dissonance: Accounts of worth in economic life. Princeton University Press.\n\n\nSuchman, L. A. (1987).Plans and situated actions: The problem of human-machine communication. Cambridge university press.\n\n\nTsing, A. (2005).Friction : An ethnography of global connection. Princeton University Press. https://press.princeton.edu/books/paperback/9780691120652/friction \n\n\n\nTurco, C. J. (2016).The conversational firm: Rethinking bureaucracy in the age of social media. Columbia University Press.\n\n\n\n What is the xy problem? - meta stack exchange. (2010). https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem .\n\n\n\n\n\n\n An earlier draft of this chapter focused on ‘ignorance’, a polysemous concept I was using to refer to knowledge gaps or the limits of knowledge of the data engineer, their organization, the search engine, and the Internet. I was relying on concepts developed in ‘ignorance studies’, partially around how identifying, naming, and navigating ignorance can create or spread knowledge and how ignorance is socially constructed (Bhatt & MacKenzie, 2019; Gross & McGoey, 2015, 2022; Natarajan, 2016; Peels & Pritchard, 2021; Proctor & Schiebinger, 2008; Smithson, 1985) . My initial use of ‘ignorance’, a term often viewed and felt, viscerally, as a pejorative, unsteadily straddled both mixed causes and effects. My focus now on “failed searches” highlights a particular sort of situation and how data engineers address it without using ‘ignorance’ in multiple confusing registers and applied to different types of actors. ↩︎ \n\n\n\n Trouble tickets are formalized and explicit requests for assistance. Ostensibly used to facilitate the repair or resolution of some problem or issue, they are also used for tracking issues and quantifying work performance of those tasked with their completion. They can be used also to increase the barrier to request help, at least formally. ↩︎ \n\n\n\n I use the word ‘channel’ here to refer to various ‘communication channels’ though it is also the name in Slack and Microsoft Teams to refer to what internet chat relay services might call ‘rooms’, as in a ‘chat room’. ↩︎ \n\n\n\n Direct ‘due diligence question’ of Ross: \n\n Q: Could we go to that a little bit? You had said ‘your due diligence’ before you ask someone. So you’ve described in part some of the due diligence that you do. But you’re also presenting to someone that you did your due diligence when you ask them a question? \n Yeah \n Q: Could you talk about that a little bit? How you frame different questions? \n\n↩︎ \n\n\n Direct ‘due diligence question’ of Lauren: \n\n Q: When you reach out to an individual to ask this question that your initial searches were not fruitful with, do you make sure provided this context? ‘I tried XYZ, now I don’t know.’ \n Yeah. \n Q: Were there strict rules or policies or— \n No. [continued above] \n\n↩︎ \n\n\n a ‘due diligence question’ of Nisha: \n\n Q: Is there— I’m curious. Some of the people I’ve talked to have talked about all the work they do to prepare or package their question that they submit. Because they’re nervous people are going to be mean or mean in the past. Do you see that or do you experience that? \n\n↩︎ \n\n\n Nisha had worked in multiple organizations as a data engineer and noted her current organization was particularly competitive. ↩︎ \n\n\n\n I introduced my Python students to rubber duck debugging when I taught the summer ‘Python Boot Camp’ to incoming graduate students at the School of Information (bringing in enough miniature rubber ducks for each of them). ↩︎ \n\n\n\n See Admitting searching : [don’t talk about it] ↩︎ \n\n\n\n See Extending searching : immersed in linked conversation . ↩︎ \n\n\n\n Being part of a transactive memory system may be involved. For instance, Ferguson et al. (2015) ’s research showed people with access to the internet when asked questions reported a lower “feeling-of-knowing” than people without access. This might suggest that the moment someone decides to stop searching and start to ask a colleague they may shift into a different way of assessing their knowledge and gain confidence enabling a renewed search. Smith & Rieh (2019) provides an overview of several studies showing how web search is used as a transactive memory. ↩︎ \n\n\n\n Some in coding-related work refer to this as the XY Problem ( What Is the Xy Problem? - Meta Stack Exchange , 2010) . ↩︎ \n\n\n\n There is a stream of research on ‘advice networks’ (see Leonardi (2007) for an overview, he remarks that “the research on technology and advice networks is sparse”) that also discusses the role of status in asking and answering questions. See also Shorey et al. (2021) for a discussion of the “participatory debugging”—or “collaborative technical troubleshooting”—of young people in online environments. ↩︎ \n\n\n\n A data engineer, Christina, raised this concern in a member check. ↩︎ \n\n\n\n A desire for secrecy in search practices is discussed in the next chapter, under Secretive searching . ↩︎ \n\n\n\n There is much to learn that only be learned at an unwelcome cost of the learner’s time and attention. Bhatt & MacKenzie (2019) say it can be good practice to be “highly selective in the things we know or seek to know in order to remain epistemically functional, particularly now that most of us are almost exclusively immersed in information-dense digital environments” (p. 306). ↩︎ \n\n\n\n Cohen uses “semantic discontinuity” to refer to “gaps and inconsistencies within systems of meaning, and to a resulting interstitial complexity that leaves room for the play of everyday practice”. ↩︎ \n\n\n\n", "snippet": "\n", "url": "/diss/repairing_searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-repository-of-examples", "type": "pages" , "date": "", "title": "repository-of-examples tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"repository-of-examples\" tag.\n \n\n\n{% assign tag_name = \"repository-of-examples\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"repository-of-examples\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"repository-of-examples\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/repository-of-examples/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-rescripting", "type": "pages" , "date": "", "title": "rescripting tag" , "tags": "", "content": "{% assign tag_name = \"rescripting\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"rescripting\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"rescripting\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/rescripting/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-research-tools", "type": "pages" , "date": "", "title": "research-tools tag" , "tags": "", "content": "{% assign tag_name = \"research-tools\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"research-tools\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"research-tools\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/research-tools/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "research", "type": "pages" , "date": "2023-10-24 16:10:40 -0700", "title": "Research" , "tags": "", "content": "\n\n\n\n\n\nThe below is out-of-date, please see [tooling to support people in making hands-on and open evaluations of search](/2024/01/30/tooling-to-support-people-in-making-hands-on-and-open-evaluations-of-search/) for my latest research project.\n\n\n\n\n\nThis page is about [Daniel S. Griffin](/about/)'s research direction.\n\nSee also:\n\nPeer-reviewed publications\nDissertation\nCV for full list of publications\nthe relevance of my research to building search\n\n\n\n\nMy goal in research is to understand how people imagine, use, and make web search so that we might be better able to advocate for the appropriate role and shape of search in our work, lives, and society.[^1]\n\nI do multi-sited [@marcus1995ethnography] ethnographically-informed qualitative research. I conduct semi-structured interpretative in-depth interviews [@pugh2013good]—“treating interviews as fieldwork” [@seaver2017algorithms, p.8]—and document analysis [@prior2003using]. I draw on tactics from those who study algorithms and who see the performance of the algorithms as involving much more than the code itself [@bucher2017algorithmic; @christin2017algorithms; @introna2016algorithms].\n\nI write code to build out potential entry points [@burrell2009field] and rapport [@lareau2021listening], to draw things together [@latour1990drawing], to support my scavenging for documents and data from APIs and websites [@seaver2017algorithms], and to scaffold my reimagining [@benjamin2019captivating_intro; @dunne2013speculative].\n\nI am focused on the sociotechnical construction of search. I treat web search engines and web searching as sociotechnical constructions—explicitly recognizing these are constructed and experienced differently by different people. I look at the articulations and imaginaries that people develop, share, and adopt for the use of web search (and related search tools) and how that interacts with the perceived constraints and affordances of both design and policy. This research engages with values (such as access, autonomy, fairness, privacy, and responsibility) and conceptions of knowing and doing (such as skills, knowledge, and expertise, and technology). \n\n\n\nI note the disruption from Large Language Models (LLMs) and their use in generative search (like You.com or Perplexity AI) and search-like systems (like OpenAI's ChatGPT or Google's Bard) as having helped or forced many to denaturalize web search and think that there may be a way to search outside the dominant approach of one firm.\n\n\n\nThree questions frame my research, they look at:\n\n- [the making of successful search](research#how-do-people-make-successful-use-of-web-search)\n- [articulation and legitimation of search](research#how-do-people-articulate-and-legitimate-the-use-of-web-search-against-dominant-narratives-in-their-work-and-lives)\n- [search production and practice for human flourishing](research#how-can-web-search-be-produced-and-practiced-to-promote-human-flourishing)\n\n\n\n## 1. How do people make successful use of web search?\n\nThis question drives an empirical strategy of exploring work involved in successful uses of web search in order to expand our understanding of search and people’s experience with it. This approach is inspired by the call for “desire-based research” from @tuck2009suspending, as set in contrast to “damage-centered research”.\nA significant body of research on the design and use of web search look for, identify, and advance our understanding of search harms and risks [@gillespie2017algorithmically; @golebiewski2019data; @haider2019invisible; @introna2000shaping; @noble2018algorithms; @tripodi2022propagandists; @vaidhyanathan2011googlization; @couvering2007relevance]. This question suggests a different tack. I look to see, as @latour2013laboratory ask, how order, or search success, is “constructed out of chaos” (p. 33) in situated practices.\nSuccess for the purposes of this question may be incomplete and partial, but I follow @vertesi2019affordances to look at “users’ situated accomplishments” (p. 371) to extend our understandings of how people experience and perform web search. Success here leverages “practical knowledge” [@cotter2022practical] and may include maintenance and repair [@jackson2014rethinking], refusal [@cifor2019feminist] and resistance [@christin2017algorithms; @nagel2018networks; @velkova2019resistance], or refashioning [@leonardi2011flexible]. I acknowledge these accomplishments within larger contests shaped by inequality, institutions, and ideology [@schradie2019revolution].\n\n## 2. How do people articulate and legitimate the use of web search against dominant narratives in their work and lives?\n\nPeople enlist and resist jokes, memes, and stories in articulations that shape how they see search engines and how they use search engines to learn about the world. People say “just google it”, “LMGTFY”, “google is your friend”, “google knows everything until you have an assignment”, “I am not your google”, “google told me so”, and “Dr. Google.” Such talk circulates and helps construct the knowledge of the acceptance of search for or by different people in different contexts. I look at these as part of “the social process by which [web search] is made into a legitimate system” [@gillespie2014relevance, p. 192].\n\nMager [-@mager2017search; -@mager2018internet] has examined the construction of search engine imaginaries, though she notes her focus on legal and policy debates and on Google “obstructs the view of alternative imaginaries of search engines, that may be found at the edges of the material” (2017, p. 257). Amidst concerns of dominant technology companies “hegemonic position in imagining and shaping future society”, @mager2021future call for asking “how to support counter-imaginaries” (p. 233).\n\nThis focuses attention on how people enlist or resist web search articulations to support their autonomy and practices of knowing against dominant narratives. The platforms and “coding elite” [@burrell2021society] construct their own search logics. These intersect with normative conceptions of access, responsibility, knowing, expertise, and information. Looking at counter-articulations will include examination of how different groups may pursue strategic behavior (or gaming [@burrell2019control; @gillespie2017algorithmically; @petre2019gaming]) and other coordinated practices around search, whether that is SEO optimization [@karpf2016analytic; @lewandowski2021influence; @ziewitz2019rethinking], seeding their own search queries in the face of propagandists [@golebiewski2018data; @tripodi2018searching; @tripodi2022propagandists], custodian “social searching” [@gilber2018motivations; @gillespie2018platforms; @morris2013collaborative], and ways of searching for information outside of the dominant technologies [@ochigame2020informatics].\n\n## 3. How can web search be produced and practiced to promote human flourishing?\n\n@vaidhyanathan2011googlization’s study of the “Googlization of everything”, closes with “imagining a better way” for search (p. 200). @noble2018algorithms concludes her analysis of algorithmic oppression in web search with a call to “imagine search with a variety of other possibilities,” arguing “[s]uch imaginings are helpful in an effort to denaturalize and reconceptualize how information could be provided to the public vis-à-vis the search engine” (pp. 181-182). In @tripodi2022propagandists’s closing, she writes “we should pour more attention and resources into research that examines how epistemology shapes the who, what, where, when, and why of search” (p. 215). Following these calls and what @sundin2021relevance identify as a “move by Google towards a greater explicit interest in societal relevance” (p. 5) (i.e., “what is beneficial to society at large” (p. 4)), I ask who is included in the production of search. I also look at the configuration of the components of the larger system of the search engine, particularly with regard to new machine learning and “artificial intelligence” systems [@shah2022situating].\n\n\n[^1]: See @hendry2008conceptual [p. 277].", "snippet": "\n", "url": "/research/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-results-of-search", "type": "pages" , "date": "", "title": "results-of-search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"results-of-search\" tag.\n \n\n\n{% assign tag_name = \"results-of-search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"results-of-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"results-of-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/results-of-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-results-js", "type": "pages" , "date": "", "title": "search/results.js" , "tags": "", "content": "// Function to get a query parameter by its name from the URL\nfunction getQueryVariable(variable) {\n // Get the URL query string (the part after '?')\n var query = window.location.search.substring(1);\n // Split the query string into individual parameters\n var vars = query.split('&');\n\n // Iterate through each parameter\n for (var i = 0; i 0) {\n // Split the matched string to get the sort token\n var sortToken = searchTerm.match(/sort:\\S+/gi)[0].split(':')[1].toLowerCase();\n \n console.log(`Extracted sort token: ${sortToken}`);\n\n // Check sortToken against the defined sortOperators\n for (var operator in sortOperators) {\n if (sortOperators[operator].includes(sortToken)) {\n sortOperator = operator;\n console.log(`Matched sort token '${sortToken}' with sort operator '${operator}'`);\n console.log(\"sortOperator:\", sortOperator);\n break;\n }\n }\n \n // If no match found, log a warning\n if (!sortOperator) {\n console.warn(`No matching sort operator found for token '${sortToken}'`);\n }\n\n // Remove 'sort:' operator from searchTerm\n sortPhrase = \"sort:\" + sortToken;\n console.log(`Removing sort phrase: ${sortPhrase}`);\n searchTerm = searchTerm.replace(sortPhrase, '').trim();\n console.log(`Updated searchTerm after removing sort token: ${searchTerm}`);\n }\n} catch (error) {\n console.error(`An error occurred while processing sort token: ${error.message}`);\n}\n\nconsole.log(\"searchTerm:\", searchTerm);\n\n// When there is no query and a sort operator is provided\nif (!searchTerm && sortOperator) {\n // Skip Lunr search and return sorted items\n displaySearchResults(\"\", sortOperator, \"\", window.store);\n}\n\n\n\n// When the similar operator is provided at the start:\nif (searchTerm.startsWith(\"similar:\")) {\n var searchBox = document.getElementById('search-box');\n searchBox.value = searchTerm;\n displaySearchResults(searchTerm, sortOperator, \"\", window.store);\n}\n\n// When the backlinks operator is provided at the start:\nif (searchTerm.startsWith(\"backlinks:\")) {\n var searchBox = document.getElementById('search-box');\n searchBox.value = searchTerm;\n displaySearchResults(searchTerm, sortOperator, \"\", window.store);\n}\n\n\nvar typeTermVariable = getQueryVariable('type');\n// if typeTermVariable exists (as a param), modify searchTerm to include typeTermVariable\nif (typeTermVariable) {\n searchTerm += \" type:\" + typeTermVariable;\n console.log(\"typeTermVariable exists:\", typeTermVariable);\n}\n\n// Define the stopwords\nvar stopwords = [\n 'a', 'able', 'across', 'after', 'all', 'almost', 'also', 'am', 'among', 'an', 'and', 'any', 'are', 'as', 'at', 'be', 'because', 'been', 'but', 'by', 'can', 'cannot', 'could', 'dear', 'did', 'do', 'does', 'either', 'else', 'ever', 'every', 'for', 'from', 'get', 'got', 'had', 'has', 'have', 'he', 'her', 'hers', 'him', 'his', 'how', 'however', 'i', 'if', 'in', 'into', 'is', 'it', 'its', 'just', 'least', 'let', 'like', 'likely', 'may', 'me', 'might', 'most', 'must', 'my', 'neither', 'no', 'nor', 'not', 'of', 'off', 'often', 'on', 'only', 'or', 'other', 'our', 'own', 'rather', 'said', 'say', 'says', 'she', 'should', 'since', 'so', 'some', 'than', 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'tis', 'to', 'too', 'twas', 'us', 'wants', 'was', 'we', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'whom', 'why', 'will', 'with', 'would', 'yet', 'you', 'your'\n];\n\nfunction exactSearchPresenceModifier(searchTerm) {\n // Find matches of \"any text within quotes\"\n const quotedPortions = searchTerm.match(/\"([^\"]+)\"/g) || [];\n\n // Replace quotes from matches and add '+' before each non-stopword\n quotedPortions.forEach(portion => {\n const modified = portion.replace(/\"([^\"]+)\"/g, (match, p1) => {\n const words = p1.split(' ');\n const modifiedWords = words.map(word => {\n // Do not add '+' if word is a stopword, a single character, or single character followed by '.'\n if (stopwords.includes(word) || word.length === 1 || (word.length === 2 && word.endsWith('.'))) {\n return word;\n } else {\n return '+' + word;\n }\n });\n return modifiedWords.join(' ');\n });\n searchTerm = searchTerm.replace(portion, modified);\n });\n\n return searchTerm;\n}\n\n/**\n * Performs an exact search on the results based on the searchTerm.\n * Given a list of results, this function will filter out items that do not contain\n * the exact phrases enclosed in double quotes within the searchTerm.\n *\n * @param {Array} results - An array of results to be filtered.\n * @param {string} searchTerm - The search string which may contain exact phrases in double quotes.\n * @returns {Promise} - A promise that resolves with the exact matches.\n */\nfunction exactSearch(results, searchTerm) {\n // Extract exact phrases from searchTerm that are enclosed in double quotes\n const quotedPortions = searchTerm.match(/\"([^\"]+)\"/g) || [];\n\n // Fetch the item index\n return fetch('{{ site.url }}/assets/item_index.json')\n .then(response => {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return response.json();\n })\n .then(data => {\n let exactResults = [];\n\n // Iterate over each result\n results.forEach(result => {\n // Find the matching document from data by comparing the id\n const doc = data.find(d => d.id === result.ref);\n\n if (!doc) return; // Skip if no document is found\n\n let isMatch = true;\n\n // Check each quoted portion from searchTerm against doc's title and content\n quotedPortions.forEach(portion => {\n // Convert portion and target content to lowercase for case-insensitive matching\n portion = portion.replace(/\"/g, '').toLowerCase();\n if (!doc.title.toLowerCase().includes(portion) && !doc.content.toLowerCase().includes(portion)) {\n isMatch = false;\n }\n });\n\n // If all quoted portions match, add the result to exactResults\n if (isMatch) {\n exactResults.push(result);\n }\n });\n\n return exactResults;\n });\n}\n\n\n\n\n\n// Check if there's a search term provided\nif (searchTerm) {\n // Fetch the search box from the DOM\n var searchBox = document.getElementById('search-box');\n\n // Check if there's a sort operator specified\n if (sortOperator) {\n console.log(`Search term with sort operator: ${searchTerm} sort:${sortOperator}`);\n searchBox.value = searchTerm + \" sort:\" + sortOperator;\n\n // Note: Add code here if you want to handle sorting in your search results based on sortOperator\n }\n // Check if search term starts with \"similar:\"\n else if (searchTerm.startsWith(\"similar:\")) {\n console.log(`Search for similar content: ${searchTerm}`);\n searchBox.value = searchTerm;\n // Note: Add code here to handle 'similar' search if needed\n }\n // Check if search term starts with \"backlinks:\"\n else if (searchTerm.startsWith(\"backlinks:\")) {\n console.log(`Search for backlinks: ${searchTerm}`);\n searchBox.value = searchTerm;\n // Note: Add code here to handle 'backlinks' search if needed\n }\n\n // Replacing occurrences of 'category:' with 'cat:'\n let modifiedValue = searchTerm.replace(/\\bcategory:/g, 'cat:');\n searchBox.setAttribute(\"value\", modifiedValue);\n\n // Modifying the search term if needed\n // Modifiying per exactSearchPresenceModifier\n var modifiedSearchTerm = exactSearchPresenceModifier(searchTerm);\n // Modifiying per the tags hyphenation\n if (modifiedSearchTerm.includes(\"tags:\")) {\n console.log(`Search term with tags operator: ${modifiedSearchTerm}`);\n // Update tags to strip hyphens\n modifiedSearchTerm = modifiedSearchTerm.replace(/-/g, '');\n }\n\n // Console log if the search term is modified\n if (modifiedSearchTerm !== searchTerm) {\n console.log(`Modified search term: ${modifiedSearchTerm}`);\n }\n \n // Global variable to track the current search source\n var searchFrom = \"server\";\n\n /**\n * Function to fetch search data based on the source (client/server).\n * @param {string} source - The source of the search ('client' or 'server').\n * @param {string} modifiedSearchTerm - The modified search term.\n * @param {string} searchTerm - The original search term.\n * @param {string} sortOperator - The operator used for sorting the results.\n * @returns {Promise} A promise with the search results.\n */\n async function fetchSearchData(source, modifiedSearchTerm, searchTerm, sortOperator) {\n if (source === \"client\") {\n return fetchClientData(modifiedSearchTerm);\n } else if (source === \"server\") {\n try {\n const fetchedServerData = await fetchServerData(modifiedSearchTerm);\n // Validate the fetchedServerData as JSON\n if (typeof fetchedServerData !== 'object' || fetchedServerData === null) {\n throw new TypeError('Fetched data is not a valid object.');\n }\n try {\n JSON.parse(JSON.stringify(fetchedServerData));\n } catch (error) {\n throw new Error('Fetched data is not valid JSON.');\n }\n return fetchedServerData; \n } catch (error) {\n console.log(\"Error in fetchSearchData:\", error);\n console.log(\"Switching to fetchClientData...\");\n return fetchClientData(modifiedSearchTerm);\n }\n }\n }\n\n\n /**\n * Fetches search data from the client.\n * @param {string} modifiedSearchTerm - The modified search term.\n * @returns {Promise} A promise with the search results.\n */\n function fetchClientData(modifiedSearchTerm) {\n return fetch('{{ site.url }}/assets/lunr_index.json')\n .then(response => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json();\n })\n .then(data => {\n const index = lunr.Index.load(data);\n return index.search(modifiedSearchTerm);\n })\n .catch(error => {\n console.error('Failed to fetch or parse lunr_index.json:', error);\n });\n\n\n }\n\n /**\n * Fetches search data from the server.\n * @param {string} modifiedSearchTerm - The modified search term.\n * @returns {Promise} A promise with the search results.\n */\n function fetchServerData(modifiedSearchTerm) {\n console.log(\"Initiating server-side search with term:\", modifiedSearchTerm);\n\n return searchLunrish(modifiedSearchTerm)\n .then(results => {\n console.log(\"Results received from searchLunrish:\", results);\n\n // Check if the results are in the expected format\n if (!results || !results['documents']) {\n console.warn(\"No results or 'documents' field in the results:\", results);\n throw new Error('No results returned from the server');\n }\n\n // Validate the results['documents'] as JSON\n if (typeof results['documents'] !== 'object' || results['documents'] === null) {\n throw new TypeError('Results documents is not a valid object.');\n }\n try {\n JSON.parse(JSON.stringify(results['documents']));\n } catch (error) {\n throw new Error('Results documents is not valid JSON.');\n }\n\n // Return the 'documents' part of the results\n console.log(\"Returning 'documents' from the results:\", results['documents']);\n return results['documents'];\n })\n .catch(error => {\n throw error; // Rethrowing the error for further handling up the chain\n });\n }\n\n\n /**\n * Processes and displays search results.\n * @param {Array} results - The search results.\n */\n function processSearchResults(results) {\n // Logic to display the results\n }\n\n /**\n * Modifies the search term as per the search logic.\n * @param {string} searchTerm - The original search term.\n * @returns {string} The modified search term.\n */\n function modifySearchTerm(searchTerm) {\n // Logic to modify the search term\n return searchTerm; // Modify as needed\n }\n\n\n // Fetch the search data\n fetchSearchData(searchFrom, modifiedSearchTerm, searchTerm, sortOperator)\n // Log the results and perform an exact search\n .then(results => {\n console.log('results:')\n console.log(results)\n return exactSearch(results, searchTerm);\n })\n .then(exactResults => {\n console.log('exactResults:')\n console.log(exactResults)\n try {\n return JSON.parse(JSON.stringify(exactResults));\n } catch (error) {\n console.error('Error: exactResults cannot be converted to JSON');\n throw error;\n }\n })\n // Display the exact search results\n .then(exactResults => {\n try {\n displaySearchResults(searchTerm, sortOperator, exactResults, window.store);\n } catch (error) {\n console.error('Error displaying search results:', error);\n throw error;\n }\n })\n .catch(error => {\n if (error.message.includes('Unexpected token')) {\n console.error('Error: Invalid JSON format in the response:', error);\n } else {\n console.error('Error:', error);\n }\n throw error;\n });\n}\n\n", "snippet": "\n", "url": "/js/search/results.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-retrieval-first", "type": "pages" , "date": "", "title": "retrieval-first tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"retrieval-first\" tag.\n \n\n\n{% assign tag_name = \"retrieval-first\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"retrieval-first\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"retrieval-first\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/retrieval-first/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ripple-effect-trap", "type": "pages" , "date": "", "title": "ripple-effect-trap tag" , "tags": "", "content": "{% assign tag_name = \"ripple-effect-trap\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"ripple-effect-trap\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"ripple-effect-trap\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ripple-effect-trap/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "roadmap", "type": "pages" , "date": "2023-08-31 08:58:56 -0700", "title": "Roadmap" , "tags": "", "content": "\n\n\nThis is a roadmap for this website as a whole.\n\n\nSee also:\n\nIn Progress (for individual posts and pages)\nResearch\nProjects\n\n\n\n\n\n### Introduction\n\nIn my pursuit to develop a prototype for [a seedful and seamful search interface](/search/about), this site is continuously evolving and under construction.\n\n\n\n### Current State of the Site\n\n- View previous updates in the [change notes](/search/?q=cat%3Achanges).\n- For more details, visit [Site](/site) and [search/About](/search/about).\n\n\n\n### Roadmap Overview\n\n#### Content\n\n- Write: [Re Berjon's \"Fixing Search\"]: [Fixing Search](https://berjon.com/fixing-search/)\n\n#### Code\n\n##### Adding Additional Search Backends\n\n- Transition Lunr.js to a working example and introduce new search backends:\n - [Whoosh](https://pypi.org/project/Whoosh/)\n - Note: I've been using Whoosh for my personal note searches.\n - [Algolia](https://www.algolia.com/)\n - [Elasticsearch](Elasticsearch)\n- Enhance external search capabilities.\n - Current status: Basic. See [search/About](/search/about) or [search for type:external](/search?q=type%3Aexternal).\n\n##### Retrieval Augmented Generation (RAG) Search\n\n- Implement search with retrieval augmented generation (RAG).\n - **Progress**: Basic offline example available: [Asking \"Why hire Daniel?\" in an LLM search w/ local Lunr.js](/2023/07/12/example-of-local-search-with-gpt-and-lunrjs.html).\n\n##### Transparency, Feedback, & Curation\n\n- Enhance feedback mechanisms.\n - **Progress**: Basic feedback mechanism available: [Feedback](/feedback).\n- Implement curation workflow for the dynamically generated snippets.\n- Publicize the GitHub repository for this website.\n\n##### Accessibility Improvements\n\n- Testing with Lighthouse and Other Audits\n\n\n\n### [Projects](/projects/)\n\n#### [SearchRights.org](https://searchrights.org/)\n\n- **Progress**:\n - initial write-up: [Planning CSUIRx](/ppost/2023/09/07/planning-csuirx.html)\n - website: (under construction) [SearchRights.org](https://searchrights.org/)\n - GitHub setup ([github.com/danielsgriffin/SearchRights/](https://github.com/danielsgriffin/SearchRights/))\n- **Next Steps**:\n - Add search via danielsgriffin.com\n\n#### Loosely-functional speculative designs in userscripts:\n\n##### ctplsm (Contextual Twitter Poultice for Learning So Much)\n\n- **Progress**: Functional prototype, on GitHub.\n - [github.com/danielsgriffin/ctplsm/](https://github.com/danielsgriffin/ctplsm)\n - Added prompt-and-response logging.\n- **Next Steps**:\n - Add README\n - Log user feedback\n - Modularize 'Check elsewhere'\n\n##### Setarco\n\n- **BLURB**:\n\n > This is a userscript that randomly inserts (or interjects) an additional instruction in a prompt on ChatGPT conversations (matching `https://chat.openai.com/*`). Setarco lets users **set engagement to automate randomizing custom orders**. The additional instructions are written to encourage questions from that LLM-system that are generative, though provoking, revealing, surprising, and perhaps even challenging.\n\n- **Progress**: Functional prototype, on GitHub.\n - [github.com/danielsgriffin/setarco/](https://github.com/danielsgriffin/setarco)\n- **Next Steps**:\n - Log prompts-and-response and user feedback\n\n\n##### Auto-Button-Click Double-check Evaluation for Funsies or Gnoses\n\n- **BLURB**:\n\n > I want to write a userscript that automatically clicks the \"G\" Google Search button. So perhaps the evaluation could appear while I'm glancing at the response. (It does take a few seconds?) [[on Twitter](https://twitter.com/danielsgriffin/status/1704174077123121408)]\n\n- **Progress**:\n - initial experimentation...\n\n\n\n### Tool Exploration\n\n- GitHub Copilot Chat\n- Sourcegraph\n- Cursor\n- ChainForge\n - **Progress**: A couple attempts and a post: [The Need for ChainForge-like Tools in Evaluating Generative Web Search Platforms](/pposts/2023/08/31/chainforge-for-generative-search.html)", "snippet": "\n", "url": "/roadmap/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-robots-txt", "type": "pages" , "date": "", "title": "robots-txt tag" , "tags": "", "content": "{% assign tag_name = \"robots-txt\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"robots-txt\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"robots-txt\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/robots-txt/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "rs", "type": "pages" , "date": "2023-05-24", "title": "Repairing Searching" , "tags": "", "content": "I taught an undergraduate course on [_understanding change in web search_](/courses/s2023-LB322B) at Michigan State University in Spring 2023. As an extension of the course, I'm _continuing the course_ and collecting follow-on reflections and developments here. \"Repairing searching\" is also the title of a chapter in [my dissertation](\\diss), thought situated within the work of data engineers.\n\n## repairing-searching\n\n\n{% for post in site.tags.repairing-searching %}\n \n {{ post.title }}\n \n{% endfor %}\n", "snippet": "\n", "url": "/rs/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-running", "type": "pages" , "date": "", "title": "running tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"running\" tag.\n \n\n\n{% assign tag_name = \"running\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"running\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"running\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/running/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "courses-s2023-lb322b", "type": "courses" , "date": "2023-05-25", "title": "Understanding Change in Web Search" , "tags": "", "content": "back to [Courses](/courses)\n\nAn undergraduate course on understanding change in web search.\n\n\nThis page is very much a living document. I plan to share more on particular assignments and class exercises, reflections on what content was harder to teach, what I re-saw in search, and interventions imagined by the students.\n\n- Jump to [course readings](/courses/s2023-LB322B.readings.html).\n- I am \"continuing the course\" through posts tagged as repairing-searching.\n\n\n\n\nsemester: Spring 2023\nlocation: Lyman Briggs College at Michigan State University (remote, synchronous)\nformal title: [LB 322B Advances in Science and Technology - Social Sciences (W)](https://reg.msu.edu/Courses/Search.aspx?SubjectCode=lb&Term=current&CourseNumber=322B#Results)\nfaculty page: [Daniel Griffin, Ph.D.](https://lbc.msu.edu/about/directory/griffin.html)\n\n\nFormal course description: \n\n> Interdisciplinary study of technology and innovation in relation to science and/or medicine. Emphasis on scholarship and methodologies from the social sciences.\n\nI was hired to teach this course the week before it began. As I adapted the guidance to my core expertise, I focused the course on **understanding change in web search**. I maintained some focus on medicine in discussions and class assignments given the formal focus and the interests of my students. I include \"change\", to distinguish the plausible neutrality of _change_ from connotations in _advances_ and _innovation_.\n\nHere was the course description for the syllabus:\n\n> Web search is both a relatively new technology and a site for constant innovation in design and practice. People also use it to understand and advance other new and emerging technology. This course develops students’ sociotechnical understanding of web search \"so they can be better equipped to develop and advocate policies for how search engines should be embedded in, and restricted from, various private and public information settings\" [@hendry2008conceptual, p. 277]. This course will cover the design and articulation of search engines, the various interacting actors and other components, and ways of reimagining web search. We will use prior and present changes in web search technology to better understand interactions between people and technology generally. Students will develop their ability to understand and communicate interdisciplinary social science research about sociotechnical systems and practices.\n\nReimagining is a core step in developing deeper understanding.\n\n## Modules\n\n\n Here are the modules and their core assignments as listed on the initial draft of the syllabus.\n\n### Module 1: Attending\n\nRe-seeing. So what? Raising questions.\n\n**Assignment:** Find a significant search failure, detailing your search process and your analysis of the failure. This could be a significant failure on the part of the searcher, the search engines, or the speakers hoping to be found. (Variation 2: If in the process of searching for a search failure you identify a wonderful surprise, report on the serendipitous search instead. Variation 3: If you fail to find a search failure, you have not failed. Analyze this failure itself.) For this assignment please only use Google, DuckDuckGo, or Bing as your search engine. Justify why this failure is interesting and significant and how it provides evidence for a particular issue in the construction or control of search, as an innovation. Cite evidence found and supporting material from our readings.\n\nWe will take in-class time for workshopping and peer feedback.\n\n*Analysis should be approximately 500-750 words.*\n\n### Module 2: Infrastructures, components, & interactions\n\nHow does it work? Understanding the mechanisms and functions.\n\n**Assignment:** Personal essay reflecting on what you are learning in these first two modules and your own conception of web search, your search practices, and how you talk about search. Refer to specific search sessions or specific conversations you had with others. Please include annotated screenshots of the SERP for at least two search sessions. Include a log of at least one search session for each week. \n\n\nWe will take in-class time for workshopping and peer feedback.\n\n*Approximately 1000 words.*\n\n### Module 3: Case studies in web search for health, healthcare, and medicine.\n\nHow do people use search? How do search engines shape searching? How do we use search to inform or shape interventions? Who?\n\n\n\n**Assignment:** Group project - facilitate class session, feedback as op-ed on topic or review of one of the papers.\n\n*Feedback approximately 500 words.*\n\n\n\n\n\n\n### Module 4: Reimagining web search\n\n**Assignment:** Identify and develop an intervention. Repair. Speculative fiction. A policy proposal. A design change. Advocate for the use of an existing extension. Advocate for a use of or change in a search engine. A letter/op-ed to future students. Advocate for refusal practices. Make a complaint. Create or modify a Wikipedia article or website to repair a search void or gap. Propose a search practice or literacy intervention. Write a justification of your intervention. (Group or individual project.)\n\nPerhaps:\n\n- Engage with norms to legitimate or delegimate searching in particular places, times, or topics or with particular tools or purposes. \n- Engage with design within the SERP or the extensions of search to change perceived affordances or constraints.\n- Engage with questions of repair and sharing searches.\n- Engage with questions of responsibility.\n\nWe will take in-class time for workshopping and peer feedback.\n\n*Text in intervention and justification (combined) should be approximately 1500-2500 (6-10 pages double-spaced) words. Not including bibliography.*\n\n## Readings\n\n[See readings on a separate page here](s2023-LB322B.readings).\n\n## Notes and Reflections\n\n _In-progress._ These reflections are shared with the hope of providing some reference for others, and to spur my own learning.\n\n2023-05-25 10:13:00: These are initial notes and I will likely follow up with more under [repairing searching](/rs).\n\n### A shooting\n\nThere was [a shooting on the MSU campus this semester](https://en.wikipedia.org/wiki/2023_Michigan_State_University_shooting), killing three students. Campus closed for the rest of the week, with all classes cancelled, and I shifted around and changed assignments and class plans. I referenced @dunn2021teaching—on recommendation from campus emails—as I made changes and communicated with students. Only a few students came to class for the next class session and I cut all readings out until after spring break (two weeks later). I ended up only giving brief lectures on the readings, and facilitating planned engagements around team-led classes after spring break and low-pressure explorations of alternative search engines.\n\n\nImproves: After we returned to class I could have done a better job refreshing students on prior material and conversations (both from the start of the course and the material quickly covered around this time). I also cut back on warm up 'quizzes', which may have negatively affected retention of material and student engagement.\n\n\n### Participation\n\nI attempted to follow @gillis2019reconceptualizing in ~~grading~~ encouraging and discussing participation. Student participation was heavily disrupted by the shooting noted above. The ongoing COVID-19 pandemic negatively affected participation as well.\n\nSharing from the syllabus:\n\n> \\## Attendance Policy\n> \n> You are not directly graded on your attendance but your attendance will affect your overall learning and performance. Please attend class when possible. Please tell me if you anticipate missing class. Please ensure you make up for the missing class by obtaining notes from classmates and completing in-class writing exercises. Please try to make it to class by the start time.\n\n\n\n### Assignments and feedback\n\nProviding written feedback was one of my favorite parts of the course, but also where my time was most out of alignment with my job description. Trying to give students the quality of feedback they deserved proved especially challenging. While we had some in-class workshopping of assignments in-progress (and I gave feedback to many end-of-session notes students submitted), I wish we had done that more regularly, with smaller portions of writing to practice giving and receiving feedback (and feedback on feedback). \n\nAn unplanned change was allowing 'feedback responses' (rather than full or partial revisions) to allow students to demonstrate learning and earn full credit—this also allowed me to better gauge student progress. I also split the second individual writing assignment to consist of an initial submission (for feedback from me) followed by a final submission. For this second assignment I also organized 'general feedback' that I shared with all students. This included reflections on my own assignment guidance and instruction.\n\nI shared rubrics when I posted the assignments. They did not always fruitfully guide my feedback.\n\nI consider my feedback to the students on their writing (and their thinking and learning as demonstrated in their writing) as one of the core aspects of my instruction.\n\nSharing from the syllabus:\n\n> \\## Late Work Policy\n> \n> Completing work on time will help you keep pace with the new material in the course and will aid the instructor in providing timely and formative individual and collective feedback. Please inform me in advance if you anticipate being late.\n\nWhile we discussed ChatGPT and other tools like it extensively in class, I did not make any formal policy about the use of them for assignments. I was generally not concerned about such uses disrupting student learning for this class and these particular assignments (that said, two students engaged with related questions in extra _honors projects_ (TK)).\n\n### A note on \"plagiarism\"\n\nI refused to use Turnitin (available on the learning management system), in its standard form or for identifying generated text, due principally to discomfort raised in @introna2016algorithms. One student submitted work that could have been interpreted as \"plagiarism\", though conversations with the student suggested the issue was limited prior instruction and feedback on writing and citation. The student and I worked through exercises to better attend to how citation is performed in the class readings.\n\n_Aside on **refusal**, see: [The Refusal Conference](https://afog.berkeley.edu/programs/the-refusal-conference) [@afog2020refusal]_\n\n\n\n### On content\n\n- There is a certain amount of work necessary to just lay out terms and distinguishing and describing key components in searching the web, particularly \"search engine\" v. \"browser\" (which others have noted this, due perhaps partially to the opacity/seamlessness around the address bar serving double function as the search box.) While I did not want to defer to company definitions, I did point students to Google's recent page: [Search Central > \nGoogle Search Central Blog > Visual Elements of Google Search](https://developers.google.com/search/blog/2022/12/visual-elements)\n- It turned out to be much harder than I anticipated to teach \"data voids\" and \"frictions of relevance.\" I think part of the problem is from the former being flexibly defined, with divergence in its initial take-up and shifts in the later presentation. \"Data void\" is also such a catchy, broad, and blameless(?) term, that it appears to be an explanation for any search failure. [TK: share written explainers from general feedback]\n- Students really took to the language of paid-for-placement in @introna2000shaping, and that (rather than the language of advertising or search engine optimization) appeared for a time to be the primary explanation for rankings for several students.\n\n## Continuing the Course\n\nI am \"continuing the course\" in posts here: [Repairing Searching](/rs).\n\n", "snippet": "\n", "url": "/courses/s2023-LB322B/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "courses-s2023-lb322b-readings", "type": "courses" , "date": "2023-05-25", "title": "Understanding Change in Web Search.readings" , "tags": "", "content": "back to [Courses: understanding change in web search](/courses/s2023-LB322B)\n\n Here are the assigned readings as listed on the initial draft of the syllabus—interspersed with some assignment details.\n\n## M1: Attending\n\nRe-seeing. So what? Raising questions.\n\n### session 1: intros\n### session 2: shaping\n\n- reading:\n - @introna2000shaping\n\n### session 3: goals (or: search results)\n\n- readings:\n - @couvering2007relevance [pp. 866--867, pp. 871-885, SKIM the rest]\n - @gillespie2014relevance [pp. 167--169, pp. 191--192]\n - @sundin2021relevance\n\n### session 4: user responsibility (or: literacy & queries)\n\n- readings:\n - @tripodi2018searching [pp. 27--34]\n - @caulfield2019data\n - @lurie2021searching_facctrec [p. 8 Analyzing Information Seekers]\n - @hendry2008conceptual (**SKIM**)\n\n### session 5: money (or: advertising)\n\n- readings:\n - @ftc2013sample\n - @daly2017profiling [pp. 307-308, the two paragraphs starting at \"Ofcom\" and \"This research was followed by a further Ofcom report\" and p. 313 Paid-for Advertising]\n - @asher-schapiro2022gaming\n\n### session 6: voids\n\n- readings:\n - @diresta2018complexity\n - @golebiewski2018data\n - related:\n - @golebiewski2019data\n\n### session 7: harms\n\n- readings:\n - @noble2018algorithms [pp. 66--86]\n\n## M2: Infrastructures, components, & interactions\n\nHow does it work? Understanding the mechanisms and functions.\n\n### session 8: Handoff\n\n- in-class:\n - workshopping Module 1 assignment\n - Handoff lecture [@mulligan2020concept]\n\n### session 9: infrastructures\n\n- readings:\n - @haider2019invisible [pp. 49--72 The materialities of search] \n - related:\n - @sundin2020where\n\n### session 10: quality control (or: search content moderation)\n\n- readings:\n - @gillespie2018custodians [pp. 184--187]\n - @gillespie2017algorithmically\n\n### session 11: hidden workers (or: search quality raters)\n\n- readings:\n - @meisner2022labor\n - @google2022sqeg [read: 2.3 Your Money or Your Life (YMYL) Topics & 4.2 Harmful to Self or Other Individuals & 4.4 Harmfully Misleading Information; search the PDF for [health] and read those items; SKIM the rest]\n\n### session 12: \n\nreactivity (or: search engine optimization (SEO))\n\n- readings:\n - @ziewitz2019rethinking\n - @noble2018algorithms [pp. 86-90 \"How Pornification Happened to “Black Girls” in the Search Engine\"]\n - [https://developers.google.com/search/docs](https://developers.google.com/search/docs) [SKIM]\n - related:\n - @lewandowski2021influence\n\n### session 13\n\n- in-class:\n - workshopping Module 2 assignment\n - exploring Module 3 cases and identifying teams\n\n### session 14: alternative search tools\n\n- in-class: explorations\n\n### session 15: alternative search tools\n\n- in-class: explorations\n\n## M3: Case studies in web search for health, healthcare, and medicine\n\nHow do people use search? How search do engines shape searching? How do we use search to inform or shape interventions? Who?\n\nStudents will break into 8 teams to lead 1/2 of a class session for the these four weeks. All readings will be identified prior to Spring Break.\n\n\nReadings selected for student-facilitated classes included:\n\n- Climate change\n - @haider2023google\n- COVID-19 & “infodemic’\n - @simon2021autopsy\n - @toepfl2022plotters\n - @sundin2021relevance\n- Queer healthcare\n - @augustaitis2021online\n - @kreines2018quality\n- Reproductive health & abortion\n - @upadhyay2023using\n - @hassard2020digital\n- Dr. Google Meme\n - @boyle2023physicians\n- Vaccinations\n - @ghezzi2020online\n\n\n\n## M4: Reimagining search\n\n- general readings:\n - @hendry2008conceptual [pp. 278-279 The question...; pp. 301--305 Discussion & Conclusion]\n - @vaidhyanathan2011googlization [pp. 200--204 Imagining a Better Way]\n - @noble2018algorithms [pp. 134--152 The Future of Knowledge in the Public OR 153--169 The Future of Information Culture; pp. 179--181 Imagining Alternatives: Toward Public Noncommercial Search]\n - @shah2022situating\n - @sundin2021relevance [pp. 5--6 Ideas for Future Research]\n - @lewandowski2019web\n\nWhile students mostly did group activities or group work focused on developing their projects, I did brief presentations. Specifically assigned or examined readings for this module included:\n\n### session 22: imagining and crafting\n\n- read: Ruha Benjamin “Introduction: Discriminatory Design, Liberating Imagination,” in Captivating Technology: Race, Carceral Technoscience, and Liberatory Imagination in Everyday Life, ed. Ruha Benjamin (Duke University Press, 2019), 1–14, https://doi.org/10.2307/j.ctv11sn78h (open access at https://www.dukeupress.edu/Assets/PubMaterials/978-1-4780-0381-6_601.pdf)\n\n“Ultimately, my hope is for you, the reader, to imagine and craft the worlds you cannot live without, just as you dismantle the ones we cannot live within.” (p. 14)\n\n### session 23: scripts & articulations\n\nPresented w/ excerpts from:\n\n- @akrich1992scription\n- @mulligan2018rescripting\n- @selbst2019fairness\n- @lurie2021searching_facctrec\n- @gillespie2014relevance\n- @griffin2022search\n\n### session 24: counternarratives, counter stories, counter-imaginaries\n\nPresented w/ excerpts from:\n\n- @gillespie2014relevance\n- @skrubbeltrang2017ripinstagram\n\n### session 25: interpretive flexibility\n\nPresented w/ reference to:\n\n- @pinch1984social\n- @narayanan2022google\n- @tripodi2018searching\n- @vertesi2019affordances\n- @nissenbaum2011preemption\n\n### session 26: web search and sexism\n\n_A student requested I cover this in more depth._\n\nPresented w/ excerpts from:\n\n- @noble2018algorithms\n- @cadwalladr2016google\n- @urman2022foreign\n- @tripodi2021ms\n- @dave2022google\n- @ogilvy2013autocomplete\n\n### session 27: project time\n\n### session 28: project time\n\n\n", "snippet": "\n", "url": "/courses/s2023-LB322B.readings/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-safesearch", "type": "pages" , "date": "", "title": "safesearch tag" , "tags": "", "content": "{% assign tag_name = \"safesearch\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"safesearch\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"safesearch\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/safesearch/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "scholar-profiles", "type": "pages" , "date": "", "title": "Scholar Profiles" , "tags": "[academic-search]", "content": "\n\nSee also:\n- [academic search tools (doc)](docs/2023/08/02/academic-search-tools.html)\n- [My academic search kit (tweet)](/tweets/2023/08/02/my-academic-search-kit.html)\n\n\n\n\n- [ischool.berkeley.edu page](https://www.ischool.berkeley.edu/people/daniel-griffin)\n- [Semantic Scholar](https://www.semanticscholar.org/author/Daniel-Griffin/2066440087)\n- [ORCiD](https://orcid.org/0000-0001-9380-0944)\n- [ResearchGate](https://www.researchgate.net/profile/Daniel-Griffin-14) & [Academia.edu](https://berkeley.academia.edu/DanielSGriffin)\n - I have this note on my profile on ResearchGate and Academia.edu, citing to @tanczer2019online:\n\n > I study conceptions of searching and shared searching practices. Recent quote that inspired me: Lucas Melgaço & David Lyon in Surveillance and the Quantified Scholar: A Critique of Digital Academic Platforms: \"Even those aware of surveillance capitalism may in many cases surrender to surveillance culture. Indeed, the two authors of this essay both have profiles on Academia.edu and ResearchGate and are users of different for-profit productivity platforms.\" (in: Tanczer, Leonie Maria et al. (2019) Online Surveillance, Censorship, and Encryption in Academia. International Studies Perspectives, doi: [10.1093/isp/ekz016](https://doi.org/10.1093/isp/ekz016))\n\n- Google Scholar: **I do not have a Google Scholar page.**\n - While surrendering re the above, I refuse here. See my paper w/ [Jake Goldenfein](https://twitter.com/jakusg): [goldenfein2022platforming](/shortcuts/goldenfein2022platforming), note particularly the heading on [#refusal](/shortcuts/goldenfein2022platforming#refusal).\n\n\n\nI share these not for individualized or reactive quantification but for connection. See @pardoguerra2022quantified [p. 26]:\n\n> In this adjudication, I argue that the problem posed by quantification is fundamentally the way it triggers reactivity: it is not the quantification per se, but the way disciplines collectively deal with the individualization of scholars’ professional worth. Having studied the practice and its implications for social science, I insist on the importance of rethinking our vocation, moving beyond devotion to scholarship as a calling toward devotion centered on academia as a lived, shared, multidimensional form of labor.\n\nSee also [the older sample chapter version](https://pardoguerra.org/chapter-1-chains-of-knowledge/) ([inc. a tweet here](https://twitter.com/danielsgriffin/status/1585718495530356736)).\n\nAnd here, from his final chapter, Solidarities, ¶ in pp. 190-191:\n\n> Numbers can be equally liberating and oppressive. [ . . . ] Our unwillingness to reclaim imagination is our collective sin.\n\nReclaiming imagination is a centerpiece of my research, see the pull quote from Safiya Noble at [my home page](/):\n\n> I work to defamiliarize and reimagine web search. [ . . . ] \n> \n> As @noble2018algorithms [pp. 181-182] writes:\n>\n> > **Indeed, we can and should imagine search with a variety of other possibilities.** [ . . .] Such imaginings are helpful in an effort to **denaturalize** and **reconceptualize** how information could be provided to the public vis-à-vis the search engine. [emphases added]\n\nBack to @pardoguerra2022quantified, see also the final sentence in the penultimate paragraph, p. 194:\n\n> Why choose a vocation of the individual when we can build one of solidarity?\n\n", "snippet": "\n", "url": "/scholar_profiles/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-scraping", "type": "pages" , "date": "", "title": "scraping tag" , "tags": "", "content": "{% assign tag_name = \"scraping\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"scraping\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"scraping\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/scraping/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-seamlessness", "type": "pages" , "date": "", "title": "seamlessness tag" , "tags": "", "content": "{% assign tag_name = \"seamlessness\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"seamlessness\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"seamlessness\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/seamlessness/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-and-rescue", "type": "pages" , "date": "", "title": "search-and-rescue tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search-and-rescue\" tag.\n \n\n\n{% assign tag_name = \"search-and-rescue\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-and-rescue\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-and-rescue\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-and-rescue/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-assistants", "type": "pages" , "date": "", "title": "search-assistants tag" , "tags": "", "content": "{% assign tag_name = \"search-assistants\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-assistants\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-assistants\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-assistants/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-audits", "type": "pages" , "date": "", "title": "search audits tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search audits\" tag.\n \n\n\n{% assign tag_name = \"search audits\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search audits\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search audits\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-audits/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-autocomplete", "type": "pages" , "date": "", "title": "search-autocomplete tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search-autocomplete\" tag.\n \n\n\n{% assign tag_name = \"search-autocomplete\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-autocomplete\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-autocomplete\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-autocomplete/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-avoidance", "type": "pages" , "date": "", "title": "search-avoidance tag" , "tags": "", "content": "{% assign tag_name = \"search-avoidance\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-avoidance\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-avoidance\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-avoidance/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-confessions", "type": "pages" , "date": "", "title": "search-confessions tag" , "tags": "", "content": "{% assign tag_name = \"search-confessions\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-confessions\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-confessions\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-confessions/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-directive", "type": "pages" , "date": "", "title": "search directive tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search directive\" tag.\n \n\n\n{% assign tag_name = \"search directive\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search directive\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search directive\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-directive/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-directives", "type": "pages" , "date": "", "title": "search directives tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search directives\" tag.\n \n\n\n{% assign tag_name = \"search directives\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search directives\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search directives\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-directives/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-engine-optimization", "type": "pages" , "date": "", "title": "search-engine-optimization tag" , "tags": "", "content": "{% assign tag_name = \"search-engine-optimization\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-engine-optimization\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-engine-optimization\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-engine-optimization/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-failure", "type": "pages" , "date": "", "title": "search-failure tag" , "tags": "", "content": "{% assign tag_name = \"search-failure\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-failure\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-failure\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-failure/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-history", "type": "pages" , "date": "", "title": "search-history tag" , "tags": "", "content": "{% assign tag_name = \"search-history\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-history\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-history\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-history/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-is-hard", "type": "pages" , "date": "", "title": "search is hard tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search is hard\" tag.\n \n\n\n{% assign tag_name = \"search is hard\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search is hard\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search is hard\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-is-hard/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-liaison", "type": "pages" , "date": "", "title": "search-liaison tag" , "tags": "", "content": "{% assign tag_name = \"search-liaison\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-liaison\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-liaison\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-liaison/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-search-list-interactions-js", "type": "pages" , "date": "", "title": "search/search-list-interactions.js" , "tags": "", "content": " document.addEventListener(\"DOMContentLoaded\", function () {\n // Search state\n var activeInteractionIndex = -1; // Keeping track of active interaction.\n\n\n \n\n document.addEventListener(\"keydown\", function (e) {\n interactions = Array.from(serpList.children);\n // }\n if (suggestionsList.innerHTML !== \"\") {\n return\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n activeInteractionIndex = (activeInteractionIndex + 1) % interactions.length;\n break;\n case \"ArrowUp\":\n activeInteractionIndex = (activeInteractionIndex - 1 + interactions.length) % interactions.length;\n break;\n case \"Enter\":\n if (activeInteractionIndex !== -1) {\n e.preventDefault();\n if (interactions[activeInteractionIndex].querySelector('a.sr-title').textContent.startsWith('!')) {\n // If the interaction starts with a bang, update the form value and use handleBangs\n var form = document.querySelector('form')\n form.q.value = interactions[activeInteractionIndex].querySelector('a.sr-title').textContent\n return handleBangs(form)\n } else {\n window.location.href = interactions[activeInteractionIndex].querySelector('a.sr-title').href;\n }\n }\n }\n\n removeHighlight();\n\n if (!isNaN(activeInteractionIndex) && activeInteractionIndex !== -1) {\n interactions[activeInteractionIndex].classList.add(\"hover\");\n interactions[activeInteractionIndex].scrollIntoView({ block: 'nearest' });\n }\n });\n\n document.addEventListener(\"mouseover\", function (e) {\n var target = e.target;\n // Check if the target is a child of serpList or canonicalResultDiv\n if (target.closest('.serpList') || target.closest('.canonical-result-div')) {\n // Find the closest parent LI element\n while (target.nodeName !== \"LI\") {\n target = target.parentNode;\n if (!target) return;\n }\n removeHighlight();\n target.classList.add(\"hover\");\n }\n });\n\n document.addEventListener(\"mouseout\", function (e) {\n var target = e.target;\n // Check if the target is a child of serpList or canonicalResultDiv\n if (target.closest('.serpList') || target.closest('.canonical-result-div')) {\n removeHighlight();\n }\n });\n\n function removeHighlight() {\n var highlighted = document.querySelector(\".hover\");\n if (highlighted) {\n highlighted.classList.remove(\"hover\");\n }\n }\n });", "snippet": "\n", "url": "/js/search/search-list-interactions.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-outside-the-box", "type": "pages" , "date": "", "title": "search-outside-the-box tag" , "tags": "", "content": "{% assign tag_name = \"search-outside-the-box\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-outside-the-box\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-outside-the-box\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-outside-the-box/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-policy", "type": "pages" , "date": "", "title": "search-policy tag" , "tags": "", "content": "{% assign tag_name = \"search-policy\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-policy\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-policy\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-policy/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-policyd", "type": "pages" , "date": "", "title": "search-policyd tag" , "tags": "", "content": "{% assign tag_name = \"search-policyd\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-policyd\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-policyd\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-policyd/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-quality-complaints", "type": "pages" , "date": "", "title": "search-quality-complaints tag" , "tags": "", "content": "{% assign tag_name = \"search-quality-complaints\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search-quality-complaints\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search-quality-complaints\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-quality-complaints/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-quality-raters", "type": "pages" , "date": "", "title": "Search Quality Raters tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Search Quality Raters\" tag.\n \n\n\n{% assign tag_name = \"Search Quality Raters\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Search Quality Raters\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Search Quality Raters\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-quality-raters/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-seeds", "type": "pages" , "date": "", "title": "search seeds tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search seeds\" tag.\n \n\n\n{% assign tag_name = \"search seeds\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search seeds\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search seeds\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-seeds/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-tips", "type": "pages" , "date": "", "title": "search tips tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search tips\" tag.\n \n\n\n{% assign tag_name = \"search tips\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search tips\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search tips\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-tips/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-search-user-interfaces", "type": "pages" , "date": "", "title": "search user interfaces tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"search user interfaces\" tag.\n \n\n\n{% assign tag_name = \"search user interfaces\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"search user interfaces\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"search user interfaces\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/search-user-interfaces/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-searchability", "type": "pages" , "date": "", "title": "searchability tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"searchability\" tag.\n \n\n\n{% assign tag_name = \"searchability\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"searchability\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"searchability\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/searchability/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-searchrights", "type": "pages" , "date": "", "title": "SearchRights tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"SearchRights\" tag.\n \n\n\n{% assign tag_name = \"SearchRights\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"SearchRights\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"SearchRights\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/searchrights/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-seo-for-social-good", "type": "pages" , "date": "", "title": "seo-for-social-good tag" , "tags": "", "content": "{% assign tag_name = \"seo-for-social-good\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"seo-for-social-good\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"seo-for-social-good\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/seo-for-social-good/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-seo", "type": "pages" , "date": "", "title": "SEO tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"SEO\" tag.\n \n\n\n{% assign tag_name = \"SEO\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"SEO\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"SEO\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/seo/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-serp-js", "type": "pages" , "date": "", "title": "search/serp.js" , "tags": "", "content": "function changePageTitle(query) {\n document.title = `🔎[${query}]`;\n}\n\nfunction addSearchSourcing(searchSourcing) {\n let searchSourcingLine;\n if (searchSourcing === \"Lunrish\") {\n searchSourcingLine = `Lunrish`;\n }\n if (searchSourcing === \"Lunr.js\") {\n searchSourcingLine = `your browser with Lunr.js`;\n }\n // Create the search sourcing string\n var searchSourcingParagraph = document.createElement('p');\n searchSourcingParagraph.id = \"search-sourcing\";\n searchSourcingParagraph.className = \"small p-0 m-0\";\n searchSourcingParagraph.innerHTML = `This search is powered by ${searchSourcingLine}.`;\n \n // Find the searchResultsSummary div and prepend the searchSourcingParagraph\n var searchResultsSummaryDiv = document.getElementById(\"sr-summary-div\");\n if (searchResultsSummaryDiv) {\n searchResultsSummaryDiv.prepend(searchSourcingParagraph);\n }\n}\n\n\nfunction addSearchResultsSummary(totalItems, pageSize, startIndex, endIndex, showAll, sortOperator, enteredSearchTerm, searchSourcing) {\n // Create the summary div\n var searchResultsSummary = document.createElement('div');\n searchResultsSummary.id = \"sr-summary-div\";\n searchResultsSummary.className = 'col-sm-12 col-md-10 mx-auto m-0 pt-2';\n \n\n\n\n // Create the summary string\n var summaryParagraph = document.createElement('p');\n summaryParagraph.id = \"exactly-summary\";\n summaryParagraph.className = \"small p-0 m-0 border-bottom\";\n var exactlyResultsLink = document.createElement('a');\n exactlyResultsLink.href = \"/search/about#exactly-results\";\n exactlyResultsLink.textContent = \"exactly\";\n // if totalItems items is less than the page size, do not include the link to show all results\n if (totalItems [' + searchTerm + ` sort:` + sortOperator + `]`;\n } else if (enteredSearchTerm.startsWith(\"similar:\")) {\n resultsMessageSpan.innerHTML = `[similar:/` + searchTerm + ']';\n }\n else if (enteredSearchTerm.startsWith(\"backlinks:\")) {\n resultsMessageSpan.innerHTML = `[backlinks: ` + searchTerm + ']';\n }\n else {\n resultsMessageSpan.innerHTML = '[' + enteredSearchTerm + ']';\n }\n resultsMessageSpan.innerHTML = \" for the search query: \" + resultsMessageSpan.innerHTML\n\n summaryParagraph.appendChild(resultsMessageSpan);\n searchResultsSummary.appendChild(summaryParagraph);\n\n return searchResultsSummary;\n}\n\n\nfunction sortItems(items, sortOperator) {\n if (sortOperator === 'date') {\n items.sort((a, b) => new Date(b.date) - new Date(a.date));\n } else if (sortOperator === 'date-reverse') {\n items.sort((a, b) => new Date(a.date) - new Date(b.date));\n }\n return items;\n}\n\nfunction processSpecialSearch(searchTerm) {\n var prefixes = [\"similar:\", \"backlinks:\"];\n var prefix = searchTerm.split(\":\")[0];\n for (var i = 0; i {\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return response.json();\n })\n .then(data => {\n console.log(\"Got the window store!\");\n for (var i = 0; i item.id === results[i].ref);\n if (!item) {\n // Item not found, handle the case\n console.log(\"Item not found.\");\n console.log(results[i]);\n continue; // Skip this iteration\n }\n items.push(item);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n await fetchAndPrepareItems();\n }\n // Sort items based on the sort operator\n items = sortItems(items, sortOperator);\n } else {\n // No search results and search term is not empty\n var noResultsMessage = document.createElement('div');\n noResultsMessage.className = \"col-12 mx-auto text-center p-0 m-0\"\n noResultsMessage.innerHTML = '[' + enteredSearchTerm + ']';\n // Remove searchResultsUL\n searchResultsUL.remove();\n // Use innerHTML to include the Liquid statement\n searchResultsSERP.innerHTML = noResultsMessage.outerHTML + `{% include no-results.html %}`;\n return;\n }\n\n // Pagination\n let totalItems = items.length;\n let startIndex = (pageNum - 1) * pageSize;\n let endIndex = Math.min(startIndex + pageSize, totalItems);\n\n // Insert the summary at the beginning of searchResultsSERP\n const searchResultsSummary = addSearchResultsSummary(totalItems, pageSize, startIndex, endIndex, showAll, sortOperator, enteredSearchTerm);\n searchResultsSERP.prepend(searchResultsSummary);\n\n let pageItems;\n if (showAll) {\n pageItems = items;\n } else {\n pageItems = items.slice(startIndex, endIndex);\n }\n\n \n\n for (let item of pageItems) {\n var listItem = processSearchResultItem(item);\n searchResultsUL.appendChild(listItem);\n }\n\n addSearchSourcing(window.searchSourcing)\n\n \n\n const navigateResultsHint = document.getElementById('navigate-results-hint');\n navigateResultsHint.classList.remove('d-none');\n\n // Assuming enteredSearchTerm contains the search term you are looking for\n querySnippets = {{ site.data.query_snippets | jsonify }};\n console.log(\"Checking site.data.query_snippets for canonicalSearchTerm: \", canonicalSearchTerm)\n var querySnippetContent = querySnippets[canonicalSearchTerm];\n \n if (typeof querySnippetContent !== 'undefined') {\n console.log(\"querySnippetContent\", querySnippetContent)\n // If the snippet is defined, proceed with creating the querySnippet element\n // If the snippet has a , split at the and use the first part.\n if (querySnippetContent.includes('')) {\n querySnippetContent = querySnippetContent.split('')[0];\n }\n // Check for canonical results:\n canonicalResults = {{ site.data.canonical_results | jsonify }};\n const canonicalResult = canonicalResults[canonicalSearchTerm];\n // Print to console log both:\n console.log(\"Checking site.data.canonical_results for canonicalSearchTerm: \", canonicalSearchTerm)\n console.log(canonicalResult)\n function getCanonicalResult(canonicalResult) {\n var item = window.store.find(item => item.id === canonicalResult);\n console.log(\"canonicalResult\", canonicalResult);\n console.log(\"canonicalItem\", item);\n var processedCanonicalResult = processSearchResultItem(item, summaries);\n return processedCanonicalResult;\n }\n const querySnippet = document.createElement('div');\n querySnippet.id = 'query-snippet';\n querySnippet.classList.add('card', 'col-8', 'm-2', 'p-0', 'border', 'mx-auto');\n \n const querySnippetBody = document.createElement('div');\n querySnippetBody.classList.add('card-body');\n \n if (typeof canonicalResult !== 'undefined') {\n querySnippetBody.classList.add('canonical-result-div');\n querySnippetBody.appendChild(getCanonicalResult(canonicalResult));\n querySnippetContent = \"\" + querySnippetContent\n }\n \n const querySnippetCardText = document.createElement('p');\n querySnippetCardText.classList.add('card-text', 'm-0');\n querySnippetCardText.innerHTML = querySnippetContent;\n \n \n\n querySnippetBody.appendChild(querySnippetCardText);\n querySnippet.appendChild(querySnippetBody);\n\n // Assuming searchResultsSERP is the element where you want to prepend the querySnippet\n searchResultsSERP.prepend(querySnippet);\n }\n \n let numPages = Math.ceil(totalItems / pageSize);\n\n // If pageNum is greater than 1, show the \"Prev\" link, else show an empty string; if pageNum is less than numPages, show the \"Next\" link, else show an empty string. The links are displayed with dashes between the previous and next links, if they both exist, and a pipe between the previous/next links and the \"All results\" link (if either of prev/next exist).\nlet prevLink = (pageNum > 1 && !showAll) ? `Previous` : '';\nlet nextLink = (pageNum Next` : '';\nlet showAllLink = (totalItems > pageSize && !showAll) ? `All ${totalItems} results.` : '';\n \n if (prevLink && nextLink) {\n prevLink += ' - ';\n }\n if ((prevLink || nextLink) && showAllLink) {\n showAllLink = ' | ' + showAllLink;\n }\n let pagination = `\n \n \n ${prevLink}\n ${nextLink}\n ${showAllLink}\n \n `;\n // Add after results\n searchResultsSERP.insertAdjacentHTML('beforeend', pagination);\n var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'));\n var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n return new bootstrap.Tooltip(tooltipTriggerEl);\n });\n\nreturn;\n};", "snippet": "\n", "url": "/js/search/serp.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-serpapi", "type": "pages" , "date": "", "title": "SerpApi tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"SerpApi\" tag.\n \n\n\n{% assign tag_name = \"SerpApi\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"SerpApi\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"SerpApi\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/serpapi/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-shake-things-up", "type": "pages" , "date": "", "title": "shake-things-up tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"shake-things-up\" tag.\n \n\n\n{% assign tag_name = \"shake-things-up\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"shake-things-up\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"shake-things-up\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/shake-things-up/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-sharing-interface", "type": "pages" , "date": "", "title": "sharing interface tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"sharing interface\" tag.\n \n\n\n{% assign tag_name = \"sharing interface\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"sharing interface\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"sharing interface\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/sharing-interface/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-similarity-search", "type": "pages" , "date": "", "title": "similarity-search tag" , "tags": "", "content": "{% assign tag_name = \"similarity-search\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"similarity-search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"similarity-search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/similarity-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-similars-js", "type": "pages" , "date": "", "title": "" , "tags": "", "content": "document.addEventListener(\"DOMContentLoaded\", function () {\n var dropdownBtn = document.getElementById('drop-down-menu-list-button');\n if (dropdownBtn) {\n } else {\n return;\n }\n var dropdownContent = document.getElementById('dropdown-content');\n var snippet = document.getElementById('snippet');\n var backLinks = document.getElementById('backlinks');\n var similarPages = document.getElementById('similar-pages');\n\n dropdownBtn.addEventListener('click', function () {\n // Check the current state of aria-expanded\n var isExpanded = dropdownContent.getAttribute('aria-expanded') === 'true';\n\n // Toggle the aria-expanded attribute\n dropdownContent.setAttribute('aria-expanded', isExpanded ? 'false' : 'true');\n\n // Toggle the 'show' class\n dropdownContent.classList.toggle('show');\n \n // Retrieve the snippets data\n var snippets = {{ site.data.generated-snippets | jsonify }};\n\n // Set the snippet text based on the item ID\n currentUrl = new URL(window.location.href).pathname;\n slug = slugify(currentUrl);\nvar snippetText = snippets[slug] || snippets[slug+\"-html\"] || \"No snippet available\";\n snippet.innerHTML = `\n \n \n \n \n \n ` + snippetText;\n });\n // Retrieve the similar pages from site.data.cosine_similars\n var similarPagesData = {{ site.data.cosine_similars | jsonify }};\n var currentUrl = new URL(window.location.href).pathname; // Extract pathname without the domain\n var slug = slugify(currentUrl); // Slugify the pathname\n var similarPagesList = similarPagesData[slug] || similarPagesData[slug+\"-html\"] || [\"No similar pages found.\"];\n similarPagesList = similarPagesList.slice(0, 5)\n\n // Replace " with quotation mark\n similarPagesList = similarPagesList.map(function (element) {\n if (element.includes('&quot;')) {\n return element.replace(/&quot;/g, '\"');\n }\n return element;\n });\n\n // Populate the similar pages links\nsimilarPages.innerHTML = 'Similar pages:';\n similarPagesList.forEach(function (pageHTML) {\n var li = document.createElement('li');\n li.innerHTML = pageHTML;\n similarPages.appendChild(li);\n });\n var span = document.createElement('span');\n span.innerHTML = `See also: [similar:]`;\n similarPages.appendChild(span);\n\n\n// Set the backlinks based on the page.path\nvar backlinksData = {{ site.data.backlinks | jsonify }};\nvar currentUrl = new URL(window.location.href).pathname; // Extract pathname without the domain\nvar backlinksList = backlinksData[slugify(currentUrl)] || [{ source_title: \"No backlinks found.\", source_url: \"#\" }];\n// backlinksList = backlinksList.slice(0, 5)\nbackLinks.innerHTML = 'Backlinks:';\n\n// Populate the backlinks links\nbacklinksList.forEach(function (pageData) {\n var li = document.createElement('li');\n var a = document.createElement('a');\n\n // Decode HTML entities in the title\n var title = new DOMParser().parseFromString(pageData.source_title, 'text/html').body.textContent;\n\n a.textContent = title;\n a.href = pageData.source_url;\n\n li.appendChild(a);\n backLinks.appendChild(li);\n});\nvar span = document.createElement('span');\nspan.innerHTML = `See also: [backlinks:]`;\nbackLinks.appendChild(span);\n\n});\n\n", "snippet": "\n", "url": "/js/similars.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "site", "type": "pages" , "date": "2023-06-10", "title": "Site" , "tags": "", "content": "\n\n\nThis page is about the website of Daniel S. Griffin. For information about Daniel, see [About](/about/). To browse this site, see Browse.\n\n\n\nNotice: This site is currently under construction.\nThings may break and change. Here are highlights from the [Roadmap](/roadmap/):\n\naccessibility improvements\nmultiple user-configurable search backends\n\n\n\n\n\nThis website is made in [Jekyll](https://jekyllrb.com/).\n\n## Languages\n\nThe development of this website includes the use of various programming languages, including Ruby, Python, HTML, CSS, and JavaScript.\n\n## Version control\n\nVersion control on GitHub with git.\n\n## Hosting\n\nIt is served by Amazon, using AWS Amplify.\n\n- pre-processing and online scripts in /scripts and /js\n\n## Analytics\n\nPlausible.io\n\n## Tools\n\nFor this last round of changes I've explored several tools, including OpenAI's ChatGPT and APIs, Google's Bard, SGE, and Code Tips, Perplexity AI, You.com's YouChat, Phind, GitHub Copilot in VS Code, and Tabnine in Sublime Text. I also explored using search on TikTok to quickly refresh my understanding of options with CSS.\n\n\n## Changes\n\nChanges to the website are logged in [/changes](/changes/)\n\n\n## Glossary\n\nSee [Glossary](/glossary/).", "snippet": "\n", "url": "/site/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-situated-knowledge", "type": "pages" , "date": "", "title": "situated knowledge tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"situated knowledge\" tag.\n \n\n\n{% assign tag_name = \"situated knowledge\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"situated knowledge\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"situated knowledge\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/situated-knowledge/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-snippets", "type": "pages" , "date": "", "title": "snippets tag" , "tags": "", "content": "{% assign tag_name = \"snippets\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"snippets\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"snippets\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/snippets/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-social-construction", "type": "pages" , "date": "", "title": "social-construction tag" , "tags": "", "content": "{% assign tag_name = \"social-construction\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"social-construction\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"social-construction\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/social-construction/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-social-search-request", "type": "pages" , "date": "", "title": "social-search-request tag" , "tags": "", "content": "{% assign tag_name = \"social-search-request\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"social-search-request\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"social-search-request\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/social-search-request/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-social-search", "type": "pages" , "date": "", "title": "social search tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"social search\" tag.\n \n\n\n{% assign tag_name = \"social search\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"social search\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"social search\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/social-search/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-sociotechnical-audits", "type": "pages" , "date": "", "title": "sociotechnical-audits tag" , "tags": "", "content": "{% assign tag_name = \"sociotechnical-audits\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"sociotechnical-audits\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"sociotechnical-audits\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/sociotechnical-audits/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-sourcegraph", "type": "pages" , "date": "", "title": "Sourcegraph tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Sourcegraph\" tag.\n \n\n\n{% assign tag_name = \"Sourcegraph\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Sourcegraph\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Sourcegraph\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/sourcegraph/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-spaces-for-evaluation", "type": "pages" , "date": "", "title": "spaces-for-evaluation tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"spaces-for-evaluation\" tag.\n \n\n\n{% assign tag_name = \"spaces-for-evaluation\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"spaces-for-evaluation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"spaces-for-evaluation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/spaces-for-evaluation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-specialized-search-providers", "type": "pages" , "date": "", "title": "specialized-search-providers tag" , "tags": "", "content": "{% assign tag_name = \"specialized-search-providers\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"specialized-search-providers\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"specialized-search-providers\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/specialized-search-providers/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-speculative-design", "type": "pages" , "date": "", "title": "speculative-design tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"speculative-design\" tag.\n \n\n\n{% assign tag_name = \"speculative-design\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"speculative-design\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"speculative-design\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/speculative-design/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-sqrg", "type": "pages" , "date": "", "title": "SQRG tag" , "tags": "", "content": "{% assign tag_name = \"SQRG\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"SQRG\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"SQRG\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/sqrg/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-stack-overflow", "type": "pages" , "date": "", "title": "Stack Overflow tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Stack Overflow\" tag.\n \n\n\n{% assign tag_name = \"Stack Overflow\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Stack Overflow\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Stack Overflow\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/stack-overflow/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-standing-queries", "type": "pages" , "date": "", "title": "standing-queries tag" , "tags": "", "content": "{% assign tag_name = \"standing-queries\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"standing-queries\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"standing-queries\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/standing-queries/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-structuration-theory", "type": "pages" , "date": "", "title": "structuration-theory tag" , "tags": "", "content": "{% assign tag_name = \"structuration-theory\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"structuration-theory\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"structuration-theory\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/structuration-theory/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-suggestions-js", "type": "pages" , "date": "", "title": "search/suggestions.js" , "tags": "", "content": "// These are defined in _layouts/search-centric.html\n// var suggestionsList = document.getElementById(\"suggestions-list\");\n// var searchBarLinks = document.getElementById(\"search-bar-links\");\n// var searchBox = document.getElementById(\"search-box\");\n// var handCuratedSuggestions = {{ site.data.hand_curated_queries | jsonify }};\n\n// Create var for search-bar-plus-suggestions-top and search-bar-plus-suggestions-bottom\nvar searchPlusSuggestionsTop = document.getElementById('search-bar-plus-suggestions-top');\nvar searchPlusSuggestionsBottom = document.getElementById('search-bar-plus-suggestions-bottom');\n\n// if searchBox is in focus or not empty, then show searchPlusSuggestionsTop\nsearchBox.addEventListener(\"focus\", function () {\n if (searchBox.value || searchBox === document.activeElement) {\n searchPlusSuggestionsTop.classList.add(\"border\");\n }\n});\n\n\nfunction insertImage(title, queryImage) {\n // Prepend site url to the query image\n let imageUrl = \"{{ site.url }}\" + queryImage;\n\n var sqImage = document.createElement('div');\n sqImage.className = 'sr-image';\n sqImage.classList = 'col-2 m-0 p-1 sr-image text-right float-right';\n var imageDiv;\n if (imageUrl.includes('paper_image')) {\n imageDiv = document.createElement('div');\n imageDiv.className = 'paper_image_box';\n imageDiv.style = \"float: right; margin-left: .2em\";\n var paperImage = document.createElement('img');\n paperImage.className = 'paper_image';\n paperImage.src = imageUrl;\n paperImage.alt = \"Image of \"+ title + \" paper\";\n imageDiv.appendChild(paperImage);\n sqImage.appendChild(imageDiv);\n } else {\n imageDiv = document.createElement('div');\n imageDiv.className = 'circleborder';\n imageDiv.style = \"float: right; margin-left: .2em\";\n var circleImage = document.createElement('img');\n circleImage.className = 'face';\n circleImage.src = imageUrl;\n circleImage.alt = \"Image of \" + title;\n imageDiv.appendChild(circleImage);\n sqImage.appendChild(imageDiv);\n }\n return sqImage;\n}\n\n\nfunction processSuggestions(suggestions, querySnippets, initializeTooltips, queryImages) {\n if (!Array.isArray(suggestions)) {\n console.error('processSuggestions called with non-array argument:', suggestions);\n return; // Or handle this case appropriately\n }\n suggestions = suggestions.slice(0, 9);\n suggestionsList.innerHTML = \"\";\n suggestionsList.className = \"hand-curated-suggestions suggestions-list list-group px-0 mx-0\"\n // var querySnippets = {{ site.data.query_snippets | jsonify }};\n\n suggestions.forEach(function (suggestion) {\n // Create element\n var li = document.createElement(\"li\");\n li.className = \"list-group-item list-unstyled p-0 border-white\";\n\n var divCard = document.createElement(\"div\");\n divCard.className = \"card border-0 sr-item-container\";\n li.appendChild(divCard);\n\n var divCardBody = document.createElement(\"div\");\n divCardBody.className = \"card-body py-0\";\n divCard.appendChild(divCardBody);\n\n var h6 = document.createElement(\"h6\");\n h6.className = \"card-title mb-0\";\n divCardBody.appendChild(h6);\n\n var spanOpen = document.createElement(\"span\");\n spanOpen.className = \"search-query-bracket\";\n spanOpen.textContent = \"[\";\n\n var spanClose = document.createElement(\"span\");\n spanClose.className = \"search-query-bracket\";\n spanClose.textContent = \"]\";\n\n var divSnippet = document.createElement(\"div\"); \n divSnippet.className = \"p-0 m-0 search-drop-down-snippet\";\n divCardBody.appendChild(divSnippet);\n\n if (suggestion.url) {\n var divUrl = document.createElement(\"div\");\n divUrl.className = \"p-0 m-0 ml-2 text-muted\";\n spanUrl = document.createElement(\"span\");\n spanUrl.className = \"small p-0 m-0\";\n spanUrl.textContent = suggestion.url;\n divUrl.appendChild(spanUrl);\n divCardBody.appendChild(divUrl);\n }\n\n var p = document.createElement(\"p\");\n p.className = \"card-text\";\n // Append child elements to their respective parents\n if (!suggestion.url) {\n if (querySnippets[suggestion] !== undefined) {\n p.innerHTML = querySnippets[suggestion];\n }\n h6.appendChild(spanOpen);\n h6.appendChild(createAnchorWithTitle(suggestion));\n h6.appendChild(spanClose);\n divSnippet.appendChild(p);\n if (queryImages[suggestion] !== undefined) {\n divCard.appendChild(insertImage(suggestion, queryImages[suggestion])); \n }\n } else {\n function decodeHtmlEntities(str) {\n let tempDiv = document.createElement('div');\n tempDiv.innerHTML = str;\n return tempDiv.textContent;\n }\n // if suggestion.url is external, add external link icon\n if (suggestion.url.startsWith(\"http\")) {\n // create span for externalLinkIcon\n var externalLinkIcon = document.createElement(\"span\");\n externalLinkIcon.className = \"small p-0 my-0 ml-2 mr-0\";\n externalLinkIcon.innerHTML = `\n \n `\n h6.appendChild(externalLinkIcon); \n var title = createAnchorWithTitle(suggestion)\n title.className = \"pl-1\"\n h6.appendChild(title);\n } else {\n h6.appendChild(createAnchorWithTitle(suggestion));\n }\n divSnippet.appendChild(p);\n if (suggestion.tags.length > 2) {\n divCardBody.appendChild(createDivTags(decodeHtmlEntities(suggestion.tags)));\n }\n }\n\n if (handCuratedSuggestions.includes(suggestion)) {\n var aQueryLabel = document.createElement(\"a\");\n aQueryLabel.className = \"small p-0 my-0 ml-1 mr-0\";\n aQueryLabel.setAttribute(\"data-bs-toggle\", \"tooltip\");\n aQueryLabel.setAttribute(\"data-bs-placement\", \"top\");\n aQueryLabel.href = siteUrl + \"/search/about#hand-curated-queries\";\n aQueryLabel.setAttribute(\"title\", \"hand-curated query\");\n aQueryLabel.innerHTML = ``;\n h6.appendChild(aQueryLabel);\n if (suggestion.startsWith(\"!\")) {\n var aQueryLabel2 = document.createElement(\"a\");\n aQueryLabel2.className = \"small p-0 my-0 ml-1 mr-0\";\n aQueryLabel2.setAttribute(\"data-bs-toggle\", \"tooltip\");\n aQueryLabel2.setAttribute(\"data-bs-placement\", \"top\");\n // Modify the attributes of the cloned element\n aQueryLabel2.href = siteUrl + \"/search/about#!bang-commands\";\n aQueryLabel2.setAttribute(\"title\", \"!bang query tooltip\");\n aQueryLabel2.innerHTML = ``;\n h6.appendChild(aQueryLabel2);\n }\n } else {\n var aQueryLabel = document.createElement(\"a\");\n aQueryLabel.className = \"small p-0 my-0 ml-0 mr-0\";\n aQueryLabel.setAttribute(\"data-bs-toggle\", \"tooltip\");\n aQueryLabel.setAttribute(\"data-bs-placement\", \"top\");\n aQueryLabel.setAttribute(\"title\", \"dynamic result\");\n aQueryLabel.innerHTML = ``;\n aQueryLabel.href = siteUrl + \"/search/about#dynamic-results\";\n h6.appendChild(aQueryLabel);\n }\n \n suggestionsList.appendChild(li);\n initializeTooltips();\n });\n }\n\ndocument.addEventListener('DOMContentLoaded', function () {\n // Tooltip initialization\n function initializeTooltips() {\n var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'));\n var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n return new bootstrap.Tooltip(tooltipTriggerEl);\n });\n }\n initializeTooltips();\n\n\n // Retrieve hand-curated and dynamic search suggestions from the site data\n var handCuratedSuggestions = {{ site.data.hand_curated_queries | jsonify }};\n var dynamicSuggestions = handCuratedSuggestions.concat({{ site.data.dynamic_queries | jsonify }});\n var queryImages = {{ site.data.query_images | jsonify }};\n \n // Use a Promise to handle the async fetch operation\n var getQuerySnippets = fetch(\"{{ site.url }}/assets/query_snippets.json\")\n .then(response => {\n if (!response.ok) {\n throw new Error(\"HTTP error \" + response.status);\n }\n return response.json();\n })\n .catch(function () {\n console.log(\"Failed to fetch query snippets\");\n });\n\n // Now, whenever you need to use querySnippets, wait for the Promise to resolve:\n getQuerySnippets.then(querySnippets => {\n window.showSuggestions = function (suggestions) {\n // console.log('suggestions:', suggestions);\n // console.log(Array.isArray(suggestions)); // Should be true\n\n processSuggestions(suggestions, querySnippets, initializeTooltips, queryImages);\n if (suggestions.length > 0) {\n searchPlusSuggestionsBottom.classList.remove(\"d-none\");\n navigate_suggestions_hint.classList.remove(\"d-none\");\n close_suggestions_hint.classList.remove(\"d-none\");\n } else { \n searchPlusSuggestionsBottom.classList.add(\"d-none\");\n navigate_suggestions_hint.classList.add(\"d-none\");\n close_suggestions_hint.classList.add(\"d-none\");\n }\n };\n // Focus event is optional, depending on whether the flag is set or not\n if (window.showSuggestionsOnFocus !== false) {\n searchBox.addEventListener(\"focus\", async function () {\n // If search box is empty then show hand-curated suggestions\n // Only show hand-curated suggestions if the search box is empty AND there are no pre-rendered suggestions\n\n if (!searchBox.value && !suggestionsList.innerHTML == \"\") {\n\n showSuggestions(handCuratedSuggestions.slice(0, 9));\n } else {\n try {\n showSuggestions(lastDynamicSuggestions);\n } catch (error) {\n if (error instanceof ReferenceError) {\n if (searchBox.value) {\n combinedSuggestions = await generateNewCombinedSuggestions();\n // Update the lastDynamicSuggestions array and show the new suggestions\n lastDynamicSuggestions = combinedSuggestions;\n showSuggestions(combinedSuggestions);\n }\n else {\n showSuggestions(handCuratedSuggestions.slice(0, 9))\n }\n } else {\n throw error; // Re-throw the error if it's not a ReferenceError\n }\n }\n }\n });\n }\n });\n\n \n}); \n\ndocument.addEventListener('visibilitychange', function () {\n if (document.visibilityState === 'visible') {\n var savedSearchTerm = sessionStorage.getItem('searchTerm');\n if (savedSearchTerm) {\n var searchBox = document.getElementById('search-box');\n searchBox.value = savedSearchTerm; // restore the saved search term\n }\n }\n});", "snippet": "\n", "url": "/js/search/suggestions.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-surprise", "type": "pages" , "date": "", "title": "surprise tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"surprise\" tag.\n \n\n\n{% assign tag_name = \"surprise\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"surprise\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"surprise\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/surprise/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-surprising-result", "type": "pages" , "date": "", "title": "surprising-result tag" , "tags": "", "content": "{% assign tag_name = \"surprising-result\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"surprising-result\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"surprising-result\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/surprising-result/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-survey-questions", "type": "pages" , "date": "", "title": "survey-questions tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"survey-questions\" tag.\n \n\n\n{% assign tag_name = \"survey-questions\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"survey-questions\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"survey-questions\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/survey-questions/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-systematic-literature-reviews", "type": "pages" , "date": "", "title": "systematic-literature-reviews tag" , "tags": "", "content": "{% assign tag_name = \"systematic-literature-reviews\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"systematic-literature-reviews\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"systematic-literature-reviews\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/systematic-literature-reviews/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-tavily", "type": "pages" , "date": "", "title": "Tavily tag" , "tags": "", "content": "{% assign tag_name = \"Tavily\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Tavily\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Tavily\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/tavily/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-technology-delegation", "type": "pages" , "date": "", "title": "technology-delegation tag" , "tags": "", "content": "{% assign tag_name = \"technology-delegation\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"technology-delegation\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"technology-delegation\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/technology-delegation/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-temporal-searching", "type": "pages" , "date": "", "title": "temporal searching tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"temporal searching\" tag.\n \n\n\n{% assign tag_name = \"temporal searching\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"temporal searching\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"temporal searching\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/temporal-searching/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ten-blue-links", "type": "pages" , "date": "", "title": "ten blue links tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"ten blue links\" tag.\n \n\n\n{% assign tag_name = \"ten blue links\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"ten blue links\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"ten blue links\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ten-blue-links/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-text-interface", "type": "pages" , "date": "", "title": "text-interface tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"text-interface\" tag.\n \n\n\n{% assign tag_name = \"text-interface\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"text-interface\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"text-interface\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/text-interface/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-the-scholarly-economy", "type": "pages" , "date": "", "title": "the scholarly economy tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"the scholarly economy\" tag.\n \n\n\n{% assign tag_name = \"the scholarly economy\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"the scholarly economy\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"the scholarly economy\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/the-scholarly-economy/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-tiktok", "type": "pages" , "date": "", "title": "TikTok tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"TikTok\" tag.\n \n\n\n{% assign tag_name = \"TikTok\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"TikTok\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"TikTok\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/tiktok/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-til", "type": "pages" , "date": "", "title": "TIL tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"TIL\" tag.\n \n\n\n{% assign tag_name = \"TIL\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"TIL\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"TIL\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/til/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-to-look-at", "type": "pages" , "date": "", "title": "to-look-at tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"to-look-at\" tag.\n \n\n\n{% assign tag_name = \"to-look-at\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"to-look-at\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"to-look-at\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/to-look-at/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-tooling", "type": "pages" , "date": "", "title": "tooling tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"tooling\" tag.\n \n\n\n{% assign tag_name = \"tooling\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"tooling\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"tooling\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/tooling/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-treating-information-as-atomic", "type": "pages" , "date": "", "title": "treating information as atomic tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"treating information as atomic\" tag.\n \n\n\n{% assign tag_name = \"treating information as atomic\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"treating information as atomic\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"treating information as atomic\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/treating-information-as-atomic/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-trending-searches", "type": "pages" , "date": "", "title": "trending-searches tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"trending-searches\" tag.\n \n\n\n{% assign tag_name = \"trending-searches\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"trending-searches\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"trending-searches\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/trending-searches/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-trust", "type": "pages" , "date": "", "title": "trust tag" , "tags": "", "content": "{% assign tag_name = \"trust\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"trust\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"trust\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/trust/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-twitter-sol-x-explore", "type": "pages" , "date": "", "title": "Twitter&sol;X-Explore tag" , "tags": "", "content": "{% assign tag_name = \"Twitter/X-Explore\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Twitter/X-Explore\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Twitter/X-Explore\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/twitter&sol-x-explore/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-twitter-x-explore", "type": "pages" , "date": "", "title": "Twitter&sol;X-Explore tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"Twitter/X-Explore\" tag.\n \n\n\n{% assign tag_name = \"Twitter/X-Explore\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"Twitter/X-Explore\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"Twitter/X-Explore\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/twitter-x-explore/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-ucis", "type": "pages" , "date": "", "title": "UCIS tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"UCIS\" tag.\n \n\n\n{% assign tag_name = \"UCIS\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"UCIS\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"UCIS\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/ucis/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-us-v-google-2020", "type": "pages" , "date": "", "title": "US-v-Google-2020 tag" , "tags": "", "content": "{% assign tag_name = \"US-v-Google-2020\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"US-v-Google-2020\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"US-v-Google-2020\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/us-v-google-2020/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-userscripts", "type": "pages" , "date": "", "title": "userscripts tag" , "tags": "", "content": "{% assign tag_name = \"userscripts\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"userscripts\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"userscripts\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/userscripts/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "js-search-utility-js", "type": "pages" , "date": "", "title": "search/utility.js" , "tags": "", "content": "var siteUrl = \"{{ site.url }}\";\n \n// Helper function to create a element for the tags\nfunction createDivTags(tags) {\n const strippedString = tags.replace(/\\[|\\]/g, \"\");\n const itemTagsList = strippedString.split(',');\n\n const divTags = document.createElement('div');\n divTags.className = 'sr-tags';\n divTags.textContent = 'tags: ';\n\n for (let i = 0; i element with the specified class\nfunction createDivWithClass(className) {\n var div = document.createElement(\"div\");\n div.className = className;\n return div;\n}\n\n/**\n * Fully decodes HTML entities in a string.\n * @param {string} html - The string with HTML entities.\n * @returns {string} - The fully decoded string.\n */\nfunction fullyDecodeHtmlEntities(html) {\n var textArea = document.createElement('textarea');\n // Decode entities in a loop until no more encoding is detected\n do {\n textArea.innerHTML = html;\n html = textArea.value;\n } while (textArea.innerHTML !== textArea.value);\n return html;\n}\n\n/**\n * Creates an anchor element with the provided suggestion.\n * @param {Object|string} suggestion - The suggestion object or string to create the anchor for.\n * @returns {HTMLElement} - The created anchor element.\n */\nfunction createAnchorWithTitle(suggestion) {\n // Create a new anchor element\n let a = document.createElement(\"a\");\n a.className = \"autocomplete-title search-query\";\n\n // Set the href attribute based on the suggestion\n if (suggestion.url) {\n a.href = suggestion.url;\n a.classList.add(\"pl-2\"); // Add class for additional styling (if applicable)\n } else {\n a.href = \"/search/?q=\" + encodeURIComponent(suggestion);\n }\n\n // Fully decode HTML entities in the suggestion text\n let suggestionText = suggestion.title || suggestion;\n a.textContent = fullyDecodeHtmlEntities(suggestionText);\n\n // Return the constructed anchor element\n return a;\n}\n\n", "snippet": "\n", "url": "/js/search/utility.js", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-void-filling", "type": "pages" , "date": "", "title": "void filling tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"void filling\" tag.\n \n\n\n{% assign tag_name = \"void filling\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"void filling\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"void filling\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/void-filling/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-warnings-in-search-results", "type": "pages" , "date": "", "title": "warnings-in-search-results tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"warnings-in-search-results\" tag.\n \n\n\n{% assign tag_name = \"warnings-in-search-results\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"warnings-in-search-results\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"warnings-in-search-results\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/warnings-in-search-results/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-wayfinding", "type": "pages" , "date": "", "title": "wayfinding tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"wayfinding\" tag.\n \n\n\n{% assign tag_name = \"wayfinding\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"wayfinding\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"wayfinding\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/wayfinding/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-web-search-api", "type": "pages" , "date": "", "title": "web-search-API tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"web-search-API\" tag.\n \n\n\n{% assign tag_name = \"web-search-API\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"web-search-API\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"web-search-API\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/web-search-api/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-website-analytics", "type": "pages" , "date": "", "title": "website analytics tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"website analytics\" tag.\n \n\n\n{% assign tag_name = \"website analytics\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"website analytics\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"website analytics\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/website-analytics/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-whatisthisthing", "type": "pages" , "date": "", "title": "whatisthisthing tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"whatisthisthing\" tag.\n \n\n\n{% assign tag_name = \"whatisthisthing\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"whatisthisthing\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"whatisthisthing\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/whatisthisthing/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-wolframalpha", "type": "pages" , "date": "", "title": "WolframAlpha tag" , "tags": "", "content": "{% assign tag_name = \"WolframAlpha\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"WolframAlpha\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"WolframAlpha\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/wolframalpha/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-x-grok", "type": "pages" , "date": "", "title": "X-Grok tag" , "tags": "", "content": "{% assign tag_name = \"X-Grok\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"X-Grok\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"X-Grok\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/x-grok/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-yacy", "type": "pages" , "date": "", "title": "YaCy tag" , "tags": "", "content": "{% assign tag_name = \"YaCy\" %}\n \n\n\n{% assign tag_snippet = site.data.tags[tag_name].snippet %}\n{% if tag_snippet != null and tag_snippet != '' %}\n{{ tag_snippet }}\n{% else %}\nHere are all the posts and pages with the \"{{ tag_name }}\" tag.\n{% endif %}\n\n\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"YaCy\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"YaCy\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/yacy/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-you-com", "type": "pages" , "date": "", "title": "You.com tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"You.com\" tag.\n \n\n\n{% assign tag_name = \"You.com\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"You.com\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"You.com\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/you-com/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tags-you-com", "type": "pages" , "date": "", "title": "You.com tag" , "tags": "", "content": "\nHere are all the posts and pages with the \"You.com\" tag.\n \n\n\n{% assign tag_name = \"You.com\" %}\n\n{% assign tag_posts = site.posts | where_exp:\"post\", \"post.tags contains tag_name\" %}\n{% assign tag_pages = site.pages | where_exp:\"page\", \"page.tags contains tag_name\" %}\n{% if tag_posts.size > 0 %}\nPosts with the \"You.com\" tag:\n{% for post in tag_posts %}\n* [{{ post.title }}]({{ post.url }})\n{% endfor %}\n{% endif %}\n{% if tag_pages.size > 0 %}\nPages with the \"You.com\" tag:\n{% for page in tag_pages %}\n* [{{ page.title }}]({{ page.url }})\n{% endfor %}\n{% endif %}\n", "snippet": "\n", "url": "/tags/you.com/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-searching-entangled-and-enfolded-html", "type": "pages" , "date": "", "title": "" , "tags": "", "content": "", "snippet": "\n", "url": "/tweets/searching-entangled-and-enfolded.html", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "tweets-postcolonial-localization-in-search-html", "type": "pages" , "date": "", "title": "" , "tags": "", "content": "", "snippet": "\n", "url": "/tweets/postcolonial-localization-in-search.html", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "redirects-json", "type": "pages" , "date": "", "title": "redirects.json" , "tags": "", "content": "{\"/tweets/searching-entangled-and-enfolded.html\":\"https://danielsgriffin.com/tweets/2019/05/28/searching-entangled-and-enfolded/\",\"/tweets/postcolonial-localization-in-search.html\":\"https://danielsgriffin.com/tweets/2019/08/25/postcolonial-localization-in-search/\",\"/tweets/ad-z'njinz'tum/\":\"https://danielsgriffin.com/tweets/2018/04/04/ad-z'njinz'tum\",\"/cv/\":\"https://danielsgriffin.com/assets/Daniel_Griffin_CV_2023-11-13.pdf\",\"/tweets/end-of-line-hyphenation/\":\"https://danielsgriffin.com/tweets/2022/10/19/end-of-line-hyphenation.html\",\"/tags/repairing-searching/\":\"https://danielsgriffin.com/rs\"}", "snippet": "\n", "url": "/redirects.json", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "feed-xml", "type": "pages" , "date": "", "title": "feed.xml" , "tags": "", "content": "{% if page.xsl %}{% endif %}Jekyll{{ site.time | date_to_xmlschema }}{{ page.url | absolute_url | xml_escape }}{% assign title = site.title | default: site.name %}{% if page.collection != \"posts\" %}{% assign collection = page.collection | capitalize %}{% assign title = title | append: \" | \" | append: collection %}{% endif %}{% if page.category %}{% assign category = page.category | capitalize %}{% assign title = title | append: \" | \" | append: category %}{% endif %}{% if title %}{{ title | smartify | xml_escape }}{% endif %}{% if site.description %}{{ site.description | xml_escape }}{% endif %}{% if site.author %}{{ site.author.name | default: site.author | xml_escape }}{% if site.author.email %}{{ site.author.email | xml_escape }}{% endif %}{% if site.author.uri %}{{ site.author.uri | xml_escape }}{% endif %}{% endif %}{% if page.tags %}{% assign posts = site.tags[page.tags] %}{% else %}{% assign posts = site[page.collection] %}{% endif %}{% if page.category %}{% assign posts = posts | where: \"categories\", page.category %}{% endif %}{% unless site.show_drafts %}{% assign posts = posts | where_exp: \"post\", \"post.draft != true\" %}{% endunless %}{% assign posts = posts | sort: \"date\" | reverse %}{% assign posts_limit = site.feed.posts_limit | default: 10 %}{% for post in posts limit: posts_limit %}{% assign post_title = post.title | smartify | strip_html | normalize_whitespace | xml_escape %}{{ post_title }}{{ post.date | date_to_xmlschema }}{{ post.last_modified_at | default: post.date | date_to_xmlschema }}{{ post.id | absolute_url | xml_escape }}{% assign excerpt_only = post.feed.excerpt_only | default: site.feed.excerpt_only %}{% unless excerpt_only %}{% endunless %}{% assign post_author = post.author | default: post.authors[0] | default: site.author %}{% assign post_author = site.data.authors[post_author] | default: post_author %}{% assign post_author_email = post_author.email | default: nil %}{% assign post_author_uri = post_author.uri | default: nil %}{% assign post_author_name = post_author.name | default: post_author %}{{ post_author_name | default: \"\" | xml_escape }}{% if post_author_email %}{{ post_author_email | xml_escape }}{% endif %}{% if post_author_uri %}{{ post_author_uri | xml_escape }}{% endif %}{% if post.category %}{% elsif post.categories %}{% for category in post.categories %}{% endfor %}{% endif %}{% for tag in post.tags %}{% endfor %}{% assign post_summary = post.description | default: post.excerpt %}{% if post_summary and post_summary != empty %}{% endif %}{% assign post_image = post.image.path | default: post.image %}{% if post_image %}{% unless post_image contains \"://\" %}{% assign post_image = post_image | absolute_url %}{% endunless %}{% endif %}{% endfor %}", "snippet": "\n", "url": "/feed.xml", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "sitemap-xml", "type": "pages" , "date": "", "title": "" , "tags": "", "content": "\n{% if page.xsl %}\n{% endif %}\n{% assign collections = site.collections | where_exp:'collection','collection.output != false' %}{% for collection in collections %}{% assign docs = collection.docs | where_exp:'doc','doc.sitemap != false' %}{% for doc in docs %}\n{{ doc.url | replace:'/index.html','/' | absolute_url | xml_escape }}\n{% if doc.last_modified_at or doc.date %}{{ doc.last_modified_at | default: doc.date | date_to_xmlschema }}\n{% endif %}\n{% endfor %}{% endfor %}{% assign pages = site.html_pages | where_exp:'doc','doc.sitemap != false' | where_exp:'doc','doc.url != \"/404.html\"' %}{% for page in pages %}\n{{ page.url | replace:'/index.html','/' | absolute_url | xml_escape }}\n{% if page.last_modified_at %}{{ page.last_modified_at | date_to_xmlschema }}\n{% endif %}\n{% endfor %}{% assign static_files = page.static_files | where_exp:'page','page.sitemap != false' | where_exp:'page','page.name != \"404.html\"' %}{% for file in static_files %}\n{{ file.path | replace:'/index.html','/' | absolute_url | xml_escape }}\n{{ file.modified_time | date_to_xmlschema }}\n\n{% endfor %}\n", "snippet": "\n", "url": "/sitemap.xml", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "robots-txt", "type": "pages" , "date": "", "title": "" , "tags": "", "content": "Sitemap: {{ \"sitemap.xml\" | absolute_url }}\n", "snippet": "\n", "url": "/robots.txt", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } ]; var externals = [ { "id": "https-www-angelechristin-com-page-id-611", "type": "external", "date": "2023-08-02", "title": "Angèle Christin's Critical Data Studies Resources", "tags": "Critical Data Studies", "content": "Critical Data Studies Resources from Angèle Christin: I often receive messages from students who are interested in the fuzzy and interdisciplinary world of Critical Data Studies (aka Critical Algorithms Studies, Digital Media Studies, Critical Platform Studies, Digital STS, and many related terms). This is a non-exhaustive list of public-facing resources that I often share. Many of these places have newsletters and Twitter accounts, so I encourage students to sign up and follow them (sending them to the Twitterverse, which may not be the best piece of advice in the long run :-)).\\nCenters and Institutes\\nAda Lovelace Institute\\nAlgorithmenetik (Gütersloh) \\nAlgorithmic Fairness and Opacity Group (Berkeley)\\nAlgorithmic Justice League\\nAlgorithmWatch\\nAI Now Institute \\nBlack in AI\\nBristol Digital Futures Institute (Bristol)\\nCenter for Applied Data Ethics (USF) \\nCenter for Ethics, Society, and Computing (Michigan)\\nCenter on Digital Culture and Society (Penn Annenberg)\\nCentre for Digital Cultures (Leuphana)\\nCRISP (Center for Research Into Information, Surveillance, and Privacy)\\nData Justice Lab (Cardiff) \\nData & Society Research Institute\\nData For Black Lives\\nDigilabour (UNISINOS) \\nDigital Civil Society Lab (Stanford) \\nDigital Democracies Institute (SFU)\\nDipLab (Digital Labor Platform)\\nEdinburgh Futures Institute (Edinburgh) \\nHIIG (Humboldt Institute for Internet and Society)\\nIda B. Wells Just Data Lab (Princeton)\\nInstitute for Public Knowledge: “Co-Opting AI” (NYU) \\nLavits (Rede Latino-Americana de Estudos Sobre Vigilância, Tecnologia e Sociedade)\\nMASTS (Media as SocioTechnical Systems) (USC Annenberg)\\nMédialab (Sciences Po)\\nLSE Digital Ethnography Collective (LSE) \\nMarkkula Center for Applied Ethics (Santa Clara) \\nOur Data Bodies\\nOxford Internet Institute (Oxford)\\nSocial Media Collective (Microsoft Research New England) \\nSurveillance Studies Centre (Queen’s University)\\nSurveillance Studies Network \\nTech Worker Coalition\\nThe Engine Room (Berlin)\\nUCLA Center for Critical Internet Inquiry (UCLA)\\nReading Lists, Syllabi, Lexicons \\nCritical Algorithms Studies Reading List (h/t Tarleton Gillespie and Nick Seaver)\\nCritical Data Science Zotero (h/t Katja Mayer and Momin M. Malik)\\nDigital Ethnography Reading List (h/t Zoë Glatt) \\nCritical Race and Digital Studies Syllabus (h/t Lori Kido Lopez & Jackie Land) \\nA New AI Lexicon (AI Now)\\nTech Ethics Curricula (h/t Casey Fiesler)\\nMy Politics of Algorithms Syllabus\\nSlack channel (with CFPs) \\nSociologists of Digital Things (you can sign up on the website) (h/t Matt Rafalow)\\nConferences and sections\\nAssociation of Internet Researchers (AoIR) \\nASA, especially CITAMS (Communication, Information Technologies, and Media Sociology)\\n4S \\nICA, especially CAT (Communication and Technology) and Philosophy, Theory, and Critique\\nFAccT\\nCSCW\\nCHI \\nAIES\\nWe Robots\\n(Kind of) Specialized academic journals, magazines, and proceedings\\nBig Data & Society \\nFAccT Proceedings \\nInformation, Communication, & Society\\nNew Media & Society \\nLogic \\nPoints\\nSocial Media & Society\\nSurveillance & Society\\nAnd then a LOT of other options depending on the discipline: in Communication (International Journal of Communication, Journal of Communication, First Monday), Sociology (ASR, AJS, Work & Occupations, Theory & Society, Poetics), Management (Organization Science, ASQ), STS (Science, Technology, & Human Values, Social Studies of Science), Information Science (The Information Society), Policy (Internet Policy Review), Law, ACM proceedings...\\nJournalists covering tech on Twitter \\nAgain, not an exhaustive list, nor an endorsement, just people I follow and whose coverage is relevant: \\nJulia Alexander\\nJulia Angwin \\nJoe Bernstein\\nCory Doctorow \\nSidney Fussell \\nKaren Hao\\nKhari Johnson \\nTaylor Lorenz\\nFarhad Manjoo \\nCade Medz\\nMoise Mendez II\\nShira Ovide\\nKara Swisher \\nBen Tarnoff\\nNitasha Tiku\\nCharlie Warzel\\nShoshana Wodinsky", "snippet": "\n", "url": "https://www.angelechristin.com/?page_id=611", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "https-richmondywong-com", "type": "external", "date": "2023-08-02", "title": "Richmond Y. Wong (webpage)", "tags": "ethics infrastructures", "content": "Richmond Y. Wong Richmond Wong\\nRichmond Wong is an Assistant Professor of Digital Media at Georgia Tech's School of Literature, Media, and Communication. His research seeks to create social, cultural, and organizational environments that can support technologists and designers in ethical decisionmaking.\\nThis includes creating design approaches that propose alternate ways to consider human values, supporting worker and community-led actions, improving organizational ethics review practices, and understanding the role of law and policy. Recent projects include studying the technology workers’ organizational practices related to ethics, and creating design activities to help people talk through issues related to privacy and surveillance.\\nRichmond's work utilizes qualitative and design-based methods, drawing from critically-oriented human computer interaction, science & technology studies, and speculative and critical design. He completed his PhD at the University of California Berkeley School of Information, a postdoc at the UC Berkeley Center for Long-Term Cybersecurity, and has undergraduate degrees in Information Science and Science & Technology Studies from Cornell University.\\nJun 2022 - Preprint available for a new collaborative paper accepted at the ACM Designing Interactive Systems Conference: Broadening Privacy and Surveillance: Eliciting Interconnected Values with a Scenarios Workbook on Smart Home Cameras, co-authored with Jason Caleb Valdez, Ashten Alexander, Ariel Chiang, Olivia Quesada, and James Pierce.\\nFeb 2022 - Preprints available for 2 papers accepted in the Proceedings of the ACM - CSCW Journal! Privacy Legislation as Business Risks: How GDPR and CCPA are Represented in Technology Companies’ Investment Risk Disclosures with Andrew Chong and R. Cooper Aspegren, and Seeing Like a Toolkit: How Toolkits Envision the Work of AI Ethics with Michael Madaio and Nick Merrill.\\nFall 2022 - I am currently recruiting PhD students to join the Georgia Tech Digital Media Program (applications due December 2022 for a start date in Fall 2023) to do research in one or more of these research areas related to Creating Ethics Infrastructures\\nJun 2022 - This fall I will be joining Georgia Tech's School of Literature, Media, and Communication as an Assistant Professor of Digital Media!\\nCHI Title Generator", "snippet": "\n", "url": "https://richmondywong.com/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "https-sites-gatech-edu-ethicsinfrastructures", "type": "external", "date": "2023-08-02", "title": "Creating Ethics Infrastructures Lab (webpage)", "tags": "ethics infrastructures", "content": "Technology design is a social and cultural practice (as well as a technical one). Thus, helping technologists design ethical systems requires more than creating technical ethical design tools; it also requires creating social and cultural infrastructures that can help support technologists to make ethical decisions.\\nOur lab works to imagine and create these new infrastructures which may include: new organizational practices, law and policy, supporting worker and community-led actions, or developing tools that consider the social and organizational contexts where technologies are developed.\\nWe take an interdisciplinary approach to addressing these issues, though we most commonly draw on perspectives from design, science & technology studies (STS), critically-oriented human-computer interaction (HCI), and computer supported cooperative work (CSCW).\\nOur projects generally belong to at least one of three research areas:\\nStudying tech workers’ ethics practices in organizational contexts\\nAddressing values in design beyond the design process (particularly through law and policy)\\nDesign futuring techniques to consider values and ethics\\nThe lab is led by Richmond Wong, Assistant Professor in the Digital Media program at Georgia Tech’s School of Literature, Media, and Communication.\\nFor more information, please contact Professor Wong.\\nSupport\\nSome research projects in the lab have been supported by the National Science Foundation, Georgia Tech Digital Integrative Liberal Arts Center, and UC Berkeley Center for Long-Term Cybersecurity.\\nProjects and Publications\\nOur projects generally belong to one of three research areas:\\nStudying Tech Workers’ Ethics Practices in Organizational Contexts\\nAddressing Values in Design Beyond the Design Process\\nDesign Futuring Approaches to Consider Values and Ethics\\n1. Studying Tech Workers’ Ethics Practices in Organizational Contexts\\nThese projects study how technology professionals–such as user experience (UX) professionals, product managers, or artificial intelligence (AI) practitioners–attend to values and ethical issues as a part of their professional work. Who does what type of work to address ethical issues; whose work is seen as legitimate; and how do practitioners learn what it means to act ethically?\\nRecent Publications\\nSeeing Like a Toolkit: How Toolkits Envision the Work of AI Ethics. (2023). Richmond Y. Wong, Michael Madaio, Nick Merrill. Proceedings of the ACM on Human-Computer Interaction. 7, CSCW1\\nTactics of Soft Resistance in User Experience Professionals’ Values Work. (2021). Richmond Y. Wong. Proceedings of the ACM Human-Computer Interaction, 5 (CSCW2)\\n2. Addressing Values in Design Beyond the Design Process\\nThese projects explore how we can exert pressure or enact change toward ethical goals in ways that go beyond directly making changes in technical design. Other social, cultural, legal, and economic practices may be of use. Much of our focus is on law and policy, but other practices may be of use as well such as: corporate disclosures, standards and risk management frameworks, media campaigns, community organizing, or collective action.\\nRecent Publications\\nPrivacy Legislation as Business Risks: How GDPR and CCPA are Represented in Technology Companies’ Investment Risk Disclosures. (2023). Richmond Y. Wong, Andrew Chong, R. Cooper Aspegren. Proceedings of the ACM on Human-Computer Interaction. 7, CSCW1\\n3. Design Futuring Approaches to Consider Values and Ethics\\nThis project seeks to improve the capacity of design futuring methods to investigate the complexity of ethical issues. Methods such as speculative design or design fiction have the capacity to generate discussion and reflection about ethical issues. How can design futuring let us explore alternate ways to conceptualize and implement values in technology? For instance, how might different configurations of technology and society mean for how we conceptualize values such as privacy, fairness, or free speech?\\nRecent Publications\\nBroadening Privacy and Surveillance: Eliciting Interconnected Values with a Scenarios Workbook on Smart Home Cameras. (2023). Richmond Y. Wong, Jason Caleb Valdez, Ashten Alexander, Ariel Chiang, Olivia Quesada, and James Pierce. In Proceedings of the 2023 ACM Designing Interactive Systems Conference (DIS ’23)\\nRichmond Wong, PhD\\nAssistant Professor and Lab Director || Webpage\\nPooja Casula\\nPhD Student, Digital Media || Webpage\\nphoto of Inha Cha\\nInha Cha\\nPhD Student, Digital Media || Webpage", "snippet": "\n", "url": "https://sites.gatech.edu/ethicsinfrastructures", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } , { "id": "https-annejonas2-github-io", "type": "external", "date": "2023-08-02", "title": "Anne Jonas (webpage)", "tags": "ethnographic methods", "content": "Anne Jonas, PhD\\nPostdoctoral Research Associate\\nMichigan State University Department of Media & Information\\nPronouns: she/her\\nEmail: annejonas@berkeley.edu\\nStudying people, technology, power, & organizations\\n\\nI am a qualitative researcher exploring the interrelation of digital technologies and social life, drawing on Feminist Science and Technology Studies, Critical HCI, Education, Communication, and Information Studies. My dissertation, Blank Slate: Freedom, Connection, and Accountability in U.S. Virtual Schools, supervised by Professor Jenna Burrell, uses ethnographic methods to investigate the experiences of teachers, students, and families in U.S. based online schools and the role of these institutions in a larger school choice landscape and increasingly digitized workforce structured by social inequality. I am currently a Computing Innovation Fellow working with Professor Jean Hardy at Michigan State University.\\nAt the UC Berkeley School of Information, I designed and taught a graduate seminar, \"Ethnographies of the Digital,\" and served as a graduate student instructor for the core masters program course \"Social Issues of Information.\" From August 2018 - August 2020 I was the Co-Director of the Center for Technology, Society & Policy. I have been a student research awardee of the Institute for Research on Labor and Employment and a Research Grantee of the Center for Long-Term Cybersecurity on several collaborative projects. In graduate school, I was a member of the Algorithmic Fairness and Opacity Working Group and the Biosense Initiative, and completed a Designated Emphasis in Science and Technology Studies.\\nI graduated from the Chicago Public Schools and Brown University, where I studied English Literature and cultural theory with a focus on gender and sexuality. After college, I worked with GLSEN on communications and research into school safety for LGBTQ+ and GNC students, and with Parliamentarians for Global Action on a summit of leaders pursuing sustainable environmental policies. I next spent two and a half years at the Participatory Culture Foundation, first as an Americorps VISTA and then as a Program Director, focusing on partnerships with local media and educational organizations to create open-source curated community video websites. Prior to graduate school, I worked as the Program Manager at the Barnard Center for Research on Women, where I produced events and materials around social justice feminism, including co-organizing the \"Action on Education\" conference and acting as an interim managing editor for the Scholar & Feminist Online.\\nI enjoy running, hiking, learning about new places, reading, and television.\\nPublications\\nFriction, snake oil, and weird countries: Cybersecurity systems could deepen global inequality through regional blocking\\nAnne Jonas and Jenna Burrell.\\nBig Data & Society, 2019.\\nWhen Users Control the Algorithms: values expressed in practices on Twitter\\nJenna Burrell, Zoe Kahn, Anne Jonas, and Daniel Griffin.\\nCSCW, 2019.\\nRecasting justice for internet and online industry research ethics\\nAnna Lauren Hoffmann and Anne Jonas.\\nInternet Research Ethics for the Social Age: New Cases and Challenges, M. Zimmer and K. Kinder-Kuranda (eds.), 2017.", "snippet": "\n", "url": "https://annejonas2.github.io/", "snippet_image": "", "snippet_image_alt": "", "snippet_image_class": "" } ]; window.store = [...posts, ...pages, ...externals];

    Regina Bateson is not a politician, Google

    October 31st, 2022

    Edit: Added Twitter commentary

    Edit: At 5:27pm PT on 2022-11-02, Dr. Bateson tweeted: Omg, it’s officially gone!! Google no longer says I’m a politician!!!.

    Google’s knowledge

    Yet again someone is compelled to take to Twitter to issue a complaint to Google about incorrect information about them in search results and to appeal for correction.1

    This time it is Regina Bateson, an assistant professor at the Graduate School of Public & International Affairs at the University of Ottawa.

    Google is calling her a politician. She isn’t one. She, rightfully, wants it corrected.

    Google search: [Regina Bateson], the knowledge panel data labeling her as a “Politician”, and the top result: Her website, with the following snippetI am a comparative political scientist interested in violence, the rule of law, and threats to rights and democracy. · While I have particular expertise in Latin … [Red markings indicate the politician label is incorrect.]

    This short blog post is partially an attempt to provide “web evidence” to aid their appeal for correction. It is also important to make note of these failures—not just the incorrect information but the work required to correct them. Just yesterday I had a conversation with someone who offhandedly passed on conventional wisdom, the searching-sublime,2 about how easy it was to search for everything. It is important to puncture perceptions of Google omniscience, to add friction to the automation bias and the granting of authority to whatever shows up at the top of Google search results.3 Perhaps reflecting on these will help us stop ‘just googling’ and reimagine what just–reasonable, responsive, responsible–search engines might be.

    The Web’s evidence

    Regina Bateson is not a politician. Dr. Bateson (Ph.D. in Political Science, Yale) is a political scientist and professor at the University of Ottawa. This is documented throughout the web: her faculty page at the University of Ottawa, her personal website, her ORCiD, The Conversation, WBUR (Boston’s NPR news station), etc. In 2014, MIT News also identified her as a political scientist. Though she ran for office once she is not, by most any definition, a politician. The Google-provided label is incorrect, deceptive, and non-representative. Why doesn’t Google correct their search results? Or why does it take so much work and time for corrections to happen?

    Here is @regina_bateson on Twitter (Bateson, 2022):

    Hey @Google, quick FYI: I am not a politician. I ran for office ONCE in 2017-2018, but I’m actually a political scientist, author, etc.

    On Sept. 27 your team agreed to remove the term “politician” from my Knowledge Panel–but it’s still there. Why? How can I change this? HELP!!!

    Addenda

    Twitter commentary

    Quote-tweet from Vivek Krishnamurthy (law professor at University of Ottawa and director of the Samuelson-Glushko Canadian Internet Policy and Public Interest Clinic (CIPPIC)), of a quote-tweet from Regina Bateson, asks about how this, “Google’s failure to correct a false, AI-generated”Knowledge Panel" description of a person", interacts with new and proposed laws:

    Another account mentioned an earlier case where a privacy expert apparently had to go to great lengths, and get media attention, to get Google to correct a knowledge panel that put his photo on a description of someone else with the same name: Leo Kelion (2019) “Google faces winged-monkey privacy protest” in the BBC.

    “Omg, it’s officially gone!! Google no longer says I’m a politician!!!”

    She also tweeted: “I suspect (though can’t prove) this label made my path back into academia harder than it would’ve been otherwise.”

    Well, it was understandable when I was running for office & maybe for a couple months or a yr after. But years 2,3 & 4 were just unnecessary. I suspect (though can’t prove) this label made my path back into academia harder than it would’ve been otherwise. VERY GLAD it’s gone!! 😊

    It has been, she tweeted in September, “years of trying to get it changed”.


    Footnotes

    1. This post is shaped by, but not about, thinking and writing with Emma Lurie for a paper, recently accepted at New Media & Society: “Search quality complaints and imaginary repair: Control in articulations of Google Search” (initially presented at a Data & Society workshop in early 2022: The Social Life of Algorithmic Harms)↩︎

    2. This loose treatment of Google as all-knowing sits in ironic tension with contemporaneous searching-disappointed from perceptions of increasing capture of Google results by spam and commercialization. Like these semi-viral tweets here:

      ↩︎
    3. A tweet of mine from 2017:

    ↩︎

    References

    Bateson, R. (2022). Hey @google, quick fyi: I am not a politician. I ran for office once in 2017-2018, but i’m actually a political scientist, author, etc. On sept. 27 your team agreed to remove the term "politician" from my knowledge panel–but it’s still there. Why? How can i change this? HELP!!! https://twitter.com/regina_bateson/status/1585995090480476160. [bateson2022hey]