Skip to content

Commit bfd1584

Browse files
authored
Merge pull request #15 from code4lib/program-scripts
Adding scripts for converting CSV from program committee to YAML/Markdown
2 parents 4193a0a + 13d5d49 commit bfd1584

File tree

10 files changed

+462
-0
lines changed

10 files changed

+462
-0
lines changed

_data/conf.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,12 @@ days:
6262
date: March 4th
6363
date-data: 2026-03-04T23:59
6464
time: 9AM to 1:15PM
65+
posters: true
6566
- weekday: Thursday
6667
date: March 5th
6768
date-data: 2026-03-05T23:59
6869
time: 9AM to 4:30PM
70+
workshops: true
6971
schedule-note: The main conference will be on Monday, March 2 through Wednesday, March 4, followed by post-conference workshops on Thursday, March 5. Decisions about this year's conference schedule were based on venue availability. Keep an eye on <a href="/schedule/">the schedule</a> for details as the program is finalized.
7072

7173
####################

_scripts/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Program Content Scripts
2+
3+
These scripts take the spreadsheets provided by the Program Committee and convert them
4+
to the YAML and Markdown files expected by Jekyll to add the talks, posters, workshops,
5+
and speaker info to the program.
6+
7+
## Usage:
8+
9+
Each script expects data to look like the CSV files in the `examples` directory, and
10+
expects to be executed with `bundle exec` in the parent directory, e.g.:
11+
12+
```sh
13+
bundle exec _scripts/workshops.rb path/to/workshops.csv
14+
```

_scripts/examples/posters.tsv

Lines changed: 15 additions & 0 deletions
Large diffs are not rendered by default.

_scripts/examples/speakers.csv

Lines changed: 146 additions & 0 deletions
Large diffs are not rendered by default.

_scripts/examples/talks.csv

Lines changed: 79 additions & 0 deletions
Large diffs are not rendered by default.

_scripts/examples/workshops.csv

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"Timestamp","Email Address","speaker1","title","description","requirements","outcomes","Proposed Session Length","time","Email sent ","Replied Back","min","max","speaker2","Co-Present Contact Information"
2+
"11/5/2024 14:51:11","emorgan@nd.edu","Eric Lease Morgan","Modern Alchemy: Hands-On with the Distant Reader","In this hands-on workshop participants will first learn how to use a Web-based system called the Distant Reader to transform sets of unstructured data (like bunches o' journal articles) into structured data, affectionally called &quot;study carrels&quot;. These data sets are amenable to analysis by both people as well as computers. Second, participants will learn how to use both command-line tools as well as GUI applications (like AntConc, OpenRefine, or Gephi) to analyze the data sets. This analysis includes things such as feature extraction, concordancing, topic modeling, full text indexing, semantic indexing, network analysis, etc. In the end, participants will learn of an additional ways to turn data into information -- modern alchemy. ","None, but participants ought to bring their own computer; BYOD","","1/2 Day either AM or PM (3 hours)","am","12/6 - AMM","Yes, 12/9","2","12","",""
3+
"11/7/2024 8:57:39","akorphan@ncsu.edu","Andreas Orphanides","Fail4Lib 2025","Although failure is part and parcel of our professional experience, we often go out of the way to avoid talking about it. When we see failure approaching, we distance ourselves, avert our eyes, or – if we’re in its path – brace for the worst. But failure has intrinsic value and is an essential step on the path to professional and organizational success. And since it’s inevitable, we should learn how to look back on our failures to derive value from them, and how to look ahead so that our past failures can inform our future successes. Fail4Lib is the perennial Code4Lib preconference dedicated to discussing and coming to terms with the failures that we all encounter in our work. It is a safe space for us to explore failure, to talk about our own experiences with failure, and to encourage enlightened risk taking. The goal of Fail4Lib is for participants – and their organizations – to get better at failing gracefully, so that when we do fail, we do so in a way that moves us forward. Both first-timers and Fail4Lib veterans are welcome!","Participants are expected to have experienced failure. At some point.","","1/2 Day either AM or PM (3 hours)","am","12/6 - AMM","Yes. 12/9","10","20-25","",""
4+
"11/9/2024 11:49:02","bess.sadler@princeton.edu","Bess Sadler","Agile4Lib","Although often thought of as a “software methodology,” Agile is more of a mindset, driven by iteration and continuous learning. In this workshop we will introduce participants to the origins of agile, its frameworks and mindset, the How and Why of incremental development and the importance of delivering the most value as a north star. We'll also discuss some of the ways that Agile can be adapted for library culture. Much of the training materials about using Agile assume a corporate setting, but there are ways to make it work in a library context. This will pair well with Fail4Lib.","No background information needed","","1/2 Day either AM or PM (3 hours)","pm","12/6 - AMM","Yes, 12/10","2","20","",""
5+
"11/12/2024 12:36:34","escowles@ticklefish.org","Esmé Cowles","How To Host Code4Lib","Have you ever thought about hosting Code4Lib, but don't know where to start? This workshop will introduce you to the Code4Lib planning process, from putting together a proposal to host, to budgeting and sponsorship, to how the program is built, to the day-to-day logistics that make the conference work. We'll cover the conference's needs for space, food, A/V, and more. Since Code4Lib is a volunteer community, there are dozens of volunteers each year who help with various parts of this work. You'll learn how those committees work, and how it all comes together each year.","N/A","","1/2 Day PM (3 hours)","pm","12/6 - AMM","Yes, 12/6","No minimum","15","",""
6+
"11/14/2024 15:21:08","cgordon@chillco.com","Cary Gordon","Discover the new Islandora and ISLE","Take a walk through the new Islandora. We will go through the new features and architecture, and install ISLE 2 starter kit, the docker-based Islandora package. You will leave with your own local running islandora instance.","You should bring a modern-ish laptop (Mac, Windows or Linux) with at least 8GB RAM (at least 16 GB preferred) on which you have admin privileges to install software. If possible, you should pre-install Docker Desktop, Orbstack or your favorite docker compatible system. You should set up an account on GitHub, if you don't already have one. We will provide chocolate.","","1/2 Day AM (3 hours)","am","12/6 - AMM","","","","",""
7+
"11/19/2024 19:37:46","edunigan@getty.edu","Erin Cecele Dunigan","Hands-On Digital Publishing Workshop with Quire","This workshop serves as an introduction to Quire, an open-source publishing tool developed by Getty and available for anyone to use for free. Quire is not a publishing service or a platform for hosting publications. Instead, it provides users (students, researchers, professors, curators, editors, and more) with the ability to produce multimedia-rich publications for the web. The same files used to create the website can also be used to create a PDF, e-book, and print book, making it the perfect solution for creating long-lasting and discoverable publications. The workshop seeks to break down the tools, formats, and processes necessary for using Quire into approachable, easy-to-understand concepts complemented by hands-on exercises. The workshop kicks off by introducing attendees to the basic concepts of how Quire functions, including learning to operate the command line, using a text editor to store content and images, and writing in Markdown and YAML. These concepts are then implemented as participants get a new project up and running, edit content, and make customizations on their own. Quire does not have a graphic user interface and is less intuitive than other digital publishing options. Our goal is to help people gain confidence in navigating and using a tool that represents a different way of working than they might be used to. We aim for individuals who take this workshop to leave feeling excited to continue experimenting and creating, and we will provide resources for that continued exploration.","Attendees will need a laptop with a Windows or Mac operating system (plus charging cable). They will need to install Quire (https://quire.getty.edu/docs-v1/install-uninstall/) and Visual Studio Code (https://code.visualstudio.com/) in advance. A general knowledge of YAML and Markdown is a plus, but the workshop is designed for absolute beginners.","Participants will not only learn how to use Quire, a tool that enables them to publish in multiple formats, but they will also learn about the command-line, YAML, Markdown, and CSS. The goal of the workshop is for attendees to leave feel empowered by these new skills and ready to tackle a publishing project of their own. ","1/2 Day either AM or PM (3 hours)","pm","12/6 - AMM","Yes, 12/11","3","15-20","Greg Albers – galbers@getty.edu",""
8+
"11/24/2024 21:21:05","shuwan@buffalo.edu","Shu Wan","ChatGPT as Shortcut for Integrating Digital Humanities into the History Classroom","Abstract: Based on ChatGPT-themed pedagogical experiments in a history course at the University at Buffalo, this presentation demonstrates how to use innovative technology in integrating digital humanities (DH) into the history classroom. When teaching the course “China and the World” in the summer of 2023, I assigned students to take distant readings of China-related documents in The Foreign Relations of the United States series with the aid of ChatGPT. The introduction of Word2vec and other popular Natural Language Processing (NPL) algorithms generated by ChatGPT enables students without solid coding skills to analyze the documents quantitatively. The advancement of Generative AI facilitates the integration of DH into traditional history classrooms.","bring laptops into the workshop","","1/2 Day AM (3 hours)","am","12/6 - AMM","Yes, 12/6","","20","",""
9+
"11/26/2024 16:58:53","matt.elliott@utah.edu","Matthew Elliott","Photogrammetry with RealityCapture: A Practical Introduction"," In this comprehensive workshop, participants will delve into the world of photogrammetry using RealityCapture, a leading software in the field. This hands-on session is designed to guide attendees through the entire process of creating high-quality 3D models from photographs. You'll also better understand the history of photogrammetry and the mathematics that make it work. Starting with the fundamentals of photogrammetry, we will explore the capabilities of RealityCapture, including image acquisition with fiduciary markers, input processing, and mesh optimization techniques. By the end of the workshop, participants will have the skills to produce detailed and accurate 3D models for various applications such as gaming, virtual reality, 3D printing, and cultural heritage preservation. Whether you're a beginner or looking to enhance your existing skills, this workshop offers valuable insights and practical experience.","- Basic understanding of photography and computer operations. - A Windows laptop with RealityCapture installed. (Note to organizers: ideally, we would have access to a computer lab with this preinstalled. It is installed with the Epic Game Launcher) - A digital camera or smartphone capable of taking high-resolution photos. - Optional: Prior experience with 3D modeling software (e.g., Blender, Maya) is beneficial but not required.","","1/2 Day either AM or PM (3 hours)","am","12/6 - AMM","Yes, 12/6","2","25","",""
10+
"11/26/2024 19:46:33","sclapp@ccsu.edu","Sharon Clapp","Shinobi Skills: Mastering the Art of Prompt Engineering","Target Audience: Librarians, archivists, developers, and information professionals interested in exploring the practical applications of large language models (LLMs) in library and information science contexts. No prior coding experience is required. Workshop Description: Step into the world of the shinobi (aka, ninja), the legendary agents of stealth and strategy in feudal Japan, and discover how their skills translate to the modern art of prompt engineering. This interactive, hands-on workshop will empower you to become a &quot;Prompt Shinobi,&quot; mastering the techniques to effectively communicate with and control powerful LLMs. Why Shinobi? The shinobi were renowned for their adaptability, resourcefulness, and precision—qualities essential for successful prompt engineering. This workshop draws inspiration from their tools and techniques to create a fun, engaging, and memorable learning experience. Workshop Objectives: By the end of this workshop, participants will be able to: - Understand the fundamental principles of prompt engineering and their relevance to library and information science. - Craft effective prompts for various tasks, including information retrieval, text summarization, code generation, and creative writing. Apply defensive and offensive strategies to mitigate risks and maximize the potential of LLMs. Explore real-world applications of prompt engineering in library settings. Collaborate with peers and share knowledge in a supportive and engaging environment. Workshop Activities: Introduction to Prompt Engineering: A brief overview of prompt engineering, its core principles, and its potential impact on researchers and libraries. Historical context: Exploring the connection between the skills of the shinobi and the art of prompt engineering. Kata Challenges: A series of hands-on exercises focused on mastering fundamental prompt construction techniques. Participants will practice crafting prompts for different tasks and LLMs, receiving immediate feedback and guidance. Kemuridama Challenge: The Art of Misdirection: A challenge focused on using &quot;misdirection&quot; techniques in prompts to achieve specific goals, such as bypassing safety filters (for red-teaming efforts) or generating creative outputs indirectly. Tessen Challenge: The Art of Defense and Offense: Participants will learn how to craft prompts that balance defensive strategies (mitigating risks) with offensive strategies (achieving specific outcomes). Ninja Missions: Collaborative, team-based challenges that simulate real-world library scenarios. Participants will work together to solve problems and achieve objectives using prompt engineering techniques. The Dojo: Dedicated time for open discussion, Q&A, and sharing of ideas and resources. Workshop Format: This workshop will be highly interactive, with a mix of: Short presentations and demonstrations Hands-on exercises and challenges Small group activities and discussions Individual experimentation and reflection Materials: Participants must bring their own laptops (tablets and phones will create a suboptimal experience.) Why this Workshop is Important: Prompt engineering is rapidly becoming an essential skill for librarians and information professionals. This workshop provides a unique and engaging opportunity to build these skills in a fun and supportive environment, drawing inspiration from the rich history and culture of the shinobi. Expected Outcomes: Participants will leave this workshop with a solid foundation in prompt engineering and the confidence to apply these skills in their own work, improving their ability to leverage the power of LLMs for the benefit of their libraries and communities.","You need a robust laptop that will handle multiple browser tabs, must be comfortable with data privacy issues that may arise in the creation and use of accounts for one of the premiere LLM/multimodal generative AI platforms, such as ChatGPT, Claude, Gemini, or Copilot. Free versions are fine, particularly if you pair up with another participant in case you hit limits. No coding skills required.","","1/2 Day PM (3 hours)","pm","12/6- AMM","Yes, 12/10","No minimum","16","",""

_scripts/posters.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/usr/bin/env ruby
2+
3+
require "csv"
4+
require "active_support/all"
5+
6+
# parse _data/conf.yml to get poster session date string
7+
conf = YAML.load_file("_data/conf.yml")
8+
poster_datetime = conf["days"].find {|d| d["posters"]}["date-data"]
9+
poster_date = poster_datetime.gsub(/T.*/, "")
10+
11+
CSV.foreach(ARGV[0], col_sep: "\t", headers: true).each do |row|
12+
title = row["title"]
13+
speakers = row["speakers"]
14+
affiliations = row["affiliations"]
15+
description = row["description"]
16+
17+
fn = "_posts/#{poster_date}-#{title.parameterize}.md"
18+
puts fn
19+
File.open(fn, "w") do |f|
20+
f.puts "---"
21+
f.puts "layout: presentation"
22+
f.puts "type: poster"
23+
f.puts "categories: posters"
24+
f.puts "time: 3:30 PM"
25+
f.puts "startTime: #{poster_datetime}"
26+
f.puts "length: 30"
27+
f.puts "day: 2"
28+
f.puts "location: XXX"
29+
f.puts "speaker-text: \"#{speakers}, #{affiliations}\""
30+
f.puts "title: \"#{title}\""
31+
f.puts "---"
32+
f.puts description
33+
end
34+
end

_scripts/speakers.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env ruby
2+
3+
require "csv"
4+
require "active_support/all"
5+
6+
def parameterize(string, separator: "-")
7+
# Turn unwanted chars into the separator.
8+
parameterized_string = string.downcase.gsub!(/[^a-z0-9\-_]+/, separator)
9+
10+
unless separator.nil? || separator.empty?
11+
re_leading_trailing_separator = /^-|-$/
12+
parameterized_string.gsub!(re_leading_trailing_separator, "".freeze)
13+
end
14+
15+
parameterized_string
16+
end
17+
18+
speakers_yml = "_data/speakers.yml"
19+
speakers = File.file?(speakers_yml) ? speakers = YAML.load_file(speakers_yml) : []
20+
21+
CSV.foreach(ARGV[0], headers: true).each do |row|
22+
name = row["name"]
23+
id = parameterize(name)
24+
slack = row["slack"]
25+
puts id + ": " + name
26+
27+
data = speakers.select { |x| x["id"] == id }.first || {}
28+
data["id"] = id if data.empty?
29+
data["keynote"] = false
30+
["name", "pronouns", "position-title", "institution", "bio", "slack"].each do |k|
31+
data[k] = data[k] || row[k]
32+
end
33+
speakers.push(data)
34+
35+
if row['pic']
36+
ext = row["pic"].gsub(/.*\./, "") || "jpg"
37+
data["image_src"] = "/assets/img/speakers/#{id}.#{ext}"
38+
end
39+
end
40+
41+
File.open(speakers_yml, "w") { |file| file.write(speakers.to_yaml) }

_scripts/talks.rb

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/usr/bin/env ruby
2+
3+
require "csv"
4+
require "active_support/all"
5+
6+
def parameterize(string, separator: "-")
7+
# Turn unwanted chars into the separator.
8+
parameterized_string = string.downcase.gsub!(/[^a-z0-9\-_]+/, separator)
9+
10+
unless separator.nil? || separator.empty?
11+
re_leading_trailing_separator = /^-|-$/
12+
parameterized_string.gsub!(re_leading_trailing_separator, "".freeze)
13+
end
14+
15+
parameterized_string
16+
end
17+
18+
CSV.foreach(ARGV[0], headers: true).each do |row|
19+
title = row["title"]
20+
speaker1 = row["name1"]
21+
speaker2 = row["name2"]
22+
speaker3 = row["name3"]
23+
description = row["description"]
24+
time = row["time"]
25+
length = row["length"]
26+
day = row["day"]
27+
ampm = row["ampm"]
28+
dayno = row["dayno"]
29+
group = row["group"]
30+
spot = row["spot"]
31+
32+
fn = "_posts/#{day}-#{parameterize(title)}.md"
33+
puts fn
34+
File.open(fn, "w") do |f|
35+
f.puts "---"
36+
f.puts "layout: presentation"
37+
f.puts "type: talk"
38+
f.puts "categories: talks"
39+
f.puts "time: #{time} #{ampm}"
40+
f.puts "startTime: #{day}T#{time}"
41+
f.puts "length: #{length}"
42+
f.puts "day: #{dayno}"
43+
f.puts "group: #{group}"
44+
f.puts "spot: #{spot}"
45+
f.puts "location: frist" # XXX is this used?
46+
f.puts "speakers:"
47+
f.puts "- #{parameterize(speaker1)}"
48+
f.puts "- #{parameterize(speaker2)}" if speaker2
49+
f.puts "- #{parameterize(speaker3)}" if speaker3
50+
speakerlist = speaker1
51+
speakerlist += ", " + speaker2 if speaker2
52+
speakerlist += ", " + speaker3 if speaker3
53+
f.puts "speaker-text: \"#{speakerlist.gsub(/"/, "&quot;")}\""
54+
f.puts "title: \"#{title}\""
55+
f.puts "---"
56+
f.puts description
57+
end
58+
end

0 commit comments

Comments
 (0)